作者 朱兆平

转关运抵报文生成发送接口优化

@@ -158,10 +158,41 @@ customs: @@ -158,10 +158,41 @@ customs:
158 # 邮箱客户端id 158 # 邮箱客户端id
159 hostId: DXPENT0000460002 159 hostId: DXPENT0000460002
160 # 当前操作员ic卡证书号 160 # 当前操作员ic卡证书号
161 - certNo: 111 161 + certNo: DXPENT0000460002
162 162
163 sso: 163 sso:
164 witheIP: 10.5.14.108,10.5.14.109,10.5.14.110 164 witheIP: 10.5.14.108,10.5.14.109,10.5.14.110
  165 +mq:
  166 + dir:
  167 + # 从mq队列读取存储到本地的路径
  168 + saveXml-dir:
  169 + # 从本地路径读取报文路径 发送的MQ队列
  170 + sendXml-dir: send
  171 + needSend: true
  172 + queue:
  173 + #发送mq队列名称
  174 + send-to-mq: response.transarrive
  175 + #读取mq队列名称
  176 + read-from-mq: send.transarrive
  177 + exchange:
  178 + #TCS回执发送到此交换,交换再把回执消息同步到其他配置的回执订阅队列
  179 + #交换名称
  180 + name: cus.arrivetrans.send.broadcast
  181 + #交换类型
  182 + type: fanout
  183 + #routing key名称,此处为空,所有绑定交换的队列都被广播
  184 + routing-key: transarrive
  185 + connection:
  186 + # ip: 218.28.199.134
  187 + # port: 8004
  188 + # vHost: NMMS
  189 + # username: tianbo
  190 + # password: vmvnv1v2VV
  191 + ip: 192.168.1.63
  192 + port: 5672
  193 + vHost: NMMS
  194 + username: admin
  195 + password: admin
165 info: 196 info:
166 version: 1.0 197 version: 1.0
167 description: "新舱单辅助管理服务-统一认证、转运管理、提前运抵等" 198 description: "新舱单辅助管理服务-统一认证、转运管理、提前运抵等"
@@ -12,18 +12,19 @@ @@ -12,18 +12,19 @@
12 </parent> 12 </parent>
13 <groupId>com.tianbo</groupId> 13 <groupId>com.tianbo</groupId>
14 <artifactId>nmms-manage</artifactId> 14 <artifactId>nmms-manage</artifactId>
15 - <version>1.0-SNAPSHOT</version> 15 + <version>1.2-SNAPSHOT</version>
16 <name>nmms-manage</name> 16 <name>nmms-manage</name>
17 <description>nmms management system</description> 17 <description>nmms management system</description>
18 <properties> 18 <properties>
19 - <druid.version>1.1.9</druid.version> 19 + <druid.version>1.2.8</druid.version>
20 <spring-cloud.version>Greenwich.BUILD-SNAPSHOT</spring-cloud.version> 20 <spring-cloud.version>Greenwich.BUILD-SNAPSHOT</spring-cloud.version>
21 <lombok_sersion>1.18.6</lombok_sersion> 21 <lombok_sersion>1.18.6</lombok_sersion>
22 <fastJson_version>1.2.75</fastJson_version> 22 <fastJson_version>1.2.75</fastJson_version>
23 <swagger2_version>2.9.2</swagger2_version> 23 <swagger2_version>2.9.2</swagger2_version>
24 - <spring_tomcat_version>9.0.35</spring_tomcat_version>  
25 - <logback.verion>1.2.9</logback.verion>  
26 - <jackson.verion>2.10.5</jackson.verion> 24 + <spring_tomcat_version>9.0.56</spring_tomcat_version>
  25 + <logback.verion>1.2.10</logback.verion>
  26 + <jackson.verion>2.13.1</jackson.verion>
  27 + <xstream.verion>1.4.18</xstream.verion>
27 </properties> 28 </properties>
28 <dependencies> 29 <dependencies>
29 <!--spring boot--> 30 <!--spring boot-->
@@ -34,7 +35,7 @@ @@ -34,7 +35,7 @@
34 <dependency> 35 <dependency>
35 <groupId>org.mybatis.spring.boot</groupId> 36 <groupId>org.mybatis.spring.boot</groupId>
36 <artifactId>mybatis-spring-boot-starter</artifactId> 37 <artifactId>mybatis-spring-boot-starter</artifactId>
37 - <version>1.3.2</version> 38 + <version>2.2.2</version>
38 </dependency> 39 </dependency>
39 <dependency> 40 <dependency>
40 <groupId>org.springframework.boot</groupId> 41 <groupId>org.springframework.boot</groupId>
@@ -80,7 +81,7 @@ @@ -80,7 +81,7 @@
80 <dependency> 81 <dependency>
81 <groupId>com.thoughtworks.xstream</groupId> 82 <groupId>com.thoughtworks.xstream</groupId>
82 <artifactId>xstream</artifactId> 83 <artifactId>xstream</artifactId>
83 - <version>1.4.17</version> 84 + <version>${xstream.verion}</version>
84 </dependency> 85 </dependency>
85 <!--<fastJson_version>1.2.75</fastJson_version>--> 86 <!--<fastJson_version>1.2.75</fastJson_version>-->
86 <dependency> 87 <dependency>
@@ -129,11 +130,6 @@ @@ -129,11 +130,6 @@
129 <version>${druid.version}</version> 130 <version>${druid.version}</version>
130 </dependency> 131 </dependency>
131 <dependency> 132 <dependency>
132 - <groupId>org.mybatis</groupId>  
133 - <artifactId>mybatis</artifactId>  
134 - <version>3.4.6</version>  
135 - </dependency>  
136 - <dependency>  
137 <groupId>com.github.pagehelper</groupId> 133 <groupId>com.github.pagehelper</groupId>
138 <artifactId>pagehelper-spring-boot-starter</artifactId> 134 <artifactId>pagehelper-spring-boot-starter</artifactId>
139 <version>1.2.5</version> 135 <version>1.2.5</version>
@@ -5,6 +5,7 @@ import com.tianbo.analysis.model.MANIFEST_AIR_CHANGE; @@ -5,6 +5,7 @@ import com.tianbo.analysis.model.MANIFEST_AIR_CHANGE;
5 import com.tianbo.analysis.model.ResultJson; 5 import com.tianbo.analysis.model.ResultJson;
6 import com.tianbo.analysis.model.TRANSTOARRIVEEXPORT; 6 import com.tianbo.analysis.model.TRANSTOARRIVEEXPORT;
7 import com.tianbo.analysis.service.TransArriveExportService; 7 import com.tianbo.analysis.service.TransArriveExportService;
  8 +import com.tianbo.analysis.tools.TransArriveTools;
8 import com.tianbo.util.Date.DateUtil; 9 import com.tianbo.util.Date.DateUtil;
9 import io.swagger.annotations.Api; 10 import io.swagger.annotations.Api;
10 import io.swagger.annotations.ApiOperation; 11 import io.swagger.annotations.ApiOperation;
@@ -25,8 +26,6 @@ public class TransArriveExportController { @@ -25,8 +26,6 @@ public class TransArriveExportController {
25 @ApiOperation(value = "新增转关运抵申报") 26 @ApiOperation(value = "新增转关运抵申报")
26 @PostMapping("/addTrans") 27 @PostMapping("/addTrans")
27 public ResultJson addTrans(@RequestBody TRANSTOARRIVEEXPORT transtoarriveexport){ 28 public ResultJson addTrans(@RequestBody TRANSTOARRIVEEXPORT transtoarriveexport){
28 - transtoarriveexport.setAutoid(UUID.randomUUID().toString());  
29 - transtoarriveexport.setCreattime(new Date());  
30 int result=transArriveExportService.addTransArriveExport(transtoarriveexport); 29 int result=transArriveExportService.addTransArriveExport(transtoarriveexport);
31 return result>0?new ResultJson("200","新增转关运抵申报成功!"):new ResultJson("201","新增转关运抵申报失败!"); 30 return result>0?new ResultJson("200","新增转关运抵申报成功!"):new ResultJson("201","新增转关运抵申报失败!");
32 } 31 }
  1 +package com.tianbo.analysis.controller;
  2 +
  3 +import com.github.pagehelper.PageInfo;
  4 +import com.tianbo.analysis.dao.TransToArriveExportResonseDao;
  5 +import com.tianbo.analysis.model.ResultJson;
  6 +import com.tianbo.analysis.model.TRANSTOARRIVEEXPORT;
  7 +import com.tianbo.analysis.model.TransToArriveExportResonse;
  8 +import com.tianbo.analysis.service.TransArriveExportService;
  9 +import com.tianbo.util.Date.DateUtil;
  10 +import io.swagger.annotations.Api;
  11 +import io.swagger.annotations.ApiOperation;
  12 +import org.apache.commons.lang.StringUtils;
  13 +import org.springframework.beans.factory.annotation.Autowired;
  14 +import org.springframework.web.bind.annotation.*;
  15 +
  16 +import javax.annotation.Resource;
  17 +import java.util.Date;
  18 +import java.util.List;
  19 +
  20 +@Api(description = "转关运抵申报")
  21 +@RestController
  22 +@RequestMapping("/trans/log")
  23 +public class TransArriveExportResponseController {
  24 +
  25 + @Resource
  26 + TransToArriveExportResonseDao mydao;
  27 +
  28 + @ApiOperation(value = "查询申报回执")
  29 + @GetMapping("/getByAutoid")
  30 + public ResultJson<List<TransToArriveExportResonse>> selectPrediction(@RequestParam(value = "autoid", required = true) String clientseqno){
  31 +
  32 + List<TransToArriveExportResonse> r = mydao.selectByClientseqno(clientseqno);
  33 + return new ResultJson("200","success",r);
  34 + }
  35 +
  36 +}
@@ -17,6 +17,8 @@ public interface TRANSTOARRIVEEXPORTMapper { @@ -17,6 +17,8 @@ public interface TRANSTOARRIVEEXPORTMapper {
17 int updateByPrimaryKeySelective(TRANSTOARRIVEEXPORT record); 17 int updateByPrimaryKeySelective(TRANSTOARRIVEEXPORT record);
18 18
19 int updateByPrimaryKey(TRANSTOARRIVEEXPORT record); 19 int updateByPrimaryKey(TRANSTOARRIVEEXPORT record);
  20 + //更新发送状态
  21 + int updateStatusByPrimaryKey(TRANSTOARRIVEEXPORT record);
20 22
21 List<TRANSTOARRIVEEXPORT> selectTrans(TRANSTOARRIVEEXPORT record); 23 List<TRANSTOARRIVEEXPORT> selectTrans(TRANSTOARRIVEEXPORT record);
22 24
  1 +package com.tianbo.analysis.dao;
  2 +
  3 +import com.tianbo.analysis.model.TransToArriveExportResonse;
  4 +
  5 +import java.util.List;
  6 +
  7 +public interface TransToArriveExportResonseDao {
  8 + int deleteByPrimaryKey(String autoid);
  9 +
  10 + int insert(TransToArriveExportResonse record);
  11 +
  12 + int insertSelective(TransToArriveExportResonse record);
  13 +
  14 + TransToArriveExportResonse selectByPrimaryKey(String autoid);
  15 +
  16 + List<TransToArriveExportResonse> selectByClientseqno(String autoid);
  17 +
  18 +
  19 + int updateByPrimaryKeySelective(TransToArriveExportResonse record);
  20 +
  21 + int updateByPrimaryKey(TransToArriveExportResonse record);
  22 +}
  1 +package com.tianbo.analysis.exception;
  2 +
  3 +public class TransArriveException extends Exception {
  4 +
  5 + public TransArriveException(){
  6 + super();
  7 + }
  8 +
  9 + public TransArriveException(String errMessage){
  10 + super(errMessage);
  11 + }
  12 +
  13 + public TransArriveException(String message, Throwable cause) {
  14 + super(message, cause);
  15 + }
  16 +
  17 + public TransArriveException(Throwable cause) {
  18 + super(cause);
  19 + }
  20 +}
@@ -12,6 +12,7 @@ import lombok.Data; @@ -12,6 +12,7 @@ import lombok.Data;
12 */ 12 */
13 @Data 13 @Data
14 public class SysMenu extends VUERouter implements Serializable { 14 public class SysMenu extends VUERouter implements Serializable {
  15 +
15 private Integer id; 16 private Integer id;
16 17
17 /** 18 /**
  1 +package com.tianbo.analysis.model;
  2 +
  3 +import io.swagger.annotations.ApiModel;
  4 +import io.swagger.annotations.ApiModelProperty;
  5 +import java.io.Serializable;
  6 +import java.util.Date;
  7 +import lombok.Data;
  8 +
  9 +/**
  10 + * TRANS_TO_ARRIVE_EXPORT_RESONSE
  11 + * @author
  12 + */
  13 +@ApiModel(value="com.tianbo.analysis.model.TransToArriveExportResonse转关运抵回执表")
  14 +@Data
  15 +public class TransToArriveExportResonse implements Serializable {
  16 + private String autoid;
  17 +
  18 + /**
  19 + * 版本
  20 + */
  21 + @ApiModelProperty(value="版本")
  22 + private String ver;
  23 +
  24 + /**
  25 + * 海关统一编号 导入错误时回执没有编号
  26 + */
  27 + @ApiModelProperty(value="海关统一编号 导入错误时回执没有编号")
  28 + private String seqno;
  29 +
  30 + /**
  31 + * 客户端统一编号
  32 + */
  33 + @ApiModelProperty(value="客户端统一编号")
  34 + private String clientseqno;
  35 +
  36 + /**
  37 + * 客户端导入回执状态码 0=正常 1=失败
  38 + */
  39 + @ApiModelProperty(value="客户端导入回执状态码 0=正常 1=失败")
  40 + private String responsecode;
  41 +
  42 + /**
  43 + * 客户端导入回执内容
  44 +处理成功时为空,处理失败时为错误原因。
  45 + */
  46 + @ApiModelProperty(value="客户端导入回执内容处理成功时为空,处理失败时为错误原因。")
  47 + private String responsemessage;
  48 +
  49 + /**
  50 + * 海关回执内容,审核备注
  51 + */
  52 + @ApiModelProperty(value="海关回执内容,审核备注")
  53 + private String note;
  54 +
  55 + /**
  56 + * 海关处理结果代码S=SUCCESS F=FAILD
  57 + */
  58 + @ApiModelProperty(value="海关处理结果代码S=SUCCESS F=FAILD")
  59 + private String procresult;
  60 +
  61 + /**
  62 + * 海关回执下发时间
  63 + */
  64 + @ApiModelProperty(value="海关回执下发时间")
  65 + private Date procdate;
  66 +
  67 + /**
  68 + * 回执接收时间,业务数据入库时间
  69 + */
  70 + @ApiModelProperty(value="回执接收时间,业务数据入库时间")
  71 + private Date responsedate;
  72 +
  73 + /**
  74 + * 操作人
  75 + */
  76 + @ApiModelProperty(value="操作人")
  77 + private String operator;
  78 +
  79 + /**
  80 + * 发送件数
  81 + */
  82 + @ApiModelProperty(value="发送件数")
  83 + private String pcs;
  84 +
  85 + /**
  86 + * 发送重量
  87 + */
  88 + @ApiModelProperty(value="发送重量")
  89 + private String wgt;
  90 +
  91 + /**
  92 + * 业务类型 进口 出口
  93 + */
  94 + @ApiModelProperty(value="业务类型 进口 出口")
  95 + private String type;
  96 +
  97 + private static final long serialVersionUID = 1L;
  98 +}
  1 +package com.tianbo.analysis.service;
  2 +
  3 +public interface MQ {
  4 + boolean send(String message);
  5 + void get();
  6 +}
  1 +package com.tianbo.analysis.service.imp;
  2 +
  3 +import com.tianbo.analysis.service.MQ;
  4 +import com.tianbo.util.RabitMq.exchange.ExSendMsg;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.apache.commons.io.FileUtils;
  7 +import org.springframework.beans.factory.annotation.Value;
  8 +import org.springframework.stereotype.Service;
  9 +
  10 +@Service
  11 +@Slf4j
  12 +public class MQImpl implements MQ {
  13 +
  14 + //回执读取目录
  15 + @Value("${mq.connection.ip}")
  16 + private String mqIp;
  17 +
  18 + @Value("${mq.connection.port}")
  19 + private int mqPort;
  20 +
  21 + @Value("${mq.connection.vHost}")
  22 + private String mqVhost;
  23 +
  24 + @Value("${mq.connection.username}")
  25 + private String mqUsername;
  26 +
  27 + @Value("${mq.connection.password}")
  28 + private String mqPassword;
  29 +
  30 + @Value("${mq.queue.send-to-mq}")
  31 + private String queueName;
  32 +
  33 + @Value("${mq.exchange.name}")
  34 + private String exchangeName;
  35 +
  36 + @Value("${mq.exchange.type}")
  37 + private String exchangeType;
  38 +
  39 + @Value("${mq.exchange.routing-key}")
  40 + private String routingName;
  41 +
  42 + @Value("${mq.needSend}")
  43 + private boolean mqNeedSend;
  44 +
  45 + @Override
  46 + public boolean send(String message) {
  47 + try{
  48 + if (mqNeedSend){
  49 + boolean mqSendResult = ExSendMsg.sendMsg(
  50 + exchangeName,
  51 + exchangeType,
  52 + routingName,
  53 + queueName,
  54 + message,
  55 + mqIp,
  56 + mqPort,
  57 + mqVhost,
  58 + mqUsername,
  59 + mqPassword
  60 + );
  61 + if (mqSendResult){
  62 + log.info("转发到MQ成功");
  63 + }else{
  64 + log.info("转发到MQ失败");
  65 + }
  66 +
  67 + return mqSendResult;
  68 + }
  69 + return false;
  70 +
  71 + } catch (Exception e){
  72 + log.error("mq读写失败",e);
  73 + return false;
  74 + }
  75 + }
  76 +
  77 + @Override
  78 + public void get() {
  79 +
  80 + }
  81 +}
@@ -4,10 +4,16 @@ import com.github.pagehelper.PageHelper; @@ -4,10 +4,16 @@ import com.github.pagehelper.PageHelper;
4 import com.github.pagehelper.PageInfo; 4 import com.github.pagehelper.PageInfo;
5 import com.tianbo.analysis.config.CustomsProperties; 5 import com.tianbo.analysis.config.CustomsProperties;
6 import com.tianbo.analysis.dao.TRANSTOARRIVEEXPORTMapper; 6 import com.tianbo.analysis.dao.TRANSTOARRIVEEXPORTMapper;
  7 +import com.tianbo.analysis.dao.TransToArriveExportResonseDao;
  8 +import com.tianbo.analysis.exception.FFMResolveException;
  9 +import com.tianbo.analysis.exception.TransArriveException;
7 import com.tianbo.analysis.model.MANIFEST_AIR_CHANGE; 10 import com.tianbo.analysis.model.MANIFEST_AIR_CHANGE;
8 import com.tianbo.analysis.model.ResultJson; 11 import com.tianbo.analysis.model.ResultJson;
9 import com.tianbo.analysis.model.TRANSTOARRIVEEXPORT; 12 import com.tianbo.analysis.model.TRANSTOARRIVEEXPORT;
  13 +import com.tianbo.analysis.model.TransToArriveExportResonse;
  14 +import com.tianbo.analysis.service.MQ;
10 import com.tianbo.analysis.service.TransArriveExportService; 15 import com.tianbo.analysis.service.TransArriveExportService;
  16 +import com.tianbo.analysis.tools.TransArriveTools;
11 import com.tianbo.analysis.tools.XmlTools; 17 import com.tianbo.analysis.tools.XmlTools;
12 import com.tianbo.util.Date.DateUtil; 18 import com.tianbo.util.Date.DateUtil;
13 import lombok.extern.slf4j.Slf4j; 19 import lombok.extern.slf4j.Slf4j;
@@ -44,11 +50,22 @@ public class TransArriveExportImpl implements TransArriveExportService { @@ -44,11 +50,22 @@ public class TransArriveExportImpl implements TransArriveExportService {
44 @Autowired 50 @Autowired
45 private CustomsProperties customsProperties; 51 private CustomsProperties customsProperties;
46 52
47 - @Value("${customs.transarrive.xml-save}")  
48 - private String saveXmlForSendDir; 53 + @Autowired
  54 + private MQ mq;
  55 +
  56 + @Resource
  57 + TransToArriveExportResonseDao toArriveExportResonseDao;
  58 +
  59 +
  60 +
49 61
50 @Override 62 @Override
51 public int addTransArriveExport(TRANSTOARRIVEEXPORT transtoarriveexport) { 63 public int addTransArriveExport(TRANSTOARRIVEEXPORT transtoarriveexport) {
  64 + // transtoarriveexport.setAutoid(UUID.randomUUID().toString());
  65 + String id = TransArriveTools.getClientseqno();
  66 + transtoarriveexport.setAutoid(id);
  67 + transtoarriveexport.setClientseqno(id);
  68 + transtoarriveexport.setCreattime(new Date());
52 return mapper.insertSelective(transtoarriveexport); 69 return mapper.insertSelective(transtoarriveexport);
53 } 70 }
54 71
@@ -72,17 +89,21 @@ public class TransArriveExportImpl implements TransArriveExportService { @@ -72,17 +89,21 @@ public class TransArriveExportImpl implements TransArriveExportService {
72 89
73 @Override 90 @Override
74 public ResultJson send(TRANSTOARRIVEEXPORT record) { 91 public ResultJson send(TRANSTOARRIVEEXPORT record) {
  92 + //签名信息
  93 + String sign = "kUNHDHVG1b72ZIrN8voIGUr+2JRITIo5FlusuSQCMerhV5GEGg9Z42L5F28MM+4gFL6CQgH2JPmdRdHAYIKJa89fdxGnHE3QSVd8dDUxx7q7AUUDzOg25OVB3ULywb8ruivj6tAR0daYkU3ACzWMYZoH4BNEMh4Za6DI7lBNf04=";
75 //设置海关相关信息配置 94 //设置海关相关信息配置
  95 + record.setSign(sign);
76 record.setApplycode(customsProperties.getApplyCode()); 96 record.setApplycode(customsProperties.getApplyCode());
77 record.setApplyname(customsProperties.getApplyName()); 97 record.setApplyname(customsProperties.getApplyName());
78 record.setCopcode(customsProperties.getCopCode()); 98 record.setCopcode(customsProperties.getCopCode());
79 - record.setClientseqno(customsProperties.getTransarrive().getClientSeqno());  
80 record.setHostid(customsProperties.getTransarrive().getHostId()); 99 record.setHostid(customsProperties.getTransarrive().getHostId());
81 record.setCertno(customsProperties.getTransarrive().getCertNo()); 100 record.setCertno(customsProperties.getTransarrive().getCertNo());
82 //操作员IC卡号 101 //操作员IC卡号
83 record.setInputopid(customsProperties.getInputOpId()); 102 record.setInputopid(customsProperties.getInputOpId());
84 // 操作员姓名 103 // 操作员姓名
85 record.setInputopname(customsProperties.getInputOpName()); 104 record.setInputopname(customsProperties.getInputOpName());
  105 + //签名时间
  106 + record.setSigndate(new Date());
86 ResultJson resultJson= new ResultJson(); 107 ResultJson resultJson= new ResultJson();
87 try{ 108 try{
88 109
@@ -112,7 +133,13 @@ public class TransArriveExportImpl implements TransArriveExportService { @@ -112,7 +133,13 @@ public class TransArriveExportImpl implements TransArriveExportService {
112 boolean valied = XmlTools.validateXMLSchemaThrowError("xsd/ETAImportMessage.xsd", xmlStr); 133 boolean valied = XmlTools.validateXMLSchemaThrowError("xsd/ETAImportMessage.xsd", xmlStr);
113 if (valied) { 134 if (valied) {
114 FileUtils.writeStringToFile(file, xmlStr, StandardCharsets.UTF_8); 135 FileUtils.writeStringToFile(file, xmlStr, StandardCharsets.UTF_8);
115 - //todo:更新发送状态,插入发送日志 136 + //发送报文到MQ
  137 + mq.send(xmlStr);
  138 + //更新发送状态
  139 + record.setDstatus("001");
  140 + mapper.updateStatusByPrimaryKey(record);
  141 + // 插入发送日志
  142 + sendlog(record);
116 143
117 resultJson.setCode("200"); 144 resultJson.setCode("200");
118 resultJson.setMsg("报文发送成功"); 145 resultJson.setMsg("报文发送成功");
@@ -149,12 +176,18 @@ public class TransArriveExportImpl implements TransArriveExportService { @@ -149,12 +176,18 @@ public class TransArriveExportImpl implements TransArriveExportService {
149 return resultJson; 176 return resultJson;
150 } 177 }
151 178
  179 + private void checkClientseqno(String clientSeqno) throws TransArriveException {
  180 + if (clientSeqno.isEmpty() && clientSeqno.length() != 18){
  181 + throw new TransArriveException("[ClientSeqNO-ERR] clientseqno信息不正确,应为18位的字符串");
  182 + }
  183 + }
  184 +
152 @Override 185 @Override
153 public ResultJson batchSend(List<String> autoIDlist) { 186 public ResultJson batchSend(List<String> autoIDlist) {
154 ResultJson resultJson = new ResultJson(); 187 ResultJson resultJson = new ResultJson();
155 List<TRANSTOARRIVEEXPORT> list = selectListByAutoIDS(autoIDlist); 188 List<TRANSTOARRIVEEXPORT> list = selectListByAutoIDS(autoIDlist);
156 for (TRANSTOARRIVEEXPORT manifestAirChange : list) { 189 for (TRANSTOARRIVEEXPORT manifestAirChange : list) {
157 - ResultJson result = send(manifestAirChange); 190 + resultJson = send(manifestAirChange);
158 /*if (!result){ 191 /*if (!result){
159 message = message + manifestAirChange.getWaybillnomaster() +"发送失败\n"; 192 message = message + manifestAirChange.getWaybillnomaster() +"发送失败\n";
160 }*/ 193 }*/
@@ -167,4 +200,25 @@ public class TransArriveExportImpl implements TransArriveExportService { @@ -167,4 +200,25 @@ public class TransArriveExportImpl implements TransArriveExportService {
167 List<TRANSTOARRIVEEXPORT> list = mapper.selectListByAutoIDS(autoIDlist); 200 List<TRANSTOARRIVEEXPORT> list = mapper.selectListByAutoIDS(autoIDlist);
168 return list; 201 return list;
169 } 202 }
  203 +
  204 + private void sendlog(TRANSTOARRIVEEXPORT record){
  205 + TransToArriveExportResonse toArriveExportResonse = new TransToArriveExportResonse();
  206 + toArriveExportResonse.setAutoid(UUID.randomUUID().toString());
  207 + toArriveExportResonse.setOperator(record.getUsername());
  208 + toArriveExportResonse.setPcs(record.getPackno());
  209 + toArriveExportResonse.setWgt(record.getGrosswt());
  210 + toArriveExportResonse.setResponsedate(new Date());
  211 + toArriveExportResonse.setClientseqno(record.getAutoid());
  212 + toArriveExportResonse.setType("E");
  213 + //发送记录
  214 + StringBuilder sb = new StringBuilder("申报已发送:转关方式[")
  215 + .append(record.getTrnmode())
  216 + .append("],")
  217 + .append("运单号[")
  218 + .append(record.getBillno())
  219 + .append("]");
  220 + toArriveExportResonse.setResponsemessage(sb.toString());
  221 +
  222 + toArriveExportResonseDao.insertSelective(toArriveExportResonse);
  223 + }
170 } 224 }
1 package com.tianbo.analysis.tools; 1 package com.tianbo.analysis.tools;
2 2
  3 +import com.tianbo.util.Date.DateUtil;
  4 +
  5 +import java.util.Random;
  6 +
3 /** 7 /**
  8 + * 生成转关运抵的Clientseqno的工具类,同时将与autoid主键共用
  9 + * 规则 000000000000057246 十八位的字符窜
4 * @author mrz 10 * @author mrz
5 * @date 20220208 11 * @date 20220208
6 */ 12 */
7 public class TransArriveTools { 13 public class TransArriveTools {
  14 + public synchronized static String getClientseqno(){
  15 + Random random = new Random();
  16 + int num = random.nextInt(9);
  17 + return DateUtil.getCurrentTime17()+String.valueOf(num);
  18 + }
8 } 19 }
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 FLIGHTNO = #{flightno,jdbcType=VARCHAR} AND FLIGHTDATE = #{flightdate,jdbcType=TIMESTAMP} 46 FLIGHTNO = #{flightno,jdbcType=VARCHAR} AND FLIGHTDATE = #{flightdate,jdbcType=TIMESTAMP}
47 AND dealstatus = '0' order by REPORTORDER asc 47 AND dealstatus = '0' order by REPORTORDER asc
48 </select> 48 </select>
49 - <select id="delFlightno" parameterType="com.tianbo.analysis.model.FFMInfo"> 49 + <delete id="delFlightno" parameterType="com.tianbo.analysis.model.FFMInfo">
50 DELETE FROM FFM_INFO where dealstatus = '0' 50 DELETE FROM FFM_INFO where dealstatus = '0'
51 <if test="autoid != null"> 51 <if test="autoid != null">
52 and AUTOID = #{autoid,jdbcType=VARCHAR} 52 and AUTOID = #{autoid,jdbcType=VARCHAR}
@@ -57,13 +57,13 @@ @@ -57,13 +57,13 @@
57 <if test="flightdate != null"> 57 <if test="flightdate != null">
58 and FLIGHTDATE = #{flightdate,jdbcType=TIMESTAMP} 58 and FLIGHTDATE = #{flightdate,jdbcType=TIMESTAMP}
59 </if> 59 </if>
60 - </select>  
61 - <select id="delByAutoidList" parameterType="java.util.List"> 60 + </delete>
  61 + <delete id="delByAutoidList" parameterType="java.util.List">
62 DELETE FROM FFM_INFO where AUTOID in 62 DELETE FROM FFM_INFO where AUTOID in
63 <foreach collection="list" index="index" item="item" open="(" separator="," close=")"> 63 <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
64 #{item} 64 #{item}
65 </foreach> 65 </foreach>
66 - </select> 66 + </delete>
67 <delete id="deleteByPrimaryKey" parameterType="java.lang.String"> 67 <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
68 delete from FFM_INFO 68 delete from FFM_INFO
69 where AUTOID = #{autoid,jdbcType=VARCHAR} 69 where AUTOID = #{autoid,jdbcType=VARCHAR}
@@ -21,6 +21,7 @@ @@ -21,6 +21,7 @@
21 CGONMS.SENDLOG 21 CGONMS.SENDLOG
22 where 22 where
23 MESSAGEAUTOID = #{messageautoid,jdbcType=VARCHAR} 23 MESSAGEAUTOID = #{messageautoid,jdbcType=VARCHAR}
  24 + ORDER BY CREATEDATE DESC
24 </select> 25 </select>
25 26
26 <select id="checkWaybillPermit" parameterType="java.lang.String" resultMap="BaseResultMap"> 27 <select id="checkWaybillPermit" parameterType="java.lang.String" resultMap="BaseResultMap">
@@ -45,39 +45,24 @@ @@ -45,39 +45,24 @@
45 ClientSeqNo, HostId, CertNo, USERNAME, CREATTIME, DSTATUS, CUSTOM_RESPONSE_TEXT, 45 ClientSeqNo, HostId, CertNo, USERNAME, CREATTIME, DSTATUS, CUSTOM_RESPONSE_TEXT,
46 CUSTOM_RESPONSE_STATUS, UPDATETIME 46 CUSTOM_RESPONSE_STATUS, UPDATETIME
47 </sql> 47 </sql>
  48 + <sql id="Join_Response">
  49 + AUTOID, IEFlag, CustomsCode, InputOpId, InputOpName, ApplyName, ApplyCode,
  50 + CopCode, ArriveNo, ContaId, BillNo, TrafMode, TrafName, VoyageNo, TrafWay, PackNo,
  51 + GrossWt, UnloadCode, ArriveTime, ContaType, TrnMode, Notes, OperType, Sign, SignDate,
  52 + HostId, CertNo, USERNAME, CREATTIME, DSTATUS,UPDATETIME
  53 + </sql>
48 <sql id="Custom_Receipt"> 54 <sql id="Custom_Receipt">
49 <include refid="Base_Column_List" /> 55 <include refid="Base_Column_List" />
50 ,RECEIPTION 56 ,RECEIPTION
51 </sql> 57 </sql>
52 <select id="selectListByAutoIDS" resultMap="BaseResultMap" parameterType="java.util.List" > 58 <select id="selectListByAutoIDS" resultMap="BaseResultMap" parameterType="java.util.List" >
53 SELECT 59 SELECT
54 - <include refid="Custom_Receipt" />  
55 - FROM  
56 - (  
57 - SELECT  
58 - <include refid="Custom_Receipt" />  
59 - FROM  
60 - (  
61 - SELECT  
62 - <include refid="Base_Column_List" />  
63 - FROM  
64 - TRANS_TO_ARRIVE_EXPORT  
65 - where AUTOID in 60 + <include refid="Base_Column_List"></include>
  61 + FROM CGONMS.TRANS_TO_ARRIVE_EXPORT
  62 + WHERE AUTOID in
66 <foreach collection="list" index="index" item="item" open="(" separator="," close=")"> 63 <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
67 #{item} 64 #{item}
68 </foreach> 65 </foreach>
69 - ) t1  
70 - LEFT JOIN (  
71 - SELECT  
72 - RECEIPTION,  
73 - MESSAGEAUTOID,  
74 - MESSAGETYPE,  
75 - ROW_NUMBER () OVER ( PARTITION BY MESSAGEAUTOID ORDER BY CREATEDATE DESC ) rn  
76 - FROM  
77 - SENDLOG  
78 - ) t2 ON t1.AUTOID = t2.MESSAGEAUTOID  
79 - AND t2.rn = 1  
80 - ) t3  
81 order by CREATTIME desc 66 order by CREATTIME desc
82 </select> 67 </select>
83 <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" > 68 <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.String" >
@@ -87,9 +72,30 @@ @@ -87,9 +72,30 @@
87 where AUTOID = #{autoid,jdbcType=VARCHAR} 72 where AUTOID = #{autoid,jdbcType=VARCHAR}
88 </select> 73 </select>
89 <select id="selectTrans" parameterType="com.tianbo.analysis.model.TRANSTOARRIVEEXPORT" resultMap="BaseResultMap"> 74 <select id="selectTrans" parameterType="com.tianbo.analysis.model.TRANSTOARRIVEEXPORT" resultMap="BaseResultMap">
90 - select 75 + SELECT
91 <include refid="Base_Column_List" /> 76 <include refid="Base_Column_List" />
92 - from CGONMS.TRANS_TO_ARRIVE_EXPORT 77 + FROM
  78 + (
  79 + SELECT
  80 + <include refid="Join_Response" />,
  81 + t2.CUSTOM_RESPONSE_TEXT,
  82 + t2.CUSTOM_RESPONSE_STATUS,
  83 + t2.CLIENTSEQNO,
  84 + t2.SEQNO
  85 + FROM
  86 + TRANS_TO_ARRIVE_EXPORT t1
  87 + LEFT JOIN (
  88 + SELECT
  89 + RESPONSEMESSAGE || NOTE as CUSTOM_RESPONSE_TEXT,
  90 + RESPONSECODE || PROCRESULT as CUSTOM_RESPONSE_STATUS,
  91 + CLIENTSEQNO,
  92 + SEQNO,
  93 + ROW_NUMBER () OVER ( PARTITION BY CLIENTSEQNO ORDER BY RESPONSEDATE DESC ) rn
  94 + FROM
  95 + TRANS_TO_ARRIVE_EXPORT_RESONSE
  96 + ) t2 ON t1.AUTOID = t2.CLIENTSEQNO
  97 + AND t2.rn = 1
  98 + ) t3
93 where 1=1 99 where 1=1
94 <if test="customscode != null and customscode != ''" > 100 <if test="customscode != null and customscode != ''" >
95 and CustomsCode = #{customscode,jdbcType=VARCHAR} 101 and CustomsCode = #{customscode,jdbcType=VARCHAR}
@@ -106,6 +112,7 @@ @@ -106,6 +112,7 @@
106 <if test="creattime != null" > 112 <if test="creattime != null" >
107 and #{creattime,jdbcType=TIMESTAMP} 113 and #{creattime,jdbcType=TIMESTAMP}
108 </if> 114 </if>
  115 + order by CREATTIME desc
109 </select> 116 </select>
110 <delete id="deleteByPrimaryKey" parameterType="java.lang.String" > 117 <delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
111 delete from CGONMS.TRANS_TO_ARRIVE_EXPORT 118 delete from CGONMS.TRANS_TO_ARRIVE_EXPORT
@@ -462,6 +469,11 @@ @@ -462,6 +469,11 @@
462 </set> 469 </set>
463 where AUTOID = #{autoid,jdbcType=VARCHAR} 470 where AUTOID = #{autoid,jdbcType=VARCHAR}
464 </update> 471 </update>
  472 + <update id="updateStatusByPrimaryKey" parameterType="com.tianbo.analysis.model.TRANSTOARRIVEEXPORT" >
  473 + update CGONMS.TRANS_TO_ARRIVE_EXPORT
  474 + set DSTATUS = #{dstatus,jdbcType=VARCHAR}
  475 + where AUTOID = #{autoid,jdbcType=VARCHAR}
  476 + </update>
465 <update id="updateByPrimaryKey" parameterType="com.tianbo.analysis.model.TRANSTOARRIVEEXPORT" > 477 <update id="updateByPrimaryKey" parameterType="com.tianbo.analysis.model.TRANSTOARRIVEEXPORT" >
466 update CGONMS.TRANS_TO_ARRIVE_EXPORT 478 update CGONMS.TRANS_TO_ARRIVE_EXPORT
467 set IEFlag = #{ieflag,jdbcType=VARCHAR}, 479 set IEFlag = #{ieflag,jdbcType=VARCHAR},
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3 +<mapper namespace="com.tianbo.analysis.dao.TransToArriveExportResonseDao">
  4 + <resultMap id="BaseResultMap" type="com.tianbo.analysis.model.TransToArriveExportResonse">
  5 + <id column="AUTOID" jdbcType="VARCHAR" property="autoid" />
  6 + <result column="VER" jdbcType="VARCHAR" property="ver" />
  7 + <result column="SEQNO" jdbcType="VARCHAR" property="seqno" />
  8 + <result column="CLIENTSEQNO" jdbcType="VARCHAR" property="clientseqno" />
  9 + <result column="RESPONSECODE" jdbcType="VARCHAR" property="responsecode" />
  10 + <result column="RESPONSEMESSAGE" jdbcType="VARCHAR" property="responsemessage" />
  11 + <result column="NOTE" jdbcType="VARCHAR" property="note" />
  12 + <result column="PROCRESULT" jdbcType="VARCHAR" property="procresult" />
  13 + <result column="PROCDATE" jdbcType="TIMESTAMP" property="procdate" />
  14 + <result column="RESPONSEDATE" jdbcType="TIMESTAMP" property="responsedate" />
  15 + <result column="OPERATOR" jdbcType="VARCHAR" property="operator" />
  16 + <result column="PCS" jdbcType="VARCHAR" property="pcs" />
  17 + <result column="WGT" jdbcType="VARCHAR" property="wgt" />
  18 + <result column="TYPE" jdbcType="VARCHAR" property="type" />
  19 + </resultMap>
  20 + <sql id="Base_Column_List">
  21 + AUTOID, VER, SEQNO, CLIENTSEQNO, RESPONSECODE, RESPONSEMESSAGE, NOTE, PROCRESULT,
  22 + PROCDATE, RESPONSEDATE, "OPERATOR", PCS, WGT, "TYPE"
  23 + </sql>
  24 + <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
  25 + select
  26 + <include refid="Base_Column_List" />
  27 + from TRANS_TO_ARRIVE_EXPORT_RESONSE
  28 + where AUTOID = #{autoid,jdbcType=VARCHAR}
  29 + </select>
  30 + <select id="selectByClientseqno" parameterType="java.lang.String" resultMap="BaseResultMap">
  31 + select
  32 + <include refid="Base_Column_List" />
  33 + from TRANS_TO_ARRIVE_EXPORT_RESONSE
  34 + where CLIENTSEQNO = #{autoid,jdbcType=VARCHAR}
  35 + order by RESPONSEDATE desc
  36 + </select>
  37 + <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
  38 + delete from TRANS_TO_ARRIVE_EXPORT_RESONSE
  39 + where AUTOID = #{autoid,jdbcType=VARCHAR}
  40 + </delete>
  41 + <insert id="insert" keyColumn="AUTOID" keyProperty="autoid" parameterType="com.tianbo.analysis.model.TransToArriveExportResonse" useGeneratedKeys="true">
  42 + insert into TRANS_TO_ARRIVE_EXPORT_RESONSE (AUTOID,VER, SEQNO, CLIENTSEQNO,
  43 + RESPONSECODE, RESPONSEMESSAGE, NOTE,
  44 + PROCRESULT, PROCDATE, RESPONSEDATE,
  45 + "OPERATOR", PCS, WGT,
  46 + "TYPE")
  47 + values (#{autoid,jdbcType=VARCHAR},#{ver,jdbcType=VARCHAR}, #{seqno,jdbcType=VARCHAR}, #{clientseqno,jdbcType=VARCHAR},
  48 + #{responsecode,jdbcType=VARCHAR}, #{responsemessage,jdbcType=VARCHAR}, #{note,jdbcType=VARCHAR},
  49 + #{procresult,jdbcType=VARCHAR}, #{procdate,jdbcType=TIMESTAMP}, #{responsedate,jdbcType=TIMESTAMP},
  50 + #{operator,jdbcType=VARCHAR}, #{pcs,jdbcType=VARCHAR}, #{wgt,jdbcType=VARCHAR},
  51 + #{type,jdbcType=VARCHAR})
  52 + </insert>
  53 + <insert id="insertSelective" keyColumn="AUTOID" keyProperty="autoid" parameterType="com.tianbo.analysis.model.TransToArriveExportResonse" useGeneratedKeys="true">
  54 + insert into TRANS_TO_ARRIVE_EXPORT_RESONSE
  55 + <trim prefix="(" suffix=")" suffixOverrides=",">
  56 + <if test="autoid != null">
  57 + AUTOID,
  58 + </if>
  59 + <if test="ver != null">
  60 + VER,
  61 + </if>
  62 + <if test="seqno != null">
  63 + SEQNO,
  64 + </if>
  65 + <if test="clientseqno != null">
  66 + CLIENTSEQNO,
  67 + </if>
  68 + <if test="responsecode != null">
  69 + RESPONSECODE,
  70 + </if>
  71 + <if test="responsemessage != null">
  72 + RESPONSEMESSAGE,
  73 + </if>
  74 + <if test="note != null">
  75 + NOTE,
  76 + </if>
  77 + <if test="procresult != null">
  78 + PROCRESULT,
  79 + </if>
  80 + <if test="procdate != null">
  81 + PROCDATE,
  82 + </if>
  83 + <if test="responsedate != null">
  84 + RESPONSEDATE,
  85 + </if>
  86 + <if test="operator != null">
  87 + "OPERATOR",
  88 + </if>
  89 + <if test="pcs != null">
  90 + PCS,
  91 + </if>
  92 + <if test="wgt != null">
  93 + WGT,
  94 + </if>
  95 + <if test="type != null">
  96 + "TYPE",
  97 + </if>
  98 + </trim>
  99 + <trim prefix="values (" suffix=")" suffixOverrides=",">
  100 + <if test="autoid != null">
  101 + #{autoid,jdbcType=VARCHAR},
  102 + </if>
  103 + <if test="ver != null">
  104 + #{ver,jdbcType=VARCHAR},
  105 + </if>
  106 + <if test="seqno != null">
  107 + #{seqno,jdbcType=VARCHAR},
  108 + </if>
  109 + <if test="clientseqno != null">
  110 + #{clientseqno,jdbcType=VARCHAR},
  111 + </if>
  112 + <if test="responsecode != null">
  113 + #{responsecode,jdbcType=VARCHAR},
  114 + </if>
  115 + <if test="responsemessage != null">
  116 + #{responsemessage,jdbcType=VARCHAR},
  117 + </if>
  118 + <if test="note != null">
  119 + #{note,jdbcType=VARCHAR},
  120 + </if>
  121 + <if test="procresult != null">
  122 + #{procresult,jdbcType=VARCHAR},
  123 + </if>
  124 + <if test="procdate != null">
  125 + #{procdate,jdbcType=TIMESTAMP},
  126 + </if>
  127 + <if test="responsedate != null">
  128 + #{responsedate,jdbcType=TIMESTAMP},
  129 + </if>
  130 + <if test="operator != null">
  131 + #{operator,jdbcType=VARCHAR},
  132 + </if>
  133 + <if test="pcs != null">
  134 + #{pcs,jdbcType=VARCHAR},
  135 + </if>
  136 + <if test="wgt != null">
  137 + #{wgt,jdbcType=VARCHAR},
  138 + </if>
  139 + <if test="type != null">
  140 + #{type,jdbcType=VARCHAR},
  141 + </if>
  142 + </trim>
  143 + </insert>
  144 + <update id="updateByPrimaryKeySelective" parameterType="com.tianbo.analysis.model.TransToArriveExportResonse">
  145 + update TRANS_TO_ARRIVE_EXPORT_RESONSE
  146 + <set>
  147 + <if test="ver != null">
  148 + VER = #{ver,jdbcType=VARCHAR},
  149 + </if>
  150 + <if test="seqno != null">
  151 + SEQNO = #{seqno,jdbcType=VARCHAR},
  152 + </if>
  153 + <if test="clientseqno != null">
  154 + CLIENTSEQNO = #{clientseqno,jdbcType=VARCHAR},
  155 + </if>
  156 + <if test="responsecode != null">
  157 + RESPONSECODE = #{responsecode,jdbcType=VARCHAR},
  158 + </if>
  159 + <if test="responsemessage != null">
  160 + RESPONSEMESSAGE = #{responsemessage,jdbcType=VARCHAR},
  161 + </if>
  162 + <if test="note != null">
  163 + NOTE = #{note,jdbcType=VARCHAR},
  164 + </if>
  165 + <if test="procresult != null">
  166 + PROCRESULT = #{procresult,jdbcType=VARCHAR},
  167 + </if>
  168 + <if test="procdate != null">
  169 + PROCDATE = #{procdate,jdbcType=TIMESTAMP},
  170 + </if>
  171 + <if test="responsedate != null">
  172 + RESPONSEDATE = #{responsedate,jdbcType=TIMESTAMP},
  173 + </if>
  174 + <if test="operator != null">
  175 + "OPERATOR" = #{operator,jdbcType=VARCHAR},
  176 + </if>
  177 + <if test="pcs != null">
  178 + PCS = #{pcs,jdbcType=VARCHAR},
  179 + </if>
  180 + <if test="wgt != null">
  181 + WGT = #{wgt,jdbcType=VARCHAR},
  182 + </if>
  183 + <if test="type != null">
  184 + "TYPE" = #{type,jdbcType=VARCHAR},
  185 + </if>
  186 + </set>
  187 + where AUTOID = #{autoid,jdbcType=VARCHAR}
  188 + </update>
  189 + <update id="updateByPrimaryKey" parameterType="com.tianbo.analysis.model.TransToArriveExportResonse">
  190 + update TRANS_TO_ARRIVE_EXPORT_RESONSE
  191 + set VER = #{ver,jdbcType=VARCHAR},
  192 + SEQNO = #{seqno,jdbcType=VARCHAR},
  193 + CLIENTSEQNO = #{clientseqno,jdbcType=VARCHAR},
  194 + RESPONSECODE = #{responsecode,jdbcType=VARCHAR},
  195 + RESPONSEMESSAGE = #{responsemessage,jdbcType=VARCHAR},
  196 + NOTE = #{note,jdbcType=VARCHAR},
  197 + PROCRESULT = #{procresult,jdbcType=VARCHAR},
  198 + PROCDATE = #{procdate,jdbcType=TIMESTAMP},
  199 + RESPONSEDATE = #{responsedate,jdbcType=TIMESTAMP},
  200 + "OPERATOR" = #{operator,jdbcType=VARCHAR},
  201 + PCS = #{pcs,jdbcType=VARCHAR},
  202 + WGT = #{wgt,jdbcType=VARCHAR},
  203 + "TYPE" = #{type,jdbcType=VARCHAR}
  204 + where AUTOID = #{autoid,jdbcType=VARCHAR}
  205 + </update>
  206 +</mapper>
@@ -55,7 +55,7 @@ @@ -55,7 +55,7 @@
55 <OperType th:text="*{opertype}">${申报类型}</OperType> 55 <OperType th:text="*{opertype}">${申报类型}</OperType>
56 <Sign th:text="*{sign}">${签名信息}</Sign> 56 <Sign th:text="*{sign}">${签名信息}</Sign>
57 <SignDate th:text="*{#dates.format(signdate,'yyyyMMddHHmmss')}">${签名日期}</SignDate> 57 <SignDate th:text="*{#dates.format(signdate,'yyyyMMddHHmmss')}">${签名日期}</SignDate>
58 - <ClientSeqNo th:text="*{clientseqno}">${客户端统一编号}</ClientSeqNo> 58 + <ClientSeqNo th:text="*{autoid}">${客户端统一编号}</ClientSeqNo>
59 <HostId th:text="*{hostid}">${邮箱客户端ID}</HostId> 59 <HostId th:text="*{hostid}">${邮箱客户端ID}</HostId>
60 <CertNo th:text="*{certno}">${当前操作员IC卡证书号}</CertNo> 60 <CertNo th:text="*{certno}">${当前操作员IC卡证书号}</CertNo>
61 </EtaArrivalSign> 61 </EtaArrivalSign>