소스 검색

监测系统上报

haungfuli 2 년 전
부모
커밋
9cf611291c
45개의 변경된 파일4839개의 추가작업 그리고 188개의 파일을 삭제
  1. BIN
      templates/tmp.jpg
  2. 1 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/controller/DriverCarInfoController.java
  3. 3 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/controller/DriverInfoController.java
  4. 4 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/HyCargoOwnerAddressInfo.java
  5. 5 1
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/HyCarrierInfo.java
  6. 4 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/HyDriverInfo.java
  7. 59 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/OrderInfo.java
  8. 16 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/PublishTaskInfo.java
  9. 44 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/ActualCarrierInfo.java
  10. 55 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/ConsigneeInfo.java
  11. 59 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/ConsignorInfo.java
  12. 252 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/Dispatch.java
  13. 32 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/Driver.java
  14. 118 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/DriverInfo.java
  15. 82 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/Financial.java
  16. 118 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/FinancialRoot.java
  17. 89 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/FormatChecks.java
  18. 58 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/GoodsInfo.java
  19. 28 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/InsuranceInformation.java
  20. 229 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/Root.java
  21. 34 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/ShippingNote.java
  22. 179 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/Vehicle.java
  23. 154 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/VehicleInfo.java
  24. 1 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/IDriverCarInfoService.java
  25. 3 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/IDriverInfoService.java
  26. 5 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/Waybill.java
  27. 60 47
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/DriverCarInfoServiceImpl.java
  28. 65 50
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/DriverInfoServiceImpl.java
  29. 78 66
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/HyFreightSettlementInfoServiceImpl.java
  30. 89 16
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/OrderInfoServiceImpl.java
  31. 104 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/Cipher.java
  32. 83 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/Constants.java
  33. 2 8
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/EntityAnalyse.java
  34. 538 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/MonitoringSystemReporting.java
  35. 125 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/MyStrUtil.java
  36. 73 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/PostUtils.java
  37. 76 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM2.java
  38. 207 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM2Utils.java
  39. 309 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM3.java
  40. 144 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM3Digest.java
  41. 343 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM4.java
  42. 233 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM4Utils.java
  43. 16 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM4_Context.java
  44. 661 0
      winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/Util.java
  45. 1 0
      winsea-haixin-plugin-wangluohuoyun/src/main/resources/mapper/CargoOwnerAddressInfoMapper.xml

BIN
templates/tmp.jpg


+ 1 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/controller/DriverCarInfoController.java

@@ -3,6 +3,7 @@ package com.yh.saas.plugin.yiliangyiyun.controller;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.yh.saas.plugin.yiliangyiyun.entity.HyDriverCarInfo;
 import com.yh.saas.plugin.yiliangyiyun.entity.view.DistinguishView;
+import com.yh.saas.plugin.yiliangyiyun.entity.view.Root;
 import com.yh.saas.plugin.yiliangyiyun.service.IDriverCarInfoService;
 import com.yh.saas.plugin.yiliangyiyun.util.EntityAnalyse;
 import com.yh.saas.plugin.yiliangyiyun.util.Log;

+ 3 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/controller/DriverInfoController.java

@@ -4,6 +4,8 @@ package com.yh.saas.plugin.yiliangyiyun.controller;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.yh.saas.plugin.yiliangyiyun.entity.HyDriverInfo;
 import com.yh.saas.plugin.yiliangyiyun.entity.view.DistinguishView;
+import com.yh.saas.plugin.yiliangyiyun.entity.view.DriverInfo;
+import com.yh.saas.plugin.yiliangyiyun.entity.view.Root;
 import com.yh.saas.plugin.yiliangyiyun.service.IDriverInfoService;
 import com.yh.saas.plugin.yiliangyiyun.util.EntityAnalyse;
 import com.yh.saas.plugin.yiliangyiyun.util.Log;
@@ -150,6 +152,7 @@ public class DriverInfoController {
         return driverInfoService.batchSubmission(hyDriverInfo);
     }
 
+
     /**
      * 后台管理司机信息上报列表
      * @param hyDriverInfo

+ 4 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/HyCargoOwnerAddressInfo.java

@@ -52,6 +52,10 @@ public class HyCargoOwnerAddressInfo extends BaseModel<HyCargoOwnerAddressInfo>
      * 详细地址
      */
     private String detailedAddress;
+    /**
+     * 行政区划代码
+     */
+    private String adCode;
     /**
      * 经度
      */

+ 5 - 1
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/HyCarrierInfo.java

@@ -60,7 +60,11 @@ public class HyCarrierInfo extends BaseModel<HyCarrierInfo> {
      */
     private Double estimatedFreight;
     /**
-     * 装车重量(吨)
+     * 装车毛重(吨)
+     */
+    private Double loadingGrossWeight;
+    /**
+     * 装车净重(吨)
      */
     private Double loadingWeight;
     /**

+ 4 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/HyDriverInfo.java

@@ -137,6 +137,10 @@ public class HyDriverInfo extends BaseModel<HyDriverInfo> {
      * 从业资格证号
      */
     private String qualificationCertificateNumber;
+    /**
+     * 道路运输经营许可证号
+     */
+    private String actualCarrierBusinessLicense;
     /**
      * 认证状态key(1审核中3已驳回5已认证7已禁用9已过期11已注销)
      */

+ 59 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/OrderInfo.java

@@ -497,6 +497,11 @@ public class OrderInfo extends BaseModel<OrderInfo> {
      */
     @TableField(exist = false)
     private String weight;
+    /**
+     * 装车毛重(吨)
+     */
+    @TableField(exist = false)
+    private Double grossWeight;
     /**
      * 合同附加条款
      */
@@ -576,6 +581,60 @@ public class OrderInfo extends BaseModel<OrderInfo> {
      */
     @TableField(exist = false)
     private String cargoOwnerIdCard;
+    /**
+     * 发货时间
+     */
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date deliveryTime;
+    /**
+     * 收货时间
+     */
+    @TableField(exist = false)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date receivingTime;
+    /**
+     * 托运人姓名
+     */
+    @TableField(exist = false)
+    private String consignorName;
+    /**
+     * 托运人身份证号或社会信用代码
+     */
+    @TableField(exist = false)
+    private String consignorID;
+    /**
+     * 发货地国家行政区划代码
+     */
+    @TableField(exist = false)
+    private String nationalCode;
+    /**
+     * 收货方姓名
+     */
+    @TableField(exist = false)
+    private String shipToName;
+    /**
+     * 收货方身份证号或社会信用代码
+     */
+    @TableField(exist = false)
+    private String shipToID;
+    /**
+     * 收货地国家行政区划代码
+     */
+    @TableField(exist = false)
+    private String shipToNationalCode;
+    /**
+     * 实际承运人道路运营许可证号
+     */
+    @TableField(exist = false)
+    private String roadTransportBusinessLicenseNo;
+    /**
+     * 业务类型代码
+     */
+    @TableField(exist = false)
+    private String businessTypeCode;
 
     @Override
     protected Serializable pkVal() {

+ 16 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/PublishTaskInfo.java

@@ -72,6 +72,14 @@ public class PublishTaskInfo extends BaseModel<PublishTaskInfo> {
      * 发货地纬度
      */
     private String sendLatitude;
+    /**
+     * 发货地行政区划代码
+     */
+    private String sendAdCode;
+    /**
+     * 收货地行政区划代码
+     */
+    private String unsendAdCode;
     /**
      * 收货地经度
      */
@@ -104,6 +112,14 @@ public class PublishTaskInfo extends BaseModel<PublishTaskInfo> {
      * 距离(公里)
      */
     private Double distance;
+    /**
+     * 业务类型key
+     */
+    private String businessTypeKey;
+    /**
+     * 业务类型
+     */
+    private String businessType;
     /**
      * 货物类别key
      */

+ 44 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/ActualCarrierInfo.java

@@ -0,0 +1,44 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+
+public class ActualCarrierInfo {
+
+    /**
+     * 实际承运人名称必填,与网络货运经营者签订运输合同,实际完成运输的经营者。
+     * 取得道路运输经营许可证的个体运输业户,直接填写“许可证上的业户名称”;
+     * 其他情况填写“运输公司名称(实际承运驾驶员姓名)”
+     */
+    private String actualCarrierName;
+    /**
+     * 实际承运人道路运输经营许可证号
+     an..50	必填,实际承运人的道路运输经营许可证编号,网络货运经营者整合车辆全部为总质量4.5吨及以下普通货运车辆的,可填“车籍地6位行政区域代码+000000”。
+     */
+    private String actualCarrierBusinessLicense;
+    /**
+     * 实际承运人社会统一信用代码或证件号码
+     */
+    private String actualCarrierID;
+
+    public String getActualCarrierName() {
+        return actualCarrierName;
+    }
+
+    public void setActualCarrierName(String actualCarrierName) {
+        this.actualCarrierName = actualCarrierName;
+    }
+
+    public String getActualCarrierBusinessLicense() {
+        return actualCarrierBusinessLicense;
+    }
+
+    public void setActualCarrierBusinessLicense(String actualCarrierBusinessLicense) {
+        this.actualCarrierBusinessLicense = actualCarrierBusinessLicense;
+    }
+
+    public String getActualCarrierID() {
+        return actualCarrierID;
+    }
+
+    public void setActualCarrierID(String actualCarrierID) {
+        this.actualCarrierID = actualCarrierID;
+    }
+}

+ 55 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/ConsigneeInfo.java

@@ -0,0 +1,55 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+/**
+ * 收货人信息
+ * @author glxin
+ */
+public class ConsigneeInfo {
+	
+	/**
+	 * 收货方名称	1..1	an..512	必填。
+	 */
+	private String consignee;
+	/**
+	 * 收货方社会统一信用代码或个人证件号码	1..1	an..35	必填。
+	 */
+	private String consigneeID;
+	
+	/**
+	 * 收货地址	0..1	an..256	选填。
+	 */
+	private String goodsReceiptPlace;
+	/**
+	 * 收货地点的国家行政区划代码	1..1	an..12	必填,
+	 * 参照最新版《中华人民共和国行政区划代码》(GB/T 2260-2017),精确到区县。
+	 */
+	private String countrySubdivisionCode;
+	public String getConsignee() {
+		return consignee;
+	}
+	public void setConsignee(String consignee) {
+		this.consignee = consignee;
+	}
+	public String getConsigneeID() {
+		return consigneeID;
+	}
+	public void setConsigneeID(String consigneeID) {
+		this.consigneeID = consigneeID;
+	}
+	public String getGoodsReceiptPlace() {
+		return goodsReceiptPlace;
+	}
+	public void setGoodsReceiptPlace(String goodsReceiptPlace) {
+		this.goodsReceiptPlace = goodsReceiptPlace;
+	}
+	public String getCountrySubdivisionCode() {
+		return countrySubdivisionCode;
+	}
+	public void setCountrySubdivisionCode(String countrySubdivisionCode) {
+		this.countrySubdivisionCode = countrySubdivisionCode;
+	}
+	
+	
+	
+	
+	
+}

+ 59 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/ConsignorInfo.java

@@ -0,0 +1,59 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+/**
+ * 托运人信息
+ * @author glxin
+ *
+ */
+public class ConsignorInfo {
+	/**
+	 * 托运人名称	1..1	an..512	必填。
+	 */
+	private String consignor;
+	/**
+	 * 托运人统一社会信用代码或个人证件号	1..1	an..35	必填。
+	 */
+	private String consignorID;
+	/**
+	 * 装货地址	0..1	an..256	选填。实际装货的地点。
+	 */
+	private String placeOfLoading;
+	
+	/**
+	 * 装货地点的国家行政区划代码	1..1	an..12	必填,
+	 * 参照最新版《中华人民共和国行政区划代码》(GB/T 2260-2017),精确到区县。
+	 */
+	private String countrySubdivisionCode;
+
+	public String getConsignor() {
+		return consignor;
+	}
+
+	public void setConsignor(String consignor) {
+		this.consignor = consignor;
+	}
+
+	public String getConsignorID() {
+		return consignorID;
+	}
+
+	public void setConsignorID(String consignorID) {
+		this.consignorID = consignorID;
+	}
+
+	public String getPlaceOfLoading() {
+		return placeOfLoading;
+	}
+
+	public void setPlaceOfLoading(String placeOfLoading) {
+		this.placeOfLoading = placeOfLoading;
+	}
+
+	public String getCountrySubdivisionCode() {
+		return countrySubdivisionCode;
+	}
+
+	public void setCountrySubdivisionCode(String countrySubdivisionCode) {
+		this.countrySubdivisionCode = countrySubdivisionCode;
+	}
+	
+}

+ 252 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/Dispatch.java

@@ -0,0 +1,252 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+
+
+
+import com.yh.saas.plugin.yiliangyiyun.service.Waybill;
+
+import java.util.List;
+
+
+/**
+ * 运单
+ * @author glxin
+ */
+public class Dispatch implements Waybill {
+	/**
+	 * 原始单号
+	 * 必填,上游企业委托运输单号。
+	 */
+	private String originalDocumentNumber;
+	/**
+	 * 托运单号
+	 * 必填,本运单单号。
+	 */
+	private String shippingNoteNumber;
+
+	/**
+	 * 运输总车辆数
+	 */
+	private String vehicleAmount;
+
+	/**
+	 * 分段分单号
+	 * 分段运输和多车运输由四位数字组成,前两位代表一单多车的序号,
+	 * 后两位代表分段序号。若运输形式为一单一车填0101。
+	 */
+	private String serialNumber;
+
+	/**
+	 * 运输组织类型代码
+	 */
+	private String transportTypeCode;
+
+	/**
+	 * 运单上传时间
+	 * 必填,网络货运经营者上传运单到省监测系统的时间。YYYYMMDDhhmmss
+	 */
+	private String sendToProDateTime;
+	
+	/**
+	 * 网络货运经营者名称
+	 */
+	private String carrier;
+	/**
+	 * 统一社会信用代码
+	 */
+	private String unifiedSocialCreditIdentifier;
+	
+	/**
+	 * 道路运输经营许可证编号
+	 * 必填,网络货运经营者的道路运输经营许可证编号,网络货运经营者整合车辆全部为总
+	 * 质量4.5吨及以下普通货运车辆的,可填企业所在地行政区划代码+000000。
+	 */
+	private String permitNumber;
+	
+	/**
+	 * 托运日期时间
+	 * 必填,网络货运经营者信息系统正式生成运单的日期时间。YYYYMMDDhhmmss
+	 */
+	private String consignmentDateTime;
+	
+	/**
+	 * 业务类型代码
+	 * 必填,详见代码集。
+	 */
+	private String businessTypeCode;
+
+	/**
+	 * 必填,货物装车后的发车时间。YYYYMMDDhhmmss
+	 */
+	private String despatchActualDateTime;
+	
+	/**
+	 * 必填,货物运到后的签收时间。YYYYMMDDhhmmss
+	 */
+	private String goodsReceiptDateTime;
+	
+	/**
+	 * 托运人信息
+	 */
+	private List<ConsignorInfo> consignorInfo;
+	
+	/**
+	 * 收货方信息
+	 */
+	private List<ConsigneeInfo> consigneeInfo;
+	
+	/**
+	 * 费用信息	1..1	
+	 */
+	private String totalMonetaryAmount;
+	/**
+	 * 车辆信息
+	 */
+	private List<VehicleInfo> vehicleInfo;
+	/**
+	 * 保险信息
+	 */
+	private List<InsuranceInformation> insuranceInformation;
+	/**
+	 * 实际承运人
+	 */
+	private List<ActualCarrierInfo> actualCarrierInfo;
+	/**
+	 * 选填备注
+	 */
+	private String remark;
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public String getOriginalDocumentNumber() {
+		return originalDocumentNumber;
+	}
+	public void setOriginalDocumentNumber(String originalDocumentNumber) {
+		this.originalDocumentNumber = originalDocumentNumber;
+	}
+	public String getShippingNoteNumber() {
+		return shippingNoteNumber;
+	}
+	public void setShippingNoteNumber(String shippingNoteNumber) {
+		this.shippingNoteNumber = shippingNoteNumber;
+	}
+	public String getSendToProDateTime() {
+		return sendToProDateTime;
+	}
+	public void setSendToProDateTime(String sendToProDateTime) {
+		this.sendToProDateTime = sendToProDateTime;
+	}
+	public String getCarrier() {
+		return carrier;
+	}
+	public void setCarrier(String carrier) {
+		this.carrier = carrier;
+	}
+	public String getUnifiedSocialCreditIdentifier() {
+		return unifiedSocialCreditIdentifier;
+	}
+	public void setUnifiedSocialCreditIdentifier(String unifiedSocialCreditIdentifier) {
+		this.unifiedSocialCreditIdentifier = unifiedSocialCreditIdentifier;
+	}
+	public String getPermitNumber() {
+		return permitNumber;
+	}
+	public void setPermitNumber(String permitNumber) {
+		this.permitNumber = permitNumber;
+	}
+	public String getConsignmentDateTime() {
+		return consignmentDateTime;
+	}
+	public void setConsignmentDateTime(String consignmentDateTime) {
+		this.consignmentDateTime = consignmentDateTime;
+	}
+	public String getBusinessTypeCode() {
+		return businessTypeCode;
+	}
+	public void setBusinessTypeCode(String businessTypeCode) {
+		this.businessTypeCode = businessTypeCode;
+	}
+	public String getDespatchActualDateTime() {
+		return despatchActualDateTime;
+	}
+	public void setDespatchActualDateTime(String despatchActualDateTime) {
+		this.despatchActualDateTime = despatchActualDateTime;
+	}
+	public String getGoodsReceiptDateTime() {
+		return goodsReceiptDateTime;
+	}
+	public void setGoodsReceiptDateTime(String goodsReceiptDateTime) {
+		this.goodsReceiptDateTime = goodsReceiptDateTime;
+	}
+	
+	public List<ConsignorInfo> getConsignorInfo() {
+		return consignorInfo;
+	}
+	public void setConsignorInfo(List<ConsignorInfo> consignorInfo) {
+		this.consignorInfo = consignorInfo;
+	}
+	public List<ConsigneeInfo> getConsigneeInfo() {
+		return consigneeInfo;
+	}
+	public void setConsigneeInfo(List<ConsigneeInfo> consigneeInfo) {
+		this.consigneeInfo = consigneeInfo;
+	}
+
+	public String getTotalMonetaryAmount() {
+		return totalMonetaryAmount;
+	}
+
+	public void setTotalMonetaryAmount(String totalMonetaryAmount) {
+		this.totalMonetaryAmount = totalMonetaryAmount;
+	}
+
+	public List<VehicleInfo> getVehicleInfo() {
+		return vehicleInfo;
+	}
+	public void setVehicleInfo(List<VehicleInfo> vehicleInfo) {
+		this.vehicleInfo = vehicleInfo;
+	}
+	public List<InsuranceInformation> getInsuranceInformation() {
+		return insuranceInformation;
+	}
+	public void setInsuranceInformation(List<InsuranceInformation> insuranceInformation) {
+		this.insuranceInformation = insuranceInformation;
+	}
+
+	public List<ActualCarrierInfo> getActualCarrierInfo() {
+		return actualCarrierInfo;
+	}
+
+	public void setActualCarrierInfo(List<ActualCarrierInfo> actualCarrierInfo) {
+		this.actualCarrierInfo = actualCarrierInfo;
+	}
+
+	public String getVehicleAmount() {
+		return vehicleAmount;
+	}
+
+	public void setVehicleAmount(String vehicleAmount) {
+		this.vehicleAmount = vehicleAmount;
+	}
+
+	public String getSerialNumber() {
+		return serialNumber;
+	}
+
+	public void setSerialNumber(String serialNumber) {
+		this.serialNumber = serialNumber;
+	}
+
+	public String getTransportTypeCode() {
+		return transportTypeCode;
+	}
+
+	public void setTransportTypeCode(String transportTypeCode) {
+		this.transportTypeCode = transportTypeCode;
+	}
+}

+ 32 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/Driver.java

@@ -0,0 +1,32 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+
+public class Driver {
+	/**
+	 * 姓名	1..1	an..30	必填,驾驶员姓名。
+	 */
+	private String driverName;
+
+	/**
+	 * 机动车驾驶证编号	1..1	an..18	必填,根据机动车驾驶证填写。
+	 */
+	private String drivingLicense;
+
+	public String getDrivingLicense() {
+		return drivingLicense;
+	}
+
+	public void setDrivingLicense(String drivingLicense) {
+		this.drivingLicense = drivingLicense;
+	}
+
+	public String getDriverName() {
+		return driverName;
+	}
+	public void setDriverName(String driverName) {
+		this.driverName = driverName;
+	}
+
+	
+	
+	
+}

+ 118 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/DriverInfo.java

@@ -0,0 +1,118 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+
+import com.yh.saas.plugin.yiliangyiyun.service.Waybill;
+import java.util.List;
+
+public class DriverInfo  implements Waybill {
+    /**
+     * 姓名	1..1	an..30	必填,根据机动车驾驶证填写。
+     */
+    private String driverName;
+    /**
+     * 驾驶证编号	1..1	an..18	必填,根据机动车驾驶证填写。
+     */
+    private String drivingLicense;
+    /**
+     * 准驾车型	1..1	an..20	必填,根据机动车驾驶证填写。
+     */
+    private String vehicleClass;
+    /**
+     * 发证机关	1..n	an..128	必填,根据机动车驾驶证填写。
+     */
+    private List<String> issuingOrganizations;
+    /**
+     * 有效期自	1..1	n8	必填,根据机动车驾驶证填写。YYYYMMDD
+     */
+    private String validPeriodFrom;
+    /**
+     * 有效期至	1..1	n8	必填,根据机动车驾驶证填写。YYYYMMDD
+     */
+    private String validPeriodTo;
+
+    /**
+     * 从业资格证号
+     */
+    private String qualificationCertificate;
+
+    /**
+     * 电话号码
+     */
+    private String telephone;
+
+    /**
+     * 备注	1..1	an..256	选填。
+     */
+    private String Remark;
+
+    public String getQualificationCertificate() {
+        return qualificationCertificate;
+    }
+
+    public void setQualificationCertificate(String qualificationCertificate) {
+        this.qualificationCertificate = qualificationCertificate;
+    }
+
+    public String getTelephone() {
+        return telephone;
+    }
+
+    public void setTelephone(String telephone) {
+        this.telephone = telephone;
+    }
+
+    public String getDriverName() {
+        return driverName;
+    }
+
+    public void setDriverName(String driverName) {
+        this.driverName = driverName;
+    }
+
+    public String getDrivingLicense() {
+        return drivingLicense;
+    }
+
+    public void setDrivingLicense(String drivingLicense) {
+        this.drivingLicense = drivingLicense;
+    }
+
+    public String getVehicleClass() {
+        return vehicleClass;
+    }
+
+    public void setVehicleClass(String vehicleClass) {
+        this.vehicleClass = vehicleClass;
+    }
+
+    public List<String> getIssuingOrganizations() {
+        return issuingOrganizations;
+    }
+
+    public void setIssuingOrganizations(List<String> issuingOrganizations) {
+        this.issuingOrganizations = issuingOrganizations;
+    }
+
+    public String getValidPeriodFrom() {
+        return validPeriodFrom;
+    }
+
+    public void setValidPeriodFrom(String validPeriodFrom) {
+        this.validPeriodFrom = validPeriodFrom;
+    }
+
+    public String getValidPeriodTo() {
+        return validPeriodTo;
+    }
+
+    public void setValidPeriodTo(String validPeriodTo) {
+        this.validPeriodTo = validPeriodTo;
+    }
+
+    public String getRemark() {
+        return Remark;
+    }
+
+    public void setRemark(String remark) {
+        Remark = remark;
+    }
+}

+ 82 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/Financial.java

@@ -0,0 +1,82 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+/**
+ * 财务列表
+ * @author glxin
+ *
+ */
+public class Financial {
+	
+	/**
+	 * 付款方式代码	1..1	an..3	必填,33银行汇票;39银行转账;7第三方平台支付;71支付宝支付;72微信支付;9 其他支付方式。 
+	 */
+	private String paymentMeansCode;
+	/**
+	 * 收款方名称	1..1	an..512	必填,企业或个人。
+	 */
+	private String recipient;
+	/**
+	 * 收款帐户信息	1..1	an..512	必填,银行卡号或其他收款帐号。
+	 */
+	private String receiptAccount;
+	/**
+	 * 银行代码	0..1	an..11	选填,详见代码集。
+	 */
+	private String bankCode;
+	/**
+	 * 流水号/序列号	1..1	an..50	必填,银行或第三方支付平台的资金流水单号,现金等其他方式可填财务记账号
+	 */
+	private String sequenceCode;
+	/**
+	 * 货币金额	1..1	n..18	必填,资金流水金额,货币单位为人民币,保留3位小数,如整数的话,以.000填充。
+	 */
+	private String monetaryAmount;
+	/**
+	 * 日期时间	1..1	n14	资金流水实际发生时间YYYYMMDDHHMMSS
+	 */
+	private String dateTime;
+	public String getPaymentMeansCode() {
+		return paymentMeansCode;
+	}
+	public void setPaymentMeansCode(String paymentMeansCode) {
+		this.paymentMeansCode = paymentMeansCode;
+	}
+	public String getRecipient() {
+		return recipient;
+	}
+	public void setRecipient(String recipient) {
+		this.recipient = recipient;
+	}
+	public String getReceiptAccount() {
+		return receiptAccount;
+	}
+	public void setReceiptAccount(String receiptAccount) {
+		this.receiptAccount = receiptAccount;
+	}
+	public String getBankCode() {
+		return bankCode;
+	}
+	public void setBankCode(String bankCode) {
+		this.bankCode = bankCode;
+	}
+	public String getSequenceCode() {
+		return sequenceCode;
+	}
+	public void setSequenceCode(String sequenceCode) {
+		this.sequenceCode = sequenceCode;
+	}
+	public String getMonetaryAmount() {
+		return monetaryAmount;
+	}
+	public void setMonetaryAmount(String monetaryAmount) {
+		this.monetaryAmount = monetaryAmount;
+	}
+	public String getDateTime() {
+		return dateTime;
+	}
+	public void setDateTime(String dateTime) {
+		this.dateTime = dateTime;
+	}
+	
+	
+
+}

+ 118 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/FinancialRoot.java

@@ -0,0 +1,118 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+
+
+import com.yh.saas.plugin.yiliangyiyun.service.Waybill;
+
+import java.util.List;
+
+public class FinancialRoot implements Waybill {
+
+	/**
+	 * 单证号	1…1	an..35	必填,本资金流水单号。
+	 */
+	private String documentNumber;
+	/**
+	 * 资金流水单上传时间	1..1	an..14	必填,本资金流水单上传到省监测系统的时间。
+	 */
+	private String sendToProDateTime;
+	/**
+	 * 实际承运人名称	1..1	an..512	必填,实际承运人,实际收取运输费的人员,如车队、司机等。对应运单技术规范中第34项。
+	 */
+	private String carrier;
+	/**
+	 * 实际承运人社会统一信用代码或证件号码	1..1	an..50	必填,对应运单技术规范中第35项。
+	 */
+	private String actualCarrierID;
+	/**
+	 * 车辆牌照号	1..1	an..35	对应运单技术规范中第26项。
+	 */
+	private String vehicleNumber;
+	/**
+	 * 牌照类型代码	1..1	an..20	对应运单技术规范中第27项。
+	 */
+	private String vehiclePlateColorCode;
+	
+	/**
+	 * 运单列表	1..n		必填。
+	 */
+	private List<ShippingNote> ShippingNoteList;
+	/**
+	 * 资金流水财务
+	 */
+	private List<Financial> financiallist;
+
+	private String remark;
+
+	public String getRemark() {
+		return remark;
+	}
+
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+
+	public String getDocumentNumber() {
+		return documentNumber;
+	}
+
+	public void setDocumentNumber(String documentNumber) {
+		this.documentNumber = documentNumber;
+	}
+
+	public String getSendToProDateTime() {
+		return sendToProDateTime;
+	}
+
+	public void setSendToProDateTime(String sendToProDateTime) {
+		this.sendToProDateTime = sendToProDateTime;
+	}
+
+	public String getCarrier() {
+		return carrier;
+	}
+
+	public void setCarrier(String carrier) {
+		this.carrier = carrier;
+	}
+
+	public String getActualCarrierID() {
+		return actualCarrierID;
+	}
+
+	public void setActualCarrierID(String actualCarrierID) {
+		this.actualCarrierID = actualCarrierID;
+	}
+
+	public String getVehicleNumber() {
+		return vehicleNumber;
+	}
+
+	public void setVehicleNumber(String vehicleNumber) {
+		this.vehicleNumber = vehicleNumber;
+	}
+
+	public String getVehiclePlateColorCode() {
+		return vehiclePlateColorCode;
+	}
+
+	public void setVehiclePlateColorCode(String vehiclePlateColorCode) {
+		this.vehiclePlateColorCode = vehiclePlateColorCode;
+	}
+
+	public List<ShippingNote> getShippingNoteList() {
+		return ShippingNoteList;
+	}
+
+	public void setShippingNoteList(List<ShippingNote> shippingNoteList) {
+		ShippingNoteList = shippingNoteList;
+	}
+
+	public List<Financial> getFinanciallist() {
+		return financiallist;
+	}
+
+	public void setFinanciallist(List<Financial> financiallist) {
+		this.financiallist = financiallist;
+	}
+
+}

+ 89 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/FormatChecks.java

@@ -0,0 +1,89 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.core.io.ClassPathResource;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+public class FormatChecks {
+
+    public static boolean isRetuen = false;
+    public static List<String> businessTypeCodeList = new ArrayList<>();
+    public static List<String> licensePlateTypeCodeList = new ArrayList<>();
+    public static List<String> vehicleClassificationCodeList = new ArrayList<>();
+    public static List<String> vehicleEnergyTypeList = new ArrayList<>();
+    public static List<String> cargoTypeClassificationCodeList = new ArrayList<>();
+    public static List<String> paymentMeansCodeList = new ArrayList<>();
+    public static List<String> ipcTypeList = new ArrayList<>();
+    public static List<String> transportTypeCodeList = new ArrayList<>();
+    public static List<String> bankCodeList = new ArrayList<>();
+    public static List<String> insuranceCodeList = new ArrayList<>();
+    public static List<String> countryCodeList = new ArrayList<>();
+
+    static{
+        try{
+
+            Properties confPro = getProperties("checks_field.properties");
+
+            FormatChecks.addCodeList(confPro,"businessTypeCodeList",businessTypeCodeList);
+            FormatChecks.addCodeList(confPro,"licensePlateTypeCodeList",licensePlateTypeCodeList);
+            FormatChecks.addCodeList(confPro,"vehicleClassificationCodeList",vehicleClassificationCodeList);
+            FormatChecks.addCodeList(confPro,"vehicleEnergyTypeList",vehicleEnergyTypeList);
+            FormatChecks.addCodeList(confPro,"cargoTypeClassificationCodeList",cargoTypeClassificationCodeList);
+            FormatChecks.addCodeList(confPro,"paymentMeansCodeList",paymentMeansCodeList);
+            FormatChecks.addCodeList(confPro,"ipcTypeList",ipcTypeList);
+            FormatChecks.addCodeList(confPro,"transportTypeCodeList",transportTypeCodeList);
+            FormatChecks.addCodeList(confPro,"bankCodeList",bankCodeList);
+            FormatChecks.addCodeList(confPro,"insuranceCodeList",insuranceCodeList);
+            FormatChecks.addCodeList(confPro,"countryCodeList",countryCodeList);
+
+
+        }catch (Exception e){
+            System.out.println("#################初始化校验字段字典失败#################");
+            e.printStackTrace();
+        }
+
+    }
+
+
+
+
+
+
+
+
+
+    public static void addCodeList(Properties confPro,String propertyKey,List<String> codeList){
+        String[] arr = confPro.getProperty(propertyKey).split(",");
+        for(String bu:arr){
+            if(StringUtils.isNotBlank(bu)){
+                codeList.add(bu.trim());
+            }
+        }
+    }
+
+    public static Properties getProperties(String propertiesUri) throws IOException {
+        ClassPathResource classPath = new ClassPathResource(propertiesUri);
+        InputStream inputStream = classPath.getInputStream();
+        InputStreamReader isr = new InputStreamReader(inputStream,"UTF-8");
+        BufferedReader br = new BufferedReader(isr);
+        String str = null;
+        Properties confPro = new Properties();
+        while((str = br.readLine())!=null){
+            System.out.println("配置文件输出:"+str);
+            if(StringUtils.isBlank(str) || str.split("=").length < 2){
+                continue;
+            }
+            confPro.setProperty(str.split("=")[0].trim(), str.split("=")[1].trim());
+        }
+        return confPro;
+    }
+
+
+}

+ 58 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/GoodsInfo.java

@@ -0,0 +1,58 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+
+public class GoodsInfo {
+	/**
+	 * 货物名称	1..1	an..512	必填。
+	 */
+	private String descriptionOfGoods;
+	/**
+	 * 货物类型分类代码	1..1	an..3	必填,详见代码集。
+	 */
+	private String cargoTypeClassificationCode;
+	/**
+	 * 货物项毛重	1..1	n..14,3	必填,重量单位以KGM千克填写数值,
+	 * 保留3位小数,如整数的话,以.000填充。小数点不计入总长。如是轻
+	 * 泡货等货物,请估算重量。如一笔业务分几辆车运,需报送每辆车实际运输的货物重量。
+	 */
+	private String goodsItemGrossWeight;
+	/**
+	 * 体积	0..1	n..9,4	选填,体积单位以DMQ立方米填写数值,保留4位小数,
+	 * 如整数的话,以.0000填充。小数点不计入总长。
+	 */
+	private String cube;
+	/**
+	 * 总件数	0..1	n..8	选填。
+	 */
+	private String totalNumberOfPackages;
+	public String getDescriptionOfGoods() {
+		return descriptionOfGoods;
+	}
+	public void setDescriptionOfGoods(String descriptionOfGoods) {
+		this.descriptionOfGoods = descriptionOfGoods;
+	}
+	public String getCargoTypeClassificationCode() {
+		return cargoTypeClassificationCode;
+	}
+	public void setCargoTypeClassificationCode(String cargoTypeClassificationCode) {
+		this.cargoTypeClassificationCode = cargoTypeClassificationCode;
+	}
+	public String getGoodsItemGrossWeight() {
+		return goodsItemGrossWeight;
+	}
+	public void setGoodsItemGrossWeight(String goodsItemGrossWeight) {
+		this.goodsItemGrossWeight = goodsItemGrossWeight;
+	}
+	public String getCube() {
+		return cube;
+	}
+	public void setCube(String cube) {
+		this.cube = cube;
+	}
+	public String getTotalNumberOfPackages() {
+		return totalNumberOfPackages;
+	}
+	public void setTotalNumberOfPackages(String totalNumberOfPackages) {
+		this.totalNumberOfPackages = totalNumberOfPackages;
+	}
+
+}

+ 28 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/InsuranceInformation.java

@@ -0,0 +1,28 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+/**
+ * 保险信息
+ * @author glxin
+ */
+public class InsuranceInformation {
+	/**
+	 * 保险单号	1..1	an..30	必填。
+	 */
+	private String policyNumber;
+	/**
+	 * 保险公司名称	1..1	an..30	必填,详见代码集。
+	 */
+	private String insuranceCompanyCode;
+	public String getPolicyNumber() {
+		return policyNumber;
+	}
+	public void setPolicyNumber(String policyNumber) {
+		this.policyNumber = policyNumber;
+	}
+	public String getInsuranceCompanyCode() {
+		return insuranceCompanyCode;
+	}
+
+	public void setInsuranceCompanyCode(String insuranceCompanyCode) {
+		this.insuranceCompanyCode = insuranceCompanyCode;
+	}
+}

+ 229 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/Root.java

@@ -0,0 +1,229 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+
+/**
+ * 报文对象
+ *
+ * @author glxin
+ */
+public class Root {
+
+    private String userName;
+    private String publicKey;
+    private String privateKey;
+    private String uscc;
+    private String userCode;
+    private String section;
+    private String areaCode;
+    /************/
+
+    /**
+     * 报文参考号
+     * 必填,报文的唯一标识符,由系统按GUID规则自动产生
+     */
+    private String messageReferenceNumber;
+
+    /**
+     * 报文名称
+     * 必填,报文中文名称:
+     * 电子运单、
+     * 位置信息单、
+     * 资金流水单、
+     * 车辆信息单(总质量4.5吨及以下普通货运车辆信息单)、
+     * 驾驶员信息单(使用总质量4.5吨及以下普通货运车辆从事普通货物运输经营的驾驶员信息单)。
+     */
+    private String documentName;
+
+    /**
+     * 报文版本号
+     */
+    private String documentVersionNumber;
+
+    /**
+     * 发送方代码
+     * 必填,省监测系统交换代码/网络货运经营者交换代码(过渡期内)
+     */
+    private String senderCode;
+
+    /**
+     * 接收方代码
+     * 必填,部交互系统代码:wlhymot
+     */
+    private String recipientCode = "河南省";
+
+    /**
+     * 发送日期时间
+     * 必填,报文发送的日期时间。YYYYMMDDhhmmss
+     */
+    private String messageSendingDateTime;
+    /**
+     * 业务接口代码
+     */
+    private String ipcType;
+
+    /**
+     * Token
+     */
+    private String token;
+
+    /**
+     * 报文密文
+     */
+    private String body;
+
+    /**
+     * 对称密钥加密串
+     * 必填,用非对称公钥加密对称密钥后的加密字符串。
+     */
+    private String encryptedCode;
+
+    /**
+     * 运单内容加密串
+     * 必填,用随机生成的对称密钥加密运单内容后的加密字符串。
+     */
+    private String encryptedContent;
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getMessageReferenceNumber() {
+        return messageReferenceNumber;
+    }
+
+    public void setMessageReferenceNumber(String messageReferenceNumber) {
+        this.messageReferenceNumber = messageReferenceNumber;
+    }
+
+    public String getPublicKey() {
+        return publicKey;
+    }
+
+    public void setPublicKey(String publicKey) {
+        this.publicKey = publicKey;
+    }
+
+    public String getPrivateKey() {
+        return privateKey;
+    }
+
+    public void setPrivateKey(String privateKey) {
+        this.privateKey = privateKey;
+    }
+
+    public String getDocumentName() {
+        return documentName;
+    }
+
+    public void setDocumentName(String documentName) {
+        this.documentName = documentName;
+    }
+
+    public String getDocumentVersionNumber() {
+        return documentVersionNumber;
+    }
+
+    public void setDocumentVersionNumber(String documentVersionNumber) {
+        this.documentVersionNumber = documentVersionNumber;
+    }
+
+    public String getSenderCode() {
+        return senderCode;
+    }
+
+    public void setSenderCode(String senderCode) {
+        this.senderCode = senderCode;
+    }
+
+    public String getRecipientCode() {
+        return recipientCode;
+    }
+
+    public void setRecipientCode(String recipientCode) {
+        this.recipientCode = recipientCode;
+    }
+
+    public String getMessageSendingDateTime() {
+        return messageSendingDateTime;
+    }
+
+    public void setMessageSendingDateTime(String messageSendingDateTime) {
+        this.messageSendingDateTime = messageSendingDateTime;
+    }
+
+    public String getIpcType() {
+        return ipcType;
+    }
+
+    public void setIpcType(String ipcType) {
+        this.ipcType = ipcType;
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public String getBody() {
+        return body;
+    }
+
+    public void setBody(String body) {
+        this.body = body;
+    }
+
+    public String getEncryptedCode() {
+        return encryptedCode;
+    }
+
+    public void setEncryptedCode(String encryptedCode) {
+        this.encryptedCode = encryptedCode;
+    }
+
+    public String getEncryptedContent() {
+        return encryptedContent;
+    }
+
+    public void setEncryptedContent(String encryptedContent) {
+        this.encryptedContent = encryptedContent;
+    }
+
+    public String getUscc() {
+        return uscc;
+    }
+
+    public String getUserCode() {
+        return userCode;
+    }
+
+    public void setUserCode(String userCode) {
+        this.userCode = userCode;
+    }
+
+    public void setUscc(String uscc) {
+        this.uscc = uscc;
+    }
+
+    public String getSection() {
+        return section;
+    }
+
+    public void setSection(String section) {
+        this.section = section;
+    }
+
+    public String getAreaCode() {
+        return areaCode;
+    }
+
+    public void setAreaCode(String areaCode) {
+        this.areaCode = areaCode;
+    }
+
+}

+ 34 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/ShippingNote.java

@@ -0,0 +1,34 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+
+public class ShippingNote {
+
+    private String shippingNoteNumber;
+
+    private String serialNumber;
+
+    private String totalMonetaryAmount;
+
+    public String getTotalMonetaryAmount() {
+        return totalMonetaryAmount;
+    }
+
+    public void setTotalMonetaryAmount(String totalMonetaryAmount) {
+        this.totalMonetaryAmount = totalMonetaryAmount;
+    }
+
+    public String getSerialNumber() {
+        return serialNumber;
+    }
+
+    public void setSerialNumber(String serialNumber) {
+        this.serialNumber = serialNumber;
+    }
+
+    public String getShippingNoteNumber() {
+        return shippingNoteNumber;
+    }
+
+    public void setShippingNoteNumber(String shippingNoteNumber) {
+        this.shippingNoteNumber = shippingNoteNumber;
+    }
+}

+ 179 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/Vehicle.java

@@ -0,0 +1,179 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+
+import com.yh.saas.plugin.yiliangyiyun.service.Waybill;
+
+
+public class Vehicle implements Waybill {
+	
+	/**
+	 * 车辆牌照号	1..1	an..35	必填,对应电子运单第38项。
+	 */
+	private String vehicleNumber;
+
+	/**
+	 * 车牌颜色
+	 */
+	private String vehiclePlateColorCode;
+	/**
+	 * 车辆类型	1..1	an..12	必填,按照机动车行驶证填写。
+	 */
+	private String vehicleType;
+	/**
+	 * 所有人	1..1	an..128	必填,按照机动车行驶证填写。
+	 */
+	private String owner;
+	/**
+	 * 使用性质	1..1	an..20	必填,按照机动车行驶证填写。
+	 */
+	private String useCharacter;
+	/**
+	 * 车辆识别代号	1..1	an..32	可填。按照机动车行驶证填写。
+	 */
+	private String vin;
+	/**
+	 * 发证机关	1..1	an..128	必填,按照机动车行驶证填写。
+	 */
+	private String issuingOrganizations;
+	/**
+	 * 注册日期	1..1	n8	必填,按照机动车行驶证填写。YYYYMMDD
+	 */
+	private String registerDate;
+	/**
+	 * 发证日期	1..1	n8	必填,按照机动车行驶证填写。YYYYMMDD
+	 */
+	private String issueDate;
+	/**
+	 * 车辆能源类型
+	 */
+	private String vehicleEnergyType;
+	/**
+	 * 核定载质量	1..1	n..9,2	必填,默认单位:吨,保留两位小数,
+	 * 如整数的话,以.00填充。小数点不计入总长。
+	 */
+	private String vehicleTonnage;
+
+	/**
+	 * 1..1必填,参考机动车行驶证填写,默认单位:吨,保留两位小数,如整数的话,以.00填充。小数点不计入总长。
+	 * n..9,2
+	 */
+	private String grossMass;
+
+	/**
+	 * 1..1	n12	必填,总质量4.5吨及以下普通货运车辆的,可填“车籍地6位行政区域代码+000000”。
+	 */
+	private String roadTransportCertificateNumber;
+
+	/**
+	 * 挂车牌照号	0..1	an..35	可填。
+	 */
+	private String  trailerVehiclePlateNumber;
+	/**
+	 * 备注	0..1	an..256	选填。
+	 */
+	private String remark;
+
+	public String getVehiclePlateColorCode() {
+		return vehiclePlateColorCode;
+	}
+
+	public void setVehiclePlateColorCode(String vehiclePlateColorCode) {
+		this.vehiclePlateColorCode = vehiclePlateColorCode;
+	}
+
+	public String getVehicleEnergyType() {
+		return vehicleEnergyType;
+	}
+
+	public void setVehicleEnergyType(String vehicleEnergyType) {
+		this.vehicleEnergyType = vehicleEnergyType;
+	}
+
+	public String getVehicleTonnage() {
+		return vehicleTonnage;
+	}
+
+	public void setVehicleTonnage(String vehicleTonnage) {
+		this.vehicleTonnage = vehicleTonnage;
+	}
+
+	public String getGrossMass() {
+		return grossMass;
+	}
+
+	public void setGrossMass(String grossMass) {
+		this.grossMass = grossMass;
+	}
+
+	public String getRoadTransportCertificateNumber() {
+		return roadTransportCertificateNumber;
+	}
+
+	public void setRoadTransportCertificateNumber(String roadTransportCertificateNumber) {
+		this.roadTransportCertificateNumber = roadTransportCertificateNumber;
+	}
+
+	public String getTrailerVehiclePlateNumber() {
+		return trailerVehiclePlateNumber;
+	}
+
+	public void setTrailerVehiclePlateNumber(String trailerVehiclePlateNumber) {
+		this.trailerVehiclePlateNumber = trailerVehiclePlateNumber;
+	}
+
+	public String getVehicleNumber() {
+		return vehicleNumber;
+	}
+	public void setVehicleNumber(String vehicleNumber) {
+		this.vehicleNumber = vehicleNumber;
+	}
+
+	public String getVehicleType() {
+		return vehicleType;
+	}
+	public void setVehicleType(String vehicleType) {
+		this.vehicleType = vehicleType;
+	}
+	public String getOwner() {
+		return owner;
+	}
+	public void setOwner(String owner) {
+		this.owner = owner;
+	}
+	public String getUseCharacter() {
+		return useCharacter;
+	}
+	public void setUseCharacter(String useCharacter) {
+		this.useCharacter = useCharacter;
+	}
+	public String getVin() {
+		return vin;
+	}
+	public void setVin(String vin) {
+		this.vin = vin;
+	}
+	public String getIssuingOrganizations() {
+		return issuingOrganizations;
+	}
+	public void setIssuingOrganizations(String issuingOrganizations) {
+		this.issuingOrganizations = issuingOrganizations;
+	}
+	public String getRegisterDate() {
+		return registerDate;
+	}
+	public void setRegisterDate(String registerDate) {
+		this.registerDate = registerDate;
+	}
+	public String getIssueDate() {
+		return issueDate;
+	}
+	public void setIssueDate(String issueDate) {
+		this.issueDate = issueDate;
+	}
+	public String getRemark() {
+		return remark;
+	}
+	public void setRemark(String remark) {
+		this.remark = remark;
+	}
+	
+}

+ 154 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/entity/view/VehicleInfo.java

@@ -0,0 +1,154 @@
+package com.yh.saas.plugin.yiliangyiyun.entity.view;
+
+import java.util.List;
+
+/**
+ * 车辆信息
+ * @author glxin
+ */
+public class VehicleInfo {
+	
+	/**
+	 * 牌照类型代码	1..1	an..20	必填,详见代码集。
+	 */
+	private String vehiclePlateColorCode;
+	/**
+	 * 车辆牌照号	1..1	an..35	必填。
+	 */
+	private String vehicleNumber;
+
+	/**
+	 * 挂车牌照类型代码	1..1	an..20	必填,详见代码集。
+	 */
+	private String trailerVehiclePlateColorCode;
+	/**
+	 * 挂车车辆牌照号	1..1	an..35	必填。
+	 */
+	private String trailerVehiclePlateNumber;
+
+	/**
+	 * 发货日期时间
+	 */
+	private String despatchActualDateTime;
+
+	/**
+	 * 收货日期时间
+	 */
+	private String goodsReceiptDateTime;
+
+	/**
+	 * 装货地址
+	 */
+	private String placeOfLoading;;
+
+	private String loadingCountrySubdivisionCode;
+
+	private String GoodsReceiptPlace;
+
+	private String receiptCountrySubdivisionCode;
+
+	/**
+	 * 驾驶员信息,可以多个
+	 */
+	private List<Driver> driver;
+	/**
+	 * 货物信息
+	 */
+	private List<GoodsInfo> goodsInfo;
+
+	public String getVehiclePlateColorCode() {
+		return vehiclePlateColorCode;
+	}
+
+	public void setVehiclePlateColorCode(String vehiclePlateColorCode) {
+		this.vehiclePlateColorCode = vehiclePlateColorCode;
+	}
+
+	public String getVehicleNumber() {
+		return vehicleNumber;
+	}
+
+	public void setVehicleNumber(String vehicleNumber) {
+		this.vehicleNumber = vehicleNumber;
+	}
+
+	public String getTrailerVehiclePlateNumber() {
+		return trailerVehiclePlateNumber;
+	}
+
+	public void setTrailerVehiclePlateNumber(String trailerVehiclePlateNumber) {
+		this.trailerVehiclePlateNumber = trailerVehiclePlateNumber;
+	}
+
+	public String getTrailerVehiclePlateColorCode() {
+		return trailerVehiclePlateColorCode;
+	}
+
+	public void setTrailerVehiclePlateColorCode(String trailerVehiclePlateColorCode) {
+		this.trailerVehiclePlateColorCode = trailerVehiclePlateColorCode;
+	}
+
+	public String getDespatchActualDateTime() {
+		return despatchActualDateTime;
+	}
+
+	public void setDespatchActualDateTime(String despatchActualDateTime) {
+		this.despatchActualDateTime = despatchActualDateTime;
+	}
+
+	public String getGoodsReceiptDateTime() {
+		return goodsReceiptDateTime;
+	}
+
+	public void setGoodsReceiptDateTime(String goodsReceiptDateTime) {
+		this.goodsReceiptDateTime = goodsReceiptDateTime;
+	}
+
+	public String getPlaceOfLoading() {
+		return placeOfLoading;
+	}
+
+	public void setPlaceOfLoading(String placeOfLoading) {
+		this.placeOfLoading = placeOfLoading;
+	}
+
+	public String getLoadingCountrySubdivisionCode() {
+		return loadingCountrySubdivisionCode;
+	}
+
+	public void setLoadingCountrySubdivisionCode(String loadingCountrySubdivisionCode) {
+		this.loadingCountrySubdivisionCode = loadingCountrySubdivisionCode;
+	}
+
+	public String getGoodsReceiptPlace() {
+		return GoodsReceiptPlace;
+	}
+
+	public void setGoodsReceiptPlace(String goodsReceiptPlace) {
+		GoodsReceiptPlace = goodsReceiptPlace;
+	}
+
+	public String getReceiptCountrySubdivisionCode() {
+		return receiptCountrySubdivisionCode;
+	}
+
+	public void setReceiptCountrySubdivisionCode(String receiptCountrySubdivisionCode) {
+		this.receiptCountrySubdivisionCode = receiptCountrySubdivisionCode;
+	}
+
+	public List<Driver> getDriver() {
+		return driver;
+	}
+
+	public void setDriver(List<Driver> driver) {
+		this.driver = driver;
+	}
+
+	public List<GoodsInfo> getGoodsInfo() {
+		return goodsInfo;
+	}
+
+	public void setGoodsInfo(List<GoodsInfo> goodsInfo) {
+		this.goodsInfo = goodsInfo;
+	}
+}

+ 1 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/IDriverCarInfoService.java

@@ -3,6 +3,7 @@ package com.yh.saas.plugin.yiliangyiyun.service;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.yh.saas.plugin.yiliangyiyun.entity.HyDriverCarInfo;
 import com.baomidou.mybatisplus.service.IService;
+import com.yh.saas.plugin.yiliangyiyun.entity.view.Root;
 
 import java.io.IOException;
 import java.text.ParseException;

+ 3 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/IDriverInfoService.java

@@ -3,6 +3,8 @@ package com.yh.saas.plugin.yiliangyiyun.service;
 import com.baomidou.mybatisplus.plugins.Page;
 import com.yh.saas.plugin.yiliangyiyun.entity.HyDriverInfo;
 import com.baomidou.mybatisplus.service.IService;
+import com.yh.saas.plugin.yiliangyiyun.entity.view.DriverInfo;
+import com.yh.saas.plugin.yiliangyiyun.entity.view.Root;
 
 import java.io.IOException;
 import java.text.ParseException;
@@ -73,6 +75,7 @@ public interface IDriverInfoService extends IService<HyDriverInfo> {
      */
     String batchSubmission(HyDriverInfo hyDriverInfo) throws IOException , ParseException;
 
+
     /**
      * 后台管理司机信息上报列表
      * @param  hyDriverInfo

+ 5 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/Waybill.java

@@ -0,0 +1,5 @@
+package com.yh.saas.plugin.yiliangyiyun.service;
+
+public interface Waybill {
+
+}

+ 60 - 47
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/DriverCarInfoServiceImpl.java

@@ -10,6 +10,7 @@ import com.yh.saas.plugin.yiliangyiyun.entity.HyCommonSysParameter;
 import com.yh.saas.plugin.yiliangyiyun.entity.HyDriverCarInfo;
 import com.yh.saas.plugin.yiliangyiyun.entity.HyDriverInfo;
 import com.yh.saas.plugin.yiliangyiyun.entity.NewsInfo;
+import com.yh.saas.plugin.yiliangyiyun.entity.view.Root;
 import com.yh.saas.plugin.yiliangyiyun.exception.YException;
 import com.yh.saas.plugin.yiliangyiyun.exception.YExceptionEnum;
 import com.yh.saas.plugin.yiliangyiyun.mapper.DriverCarInfoMapper;
@@ -19,6 +20,7 @@ import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.yh.saas.plugin.yiliangyiyun.service.IDriverInfoService;
 import com.yh.saas.plugin.yiliangyiyun.service.INewsInfoService;
 import com.yh.saas.plugin.yiliangyiyun.util.EntityAnalyse;
+import com.yh.saas.plugin.yiliangyiyun.util.MonitoringSystemReporting;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -119,31 +121,31 @@ public class DriverCarInfoServiceImpl extends ServiceImpl<DriverCarInfoMapper, H
         hyDriverCarInfo.setStatus(StatusEnum.IDENTITY_REVIEWED.getName());
         hyDriverCarInfo.setStatusKey(StatusEnum.IDENTITY_REVIEWED.getFlag());
 
-        //查询车辆类型key值
-        HyCommonSysParameter hyCommonSysParameter = commonSysParameterService.selectOne(new EntityWrapper<HyCommonSysParameter>()
-                .eq("const_id", "CAR1").eq("const_value", hyDriverCarInfo.getVehicleType()));
-        //校验车辆类型是否正确
-        if(hyCommonSysParameter == null){
-            throw new YException(YExceptionEnum.CORRECT_DRIVING_LICENSE);
-        }
-        hyDriverCarInfo.setVehicleTypeKey(hyCommonSysParameter.getConstKey());
-        //车辆信息上报
-        String token = EntityAnalyse.GetJTToken();
-        hyDriverCarInfo.setToken(token);
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                try{
-                    EntityAnalyse.uploadDriverCarInfo(hyDriverCarInfo);
-                }catch (Exception e){
-                    e.printStackTrace();
-                }
-            }
-        }).start();
-        //更改上报状态
-        hyDriverCarInfo.setEscalationDate(new Date());
-        hyDriverCarInfo.setEscalationStatusKey(StatusEnum.PARK_UNDER_REVIEW.getFlag());
-        hyDriverCarInfo.setEscalationStatus(StatusEnum.PARK_UNDER_REVIEW.getName());
+//        //查询车辆类型key值
+//        HyCommonSysParameter hyCommonSysParameter = commonSysParameterService.selectOne(new EntityWrapper<HyCommonSysParameter>()
+//                .eq("const_id", "CAR1").eq("const_value", hyDriverCarInfo.getVehicleType()));
+//        //校验车辆类型是否正确
+//        if(hyCommonSysParameter == null){
+//            throw new YException(YExceptionEnum.CORRECT_DRIVING_LICENSE);
+//        }
+//        hyDriverCarInfo.setVehicleTypeKey(hyCommonSysParameter.getConstKey());
+//        //车辆信息上报
+//        String token = EntityAnalyse.GetJTToken();
+//        hyDriverCarInfo.setToken(token);
+//        new Thread(new Runnable() {
+//            @Override
+//            public void run() {
+//                try{
+//                    EntityAnalyse.uploadDriverCarInfo(hyDriverCarInfo);
+//                }catch (Exception e){
+//                    e.printStackTrace();
+//                }
+//            }
+//        }).start();
+//        //更改上报状态
+//        hyDriverCarInfo.setEscalationDate(new Date());
+//        hyDriverCarInfo.setEscalationStatusKey(StatusEnum.PARK_UNDER_REVIEW.getFlag());
+//        hyDriverCarInfo.setEscalationStatus(StatusEnum.PARK_UNDER_REVIEW.getName());
 
         this.insert(hyDriverCarInfo);
         return "ok";
@@ -159,27 +161,27 @@ public class DriverCarInfoServiceImpl extends ServiceImpl<DriverCarInfoMapper, H
         hyDriverCarInfo.setStatus(StatusEnum.IDENTITY_REVIEWED.getName());
         hyDriverCarInfo.setStatusKey(StatusEnum.IDENTITY_REVIEWED.getFlag());
 
-        //查询车辆类型key值
-        HyCommonSysParameter hyCommonSysParameter = commonSysParameterService.selectOne(new EntityWrapper<HyCommonSysParameter>()
-                .eq("const_id", "CAR1").eq("const_value", hyDriverCarInfo.getVehicleType()));
-        hyDriverCarInfo.setVehicleTypeKey(hyCommonSysParameter.getConstKey());
-        //信息上报
-        String token = EntityAnalyse.GetJTToken();
-        hyDriverCarInfo.setToken(token);
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                try{
-                    EntityAnalyse.uploadDriverCarInfo(hyDriverCarInfo);
-                }catch (Exception e){
-                    e.printStackTrace();
-                }
-            }
-        }).start();
-        //更改上报状态
-        hyDriverCarInfo.setEscalationDate(new Date());
-        hyDriverCarInfo.setEscalationStatusKey(StatusEnum.PARK_UNDER_REVIEW.getFlag());
-        hyDriverCarInfo.setEscalationStatus(StatusEnum.PARK_UNDER_REVIEW.getName());
+//        //查询车辆类型key值
+//        HyCommonSysParameter hyCommonSysParameter = commonSysParameterService.selectOne(new EntityWrapper<HyCommonSysParameter>()
+//                .eq("const_id", "CAR1").eq("const_value", hyDriverCarInfo.getVehicleType()));
+//        hyDriverCarInfo.setVehicleTypeKey(hyCommonSysParameter.getConstKey());
+//        //信息上报
+//        String token = EntityAnalyse.GetJTToken();
+//        hyDriverCarInfo.setToken(token);
+//        new Thread(new Runnable() {
+//            @Override
+//            public void run() {
+//                try{
+//                    EntityAnalyse.uploadDriverCarInfo(hyDriverCarInfo);
+//                }catch (Exception e){
+//                    e.printStackTrace();
+//                }
+//            }
+//        }).start();
+//        //更改上报状态
+//        hyDriverCarInfo.setEscalationDate(new Date());
+//        hyDriverCarInfo.setEscalationStatusKey(StatusEnum.PARK_UNDER_REVIEW.getFlag());
+//        hyDriverCarInfo.setEscalationStatus(StatusEnum.PARK_UNDER_REVIEW.getName());
 
         this.updateById(hyDriverCarInfo);
         return "OK";
@@ -283,7 +285,7 @@ public class DriverCarInfoServiceImpl extends ServiceImpl<DriverCarInfoMapper, H
                 HyCommonSysParameter hyCommonSysParameter = commonSysParameterService.selectOne(new EntityWrapper<HyCommonSysParameter>()
                         .eq("const_id", "CAR1").eq("const_value", hyDriverCarInfo1.getVehicleType()));
                 hyDriverCarInfo1.setVehicleTypeKey(hyCommonSysParameter.getConstKey());
-                //上报
+                //园区上报
                 hyDriverCarInfo1.setToken(token);
                 new Thread(new Runnable() {
                     @Override
@@ -295,6 +297,17 @@ public class DriverCarInfoServiceImpl extends ServiceImpl<DriverCarInfoMapper, H
                         }
                     }
                 }).start();
+                //监测系统上报
+                new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        try{
+                            MonitoringSystemReporting.testVehicleRoot(hyDriverCarInfo1);
+                        }catch (Exception e){
+                            e.printStackTrace();
+                        }
+                    }
+                }).start();
                 //更改上报状态
                 hyDriverCarInfo1.setEscalationDate(new Date());
                 hyDriverCarInfo1.setEscalationStatusKey(StatusEnum.PARK_UNDER_REVIEW.getFlag());

+ 65 - 50
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/DriverInfoServiceImpl.java

@@ -8,12 +8,15 @@ import com.yh.saas.common.support.util.StringUtils;
 import com.yh.saas.plugin.yiliangyiyun.constant.NumberConstant;
 import com.yh.saas.plugin.yiliangyiyun.constant.StatusEnum;
 import com.yh.saas.plugin.yiliangyiyun.entity.*;
+import com.yh.saas.plugin.yiliangyiyun.entity.view.DriverInfo;
+import com.yh.saas.plugin.yiliangyiyun.entity.view.Root;
 import com.yh.saas.plugin.yiliangyiyun.exception.YException;
 import com.yh.saas.plugin.yiliangyiyun.exception.YExceptionEnum;
 import com.yh.saas.plugin.yiliangyiyun.mapper.DriverInfoMapper;
 import com.yh.saas.plugin.yiliangyiyun.service.*;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.yh.saas.plugin.yiliangyiyun.util.EntityAnalyse;
+import com.yh.saas.plugin.yiliangyiyun.util.MonitoringSystemReporting;
 import lombok.SneakyThrows;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -238,31 +241,31 @@ public class DriverInfoServiceImpl extends ServiceImpl<DriverInfoMapper, HyDrive
             }
         }
 
-        //上报
-        List<HyDriverInfo> hyDriverInfos1 = new ArrayList<>();
-        HyDriverInfo tmp = new HyDriverInfo();
-        BeanUtils.copyProperties(hyDriverInfo,tmp);
-        //将对象放入list
-        hyDriverInfos1.add(tmp);
-        hyDriverInfo.setHyDriverInfoList(hyDriverInfos1);
-        //获取token
-        String token = EntityAnalyse.GetJTToken();
-        hyDriverInfo.setToken(token);
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                try{
-                    EntityAnalyse.uploadDriverInfo(hyDriverInfo);
-                }catch (Exception e){
-                    e.printStackTrace();
-                }
-            }
-        }).start();
-
-        //更改上报状态
-        hyDriverInfo.setEscalationDate(new Date());
-        hyDriverInfo.setEscalationStatusKey(StatusEnum.PARK_UNDER_REVIEW.getFlag());
-        hyDriverInfo.setEscalationStatus(StatusEnum.PARK_UNDER_REVIEW.getName());
+//        //上报
+//        List<HyDriverInfo> hyDriverInfos1 = new ArrayList<>();
+//        HyDriverInfo tmp = new HyDriverInfo();
+//        BeanUtils.copyProperties(hyDriverInfo,tmp);
+//        //将对象放入list
+//        hyDriverInfos1.add(tmp);
+//        hyDriverInfo.setHyDriverInfoList(hyDriverInfos1);
+//        //获取token
+//        String token = EntityAnalyse.GetJTToken();
+//        hyDriverInfo.setToken(token);
+//        new Thread(new Runnable() {
+//            @Override
+//            public void run() {
+//                try{
+//                    EntityAnalyse.uploadDriverInfo(hyDriverInfo);
+//                }catch (Exception e){
+//                    e.printStackTrace();
+//                }
+//            }
+//        }).start();
+//
+//        //更改上报状态
+//        hyDriverInfo.setEscalationDate(new Date());
+//        hyDriverInfo.setEscalationStatusKey(StatusEnum.PARK_UNDER_REVIEW.getFlag());
+//        hyDriverInfo.setEscalationStatus(StatusEnum.PARK_UNDER_REVIEW.getName());
 
         boolean one = this.insert(hyDriverInfo);
         boolean three = driverPayeeInfoService.insertBatch(hyDriverPayeeInfoList);
@@ -309,30 +312,30 @@ public class DriverInfoServiceImpl extends ServiceImpl<DriverInfoMapper, HyDrive
         hyDriverInfo.setBackStageStatusKey(StatusEnum.TO_BE_REVIEWED.getFlag());
         hyDriverInfo.setBackStageStatus(StatusEnum.TO_BE_REVIEWED.getName());
 
-        //上报
-        List<HyDriverInfo> hyDriverInfos1 = new ArrayList<>();
-        HyDriverInfo tmp = new HyDriverInfo();
-        BeanUtils.copyProperties(hyDriverInfo,tmp);
-        //将对象放入list
-        hyDriverInfos1.add(tmp);
-        hyDriverInfo.setHyDriverInfoList(hyDriverInfos1);
-        //获取token
-        String token = EntityAnalyse.GetJTToken();
-        hyDriverInfo.setToken(token);
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                try{
-                    EntityAnalyse.uploadDriverInfo(hyDriverInfo);
-                }catch (Exception e){
-                    e.printStackTrace();
-                }
-            }
-        }).start();
-        //更改上报状态
-        hyDriverInfo.setEscalationDate(new Date());
-        hyDriverInfo.setEscalationStatusKey(StatusEnum.PARK_UNDER_REVIEW.getFlag());
-        hyDriverInfo.setEscalationStatus(StatusEnum.PARK_UNDER_REVIEW.getName());
+//        //上报
+//        List<HyDriverInfo> hyDriverInfos1 = new ArrayList<>();
+//        HyDriverInfo tmp = new HyDriverInfo();
+//        BeanUtils.copyProperties(hyDriverInfo,tmp);
+//        //将对象放入list
+//        hyDriverInfos1.add(tmp);
+//        hyDriverInfo.setHyDriverInfoList(hyDriverInfos1);
+//        //获取token
+//        String token = EntityAnalyse.GetJTToken();
+//        hyDriverInfo.setToken(token);
+//        new Thread(new Runnable() {
+//            @Override
+//            public void run() {
+//                try{
+//                    EntityAnalyse.uploadDriverInfo(hyDriverInfo);
+//                }catch (Exception e){
+//                    e.printStackTrace();
+//                }
+//            }
+//        }).start();
+//        //更改上报状态
+//        hyDriverInfo.setEscalationDate(new Date());
+//        hyDriverInfo.setEscalationStatusKey(StatusEnum.PARK_UNDER_REVIEW.getFlag());
+//        hyDriverInfo.setEscalationStatus(StatusEnum.PARK_UNDER_REVIEW.getName());
         //主表信息编辑
         this.updateById(hyDriverInfo);
         //收款人账户信息编辑
@@ -485,7 +488,7 @@ public class DriverInfoServiceImpl extends ServiceImpl<DriverInfoMapper, HyDrive
     @Override
     @Transactional(rollbackFor = Exception.class)
     public String batchSubmission (HyDriverInfo hyDriverInfo) throws IOException , ParseException {
-        //上报
+        //园区上报
         //获取token
         String token = EntityAnalyse.GetJTToken();
         hyDriverInfo.setToken(token);
@@ -501,6 +504,17 @@ public class DriverInfoServiceImpl extends ServiceImpl<DriverInfoMapper, HyDrive
         }).start();
         if (!CollectionUtils.isEmpty(hyDriverInfo.getHyDriverInfoList())){
             for (HyDriverInfo hyDriverInfo1 : hyDriverInfo.getHyDriverInfoList()){
+                //监测系统上报
+                new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        try{
+                            MonitoringSystemReporting.testDriverRoot(hyDriverInfo1);
+                        }catch (Exception e){
+                            e.printStackTrace();
+                        }
+                    }
+                }).start();
                 //更改上报状态
                 hyDriverInfo1.setEscalationDate(new Date());
                 hyDriverInfo1.setEscalationStatusKey(StatusEnum.PARK_UNDER_REVIEW.getFlag());
@@ -511,6 +525,7 @@ public class DriverInfoServiceImpl extends ServiceImpl<DriverInfoMapper, HyDrive
         return "ok";
     }
 
+
     /**
      * 后台管理司机信息上报列表
      *

+ 78 - 66
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/HyFreightSettlementInfoServiceImpl.java

@@ -12,6 +12,7 @@ import com.yh.saas.plugin.yiliangyiyun.mapper.HyFreightSettlementInfoMapper;
 import com.yh.saas.plugin.yiliangyiyun.service.*;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.yh.saas.plugin.yiliangyiyun.util.EntityAnalyse;
+import com.yh.saas.plugin.yiliangyiyun.util.MonitoringSystemReporting;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -192,22 +193,22 @@ public class HyFreightSettlementInfoServiceImpl extends ServiceImpl<HyFreightSet
                             //司机订单变成已完结状态
                             orderInfo1.setOrderStatus(StatusEnum.DRIVER_ORDER_FINISH.getName());
                             orderInfo1.setOrderStatusKey(StatusEnum.DRIVER_ORDER_FINISH.getFlag());
-                            orderInfo1.setEscalationStatus(StatusEnum.UNDER_REVIEW.getFlag());
-                            orderInfo1.setEscalationStatusKey(StatusEnum.UNDER_REVIEW.getFlag());
                             orderInfo1.setOrderEndDate(new Date());
-                            //信息上报
-                            String token = EntityAnalyse.GetJTToken();
-                            orderInfo1.setToken(token);
-                            new Thread(new Runnable() {
-                                @Override
-                                public void run() {
-                                    try{
-                                        EntityAnalyse.uploadWaybill(orderInfo1);
-                                    }catch (Exception e){
-                                        e.printStackTrace();
-                                    }
-                                }
-                            }).start();
+//                            orderInfo1.setEscalationStatus(StatusEnum.UNDER_REVIEW.getFlag());
+//                            orderInfo1.setEscalationStatusKey(StatusEnum.UNDER_REVIEW.getFlag());
+//                            //信息上报
+//                            String token = EntityAnalyse.GetJTToken();
+//                            orderInfo1.setToken(token);
+//                            new Thread(new Runnable() {
+//                                @Override
+//                                public void run() {
+//                                    try{
+//                                        EntityAnalyse.uploadWaybill(orderInfo1);
+//                                    }catch (Exception e){
+//                                        e.printStackTrace();
+//                                    }
+//                                }
+//                            }).start();
                             orderInfoService.updateById(orderInfo1);
                         }
                         //司机承运次数+1,计算累计支付运费
@@ -323,22 +324,22 @@ public class HyFreightSettlementInfoServiceImpl extends ServiceImpl<HyFreightSet
                             //司机订单变成已完结状态
                             orderInfo1.setOrderStatus(StatusEnum.DRIVER_ORDER_FINISH.getName());
                             orderInfo1.setOrderStatusKey(StatusEnum.DRIVER_ORDER_FINISH.getFlag());
-                            orderInfo1.setEscalationStatus(StatusEnum.UNDER_REVIEW.getFlag());
-                            orderInfo1.setEscalationStatusKey(StatusEnum.UNDER_REVIEW.getFlag());
                             orderInfo1.setOrderEndDate(new Date());
-                            //信息上报
-                            String token = EntityAnalyse.GetJTToken();
-                            orderInfo1.setToken(token);
-                            new Thread(new Runnable() {
-                                @Override
-                                public void run() {
-                                    try{
-                                        EntityAnalyse.uploadWaybill(orderInfo1);
-                                    }catch (Exception e){
-                                        e.printStackTrace();
-                                    }
-                                }
-                            }).start();
+//                            orderInfo1.setEscalationStatus(StatusEnum.UNDER_REVIEW.getFlag());
+//                            orderInfo1.setEscalationStatusKey(StatusEnum.UNDER_REVIEW.getFlag());
+//                            //信息上报
+//                            String token = EntityAnalyse.GetJTToken();
+//                            orderInfo1.setToken(token);
+//                            new Thread(new Runnable() {
+//                                @Override
+//                                public void run() {
+//                                    try{
+//                                        EntityAnalyse.uploadWaybill(orderInfo1);
+//                                    }catch (Exception e){
+//                                        e.printStackTrace();
+//                                    }
+//                                }
+//                            }).start();
                             orderInfoService.updateById(orderInfo1);
                         }
                         //司机承运次数+1,计算累计支付运费
@@ -362,41 +363,41 @@ public class HyFreightSettlementInfoServiceImpl extends ServiceImpl<HyFreightSet
                         hyDriverCapitalInfoService.insert(hyDriverCapitalInfo);
                     }
                 }
-                //查询上报所需信息
-                //司机信息
-                HyDriverInfo hyDriverInfo = driverInfoService.selectOne(new EntityWrapper<HyDriverInfo>()
-                        .eq("common_id",hyFreightSettlementInfo1.getCommonId()).eq("delete_flag","0"));
-                hyFreightSettlementInfo1.setDriverIdCard(hyDriverInfo.getNumberCard());
-                hyFreightSettlementInfo1.setDriverSex(hyDriverInfo.getDriverSex());
-                hyFreightSettlementInfo1.setDriverBirthday(hyDriverInfo.getDriverBirthday());
-                hyFreightSettlementInfo1.setDriverPhone(hyDriverInfo.getDriverPhone());
-                hyFreightSettlementInfo1.setDriverAddress(hyDriverInfo.getCardAddress());
-                //车辆信息
-                HyDriverCarInfo hyDriverCarInfo = driverCarInfoService.selectOne(new EntityWrapper<HyDriverCarInfo>()
-                        .eq("car_number",orderInfo1.getCarNumber()).eq("delete_flag","0"));
-                hyFreightSettlementInfo1.setCarNumber(hyDriverCarInfo.getCarNumber());
-                hyFreightSettlementInfo1.setCarNumberColour(hyDriverCarInfo.getCarNumberColour());
-                //查询银行key值
-                HyCommonSysParameter hyCommonSysParameter = commonSysParameterService.selectOne(new EntityWrapper<HyCommonSysParameter>()
-                        .eq("const_id", "BANK1").eq("const_value", orderInfo1.getBankDeposit()));
-                if (hyCommonSysParameter == null){
-                    hyFreightSettlementInfo1.setBankKey("9999");
-                }else {
-                    hyFreightSettlementInfo1.setBankKey(hyCommonSysParameter.getConstKey());
-                }
-                //上报
-                String token = EntityAnalyse.GetJTToken();
-                hyFreightSettlementInfo1.setToken(token);
-                new Thread(new Runnable() {
-                    @Override
-                    public void run() {
-                        try{
-                            EntityAnalyse.uploadFlowSheet(hyFreightSettlementInfo1);
-                        }catch (Exception e){
-                            e.printStackTrace();
-                        }
-                    }
-                }).start();
+//                //查询上报所需信息
+//                //司机信息
+//                HyDriverInfo hyDriverInfo = driverInfoService.selectOne(new EntityWrapper<HyDriverInfo>()
+//                        .eq("common_id",hyFreightSettlementInfo1.getCommonId()).eq("delete_flag","0"));
+//                hyFreightSettlementInfo1.setDriverIdCard(hyDriverInfo.getNumberCard());
+//                hyFreightSettlementInfo1.setDriverSex(hyDriverInfo.getDriverSex());
+//                hyFreightSettlementInfo1.setDriverBirthday(hyDriverInfo.getDriverBirthday());
+//                hyFreightSettlementInfo1.setDriverPhone(hyDriverInfo.getDriverPhone());
+//                hyFreightSettlementInfo1.setDriverAddress(hyDriverInfo.getCardAddress());
+//                //车辆信息
+//                HyDriverCarInfo hyDriverCarInfo = driverCarInfoService.selectOne(new EntityWrapper<HyDriverCarInfo>()
+//                        .eq("car_number",orderInfo1.getCarNumber()).eq("delete_flag","0"));
+//                hyFreightSettlementInfo1.setCarNumber(hyDriverCarInfo.getCarNumber());
+//                hyFreightSettlementInfo1.setCarNumberColour(hyDriverCarInfo.getCarNumberColour());
+//                //查询银行key值
+//                HyCommonSysParameter hyCommonSysParameter = commonSysParameterService.selectOne(new EntityWrapper<HyCommonSysParameter>()
+//                        .eq("const_id", "BANK1").eq("const_value", orderInfo1.getBankDeposit()));
+//                if (hyCommonSysParameter == null){
+//                    hyFreightSettlementInfo1.setBankKey("9999");
+//                }else {
+//                    hyFreightSettlementInfo1.setBankKey(hyCommonSysParameter.getConstKey());
+//                }
+//                //上报
+//                String token = EntityAnalyse.GetJTToken();
+//                hyFreightSettlementInfo1.setToken(token);
+//                new Thread(new Runnable() {
+//                    @Override
+//                    public void run() {
+//                        try{
+//                            EntityAnalyse.uploadFlowSheet(hyFreightSettlementInfo1);
+//                        }catch (Exception e){
+//                            e.printStackTrace();
+//                        }
+//                    }
+//                }).start();
                 //编辑信息
                 this.updateById(hyFreightSettlementInfo1);
                 //修改运费信息
@@ -496,7 +497,7 @@ public class HyFreightSettlementInfoServiceImpl extends ServiceImpl<HyFreightSet
                 }else {
                     hyFreightSettlementInfo1.setBankKey(hyCommonSysParameter.getConstKey());
                 }
-                //上报
+                //园区上报
                 hyFreightSettlementInfo1.setToken(token);
                 new Thread(new Runnable() {
                     @Override
@@ -508,6 +509,17 @@ public class HyFreightSettlementInfoServiceImpl extends ServiceImpl<HyFreightSet
                         }
                     }
                 }).start();
+                //监测系统上报
+                new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        try{
+                            MonitoringSystemReporting.getFinancialRoot(hyFreightSettlementInfo1);
+                        }catch (Exception e){
+                            e.printStackTrace();
+                        }
+                    }
+                }).start();
                 //更改上报状态
                 hyFreightSettlementInfo1.setEscalationStatusKey(StatusEnum.UNDER_REVIEW.getFlag());
                 hyFreightSettlementInfo1.setEscalationStatus(StatusEnum.UNDER_REVIEW.getName());

+ 89 - 16
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/service/impl/OrderInfoServiceImpl.java

@@ -18,6 +18,7 @@ import com.yh.saas.plugin.yiliangyiyun.mapper.OrderInfoMapper;
 import com.yh.saas.plugin.yiliangyiyun.service.*;
 import com.baomidou.mybatisplus.service.impl.ServiceImpl;
 import com.yh.saas.plugin.yiliangyiyun.util.EntityAnalyse;
+import com.yh.saas.plugin.yiliangyiyun.util.MonitoringSystemReporting;
 import com.yh.saas.plugin.yiliangyiyun.util.PdfUtil;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
@@ -99,6 +100,8 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
     private IHyFreezingMoneyInfoService hyFreezingMoneyInfoService;
     @Autowired
     private IHyFreightSettlementInfoService hyFreightSettlementInfoService;
+    @Autowired
+    private ICommonSysParameterService commonSysParameterService;
     @Value("${file-root-path}")
     private String localPath;
     @Getter
@@ -679,22 +682,22 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
             orderInfo1.setOrderStatus(StatusEnum.DRIVER_ORDER_FINISH.getName());
             orderInfo1.setCargoOwnerStatusKey(StatusEnum.OWNER_ORDER_FINISH.getFlag());
             orderInfo1.setCargoOwnerStatus(StatusEnum.OWNER_ORDER_FINISH.getName());
-            orderInfo1.setEscalationStatus(StatusEnum.UNDER_REVIEW.getFlag());
-            orderInfo1.setEscalationStatusKey(StatusEnum.UNDER_REVIEW.getFlag());
             orderInfo1.setOrderEndDate(new Date());
-            //信息上报
-            String token = EntityAnalyse.GetJTToken();
-            orderInfo1.setToken(token);
-            new Thread(new Runnable() {
-                @Override
-                public void run() {
-                    try{
-                        EntityAnalyse.uploadWaybill(orderInfo1);
-                    }catch (Exception e){
-                        e.printStackTrace();
-                    }
-                }
-            }).start();
+//            orderInfo1.setEscalationStatus(StatusEnum.UNDER_REVIEW.getFlag());
+//            orderInfo1.setEscalationStatusKey(StatusEnum.UNDER_REVIEW.getFlag());
+//            //信息上报
+//            String token = EntityAnalyse.GetJTToken();
+//            orderInfo1.setToken(token);
+//            new Thread(new Runnable() {
+//                @Override
+//                public void run() {
+//                    try{
+//                        EntityAnalyse.uploadWaybill(orderInfo1);
+//                    }catch (Exception e){
+//                        e.printStackTrace();
+//                    }
+//                }
+//            }).start();
             this.updateById(orderInfo1);
         }
         if ("1".equals(orderInfo1.getFreightAdvance())) {
@@ -883,7 +886,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
         String token = EntityAnalyse.GetJTToken();
         if (CollectionUtils.isNotEmpty(orderInfo.getOrderInfoList())) {
             for (OrderInfo orderInfo1 : orderInfo.getOrderInfoList()) {
-                //上报
+                //园区上报
                 orderInfo1.setToken(token);
                 new Thread(new Runnable() {
                     @Override
@@ -895,6 +898,75 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
                         }
                     }
                 }).start();
+                //1.查询任务,获取业务类型代码
+                PublishTaskInfo publishTaskInfo = publishTaskInfoService.selectById(orderInfo1.getTaskId());
+                if (publishTaskInfo != null){
+                    orderInfo1.setBusinessTypeCode(publishTaskInfo.getBusinessTypeKey());
+                    orderInfo1.setShipToName(publishTaskInfo.getReceiver());
+                    if (publishTaskInfo.getReceiverIdcard() == null && publishTaskInfo.getReceiverIdcard().isEmpty()){
+                        orderInfo1.setShipToID(publishTaskInfo.getReceiverCreditCode());
+                    }else {
+                        orderInfo1.setShipToID(publishTaskInfo.getReceiverIdcard());
+                    }
+                    if (!"个人货主".equals(publishTaskInfo.getCargoOwner()) && publishTaskInfo.getCompId() != null){
+                        //查询公司社会信用代码
+                        HyCompanyInfo hyCompanyInfo = companyInfoService.selectById(publishTaskInfo.getCompId());
+                        if (hyCompanyInfo != null){
+                            orderInfo1.setConsignorID(hyCompanyInfo.getUnifiedSocialCreditCode());
+                        }
+                    }
+                }
+                //2.查询承运表,装卸货时间
+                HyCarrierInfo hyCarrierInfo = carrierInfoService.selectOne(new EntityWrapper<HyCarrierInfo>().eq("order_id",orderInfo1.getId())
+                .eq("delete_flag","0"));
+                if (hyCarrierInfo != null){
+                    orderInfo1.setDeliveryTime(hyCarrierInfo.getLoadingDate());
+                    orderInfo1.setReceivingTime(hyCarrierInfo.getUnloadingDate());
+                    orderInfo1.setGrossWeight(hyCarrierInfo.getLoadingGrossWeight());
+                }
+                //3.查询托运人信息
+                HyCargoOwnerInfo hyCargoOwnerInfo = cargoOwnerInfoService.selectOne(new EntityWrapper<HyCargoOwnerInfo>()
+                        .eq("common_id",orderInfo1.getCargoCommonId()).eq("delete_flag","0"));
+                if (hyCargoOwnerInfo != null){
+                    orderInfo1.setConsignorName(hyCargoOwnerInfo.getName());
+                    if ("个人货主".equals(publishTaskInfo.getCargoOwner())){
+                        //查询托运人身份证号
+                        orderInfo1.setConsignorID(hyCargoOwnerInfo.getCardNumber());
+                    }
+                }
+                //查询发货地区行政区划代码
+                HyCommonSysParameter hyCommonSysParameter = commonSysParameterService.selectOne(new EntityWrapper<HyCommonSysParameter>()
+                        .eq("const_id", "REGION1").eq("const_value", orderInfo1.getSendArea()));
+                orderInfo1.setNationalCode(hyCommonSysParameter.getConstKey());
+                //查询收货地区行政区划代码
+                HyCommonSysParameter hyCommonSysParameter1 = commonSysParameterService.selectOne(new EntityWrapper<HyCommonSysParameter>()
+                        .eq("const_id", "REGION1").eq("const_value", orderInfo1.getUnloadArea()));
+                orderInfo1.setShipToNationalCode(hyCommonSysParameter1.getConstKey());
+                //查询司机信息
+                HyDriverInfo hyDriverInfo = driverInfoService.selectOne(new EntityWrapper<HyDriverInfo>()
+                        .eq("common_id",orderInfo1.getCommonId()).eq("delete_flag","0"));
+                if (hyDriverInfo != null){
+                    orderInfo1.setDriverIdCard(hyDriverInfo.getNumberCard());
+                    orderInfo1.setRoadTransportBusinessLicenseNo(hyDriverInfo.getActualCarrierBusinessLicense());
+                }
+                //车辆信息
+                HyDriverCarInfo hyDriverCarInfo = driverCarInfoService.selectOne(new EntityWrapper<HyDriverCarInfo>()
+                        .eq("car_number",orderInfo1.getCarNumber()).eq("common_id",orderInfo1.getCommonId()).eq("delete_flag","0"));
+                if (hyDriverCarInfo != null){
+                    orderInfo1.setCarNumberColour(hyDriverCarInfo.getCarNumberColour());
+                }
+
+                //监测系统上报
+                new Thread(new Runnable() {
+                    @Override
+                    public void run() {
+                        try{
+                            MonitoringSystemReporting.testDispatch(orderInfo1);
+                        }catch (Exception e){
+                            e.printStackTrace();
+                        }
+                    }
+                }).start();
                 //更改上报状态
                 orderInfo1.setEscalationStatusKey(StatusEnum.UNDER_REVIEW.getFlag());
                 orderInfo1.setEscalationStatus(StatusEnum.UNDER_REVIEW.getName());
@@ -1336,6 +1408,7 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoMapper, OrderInfo
                 hyCarrierInfo.setEstimatedFreight(orderInfo1.getFreight());
                 hyCarrierInfo.setLoadingDate(orderInfo.getTranStartDate());
                 hyCarrierInfo.setLoadingWeight(Double.valueOf(orderInfo.getWeight()));
+                hyCarrierInfo.setLoadingGrossWeight(Double.valueOf(orderInfo.getGrossWeight()));
                 //更新签名图片
                 commonUser.setSignImg(orderInfo.getDriverAutograph());
             }

+ 104 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/Cipher.java

@@ -0,0 +1,104 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
+import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
+import org.bouncycastle.crypto.params.ECPublicKeyParameters;
+import org.bouncycastle.math.ec.ECPoint;
+
+import java.math.BigInteger;
+
+public class Cipher {
+    private int ct;
+    private ECPoint p2;
+    private SM3Digest sm3keybase;
+    private SM3Digest sm3c3;
+    private byte key[];
+    private byte keyOff;
+
+    public Cipher()
+    {
+        this.ct = 1;
+        this.key = new byte[32];
+        this.keyOff = 0;
+    }
+
+    private void Reset()
+    {
+        this.sm3keybase = new SM3Digest();
+        this.sm3c3 = new SM3Digest();
+
+        byte p[] = Util.byteConvert32Bytes(p2.getX().toBigInteger());
+        this.sm3keybase.update(p, 0, p.length);
+        this.sm3c3.update(p, 0, p.length);
+
+        p = Util.byteConvert32Bytes(p2.getY().toBigInteger());
+        this.sm3keybase.update(p, 0, p.length);
+        this.ct = 1;
+        NextKey();
+    }
+
+    private void NextKey()
+    {
+        SM3Digest sm3keycur = new SM3Digest(this.sm3keybase);
+        sm3keycur.update((byte) (ct >> 24 & 0xff));
+        sm3keycur.update((byte) (ct >> 16 & 0xff));
+        sm3keycur.update((byte) (ct >> 8 & 0xff));
+        sm3keycur.update((byte) (ct & 0xff));
+        sm3keycur.doFinal(key, 0);
+        this.keyOff = 0;
+        this.ct++;
+    }
+
+    public ECPoint Init_enc(SM2 sm2, ECPoint userKey)
+    {
+        AsymmetricCipherKeyPair key = sm2.ecc_key_pair_generator.generateKeyPair();
+        ECPrivateKeyParameters ecpriv = (ECPrivateKeyParameters) key.getPrivate();
+        ECPublicKeyParameters ecpub = (ECPublicKeyParameters) key.getPublic();
+        BigInteger k = ecpriv.getD();
+        ECPoint c1 = ecpub.getQ();
+        this.p2 = userKey.multiply(k);
+        Reset();
+        return c1;
+    }
+
+    public void Encrypt(byte data[])
+    {
+        this.sm3c3.update(data, 0, data.length);
+        for (int i = 0; i < data.length; i++)
+        {
+            if (keyOff == key.length)
+            {
+                NextKey();
+            }
+            data[i] ^= key[keyOff++];
+        }
+    }
+
+    public void Init_dec(BigInteger userD, ECPoint c1)
+    {
+        this.p2 = c1.multiply(userD);
+        Reset();
+    }
+
+    public void Decrypt(byte data[])
+    {
+        for (int i = 0; i < data.length; i++)
+        {
+            if (keyOff == key.length)
+            {
+                NextKey();
+            }
+            data[i] ^= key[keyOff++];
+        }
+
+        this.sm3c3.update(data, 0, data.length);
+    }
+
+    public void Dofinal(byte c3[])
+    {
+        byte p[] = Util.byteConvert32Bytes(p2.getY().toBigInteger());
+        this.sm3c3.update(p, 0, p.length);
+        this.sm3c3.doFinal(c3, 0);
+        Reset();
+    }
+}

+ 83 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/Constants.java

@@ -0,0 +1,83 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+
+import java.util.Random;
+
+/**
+ * 
+ * @author glixin
+ *
+ */
+public class Constants {
+
+	/**
+	 * 成功
+	 */
+	public static final String SUCCESS = "0";
+
+	/**
+	 * 失败
+	 */
+	public static final String ERROR = "1";
+
+	/**
+     * 常量
+     */
+	public static final String RETURN_CODE = "code";
+
+	/**
+     * data接口名
+     */
+	public static final String RETURN_DATA = "data";
+
+    /**
+     * list接口名
+     */
+	public static final String RETURN_LIST = "list";
+	/**
+	 * list接口名
+	 */
+	public static final String RETURN_COUNT = "count";
+
+    /**
+     *
+     */
+	public static final String RETURN_MESSAGE = "message";
+
+
+	public static Random R = new Random();
+
+
+	/**
+	 * 私钥Key名称
+	 */
+	public static String PRIVATE_KEY_NAME = "privateKey";
+	/**
+	 * 公钥Key名称
+	 */
+	public static String PUBLIC_KEY_NAME = "publicKey";
+
+
+
+
+
+	public static final String DEBUG_SYSTEM_CODE = "debugSystem";
+
+	public static String IPC_TYPE_YD = "WLHY_YD1001";
+	public static String IPC_TYPE_ZJ = "WLHY_ZJ1001";
+	public static String IPC_TYPE_WZ = "WLHY_WZ1001";
+	public static String IPC_TYPE_JSY = "WLHY_JSY1001";
+	public static String IPC_TYPE_CL = "WLHY_CL1001";
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 2 - 8
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/EntityAnalyse.java

@@ -1,14 +1,10 @@
 package com.yh.saas.plugin.yiliangyiyun.util;
 
-import cn.hutool.db.sql.Order;
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.aliyun.oss.ServiceException;
-import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.yh.saas.plugin.yiliangyiyun.entity.*;
 import com.yh.saas.plugin.yiliangyiyun.entity.view.DistinguishView;
-import com.yh.saas.plugin.yiliangyiyun.service.ICommonSysParameterService;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.http.HttpEntity;
@@ -26,9 +22,6 @@ import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.message.BasicNameValuePair;
 import org.apache.http.util.EntityUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 import java.io.*;
 import java.net.HttpURLConnection;
 import java.net.URL;
@@ -80,6 +73,7 @@ public class EntityAnalyse {
         return "";
     }
 
+
     /**
      * 上传文件
      *
@@ -416,7 +410,7 @@ public class EntityAnalyse {
         financial.put("idcardNumber", hyFreightSettlementInfo.getDriverIdCard());
         financial.put("phone", hyFreightSettlementInfo.getDriverPhone());
         financial.put("address",hyFreightSettlementInfo.getDriverAddress());
-        financial.put("receiptAccount", hyFreightSettlementInfo.getDriverName());
+        financial.put("receiptAccount", hyFreightSettlementInfo.getBankCard());
         financial.put("bankCode", hyFreightSettlementInfo.getBankKey());
         financial.put("networkName", hyFreightSettlementInfo.getBankDepositBranch());
         financial.put("sequenceCode", hyFreightSettlementInfo.getSerialNumber());

+ 538 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/MonitoringSystemReporting.java

@@ -0,0 +1,538 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.yh.saas.plugin.yiliangyiyun.entity.HyDriverCarInfo;
+import com.yh.saas.plugin.yiliangyiyun.entity.HyDriverInfo;
+import com.yh.saas.plugin.yiliangyiyun.entity.HyFreightSettlementInfo;
+import com.yh.saas.plugin.yiliangyiyun.entity.OrderInfo;
+import com.yh.saas.plugin.yiliangyiyun.entity.view.*;
+import com.yh.saas.plugin.yiliangyiyun.service.Waybill;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+public class MonitoringSystemReporting {
+
+    /**
+     * 用户列表
+     */
+    // 账号,密码,社会信用代码
+    public static String[][] usersArr = {
+            {"23106960", "h108796l", "91210804MA10FPAM2G"}
+    };
+
+    /**
+     * 测试
+     */
+    public static final String debugStr = Constants.DEBUG_SYSTEM_CODE;
+    public static final String sendUrl = "https://heilongjiang.wlhy.org.cn/wlhy-exchange-adjust/adjustMessage/send";
+
+    public static void sendTest() {
+        System.out.println("start");
+        for (int i = 0; i < 1; i++) {
+            System.out.println(i);
+            try {
+                List<Root> roots = new ArrayList<>();
+//                roots.add(getFinancialRoot());
+//                roots.add(testDispatch());
+//                roots.add(testDriverRoot(null));
+//                roots.add(testVehicleRoot(null));
+                for (Root root : roots) {
+                    System.out.println("================================消息分割线================================");
+                    String messageJson = JSON.toJSONString(root);
+                    System.out.println("发送报文的内容:" + messageJson);
+                    String result = PostUtils.post(sendUrl, messageJson);
+                    System.out.println("服务器返回消息:" + result);
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * 获取监测系统公钥
+     *
+     * @return
+     * @throws IOException
+     */
+    public static String GetJCPublicKey() throws IOException {
+        String url = "https://heilongjiang.wlhy.org.cn/wlhy-user/RsaController/getPubKey";
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        // 模拟登陆,按实际服务器端要求选用 Post 或 Get 请求方式
+        HttpPost httpPost = new HttpPost(url);
+        JSONObject params = new JSONObject();
+        httpPost.setEntity(new StringEntity(params.toString(), StandardCharsets.UTF_8));
+        // 设置header信息
+        httpPost.setHeader("Content-type", "application/json");
+        CloseableHttpResponse response = httpClient.execute(httpPost);
+        try {
+            // 执行请求操作,并拿到结果(同步阻塞)
+            String body = EntityUtils.toString(response.getEntity());
+            JSONObject jsonObject = JSONObject.parseObject(body);
+            if (jsonObject.getString("code").equals("0")) {
+                String pubKey = jsonObject.getJSONObject("data").getString("publicKey");
+                System.out.println("pubKey = " + pubKey);
+                return pubKey;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            // 释放链接
+            response.close();
+            httpClient.close();
+        }
+        return "";
+    }
+
+    /**
+     * 获取监测系统token
+     *
+     * @return
+     * @throws IOException
+     */
+    public static Map<String, String> login(String userName, String password, String debug) {
+        Map<String, String> map = new HashMap<>();
+
+        try {
+
+            String getpublicKeyPost = PostUtils.post("https://heilongjiang.wlhy.org.cn/wlhy-user/RsaController/getPubKey", "{}");
+            System.out.println("申请公钥接口:" + getpublicKeyPost);
+            Map<String, Object> resultPublicKeyMap = JSON.parseObject(getpublicKeyPost, Map.class);
+            String publicKey = (String) ((Map) resultPublicKeyMap.get("data")).get("publicKey");
+            System.out.println("获取到的公钥:" + publicKey);
+
+            HashMap<String, String> stringStringHashMap = new HashMap<>();
+            stringStringHashMap.put(Constants.PUBLIC_KEY_NAME, publicKey);
+//            String encryptPassword = RsaEncryptUtil.encryptByPublicKey(password, stringStringHashMap);
+            String encryptPassword = SM2Utils.encrypt(Util.hexToByte(publicKey), password.getBytes());
+            System.out.println("加密后的密码:" + encryptPassword);
+
+            Map<String, String> loginParam = new HashMap<>();
+            loginParam.put("account", userName);
+            loginParam.put("passwd", encryptPassword);
+            loginParam.put("publicRsa", publicKey);
+            loginParam.put("systemCode", debug);
+            System.out.println(JSON.toJSONString(loginParam));
+            String loginPost = PostUtils.post("https://heilongjiang.wlhy.org.cn/wlhy-user/user/exgLogin", JSON.toJSONString(loginParam));
+            Map<String, Object> loginResultMap = JSON.parseObject(loginPost, Map.class);
+            System.out.println("登录post接口返回:" + loginResultMap);
+
+            String token = (String) ((Map) loginResultMap.get("data")).get("token");
+            String msgPublicKey = (String) ((Map) loginResultMap.get("data")).get("PUBLIC_KEY");
+            System.out.println("登录成功token:" + token);
+            map.put("token", token);
+            map.put("account", userName);
+            map.put("msgPublicKey", msgPublicKey);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
+
+    public static Root loginRoot(String userName, String password, String uscc, String debug) {
+        Map<String, String> token = login(userName, password, debug);
+        Root edmRoot = new Root();
+        edmRoot.setToken(token.get("token"));
+        edmRoot.setUserName(token.get("account"));
+        edmRoot.setSenderCode(token.get("account"));
+        edmRoot.setPublicKey(token.get("msgPublicKey"));
+        edmRoot.setUscc(uscc);
+        return edmRoot;
+    }
+
+    public static Root getRoot(Waybill waybill, String name) throws Exception {
+        return getRoot(waybill, name, null);
+    }
+
+    public static Root getRoot(Waybill waybill, String name, Root edmRoot) throws Exception {
+        if (edmRoot == null) {
+            edmRoot = roots.get(r.nextInt(roots.size()));
+        }
+        Map<String, String> rsaKeys = new HashMap<String, String>();
+        rsaKeys.put("PUBLIC_KEY", edmRoot.getPublicKey());
+        String aesKey = MyStrUtil.uuid().substring(0, 16);
+        String dispatchJson = JSON.toJSONString(waybill);
+        System.out.println("dispatchJson:" + dispatchJson);
+
+        SM4Utils sm4 = new SM4Utils();
+        sm4.secretKey = aesKey;
+        sm4.hexString = false;
+        System.out.println("ECB模式加密");
+        String encryptedContent = sm4.encryptData_ECB(dispatchJson);
+        String encryptedCode = SM2Utils.encrypt(Util.hexToByte(rsaKeys.get("PUBLIC_KEY")), aesKey.getBytes());
+
+        Root root = new Root();
+        root.setUserName(edmRoot.getUserName());
+        root.setDocumentName(name);
+        root.setDocumentVersionNumber("1.0");
+        root.setSenderCode(edmRoot.getSenderCode());
+        root.setRecipientCode("wlhymot");
+        root.setMessageSendingDateTime("20190909130158");
+        root.setToken(edmRoot.getToken());
+        root.setSenderCode(edmRoot.getSenderCode());
+        root.setEncryptedCode(encryptedCode);
+        root.setEncryptedContent(encryptedContent);
+        root.setMessageReferenceNumber(MyStrUtil.uuid());
+        String ipcType = "";
+        if ("车辆信息单".equals(name)) {
+            ipcType = Constants.IPC_TYPE_CL;
+        }
+        if ("驾驶员信息单".equals(name)) {
+            ipcType = Constants.IPC_TYPE_JSY;
+        }
+        if ("位置信息单".equals(name)) {
+            ipcType = Constants.IPC_TYPE_WZ;
+        }
+        if ("资金流水单".equals(name)) {
+            ipcType = Constants.IPC_TYPE_ZJ;
+        }
+        if ("电子运单".equals(name)) {
+            ipcType = Constants.IPC_TYPE_YD;
+        }
+        root.setIpcType(ipcType);
+        return root;
+    }
+
+    /**
+     * 驾驶员信息单
+     *
+     * @return
+     * @throws Exception
+     */
+    public static Root testDriverRoot(HyDriverInfo hyDriverInfo) throws Exception {
+        String name = "驾驶员信息单";
+        DriverInfo driver = testDriver(hyDriverInfo);
+        //roots.get(0)
+        Root root = getRoot(driver, name, loginRoot("23106960", "h108796l", "91210804MA10FPAM2G","debugSystem"));
+        String messageJson = JSON.toJSONString(root);
+        System.out.println("发送报文的内容:" + messageJson);
+        String result = PostUtils.post(sendUrl, messageJson);
+        System.out.println("服务器返回消息:" + result);
+        return root;
+    }
+//    public static Root testDriverRoot(Root root1) throws Exception{
+//        return testDriverRoot(root1,null);
+//    }
+
+    public static DriverInfo testDriver(HyDriverInfo hyDriverInfo) throws Exception {
+        String name = "驾驶员信息单";
+        DriverInfo driver = new DriverInfo();
+        SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");//设置日期格式
+        driver.setDriverName(hyDriverInfo.getDriverName());
+        driver.setDrivingLicense(hyDriverInfo.getNumberCard());
+        driver.setVehicleClass(hyDriverInfo.getQuasiDrivingVehicle());
+        List<String> list = new ArrayList<>();
+        list.add(hyDriverInfo.getLssuingAuthority());
+        driver.setIssuingOrganizations(list);
+        driver.setValidPeriodFrom(f.format(hyDriverInfo.getDriverLicenseValidityStartDate()));
+        String str = hyDriverInfo.getDriverLicenseValidityDate().replace("-", "");
+        driver.setValidPeriodTo(str);
+        driver.setQualificationCertificate(hyDriverInfo.getQualificationCertificate());
+        driver.setTelephone(hyDriverInfo.getDriverPhone());
+        driver.setRemark("备注");
+        return driver;
+    }
+
+    /**
+     * 校验未通过{"vehicle.GrossMass":"vehicle.GrossMass 为浮点数,最大长度不得超过 9,浮点位2位,不足补0",
+     * "vehicle.RoadTransportCertificateNumber":"vehicle.RoadTransportCertificateNumber 是存数组,长度等于12,总质量4.5吨及以下普通货运车辆的,可填“车籍地6位行政区域代码+000000”",
+     * "vehicle.TrailerVehiclePlateNumber":"vehicle.TrailerVehiclePlateNumber 不是标准车牌号",
+     * "vehicle.VehicleEnergyType":"vehicle.VehicleEnergyType 不能为空,现值只允许出现[E01, E02, E03, E04, E99]","
+     * vehicle.VehicleTonnage":"vehicle.VehicleTonnage 为浮点数,最大长度不得超过 9,浮点位2位,不足补0"}
+     * <p>
+     * 校验未通过{"vehicle.RoadTransportCertificateNumber":"vehicle.RoadTransportCertificateNumber 是存数组,长度等于12,域代码+000000”"}
+     *
+     * @return
+     * @throws Exception 车辆信息单
+     */
+    public static Root testVehicleRoot(HyDriverCarInfo hyDriverCarInfo) throws Exception {
+        String name = "车辆信息单";
+        Vehicle vehicle = new Vehicle();
+        SimpleDateFormat f = new SimpleDateFormat("yyyyMMdd");//设置日期格式
+        vehicle.setVehicleNumber(hyDriverCarInfo.getCarNumber());
+        if ("黄色".equals(hyDriverCarInfo.getCarNumberColour())) {
+            vehicle.setVehiclePlateColorCode("2");
+        } else if ("蓝色".equals(hyDriverCarInfo.getCarNumberColour())) {
+            vehicle.setVehiclePlateColorCode("1");
+        }
+        vehicle.setVehicleType(hyDriverCarInfo.getVehicleTypeKey());
+        vehicle.setOwner(hyDriverCarInfo.getOwner());
+        vehicle.setUseCharacter(hyDriverCarInfo.getUseNature());
+        vehicle.setVin(hyDriverCarInfo.getCarCode());
+        vehicle.setIssuingOrganizations(hyDriverCarInfo.getLssuingAuthority());
+        vehicle.setRegisterDate(f.format(hyDriverCarInfo.getDrivingLicenseRegistrationDate()));
+        vehicle.setIssueDate(f.format(hyDriverCarInfo.getDrivingLicenseIssueDate()));
+        if ("汽油".equals(hyDriverCarInfo.getEnergyType())) {
+            vehicle.setVehicleEnergyType("A");
+        } else if ("柴油".equals(hyDriverCarInfo.getEnergyType())) {
+            vehicle.setVehicleEnergyType("B");
+        } else if ("油电混合".equals(hyDriverCarInfo.getEnergyType())) {
+            vehicle.setVehicleEnergyType("O");
+        } else if ("纯电动".equals(hyDriverCarInfo.getEnergyType())) {
+            vehicle.setVehicleEnergyType("C");
+        } else if ("插电式混合动力".equals(hyDriverCarInfo.getEnergyType())) {
+            vehicle.setVehicleEnergyType("O");
+        } else if ("增程式".equals(hyDriverCarInfo.getEnergyType())) {
+            vehicle.setVehicleEnergyType("Z");
+        } else if ("天然气".equals(hyDriverCarInfo.getEnergyType())) {
+            vehicle.setVehicleEnergyType("E");
+        }
+        DecimalFormat df = new DecimalFormat("0.00");
+        if ("非挂车".equals(hyDriverCarInfo.getCarCategory())) {
+            Double doubleValue = hyDriverCarInfo.getCarApprovedWeight() / 1000;
+            String approvedWeight = df.format(doubleValue);
+            vehicle.setVehicleTonnage(approvedWeight);
+            Double doubleValue1 = hyDriverCarInfo.getCarTotalWeight() / 1000;
+            String totalWeight = df.format(doubleValue1);
+            vehicle.setGrossMass(totalWeight);
+        } else {
+            Double doubleValue = hyDriverCarInfo.getGuaCarApprovedWeight() / 1000;
+            String approvedWeight = df.format(doubleValue);
+            vehicle.setVehicleTonnage(approvedWeight);
+            Double doubleValue1 = hyDriverCarInfo.getServicingWeight() / 1000;
+            String servicingWeight = df.format(doubleValue1);
+            vehicle.setGrossMass(servicingWeight);
+        }
+        vehicle.setRoadTransportCertificateNumber(hyDriverCarInfo.getOperationCertificateNumber());
+        vehicle.setRemark("备注");
+        Root root = getRoot(vehicle, name, roots.get(0));
+        String messageJson = JSON.toJSONString(root);
+        System.out.println("发送报文的内容:" + messageJson);
+        String result = PostUtils.post(sendUrl, messageJson);
+        System.out.println("服务器返回消息:" + result);
+        return root;
+    }
+
+    /**
+     * 资金流水单
+     *
+     * @return
+     * @throws Exception
+     */
+    public static Root getFinancialRoot(HyFreightSettlementInfo hyFreightSettlementInfo) throws Exception {
+        String name = "资金流水单";
+        FinancialRoot financialRoot = new FinancialRoot();
+        SimpleDateFormat f1 = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式
+
+        financialRoot.setDocumentNumber(hyFreightSettlementInfo.getDocumentNo());
+        financialRoot.setSendToProDateTime(f1.format(new Date()));
+        financialRoot.setCarrier(hyFreightSettlementInfo.getDriverName());
+        financialRoot.setActualCarrierID(hyFreightSettlementInfo.getDriverIdCard());
+        financialRoot.setVehicleNumber(hyFreightSettlementInfo.getCarNumber());
+        if ("黄色".equals(hyFreightSettlementInfo.getCarNumberColour())) {
+            financialRoot.setVehiclePlateColorCode("2");
+        } else if ("蓝色".equals(hyFreightSettlementInfo.getCarNumberColour())) {
+            financialRoot.setVehiclePlateColorCode("1");
+        }
+        //运单列表
+        List<ShippingNote> shippingNoteList = new ArrayList<>();
+        ShippingNote shippingNote1 = new ShippingNote();
+        shippingNote1.setShippingNoteNumber(hyFreightSettlementInfo.getOrderNo());
+        shippingNote1.setSerialNumber("0000");
+        shippingNote1.setTotalMonetaryAmount(String.valueOf(hyFreightSettlementInfo.getAmountMoney()));
+        shippingNoteList.add(shippingNote1);
+        financialRoot.setShippingNoteList(shippingNoteList);
+        //财务列表
+        List<Financial> financiallist = new ArrayList<>();
+        Financial financial1 = new Financial();
+        financial1.setPaymentMeansCode("32");
+        financial1.setRecipient(hyFreightSettlementInfo.getDriverName());
+        financial1.setReceiptAccount(hyFreightSettlementInfo.getBankCard());
+        financial1.setBankCode(hyFreightSettlementInfo.getBankKey());
+        financial1.setSequenceCode(hyFreightSettlementInfo.getSerialNumber());
+        Double doubleValue1 = Double.parseDouble(new DecimalFormat("0.000").format(hyFreightSettlementInfo.getAmountMoney()));
+        financial1.setMonetaryAmount(String.valueOf(doubleValue1));
+        financial1.setDateTime(f1.format(hyFreightSettlementInfo.getPaymentDate()));
+        financiallist.add(financial1);
+        financialRoot.setFinanciallist(financiallist);
+        Root root = getRoot(financialRoot, name);
+        String messageJson = JSON.toJSONString(root);
+        System.out.println("发送报文的内容:" + messageJson);
+        String result = PostUtils.post(sendUrl, messageJson);
+        System.out.println("服务器返回消息:" + result);
+        return root;
+    }
+
+    /**
+     * 电子运单
+     *
+     * @return
+     */
+    public static Root testDispatch(OrderInfo orderInfo) {
+        Root root = null;
+        try {
+            Root edmRoot = roots.get(r.nextInt(roots.size()));
+            String name = "电子运单";
+            Dispatch dispatch = getDispatch(orderInfo);
+//            dispatch.setUnifiedSocialCreditIdentifier(edmRoot.getUscc());
+            root = getRoot(dispatch, name, edmRoot);
+            String messageJson = JSON.toJSONString(root);
+            System.out.println("发送报文的内容:" + messageJson);
+            String result = PostUtils.post(sendUrl, messageJson);
+            System.out.println("服务器返回消息:" + result);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return root;
+    }
+
+    /**
+     * 运单信息
+     *
+     * @param orderInfo
+     * @return
+     */
+    public static Dispatch getDispatch(OrderInfo orderInfo) {
+        SimpleDateFormat f = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式
+        Dispatch dispatch = new Dispatch();
+        dispatch.setOriginalDocumentNumber(orderInfo.getOrderNo());
+        dispatch.setShippingNoteNumber(orderInfo.getOrderNo());
+        dispatch.setSerialNumber("0000");
+        dispatch.setVehicleAmount("1");
+        dispatch.setTransportTypeCode("1");
+        dispatch.setSendToProDateTime(f.format(new Date()));
+        dispatch.setCarrier("黑龙江畅运通物流供应链有限公司");
+        dispatch.setUnifiedSocialCreditIdentifier("91210804MA10FPAM2G");
+        dispatch.setPermitNumber("testDebug");
+        dispatch.setConsignmentDateTime(f.format(orderInfo.getCreateDate()));
+        dispatch.setBusinessTypeCode(orderInfo.getBusinessTypeCode());
+        dispatch.setDespatchActualDateTime(f.format(orderInfo.getDeliveryTime()));
+        dispatch.setGoodsReceiptDateTime(f.format(orderInfo.getReceivingTime()));
+        dispatch.setRemark("备注");
+        Double doubleValue1 = Double.parseDouble(new DecimalFormat("0.000").format(orderInfo.getActualFreight()));
+        dispatch.setTotalMonetaryAmount(String.valueOf(doubleValue1));
+        setConsignorInfo(dispatch, orderInfo);
+        setConsigneeInfo(dispatch, orderInfo);
+        setInsuranceInformation(dispatch, orderInfo);
+        setVehicleInfo(dispatch, orderInfo);
+        //实际承运人信息
+        ActualCarrierInfo actual = new ActualCarrierInfo();
+        actual.setActualCarrierName(orderInfo.getDriverName());
+        actual.setActualCarrierBusinessLicense(orderInfo.getRoadTransportBusinessLicenseNo());
+        actual.setActualCarrierID(orderInfo.getDriverIdCard());
+        List<ActualCarrierInfo> actualList = new ArrayList<>();
+        actualList.add(actual);
+        dispatch.setActualCarrierInfo(actualList);
+
+        return dispatch;
+    }
+
+    //托运人信息
+    public static void setConsignorInfo(Dispatch dispatch, OrderInfo orderInfo) {
+        List<ConsignorInfo> consignorInfos = new ArrayList<>();
+        ConsignorInfo consignorInfo = new ConsignorInfo();
+        consignorInfo.setConsignor(orderInfo.getConsignorName());
+        consignorInfo.setConsignorID(orderInfo.getConsignorID());
+        consignorInfo.setPlaceOfLoading(orderInfo.getSendPrivate() + orderInfo.getSendCity() + orderInfo.getSendArea() + orderInfo.getSendDetailedAddress());
+        consignorInfo.setCountrySubdivisionCode(orderInfo.getNationalCode());
+        consignorInfos.add(consignorInfo);
+        dispatch.setConsignorInfo(consignorInfos);
+    }
+
+    //收货方信息
+    public static void setConsigneeInfo(Dispatch dispatch, OrderInfo orderInfo) {
+        List<ConsigneeInfo> consigneeInfos = new ArrayList<>();
+        ConsigneeInfo consigneeInfo = new ConsigneeInfo();
+        consigneeInfo.setConsignee(orderInfo.getShipToName());
+        consigneeInfo.setConsigneeID(orderInfo.getShipToID());
+        consigneeInfo.setGoodsReceiptPlace(orderInfo.getUnloadPrivate() + orderInfo.getUnloadCity() + orderInfo.getUnloadArea() + orderInfo.getUnloadDetailedAddress());
+        consigneeInfo.setCountrySubdivisionCode(orderInfo.getShipToNationalCode());
+        consigneeInfos.add(consigneeInfo);
+        dispatch.setConsigneeInfo(consigneeInfos);
+    }
+
+    //保险信息
+    public static void setInsuranceInformation(Dispatch dispatch, OrderInfo orderInfo) {
+        List<InsuranceInformation> insuranceInformations = new ArrayList<>();
+        InsuranceInformation insuranceInformation = new InsuranceInformation();
+        insuranceInformation.setPolicyNumber("none");
+        insuranceInformation.setInsuranceCompanyCode("none");
+        insuranceInformations.add(insuranceInformation);
+        dispatch.setInsuranceInformation(insuranceInformations);
+    }
+
+    public static void setVehicleInfo(Dispatch dispatch, OrderInfo orderInfo) {
+        SimpleDateFormat f = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式
+        List<VehicleInfo> vehicleInfos = new ArrayList<>();
+        //车辆信息
+        VehicleInfo vehicleInfo = new VehicleInfo();
+        vehicleInfo.setVehicleNumber(orderInfo.getCarNumber());
+        if ("黄色".equals(orderInfo.getCarNumberColour())) {
+            vehicleInfo.setVehiclePlateColorCode("2");
+        } else if ("蓝色".equals(orderInfo.getCarNumberColour())) {
+            vehicleInfo.setVehiclePlateColorCode("1");
+        }
+        if (orderInfo.getTrailerNumber() != null) {
+            vehicleInfo.setTrailerVehiclePlateNumber(orderInfo.getTrailerNumber());
+            vehicleInfo.setTrailerVehiclePlateColorCode("2");
+        }
+        vehicleInfo.setDespatchActualDateTime(f.format(orderInfo.getDeliveryTime()));
+        vehicleInfo.setGoodsReceiptDateTime(f.format(orderInfo.getReceivingTime()));
+        vehicleInfo.setPlaceOfLoading(orderInfo.getSendPrivate() + orderInfo.getSendCity() + orderInfo.getSendArea() + orderInfo.getSendDetailedAddress());
+        vehicleInfo.setLoadingCountrySubdivisionCode(orderInfo.getNationalCode());
+        vehicleInfo.setGoodsReceiptPlace(orderInfo.getUnloadPrivate() + orderInfo.getUnloadCity() + orderInfo.getUnloadArea() + orderInfo.getUnloadDetailedAddress());
+        vehicleInfo.setReceiptCountrySubdivisionCode(orderInfo.getShipToNationalCode());
+        //驾驶员信息
+        List<Driver> drivers = new ArrayList<Driver>();
+        Driver driver1 = new Driver();
+        driver1.setDriverName(orderInfo.getDriverName());
+        driver1.setDrivingLicense(orderInfo.getDriverIdCard());
+        drivers.add(driver1);
+        vehicleInfo.setDriver(drivers);
+        //货物信息
+        List<GoodsInfo> goodsInfos = new ArrayList<GoodsInfo>();
+        GoodsInfo goodsInfo1 = new GoodsInfo();
+        goodsInfo1.setDescriptionOfGoods(orderInfo.getGoodsName());
+        goodsInfo1.setCargoTypeClassificationCode(orderInfo.getGoodsTypeKey());
+        Double doubleValue1 = Double.parseDouble(new DecimalFormat("0.000").format(orderInfo.getGrossWeight() * 1000));
+        goodsInfo1.setGoodsItemGrossWeight(String.valueOf(doubleValue1));
+        goodsInfos.add(goodsInfo1);
+        vehicleInfo.setGoodsInfo(goodsInfos);
+        vehicleInfos.add(vehicleInfo);
+        dispatch.setVehicleInfo(vehicleInfos);
+    }
+
+    static Random r = new Random();
+
+    static String[] names = new String[20];
+
+    static String[] vehicleoffices = new String[10];
+
+    static String[] goodsNames = new String[20];
+
+    static String[] company = new String[10];
+
+    static String[] addrs = new String[20];
+
+    static List<String> carriers = new ArrayList<>();
+
+    static List<String> vehicleTypes = new ArrayList<>();
+
+    static List<String> classTypes = new ArrayList<>();
+
+    static List<Root> roots = new ArrayList<>();
+
+    static List<String[]> users = new ArrayList<>();
+
+    static {
+
+        for (String[] user1 : usersArr) {
+            users.add(user1);
+        }
+        for (int i = 0; i < users.size(); i++) {
+            roots.add(loginRoot(users.get(i)[0], users.get(i)[1], users.get(i)[2], debugStr));
+        }
+    }
+
+}

+ 125 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/MyStrUtil.java

@@ -0,0 +1,125 @@
+ package com.yh.saas.plugin.yiliangyiyun.util;
+
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Random;
+ import java.util.UUID;
+
+ public class MyStrUtil {
+     
+     public static String uuid(){
+         return UUID.randomUUID().toString().replaceAll("-", "");
+     }
+     
+     public static boolean intEq(Integer current, Integer target){
+         if(current == null || target == null){
+             return false;
+         }
+         if(current == target){
+             return true;
+         }
+         return false;
+     }
+
+     // 将字符串转换成integer
+     public static Integer strToInteger(Object str){
+         Integer result = null;
+         try {
+             result = Integer.valueOf(str.toString());
+         }catch (Exception e){
+
+             e.printStackTrace();
+
+         }finally {
+
+             return result;
+         }
+     }
+
+     public static String getProvinceCode(Object object){
+         try {
+             if (object == null){
+                 return null;
+             }
+             String valueOf = String.valueOf(object);
+             if (valueOf == null || valueOf.length() < 2){
+                 return null;
+             }
+             String substring = valueOf.substring(0, 2);
+             return substring == null || substring.length() != 2 ? null : substring;
+         }catch (Exception e){
+             e.printStackTrace();
+             return null;
+         }
+     }
+
+     // 根据两个areacode判断是否是一个省份用户
+    public static boolean isEqualCity(Object strA, Object strB, Integer num){
+         try {
+
+         if (strA == null || strB == null || num == null || num <=0){
+             return false;
+         }
+
+        String str1 = String.valueOf(strA);
+        String str2 = String.valueOf(strB);
+
+        if (str1.length() < num || str2.length() < num) {
+             return false;
+         }
+         return str1.substring(0, num).equalsIgnoreCase(str2.substring(0, num));
+
+         } catch (Exception e){
+             e.printStackTrace();
+             return false;
+         }
+
+    }
+
+
+
+
+    //生成随机数字和字母,
+    public static String getStringRandom(int length) {
+        Random random = new Random();
+        String val = "";
+
+
+
+        //length为几位密码
+        for(int i = 0; i < length; i++) {
+            String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num";
+            //输出字母还是数字
+            if( "char".equalsIgnoreCase(charOrNum) ) {
+                //输出是大写字母还是小写字母
+                int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
+                val += (char)(random.nextInt(26) + temp);
+            } else if( "num".equalsIgnoreCase(charOrNum) ) {
+                val += String.valueOf(random.nextInt(10));
+            }
+        }
+
+        return val;
+    }
+
+    public static List<Map<String,Object>>   strTOChildrenList(Object obj){
+         if (obj == null){
+             return null;
+         }
+
+         try {
+
+
+             List<Map<String, Object>> children = (List<Map<String, Object>>) obj;
+             if (children == null || children.size() < 1){
+                 return null;
+             }
+
+             return children;
+         }catch (Exception e){
+             return null;
+         }
+    }
+
+
+}

+ 73 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/PostUtils.java

@@ -0,0 +1,73 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+
+public class PostUtils {
+	
+	/**
+     * 发送HttpPost请求
+     * 
+     * @param strURL
+     *            服务地址
+     * @param params
+     *            json字符串,例如: "{ \"id\":\"12345\" }" ;其中属性名必须带双引号<br/>
+     * @return 成功:返回json字符串<br/>
+     */
+    public static String post(String strURL, String params) {
+        System.out.println(strURL);
+        BufferedReader reader = null;
+        try {
+            URL url = new URL(strURL);// 创建连接
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+            connection.setDoOutput(true);
+            connection.setDoInput(true);
+            connection.setUseCaches(false);
+            connection.setInstanceFollowRedirects(true);
+            connection.setRequestMethod("POST"); // 设置请求方式
+            // connection.setRequestProperty("Accept", "application/json"); // 设置接收数据的格式
+            connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式
+            connection.connect();
+            //一定要用BufferedReader 来接收响应, 使用字节来接收响应的方法是接收不到内容的
+            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); // utf-8编码
+            out.append(params);
+            out.flush();
+            out.close();
+            // 读取响应
+            reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
+            String line;
+            String res = "";
+            while ((line = reader.readLine()) != null) {
+                res += line;
+            }
+            reader.close();
+            
+            //如果一定要使用如下方式接收响应数据, 则响应必须为: response.getWriter().print(StringUtils.join("{\"errCode\":\"1\",\"errMsg\":\"", message, "\"}")); 来返回
+//            int length = (int) connection.getContentLength();// 获取长度
+//            if (length != -1) {
+//                byte[] data = new byte[length];
+//                byte[] temp = new byte[512];
+//                int readLen = 0;
+//                int destPos = 0;
+//                while ((readLen = is.read(temp)) > 0) {
+//                    System.arraycopy(temp, 0, data, destPos, readLen);
+//                    destPos += readLen;
+//                }
+//                String result = new String(data, "UTF-8"); // utf-8编码
+//                System.out.println(result);
+//                return result;
+//            }
+
+            return res;
+        } catch (Exception e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return "error"; // 自定义错误信息
+    }
+
+}

+ 76 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM2.java

@@ -0,0 +1,76 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+import org.bouncycastle.crypto.generators.ECKeyPairGenerator;
+import org.bouncycastle.crypto.params.ECDomainParameters;
+import org.bouncycastle.crypto.params.ECKeyGenerationParameters;
+import org.bouncycastle.math.ec.ECCurve;
+import org.bouncycastle.math.ec.ECFieldElement;
+import org.bouncycastle.math.ec.ECFieldElement.Fp;
+import org.bouncycastle.math.ec.ECPoint;
+
+import java.math.BigInteger;
+import java.security.SecureRandom;
+
+public class SM2 {
+    //测试参数
+//  public static final String[] ecc_param = {  
+//      "8542D69E4C044F18E8B92435BF6FF7DE457283915C45517D722EDB8B08F1DFC3",   
+//      "787968B4FA32C3FD2417842E73BBFEFF2F3C848B6831D7E0EC65228B3937E498",   
+//      "63E4C6D3B23B0C849CF84241484BFE48F61D59A5B16BA06E6E12D1DA27C5249A",   
+//      "8542D69E4C044F18E8B92435BF6FF7DD297720630485628D5AE74EE7C32E79B7",   
+//      "421DEBD61B62EAB6746434EBC3CC315E32220B3BADD50BDC4C4E6C147FEDD43D",   
+//      "0680512BCBB42C07D47349D2153B70C4E5D7FDFCBFA36EA1A85841B9E46E09A2"   
+//  };  
+
+    //正式参数  
+    public static String[] ecc_param = {
+            "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF",
+            "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC",
+            "28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93",
+            "FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123",
+            "32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7",
+            "BC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0"
+    };
+
+    public static SM2 Instance()
+    {
+        return new SM2();
+    }
+
+    public final BigInteger ecc_p;
+    public final BigInteger ecc_a;
+    public final BigInteger ecc_b;
+    public final BigInteger ecc_n;
+    public final BigInteger ecc_gx;
+    public final BigInteger ecc_gy;
+    public final ECCurve ecc_curve;
+    public final ECPoint ecc_point_g;
+    public final ECDomainParameters ecc_bc_spec;
+    public final ECKeyPairGenerator ecc_key_pair_generator;
+    public final ECFieldElement ecc_gx_fieldelement;
+    public final ECFieldElement ecc_gy_fieldelement;
+
+    public SM2()
+    {
+        this.ecc_p = new BigInteger(ecc_param[0], 16);
+        this.ecc_a = new BigInteger(ecc_param[1], 16);
+        this.ecc_b = new BigInteger(ecc_param[2], 16);
+        this.ecc_n = new BigInteger(ecc_param[3], 16);
+        this.ecc_gx = new BigInteger(ecc_param[4], 16);
+        this.ecc_gy = new BigInteger(ecc_param[5], 16);
+
+        this.ecc_gx_fieldelement = new Fp(this.ecc_p, this.ecc_gx);
+        this.ecc_gy_fieldelement = new Fp(this.ecc_p, this.ecc_gy);
+
+        this.ecc_curve = new ECCurve.Fp(this.ecc_p, this.ecc_a, this.ecc_b);
+        this.ecc_point_g = new ECPoint.Fp(this.ecc_curve, this.ecc_gx_fieldelement, this.ecc_gy_fieldelement,true);
+
+        this.ecc_bc_spec = new ECDomainParameters(this.ecc_curve, this.ecc_point_g, this.ecc_n);
+
+        ECKeyGenerationParameters ecc_ecgenparam;
+        ecc_ecgenparam = new ECKeyGenerationParameters(this.ecc_bc_spec, new SecureRandom());
+
+        this.ecc_key_pair_generator = new ECKeyPairGenerator();
+        this.ecc_key_pair_generator.init(ecc_ecgenparam);
+    }
+}

+ 207 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM2Utils.java

@@ -0,0 +1,207 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+
+import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
+import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
+import org.bouncycastle.crypto.params.ECPublicKeyParameters;
+import org.bouncycastle.math.ec.ECPoint;
+
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.HashMap;
+import java.util.Map;
+
+public class SM2Utils {
+    //生成随机秘钥对
+    public static Map<String,String>  generateKeyPair(){
+        Map<String,String> keys = new HashMap<>();
+        SM2 sm2 = SM2.Instance();
+        AsymmetricCipherKeyPair key = sm2.ecc_key_pair_generator.generateKeyPair();
+        ECPrivateKeyParameters ecpriv = (ECPrivateKeyParameters) key.getPrivate();
+        ECPublicKeyParameters ecpub = (ECPublicKeyParameters) key.getPublic();
+        BigInteger privateKey = ecpriv.getD();
+        ECPoint publicKey = ecpub.getQ();
+
+//        System.out.println("公钥: " + Util.byteToHex(publicKey.getEncoded()));
+//        System.out.println("私钥: " + Util.byteToHex(privateKey.toByteArray()));
+        keys.put(Constants.PUBLIC_KEY_NAME,Util.byteToHex(publicKey.getEncoded()));
+        keys.put(Constants.PRIVATE_KEY_NAME,Util.byteToHex(privateKey.toByteArray()));
+
+        return keys;
+    }
+
+    //数据加密  
+    public static String encrypt(byte[] publicKey, byte[] data) throws IOException
+    {
+        if (publicKey == null || publicKey.length == 0)
+        {
+            return null;
+        }
+
+        if (data == null || data.length == 0)
+        {
+            return null;
+        }
+
+        byte[] source = new byte[data.length];
+        System.arraycopy(data, 0, source, 0, data.length);
+
+        Cipher cipher = new Cipher();
+        SM2 sm2 = SM2.Instance();
+        ECPoint userKey = sm2.ecc_curve.decodePoint(publicKey);
+
+        ECPoint c1 = cipher.Init_enc(sm2, userKey);
+        cipher.Encrypt(source);
+        byte[] c3 = new byte[32];
+        cipher.Dofinal(c3);
+
+//      System.out.println("C1 " + Util.byteToHex(c1.getEncoded()));  
+//      System.out.println("C2 " + Util.byteToHex(source));  
+//      System.out.println("C3 " + Util.byteToHex(c3));  
+        //C1 C2 C3拼装成加密字串  
+        return Util.byteToHex(c1.getEncoded()) + Util.byteToHex(source) + Util.byteToHex(c3);
+
+    }
+
+    //数据解密  
+    public static byte[] decrypt(byte[] privateKey, byte[] encryptedData) throws IOException
+    {
+        if (privateKey == null || privateKey.length == 0)
+        {
+            return null;
+        }
+
+        if (encryptedData == null || encryptedData.length == 0)
+        {
+            return null;
+        }
+        //加密字节数组转换为十六进制的字符串 长度变为encryptedData.length * 2  
+        String data = Util.byteToHex(encryptedData);
+        /***分解加密字串 
+         * (C1 = C1标志位2位 + C1实体部分128位 = 130) 
+         * (C3 = C3实体部分64位  = 64) 
+         * (C2 = encryptedData.length * 2 - C1长度  - C2长度) 
+         */
+        byte[] c1Bytes = Util.hexToByte(data.substring(0,130));
+        int c2Len = encryptedData.length - 97;
+        byte[] c2 = Util.hexToByte(data.substring(130,130 + 2 * c2Len));
+        byte[] c3 = Util.hexToByte(data.substring(130 + 2 * c2Len,194 + 2 * c2Len));
+
+        SM2 sm2 = SM2.Instance();
+        BigInteger userD = new BigInteger(1, privateKey);
+
+        //通过C1实体字节来生成ECPoint  
+        ECPoint c1 = sm2.ecc_curve.decodePoint(c1Bytes);
+        Cipher cipher = new Cipher();
+        cipher.Init_dec(userD, c1);
+        cipher.Decrypt(c2);
+        cipher.Dofinal(c3);
+
+        //返回解密结果  
+        return c2;
+    }
+
+
+    /***************************C1C3C2**************************/
+
+    //数据加密
+    public static String encrypt132(byte[] publicKey, byte[] data) throws IOException
+    {
+        if (publicKey == null || publicKey.length == 0)
+        {
+            return null;
+        }
+
+        if (data == null || data.length == 0)
+        {
+            return null;
+        }
+
+        byte[] source = new byte[data.length];
+        System.arraycopy(data, 0, source, 0, data.length);
+
+        Cipher cipher = new Cipher();
+        SM2 sm2 = SM2.Instance();
+        ECPoint userKey = sm2.ecc_curve.decodePoint(publicKey);
+
+        ECPoint c1 = cipher.Init_enc(sm2, userKey);
+        cipher.Encrypt(source);
+        byte[] c3 = new byte[32];
+        cipher.Dofinal(c3);
+
+        //C1 C2 C3拼装成加密字串
+        return Util.byteToHex(c1.getEncoded()) + Util.byteToHex(c3) + Util.byteToHex(source);
+
+    }
+
+    //数据解密
+    public static byte[] decrypt132(byte[] privateKey, byte[] encryptedData) throws IOException
+    {
+        if (privateKey == null || privateKey.length == 0)
+        {
+            return null;
+        }
+
+        if (encryptedData == null || encryptedData.length == 0)
+        {
+            return null;
+        }
+        //加密字节数组转换为十六进制的字符串 长度变为encryptedData.length * 2
+        String data = Util.byteToHex(encryptedData);
+        /***分解加密字串
+         * (C1 = C1标志位2位 + C1实体部分128位 = 130)
+         * (C3 = C3实体部分64位  = 64)
+         * (C2 = encryptedData.length * 2 - C1长度  - C2长度)
+         */
+        byte[] c1Bytes = Util.hexToByte(data.substring(0,130));
+        int c2Len = encryptedData.length - 97;
+        byte[] c3 = Util.hexToByte(data.substring(130,194));
+        byte[] c2 = Util.hexToByte(data.substring(194));
+//        byte[] c3 = Util.hexToByte(data.substring(130 + 2 * c2Len,194 + 2 * c2Len));
+//        byte[] c2 = Util.hexToByte(data.substring(130,130 + 2 * c2Len));
+        SM2 sm2 = SM2.Instance();
+        BigInteger userD = new BigInteger(1, privateKey);
+
+        //通过C1实体字节来生成ECPoint
+        ECPoint c1 = sm2.ecc_curve.decodePoint(c1Bytes);
+        Cipher cipher = new Cipher();
+        cipher.Init_dec(userD, c1);
+        cipher.Decrypt(c2);
+        cipher.Dofinal(c3);
+
+        //返回解密结果
+        return c2;
+    }
+
+
+    /***************test***************/
+
+    public static void main(String[] args) throws Exception
+    {
+        //生成密钥对  
+        Map<String,String> keys = generateKeyPair();
+
+        String plainText = "111112131ffjewrwhethetrjreqqetetuywatwe{}3";
+        byte[] sourceData = plainText.getBytes();
+
+        //下面的秘钥可以使用generateKeyPair()生成的秘钥内容
+        // 国密规范正式私钥
+        String prik = keys.get(Constants.PRIVATE_KEY_NAME);
+        // 国密规范正式公钥
+        String pubk =  keys.get(Constants.PUBLIC_KEY_NAME);
+        System.out.println("加密: ");
+        String cipherText = SM2Utils.encrypt(Util.hexToByte(pubk), sourceData);
+        System.out.println(cipherText);
+        System.out.println("解密: ");
+        plainText = new String(SM2Utils.decrypt(Util.hexToByte(prik), Util.hexToByte(cipherText)));
+        System.out.println(plainText);
+
+        System.out.println("加密: ");
+        String cipherText1 = SM2Utils.encrypt132(Util.hexToByte(pubk), sourceData);
+        System.out.println(cipherText1);
+        System.out.println("解密: ");
+        plainText = new String(SM2Utils.decrypt132(Util.hexToByte(prik), Util.hexToByte(cipherText1)));
+        System.out.println(plainText);
+
+    }
+}

+ 309 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM3.java

@@ -0,0 +1,309 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+public class SM3 {
+    public static final byte[] iv = { 0x73, (byte) 0x80, 0x16, 0x6f, 0x49,
+            0x14, (byte) 0xb2, (byte) 0xb9, 0x17, 0x24, 0x42, (byte) 0xd7,
+            (byte) 0xda, (byte) 0x8a, 0x06, 0x00, (byte) 0xa9, 0x6f, 0x30,
+            (byte) 0xbc, (byte) 0x16, 0x31, 0x38, (byte) 0xaa, (byte) 0xe3,
+            (byte) 0x8d, (byte) 0xee, 0x4d, (byte) 0xb0, (byte) 0xfb, 0x0e,
+            0x4e };
+
+    public static int[] Tj = new int[64];
+
+    static
+    {
+        for (int i = 0; i < 16; i++)
+        {
+            Tj[i] = 0x79cc4519;
+        }
+
+        for (int i = 16; i < 64; i++)
+        {
+            Tj[i] = 0x7a879d8a;
+        }
+    }
+
+    public static byte[] CF(byte[] V, byte[] B)
+    {
+        int[] v, b;
+        v = convert(V);
+        b = convert(B);
+        return convert(CF(v, b));
+    }
+
+    private static int[] convert(byte[] arr)
+    {
+        int[] out = new int[arr.length / 4];
+        byte[] tmp = new byte[4];
+        for (int i = 0; i < arr.length; i += 4)
+        {
+            System.arraycopy(arr, i, tmp, 0, 4);
+            out[i / 4] = bigEndianByteToInt(tmp);
+        }
+        return out;
+    }
+
+    private static byte[] convert(int[] arr)
+    {
+        byte[] out = new byte[arr.length * 4];
+        byte[] tmp = null;
+        for (int i = 0; i < arr.length; i++)
+        {
+            tmp = bigEndianIntToByte(arr[i]);
+            System.arraycopy(tmp, 0, out, i * 4, 4);
+        }
+        return out;
+    }
+
+    public static int[] CF(int[] V, int[] B)
+    {
+        int a, b, c, d, e, f, g, h;
+        int ss1, ss2, tt1, tt2;
+        a = V[0];
+        b = V[1];
+        c = V[2];
+        d = V[3];
+        e = V[4];
+        f = V[5];
+        g = V[6];
+        h = V[7];
+
+        int[][] arr = expand(B);
+        int[] w = arr[0];
+        int[] w1 = arr[1];
+
+        for (int j = 0; j < 64; j++)
+        {
+            ss1 = (bitCycleLeft(a, 12) + e + bitCycleLeft(Tj[j], j));
+            ss1 = bitCycleLeft(ss1, 7);
+            ss2 = ss1 ^ bitCycleLeft(a, 12);
+            tt1 = FFj(a, b, c, j) + d + ss2 + w1[j];
+            tt2 = GGj(e, f, g, j) + h + ss1 + w[j];
+            d = c;
+            c = bitCycleLeft(b, 9);
+            b = a;
+            a = tt1;
+            h = g;
+            g = bitCycleLeft(f, 19);
+            f = e;
+            e = P0(tt2);
+
+		            /*System.out.print(j+" ");
+		            System.out.print(Integer.toHexString(a)+" ");
+		            System.out.print(Integer.toHexString(b)+" ");
+		            System.out.print(Integer.toHexString(c)+" ");
+		            System.out.print(Integer.toHexString(d)+" ");
+		            System.out.print(Integer.toHexString(e)+" ");
+		            System.out.print(Integer.toHexString(f)+" ");
+		            System.out.print(Integer.toHexString(g)+" ");
+		            System.out.print(Integer.toHexString(h)+" ");
+		            System.out.println("");*/
+        }
+//		      System.out.println("");
+
+        int[] out = new int[8];
+        out[0] = a ^ V[0];
+        out[1] = b ^ V[1];
+        out[2] = c ^ V[2];
+        out[3] = d ^ V[3];
+        out[4] = e ^ V[4];
+        out[5] = f ^ V[5];
+        out[6] = g ^ V[6];
+        out[7] = h ^ V[7];
+
+        return out;
+    }
+
+    private static int[][] expand(int[] B)
+    {
+        int W[] = new int[68];
+        int W1[] = new int[64];
+        for (int i = 0; i < B.length; i++)
+        {
+            W[i] = B[i];
+        }
+
+        for (int i = 16; i < 68; i++)
+        {
+            W[i] = P1(W[i - 16] ^ W[i - 9] ^ bitCycleLeft(W[i - 3], 15))
+                    ^ bitCycleLeft(W[i - 13], 7) ^ W[i - 6];
+        }
+
+        for (int i = 0; i < 64; i++)
+        {
+            W1[i] = W[i] ^ W[i + 4];
+        }
+
+        int arr[][] = new int[][] { W, W1 };
+        return arr;
+    }
+
+    private static byte[] bigEndianIntToByte(int num)
+    {
+        return back(Util.intToBytes(num));
+    }
+
+    private static int bigEndianByteToInt(byte[] bytes)
+    {
+        return Util.byteToInt(back(bytes));
+    }
+
+    private static int FFj(int X, int Y, int Z, int j)
+    {
+        if (j >= 0 && j <= 15)
+        {
+            return FF1j(X, Y, Z);
+        }
+        else
+        {
+            return FF2j(X, Y, Z);
+        }
+    }
+
+    private static int GGj(int X, int Y, int Z, int j)
+    {
+        if (j >= 0 && j <= 15)
+        {
+            return GG1j(X, Y, Z);
+        }
+        else
+        {
+            return GG2j(X, Y, Z);
+        }
+    }
+
+    // 逻辑位运算函数
+    private static int FF1j(int X, int Y, int Z)
+    {
+        int tmp = X ^ Y ^ Z;
+        return tmp;
+    }
+
+    private static int FF2j(int X, int Y, int Z)
+    {
+        int tmp = ((X & Y) | (X & Z) | (Y & Z));
+        return tmp;
+    }
+
+    private static int GG1j(int X, int Y, int Z)
+    {
+        int tmp = X ^ Y ^ Z;
+        return tmp;
+    }
+
+    private static int GG2j(int X, int Y, int Z)
+    {
+        int tmp = (X & Y) | (~X & Z);
+        return tmp;
+    }
+
+    private static int P0(int X)
+    {
+        int y = rotateLeft(X, 9);
+        y = bitCycleLeft(X, 9);
+        int z = rotateLeft(X, 17);
+        z = bitCycleLeft(X, 17);
+        int t = X ^ y ^ z;
+        return t;
+    }
+
+    private static int P1(int X)
+    {
+        int t = X ^ bitCycleLeft(X, 15) ^ bitCycleLeft(X, 23);
+        return t;
+    }
+
+    /**
+     * 对最后一个分组字节数据padding
+     *
+     * @param in
+     * @param bLen
+     *            分组个数
+     * @return
+     */
+    public static byte[] padding(byte[] in, int bLen)
+    {
+        int k = 448 - (8 * in.length + 1) % 512;
+        if (k < 0)
+        {
+            k = 960 - (8 * in.length + 1) % 512;
+        }
+        k += 1;
+        byte[] padd = new byte[k / 8];
+        padd[0] = (byte) 0x80;
+        long n = in.length * 8 + bLen * 512;
+        byte[] out = new byte[in.length + k / 8 + 64 / 8];
+        int pos = 0;
+        System.arraycopy(in, 0, out, 0, in.length);
+        pos += in.length;
+        System.arraycopy(padd, 0, out, pos, padd.length);
+        pos += padd.length;
+        byte[] tmp = back(Util.longToBytes(n));
+        System.arraycopy(tmp, 0, out, pos, tmp.length);
+        return out;
+    }
+
+    /**
+     * 字节数组逆序
+     *
+     * @param in
+     * @return
+     */
+    private static byte[] back(byte[] in)
+    {
+        byte[] out = new byte[in.length];
+        for (int i = 0; i < out.length; i++)
+        {
+            out[i] = in[out.length - i - 1];
+        }
+
+        return out;
+    }
+
+    public static int rotateLeft(int x, int n)
+    {
+        return (x << n) | (x >> (32 - n));
+    }
+
+    private static int bitCycleLeft(int n, int bitLen)
+    {
+        bitLen %= 32;
+        byte[] tmp = bigEndianIntToByte(n);
+        int byteLen = bitLen / 8;
+        int len = bitLen % 8;
+        if (byteLen > 0)
+        {
+            tmp = byteCycleLeft(tmp, byteLen);
+        }
+
+        if (len > 0)
+        {
+            tmp = bitSmall8CycleLeft(tmp, len);
+        }
+
+        return bigEndianByteToInt(tmp);
+    }
+
+    private static byte[] bitSmall8CycleLeft(byte[] in, int len)
+    {
+        byte[] tmp = new byte[in.length];
+        int t1, t2, t3;
+        for (int i = 0; i < tmp.length; i++)
+        {
+            t1 = (byte) ((in[i] & 0x000000ff) << len);
+            t2 = (byte) ((in[(i + 1) % tmp.length] & 0x000000ff) >> (8 - len));
+            t3 = (byte) (t1 | t2);
+            tmp[i] = (byte) t3;
+        }
+
+        return tmp;
+    }
+
+    private static byte[] byteCycleLeft(byte[] in, int byteLen)
+    {
+        byte[] tmp = new byte[in.length];
+        System.arraycopy(in, byteLen, tmp, 0, in.length - byteLen);
+        System.arraycopy(in, 0, tmp, in.length - byteLen, byteLen);
+        return tmp;
+    }
+}

+ 144 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM3Digest.java

@@ -0,0 +1,144 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+import org.bouncycastle.util.encoders.Hex;
+
+public class SM3Digest {
+    /** SM3值的长度 */
+    private static final int BYTE_LENGTH = 32;
+
+    /** SM3分组长度 */
+    private static final int BLOCK_LENGTH = 64;
+
+    /** 缓冲区长度 */
+    private static final int BUFFER_LENGTH = BLOCK_LENGTH * 1;
+
+    /** 缓冲区 */
+    private byte[] xBuf = new byte[BUFFER_LENGTH];
+
+    /** 缓冲区偏移量 */
+    private int xBufOff;
+
+    /** 初始向量 */
+    private byte[] V = SM3.iv.clone();
+
+    private int cntBlock = 0;
+
+    public SM3Digest() {
+    }
+
+    public SM3Digest(SM3Digest t)
+    {
+        System.arraycopy(t.xBuf, 0, this.xBuf, 0, t.xBuf.length);
+        this.xBufOff = t.xBufOff;
+        System.arraycopy(t.V, 0, this.V, 0, t.V.length);
+    }
+
+    /**
+     * SM3结果输出
+     *
+     * @param out 保存SM3结构的缓冲区
+     * @param outOff 缓冲区偏移量
+     * @return
+     */
+    public int doFinal(byte[] out, int outOff)
+    {
+        byte[] tmp = doFinal();
+        System.arraycopy(tmp, 0, out, 0, tmp.length);
+        return BYTE_LENGTH;
+    }
+
+    public void reset()
+    {
+        xBufOff = 0;
+        cntBlock = 0;
+        V = SM3.iv.clone();
+    }
+
+    /**
+     * 明文输入
+     *
+     * @param in
+     *            明文输入缓冲区
+     * @param inOff
+     *            缓冲区偏移量
+     * @param len
+     *            明文长度
+     */
+    public void update(byte[] in, int inOff, int len)
+    {
+        int partLen = BUFFER_LENGTH - xBufOff;
+        int inputLen = len;
+        int dPos = inOff;
+        if (partLen < inputLen)
+        {
+            System.arraycopy(in, dPos, xBuf, xBufOff, partLen);
+            inputLen -= partLen;
+            dPos += partLen;
+            doUpdate();
+            while (inputLen > BUFFER_LENGTH)
+            {
+                System.arraycopy(in, dPos, xBuf, 0, BUFFER_LENGTH);
+                inputLen -= BUFFER_LENGTH;
+                dPos += BUFFER_LENGTH;
+                doUpdate();
+            }
+        }
+
+        System.arraycopy(in, dPos, xBuf, xBufOff, inputLen);
+        xBufOff += inputLen;
+    }
+
+    private void doUpdate()
+    {
+        byte[] B = new byte[BLOCK_LENGTH];
+        for (int i = 0; i < BUFFER_LENGTH; i += BLOCK_LENGTH)
+        {
+            System.arraycopy(xBuf, i, B, 0, B.length);
+            doHash(B);
+        }
+        xBufOff = 0;
+    }
+
+    private void doHash(byte[] B)
+    {
+        byte[] tmp = SM3.CF(V, B);
+        System.arraycopy(tmp, 0, V, 0, V.length);
+        cntBlock++;
+    }
+
+    private byte[] doFinal()
+    {
+        byte[] B = new byte[BLOCK_LENGTH];
+        byte[] buffer = new byte[xBufOff];
+        System.arraycopy(xBuf, 0, buffer, 0, buffer.length);
+        byte[] tmp = SM3.padding(buffer, cntBlock);
+        for (int i = 0; i < tmp.length; i += BLOCK_LENGTH)
+        {
+            System.arraycopy(tmp, i, B, 0, B.length);
+            doHash(B);
+        }
+        return V;
+    }
+
+    public void update(byte in)
+    {
+        byte[] buffer = new byte[] { in };
+        update(buffer, 0, 1);
+    }
+
+    public int getDigestSize()
+    {
+        return BYTE_LENGTH;
+    }
+
+    public static void main(String[] args)
+    {
+        byte[] md = new byte[32];
+        byte[] msg1 = "ererfeiisgod".getBytes();
+        SM3Digest sm3 = new SM3Digest();
+        sm3.update(msg1, 0, msg1.length);
+        sm3.doFinal(md, 0);
+        String s = new String(Hex.encode(md));
+        System.out.println(s.toUpperCase());
+    }
+}

+ 343 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM4.java

@@ -0,0 +1,343 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
+public class SM4 {
+    public static final int SM4_ENCRYPT = 1;
+
+    public static final int SM4_DECRYPT = 0;
+
+    private long GET_ULONG_BE(byte[] b, int i)
+    {
+        long n = (long)(b[i] & 0xff) << 24 | (long)((b[i + 1] & 0xff) << 16) | (long)((b[i + 2] & 0xff) << 8) | (long)(b[i + 3] & 0xff) & 0xffffffffL;
+        return n;
+    }
+
+    private void PUT_ULONG_BE(long n, byte[] b, int i)
+    {
+        b[i] = (byte)(int)(0xFF & n >> 24);
+        b[i + 1] = (byte)(int)(0xFF & n >> 16);
+        b[i + 2] = (byte)(int)(0xFF & n >> 8);
+        b[i + 3] = (byte)(int)(0xFF & n);
+    }
+
+    private long SHL(long x, int n)
+    {
+        return (x & 0xFFFFFFFF) << n;
+    }
+
+    private long ROTL(long x, int n)
+    {
+        return SHL(x, n) | x >> (32 - n);
+    }
+
+    private void SWAP(long[] sk, int i)
+    {
+        long t = sk[i];
+        sk[i] = sk[(31 - i)];
+        sk[(31 - i)] = t;
+    }
+
+    public static final byte[] SboxTable = { (byte) 0xd6, (byte) 0x90, (byte) 0xe9, (byte) 0xfe,
+            (byte) 0xcc, (byte) 0xe1, 0x3d, (byte) 0xb7, 0x16, (byte) 0xb6,
+            0x14, (byte) 0xc2, 0x28, (byte) 0xfb, 0x2c, 0x05, 0x2b, 0x67,
+            (byte) 0x9a, 0x76, 0x2a, (byte) 0xbe, 0x04, (byte) 0xc3,
+            (byte) 0xaa, 0x44, 0x13, 0x26, 0x49, (byte) 0x86, 0x06,
+            (byte) 0x99, (byte) 0x9c, 0x42, 0x50, (byte) 0xf4, (byte) 0x91,
+            (byte) 0xef, (byte) 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43,
+            (byte) 0xed, (byte) 0xcf, (byte) 0xac, 0x62, (byte) 0xe4,
+            (byte) 0xb3, 0x1c, (byte) 0xa9, (byte) 0xc9, 0x08, (byte) 0xe8,
+            (byte) 0x95, (byte) 0x80, (byte) 0xdf, (byte) 0x94, (byte) 0xfa,
+            0x75, (byte) 0x8f, 0x3f, (byte) 0xa6, 0x47, 0x07, (byte) 0xa7,
+            (byte) 0xfc, (byte) 0xf3, 0x73, 0x17, (byte) 0xba, (byte) 0x83,
+            0x59, 0x3c, 0x19, (byte) 0xe6, (byte) 0x85, 0x4f, (byte) 0xa8,
+            0x68, 0x6b, (byte) 0x81, (byte) 0xb2, 0x71, 0x64, (byte) 0xda,
+            (byte) 0x8b, (byte) 0xf8, (byte) 0xeb, 0x0f, 0x4b, 0x70, 0x56,
+            (byte) 0x9d, 0x35, 0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, (byte) 0xd1,
+            (byte) 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, (byte) 0x87,
+            (byte) 0xd4, 0x00, 0x46, 0x57, (byte) 0x9f, (byte) 0xd3, 0x27,
+            0x52, 0x4c, 0x36, 0x02, (byte) 0xe7, (byte) 0xa0, (byte) 0xc4,
+            (byte) 0xc8, (byte) 0x9e, (byte) 0xea, (byte) 0xbf, (byte) 0x8a,
+            (byte) 0xd2, 0x40, (byte) 0xc7, 0x38, (byte) 0xb5, (byte) 0xa3,
+            (byte) 0xf7, (byte) 0xf2, (byte) 0xce, (byte) 0xf9, 0x61, 0x15,
+            (byte) 0xa1, (byte) 0xe0, (byte) 0xae, 0x5d, (byte) 0xa4,
+            (byte) 0x9b, 0x34, 0x1a, 0x55, (byte) 0xad, (byte) 0x93, 0x32,
+            0x30, (byte) 0xf5, (byte) 0x8c, (byte) 0xb1, (byte) 0xe3, 0x1d,
+            (byte) 0xf6, (byte) 0xe2, 0x2e, (byte) 0x82, 0x66, (byte) 0xca,
+            0x60, (byte) 0xc0, 0x29, 0x23, (byte) 0xab, 0x0d, 0x53, 0x4e, 0x6f,
+            (byte) 0xd5, (byte) 0xdb, 0x37, 0x45, (byte) 0xde, (byte) 0xfd,
+            (byte) 0x8e, 0x2f, 0x03, (byte) 0xff, 0x6a, 0x72, 0x6d, 0x6c, 0x5b,
+            0x51, (byte) 0x8d, 0x1b, (byte) 0xaf, (byte) 0x92, (byte) 0xbb,
+            (byte) 0xdd, (byte) 0xbc, 0x7f, 0x11, (byte) 0xd9, 0x5c, 0x41,
+            0x1f, 0x10, 0x5a, (byte) 0xd8, 0x0a, (byte) 0xc1, 0x31,
+            (byte) 0x88, (byte) 0xa5, (byte) 0xcd, 0x7b, (byte) 0xbd, 0x2d,
+            0x74, (byte) 0xd0, 0x12, (byte) 0xb8, (byte) 0xe5, (byte) 0xb4,
+            (byte) 0xb0, (byte) 0x89, 0x69, (byte) 0x97, 0x4a, 0x0c,
+            (byte) 0x96, 0x77, 0x7e, 0x65, (byte) 0xb9, (byte) 0xf1, 0x09,
+            (byte) 0xc5, 0x6e, (byte) 0xc6, (byte) 0x84, 0x18, (byte) 0xf0,
+            0x7d, (byte) 0xec, 0x3a, (byte) 0xdc, 0x4d, 0x20, 0x79,
+            (byte) 0xee, 0x5f, 0x3e, (byte) 0xd7, (byte) 0xcb, 0x39, 0x48 };
+
+    public static final int[] FK = { 0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc };
+
+    public static final int[] CK = { 0x00070e15,0x1c232a31,0x383f464d,0x545b6269,
+            0x70777e85,0x8c939aa1,0xa8afb6bd,0xc4cbd2d9,
+            0xe0e7eef5,0xfc030a11,0x181f262d,0x343b4249,
+            0x50575e65,0x6c737a81,0x888f969d,0xa4abb2b9,
+            0xc0c7ced5,0xdce3eaf1,0xf8ff060d,0x141b2229,
+            0x30373e45,0x4c535a61,0x686f767d,0x848b9299,
+            0xa0a7aeb5,0xbcc3cad1,0xd8dfe6ed,0xf4fb0209,
+            0x10171e25,0x2c333a41,0x484f565d,0x646b7279 };
+
+    private byte sm4Sbox(byte inch)
+    {
+        int i = inch & 0xFF;
+        byte retVal = SboxTable[i];
+        return retVal;
+    }
+
+    private long sm4Lt(long ka)
+    {
+        long bb = 0L;
+        long c = 0L;
+        byte[] a = new byte[4];
+        byte[] b = new byte[4];
+        PUT_ULONG_BE(ka, a, 0);
+        b[0] = sm4Sbox(a[0]);
+        b[1] = sm4Sbox(a[1]);
+        b[2] = sm4Sbox(a[2]);
+        b[3] = sm4Sbox(a[3]);
+        bb = GET_ULONG_BE(b, 0);
+        c = bb ^ ROTL(bb, 2) ^ ROTL(bb, 10) ^ ROTL(bb, 18) ^ ROTL(bb, 24);
+        return c;
+    }
+
+    private long sm4F(long x0, long x1, long x2, long x3, long rk)
+    {
+        return x0 ^ sm4Lt(x1 ^ x2 ^ x3 ^ rk);
+    }
+
+    private long sm4CalciRK(long ka)
+    {
+        long bb = 0L;
+        long rk = 0L;
+        byte[] a = new byte[4];
+        byte[] b = new byte[4];
+        PUT_ULONG_BE(ka, a, 0);
+        b[0] = sm4Sbox(a[0]);
+        b[1] = sm4Sbox(a[1]);
+        b[2] = sm4Sbox(a[2]);
+        b[3] = sm4Sbox(a[3]);
+        bb = GET_ULONG_BE(b, 0);
+        rk = bb ^ ROTL(bb, 13) ^ ROTL(bb, 23);
+        return rk;
+    }
+
+    private void sm4_setkey(long[] SK, byte[] key)
+    {
+        long[] MK = new long[4];
+        long[] k = new long[36];
+        int i = 0;
+        MK[0] = GET_ULONG_BE(key, 0);
+        MK[1] = GET_ULONG_BE(key, 4);
+        MK[2] = GET_ULONG_BE(key, 8);
+        MK[3] = GET_ULONG_BE(key, 12);
+        k[0] = MK[0] ^ (long) FK[0];
+        k[1] = MK[1] ^ (long) FK[1];
+        k[2] = MK[2] ^ (long) FK[2];
+        k[3] = MK[3] ^ (long) FK[3];
+        for (; i < 32; i++)
+        {
+            k[(i + 4)] = (k[i] ^ sm4CalciRK(k[(i + 1)] ^ k[(i + 2)] ^ k[(i + 3)] ^ (long) CK[i]));
+            SK[i] = k[(i + 4)];
+        }
+    }
+
+    private void sm4_one_round(long[] sk, byte[] input, byte[] output)
+    {
+        int i = 0;
+        long[] ulbuf = new long[36];
+        ulbuf[0] = GET_ULONG_BE(input, 0);
+        ulbuf[1] = GET_ULONG_BE(input, 4);
+        ulbuf[2] = GET_ULONG_BE(input, 8);
+        ulbuf[3] = GET_ULONG_BE(input, 12);
+        while (i < 32)
+        {
+            ulbuf[(i + 4)] = sm4F(ulbuf[i], ulbuf[(i + 1)], ulbuf[(i + 2)], ulbuf[(i + 3)], sk[i]);
+            i++;
+        }
+        PUT_ULONG_BE(ulbuf[35], output, 0);
+        PUT_ULONG_BE(ulbuf[34], output, 4);
+        PUT_ULONG_BE(ulbuf[33], output, 8);
+        PUT_ULONG_BE(ulbuf[32], output, 12);
+    }
+
+    private byte[] padding(byte[] input, int mode)
+    {
+        if (input == null)
+        {
+            return null;
+        }
+
+        byte[] ret = (byte[]) null;
+        if (mode == SM4_ENCRYPT)
+        {
+            int p = 16 - input.length % 16;
+            ret = new byte[input.length + p];
+            System.arraycopy(input, 0, ret, 0, input.length);
+            for (int i = 0; i < p; i++)
+            {
+                ret[input.length + i] = (byte) p;
+            }
+        }
+        else
+        {
+            int p = input[input.length - 1];
+            ret = new byte[input.length - p];
+            System.arraycopy(input, 0, ret, 0, input.length - p);
+        }
+        return ret;
+    }
+
+    public void sm4_setkey_enc(SM4_Context ctx, byte[] key) throws Exception
+    {
+        if (ctx == null)
+        {
+            throw new Exception("ctx is null!");
+        }
+
+        if (key == null || key.length != 16)
+        {
+            throw new Exception("key error!");
+        }
+
+        ctx.mode = SM4_ENCRYPT;
+        sm4_setkey(ctx.sk, key);
+    }
+
+    public void sm4_setkey_dec(SM4_Context ctx, byte[] key) throws Exception
+    {
+        if (ctx == null)
+        {
+            throw new Exception("ctx is null!");
+        }
+
+        if (key == null || key.length != 16)
+        {
+            throw new Exception("key error!");
+        }
+
+        int i = 0;
+        ctx.mode = SM4_DECRYPT;
+        sm4_setkey(ctx.sk, key);
+        for (i = 0; i < 16; i++)
+        {
+            SWAP(ctx.sk, i);
+        }
+    }
+
+    public byte[] sm4_crypt_ecb(SM4_Context ctx, byte[] input) throws Exception
+    {
+        if (input == null)
+        {
+            throw new Exception("input is null!");
+        }
+
+        if ((ctx.isPadding) && (ctx.mode == SM4_ENCRYPT))
+        {
+            input = padding(input, SM4_ENCRYPT);
+        }
+
+        int length = input.length;
+        ByteArrayInputStream bins = new ByteArrayInputStream(input);
+        ByteArrayOutputStream bous = new ByteArrayOutputStream();
+        for(; length > 0; length -= 16)
+        {
+            byte[] in = new byte[16];
+            byte[] out = new byte[16];
+            bins.read(in);
+            sm4_one_round(ctx.sk, in, out);
+            bous.write(out);
+        }
+
+        byte[] output = bous.toByteArray();
+        if (ctx.isPadding && ctx.mode == SM4_DECRYPT)
+        {
+            output = padding(output, SM4_DECRYPT);
+        }
+        bins.close();
+        bous.close();
+        return output;
+    }
+
+    public byte[] sm4_crypt_cbc(SM4_Context ctx, byte[] iv, byte[] input) throws Exception
+    {
+        if (iv == null || iv.length != 16)
+        {
+            throw new Exception("iv error!");
+        }
+
+        if (input == null)
+        {
+            throw new Exception("input is null!");
+        }
+
+        if (ctx.isPadding && ctx.mode == SM4_ENCRYPT)
+        {
+            input = padding(input, SM4_ENCRYPT);
+        }
+
+        int i = 0;
+        int length = input.length;
+        ByteArrayInputStream bins = new ByteArrayInputStream(input);
+        ByteArrayOutputStream bous = new ByteArrayOutputStream();
+        if (ctx.mode == SM4_ENCRYPT)
+        {
+            for(; length > 0; length -= 16)
+            {
+                byte[] in = new byte[16];
+                byte[] out = new byte[16];
+                byte[] out1 = new byte[16];
+
+                bins.read(in);
+                for (i = 0; i < 16; i++)
+                {
+                    out[i] = ((byte) (in[i] ^ iv[i]));
+                }
+                sm4_one_round(ctx.sk, out, out1);
+                System.arraycopy(out1, 0, iv, 0, 16);
+                bous.write(out1);
+            }
+        }
+        else
+        {
+            byte[] temp = new byte[16];
+            for(; length > 0; length -= 16)
+            {
+                byte[] in = new byte[16];
+                byte[] out = new byte[16];
+                byte[] out1 = new byte[16];
+
+                bins.read(in);
+                System.arraycopy(in, 0, temp, 0, 16);
+                sm4_one_round(ctx.sk, in, out);
+                for (i = 0; i < 16; i++)
+                {
+                    out1[i] = ((byte) (out[i] ^ iv[i]));
+                }
+                System.arraycopy(temp, 0, iv, 0, 16);
+                bous.write(out1);
+            }
+        }
+
+        byte[] output = bous.toByteArray();
+        if (ctx.isPadding && ctx.mode == SM4_DECRYPT)
+        {
+            output = padding(output, SM4_DECRYPT);
+        }
+        bins.close();
+        bous.close();
+        return output;
+    }
+}

+ 233 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM4Utils.java

@@ -0,0 +1,233 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+import sun.misc.BASE64Decoder;
+import sun.misc.BASE64Encoder;
+
+import java.io.IOException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class SM4Utils {
+
+    public String secretKey = "";
+    private String iv = "";
+    public boolean hexString = false;
+
+    public SM4Utils(String secretKey, boolean hexString)
+    {
+        this.secretKey = secretKey;
+        this.hexString = hexString;
+    }
+    public SM4Utils(String secretKey)
+    {
+        this.secretKey = secretKey;
+        this.hexString = false;
+    }
+    public SM4Utils()
+    {
+    }
+//      
+//    public byte encryptData_ECB1(byte[] inputStream){
+//        try   
+//        {  
+//            SM4_Context ctx = new SM4_Context();  
+//            ctx.isPadding = true;  
+//            ctx.mode = SM4.SM4_ENCRYPT;  
+//              
+//            byte[] keyBytes;  
+//            if (hexString)  
+//            {  
+//                keyBytes = Util.hexStringToBytes(secretKey);  
+//            }  
+//            else  
+//            {  
+//                keyBytes = secretKey.getBytes();  
+//            }  
+//              
+//            SM4 sm4 = new SM4();  
+//            sm4.sm4_setkey_enc(ctx, keyBytes);   
+//            String cipherText = new BASE64Encoder().encode(inputStream);  
+//            if (cipherText != null && cipherText.trim().length() > 0)  
+//            {  
+//                Pattern p = Pattern.compile("\\s*|\t|\r|\n");  
+//                Matcher m = p.matcher(cipherText);  
+//                cipherText = m.replaceAll("");  
+//            }  
+//            return cipherText;  
+//        }   
+//        catch (Exception e)   
+//        {  
+//            e.printStackTrace();  
+//            return (Byte) null;  
+//        }  
+//    }
+
+    public String encryptData_ECB(String plainText)
+    {
+        try
+        {
+            SM4_Context ctx = new SM4_Context();
+            ctx.isPadding = true;
+            ctx.mode = SM4.SM4_ENCRYPT;
+
+            byte[] keyBytes;
+            if (hexString)
+            {
+                keyBytes = Util.hexStringToBytes(secretKey);
+            }
+            else
+            {
+                keyBytes = secretKey.getBytes();
+            }
+
+            SM4 sm4 = new SM4();
+            sm4.sm4_setkey_enc(ctx, keyBytes);
+            byte[] encrypted = sm4.sm4_crypt_ecb(ctx, plainText.getBytes("UTF-8"));
+            String cipherText = new BASE64Encoder().encode(encrypted);
+            if (cipherText != null && cipherText.trim().length() > 0)
+            {
+                Pattern p = Pattern.compile("\\s*|\t|\r|\n");
+                Matcher m = p.matcher(cipherText);
+                cipherText = m.replaceAll("");
+            }
+            return cipherText;
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public String decryptData_ECB(String cipherText)
+    {
+        try
+        {
+            SM4_Context ctx = new SM4_Context();
+            ctx.isPadding = true;
+            ctx.mode = SM4.SM4_DECRYPT;
+
+            byte[] keyBytes;
+            if (hexString)
+            {
+                keyBytes = Util.hexStringToBytes(secretKey);
+            }
+            else
+            {
+                keyBytes = secretKey.getBytes();
+            }
+
+            SM4 sm4 = new SM4();
+            sm4.sm4_setkey_dec(ctx, keyBytes);
+            byte[] decrypted = sm4.sm4_crypt_ecb(ctx, new BASE64Decoder().decodeBuffer(cipherText));
+            return new String(decrypted, "UTF-8");
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public String encryptData_CBC(String plainText)
+    {
+        try
+        {
+            SM4_Context ctx = new SM4_Context();
+            ctx.isPadding = true;
+            ctx.mode = SM4.SM4_ENCRYPT;
+
+            byte[] keyBytes;
+            byte[] ivBytes;
+            if (hexString)
+            {
+                keyBytes = Util.hexStringToBytes(secretKey);
+                ivBytes = Util.hexStringToBytes(iv);
+            }
+            else
+            {
+                keyBytes = secretKey.getBytes();
+                ivBytes = iv.getBytes();
+            }
+
+            SM4 sm4 = new SM4();
+            sm4.sm4_setkey_enc(ctx, keyBytes);
+            byte[] encrypted = sm4.sm4_crypt_cbc(ctx, ivBytes, plainText.getBytes("UTF-8"));
+            String cipherText = new BASE64Encoder().encode(encrypted);
+            if (cipherText != null && cipherText.trim().length() > 0)
+            {
+                Pattern p = Pattern.compile("\\s*|\t|\r|\n");
+                Matcher m = p.matcher(cipherText);
+                cipherText = m.replaceAll("");
+            }
+            return cipherText;
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public String decryptData_CBC(String cipherText)
+    {
+        try
+        {
+            SM4_Context ctx = new SM4_Context();
+            ctx.isPadding = true;
+            ctx.mode = SM4.SM4_DECRYPT;
+
+            byte[] keyBytes;
+            byte[] ivBytes;
+            if (hexString)
+            {
+                keyBytes = Util.hexStringToBytes(secretKey);
+                ivBytes = Util.hexStringToBytes(iv);
+            }
+            else
+            {
+                keyBytes = secretKey.getBytes();
+                ivBytes = iv.getBytes();
+            }
+
+            SM4 sm4 = new SM4();
+            sm4.sm4_setkey_dec(ctx, keyBytes);
+            byte[] decrypted = sm4.sm4_crypt_cbc(ctx, ivBytes, new BASE64Decoder().decodeBuffer(cipherText));
+            return new String(decrypted, "UTF-8");
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    public static void main(String[] args) throws IOException
+    {
+        String plainText = "ererfeiisgod";
+        SM4Utils sm4 = new SM4Utils("JeF8U9wHFOMfs2Y8");
+        System.out.println("ECB模式加密");
+        String cipherText = sm4.encryptData_ECB(plainText);
+        System.out.println("密文: " + cipherText);
+        System.out.println("");
+
+        plainText = sm4.decryptData_ECB(cipherText);
+        System.out.println("明文: " + plainText);
+        System.out.println("");
+
+//        System.out.println("CBC模式加密");
+//        sm4.iv = "UISwD9fW6cFh9SNS";
+//        cipherText = sm4.encryptData_CBC(plainText);
+//        System.out.println("密文: " + cipherText);
+//        System.out.println("");
+//
+//        plainText = sm4.decryptData_CBC(cipherText);
+//        System.out.println("明文: " + plainText);
+//
+//        System.out.println("CBC模式解密");
+//        System.out.println("密文:4esGgDn/snKraRDe6uM0jQ==");
+//        String cipherText2 = "4esGgDn/snKraRDe6uM0jQ==";
+//        plainText = sm4.decryptData_CBC(cipherText2);
+//        System.out.println("明文: " + plainText);
+    }
+}

+ 16 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/SM4_Context.java

@@ -0,0 +1,16 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+public class SM4_Context {
+    public int mode;
+
+    public long[] sk;
+
+    public boolean isPadding;
+
+    public SM4_Context()
+    {
+        this.mode = 1;
+        this.isPadding = true;
+        this.sk = new long[32];
+    }
+}

+ 661 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/java/com/yh/saas/plugin/yiliangyiyun/util/Util.java

@@ -0,0 +1,661 @@
+package com.yh.saas.plugin.yiliangyiyun.util;
+
+import java.math.BigInteger;
+
+public class Util {
+    /**
+     * 整形转换成网络传输的字节流(字节数组)型数据
+     *
+     * @param num 一个整型数据
+     * @return 4个字节的自己数组
+     */
+    public static byte[] intToBytes(int num)
+    {
+        byte[] bytes = new byte[4];
+        bytes[0] = (byte) (0xff & (num >> 0));
+        bytes[1] = (byte) (0xff & (num >> 8));
+        bytes[2] = (byte) (0xff & (num >> 16));
+        bytes[3] = (byte) (0xff & (num >> 24));
+        return bytes;
+    }
+
+    /**
+     * 四个字节的字节数据转换成一个整形数据
+     *
+     * @param bytes 4个字节的字节数组
+     * @return 一个整型数据
+     */
+    public static int byteToInt(byte[] bytes)
+    {
+        int num = 0;
+        int temp;
+        temp = (0x000000ff & (bytes[0])) << 0;
+        num = num | temp;
+        temp = (0x000000ff & (bytes[1])) << 8;
+        num = num | temp;
+        temp = (0x000000ff & (bytes[2])) << 16;
+        num = num | temp;
+        temp = (0x000000ff & (bytes[3])) << 24;
+        num = num | temp;
+        return num;
+    }
+
+    /**
+     * 长整形转换成网络传输的字节流(字节数组)型数据
+     *
+     * @param num 一个长整型数据
+     * @return 4个字节的自己数组
+     */
+    public static byte[] longToBytes(long num)
+    {
+        byte[] bytes = new byte[8];
+        for (int i = 0; i < 8; i++)
+        {
+            bytes[i] = (byte) (0xff & (num >> (i * 8)));
+        }
+
+        return bytes;
+    }
+
+    /**
+     * 大数字转换字节流(字节数组)型数据
+     *
+     * @param n
+     * @return
+     */
+    public static byte[] byteConvert32Bytes(BigInteger n)
+    {
+        byte tmpd[] = (byte[])null;
+        if(n == null)
+        {
+            return null;
+        }
+
+        if(n.toByteArray().length == 33)
+        {
+            tmpd = new byte[32];
+            System.arraycopy(n.toByteArray(), 1, tmpd, 0, 32);
+        }
+        else if(n.toByteArray().length == 32)
+        {
+            tmpd = n.toByteArray();
+        }
+        else
+        {
+            tmpd = new byte[32];
+            for(int i = 0; i < 32 - n.toByteArray().length; i++)
+            {
+                tmpd[i] = 0;
+            }
+            System.arraycopy(n.toByteArray(), 0, tmpd, 32 - n.toByteArray().length, n.toByteArray().length);
+        }
+        return tmpd;
+    }
+
+    /**
+     * 换字节流(字节数组)型数据转大数字
+     *
+     * @param b
+     * @return
+     */
+    public static BigInteger byteConvertInteger(byte[] b)
+    {
+        if (b[0] < 0)
+        {
+            byte[] temp = new byte[b.length + 1];
+            temp[0] = 0;
+            System.arraycopy(b, 0, temp, 1, b.length);
+            return new BigInteger(temp);
+        }
+        return new BigInteger(b);
+    }
+
+    /**
+     * 根据字节数组获得值(十六进制数字)
+     *
+     * @param bytes
+     * @return
+     */
+    public static String getHexString(byte[] bytes)
+    {
+        return getHexString(bytes, true);
+    }
+
+    /**
+     * 根据字节数组获得值(十六进制数字)
+     *
+     * @param bytes
+     * @param upperCase
+     * @return
+     */
+    public static String getHexString(byte[] bytes, boolean upperCase)
+    {
+        String ret = "";
+        for (int i = 0; i < bytes.length; i++)
+        {
+            ret += Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1);
+        }
+        return upperCase ? ret.toUpperCase() : ret;
+    }
+
+    /**
+     * 打印十六进制字符串
+     *
+     * @param bytes
+     */
+    public static void printHexString(byte[] bytes)
+    {
+        for (int i = 0; i < bytes.length; i++)
+        {
+            String hex = Integer.toHexString(bytes[i] & 0xFF);
+            if (hex.length() == 1)
+            {
+                hex = '0' + hex;
+            }
+            System.out.print("0x" + hex.toUpperCase() + ",");
+        }
+        System.out.println("");
+    }
+
+    /**
+     * Convert hex string to byte[]
+     *
+     * @param hexString
+     *            the hex string
+     * @return byte[]
+     */
+    public static byte[] hexStringToBytes(String hexString)
+    {
+        if (hexString == null || hexString.equals(""))
+        {
+            return null;
+        }
+
+        hexString = hexString.toUpperCase();
+        int length = hexString.length() / 2;
+        char[] hexChars = hexString.toCharArray();
+        byte[] d = new byte[length];
+        for (int i = 0; i < length; i++)
+        {
+            int pos = i * 2;
+            d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
+        }
+        return d;
+    }
+
+    /**
+     * Convert char to byte
+     *
+     * @param c
+     *            char
+     * @return byte
+     */
+    public static byte charToByte(char c)
+    {
+        return (byte) "0123456789ABCDEF".indexOf(c);
+    }
+
+    /**
+     * 用于建立十六进制字符的输出的小写字符数组
+     */
+    private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5',
+            '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+
+    /**
+     * 用于建立十六进制字符的输出的大写字符数组
+     */
+    private static final char[] DIGITS_UPPER = {'0', '1', '2', '3', '4', '5',
+            '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
+
+    /**
+     * 将字节数组转换为十六进制字符数组
+     *
+     * @param data byte[]
+     * @return 十六进制char[]
+     */
+    public static char[] encodeHex(byte[] data) {
+        return encodeHex(data, true);
+    }
+
+    /**
+     * 将字节数组转换为十六进制字符数组
+     *
+     * @param data        byte[]
+     * @param toLowerCase <code>true</code> 传换成小写格式 , <code>false</code> 传换成大写格式
+     * @return 十六进制char[]
+     */
+    public static char[] encodeHex(byte[] data, boolean toLowerCase) {
+        return encodeHex(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
+    }
+
+    /**
+     * 将字节数组转换为十六进制字符数组
+     *
+     * @param data     byte[]
+     * @param toDigits 用于控制输出的char[]
+     * @return 十六进制char[]
+     */
+    protected static char[] encodeHex(byte[] data, char[] toDigits) {
+        int l = data.length;
+        char[] out = new char[l << 1];
+        // two characters form the hex value.
+        for (int i = 0, j = 0; i < l; i++) {
+            out[j++] = toDigits[(0xF0 & data[i]) >>> 4];
+            out[j++] = toDigits[0x0F & data[i]];
+        }
+        return out;
+    }
+
+    /**
+     * 将字节数组转换为十六进制字符串
+     *
+     * @param data byte[]
+     * @return 十六进制String
+     */
+    public static String encodeHexString(byte[] data) {
+        return encodeHexString(data, true);
+    }
+
+    /**
+     * 将字节数组转换为十六进制字符串
+     *
+     * @param data        byte[]
+     * @param toLowerCase <code>true</code> 传换成小写格式 , <code>false</code> 传换成大写格式
+     * @return 十六进制String
+     */
+    public static String encodeHexString(byte[] data, boolean toLowerCase) {
+        return encodeHexString(data, toLowerCase ? DIGITS_LOWER : DIGITS_UPPER);
+    }
+
+    /**
+     * 将字节数组转换为十六进制字符串
+     *
+     * @param data     byte[]
+     * @param toDigits 用于控制输出的char[]
+     * @return 十六进制String
+     */
+    protected static String encodeHexString(byte[] data, char[] toDigits) {
+        return new String(encodeHex(data, toDigits));
+    }
+
+    /**
+     * 将十六进制字符数组转换为字节数组
+     *
+     * @param data 十六进制char[]
+     * @return byte[]
+     * @throws RuntimeException 如果源十六进制字符数组是一个奇怪的长度,将抛出运行时异常
+     */
+    public static byte[] decodeHex(char[] data) {
+        int len = data.length;
+
+        if ((len & 0x01) != 0) {
+            throw new RuntimeException("Odd number of characters.");
+        }
+
+        byte[] out = new byte[len >> 1];
+
+        // two characters form the hex value.
+        for (int i = 0, j = 0; j < len; i++) {
+            int f = toDigit(data[j], j) << 4;
+            j++;
+            f = f | toDigit(data[j], j);
+            j++;
+            out[i] = (byte) (f & 0xFF);
+        }
+
+        return out;
+    }
+
+    /**
+     * 将十六进制字符转换成一个整数
+     *
+     * @param ch    十六进制char
+     * @param index 十六进制字符在字符数组中的位置
+     * @return 一个整数
+     * @throws RuntimeException 当ch不是一个合法的十六进制字符时,抛出运行时异常
+     */
+    protected static int toDigit(char ch, int index) {
+        int digit = Character.digit(ch, 16);
+        if (digit == -1) {
+            throw new RuntimeException("Illegal hexadecimal character " + ch
+                    + " at index " + index);
+        }
+        return digit;
+    }
+
+    /**
+     * 数字字符串转ASCII码字符串
+     *
+     * @param content
+     *            字符串
+     * @return ASCII字符串
+     */
+    public static String StringToAsciiString(String content) {
+        String result = "";
+        int max = content.length();
+        for (int i = 0; i < max; i++) {
+            char c = content.charAt(i);
+            String b = Integer.toHexString(c);
+            result = result + b;
+        }
+        return result;
+    }
+
+    /**
+     * 十六进制转字符串
+     *
+     * @param hexString
+     *            十六进制字符串
+     * @param encodeType
+     *            编码类型4:Unicode,2:普通编码
+     * @return 字符串
+     */
+    public static String hexStringToString(String hexString, int encodeType) {
+        String result = "";
+        int max = hexString.length() / encodeType;
+        for (int i = 0; i < max; i++) {
+            char c = (char) hexStringToAlgorism(hexString
+                    .substring(i * encodeType, (i + 1) * encodeType));
+            result += c;
+        }
+        return result;
+    }
+
+    /**
+     * 十六进制字符串装十进制
+     *
+     * @param hex
+     *            十六进制字符串
+     * @return 十进制数值
+     */
+    public static int hexStringToAlgorism(String hex) {
+        hex = hex.toUpperCase();
+        int max = hex.length();
+        int result = 0;
+        for (int i = max; i > 0; i--) {
+            char c = hex.charAt(i - 1);
+            int algorism = 0;
+            if (c >= '0' && c <= '9') {
+                algorism = c - '0';
+            } else {
+                algorism = c - 55;
+            }
+            result += Math.pow(16, max - i) * algorism;
+        }
+        return result;
+    }
+
+    /**
+     * 十六转二进制
+     *
+     * @param hex
+     *            十六进制字符串
+     * @return 二进制字符串
+     */
+    public static String hexStringToBinary(String hex) {
+        hex = hex.toUpperCase();
+        String result = "";
+        int max = hex.length();
+        for (int i = 0; i < max; i++) {
+            char c = hex.charAt(i);
+            switch (c) {
+                case '0':
+                    result += "0000";
+                    break;
+                case '1':
+                    result += "0001";
+                    break;
+                case '2':
+                    result += "0010";
+                    break;
+                case '3':
+                    result += "0011";
+                    break;
+                case '4':
+                    result += "0100";
+                    break;
+                case '5':
+                    result += "0101";
+                    break;
+                case '6':
+                    result += "0110";
+                    break;
+                case '7':
+                    result += "0111";
+                    break;
+                case '8':
+                    result += "1000";
+                    break;
+                case '9':
+                    result += "1001";
+                    break;
+                case 'A':
+                    result += "1010";
+                    break;
+                case 'B':
+                    result += "1011";
+                    break;
+                case 'C':
+                    result += "1100";
+                    break;
+                case 'D':
+                    result += "1101";
+                    break;
+                case 'E':
+                    result += "1110";
+                    break;
+                case 'F':
+                    result += "1111";
+                    break;
+            }
+        }
+        return result;
+    }
+
+    /**
+     * ASCII码字符串转数字字符串
+     *
+     * @param String
+     *            ASCII字符串
+     * @return 字符串
+     */
+    public static String AsciiStringToString(String content) {
+        String result = "";
+        int length = content.length() / 2;
+        for (int i = 0; i < length; i++) {
+            String c = content.substring(i * 2, i * 2 + 2);
+            int a = hexStringToAlgorism(c);
+            char b = (char) a;
+            String d = String.valueOf(b);
+            result += d;
+        }
+        return result;
+    }
+
+    /**
+     * 将十进制转换为指定长度的十六进制字符串
+     *
+     * @param algorism
+     *            int 十进制数字
+     * @param maxLength
+     *            int 转换后的十六进制字符串长度
+     * @return String 转换后的十六进制字符串
+     */
+    public static String algorismToHexString(int algorism, int maxLength) {
+        String result = "";
+        result = Integer.toHexString(algorism);
+
+        if (result.length() % 2 == 1) {
+            result = "0" + result;
+        }
+        return patchHexString(result.toUpperCase(), maxLength);
+    }
+
+    /**
+     * 字节数组转为普通字符串(ASCII对应的字符)
+     *
+     * @param bytearray
+     *            byte[]
+     * @return String
+     */
+    public static String byteToString(byte[] bytearray) {
+        String result = "";
+        char temp;
+
+        int length = bytearray.length;
+        for (int i = 0; i < length; i++) {
+            temp = (char) bytearray[i];
+            result += temp;
+        }
+        return result;
+    }
+
+    /**
+     * 二进制字符串转十进制
+     *
+     * @param binary
+     *            二进制字符串
+     * @return 十进制数值
+     */
+    public static int binaryToAlgorism(String binary) {
+        int max = binary.length();
+        int result = 0;
+        for (int i = max; i > 0; i--) {
+            char c = binary.charAt(i - 1);
+            int algorism = c - '0';
+            result += Math.pow(2, max - i) * algorism;
+        }
+        return result;
+    }
+
+    /**
+     * 十进制转换为十六进制字符串
+     *
+     * @param algorism
+     *            int 十进制的数字
+     * @return String 对应的十六进制字符串
+     */
+    public static String algorismToHEXString(int algorism) {
+        String result = "";
+        result = Integer.toHexString(algorism);
+
+        if (result.length() % 2 == 1) {
+            result = "0" + result;
+
+        }
+        result = result.toUpperCase();
+
+        return result;
+    }
+
+    /**
+     * HEX字符串前补0,主要用于长度位数不足。
+     *
+     * @param str
+     *            String 需要补充长度的十六进制字符串
+     * @param maxLength
+     *            int 补充后十六进制字符串的长度
+     * @return 补充结果
+     */
+    static public String patchHexString(String str, int maxLength) {
+        String temp = "";
+        for (int i = 0; i < maxLength - str.length(); i++) {
+            temp = "0" + temp;
+        }
+        str = (temp + str).substring(0, maxLength);
+        return str;
+    }
+
+    /**
+     * 将一个字符串转换为int
+     *
+     * @param s
+     *            String 要转换的字符串
+     * @param defaultInt
+     *            int 如果出现异常,默认返回的数字
+     * @param radix
+     *            int 要转换的字符串是什么进制的,如16 8 10.
+     * @return int 转换后的数字
+     */
+    public static int parseToInt(String s, int defaultInt, int radix) {
+        int i = 0;
+        try {
+            i = Integer.parseInt(s, radix);
+        } catch (NumberFormatException ex) {
+            i = defaultInt;
+        }
+        return i;
+    }
+
+    /**
+     * 将一个十进制形式的数字字符串转换为int
+     *
+     * @param s
+     *            String 要转换的字符串
+     * @param defaultInt
+     *            int 如果出现异常,默认返回的数字
+     * @return int 转换后的数字
+     */
+    public static int parseToInt(String s, int defaultInt) {
+        int i = 0;
+        try {
+            i = Integer.parseInt(s);
+        } catch (NumberFormatException ex) {
+            i = defaultInt;
+        }
+        return i;
+    }
+
+    /**
+     * 十六进制串转化为byte数组
+     *
+     * @return the array of byte
+     */
+    public static byte[] hexToByte(String hex)
+            throws IllegalArgumentException {
+        if (hex.length() % 2 != 0) {
+            throw new IllegalArgumentException();
+        }
+        char[] arr = hex.toCharArray();
+        byte[] b = new byte[hex.length() / 2];
+        for (int i = 0, j = 0, l = hex.length(); i < l; i++, j++) {
+            String swap = "" + arr[i++] + arr[i];
+            int byteint = Integer.parseInt(swap, 16) & 0xFF;
+            b[j] = new Integer(byteint).byteValue();
+        }
+        return b;
+    }
+
+    /**
+     * 字节数组转换为十六进制字符串
+     *
+     * @param b
+     *            byte[] 需要转换的字节数组
+     * @return String 十六进制字符串
+     */
+    public static String byteToHex(byte b[]) {
+        if (b == null) {
+            throw new IllegalArgumentException(
+                    "Argument b ( byte array ) is null! ");
+        }
+        String hs = "";
+        String stmp = "";
+        for (int n = 0; n < b.length; n++) {
+            stmp = Integer.toHexString(b[n] & 0xff);
+            if (stmp.length() == 1) {
+                hs = hs + "0" + stmp;
+            } else {
+                hs = hs + stmp;
+            }
+        }
+        return hs.toUpperCase();
+    }
+
+    public static byte[] subByte(byte[] input, int startIndex, int length) {
+        byte[] bt = new byte[length];
+        for (int i = 0; i < length; i++) {
+            bt[i] = input[i + startIndex];
+        }
+        return bt;
+    }
+}

+ 1 - 0
winsea-haixin-plugin-wangluohuoyun/src/main/resources/mapper/CargoOwnerAddressInfoMapper.xml

@@ -28,6 +28,7 @@
         city,
         area,
         detailed_address as detailedAddress,
+        ad_code as adCode,
         longitude,
         latitude,
         contacts,