Sfoglia il codice sorgente

新增银行扣款模块

linbl 2 anni fa
parent
commit
3bf5483d9f
28 ha cambiato i file con 1916 aggiunte e 362 eliminazioni
  1. 3 0
      sp-core/sp-api/src/main/java/com/pj/api/client/level_one_server/LevelOneServerInterface.java
  2. 5 0
      sp-core/sp-api/src/main/java/com/pj/api/client/level_one_server/LevelOneServerInterfaceFallback.java
  3. 5 1
      sp-core/sp-api/src/main/java/com/pj/api/client/level_two_server/LevelTwoServerInterface.java
  4. 5 0
      sp-core/sp-api/src/main/java/com/pj/api/client/level_two_server/LevelTwoServerInterfaceFallback.java
  5. 11 0
      sp-core/sp-api/src/main/java/com/pj/api/client/payment_server/PaymentServerInterface.java
  6. 12 1
      sp-core/sp-api/src/main/java/com/pj/api/client/payment_server/PaymentServerInterfaceFallback.java
  7. 335 0
      sp-core/sp-api/src/main/java/com/pj/api/dto/CompanyDto.java
  8. 25 0
      sp-core/sp-api/src/main/java/com/pj/api/dto/OrderDto.java
  9. 1 1
      sp-core/sp-api/src/main/java/com/pj/api/dto/PaymentDto.java
  10. 671 0
      sp-core/sp-api/src/main/java/com/pj/api/dto/PaymentTwoDto.java
  11. 24 18
      sp-service/level-one-server/src/main/java/com/pj/ht_trade_settlement/HtTradeSettlementController.java
  12. 1 0
      sp-service/level-one-server/src/main/java/com/pj/ht_trade_settlement/HtTradeSettlementService.java
  13. 4 1
      sp-service/level-one-server/src/main/java/com/pj/tb_order/TbOrder.java
  14. 3 1
      sp-service/level-one-server/src/main/java/com/pj/tb_order/TbOrderService.java
  15. 52 50
      sp-service/level-two-server/src/main/java/com/pj/tb_company/TbCompany.java
  16. 10 2
      sp-service/level-two-server/src/main/java/com/pj/tb_orders/TbOrdersApiController.java
  17. 111 27
      sp-service/level-two-server/src/main/java/com/pj/tb_orders/TbOrdersService.java
  18. 3 0
      sp-service/payment-server/src/main/java/com/pj/bank_byte/BankByte.java
  19. 5 2
      sp-service/payment-server/src/main/java/com/pj/bank_info/BankInfo.java
  20. 91 0
      sp-service/payment-server/src/main/java/com/pj/bank_info_charges/BankInfoCharges.java
  21. 85 0
      sp-service/payment-server/src/main/java/com/pj/bank_info_charges/BankInfoChargesController.java
  22. 30 0
      sp-service/payment-server/src/main/java/com/pj/bank_info_charges/BankInfoChargesMapper.java
  23. 57 0
      sp-service/payment-server/src/main/java/com/pj/bank_info_charges/BankInfoChargesMapper.xml
  24. 51 0
      sp-service/payment-server/src/main/java/com/pj/bank_info_charges/BankInfoChargesService.java
  25. 149 149
      sp-service/payment-server/src/main/java/com/pj/task/BankByteTask.java
  26. 11 0
      sp-service/payment-server/src/main/java/com/pj/task/PaymentController.java
  27. 39 1
      sp-service/payment-server/src/main/java/com/pj/task/PaymentService.java
  28. 117 108
      sp-service/payment-server/src/main/java/com/pj/xml/MessageXML.java

+ 3 - 0
sp-core/sp-api/src/main/java/com/pj/api/client/level_one_server/LevelOneServerInterface.java

@@ -23,6 +23,9 @@ import java.util.List;
 )
 public interface LevelOneServerInterface {
 
+    /** 查 - 根据id查orderDto */
+    @RequestMapping("/HtTradeSettlement/rpc/getHtTradeSettlementById")
+    public TradeSettlementDto getHtTradeSettlementById(@RequestParam("id") Long id);
 
     /** 远程调用 进口申报单同步 */
     @PostMapping("/TbImportOrder/rpc/importOrderDto")

+ 5 - 0
sp-core/sp-api/src/main/java/com/pj/api/client/level_one_server/LevelOneServerInterfaceFallback.java

@@ -24,6 +24,11 @@ public class LevelOneServerInterfaceFallback implements FallbackFactory<LevelOne
     public LevelOneServerInterface create(Throwable throwable) {
         return new LevelOneServerInterface() {
             @Override
+            public TradeSettlementDto getHtTradeSettlementById(Long id) {
+                return null;
+            }
+
+            @Override
             public boolean importOrderDto(HtImportOrderDto importOrderDto) {
                 log.error("同步航通进口申报单时发生错误,当前对象:{},错误信息是:{}",importOrderDto.toString(),throwable.getMessage());
                 return false;

+ 5 - 1
sp-core/sp-api/src/main/java/com/pj/api/client/level_two_server/LevelTwoServerInterface.java

@@ -2,9 +2,9 @@ package com.pj.api.client.level_two_server;
 
 import com.pj.api.FeignInterceptor;
 import com.pj.api.consts.FeignConsts;
-import com.pj.api.dto.OrderDto;
 import com.pj.api.dto.PurchaserDto;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -34,4 +34,8 @@ public interface LevelTwoServerInterface {
     /** 查 - 根据一级市场订单id查二级市场的转售金额 */
     @RequestMapping("/app/TbOrders/rpc/getResalePriceByLevelOneOrderId")
     public Double getResalePriceByLevelOneOrderId(@RequestParam("orderId") Long orderId);
+
+    /** 查 - 根据一级市场订单id查二级市场的转售金额 */
+    @PostMapping("/app/TbOrders/rpc/payTax")
+    public boolean payTax(@RequestParam("orderNo") String orderNo);
 }

+ 5 - 0
sp-core/sp-api/src/main/java/com/pj/api/client/level_two_server/LevelTwoServerInterfaceFallback.java

@@ -43,6 +43,11 @@ public class LevelTwoServerInterfaceFallback implements FallbackFactory<LevelTwo
             public Double getResalePriceByLevelOneOrderId(Long orderId) {
                 return null;
             }
+
+            @Override
+            public boolean payTax(String orderNo) {
+                return false;
+            }
         };
     }
 }

+ 11 - 0
sp-core/sp-api/src/main/java/com/pj/api/client/payment_server/PaymentServerInterface.java

@@ -32,4 +32,15 @@ public interface PaymentServerInterface {
     @RequestMapping("/payment/rpc/sendSXB023")
     void sendSXB023(@RequestBody PaymentDto paymentDto);
 
+    /**
+     * 订单扣款(无手续费)
+     */
+    @RequestMapping("/payment/rpc/sendMKT006_NoCommission")
+    void sendMKT006_NoCommission(@RequestBody PaymentTwoDto paymentTwoDto);
+
+    /**
+     * 订单扣款(+手续费)
+     */
+    @RequestMapping("/payment/rpc/sendMKT006")
+    void sendMKT006(@RequestBody PaymentTwoDto paymentTwoDto);
 }

+ 12 - 1
sp-core/sp-api/src/main/java/com/pj/api/client/payment_server/PaymentServerInterfaceFallback.java

@@ -17,7 +17,6 @@ public class PaymentServerInterfaceFallback implements FallbackFactory<PaymentSe
     public PaymentServerInterface create(Throwable throwable) {
         return new PaymentServerInterface() {
 
-
             @Override
             public void sendSXB010(PaymentDto paymentDto) {
                 System.out.println(throwable.getMessage());
@@ -35,6 +34,18 @@ public class PaymentServerInterfaceFallback implements FallbackFactory<PaymentSe
                 System.out.println(throwable.getMessage());
                 log.error("调用通关车批信息同步接口(车出一级市场时)【SXB023】错误,当前对象:{},错误信息是:{}",paymentDto,throwable.getMessage());
             }
+
+            @Override
+            public void sendMKT006_NoCommission(PaymentTwoDto paymentTwoDto) {
+                System.out.println(throwable.getMessage());
+                log.error("调用订单扣款(无手续费)接口【MKT006】错误,当前对象:{},错误信息是:{}",paymentTwoDto,throwable.getMessage());
+            }
+
+            @Override
+            public void sendMKT006(PaymentTwoDto paymentTwoDto) {
+                System.out.println(throwable.getMessage());
+                log.error("调用订单扣款(+手续费)接口【MKT006】错误,当前对象:{},错误信息是:{}",paymentTwoDto,throwable.getMessage());
+            }
         };
     }
 }

+ 335 - 0
sp-core/sp-api/src/main/java/com/pj/api/dto/CompanyDto.java

@@ -0,0 +1,335 @@
+package com.pj.api.dto;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * Model: tb_company -- 企业管理
+ * @author lbl
+ */
+public class CompanyDto implements Serializable {
+
+	/**
+	 *手续费金额
+	 */
+	private BigDecimal chargesPrice;
+
+	private Long id;
+
+	/**
+	 * 名称
+	 */
+	private String name;
+
+	/**
+	 * 法人
+	 */
+	private String legalPerson;
+
+	/**
+	 * 身份证号
+	 */
+	private String idCard;
+
+	/**
+	 * 手机号码
+	 */
+	private String contact;
+
+	/**
+	 * 营业执照
+	 */
+	private String businessLicense;
+
+	/**
+	 * 银行编号(CMB= 招商银行)
+	 */
+	private String bankNo;
+
+	/**
+	 * 银行名称
+	 */
+	private String bankName;
+
+	/**
+	 * 银行账号
+	 */
+	private String bankAccount;
+
+	/**
+	 * 税号
+	 */
+	private String dutyParagraph;
+
+	/**
+	 * 地址全路径如1,22,333
+	 */
+	private String addressIds;
+
+	/**
+	 * 地址
+	 */
+	private String address;
+
+	/**
+	 * 详细地址
+	 */
+	private String detail;
+
+	/**
+	 * 创建时间
+	 */
+	private Date createTime;
+
+	/**
+	 * 创建人编号
+	 */
+	private String createBy;
+
+	/**
+	 * 创建人名称
+	 */
+	private String createName;
+
+	/**
+	 * 更新时间
+	 */
+	private Date updateTime;
+
+	/**
+	 * 更新人编号
+	 */
+	private String updateBy;
+
+	/**
+	 * 更新人名称
+	 */
+	private String updateName;
+
+	/**
+	 * 删除状态(0=禁用,1=启用)
+	 */
+	private Long deleteStatus;
+
+	/**
+	 * 是否锁住
+	 */
+	private Integer isLock=0;
+
+	/**
+	 * 互市区ID
+	 */
+
+	private String tradeAreaId;
+
+	/**
+	 * 互市区名称
+	 */
+	private String tradeAreaName;
+
+	/**
+	 * 社会统一ixny代码
+	 */
+	private String usci;
+
+	public String getUsci() {
+		return usci;
+	}
+
+	public void setUsci(String usci) {
+		this.usci = usci;
+	}
+
+	public BigDecimal getChargesPrice() {
+		return chargesPrice;
+	}
+
+	public void setChargesPrice(BigDecimal chargesPrice) {
+		this.chargesPrice = chargesPrice;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getLegalPerson() {
+		return legalPerson;
+	}
+
+	public void setLegalPerson(String legalPerson) {
+		this.legalPerson = legalPerson;
+	}
+
+	public String getIdCard() {
+		return idCard;
+	}
+
+	public void setIdCard(String idCard) {
+		this.idCard = idCard;
+	}
+
+	public String getContact() {
+		return contact;
+	}
+
+	public void setContact(String contact) {
+		this.contact = contact;
+	}
+
+	public String getBusinessLicense() {
+		return businessLicense;
+	}
+
+	public void setBusinessLicense(String businessLicense) {
+		this.businessLicense = businessLicense;
+	}
+
+	public String getBankNo() {
+		return bankNo;
+	}
+
+	public void setBankNo(String bankNo) {
+		this.bankNo = bankNo;
+	}
+
+	public String getBankName() {
+		return bankName;
+	}
+
+	public void setBankName(String bankName) {
+		this.bankName = bankName;
+	}
+
+	public String getBankAccount() {
+		return bankAccount;
+	}
+
+	public void setBankAccount(String bankAccount) {
+		this.bankAccount = bankAccount;
+	}
+
+	public String getDutyParagraph() {
+		return dutyParagraph;
+	}
+
+	public void setDutyParagraph(String dutyParagraph) {
+		this.dutyParagraph = dutyParagraph;
+	}
+
+	public String getAddressIds() {
+		return addressIds;
+	}
+
+	public void setAddressIds(String addressIds) {
+		this.addressIds = addressIds;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getDetail() {
+		return detail;
+	}
+
+	public void setDetail(String detail) {
+		this.detail = detail;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getCreateBy() {
+		return createBy;
+	}
+
+	public void setCreateBy(String createBy) {
+		this.createBy = createBy;
+	}
+
+	public String getCreateName() {
+		return createName;
+	}
+
+	public void setCreateName(String createName) {
+		this.createName = createName;
+	}
+
+	public Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	public String getUpdateBy() {
+		return updateBy;
+	}
+
+	public void setUpdateBy(String updateBy) {
+		this.updateBy = updateBy;
+	}
+
+	public String getUpdateName() {
+		return updateName;
+	}
+
+	public void setUpdateName(String updateName) {
+		this.updateName = updateName;
+	}
+
+	public Long getDeleteStatus() {
+		return deleteStatus;
+	}
+
+	public void setDeleteStatus(Long deleteStatus) {
+		this.deleteStatus = deleteStatus;
+	}
+
+	public Integer getIsLock() {
+		return isLock;
+	}
+
+	public void setIsLock(Integer isLock) {
+		this.isLock = isLock;
+	}
+
+	public String getTradeAreaId() {
+		return tradeAreaId;
+	}
+
+	public void setTradeAreaId(String tradeAreaId) {
+		this.tradeAreaId = tradeAreaId;
+	}
+
+	public String getTradeAreaName() {
+		return tradeAreaName;
+	}
+
+	public void setTradeAreaName(String tradeAreaName) {
+		this.tradeAreaName = tradeAreaName;
+	}
+}

+ 25 - 0
sp-core/sp-api/src/main/java/com/pj/api/dto/OrderDto.java

@@ -411,6 +411,31 @@ public class OrderDto implements Serializable {
      */
     private String preIeportNo;
 
+    /**
+     * 商品单价
+     */
+    private Double declPrice;
+    /**
+     * 商品编码
+     */
+    private String codeTs;
+
+    public Double getDeclPrice() {
+        return declPrice;
+    }
+
+    public void setDeclPrice(Double declPrice) {
+        this.declPrice = declPrice;
+    }
+
+    public String getCodeTs() {
+        return codeTs;
+    }
+
+    public void setCodeTs(String codeTs) {
+        this.codeTs = codeTs;
+    }
+
     public Long getId() {
         return id;
     }

+ 1 - 1
sp-core/sp-api/src/main/java/com/pj/api/dto/PaymentDto.java

@@ -5,7 +5,7 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
- * 银行报文数据Dto
+ * 银行报文数据(一级市场)
  * @author lbl
  */
 public class PaymentDto implements Serializable {

+ 671 - 0
sp-core/sp-api/src/main/java/com/pj/api/dto/PaymentTwoDto.java

@@ -0,0 +1,671 @@
+package com.pj.api.dto;
+
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 银行报文数据(二级市场)
+ * @author lbl
+ */
+public class PaymentTwoDto implements Serializable {
+
+
+	private Long id;
+
+	/**
+	 * 航通主键
+	 */
+	private String platSeqNo;
+
+	/**
+	 * 申报单编号
+	 */
+	private String declareId;
+
+	/**
+	 * 1-边民,2-商铺业主或其代理人,3-合作社代表,4-互助组代表
+	 */
+	private String declareType;
+
+	/**
+	 * 申报人姓名
+	 */
+	private String declareName;
+
+	/**
+	 * 身份证号码
+	 */
+	private String idno;
+
+	/**
+	 * 商铺编码
+	 */
+	private String shopNo;
+
+
+	/**
+	 * 商铺名称
+	 */
+	private String shopName;
+
+	/**
+	 * 申报人类别为3、4 时互助组/合作社备案编号
+	 */
+	private String orgPutrecNo;
+
+	/**
+	 * 申报人类别为3、4 时互助组/合租社名称
+	 */
+	private String orgName;
+
+	/**
+	 * 申报人类别为4 时边民合作社社会统一信用代码
+	 */
+	private String orgScc;
+
+	/**
+	 *  运输工具名称
+	 */
+	private String veNo;
+
+	/**
+	 * 业务模式, 进出口标志为进口时,01 区内交易、02 落地加工、03 原装提离。进出口标 志 为 出 口时,04:直接出口,05:出口销售。
+	 */
+	private String btrnbBizModecd;
+
+	/**
+	 * 商品流向, 进出口标志为进口时,必填,01-二次销售;02-生活自用;03-落地加工;
+	 */
+	private String gFlow;
+
+	/**
+	 * 进出口标志:I进口 E 出口
+	 */
+	private String iEFlag;
+
+	/**
+	 * 监管场所编号
+	 */
+	private String fieldCode;
+
+	/**
+	 * 监管场所名称
+	 */
+	private String fieldName;
+
+	/**
+	 * 申报口岸代码
+	 */
+	private String customsCode;
+
+	/**
+	 * 1-是、0-否
+	 */
+	private String carPool;
+
+	/**
+	 * 总金额(交易结算单006总金额)
+	 */
+	private Double sumAmt;
+
+	/**
+	 * 总毛重
+	 */
+	private Double sumGrossWt;
+
+	/**
+	 * 总净重
+	 */
+	private Double sumNetWt;
+
+	/**
+	 * 运输方式
+	 */
+	private String trafMode;
+
+	/**
+	 * 币制
+	 */
+	private String currCode;
+
+	/**
+	 * 件数,正整数
+	 */
+	private Long packNo;
+
+	/**
+	 * 申 报 时 间 :yyyy-MM-dd HH:mm:ss
+	 */
+	private String declTime;
+
+	/**
+	 * 提运单号
+	 */
+	private String billNo;
+
+	/**
+	 * 运输工具航次(班)号
+	 */
+	private String voyageNo;
+
+	/**
+	 * 商品名称,多个用英文逗号分割
+	 */
+	private String goodsNames;
+
+
+
+
+
+	/**
+	 * 订单编号(二级市场)
+	 */
+	private String orderNo;
+
+	/**
+	 * 一级市场边民订单金额
+	 */
+	private BigDecimal totalPrice=BigDecimal.ZERO;
+
+	/**
+	 * 二级市场转售总金额
+	 */
+	private BigDecimal resalePrice=BigDecimal.ZERO;
+
+	//边民姓名
+	private String borderName;
+	//证件类型
+	//边民证件号
+	private String borderidno;
+	//国籍
+	//银行账号
+	private String bankCode;
+	//银行名称
+	private String bankName;
+	//银行代码
+	//联系电话
+	private String borderTel;
+
+	//商铺所属人姓名
+	private String ownerName;
+	//商铺所属人证件类型(01:身份证 02 护照)
+	private String ownerIdtype;
+	//商铺所属人证件号
+	//商铺国籍
+	//商铺银行账号
+	private String bankAccount;
+	//商铺开户行代码
+	private String bank;
+	//商铺联系电话
+	private String ownerTel;
+
+	//商品编码
+	private String codeTs;
+	//商品名称
+	private String goodsName;
+	//商品单位
+	private String goodsUnit;
+	//商品单价
+	private Double declPrice;
+	//商品数量
+	private Double buyQty;
+	//商品重量(毛重)
+	private Double grossWt;
+
+	private String tradeNos;
+
+	//采购企业信息字段如下
+	/**
+	 * 企业名称
+	 */
+	private String pcName;
+	/**
+	 * 营业执照
+	 */
+	private String businessLicense;
+	/**
+	 * 银行账号
+	 */
+	private String pcBankAccount;
+	/**
+	 * 手机号码
+	 */
+	private String pcContact;
+
+	//费项列表
+	private List<CompanyDto> companyDtoList;
+
+	public List<CompanyDto> getCompanyDtoList() {
+		return companyDtoList;
+	}
+
+	public void setCompanyDtoList(List<CompanyDto> companyDtoList) {
+		this.companyDtoList = companyDtoList;
+	}
+
+	public String getPcName() {
+		return pcName;
+	}
+
+	public void setPcName(String pcName) {
+		this.pcName = pcName;
+	}
+
+	public String getBusinessLicense() {
+		return businessLicense;
+	}
+
+	public void setBusinessLicense(String businessLicense) {
+		this.businessLicense = businessLicense;
+	}
+
+	public String getPcBankAccount() {
+		return pcBankAccount;
+	}
+
+	public void setPcBankAccount(String pcBankAccount) {
+		this.pcBankAccount = pcBankAccount;
+	}
+
+	public String getPcContact() {
+		return pcContact;
+	}
+
+	public void setPcContact(String pcContact) {
+		this.pcContact = pcContact;
+	}
+
+	public String getTradeNos() {
+		return tradeNos;
+	}
+
+	public void setTradeNos(String tradeNos) {
+		this.tradeNos = tradeNos;
+	}
+
+	public String getOwnerName() {
+		return ownerName;
+	}
+
+	public void setOwnerName(String ownerName) {
+		this.ownerName = ownerName;
+	}
+
+	public String getOwnerIdtype() {
+		return ownerIdtype;
+	}
+
+	public void setOwnerIdtype(String ownerIdtype) {
+		this.ownerIdtype = ownerIdtype;
+	}
+
+	public String getBankAccount() {
+		return bankAccount;
+	}
+
+	public void setBankAccount(String bankAccount) {
+		this.bankAccount = bankAccount;
+	}
+
+	public String getBank() {
+		return bank;
+	}
+
+	public void setBank(String bank) {
+		this.bank = bank;
+	}
+
+	public String getOwnerTel() {
+		return ownerTel;
+	}
+
+	public void setOwnerTel(String ownerTel) {
+		this.ownerTel = ownerTel;
+	}
+
+	public String getCodeTs() {
+		return codeTs;
+	}
+
+	public void setCodeTs(String codeTs) {
+		this.codeTs = codeTs;
+	}
+
+	public String getGoodsName() {
+		return goodsName;
+	}
+
+	public void setGoodsName(String goodsName) {
+		this.goodsName = goodsName;
+	}
+
+	public String getGoodsUnit() {
+		return goodsUnit;
+	}
+
+	public void setGoodsUnit(String goodsUnit) {
+		this.goodsUnit = goodsUnit;
+	}
+
+	public Double getDeclPrice() {
+		return declPrice;
+	}
+
+	public void setDeclPrice(Double declPrice) {
+		this.declPrice = declPrice;
+	}
+
+	public Double getBuyQty() {
+		return buyQty;
+	}
+
+	public void setBuyQty(Double buyQty) {
+		this.buyQty = buyQty;
+	}
+
+	public Double getGrossWt() {
+		return grossWt;
+	}
+
+	public void setGrossWt(Double grossWt) {
+		this.grossWt = grossWt;
+	}
+
+	public String getBorderName() {
+		return borderName;
+	}
+
+	public void setBorderName(String borderName) {
+		this.borderName = borderName;
+	}
+
+	public String getBorderidno() {
+		return borderidno;
+	}
+
+	public void setBorderidno(String borderidno) {
+		this.borderidno = borderidno;
+	}
+
+	public String getBankCode() {
+		return bankCode;
+	}
+
+	public void setBankCode(String bankCode) {
+		this.bankCode = bankCode;
+	}
+
+	public String getBankName() {
+		return bankName;
+	}
+
+	public void setBankName(String bankName) {
+		this.bankName = bankName;
+	}
+
+	public String getBorderTel() {
+		return borderTel;
+	}
+
+	public void setBorderTel(String borderTel) {
+		this.borderTel = borderTel;
+	}
+
+	public BigDecimal getResalePrice() {
+		return resalePrice;
+	}
+
+	public void setResalePrice(BigDecimal resalePrice) {
+		this.resalePrice = resalePrice;
+	}
+
+	public String getOrderNo() {
+		return orderNo;
+	}
+
+	public void setOrderNo(String orderNo) {
+		this.orderNo = orderNo;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getPlatSeqNo() {
+		return platSeqNo;
+	}
+
+	public void setPlatSeqNo(String platSeqNo) {
+		this.platSeqNo = platSeqNo;
+	}
+
+	public String getDeclareId() {
+		return declareId;
+	}
+
+	public void setDeclareId(String declareId) {
+		this.declareId = declareId;
+	}
+
+	public String getDeclareType() {
+		return declareType;
+	}
+
+	public void setDeclareType(String declareType) {
+		this.declareType = declareType;
+	}
+
+	public String getDeclareName() {
+		return declareName;
+	}
+
+	public void setDeclareName(String declareName) {
+		this.declareName = declareName;
+	}
+
+	public String getIdno() {
+		return idno;
+	}
+
+	public void setIdno(String idno) {
+		this.idno = idno;
+	}
+
+	public String getShopNo() {
+		return shopNo;
+	}
+
+	public void setShopNo(String shopNo) {
+		this.shopNo = shopNo;
+	}
+
+	public String getShopName() {
+		return shopName;
+	}
+
+	public void setShopName(String shopName) {
+		this.shopName = shopName;
+	}
+
+	public String getOrgPutrecNo() {
+		return orgPutrecNo;
+	}
+
+	public void setOrgPutrecNo(String orgPutrecNo) {
+		this.orgPutrecNo = orgPutrecNo;
+	}
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public String getOrgScc() {
+		return orgScc;
+	}
+
+	public void setOrgScc(String orgScc) {
+		this.orgScc = orgScc;
+	}
+
+	public String getVeNo() {
+		return veNo;
+	}
+
+	public void setVeNo(String veNo) {
+		this.veNo = veNo;
+	}
+
+	public String getBtrnbBizModecd() {
+		return btrnbBizModecd;
+	}
+
+	public void setBtrnbBizModecd(String btrnbBizModecd) {
+		this.btrnbBizModecd = btrnbBizModecd;
+	}
+
+	public String getgFlow() {
+		return gFlow;
+	}
+
+	public void setgFlow(String gFlow) {
+		this.gFlow = gFlow;
+	}
+
+	public String getiEFlag() {
+		return iEFlag;
+	}
+
+	public void setiEFlag(String iEFlag) {
+		this.iEFlag = iEFlag;
+	}
+
+	public String getFieldCode() {
+		return fieldCode;
+	}
+
+	public void setFieldCode(String fieldCode) {
+		this.fieldCode = fieldCode;
+	}
+
+	public String getFieldName() {
+		return fieldName;
+	}
+
+	public void setFieldName(String fieldName) {
+		this.fieldName = fieldName;
+	}
+
+	public String getCustomsCode() {
+		return customsCode;
+	}
+
+	public void setCustomsCode(String customsCode) {
+		this.customsCode = customsCode;
+	}
+
+	public String getCarPool() {
+		return carPool;
+	}
+
+	public void setCarPool(String carPool) {
+		this.carPool = carPool;
+	}
+
+	public Double getSumAmt() {
+		return sumAmt;
+	}
+
+	public void setSumAmt(Double sumAmt) {
+		this.sumAmt = sumAmt;
+	}
+
+	public Double getSumGrossWt() {
+		return sumGrossWt;
+	}
+
+	public void setSumGrossWt(Double sumGrossWt) {
+		this.sumGrossWt = sumGrossWt;
+	}
+
+	public Double getSumNetWt() {
+		return sumNetWt;
+	}
+
+	public void setSumNetWt(Double sumNetWt) {
+		this.sumNetWt = sumNetWt;
+	}
+
+	public String getTrafMode() {
+		return trafMode;
+	}
+
+	public void setTrafMode(String trafMode) {
+		this.trafMode = trafMode;
+	}
+
+	public String getCurrCode() {
+		return currCode;
+	}
+
+	public void setCurrCode(String currCode) {
+		this.currCode = currCode;
+	}
+
+	public Long getPackNo() {
+		return packNo;
+	}
+
+	public void setPackNo(Long packNo) {
+		this.packNo = packNo;
+	}
+
+	public String getDeclTime() {
+		return declTime;
+	}
+
+	public void setDeclTime(String declTime) {
+		this.declTime = declTime;
+	}
+
+	public String getBillNo() {
+		return billNo;
+	}
+
+	public void setBillNo(String billNo) {
+		this.billNo = billNo;
+	}
+
+	public String getVoyageNo() {
+		return voyageNo;
+	}
+
+	public void setVoyageNo(String voyageNo) {
+		this.voyageNo = voyageNo;
+	}
+
+	public String getGoodsNames() {
+		return goodsNames;
+	}
+
+	public void setGoodsNames(String goodsNames) {
+		this.goodsNames = goodsNames;
+	}
+
+	public BigDecimal getTotalPrice() {
+		return totalPrice;
+	}
+
+	public void setTotalPrice(BigDecimal totalPrice) {
+		this.totalPrice = totalPrice;
+	}
+}

+ 24 - 18
sp-service/level-one-server/src/main/java/com/pj/ht_trade_settlement/HtTradeSettlementController.java

@@ -5,18 +5,16 @@ import com.pj.api.dto.TradeSettlementDto;
 import com.pj.project4sp.SP;
 import com.pj.utils.sg.AjaxJson;
 import com.pj.utils.so.SoMap;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
 
 /**
  * Controller: ht_trade_settlement -- 航通交易结算表
- * @author yzs 
+ * @author yzs
  */
 @RestController
 @RequestMapping("/HtTradeSettlement/")
@@ -26,7 +24,7 @@ public class HtTradeSettlementController {
 	@Autowired
 	HtTradeSettlementService htTradeSettlementService;
 
-	/** 增 */  
+	/** 增 */
 	@RequestMapping("add")
 	@SaCheckPermission(HtTradeSettlement.PERMISSION_CODE_ADD)
 	public AjaxJson add(HtTradeSettlement h){
@@ -35,24 +33,24 @@ public class HtTradeSettlementController {
 		return AjaxJson.getSuccessData(h);
 	}
 
-	/** 删 */  
+	/** 删 */
 	@RequestMapping("delete")
 	@SaCheckPermission(HtTradeSettlement.PERMISSION_CODE_DEL)
 	public AjaxJson delete(Long id){
 		 htTradeSettlementService.delete(id);
 		return AjaxJson.getSuccess();
 	}
-	
-	/** 删 - 根据id列表 */  
+
+	/** 删 - 根据id列表 */
 	@RequestMapping("deleteByIds")
 	@SaCheckPermission(HtTradeSettlement.PERMISSION_CODE_DEL)
 	public AjaxJson deleteByIds(){
-		List<Long> ids = SoMap.getRequestSoMap().getListByComma("ids", long.class); 
+		List<Long> ids = SoMap.getRequestSoMap().getListByComma("ids", long.class);
 		int line = SP.publicMapper.deleteByIds(HtTradeSettlement.TABLE_NAME, ids);
 		return AjaxJson.getByLine(line);
 	}
-	
-	/** 改 */  
+
+	/** 改 */
 	@RequestMapping("update")
 	@SaCheckPermission(HtTradeSettlement.PERMISSION_CODE_EDIT)
 	public AjaxJson update(HtTradeSettlement h){
@@ -60,7 +58,7 @@ public class HtTradeSettlementController {
 		return AjaxJson.getSuccess();
 	}
 
-	/** 查 - 根据id */  
+	/** 查 - 根据id */
 	@RequestMapping("getById")
 		@SaCheckPermission(HtTradeSettlement.PERMISSION_CODE)
 	public AjaxJson getById(String id){
@@ -68,10 +66,10 @@ public class HtTradeSettlementController {
 		return AjaxJson.getSuccessData(h);
 	}
 
-	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */
 	@RequestMapping("getList")
 		@SaCheckPermission(HtTradeSettlement.PERMISSION_CODE)
-	public AjaxJson getList() { 
+	public AjaxJson getList() {
 		SoMap so = SoMap.getRequestSoMap();
 		List<HtTradeSettlement> list = htTradeSettlementService.getList(so.startPage());
 		return AjaxJson.getPageData(so.getDataCount(), list);
@@ -86,8 +84,16 @@ public class HtTradeSettlementController {
 		return b;
 	}
 
-	
-	
-	
+	/** 查 - 根据id */
+	@PostMapping("rpc/getHtTradeSettlementById")
+	public TradeSettlementDto getHtTradeSettlementById(@RequestParam("id") String id){
+		HtTradeSettlement htTradeSettlement = htTradeSettlementService.getById(id);
+		TradeSettlementDto settlementDto = new TradeSettlementDto();
+		BeanUtils.copyProperties(htTradeSettlement, settlementDto);
+		return settlementDto;
+	}
+
+
+
 
 }

+ 1 - 0
sp-service/level-one-server/src/main/java/com/pj/ht_trade_settlement/HtTradeSettlementService.java

@@ -154,6 +154,7 @@ public class HtTradeSettlementService extends ServiceImpl<HtTradeSettlementMappe
 
                     tbOrder.setBuyQty(collect.get(0).getBuyQty());
                     tbOrder.setGrossWt(collect.get(0).getGrossWt());
+                    tbOrder.setCodeTs(collect.get(0).getCodeTs());
                 }
             }
             //根据身份证查询边民

+ 4 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_order/TbOrder.java

@@ -500,7 +500,10 @@ public class TbOrder extends Model<TbOrder> implements Serializable {
 	 * 商品单价
 	 */
 	private Double declPrice;
-
+	/**
+	 * 商品编码
+	 */
+	private String codeTs;
 
 
 

+ 3 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_order/TbOrderService.java

@@ -390,7 +390,7 @@ public class TbOrderService extends ServiceImpl<TbOrderMapper, TbOrder> implemen
         return tbOrderMapper.getConfirmStatus(orderId);
     }
 
-    public PaymentDto getPaymentData(TbOrder tbOrder) {
+    private PaymentDto getPaymentData(TbOrder tbOrder) {
         HtTradeSettlement htTradeSettlement = htTradeSettlementService.getById(tbOrder.getSaleMainId());
         PaymentDto paymentDto = new PaymentDto();
         BeanUtils.copyProperties(htTradeSettlement, paymentDto);
@@ -420,6 +420,8 @@ public class TbOrderService extends ServiceImpl<TbOrderMapper, TbOrder> implemen
         paymentDto.setBank(tbShop.getBank());
         paymentDto.setOwnerTel(tbShop.getOwnerTel());
 
+
+
         return paymentDto;
     }
 

+ 52 - 50
sp-service/level-two-server/src/main/java/com/pj/tb_company/TbCompany.java

@@ -12,7 +12,7 @@ import lombok.experimental.Accessors;
 
 /**
  * Model: tb_company -- 企业管理
- * @author yzs 
+ * @author yzs
  */
 @Data
 @Accessors(chain = true)
@@ -22,15 +22,15 @@ public class TbCompany extends Model<TbCompany> implements Serializable {
 
 	// ---------- 模块常量 ----------
 	/**
-	 * 序列化版本id 
+	 * 序列化版本id
 	 */
-	private static final long serialVersionUID = 1L;	
+	private static final long serialVersionUID = 1L;
 	/**
-	 * 此模块对应的表名 
+	 * 此模块对应的表名
 	 */
-	public static final String TABLE_NAME = "tb_company";	
+	public static final String TABLE_NAME = "tb_company";
 	/**
-	 * 此模块对应的权限码 
+	 * 此模块对应的权限码
 	 */
 	public static final String PERMISSION_CODE = "tb-company-list";
 	public static final String PERMISSION_CODE_ADD = "tb-company-add";
@@ -42,127 +42,129 @@ public class TbCompany extends Model<TbCompany> implements Serializable {
 
 	// ---------- 表中字段 ----------
 	/**
-	 *  
+	 *
 	 */
 	@TableId(type = IdType.AUTO)
-	private Long id;	
+	private Long id;
 
 	/**
-	 * 名称 
+	 * 名称
 	 */
-	private String name;	
+	private String name;
 
 	/**
-	 * 法人 
+	 * 法人
 	 */
-	private String legalPerson;	
+	private String legalPerson;
 
 	/**
-	 * 身份证号 
+	 * 身份证号
 	 */
-	private String idCard;	
+	private String idCard;
 
 	/**
-	 * 手机号码 
+	 * 手机号码
 	 */
-	private String contact;	
+	private String contact;
 
 	/**
-	 * 营业执照 
+	 * 营业执照
 	 */
-	private String businessLicense;	
+	private String businessLicense;
 
 	/**
-	 * 银行编号(CMB= 招商银行) 
+	 * 银行编号(CMB= 招商银行)
 	 */
-	private String bankNo;	
+	private String bankNo;
 
 	/**
-	 * 银行名称 
+	 * 银行名称
 	 */
-	private String bankName;	
+	private String bankName;
 
 	/**
-	 * 银行账号 
+	 * 银行账号
 	 */
-	private String bankAccount;	
+	private String bankAccount;
 
 	/**
-	 * 税号 
+	 * 税号
 	 */
-	private String dutyParagraph;	
+	private String dutyParagraph;
 
 	/**
-	 * 地址全路径如1,22,333 
+	 * 地址全路径如1,22,333
 	 */
-	private String addressIds;	
+	private String addressIds;
 
 	/**
-	 * 地址 
+	 * 地址
 	 */
-	private String address;	
+	private String address;
 
 	/**
-	 * 详细地址 
+	 * 详细地址
 	 */
-	private String detail;	
+	private String detail;
 
 	/**
-	 * 创建时间 
+	 * 创建时间
 	 */
 	private Date createTime;
 
 	/**
-	 * 创建人编号 
+	 * 创建人编号
 	 */
-	private String createBy;	
+	private String createBy;
 
 	/**
-	 * 创建人名称 
+	 * 创建人名称
 	 */
-	private String createName;	
+	private String createName;
 
 	/**
-	 * 更新时间 
+	 * 更新时间
 	 */
 	private Date updateTime;
 
 	/**
-	 * 更新人编号 
+	 * 更新人编号
 	 */
-	private String updateBy;	
+	private String updateBy;
 
 	/**
-	 * 更新人名称 
+	 * 更新人名称
 	 */
-	private String updateName;	
+	private String updateName;
 
 	/**
-	 * 删除状态(0=禁用,1=启用) 
+	 * 删除状态(0=禁用,1=启用)
 	 */
-	private Long deleteStatus;	
+	private Long deleteStatus;
 
 	/**
-	 * 是否锁住 
+	 * 是否锁住
 	 */
 	private Integer isLock=0;
 
 	/**
-	 * 互市区ID 
+	 * 互市区ID
 	 */
 
 	private String tradeAreaId;
 
 	/**
-	 * 互市区名称 
+	 * 互市区名称
 	 */
-	private String tradeAreaName;	
-
+	private String tradeAreaName;
 
 
+	/**
+	 * 社会统一ixny代码
+	 */
+	private String usci;
 
 
-	
 
 
 }

+ 10 - 2
sp-service/level-two-server/src/main/java/com/pj/tb_orders/TbOrdersApiController.java

@@ -7,6 +7,7 @@ import com.pj.tb_goods_demand.vo.GoodsDemandVo;
 import com.pj.utils.sg.AjaxJson;
 import com.pj.utils.so.SoMap;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
@@ -58,11 +59,11 @@ public class TbOrdersApiController {
 	}
 
 	/** 新增 边民缴税以及各服务费*/
-	@RequestMapping("payTax")
+	/*@RequestMapping("payTax")
 	public AjaxJson payTax(){
 		SoMap so = SoMap.getRequestSoMap();
 		return AjaxJson.toAjax(tbOrdersService.payTax(so));
-	}
+	}*/
 
 	/** 查集合 - 查二级市场订单(未被购买的订单) */
 	@RequestMapping("getLevelTwoList")
@@ -153,4 +154,11 @@ public class TbOrdersApiController {
 		return resalePrice;
 	}
 
+	/** 采购商支付成功 ——> 边民缴税以及各服务费 */
+	@PostMapping("rpc/payTax")
+	public boolean payTax(@RequestParam("orderNo")String orderNo) {
+		boolean result = tbOrdersService.payTax(orderNo);
+		return result;
+	}
+
 }

+ 111 - 27
sp-service/level-two-server/src/main/java/com/pj/tb_orders/TbOrdersService.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.pj.api.client.admin.AdminInterface;
 import com.pj.api.client.async_server.AsyncServerInterface;
 import com.pj.api.client.level_one_server.LevelOneServerInterface;
+import com.pj.api.client.payment_server.PaymentServerInterface;
 import com.pj.api.dto.*;
 import com.pj.common.core.text.Convert;
 import com.pj.common.core.utils.StringUtils;
@@ -17,6 +18,8 @@ import com.pj.current.satoken.StpAPPUserUtil;
 import com.pj.enummj.DataType;
 import com.pj.enummj.DeleteStatus;
 import com.pj.enummj.OrderStatus;
+import com.pj.tb_company.TbCompany;
+import com.pj.tb_company.TbCompanyService;
 import com.pj.tb_demand_quotation.TbDemandQuotation;
 import com.pj.tb_demand_quotation.TbDemandQuotationService;
 import com.pj.tb_fee_item.TbFeeItem;
@@ -38,6 +41,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
@@ -70,12 +75,16 @@ public class TbOrdersService extends ServiceImpl<TbOrdersMapper, TbOrders> imple
     TbOrdersCartMapper tbOrdersCartMapper;
 
     @Autowired
+    private TbCompanyService companyService;
+    @Autowired
     private TbFeeItemService tbFeeItemService;
     @Autowired
     private TbItemRulesService tbItemRulesService;
 
     @Autowired
     TbFeeItemRecordService tbFeeItemRecordService;
+    @Autowired
+    private PaymentServerInterface paymentServerInterface;
 
     /**
      * 远程调用
@@ -105,26 +114,54 @@ public class TbOrdersService extends ServiceImpl<TbOrdersMapper, TbOrders> imple
 
     }
 
+    private PaymentTwoDto getPaymentData(TbOrders t,OrderDto orderOne) {
+        TradeSettlementDto htTradeSettlement = levelOneServerInterface.getHtTradeSettlementById(orderOne.getSaleMainId());
+        PaymentTwoDto paymentTwoDto = new PaymentTwoDto();
+        BeanUtils.copyProperties(htTradeSettlement, paymentTwoDto);
+
+        paymentTwoDto.setOrderNo(t.getOrderNo());
+        paymentTwoDto.setBuyQty(orderOne.getBuyQty());
+        paymentTwoDto.setGrossWt(orderOne.getGrossWt());
+        paymentTwoDto.setGoodsName(orderOne.getGoodsNames());
+        paymentTwoDto.setGoodsUnit(orderOne.getGoodsUnit());
+        paymentTwoDto.setDeclPrice(orderOne.getDeclPrice());
+        paymentTwoDto.setCodeTs(orderOne.getCodeTs());
+        //转售金额
+        paymentTwoDto.setResalePrice(BigDecimal.valueOf(t.getResalePrice()));
+
+        PeopleDto tbPeople = levelOneServerInterface.getRpcById(orderOne.getBuyUserId());
+        paymentTwoDto.setBankCode(tbPeople.getBankCode());
+        paymentTwoDto.setBankName(tbPeople.getBankName());
+        paymentTwoDto.setBorderName(tbPeople.getName());
+        paymentTwoDto.setBorderidno(tbPeople.getIdCard());
+        paymentTwoDto.setBorderTel(tbPeople.getPhone());
+
+        TbPurchaser purchaser = tbPurchaserMapper.selectById(t.getPurchaserId());
+        paymentTwoDto.setPcName(purchaser.getName());
+        paymentTwoDto.setBusinessLicense(purchaser.getBusinessLicense());
+        paymentTwoDto.setPcBankAccount(purchaser.getBankAccount());
+        paymentTwoDto.setPcContact(purchaser.getContact());
+
+        return paymentTwoDto;
+    }
+
     /**
      * 改 收购商购买
      */
     boolean purchaserBuy(SoMap so) {
         // 获取app登录用户
         APPLoginUserInfo appLoginInfo = StpAPPUserUtil.getAPPLoginInfo();
-
         // 获取收购商ID与名称
         TbPurchaser purchaser = tbPurchaserMapper.selectById(appLoginInfo.getFk());
         if (null == purchaser) throw new RuntimeException("当前收购商账号异常,请重新登录或联系管理员!");
 
         String idStr = so.getString("ids");
         if (StringUtils.isEmpty(idStr)) throw new RuntimeException("当前购买操作异常,请重新登录或联系管理员!");
-
         Long[] idArr = Convert.toLongArray(idStr);
+
         TbOrders orders = new TbOrders();
         orders.setPurchaserId(purchaser.getId());
         orders.setPurchaserName(purchaser.getName());
-
-        //todo 接收国内采购商的货款支付申请,划扣至边民账户并给出回执 并且同步至航通
         orders.setIsPay(1);//支付成功
         orders.setPayTime(new Date());
         OrdersDto ordersDto = new OrdersDto();
@@ -137,17 +174,22 @@ public class TbOrdersService extends ServiceImpl<TbOrdersMapper, TbOrders> imple
             boolean b = updateById(orders);
             if (!b) throw new RuntimeException("购买异常,请重新登录或联系管理员!");
 
-
-            TbOrders t = getById(id);
+            TbOrders orderTwo = getById(id);
             //修改对应的一级市场订单状态:BeingOrder值为已被下单
-            levelOneServerInterface.updateBeingOrder(t.getLevelOneOrderId());
+            levelOneServerInterface.updateBeingOrder(orderTwo.getLevelOneOrderId());
+
+            OrderDto orderOne = levelOneServerInterface.getOrderDtoById(orderTwo.getLevelOneOrderId());
+
+            //todo 接收国内采购商的货款支付申请,划扣至边民账户并给出回执 并且同步至航通
+            PaymentTwoDto paymentTwoDto = this.getPaymentData(orderTwo,orderOne);
+            paymentServerInterface.sendMKT006_NoCommission(paymentTwoDto);
 
             //todo:给每个购买他商品的边民发一条支付成功消息,通知边民发起缴税申请以及缴费申请
-            MessageDto dto = new MessageDto();
+           /* MessageDto dto = new MessageDto();
             dto.setUrl("/pages/market/two/leader/order");
             dto.setUserId(t.getLeaderId());
             dto.setContents("你转售的《" + t.getGoodsName() + "》收购商已付款。请及时发起缴税申请以及缴费申请。");
-            adminInterface.messageSave(dto);
+            adminInterface.messageSave(dto);*/
         }
 
         // 清空购物车
@@ -159,22 +201,64 @@ public class TbOrdersService extends ServiceImpl<TbOrdersMapper, TbOrders> imple
     }
 
     /**
-     * 新增 边民缴税以及各服务费
+     * 采购商支付成功 ——> 边民缴税以及各服务费
+     * @param orderNo 二级市场边民订单-订单编号
      */
-    boolean payTax(SoMap so) {
-        // 获取app登录用户
-        APPLoginUserInfo appLoginInfo = StpAPPUserUtil.getAPPLoginInfo();
-        TbOrders orders = getById(so.getLong("id"));
+    boolean payTax(String orderNo) {
+        LambdaQueryWrapper<TbOrders> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(TbOrders::getOrderNo, orderNo);
+        List<TbOrders> list = this.list(queryWrapper);
+        if (list.size() <= 0) return false;
+
+        TbOrders orderTwo = list.get(0);
+        //if (orders.getPayTax() == 1) throw new RuntimeException("你已缴清费用");
+
+        OrderDto orderOne = levelOneServerInterface.getOrderDtoById(orderTwo.getLevelOneOrderId());
+        if (null == orderOne) return false;
+
+        //todo 订单状态更新,系统将服务费自动分账,将分账信息自动发送至银行进行划扣
+        List<TbItemRules> ruleList = new ArrayList<>();
+        List<TbFeeItem> feeItemList = tbFeeItemService.getFeeItems();
+        feeItemList.forEach(feeItem -> {
+            ruleList.addAll(tbItemRulesService.getList(new SoMap().set("itemId", feeItem.getId())));
+        });
+        //目前逻辑为一个边民订单只有一个商品
+        GoodsDto goods = levelOneServerInterface.getByGoodsId(orderOne.getGoodsId());
+        //找出所有含有该商品的费项规则
+        List<TbItemRules> newRuleList = ruleList.stream().filter(rule -> rule.getGoodsCodes().contains(goods.getCode())).collect(Collectors.toList());
+        List<CompanyDto> companyDtoList = new ArrayList<>();
+        for (TbItemRules ruleItem : newRuleList) {
+            BigDecimal chargesPrice = BigDecimal.ZERO;
+            BigDecimal TotalPrice = new BigDecimal(orderOne.getTotalPrice());
+            BigDecimal Percent = new BigDecimal(ruleItem.getPercent());
+            //类型(1=按交易额收取,2=按次收取,3=按吨)
+            if ("1".equals(ruleItem.getFeeType())) {
+                chargesPrice = TotalPrice.multiply(Percent).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);//保留两位小数,四舍五入
+            } else if ("2".equals(ruleItem.getFeeType())) {
+                chargesPrice = ruleItem.getFeeMoney();
+            } else if ("3".equals(ruleItem.getFeeType())) {
+                chargesPrice = TotalPrice.multiply(Percent).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);//保留两位小数,四舍五入
+            }
+            CompanyDto companyDto = new CompanyDto();
+            List<TbFeeItem> feeItems = feeItemList.stream().filter(feeItem -> feeItem.getId().equals(ruleItem.getItemId())).collect(Collectors.toList());
+            if (feeItems.size() > 0) {
+                TbCompany company = companyService.getById(feeItems.get(0).getCompanyId());
+                BeanUtils.copyProperties(company,companyDto);
+                companyDto.setChargesPrice(chargesPrice);
+            }
+            companyDtoList.add(companyDto);
+        }
+
+        PaymentTwoDto paymentTwoDto = this.getPaymentData(orderTwo,orderOne);
+        paymentTwoDto.setCompanyDtoList(companyDtoList);
+        paymentServerInterface.sendMKT006(paymentTwoDto);
 
-        if (null == orders) throw new RuntimeException("订单信息不存在");
-        if (!orders.getLeaderId().equals(appLoginInfo.getFk())) throw new RuntimeException("非法操作非本人数据");
-        if (orders.getPayTax() == 1) throw new RuntimeException("你已缴清费用");
 
-        //todo 边民缴税以及各服务费,边民发起缴税申请以及缴费申请 接收支付结果,划扣,并给出回执
-        orders.setPayTax(1);
-        orders.setPayTaxTime(new Date());
-        orders.setOrderFinish(1);//缴费成功订单完成
-        if (updateById(orders)) {
+        //todo 订单状态更新
+        orderTwo.setPayTax(1);
+        orderTwo.setPayTaxTime(new Date());
+        orderTwo.setOrderFinish(1);//缴费成功订单完成
+        if (updateById(orderTwo)) {
             //保存缴费记录
             List<TbFeeItem> feeItems = tbFeeItemService.getFeeItems();
             feeItems.stream().forEach(e -> {
@@ -182,8 +266,8 @@ public class TbOrdersService extends ServiceImpl<TbOrdersMapper, TbOrders> imple
                 record.setItemId(e.getId());
                 record.setCompanyName(e.getCompanyName());
                 record.setItemName(e.getName());
-                record.setOrderNo(orders.getOrderNo());
-                record.setLevelTwoOrderId(orders.getId());
+                record.setOrderNo(orderTwo.getOrderNo());
+                record.setLevelTwoOrderId(orderTwo.getId());
                 record.setPayTime(new Date());
                 record.setCreateTime(new Date());
                 record.setPayStatus("1");
@@ -193,8 +277,8 @@ public class TbOrdersService extends ServiceImpl<TbOrdersMapper, TbOrders> imple
             //todo:给收购商发送边民缴费成功消息
             MessageDto dto = new MessageDto();
             dto.setUrl("/pages/market/two/purchaser/order/list");
-            dto.setUserId(orders.getPurchaserId());
-            dto.setContents("你购买的《" + orders.getGoodsName() + "》边民已缴清税以及各服务费。");
+            dto.setUserId(orderTwo.getPurchaserId());
+            dto.setContents("你购买的《" + orderTwo.getGoodsName() + "》边民已缴清税以及各服务费。");
             adminInterface.messageSave(dto);
             return true;
         }
@@ -364,7 +448,7 @@ public class TbOrdersService extends ServiceImpl<TbOrdersMapper, TbOrders> imple
                 sum.updateAndGet(v -> new Float((float) (v +  (orderDto.getTotalPrice() * ruleItem.getPercent() /100)  )));
             }
         });
-        Double sumPrice = sum.get() + orderDto.getTotalPrice() + 50;//50为利润,暂时写死
+        Double sumPrice = sum.get() + orderDto.getTotalPrice() + 50;//50为边民利润,暂时写死
         return sumPrice;
     }
 

+ 3 - 0
sp-service/payment-server/src/main/java/com/pj/bank_byte/BankByte.java

@@ -19,6 +19,9 @@ import lombok.experimental.Accessors;
 @TableName(BankByte.TABLE_NAME)
 @EqualsAndHashCode(callSuper = false)
 public class BankByte extends Model<BankByte> implements Serializable {
+	public BankByte() {
+
+	}
 	public BankByte(String messageId, String body, String queueName, Integer finishStatus, Date createTime) {
 		this.messageId = messageId;
 		this.body = body;

+ 5 - 2
sp-service/payment-server/src/main/java/com/pj/bank_info/BankInfo.java

@@ -78,7 +78,7 @@ public class BankInfo extends Model<BankInfo> implements Serializable {
 	/**---------------------------- 以下字段为:银行回执-payload-responseDTO字段 ---------------------**/
 
 	/**
-	 * 消息回执代码
+	 * 消息回执代码:200/202/401/402/403/404/405
 	 */
 	private String code;
 
@@ -97,7 +97,10 @@ public class BankInfo extends Model<BankInfo> implements Serializable {
 	 */
 	private String note;
 
-
+	/**
+	 * 订单回执类型	001:扣款订单    002:退款订单    003:打款订单(根据字典表ORDER_TYPE)
+	 */
+	private String type;
 
 
 

+ 91 - 0
sp-service/payment-server/src/main/java/com/pj/bank_info_charges/BankInfoCharges.java

@@ -0,0 +1,91 @@
+package com.pj.bank_info_charges;
+
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.EqualsAndHashCode;
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+
+/**
+ * Model: bank_info_charges -- 银行回执信息-手续费
+ * @author lbl
+ */
+@Data
+@Accessors(chain = true)
+@TableName(BankInfoCharges.TABLE_NAME)
+@EqualsAndHashCode(callSuper = false)
+public class BankInfoCharges extends Model<BankInfoCharges> implements Serializable {
+
+	// ---------- 模块常量 ----------
+	/**
+	 * 序列化版本id
+	 */
+	private static final long serialVersionUID = 1L;
+	/**
+	 * 此模块对应的表名
+	 */
+	public static final String TABLE_NAME = "bank_info_charges";
+	/**
+	 * 此模块对应的权限码
+	 */
+	public static final String PERMISSION_CODE = "bank-info-charges";
+	public static final String PERMISSION_CODE_ADD = "bank-info-charges-add";
+	public static final String PERMISSION_CODE_EDIT = "bank-info-charges-edit";
+	public static final String PERMISSION_CODE_DEL = "bank-info-charges-del";
+
+
+
+
+	// ---------- 表中字段 ----------
+	/**
+	 * 主键
+	 */
+	@TableId(type = IdType.AUTO)
+	private Integer id;
+
+	/**
+	 * 银行回执信息表Id
+	 */
+	private Integer bankInfoId;
+
+	/**
+	 * 订单号
+	 */
+	private String sn;
+
+	/**
+	 * 手续费类型(企业->边民时,手续费类型为空)
+	 */
+	private String type;
+
+	/**
+	 * 消息回执代码
+	 */
+	private String code;
+
+	/**
+	 * 流水单号(如扣款失败,流水单号为空)
+	 */
+	private String result;
+
+	/**
+	 * 回执内容(如扣款失败,回执记录为失败原因)
+	 */
+	private String note;
+
+	/**
+	 * 创建时间
+	 */
+	private String createTime;
+
+
+
+
+
+
+
+
+}

+ 85 - 0
sp-service/payment-server/src/main/java/com/pj/bank_info_charges/BankInfoChargesController.java

@@ -0,0 +1,85 @@
+package com.pj.bank_info_charges;
+
+import java.util.List;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import com.pj.utils.sg.*;
+import com.pj.project4sp.SP;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+
+
+/**
+ * Controller: bank_info_charges -- 银行回执信息-手续费
+ * @author lbl
+ */
+@RestController
+@RequestMapping("/BankInfoCharges/")
+public class BankInfoChargesController {
+
+	/** 底层 Service 对象 */
+	@Autowired
+	BankInfoChargesService bankInfoChargesService;
+
+	/** 增 */
+	@RequestMapping("add")
+	@SaCheckPermission(BankInfoCharges.PERMISSION_CODE_ADD)
+	public AjaxJson add(BankInfoCharges b){
+		bankInfoChargesService.add(b);
+		b = bankInfoChargesService.getById(SP.publicMapper.getPrimarykey());
+		return AjaxJson.getSuccessData(b);
+	}
+
+	/** 删 */
+	@RequestMapping("delete")
+	@SaCheckPermission(BankInfoCharges.PERMISSION_CODE_DEL)
+	public AjaxJson delete(Long id){
+		 bankInfoChargesService.delete(id);
+		return AjaxJson.getSuccess();
+	}
+
+	/** 删 - 根据id列表 */
+	@RequestMapping("deleteByIds")
+	@SaCheckPermission(BankInfoCharges.PERMISSION_CODE_DEL)
+	public AjaxJson deleteByIds(){
+		List<Long> ids = SoMap.getRequestSoMap().getListByComma("ids", long.class);
+		int line = SP.publicMapper.deleteByIds(BankInfoCharges.TABLE_NAME, ids);
+		return AjaxJson.getByLine(line);
+	}
+
+	/** 改 */
+	@RequestMapping("update")
+	@SaCheckPermission(BankInfoCharges.PERMISSION_CODE_EDIT)
+	public AjaxJson update(BankInfoCharges b){
+		bankInfoChargesService.update(b);
+		return AjaxJson.getSuccess();
+	}
+
+	/** 查 - 根据id */
+	@RequestMapping("getById")
+		@SaCheckPermission(BankInfoCharges.PERMISSION_CODE)
+	public AjaxJson getById(Integer id){
+		BankInfoCharges b = bankInfoChargesService.getById(id);
+		return AjaxJson.getSuccessData(b);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */
+	@RequestMapping("getList")
+		@SaCheckPermission(BankInfoCharges.PERMISSION_CODE)
+	public AjaxJson getList() {
+		SoMap so = SoMap.getRequestSoMap();
+		List<BankInfoCharges> list = bankInfoChargesService.getList(so.startPage());
+		return AjaxJson.getPageData(so.getDataCount(), list);
+	}
+
+
+
+
+
+
+
+
+
+}

+ 30 - 0
sp-service/payment-server/src/main/java/com/pj/bank_info_charges/BankInfoChargesMapper.java

@@ -0,0 +1,30 @@
+package com.pj.bank_info_charges;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Mapper;
+
+import com.pj.utils.so.*;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Mapper: bank_info_charges -- 银行回执信息-手续费
+ * @author lbl 
+ */
+
+@Mapper
+@Repository
+public interface BankInfoChargesMapper extends BaseMapper <BankInfoCharges> {
+
+
+
+	/**
+	 * 查集合 - 根据条件(参数为空时代表忽略指定条件)
+	 * @param so 参数集合 
+	 * @return 数据列表 
+	 */
+	List<BankInfoCharges> getList(SoMap so);
+
+
+}

+ 57 - 0
sp-service/payment-server/src/main/java/com/pj/bank_info_charges/BankInfoChargesMapper.xml

@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.pj.bank_info_charges.BankInfoChargesMapper">
+
+
+
+
+	<!-- ================================== 查询相关 ================================== -->
+	<!-- select id, bank_info_id, sn, type, code, result, note, create_time from bank_info_charges  -->
+	
+	<!-- 通用映射:自动模式 -->
+	<resultMap id="model" autoMapping="true" type="com.pj.bank_info_charges.BankInfoCharges"></resultMap>
+	
+	<!-- 公共查询sql片段 -->
+	<sql id="select_sql">
+		select * 
+		from bank_info_charges 
+	</sql>
+
+	
+	<!-- 查集合 - 根据条件(参数为空时代表忽略指定条件) [G] -->
+	<select id="getList" resultMap="model">
+		<include refid="select_sql"></include>
+		<where>
+			<if test=' this.has("id") '> and id = #{id} </if>
+			<if test=' this.has("bankInfoId") '> and bank_info_id = #{bankInfoId} </if>
+			<if test=' this.has("sn") '> and sn = #{sn} </if>
+			<if test=' this.has("type") '> and type = #{type} </if>
+			<if test=' this.has("code") '> and code = #{code} </if>
+			<if test=' this.has("result") '> and result = #{result} </if>
+			<if test=' this.has("note") '> and note = #{note} </if>
+			<if test=' this.has("createTime") '> and create_time = #{createTime} </if>
+		</where>
+		order by
+		<choose>
+			<when test='sortType == 1'> id desc </when>
+			<when test='sortType == 2'> bank_info_id desc </when>
+			<when test='sortType == 3'> sn desc </when>
+			<when test='sortType == 4'> type desc </when>
+			<when test='sortType == 5'> code desc </when>
+			<when test='sortType == 6'> result desc </when>
+			<when test='sortType == 7'> note desc </when>
+			<when test='sortType == 8'> create_time desc </when>
+			<otherwise> id desc </otherwise>
+		</choose>
+	</select>
+	
+	
+	
+	
+	
+	
+	
+	
+	
+
+</mapper>

+ 51 - 0
sp-service/payment-server/src/main/java/com/pj/bank_info_charges/BankInfoChargesService.java

@@ -0,0 +1,51 @@
+package com.pj.bank_info_charges;
+
+import java.util.List;
+import com.pj.utils.so.SoMap;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+import com.pj.utils.sg.*;
+
+/**
+ * Service: bank_info_charges -- 银行回执信息-手续费
+ * @author lbl
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class BankInfoChargesService extends ServiceImpl<BankInfoChargesMapper, BankInfoCharges> implements IService<BankInfoCharges>{
+
+	/** 底层 Mapper 对象 */
+	@Autowired
+	BankInfoChargesMapper bankInfoChargesMapper;
+
+	/** 增 */
+	void add(BankInfoCharges b){
+		save(b);
+	}
+
+	/** 删 */
+	void delete(Long id){
+		removeById(id);
+	}
+
+	/** 改 */
+	void update(BankInfoCharges b){
+		updateById(b);
+
+	}
+
+	/** 查 */
+	BankInfoCharges getById(Integer id){
+		return super.getById(id);
+	}
+
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */
+	List<BankInfoCharges> getList(SoMap so) {
+		return bankInfoChargesMapper.getList(so);
+	}
+
+
+}

+ 149 - 149
sp-service/payment-server/src/main/java/com/pj/task/BankByteTask.java

@@ -2,10 +2,13 @@ package com.pj.task;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.pj.api.client.level_one_server.LevelOneServerInterface;
+import com.pj.api.client.level_two_server.LevelTwoServerInterface;
 import com.pj.bank_byte.BankByte;
 import com.pj.bank_byte.BankByteMapper;
 import com.pj.bank_info.BankInfo;
 import com.pj.bank_info.BankInfoMapper;
+import com.pj.bank_info_charges.BankInfoCharges;
+import com.pj.bank_info_charges.BankInfoChargesService;
 import com.pj.common.core.utils.StringUtils;
 import com.pj.enummj.FinishStatus;
 import com.pj.rabbitmq.RabbitMQ;
@@ -28,6 +31,7 @@ import javax.xml.xpath.XPathFactory;
 import java.io.IOException;
 import java.io.StringReader;
 import java.text.SimpleDateFormat;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -46,9 +50,16 @@ public class BankByteTask {
      */
     @Autowired
     private BankInfoMapper bankInfoMapper;
+    /**
+     * 银行回执信息-手续费
+     */
+    @Autowired
+    private BankInfoChargesService bankInfoChargesService;
 
     @Autowired
     private LevelOneServerInterface levelOneServerInterface;
+    @Autowired
+    private LevelTwoServerInterface levelTwoServerInterface;
 
     /**
      * 启动定时任务
@@ -71,36 +82,106 @@ public class BankByteTask {
             String xmlStr = AESUtil.decryptCBC(body, RabbitMQ.ACC_KEY);
 
             BankInfo bankInfo = new BankInfo();
+            List<BankInfoCharges> chargesList = new ArrayList<>();
+            boolean isMKT008 = StringUtils.containsIgnoreCase(xmlStr,"MKT008");
+            boolean hasCommission = StringUtils.containsIgnoreCase(xmlStr, "<results xsi:type=\"orderResultDTO\">");
 
             //银行回执——headers——获取头部字段
-            String headersStr = xmlStr.substring(xmlStr.indexOf("<headers>")+9, xmlStr.indexOf("</headers>"));
-            String[] headersSplit = headersStr.split("</item>");
-            for (String s : headersSplit) {
-                if(StringUtils.containsIgnoreCase(s,"sn")) {
-                    String substring = s.substring(s.indexOf("<value>")+7, s.indexOf("</value>"));
-                    bankInfo.setSn(substring);
-                }
-                if(StringUtils.containsIgnoreCase(s,"date")) {
-                    String substring = s.substring(s.indexOf("<value>")+7, s.indexOf("</value>"));
-                    bankInfo.setDate(substring);
-                }
-                if(StringUtils.containsIgnoreCase(s,"organization")) {
-                    String substring = s.substring(s.indexOf("<value>")+7, s.indexOf("</value>"));
-                    bankInfo.setOrganization(substring);
-                }
-                if(StringUtils.containsIgnoreCase(s,"bankCode")) {
-                    String substring = s.substring(s.indexOf("<value>")+7, s.indexOf("</value>"));
-                    bankInfo.setBankCode(substring);
+            if(isMKT008){//二级市场-订单回执报文-头部处理
+                String headersStr = xmlStr.substring(xmlStr.indexOf("<headers>")-9, xmlStr.indexOf("</headers>"+10));
+                try {
+                    // 创建DOM解析器
+                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+                    DocumentBuilder builder = factory.newDocumentBuilder();
+
+                    // 解析XML字符串,获取Document对象
+                    Document document = builder.parse(new InputSource(new StringReader(headersStr)));
+
+                    // 创建XPath对象
+                    XPath xpath = XPathFactory.newInstance().newXPath();
+
+                    bankInfo.setSn(xpath.evaluate("/headers/sn", document));
+                    bankInfo.setDate(xpath.evaluate("/headers/date", document));
+                    bankInfo.setOrganization(xpath.evaluate("/headers/organization", document));
+                    bankInfo.setBankCode(xpath.evaluate("/headers/bankCode", document));
+                    bankInfo.setOperation(xpath.evaluate("/headers/operation", document));
+
+                } catch (ParserConfigurationException e) {
+                    e.printStackTrace();
+                } catch (SAXException e) {
+                    e.printStackTrace();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                } catch (XPathExpressionException e) {
+                    e.printStackTrace();
                 }
-                if(StringUtils.containsIgnoreCase(s,"operation")) {
-                    String substring = s.substring(s.indexOf("<value>")+7, s.indexOf("</value>"));
-                    bankInfo.setOperation(substring);
+            }
+            else {//一级市场-订单回执报文-头部处理
+                String headersStr = xmlStr.substring(xmlStr.indexOf("<headers>")+9, xmlStr.indexOf("</headers>"));
+                String[] headersSplit = headersStr.split("</item>");
+                for (String s : headersSplit) {
+                    if(StringUtils.containsIgnoreCase(s,"sn")) {
+                        String substring = s.substring(s.indexOf("<value>")+7, s.indexOf("</value>"));
+                        bankInfo.setSn(substring);
+                    }
+                    if(StringUtils.containsIgnoreCase(s,"date")) {
+                        String substring = s.substring(s.indexOf("<value>")+7, s.indexOf("</value>"));
+                        bankInfo.setDate(substring);
+                    }
+                    if(StringUtils.containsIgnoreCase(s,"organization")) {
+                        String substring = s.substring(s.indexOf("<value>")+7, s.indexOf("</value>"));
+                        bankInfo.setOrganization(substring);
+                    }
+                    if(StringUtils.containsIgnoreCase(s,"bankCode")) {
+                        String substring = s.substring(s.indexOf("<value>")+7, s.indexOf("</value>"));
+                        bankInfo.setBankCode(substring);
+                    }
+                    if(StringUtils.containsIgnoreCase(s,"operation")) {
+                        String substring = s.substring(s.indexOf("<value>")+7, s.indexOf("</value>"));
+                        bankInfo.setOperation(substring);
+                    }
                 }
             }
 
-
             //银行回执——payload——获取responseDTO
             String payloadStr = xmlStr.substring(xmlStr.indexOf("</headers>")+10, xmlStr.indexOf("</message>"));
+            if(isMKT008 && hasCommission) {//是【MKT008】报文(二级市场订单报文回执),并且是【有手续费模式】
+                payloadStr = xmlStr.substring(xmlStr.indexOf("</headers>")+10, xmlStr.indexOf("<results xsi:type=\"orderResultDTO\">"));
+                payloadStr += "</payload>";
+
+                String resultsStr = xmlStr.substring(xmlStr.indexOf("<results xsi:type=\"orderResultDTO\">"), xmlStr.lastIndexOf("</results>"));
+                String[] resultsSplit = resultsStr.split("</results>");
+
+                try {
+                    // 创建DOM解析器
+                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+                    DocumentBuilder builder = factory.newDocumentBuilder();
+                    // 创建XPath对象
+                    XPath xpath = XPathFactory.newInstance().newXPath();
+                    for (String s : resultsSplit) {
+                        BankInfoCharges charges = new BankInfoCharges();
+                        // 解析XML字符串,获取Document对象
+                        Document document = builder.parse(new InputSource(new StringReader(s)));
+
+                        charges.setSn(xpath.evaluate("/results/sn", document));
+                        charges.setType(xpath.evaluate("/results/type", document));
+                        charges.setCode(xpath.evaluate("/results/code", document));
+                        charges.setNote(xpath.evaluate("/results/note", document));
+                        charges.setResult(xpath.evaluate("/results/result", document));
+                        chargesList.add(charges);
+                    }
+
+                } catch (ParserConfigurationException e) {
+                    e.printStackTrace();
+                } catch (SAXException e) {
+                    e.printStackTrace();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                } catch (XPathExpressionException e) {
+                    e.printStackTrace();
+                }
+
+            }
             try {
                 // 创建DOM解析器
                 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
@@ -114,8 +195,9 @@ public class BankByteTask {
 
                 bankInfo.setCode(xpath.evaluate("/payload/code", document));
                 bankInfo.setSource(xpath.evaluate("/payload/source", document));
-                bankInfo.setResult(xpath.evaluate("/payload/result", document));
+                bankInfo.setResult(xpath.evaluate("/payload/result", document));// 二级市场订单扣款(有手续费模式):< result> 可忽略
                 bankInfo.setNote(xpath.evaluate("/payload/note", document));
+                bankInfo.setType(xpath.evaluate("/payload/type", document));
 
             } catch (ParserConfigurationException e) {
                 e.printStackTrace();
@@ -127,23 +209,53 @@ public class BankByteTask {
                 e.printStackTrace();
             }
 
+
             //保存银行回执信息
             int insert = bankInfoMapper.insert(bankInfo);
+            if(isMKT008 && hasCommission) {
+                chargesList.forEach(Charges -> Charges.setBankInfoId(bankInfo.getId()));
+                boolean saveBatch = bankInfoChargesService.saveBatch(chargesList);
+                System.out.println("保存到银行回执信息-手续费:"+saveBatch);
+            }
+
+            boolean result = false;
             //(一级市场)订单扣款-成功
             if(bankInfo.getOperation().equalsIgnoreCase("SXB011")) {
                 //参数:一级市场边民订单-订单编号
-                boolean result = levelOneServerInterface.confirmOrderFromBank(bankInfo.getSource());
+                result = levelOneServerInterface.confirmOrderFromBank(bankInfo.getSource());
             }
             //(一级市场)订单扣款-失败
-            else if(bankInfo.getOperation().equalsIgnoreCase("SXB012")) {
-
-            }
+            else if(bankInfo.getOperation().equalsIgnoreCase("SXB012")) { }
             //(一级市场)订单退款-成功
-            else if(bankInfo.getOperation().equalsIgnoreCase("SXB014")) {
+            else if(bankInfo.getOperation().equalsIgnoreCase("SXB014")) { }
+            //(一级市场)订单退款-失败
+            else if(bankInfo.getOperation().equalsIgnoreCase("SXB015")) { }
+            //(一级市场-通车批信息)订单打款-成功
+            else if(bankInfo.getOperation().equalsIgnoreCase("SXB017")) {
+                //参数:一级市场边民订单-订单编号
+                result = levelOneServerInterface.confirmOrderFromBank(bankInfo.getSource());
+            }
+            //(一级市场-通车批信息)订单打款-失败()
+            else if(bankInfo.getOperation().equalsIgnoreCase("SXB018")) { }
+
+            //001:扣款订单    002:退款订单    003:打款订单
+            //(二级市场)订单扣款
+            else if(bankInfo.getOperation().equalsIgnoreCase("MKT008") && "001".equals(bankInfo.getType())) {
+                if(hasCommission) {//有手续费模式
+
+                }
+                else {//无手续费模式
+                    //回执代码为200则表示支付成功
+                    if("200".equals(bankInfo.getCode())) {
+                        //参数:二级市场边民订单-订单编号
+                        result = levelTwoServerInterface.payTax(bankInfo.getSource());
+                    } else {
 
+                    }
+                }
             }
-            //(一级市场)订单退款-失败
-            else if(bankInfo.getOperation().equalsIgnoreCase("SXB015")) {
+            //(二级市场)订单退款
+            else if(bankInfo.getOperation().equalsIgnoreCase("MKT008") && "002".equals(bankInfo.getType())) {
 
             }
 
@@ -151,125 +263,13 @@ public class BankByteTask {
             //amqpTemplateFeign.verifyContent(dataDto);
 
             //数据处理完成状态
-            boolean flag = false;
-            // 根据类型匹配对象
-            /*switch (dataDto.getDataType()) {
-                case "001":
-                    //对象转换
-                    HtPeopleDto peopleDto = JSONObject.parseObject(body, HtPeopleDto.class);
-                    //根据其内的身份证,有则新增,无则修改???
-                    flag = FeignFactory.levelOneServerInterface.peopleDto(peopleDto);
-                    methodHtByteTask.updateHtByteInfo(flag, item, dataDto);
-                    if (!flag) {
-                        System.err.println("\n边民信息处理失败。 messageId = " + item.getMessageId() + "\n");
-                    } else {
-                        System.err.println("\n边民信息处理成功。 messageId = " + item.getMessageId() + "\n");
-                    }
-                    break;
-                case "002":
-                    //商铺备案
-                    HtShopDTO shopDto = JSONObject.parseObject(body, HtShopDTO.class);
-                    //保存
-                    flag = FeignFactory.levelOneServerInterface.shopDto(shopDto);
-                    methodHtByteTask.updateHtByteInfo(flag, item, dataDto);
-                    if (!flag) {
-                        System.err.println("\n店铺信息处理失败。 messageId = " + item.getMessageId() + "\n");
-                    } else {
-                        System.err.println("\n店铺信息处理完成。 messageId = " + item.getMessageId() + "\n");
-                    }
-                    break;
-                case "003":
-                    //边民互助组备案
-                    HtGroupDto groupDto = JSONObject.parseObject(body, HtGroupDto.class);
-                    //保存
-                    flag = FeignFactory.levelOneServerInterface.groupDto(groupDto);
-                    methodHtByteTask.updateHtByteInfo(flag, item, dataDto);
-                    if (!flag) {
-                        System.err.println("\n互助组信息处理失败。 messageId = " + item.getMessageId() + "\n");
-                    } else {
-                        System.err.println("\n互助组信息处理完成。 messageId = " + item.getMessageId() + "\n");
-                    }
-                    break;
-                case "004":
-                    //边民合作社备案
-                    HtCooperativeDto cooperativeDto = JSONObject.parseObject(body, HtCooperativeDto.class);
-                    //保存
-                    flag = FeignFactory.levelOneServerInterface.cooperativeDto(cooperativeDto);
-                    methodHtByteTask.updateHtByteInfo(flag, item, dataDto);
-                    if (!flag) {
-                        System.err.println("\n边民合作社信息处理失败。 messageId = " + item.getMessageId() + "\n");
-                    } else {
-                        System.err.println("\n边民合作社信息处理完成。 messageId = " + item.getMessageId() + "\n");
-                    }
-                    break;
-                case "005":
-                    //商品基础信息
-                    HtGoodsDto goodsDto = JSONObject.parseObject(body, HtGoodsDto.class);
-                    //保存
-                    flag = FeignFactory.levelOneServerInterface.goodsDto(goodsDto);
-                    methodHtByteTask.updateHtByteInfo(flag, item, dataDto);
-                    if (!flag) {
-                        System.err.println("\n海关监管商品信息处理失败。 messageId = " + item.getMessageId() + "\n");
-                    } else {
-                        System.err.println("\n海关监管商品信息处理完成。 messageId = " + item.getMessageId() + "\n");
-                    }
-                    break;
-                case "006":
-                    //交易结算信息
-                    HtTradeSettlement importDeclarePeople = JSONObject.parseObject(body, HtTradeSettlement.class);
-                    if (importDeclarePeople == null || !importDeclarePeople.getIEFlag().toLowerCase().contains("i")) {
-                        StaticLog.info("出口商品,暂时忽略:{}", body);
-                        break;
-                    }
-                    List<BordersListDto> bordersLists = JSON.parseArray(importDeclarePeople.getBordersList(), BordersListDto.class);
-                    //边民购买商品列表
-                    List<BorderBuyGoodsListDto> buyGoodsList = JSON.parseArray(importDeclarePeople.getBorderBuyGoodsList(), BorderBuyGoodsListDto.class);
-                    //保存航通监听记录
-                    TradeSettlementDto tradeSettlementDto = new TradeSettlementDto();
-                    BeanUtils.copyProperties(importDeclarePeople,tradeSettlementDto);
-                    tradeSettlementDto.setBordersListDtoList(bordersLists);
-                    tradeSettlementDto.setBorderBuyGoodsListDtoList(buyGoodsList);
-                    importDeclarePeople.setFinishStatus(FinishStatus.FINISH_STATUS_ZERO.getCode()); // 默认待处理
-                    importDeclarePeople.setCreateTime(new Date());
-                    boolean b = FeignFactory.levelOneServerInterface.tradeSettlementDto(tradeSettlementDto);
-                    StaticLog.info("\n交易结算信息处理完成:{}。 messageId:{} = " ,item.getMessageId() ,b);
-                    methodHtByteTask.updateHtByteInfo(b, item, dataDto);
-                    break;
-                case "007":
-                    //放行记录(过卡记录)
-                    HtPassCardDTO htPassCardDTO = JSONObject.parseObject(body, HtPassCardDTO.class);
-                    //系统接收到航通过卡记录且卡口类型为'3卡':车辆已出一级市场, 修改相对应的一级市场订单状态
-                    if ("3卡".equals(htPassCardDTO.getChannelType())) {
-                        FeignFactory.levelOneServerInterface.orderFinish(htPassCardDTO);
-                    }
-                    break;
-                case "008":
-                    //进口申报单
-                    HtImportOrderDto importOrderDto = JSONObject.parseObject(body, HtImportOrderDto.class);
-                    boolean result = FeignFactory.levelOneServerInterface.importOrderDto(importOrderDto);
-                    methodHtByteTask.updateHtByteInfo(result, item, dataDto);
-                    if (result) {
-                        System.err.println("\n进口申报单同步处理成功。 messageId = " + item.getMessageId() + "\n");
-                    } else {
-                        System.err.println("\n进口申报单同步处理失败。 messageId = " + item.getMessageId() + "\n");
-                    }
-                    break;
-                case "009":
-                    //进口申报单边民确认
-                    HtImportDeclarePeople htImportDeclarePeople = JSONObject.parseObject(body, HtImportDeclarePeople.class);
-                    htImportDeclarePeople.setFinishStatus(FinishStatus.FINISH_STATUS_ZERO.getCode());
-                    htImportDeclarePeople.setCreateTime(new Date());
-                    int insert2 = htImportDeclarePeopleMapper.insert(htImportDeclarePeople);
-                    methodHtByteTask.updateHtByteInfo(insert2 == 1, item, dataDto);
-                    if (insert2 == 1) {
-                        System.err.println("\n进口申报单边民确认信息处理成功。 messageId = " + item.getMessageId() + "\n");
-                    } else {
-                        System.err.println("\n进口申报单边民确认信息处理失败。 messageId = " + item.getMessageId() + "\n");
-                    }
-                    break;
-                default:
-                    throw new ServiceException("类型错误。");
-            }*/
+            if(result) {//处理成功
+                item.setFinishStatus(FinishStatus.FINISH_STATUS_ONE.getCode());
+            } else {//处理失败
+                item.setFinishStatus(FinishStatus.FINISH_STATUS_TWO.getCode());
+            }
+            bankByteMapper.updateById(item);
+
         });
 
     }

+ 11 - 0
sp-service/payment-server/src/main/java/com/pj/task/PaymentController.java

@@ -1,6 +1,7 @@
 package com.pj.task;
 
 import com.pj.api.dto.PaymentDto;
+import com.pj.api.dto.PaymentTwoDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -27,4 +28,14 @@ public class PaymentController {
     public void sendSXB023(@RequestBody PaymentDto paymentDto) {
         paymentService.sendSXB023(paymentDto);
     }
+
+    @RequestMapping("rpc/sendMKT006_NoCommission")
+    public void sendMKT006_NoCommission(@RequestBody PaymentTwoDto paymentTwoDto) {
+        paymentService.sendMKT006_NoCommission(paymentTwoDto);
+    }
+
+    @RequestMapping("rpc/sendMKT006")
+    public void sendMKT006(@RequestBody PaymentTwoDto paymentTwoDto) {
+        paymentService.sendMKT006(paymentTwoDto);
+    }
 }

+ 39 - 1
sp-service/payment-server/src/main/java/com/pj/task/PaymentService.java

@@ -3,6 +3,7 @@ package com.pj.task;
 import com.alibaba.fastjson.JSON;
 import com.pj.api.dto.OrderDto;
 import com.pj.api.dto.PaymentDto;
+import com.pj.api.dto.PaymentTwoDto;
 import com.pj.dto.DataDto;
 import com.pj.rabbitmq.RabbitMQ;
 import com.pj.utils.ht.AESUtil;
@@ -39,7 +40,6 @@ public class PaymentService {
         log.info("send mq msg finish:{}", JSON.toJSONString(xml));
     }
 
-
     /**
      * ※ 订单退款
      * 报文名称:SXB013.xml  数据流向:一级市场--->银行
@@ -80,7 +80,45 @@ public class PaymentService {
         log.info("send mq msg finish:{}", JSON.toJSONString(xml));
     }
 
+    /**
+     * ※ 订单扣款(无手续费)
+     * 报文名称:SXB023.xml  数据流向:二级市场--->银行
+     * @param paymentTwoDto 订单信息
+     */
+    public void sendMKT006_NoCommission(PaymentTwoDto paymentTwoDto) {
+        log.info("send data to ht:{}", JSON.toJSONString(paymentTwoDto));
+        String xml = MessageXML.MKT006_NoCommission(paymentTwoDto);
+        //todo: 数据暂时定死
+        DataDto dataDto = new DataDto();
+        //报文加密
+        String jsonString = JSON.toJSONString(xml);
+        String encryptCBC = AESUtil.encryptCBC(jsonString, RabbitMQ.ACC_KEY);
+        dataDto.setData(encryptCBC);
+
+        //mq发送信息
+        amqpTemplate.convertAndSend(RabbitMQ.TEST_SEND_QUEUE, dataDto);
+        log.info("send mq msg finish:{}", JSON.toJSONString(xml));
+    }
 
+    /**
+     * ※ 订单扣款(+手续费)
+     * 报文名称:SXB023.xml  数据流向:二级市场--->银行
+     * @param paymentTwoDto 订单信息
+     */
+    public void sendMKT006(PaymentTwoDto paymentTwoDto) {
+        log.info("send data to ht:{}", JSON.toJSONString(paymentTwoDto));
+        String xml = MessageXML.MKT006(paymentTwoDto);
+        //todo: 数据暂时定死
+        DataDto dataDto = new DataDto();
+        //报文加密
+        String jsonString = JSON.toJSONString(xml);
+        String encryptCBC = AESUtil.encryptCBC(jsonString, RabbitMQ.ACC_KEY);
+        dataDto.setData(encryptCBC);
+
+        //mq发送信息
+        amqpTemplate.convertAndSend(RabbitMQ.TEST_SEND_QUEUE, dataDto);
+        log.info("send mq msg finish:{}", JSON.toJSONString(xml));
+    }
 
     /**
      * 获取航通数据时,验证其是否被篡改

+ 117 - 108
sp-service/payment-server/src/main/java/com/pj/xml/MessageXML.java

@@ -1,10 +1,13 @@
 package com.pj.xml;
 
 
+import com.pj.api.dto.CompanyDto;
 import com.pj.api.dto.PaymentDto;
+import com.pj.api.dto.PaymentTwoDto;
 
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.List;
 import java.util.UUID;
 
 public class MessageXML {
@@ -180,65 +183,64 @@ public class MessageXML {
     }
 
     /** 订单扣款(无手续费):二级市场--->银行  */
-    public static String MKT006_NoCommission(PaymentDto paymentDto) {
+    public static String MKT006_NoCommission(PaymentTwoDto paymentTwoDto) {
         String date = sdf.format(new Date());
-
         String xml =
                 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
                         "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"\" title=\"二级市场\">\n" +
                         "<headers>\n" +
                         "         <sn>"+UUID.randomUUID()+"</sn>\n" +
                         "         <date>"+date+"</date> \n" +
-                        "         <organization>"+paymentDto.getFieldCode()+"</organization>\n" +
+                        "         <organization>"+paymentTwoDto.getFieldCode()+"</organization>\n" +
                         "         <bankCode>KCCBCN2K</bankCode>\n" +
                         "         <operation>MKT006</operation>\n" +
                         "</headers>\n" +
 
                         " <payload xsi:type=\"orderDTO\">\n" +
-                        "         <sn>"+paymentDto.getTradeNo()+"</sn>\n" +                         //订单号
-                        "         <organization>"+paymentDto.getFieldCode()+"</organization>\n" +   //互市点机构代码
-                        "         <currency>"+paymentDto.getCurrCode()+"</currency>\n" +            //币种
-                        "         <type>001</type>\n" +                                             //业务类型	001 代表扣款订单
-                        "         <total>"+paymentDto.getTotalPrice()+"</total>\n" +                //订单总金额 8150.00 【买方总支付金额】
-                        "         <actualTotal></actualTotal>\n" +                                  //扣除手续费边民实际到账金额  actualTotal忽略
-                        "         <dateTime>"+paymentDto.getDeclTime()+"</dateTime>\n" +            //订单时间	YYYY-MM—DD HH:MM:DD SSS
+                        "         <sn>"+paymentTwoDto.getOrderNo()+"</sn>\n" +                         //订单号
+                        "         <organization>"+paymentTwoDto.getFieldCode()+"</organization>\n" +   //互市点机构代码
+                        "         <currency>"+paymentTwoDto.getCurrCode()+"</currency>\n" +            //币种
+                        "         <type>001</type>\n" +                                                //业务类型	001 代表扣款订单
+                        "         <total>"+paymentTwoDto.getResalePrice()+"</total>\n" +               //订单总金额 8150.00 【买方总支付金额】(转售金额)
+                        "         <actualTotal></actualTotal>\n" +                                     //扣除手续费边民实际到账金额  actualTotal忽略
+                        "         <dateTime>"+paymentTwoDto.getDeclTime()+"</dateTime>\n" +            //订单时间	YYYY-MM—DD HH:MM:DD SSS
 
                         "<vendee>\n" +//买方基本信息(采购企业)
-                        "         <name>"+paymentDto.getBorderName()+"</name>\n" +                 //企业名称
-                        "         <paperType>0008</paperType>\n" +                                 //证件类型  0008 社会统一信用代码(默认)
-                        "         <paperNo>"+paymentDto.getBorderidno()+"</paperNo>\n" +           //证件号
-                        "         <nationality>中国</nationality>\n" +                             //国籍
-                        "         <accountNo>"+paymentDto.getBankCode()+"</accountNo>\n" +         //银行账号
-                        "         <bankCode>KCCBCN2K</bankCode>\n" +                               //开户行代码
-                        "         <tel>"+paymentDto.getBorderTel()+"</tel>\n" +                    //联系电话
+                        "         <name>"+paymentTwoDto.getPcName()+"</name>\n" +                       //企业名称
+                        "         <paperType>0008</paperType>\n" +                                      //证件类型  0008 社会统一信用代码(默认)
+                        "         <paperNo>"+paymentTwoDto.getBusinessLicense()+"</paperNo>\n" +        //证件号
+                        "         <nationality>中国</nationality>\n" +                                  //国籍
+                        "         <accountNo>"+paymentTwoDto.getPcBankAccount()+"</accountNo>\n" +     //银行账号
+                        "         <bankCode>KCCBCN2K</bankCode>\n" +                                   //开户行代码
+                        "         <tel>"+paymentTwoDto.getPcContact()+"</tel>\n" +                     //联系电话
                         "</vendee>\n" +
 
                         "<vendee>\n" +//卖方基础信息(边民)
-                        "         <name>"+paymentDto.getBorderName()+"</name>\n" +                 //边民姓名
-                        "         <paperType>0001</paperType>\n" +                                 //证件类型  0001 身份证
-                        "         <paperNo>"+paymentDto.getBorderidno()+"</paperNo>\n" +           //边民证件号
-                        "         <nationality>中国</nationality>\n" +                             //国籍
-                        "         <accountNo>"+paymentDto.getBankCode()+"</accountNo>\n" +         //银行账号
-                        "         <bankCode>KCCBCN2K</bankCode>\n" +                               //开户行代码
-                        "         <tel>"+paymentDto.getBorderTel()+"</tel>\n" +                    //联系电话
+                        "         <name>"+paymentTwoDto.getBorderName()+"</name>\n" +                 //边民姓名
+                        "         <paperType>0001</paperType>\n" +                                    //证件类型  0001 身份证
+                        "         <paperNo>"+paymentTwoDto.getBorderidno()+"</paperNo>\n" +           //边民证件号
+                        "         <nationality>中国</nationality>\n" +                                //国籍
+                        "         <accountNo>"+paymentTwoDto.getBankCode()+"</accountNo>\n" +        //银行账号
+                        "         <bankCode>KCCBCN2K</bankCode>\n" +                                 //开户行代码
+                        "         <tel>"+paymentTwoDto.getBorderTel()+"</tel>\n" +                   //联系电话
                         "</vendee>\n" +
 
                         "<items>\n" +//商品明细
-                        "         <code>"+paymentDto.getGoodsName()+"</code>\n" +                   //商品编码
-                        "         <name>"+paymentDto.getGoodsName()+"</name>\n" +                   //商品名称
-                        "         <unit>"+paymentDto.getGoodsUnit()+"</unit>\n" +                   //商品单位
-                        "         <price>"+paymentDto.getDeclPrice()+"</price>\n" +                 //商品单价
-                        "         <quantity>"+paymentDto.getBuyQty()+"</quantity>\n" +              //商品数量
-                        "         <weight>"+paymentDto.getGrossWt()+"</weight>\n" +                 //商品重量
-                        "         <amount>"+paymentDto.getTotalPrice()+"</amount>\n" +              //金额
+                        "         <code>"+paymentTwoDto.getCodeTs()+"</code>\n" +                      //商品编码
+                        "         <name>"+paymentTwoDto.getGoodsName()+"</name>\n" +                   //商品名称
+                        "         <unit>"+paymentTwoDto.getGoodsUnit()+"</unit>\n" +                   //商品单位
+                        "         <price>"+paymentTwoDto.getDeclPrice()+"</price>\n" +                 //商品单价
+                        "         <quantity>"+paymentTwoDto.getBuyQty()+"</quantity>\n" +              //商品数量
+                        "         <weight>"+paymentTwoDto.getGrossWt()+"</weight>\n" +                 //商品重量
+                        "         <amount>"+paymentTwoDto.getResalePrice()+"</amount>\n" +              //金额
                         "</items>\n" +
                         "<items>\n" +
-                        "         <name>"+paymentDto.getGoodsName()+"</name>\n" +                   //商品名称
-                        "         <unit>"+paymentDto.getGoodsUnit()+"</unit>\n" +                   //商品单位
-                        "         <price>"+paymentDto.getDeclPrice()+"</price>\n" +                 //商品单价
-                        "         <quantity>"+paymentDto.getBuyQty()+"</quantity>\n" +              //商品数量
-                        "         <weight>"+paymentDto.getGrossWt()+"</weight>\n" +                 //商品重量
-                        "         <amount>"+paymentDto.getTotalPrice()+"</amount>\n" +              //金额
+                        "         <name>"+paymentTwoDto.getGoodsName()+"</name>\n" +                   //商品名称
+                        "         <unit>"+paymentTwoDto.getGoodsUnit()+"</unit>\n" +                   //商品单位
+                        "         <price>"+paymentTwoDto.getDeclPrice()+"</price>\n" +                 //商品单价
+                        "         <quantity>"+paymentTwoDto.getBuyQty()+"</quantity>\n" +              //商品数量
+                        "         <weight>"+paymentTwoDto.getGrossWt()+"</weight>\n" +                 //商品重量
+                        "         <amount>"+paymentTwoDto.getResalePrice()+"</amount>\n" +              //金额
                         "</items>\n" +
 
                         "</payload>\n" +
@@ -247,112 +249,119 @@ public class MessageXML {
     }
 
     /** 订单扣款(+手续费):二级市场--->银行  */
-    public static String MKT006(PaymentDto paymentDto) {
+    public static String MKT006(PaymentTwoDto paymentTwoDto) {
         String date = sdf.format(new Date());
-
+        String chargesXml = chargesXml(paymentTwoDto.getCompanyDtoList(),paymentTwoDto.getOrderNo());
         String xml =
                 "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
                 "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"\" title=\"二级市场\">\n" +
                 "<headers>\n" +
                 "         <sn>"+UUID.randomUUID()+"</sn>\n" +
                 "         <date>"+date+"</date> \n" +
-                "         <organization>"+paymentDto.getFieldCode()+"</organization>\n" +
+                "         <organization>"+paymentTwoDto.getFieldCode()+"</organization>\n" +
                 "         <bankCode>KCCBCN2K</bankCode>\n" +
                 "         <operation>MKT006</operation>\n" +
                 "</headers>\n" +
 
                 " <payload xsi:type=\"orderDTO\">\n" +
-                "         <sn>"+paymentDto.getTradeNo()+"</sn>\n" +                         //订单号
-                "         <organization>"+paymentDto.getFieldCode()+"</organization>\n" +   //互市点机构代码
-                "         <currency>"+paymentDto.getCurrCode()+"</currency>\n" +            //币种
-                "         <type>001</type>\n" +                                             //业务类型	001 代表扣款订单
-                "         <total>"+paymentDto.getTotalPrice()+"</total>\n" +                //订单总金额 8150.00 【买方总支付金额】
-                "         <actualTotal>"+paymentDto.getTotalPrice()+"</actualTotal>\n" +    //扣除手续费边民实际到账金额 8050
-                "         <dateTime>"+paymentDto.getDeclTime()+"</dateTime>\n" +            //订单时间	YYYY-MM—DD HH:MM:DD SSS
+                "         <sn>"+paymentTwoDto.getOrderNo()+"</sn>\n" +                          //订单号
+                "         <organization>"+paymentTwoDto.getFieldCode()+"</organization>\n" +    //互市点机构代码
+                "         <currency>"+paymentTwoDto.getCurrCode()+"</currency>\n" +             //币种
+                "         <type>001</type>\n" +                                                 //业务类型	001 代表扣款订单
+                "         <total>"+paymentTwoDto.getResalePrice()+"</total>\n" +                //订单总金额 8150.00 【买方总支付金额】
+                "         <actualTotal>"+paymentTwoDto.getTotalPrice()+"</actualTotal>\n" +    //扣除手续费边民实际到账金额 8050
+                "         <dateTime>"+paymentTwoDto.getDeclTime()+"</dateTime>\n" +            //订单时间	YYYY-MM—DD HH:MM:DD SSS
 
                 "<vendee>\n" +//买方基本信息(采购企业)
-                "         <name>"+paymentDto.getBorderName()+"</name>\n" +                 //企业名称
-                "         <paperType>0008</paperType>\n" +                                 //证件类型  0008 社会统一信用代码(默认)
-                "         <paperNo>"+paymentDto.getBorderidno()+"</paperNo>\n" +           //证件号
-                "         <nationality>中国</nationality>\n" +                             //国籍
-                "         <accountNo>"+paymentDto.getBankCode()+"</accountNo>\n" +        //银行账号
-                "         <bankCode>KCCBCN2K</bankCode>\n" +                              //开户行代码
-                "         <tel>"+paymentDto.getBorderTel()+"</tel>\n" +                   //联系电话
+                "         <name>"+paymentTwoDto.getPcName()+"</name>\n" +                       //企业名称
+                "         <paperType>0008</paperType>\n" +                                      //证件类型  0008 社会统一信用代码(默认)
+                "         <paperNo>"+paymentTwoDto.getBusinessLicense()+"</paperNo>\n" +        //证件号
+                "         <nationality>中国</nationality>\n" +                                  //国籍
+                "         <accountNo>"+paymentTwoDto.getPcBankAccount()+"</accountNo>\n" +     //银行账号
+                "         <bankCode>KCCBCN2K</bankCode>\n" +                                   //开户行代码
+                "         <tel>"+paymentTwoDto.getPcContact()+"</tel>\n" +                     //联系电话
                 "</vendee>\n" +
 
                 "<vendee>\n" +//卖方基础信息(边民)
-                "         <name>"+paymentDto.getBorderName()+"</name>\n" +                 //边民姓名
-                "         <paperType>0001</paperType>\n" +                                 //证件类型  0001 身份证
-                "         <paperNo>"+paymentDto.getBorderidno()+"</paperNo>\n" +           //边民证件号
-                "         <nationality>中国</nationality>\n" +                             //国籍
-                "         <accountNo>"+paymentDto.getBankCode()+"</accountNo>\n" +         //银行账号
-                "         <bankCode>KCCBCN2K</bankCode>\n" +                              //开户行代码
-                "         <tel>"+paymentDto.getBorderTel()+"</tel>\n" +                    //联系电话
+                "         <name>"+paymentTwoDto.getBorderName()+"</name>\n" +                 //边民姓名
+                "         <paperType>0001</paperType>\n" +                                    //证件类型  0001 身份证
+                "         <paperNo>"+paymentTwoDto.getBorderidno()+"</paperNo>\n" +           //边民证件号
+                "         <nationality>中国</nationality>\n" +                                //国籍
+                "         <accountNo>"+paymentTwoDto.getBankCode()+"</accountNo>\n" +        //银行账号
+                "         <bankCode>KCCBCN2K</bankCode>\n" +                                 //开户行代码
+                "         <tel>"+paymentTwoDto.getBorderTel()+"</tel>\n" +                   //联系电话
                 "</vendee>\n" +
 
                 "<items>\n" +//商品明细
-                "         <code>"+paymentDto.getGoodsName()+"</code>\n" +                   //商品编码
-                "         <name>"+paymentDto.getGoodsName()+"</name>\n" +                   //商品名称
-                "         <unit>"+paymentDto.getGoodsUnit()+"</unit>\n" +                   //商品单位
-                "         <price>"+paymentDto.getDeclPrice()+"</price>\n" +                 //商品单价
-                "         <quantity>"+paymentDto.getBuyQty()+"</quantity>\n" +              //商品数量
-                "         <weight>"+paymentDto.getGrossWt()+"</weight>\n" +                 //商品重量
-                "         <amount>"+paymentDto.getTotalPrice()+"</amount>\n" +              //金额
+                "         <code>"+paymentTwoDto.getCodeTs()+"</code>\n" +                      //商品编码
+                "         <name>"+paymentTwoDto.getGoodsName()+"</name>\n" +                   //商品名称
+                "         <unit>"+paymentTwoDto.getGoodsUnit()+"</unit>\n" +                   //商品单位
+                "         <price>"+paymentTwoDto.getDeclPrice()+"</price>\n" +                 //商品单价
+                "         <quantity>"+paymentTwoDto.getBuyQty()+"</quantity>\n" +              //商品数量
+                "         <weight>"+paymentTwoDto.getGrossWt()+"</weight>\n" +                 //商品重量
+                "         <amount>"+paymentTwoDto.getResalePrice()+"</amount>\n" +              //金额
                 "</items>\n" +
                 "<items>\n" +
-                "         <name>"+paymentDto.getGoodsName()+"</name>\n" +                   //商品名称
-                "         <unit>"+paymentDto.getGoodsUnit()+"</unit>\n" +                   //商品单位
-                "         <price>"+paymentDto.getDeclPrice()+"</price>\n" +                 //商品单价
-                "         <quantity>"+paymentDto.getBuyQty()+"</quantity>\n" +              //商品数量
-                "         <weight>"+paymentDto.getGrossWt()+"</weight>\n" +                 //商品重量
-                "         <amount>"+paymentDto.getTotalPrice()+"</amount>\n" +              //金额
+                "         <name>"+paymentTwoDto.getGoodsName()+"</name>\n" +                   //商品名称
+                "         <unit>"+paymentTwoDto.getGoodsUnit()+"</unit>\n" +                   //商品单位
+                "         <price>"+paymentTwoDto.getDeclPrice()+"</price>\n" +                 //商品单价
+                "         <quantity>"+paymentTwoDto.getBuyQty()+"</quantity>\n" +              //商品数量
+                "         <weight>"+paymentTwoDto.getGrossWt()+"</weight>\n" +                 //商品重量
+                "         <amount>"+paymentTwoDto.getResalePrice()+"</amount>\n" +              //金额
                 "</items>\n" +
 
-                "<charges>\n" +//父级手续费(有子级手续费)
-                "         <type>001</type>\n" +                                             //手续费类型	数据字典:ChargeType
-                "         <sn>"+UUID.randomUUID()+"</sn>\n" +                               //订单号
-                "         <name>"+paymentDto.getBorderName()+"</name>\n" +                  //企业名称
+                /*"<charges>\n" +//父级手续费(有子级手续费)
+                "         <type></type>\n" +                                                //手续费类型	数据字典:ChargeType
+                "         <sn>"+paymentTwoDto.getOrderNo()+"</sn>\n" +                      //订单号(一级市场订单号)
+                "         <name>"+paymentTwoDto.getPcName()+"</name>\n" +                   //企业名称
                 "         <paperType>0008</paperType>\n" +                                  //证件类型  0008 社会统一信用代码(默认)
-                "         <paperNo>"+paymentDto.getBorderidno()+"</paperNo>\n" +            //证件号
-                "         <nationality>中国</nationality>\n" +                               //国籍
-                "         <accountNo>"+paymentDto.getBankCode()+"</accountNo>\n" +          //银行账号
+                "         <paperNo>"+paymentTwoDto.getBusinessLicense()+"</paperNo>\n" +    //证件号
+                "         <nationality>中国</nationality>\n" +                              //国籍
+                "         <accountNo>"+paymentTwoDto.getBankCode()+"</accountNo>\n" +       //银行账号
                 "         <bankCode>KCCBCN2K</bankCode>\n" +                                //开户行代码
                 "         <bankNo></bankNo>\n" +                                            //开户行行号	非必填
-                "         <tel>"+paymentDto.getBorderTel()+"</tel>\n" +                     //联系电话
-                "         <total>"+paymentDto.getBorderTel()+"</total>\n" +                 //手续费金额	70(包含了子级手续费 可多个)
-                        "<childrenCharges>\n" +//父级手续费(有子级手续费
-                        "         <type>001</type>\n" +                                      //手续费类型	数据字典:ChargeType
-                        "         <sn>"+UUID.randomUUID()+"</sn>\n" +                        //订单号
-                        "         <name>"+paymentDto.getBorderName()+"</name>\n" +           //企业名称
-                        "         <paperType>0008</paperType>\n" +                           //证件类型  0008 社会统一信用代码(默认)
-                        "         <paperNo>"+paymentDto.getBorderidno()+"</paperNo>\n" +     //证件号
+                "         <tel>"+paymentTwoDto.getBorderTel()+"</tel>\n" +                  //联系电话
+                "         <total>"+paymentTwoDto.getBorderTel()+"</total>\n" +              //手续费金额	70(包含了子级手续费 可多个)
+                        "<childrenCharges>\n" +//子级手续费
+                        "         <type></type>\n" +                                        //手续费类型	数据字典:ChargeType
+                        "         <sn>"+UUID.randomUUID()+"</sn>\n" +                       //订单号
+                        "         <name>"+paymentTwoDto.getBorderName()+"</name>\n" +       //企业名称
+                        "         <paperType>0008</paperType>\n" +                          //证件类型  0008 社会统一信用代码(默认)
+                        "         <paperNo>"+paymentTwoDto.getBorderidno()+"</paperNo>\n" + //证件号
                         "         <nationality>中国</nationality>\n" +                       //国籍
-                        "         <accountNo>"+paymentDto.getBankCode()+"</accountNo>\n" +  //银行账号
-                        "         <bankCode>KCCBCN2K</bankCode>\n" +                        //开户行代码
-                        "         <bankNo></bankNo>\n" +                                    //开户行行号	非必填
-                        "         <tel>"+paymentDto.getBorderTel()+"</tel>\n" +             //联系电话
-                        "         <total>"+paymentDto.getBorderTel()+"</total>\n" +         //手续费金额	2
+                        "         <accountNo>"+paymentTwoDto.getBankCode()+"</accountNo>\n" +//银行账号
+                        "         <bankCode>KCCBCN2K</bankCode>\n" +                         //开户行代码
+                        "         <bankNo></bankNo>\n" +                                     //开户行行号	非必填
+                        "         <tel>"+paymentTwoDto.getBorderTel()+"</tel>\n" +           //联系电话
+                        "         <total>"+paymentTwoDto.getBorderTel()+"</total>\n" +       //手续费金额	2
                         "</childrenCharges>\n" +
-                "</charges>\n" +
+                "</charges>\n" +*/
 
-                "<charges>\n" +//父级手续费(无子级手续费)
-                "         <type>001</type>\n" +                                            //手续费类型	数据字典:ChargeType
-                "         <sn>"+UUID.randomUUID()+"</sn>\n" +                              //订单号
-                "         <name>"+paymentDto.getBorderName()+"</name>\n" +                 //企业名称
-                "         <paperType>0008</paperType>\n" +                                 //证件类型  0008 社会统一信用代码(默认)
-                "         <paperNo>"+paymentDto.getBorderidno()+"</paperNo>\n" +           //证件号
-                "         <nationality>中国</nationality>\n" +                             //国籍
-                "         <accountNo>"+paymentDto.getBankCode()+"</accountNo>\n" +        //银行账号
-                "         <bankCode>KCCBCN2K</bankCode>\n" +                              //开户行代码
-                "         <bankNo></bankNo>\n" +                                          //开户行行号	非必填
-                "         <tel>"+paymentDto.getBorderTel()+"</tel>\n" +                   //联系电话
-                "         <total>"+paymentDto.getBorderTel()+"</total>\n" +               //手续费金额
-                "</charges>\n" +
+                 chargesXml +       //父级手续费(无子级手续费)
 
                 "</payload>\n" +
                 "</message>\n";
         return xml;
     }
+    private static String chargesXml(List<CompanyDto> companyDtoList, String orderNo){
+        String xml = "";
+        for (CompanyDto companyDto : companyDtoList) {
+            xml +=  "<charges>\n" +//父级手续费(无子级手续费)
+                    "         <type></type>\n" +                                          //手续费类型	数据字典:ChargeType
+                    "         <sn>"+orderNo+"</sn>\n" +                                   //订单号
+                    "         <name>"+companyDto.getName()+"</name>\n" +                  //企业名称
+                    "         <paperType>0008</paperType>\n" +                            //证件类型  0008 社会统一信用代码(默认)
+                    "         <paperNo>"+companyDto.getUsci()+"</paperNo>\n" +            //证件号
+                    "         <nationality>中国</nationality>\n" +                         //国籍
+                    "         <accountNo>"+companyDto.getBankAccount()+"</accountNo>\n" + //银行账号
+                    "         <bankCode>KCCBCN2K</bankCode>\n" +                          //开户行代码
+                    "         <bankNo></bankNo>\n" +                                      //开户行行号	非必填
+                    "         <tel>"+companyDto.getContact()+"</tel>\n" +                 //联系电话
+                    "         <total>"+companyDto.getChargesPrice()+"</total>\n" +        //手续费金额
+                    "</charges>\n" ;
+        }
+        return xml;
+    }
 
     public static void main(String[] args) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss sss");