Browse Source

代码提交

linbl 6 months ago
parent
commit
f66aaafe17
61 changed files with 1803 additions and 693 deletions
  1. 4 0
      sp-core/sp-api/pom.xml
  2. 7 1
      sp-core/sp-api/src/main/java/com/pj/api/client/admin/AdminInterface.java
  3. 7 2
      sp-core/sp-api/src/main/java/com/pj/api/client/admin/AdminInterfaceFallback.java
  4. 17 0
      sp-core/sp-api/src/main/java/com/pj/api/client/level_one_server/LevelOneServerInterface.java
  5. 20 0
      sp-core/sp-api/src/main/java/com/pj/api/client/level_one_server/LevelOneServerInterfaceFallback.java
  6. 9 4
      sp-core/sp-api/src/main/java/com/pj/api/client/payment_server/PaymentServerInterface.java
  7. 5 0
      sp-core/sp-api/src/main/java/com/pj/api/client/payment_server/PaymentServerInterfaceFallback.java
  8. 4 40
      sp-core/sp-api/src/main/java/com/pj/api/dto/AdminCreateDto.java
  9. 3 3
      sp-core/sp-api/src/main/java/com/pj/api/dto/AppUserCreateDTO.java
  10. 5 5
      sp-core/sp-api/src/main/java/com/pj/api/dto/AppUserDto.java
  11. 102 0
      sp-core/sp-api/src/main/java/com/pj/api/dto/BankInfoDto.java
  12. 103 6
      sp-core/sp-base/src/main/java/com/pj/utils/ht/AESUtil.java
  13. 5 5
      sp-generate/src/main/java/com/pj/SpGenerateApplication.java
  14. 25 11
      sp-service/async-server/src/main/java/com/pj/rabbitmq/RabbitMQ.java
  15. 28 8
      sp-service/async-server/src/main/java/com/pj/task/HtByteTask.java
  16. 2 2
      sp-service/level-one-server/src/main/java/com/pj/ht_trade_settlement/HtTradeSettlementService.java
  17. 6 3
      sp-service/level-one-server/src/main/java/com/pj/tb_cooperative/TbCooperativeService.java
  18. 1 1
      sp-service/level-one-server/src/main/java/com/pj/tb_goods/TbGoodsService.java
  19. 1 1
      sp-service/level-one-server/src/main/java/com/pj/tb_group/TbGroupService.java
  20. 9 1
      sp-service/level-one-server/src/main/java/com/pj/tb_import_order/ImportOrderVo.java
  21. 7 0
      sp-service/level-one-server/src/main/java/com/pj/tb_import_order/TbImportOrder.java
  22. 14 0
      sp-service/level-one-server/src/main/java/com/pj/tb_import_order/TbImportOrderAppController.java
  23. 7 1
      sp-service/level-one-server/src/main/java/com/pj/tb_import_order/TbImportOrderController.java
  24. 2 1
      sp-service/level-one-server/src/main/java/com/pj/tb_import_order/TbImportOrderMapper.xml
  25. 10 0
      sp-service/level-one-server/src/main/java/com/pj/tb_import_order/TbImportOrderService.java
  26. 5 5
      sp-service/level-one-server/src/main/java/com/pj/tb_order/TbOrder.java
  27. 6 2
      sp-service/level-one-server/src/main/java/com/pj/tb_order/TbOrderAppController.java
  28. 59 6
      sp-service/level-one-server/src/main/java/com/pj/tb_order/TbOrderService.java
  29. 13 3
      sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleAppController.java
  30. 9 1
      sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleController.java
  31. 2 2
      sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleMapper.xml
  32. 57 15
      sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleService.java
  33. 93 86
      sp-service/level-one-server/src/main/java/com/pj/tb_shop/TbShop.java
  34. 26 15
      sp-service/level-one-server/src/main/java/com/pj/tb_shop/TbShopController.java
  35. 34 6
      sp-service/level-one-server/src/main/java/com/pj/tb_shop/TbShopService.java
  36. 39 34
      sp-service/level-one-server/src/main/java/com/pj/tb_trade_area/TbTradeArea.java
  37. 16 14
      sp-service/level-one-server/src/main/java/com/pj/tb_trade_area/TbTradeAreaMapper.xml
  38. 4 4
      sp-service/level-one-server/src/main/java/com/pj/tb_trade_area/TbTradeAreaService.java
  39. 2 2
      sp-service/level-two-server/src/main/java/com/pj/tb_orders/TbOrdersApiController.java
  40. 1 8
      sp-service/level-two-server/src/main/java/com/pj/tb_orders/TbOrdersDto.java
  41. 2 0
      sp-service/level-two-server/src/main/java/com/pj/tb_orders/TbOrdersMapper.xml
  42. 17 11
      sp-service/level-two-server/src/main/java/com/pj/tb_orders/TbOrdersService.java
  43. 4 4
      sp-service/level-two-server/src/main/java/com/pj/tb_purchaser/TbPurchaser.java
  44. 6 1
      sp-service/payment-server/pom.xml
  45. 2 2
      sp-service/payment-server/src/main/java/com/pj/PaymentServerApplication.java
  46. 13 6
      sp-service/payment-server/src/main/java/com/pj/bank_info/BankInfo.java
  47. 21 10
      sp-service/payment-server/src/main/java/com/pj/rabbitmq/MessageReceiver.java
  48. 20 19
      sp-service/payment-server/src/main/java/com/pj/rabbitmq/MessageSender.java
  49. 6 0
      sp-service/payment-server/src/main/java/com/pj/rabbitmq/RabbitMQProperties.java
  50. 18 2
      sp-service/payment-server/src/main/java/com/pj/rabbitmq/RabbitmqConfig.java
  51. 191 84
      sp-service/payment-server/src/main/java/com/pj/task/BankByteTask.java
  52. 9 3
      sp-service/payment-server/src/main/java/com/pj/task/PaymentController.java
  53. 136 8
      sp-service/payment-server/src/main/java/com/pj/task/PaymentService.java
  54. 1 1
      sp-service/payment-server/src/main/java/com/pj/utils/CryptoUtil.java
  55. 507 187
      sp-service/payment-server/src/main/java/com/pj/xml/MessageXML.java
  56. 6 0
      sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserController.java
  57. 18 4
      sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserService.java
  58. 4 3
      sp-service/sp-admin/src/main/java/com/pj/project4sp/admin/SpAdminController.java
  59. 19 17
      sp-service/sp-admin/src/main/java/com/pj/project4sp/admin/SpAdminService.java
  60. 10 10
      sp-service/sp-admin/src/main/java/com/pj/project4sp/spcfg/SpCfgController.java
  61. 24 23
      sp-service/sp-admin/src/main/java/com/pj/project4sp/uploadfile/UploadController.java

+ 4 - 0
sp-core/sp-api/pom.xml

@@ -35,6 +35,10 @@
             <artifactId>jackson-annotations</artifactId>
             <version>2.11.2</version>
         </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
 
 
     </dependencies>

+ 7 - 1
sp-core/sp-api/src/main/java/com/pj/api/client/admin/AdminInterface.java

@@ -88,6 +88,12 @@ public interface AdminInterface {
      * @param dto
      */
     @PostMapping("admin/rpc/createAdmin")
-    public void createAdmin(@RequestBody AdminCreateDto dto);
+    public boolean createAdmin(@RequestBody AdminCreateDto dto);
+
+    /**
+     * 根据fkId查app用户
+     */
+    @RequestMapping("/AppUser/rpc/getByFkId")
+    AppUserDto getByFkId(@RequestParam("fkId") Long fkId);
 
 }

+ 7 - 2
sp-core/sp-api/src/main/java/com/pj/api/client/admin/AdminInterfaceFallback.java

@@ -62,7 +62,7 @@ public class AdminInterfaceFallback implements FallbackFactory<AdminInterface> {
 
             @Override
             public boolean audit(EnterpriseAuditDto dto) {
-                return true;
+                return false;
             }
 
             @Override
@@ -81,8 +81,13 @@ public class AdminInterfaceFallback implements FallbackFactory<AdminInterface> {
             }
 
             @Override
-            public void createAdmin(AdminCreateDto dto) {
+            public boolean createAdmin(AdminCreateDto dto) {
+                return false;
+            }
 
+            @Override
+            public AppUserDto getByFkId(Long fkId) {
+                return null;
             }
 
         };

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

@@ -155,4 +155,21 @@ public interface LevelOneServerInterface {
     /** 收到银行退款回执 */
     @PostMapping("/app/TbOrder/rpc/chargebackFromBank")
     public boolean chargebackFromBank(@RequestParam("tradeNo")String tradeNo,@RequestParam("SXB023Status")Integer SXB023Status, @RequestParam("note")String note);
+
+    /** 根据边民姓名与身份证号查询边民是否存在 */
+    @PostMapping("/app/TbPeople/rpc/getByidCard")
+    public boolean getByidCard(@RequestParam("name")String name, @RequestParam("idCard")String idCard);
+
+    /** 边民备案验证查询-银行回复新开户或变更数据 */
+    @PostMapping("/app/TbPeople/rpc/updateBySXB005")
+    public boolean updateBySXB005(@RequestBody BankInfoDto bankInfoDto);
+
+    /** 根据铺主姓名查询商铺是否存在 */
+    @PostMapping("/TbShop/rpc/getByName")
+    public boolean getByName(@RequestParam("name")String name);
+
+    /** 商家备案验证查询-银行回复新开户或变更数据 */
+    @PostMapping("/TbShop/rpc/updateBySXB009")
+    public boolean updateBySXB009(@RequestBody BankInfoDto bankInfoDto);
+
 }

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

@@ -230,6 +230,26 @@ public class LevelOneServerInterfaceFallback implements FallbackFactory<LevelOne
             public boolean chargebackFromBank(String tradeNo, Integer SXB023Status, String note) {
                 return false;
             }
+
+            @Override
+            public boolean getByidCard(String name, String idCard) {
+                return false;
+            }
+
+            @Override
+            public boolean getByName(String name) {
+                return false;
+            }
+
+            @Override
+            public boolean updateBySXB009(BankInfoDto bankInfoDto) {
+                return false;
+            }
+
+            @Override
+            public boolean updateBySXB005(BankInfoDto bankInfoDto) {
+                return false;
+            }
         };
     }
 }

+ 9 - 4
sp-core/sp-api/src/main/java/com/pj/api/client/payment_server/PaymentServerInterface.java

@@ -4,9 +4,8 @@ import com.pj.api.FeignInterceptor;
 import com.pj.api.consts.FeignConsts;
 import com.pj.api.dto.*;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.cloud.openfeign.SpringQueryMap;
+import org.springframework.web.bind.annotation.*;
 
 @FeignClient(
         name = FeignConsts.PAYMENT_SERVER,                // 服务名称
@@ -16,10 +15,16 @@ import org.springframework.web.bind.annotation.RequestMapping;
 public interface PaymentServerInterface {
 
     /**
+     * 结关报文接口
+     */
+    @GetMapping("/payment/rpc/sendCXB001")
+    void sendCXB001(PaymentDto paymentDto);
+
+    /**
      * 调用银行扣款接口
      */
     @GetMapping("/payment/rpc/sendSXB010")
-    void sendSXB010(@RequestBody PaymentDto paymentDto);
+    void sendSXB010(@SpringQueryMap PaymentDto paymentDto);
 
     /**
      * 调用银行退款接口

+ 5 - 0
sp-core/sp-api/src/main/java/com/pj/api/client/payment_server/PaymentServerInterfaceFallback.java

@@ -16,6 +16,11 @@ public class PaymentServerInterfaceFallback implements FallbackFactory<PaymentSe
     @Override
     public PaymentServerInterface create(Throwable throwable) {
         return new PaymentServerInterface() {
+            @Override
+            public void sendCXB001(PaymentDto paymentDto) {
+                System.out.println(throwable.getMessage());
+                log.error("调用结关报文接口【CXB001】错误,当前对象:{},错误信息是:{}",paymentDto,throwable.getMessage());
+            }
 
             @Override
             public void sendSXB010(PaymentDto paymentDto) {

+ 4 - 40
sp-core/sp-api/src/main/java/com/pj/api/dto/AdminCreateDto.java

@@ -1,13 +1,17 @@
 package com.pj.api.dto;
 
+import lombok.Data;
+
 import java.io.Serializable;
 
+@Data
 public class AdminCreateDto implements Serializable {
 
     /**
      * 账号
      */
     private String name;
+
     /**
      * 所属互市ID
      */
@@ -18,7 +22,6 @@ public class AdminCreateDto implements Serializable {
      */
     private String type;
 
-
     /**
      * 密码,发短信生成
      */
@@ -28,43 +31,4 @@ public class AdminCreateDto implements Serializable {
     public Integer roleId;
 
 
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Long getTradeAreaId() {
-        return tradeAreaId;
-    }
-
-    public void setTradeAreaId(Long tradeAreaId) {
-        this.tradeAreaId = tradeAreaId;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public Integer getRoleId() {
-        return roleId;
-    }
-
-    public void setRoleId(Integer roleId) {
-        this.roleId = roleId;
-    }
 }

+ 3 - 3
sp-core/sp-api/src/main/java/com/pj/api/dto/AppUserCreateDTO.java

@@ -20,7 +20,7 @@ public class AppUserCreateDTO implements Serializable {
     /**
      * 外联id,user_type=1=>边民ID;user_type=3=>商户ID
      */
-    private String fkId;
+    private Long fkId;
 
     /**
      * 是否认证(0=未认证,1=已认证)
@@ -57,11 +57,11 @@ public class AppUserCreateDTO implements Serializable {
         this.userType = userType;
     }
 
-    public String getFkId() {
+    public Long getFkId() {
         return fkId;
     }
 
-    public void setFkId(String fkId) {
+    public void setFkId(Long fkId) {
         this.fkId = fkId;
     }
 

+ 5 - 5
sp-core/sp-api/src/main/java/com/pj/api/dto/AppUserDto.java

@@ -30,7 +30,7 @@ public class AppUserDto {
      */
     private String createUnit;
 
-    public AppUserDto(Long id, String phone, String name, String createUnit, String userType, String fkId, String status, String auth, String authTime, Long loginCount, String lastLoginTime, Date createTime, String updateById, String updateByName, Date updateTime, Integer deleteStatus, String password) {
+    public AppUserDto(Long id, String phone, String name, String createUnit, String userType, Long fkId, String status, String auth, String authTime, Long loginCount, String lastLoginTime, Date createTime, String updateById, String updateByName, Date updateTime, Integer deleteStatus, String password) {
         this.id = id;
         this.phone = phone;
         this.name = name;
@@ -66,7 +66,7 @@ public class AppUserDto {
     /**
      * 外联id,user_type=1=>边民ID;user_type=3=>商户ID
      */
-    private String fkId;
+    private Long fkId;
 
     /**
      * 状态(0=禁用,1=启用)
@@ -127,7 +127,7 @@ public class AppUserDto {
     public AppUserDto() {
     }
 
-    public AppUserDto(Long id, String phone, String name, String userType, String fkId, String status, String auth, String authTime, Long loginCount, String lastLoginTime, Date createTime, String updateById, String updateByName, Date updateTime, Integer deleteStatus, String password) {
+    public AppUserDto(Long id, String phone, String name, String userType, Long fkId, String status, String auth, String authTime, Long loginCount, String lastLoginTime, Date createTime, String updateById, String updateByName, Date updateTime, Integer deleteStatus, String password) {
         this.id = id;
         this.phone = phone;
         this.name = name;
@@ -178,11 +178,11 @@ public class AppUserDto {
         this.userType = userType;
     }
 
-    public String getFkId() {
+    public Long getFkId() {
         return fkId;
     }
 
-    public void setFkId(String fkId) {
+    public void setFkId(Long fkId) {
         this.fkId = fkId;
     }
 

+ 102 - 0
sp-core/sp-api/src/main/java/com/pj/api/dto/BankInfoDto.java

@@ -0,0 +1,102 @@
+package com.pj.api.dto;
+
+import java.util.Date;
+
+/**
+ * Model: bank_info -- 银行回执信息表
+ * @author lbl
+ */
+public class BankInfoDto {
+
+	private String name;
+	private String papersType;
+	private String papersNo;
+	private String nationality;
+	private String account;
+	private String payBankCode;
+	private String tel;
+
+	private String title;
+	private String swiftCode;
+	private String abroad;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getPapersType() {
+		return papersType;
+	}
+
+	public void setPapersType(String papersType) {
+		this.papersType = papersType;
+	}
+
+	public String getPapersNo() {
+		return papersNo;
+	}
+
+	public void setPapersNo(String papersNo) {
+		this.papersNo = papersNo;
+	}
+
+	public String getNationality() {
+		return nationality;
+	}
+
+	public void setNationality(String nationality) {
+		this.nationality = nationality;
+	}
+
+	public String getAccount() {
+		return account;
+	}
+
+	public void setAccount(String account) {
+		this.account = account;
+	}
+
+	public String getPayBankCode() {
+		return payBankCode;
+	}
+
+	public void setPayBankCode(String payBankCode) {
+		this.payBankCode = payBankCode;
+	}
+
+	public String getTel() {
+		return tel;
+	}
+
+	public void setTel(String tel) {
+		this.tel = tel;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getSwiftCode() {
+		return swiftCode;
+	}
+
+	public void setSwiftCode(String swiftCode) {
+		this.swiftCode = swiftCode;
+	}
+
+	public String getAbroad() {
+		return abroad;
+	}
+
+	public void setAbroad(String abroad) {
+		this.abroad = abroad;
+	}
+}

+ 103 - 6
sp-core/sp-base/src/main/java/com/pj/utils/ht/AESUtil.java

@@ -227,7 +227,7 @@ public class AESUtil {
 "dataType": "002",   // 根据第二步,选择类型
 "msgTime": "2023-08-24 16:57:26",  // 不用改
 "sign": "0aa1ba7c6bdbecbb1b1a53d59447f886",  // 不用改
-"data": "......"     //data参数从项目中 AESUtil类,234 - 246 行代码 寻找复制粘贴到这里
+"data": "......" //data参数从项目中 AESUtil类,234 - 246 行代码 寻找复制粘贴到这里
 }
 
 
@@ -250,16 +250,113 @@ CkB9nBTgtwQYyW+/luLX0P7AN7AG9vhXlSNzkpfp33/HoZX6MjrrBrQnRJkKy1nOeahRTV90bkIZYymu
         */
 
         System.out.println("--------AES_CBC加密解密---------");
-//        String cbcResult = encryptCBC("{ \"platSeqNo\": \"1111111111\", \"birplAddr\": \"云南昆明\", \"borderName\": \"张边民\",\"borderTel\": \"18896542158\",\"customsCode\": \"10086\", \"startDate\": \"2012-5-7\",\"endDate\": \"2022-8-9\", \"expiry\": \"2025-8-7\",\"fieldCode\": \"2546\",\"filingStatus\": \"1\", \"gencd\": \"2\", \"idCardNo\": \"452036547821563014\",\"idcdGcertPgoffNm\": \"云南海关\", \"localGovernmentNo\": \"0771\", \"putrecNo\": \"123456789\"}", RabbitMQ.ACC_KEY);
-        String cbcResult = encryptCBC("{\n" +
-                "\"areaNo\": \"场所代码111\", \"iEFlag\": \"进出口标志 I:进口\", \"areaName\": \"场所名称111\", \"channelNo\": \"通道代码111\", \"channelName\": \"通道名称111\", \"veNo\": \"车牌号码111\", \"crossWeight\": \"1000\", \"channelType\": \"2\", \"checkResult\": \"验放结果111\", \"manifestId\": \"运输批次号111\", \"billCode\": \"单证代码111\", \"checkTime\": \"2022-03-07 12:55:42\" }","klfksd78974s1d4f"); // RabbitmQ.ACC_KEY
+        String cbcResult = encryptCBC( "{\n" +
+                        "\"platSeqNo\": \"YSB0000000011\",\n" +
+                        "\"preNo\": \"PRENO00001\",\n" +
+                        "\"itrdclDeclareId\": \"SB000000001\",\n" +
+                        "\"declareId\": \"\",\n" +
+                        "\"declareType\": \"1\",\n" +
+                        "\"declareName\": \"陆毅\",\n" +
+                        "\"ciphertextIdno\": \"45010218561212367u\",\n" +
+                        "\"shopNo\": \"\",\n" +
+                        "\"shopName\": \"\",\n" +
+                        "\"orgPutrecNo\": \"\",\n" +
+                        "\"orgName\": \"\",\n" +
+                        "\"orgScc\": \"\",\n" +
+                        "\"veNo\": \"云ABW888\",\n" +
+                        "\"vehicleType\": \"4\",\n" +
+                        "\"btrnbBizModecd\": \"03\",\n" +
+                        "\"gFlow\": \"02\",\n" +
+                        "\"iEFlag\": \"I\",\n" +
+                        "\"fieldCode\": \"HS001\",\n" +
+                        "\"fieldName\": \"杨柳岸市场\",\n" +
+                        "\"customsCode\": \"GQ001\",\n" +
+                        "\"carPool\": \"1\",\n" +
+                        "\"note\": \"备注会后悔ddd\",\n" +
+                        "\"sumAmt\": \"160000\",\n" +
+                        "\"sumGrossWt\": \"230000\",\n" +
+                        "\"sumNetWt\": \"220000\",\n" +
+                        "\"trafMode\": \"大卡车\",\n" +
+                        "\"currCode\": \"人民币\",\n" +
+                        "\"packNo\": \"3\",\n" +
+                        "\"tradeCountry\": \"越南\",\n" +
+                        "\"mName\": \"LDJGQT加工企业\",\n" +
+                        "\"mScc\": \"LDJGQTSHTYXXDM\",\n" +
+                        "\"shareFlag\": \"0\",\n" +
+                        "\"dclType\": \"申报单类型\",\n" +
+                        "\"mdfblRvkRsn\": \"\",\n" +
+                        "\"borderFlag\": \"边民备案编号标记\",\n" +
+                        "\"delStatus\": \"启用\",\n" +
+                        "\"declStatus\": \"已申报\",\n" +
+                        "\"declTime\": \"2023-03-03\",\n" +
+                        "\"rcptTime\": \"2023-04-04\",\n" +
+                        "\"auditRemark\": \"审核备注\",\n" +
+                        "\"agentCode\": \"YSGJDLQYDM\",\n" +
+                        "\"manifestId\": \"YSGJPCH\",\n" +
+                        "\"shopPutrecNo\": \"SHOPBEIANBIANHAO\",\n" +
+                        "\"borderId\": \"边民id\",\n" +
+                        "\"msgId\": \"\",\n" +
+                        "\"entCode\": \"QIYECODE\",\n" +
+                        "\"entName\": \"QIYENAME\",\n" +
+                        "\"borderPeopleList\": [\n" +
+                        "{\n" +
+                        "\"platSeqNo\": \"YSBNO0000003\",\n" +
+                        "\"borderNo\": \"111\",\n" +
+                        "\"borderName\": \"陆毅\",\n" +
+                        "\"ciphertextIdno\": \"45010218561212367u\",\n" +
+                        "\"borderPutrecNo\": \"10000000000000003\",\n" +
+                        "}\n" +
+                        "],\n" +
+                        "\"borderPeopleLimitList\": [\n" +
+                        "{\n" +
+                        "\"platSeqNo\": \"YSBNO0000003\",\n" +
+                        "\"limitNo\": \"222\",\n" +
+                        "\"borderName\": \"陆毅\",\n" +
+                        "\"ciphertextIdno\": \"45010218561212367u\",\n" +
+                        "\"borderPutrecNo\": \"10000000000000003\",\n" +
+                        "\"codeTs\": \"GOODS001\",\n" +
+                        "\"gName\": \"榴莲\",\n" +
+                        "\"gLimit\": \"8000\",\n" +
+                        "\"gGrossWt\": \"230000\",\n" +
+                        "\"gNo\": \"01\",\n" +
+                        "}\n" +
+                        "],\n" +
+                        "\"goodsList\": [\n" +
+                        "{\n" +
+                        "\"platSeqNo\": \"YSBNO0000003\",\n" +
+                        "\"gNo\": \"01\",\n" +
+                        "\"codeTs\": \"GOODS001\",\n" +
+                        "\"gName\": \"榴莲\",\n" +
+                        "\"gModel\": \"100斤/箱\",\n" +
+                        "\"gQty\": \"7\",\n" +
+                        "\"qty1\": \"7\",\n" +
+                        "\"qty2\": \"7\",\n" +
+                        "\"grossWt\": \"230000\",\n" +
+                        "\"netWt\": \"220000\",\n" +
+                        "\"originCountry\": \"越南\",\n" +
+                        "\"gUnit\": \"箱\",\n" +
+                        "\"unit1\": \"吨\",\n" +
+                        "\"unit2\": \"柜\",\n" +
+                        "\"declPrice\": \"10000\",\n" +
+                        "\"declTotal\": \"160000\",\n" +
+                        "\"storageEnvm\": \"1\",\n" +
+                        "\"useTo\": \"出售\",\n" +
+                        "\"shopNo\": \"SP001\",\n" +
+                        "\"shopName\": \"什么景色都有杂货铺\",\n" +
+                        "\"ciqCode\": \"检疫检疫代码\",\n" +
+                        "\"ciqName\": \"检疫检疫名称\",\n" +
+                        "\"wrapType\": \"包装类型\"\n" +
+                        "}\n" +
+                        "]\n" +
+                        "}\n",
+                "klfksd78974s1d4f"); // RabbitmQ.ACC_KEY
         System.out.println("aes_cbc加密结果:" + cbcResult);
         System.out.println();
 
-        System.out.println("---------解密CBC---------");
+        /*System.out.println("---------解密CBC---------");
         String cbcDecrypt = decryptCBC(cbcResult, "klfksd78974s1d4f");// RabbitmQ.ACC_KEY
         System.out.println("aes解密结果:" + cbcDecrypt);
-        System.out.println();
+        System.out.println();*/
     }
 
 

+ 5 - 5
sp-generate/src/main/java/com/pj/SpGenerateApplication.java

@@ -23,7 +23,7 @@ public class SpGenerateApplication {
 		// ===================================  设置连接信息  ===================================
         FlyConfig config = new FlyConfig();
         config.setDriverClassName("com.mysql.cj.jdbc.Driver");
-        config.setUrl("jdbc:mysql://47.101.143.145:3006/leveltwo-system?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC");
+        config.setUrl("jdbc:mysql://106.15.1.216:3006/pay-system?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC");
         config.setUsername("yun_user");
         config.setPassword("yun_Root@1123");
         config.setPrintSql(true);		// 是否打印sql
@@ -37,8 +37,8 @@ public class SpGenerateApplication {
 
 		// ===================================  一些全局设置  ===================================
 		GenCfgManager.cfg
-			.setProjectPath("D:/project/market")	// 总项目地址 (生成代码的路径)
-	        .setServerProjectName("market-server/sp-service/level-two-server")				// 服务端 - 项目名称
+			.setProjectPath("D:/project/")	// 总项目地址 (生成代码的路径)
+	        .setServerProjectName("market-server/sp-service/payment-server")				// 服务端 - 项目名称
 //	        .setServerProjectName("sp-com/sp-core")			// 服务端 - 项目名称 (sp-com多模块版填此格式)
 	        .setCodePath("src/main/java/")					// 服务端代码 - 存放路径
 	        .setPackagePath( "com.pj")				// 服务端代码 - 总包名
@@ -64,9 +64,9 @@ public class SpGenerateApplication {
 			.setOutFC(false)					// 是否输出FC.java工厂类
 			.setDefaultMeunIcon("el-icon-folder-opened")	// 生成后台管理页面时,默认的菜单图标
 			.setWebLibImportWay(2) 			// 前端js库导入方式(1=cdn导入, 2=本地导入[需将sa-admin附带js包复制到kj文件夹])
-			 .addTableName("tb_item_rules")	// 添加要生成的表 (单个添加)
+			 .addTableName("bank_info_charges")	// 添加要生成的表 (单个添加)
 //			.addTableAll()		// 添加要生成的表 (一次性添加所有表)
-            .removeTableName("sp_role", "sp_role_permission", "sp_admin", "sp_apilog", "sp_cfg")	// 移除这些内置的表,不必生成代码
+//          .removeTableName("sp_role", "sp_role_permission", "sp_admin", "sp_apilog", "sp_cfg")	// 移除这些内置的表,不必生成代码
             ;
 
 		System.out.println("\n\n\n--------------------------------------------\n\n\n");

+ 25 - 11
sp-service/async-server/src/main/java/com/pj/rabbitmq/RabbitMQ.java

@@ -1,10 +1,12 @@
 package com.pj.rabbitmq;
 
-/**
- * MQ的基本配置
- * @Author Mechrevo
- * @Date 2023 08 25 12 14
- **/
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@ConfigurationProperties(prefix = "rabbit")
+@Component
 public class RabbitMQ {
 
 
@@ -14,27 +16,39 @@ public class RabbitMQ {
     /**
      *  发送方队列
      */
-    public static final String TEST_SEND_QUEUE = "testAccept";
+    public static final String TEST_SEND_QUEUE = "hs_shop_in";
 
     /**
      *  发送方路由键
      */
-    public static final String TEST_SEND_ROUTING_KEY = "testAcceptKey";
+    public static final String TEST_SEND_ROUTING_KEY = "hs_shop_in";
 
     /**
      *  接收方队列
      */
-    public static final String TEST_ACCEPT_QUEUE = "testSend";
+    public static final String TEST_ACCEPT_QUEUE = "hs_shop_out";
 
     /**
      *  接收方路由键
      */
-    public static final String TEST_ACCEPT_ROUTING_KEY = "testSendKey";
+    public static final String TEST_ACCEPT_ROUTING_KEY = "hs_shop_out";
 
 
     /**
      *  发送方MQ交换机名称
      */
-    public static final String MQ_DIRECT_EXCHANGE = "test_exchange";
-
+    public static final String MQ_DIRECT_EXCHANGE = "wlpt_exchange";
+
+    //#app-id;//sjf01
+    //#accKey;//klfksd78974s1d4f
+    //#发送方队列
+    private String testSendQueue;//hs_shop_in
+    //#发送方路由键
+    private String testSendRoutingKey;//hs_shop_in
+    //#接收方队列
+    private String testAcceptQueue;//hs_shop_out
+    //#接收方路由键
+    private String testAcceptRoutingKey;//hs_shop_out
+    //#发送方MQ交换机名称
+    private String mqDirectExchange;//wlpt_exchange
 }

+ 28 - 8
sp-service/async-server/src/main/java/com/pj/task/HtByteTask.java

@@ -83,19 +83,22 @@ public class HtByteTask {
      * * 005=商品基础信息
      * * 006=交易结算信息
      * * 007=放行记录(过卡记录)
+     * * 008=进口申报单
+     * * 010=进出口申报单退单
      */
     @Scheduled(cron = "*/9 * * * * ?")  // 测试阶段,每9秒扫描一次
     private void htByteTask() {
+        StaticLog.info("----------------航通数据处理定时任务开始----------------------");
         /*  测试mq */
 //        OrderDto orderDtoById = levelOneServerInterface.getOrderDtoById(8833342005355478419L);
 //        asyncServerInterface.sendLevelOneOrderDto(orderDtoById, DataType.DATA_TYPE_ONE.getCode());
         /*  测试mq */
         //扫描表内是否有待处理任务
         List<HtByte> byteList = htByteMapper.selectList(
-                new LambdaQueryWrapper<HtByte>().eq(HtByte::getFinishStatus, FinishStatus.FINISH_STATUS_ZERO.getCode()).orderByAsc(HtByte::getDataType));
+                new LambdaQueryWrapper<HtByte>().eq(HtByte::getFinishStatus, FinishStatus.FINISH_STATUS_ZERO.getCode()).orderByAsc(HtByte::getCreateTime));
         //判断是否有任务,没有则返回
         if (byteList.size() == 0) {
-            System.err.println("\n  ---  暂无待处理任务。" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "\n");
+            StaticLog.info("\n  ---  暂无待处理任务。" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "\n");
             return;
         }
         //执行任务处理流程
@@ -179,6 +182,11 @@ public class HtByteTask {
                     }
                     //购买边民列表
                     List<BordersListDto> bordersLists = JSON.parseArray(importDeclarePeople.getBordersList(), BordersListDto.class);
+                    if (bordersLists == null) {
+                        StaticLog.error("\n交易结算信息同步处理失败:购买边民列表为空!!!。 messageId = " + item.getMessageId() + "\n");
+                        methodHtByteTask.updateHtByteInfo(false, item, dataDto);
+                        break;
+                    }
                     //边民购买商品列表
                     List<BorderBuyGoodsListDto> buyGoodsList = JSON.parseArray(importDeclarePeople.getBorderBuyGoodsList(), BorderBuyGoodsListDto.class);
                     //商铺卖货物列表
@@ -191,16 +199,28 @@ public class HtByteTask {
                     tradeSettlementDto.setSellGoodsListDtoList(sellGoodsList);
                     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);
+                    flag = FeignFactory.levelOneServerInterface.tradeSettlementDto(tradeSettlementDto);
+                    methodHtByteTask.updateHtByteInfo(flag, item, dataDto);
+                    if (flag) {
+                        StaticLog.info("\n交易结算信息同步处理成功。 messageId = " + item.getMessageId() + "\n");
+                    } else {
+                        StaticLog.error("\n交易结算信息同步处理失败。 messageId = " + item.getMessageId() + "\n");
+                    }
                     break;
                 case "007":
                     //放行记录(过卡记录)
                     HtPassCardDTO htPassCardDTO = JSONObject.parseObject(body, HtPassCardDTO.class);
+                    //{"msgId":"987578382983278592","appId":"shop01","dataType":"007","msgTime":"2024-08-25 14:50:45","sign":"23370a204e1fa1c2a1c5a27f78947d52",
+                    // "data":"zo5yvhKGlGI4DFIbdwOa2eDjupWkiKvfWDGdNIbpX3WbDq4LsUhnTYh6aLPdj+w4l6OmVzLEjgh2/FC8MVmkYqCT6MZ401A8I8h7JYNXr+Gh5kU3vUCNEdOdxC8PcOKQKEBya4oggQjnC2cP2V39am9gCpCQ49rq76pcQh4+igji79vxJ7mISJ+iup/bY5Ps3EhTw2UC16cvnnt+ZHoM12Jz0JhnCMS9yvI1gPSx+vguo456ZIuuMaWLDiKU5TP5bXWJFyU3/XL7dgK9V5AGSg/nM3bHfiDyLLrREeeDt/ODQ4wUrjgVYLuNMSSJ543cCTrsDLc6+78VfoYhq7KxJXFb3DPV3vfxGKq9D5ymuViSBewscq7QFJumeEI5VExO"}
                     //系统接收到航通过卡记录且卡口类型为'3卡':车辆已出一级市场, 修改相对应的一级市场订单状态
                     if ("3卡".equals(htPassCardDTO.getChannelType())) {
-                        FeignFactory.levelOneServerInterface.orderFinish(htPassCardDTO);
+                        flag = FeignFactory.levelOneServerInterface.orderFinish(htPassCardDTO);
+                        methodHtByteTask.updateHtByteInfo(flag, item, dataDto);
+                        if (flag) {
+                            StaticLog.info("\n3卡放行记录(过卡记录)信息同步处理成功。 messageId = " + item.getMessageId() + "\n");
+                        } else {
+                            StaticLog.error("\n3卡放行记录(过卡记录)信息同步处理失败。 messageId = " + item.getMessageId() + "\n");
+                        }
                     }
                     break;
                 case "008":
@@ -209,9 +229,9 @@ public class HtByteTask {
                     boolean result = FeignFactory.levelOneServerInterface.importOrderDto(importOrderDto);
                     methodHtByteTask.updateHtByteInfo(result, item, dataDto);
                     if (result) {
-                        StaticLog.error("\n进口申报单同步处理成功。 messageId = " + item.getMessageId() + "\n");
+                        StaticLog.info("\n进口申报单同步处理成功。 messageId = " + item.getMessageId() + "\n");
                     } else {
-                        StaticLog.info("\n进口申报单同步处理失败。 messageId = " + item.getMessageId() + "\n");
+                        StaticLog.error("\n进口申报单同步处理失败。 messageId = " + item.getMessageId() + "\n");
                     }
                     break;
                 case "009":

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

@@ -117,7 +117,7 @@ public class HtTradeSettlementService extends ServiceImpl<HtTradeSettlementMappe
         //获取商铺卖货物列表(目前逻辑为:当前商铺卖货集合,只有当前订单商品(一个商品))
         List<SellGoodsListDto> sellGoodsListDtoList = tradeSettlementDto.getSellGoodsListDtoList();
 
-        TbTradeArea tbTradeArea = tbTradeAreaService.updateHandler(tradeSettlementDto.getFieldCode(), tradeSettlementDto.getFieldName());
+        TbTradeArea tbTradeArea = tbTradeAreaService.updateHandler(tradeSettlementDto.getFieldCode(), tradeSettlementDto.getFieldName(), "");
         Date applyTime = new Date(Long.parseLong(tradeSettlementDto.getDeclTime()));
         htTradeSettlement.setDeclTime(DateUtil.format(applyTime,"yyyy-MM-dd HH:mm:ss"));
         BigDecimal totalPrice = BigDecimal.ZERO;
@@ -142,7 +142,7 @@ public class HtTradeSettlementService extends ServiceImpl<HtTradeSettlementMappe
             //获取商品单价
             if(sellGoodsListDtoList.size() > 0) tbOrder.setDeclPrice(sellGoodsListDtoList.get(0).getDeclPrice());
 
-                //根据边民身份证号获取边民的订单商品列表(目前逻辑为一个边民对应一个商品)
+            //根据边民身份证号获取边民的订单商品列表(目前逻辑为一个边民对应一个商品)
             List<BorderBuyGoodsListDto> collect = borderBuyGoodsListDtoList.stream().filter(borderBuyGoods -> item.getIdno().equals(borderBuyGoods.getIdno())).collect(Collectors.toList());
             if (collect.size() > 0) {
                 //根据商品编号查询商品表

+ 6 - 3
sp-service/level-one-server/src/main/java/com/pj/tb_cooperative/TbCooperativeService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.pj.api.client.admin.AdminInterface;
 import com.pj.api.consts.FeignFactory;
 import com.pj.api.dto.AdminCreateDto;
 import com.pj.api.dto.CooperativeDto;
@@ -40,6 +41,8 @@ public class TbCooperativeService extends ServiceImpl<TbCooperativeMapper, TbCoo
     TbCooperativeMapper tbCooperativeMapper;
     @Resource
     private TbTradeAreaService tbTradeAreaService;
+    @Autowired
+    private AdminInterface adminInterface;
 
     /**
      * 增
@@ -98,7 +101,7 @@ public class TbCooperativeService extends ServiceImpl<TbCooperativeMapper, TbCoo
         TbCooperative tbCooperative = new TbCooperative();
         BeanUtils.copyProperties(cooperativeDto, tbCooperative);
         tbCooperative.setDeleteStatus(DeleteStatus.DELETE_STATUS_ON.getCode());
-        TbTradeArea tbTradeArea = tbTradeAreaService.updateHandler(cooperativeDto.getFieldCode(), "");
+        TbTradeArea tbTradeArea = tbTradeAreaService.updateHandler(cooperativeDto.getFieldCode(), "", "");
         tbCooperative.setTradeAreaId(tbTradeArea.getId()).setTradeAreaName(tbTradeArea.getName());
         //查询是否有数据
         List<TbCooperative> tbCooperativeList = tbCooperativeMapper
@@ -113,12 +116,12 @@ public class TbCooperativeService extends ServiceImpl<TbCooperativeMapper, TbCoo
                 String code = RandomUtil.randomNumbers(6);
                 SystemObject.smsFactory.handler().sendSMS(cooperativeDto.getCorrepTel(), "您的密码是" + code + "。请及时修改密码");
                 AdminCreateDto dto=new AdminCreateDto();
-                dto.setTradeAreaId(Long.parseLong(cooperativeDto.getFieldCode()));
+                dto.setTradeAreaId(tbTradeArea.getId());
                 dto.setPassword(code);
                 dto.setName(cooperativeDto.getCorrepTel());
                 dto.setRoleId(99); //所属角色ID,当前是99
                 dto.setType("01");//类型(00=运营管理者,01=合作社)
-                FeignFactory.adminInterface.createAdmin(dto);
+                adminInterface.createAdmin(dto);
             }
             return save;
         }

+ 1 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_goods/TbGoodsService.java

@@ -124,7 +124,7 @@ public class TbGoodsService extends ServiceImpl<TbGoodsMapper, TbGoods> implemen
                     .eq(TbGoods::getCode, goodsDto.getHsCode()));
             return del;
         }
-        TbTradeArea tbTradeArea = tbTradeAreaService.updateHandler(goodsDto.getFieldCode(), "");
+        TbTradeArea tbTradeArea = tbTradeAreaService.updateHandler(goodsDto.getFieldCode(), "", "");
         //商品分类
         TbGoodsType goodsType = tbGoodsTypeService.findByCode(goodsDto.getThrItemCode());
         Date now = new Date();

+ 1 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_group/TbGroupService.java

@@ -373,7 +373,7 @@ public class TbGroupService extends ServiceImpl<TbGroupMapper, TbGroup> implemen
      */
     public boolean groupDto(HtGroupDto groupDto) {
         log.info("还是处理互助组信息:{}",JSONUtil.toJsonStr(groupDto));
-        TbTradeArea tbTradeArea = tbTradeAreaService.updateHandler(groupDto.getFieldCode(), "");
+        TbTradeArea tbTradeArea = tbTradeAreaService.updateHandler(groupDto.getFieldCode(), "", "");
         //根据编号进行事务处理
         TbGroup tbGroup = this.findByAreaCodeAndSeqCode(tbTradeArea.getId(), groupDto.getPlatSeqNo());
         if (tbGroup == null) {

+ 9 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_import_order/ImportOrderVo.java

@@ -2,6 +2,8 @@ package com.pj.tb_import_order;
 
 import lombok.Data;
 
+import java.util.Date;
+
 /**
  * @author lbl
  */
@@ -11,7 +13,7 @@ public class ImportOrderVo {
 
 	private Long id;
 
-	private Integer platSeqNo;
+	private String platSeqNo;
 	private String preNo;
 	private String itrdclDeclareId;
 	private String declareId;
@@ -71,4 +73,10 @@ public class ImportOrderVo {
 	 */
 	private Double gLimit;
 
+	private String cooperEntrustImg;
+	private String judgeBy;
+	private Integer judgeStatus;
+	private String judgeContent;
+	private Date judgeTime;
+
 }

+ 7 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_import_order/TbImportOrder.java

@@ -5,6 +5,8 @@ import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.pj.common.core.annotation.Excel;
 import lombok.EqualsAndHashCode;
 
 import lombok.Data;
@@ -98,5 +100,10 @@ public class TbImportOrder extends Model<TbImportOrder> implements Serializable
 	private String borderPeopleLimitList;
 	private String goodsList;
 
+	private String cooperEntrustImg;
+	private String judgeBy;
+	private Integer judgeStatus;
+	private String judgeContent;
+	private Date judgeTime;
 
 }

+ 14 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_import_order/TbImportOrderAppController.java

@@ -1,5 +1,6 @@
 package com.pj.tb_import_order;
 
+import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.pj.utils.sg.AjaxJson;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -21,6 +22,12 @@ public class TbImportOrderAppController {
 	TbImportOrderService tbImportOrderService;
 
 
+	/** 查 - 根据id */
+	@RequestMapping("getById")
+	public AjaxJson getById(Long id){
+		TbImportOrder t = tbImportOrderService.getById(id);
+		return AjaxJson.getSuccessData(t);
+	}
 	/**
 	 * 获取进口申报单详情
 	 * @param orderId
@@ -30,4 +37,11 @@ public class TbImportOrderAppController {
 	public AjaxJson importOrderDetail(@RequestParam("orderId")Long orderId){
 		return AjaxJson.getSuccessData(tbImportOrderService.importOrderDetail(orderId));
 	}
+
+	/** 改 */
+	@RequestMapping("update")
+	public AjaxJson update(TbImportOrder t){
+		boolean b = tbImportOrderService.updateById(t);
+		return AjaxJson.getSuccess();
+	}
 }

+ 7 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_import_order/TbImportOrderController.java

@@ -76,10 +76,16 @@ public class TbImportOrderController {
 		return AjaxJson.getPageData(so.getDataCount(), list);
 	}
 
+	@PostMapping("audit")
+	@SaCheckPermission(TbImportOrder.PERMISSION_CODE_ADD)
+	public AjaxJson audit(Long id, Integer judgeStatus, @RequestParam(value = "judgeContent",required = false)String judgeContent) {
+		return AjaxJson.toAjax(tbImportOrderService.audit(id, judgeStatus, judgeContent));
+	}
 
-	/*-----           正常业务逻辑👆👆    rpc远程调用👇👇 -----*/
 
 
+	/*-----           正常业务逻辑👆👆    rpc远程调用👇👇 -----*/
+
 	/** 远程调用 进口申报单同步 */
 	@PostMapping("rpc/importOrderDto")
 	public boolean importOrderDto(@RequestBody HtImportOrderDto importOrderDto) {

+ 2 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_import_order/TbImportOrderMapper.xml

@@ -30,7 +30,8 @@
 			<if test=' this.has("preIeportNo") '> and pre_ieport_no = #{preIeportNo} </if>
 			<if test=' this.has("buyConfirmStatus") '> and buy_confirm_status = #{buyConfirmStatus} </if>
 			<if test=' this.has("payStatus") '> and pay_status = #{payStatus} </if>
-
+			<if test=' this.has("platSeqNo") '> and plat_seq_no like concat('%',#{platSeqNo},'%') </if>
+			<if test=' this.has("veNo") '> and ve_no like concat('%',#{veNo},'%') </if>
 
 			<if test=' this.has("createTime") '> and create_time = #{createTime} </if>
 			<if test=' this.has("createBy") '> and create_by = #{createBy} </if>

+ 10 - 0
sp-service/level-one-server/src/main/java/com/pj/tb_import_order/TbImportOrderService.java

@@ -1,5 +1,6 @@
 package com.pj.tb_import_order;
 
+import java.util.Date;
 import java.util.List;
 
 import com.alibaba.fastjson.JSON;
@@ -10,6 +11,7 @@ import com.pj.api.dto.HtImportOrderDto;
 import com.pj.common.core.exception.ServiceException;
 import com.pj.current.dto.APPLoginUserInfo;
 import com.pj.current.satoken.StpAPPUserUtil;
+import com.pj.current.satoken.StpUserUtil;
 import com.pj.project4sp.SP;
 import com.pj.tb_import_goods.TbImportGoods;
 import com.pj.tb_import_goods.TbImportGoodsMapper;
@@ -90,6 +92,14 @@ public class TbImportOrderService extends ServiceImpl<TbImportOrderMapper, TbImp
 		return importOrderVo;
 	}
 
+	public boolean audit(Long id, Integer judgeStatus, String judgeContent) {
+		TbImportOrder importOrder = tbImportOrderMapper.selectById(id);
+		if(importOrder == null) throw new ServiceException("进口申报单信息异常,请联系管理员!");
+		String name = StpUserUtil.getLoginName();
+		importOrder.setJudgeStatus(judgeStatus).setJudgeContent(judgeContent).setJudgeTime(new Date()).setJudgeBy(name);
+		return updateById(importOrder);
+	}
+
 	/** 远程调用 进口申报单同步 */
 	public boolean importOrderDto(HtImportOrderDto importOrderDto) {
 

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

@@ -197,7 +197,7 @@ public class TbOrder extends Model<TbOrder> implements Serializable {
 	private Date recordTime;
 
 	/**
-	 * 退款状态[1=退款成功 2=退款失败]
+	 * 退款状态[0=初始值 1=退款成功 2=退款失败 3=退款中]
 	 */
 	private Integer refundStatus;
 
@@ -339,7 +339,7 @@ public class TbOrder extends Model<TbOrder> implements Serializable {
 	/**
 	 * 边民确认
 	 */
-	private Integer peopleConfirmStatus=0;
+	private Integer peopleConfirmStatus;
 
 	/**
 	 * 边民确认类型
@@ -354,7 +354,7 @@ public class TbOrder extends Model<TbOrder> implements Serializable {
 	/**
 	 * 互助委托申报确认状态
 	 */
-	private Integer cooperEntrustStatus=0;
+	private Integer cooperEntrustStatus;
 
 	/**
 	 * 互助委托申报确认时间
@@ -364,7 +364,7 @@ public class TbOrder extends Model<TbOrder> implements Serializable {
 	/**
 	 * 边民进口申报确认状态
 	 */
-	private Integer applyConfirmStatus=0;
+	private Integer applyConfirmStatus;
 
 	/**
 	 * 边民进口申报确认时间
@@ -514,7 +514,7 @@ public class TbOrder extends Model<TbOrder> implements Serializable {
 	/**
 	 * (一级市场)订单扣款回执状态[0=初始值 1=扣款成功 2=扣款失败]
 	 */
-	private Integer Sxb010Status=0;
+	private Integer Sxb010Status;
 	/**
 	 * (一级市场)订单扣款回执时间
 	 */

+ 6 - 2
sp-service/level-one-server/src/main/java/com/pj/tb_order/TbOrderAppController.java

@@ -105,8 +105,8 @@ public class TbOrderAppController {
 
 	/** app首页获取边民未确认订单 */
 	@RequestMapping("getNoConfirmOrder")
-	public AjaxJson getNoConfirmOrder() {
-		return AjaxJson.getSuccessData(tbOrderService.getByDeclareType());
+	public AjaxJson getNoConfirmOrder(@RequestParam("cooper_entrust") int cooper_entrust) {
+		return AjaxJson.getSuccessData(tbOrderService.getByDeclareType(cooper_entrust));
 	}
 
 	/** 获取一级市场边民订单的所有确认状态 */
@@ -131,6 +131,10 @@ public class TbOrderAppController {
 		return AjaxJson.toAjax(tbOrderService.cooperOrder(orderId));
 	}
 
+	@PostMapping("orderRefund")
+    public AjaxJson orderRefund(@RequestParam("id")Long id) {
+        return AjaxJson.toAjax(tbOrderService.orderRefund(id));
+    }
 
 	/*-----           正常业务逻辑👆👆    rpc远程调用👇👇 -----*/
 

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

@@ -15,6 +15,7 @@ import com.pj.api.client.payment_server.PaymentServerInterface;
 import com.pj.api.consts.FeignFactory;
 import com.pj.api.dto.*;
 import com.pj.common.core.exception.ServiceException;
+import com.pj.common.core.utils.StringUtils;
 import com.pj.current.config.SystemObject;
 import com.pj.current.dto.APPLoginUserInfo;
 import com.pj.current.satoken.StpAPPUserUtil;
@@ -26,6 +27,8 @@ import com.pj.tb_enterprise.TbEnterpriseMapper;
 import com.pj.tb_goods_transit.TbGoodsTransit;
 import com.pj.tb_goods_transit.TbGoodsTransitMapper;
 import com.pj.tb_goods_transit.TbGoodsTransitService;
+import com.pj.tb_import_order.TbImportOrder;
+import com.pj.tb_import_order.TbImportOrderMapper;
 import com.pj.tb_order.vo.ConfirmVo;
 import com.pj.tb_order.vo.OrderVo;
 import com.pj.tb_order.vo.PeopleConfirmVo;
@@ -62,7 +65,8 @@ public class TbOrderService extends ServiceImpl<TbOrderMapper, TbOrder> implemen
      */
     @Autowired
     private TbOrderMapper tbOrderMapper;
-
+    @Autowired
+    TbImportOrderMapper tbImportOrderMapper;
     /**
      * 互市组
      */
@@ -403,8 +407,8 @@ public class TbOrderService extends ServiceImpl<TbOrderMapper, TbOrder> implemen
         paymentDto.setDeclPrice(tbOrder.getDeclPrice());
 
         paymentDto.setTotalPrice(BigDecimal.valueOf(tbOrder.getTotalPrice()));
-        Double resalePrice = levelTwoServerInterface.getResalePriceByLevelOneOrderId(tbOrder.getId());
-        paymentDto.setResalePrice(BigDecimal.valueOf(resalePrice));
+        //Double resalePrice = levelTwoServerInterface.getResalePriceByLevelOneOrderId(tbOrder.getId());
+        //paymentDto.setResalePrice(BigDecimal.valueOf(resalePrice));
 
         TbPeople tbPeople = tbPeopleService.getById(tbOrder.getBuyUserId());
         paymentDto.setBankCode(tbPeople.getBankCode());
@@ -439,6 +443,15 @@ public class TbOrderService extends ServiceImpl<TbOrderMapper, TbOrder> implemen
         tbOrder.setPeopleConfirmTime(new Date())
                 .setPeopleConfirmStatus(ConfirmStatus.CONFIRM_STATUS_ONE.getCode())
                 .setUpdateTime(new Date());
+        //测试用,跳过银行接口
+        tbOrder.setTradeStatus(TradeStatus.TRADE_STATUS_ONE.getCode()); //已支付
+        tbOrder.setTradeTime(new Date()); //支付回执时间
+        tbOrder.setPayType(0); //支付类型
+        if ("1".equals(tbOrder.getDeclareType())) {
+            tbOrder.setFinishStatus(FinishStatus.FINISH_STATUS_ONE.getCode()); //已完成->完成后可以进行转售
+            tbOrder.setFinishTime(new Date());
+        }
+
         boolean update = super.updateById(tbOrder);
         // TODO: 2023/8/28 边民发起支付申请,调用银行接口:验证边民支付信息,将货款先存入银行第三方账户,并给出回执
         PaymentDto paymentDto = this.getPaymentData(tbOrder);
@@ -527,6 +540,10 @@ public class TbOrderService extends ServiceImpl<TbOrderMapper, TbOrder> implemen
         wrapper.set(TbOrder::getUpdateName, appLoginInfo.getLoginName());
         wrapper.set(TbOrder::getUpdateTime, new Date());
 
+        //测试用,跳过银行接口
+        wrapper.set(TbOrder::getFinishStatus, FinishStatus.FINISH_STATUS_ONE.getCode());//已完成->完成后可以进行转售
+        wrapper.set(TbOrder::getFinishTime, new Date());
+
         wrapper.eq(TbOrder::getId, orderId);
         boolean result = update(wrapper);
 
@@ -554,8 +571,9 @@ public class TbOrderService extends ServiceImpl<TbOrderMapper, TbOrder> implemen
 
     /**
      * 判断当前边民的边民订单是否委托
+     * cooper_entrust:是否校验互助委托协议【1校验  2不校验】
      */
-    public OrderVo getByDeclareType() {
+    public OrderVo getByDeclareType(int cooper_entrust) {
         APPLoginUserInfo appLoginInfo = StpAPPUserUtil.getAPPLoginInfo();
         TbPeople tbPeople = tbPeopleMapper.selectById(appLoginInfo.getFk());
         if (tbPeople == null) throw new ServiceException("当前用户不存在,请联系管理员!");
@@ -565,8 +583,20 @@ public class TbOrderService extends ServiceImpl<TbOrderMapper, TbOrder> implemen
         List<TbOrder> declareList2 = orderList.stream().filter(item -> !"1".equals(item.getDeclareType()) &&
                 (item.getPeopleConfirmStatus() == 0 || item.getCooperEntrustStatus() == 0 || item.getApplyConfirmStatus() == 0)).collect(Collectors.toList());
         if (declareList2.size() > 0) {
-            BeanUtils.copyProperties(declareList2.get(0), orderVo);
-            return orderVo;
+            if(1 == cooper_entrust) {
+                List<Long> removeList = new ArrayList<>();
+                declareList2.forEach(item -> {
+                    TbImportOrder importOrder = tbImportOrderMapper.selectById(item.getImportOrderId());
+                    if (StringUtils.isNotEmpty(importOrder.getCooperEntrustImg()) && 0 == importOrder.getJudgeStatus()) {//已上传互助委托协议并且未审核
+                        removeList.add(item.getImportOrderId());
+                    }
+                });
+                declareList2 = declareList2.stream().filter(item -> !removeList.contains(item.getImportOrderId())).collect(Collectors.toList());
+            }
+            if (declareList2.size() > 0) {
+                BeanUtils.copyProperties(declareList2.get(0), orderVo);
+                return orderVo;
+            }
         }
 
         //未被委托订单,并且订单未确认
@@ -590,7 +620,26 @@ public class TbOrderService extends ServiceImpl<TbOrderMapper, TbOrder> implemen
         return list(ew);
     }
 
+    /**
+     * app调用 退货退款
+     * 订单交易确认之后并且银行返回SXB011(银行扣边民的款成功)后,订单状态完成之前,边民可做退货退款操作
+     */
+    public boolean orderRefund(Long id) {
+        TbOrder order = getById(id);
+        if(order.getPeopleConfirmStatus() != 1 || order.getSxb010Status() != 1 || order.getFinishStatus() == 1 || order.getRefundStatus() != 0)
+            throw new ServiceException("当前订单状态已改变,不可做退款操作,请刷新后操作!");
 
+        PaymentDto paymentDto = this.getPaymentData(order);
+        paymentServerInterface.sendSXB013(paymentDto);
+
+        LambdaUpdateWrapper<TbOrder> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(TbOrder::getRefundStatus, 3);//退款中
+        updateWrapper.set(TbOrder::getRefundTime, new Date());//退款时间
+        updateWrapper.eq(TbOrder::getId, id);
+        boolean update = this.update(updateWrapper);
+
+        return update;
+    }
 
     /*-----           正常业务逻辑👆👆    rpc远程调用👇👇 -----*/
 
@@ -621,6 +670,8 @@ public class TbOrderService extends ServiceImpl<TbOrderMapper, TbOrder> implemen
 
         //修改边民订单的查验结果
         LambdaUpdateWrapper<TbOrder> updateWrapper1 = new LambdaUpdateWrapper<>();
+        updateWrapper1.set(TbOrder::getRefundStatus, 3);//退款中
+        updateWrapper1.set(TbOrder::getRefundTime, new Date());//退款时间
         updateWrapper1.set(TbOrder::getCheckPassStatus, 2);//查验结果[1=查验通过 2=查验不通过]
         updateWrapper1.set(TbOrder::getCheckPassTime, new Date());//查验时间(不通过)
         updateWrapper1.eq(TbOrder::getTradeAreaId, htDeclareChargebackDto.getFieldCode());
@@ -787,4 +838,6 @@ public class TbOrderService extends ServiceImpl<TbOrderMapper, TbOrder> implemen
         return true;
     }
 
+
+
 }

+ 13 - 3
sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleAppController.java

@@ -1,11 +1,10 @@
 package com.pj.tb_people;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.pj.api.dto.BankInfoDto;
 import com.pj.utils.sg.AjaxJson;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -41,4 +40,15 @@ public class TbPeopleAppController {
         return tbPeopleService.saveBankByPeople(id, bankName, bankAccount);
     }
 
+    /** 根据边民姓名与身份证号查询边民是否存在 */
+    @PostMapping("rpc/getByidCard")
+    public boolean getByidCard(@RequestParam("name")String name, @RequestParam("idCard")String idCard) {
+        return tbPeopleService.getByidCard(name, idCard);
+    }
+
+    /** 边民备案验证查询-银行回复新开户或变更数据 */
+    @PostMapping("rpc/updateBySXB005")
+    public boolean updateBySXB005(@RequestBody BankInfoDto bankInfoDto) {
+        return tbPeopleService.updateBySXB005(bankInfoDto);
+    }
 }

+ 9 - 1
sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleController.java

@@ -215,7 +215,15 @@ public class TbPeopleController {
         if(declaration)return AjaxJson.getSuccess();
         return AjaxJson.getError();
     }
-
+    /** 保存银行卡信息 */
+    @RequestMapping("saveBankInfo")
+    public AjaxJson saveBankByPeople(@RequestParam("id")Long id, @RequestParam("bankName")String bankName, @RequestParam("bankAccount")String bankAccount) {
+        boolean result = tbPeopleService.saveBankByPeople(id, bankName, bankAccount);
+        if (result) {
+            return AjaxJson.getSuccess("修改成功!");
+        }
+        return AjaxJson.getError("修改失败!");
+    }
     /**
      * 数据导入接口
      *

+ 2 - 2
sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleMapper.xml

@@ -86,12 +86,12 @@
 		<include refid="select_sql"></include>
 		<where>
 			<if test=' this.has("id") '> and id = #{id} </if>
-			<if test=' this.has("name") '> and name = #{name} </if>
+			<if test=' this.has("name") '> and name like concat('%',#{name},'%') </if>
 			<if test=' this.has("code") '> and code = #{code} </if>
 			<if test=' this.has("sex") '> and sex = #{sex} </if>
 			<if test=' this.has("age") '> and age = #{age} </if>
 			<if test=' this.has("idCard") '> and id_card = #{idCard} </if>
-			<if test=' this.has("phone") '> and phone = #{phone} </if>
+			<if test=' this.has("phone") '> and phone like concat('%',#{phone},'%') </if>
 			<if test=' this.has("bankNo") '> and bank_no = #{bankNo} </if>
 			<if test=' this.has("bankCode") '> and bank_code = #{bankCode} </if>
 			<if test=' this.has("bankName") '> and bank_name = #{bankName} </if>

+ 57 - 15
sp-service/level-one-server/src/main/java/com/pj/tb_people/TbPeopleService.java

@@ -9,10 +9,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.pj.api.client.admin.AdminInterface;
 import com.pj.api.consts.FeignFactory;
-import com.pj.api.dto.AppUserCreateDTO;
-import com.pj.api.dto.AppUserDto;
-import com.pj.api.dto.HtPeopleDto;
-import com.pj.api.dto.PeopleDto;
+import com.pj.api.dto.*;
 import com.pj.common.core.exception.ServiceException;
 import com.pj.current.dto.PCLoginUserInfo;
 import com.pj.current.satoken.StpUserUtil;
@@ -552,6 +549,7 @@ public class TbPeopleService extends ServiceImpl<TbPeopleMapper, TbPeople> imple
             tbPeople = new TbPeople();
         }
         //数据拷贝
+        peopleDto.setId(tbPeople.getId());
         BeanUtils.copyProperties(peopleDto, tbPeople);
         tbPeople.setSex(Integer.valueOf(peopleDto.getGencd().trim()));
         tbPeople.setPhone(peopleDto.getBorderTel());
@@ -559,26 +557,24 @@ public class TbPeopleService extends ServiceImpl<TbPeopleMapper, TbPeople> imple
         tbPeople.setName(peopleDto.getBorderName());
         //设置基本信息
         tbPeople.setDeleteStatus(DeleteStatus.DELETE_STATUS_ON.getCode()); // 逻辑删除,默认可用
-        tbPeople.setCreateTime(new Date()); // 创建时间
-        tbPeople.setCreateName("航通"); // 创建人
         tbPeople.setStatus(Status.STATUS_ONE.getCode());  // 可用状态
         tbPeople.setIsLock(IsLock.IS_LOCK_ON.getCode());  // 为被锁定状态
         tbPeople.setJudgeStatus(JudgeStatus.JUDGE_STATUS_ONE.getCode()); // 默认审核通过
-        TbTradeArea tbTradeArea = tbTradeAreaService.updateHandler(peopleDto.getFieldCode(), "");
+        TbTradeArea tbTradeArea = tbTradeAreaService.updateHandler(peopleDto.getFieldCode(), "", "");
         tbPeople.setTradeAreaId(tbTradeArea.getId());
         tbPeople.setTradeAreaName(tbTradeArea.getName());
-        /**备案编号,如果为
-         新增备案,传空值;
-         如果为变更备案,
-         必须传值;*/
-      //  this.saveOrUpdate(tbPeople);
+        /**备案编号,如果为新增备案,传空值;如果为变更备案,必须传值;*/
+
         if (isNew){
+            tbPeople.setCreateTime(new Date()); // 创建时间
+            tbPeople.setCreateName("航通"); // 创建人
             this.save(tbPeople);
         }else {
+            tbPeople.setUpdateTime(new Date()); // 修改时间
+            tbPeople.setUpdateName("航通"); // 修改人
             this.updateById(tbPeople);
         }
         //新增
-
         if (isNew) {
             //给边民生成账号
             AppUserCreateDTO createDTO = new AppUserCreateDTO();
@@ -587,9 +583,27 @@ public class TbPeopleService extends ServiceImpl<TbPeopleMapper, TbPeople> imple
             createDTO.setUserType(UserType.USER_TYPE_PEOPLE.getCode() + "");
             createDTO.setPhone(peopleDto.getBorderTel());
             createDTO.setName(peopleDto.getBorderName());
-            createDTO.setFkId(tbPeople.getId() + "");
-            FeignFactory.adminInterface.createAccount(createDTO);
+            createDTO.setFkId(tbPeople.getId());
+            adminInterface.createAccount(createDTO);
             return true;
+        } else {
+            AppUserDto appUserDto = adminInterface.getByFkId(tbPeople.getId());
+            if(appUserDto == null) {
+                //给边民生成账号
+                AppUserCreateDTO createDTO = new AppUserCreateDTO();
+                createDTO.setAuth("1");
+                createDTO.setAuthTime(new Date());
+                createDTO.setUserType(UserType.USER_TYPE_PEOPLE.getCode() + "");
+                createDTO.setPhone(peopleDto.getBorderTel());
+                createDTO.setName(peopleDto.getBorderName());
+                createDTO.setFkId(tbPeople.getId());
+                adminInterface.createAccount(createDTO);
+            } else {
+                appUserDto.setPhone(peopleDto.getBorderTel());
+                appUserDto.setName(peopleDto.getBorderName());
+                appUserDto.setUpdateTime(new Date());
+                adminInterface.saveAppUserInfo(appUserDto);
+            }
         }
         return true;
     }
@@ -680,4 +694,32 @@ public class TbPeopleService extends ServiceImpl<TbPeopleMapper, TbPeople> imple
 
         return update(wrapper);
     }
+
+    /**
+     * 根据边民姓名与身份证号查询边民是否存在
+     */
+    public boolean getByidCard(String name, String idCard) {
+        LambdaQueryWrapper<TbPeople> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TbPeople::getIdCard, idCard);
+        wrapper.eq(TbPeople::getName, name);
+
+        List<TbPeople> list = this.list(wrapper);
+        return list.size() > 0;
+    }
+
+    /**
+     * 边民备案验证查询-银行回复新开户或变更数据
+     */
+    public boolean updateBySXB005(BankInfoDto bankInfoDto) {
+        LambdaUpdateWrapper<TbPeople> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(TbPeople::getPhone, bankInfoDto.getTel());
+        wrapper.set(TbPeople::getBankNo, bankInfoDto.getPayBankCode());
+        wrapper.set(TbPeople::getBankCode, bankInfoDto.getAccount());
+
+        wrapper.eq(TbPeople::getIdCard, bankInfoDto.getPapersNo());
+        wrapper.eq(TbPeople::getName, bankInfoDto.getName());
+
+        boolean update = update(wrapper);
+        return update;
+    }
 }

+ 93 - 86
sp-service/level-one-server/src/main/java/com/pj/tb_shop/TbShop.java

@@ -13,7 +13,7 @@ import java.util.Date;
 
 /**
  * Model: tb_shop -- 铺位
- * @author yzs 
+ * @author yzs
  */
 @Data
 @Accessors(chain = true)
@@ -23,15 +23,15 @@ public class TbShop extends Model<TbShop> implements Serializable {
 
 	// ---------- 模块常量 ----------
 	/**
-	 * 序列化版本id 
+	 * 序列化版本id
 	 */
-	private static final long serialVersionUID = 1L;	
+	private static final long serialVersionUID = 1L;
 	/**
-	 * 此模块对应的表名 
+	 * 此模块对应的表名
 	 */
-	public static final String TABLE_NAME = "tb_shop";	
+	public static final String TABLE_NAME = "tb_shop";
 	/**
-	 * 此模块对应的权限码 
+	 * 此模块对应的权限码
 	 */
 	public static final String PERMISSION_CODE = "tb-shop";
 	public static final String PERMISSION_CODE_ADD = "tb-shop-add";
@@ -43,216 +43,223 @@ public class TbShop extends Model<TbShop> implements Serializable {
 
 	// ---------- 表中字段 ----------
 	/**
-	 * 主键 
+	 * 主键
 	 */
 	@TableId(type = IdType.AUTO)
 	private Long id;
 
 	/**
-	 *  
+	 *
 	 */
-	private Long enterpriseId;	
+	private Long enterpriseId;
 
 	/**
-	 * 互市区id 
+	 * 互市区id
 	 */
-	private Long tradeAreaId;	
+	private Long tradeAreaId;
 
 	/**
-	 * 互市区名称 
+	 * 互市区名称
 	 */
-	private String tradeAreaName;	
+	private String tradeAreaName;
 
 	/**
-	 *  
+	 *
 	 */
-	private String address;	
+	private String address;
 
 	/**
-	 *  
+	 *
 	 */
-	private String addressIds;	
+	private String addressIds;
 
 	/**
-	 * 区域(A区=A区,B区=B区,C区=C区) 
+	 * 区域(A区=A区,B区=B区,C区=C区)
 	 */
-	private String area;	
+	private String area;
 
 	/**
-	 * 是否可用(0=否,1=是) 
+	 * 是否可用(0=否,1=是)
 	 */
 	private Integer status;
 
 	/**
-	 *  
+	 *
 	 */
-	private String remark;	
+	private String remark;
 
 	/**
-	 *  
+	 *
 	 */
-	private String enterpriseName;	
+	private String enterpriseName;
 
 	/**
-	 * 创建时间 
+	 * 创建时间
 	 */
-	private Date createTime;	
+	private Date createTime;
 
 	/**
-	 * 创建者id 
+	 * 创建者id
 	 */
-	private String createBy;	
+	private String createBy;
 
 	/**
-	 * 创建者名称 
+	 * 创建者名称
 	 */
-	private String createName;	
+	private String createName;
 
 	/**
-	 * 更新者id 
+	 * 更新者id
 	 */
-	private String updateBy;	
+	private String updateBy;
 
 	/**
-	 * 更新者名称 
+	 * 更新者名称
 	 */
-	private String updateName;	
+	private String updateName;
 
 	/**
-	 * 更新时间 
+	 * 更新时间
 	 */
-	private Date updateTime;	
+	private Date updateTime;
 
 	/**
-	 * 删除状态 
+	 * 删除状态
 	 */
 	private Integer deleteStatus;
 
 	/**
-	 * 地方平台的内部业务编号,每次申请都是新编号 
+	 * 地方平台的内部业务编号,每次申请都是新编号
 	 */
-	private String platSeqNo;	
+	private String platSeqNo;
 
 	/**
-	 * 商铺名称 
+	 * 商铺名称
 	 */
-	private String shopName;	
+	private String shopName;
 
 	/**
-	 * 商铺编码 
+	 * 商铺编码
 	 */
-	private String shopNo;	
+	private String shopNo;
 
 	/**
-	 * 监管场所编号 
+	 * 监管场所编号
 	 */
-	private String fieldCode;	
+	private String fieldCode;
 
 	/**
-	 * 监管场所名称 
+	 * 监管场所名称
 	 */
-	private String fieldName;	
+	private String fieldName;
 
 	/**
-	 * 关区代码 
+	 * 关区代码
 	 */
-	private String customsCode;	
+	private String customsCode;
 
 	/**
-	 * 营业执照号或社会信用统一代码 
+	 * 营业执照号或社会信用统一代码
 	 */
-	private String shopSccd;	
+	private String shopSccd;
 
 	/**
-	 *  经营范围 
+	 *  经营范围
 	 */
-	private String bnsScope;	
+	private String bnsScope;
 
 	/**
-	 * 铺主姓名 
+	 * 铺主姓名
 	 */
-	private String ownerName;	
+	private String ownerName;
 
 	/**
-	 * 铺主证件类型 01:身份证 02 护照 
+	 * 铺主证件类型 01:身份证 02 护照
 	 */
-	private String ownerIdtype;	
+	private String ownerIdtype;
 
 	/**
-	 * 铺主联系方式 
+	 * 铺主联系方式
 	 */
-	private String ownerTel;	
+	private String ownerTel;
 
 	/**
-	 *  店铺地址 
+	 * 铺主国籍
 	 */
-	private String shopAddr;	
+	private String nationality;
 
 	/**
-	 * 商铺类型:1-中方商铺 2-外国商铺 
+	 *  店铺地址
 	 */
-	private String shopType;	
+	private String shopAddr;
 
 	/**
-	 * 启停用状态: 1- 启用 2-停用 3-注销 
+	 * 商铺类型:1-中方商铺 2-外国商铺
 	 */
-	private String eDStatus;	
+	private String shopType;
 
 	/**
-	 * 有 效 效 截 止 时 间 
+	 * 启停用状态: 1- 启用 2-停用 3-注销
 	 */
-	private String expiry;	
+	private String eDStatus;
 
 	/**
-	 * 备案编号,如果为新增备案,传空值;如果为变更备案,必须传值; 
+	 * 有 效 效 截 止 时 间
 	 */
-	private String putrecNo;	
+	private String expiry;
 
 	/**
-	 * 代理人姓名:商铺类型为外方商铺时必填 
+	 * 备案编号,如果为新增备案,传空值;如果为变更备案,必须传值;
 	 */
-	private String agentName;	
+	private String putrecNo;
 
 	/**
-	 * 代理人联系方式:商铺类型为外方商铺时必填 
+	 * 代理人姓名:商铺类型为外方商铺时必填
 	 */
-	private String agentTel;	
+	private String agentName;
 
 	/**
-	 * 代理人证件类型:01-身份证,02-护照商铺类型为外方商铺时必填 
+	 * 代理人联系方式:商铺类型为外方商铺时必填
 	 */
-	private String agentIdtype;	
+	private String agentTel;
 
 	/**
-	 * 代理人身份证:商铺类型为外方商铺时必填 
+	 * 代理人证件类型:01-身份证,02-护照商铺类型为外方商铺时必填
 	 */
-	private String agentCiphertextIdno;	
+	private String agentIdtype;
 
 	/**
-	 * 地方政府编号 
+	 * 代理人身份证:商铺类型为外方商铺时必填
 	 */
-	private String localGovernmentNo;	
+	private String agentCiphertextIdno;
 
 	/**
-	 * 备案状态:默认 0、待申报,1、已申报,2、备案通过,3、备案失败 
+	 * 地方政府编号
 	 */
-	private String filingStatus;	
+	private String localGovernmentNo;
 
 	/**
-	 * 店铺开户行 
+	 * 备案状态:默认 0、待申报,1、已申报,2、备案通过,3、备案失败
 	 */
-	private String bank;	
+	private String filingStatus;
 
 	/**
-	 * 店铺开户行账号 
+	 * 店铺开户行
 	 */
-	private String bankAccount;	
+	private String bank;
 
+	/**
+	 * 店铺开户行账号
+	 */
+	private String bankAccount;
 
+	/**
+	 * 账户类型:是否海外
+	 */
+	private String abroad;
 
 
 
-	
 
 
 }

+ 26 - 15
sp-service/level-one-server/src/main/java/com/pj/tb_shop/TbShopController.java

@@ -3,6 +3,7 @@ package com.pj.tb_shop;
 import java.io.IOException;
 import java.util.List;
 
+import com.pj.api.dto.BankInfoDto;
 import com.pj.api.dto.HtShopDTO;
 import com.pj.api.dto.ShopDto;
 import com.pj.utils.so.SoMap;
@@ -18,7 +19,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 /**
  * Controller: tb_shop -- 商铺
- * @author qzy 
+ * @author qzy
  */
 @RestController
 @RequestMapping("/TbShop/")
@@ -28,7 +29,7 @@ public class TbShopController {
 	@Autowired
 	TbShopService tbShopService;
 
-	/** 增 */  
+	/** 增 */
 	@RequestMapping("add")
 	@SaCheckPermission(TbShop.PERMISSION_CODE_ADD)
 	public AjaxJson add(TbShop t){
@@ -37,24 +38,24 @@ public class TbShopController {
 		return AjaxJson.getSuccessData(t);
 	}
 
-	/** 删 */  
+	/** 删 */
 	@RequestMapping("delete")
 	@SaCheckPermission(TbShop.PERMISSION_CODE_DEL)
 	public AjaxJson delete(Long id){
 		 tbShopService.delete(id);
 		return AjaxJson.getSuccess();
 	}
-	
-	/** 删 - 根据id列表 */  
+
+	/** 删 - 根据id列表 */
 	@RequestMapping("deleteByIds")
 	@SaCheckPermission(TbShop.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(TbShop.TABLE_NAME, ids);
 		return AjaxJson.getByLine(line);
 	}
-	
-	/** 改 */  
+
+	/** 改 */
 	@RequestMapping("update")
 	@SaCheckPermission(TbShop.PERMISSION_CODE_EDIT)
 	public AjaxJson update(TbShop t){
@@ -62,7 +63,7 @@ public class TbShopController {
 		return AjaxJson.getSuccess();
 	}
 
-	/** 查 - 根据id */  
+	/** 查 - 根据id */
 	@RequestMapping("getById")
 		@SaCheckPermission(TbShop.PERMISSION_CODE)
 	public AjaxJson getById(String id){
@@ -70,19 +71,19 @@ public class TbShopController {
 		return AjaxJson.getSuccessData(t);
 	}
 
-	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */  
+	/** 查集合 - 根据条件(参数为空时代表忽略指定条件) */
 	@RequestMapping("getList")
 		@SaCheckPermission(TbShop.PERMISSION_CODE)
-	public AjaxJson getList() { 
+	public AjaxJson getList() {
 		SoMap so = SoMap.getRequestSoMap();
 		so.set("deleteStatus", 1);
 		List<TbShop> list = tbShopService.getList(so.startPage());
 		return AjaxJson.getPageData(so.getDataCount(), list);
 	}
-	
-	
-	
-	/** 改 - 是否可用(0=否,1=是) */  
+
+
+
+	/** 改 - 是否可用(0=否,1=是) */
 	@RequestMapping("updateStatus")
 	@SaCheckPermission(TbShop.PERMISSION_CODE_EDIT)
 	public AjaxJson updateStatus(String id, String value){
@@ -144,5 +145,15 @@ public class TbShopController {
 		return byPhone;
 	}
 
+	/** 根据铺主姓名查询商铺是否存在 */
+	@PostMapping("rpc/getByName")
+	public boolean getByName(@RequestParam("name")String name) {
+		return tbShopService.getByName(name);
+	}
 
+	/** 商家备案验证查询-银行回复新开户或变更数据 */
+	@PostMapping("rpc/updateBySXB009")
+	public boolean updateBySXB009(@RequestBody BankInfoDto bankInfoDto) {
+		return tbShopService.updateBySXB009(bankInfoDto);
+	}
 }

+ 34 - 6
sp-service/level-one-server/src/main/java/com/pj/tb_shop/TbShopService.java

@@ -12,18 +12,17 @@ import cn.hutool.json.JSONUtil;
 import cn.hutool.log.StaticLog;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.pj.api.client.admin.AdminInterface;
 import com.pj.api.consts.FeignFactory;
-import com.pj.api.dto.AppUserCreateDTO;
-import com.pj.api.dto.EnterpriseDto;
-import com.pj.api.dto.HtShopDTO;
-import com.pj.api.dto.ShopDto;
+import com.pj.api.dto.*;
 import com.pj.common.core.exception.ServiceException;
 import com.pj.enummj.*;
 import com.pj.project4sp.SP;
 import com.pj.tb_enterprise.TbEnterprise;
 import com.pj.tb_enterprise.TbEnterpriseMapper;
 import com.pj.tb_enterprise.TbEnterpriseService;
+import com.pj.tb_people.TbPeople;
 import com.pj.tb_shop.vo.ShopVo;
 import com.pj.tb_trade_area.TbTradeArea;
 import com.pj.tb_trade_area.TbTradeAreaService;
@@ -240,7 +239,7 @@ public class TbShopService extends ServiceImpl<TbShopMapper, TbShop> implements
      * 远程调用方法
      */
     public boolean shopDto(HtShopDTO shopDto) throws Exception {
-        TbTradeArea tbTradeArea = tbTradeAreaService.updateHandler(shopDto.getFieldCode(), shopDto.getFieldName());
+        TbTradeArea tbTradeArea = tbTradeAreaService.updateHandler(shopDto.getFieldCode(), shopDto.getFieldName(), shopDto.getCustomsCode());
         TbShop tbShop = this.findByCode(shopDto.getShopNo());
         boolean newShop = false;
         if (tbShop == null) {
@@ -294,7 +293,7 @@ public class TbShopService extends ServiceImpl<TbShopMapper, TbShop> implements
             createDTO.setUserType(UserType.USER_TYPE_ENTERPRISE.getCode() + "");
             createDTO.setPhone(enterprise.getOwnerTel());
             createDTO.setName(enterprise.getOwnerName());
-            createDTO.setFkId(enterprise.getId() + "");
+            createDTO.setFkId(enterprise.getId());
             FeignFactory.adminInterface.createAccount(createDTO);
             return true;
         }
@@ -335,4 +334,33 @@ public class TbShopService extends ServiceImpl<TbShopMapper, TbShop> implements
         return result;
     }
 
+    /**
+     * 根据铺主姓名查询商铺是否存在
+     */
+    public boolean getByName(String name) {
+        LambdaQueryWrapper<TbShop> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TbShop::getOwnerName, name);
+
+        List<TbShop> list = this.list(wrapper);
+        return list.size() > 0;
+    }
+
+    /**
+     * 商家备案验证查询-银行回复新开户或变更数据
+     */
+    public boolean updateBySXB009(BankInfoDto bankInfoDto) {
+        LambdaUpdateWrapper<TbShop> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.set(TbShop::getOwnerIdtype, bankInfoDto.getPapersType());
+        wrapper.set(TbShop::getShopSccd, bankInfoDto.getPapersNo());
+        wrapper.set(TbShop::getOwnerTel, bankInfoDto.getTel());
+        wrapper.set(TbShop::getBankAccount, bankInfoDto.getAccount());
+        wrapper.set(TbShop::getBank, bankInfoDto.getSwiftCode());
+        wrapper.set(TbShop::getNationality, bankInfoDto.getNationality());
+        wrapper.set(TbShop::getAbroad, bankInfoDto.getAbroad());
+
+        wrapper.eq(TbShop::getOwnerName, bankInfoDto.getName());
+
+        boolean update = update(wrapper);
+        return update;
+    }
 }

+ 39 - 34
sp-service/level-one-server/src/main/java/com/pj/tb_trade_area/TbTradeArea.java

@@ -14,7 +14,7 @@ import lombok.experimental.Accessors;
 
 /**
  * Model: tb_trade_area -- 互市区
- * @author qzy 
+ * @author qzy
  */
 @Data
 @Accessors(chain = true)
@@ -24,15 +24,15 @@ public class TbTradeArea extends Model<TbTradeArea> implements Serializable {
 
 	// ---------- 模块常量 ----------
 	/**
-	 * 序列化版本id 
+	 * 序列化版本id
 	 */
-	private static final long serialVersionUID = 1L;	
+	private static final long serialVersionUID = 1L;
 	/**
-	 * 此模块对应的表名 
+	 * 此模块对应的表名
 	 */
-	public static final String TABLE_NAME = "tb_trade_area";	
+	public static final String TABLE_NAME = "tb_trade_area";
 	/**
-	 * 此模块对应的权限码 
+	 * 此模块对应的权限码
 	 */
 	public static final String PERMISSION_CODE = "tb-trade-area";
 	public static final String PERMISSION_CODE_ADD = "tb-trade-area-add";
@@ -44,73 +44,78 @@ public class TbTradeArea extends Model<TbTradeArea> implements Serializable {
 
 	// ---------- 表中字段 ----------
 	/**
-	 * 主键 
+	 * 主键
 	 */
 	@TableId(type = IdType.AUTO)
 	@JsonSerialize(using = ToStringSerializer.class)
 	private Long id;
 
 	/**
-	 * 名称 
+	 * 关区代码
 	 */
-	private String name;	
+	private String customsCode;
 
 	/**
-	 *  
+	 * 编码
 	 */
-	private String addressIds;	
+	private String code;
 
 	/**
-	 * 地址详情 
+	 * 名称
 	 */
-	private String detailAddress;	
+	private String name;
 
 	/**
-	 * 地址 
+	 *
 	 */
-	private String address;	
+	private String addressIds;
 
 	/**
-	 * 创建时间 
+	 * 地址详情
 	 */
-	private Date createTime;
+	private String detailAddress;
 
 	/**
-	 * 创建者id 
+	 * 地址
 	 */
-	private String createBy;	
-	private String code;
+	private String address;
+
+
 
 	/**
-	 * 创建者名称 
+	 * 创建者id
 	 */
-	private String createName;	
+	private String createBy;
 
 	/**
-	 * 更新者id 
+	 * 创建者名称
 	 */
-	private String updateBy;	
+	private String createName;
 
 	/**
-	 * 更新者名称 
+	 * 创建时间
 	 */
-	private String updateName;	
+	private Date createTime;
 
 	/**
-	 * 更新时间 
+	 * 更新者id
 	 */
-	private Date updateTime;
+	private String updateBy;
 
 	/**
-	 * 删除状态 
+	 * 更新者名称
 	 */
-	private Integer deleteStatus;
-
-
-
+	private String updateName;
 
+	/**
+	 * 更新时间
+	 */
+	private Date updateTime;
 
-	
+	/**
+	 * 删除状态
+	 */
+	private Integer deleteStatus;
 
 
 }

+ 16 - 14
sp-service/level-one-server/src/main/java/com/pj/tb_trade_area/TbTradeAreaMapper.xml

@@ -7,14 +7,14 @@
 
 	<!-- ================================== 查询相关 ================================== -->
 	<!-- select id, name, address_ids, detail_address, address, create_time, create_by, create_name, update_by, update_name, update_time, delete_status from tb_trade_area  -->
-	
+
 	<!-- 通用映射:自动模式 -->
 	<resultMap id="model" autoMapping="true" type="com.pj.tb_trade_area.TbTradeArea"></resultMap>
-	
+
 	<!-- 公共查询sql片段 -->
 	<sql id="select_sql">
-		select * 
-		from tb_trade_area 
+		select *
+		from tb_trade_area
 	</sql>
 	<insert id="addGoodsToTradeArea">
 		insert into tb_goods_trade_area_relation
@@ -32,13 +32,15 @@
 			<if  test="tradeAreaId!=null and tradeAreaId!=''"> and trade_area_id=#{tradeAreaId}</if>
 		</where>
 	</delete>
-	
+
 	<!-- 查集合 - 根据条件(参数为空时代表忽略指定条件) [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("name") '> and name like concat('%', #{name}, '%') </if>
+			<if test=' this.has("code") '> and code = #{code} </if>
+			<if test=' this.has("customsCode") '> and customs_code = #{customsCode} </if>
 			<if test=' this.has("addressIds") '> and address_ids = #{addressIds} </if>
 			<if test=' this.has("detailAddress") '> and detail_address = #{detailAddress} </if>
 			<if test=' this.has("address") '> and address = #{address} </if>
@@ -64,14 +66,14 @@
 			<otherwise> id desc </otherwise>
 		</choose>
 	</select>
-	
-	
-	
-	
-	
-	
-	
-	
-	
+
+
+
+
+
+
+
+
+
 
 </mapper>

+ 4 - 4
sp-service/level-one-server/src/main/java/com/pj/tb_trade_area/TbTradeAreaService.java

@@ -258,20 +258,20 @@ public class TbTradeAreaService extends ServiceImpl<TbTradeAreaMapper, TbTradeAr
         return list.isEmpty() ? null : list.get(0);
     }
 
-    public TbTradeArea updateHandler(String tradeCode, String fieldName) {
+    public TbTradeArea updateHandler(String tradeCode, String fieldName, String customsCode) {
         TbTradeArea tbTradeArea = this.findByCode(tradeCode);
         if (tbTradeArea == null) {
             tbTradeArea = new TbTradeArea();
             tbTradeArea.setCode(tradeCode)
                     .setName(fieldName)
+                    .setCustomsCode(customsCode)
                     .setCreateTime(new Date())
                     .setDeleteStatus(1)
                     .setCreateBy("async");
             this.save(tbTradeArea);
         } else {
-            if (!StrUtil.isEmpty(fieldName)){
-                tbTradeArea.setName(fieldName)
-                        .setUpdateTime(new Date()).setUpdateBy("async");
+            if (!StrUtil.isEmpty(fieldName) && !StrUtil.isEmpty(customsCode)){
+                tbTradeArea.setName(fieldName).setCustomsCode(customsCode).setUpdateTime(new Date()).setUpdateBy("async");
                 this.updateById(tbTradeArea);
             }
         }

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

@@ -116,8 +116,8 @@ public class TbOrdersApiController {
 	@RequestMapping("countPrice")
 	public AjaxJson countPrice() {
 		SoMap so = SoMap.getRequestSoMap();
-		Double sumPrice = tbOrdersService.countPrice(so);
-		return AjaxJson.getSuccessData(sumPrice);
+		SoMap map = tbOrdersService.countPrice(so);
+		return AjaxJson.getSuccessData(map);
 	}
 
 	/** 查 根据订单Id查订单详情 */

+ 1 - 8
sp-service/level-two-server/src/main/java/com/pj/tb_orders/TbOrdersDto.java

@@ -1,16 +1,9 @@
 package com.pj.tb_orders;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 import lombok.NoArgsConstructor;
-import lombok.experimental.Accessors;
-
-import java.io.Serializable;
 import java.util.Date;
 
 /**

+ 2 - 0
sp-service/level-two-server/src/main/java/com/pj/tb_orders/TbOrdersMapper.xml

@@ -55,6 +55,8 @@
 			<if test=' this.has("leaderId") '> and leader_id = #{leaderId} </if>
 			<if test=' this.has("fkGoodsDemandId") '> and fk_goods_demand_id = #{fkGoodsDemandId} </if>
 			<if test=' this.has("isDelivery") '> and is_delivery = #{isDelivery} </if>
+			<if test=' this.has("isPay") '> and is_pay = #{isPay} </if>
+			<if test=' this.has("payTax") '> and pay_tax = #{payTax} </if>
 		</where>
 		order by
 		<choose>

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

@@ -31,6 +31,7 @@ import com.pj.tb_goods_demand.TbGoodsDemandService;
 import com.pj.tb_goods_demand.vo.GoodsDemandVo;
 import com.pj.tb_item_rules.TbItemRules;
 import com.pj.tb_item_rules.TbItemRulesService;
+import com.pj.tb_item_rules.TbItemRulesVo;
 import com.pj.tb_orders_cart.TbOrdersCart;
 import com.pj.tb_orders_cart.TbOrdersCartMapper;
 import com.pj.tb_purchaser.TbPurchaser;
@@ -450,22 +451,26 @@ public class TbOrdersService extends ServiceImpl<TbOrdersMapper, TbOrders> imple
         return true;
     }
 
-    public Double countPrice(SoMap so) {
+    public SoMap countPrice(SoMap so) {
         OrderDto orderDto = levelOneServerInterface.getOrderDtoById(so.getLong("id"));
         if (null == orderDto) throw new RuntimeException("当前一级市场订单为空,请联系管理员!");
 
-        List<TbItemRules> ruleList = new ArrayList<>();
-        List<TbFeeItem> feeItemList = tbFeeItemService.getFeeItems();
-        feeItemList.forEach(feeItem -> {
-            ruleList.addAll(tbItemRulesService.getList(new SoMap().set("itemId", feeItem.getId())));
-        });
+//        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(orderDto.getGoodsId());
-        List<TbItemRules> newRuleList = ruleList.stream().filter(rule -> rule.getGoodsCodes().contains(goods.getCode())).collect(Collectors.toList());
+        //List<TbItemRules> newRuleList = ruleList.stream().filter(rule -> rule.getGoodsCodes().contains(goods.getCode())).collect(Collectors.toList());
+
+        List<TbItemRulesVo> volist = tbItemRulesService.getAllList();
+        List<TbItemRulesVo> newRuleVoList = volist.stream().filter(rule -> rule.getGoodsCodes().contains(goods.getCode())).collect(Collectors.toList());
+
         BigDecimal chargesPrice = BigDecimal.ZERO;
         BigDecimal TotalPrice = new BigDecimal(orderDto.getTotalPrice());
         BigDecimal GrossWt = new BigDecimal(orderDto.getGrossWt());
-        for (TbItemRules ruleItem : newRuleList) {
+        for (TbItemRulesVo ruleItem : newRuleVoList) {
             BigDecimal Percent = new BigDecimal(ruleItem.getPercent());
             //类型(1=按交易额收取,2=按次收取,3=按吨)
             if ("1".equals(ruleItem.getFeeType())) {
@@ -477,7 +482,10 @@ public class TbOrdersService extends ServiceImpl<TbOrdersMapper, TbOrders> imple
             }
         }
         Double sumPrice = chargesPrice.add(TotalPrice).doubleValue();
-        return sumPrice;
+        SoMap map = new SoMap();
+        map.put("sumPrice",sumPrice);
+        map.put("newRuleList",newRuleVoList);
+        return map;
     }
 
     /**
@@ -521,8 +529,6 @@ public class TbOrdersService extends ServiceImpl<TbOrdersMapper, TbOrders> imple
         orders.setFkGoodsDemandId(goodsDemandVo.getGoodsDemandId());
         //订单完成状态 (0=未完成,1=已完成)
         orders.setOrderFinish(OrderStatus.ORDER_STATUS_ZERO.getCode());
-        //收货状态 (0=未收货,1=已收货)
-        orders.setOrderFinish(OrderStatus.ORDER_STATUS_ZERO.getCode());
         //删除状态(0=禁用,1=启用)
         orders.setDeleteStatus(DeleteStatus.DELETE_STATUS_ON.getCode());
         //创建人

+ 4 - 4
sp-service/level-two-server/src/main/java/com/pj/tb_purchaser/TbPurchaser.java

@@ -140,7 +140,7 @@ public class TbPurchaser extends Model<TbPurchaser> implements Serializable {
 	 * 上次审核时间
 	 */
 	@Excel(name = "上次审核时间")
-	@JsonFormat(pattern = "yyyy-MM-dd")
+	//@JsonFormat(pattern = "yyyy-MM-dd")
 	private Date judgeTime;
 
 	@Excel(name = "审核人")
@@ -149,7 +149,7 @@ public class TbPurchaser extends Model<TbPurchaser> implements Serializable {
 	 * 注册时间
 	 */
 	@Excel(name = "注册时间")
-	@JsonFormat(pattern = "yyyy-MM-dd")
+	//@JsonFormat(pattern = "yyyy-MM-dd")
 	private Date registerTime;
 
 	/**
@@ -162,7 +162,7 @@ public class TbPurchaser extends Model<TbPurchaser> implements Serializable {
 	 * 创建时间
 	 */
 	@Excel(name = "创建时间")
-	@JsonFormat(pattern = "yyyy-MM-dd")
+	//@JsonFormat(pattern = "yyyy-MM-dd")
 	private Date createTime;
 
 	/**
@@ -181,7 +181,7 @@ public class TbPurchaser extends Model<TbPurchaser> implements Serializable {
 	 * 更新时间
 	 */
 	@Excel(name = "更新时间")
-	@JsonFormat(pattern = "yyyy-MM-dd")
+	//@JsonFormat(pattern = "yyyy-MM-dd")
 	private Date updateTime;
 
 	/**

+ 6 - 1
sp-service/payment-server/pom.xml

@@ -19,11 +19,16 @@
         <!-- 依赖base基础包 -->
         <dependency>
             <groupId>com.pj</groupId>
+            <artifactId>sp-api</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.pj</groupId>
             <artifactId>sp-base</artifactId>
             <version>${project.parent.version}</version>
         </dependency>
 
-
         <!-- rabbitmq 依赖 -->
         <dependency>
             <groupId>org.springframework.boot</groupId>

+ 2 - 2
sp-service/payment-server/src/main/java/com/pj/PaymentServerApplication.java

@@ -37,9 +37,9 @@ public class PaymentServerApplication {
      * rabbitMQ 的消息转换器
      * @return
      */
-    @Bean
+    /*@Bean
     public MessageConverter jsonMessageConverter(){
         return new Jackson2JsonMessageConverter();
-    }
+    }*/
 
 }

+ 13 - 6
sp-service/payment-server/src/main/java/com/pj/bank_info/BankInfo.java

@@ -1,6 +1,8 @@
 package com.pj.bank_info;
 
 import java.io.Serializable;
+import java.util.Date;
+
 import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.EqualsAndHashCode;
@@ -107,13 +109,18 @@ public class BankInfo extends Model<BankInfo> implements Serializable {
 	/**
 	 * 创建时间
 	 */
-	private String createTime;
-
-
-
-
-
+	private Date createTime;
 
 
+	private String name;
+	private String papersType;
+	private String papersNo;
+	private String nationality;
+	private String account;
+	private String payBankCode;
+	private String tel;
 
+	private String title;
+	private String swiftCode;
+	private String abroad;
 }

+ 21 - 10
sp-service/payment-server/src/main/java/com/pj/rabbitmq/MessageReceiver.java

@@ -22,35 +22,46 @@ public class MessageReceiver {
 
     private final RabbitTemplate levelOneConnectionFactory;
     private final RabbitTemplate levelTwoConnectionFactory;
+    private final RabbitTemplate customsConnectionFactory;
     private final RabbitMQProperties rabbitMQProperties;
 
     @Autowired
     public MessageReceiver(@Qualifier("levelOneConnectionFactory") CachingConnectionFactory levelOneConnectionFactory,
-                         @Qualifier("levelTwoConnectionFactory") CachingConnectionFactory levelTwoConnectionFactory,RabbitMQProperties rabbitMQProperties) {
+                           @Qualifier("levelTwoConnectionFactory") CachingConnectionFactory levelTwoConnectionFactory,
+                           @Qualifier("customsConnectionFactory") CachingConnectionFactory customsConnectionFactory,
+                           RabbitMQProperties rabbitMQProperties) {
         this.levelOneConnectionFactory = new RabbitTemplate(levelOneConnectionFactory);
         this.levelTwoConnectionFactory = new RabbitTemplate(levelTwoConnectionFactory);
-        this.rabbitMQProperties=rabbitMQProperties;
+        this.customsConnectionFactory = new RabbitTemplate(customsConnectionFactory);
+        this.rabbitMQProperties = rabbitMQProperties;
     }
 
     /**
      * 一级市场接收
      * @param message
      */
-    //@RabbitListener(queues = "${mq.level-one-receive-queue}",containerFactory = "levelOneRabbitListenerContainer")
-    @RabbitListener(queues = "${mq.level-one-send-queue}",containerFactory = "levelOneRabbitListenerContainer")
+    @RabbitListener(queues = "${mq.level-one-receive-queue}",containerFactory = "levelOneRabbitListenerContainer")
     public void receiveLevelOneMessage(String message) {
-        System.out.println("Received levelone message: " + message);
-        bankByteMapper.insert(new BankByte(RandomUtil.randomString(64),message, rabbitMQProperties.getLevelOneReceiveQueue(), FinishStatus.FINISH_STATUS_ZERO.getCode(),new Date()));
+        System.out.println("-------------------接收一级市场报文信息: \n" + message);
+        bankByteMapper.insert(new BankByte(RandomUtil.randomString(64), message, rabbitMQProperties.getLevelOneReceiveQueue(), FinishStatus.FINISH_STATUS_ZERO.getCode(),new Date()));
     }
     /**
      * 二级市场接收
      * @param message
      */
-    //@RabbitListener(queues = "${mq.level-two-receive-queue}",containerFactory = "levelTwoRabbitListenerContainer")
-    @RabbitListener(queues = "${mq.level-two-send-queue}",containerFactory = "levelTwoRabbitListenerContainer")
+    @RabbitListener(queues = "${mq.level-two-receive-queue}",containerFactory = "levelTwoRabbitListenerContainer")
     public void receiveLevelTwoMessage(String message) {
-        System.out.println("Received leveltwo message: " + message);
+        System.out.println("-------------------接收二级市场报文信息: \n" + message);
         bankByteMapper.insert(new BankByte(RandomUtil.randomString(64),message, rabbitMQProperties.getLevelTwoReceiveQueue(), FinishStatus.FINISH_STATUS_ZERO.getCode(),new Date()));
-
     }
+    /**
+     * 海关结关指令相关报文接收
+     * @param message
+     */
+    @RabbitListener(queues = "${mq.customs-receive-queue}", containerFactory = "customsRabbitListenerContainer")
+    public void receiveCustomsMessage(String message) {
+        System.out.println("-------------------接收海关结关指令报文信息: \n" + message);
+        bankByteMapper.insert(new BankByte(RandomUtil.randomString(64), message, rabbitMQProperties.getCustomsReceiveQueue(), FinishStatus.FINISH_STATUS_ZERO.getCode(), new Date()));
+    }
+
 }

+ 20 - 19
sp-service/payment-server/src/main/java/com/pj/rabbitmq/MessageSender.java

@@ -1,24 +1,12 @@
 package com.pj.rabbitmq;
 
-import cn.hutool.core.util.RandomUtil;
-import com.alibaba.fastjson.JSONObject;
-import com.pj.bank_byte.BankByte;
-import com.pj.bank_byte.BankByteMapper;
-import com.pj.dto.DataDto;
-import com.pj.enummj.FinishStatus;
-import com.pj.utils.ht.AESUtil;
-import org.springframework.amqp.core.Message;
-import org.springframework.amqp.rabbit.annotation.Queue;
-import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.amqp.core.MessagePostProcessor;
 import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;
-import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
 
-import java.util.Date;
-
 /**
  * @Author Mechrevo
  * @Date 2023 08 25 12 30
@@ -28,24 +16,37 @@ public class MessageSender {
 
     private final RabbitTemplate levelOneConnectionFactory;
     private final RabbitTemplate levelTwoConnectionFactory;
+    private final RabbitTemplate customsConnectionFactory;
     private final RabbitMQProperties rabbitMQProperties;
 
     @Autowired
     public MessageSender(@Qualifier("levelOneConnectionFactory") CachingConnectionFactory levelOneConnectionFactory,
-                           @Qualifier("levelTwoConnectionFactory") CachingConnectionFactory levelTwoConnectionFactory,RabbitMQProperties rabbitMQProperties) {
+                         @Qualifier("levelTwoConnectionFactory") CachingConnectionFactory levelTwoConnectionFactory,
+                         @Qualifier("customsConnectionFactory") CachingConnectionFactory customsConnectionFactory,
+                         RabbitMQProperties rabbitMQProperties) {
         this.levelOneConnectionFactory = new RabbitTemplate(levelOneConnectionFactory);
         this.levelTwoConnectionFactory = new RabbitTemplate(levelTwoConnectionFactory);
-        this.rabbitMQProperties=rabbitMQProperties;
+        this.customsConnectionFactory = new RabbitTemplate(customsConnectionFactory);
+        this.rabbitMQProperties = rabbitMQProperties;
     }
 
     public void sendToLevelOneMQ(String message) {
-//        levelTwoConnectionFactory.setMessageConverter(new Jackson2JsonMessageConverter());
-        levelOneConnectionFactory.convertAndSend(rabbitMQProperties.getLevelOneReceiveQueue(),message);
+        //levelTwoConnectionFactory.setMessageConverter(new Jackson2JsonMessageConverter());
+        levelOneConnectionFactory.convertAndSend(rabbitMQProperties.getLevelOneSendQueue(), message);
+        //levelOneConnectionFactory.convertAndSend(rabbitMQProperties.getLevelOneReceiveQueue(), (Object) message,messagePostProcessor);
     }
     public void sendToLevelTwoMQ(String message) {
-//        levelTwoConnectionFactory.setMessageConverter(new Jackson2JsonMessageConverter());
-        levelTwoConnectionFactory.convertAndSend(rabbitMQProperties.getLevelTwoSendQueue(),message);
+        //levelTwoConnectionFactory.setMessageConverter(new Jackson2JsonMessageConverter());
+        levelTwoConnectionFactory.convertAndSend(rabbitMQProperties.getLevelTwoSendQueue(), message);
+    }
+    public void sendToCustomsMQ(String message) {
+        customsConnectionFactory.convertAndSend(rabbitMQProperties.getCustomsSendQueue(), message);
     }
 
+    private final static MessagePostProcessor messagePostProcessor = message -> {
+        message.getMessageProperties().setContentType("application/octet-stream");
+        message.getMessageProperties().setContentEncoding("UTF-8");
+        return message;
+    };
 
 }

+ 6 - 0
sp-service/payment-server/src/main/java/com/pj/rabbitmq/RabbitMQProperties.java

@@ -24,4 +24,10 @@ public class RabbitMQProperties {
     private String levelTwoReceiveQueue;
     private String levelTwoSendQueue;
     private String levelTwoVirtualHost;
+
+    private String customsUsername;
+    private String customsPassword;
+    private String customsVirtualHost;
+    private String customsReceiveQueue;
+    private String customsSendQueue;
 }

+ 18 - 2
sp-service/payment-server/src/main/java/com/pj/rabbitmq/RabbitmqConfig.java

@@ -35,7 +35,6 @@ public class RabbitmqConfig {
         factory.setVirtualHost(rabbitMQProperties.getLevelOneVirtualHost());
         return factory;
     }
-
     @Bean(name = "levelOneRabbitListenerContainer")
     public SimpleRabbitListenerContainerFactory levelOneRabbitListenerContainer(SimpleRabbitListenerContainerFactoryConfigurer configurer,
                                                                                 @Qualifier("levelOneConnectionFactory") ConnectionFactory connectionFactory) {
@@ -54,7 +53,6 @@ public class RabbitmqConfig {
         factory.setVirtualHost(rabbitMQProperties.getLevelTwoVirtualHost());
         return factory;
     }
-
     @Bean(name = "levelTwoRabbitListenerContainer")
     public SimpleRabbitListenerContainerFactory levelTwoRabbitListenerContainer(SimpleRabbitListenerContainerFactoryConfigurer configurer,
                                                                                 @Qualifier("levelTwoConnectionFactory") ConnectionFactory connectionFactory) {
@@ -63,4 +61,22 @@ public class RabbitmqConfig {
         return factory;
     }
 
+    @Bean(name = "customsConnectionFactory")
+    public CachingConnectionFactory customsConnectionFactory() {
+        CachingConnectionFactory factory = new CachingConnectionFactory();
+        factory.setHost(rabbitMQProperties.getHost());
+        factory.setPort(rabbitMQProperties.getPort());
+        factory.setUsername(rabbitMQProperties.getCustomsUsername());
+        factory.setPassword(rabbitMQProperties.getCustomsPassword());
+        factory.setVirtualHost(rabbitMQProperties.getCustomsVirtualHost());
+        return factory;
+    }
+    @Bean(name = "customsRabbitListenerContainer")
+    public SimpleRabbitListenerContainerFactory customsRabbitListenerContainer(SimpleRabbitListenerContainerFactoryConfigurer config,
+                                                                               @Qualifier("customsConnectionFactory") ConnectionFactory connectionFactory) {
+        SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
+        config.configure(factory, connectionFactory);
+        return factory;
+    }
+
 }

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

@@ -1,9 +1,11 @@
 package com.pj.task;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 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.api.dto.BankInfoDto;
 import com.pj.bank_byte.BankByte;
 import com.pj.bank_byte.BankByteMapper;
 import com.pj.bank_info.BankInfo;
@@ -12,14 +14,21 @@ 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.MessageSender;
 import com.pj.utils.CryptoUtil;
 import com.pj.utils.ht.AESUtil;
+import com.pj.xml.MessageXML;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.transaction.annotation.Transactional;
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 
@@ -36,6 +45,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+@Slf4j
 @Configuration
 @EnableScheduling
 @Transactional(rollbackFor = Exception.class)
@@ -62,11 +72,15 @@ public class BankByteTask {
     @Autowired
     private LevelTwoServerInterface levelTwoServerInterface;
 
+    @Autowired
+    private MessageSender messageSender;
+
+
     /**
      * 启动定时任务
      */
-    //@Scheduled(cron = "*/10 * * * * ?")  // 每10秒扫描一次
-    private void bankByteTask() {
+    @Scheduled(cron = "*/10 * * * * ?")  // 每10秒扫描一次
+    public void bankByteTask() throws ParserConfigurationException {
 
         //扫描表内是否有待处理任务
         List<BankByte> byteList = bankByteMapper.selectList(
@@ -77,45 +91,66 @@ public class BankByteTask {
             return;
         }
         //执行任务处理流程
-        byteList.forEach(item -> {
+        for (BankByte item : byteList) {
+            // 创建DOM解析器
+            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            // 创建XPath对象
+            XPath xpath = XPathFactory.newInstance().newXPath();
+
             String body = item.getBody();
-            String str = body.substring(body.indexOf("<payload xsi:type=\"orderDTO\">")+29, body.indexOf("</payload>"));
+            if(!StringUtils.containsIgnoreCase(body,"<plain>")) {
+                item.setFinishStatus(FinishStatus.FINISH_STATUS_TWO.getCode());
+                bankByteMapper.updateById(item);
+                continue;
+            }
+            String str = body.substring(body.indexOf("<plain>")+7, body.indexOf("</plain>"));
             //数据解析
             String decrypt = CryptoUtil.decrypt(str);
             String xmlStr = body.replace(str, decrypt);
 
             BankInfo bankInfo = new BankInfo();
-            List<BankInfoCharges> chargesList = new ArrayList<>();
+            bankInfo.setCreateTime(new Date());
+
+            boolean isMKT0035 = StringUtils.containsIgnoreCase(xmlStr,"MKT003") || StringUtils.containsIgnoreCase(xmlStr,"MKT005");
             boolean isMKT008 = StringUtils.containsIgnoreCase(xmlStr,"MKT008");
-            boolean hasCommission = StringUtils.containsIgnoreCase(xmlStr, "<results xsi:type=\"orderResultDTO\">");
+            boolean hasCommission = StringUtils.containsIgnoreCase(xmlStr, "<results xsi:type=\"orderResultDTO\"");
 
             //银行回执——headers——获取头部字段
-            if(isMKT008){//二级市场-订单回执报文-头部处理
+            if(isMKT0035 || 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();
+                    Element element = document.getDocumentElement();
+                    NodeList childNodes = element.getChildNodes();
+                    for (int i = 0; i < childNodes.getLength(); i++) {
+                        Node node = childNodes.item(i);
+                        if (node instanceof Element) {
+                            Element ele = (Element) node;
+                            String key = ele.getAttribute("key");
+                            String substring = ele.getFirstChild() == null ? "" : ele.getFirstChild().getNodeValue();
+                            if(StringUtils.containsIgnoreCase(key,"sn")) {
+                                bankInfo.setSn(substring);
+                            }
+                            if(StringUtils.containsIgnoreCase(key,"date")) {
+                                bankInfo.setDate(substring);
+                            }
+                            if(StringUtils.containsIgnoreCase(key,"organization")) {
+                                bankInfo.setOrganization(substring);
+                            }
+                            if(StringUtils.containsIgnoreCase(key,"bankCode")) {
+                                bankInfo.setBankCode(substring);
+                            }
+                            if(StringUtils.containsIgnoreCase(key,"operation")) {
+                                bankInfo.setOperation(substring);
+                            }
+                        }
+                    }
                 } catch (IOException e) {
                     e.printStackTrace();
-                } catch (XPathExpressionException e) {
+                } catch (SAXException e) {
                     e.printStackTrace();
                 }
             }
@@ -146,84 +181,144 @@ public class BankByteTask {
                 }
             }
 
-            //银行回执——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\">"));
+            //银行回执——plain——获取responseDTO
+            String payloadStr = xmlStr.substring(xmlStr.indexOf("<plain>")+7, xmlStr.indexOf("</plain>"));
+            if(isMKT0035) {
+                payloadStr = xmlStr.substring(xmlStr.indexOf("</headers>")+10, xmlStr.indexOf("<results xsi:type="));
                 payloadStr += "</payload>";
 
-                String resultsStr = xmlStr.substring(xmlStr.indexOf("<results xsi:type=\"orderResultDTO\">"), xmlStr.lastIndexOf("</results>"));
-                String[] resultsSplit = resultsStr.split("</results>");
+                String resultsStr = "";
+                if(StringUtils.containsIgnoreCase(xmlStr,"MKT003")) {
+                    resultsStr = xmlStr.substring(xmlStr.indexOf("<results xsi:type=\"vendorDTO\">"), xmlStr.indexOf("</payload>"));
+                } else if(StringUtils.containsIgnoreCase(xmlStr,"MKT005")) {
+                    resultsStr = xmlStr.substring(xmlStr.indexOf("<results xsi:type=\"vendeeDTO\">"), xmlStr.indexOf("</payload>"));
+                }
 
                 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);
-                    }
+                    // 解析XML字符串,获取Document对象
+                    Document document = builder.parse(new InputSource(new StringReader(payloadStr)));
+                    Element element = document.getDocumentElement();
+
+                    bankInfo.setCode(element.getAttribute("code"));
+                    bankInfo.setSource(element.getAttribute("source"));
+                    bankInfo.setNote(element.getAttribute("note"));
+
+                    // 解析XML字符串,获取Document对象
+                    Document document1 = builder.parse(new InputSource(new StringReader(resultsStr)));
+                    Element element1 = document1.getDocumentElement();
+
+                    bankInfo.setName(element1.getAttribute("name"));
+                    bankInfo.setPapersType(element1.getAttribute("papersType"));
+                    bankInfo.setPapersNo(element1.getAttribute("papersNo"));
+                    bankInfo.setNationality(element1.getAttribute("nationality"));
+                    bankInfo.setAccount(element1.getAttribute("accountNo"));
+                    bankInfo.setPayBankCode(element1.getAttribute("bankCode"));
+                    bankInfo.setTel(element1.getAttribute("tel"));
 
-                } 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();
-                DocumentBuilder builder = factory.newDocumentBuilder();
-
-                // 解析XML字符串,获取Document对象
-                Document document = builder.parse(new InputSource(new StringReader(payloadStr)));
-
-                // 创建XPath对象
-                XPath xpath = XPathFactory.newInstance().newXPath();
-
-                bankInfo.setCode(xpath.evaluate("/payload/code", document));
-                bankInfo.setSource(xpath.evaluate("/payload/source", 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();
-            } catch (SAXException e) {
-                e.printStackTrace();
-            } catch (IOException e) {
-                e.printStackTrace();
-            } catch (XPathExpressionException e) {
-                e.printStackTrace();
+            else if(isMKT008) {
+                try {
+                    // 解析XML字符串,获取Document对象
+                    Document document = builder.parse(new InputSource(new StringReader(payloadStr)));
+                    Element element = document.getDocumentElement();
+
+                    bankInfo.setCode(element.getAttribute("code"));
+                    bankInfo.setType(element.getAttribute("type"));
+                    bankInfo.setNote(element.getAttribute("note"));
+                    bankInfo.setSource(element.getAttribute("source"));
+                    bankInfo.setResult(element.getAttribute("result"));
+                } catch (SAXException e) {
+                    e.printStackTrace();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
             }
+            else {
+                try {
+                    // 解析XML字符串,获取Document对象
+                    Document document = builder.parse(new InputSource(new StringReader(payloadStr)));
 
+                    bankInfo.setCode(xpath.evaluate("/payload/code", document));
+                    bankInfo.setSource(xpath.evaluate("/payload/source", document));
+                    bankInfo.setResult(xpath.evaluate("/payload/result", document));
+                    bankInfo.setNote(xpath.evaluate("/payload/note", document));
+                    bankInfo.setType(xpath.evaluate("/payload/type", document));
+
+                    bankInfo.setName(xpath.evaluate("/payload/name", document));
+                    bankInfo.setPapersType(xpath.evaluate("/payload/papersType", document));
+                    bankInfo.setPapersNo(xpath.evaluate("/payload/papersNo", document));
+                    bankInfo.setNationality(xpath.evaluate("/payload/nationality", document));
+                    bankInfo.setAccount(xpath.evaluate("/payload/account", document));
+                    bankInfo.setPayBankCode(xpath.evaluate("/payload/bankCode", document));
+                    bankInfo.setTel(xpath.evaluate("/payload/tel", document));
+
+                } catch (SAXException e) {
+                    e.printStackTrace();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                } catch (XPathExpressionException e) {
+                    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("SXB002")) {
+                boolean r = levelOneServerInterface.getByidCard(bankInfo.getName(), bankInfo.getPapersNo());
+                System.out.println("---------------SXB002="+r);
+                if (r) {
+                    log.info("send data to 银行:{}", JSON.toJSONString(bankInfo));
+                    String xml = MessageXML.SXB003(bankInfo);
+                    messageSender.sendToLevelOneMQ(xml);
+                    log.info("send mq msg finish:{}", JSON.toJSONString(xml));
+                } else {
+                    log.info("send data to 银行:{}", JSON.toJSONString(bankInfo));
+                    String xml = MessageXML.SXB004(bankInfo);
+                    messageSender.sendToLevelOneMQ(xml);
+                    log.info("send mq msg finish:{}", JSON.toJSONString(xml));
+                }
+                result = true;
+            }
+            //边民备案验证查询-银行回复新开户或变更数据
+            else if(bankInfo.getOperation().equalsIgnoreCase("SXB005")) {
+                BankInfoDto bankInfoDto = new BankInfoDto();
+                BeanUtils.copyProperties(bankInfo, bankInfoDto);
+                result = levelOneServerInterface.updateBySXB005(bankInfoDto);
+            }
+            //商铺备案验证查询
+            else if(bankInfo.getOperation().equalsIgnoreCase("SXB006")) {
+                boolean r = levelOneServerInterface.getByName(bankInfo.getName());
+                System.out.println("---------------SXB006="+r);
+                if (r) {
+                    log.info("send data to 银行:{}", JSON.toJSONString(bankInfo));
+                    String xml = MessageXML.SXB007(bankInfo);
+                    messageSender.sendToLevelOneMQ(xml);
+                    log.info("send mq msg finish:{}", JSON.toJSONString(xml));
+                } else {
+                    log.info("send data to 银行:{}", JSON.toJSONString(bankInfo));
+                    String xml = MessageXML.SXB008(bankInfo);
+                    messageSender.sendToLevelOneMQ(xml);
+                    log.info("send mq msg finish:{}", JSON.toJSONString(xml));
+                }
+                result = true;
+            }
+            //商铺备案验证查询-银行回复新开户或变更数据
+            else if(bankInfo.getOperation().equalsIgnoreCase("SXB009")) {
+                BankInfoDto bankInfoDto = new BankInfoDto();
+                BeanUtils.copyProperties(bankInfo, bankInfoDto);
+                result = levelOneServerInterface.updateBySXB009(bankInfoDto);
+            }
             //(一级市场)订单扣款-成功
-            if(bankInfo.getOperation().equalsIgnoreCase("SXB011")) {
+            else if(bankInfo.getOperation().equalsIgnoreCase("SXB011")) {
                 //参数:一级市场边民订单-订单编号
                 result = levelOneServerInterface.confirmOrderFromBank(bankInfo.getSource(),1);
             }
@@ -249,6 +344,18 @@ public class BankByteTask {
                 result = levelOneServerInterface.orderFinishFromBank(bankInfo.getSource(), 2);
             }
 
+            //(二级市场)卖家账号认证回执——101/102/110	110(未签约)
+            else if(bankInfo.getOperation().equalsIgnoreCase("MKT003")) {
+                if(bankInfo.getCode().equals("110")) {
+                    //未签约
+                }
+            }
+            //(二级市场)买家账号认证回执——103/104/110	110(未签约)
+            else if(bankInfo.getOperation().equalsIgnoreCase("MKT005")) {
+                if(bankInfo.getCode().equals("110")) {
+                    //未签约
+                }
+            }
             //(二级市场)订单扣款            001:扣款订单    002:退款订单    003:打款订单
             else if(bankInfo.getOperation().equalsIgnoreCase("MKT008") && "001".equals(bankInfo.getType())) {
                 if(!hasCommission) {//无手续费模式——采购商支付扣款
@@ -279,7 +386,7 @@ public class BankByteTask {
             }
             bankByteMapper.updateById(item);
 
-        });
+        };
 
     }
 

+ 9 - 3
sp-service/payment-server/src/main/java/com/pj/task/PaymentController.java

@@ -4,6 +4,7 @@ import com.pj.api.dto.PaymentDto;
 import com.pj.api.dto.PaymentTwoDto;
 import com.pj.dto.DataDto;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.openfeign.SpringQueryMap;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,12 +18,17 @@ public class PaymentController {
     private PaymentService paymentService;
 
     @RequestMapping("rpc/testSend")
-    public void testSend(@RequestBody DataDto dataDto) {
-        paymentService.testSend(dataDto);
+    public void testSend() {
+        paymentService.testSend();
+    }
+
+    @GetMapping("rpc/sendCXB001")
+    public void sendCXB001(PaymentDto paymentDto) {
+        paymentService.sendCXB001(paymentDto);
     }
 
     @GetMapping("rpc/sendSXB010")
-    public void sendSXB010(PaymentDto paymentDto) {
+    public void sendSXB010(@SpringQueryMap PaymentDto paymentDto) {
         paymentService.sendSXB010(paymentDto);
     }
 

+ 136 - 8
sp-service/payment-server/src/main/java/com/pj/task/PaymentService.java

@@ -1,16 +1,22 @@
 package com.pj.task;
 
 import com.alibaba.fastjson.JSON;
+import com.pj.api.dto.CompanyDto;
 import com.pj.api.dto.PaymentDto;
 import com.pj.api.dto.PaymentTwoDto;
 import com.pj.dto.DataDto;
 import com.pj.rabbitmq.MessageSender;
 
+import com.pj.utils.CryptoUtil;
 import com.pj.xml.MessageXML;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
 @Service
 @Slf4j
 public class PaymentService {
@@ -18,19 +24,141 @@ public class PaymentService {
     @Autowired
     private MessageSender messageSender;
 
-    public void testSend(DataDto dataDto) {
-        System.out.println("开始发送----------\n"+dataDto.toString());
-        messageSender.sendToLevelOneMQ(JSON.toJSONString(dataDto));
+    public static void main(String[] args) {
+        /*PaymentDto paymentDto = new PaymentDto();
+        paymentDto.setFieldCode("860301");
+        paymentDto.setTradeNo("YYSC2024010810081234");
+        paymentDto.setCurrCode("人民币");
+        paymentDto.setResalePrice(BigDecimal.valueOf(9000));
+        paymentDto.setTotalPrice(BigDecimal.valueOf(8000));
+        paymentDto.setDeclTime("2024-01-08 10:11:55 876");
+        paymentDto.setBorderName("李李");
+        paymentDto.setBorderidno("450806200912093764");
+        paymentDto.setBankCode("6216632688888888888");
+        paymentDto.setBorderTel("19155552244");
+        paymentDto.setOwnerName("迈克");
+        paymentDto.setOwnerIdtype("身份证");
+        paymentDto.setBankAccount("621677777777777777");
+        paymentDto.setOwnerTel("15266666666");
+        paymentDto.setGoodsName("大闸蟹");
+        paymentDto.setGoodsUnit("吨");
+        paymentDto.setDeclPrice(10000.0);
+        paymentDto.setBuyQty(1.0);
+        paymentDto.setGrossWt(0.8);
+        String xml = MessageXML.SXB010(paymentDto);
+        String bodyStr = xml.substring(xml.indexOf("<payload xsi:type=\"orderDTO\">")+29, xml.indexOf("</payload>"));
+        String decrypt = CryptoUtil.decrypt(bodyStr);
+        String xmlStr = xml.replace(bodyStr, decrypt);
+        System.out.println(xmlStr);*/
+        /*String a = CryptoUtil.decrypt("106940ae6c70fcdf19561fad1fb9bdca6e4bccacc84a7a474dd8316fdcfc2b060d7b8ea013bba87694e8c9425632e662497b189a117d441db59f602cb11f3726b50f646da8e2cbbd90a4427da1a63c079294584f8348ae744bea8c871faaf868b1a0bcbe861ef6a4656caada1349710c7a5cea48c90bac115ee62fbff5a7fa8d7d20c5c4e2833d3cf018d3d4aaeb5283f355e82078b42e9623b517f601bd30709e95a73c2c25ac30b142346620abf6b6525b5b0ba411725140d311346b0162fb9bb88d6721d3f4f74d4c22c28ae5e069d5");
+        String b = CryptoUtil.decrypt("102efe99a286571fb3f88605063f5cdc8eafa83ea7e148db3ae1bb324a9e2e24a427ea1c51be27bcc8fc747f63cf01cd62887e16de38c135cd7eff69f760abab9f07f7565a963bd19de79d6bb9511385970020de2373df36927332a6efe4b2aed3dcf0dab450210ec0af36e85ada754eb157664e1a152a66725eeafcd60349afb0df99e8d828cf97bba1f7592f06c504f51bb5bb1b1ca2ac70d9d6199e1c9a5667a9a55988daa1f7b6c6b9bd09a4ab3c77ed1236424aba3df4b97d6ba41fed733d096de1fb286550ee7cb5c0fcf275a3a9aa16b0e99be93d7945a89e464bfba97b");
+        String c = CryptoUtil.decrypt("107d621b69cad5beabb4aaffd465d16a29dea25e85b52a8c8eba4097d863d4ffe6768ec045afa6bc9ef65c315197f2b7fd427df5588ff34b5ef032353a9bf6e23e4be43b44343a2ea49215d95b7aca0cc4629be31a024b9f48a7debb7332fe54aca0fe3830e42c17026a46567307ae54e53595ce58b7b08526245373da86100af832947550467121f31f39943dc505576798f974d259fbe9f095d95389cf28d383bdbe7a26bee3bec8004f8c159ed3e888a5cd2f5fe83df9392c553b583d2a2ab1e210e1638aaebf5accba0f1b11670e713655f84bfb7c660f8908e053cc7a1b986954f181223d4ee8344201ea44ef1769fb1d4f809e100613e45dc57c312a9642");
+        String d = CryptoUtil.decrypt("1078433bd7958c67b3e43a5964e98b93f23c0cbc2c34560afd74fb9fdceed2eb440bfeab935bd87661b0f11682ef191cdd5dbc8e6f6fc04f4ce9f17e6145ce4d1b8f48c9a82200912e43dc1ccbbc1c57b41cd38fb84419e4b4463ef677576814d6c6f9988a3c6645af3fb4232457bf6ff234e54fb344436293ec5fbe89e9493cc91efef7c8c1ecbab992b4e3ed263c137b24edee9d67165c056ec1952b7e6075dfc48d447cca08f7ddd56276a9973570456be48c10e5f8e4761b488fa7719b67270cb365608a3184d0405e5ddbca31bca0583e09fe41a4a26c477fc05a89f9d28d50848538f67e00a5b55d3455a1b0c9f74fa99d3dc78646c9ccc898923bdd3c95d9c1688d9b1b85c5864c729249d0a470c464a4c77bcd1ea59ebe12ffeba0860b240d0d0933a14b45e8f7ef583e4bf64fd0ef5f5ffaa1c89cc60e1d2ab4c85a510f355f062d3e7e7a0fd9ed2fd95a88213ac9e05e081ee16f73eb0d3e0f9beb6c");
+        System.out.println(a+"\n");
+        System.out.println(b+"\n");
+        System.out.println(c+"\n");
+        System.out.println(d);*/
+    }
+    public void testSend() {
+        System.out.println("开始发送----------\n");
+        //PaymentDto paymentDto = new PaymentDto();
+        PaymentTwoDto paymentDto = new PaymentTwoDto();
+        paymentDto.setFieldCode("861501");
+        //paymentDto.setTradeNo("YYSC20240112171255");
+        paymentDto.setCurrCode("RMB");
+        paymentDto.setResalePrice(BigDecimal.ZERO);
+        paymentDto.setTotalPrice(BigDecimal.valueOf(8000));
+        paymentDto.setDeclTime("2024-01-17 10:11:55 876");
+        paymentDto.setBorderName("李正红");
+        paymentDto.setBorderidno("532325199706101330");
+        paymentDto.setBankCode("6223692312105747");
+        paymentDto.setBorderTel("13658831034");
+        paymentDto.setOwnerName("云南跨境贸易公司");
+        paymentDto.setOwnerIdtype("0008");
+        paymentDto.setBankAccount("0100028613124012");
+        paymentDto.setOwnerTel("15195882701");
+
+        paymentDto.setCodeTs("001");
+        paymentDto.setGoodsName("大闸蟹");
+        paymentDto.setGoodsUnit("吨");
+        paymentDto.setDeclPrice(10000.0);
+        paymentDto.setBuyQty(1.0);
+        paymentDto.setGrossWt(0.8);
+
+        paymentDto.setOrderNo("YYSC20240112181255");
+        paymentDto.setResalePrice(BigDecimal.valueOf(8150));
+        paymentDto.setPcName("云南跨境贸易公司");
+        paymentDto.setBusinessLicense("12312312-3");
+        paymentDto.setPcBankAccount("0100028613124012");
+        paymentDto.setPcContact("15195882701");
+
+        List<CompanyDto> companyDtoList = new ArrayList<>();
+        CompanyDto companyDto = new CompanyDto();
+        companyDto.setName("云南跨境贸易公司");
+        companyDto.setUsci("12312312-3");
+        companyDto.setBankAccount("0100028613124012");
+        companyDto.setContact("15195882701");
+        companyDto.setChargesPrice(BigDecimal.valueOf(150));
+        companyDtoList.add(companyDto);
+        paymentDto.setCompanyDtoList(companyDtoList);
+
+        paymentDto.setVoyageNo("111");//车辆批号
+        paymentDto.setVeNo("云A12345");//车牌号
+        //String xml = MessageXML.SXB013(paymentDto);
+        //String xml = MessageXML.MKT006_NoCommission(paymentDto);
+        String xml = MessageXML.MKT007_NoCommission(paymentDto);
+
+        /*String str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+                "\n" +
+                "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"\" title=\"一级市场\">  \n" +
+                "  <headers> \n" +
+                "    <item> \n" +
+                "      <key>sn</key>  \n" +
+                "      <value>353447DB-86A3-4D32-9351-54B6D8211252</value> \n" +
+                "    </item>  \n" +
+                "    <item> \n" +
+                "      <key>date</key>  \n" +
+                "      <value>2024-01-10 14:34:26 582</value> \n" +
+                "    </item>  \n" +
+                "    <item> \n" +
+                "      <key>organization</key>  \n" +
+                "      <value>861501</value> \n" +
+                "    </item>  \n" +
+                "    <item> \n" +
+                "      <key>operation</key>  \n" +
+                "      <value>SXB002</value> \n" +
+                "    </item>  \n" +
+                "    <item> \n" +
+                "      <key>bankCode</key>  \n" +
+                "      <value>MRCCCNB1</value> \n" +
+                "    </item> \n" +
+                "  </headers>  \n" +
+                "  <plain>10eb95c1c32131a58c6900c0c2f4dcd75327e09effa261c05db4a6b567943e69c6c01c7fc02bec3fa814bb8e70878b96b7e541dcd92bcb5cc51bef0775d65f756ce57f94083c40bbf3ee9424e77642448265a9f4929692c0f40c815ee78fd5e433f05be5af3a1f6f7b23103f246d1003f29343a4b461602b07828f6113ebff280d6ead8e8d67d0af03e3a6c77943111ef84128a3c6f9064f74508a23504cfdbc26a835f9ae505069432285f4031ea3251b2a480d9a629f5d31e2588753ed376b3afd6141371af75a7353b252546153819905d5d71462379a00a77195df6653134bb6a613cfbc23aa8747495df0da526be04adbc0c18fb932c1d02bed56213e8123</plain>\n" +
+                "</message>";*/
+        //messageSender.sendToLevelOneMQ(xml);
+        messageSender.sendToLevelTwoMQ(xml);
         System.out.println("结束发送----------");
     }
 
     /**
+     * ※ 结关报文
+     * 报文名称:CXB001.xml  数据流向:海关数据中心--->银行
+     * @param paymentDto 海关结关信息
+     */
+    public void sendCXB001(PaymentDto paymentDto) {
+        log.info("send data to 银行:{}", JSON.toJSONString(paymentDto));
+        String xml = MessageXML.CXB001(paymentDto);
+        messageSender.sendToCustomsMQ(xml);
+        log.info("send mq msg finish:{}", JSON.toJSONString(xml));
+    }
+
+    /**
      * ※ 订单扣款
      * 报文名称:SXB010.xml  数据流向:一级市场--->银行
      * @param paymentDto 一级市场订单信息
      */
     public void sendSXB010(PaymentDto paymentDto) {
-        log.info("send data to ht:{}", JSON.toJSONString(paymentDto));
+        log.info("send data to 银行:{}", JSON.toJSONString(paymentDto));
         String xml = MessageXML.SXB010(paymentDto);
         messageSender.sendToLevelOneMQ(xml);
         //mq发送信息
@@ -43,7 +171,7 @@ public class PaymentService {
      * @param paymentDto 一级市场订单信息
      */
     public void sendSXB013(PaymentDto paymentDto) {
-        log.info("send data to ht:{}", JSON.toJSONString(paymentDto));
+        log.info("send data to 银行:{}", JSON.toJSONString(paymentDto));
         String xml = MessageXML.SXB013(paymentDto);
         messageSender.sendToLevelOneMQ(xml);
         log.info("send mq msg finish:{}", JSON.toJSONString(xml));
@@ -55,7 +183,7 @@ public class PaymentService {
      * @param paymentDto 一级市场订单信息
      */
     public void sendSXB023(PaymentDto paymentDto) {
-        log.info("send data to ht:{}", JSON.toJSONString(paymentDto));
+        log.info("send data to 银行:{}", JSON.toJSONString(paymentDto));
         String xml = MessageXML.SXB023(paymentDto);
         messageSender.sendToLevelOneMQ(xml);
         log.info("send mq msg finish:{}", JSON.toJSONString(xml));
@@ -67,7 +195,7 @@ public class PaymentService {
      * @param paymentTwoDto 订单信息
      */
     public void sendMKT006_NoCommission(PaymentTwoDto paymentTwoDto) {
-        log.info("send data to ht:{}", JSON.toJSONString(paymentTwoDto));
+        log.info("send data to 银行:{}", JSON.toJSONString(paymentTwoDto));
         String xml = MessageXML.MKT006_NoCommission(paymentTwoDto);
         messageSender.sendToLevelTwoMQ(xml);
         log.info("send mq msg finish:{}", JSON.toJSONString(xml));
@@ -79,7 +207,7 @@ public class PaymentService {
      * @param paymentTwoDto 订单信息
      */
     public void sendMKT006(PaymentTwoDto paymentTwoDto) {
-        log.info("send data to ht:{}", JSON.toJSONString(paymentTwoDto));
+        log.info("send data to 银行:{}", JSON.toJSONString(paymentTwoDto));
         String xml = MessageXML.MKT006(paymentTwoDto);
         messageSender.sendToLevelTwoMQ(xml);
         log.info("send mq msg finish:{}", JSON.toJSONString(xml));

+ 1 - 1
sp-service/payment-server/src/main/java/com/pj/utils/CryptoUtil.java

@@ -11,7 +11,7 @@ import java.security.Security;
 
 //报文验签&解密
 public class CryptoUtil {
-    private final static String sm4Key="c9931a6c5219610179d7f6c6ec8fd328";
+    private final static String sm4Key="56b5f803c4eeaf9bc9322b46c95b8145";//c9931a6c5219610179d7f6c6ec8fd328
 
     private static Logger logger = LoggerFactory.getLogger(CryptoUtil.class);
     static{

+ 507 - 187
sp-service/payment-server/src/main/java/com/pj/xml/MessageXML.java

@@ -4,6 +4,7 @@ package com.pj.xml;
 import com.pj.api.dto.CompanyDto;
 import com.pj.api.dto.PaymentDto;
 import com.pj.api.dto.PaymentTwoDto;
+import com.pj.bank_info.BankInfo;
 import com.pj.utils.CryptoUtil;
 
 import java.text.SimpleDateFormat;
@@ -15,11 +16,233 @@ public class MessageXML {
     static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss sss");
 
     /**
+     * 结关报文:海关数据中心--->银行
+     */
+    public static String CXB001(PaymentDto paymentDto) {
+        String date = sdf.format(new Date());
+        String payload =
+                "<payload xsi:type=\"responseDTO\">\n" +
+                        "<code>200</code>\n" +                                 //回执代码
+                        "<source>" + paymentDto.getTradeNo() + "</source>\n" + //订单编号
+                        "<note>结关成功</note>\n" +                             //回执内容
+                        "<date>" + paymentDto.getDeclTime() + "</date>\n" +    //结关时间	YYYY-MM—DD HH:MM:DD SSS
+                "</payload>";
+        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
+                "<message title=\"边民互市\" xsi:schemaLocation=\"\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
+                "<headers>\n" +
+                "        <item>\n" +
+                "               <key>sn</key>\n" +
+                "              <value>" + UUID.randomUUID() + "</value>\n" +
+                "       </item>\n" +
+                "        <item>\n" +
+                "               <key>date</key>\n" +
+                "              <value>" + date + "</value>\n" +
+                "       </item>\n" +
+                "        <item>\n" +
+                "               <key>organization</key>\n" +
+                "              <value>" + paymentDto.getFieldCode() + "</value>\n" +//互市点机构代码
+                "       </item>\n" +
+                "        <item>\n" +
+                "            <key>bankCode</key>\n" +
+                "            <value>MRCCCNB1</value>\n" +//银行标识
+                "        </item>\n" +
+                "        <item>\n" +
+                "               <key>operation</key>\n" +
+                "              <value>CXB001</value>\n" +
+                "       </item>\n" +
+                "</headers>\n" +
+                "<plain>" +
+                CryptoUtil.encrypt(payload)+
+                "</plain>" +
+                "</message>";
+        return xml;
+    }
+
+    /**
+     * ※ 边民备案验证查询(边民已备案):一级市场--->银行
+     */
+    public static String SXB003(BankInfo bankInfo) {
+        String date = sdf.format(new Date());
+        String payload =" <payload xsi:type=\"responseDTO\">" +
+                        "         <code>200</code>\n" +                                 //消息回执代码
+                        "         <source>" + bankInfo.getSn() + "</source>\n" +    //源报文编号
+                        "         <note>边民已备案</note>\n" +                           //回执内容
+                        "<results xsi:type=\"vendeeDTO\">\n" +
+                        "         <name>" + bankInfo.getName() + "</name>\n" +                       //边民姓名
+                        "         <papersType>" + bankInfo.getPapersType() + "</papersType>\n" +       //证件类型  0001 身份证
+                        "         <papersNo>" + bankInfo.getPapersNo() + "</papersNo>\n" +             //边民证件号
+                        "         <nationality>" + bankInfo.getNationality() + "</nationality>\n" +  //国籍
+                        "</results>\n" +
+                        "</payload>";
+        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
+                "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"\">\n" +
+                "<headers>\n" +
+                "        <item>\n" +
+                "               <key>sn</key>\n" +
+                "              <value>" + UUID.randomUUID() + "</value>\n" +
+                "       </item>\n" +
+                "        <item>\n" +
+                "               <key>date</key>\n" +
+                "              <value>" + date + "</value>\n" +
+                "       </item>\n" +
+                "        <item>\n" +
+                "               <key>organization</key>\n" +
+                "              <value>" + bankInfo.getOrganization() + "</value>\n" +//互市点机构代码
+                "       </item>\n" +
+                "        <item>\n" +
+                "            <key>bankCode</key>\n" +
+                "            <value>" + bankInfo.getBankCode() + "</value>\n" +//银行标识
+                "        </item>\n" +
+                "        <item>\n" +
+                "               <key>operation</key>\n" +
+                "              <value>SXB003</value>\n" +
+                "       </item>\n" +
+                "</headers>\n" +
+                "<plain>" +
+                CryptoUtil.encrypt(payload)+
+                "</plain>" +
+                "</message>";
+        return xml;
+    }
+
+    /**
+     * ※ 边民备案验证查询(边民未备案):一级市场--->银行
+     */
+    public static String SXB004(BankInfo bankInfo) {
+        String date = sdf.format(new Date());
+        String payload =" <payload xsi:type=\"responseDTO\">" +
+                "         <code>500</code>\n" +                                 //消息回执代码
+                "         <source>" + bankInfo.getSn() + "</source>\n" +    //源报文编号
+                "         <note>边民未备案</note>\n" +                           //回执内容
+                "</payload>";
+        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
+                "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"\">\n" +
+                "<headers>\n" +
+                "        <item>\n" +
+                "               <key>sn</key>\n" +
+                "              <value>" + UUID.randomUUID() + "</value>\n" +
+                "       </item>\n" +
+                "        <item>\n" +
+                "               <key>date</key>\n" +
+                "              <value>" + date + "</value>\n" +
+                "       </item>\n" +
+                "        <item>\n" +
+                "               <key>organization</key>\n" +
+                "              <value>" + bankInfo.getOrganization() + "</value>\n" +//互市点机构代码
+                "       </item>\n" +
+                "        <item>\n" +
+                "            <key>bankCode</key>\n" +
+                "            <value>" + bankInfo.getBankCode() + "</value>\n" +//银行标识
+                "        </item>\n" +
+                "        <item>\n" +
+                "               <key>operation</key>\n" +
+                "              <value>SXB004</value>\n" +
+                "       </item>\n" +
+                "</headers>\n" +
+                "<plain>" +
+                CryptoUtil.encrypt(payload)+
+                "</plain>" +
+                "</message>";
+        return xml;
+    }
+
+    /**
+     * ※ 商家备案验证查询(商铺已备案):一级市场--->银行
+     */
+    public static String SXB007(BankInfo bankInfo) {
+        String date = sdf.format(new Date());
+        String payload =
+                " <payload xsi:type=\"responseDTO\">" +
+                "         <code>200</code>\n" +                                 //消息回执代码
+                "         <source>" + bankInfo.getSn() + "</source>\n" +    //源报文编号
+                "         <note>商铺已备案</note>\n" +                           //回执内容
+                "<results xsi:type=\"vendeeDTO\">\n" +
+                "         <name>" + bankInfo.getName() + "</name>\n" +                       //商铺所属人姓名
+                "         <papersType>" + bankInfo.getPapersType() + "</papersType>\n" +       //所属人证件类型  0001 身份证
+                "         <papersNo>" + bankInfo.getPapersNo() + "</papersNo>\n" +             //所属人证件号
+                "         <nationality>" + bankInfo.getNationality() + "</nationality>\n" +  //国籍
+                "</results>\n" +
+                "</payload>";
+        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
+                "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"\">\n" +
+                "<headers>\n" +
+                "        <item>\n" +
+                "               <key>sn</key>\n" +
+                "              <value>" + UUID.randomUUID() + "</value>\n" +
+                "       </item>\n" +
+                "        <item>\n" +
+                "               <key>date</key>\n" +
+                "              <value>" + date + "</value>\n" +
+                "       </item>\n" +
+                "        <item>\n" +
+                "               <key>organization</key>\n" +
+                "              <value>" + bankInfo.getOrganization() + "</value>\n" +//互市点机构代码
+                "       </item>\n" +
+                "        <item>\n" +
+                "            <key>bankCode</key>\n" +
+                "            <value>" + bankInfo.getBankCode() + "</value>\n" +//银行标识
+                "        </item>\n" +
+                "        <item>\n" +
+                "               <key>operation</key>\n" +
+                "              <value>SXB007</value>\n" +
+                "       </item>\n" +
+                "</headers>\n" +
+                "<plain>" +
+                CryptoUtil.encrypt(payload)+
+                "</plain>" +
+                "</message>";
+        return xml;
+    }
+
+    /**
+     * ※ 商家备案验证查询(商铺未备案):一级市场--->银行
+     */
+    public static String SXB008(BankInfo bankInfo) {
+        String date = sdf.format(new Date());
+        String payload =
+                " <payload xsi:type=\"responseDTO\">" +
+                "         <code>500</code>\n" +                                 //消息回执代码
+                "         <source>" + bankInfo.getSn() + "</source>\n" +    //源报文编号
+                "         <note>商铺未备案</note>\n" +                           //回执内容
+                "</payload>";
+        String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
+                "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"\">\n" +
+                "<headers>\n" +
+                "        <item>\n" +
+                "               <key>sn</key>\n" +
+                "              <value>" + UUID.randomUUID() + "</value>\n" +
+                "       </item>\n" +
+                "        <item>\n" +
+                "               <key>date</key>\n" +
+                "              <value>" + date + "</value>\n" +
+                "       </item>\n" +
+                "        <item>\n" +
+                "               <key>organization</key>\n" +
+                "              <value>" + bankInfo.getOrganization() + "</value>\n" +//互市点机构代码
+                "       </item>\n" +
+                "        <item>\n" +
+                "            <key>bankCode</key>\n" +
+                "            <value>" + bankInfo.getBankCode() + "</value>\n" +//银行标识
+                "        </item>\n" +
+                "        <item>\n" +
+                "               <key>operation</key>\n" +
+                "              <value>SXB008</value>\n" +
+                "       </item>\n" +
+                "</headers>\n" +
+                "<plain>" +
+                CryptoUtil.encrypt(payload)+
+                "</plain>" +
+                "</message>";
+        return xml;
+    }
+
+    /**
      * 订单扣款:一级市场--->银行
      */
     public static String SXB010(PaymentDto paymentDto) {
         String date = sdf.format(new Date());
         String payload =
+                "<payload xsi:type=\"orderDTO\">" +
                 "         <sn>" + paymentDto.getTradeNo() + "</sn>\n" +                         //订单号
                 "         <export>false</export>\n" +                                       //出口标识	true:出口,false:进口
                 "         <organization>" + paymentDto.getFieldCode() + "</organization>\n" +   //互市点机构代码
@@ -30,22 +253,22 @@ public class MessageXML {
                 "         <date>" + paymentDto.getDeclTime() + "</date>\n" +                    //订单时间	YYYY-MM—DD HH:MM:DD SSS
                 "<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>ICBKCNBJYUN</bankCode>\n" +                            //开户行代码
+                "         <papersType>0001</papersType>\n" +                                 //证件类型  0001 身份证
+                "         <papersNo>" + paymentDto.getBorderidno() + "</papersNo>\n" +           //边民证件号
+                "         <nationality>0001</nationality>\n" +                             //国籍
+                "         <account>" + paymentDto.getBankCode() + "</account>\n" +         //银行账号
+                "         <bankCode>MRCCCNB1</bankCode>\n" +                            //开户行代码
                 "         <tel>" + paymentDto.getBorderTel() + "</tel>\n" +                    //联系电话
                 "</vendee>\n" +
                 "<vendor>\n" +
                 "         <name>" + paymentDto.getOwnerName() + "</name>\n" +                  //商铺所属人姓名
-                "         <paperType>" + paymentDto.getOwnerIdtype() + "</paperType>\n" +      //所属人证件类型
-                "         <paperNo></paperNo>\n" +                                         //所属人证件号
-                "         <nationality></nationality>\n" +                                 //国籍
-                "         <accountNo>" + paymentDto.getBankAccount() + "</accountNo>\n" +      //银行账号
-                "         <bankCode>ICBKCNBJYUN</bankCode>\n" +                            //开户行代码
+                "         <papersType>" + paymentDto.getOwnerIdtype() + "</papersType>\n" +      //所属人证件类型
+                "         <papersNo>12312312-3</papersNo>\n" +                                   //所属人证件号
+                "         <nationality>0001</nationality>\n" +                                 //国籍
+                "         <account>" + paymentDto.getBankAccount() + "</account>\n" +      //银行账号
+                "         <bankCode>MRCCCNB1</bankCode>\n" +                            //开户行代码
                 "         <tel>" + paymentDto.getOwnerTel() + "</tel>\n" +                     //联系电话
-                "<vendor>\n" +
+                "</vendor>\n" +
                 "<items>\n" +
                 "         <name>" + paymentDto.getGoodsName() + "</name>\n" +                   //商品名称
                 "         <unit>" + paymentDto.getGoodsUnit() + "</unit>\n" +                   //商品单位
@@ -53,7 +276,8 @@ public class MessageXML {
                 "         <quantity>" + paymentDto.getBuyQty() + "</quantity>\n" +              //商品数量
                 "         <weight>" + paymentDto.getGrossWt() + "</weight>\n" +                 //商品重量
                 "         <amount>" + paymentDto.getTotalPrice() + "</amount>\n" +              //金额
-                "</items>\n";
+                "</items>\n" +
+                "</payload>";
         String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
                 "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"\">\n" +
                 "<headers>\n" +
@@ -71,16 +295,16 @@ public class MessageXML {
                 "       </item>\n" +
                 "        <item>\n" +
                 "            <key>bankCode</key>\n" +
-                "            <value>ICBKCNBJYUN</value>\n" +//银行标识
+                "            <value>MRCCCNB1</value>\n" +//银行标识
                 "        </item>\n" +
                 "        <item>\n" +
                 "               <key>operation</key>\n" +
                 "              <value>SXB010</value>\n" +
                 "       </item>\n" +
                 "</headers>\n" +
-                " <payload xsi:type=\"orderDTO\">" +
+                "<plain>" +
                 CryptoUtil.encrypt(payload)+
-                "</payload>\n" +
+                "</plain>" +
                 "</message>";
         return xml;
     }
@@ -90,7 +314,9 @@ public class MessageXML {
      */
     public static String SXB013(PaymentDto paymentDto) {
         String date = sdf.format(new Date());
-        String payload = " <sn>" + paymentDto.getTradeNo() + "</sn>\n" +                         //订单号
+        String payload =
+                "<payload xsi:type=\"orderDTO\">" +
+                "         <sn>" + paymentDto.getTradeNo() + "</sn>\n" +                         //订单号
                 "         <organization>" + paymentDto.getFieldCode() + "</organization>\n" +   //互市点机构代码
                 "         <currency>" + paymentDto.getCurrCode() + "</currency>\n" +            //币种
                 "         <type>02</type>\n" +                                              //业务类型	02代表退款报文
@@ -99,22 +325,22 @@ public class MessageXML {
                 "         <date>" + paymentDto.getDeclTime() + "</date>\n" +                    //订单时间	YYYY-MM—DD HH:MM:DD SSS
                 "<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>ICBKCNBJYUN</bankCode>\n" +                            //开户行代码
+                "         <papersType>0001</papersType>\n" +                                 //证件类型  0001 身份证
+                "         <papersNo>" + paymentDto.getBorderidno() + "</papersNo>\n" +           //边民证件号
+                "         <nationality>0001</nationality>\n" +                             //国籍
+                "         <account>" + paymentDto.getBankCode() + "</account>\n" +         //银行账号
+                "         <bankCode>MRCCCNB1</bankCode>\n" +                            //开户行代码
                 "         <tel>" + paymentDto.getBorderTel() + "</tel>\n" +                    //联系电话
                 "</vendee>\n" +
                 "<vendor>\n" +
                 "         <name>" + paymentDto.getOwnerName() + "</name>\n" +                  //商铺所属人姓名
-                "         <paperType>" + paymentDto.getOwnerIdtype() + "</paperType>\n" +      //所属人证件类型
-                "         <paperNo></paperNo>\n" +                                         //所属人证件号
-                "         <nationality></nationality>\n" +                                 //国籍
-                "         <accountNo>" + paymentDto.getBankAccount() + "</accountNo>\n" +      //银行账号
-                "         <bankCode>ICBKCNBJYUN</bankCode>\n" +                            //开户行代码
+                "         <papersType>" + paymentDto.getOwnerIdtype() + "</papersType>\n" +      //所属人证件类型
+                "         <papersNo>12312312-3</papersNo>\n" +                                   //所属人证件号
+                "         <nationality>0001</nationality>\n" +                                 //国籍
+                "         <account>" + paymentDto.getBankAccount() + "</account>\n" +      //银行账号
+                "         <bankCode>MRCCCNB1</bankCode>\n" +                            //开户行代码
                 "         <tel>" + paymentDto.getOwnerTel() + "</tel>\n" +                     //联系电话
-                "<vendor>\n" +
+                "</vendor>\n" +
                 "<items>\n" +
                 "         <name>" + paymentDto.getGoodsName() + "</name>\n" +                   //商品名称
                 "         <unit>" + paymentDto.getGoodsUnit() + "</unit>\n" +                   //商品单位
@@ -122,7 +348,8 @@ public class MessageXML {
                 "         <quantity>" + paymentDto.getBuyQty() + "</quantity>\n" +              //商品数量
                 "         <weight>" + paymentDto.getGrossWt() + "</weight>\n" +                 //商品重量
                 "         <amount>" + paymentDto.getTotalPrice() + "</amount>\n" +              //金额
-                "</items>\n";
+                "</items>\n" +
+                "</payload>";
 
         String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
                 "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"\">\n" +
@@ -141,16 +368,16 @@ public class MessageXML {
                 "       </item>\n" +
                 "        <item>\n" +
                 "            <key>bankCode</key>\n" +
-                "            <value>ICBKCNBJYUN</value>\n" +//银行标识
+                "            <value>MRCCCNB1</value>\n" +//银行标识
                 "        </item>\n" +
                 "        <item>\n" +
                 "               <key>operation</key>\n" +
                 "              <value>SXB013</value>\n" +
                 "       </item>\n" +
                 "</headers>\n" +
-                " <payload xsi:type=\"orderDTO\">" +
+                "<plain>" +
                 CryptoUtil.encrypt(payload)+
-                "</payload>\n" +
+                "</plain>" +
                 "</message>";
         return xml;
     }
@@ -160,9 +387,12 @@ public class MessageXML {
      */
     public static String SXB023(PaymentDto paymentDto) {
         String date = sdf.format(new Date());
-        String payload= "<registration>" + paymentDto.getVoyageNo() + "</registration>\n" +  //车辆批号
-                "         <plateNumber>" + paymentDto.getVeNo() + "</plateNumber>\n" +        //车牌号
-                "         <Order>" + paymentDto.getTradeNo() + "</Order>\n" ;              //订单号	n个
+        String payload=
+                "<payload xsi:type=\"carDTO\">" +
+                "<registration>" + paymentDto.getVoyageNo() + "</registration>\n" +  //车辆批号
+                "<plateNumber>" + paymentDto.getVeNo() + "</plateNumber>\n" +        //车牌号
+                "<Order>" + paymentDto.getTradeNo() + "</Order>\n" +//订单号	n个
+                "</payload>";
         String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
                 "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"\">\n" +
                 "<headers>\n" +
@@ -180,85 +410,144 @@ public class MessageXML {
                 "       </item>\n" +
                 "        <item>\n" +
                 "            <key>bankCode</key>\n" +
-                "            <value>ICBKCNBJYUN</value>\n" +//银行标识
+                "            <value>MRCCCNB1</value>\n" +//银行标识
                 "        </item>\n" +
                 "        <item>\n" +
-                "               <key>operation</key>\n" +
+                "               <key>operationItem</key>\n" +
                 "              <value>SXB023</value>\n" +
                 "       </item>\n" +
                 "</headers>\n" +
-                " <payload xsi:type=\"carDTO\">" +
+                "<plain>" +
                 CryptoUtil.encrypt(payload)+
-                "</payload>\n" +
+                "</plain>" +
                 "</message>\n";
         return xml;
     }
 
+
+    /**
+     * ※ 卖家账号认证(边民):二级市场--->银行
+     */
+    public static String MKT002(PaymentTwoDto paymentTwoDto) {
+        String date = sdf.format(new Date());
+        String payload =
+                " <payload xsi:type=\"vendorDTO\"" +
+                " name=\"" + paymentTwoDto.getBorderName() + "\"" +           //卖家姓名
+                " papersType=\"0001\"" +                                //证件类型  0001 身份证
+                " papersNo=\"" + paymentTwoDto.getBorderidno() + "\"" +   //证件号
+                " nationality=\"0001\"" +                              //国籍
+                " accountNo=\"" + paymentTwoDto.getBankCode() + "\"" +       //银行账号
+                " bankCode=\"MRCCCNB1\"" +                                //开户行代码
+                " tel=\"" + paymentTwoDto.getBorderTel() + "\"" +              //联系电话
+                "></payload>";
+        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" +
+                "<item key=\"sn\">" + UUID.randomUUID() + "</item>\n" +
+                "<item key=\"date\">" + date + "</item>\n" +
+                "<item key=\"organization\">" + paymentTwoDto.getFieldCode() + "</item>\n" +
+                "<item key=\"bankCode\">MRCCCNB1</item>\n" +
+                "<item key=\"operation\">MKT002</item>\n" +
+                "</headers>\n" +
+                "<plain>" +
+                CryptoUtil.encrypt(payload)+
+                "</plain>" +
+                "</message>";
+        return xml;
+    }
+
+    /**
+     * ※ 买家账号认证(收购商):二级市场--->银行
+     */
+    public static String MKT004(PaymentTwoDto paymentTwoDto) {
+        String date = sdf.format(new Date());
+        String payload =
+                " <payload xsi:type=\"vendorDTO\"" +
+                        " name=\"" + paymentTwoDto.getOwnerName() + "\"" +         //企业名称
+                        " papersType=\"0008\"" +                                    //证件类型  0008 社会统一信用代码(默认)
+                        " papersNo=\"12312312-3\"" +                                //证件号
+                        " nationality=\"0001\"" +                                   //国籍
+                        " accountNo=\"" + paymentTwoDto.getBankAccount() + "\"" +      //银行账号
+                        " bankCode=\"MRCCCNB1\"" +                                  //开户行代码
+                        " tel=\"" + paymentTwoDto.getOwnerTel() + "\"" +           //联系电话
+                        "></payload>";
+        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" +
+                "<item key=\"sn\">" + UUID.randomUUID() + "</item>\n" +
+                "<item key=\"date\">" + date + "</item>\n" +
+                "<item key=\"organization\">" + paymentTwoDto.getFieldCode() + "</item>\n" +
+                "<item key=\"bankCode\">MRCCCNB1</item>\n" +
+                "<item key=\"operation\">MKT004</item>\n" +
+                "</headers>\n" +
+                "<plain>" +
+                CryptoUtil.encrypt(payload)+
+                "</plain>" +
+                "</message>";
+        return xml;
+    }
+
     /**
      * 订单扣款(无手续费):二级市场--->银行
      */
     public static String MKT006_NoCommission(PaymentTwoDto paymentTwoDto) {
         String date = sdf.format(new Date());
-        String payload=  "         <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>" + 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" +
+        String payload=
+                "<payload xsi:type=\"orderDTO\"" +
+                " sn=\"" + paymentTwoDto.getOrderNo() + "\"" +                         //订单号
+                " organization=\"" + paymentTwoDto.getFieldCode() + "\"" +   //互市点机构代码
+                " currency=\"" + paymentTwoDto.getCurrCode() + "\"" +            //币种
+                " type=\"001\"" +                                                //业务类型	001 代表扣款订单
+                " total=\"" + paymentTwoDto.getResalePrice() + "\"" +               //订单总金额 8150.00 【买方总支付金额】(转售金额)
+                //" actualTotal=\"</actualTotal>\n" +                                     //扣除手续费边民实际到账金额  actualTotal忽略
+                " dateTime=\"" + paymentTwoDto.getDeclTime() + "\"" +            //订单时间	YYYY-MM—DD HH:MM:DD SSS
+                ">" +
 
-                "<vendee>\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" +
+                "<vendee" +//买方基本信息(采购企业)
+                " name=\"" + paymentTwoDto.getPcName() + "\"" +                       //企业名称
+                " papersType=\"0008\"" +                                      //证件类型  0008 社会统一信用代码(默认)
+                " papersNo=\"" + paymentTwoDto.getBusinessLicense() + "\"" +        //证件号
+                " nationality=\"0001\"" +                                  //国籍
+                " accountNo=\"" + paymentTwoDto.getPcBankAccount() + "\"" +     //银行账号
+                " bankCode=\"MRCCCNB1\"" +                                   //开户行代码
+                " tel=\"" + paymentTwoDto.getPcContact() + "\"" +                     //联系电话
+                "/>\n" +
 
-                "<items>\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>" + 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" ;
+                "<vendor" +//卖方基础信息(边民)
+                " name=\"" + paymentTwoDto.getBorderName() + "\"" +                 //边民姓名
+                " papersType=\"0001\"" +                                    //证件类型  0001 身份证
+                " papersNo=\"" + paymentTwoDto.getBorderidno() + "\"" +           //边民证件号
+                " nationality=\"0001\"" +                                //国籍
+                " accountNo=\"" + paymentTwoDto.getBankCode() + "\"" +        //银行账号
+                " bankCode=\"MRCCCNB1\"" +                                 //开户行代码
+                " tel=\"" + paymentTwoDto.getBorderTel() + "\"" +                   //联系电话
+                "/>\n" +
+
+                "<items" +//商品明细
+                " code=\"" + paymentTwoDto.getCodeTs() + "\"" +                      //商品编码
+                " name=\"" + paymentTwoDto.getGoodsName() + "\"" +                   //商品名称
+                " unit=\"" + paymentTwoDto.getGoodsUnit() + "\"" +                   //商品单位
+                " price=\"" + paymentTwoDto.getDeclPrice() + "\"" +                 //商品单价
+                " quantity=\"" + paymentTwoDto.getBuyQty() + "\"" +              //商品数量
+                " weight=\"" + paymentTwoDto.getGrossWt() + "\"" +                 //商品重量
+                " amount=\"" + paymentTwoDto.getTotalPrice() + "\"" +              //金额
+                "/>\n" +
+
+                "</payload>";
         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>" + paymentTwoDto.getFieldCode() + "</organization>\n" +
-                        "         <bankCode>KCCBCN2K</bankCode>\n" +
-                        "         <operation>MKT006</operation>\n" +
-                        "</headers>\n" +
-
-                        " <payload xsi:type=\"orderDTO\">" +
-                            CryptoUtil.encrypt(payload)+
-                        "</payload>\n" +
-                        "</message>";
+                "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"\">\n" +
+                    "<headers>\n" +
+                        " <item key=\"sn\">" + UUID.randomUUID() + "</item>\n" +
+                        " <item key=\"date\">" + date + "</item> \n" +
+                        " <item key=\"organization\">" + paymentTwoDto.getFieldCode() + "</item>\n" +
+                        " <item key=\"bankCode\">MRCCCNB1</item>\n" +
+                        " <item key=\"operation\">MKT006</item>\n" +
+                    "</headers>\n" +
+                    "<plain>" +
+                         CryptoUtil.encrypt(payload)+
+                    "</plain>" +
+                "</message>";
         return xml;
     }
 
@@ -268,114 +557,145 @@ public class MessageXML {
     public static String MKT006(PaymentTwoDto paymentTwoDto) {
         String date = sdf.format(new Date());
         String chargesXml = chargesXml(paymentTwoDto.getCompanyDtoList(), paymentTwoDto.getOrderNo());
-        String payload=                       "         <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>" + 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" +
+        String payload=
+                "<payload xsi:type=\"orderDTO\"" +
+                " sn=\"" + paymentTwoDto.getOrderNo() + "\"" +                         //订单号
+                " organization=\"" + paymentTwoDto.getFieldCode() + "\"" +   //互市点机构代码
+                " currency=\"" + paymentTwoDto.getCurrCode() + "\"" +            //币种
+                " type=\"001\"" +                                                //业务类型	001 代表扣款订单
+                " total=\"" + paymentTwoDto.getResalePrice() + "\"" +               //订单总金额 8150.00 【买方总支付金额】(转售金额)
+                " actualTotal=\"" + paymentTwoDto.getTotalPrice() + "\"" +      //扣除手续费边民实际到账金额  actualTotal忽略
+                " dateTime=\"" + paymentTwoDto.getDeclTime() + "\"" +            //订单时间	YYYY-MM—DD HH:MM:DD SSS
+                ">" +
 
-                "<vendee>\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" +
+                "<vendee" +//买方基本信息(采购企业)
+                " name=\"" + paymentTwoDto.getPcName() + "\"" +                       //企业名称
+                " papersType=\"0008\"" +                                      //证件类型  0008 社会统一信用代码(默认)
+                " papersNo=\"" + paymentTwoDto.getBusinessLicense() + "\"" +        //证件号
+                " nationality=\"0001\"" +                                  //国籍
+                " accountNo=\"" + paymentTwoDto.getPcBankAccount() + "\"" +     //银行账号
+                " bankCode=\"MRCCCNB1\"" +                                   //开户行代码
+                " tel=\"" + paymentTwoDto.getPcContact() + "\"" +                     //联系电话
+                "/>\n" +
 
-                "<items>\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>" + 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" +
+                "<vendor" +//卖方基础信息(边民)
+                " name=\"" + paymentTwoDto.getBorderName() + "\"" +                 //边民姓名
+                " papersType=\"0001\"" +                                    //证件类型  0001 身份证
+                " papersNo=\"" + paymentTwoDto.getBorderidno() + "\"" +           //边民证件号
+                " nationality=\"0001\"" +                                //国籍
+                " accountNo=\"" + paymentTwoDto.getBankCode() + "\"" +        //银行账号
+                " bankCode=\"MRCCCNB1\"" +                                 //开户行代码
+                " tel=\"" + paymentTwoDto.getBorderTel() + "\"" +                   //联系电话
+                "/>\n" +
+
+                "<items" +//商品明细
+                " code=\"" + paymentTwoDto.getCodeTs() + "\"" +                      //商品编码
+                " name=\"" + paymentTwoDto.getGoodsName() + "\"" +                   //商品名称
+                " unit=\"" + paymentTwoDto.getGoodsUnit() + "\"" +                   //商品单位
+                " price=\"" + paymentTwoDto.getDeclPrice() + "\"" +                 //商品单价
+                " quantity=\"" + paymentTwoDto.getBuyQty() + "\"" +              //商品数量
+                " weight=\"" + paymentTwoDto.getGrossWt() + "\"" +                 //商品重量
+                " amount=\"" + paymentTwoDto.getTotalPrice() + "\"" +              //金额
+                "/>\n" +
+                chargesXml +//父级手续费(无子级手续费);
+                "</payload>";
+        String xml =
+                "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
+                "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"\">\n" +
+                    "<headers>\n" +
+                        " <item key=\"sn\">" + UUID.randomUUID() + "</item>\n" +
+                        " <item key=\"date\">" + date + "</item> \n" +
+                        " <item key=\"organization\">" + paymentTwoDto.getFieldCode() + "</item>\n" +
+                        " <item key=\"bankCode\">MRCCCNB1</item>\n" +
+                        " <item key=\"operation\">MKT006</item>\n" +
+                    "</headers>\n" +
+                    "<plain>" +
+                        CryptoUtil.encrypt(payload)+
+                    "</plain>" +
+                "</message>";
+        return xml;
+    }
 
-                /*"<charges>\n" +//父级手续费(有子级手续费)
-                "         <type></type>\n" +                                                //手续费类型	数据字典:ChargeType
-                "         <sn>"+paymentTwoDto.getOrderNo()+"</sn>\n" +                      //订单号(一级市场订单号)
-                "         <name>"+paymentTwoDto.getPcName()+"</name>\n" +                   //企业名称
-                "         <paperType>0008</paperType>\n" +                                  //证件类型  0008 社会统一信用代码(默认)
-                "         <paperNo>"+paymentTwoDto.getBusinessLicense()+"</paperNo>\n" +    //证件号
-                "         <nationality>中国</nationality>\n" +                              //国籍
-                "         <accountNo>"+paymentTwoDto.getBankCode()+"</accountNo>\n" +       //银行账号
-                "         <bankCode>KCCBCN2K</bankCode>\n" +                                //开户行代码
-                "         <bankNo></bankNo>\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>"+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" +*/
-
-                chargesXml ;      //父级手续费(无子级手续费);
+    /**
+     * 订单退款:二级市场--->银行
+     */
+    public static String MKT007_NoCommission(PaymentTwoDto paymentTwoDto) {
+        String date = sdf.format(new Date());
+        String payload=
+                "<payload xsi:type=\"orderDTO\"" +
+                        " sn=\"" + paymentTwoDto.getOrderNo() + "\"" +                         //订单号
+                        " organization=\"" + paymentTwoDto.getFieldCode() + "\"" +   //互市点机构代码
+                        " currency=\"" + paymentTwoDto.getCurrCode() + "\"" +            //币种
+                        " type=\"002\"" +                                                //业务类型	001 代表扣款订单
+                        " total=\"" + paymentTwoDto.getResalePrice() + "\"" +               //订单总金额 8150.00 【买方总支付金额】(转售金额)
+                        " actualTotal=\"" + paymentTwoDto.getTotalPrice() + "\"" +      //扣除手续费边民实际到账金额  actualTotal忽略
+                        " dateTime=\"" + paymentTwoDto.getDeclTime() + "\"" +            //订单时间	YYYY-MM—DD HH:MM:DD SSS
+                        ">" +
+
+                        "<vendee" +//买方基本信息(采购企业)
+                        " name=\"" + paymentTwoDto.getPcName() + "\"" +                       //企业名称
+                        " papersType=\"0008\"" +                                      //证件类型  0008 社会统一信用代码(默认)
+                        " papersNo=\"" + paymentTwoDto.getBusinessLicense() + "\"" +        //证件号
+                        " nationality=\"0001\"" +                                  //国籍
+                        " accountNo=\"" + paymentTwoDto.getPcBankAccount() + "\"" +     //银行账号
+                        " bankCode=\"MRCCCNB1\"" +                                   //开户行代码
+                        " tel=\"" + paymentTwoDto.getPcContact() + "\"" +                     //联系电话
+                        "/>\n" +
+
+                        "<vendor" +//卖方基础信息(边民)
+                        " name=\"" + paymentTwoDto.getBorderName() + "\"" +                 //边民姓名
+                        " papersType=\"0001\"" +                                    //证件类型  0001 身份证
+                        " papersNo=\"" + paymentTwoDto.getBorderidno() + "\"" +           //边民证件号
+                        " nationality=\"0001\"" +                                //国籍
+                        " accountNo=\"" + paymentTwoDto.getBankCode() + "\"" +        //银行账号
+                        " bankCode=\"MRCCCNB1\"" +                                 //开户行代码
+                        " tel=\"" + paymentTwoDto.getBorderTel() + "\"" +                   //联系电话
+                        "/>\n" +
+
+                        "<items" +//商品明细
+                        " code=\"" + paymentTwoDto.getCodeTs() + "\"" +                      //商品编码
+                        " name=\"" + paymentTwoDto.getGoodsName() + "\"" +                   //商品名称
+                        " unit=\"" + paymentTwoDto.getGoodsUnit() + "\"" +                   //商品单位
+                        " price=\"" + paymentTwoDto.getDeclPrice() + "\"" +                 //商品单价
+                        " quantity=\"" + paymentTwoDto.getBuyQty() + "\"" +              //商品数量
+                        " weight=\"" + paymentTwoDto.getGrossWt() + "\"" +                 //商品重量
+                        " amount=\"" + paymentTwoDto.getTotalPrice() + "\"" +              //金额
+                        "/>\n" +
+                        "</payload>";
         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" +
+                        "<message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"\">\n" +
                         "<headers>\n" +
-                        "         <sn>" + UUID.randomUUID() + "</sn>\n" +
-                        "         <date>" + date + "</date> \n" +
-                        "         <organization>" + paymentTwoDto.getFieldCode() + "</organization>\n" +
-                        "         <bankCode>KCCBCN2K</bankCode>\n" +
-                        "         <operation>MKT006</operation>\n" +
+                        " <item key=\"sn\">" + UUID.randomUUID() + "</item>\n" +
+                        " <item key=\"date\">" + date + "</item> \n" +
+                        " <item key=\"organization\">" + paymentTwoDto.getFieldCode() + "</item>\n" +
+                        " <item key=\"bankCode\">MRCCCNB1</item>\n" +
+                        " <item key=\"operation\">MKT007</item>\n" +
                         "</headers>\n" +
-
-                        " <payload xsi:type=\"orderDTO\">" +
+                        "<plain>" +
                         CryptoUtil.encrypt(payload)+
-                        "</payload>\n" +
+                        "</plain>" +
                         "</message>";
         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";
+            xml += "<charges" +//父级手续费(无子级手续费)
+                    " type=\"OPERATING\"" +                                     //手续费类型	数据字典:ChargeType
+                    " sn=\"" + orderNo + "\"" +                                 //订单号
+                    " name=\"" + companyDto.getName() + "\"" +                  //企业名称
+                    " papersType=\"0008\"" +                                    //证件类型  0008 社会统一信用代码(默认)
+                    " papersNo=\"" + companyDto.getUsci() + "\"" +              //证件号
+                    " nationality=\"0001\"" +                                   //国籍
+                    " accountNo=\"" + companyDto.getBankAccount() + "\"" +      //银行账号
+                    " bankCode=\"MRCCCNB1\"" +                                  //开户行代码
+                    " bankNo=\"\"" +                                            //开户行行号	非必填
+                    " tel=\"" + companyDto.getContact() + "\"" +                //联系电话
+                    " total=\"" + companyDto.getChargesPrice() + "\"" +         //手续费金额
+                    "></charges>\n";
         }
         return xml;
     }

+ 6 - 0
sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserController.java

@@ -157,4 +157,10 @@ public class AppUserController {
 		appUserService.createUser(createDTO);
 	}
 
+	/** 根据fkId查app用户 */
+	@RequestMapping("rpc/getByFkId")
+	public AppUserDto getAppUserByFkId(@RequestParam("fkId") Long fkId){
+		return appUserService.getAppUserByFkId(fkId);
+	}
+
 }

+ 18 - 4
sp-service/sp-admin/src/main/java/com/pj/project/app_user/AppUserService.java

@@ -184,6 +184,19 @@ public class AppUserService extends ServiceImpl<AppUserMapper, AppUser> implemen
         return null;
     }
 
+    public AppUserDto getAppUserByFkId(Long fkId) {
+        LambdaQueryWrapper<AppUser> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AppUser::getFkId, fkId);
+        List<AppUser> appUserList = appUserMapper.selectList(queryWrapper);
+
+        AppUserDto appUserDto = new AppUserDto();
+        if (appUserList.size() == 0) return appUserDto;
+
+        AppUser appUser = appUserList.get(0);
+        BeanUtils.copyProperties(appUser, appUserDto);
+        return appUserDto;
+    }
+
     /**
      * 查集合 - 根据条件(参数为空时代表忽略指定条件)
      */
@@ -604,10 +617,11 @@ public class AppUserService extends ServiceImpl<AppUserMapper, AppUser> implemen
      * @param createDTO
      */
     public void createUser(AppUserCreateDTO createDTO) {
-        log.info("创建账号:{}", JSONUtil.toJsonStr(createDTO));
+        log.info("创建APP账号:{}", JSONUtil.toJsonStr(createDTO));
         String phone = createDTO.getPhone().trim();
         AppUser appUser = this.findByPhone(phone);
         if (appUser != null) {
+            log.info("创建APP账号失败:当前账号的手机号码已存在!!!");
             return;
         }
         appUser = new AppUser();
@@ -615,11 +629,11 @@ public class AppUserService extends ServiceImpl<AppUserMapper, AppUser> implemen
         //密码加密
         String encodePassword = passwordEncoder.encode(phone);
         appUser.setPassword(encodePassword)
-                .setFkId(Long.parseLong(createDTO.getFkId()))
+                .setFkId(createDTO.getFkId())
                 .setUserType(Integer.parseInt(createDTO.getUserType()))
                 .setDeleteStatus(DeleteStatus.DELETE_STATUS_ON.getCode())
-                .setCreateTime(new Date()).setUpdateTime(new Date());
-        this.save(appUser);
+                .setCreateTime(new Date());
+        boolean save = this.save(appUser);
         String content = "您好,您的app账号已生成。账号:" + phone + ", 初始密码:" + phone + "。可前往app进行修改";
         // todo 发送短信
         //SystemObject.smsFactory.handler().sendSMS(phone, content);

+ 4 - 3
sp-service/sp-admin/src/main/java/com/pj/project4sp/admin/SpAdminController.java

@@ -6,6 +6,7 @@ import com.pj.api.dto.AdminCreateDto;
 import com.pj.current.config.SystemObject;
 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;
 
@@ -52,8 +53,8 @@ public class SpAdminController {
      * @return
      */
     @PostMapping("rpc/createAdmin")
-    AjaxJson createAdmin(AdminCreateDto dto) {
-        return AjaxJson.toAjax(spAdminService.createAdmin(dto));
+    public boolean createAdmin(@RequestBody AdminCreateDto dto) {
+        return spAdminService.createAdmin(dto);
     }
 
     /**
@@ -200,7 +201,7 @@ public class SpAdminController {
         return spAdminMapper.getList(so.startPage());
     }
 
-    
+
 
 
 }

+ 19 - 17
sp-service/sp-admin/src/main/java/com/pj/project4sp/admin/SpAdminService.java

@@ -19,10 +19,10 @@ import cn.dev33.satoken.stp.StpUtil;
 @Service
 public class SpAdminService {
 
-	
+
 	@Autowired
 	SpAdminMapper spAdminMapper;
-	
+
 	@Autowired
 	SpAdminPasswordService spAdminPasswordService;
 
@@ -35,6 +35,8 @@ public class SpAdminService {
 	boolean createAdmin(AdminCreateDto dto){
 		SpAdmin admin=spAdminMapper.getByName(dto.getName());
 		if(admin==null){
+			admin = new SpAdmin();
+			admin.setPhone(dto.getName());
 			admin.setName(dto.getName());
 			admin.setType(dto.getType());//合作社
 			admin.setTradeAreaId(dto.getTradeAreaId());
@@ -48,32 +50,32 @@ public class SpAdminService {
 		}
 		return false;
 	}
-	
-	
+
+
 	/**
-	 * 管理员添加一个管理员 
+	 * 管理员添加一个管理员
 	 * @param admin
 	 * @return
 	 */
-	@Transactional(rollbackFor = Exception.class, propagation=Propagation.REQUIRED)	
+	@Transactional(rollbackFor = Exception.class, propagation=Propagation.REQUIRED)
 	public long add(SpAdmin admin) {
 		// 检查姓名是否合法
 		SpAdminUtil.checkAdmin(admin);
-		
-		// 创建人,为当前账号  
-		admin.setCreateByAid(StpUtil.getLoginIdAsLong());	
+
+		// 创建人,为当前账号
+		admin.setCreateByAid(StpUtil.getLoginIdAsLong());
 		// 开始添加
-		spAdminMapper.add(admin);	
+		spAdminMapper.add(admin);
 		// 获取主键
 		long id = SP.publicMapper.getPrimarykey();
 		// 更改密码(md5与明文)
-		spAdminPasswordService.updatePassword(id, admin.getPassword2());	
-		
-		// 返回主键 
+		spAdminPasswordService.updatePassword(id, admin.getPassword2());
+
+		// 返回主键
 		return id;
 	}
-	
-	
-	
-	
+
+
+
+
 }

+ 10 - 10
sp-service/sp-admin/src/main/java/com/pj/project4sp/spcfg/SpCfgController.java

@@ -10,7 +10,7 @@ import com.pj.utils.sg.AjaxJson;
 import cn.dev33.satoken.stp.StpUtil;
 
 /**
- * 系统配置相关 
+ * 系统配置相关
  * @author kong
  *
  */
@@ -20,14 +20,14 @@ public class SpCfgController {
 
 	@Autowired
 	SpCfgService sysCfgService;
-		
+
 	/** 返回指定【cfgName】配置信息 */
 	@RequestMapping("getCfg")
 	public AjaxJson getCfg(String cfgName){
-		StpUtil.checkPermission(AuthConst.SP_CFG);
+		//StpUtil.checkPermission(AuthConst.SP_CFG);
 		return AjaxJson.getSuccessData(sysCfgService.getCfgValue(cfgName));
 	}
-	
+
 	/** 修改指定【cfgName】配置信息  */
 	@RequestMapping("updateCfg")
 	public AjaxJson updateCfg(String cfgName, String cfgValue){
@@ -42,10 +42,10 @@ public class SpCfgController {
 	public AjaxJson appCfg(){
 		return AjaxJson.getSuccessData(sysCfgService.getCfgValue("app_cfg"));
 	}
-	
-	
-	
-	
-	
-	
+
+
+
+
+
+
 }

+ 24 - 23
sp-service/sp-admin/src/main/java/com/pj/project4sp/uploadfile/UploadController.java

@@ -18,51 +18,52 @@ public class UploadController {
 	/** 上传图片 */
 	@RequestMapping("image")
 	public AjaxJson image(MultipartFile file){
-		// 验证文件大小 -> 验证后缀 -> 保存到硬盘 -> 地址返回给前端 
-		UploadUtil.checkFileSize(file); 						
-		UploadUtil.checkSubffix(file.getOriginalFilename(), UploadUtil.uploadConfig.imageSuffix); 	
+		// 验证文件大小 -> 验证后缀 -> 保存到硬盘 -> 地址返回给前端
+		UploadUtil.checkFileSize(file);
+		UploadUtil.checkSubffix(file.getOriginalFilename(), UploadUtil.uploadConfig.imageSuffix);
 		String httpUrl = UploadUtil.saveFile(file, UploadUtil.uploadConfig.imageFolder);
+		httpUrl = httpUrl.substring(httpUrl.indexOf("/sp-admin/"));
 		return AjaxJson.getSuccessData(httpUrl);
 	}
 
 	/** 上传视频  */
 	@RequestMapping("video")
 	public AjaxJson video(MultipartFile file){
-		// 验证文件大小 -> 验证后缀 -> 保存到硬盘 -> 地址返回给前端 
-		UploadUtil.checkFileSize(file); 			
-		UploadUtil.checkSubffix(file.getOriginalFilename(), UploadUtil.uploadConfig.videoSuffix); 
-		String httpUrl = UploadUtil.saveFile(file, UploadUtil.uploadConfig.videoFolder);	
+		// 验证文件大小 -> 验证后缀 -> 保存到硬盘 -> 地址返回给前端
+		UploadUtil.checkFileSize(file);
+		UploadUtil.checkSubffix(file.getOriginalFilename(), UploadUtil.uploadConfig.videoSuffix);
+		String httpUrl = UploadUtil.saveFile(file, UploadUtil.uploadConfig.videoFolder);
 		return AjaxJson.getSuccessData(httpUrl);
 	}
-	
+
 	/** 上传音频   */
 	@RequestMapping("audio")
 	public AjaxJson audio(MultipartFile file){
-		// 验证文件大小 -> 验证后缀 -> 保存到硬盘 -> 地址返回给前端 
-		UploadUtil.checkFileSize(file); 	
-		UploadUtil.checkSubffix(file.getOriginalFilename(), UploadUtil.uploadConfig.audioSuffix); 	
-		String httpUrl = UploadUtil.saveFile(file, UploadUtil.uploadConfig.audioFolder);			
+		// 验证文件大小 -> 验证后缀 -> 保存到硬盘 -> 地址返回给前端
+		UploadUtil.checkFileSize(file);
+		UploadUtil.checkSubffix(file.getOriginalFilename(), UploadUtil.uploadConfig.audioSuffix);
+		String httpUrl = UploadUtil.saveFile(file, UploadUtil.uploadConfig.audioFolder);
 		return AjaxJson.getSuccessData(httpUrl);
 	}
-	
+
 	/** 上传apk   */
 	@RequestMapping("apk")
 	public AjaxJson apk(MultipartFile file){
-		// 验证文件大小 -> 验证后缀 -> 保存到硬盘 -> 地址返回给前端 
-		UploadUtil.checkFileSize(file); 						
-		UploadUtil.checkSubffix(file.getOriginalFilename(), UploadUtil.uploadConfig.apkSuffix); 	
-		String httpUrl = UploadUtil.saveFile(file, UploadUtil.uploadConfig.apkFolder);		
+		// 验证文件大小 -> 验证后缀 -> 保存到硬盘 -> 地址返回给前端
+		UploadUtil.checkFileSize(file);
+		UploadUtil.checkSubffix(file.getOriginalFilename(), UploadUtil.uploadConfig.apkSuffix);
+		String httpUrl = UploadUtil.saveFile(file, UploadUtil.uploadConfig.apkFolder);
 		return AjaxJson.getSuccessData(httpUrl);
 	}
-	
+
 	/** 上传任意文件   */
 	@RequestMapping("file")
 	public AjaxJson file(MultipartFile file){
-		// 验证文件大小 -> 验证后缀 -> 保存到硬盘 -> 地址返回给前端 
-		UploadUtil.checkFileSize(file); 					
-		UploadUtil.checkSubffix(file.getOriginalFilename(), UploadUtil.uploadConfig.fileSuffix); 	
-		String httpUrl = UploadUtil.saveFile(file, UploadUtil.uploadConfig.fileFolder);			
+		// 验证文件大小 -> 验证后缀 -> 保存到硬盘 -> 地址返回给前端
+		UploadUtil.checkFileSize(file);
+		UploadUtil.checkSubffix(file.getOriginalFilename(), UploadUtil.uploadConfig.fileSuffix);
+		String httpUrl = UploadUtil.saveFile(file, UploadUtil.uploadConfig.fileFolder);
 		return AjaxJson.getSuccessData(httpUrl);
 	}
-	
+
 }