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.getRetMsg() != null) { Field field = new Field(new FieldAttr(FieldType.FIELD_STRING, 10, 0)); field.setValue(source.getRetMsg()); body.addField("RET_MSG", 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; } } }