|
|
@@ -0,0 +1,313 @@
|
|
|
+package com.xunmei.sms.utils;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.RandomUtil;
|
|
|
+import com.dc.eai.data.CompositeData;
|
|
|
+import com.dc.eai.data.Field;
|
|
|
+import com.dc.eai.data.FieldAttr;
|
|
|
+import com.dc.eai.data.FieldType;
|
|
|
+import com.xunmei.system.api.vo.SmsInfoVo;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+
|
|
|
+import java.util.Date;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 短信工具类
|
|
|
+ */
|
|
|
+public class SmsUtil {
|
|
|
+
|
|
|
+ private static Logger logger = LoggerFactory.getLogger(SmsUtil.class);
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 消费者系统流水号格式:系统编号(5位)+本系统交易日期(8位:YYYYMMDD)+业务流水序号(10位)
|
|
|
+ * @param systemCode 系统编号
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getConsumerSeqNo(String systemCode,String tranDate){
|
|
|
+ StringBuffer sb = new StringBuffer();
|
|
|
+
|
|
|
+ //系统编号
|
|
|
+ sb.append(systemCode);
|
|
|
+
|
|
|
+ //本系统交易日期
|
|
|
+ sb.append(tranDate);
|
|
|
+
|
|
|
+ //业务流水序号
|
|
|
+ String seqNo = RandomUtil.randomNumbers(10);
|
|
|
+ sb.append(seqNo);
|
|
|
+
|
|
|
+ return sb.toString();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成短信请求系统头
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static CompositeData getSysHead(String systemCode,String systemName,String serviceCode,String serviceScene){
|
|
|
+ CompositeData sysData = new CompositeData();
|
|
|
+
|
|
|
+ Date nowTime = new Date();
|
|
|
+
|
|
|
+ String yyyyMMdd = DateUtil.format(nowTime, "yyyyMMdd");
|
|
|
+
|
|
|
+ String hhmmss = DateUtil.format(nowTime, "hhmmss");
|
|
|
+
|
|
|
+ //发送方机构ID,当前系统没有设置为空
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue("");
|
|
|
+ sysData.addField("BRANCH_ID", field);
|
|
|
+
|
|
|
+ //消费者系统编号 ESB分配的系统编号
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue(systemCode);
|
|
|
+ sysData.addField("CONSUMER_ID", field);
|
|
|
+
|
|
|
+ //消费者系统流水号(直接请求系统) 系统编号(5位)+本系统交易日期(8位:YYYYMMDD)+业务流水序号(10位)
|
|
|
+ String consumerSeqNo = SmsUtil.getConsumerSeqNo(systemCode,yyyyMMdd);
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue(consumerSeqNo);
|
|
|
+ sysData.addField("CONSUMER_SEQ_NO", field);
|
|
|
+
|
|
|
+ //文件标识 0-非文件,1-文件
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue("0");
|
|
|
+ sysData.addField("FILE_FLAG", field);
|
|
|
+
|
|
|
+ //原始发起方系统编号 和消费者系统编号一致
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue(systemCode);
|
|
|
+ sysData.addField("ORG_SYS_ID", field);
|
|
|
+
|
|
|
+ //原始发起方系统流水号 和 消费者系统编号一致
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue(consumerSeqNo);
|
|
|
+ sysData.addField("ORG_SYS_SEQ_NO", field);
|
|
|
+
|
|
|
+ //服务代码
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue(serviceCode);
|
|
|
+ sysData.addField("SERVICE_CODE", field);
|
|
|
+
|
|
|
+ //服务场景
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue(serviceScene);
|
|
|
+ sysData.addField("SERVICE_SCENE", field);
|
|
|
+
|
|
|
+ //发送方网点号,默认设置为空
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue("");
|
|
|
+ sysData.addField("SUB_BRANCH_ID", field);
|
|
|
+
|
|
|
+ //交易日期 yyyyMMdd
|
|
|
+
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue(yyyyMMdd);
|
|
|
+ sysData.addField("TRAN_DATE", field);
|
|
|
+
|
|
|
+ //交易时间 hh:mm:ss
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue(hhmmss);
|
|
|
+ sysData.addField("TRAN_TIMESTAMP", field);
|
|
|
+
|
|
|
+ //交易标志 0-正常,1-补正,2-冲销
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue("0");
|
|
|
+ sysData.addField("TRAN_FLAG", field);
|
|
|
+
|
|
|
+ //交易模式
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue("ONLINE");
|
|
|
+ sysData.addField("TRAN_MODE", field);
|
|
|
+
|
|
|
+
|
|
|
+ //交易柜员号,默认为空
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue("");
|
|
|
+ sysData.addField("USER_ID", field);
|
|
|
+
|
|
|
+ //交易系统名
|
|
|
+ field = new Field(new FieldAttr(FieldType.FIELD_STRING, 15, 0));
|
|
|
+ field.setValue(systemName);
|
|
|
+ sysData.addField("WS_ADDR", field);
|
|
|
+
|
|
|
+ return sysData;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构建应用消息体
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static CompositeData getAppHead(){
|
|
|
+ CompositeData appData = new CompositeData();
|
|
|
+
|
|
|
+ //KEY_MSG_FLAG 0-无,1-多页式
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 1, 0));
|
|
|
+ field.setValue("0");
|
|
|
+ appData.addField("KEY_MSG_FLAG", field);
|
|
|
+
|
|
|
+ return appData;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构建发送消息体
|
|
|
+ * @param source
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static CompositeData getBody(SmsInfoVo source){
|
|
|
+ CompositeData body = new CompositeData();
|
|
|
+
|
|
|
+ if (source.getTranType() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 6, 0));
|
|
|
+ field.setValue(source.getTranType());
|
|
|
+ body.addField("TRAN_TYPE", field);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (source.getBelongBranchId() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 9, 0));
|
|
|
+ field.setValue(source.getBelongBranchId());
|
|
|
+ body.addField("BELONG_BRANCH_ID", field);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (source.getCustNo() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 22, 0));
|
|
|
+ field.setValue(source.getCustNo());
|
|
|
+ body.addField("CUST_NO", field);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (source.getCustName() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 50, 0));
|
|
|
+ field.setValue(source.getCustNo());
|
|
|
+ body.addField("CUST_NAME", field);
|
|
|
+ }
|
|
|
+ if (source.getSex() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 2, 0));
|
|
|
+ field.setValue(source.getSex());
|
|
|
+ body.addField("SEX", field);
|
|
|
+ }
|
|
|
+ if (source.getMobile() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 20, 0));
|
|
|
+ field.setValue(source.getMobile());
|
|
|
+ body.addField("MOBILE", field);
|
|
|
+ }
|
|
|
+ if (source.getAcctNo() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 32, 0));
|
|
|
+ field.setValue(source.getAcctNo());
|
|
|
+ body.addField("ACCT_NO", field);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (source.getOccurDate() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 10, 0));
|
|
|
+ field.setValue(source.getOccurDate());
|
|
|
+ body.addField("OCCUR_DATE", field);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (source.getOccurTime() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 10, 0));
|
|
|
+ field.setValue(source.getOccurTime());
|
|
|
+ body.addField("OCCUR_TIME", field);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (source.getTranAmt1() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 17, 0));
|
|
|
+ field.setValue(source.getTranAmt1());
|
|
|
+ body.addField("TRAN_AMT1", field);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (source.getTranAmt2() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 17, 0));
|
|
|
+ field.setValue(source.getTranAmt2());
|
|
|
+ body.addField("TRAN_AMT2", field);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (source.getTranAmt3() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 17, 0));
|
|
|
+ field.setValue(source.getTranAmt3());
|
|
|
+ body.addField("TRAN_AMT3", field);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (source.getPayoutStoreBit1() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 1, 0));
|
|
|
+ field.setValue(source.getPayoutStoreBit1());
|
|
|
+ body.addField("PAYOUT_STORE_BIT1", field);
|
|
|
+ }
|
|
|
+ if (source.getPayoutStoreBit2() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 1, 0));
|
|
|
+ field.setValue(source.getPayoutStoreBit2());
|
|
|
+ body.addField("PAYOUT_STORE_BIT2", field);
|
|
|
+ }
|
|
|
+ if (source.getPayoutStoreBit3() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 1, 0));
|
|
|
+ field.setValue(source.getPayoutStoreBit3());
|
|
|
+ body.addField("PAYOUT_STORE_BIT3", field);
|
|
|
+ }
|
|
|
+ if (source.getTranRemark() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 30, 0));
|
|
|
+ field.setValue(source.getTranRemark());
|
|
|
+ body.addField("TRAN_REMARK", field);
|
|
|
+ }
|
|
|
+ if (source.getAcctStatus() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 100, 0));
|
|
|
+ field.setValue(source.getAcctStatus());
|
|
|
+ body.addField("ACCT_STATUS", field);
|
|
|
+ }
|
|
|
+ if (source.getChannelType() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 2, 0));
|
|
|
+ field.setValue(source.getChannelType());
|
|
|
+ body.addField("CHANNEL_TYPE", field);
|
|
|
+ }
|
|
|
+ if (source.getBak1() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 50, 0));
|
|
|
+ field.setValue(source.getBak1());
|
|
|
+ body.addField("BAK1", field);
|
|
|
+ }
|
|
|
+ if (source.getBak2() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 50, 0));
|
|
|
+ field.setValue(source.getBak2());
|
|
|
+ body.addField("BAK2", field);
|
|
|
+ }
|
|
|
+ if (source.getBak3() != null) {
|
|
|
+ Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 50, 0));
|
|
|
+ field.setValue(source.getBak3());
|
|
|
+ body.addField("BAK3", field);
|
|
|
+ }
|
|
|
+
|
|
|
+ return body;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构建发送消息体
|
|
|
+ * @param source 构建body实体
|
|
|
+ * @param systemCode 系统编号
|
|
|
+ * @param systemName 系统名称
|
|
|
+ * @param serviceCode 服务code
|
|
|
+ * @param serviceScene 服务场景
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static CompositeData createSmsBody(SmsInfoVo source, String systemCode, String systemName, String serviceCode, String serviceScene) {
|
|
|
+ try {
|
|
|
+ /***********************************************************************
|
|
|
+ * *********构造请求数据,定义相关结构体*******
|
|
|
+ **********************************************************************/
|
|
|
+ CompositeData reqData = new CompositeData();
|
|
|
+ //构建服务
|
|
|
+ CompositeData sysHead = getSysHead(systemCode, systemName, serviceCode, serviceScene);
|
|
|
+ CompositeData appHead = getAppHead();
|
|
|
+ CompositeData body = getBody(source);
|
|
|
+ reqData.addStruct("SYS_HEAD", sysHead);
|
|
|
+ reqData.addStruct("APP_HEAD", appHead);
|
|
|
+ reqData.addStruct("BODY", body);
|
|
|
+
|
|
|
+ return reqData;
|
|
|
+ } catch (Exception ex) {
|
|
|
+ logger.error("【发送短信】转换数据异常", ex);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|