Просмотр исходного кода

Merge remote-tracking branch 'origin/dev' into dev

czh 2 лет назад
Родитель
Сommit
880b35e097
99 измененных файлов с 4027 добавлено и 269 удалено
  1. 18 0
      pom.xml
  2. 2 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/aspect/DaoAspect.java
  3. 4 4
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java
  4. 86 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/page/PageRes.java
  5. 1 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/OrderGenerateUtils.java
  6. 1 1
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwLogisticsOrder.java
  7. 6 1
      sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwTradeOrder.java
  8. 2 1
      sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/utils/RedissonUtils.java
  9. 12 3
      sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/ExcelExportController.java
  10. 3 2
      sckw-modules/sckw-example/src/main/java/com/sckw/example/dao/KwsDeptDao.java
  11. 1 1
      sckw-modules/sckw-example/src/main/resources/mapper/KwsDeptDao.xml
  12. 6 6
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/dto/KwfTruckDto.java
  13. 6 12
      sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderController.java
  14. 1 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrder.java
  15. 7 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderGoods.java
  16. 1 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderUnit.java
  17. 4 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AcceptanceOrderParam.java
  18. 9 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UpdateOrderParam.java
  19. 16 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java
  20. 16 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderContractService.java
  21. 30 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderGoodsService.java
  22. 361 47
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  23. 17 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderTrackService.java
  24. 36 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderUnitService.java
  25. 5 0
      sckw-modules/sckw-payment/pom.xml
  26. 149 6
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpLedgerLogisticsController.java
  27. 148 6
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpLedgerTradeController.java
  28. 12 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpLedgerLogisticsMapper.java
  29. 14 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpLedgerLogisticsUnitMapper.java
  30. 7 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpLedgerTradeMapper.java
  31. 14 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpLedgerTradeUnitMapper.java
  32. 36 21
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpLedgerLogistics.java
  33. 112 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpLedgerLogisticsUnit.java
  34. 36 20
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpLedgerTrade.java
  35. 109 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpLedgerTradeUnit.java
  36. 34 6
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpSettlementLogistics.java
  37. 39 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/LedgerEnum.java
  38. 41 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/LedgerTrackEnum.java
  39. 39 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/SettlementEnum.java
  40. 36 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/SettlementTrackEnum.java
  41. 16 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/TradeUnitType.java
  42. 148 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerLogisticsDto.java
  43. 148 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerTradeDto.java
  44. 31 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LedgerConfirmReq.java
  45. 21 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LedgerReq.java
  46. 24 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LedgerSuccessReq.java
  47. 29 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LogisticsReq.java
  48. 105 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LogisticsSendReq.java
  49. 29 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/TradeReq.java
  50. 83 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/TradeSendReq.java
  51. 8 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/LedgerLogVo.java
  52. 172 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/LedgerLogisticsVo.java
  53. 166 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/LedgerTradeVo.java
  54. 41 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/AbsLedger.java
  55. 242 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java
  56. 45 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsTrackService.java
  57. 11 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsUnitService.java
  58. 18 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeOrderService.java
  59. 270 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeService.java
  60. 54 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeTrackService.java
  61. 39 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeUnitService.java
  62. 11 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementLogisticsService.java
  63. 9 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementTradeService.java
  64. 83 8
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerLogisticsMapper.xml
  65. 29 0
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerLogisticsUnitMapper.xml
  66. 56 7
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerTradeMapper.xml
  67. 29 0
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerTradeUnitMapper.xml
  68. 8 2
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpSettlementLogisticsMapper.xml
  69. 9 3
      sckw-modules/sckw-report/src/main/java/com/sckw/report/controller/KwOrderController.java
  70. 32 0
      sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java
  71. 6 0
      sckw-modules/sckw-transport/pom.xml
  72. 55 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/common/enums/CarWaybillEnum.java
  73. 3 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/common/enums/LogisticsOrderEnum.java
  74. 20 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java
  75. 0 15
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ConsignOrderController.java
  76. 17 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/TransportCommonController.java
  77. 6 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java
  78. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java
  79. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderAddress.java
  80. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderCirculate.java
  81. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderContract.java
  82. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderGoods.java
  83. 2 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderSubcontract.java
  84. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderTrack.java
  85. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderUnit.java
  86. 14 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrder.java
  87. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTicket.java
  88. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTrack.java
  89. 71 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/CarListDTO.java
  90. 1 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderDTO.java
  91. 73 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SendCarDTO.java
  92. 0 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsConsignmentParam.java
  93. 133 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  94. 0 25
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java
  95. 39 36
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java
  96. 79 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java
  97. 16 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/utils/StringUtils.java
  98. 37 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml
  99. 3 1
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

+ 18 - 0
pom.xml

@@ -330,4 +330,22 @@
         </dependencies>
     </dependencyManagement>
 
+
+    <build>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-maven-plugin</artifactId>
+                    <version>3.1.0</version>
+                </plugin>
+            </plugins>
+        </pluginManagement>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+    </build>
 </project>

+ 2 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/aspect/DaoAspect.java

@@ -60,10 +60,10 @@ public class DaoAspect {
                 }
                 Long userId = LoginUserHolder.getUserId();
                 objs.forEach(obj -> {
-                    if (isProperty(obj, UPDATE_BY) && Objects.isNull(BeanUtils.getProperty(obj, UPDATE_BY)) && userId != null) {
+                    if (isProperty(obj, UPDATE_BY) && userId != null) {
                         BeanUtils.setProperty(obj, UPDATE_BY, userId);
                     }
-                    if (isProperty(obj, UPDATE_TIME) && Objects.isNull(BeanUtils.getProperty(obj, UPDATE_TIME))) {
+                    if (isProperty(obj, UPDATE_TIME)) {
                         BeanUtils.setProperty(obj, UPDATE_TIME, new Date());
                     }
                 });

+ 4 - 4
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/enums/DictEnum.java

@@ -24,8 +24,8 @@ public enum DictEnum {
     PICKUP_TYPE_1("pickup_type", "1", "采方自提"),
     DELIVERY_TYPE_0("delivery_type", "0", "签发交付"),
     DELIVERY_TYPE_1("delivery_type", "1", "签收交付"),
-    TORDER_SOURCE_0("tOrder_source", "0", "采购下单"),
-    TORDER_SOURCE_1("tOrder_source", "1", "销售代客下单"),
+    TORDER_SOURCE_1("tOrder_source", "1", "采购下单"),
+    TORDER_SOURCE_2("tOrder_source", "2", "销售代客下单"),
     TORDER_STATUS_0("tOrder_status", "0", "已保存"),
     TORDER_STATUS_1("tOrder_status", "1", "待受理"),
     TORDER_STATUS_2("tOrder_status", "2", "已退回"),
@@ -38,8 +38,8 @@ public enum DictEnum {
     CONTRACT_STATUS_1("contract_status", "1", "已签约"),
     TORDER_ADDRESS_TYPE_1("tOrder_address_type", "1", "装货地址"),
     TORDER_ADDRESS_TYPE_2("tOrder_address_type", "2", "卸货地址"),
-    TORDER_UNIT_TYPE_1("tOrder_unit_type", "1", "销售单位"),
-    TORDER_UNIT_TYPE_2("tOrder_unit_type", "2", "采购单位"),
+    TORDER_UNIT_TYPE_1("tOrder_unit_type", "1", "采购单位"),
+    TORDER_UNIT_TYPE_2("tOrder_unit_type", "2", "销售单位"),
     ADDRESS_TYPE_0("address_type", "0", "矿山"),
     INDUSTRY_TYPE_0("industry_type", "0", "砂石"),
     CLASSIFICATION_TYPE_0("classification_type", "0", "石料"),

+ 86 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/page/PageRes.java

@@ -0,0 +1,86 @@
+package com.sckw.core.model.page;
+
+import com.github.pagehelper.PageInfo;
+
+import java.util.List;
+
+/**
+ * 分页结果泛型类
+ *
+ * @author xucaiqin
+ * @date 2023-07-12 08:42:26
+ */
+public class PageRes<T> {
+
+    /**
+     * 当前页数
+     */
+    protected int page;
+    /**
+     * 每页显示条数
+     */
+    protected int pageSize;
+    /**
+     * 总条数
+     */
+    protected long size;
+    /**
+     * 总页数
+     */
+    protected int pages;
+    /**
+     * 数据
+     */
+    protected List<T> list;
+
+    public PageRes() {
+    }
+
+    public PageRes(PageInfo<T> pageInfo) {
+        this.page = pageInfo.getPageNum();
+        this.pageSize = pageInfo.getPageSize();
+        this.size = pageInfo.getTotal();
+        this.pages = pageInfo.getPages();
+        this.list = pageInfo.getList();
+    }
+
+    public void setPage(int page) {
+        this.page = page;
+    }
+
+    public void setPageSize(int pageSize) {
+        this.pageSize = pageSize;
+    }
+
+    public void setSize(long size) {
+        this.size = size;
+    }
+
+    public void setPages(int pages) {
+        this.pages = pages;
+    }
+
+    public void setList(List<T> list) {
+        this.list = list;
+    }
+
+    public int getPage() {
+        return page;
+    }
+
+    public int getPageSize() {
+        return pageSize;
+    }
+
+    public long getSize() {
+        return size;
+    }
+
+    public int getPages() {
+        return pages;
+    }
+
+    public List<T> getList() {
+        return list;
+    }
+}

+ 1 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/OrderGenerateUtils.java

@@ -23,7 +23,7 @@ public class OrderGenerateUtils {
     /**
      * redisson生成订单号 name
      */
-    private static final String ORDER_NO_GENERATOR = "order_no_generator";
+    private static final String ORDER_NO_GENERATOR = "order_no_generator:";
 
 
     /**

+ 1 - 1
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwLogisticsOrder.java

@@ -192,7 +192,7 @@ public class SckwLogisticsOrder {
     /**
      * 商品类型
      */
-    private Long goodsType;
+    private String goodsType;
 
     /**
      * 商品行业

+ 6 - 1
sckw-common/sckw-common-mongo/src/main/java/com/sckw/mongo/model/SckwTradeOrder.java

@@ -1,5 +1,6 @@
 package com.sckw.mongo.model;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -77,11 +78,13 @@ public class SckwTradeOrder {
     /**
      * 订单开始日期
      */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private LocalDate startTime;
 
     /**
      * 订单结束日期
      */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private LocalDate endTime;
 
     /**
@@ -95,7 +98,7 @@ public class SckwTradeOrder {
     private BigDecimal actualAmount;
 
     /**
-     * 订单创建来源类型(采购下单/销售代客下单)
+     * 订单创建来源类型(1采购下单/2销售代客下单)
      */
     private String source;
 
@@ -328,6 +331,7 @@ public class SckwTradeOrder {
     /**
      * 创建时间
      */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
 
     /**
@@ -343,6 +347,7 @@ public class SckwTradeOrder {
     /**
      * 更新时间
      */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
 
     /**

+ 2 - 1
sckw-common/sckw-common-redis/src/main/java/com/sckw/redis/utils/RedissonUtils.java

@@ -283,8 +283,9 @@ public class RedissonUtils {
 
     public static Long getAtomicLong(String name,Long expired) {
         RAtomicLong atomicLong = redissonUtils.redissonClient.getAtomicLong(name);
+        long number = atomicLong.incrementAndGet();
         atomicLong.expire(expired <= 0 ? Duration.ofSeconds(DEFAULT_EXPIRED) : Duration.ofSeconds(expired));
-        return atomicLong.incrementAndGet();
+        return number;
     }
 
     public static void main(String[] args) {

+ 12 - 3
sckw-modules/sckw-example/src/main/java/com/sckw/example/controller/ExcelExportController.java

@@ -1,6 +1,7 @@
 package com.sckw.example.controller;
 
 import com.alibaba.fastjson.JSONObject;
+import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.model.file.FileInfo;
 import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
@@ -138,10 +139,11 @@ public class ExcelExportController {
     @RequestMapping(value = "globalTransactionalDemo", method = RequestMethod.GET)
     public HttpResult globalTransactionalDemo() {
         KwsDept dos = new KwsDept();
-        HttpResult result = null;
+        HttpResult result = new HttpResult();
         result.setMsg(HttpStatus.SUCCESS_MESSAGE);
         try {
-            dos.setId(new IdWorker(1).nextId());
+            long l = new IdWorker(1).nextId();
+            dos.setId(l);
             dos.setSystemType("1");
             dos.setAccount("张三");
             dos.setPassword("password");
@@ -155,9 +157,16 @@ public class ExcelExportController {
             dos.setUpdateBy(123L);
             dos.setCreateTime(new Date());
             dos.setUpdateTime(new Date());
-            kwsDeptDao.insert(dos);
+//            kwsDeptDao.insert(dos);
+//            KwsDept kwsDept = new KwsDept();
+            int insert = kwsDeptDao.insert(dos);
             String xid = RootContext.getXID();
+            System.out.println(xid);
+            System.out.println(l);
             result = fileApiDubboService.selectAll();
+            long nextId = new IdWorker(NumberConstant.ONE).nextId();
+            dos.setId(nextId);
+            int insert1 = kwsDeptDao.insert(dos);
             log.info(JSONObject.toJSONString(result));
         } catch (Exception e) {
             result.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);

+ 3 - 2
sckw-modules/sckw-example/src/main/java/com/sckw/example/dao/KwsDeptDao.java

@@ -1,9 +1,10 @@
 package com.sckw.example.dao;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.example.model.KwsDept;
 import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
-public interface KwsDeptDao {
-    int insert(KwsDept kwsDept);
+public interface KwsDeptDao extends BaseMapper<KwsDept> {
+//    int insert(KwsDept kwsDept);
 }

+ 1 - 1
sckw-modules/sckw-example/src/main/resources/mapper/KwsDeptDao.xml

@@ -40,7 +40,7 @@
         where id = #{id,jdbcType=BIGINT}
     </delete>
     <insert id="insert" parameterType="com.sckw.example.dao.KwsDeptDao">
-        insert into kws_user (id, system_type, account,
+        insert into sckw_system.kws_user (id, system_type, account,
                               `password`, `name`, phone,
                               photo, email, client_id,
                               is_main, remark, `status`,

+ 6 - 6
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/dto/KwfTruckDto.java

@@ -112,10 +112,10 @@ public class KwfTruckDto {
         return isMatch;
     }
 
-    public static void main(String[] args) {
-        String regular = "^[0-9]+(.[0-9]{2})?$";
-        String str = "1.2";
-        boolean bool = matchs(regular, str);
-        System.out.println(bool);
-    }
+//    public static void main(String[] args) {
+//        String regular = "^[0-9]+(.[0-9]{2})?$";
+//        String str = "1.2";
+//        boolean bool = matchs(regular, str);
+//        System.out.println(bool);
+//    }
 }

+ 6 - 12
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderController.java

@@ -3,6 +3,7 @@ package com.sckw.order.controller;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.order.model.vo.req.*;
 import com.sckw.order.serivce.KwoTradeOrderService;
+import io.seata.spring.annotation.GlobalTransactional;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.MediaType;
 import org.springframework.validation.annotation.Validated;
@@ -29,6 +30,7 @@ public class KwoTradeOrderController {
      * @Param purchaseOrderParam:
      * @return: com.sckw.core.web.response.HttpResult
      */
+    @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/addPurchaseOrderDraft", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult addPurchaseOrderDraft(@RequestBody PurchaseOrderParam purchaseOrderParam) {
         kwoTradeOrderService.addPurchaseOrderDraft(purchaseOrderParam);
@@ -42,6 +44,7 @@ public class KwoTradeOrderController {
      * @Param purchaseOrderParam:
      * @return: com.sckw.core.web.response.HttpResult
      */
+    @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/addPurchaseOrderSubmit", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult addPurchaseOrderSubmit(@RequestBody @Validated PurchaseOrderParam purchaseOrderParam) {
         kwoTradeOrderService.addPurchaseOrderSubmit(purchaseOrderParam);
@@ -55,6 +58,7 @@ public class KwoTradeOrderController {
      * @Param valetOrderParam:
      * @return: com.sckw.core.web.response.HttpResult
      */
+    @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/addValetOrderDraft", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult addValetOrderDraft(@RequestBody ValetOrderParam valetOrderParam) {
         kwoTradeOrderService.addValetOrderDraft(valetOrderParam);
@@ -69,24 +73,13 @@ public class KwoTradeOrderController {
      * @Param valetOrderParam:
      * @return: com.sckw.core.web.response.HttpResult
      */
+    @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/addValetOrderSubmit", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult addValetOrderSubmit(@RequestBody @Validated ValetOrderParam valetOrderParam) {
         kwoTradeOrderService.addValetOrderSubmit(valetOrderParam);
         return HttpResult.ok("代客下单提交成功");
     }
 
-    /**
-     * @desc: 订单详情
-     * @author: yzc
-     * @date: 2023-07-07 15:30
-     * @Param id:
-     * @return: com.sckw.core.web.response.HttpResult
-     */
-    @GetMapping("/detail")
-    public HttpResult detail(@RequestParam Long id) {
-        return HttpResult.ok(kwoTradeOrderService.detail(id));
-    }
-
     /**
      * @desc: 修改订单
      * @author: yzc
@@ -94,6 +87,7 @@ public class KwoTradeOrderController {
      * @Param updateOrderParam:
      * @return: com.sckw.core.web.response.HttpResult
      */
+    @GlobalTransactional(name = "default_tx_group")
     @PostMapping(value = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult update(@RequestBody @Validated UpdateOrderParam updateOrderParam) {
         kwoTradeOrderService.update(updateOrderParam);

+ 1 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrder.java

@@ -80,7 +80,7 @@ public class KwoTradeOrder extends BaseModel {
     private BigDecimal actualAmount;
 
     /**
-     * 订单创建来源类型(采购下单/销售代客下单)
+     * 订单创建来源类型(1采购下单/2销售代客下单)
      */
     private String source;
 

+ 7 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderGoods.java

@@ -7,6 +7,8 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
 
+import java.math.BigDecimal;
+
 /**
  * @desc: 交易订单商品信息
  * @author: yzc
@@ -44,6 +46,11 @@ public class KwoTradeOrderGoods extends BaseModel {
      */
     private String unit;
 
+    /**
+     * 商品成交单价
+     */
+    private BigDecimal unitPrice;
+
     /**
      * kwp_goods_price_range表主键ID
      */

+ 1 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderUnit.java

@@ -30,7 +30,7 @@ public class KwoTradeOrderUnit extends BaseModel {
     private String tOrderNo;
 
     /**
-     * 单位类型(1销售单位、2采购单位)
+     * 单位类型(1采购单位、2销售单位)
      */
     private String unitType;
 

+ 4 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AcceptanceOrderParam.java

@@ -41,7 +41,10 @@ public class AcceptanceOrderParam {
     @NotNull(message = "结束时间不能为空")
     private LocalDate endTime;
 
-    @NotNull(message = "提货方式不能为空")
+    @NotBlank(message = "交易方式不能为空")
+    private String trading;
+
+    @NotBlank(message = "提货方式不能为空")
     private String pickupType;
 
     @NotBlank(message = "交付类型不能为空")

+ 9 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UpdateOrderParam.java

@@ -1,6 +1,8 @@
 package com.sckw.order.model.vo.req;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.Max;
+import jakarta.validation.constraints.Min;
 import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Size;
 import lombok.Getter;
@@ -29,6 +31,8 @@ public class UpdateOrderParam {
      * 操作类型0保存、1提交
      */
     @NotNull(message = "操作类型不能为空")
+    @Min(value = 0,message = "非法操作状态")
+    @Max(value = 1,message = "非法操作状态")
     private Integer operateType;
 
     /**
@@ -70,6 +74,11 @@ public class UpdateOrderParam {
      */
     @Size(max = 2, message = "地址信息只能有两条")
     private List<AddressInfo> addressInfo;
+
+    /**
+     * 合同信息
+     */
+    private ContractInfo contractInfo;
     /**
      * 开始时间
      */

+ 16 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java

@@ -1,5 +1,7 @@
 package com.sckw.order.serivce;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.core.model.constant.Global;
 import com.sckw.order.dao.KwoTradeOrderAddressMapper;
 import com.sckw.order.model.KwoTradeOrderAddress;
 import lombok.RequiredArgsConstructor;
@@ -30,4 +32,18 @@ public class KwoTradeOrderAddressService {
     public void insertBatch(List<KwoTradeOrderAddress> list) {
         kwoTradeOrderAddressMapper.insertBatch(list);
     }
+
+    /**
+     * @desc: 根据orderId删除
+     * @author: yzc
+     * @date: 2023-07-14 14:49
+     * @Param orderId:
+     * @return: void
+     */
+    public void delByOrderId(Long orderId) {
+        LambdaUpdateWrapper<KwoTradeOrderAddress> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwoTradeOrderAddress::getTOrderId, orderId).eq(KwoTradeOrderAddress::getDelFlag, Global.NO)
+                .set(KwoTradeOrderAddress::getDelFlag, Global.YES);
+        kwoTradeOrderAddressMapper.update(null, wrapper);
+    }
 }

+ 16 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderContractService.java

@@ -1,5 +1,7 @@
 package com.sckw.order.serivce;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.core.model.constant.Global;
 import com.sckw.order.dao.KwoTradeOrderContractMapper;
 import com.sckw.order.model.KwoTradeOrderContract;
 import lombok.RequiredArgsConstructor;
@@ -28,4 +30,18 @@ public class KwoTradeOrderContractService {
     public void insert(KwoTradeOrderContract contract) {
         kwoTradeOrderContractMapper.insert(contract);
     }
+
+    /**
+     * @desc: 根据orderId删除
+     * @author: yzc
+     * @date: 2023-07-14 14:49
+     * @Param orderId:
+     * @return: void
+     */
+    public void delByOrderId(Long orderId) {
+        LambdaUpdateWrapper<KwoTradeOrderContract> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwoTradeOrderContract::getTOrderId, orderId).eq(KwoTradeOrderContract::getDelFlag, Global.NO)
+                .set(KwoTradeOrderContract::getDelFlag, Global.YES);
+        kwoTradeOrderContractMapper.update(null, wrapper);
+    }
 }

+ 30 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderGoodsService.java

@@ -1,5 +1,8 @@
 package com.sckw.order.serivce;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.core.model.constant.Global;
 import com.sckw.order.dao.KwoTradeOrderGoodsMapper;
 import com.sckw.order.model.KwoTradeOrderGoods;
 import lombok.RequiredArgsConstructor;
@@ -28,4 +31,31 @@ public class KwoTradeOrderGoodsService {
     public void insert(KwoTradeOrderGoods goods) {
         kwoTradeOrderGoodsMapper.insert(goods);
     }
+
+    /**
+     * @desc: 根据订单id获取
+     * @author: yzc
+     * @date: 2023-07-13 17:43
+     * @Param orderId:
+     * @return: com.sckw.order.model.KwoTradeOrderGoods
+     */
+    public KwoTradeOrderGoods getByOrderId(Long orderId) {
+        LambdaQueryWrapper<KwoTradeOrderGoods> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwoTradeOrderGoods::getTOrderId, orderId).eq(KwoTradeOrderGoods::getDelFlag, Global.NO).last("LIMIT 1");
+        return kwoTradeOrderGoodsMapper.selectOne(wrapper);
+    }
+
+    /**
+     * @desc: 根据orderId删除
+     * @author: yzc
+     * @date: 2023-07-14 14:49
+     * @Param orderId:
+     * @return: void
+     */
+    public void delByOrderId(Long orderId) {
+        LambdaUpdateWrapper<KwoTradeOrderGoods> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwoTradeOrderGoods::getTOrderId, orderId).eq(KwoTradeOrderGoods::getDelFlag, Global.NO)
+                .set(KwoTradeOrderGoods::getDelFlag, Global.YES);
+        kwoTradeOrderGoodsMapper.update(null, wrapper);
+    }
 }

+ 361 - 47
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -1,12 +1,15 @@
 package com.sckw.order.serivce;
 
 import com.alibaba.fastjson2.JSON;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.exception.BusinessException;
+import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.vo.TableStatisticRes;
 import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.OrderGenerateUtils;
+import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.mongo.model.SckwTradeOrder;
 import com.sckw.order.dao.KwoTradeOrderMapper;
@@ -63,14 +66,13 @@ public class KwoTradeOrderService {
      * @Param param:
      * @return: void
      */
-    @Transactional(rollbackFor = Exception.class)
     public void addPurchaseOrderDraft(PurchaseOrderParam param) {
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
                 .setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
-                .setSource(DictEnum.TORDER_SOURCE_0.getValue()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
+                .setSource(DictEnum.TORDER_SOURCE_1.getValue()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
         kwoTradeOrderMapper.insert(order);
-        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class));
+        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
 
     }
 
@@ -82,15 +84,22 @@ public class KwoTradeOrderService {
      * @Param tOrderNo:
      * @Param status:
      * @Param param:
+     * @Param isUpdate:
      * @return: void
      */
-    private void addOtherOrderInfo(KwoTradeOrder tradeOrder, ValetOrderParam param) {
+    private void addOtherOrderInfo(KwoTradeOrder tradeOrder, ValetOrderParam param, Boolean isUpdate) {
         Long id = tradeOrder.getId();
         String tOrderNo = tradeOrder.getTOrderNo();
-        SckwTradeOrder order = BeanUtils.copyProperties(tradeOrder, SckwTradeOrder.class);
+        SckwTradeOrder order = new SckwTradeOrder();
         //todo: 当前线程获取企业名称
-        order.setFirmName(String.valueOf(LoginUserHolder.get().getEntId())).setTOrderId(id);
-        //添加商品信息
+        //提前填充这些参数防止初始创建mongodb集合没有这些字段
+        order.setFirmName(String.valueOf(LoginUserHolder.getEntId())).setTOrderId(id).setDeliveryType("").setProjectName("")
+                .setEntrustAmount(BigDecimal.ZERO).setActualAmount(BigDecimal.ZERO).setContractId(0L).setContractNo("")
+                .setContractName("").setContractSigningWay("").setCreateByName(LoginUserHolder.getUserName())
+                .setUpdateByName(LoginUserHolder.getUserName());
+        BeanUtils.copyProperties(tradeOrder, order);
+        //商品信息
+        kwoTradeOrderGoodsService.delByOrderId(id);
         GoodsInfo goodsInfo = param.getGoodsInfo();
         KwoTradeOrderGoods goods = BeanUtils.copyProperties(goodsInfo, KwoTradeOrderGoods.class);
         if (Objects.nonNull(goods)) {
@@ -98,7 +107,8 @@ public class KwoTradeOrderService {
             kwoTradeOrderGoodsService.insert(goods);
             BeanUtils.copyProperties(goodsInfo, order);
         }
-        //添加单位信息
+        //单位信息
+        kwoTradeOrderUnitService.delByOrderId(id);
         List<UnitInfo> unitInfos = param.getUnitInfo();
         if (CollectionUtils.isNotEmpty(unitInfos)) {
             List<KwoTradeOrderUnit> list = new ArrayList<>(unitInfos.size());
@@ -119,7 +129,8 @@ public class KwoTradeOrderService {
             });
             kwoTradeOrderUnitService.insertBatch(list);
         }
-        //添加地址信息
+        //地址信息
+        kwoTradeOrderAddressService.delByOrderId(id);
         List<AddressInfo> addressInfos = param.getAddressInfo();
         if (CollectionUtils.isNotEmpty(addressInfos)) {
             List<KwoTradeOrderAddress> list = new ArrayList<>(addressInfos.size());
@@ -139,7 +150,8 @@ public class KwoTradeOrderService {
             });
             kwoTradeOrderAddressService.insertBatch(list);
         }
-        //添加合同信息
+        //合同信息
+        kwoTradeOrderContractService.delByOrderId(id);
         ContractInfo contractInfo = param.getContractInfo();
         KwoTradeOrderContract contract = BeanUtils.copyProperties(contractInfo, KwoTradeOrderContract.class);
         if (Objects.nonNull(contract)) {
@@ -147,18 +159,18 @@ public class KwoTradeOrderService {
             kwoTradeOrderContractService.insert(contract);
             BeanUtils.copyProperties(contractInfo, order);
         }
-        //添加状态信息
-        KwoTradeOrderTrack track = new KwoTradeOrderTrack();
-        track.setTOrderId(id).setTOrderNo(tOrderNo).setStatus(tradeOrder.getStatus()).setRemark(tradeOrder.getRemark());
-        kwoTradeOrderTrackService.insert(track);
-        order.setDeliveryType("").setProjectName("").setEntrustAmount(BigDecimal.ZERO).setActualAmount(BigDecimal.ZERO)
-                .setContractId(0L).setContractNo("").setContractName("").setContractSigningWay("")
-                .setCreateByName(LoginUserHolder.getUserName()).setUpdateByName(LoginUserHolder.getUserName());
+        //状态信息(草稿更新不加状态记录)
+        if (!isUpdate || !Objects.equals(DictEnum.TORDER_STATUS_0.getValue(), String.valueOf(tradeOrder.getStatus()))) {
+            KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+            track.setTOrderId(id).setTOrderNo(tOrderNo).setStatus(tradeOrder.getStatus()).setRemark(tradeOrder.getRemark());
+            kwoTradeOrderTrackService.insert(track);
+        }
+        int method = isUpdate ? 2 : 1;
         //存MongoDb
-        saveMongoDb(1, order);
+        saveMongoDb(method, order);
     }
 
-    private void saveMongoDb(Integer method, Object order) {
+    private void saveMongoDb(Integer method, SckwTradeOrder order) {
         SckwBusSum busSum = new SckwBusSum();
         busSum.setBusSumType("tradeOrder");
         busSum.setMethod(method);
@@ -174,14 +186,13 @@ public class KwoTradeOrderService {
      * @Param param:
      * @return: void
      */
-    @Transactional(rollbackFor = Exception.class)
     public void addValetOrderDraft(ValetOrderParam param) {
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
                 .setUnit(Objects.nonNull(param.getGoodsInfo()) ? param.getGoodsInfo().getUnit() : null)
-                .setSource(DictEnum.TORDER_SOURCE_1.getValue()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
+                .setSource(DictEnum.TORDER_SOURCE_2.getValue()).setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_0.getValue()));
         kwoTradeOrderMapper.insert(order);
-        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class));
+        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
     }
 
     /**
@@ -191,31 +202,44 @@ public class KwoTradeOrderService {
      * @Param param:
      * @return: void
      */
-    @Transactional(rollbackFor = Exception.class)
     public void addPurchaseOrderSubmit(PurchaseOrderParam param) {
-        orderCheck(param);
+        orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice());
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
-                .setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_0.getValue())
+                .setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_1.getValue())
                 .setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_1.getValue()));
         kwoTradeOrderMapper.insert(order);
-        goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(),param.getAmount());
-        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class));
+        goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
     }
 
-    private void orderCheck(PurchaseOrderParam param) {
+    /**
+     * @desc: 订单提交校验
+     * @author: yzc
+     * @date: 2023-07-14 14:46
+     * @Param goodId:  商品id
+     * @Param trading:  交易方式
+     * @Param price:  订单金额
+     * @Param amount: 订单总量
+     * @Param unitPrice: 成交价格
+     * @return: void
+     */
+    private void orderCheck(Long goodId, String trading, BigDecimal price, BigDecimal amount, BigDecimal unitPrice) {
+        BigDecimal multiply = amount.multiply(unitPrice);
+        if (price.compareTo(amount.multiply(unitPrice)) != 0) {
+            throw new BusinessException("订单总金额不等于商品单价*订单总量!");
+        }
         //todo: 则先校验是否存在对供应企业的预付钱包 ;【预计采购金额】是否大于预付清单的【可用预付】金额
-        KwpGoods goods = goodsInfoService.getGoodsById(param.getGoodsInfo().getGoodsId());
+        KwpGoods goods = goodsInfoService.getGoodsById(goodId);
         if (Objects.isNull(goods) || !Objects.equals(goods.getStatus(), 1)) {
             throw new BusinessException("商品不存在或已下架!");
         }
-        if (Objects.equals(param.getTrading(), DictEnum.TRADE_TYPE_0.getValue())) {
-            if (param.getPrice().compareTo(goods.getAdvancePrice()) < 0){
+        if (Objects.equals(trading, DictEnum.TRADE_TYPE_0.getValue())) {
+            if (price.compareTo(goods.getAdvancePrice()) < 0) {
                 throw new BusinessException("采购订单金额不能小于商品最低预付款限额!");
             }
         }
-        BigDecimal goodsAmount = goods.getAmount();
-        if (goods.getAmount().compareTo(param.getAmount()) < 0) {
+        if (goods.getAmount().compareTo(amount) < 0) {
             throw new BusinessException("商品库存量小于采购数量!");
         }
     }
@@ -229,10 +253,10 @@ public class KwoTradeOrderService {
      */
     @Transactional(rollbackFor = Exception.class)
     public void addValetOrderSubmit(ValetOrderParam param) {
-        orderCheck(param);
+        orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice());
         KwoTradeOrder order = BeanUtils.copyProperties(param, KwoTradeOrder.class);
         order.setEntId(LoginUserHolder.getEntId()).setTOrderNo(OrderGenerateUtils.generateOrderNo(ORDER_NO_PREFIX))
-                .setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_1.getValue());
+                .setUnit(param.getGoodsInfo().getUnit()).setSource(DictEnum.TORDER_SOURCE_2.getValue());
         String contractStatus = param.getContractInfo().getContractStatus();
         if (Objects.equals(contractStatus, DictEnum.CONTRACT_STATUS_0.getValue())) {
             order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_3.getValue()));
@@ -242,8 +266,8 @@ public class KwoTradeOrderService {
             throw new BusinessException("Invalid contract status");
         }
         kwoTradeOrderMapper.insert(order);
-        goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(),param.getAmount());
-        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class));
+        goodsInfoService.updateGoodsAmount(param.getGoodsInfo().getGoodsId(), param.getAmount());
+        addOtherOrderInfo(order, BeanUtils.copyProperties(param, ValetOrderParam.class), false);
     }
 
     /**
@@ -254,51 +278,341 @@ public class KwoTradeOrderService {
      * @return: com.sckw.order.model.vo.res.OrderDetail
      */
     public OrderDetailRes detail(Long id) {
-        return null;
+        if (kwoTradeOrderUnitService.entMatch(id, LoginUserHolder.getEntId(), null)) {
+            throw new BusinessException("无权限查看数据!");
+        }
+        KwoTradeOrder order = getById(id);
+        if (Objects.isNull(order)) {
+            throw new BusinessException("不存在该订单!");
+        }
+        OrderDetailRes orderDetail = BeanUtils.copyProperties(order, OrderDetailRes.class);
+        KwoTradeOrderGoods tradeOrderGoods = kwoTradeOrderGoodsService.getByOrderId(id);
+        return orderDetail;
     }
 
     /**
      * @desc: 修改订单
      * @author: yzc
      * @date: 2023-07-07 15:34
-     * @Param updateOrderParam:
+     * @Param param:
      * @return: void
      */
-    public void update(UpdateOrderParam updateOrderParam) {
+    public void update(UpdateOrderParam param) {
+        KwoTradeOrder order = getById(param.getId());
+        if (Objects.isNull(order)) {
+            throw new BusinessException("Order not found");
+        }
+        String source = order.getSource();
+        String status = String.valueOf(order.getStatus());
+        if ((!Objects.equals(status, DictEnum.TORDER_STATUS_0.getValue()) && !Objects.equals(status, DictEnum.TORDER_STATUS_2.getValue()))
+                && Objects.equals(source, DictEnum.TORDER_SOURCE_1.getValue())) {
+            throw new BusinessException("采购下单只能修改已保存及已退回状态的订单!");
+        }
+        if (Objects.equals(source, DictEnum.TORDER_SOURCE_2.getValue()) && !Objects.equals(status, DictEnum.TORDER_STATUS_0.getValue())) {
+            throw new BusinessException("代客下单只能修改已保存状态的订单!");
+        }
+        if (kwoTradeOrderUnitService.entMatch(param.getId(), LoginUserHolder.getEntId(), source)) {
+            throw new BusinessException("无权限修改此订单!");
+        }
+        if (Objects.equals(param.getOperateType(), 1)) {
+            checkParams(param, source);
+            if (Objects.equals(source, DictEnum.TORDER_SOURCE_1.getValue())) {
+                order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_1.getValue()));
+            } else {
+                String contractStatus = param.getContractInfo().getContractStatus();
+                if (Objects.equals(contractStatus, DictEnum.CONTRACT_STATUS_0.getValue())) {
+                    order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_3.getValue()));
+                } else if (Objects.equals(contractStatus, DictEnum.CONTRACT_STATUS_1.getValue())) {
+                    order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_4.getValue()));
+                } else {
+                    throw new BusinessException("Invalid contract status");
+                }
+            }
+            orderCheck(param.getGoodsInfo().getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getGoodsInfo().getUnitPrice());
+        }
+        order.setAmount(param.getAmount()).setUnit(Objects.isNull(param.getGoodsInfo()) ? null : param.getGoodsInfo().getUnit())
+                .setPrice(param.getPrice()).setTrading(param.getTrading()).setPickupType(param.getPickupType())
+                .setDeliveryType(param.getDeliveryType()).setStartTime(param.getStartTime()).setEndTime(param.getEndTime())
+                .setRemark(param.getRemark());
+        kwoTradeOrderMapper.updateById(order);
+        ValetOrderParam valetOrderParam = BeanUtils.copyProperties(param, ValetOrderParam.class);
+        addOtherOrderInfo(order, valetOrderParam, true);
+    }
+
+
+    private void checkParams(UpdateOrderParam param, String source) {
+        if (Objects.isNull(param.getAmount())) {
+            throw new BusinessException("订单总量不能为空!");
+        }
+        if (Objects.isNull(param.getPrice())) {
+            throw new BusinessException("订单金额不能为空!");
+        }
+        if (StringUtils.isBlank(param.getTrading())) {
+            throw new BusinessException("交易方式不能为空!");
+        }
+        if (StringUtils.isBlank(param.getPickupType())) {
+            throw new BusinessException("提货方式不能为空!");
+        }
+        if (Objects.isNull(param.getStartTime())) {
+            throw new BusinessException("开始时间不能为空!");
+        }
+        if (Objects.isNull(param.getEndTime())) {
+            throw new BusinessException("结束时间不能为空!");
+        }
+        ContractInfo contractInfo = param.getContractInfo();
+        if (Objects.equals(source, DictEnum.TORDER_SOURCE_2.getValue())) {
+            if (Objects.isNull(contractInfo)) {
+                throw new BusinessException("代客下单合同信息不能为空");
+            }
+            if (Objects.isNull(contractInfo.getContractId())) {
+                throw new BusinessException("合同id不能为空!");
+            }
+            if (StringUtils.isBlank(contractInfo.getContractNo())) {
+                throw new BusinessException("合同编号不能为空!");
+            }
+            if (StringUtils.isBlank(contractInfo.getContractName())) {
+                throw new BusinessException("合同名称不能为空!");
+            }
+            if (StringUtils.isBlank(contractInfo.getContractSigningWay())) {
+                throw new BusinessException("合同签约方式不能为空!");
+            }
+            if (StringUtils.isBlank(contractInfo.getContractStatus())) {
+                throw new BusinessException("合同状态不能为空!");
+            }
+        }
+        GoodsInfo goodsInfo = param.getGoodsInfo();
+        if (Objects.isNull(goodsInfo)) {
+            throw new BusinessException("商品信息不能为空!");
+        }
+        if (Objects.isNull(goodsInfo.getGoodsId())) {
+            throw new BusinessException("商品id不能为空!");
+        }
+        if (StringUtils.isBlank(goodsInfo.getGoodsCode())) {
+            throw new BusinessException("商品编号不能为空!");
+        }
+        if (StringUtils.isBlank(goodsInfo.getGoodsName())) {
+            throw new BusinessException("商品名称不能为空!");
+        }
+        if (StringUtils.isBlank(goodsInfo.getGoodsType())) {
+            throw new BusinessException("商品类型不能为空!");
+        }
+        if (Objects.isNull(goodsInfo.getGoodsTaxRate())) {
+            throw new BusinessException("商品发票税率不能为空!");
+        }
+        if (StringUtils.isBlank(goodsInfo.getGoodsSpec())) {
+            throw new BusinessException("商品尺寸大小不能为空!");
+        }
+        if (StringUtils.isBlank(goodsInfo.getUnit())) {
+            throw new BusinessException("商品单位不能为空!");
+        }
+        if (Objects.isNull(goodsInfo.getPriceRangeId())) {
+            throw new BusinessException("价格段id不能为空!");
+        }
+        if (Objects.isNull(goodsInfo.getUnitPrice())) {
+            throw new BusinessException("订单成交单价不能为空!");
+        }
+        if (Objects.isNull(goodsInfo.getCollectionUnitId())) {
+            throw new BusinessException("收款单位id不能为空!");
+        }
+        if (StringUtils.isBlank(goodsInfo.getCollectionUnit())) {
+            throw new BusinessException("收款单位名称不能为空!");
+        }
+
+        List<UnitInfo> unitInfos = param.getUnitInfo();
+        if (CollectionUtils.isEmpty(unitInfos)) {
+            throw new BusinessException("单位信息不能为空!");
+        }
+        unitInfos.forEach(e -> {
+            if (Objects.isNull(e.getUnitType())) {
+                throw new BusinessException("单位类型不能为空!");
+            }
+            if (Objects.isNull(e.getEntId())) {
+                throw new BusinessException("企业id不能为空!");
+            }
+            if (StringUtils.isBlank(e.getFirmName())) {
+                throw new BusinessException("企业名称不能为空!");
+            }
+            if (StringUtils.isBlank(e.getContacts())) {
+                throw new BusinessException("联系人姓名不能为空!");
+            }
+            if (StringUtils.isBlank(e.getPhone())) {
+                throw new BusinessException("联系电话不能为空!");
+            }
+        });
+        List<AddressInfo> addressInfos = param.getAddressInfo();
+        if (CollectionUtils.isEmpty(addressInfos)) {
+            throw new BusinessException("地址信息不能为空!");
+        }
+        addressInfos.forEach(e -> {
+            if (StringUtils.isBlank(e.getAddressType())) {
+                throw new BusinessException("地址类型不能为空!");
+            }
+            if (StringUtils.isBlank(e.getName())) {
+                throw new BusinessException("地址名称不能为空!");
+            }
+            if (StringUtils.isBlank(e.getType())) {
+                throw new BusinessException("地址类型不能为空!");
+            }
+            if (StringUtils.isBlank(e.getContacts())) {
+                throw new BusinessException("联系人姓名不能为空!");
+            }
+            if (StringUtils.isBlank(e.getPhone())) {
+                throw new BusinessException("联系电话不能为空!");
+            }
+            if (Objects.isNull(e.getCityCode())) {
+                throw new BusinessException("所在地区code不能为空!");
+            }
+            if (StringUtils.isBlank(e.getCityName())) {
+                throw new BusinessException("所属区域名称不能为空!");
+            }
+            if (StringUtils.isBlank(e.getDetailAddress())) {
+                throw new BusinessException("详细地址不能为空!");
+            }
+            if (StringUtils.isBlank(e.getLat())) {
+                throw new BusinessException("纬度不能为空!");
+            }
+            if (StringUtils.isBlank(e.getLng())) {
+                throw new BusinessException("经度不能为空!");
+            }
+        });
 
     }
 
-    public void acceptanceOrder(AcceptanceOrderParam acceptanceOrderParam) {
+    /**
+     * @desc: 订单受理
+     * @author: yzc
+     * @date: 2023-07-14 16:59
+     * @Param param:
+     * @return: void
+     */
+    public void acceptanceOrder(AcceptanceOrderParam param) {
+        KwoTradeOrder order = getById(param.getId());
+        if (Objects.isNull(order)) {
+            throw new BusinessException("Order not found");
+        }
+        if (!Objects.equals(DictEnum.TORDER_STATUS_1.getValue(), String.valueOf(order.getStatus()))) {
+            throw new BusinessException("订单状态不为待受理!");
+        }
+        if (kwoTradeOrderUnitService.entMatch(order.getId(), LoginUserHolder.getEntId(), DictEnum.TORDER_UNIT_TYPE_2.getValue())) {
+            throw new BusinessException("无订单操作权限!");
+        }
+        KwoTradeOrderGoods goods = kwoTradeOrderGoodsService.getByOrderId(order.getId());
+        if (Objects.isNull(goods)) {
+            throw new BusinessException("订单商品信息异常!");
+        }
+        orderCheck(goods.getGoodsId(), param.getTrading(), param.getPrice(), param.getAmount(), param.getUnitPrice());
+        //更新订单信息
+        BeanUtils.copyProperties(param, order);
+        String contractStatus = param.getContractInfo().getContractStatus();
+        if (Objects.equals(contractStatus, DictEnum.CONTRACT_STATUS_0.getValue())) {
+            order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_3.getValue()));
+        } else if (Objects.equals(contractStatus, DictEnum.CONTRACT_STATUS_1.getValue())) {
+            order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_4.getValue()));
+        } else {
+            throw new BusinessException("Invalid contract status");
+        }
+        kwoTradeOrderMapper.updateById(order);
+        //保存合同信息
+        ContractInfo contractInfo = param.getContractInfo();
+        KwoTradeOrderContract contract = BeanUtils.copyProperties(contractInfo, KwoTradeOrderContract.class);
+        contract.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo());
+        kwoTradeOrderContractService.insert(contract);
+        //订单状态记录
+        KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+        track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo());
+        kwoTradeOrderTrackService.insert(track);
+        //todo:更新mongodb
+
 
     }
 
-    public void rejectOrder(RejectOrderParam rejectOrderParam) {
+    /**
+     * @desc: 订单驳回
+     * @author: yzc
+     * @date: 2023-07-14 17:00
+     * @Param param:
+     * @return: void
+     */
+    public void rejectOrder(RejectOrderParam param) {
+        KwoTradeOrder order = getById(param.getId());
+        if (Objects.isNull(order)) {
+            throw new BusinessException("Order not found");
+        }
+        if (!Objects.equals(DictEnum.TORDER_STATUS_1.getValue(), String.valueOf(order.getStatus()))) {
+            throw new BusinessException("订单状态不为待受理!");
+        }
+        if (kwoTradeOrderUnitService.entMatch(order.getId(), LoginUserHolder.getEntId(), DictEnum.TORDER_UNIT_TYPE_2.getValue())) {
+            throw new BusinessException("无订单操作权限!");
+        }
+        order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_2.getValue()));
+        kwoTradeOrderMapper.updateById(order);
+        //订单状态记录
+        KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+        track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setRemark(param.getRemark());
+        kwoTradeOrderTrackService.insert(track);
+        //mongodb更新订单状态
 
     }
 
+    /**
+     * @desc: 订单驳回查询
+     * @author: yzc
+     * @date: 2023-07-14 17:00
+     * @Param id:
+     * @return: java.lang.String
+     */
     public String rejectReason(Long id) {
-        return null;
+        KwoTradeOrder order = getById(id);
+        if (Objects.isNull(order)) {
+            throw new BusinessException("Order not found");
+        }
+        if (kwoTradeOrderUnitService.entMatch(order.getId(), LoginUserHolder.getEntId(), null)) {
+            throw new BusinessException("无订单操作权限!");
+        }
+        KwoTradeOrderTrack track = kwoTradeOrderTrackService.getByOrderId(id, Integer.valueOf(DictEnum.TORDER_STATUS_2.getValue()));
+
+        return Objects.isNull(track) ? null : track.getRemark();
     }
 
-    public void completeOrder(CompleteOrderParam completeOrderParam) {
+    /**
+     * @desc: 完结订单
+     * @author: yzc
+     * @date: 2023-07-14 17:01
+     * @Param param:
+     * @return: void
+     */
+    public void completeOrder(CompleteOrderParam param) {
 
     }
 
 
-    public List<OrderListRes> select(OrderListSelectParam orderListSelectParam) {
+    public List<OrderListRes> select(OrderListSelectParam param) {
         return null;
     }
 
-    public TableStatisticRes statistic(OrderListStatisticParam orderListStatisticParam) {
+    public TableStatisticRes statistic(OrderListStatisticParam param) {
         return null;
     }
 
 
-    public void export(CompleteOrderParam completeOrderParam) {
+    public void export(CompleteOrderParam param) {
 
     }
 
     public void batchDelete(List<Long> ids) {
 
     }
+
+    /**
+     * @desc: 根据id获取订单
+     * @author: yzc
+     * @date: 2023-07-13 17:14
+     * @Param id:
+     * @return: com.sckw.order.model.KwoTradeOrder
+     */
+    public KwoTradeOrder getById(Long id) {
+        LambdaQueryWrapper<KwoTradeOrder> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwoTradeOrder::getId, id).eq(KwoTradeOrder::getDelFlag, Global.NO).last("LIMIT 1");
+        return kwoTradeOrderMapper.selectOne(wrapper);
+    }
 }

+ 17 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderTrackService.java

@@ -1,5 +1,7 @@
 package com.sckw.order.serivce;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.core.model.constant.Global;
 import com.sckw.order.dao.KwoTradeOrderTrackMapper;
 import com.sckw.order.model.KwoTradeOrderTrack;
 import lombok.RequiredArgsConstructor;
@@ -28,4 +30,19 @@ public class KwoTradeOrderTrackService {
     public void insert(KwoTradeOrderTrack track) {
         kwoTradeOrderTrackMapper.insert(track);
     }
+
+    /**
+     * @desc: 根据订单id获取
+     * @author: yzc
+     * @date: 2023-07-14 18:01
+     * @Param orderId:
+     * @Param status:
+     * @return: com.sckw.order.model.KwoTradeOrderTrack
+     */
+    public KwoTradeOrderTrack getByOrderId(Long orderId, Integer status) {
+        LambdaQueryWrapper<KwoTradeOrderTrack> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwoTradeOrderTrack::getTOrderId,orderId).eq(KwoTradeOrderTrack::getStatus,status)
+                .eq(KwoTradeOrderTrack::getDelFlag, Global.NO).last("LIMIT 1");
+        return kwoTradeOrderTrackMapper.selectOne(wrapper);
+    }
 }

+ 36 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderUnitService.java

@@ -1,5 +1,9 @@
 package com.sckw.order.serivce;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.core.model.constant.Global;
+import com.sckw.core.utils.StringUtils;
 import com.sckw.order.dao.KwoTradeOrderUnitMapper;
 import com.sckw.order.model.KwoTradeOrderUnit;
 import lombok.RequiredArgsConstructor;
@@ -7,6 +11,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @desc: 交易订单采购/销售企业信息service
@@ -30,4 +35,35 @@ public class KwoTradeOrderUnitService {
     public void insertBatch(List<KwoTradeOrderUnit> list) {
         kwoTradeOrderUnitMapper.insertBatch(list);
     }
+
+    /**
+     * @desc: 企业匹配
+     * @author: yzc
+     * @date: 2023-07-13 16:56
+     * @Param orderId:
+     * @Param entId:
+     * @Param unitType:
+     * @return: void
+     */
+    public Boolean entMatch(Long orderId, Long entId, String unitType) {
+        LambdaQueryWrapper<KwoTradeOrderUnit> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwoTradeOrderUnit::getTopEntId, entId).eq(KwoTradeOrderUnit::getTOrderId, orderId)
+                .eq(StringUtils.isNotBlank(unitType), KwoTradeOrderUnit::getUnitType, unitType)
+                .eq(KwoTradeOrderUnit::getDelFlag, Global.NO).last("LIMIT 1");
+        return Objects.isNull(kwoTradeOrderUnitMapper.selectOne(wrapper));
+    }
+
+    /**
+     * @desc: 根据orderId删除
+     * @author: yzc
+     * @date: 2023-07-14 14:49
+     * @Param orderId:
+     * @return: void
+     */
+    public void delByOrderId(Long orderId) {
+        LambdaUpdateWrapper<KwoTradeOrderUnit> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwoTradeOrderUnit::getTOrderId, orderId).eq(KwoTradeOrderUnit::getDelFlag, Global.NO)
+                .set(KwoTradeOrderUnit::getDelFlag, Global.YES);
+        kwoTradeOrderUnitMapper.update(null, wrapper);
+    }
 }

+ 5 - 0
sckw-modules/sckw-payment/pom.xml

@@ -54,6 +54,11 @@
             <artifactId>sckw-system-api</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-common-excel</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 149 - 6
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpLedgerLogisticsController.java

@@ -1,13 +1,156 @@
 package com.sckw.payment.controller;
+
+import com.sckw.core.model.page.PageRes;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.payment.model.dto.LedgerLogisticsDto;
+import com.sckw.payment.model.vo.req.*;
+import com.sckw.payment.model.vo.res.LedgerLogisticsVo;
+import com.sckw.payment.service.KwpLedgerLogisticsService;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
-* 对账-物流订单
-*
-* @author xucaiqin
-*/
+ * 对账-物流订单
+ *
+ * @author xucaiqin
+ */
 @RestController
-@RequestMapping("/kwp_ledger_logistics")
+@RequestMapping("/kwpLedgerLogistics")
 public class KwpLedgerLogisticsController {
-    
+    @Resource
+    private KwpLedgerLogisticsService kwpLedgerLogisticsService;
+
+    /**
+     * 物流对账单-发起对账(保存草稿)
+     *
+     * @param logisticsReq
+     * @return
+     */
+    @PostMapping("sendDraft")
+    public HttpResult sendDraft(@RequestBody @Valid LogisticsSendReq logisticsReq) {
+        return HttpResult.ok(kwpLedgerLogisticsService.sendLedgerDraft(logisticsReq));
+    }
+
+    /**
+     * 物流对账单-发起对账
+     *
+     * @param logisticsReq
+     * @return
+     */
+    @PostMapping("send")
+    public HttpResult send(@RequestBody @Valid LogisticsSendReq logisticsReq) {
+        return HttpResult.ok(kwpLedgerLogisticsService.sendLedger(logisticsReq));
+    }
+
+    /**
+     * 物流对账单列表查询
+     *
+     * @param logisticsReq
+     * @return
+     */
+    @PostMapping("pageList")
+    public HttpResult pageList(@RequestBody @Valid LogisticsReq logisticsReq) {
+        return HttpResult.ok(kwpLedgerLogisticsService.pageList(logisticsReq));
+    }
+
+    /**
+     * 删除对账单
+     *
+     * @param id
+     * @return
+     */
+    @DeleteMapping("delete")
+    public HttpResult delete(@RequestParam("id") Long id) {
+        return HttpResult.ok(kwpLedgerLogisticsService.remove(id));
+    }
+
+    /**
+     * 物流对账单-撤回对账
+     *
+     * @param id
+     * @return
+     */
+    @PostMapping("back")
+    public HttpResult back(@RequestParam("id") Long id) {
+        return HttpResult.ok(kwpLedgerLogisticsService.backOrder(id));
+    }
+
+    /**
+     * 物流对账单-对账确认
+     *
+     * @param confirmReq
+     * @return
+     */
+    @PostMapping("confirm")
+    public HttpResult confirm(@RequestBody @Valid LedgerConfirmReq confirmReq) {
+        return HttpResult.ok(kwpLedgerLogisticsService.confirmOrder(confirmReq));
+    }
+
+    /**
+     * 物流对账单-驳回查询
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("queryBack")
+    public HttpResult queryBack(@RequestParam("id") Long id) {
+        return HttpResult.ok(kwpLedgerLogisticsService.queryBack(id));
+    }
+
+    /**
+     * 物流对账单-驳回
+     *
+     * @param ledgerReq
+     * @return
+     */
+    @PostMapping("doBack")
+    public HttpResult doBack(@RequestBody @Valid LedgerReq ledgerReq) {
+        return HttpResult.ok(kwpLedgerLogisticsService.doBack(ledgerReq));
+    }
+
+    /**
+     * 物流对账单-对账完成
+     * <p>
+     * 生成结算单
+     * </p>
+     *
+     * @param ledgerReq
+     * @return
+     */
+    @PostMapping("success")
+    public HttpResult orderSuccess(@RequestBody @Valid LedgerSuccessReq ledgerReq) {
+        return HttpResult.ok(kwpLedgerLogisticsService.orderSuccess(ledgerReq));
+    }
+
+    /**
+     * 导出
+     *
+     * @param response
+     * @param logisticsReq
+     * @return
+     */
+    @PostMapping("export")
+    public HttpResult export(HttpServletResponse response, @RequestBody LogisticsReq logisticsReq) {
+        PageRes<LedgerLogisticsDto> pageResult = kwpLedgerLogisticsService.pageList(logisticsReq);
+        List<LedgerLogisticsDto> list = pageResult.getList();
+        if (CollectionUtils.isEmpty(list)) {
+            return HttpResult.error("没有可导出的数据");
+        }
+        List<LedgerLogisticsVo> collect = list.stream().map(a -> {
+            LedgerLogisticsVo ledgerLogisticsVo = new LedgerLogisticsVo();
+            BeanUtils.copyProperties(a, ledgerLogisticsVo);
+            return ledgerLogisticsVo;
+        }).collect(Collectors.toList());
+
+        ExcelUtil.download(response, LedgerLogisticsVo.class, collect);
+        return null;
+    }
 }

+ 148 - 6
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpLedgerTradeController.java

@@ -1,13 +1,155 @@
 package com.sckw.payment.controller;
+
+import com.sckw.core.model.page.PageRes;
+import com.sckw.core.web.response.HttpResult;
+import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.payment.model.dto.LedgerTradeDto;
+import com.sckw.payment.model.vo.req.*;
+import com.sckw.payment.model.vo.res.LedgerLogisticsVo;
+import com.sckw.payment.service.KwpLedgerTradeService;
+import jakarta.annotation.Resource;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.Valid;
+import org.springframework.beans.BeanUtils;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
-* 对账-交易订单
-*
-* @author xucaiqin
-*/
+ * 对账-交易订单
+ *
+ * @author xucaiqin
+ */
 @RestController
-@RequestMapping("/kwp_ledger_trade")
+@RequestMapping("/kwpLedgerTrade")
 public class KwpLedgerTradeController {
-    
+    @Resource
+    private KwpLedgerTradeService kwpLedgerTradeService;
+
+    /**
+     * 贸易对账单-发起对账(保存草稿)
+     *
+     * @param tradeSendReq
+     * @return
+     */
+    @PostMapping("sendDraft")
+    public HttpResult sendDraft(@RequestBody @Valid TradeSendReq tradeSendReq) {
+        return HttpResult.ok(kwpLedgerTradeService.sendLedgerDraft(tradeSendReq));
+    }
+
+    /**
+     * 贸易对账单-发起对账
+     *
+     * @param tradeSendReq
+     * @return
+     */
+    @PostMapping("send")
+    public HttpResult send(@RequestBody @Valid TradeSendReq tradeSendReq) {
+        return HttpResult.ok(kwpLedgerTradeService.sendLedger(tradeSendReq));
+    }
+
+    /**
+     * 贸易对账单列表查询
+     *
+     * @param tradeReq
+     * @return
+     */
+    @PostMapping("pageList")
+    public HttpResult pageList(@RequestBody @Valid TradeReq tradeReq) {
+        return HttpResult.ok(kwpLedgerTradeService.pageList(tradeReq));
+    }
+
+    /**
+     * 删除对账单
+     *
+     * @param id
+     * @return
+     */
+    @DeleteMapping("delete")
+    public HttpResult delete(@RequestParam("id") Long id) {
+        return HttpResult.ok(kwpLedgerTradeService.remove(id));
+    }
+
+    /**
+     * 贸易对账单-撤回对账
+     *
+     * @param id
+     * @return
+     */
+    @PostMapping("back")
+    public HttpResult back(@RequestParam("id") Long id) {
+        return HttpResult.ok(kwpLedgerTradeService.backOrder(id));
+    }
+
+    /**
+     * 贸易对账单-对账确认
+     *
+     * @param confirmReq
+     * @return
+     */
+    @PostMapping("confirm")
+    public HttpResult confirm(@RequestBody @Valid LedgerConfirmReq confirmReq) {
+        return HttpResult.ok(kwpLedgerTradeService.confirmOrder(confirmReq));
+    }
+
+    /**
+     * 贸易对账单-驳回查询
+     *
+     * @param id
+     * @return
+     */
+    @GetMapping("queryBack")
+    public HttpResult queryBack(@RequestParam("id") Long id) {
+        return HttpResult.ok(kwpLedgerTradeService.queryBack(id));
+    }
+
+    /**
+     * 贸易对账单-驳回
+     *
+     * @param ledgerReq
+     * @return
+     */
+    @PostMapping("doBack")
+    public HttpResult doBack(@RequestBody @Valid LedgerReq ledgerReq) {
+        return HttpResult.ok(kwpLedgerTradeService.doBack(ledgerReq));
+    }
+
+    /**
+     * 贸易对账单-对账完成
+     * <p>
+     * 生成结算单
+     * </p>
+     *
+     * @param ledgerReq
+     * @return
+     */
+    @PostMapping("success")
+    public HttpResult orderSuccess(@RequestBody @Valid LedgerSuccessReq ledgerReq) {
+        return HttpResult.ok(kwpLedgerTradeService.orderSuccess(ledgerReq));
+    }
+
+    /**
+     * 导出
+     *
+     * @param response
+     * @param tradeReq
+     * @return
+     */
+    @PostMapping("export")
+    public HttpResult export(HttpServletResponse response, @RequestBody TradeReq tradeReq) {
+        PageRes<LedgerTradeDto> pageResult = kwpLedgerTradeService.pageList(tradeReq);
+        List<LedgerTradeDto> list = pageResult.getList();
+        if (CollectionUtils.isEmpty(list)) {
+            return HttpResult.error("没有可导出的数据");
+        }
+        List<LedgerLogisticsVo> collect = list.stream().map(a -> {
+            LedgerLogisticsVo ledgerLogisticsVo = new LedgerLogisticsVo();
+            BeanUtils.copyProperties(a, ledgerLogisticsVo);
+            return ledgerLogisticsVo;
+        }).collect(Collectors.toList());
+        ExcelUtil.download(response, LedgerLogisticsVo.class, collect);
+        return null;
+    }
 }

+ 12 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpLedgerLogisticsMapper.java

@@ -2,13 +2,24 @@ package com.sckw.payment.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.payment.model.KwpLedgerLogistics;
+import com.sckw.payment.model.dto.LedgerLogisticsDto;
+import com.sckw.payment.model.vo.req.LogisticsReq;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @author xucaiqin
- * @date 2023-07-10 16:42:19
+ * @date 2023-07-14 09:08:11
  */
 
 @Mapper
 public interface KwpLedgerLogisticsMapper extends BaseMapper<KwpLedgerLogistics> {
+    /**
+     * @param logisticsReq
+     * @param ids          客户单位id
+     * @return
+     */
+    List<LedgerLogisticsDto> pageSelect(@Param("logisticsReq") LogisticsReq logisticsReq, @Param("ids") List<Long> ids);
 }

+ 14 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpLedgerLogisticsUnitMapper.java

@@ -0,0 +1,14 @@
+package com.sckw.payment.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.payment.model.KwpLedgerLogisticsUnit;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-13 17:32:34
+ */
+
+@Mapper
+public interface KwpLedgerLogisticsUnitMapper extends BaseMapper<KwpLedgerLogisticsUnit> {
+}

+ 7 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpLedgerTradeMapper.java

@@ -2,13 +2,19 @@ package com.sckw.payment.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.payment.model.KwpLedgerTrade;
+import com.sckw.payment.model.dto.LedgerTradeDto;
+import com.sckw.payment.model.vo.req.TradeReq;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @author xucaiqin
- * @date 2023-07-10 16:42:20
+ * @date 2023-07-14 10:12:40
  */
 
 @Mapper
 public interface KwpLedgerTradeMapper extends BaseMapper<KwpLedgerTrade> {
+    List<LedgerTradeDto> pageSelect(@Param("tradeReq") TradeReq tradeReq);
 }

+ 14 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpLedgerTradeUnitMapper.java

@@ -0,0 +1,14 @@
+package com.sckw.payment.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.payment.model.KwpLedgerTradeUnit;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-14 09:23:57
+ */
+
+@Mapper
+public interface KwpLedgerTradeUnitMapper extends BaseMapper<KwpLedgerTradeUnit> {
+}

+ 36 - 21
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpLedgerLogistics.java

@@ -11,13 +11,10 @@ import lombok.ToString;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
-/**
- * @author xucaiqin
- * @date 2023-07-10 16:42:19
- */
-
 /**
  * 对账-物流订单
+ * @author xucaiqin
+ * @date 2023-07-14 09:08:11
  */
 @Getter
 @Setter
@@ -37,17 +34,14 @@ public class KwpLedgerLogistics {
     private Long entId;
 
     /**
-     * 托运单位
+     * 物流对账单编号
      */
-    @TableField(value = "check_ent_id")
-    private Long checkEntId;
+    @TableField(value = "l_ledger_no")
+    private String lLedgerNo;
 
     /**
-     * 承运单位
+     * 对账单名称
      */
-    @TableField(value = "carrier_ent_id")
-    private Long carrierEntId;
-
     @TableField(value = "`name`")
     private String name;
 
@@ -63,23 +57,17 @@ public class KwpLedgerLogistics {
     @TableField(value = "end_time")
     private LocalDateTime endTime;
 
-    /**
-     * 对账金额
-     */
-    @TableField(value = "price")
-    private BigDecimal price;
-
     /**
      * 发票税率(%)
      */
     @TableField(value = "tax_rate")
-    private BigDecimal taxRate;
+    private Integer taxRate;
 
     /**
      * 交易方式(预付款、货到付款)
      */
     @TableField(value = "trading")
-    private String trading;
+    private Integer trading;
 
     /**
      * 卸货量
@@ -111,18 +99,42 @@ public class KwpLedgerLogistics {
     @TableField(value = "total_price")
     private BigDecimal totalPrice;
 
+    /**
+     * 实际结算金额
+     */
+    @TableField(value = "settle_price")
+    private BigDecimal settlePrice;
+
     /**
      * 已收款/元
      */
     @TableField(value = "actual_price")
     private BigDecimal actualPrice;
 
+    /**
+     * 审核人联系方式(托运方)
+     */
+    @TableField(value = "audit_user")
+    private String auditUser;
+
+    /**
+     * 审核人电话(托运方)
+     */
+    @TableField(value = "audit_phone")
+    private String auditPhone;
+
     /**
      * 对账清单凭证
      */
     @TableField(value = "url")
     private String url;
 
+    /**
+     * 生成时间
+     */
+    @TableField(value = "generate_time")
+    private LocalDateTime generateTime;
+
     /**
      * 备注
      */
@@ -130,7 +142,7 @@ public class KwpLedgerLogistics {
     private String remark;
 
     /**
-     * 状态(待对账、对账中、已对账、已完成、已取消、已退回)
+     * 状态(1-已保存、2-待对账、3-已对账、4-已完成、5-已退回)
      */
     @TableField(value = "`status`")
     private Integer status;
@@ -138,6 +150,9 @@ public class KwpLedgerLogistics {
     @TableField(value = "create_by")
     private Long createBy;
 
+    /**
+     * 创建时间
+     */
     @TableField(value = "create_time")
     private LocalDateTime createTime;
 

+ 112 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpLedgerLogisticsUnit.java

@@ -0,0 +1,112 @@
+package com.sckw.payment.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-13 17:32:34
+ */
+
+/**
+    * 物流对账单托运方或承运方企业信息
+    */
+@Getter
+@Setter
+@ToString
+@TableName(value = "kwp_ledger_logistics_unit")
+public class KwpLedgerLogisticsUnit {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.INPUT)
+    private Long id;
+
+    /**
+     * 物流对账单id
+     */
+    @TableField(value = "l_ledger_id")
+    private Long lLedgerId;
+
+    /**
+     * 物流对账单编号
+     */
+    @TableField(value = "l_ledger_no")
+    private String lLedgerNo;
+
+    /**
+     * 单位类型(1托运方、2承运方)
+     */
+    @TableField(value = "unit_type")
+    private Integer unitType;
+
+    /**
+     * 企业id
+     */
+    @TableField(value = "ent_id")
+    private Long entId;
+
+    /**
+     * 顶级企业ID
+     */
+    @TableField(value = "top_ent_id")
+    private Long topEntId;
+
+    /**
+     * 企业名称
+     */
+    @TableField(value = "firm_name")
+    private String firmName;
+
+    /**
+     * 联系人姓名
+     */
+    @TableField(value = "contacts")
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    @TableField(value = "phone")
+    private String phone;
+
+    /**
+     * 备注
+     */
+    @TableField(value = "remark")
+    private String remark;
+
+    /**
+     * 用户状态(0正常、1已锁)
+     */
+    @TableField(value = "`status`")
+    private Integer status;
+
+    @TableField(value = "create_by")
+    private Long createBy;
+
+    @TableField(value = "create_time")
+    private LocalDateTime createTime;
+
+    @TableField(value = "update_by")
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    @TableField(value = "update_time")
+    private LocalDateTime updateTime;
+
+    /**
+     * 是否删除(0未删除,1删除)
+     */
+    @TableField(value = "del_flag")
+    private Integer delFlag;
+}

+ 36 - 20
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpLedgerTrade.java

@@ -4,19 +4,17 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
-/**
- * @author xucaiqin
- * @date 2023-07-10 16:42:20
- */
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 /**
  * 对账-交易订单
+ * @author xucaiqin
+ * @date 2023-07-14 10:12:40
  */
 @Getter
 @Setter
@@ -36,17 +34,14 @@ public class KwpLedgerTrade {
     private Long entId;
 
     /**
-     * 采购单位
+     * 交易对账单编号
      */
-    @TableField(value = "procure_ent_id")
-    private Long procureEntId;
+    @TableField(value = "t_ledger_no")
+    private String tLedgerNo;
 
     /**
-     * 供应单位
+     * 对账单名称
      */
-    @TableField(value = "supply_ent_id")
-    private Long supplyEntId;
-
     @TableField(value = "`name`")
     private String name;
 
@@ -62,17 +57,11 @@ public class KwpLedgerTrade {
     @TableField(value = "end_time")
     private LocalDateTime endTime;
 
-    /**
-     * 对账金额
-     */
-    @TableField(value = "price")
-    private BigDecimal price;
-
     /**
      * 发票税率(%)
      */
     @TableField(value = "tax_rate")
-    private BigDecimal taxRate;
+    private Integer taxRate;
 
     /**
      * 交易方式(预付款、货到付款)
@@ -86,12 +75,36 @@ public class KwpLedgerTrade {
     @TableField(value = "total_price")
     private BigDecimal totalPrice;
 
+    /**
+     * 实际计算金额
+     */
+    @TableField(value = "settle_price")
+    private BigDecimal settlePrice;
+
     /**
      * 已收款/元
      */
     @TableField(value = "actual_price")
     private BigDecimal actualPrice;
 
+    /**
+     * 审核人联系方式(采购方)
+     */
+    @TableField(value = "audit_user")
+    private String auditUser;
+
+    /**
+     * 审核人电话(采购方)
+     */
+    @TableField(value = "audit_phone")
+    private String auditPhone;
+
+    /**
+     * 生成时间
+     */
+    @TableField(value = "generate_time")
+    private LocalDateTime generateTime;
+
     /**
      * 对账清单凭证
      */
@@ -113,6 +126,9 @@ public class KwpLedgerTrade {
     @TableField(value = "create_by")
     private Long createBy;
 
+    /**
+     * 创建时间
+     */
     @TableField(value = "create_time")
     private LocalDateTime createTime;
 

+ 109 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpLedgerTradeUnit.java

@@ -0,0 +1,109 @@
+package com.sckw.payment.model;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.time.LocalDateTime;
+
+/**
+ * 销售方/采购方企业信息
+ * @author xucaiqin
+ * @date 2023-07-14 09:23:57
+ */
+@Getter
+@Setter
+@ToString
+@TableName(value = "kwp_ledger_trade_unit")
+public class KwpLedgerTradeUnit {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.INPUT)
+    private Long id;
+
+    /**
+     * 贸易对账单id
+     */
+    @TableField(value = "t_ledger_id")
+    private Long tLedgerId;
+
+    /**
+     * 贸易对账单编号
+     */
+    @TableField(value = "t_ledger_no")
+    private String tLedgerNo;
+
+    /**
+     * 单位类型(1采购方、2销售方)
+     */
+    @TableField(value = "unit_type")
+    private Integer unitType;
+
+    /**
+     * 企业id
+     */
+    @TableField(value = "ent_id")
+    private Long entId;
+
+    /**
+     * 顶级企业ID
+     */
+    @TableField(value = "top_ent_id")
+    private Long topEntId;
+
+    /**
+     * 企业名称
+     */
+    @TableField(value = "firm_name")
+    private String firmName;
+
+    /**
+     * 联系人姓名
+     */
+    @TableField(value = "contacts")
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    @TableField(value = "phone")
+    private String phone;
+
+    /**
+     * 备注
+     */
+    @TableField(value = "remark")
+    private String remark;
+
+    /**
+     * 用户状态(0正常、1已锁)
+     */
+    @TableField(value = "`status`")
+    private Integer status;
+
+    @TableField(value = "create_by")
+    private Long createBy;
+
+    @TableField(value = "create_time")
+    private LocalDateTime createTime;
+
+    @TableField(value = "update_by")
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    @TableField(value = "update_time")
+    private LocalDateTime updateTime;
+
+    /**
+     * 是否删除(0未删除,1删除)
+     */
+    @TableField(value = "del_flag")
+    private Integer delFlag;
+}

+ 34 - 6
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/KwpSettlementLogistics.java

@@ -4,19 +4,17 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 
-/**
- * @author xucaiqin
- * @date 2023-07-10 16:42:20
- */
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 /**
  * 结算-物流订单
+ * @author xucaiqin
+ * @date 2023-07-10 16:42:20
  */
 @Getter
 @Setter
@@ -62,12 +60,42 @@ public class KwpSettlementLogistics {
     @TableField(value = "actual_price")
     private BigDecimal actualPrice;
 
+    /**
+     * 预计收款日期
+     */
+    @TableField(value = "receipt_time")
+    private LocalDateTime receiptTime;
+
     /**
      * 备注
      */
     @TableField(value = "remark")
     private String remark;
 
+    /**
+     * 对账审核人名称
+     */
+    @TableField(value = "audit_user")
+    private String auditUser;
+
+    /**
+     * 对账审核人电话
+     */
+    @TableField(value = "audit_phone")
+    private String auditPhone;
+
+    /**
+     * 对账完成人名称
+     */
+    @TableField(value = "success_user")
+    private String successUser;
+
+    /**
+     * 对账完成人电话
+     */
+    @TableField(value = "success_phone")
+    private String successPhone;
+
     /**
      * 状态(待回款、部分回款、全部回款、回退)
      */

+ 39 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/LedgerEnum.java

@@ -0,0 +1,39 @@
+package com.sckw.payment.model.constant;
+
+/**
+ * 物流、贸易
+ * 对账单状态枚举
+ *
+ * @author xucaiqin
+ * @date 2023-07-11 12:00:52
+ */
+public enum LedgerEnum {
+    SAVE(1, "已保存"),
+    TO_LEDGER(2, "待对账"),
+    LEDGERED(3, "已对账"),
+    SUCCESS(4, "已完成"),
+    BACK(5, "已退回");
+    private int status;
+    private String desc;
+
+    LedgerEnum(int status, String desc) {
+        this.status = status;
+        this.desc = desc;
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+}

+ 41 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/LedgerTrackEnum.java

@@ -0,0 +1,41 @@
+package com.sckw.payment.model.constant;
+
+/**
+ * 物流对账、贸易对账
+ * 对账记录track枚举
+ *
+ * @author xucaiqin
+ * @date 2023-07-11 12:00:52
+ */
+public enum LedgerTrackEnum {
+    SAVE(1, "保存对帐"),
+    TO_LEDGER(2, "发起对账"),
+    REVOKE(3, "撤回对账"),
+    DELETE(4, "删除对账"),
+    CONFIRM(5, "对账确认"),
+    REJECT(6, "对账驳回"),
+    SUCCESS(7, "对账完成");
+    private int status;
+    private String desc;
+
+    LedgerTrackEnum(int status, String desc) {
+        this.status = status;
+        this.desc = desc;
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+}

+ 39 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/SettlementEnum.java

@@ -0,0 +1,39 @@
+package com.sckw.payment.model.constant;
+
+/**
+ * 物流、贸易
+ * 结算单状态枚举
+ *
+ * @author xucaiqin
+ * @date 2023-07-11 12:00:52
+ */
+public enum SettlementEnum {
+    SAVE(1, "已保存"),
+    TO_LEDGER(2, "待对账"),
+    LEDGERED(3, "已对账"),
+    SUCCESS(4, "已完成"),
+    BACK(5, "已退回");
+    private int status;
+    private String desc;
+
+    SettlementEnum(int status, String desc) {
+        this.status = status;
+        this.desc = desc;
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+}

+ 36 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/SettlementTrackEnum.java

@@ -0,0 +1,36 @@
+package com.sckw.payment.model.constant;
+
+/**
+ * 结算track表状态枚举
+ *
+ * @author xucaiqin
+ * @date 2023-07-13 16:12:41
+ */
+public enum SettlementTrackEnum {
+
+    SUCCESS(7,"对账完成");
+
+    private int status;
+    private String desc;
+
+    SettlementTrackEnum(int status, String desc) {
+        this.status = status;
+        this.desc = desc;
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+}

+ 16 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/constant/TradeUnitType.java

@@ -0,0 +1,16 @@
+package com.sckw.payment.model.constant;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-14 09:26:16
+ */
+public interface TradeUnitType {
+    /**
+     * 销售方
+     */
+    Integer SELL = 2;
+    /**
+     * 采购方
+     */
+    Integer PURCHASE = 1;
+}

+ 148 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerLogisticsDto.java

@@ -0,0 +1,148 @@
+package com.sckw.payment.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 对账-物流订单
+ *
+ * @author xucaiqin
+ * @date 2023-07-10 18:11:24
+ */
+@Getter
+@Setter
+public class LedgerLogisticsDto {
+    /**
+     * 主键
+     */
+    private Long id;
+    /**
+     * 物流对账单编号
+     */
+    private String lLedgerNo;
+
+    /**
+     * 对账单名称
+     */
+    private String name;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 托运单位
+     */
+    private Long checkEntId;
+
+    /**
+     * 承运单位
+     */
+    private Long carrierEntId;
+
+
+    /**
+     * 开始日期
+     */
+    private LocalDateTime startTime;
+
+    /**
+     * 结束日期
+     */
+    private LocalDateTime endTime;
+
+    /**
+     * 对账金额
+     */
+    private BigDecimal price;
+
+    /**
+     * 发票税率(%)
+     */
+    private BigDecimal taxRate;
+
+    /**
+     * 交易方式(预付款、货到付款)
+     */
+    private String trading;
+
+    /**
+     * 卸货量
+     */
+    private BigDecimal unloadAmount;
+
+    /**
+     * 装货量
+     */
+    private BigDecimal loadAmount;
+
+    /**
+     * 亏损量
+     */
+    private BigDecimal deficitAmount;
+
+    /**
+     * 合理损耗量
+     */
+    private BigDecimal loseAmount;
+
+    /**
+     * 总应收/元
+     */
+    private BigDecimal totalPrice;
+
+    /**
+     * 实际结算金额
+     */
+    private BigDecimal settlePrice;
+
+    /**
+     * 已收款/元
+     */
+    private BigDecimal actualPrice;
+
+    /**
+     * 对账审核人电话
+     */
+    private String auditPhone;
+
+    /**
+     * 对账审核人名称
+     */
+    private String auditUser;
+
+    /**
+     * 对账清单凭证
+     */
+    private String url;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 状态(待对账、对账中、已对账、已完成、已取消、已退回)
+     */
+    private Integer status;
+
+    private Long createBy;
+
+    private LocalDateTime createTime;
+
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 订单数量
+     */
+    private Long orderCount;
+}

+ 148 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/LedgerTradeDto.java

@@ -0,0 +1,148 @@
+package com.sckw.payment.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 对账-贸易订单
+ *
+ * @author xucaiqin
+ * @date 2023-07-10 18:11:24
+ */
+@Getter
+@Setter
+public class LedgerTradeDto {
+    /**
+     * 主键
+     */
+    private Long id;
+    /**
+     * 物流对账单编号
+     */
+    private String lLedgerNo;
+
+    /**
+     * 对账单名称
+     */
+    private String name;
+
+    /**
+     * 企业id
+     */
+    private Long entId;
+
+    /**
+     * 托运单位
+     */
+    private Long checkEntId;
+
+    /**
+     * 承运单位
+     */
+    private Long carrierEntId;
+
+
+    /**
+     * 开始日期
+     */
+    private LocalDateTime startTime;
+
+    /**
+     * 结束日期
+     */
+    private LocalDateTime endTime;
+
+    /**
+     * 对账金额
+     */
+    private BigDecimal price;
+
+    /**
+     * 发票税率(%)
+     */
+    private BigDecimal taxRate;
+
+    /**
+     * 交易方式(预付款、货到付款)
+     */
+    private String trading;
+
+    /**
+     * 卸货量
+     */
+    private BigDecimal unloadAmount;
+
+    /**
+     * 装货量
+     */
+    private BigDecimal loadAmount;
+
+    /**
+     * 亏损量
+     */
+    private BigDecimal deficitAmount;
+
+    /**
+     * 合理损耗量
+     */
+    private BigDecimal loseAmount;
+
+    /**
+     * 总应收/元
+     */
+    private BigDecimal totalPrice;
+
+    /**
+     * 实际结算金额
+     */
+    private BigDecimal settlePrice;
+
+    /**
+     * 已收款/元
+     */
+    private BigDecimal actualPrice;
+
+    /**
+     * 对账审核人电话
+     */
+    private String auditPhone;
+
+    /**
+     * 对账审核人名称
+     */
+    private String auditUser;
+
+    /**
+     * 对账清单凭证
+     */
+    private String url;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 状态(待对账、对账中、已对账、已完成、已取消、已退回)
+     */
+    private Integer status;
+
+    private Long createBy;
+
+    private LocalDateTime createTime;
+
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 订单数量
+     */
+    private Long orderCount;
+}

+ 31 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LedgerConfirmReq.java

@@ -0,0 +1,31 @@
+package com.sckw.payment.model.vo.req;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 对账确认
+ *
+ * @author xucaiqin
+ * @date 2023-07-10 17:05:28
+ */
+@Getter
+@Setter
+public class LedgerConfirmReq {
+    @NotNull(message = "id不能为空")
+    private Long id;
+    /**
+     * 对账审核人
+     */
+    @NotBlank(message = "对账审核人不能为空")
+    private String auditUser;
+    /**
+     * 对账审核人联系方式
+     */
+    @NotBlank(message = "对账审核人联系方式为空")
+    private String auditPhone;
+    @NotBlank(message = "对账清单凭证不能为空")
+    private String url;
+}

+ 21 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LedgerReq.java

@@ -0,0 +1,21 @@
+package com.sckw.payment.model.vo.req;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-10 17:05:28
+ */
+@Getter
+@Setter
+public class LedgerReq {
+    @NotNull(message = "对账单id不能为空")
+    private Long id;
+    @NotBlank(message = "驳回原因不能为空")
+    @Size(max = 400, message = "最大不能超过400字符")
+    private String remark;
+}

+ 24 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LedgerSuccessReq.java

@@ -0,0 +1,24 @@
+package com.sckw.payment.model.vo.req;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 对账完成
+ *
+ * @author xucaiqin
+ * @date 2023-07-10 17:05:28
+ */
+@Getter
+@Setter
+public class LedgerSuccessReq {
+    @NotNull(message = "物流对账单id不能为空")
+    private Long id;
+    @NotBlank(message = "财务联系人不能为空")
+    private String successUser;
+    @NotBlank(message = "财务联系电话不能为空")
+    private String successPhone;
+
+}

+ 29 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LogisticsReq.java

@@ -0,0 +1,29 @@
+package com.sckw.payment.model.vo.req;
+
+import com.sckw.core.model.vo.BasePara;
+import com.sckw.payment.model.constant.LedgerEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-10 17:05:28
+ */
+@Getter
+@Setter
+public class LogisticsReq extends BasePara {
+    @Serial
+    private static final long serialVersionUID = 5328731681168692784L;
+    private LocalDateTime startCreateTime;
+    private LocalDateTime endCreateTime;
+    private Integer trading;
+    /**
+     * @see LedgerEnum
+     */
+    private Integer status;
+    private List<Long> ids;
+}

+ 105 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/LogisticsSendReq.java

@@ -0,0 +1,105 @@
+package com.sckw.payment.model.vo.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.PositiveOrZero;
+import jakarta.validation.constraints.Size;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-10 17:05:28
+ */
+@Getter
+@Setter
+public class LogisticsSendReq {
+
+    private Long id;
+    /**
+     * 托运单位(客户单位)
+     */
+    @NotNull(message = "客户单位不能为空")
+    private Long checkEntId;
+
+    /**
+     * 承运单位
+     */
+    private Long carrierEntId;
+    /**
+     * 名称
+     */
+    @NotBlank(message = "对账表名称不能为空")
+    private String name;
+    /**
+     * 开始日期
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @NotNull(message = "计划开始日期不能为空")
+    private LocalDateTime startTime;
+    /**
+     * 结束日期
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @NotNull(message = "计划结束日期不能为空")
+    private LocalDateTime endTime;
+    /**
+     * 实际结算金额
+     */
+    @NotNull(message = "实际结算金额不能为空")
+    @PositiveOrZero(message = "实际结算金额必须大于等于0")
+    private BigDecimal settlePrice;
+    /**
+     * 发票税率(%)
+     */
+    @NotNull(message = "发票税率(%)不能为空")
+    private Integer taxRate;
+    /**
+     * 交易方式
+     */
+    @NotNull(message = "付款方式不能为空")
+    private Integer trading;
+    /**
+     * 卸货量
+     */
+    private BigDecimal unloadAmount;
+    /**
+     * 装货量
+     */
+    private BigDecimal loadAmount;
+    /**
+     * 亏损量
+     */
+    private BigDecimal deficitAmount;
+    /**
+     * 合理损耗量
+     */
+    private BigDecimal loseAmount;
+    /**
+     * 总应收/元
+     */
+    @NotNull(message = "总应收不能为空")
+    @PositiveOrZero(message = "总应收必须大于等于0")
+    private BigDecimal totalPrice;
+    /**
+     * 已收款/元
+     */
+    private BigDecimal actualPrice;
+    /**
+     * 备注
+     */
+    @Size(max = 200, message = "备注不能超过200字")
+    private String remark;
+    /**
+     * 承运订单
+     */
+    private List<Long> ids;
+}

+ 29 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/TradeReq.java

@@ -0,0 +1,29 @@
+package com.sckw.payment.model.vo.req;
+
+import com.sckw.core.model.vo.BasePara;
+import com.sckw.payment.model.constant.LedgerEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-10 17:05:28
+ */
+@Getter
+@Setter
+public class TradeReq extends BasePara {
+    @Serial
+    private static final long serialVersionUID = 5328731681168692784L;
+    private LocalDateTime startCreateTime;
+    private LocalDateTime endCreateTime;
+    private Integer trading;
+    /**
+     * @see LedgerEnum
+     */
+    private Integer status;
+    private List<Long> ids;
+}

+ 83 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/TradeSendReq.java

@@ -0,0 +1,83 @@
+package com.sckw.payment.model.vo.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import jakarta.validation.constraints.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 贸易对账单
+ *
+ * @author xucaiqin
+ * @date 2023-07-10 17:05:28
+ */
+@Getter
+@Setter
+public class TradeSendReq {
+
+    private Long id;
+    /**
+     * 采购单位(客户单位)
+     */
+    @NotNull(message = "客户单位不能为空")
+    private Long purchaseEntId;
+    /**
+     * 名称
+     */
+    @NotBlank(message = "对账表名称不能为空")
+    private String name;
+    /**
+     * 开始日期
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @NotNull(message = "计划开始日期不能为空")
+    private LocalDateTime startTime;
+    /**
+     * 结束日期
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @NotNull(message = "计划结束日期不能为空")
+    private LocalDateTime endTime;
+    /**
+     * 实际结算金额
+     */
+    @NotNull(message = "实际结算金额不能为空")
+    @PositiveOrZero(message = "实际结算金额必须大于等于0")
+    private BigDecimal settlePrice;
+    /**
+     * 发票税率(%)
+     */
+    @NotNull(message = "发票税率(%)不能为空")
+    private Integer taxRate;
+    /**
+     * 交易方式
+     */
+    @NotNull(message = "付款方式不能为空")
+    private Integer trading;
+    /**
+     * 总应收/元
+     */
+    @NotNull(message = "总应收不能为空")
+    @PositiveOrZero(message = "总应收必须大于等于0")
+    private BigDecimal totalPrice;
+
+    /**
+     * 备注
+     */
+    @Size(max = 200, message = "备注不能超过200字")
+    private String remark;
+    /**
+     * 销售订单
+     */
+    @NotEmpty(message = "销售订单不能为空")
+    private List<Long> ids;
+
+    private LocalDateTime generateTime;
+}

+ 8 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/LedgerLogVo.java

@@ -0,0 +1,8 @@
+package com.sckw.payment.model.vo.res;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-10 17:04:51
+ */
+public class LedgerLogVo {
+}

+ 172 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/LedgerLogisticsVo.java

@@ -0,0 +1,172 @@
+package com.sckw.payment.model.vo.res;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.sckw.excel.annotation.ExcelContext;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 对账-物流订单
+ *
+ * @author xucaiqin
+ * @date 2023-07-11 15:17:12
+ */
+@Getter
+@Setter
+@ExcelContext(fileName = "物流对账单表", sheetName = "物流对账单表")
+public class LedgerLogisticsVo {
+    /**
+     * 主键
+     */
+    @ExcelProperty(value = "id")
+    private Long id;
+    /**
+     * 物流对账单编号
+     */
+    //@ExcelProperty(value = "物流对账单编号")
+    private String lLedgerNo;
+
+    /**
+     * 对账单名称
+     */
+    //@ExcelProperty(value = "对账单名称")
+    private String name;
+
+    /**
+     * 企业id
+     */
+    //@ExcelProperty(value = "企业id")
+    private Long entId;
+
+    /**
+     * 托运单位
+     */
+    //@ExcelProperty(value = "托运单位")
+    private Long checkEntId;
+
+    /**
+     * 承运单位
+     */
+    //@ExcelProperty(value = "承运单位")
+    private Long carrierEntId;
+
+
+    /**
+     * 开始日期
+     */
+    @ExcelProperty(value = "开始日期")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startTime;
+
+    /**
+     * 结束日期
+     */
+    @ExcelProperty(value = "结束日期")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
+
+    /**
+     * 对账金额
+     */
+    //@ExcelProperty(value = "对账金额")
+    private BigDecimal price;
+
+    /**
+     * 发票税率(%)
+     */
+    //@ExcelProperty(value = "发票税率(%)")
+    private BigDecimal taxRate;
+
+    /**
+     * 交易方式(预付款、货到付款)
+     */
+    //@ExcelProperty(value = "交易方式")
+    private String trading;
+
+    /**
+     * 卸货量
+     */
+    //@ExcelProperty(value = "卸货量")
+    private BigDecimal unloadAmount;
+
+    /**
+     * 装货量
+     */
+    //@ExcelProperty(value = "装货量")
+    private BigDecimal loadAmount;
+
+    /**
+     * 亏损量
+     */
+    //@ExcelProperty(value = "亏损量")
+    private BigDecimal deficitAmount;
+
+    /**
+     * 合理损耗量
+     */
+    //@ExcelProperty(value = "合理损耗量")
+    private BigDecimal loseAmount;
+
+    /**
+     * 总应收/元
+     */
+    private BigDecimal totalPrice;
+
+    /**
+     * 实际结算金额
+     */
+    private BigDecimal settlePrice;
+
+    /**
+     * 已收款/元
+     */
+    private BigDecimal actualPrice;
+
+    /**
+     * 对账审核人电话
+     */
+    private String auditPhone;
+
+    /**
+     * 对账审核人名称
+     */
+    private String auditUser;
+
+    /**
+     * 对账清单凭证
+     */
+    private String url;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 状态(待对账、对账中、已对账、已完成、已取消、已退回)
+     */
+    private Integer status;
+
+    private Long createBy;
+
+    private LocalDateTime createTime;
+
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 订单数量
+     */
+    private Long orderCount;
+}

+ 166 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/LedgerTradeVo.java

@@ -0,0 +1,166 @@
+package com.sckw.payment.model.vo.res;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.sckw.excel.annotation.ExcelContext;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 对账-贸易订单
+ *
+ * @author xucaiqin
+ * @date 2023-07-11 15:17:12
+ */
+@Getter
+@Setter
+@ExcelContext(fileName = "贸易对账单表", sheetName = "贸易对账单表")
+public class LedgerTradeVo {
+    /**
+     * 主键
+     */
+    @ExcelProperty(value = "id")
+    private Long id;
+    /**
+     * 贸易对账单编号
+     */
+    //@ExcelProperty(value = "贸易对账单编号")
+    private String tLedgerNo;
+
+    /**
+     * 对账单名称
+     */
+    //@ExcelProperty(value = "对账单名称")
+    private String name;
+
+    /**
+     * 企业id
+     */
+    //@ExcelProperty(value = "企业id")
+    private Long entId;
+
+    /**
+     * 托运单位
+     */
+    //@ExcelProperty(value = "托运单位")
+    private Long checkEntId;
+
+    /**
+     * 承运单位
+     */
+    //@ExcelProperty(value = "承运单位")
+    private Long carrierEntId;
+
+
+    /**
+     * 开始日期
+     */
+    //@ExcelProperty(value = "开始日期")
+    private LocalDateTime startTime;
+
+    /**
+     * 结束日期
+     */
+    //@ExcelProperty(value = "结束日期")
+    private LocalDateTime endTime;
+
+    /**
+     * 对账金额
+     */
+    //@ExcelProperty(value = "对账金额")
+    private BigDecimal price;
+
+    /**
+     * 发票税率(%)
+     */
+    //@ExcelProperty(value = "发票税率(%)")
+    private BigDecimal taxRate;
+
+    /**
+     * 交易方式(预付款、货到付款)
+     */
+    //@ExcelProperty(value = "交易方式")
+    private String trading;
+
+    /**
+     * 卸货量
+     */
+    //@ExcelProperty(value = "卸货量")
+    private BigDecimal unloadAmount;
+
+    /**
+     * 装货量
+     */
+    //@ExcelProperty(value = "装货量")
+    private BigDecimal loadAmount;
+
+    /**
+     * 亏损量
+     */
+    //@ExcelProperty(value = "亏损量")
+    private BigDecimal deficitAmount;
+
+    /**
+     * 合理损耗量
+     */
+    //@ExcelProperty(value = "合理损耗量")
+    private BigDecimal loseAmount;
+
+    /**
+     * 总应收/元
+     */
+    private BigDecimal totalPrice;
+
+    /**
+     * 实际结算金额
+     */
+    private BigDecimal settlePrice;
+
+    /**
+     * 已收款/元
+     */
+    private BigDecimal actualPrice;
+
+    /**
+     * 对账审核人电话
+     */
+    private String auditPhone;
+
+    /**
+     * 对账审核人名称
+     */
+    private String auditUser;
+
+    /**
+     * 对账清单凭证
+     */
+    private String url;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 状态(待对账、对账中、已对账、已完成、已取消、已退回)
+     */
+    private Integer status;
+
+    private Long createBy;
+
+    private LocalDateTime createTime;
+
+    private Long updateBy;
+
+    /**
+     * 更新时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 订单数量
+     */
+    private Long orderCount;
+}

+ 41 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/AbsLedger.java

@@ -0,0 +1,41 @@
+package com.sckw.payment.service;
+
+import com.alibaba.nacos.shaded.com.google.common.collect.Lists;
+import com.sckw.core.exception.BusinessException;
+import com.sckw.payment.model.constant.LedgerEnum;
+
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-13 15:40:37
+ */
+public abstract class AbsLedger {
+    public void deleteCheck(Integer status){
+        List<Integer> objects = Lists.newArrayList(LedgerEnum.BACK.getStatus(), LedgerEnum.SAVE.getStatus());
+        if (!objects.contains(status)) {
+            throw new BusinessException("只有【已保存】和【已退回】的单据才支持删除!");
+        }
+    }
+    /**
+     * 撤回订单校验
+     *
+     * @param status
+     */
+    public void revokeCheck(Integer status) {
+        if (LedgerEnum.TO_LEDGER.getStatus() != status) {
+            throw new BusinessException("只有【待对账】的单据才支持撤销!");
+        }
+    }
+
+    /**
+     * 完结订单校验
+     *
+     * @param status
+     */
+    public void successCheck(Integer status) {
+        if (LedgerEnum.LEDGERED.getStatus() != status) {
+            throw new BusinessException("只有【已对账】的订单支持完成对账!");
+        }
+    }
+}

+ 242 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsService.java

@@ -1,11 +1,252 @@
 package com.sckw.payment.service;
 
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.sckw.core.exception.BusinessException;
+import com.sckw.core.model.page.PageRes;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.payment.dao.KwpLedgerLogisticsMapper;
+import com.sckw.payment.dao.KwpLedgerLogisticsOrderMapper;
+import com.sckw.payment.model.KwpLedgerLogistics;
+import com.sckw.payment.model.KwpLedgerLogisticsOrder;
+import com.sckw.payment.model.KwpLedgerLogisticsTrack;
+import com.sckw.payment.model.KwpSettlementLogistics;
+import com.sckw.payment.model.constant.LedgerEnum;
+import com.sckw.payment.model.constant.LedgerTrackEnum;
+import com.sckw.payment.model.dto.LedgerLogisticsDto;
+import com.sckw.payment.model.vo.req.*;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
 /**
  * @author xucaiqin
  * @date 2023-07-10 16:38:36
  */
 @Service
-public class KwpLedgerLogisticsService {
+@AllArgsConstructor
+public class KwpLedgerLogisticsService extends AbsLedger {
+    private final KwpLedgerLogisticsTrackService logisticsTrackService;
+    private final KwpSettlementLogisticsService settlementLogisticsService;
+    private final KwpLedgerLogisticsMapper logisticsMapper;
+    private final KwpLedgerLogisticsOrderMapper logisticsOrderMapper;
+
+    /**
+     * 分页查询物流对账单列表
+     *
+     * @param logisticsReq 查询参数
+     * @return
+     */
+    public PageRes<LedgerLogisticsDto> pageList(LogisticsReq logisticsReq) {
+        //todo 查询缓存,获取客户企业id
+        String keywords = logisticsReq.getKeywords();
+        if (StringUtils.isNotBlank(keywords)) {
+
+        }
+        PageHelper.startPage(logisticsReq.getPage(), logisticsReq.getPageSize());
+
+        List<LedgerLogisticsDto> kwpLedgerLogisticsList = logisticsMapper.pageSelect(logisticsReq, new ArrayList<>());
+
+        return new PageRes<>(new PageInfo<>(kwpLedgerLogisticsList));
+    }
+
+    /**
+     * 保存物流对账单
+     *
+     * @param logisticsReq
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public String sendLedger(LogisticsSendReq logisticsReq) {
+        Long id = logisticsReq.getId();
+        if (Objects.isNull(id)) {
+            //新增
+        } else {
+            //修改
+        }
+        return "新增对账单成功";
+    }
+
+    /**
+     * 保存物流对账单草稿
+     *
+     * @param logisticsReq
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public String sendLedgerDraft(LogisticsSendReq logisticsReq) {
+        /*插入物流对账单*/
+        KwpLedgerLogistics kwpLedgerLogistics = new KwpLedgerLogistics();
+        kwpLedgerLogistics.setId(new IdWorker(1).nextId());
+        kwpLedgerLogistics.setEntId(0L);//todo
+        kwpLedgerLogistics.setLLedgerNo("");//todo
+        kwpLedgerLogistics.setName(logisticsReq.getName());
+        kwpLedgerLogistics.setStartTime(logisticsReq.getStartTime());
+        kwpLedgerLogistics.setEndTime(logisticsReq.getEndTime());
+        kwpLedgerLogistics.setTaxRate(logisticsReq.getTaxRate());//todo 发票税率数据库字段类型
+        kwpLedgerLogistics.setTrading(logisticsReq.getTrading());
+        kwpLedgerLogistics.setTotalPrice(logisticsReq.getTotalPrice());
+        kwpLedgerLogistics.setSettlePrice(logisticsReq.getSettlePrice());
+        //todo 查询运单
+
+        kwpLedgerLogistics.setUnloadAmount(new BigDecimal("0"));
+        kwpLedgerLogistics.setLoadAmount(new BigDecimal("0"));
+        kwpLedgerLogistics.setDeficitAmount(new BigDecimal("0"));
+        kwpLedgerLogistics.setLoseAmount(new BigDecimal("0"));
+        kwpLedgerLogistics.setActualPrice(new BigDecimal("0"));
+        kwpLedgerLogistics.setGenerateTime(null);
+        kwpLedgerLogistics.setUrl("");
+        kwpLedgerLogistics.setRemark(logisticsReq.getRemark());
+        kwpLedgerLogistics.setStatus(LedgerEnum.SAVE.getStatus());
+        kwpLedgerLogistics.setCreateBy(0L);//todo
+        kwpLedgerLogistics.setCreateTime(LocalDateTime.now());
+        kwpLedgerLogistics.setUpdateBy(0L);
+        kwpLedgerLogistics.setUpdateTime(LocalDateTime.now());
+        kwpLedgerLogistics.setDelFlag(0);
+        logisticsMapper.insert(kwpLedgerLogistics);
+        /*插入对账关联物流运单*/
+        List<Long> ids = logisticsReq.getIds();
+        for (Long id : ids) {
+            KwpLedgerLogisticsOrder kwpLedgerLogisticsOrder = new KwpLedgerLogisticsOrder();
+            kwpLedgerLogisticsOrder.setId(new IdWorker(1).nextId());
+            kwpLedgerLogisticsOrder.setLLedgerId(kwpLedgerLogistics.getId());
+            kwpLedgerLogisticsOrder.setLOrderId(id);
+            kwpLedgerLogisticsOrder.setRemark("");
+            kwpLedgerLogisticsOrder.setStatus(0);
+            logisticsOrderMapper.insert(kwpLedgerLogisticsOrder);
+        }
+        logisticsTrackService.saveTrack(kwpLedgerLogistics.getId(), "", LedgerTrackEnum.SAVE);
+        return "保存成功";
+    }
+
+    /**
+     * 删除物流对账单
+     *
+     * @param id 物流对账单id
+     * @return
+     */
+    public Integer remove(Long id) {
+        KwpLedgerLogistics kwpLedgerLogistics = logisticsMapper.selectById(id);
+        if (Objects.isNull(kwpLedgerLogistics)) {
+            throw new BusinessException("对账单不存在!");
+        }
+        deleteCheck(kwpLedgerLogistics.getStatus());
+        kwpLedgerLogistics.setDelFlag(1);
+        logisticsMapper.updateById(kwpLedgerLogistics);
+        return logisticsTrackService.saveTrack(id, "", LedgerTrackEnum.DELETE);
+    }
+
+    /**
+     * 撤回物流对账单
+     *
+     * @param id 物流对账单id
+     * @return
+     */
+    public Integer backOrder(Long id) {
+        KwpLedgerLogistics kwpLedgerLogistics = logisticsMapper.selectById(id);
+        if (Objects.isNull(kwpLedgerLogistics)) {
+            throw new BusinessException("对账单不存在!");
+        }
+        revokeCheck(kwpLedgerLogistics.getStatus());
+
+        kwpLedgerLogistics.setStatus(LedgerEnum.BACK.getStatus());
+        logisticsMapper.updateById(kwpLedgerLogistics);
+        return logisticsTrackService.saveTrack(id, "", LedgerTrackEnum.REVOKE);
+    }
+
+    /**
+     * 查询物流对账单驳回记录
+     *
+     * @param id 物流对账单id
+     * @return 物流对账单驳回记录
+     */
+    public List<KwpLedgerLogisticsTrack> queryBack(Long id) {
+        return logisticsTrackService.selectList(id, LedgerTrackEnum.REJECT);
+    }
+
+    /**
+     * 驳回物流对账单
+     *
+     * @param ledgerReq 驳回参数
+     * @return
+     */
+    public Integer doBack(LedgerReq ledgerReq) {
+        KwpLedgerLogistics kwpLedgerLogistics = logisticsMapper.selectById(ledgerReq.getId());
+        if (Objects.isNull(kwpLedgerLogistics)) {
+            throw new BusinessException("对账单不存在!");
+        }
+        return logisticsTrackService.saveTrack(ledgerReq.getId(), ledgerReq.getRemark(), LedgerTrackEnum.REJECT);
+    }
+
+    /**
+     * 对账确认
+     * 订单变更为已对账
+     *
+     * @param confirmReq
+     * @return
+     */
+    public Integer confirmOrder(LedgerConfirmReq confirmReq) {
+        KwpLedgerLogistics kwpLedgerLogistics = logisticsMapper.selectById(confirmReq.getId());
+        if (Objects.isNull(kwpLedgerLogistics)) {
+            throw new BusinessException("对账单不存在!");
+        }
+        kwpLedgerLogistics.setStatus(LedgerEnum.LEDGERED.getStatus());
+        kwpLedgerLogistics.setAuditPhone(confirmReq.getAuditPhone());
+        kwpLedgerLogistics.setAuditUser(confirmReq.getAuditUser());
+        kwpLedgerLogistics.setUrl(confirmReq.getUrl());
+        kwpLedgerLogistics.setUpdateTime(LocalDateTime.now());
+        logisticsMapper.updateById(kwpLedgerLogistics);
+        return logisticsTrackService.saveTrack(confirmReq.getId(), "", LedgerTrackEnum.CONFIRM);
+    }
+
+    /**
+     * 对账完成
+     *
+     * @param ledgerReq
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public String orderSuccess(LedgerSuccessReq ledgerReq) {
+        KwpLedgerLogistics kwpLedgerLogistics = logisticsMapper.selectById(ledgerReq.getId());
+        if (Objects.isNull(kwpLedgerLogistics)) {
+            throw new BusinessException("对账单不存在!");
+        }
+        successCheck(kwpLedgerLogistics.getStatus());
+
+        kwpLedgerLogistics.setStatus(LedgerEnum.SUCCESS.getStatus());
+        kwpLedgerLogistics.setUpdateTime(LocalDateTime.now());
+        logisticsMapper.updateById(kwpLedgerLogistics);
+        //生成结算单
+        KwpSettlementLogistics kwpSettlementLogistics = new KwpSettlementLogistics();
+        kwpSettlementLogistics.setId(new IdWorker(1).nextId());
+        kwpSettlementLogistics.setEntId(0L);//todo
+        kwpSettlementLogistics.setLLedgerId(kwpLedgerLogistics.getId());
+        kwpSettlementLogistics.setSlOrderNo(String.valueOf(new IdWorker(1).nextId()));//todo
+        kwpSettlementLogistics.setName(kwpLedgerLogistics.getName());//取物流对账单名称
+        kwpSettlementLogistics.setTotalPrice(kwpLedgerLogistics.getTotalPrice());
+        kwpSettlementLogistics.setActualPrice(kwpLedgerLogistics.getActualPrice());
+        kwpSettlementLogistics.setReceiptTime(LocalDateTime.now());
+        kwpSettlementLogistics.setRemark("");
+        kwpSettlementLogistics.setAuditUser(kwpLedgerLogistics.getAuditUser());
+        kwpSettlementLogistics.setAuditPhone(kwpLedgerLogistics.getAuditPhone());
+        kwpSettlementLogistics.setSuccessUser(ledgerReq.getSuccessUser());
+        kwpSettlementLogistics.setSuccessPhone(ledgerReq.getSuccessPhone());
+        kwpSettlementLogistics.setStatus(0);
+        kwpSettlementLogistics.setCreateBy(0L);
+        kwpSettlementLogistics.setCreateTime(LocalDateTime.now());
+        kwpSettlementLogistics.setUpdateBy(0L);
+        kwpSettlementLogistics.setUpdateTime(LocalDateTime.now());
+        kwpSettlementLogistics.setDelFlag(0);
+
+        settlementLogisticsService.save(kwpSettlementLogistics);
 
+        logisticsTrackService.saveTrack(ledgerReq.getId(), "", LedgerTrackEnum.SUCCESS);
+        return "对账完成";
+    }
 }

+ 45 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsTrackService.java

@@ -1,11 +1,56 @@
 package com.sckw.payment.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.payment.dao.KwpLedgerLogisticsTrackMapper;
+import com.sckw.payment.model.KwpLedgerLogisticsTrack;
+import com.sckw.payment.model.constant.LedgerTrackEnum;
+import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Objects;
+
 /**
  * @author xucaiqin
  * @date 2023-07-10 16:38:36
  */
 @Service
+@AllArgsConstructor
 public class KwpLedgerLogisticsTrackService {
+    private final KwpLedgerLogisticsTrackMapper logisticsTrackMapper;
+
+    /**
+     * 保存操作日志
+     *
+     * @param l_ledger_id 对账单id
+     * @param remark      备注
+     * @param status      状态值
+     */
+    public Integer saveTrack(Long l_ledger_id, String remark, LedgerTrackEnum status) {
+        KwpLedgerLogisticsTrack kwpLedgerLogisticsTrack = new KwpLedgerLogisticsTrack();
+        kwpLedgerLogisticsTrack.setId(new IdWorker(1).nextId());
+        kwpLedgerLogisticsTrack.setLLedgerId(l_ledger_id);
+        kwpLedgerLogisticsTrack.setRemark(remark);
+        kwpLedgerLogisticsTrack.setStatus(status.getStatus());
+        return logisticsTrackMapper.insert(kwpLedgerLogisticsTrack);
+    }
+
+    /**
+     * 查询订单记录
+     *
+     * @param id     物流对账单id notnull
+     * @param status 流程状态
+     * @return
+     */
+    public List<KwpLedgerLogisticsTrack> selectList(@NotNull Long id, LedgerTrackEnum status) {
+        LambdaQueryWrapper<KwpLedgerLogisticsTrack> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwpLedgerLogisticsTrack::getLLedgerId, id);
+        wrapper.eq(Objects.nonNull(status), KwpLedgerLogisticsTrack::getStatus, status.getStatus());
+        wrapper.eq(KwpLedgerLogisticsTrack::getDelFlag, 0);
+        return logisticsTrackMapper.selectList(wrapper);
+    }
+
 
 }

+ 11 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerLogisticsUnitService.java

@@ -0,0 +1,11 @@
+package com.sckw.payment.service;
+
+import org.springframework.stereotype.Service;
+/**
+ * @author xucaiqin
+ * @date 2023-07-13 17:32:34
+ */
+@Service
+public class KwpLedgerLogisticsUnitService  {
+
+}

+ 18 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeOrderService.java

@@ -1,11 +1,29 @@
 package com.sckw.payment.service;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.payment.dao.KwpLedgerTradeOrderMapper;
+import com.sckw.payment.model.KwpLedgerTradeOrder;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+
 /**
  * @author xucaiqin
  * @date 2023-07-10 16:38:36
  */
 @Service
+@AllArgsConstructor
 public class KwpLedgerTradeOrderService {
+    private final KwpLedgerTradeOrderMapper tradeOrderMapper;
 
+    public void remove(Long tLedgerId) {
+        KwpLedgerTradeOrder kwpLedgerTradeOrder = new KwpLedgerTradeOrder();
+        kwpLedgerTradeOrder.setDelFlag(1);
+        kwpLedgerTradeOrder.setUpdateTime(LocalDateTime.now());
+        LambdaUpdateWrapper<KwpLedgerTradeOrder> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwpLedgerTradeOrder::getTLedgerId, tLedgerId);
+        wrapper.eq(KwpLedgerTradeOrder::getDelFlag, 0);
+        tradeOrderMapper.update(kwpLedgerTradeOrder, wrapper);
+    }
 }

+ 270 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeService.java

@@ -1,12 +1,281 @@
 package com.sckw.payment.service;
 
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.sckw.core.exception.BusinessException;
+import com.sckw.core.model.page.PageRes;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.payment.dao.KwpLedgerTradeMapper;
+import com.sckw.payment.model.KwpLedgerTrade;
+import com.sckw.payment.model.KwpLedgerTradeTrack;
+import com.sckw.payment.model.KwpLedgerTradeUnit;
+import com.sckw.payment.model.KwpSettlementTrade;
+import com.sckw.payment.model.constant.LedgerEnum;
+import com.sckw.payment.model.constant.LedgerTrackEnum;
+import com.sckw.payment.model.constant.TradeUnitType;
+import com.sckw.payment.model.dto.LedgerTradeDto;
+import com.sckw.payment.model.vo.req.*;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
 /**
  * @author xucaiqin
  * @date 2023-07-10 16:38:36
  */
 
 @Service
-public class KwpLedgerTradeService  {
+@AllArgsConstructor
+@Slf4j
+public class KwpLedgerTradeService extends AbsLedger {
+    private final KwpLedgerTradeMapper tradeMapper;
+    private final KwpLedgerTradeTrackService tradeTrackService;
+    private final KwpLedgerTradeOrderService tradeOrderService;
+    private final KwpSettlementTradeService settlementTradeService;
+    private final KwpLedgerTradeUnitService tradeUnitService;
+
+    /**
+     * 分页查询对账单列表
+     *
+     * @param tradeReq
+     * @return
+     */
+    public PageRes<LedgerTradeDto> pageList(TradeReq tradeReq) {
+        PageHelper.startPage(tradeReq.getPage(), tradeReq.getPageSize());
+        List<LedgerTradeDto> ledgerTradeDto = tradeMapper.pageSelect(tradeReq);
+        return new PageRes<>(new PageInfo<>(ledgerTradeDto));
+    }
+
+    private void removeDraft(Long id) {
+        //删除kwp_ledger_trade_order
+        tradeOrderService.remove(id);
+        //删除kwp_ledger_trade_track
+        tradeTrackService.remove(id);
+        //删除kwp_ledger_trade_unit
+        tradeUnitService.remove(id);
+    }
+
+    private Long saveDraft(TradeSendReq tradeSendReq) {
+        KwpLedgerTrade kwpLedgerTrade = new KwpLedgerTrade();
+        kwpLedgerTrade.setId(Objects.isNull(tradeSendReq.getId()) ? new IdWorker(1).nextId() : tradeSendReq.getId());
+        kwpLedgerTrade.setEntId(0L);//todo
+        kwpLedgerTrade.setTLedgerNo("");
+        kwpLedgerTrade.setName(tradeSendReq.getName());
+        kwpLedgerTrade.setStartTime(tradeSendReq.getStartTime());
+        kwpLedgerTrade.setEndTime(tradeSendReq.getEndTime());
+        kwpLedgerTrade.setTaxRate(tradeSendReq.getTaxRate());
+        kwpLedgerTrade.setTrading(0L);
+        kwpLedgerTrade.setTotalPrice(tradeSendReq.getTotalPrice());
+        kwpLedgerTrade.setSettlePrice(tradeSendReq.getSettlePrice());
+        kwpLedgerTrade.setActualPrice(new BigDecimal("0.0"));
+        kwpLedgerTrade.setAuditUser("");
+        kwpLedgerTrade.setAuditPhone("");
+        kwpLedgerTrade.setGenerateTime(tradeSendReq.getGenerateTime());
+        kwpLedgerTrade.setUrl("");
+        kwpLedgerTrade.setRemark("");
+        kwpLedgerTrade.setStatus(LedgerEnum.SAVE.getStatus());
+        kwpLedgerTrade.setCreateBy(0L);
+        kwpLedgerTrade.setCreateTime(LocalDateTime.now());
+        kwpLedgerTrade.setUpdateBy(0L);
+        kwpLedgerTrade.setUpdateTime(LocalDateTime.now());
+        kwpLedgerTrade.setDelFlag(0);
+        if (Objects.isNull(tradeSendReq.getId())) {
+            tradeMapper.insert(kwpLedgerTrade);
+        } else {
+            tradeMapper.updateById(kwpLedgerTrade);
+        }
+
+        /*保存贸易订单关联数据*/
+        List<Long> ids = tradeSendReq.getIds();
+        //todo dubbo拿取销售订单数据
+        /*保存企业单位相关信息*/
+        //todo dubbo拿取采购客户单位的信息
+        Long purchaseEntId = tradeSendReq.getPurchaseEntId();
+        List<KwpLedgerTradeUnit> list = new ArrayList<>();
+        KwpLedgerTradeUnit kwpLedgerTradeUnit = new KwpLedgerTradeUnit();
+        kwpLedgerTradeUnit.setId(new IdWorker(1).nextId());
+        kwpLedgerTradeUnit.setTLedgerId(kwpLedgerTrade.getId());
+        kwpLedgerTradeUnit.setTLedgerNo(kwpLedgerTrade.getTLedgerNo());
+        kwpLedgerTradeUnit.setUnitType(TradeUnitType.PURCHASE);
+        kwpLedgerTradeUnit.setEntId(purchaseEntId);
+        kwpLedgerTradeUnit.setTopEntId(0L);
+        kwpLedgerTradeUnit.setFirmName("");
+        kwpLedgerTradeUnit.setContacts("");
+        kwpLedgerTradeUnit.setPhone("");
+        kwpLedgerTradeUnit.setRemark("");
+        kwpLedgerTradeUnit.setStatus(0);
+        kwpLedgerTradeUnit.setCreateBy(0L);
+        kwpLedgerTradeUnit.setCreateTime(LocalDateTime.now());
+        kwpLedgerTradeUnit.setUpdateBy(0L);
+        kwpLedgerTradeUnit.setUpdateTime(LocalDateTime.now());
+        kwpLedgerTradeUnit.setDelFlag(0);
+
+        list.add(kwpLedgerTradeUnit);
+        tradeUnitService.saveList(list);
+        return kwpLedgerTrade.getId();
+    }
+
+    /**
+     * 保存对账单
+     *
+     * @param tradeSendReq
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public String sendLedger(TradeSendReq tradeSendReq) {
+        Long id = tradeSendReq.getId();
+        if (Objects.isNull(id)) {
+            //新增
+            tradeSendReq.setGenerateTime(LocalDateTime.now());
+            Long aLong = saveDraft(tradeSendReq);
+            tradeTrackService.saveTrack(aLong, "", LedgerTrackEnum.TO_LEDGER);
+        } else {
+            //先删除
+            removeDraft(id);
+            //在新增
+            tradeSendReq.setGenerateTime(LocalDateTime.now());
+            Long aLong = saveDraft(tradeSendReq);
+            tradeTrackService.saveTrack(aLong, "", LedgerTrackEnum.TO_LEDGER);
+
+        }
+        return "保存对账单成功";
+    }
+
+    /**
+     * 保存草稿
+     *
+     * @param tradeSendReq
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public String sendLedgerDraft(TradeSendReq tradeSendReq) {
+        log.info("贸易对账单保存草稿:{}", JSONObject.toJSONString(tradeSendReq));
+        tradeSendReq.setGenerateTime(null);
+        Long aLong = saveDraft(tradeSendReq);
+        tradeTrackService.saveTrack(aLong, "", LedgerTrackEnum.SAVE);
+        return "草稿保存成功";
+    }
+
+
+    public String remove(Long id) {
+        KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(id);
+        if (Objects.isNull(kwpLedgerTrade)) {
+            throw new BusinessException("对账单不存在!");
+        }
+        deleteCheck(kwpLedgerTrade.getStatus());
+        kwpLedgerTrade.setDelFlag(1);
+        tradeMapper.updateById(kwpLedgerTrade);
+        tradeTrackService.saveTrack(kwpLedgerTrade.getId(), "", LedgerTrackEnum.DELETE);
+        return "删除成功";
+    }
+
+    /**
+     * 撤回对账单
+     *
+     * @param id
+     * @return
+     */
+    public Integer backOrder(Long id) {
+        KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(id);
+        if (Objects.isNull(kwpLedgerTrade)) {
+            throw new BusinessException("对账单不存在!");
+        }
+        revokeCheck(kwpLedgerTrade.getStatus());
+        kwpLedgerTrade.setStatus(LedgerEnum.BACK.getStatus());
+        tradeMapper.updateById(kwpLedgerTrade);
+
+        return tradeTrackService.saveTrack(id, "", LedgerTrackEnum.REVOKE);
+    }
+
+    /**
+     * 查询贸易对账单驳回记录
+     *
+     * @param id
+     * @return
+     */
+    public List<KwpLedgerTradeTrack> queryBack(Long id) {
+        return tradeTrackService.selectList(id, LedgerTrackEnum.REJECT);
+
+    }
+
+    /**
+     * 驳回贸易对账单
+     *
+     * @param ledgerReq
+     * @return
+     */
+    public Integer doBack(LedgerReq ledgerReq) {
+        KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(ledgerReq.getId());
+        if (Objects.isNull(kwpLedgerTrade)) {
+            throw new BusinessException("对账单不存在!");
+        }
+        return tradeTrackService.saveTrack(ledgerReq.getId(), ledgerReq.getRemark(), LedgerTrackEnum.REJECT);
+    }
+
+    /**
+     * 对账确认
+     *
+     * @param confirmReq
+     * @return
+     */
+    public Integer confirmOrder(LedgerConfirmReq confirmReq) {
+        KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(confirmReq.getId());
+        if (Objects.isNull(kwpLedgerTrade)) {
+            throw new BusinessException("对账单不存在!");
+        }
+        kwpLedgerTrade.setStatus(LedgerEnum.LEDGERED.getStatus());
+        kwpLedgerTrade.setAuditPhone(confirmReq.getAuditPhone());
+        kwpLedgerTrade.setAuditUser(confirmReq.getAuditUser());
+        kwpLedgerTrade.setUrl(confirmReq.getUrl());
+        kwpLedgerTrade.setUpdateTime(LocalDateTime.now());
+        tradeMapper.updateById(kwpLedgerTrade);
+        return tradeTrackService.saveTrack(confirmReq.getId(), "", LedgerTrackEnum.CONFIRM);
+    }
+
+    /**
+     * 对账完成
+     *
+     * @param ledgerReq
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public String orderSuccess(LedgerSuccessReq ledgerReq) {
+        KwpLedgerTrade kwpLedgerTrade = tradeMapper.selectById(ledgerReq.getId());
+        if (Objects.isNull(kwpLedgerTrade)) {
+            throw new BusinessException("对账单不存在!");
+        }
+        successCheck(kwpLedgerTrade.getStatus());
+
+        kwpLedgerTrade.setStatus(LedgerEnum.SUCCESS.getStatus());
+        kwpLedgerTrade.setUpdateTime(LocalDateTime.now());
+        tradeMapper.updateById(kwpLedgerTrade);
+        //生成结算单
+        KwpSettlementTrade kwpSettlementTrade = new KwpSettlementTrade();
+        kwpSettlementTrade.setId(new IdWorker(1).nextId());
+        kwpSettlementTrade.setEntId(0L);//todo
+        kwpSettlementTrade.setTLedgerId(kwpLedgerTrade.getId());
+        kwpSettlementTrade.setStOrderNo(String.valueOf(new IdWorker(1).nextId()));
+        kwpSettlementTrade.setName(kwpLedgerTrade.getName());
+        kwpSettlementTrade.setTotalPrice(kwpLedgerTrade.getTotalPrice());
+        kwpSettlementTrade.setActualPrice(kwpLedgerTrade.getActualPrice());
+        kwpSettlementTrade.setRemark("");
+        kwpSettlementTrade.setStatus(0);
+        kwpSettlementTrade.setCreateBy(0L);
+        kwpSettlementTrade.setCreateTime(LocalDateTime.now());
+        kwpSettlementTrade.setUpdateBy(0L);
+        kwpSettlementTrade.setUpdateTime(LocalDateTime.now());
+        kwpSettlementTrade.setDelFlag(0);
+        settlementTradeService.save(kwpSettlementTrade);
 
+        tradeTrackService.saveTrack(ledgerReq.getId(), "", LedgerTrackEnum.SUCCESS);
+        return "对账完成";
+    }
 }

+ 54 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeTrackService.java

@@ -1,12 +1,66 @@
 package com.sckw.payment.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.core.utils.IdWorker;
+import com.sckw.payment.dao.KwpLedgerTradeTrackMapper;
+import com.sckw.payment.model.KwpLedgerTradeTrack;
+import com.sckw.payment.model.constant.LedgerTrackEnum;
+import jakarta.validation.constraints.NotNull;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Objects;
+
 /**
  * @author xucaiqin
  * @date 2023-07-10 16:38:36
  */
 
 @Service
+@AllArgsConstructor
 public class KwpLedgerTradeTrackService {
+    private final KwpLedgerTradeTrackMapper tradeTrackMapper;
+
+    /**
+     * 保存操作日志
+     *
+     * @param t_ledger_id 对账单id
+     * @param remark      备注
+     * @param status      状态值
+     */
+    public Integer saveTrack(Long t_ledger_id, String remark, LedgerTrackEnum status) {
+        KwpLedgerTradeTrack tradeTrack = new KwpLedgerTradeTrack();
+        tradeTrack.setId(new IdWorker(1).nextId());
+        tradeTrack.setTLedgerId(t_ledger_id);
+        tradeTrack.setRemark(remark);
+        tradeTrack.setStatus(status.getStatus());
+        return tradeTrackMapper.insert(tradeTrack);
+    }
+
+    /**
+     * 查询订单记录
+     *
+     * @param id     物流对账单id notnull
+     * @param status 流程状态
+     * @return
+     */
+    public List<KwpLedgerTradeTrack> selectList(@NotNull Long id, LedgerTrackEnum status) {
+        LambdaQueryWrapper<KwpLedgerTradeTrack> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwpLedgerTradeTrack::getId, id);
+        wrapper.eq(Objects.nonNull(status), KwpLedgerTradeTrack::getStatus, status.getStatus());
+        wrapper.eq(KwpLedgerTradeTrack::getDelFlag, 0);
+        return tradeTrackMapper.selectList(wrapper);
+    }
 
+    public void remove(Long tLedgerId) {
+        LambdaQueryWrapper<KwpLedgerTradeTrack> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwpLedgerTradeTrack::getTLedgerId, tLedgerId);
+        wrapper.eq(KwpLedgerTradeTrack::getDelFlag, 0);
+        KwpLedgerTradeTrack tradeTrack = new KwpLedgerTradeTrack();
+        tradeTrack.setUpdateTime(LocalDateTime.now());
+        tradeTrack.setDelFlag(1);
+        tradeTrackMapper.update(tradeTrack, wrapper);
+    }
 }

+ 39 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpLedgerTradeUnitService.java

@@ -0,0 +1,39 @@
+package com.sckw.payment.service;
+
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.sckw.payment.dao.KwpLedgerTradeUnitMapper;
+import com.sckw.payment.model.KwpLedgerTradeUnit;
+import lombok.AllArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ * @date 2023-07-13 17:32:40
+ */
+@Service
+@AllArgsConstructor
+public class KwpLedgerTradeUnitService {
+    private final KwpLedgerTradeUnitMapper tradeUnitMapper;
+
+    public void saveList(List<KwpLedgerTradeUnit> list) {
+        if (!CollectionUtils.isEmpty(list)) {
+            for (KwpLedgerTradeUnit kwpLedgerTradeUnit : list) {
+                tradeUnitMapper.insert(kwpLedgerTradeUnit);
+            }
+        }
+    }
+
+    public void remove(Long tLedgerId) {
+        KwpLedgerTradeUnit kwpLedgerTradeUnit = new KwpLedgerTradeUnit();
+        kwpLedgerTradeUnit.setDelFlag(1);
+        kwpLedgerTradeUnit.setUpdateTime(LocalDateTime.now());
+        LambdaUpdateWrapper<KwpLedgerTradeUnit> wrapper = new LambdaUpdateWrapper<>();
+        wrapper.eq(KwpLedgerTradeUnit::getTLedgerId, tLedgerId);
+        wrapper.eq(KwpLedgerTradeUnit::getDelFlag, 0);
+        tradeUnitMapper.update(kwpLedgerTradeUnit, wrapper);
+    }
+}

+ 11 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementLogisticsService.java

@@ -1,12 +1,21 @@
 package com.sckw.payment.service;
 
+import com.sckw.payment.dao.KwpSettlementLogisticsMapper;
+import com.sckw.payment.model.KwpSettlementLogistics;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+
 /**
  * @author xucaiqin
  * @date 2023-07-10 16:38:36
  */
-
+@AllArgsConstructor
 @Service
-public class KwpSettlementLogisticsService  {
+public class KwpSettlementLogisticsService {
+    private final KwpSettlementLogisticsMapper settlementLogisticsMapper;
+
+    public void save(KwpSettlementLogistics kwpSettlementLogistics) {
+        settlementLogisticsMapper.insert(kwpSettlementLogistics);
+    }
 
 }

+ 9 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementTradeService.java

@@ -1,12 +1,20 @@
 package com.sckw.payment.service;
 
+import com.sckw.payment.dao.KwpSettlementTradeMapper;
+import com.sckw.payment.model.KwpSettlementTrade;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+
 /**
  * @author xucaiqin
  * @date 2023-07-10 16:38:36
  */
-
 @Service
+@AllArgsConstructor
 public class KwpSettlementTradeService {
+    private final KwpSettlementTradeMapper settlementTradeMapper;
 
+    public void save(KwpSettlementTrade kwpSettlementTrade) {
+        settlementTradeMapper.insert(kwpSettlementTrade);
+    }
 }

+ 83 - 8
sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerLogisticsMapper.xml

@@ -6,21 +6,23 @@
     <!--@Table kwp_ledger_logistics-->
     <id column="id" jdbcType="BIGINT" property="id" />
     <result column="ent_id" jdbcType="BIGINT" property="entId" />
-    <result column="check_ent_id" jdbcType="BIGINT" property="checkEntId" />
-    <result column="carrier_ent_id" jdbcType="BIGINT" property="carrierEntId" />
+    <result column="l_ledger_no" jdbcType="VARCHAR" property="lLedgerNo" />
     <result column="name" jdbcType="VARCHAR" property="name" />
     <result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
     <result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
-    <result column="price" jdbcType="DECIMAL" property="price" />
-    <result column="tax_rate" jdbcType="DECIMAL" property="taxRate" />
-    <result column="trading" jdbcType="VARCHAR" property="trading" />
+    <result column="tax_rate" jdbcType="INTEGER" property="taxRate" />
+    <result column="trading" jdbcType="INTEGER" property="trading" />
     <result column="unload_amount" jdbcType="DECIMAL" property="unloadAmount" />
     <result column="load_amount" jdbcType="DECIMAL" property="loadAmount" />
     <result column="deficit_amount" jdbcType="DECIMAL" property="deficitAmount" />
     <result column="lose_amount" jdbcType="DECIMAL" property="loseAmount" />
     <result column="total_price" jdbcType="DECIMAL" property="totalPrice" />
+    <result column="settle_price" jdbcType="DECIMAL" property="settlePrice" />
     <result column="actual_price" jdbcType="DECIMAL" property="actualPrice" />
+    <result column="audit_user" jdbcType="VARCHAR" property="auditUser" />
+    <result column="audit_phone" jdbcType="VARCHAR" property="auditPhone" />
     <result column="url" jdbcType="VARCHAR" property="url" />
+    <result column="generate_time" jdbcType="TIMESTAMP" property="generateTime" />
     <result column="remark" jdbcType="VARCHAR" property="remark" />
     <result column="status" jdbcType="INTEGER" property="status" />
     <result column="create_by" jdbcType="BIGINT" property="createBy" />
@@ -31,8 +33,81 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, ent_id, check_ent_id, carrier_ent_id, `name`, start_time, end_time, price, tax_rate, 
-    trading, unload_amount, load_amount, deficit_amount, lose_amount, total_price, actual_price, 
-    url, remark, `status`, create_by, create_time, update_by, update_time, del_flag
+    id, ent_id, l_ledger_no, `name`, start_time, end_time, tax_rate, trading, unload_amount, 
+    load_amount, deficit_amount, lose_amount, total_price, settle_price, actual_price, 
+    audit_user, audit_phone, url, generate_time, remark, `status`, create_by, create_time, 
+    update_by, update_time, del_flag
   </sql>
+
+    <select id="pageSelect" resultType="com.sckw.payment.model.dto.LedgerLogisticsDto">
+        select kll.id,
+               kll.l_ledger_no    lLedgerNo,
+               kll.name,
+               kll.start_time     startTime,
+               kll.end_time       endTime,
+               kll.tax_rate       taxRate,
+               kll.trading,
+               kll.unload_amount  unloadAmount,
+               kll.load_amount    loadAmount,
+               kll.deficit_amount deficitAmount,
+               kll.lose_amount    loseAmount,
+               kll.total_price    totalPrice,
+               kll.settle_price   settlePrice,
+               kll.actual_price   actualPrice,
+               kll.url,
+               kll.generate_time  generateTime,
+               kll.remark,
+               kll.status,
+               count(kllo.id)     orderCount
+        from kwp_ledger_logistics kll
+                 inner join kwp_ledger_logistics_order kllo on kll.id = kllo.l_ledger_id
+        <where>
+            <choose>
+                <when test="ids != null and ids.size() != 0">
+                    kll.id in
+                    <foreach close=")" collection="ids" item="id" open="" separator=",">
+                        #{id,jdbcType=BIGINT}
+                    </foreach>
+                </when>
+                <otherwise>
+
+                    kll.del_flag = 0
+                      and kllo.del_flag = 0
+
+                    <if test="logisticsReq.status != null">
+
+                        and kll.status = #{logisticsReq.status}
+                    </if>
+                    <if test="logisticsReq.trading != null">
+                        and kll.trading = #{logisticsReq.trading,jdbcType=INTEGER}
+                    </if>
+                    <if test="logisticsReq.startCreateTime != null and logisticsReq.endCreateTime != null">
+                        and kll.generate_time between #{logisticsReq.startCreateTime,jdbcType=TIMESTAMP}
+                        and #{logisticsReq.endCreateTime,jdbcType=TIMESTAMP}
+                    </if>
+                    <if test="logisticsReq.keywords != null and logisticsReq.keywords != ''">
+                        and (
+                            kll.l_ledger_no like concat('%'
+                          , #{logisticsReq.keywords}
+                          , '%')
+                         or kll.check_user like concat('%'
+                          , #{logisticsReq.keywords}
+                          , '%')
+                        <if test="ids != null and ids.size() != 0">
+                            or kll.check_ent_id in
+                            <foreach close=")" collection="ids" item="item" open="(" separator=",">
+                                #{item,jdbcType=BIGINT}
+                            </foreach>
+                        </if>
+                        )
+                    </if>
+                </otherwise>
+            </choose>
+        </where>
+        group by kll.id, kll.check_ent_id, kll.carrier_ent_id, kll.l_ledger_no, kll.name, kll.start_time, kll.end_time,
+            kll.tax_rate, kll.trading, kll.unload_amount, kll.load_amount, kll.deficit_amount, kll.lose_amount,
+            kll.total_price, kll.settle_price, kll.actual_price, kll.check_phone, kll.check_user,
+            kll.carrier_phone, kll.carrier_user, kll.url, kll.generate_time, kll.remark, kll.status
+        order by kll.generate_time desc
+    </select>
 </mapper>

+ 29 - 0
sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerLogisticsUnitMapper.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.payment.dao.KwpLedgerLogisticsUnitMapper">
+  <resultMap id="BaseResultMap" type="com.sckw.payment.model.KwpLedgerLogisticsUnit">
+    <!--@mbg.generated-->
+    <!--@Table kwp_ledger_logistics_unit-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="l_ledger_id" jdbcType="BIGINT" property="lLedgerId" />
+    <result column="l_ledger_no" jdbcType="VARCHAR" property="lLedgerNo" />
+    <result column="unit_type" jdbcType="INTEGER" property="unitType" />
+    <result column="ent_id" jdbcType="BIGINT" property="entId" />
+    <result column="top_ent_id" jdbcType="BIGINT" property="topEntId" />
+    <result column="firm_name" jdbcType="VARCHAR" property="firmName" />
+    <result column="contacts" jdbcType="VARCHAR" property="contacts" />
+    <result column="phone" jdbcType="VARCHAR" property="phone" />
+    <result column="remark" jdbcType="VARCHAR" property="remark" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+    <result column="create_by" jdbcType="BIGINT" property="createBy" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_by" jdbcType="BIGINT" property="updateBy" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="del_flag" jdbcType="INTEGER" property="delFlag" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, l_ledger_id, l_ledger_no, unit_type, ent_id, top_ent_id, firm_name, contacts, 
+    phone, remark, `status`, create_by, create_time, update_by, update_time, del_flag
+  </sql>
+</mapper>

+ 56 - 7
sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerTradeMapper.xml

@@ -6,16 +6,18 @@
     <!--@Table kwp_ledger_trade-->
     <id column="id" jdbcType="BIGINT" property="id" />
     <result column="ent_id" jdbcType="BIGINT" property="entId" />
-    <result column="procure_ent_id" jdbcType="BIGINT" property="procureEntId" />
-    <result column="supply_ent_id" jdbcType="BIGINT" property="supplyEntId" />
+    <result column="t_ledger_no" jdbcType="VARCHAR" property="tLedgerNo" />
     <result column="name" jdbcType="VARCHAR" property="name" />
     <result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
     <result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
-    <result column="price" jdbcType="DECIMAL" property="price" />
-    <result column="tax_rate" jdbcType="DECIMAL" property="taxRate" />
+    <result column="tax_rate" jdbcType="INTEGER" property="taxRate" />
     <result column="trading" jdbcType="BIGINT" property="trading" />
     <result column="total_price" jdbcType="DECIMAL" property="totalPrice" />
+    <result column="settle_price" jdbcType="DECIMAL" property="settlePrice" />
     <result column="actual_price" jdbcType="DECIMAL" property="actualPrice" />
+    <result column="audit_user" jdbcType="VARCHAR" property="auditUser" />
+    <result column="audit_phone" jdbcType="VARCHAR" property="auditPhone" />
+    <result column="generate_time" jdbcType="TIMESTAMP" property="generateTime" />
     <result column="url" jdbcType="VARCHAR" property="url" />
     <result column="remark" jdbcType="VARCHAR" property="remark" />
     <result column="status" jdbcType="INTEGER" property="status" />
@@ -27,8 +29,55 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, ent_id, procure_ent_id, supply_ent_id, `name`, start_time, end_time, price, tax_rate, 
-    trading, total_price, actual_price, url, remark, `status`, create_by, create_time, 
-    update_by, update_time, del_flag
+    id, ent_id, t_ledger_no, `name`, start_time, end_time, tax_rate, trading, total_price, 
+    settle_price, actual_price, audit_user, audit_phone, generate_time, url, remark, 
+    `status`, create_by, create_time, update_by, update_time, del_flag
   </sql>
+
+  <select id="pageSelect" resultType="com.sckw.payment.model.dto.LedgerTradeDto">
+      select klt.id,
+             klt.t_ledger_no   tLedgerNo,
+             klt.name,
+             klt.start_time    startTime,
+             klt.end_time      endTime,
+             klt.tax_rate      taxRate,
+             klt.trading,
+             klt.total_price   totalPrice,
+             klt.settle_price  settlePrice,
+             klt.actual_price  actualPrice,
+             klt.url,
+             klt.generate_time generateTime,
+             klt.remark,
+             klt.status,
+             kltu.contacts,
+             kltu.phone,
+             kltu.firm_name    firmName,
+             count(klto.id)    orderCount
+      from kwp_ledger_trade klt
+               inner join kwp_ledger_trade_order klto on klt.id = klto.t_ledger_id and klto.del_flag = 0
+               inner join kwp_ledger_trade_unit kltu on klt.id = kltu.t_ledger_id and kltu.del_flag = 0
+      <where>
+          klt.del_flag = 0
+          <if test="tradeReq.status != null">
+              and klt.status = #{tradeReq.status}
+          </if>
+          <if test="tradeReq.trading != null">
+              and klt.trading = #{tradeReq.trading,jdbcType=INTEGER}
+          </if>
+          <if test="tradeReq.startCreateTime != null and tradeReq.endCreateTime != null">
+              and klt.generate_time between #{tradeReq.startCreateTime,jdbcType=TIMESTAMP} and #{tradeReq.endCreateTime,jdbcType=TIMESTAMP}
+          </if>
+          <if test="tradeReq.keywords != null and tradeReq.keywords != ''">
+              and (
+                          klt.t_ledger_no like concat('%', #{tradeReq.keywords,jdbcType=VARCHAR}, '%')
+                      or kltu.firm_name like concat('%', #{tradeReq.keywords,jdbcType=VARCHAR}, '%')
+                      or kltu.contacts like concat('%', #{tradeReq.keywords,jdbcType=VARCHAR}, '%')
+                  )
+          </if>
+      </where>
+      group by klt.id, klt.t_ledger_no, klt.name, klt.start_time, klt.end_time, klt.tax_rate, klt.trading,
+               klt.total_price, klt.settle_price, klt.actual_price, klt.url, klt.generate_time, klt.remark, klt.status,
+               kltu.contacts, kltu.phone, kltu.firm_name
+      order by klt.generate_time desc
+  </select>
 </mapper>

+ 29 - 0
sckw-modules/sckw-payment/src/main/resources/mapper/KwpLedgerTradeUnitMapper.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.sckw.payment.dao.KwpLedgerTradeUnitMapper">
+  <resultMap id="BaseResultMap" type="com.sckw.payment.model.KwpLedgerTradeUnit">
+    <!--@mbg.generated-->
+    <!--@Table kwp_ledger_trade_unit-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="t_ledger_id" jdbcType="BIGINT" property="tLedgerId" />
+    <result column="t_ledger_no" jdbcType="VARCHAR" property="tLedgerNo" />
+    <result column="unit_type" jdbcType="INTEGER" property="unitType" />
+    <result column="ent_id" jdbcType="BIGINT" property="entId" />
+    <result column="top_ent_id" jdbcType="BIGINT" property="topEntId" />
+    <result column="firm_name" jdbcType="VARCHAR" property="firmName" />
+    <result column="contacts" jdbcType="VARCHAR" property="contacts" />
+    <result column="phone" jdbcType="VARCHAR" property="phone" />
+    <result column="remark" jdbcType="VARCHAR" property="remark" />
+    <result column="status" jdbcType="INTEGER" property="status" />
+    <result column="create_by" jdbcType="BIGINT" property="createBy" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_by" jdbcType="BIGINT" property="updateBy" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="del_flag" jdbcType="INTEGER" property="delFlag" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, t_ledger_id, t_ledger_no, unit_type, ent_id, top_ent_id, firm_name, contacts, 
+    phone, remark, `status`, create_by, create_time, update_by, update_time, del_flag
+  </sql>
+</mapper>

+ 8 - 2
sckw-modules/sckw-payment/src/main/resources/mapper/KwpSettlementLogisticsMapper.xml

@@ -11,7 +11,12 @@
     <result column="name" jdbcType="VARCHAR" property="name" />
     <result column="total_price" jdbcType="DECIMAL" property="totalPrice" />
     <result column="actual_price" jdbcType="DECIMAL" property="actualPrice" />
+    <result column="receipt_time" jdbcType="TIMESTAMP" property="receiptTime" />
     <result column="remark" jdbcType="VARCHAR" property="remark" />
+    <result column="audit_user" jdbcType="VARCHAR" property="auditUser" />
+    <result column="audit_phone" jdbcType="VARCHAR" property="auditPhone" />
+    <result column="success_user" jdbcType="VARCHAR" property="successUser" />
+    <result column="success_phone" jdbcType="VARCHAR" property="successPhone" />
     <result column="status" jdbcType="INTEGER" property="status" />
     <result column="create_by" jdbcType="BIGINT" property="createBy" />
     <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
@@ -21,7 +26,8 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, ent_id, l_ledger_id, sl_order_no, `name`, total_price, actual_price, remark, 
-    `status`, create_by, create_time, update_by, update_time, del_flag
+    id, ent_id, l_ledger_id, sl_order_no, `name`, total_price, actual_price, receipt_time, 
+    remark, audit_user, audit_phone, success_user, success_phone, `status`, create_by, 
+    create_time, update_by, update_time, del_flag
   </sql>
 </mapper>

+ 9 - 3
sckw-modules/sckw-report/src/main/java/com/sckw/report/controller/KwOrderController.java

@@ -1,9 +1,11 @@
 package com.sckw.report.controller;
 
+import com.sckw.core.web.response.HttpResult;
 import com.sckw.report.service.KwOrderService;
 import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
@@ -16,7 +18,11 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/kwOrder")
 public class KwOrderController {
 
-    @Autowired
-    KwOrderService orderService;
+    private final KwOrderService orderService;
+
+    @GetMapping("/tradeOrderDetail")
+    public HttpResult detail(@RequestParam Long id) {
+        return HttpResult.ok(orderService.tradeOrderDetail(id));
+    }
 
 }

+ 32 - 0
sckw-modules/sckw-report/src/main/java/com/sckw/report/service/KwOrderService.java

@@ -1,5 +1,13 @@
 package com.sckw.report.service;
 
+import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.mongo.model.SckwTradeOrder;
+import com.sckw.report.dao.SckwTradeOrderRepository;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
 import org.springframework.stereotype.Service;
 
 /**
@@ -8,5 +16,29 @@ import org.springframework.stereotype.Service;
  * @date 2023/7/10 0010
  */
 @Service
+@Slf4j
+@AllArgsConstructor
 public class KwOrderService {
+
+    private final SckwTradeOrderRepository sckwOrderRepository;
+
+    private final MongoTemplate mongoTemplate;
+
+    /**
+     * @desc: 贸易订单详情
+     * @author: yzc
+     * @date: 2023-07-14 9:03
+     * @Param id:
+     * @return: com.sckw.mongo.model.SckwTradeOrder
+     */
+    public SckwTradeOrder tradeOrderDetail(Long id) {
+        Long entId = LoginUserHolder.getEntId();
+        Query query = new Query();
+        Criteria criteria = new Criteria();
+        criteria.andOperator(Criteria.where("_id").is(id).and("delFlag").is(0));
+        criteria.orOperator(Criteria.where("procureTopEntId").is(entId), Criteria.where("supplyTopEntId").is(entId));
+        query.addCriteria(criteria);
+        SckwTradeOrder tradeOrder = mongoTemplate.findOne(query, SckwTradeOrder.class);
+        return mongoTemplate.findOne(query, SckwTradeOrder.class);
+    }
 }

+ 6 - 0
sckw-modules/sckw-transport/pom.xml

@@ -54,6 +54,12 @@
             <artifactId>sckw-system-api</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.sckw</groupId>
+            <artifactId>sckw-product-api</artifactId>
+            <version>1.0.0</version>
+        </dependency>
+
         <dependency>
             <groupId>com.sckw</groupId>
             <artifactId>sckw-common-seata</artifactId>

+ 55 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/common/enums/CarWaybillEnum.java

@@ -0,0 +1,55 @@
+package com.sckw.transport.common.enums;
+
+/**
+ * @author lfdc
+ * @description 车辆运单状态枚举
+ * @date 2023-07-14 14:07:23
+ */
+public enum CarWaybillEnum {
+    PENDING_ORDER(1, "pendingOrder", "1", "待接单"),
+    PENDING_VEHICLE(2, "pendingVehicle", "2", "待出车"),
+    EXIT_COMPLETED(3, "exitCompleted", "3", "已出车"),
+    WAIT_LOADING(4, "waitLoading", "4", "到达装货点"),
+    COMPLETION_LOADING(5, "completionLoading", "5", "已装货"),
+    WAIT_UNLOADING(6, "waitUnloading", "6", "到达卸货点"),
+    COMPLETION_UNLOADING(7, "completionUnloading", "7", "已卸货"),
+    APPROVAL_COMPLETED(8, "approvalCompleted", "8", "已核单"),
+    REJECT_ORDER(9, "rejectOrder", "9", "拒接单");
+
+    private final Integer code;
+    private final String value;
+    private final String status;
+    private final String destination;
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public String getDestination() {
+        return destination;
+    }
+
+    CarWaybillEnum(Integer code, String value, String status, String destination) {
+        this.code = code;
+        this.value = value;
+        this.status = status;
+        this.destination = destination;
+    }
+
+    public static String getLogisticsOrderValue(Integer code) {
+        for (CarWaybillEnum waybillEnum : CarWaybillEnum.values()) {
+            if (waybillEnum.getCode().equals(code)) {
+                return waybillEnum.getValue();
+            }
+        }
+        return null;
+    }
+}

+ 3 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/common/enums/LogisticsOrderEnum.java

@@ -14,8 +14,8 @@ public enum LogisticsOrderEnum {
 //    WAIT_UNLOADING(5, "waitUnLoading", "5", "待卸货"),
     HAVE_FINISHED(4, "haveFinished", "4", "已完成"),
     HAVE_RECONCILED(5, "haveReconciled", "5", "已对账"),
-    HAVE_ALREADY_SETTLED(6,"haveAlreadySettled","5","已结算"),
-    SEND_BACK(7,"sendBack","5","已退回");
+    HAVE_ALREADY_SETTLED(6, "haveAlreadySettled", "5", "已结算"),
+    SEND_BACK(7, "sendBack", "5", "已退回");
 
     private final Integer code;
     private final String value;
@@ -53,4 +53,4 @@ public enum LogisticsOrderEnum {
         }
         return null;
     }
-    }
+}

+ 20 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/AcceptCarriageOrderController.java

@@ -6,7 +6,9 @@ import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.easyexcel.RequestHolder;
 import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.transport.model.dto.OrderTakingDTO;
+import com.sckw.transport.model.dto.SendCarDTO;
 import com.sckw.transport.model.param.AcceptCarriageOrderQuery;
+import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.model.vo.ConsignOrderVO;
 import com.sckw.transport.service.AcceptCarriageOrderService;
 import jakarta.servlet.http.HttpServletResponse;
@@ -89,13 +91,14 @@ public class AcceptCarriageOrderController {
     public HttpResult orderTaking(@Validated @RequestBody OrderTakingDTO orderDTO) {
         return acceptCarriageOrderService.orderTaking(orderDTO);
     }
+
     /**
      * 承运订单-分包托运
-     * @param query 查询参数
+     * @param query 请求参数
      * @return
      */
     @RequestMapping(value = "/subcontractConsignment", method = RequestMethod.POST)
-    public HttpResult subcontractConsignment(AcceptCarriageOrderQuery query) {
+    public HttpResult subcontractConsignment(LogisticsConsignmentParam query) {
         try {
             return acceptCarriageOrderService.subcontractConsignment(query);
         } catch (Exception e) {
@@ -104,4 +107,19 @@ public class AcceptCarriageOrderController {
         }
     }
 
+    /**
+     * 承运订单-提交派车
+     * @param sendCarDTO 请求参数
+     * @return
+     */
+    @RequestMapping(value = "/commitSendCar", method = RequestMethod.POST)
+    public HttpResult commitSendCar(@Validated @RequestBody SendCarDTO sendCarDTO) {
+        try {
+            return acceptCarriageOrderService.commitSendCar(sendCarDTO);
+        } catch (Exception e) {
+            log.error("派车 error:{}", e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
 }

+ 0 - 15
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/ConsignOrderController.java

@@ -57,21 +57,6 @@ public class ConsignOrderController {
             return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
         }
     }
-    /**
-     * 托运订单-撤销托运
-     *
-     * @param orderDto
-     * @return
-     */
-    @RequestMapping(value = "/cancelConsign", method = RequestMethod.POST)
-    public HttpResult cancelConsign(@Validated @RequestBody OrderDTO orderDto) {
-        try {
-            return consignOrderService.cancelConsign(orderDto);
-        } catch (Exception e) {
-            log.error("托运订单-撤销托运运单失败:订单id {},error {} ", orderDto.getId(), e.getMessage(), e);
-            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
-        }
-    }
 
     /**
      * 托运订单-完结订单

+ 17 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/TransportCommonController.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.transport.model.dto.DocumentParamDTO;
+import com.sckw.transport.model.dto.OrderDTO;
 import com.sckw.transport.service.TransportCommonService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,4 +43,20 @@ public class TransportCommonController {
         }
     }
 
+    /**
+     * 托运订单/承运订单-撤销托运
+     *
+     * @param orderDto
+     * @return
+     */
+    @RequestMapping(value = "/cancelConsign", method = RequestMethod.POST)
+    public HttpResult cancelConsign(@Validated @RequestBody OrderDTO orderDto) {
+        try {
+            return transportCommonService.cancelConsign(orderDto);
+        } catch (Exception e) {
+            log.error("托运订单-撤销托运运单失败:订单id {},error {} ", orderDto.getId(), e.getMessage(), e);
+            return HttpResult.error(HttpStatus.GLOBAL_EXCEPTION_CODE, e.getMessage());
+        }
+    }
+
 }

+ 6 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java

@@ -6,6 +6,10 @@ import org.apache.ibatis.annotations.Mapper;
 
 @Mapper
 public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
+    /**
+     * @param id
+     * @return
+     */
     int deleteByPrimaryKey(Long id);
 
     int insert(KwtLogisticsOrder record);
@@ -17,4 +21,6 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
     int updateByPrimaryKeySelective(KwtLogisticsOrder record);
 
     int updateByPrimaryKey(KwtLogisticsOrder record);
+
+    void removeById(KwtLogisticsOrder logisticsOrder);
 }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrder.java

@@ -175,7 +175,7 @@ public class KwtLogisticsOrder implements Serializable {
      * 是否删除(0未删除,1删除)
      */
     @TableLogic(value = "0")
-    private Integer delFlag = 0;
+    private Integer delFlag;
 
     private static final long serialVersionUID = 1L;
 

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderAddress.java

@@ -110,7 +110,7 @@ public class KwtLogisticsOrderAddress implements Serializable {
      * 是否删除(0未删除,1删除)
      */
     @TableLogic("0")
-    private Integer delFlag = 0;
+    private Integer delFlag;
 
     private static final long serialVersionUID = 1L;
 }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderCirculate.java

@@ -94,7 +94,7 @@ public class KwtLogisticsOrderCirculate implements Serializable {
      * 是否删除(0未删除,1删除)
      */
     @TableLogic("0")
-    private Integer delFlag = 0;
+    private Integer delFlag;
 
     private static final long serialVersionUID = 1L;
 }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderContract.java

@@ -55,7 +55,7 @@ public class KwtLogisticsOrderContract implements Serializable {
      * 是否删除(0未删除,1删除)
      */
     @TableLogic("0")
-    private Integer delFlag = 0;
+    private Integer delFlag;
 
     private static final long serialVersionUID = 1L;
 

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderGoods.java

@@ -71,7 +71,7 @@ public class KwtLogisticsOrderGoods implements Serializable {
      * 是否删除(0未删除,1删除)
      */
     @TableLogic("0")
-    private Integer delFlag = 0;
+    private Integer delFlag;
 
     private static final long serialVersionUID = 1L;
 }

+ 2 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderSubcontract.java

@@ -1,5 +1,6 @@
 package com.sckw.transport.model;
 
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -63,6 +64,7 @@ public class KwtLogisticsOrderSubcontract implements Serializable {
     /**
      * 是否删除(0未删除,1删除)
      */
+    @TableLogic("0")
     private Integer delFlag;
 
     private static final long serialVersionUID = 1L;

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderTrack.java

@@ -51,7 +51,7 @@ public class KwtLogisticsOrderTrack implements Serializable {
      * 是否删除(0未删除,1删除)
      */
     @TableLogic("0")
-    private Integer delFlag = 0;
+    private Integer delFlag;
 
     private static final long serialVersionUID = 1L;
 }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtLogisticsOrderUnit.java

@@ -78,7 +78,7 @@ public class KwtLogisticsOrderUnit implements Serializable {
      * 是否删除(0未删除,1删除)
      */
     @TableLogic("0")
-    private Integer delFlag = 0;
+    private Integer delFlag;
 
     private static final long serialVersionUID = 1L;
 }

+ 14 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrder.java

@@ -36,7 +36,9 @@ public class KwtWaybillOrder implements Serializable {
      * 编号
      */
     private String wOrderNo;
-
+    /**
+     * 单据类型(1:趟次;2:循环)
+     */
     private String type;
 
     /**
@@ -94,7 +96,17 @@ public class KwtWaybillOrder implements Serializable {
      * 是否删除(0未删除,1删除)
      */
     @TableLogic("0")
-    private Integer delFlag = 0;
+    private Integer delFlag;
+
+    /**
+     * 计划开始时间
+     */
+    private Date startTime;
+
+    /**
+     * 计划结束时间
+     */
+    private Date endTime;
 
     private static final long serialVersionUID = 1L;
 }

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTicket.java

@@ -76,7 +76,7 @@ public class KwtWaybillOrderTicket implements Serializable {
      * 是否删除(0未删除,1删除)
      */
     @TableLogic("0")
-    private Integer delFlag = 0;
+    private Integer delFlag;
 
     private static final long serialVersionUID = 1L;
 

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/KwtWaybillOrderTrack.java

@@ -50,7 +50,7 @@ public class KwtWaybillOrderTrack implements Serializable {
      * 是否删除(0未删除,1删除)
      */
     @TableLogic("0")
-    private Integer delFlag = 0;
+    private Integer delFlag;
 
     private static final long serialVersionUID = 1L;
 }

+ 71 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/CarListDTO.java

@@ -0,0 +1,71 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+/**
+ * @author lfdc
+ * @description 派车dto
+ * @date 2023-07-13 14:07:03
+ */
+@Data
+@Accessors(chain = true)
+public class CarListDTO {
+
+    /**
+     * 司机id
+     */
+    @JsonProperty("driverId")
+    @NotNull(message = "司机姓名不能为空")
+    private String driverId;
+
+    /**
+     * 司机姓名
+     */
+    @JsonProperty("driverName")
+    @NotNull(message = "司机姓名不能为空")
+    private String driverName;
+
+    /**
+     * 司机电话
+     */
+    @JsonProperty("driverPhone")
+    @NotNull(message = "司机电话不能为空")
+    private String driverPhone;
+
+    /**
+     * 装载量
+     */
+    @JsonProperty("loadAmount")
+    @NotNull(message = "装载量不能为空")
+    private String loadAmount;
+
+    /**
+     * 趟次
+     */
+    @JsonProperty("count")
+    private Integer count;
+
+    /**
+     * 车牌号
+     */
+    @JsonProperty("truckNo")
+    @NotNull(message = "车牌号不能为空")
+    private String truckNo;
+
+    /**
+     * 车辆类型
+     */
+    @JsonProperty("catType")
+    @NotNull(message = "车辆类型不能为空")
+    private String catType;
+
+    /**
+     * 司机身份证
+     */
+    @JsonProperty("driverCard")
+    @NotNull(message = "司机身份证不能为空")
+    private String driverCard;
+}

+ 1 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderDTO.java

@@ -16,6 +16,7 @@ public class OrderDTO {
     @JsonProperty("orderNo")
     @NotNull(message = "单据编号不能为空")
     private String orderNo;
+
     @JsonProperty("id")
     @NotNull(message = "数据id不能为空")
     private String id;

+ 73 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SendCarDTO.java

@@ -0,0 +1,73 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @description 派单dto
+ * @date 2023-07-13 15:07:01
+ */
+@Data
+public class SendCarDTO {
+    /**
+     * 物流订单id
+     */
+    @JsonProperty("lOrderId")
+    @NotNull(message = "订单id不能为空")
+    private String lOrderId;
+
+    /**
+     * 物流订单No
+     */
+    @JsonProperty("lOrderNo")
+    @NotNull(message = "订单no不能为空")
+    private String lOrderNo;
+
+    /**
+     * 装货时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date loadDateTime;
+
+    /**
+     * 卸货时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date unloadDateTime;
+
+    /**
+     * 运单号
+     */
+    @JsonProperty("waybillNumber")
+    @NotNull(message = "运单号不能为空")
+    private String waybillNumber;
+
+    /**
+     * 派车类型(1:趟次:2:循环)
+     */
+    @JsonProperty("type")
+    @NotNull(message = "派车类型不能为空")
+    private String type;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    @NotNull(message = "运力信息不能为空")
+    List<CarListDTO> carList;
+
+    /**
+     * 待运量(循环时,必传递)
+     */
+    private String waitingVolume;
+}

+ 0 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsConsignmentParam.java

@@ -157,7 +157,6 @@ public class LogisticsConsignmentParam {
      */
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-//    private String receiveGoodsDateTime;
     private Date receiveGoodsDateTime;
     /**
      * 计划发货时间

+ 133 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -5,20 +5,27 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
+import com.sckw.core.utils.IdWorker;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.transport.common.enums.CarWaybillEnum;
 import com.sckw.transport.common.enums.LogisticsOrderEnum;
-import com.sckw.transport.dao.KwtLogisticsOrderMapper;
-import com.sckw.transport.dao.KwtLogisticsOrderTrackMapper;
+import com.sckw.transport.dao.*;
 import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.KwtLogisticsOrderTrack;
+import com.sckw.transport.model.KwtWaybillOrder;
+import com.sckw.transport.model.KwtWaybillOrderTrack;
 import com.sckw.transport.model.dto.OrderDTO;
 import com.sckw.transport.model.dto.OrderTakingDTO;
+import com.sckw.transport.model.dto.CarListDTO;
+import com.sckw.transport.model.dto.SendCarDTO;
 import com.sckw.transport.model.param.AcceptCarriageOrderQuery;
+import com.sckw.transport.model.param.LogisticsConsignmentParam;
 import com.sckw.transport.model.vo.AcceptCarriageOrderVO;
 import com.sckw.transport.model.vo.CarWaybillVO;
 import com.sckw.transport.model.vo.ConsignmentVO;
@@ -26,7 +33,9 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -46,6 +55,15 @@ public class AcceptCarriageOrderService {
     @Autowired
     private KwtLogisticsOrderTrackMapper logisticsOrderTrackMapper;
 
+    @Autowired
+    private KwtWaybillOrderMapper waybillOrderMapper;
+
+    @Autowired
+    private KwtWaybillOrderTrackMapper waybillOrderTrackMapper;
+
+    @Autowired
+    private KwtWaybillOrderTicketMapper waybillOrderTicketMapper;
+
     public HttpResult list(AcceptCarriageOrderQuery query) {
         List<AcceptCarriageOrderVO> list = new ArrayList<>();
         AcceptCarriageOrderVO acceptCarriageOrderVo = new AcceptCarriageOrderVO();
@@ -67,7 +85,8 @@ public class AcceptCarriageOrderService {
         return null;
     }
 
-    public HttpResult subcontractConsignment(AcceptCarriageOrderQuery query) {
+    public HttpResult subcontractConsignment(LogisticsConsignmentParam query) {
+
         return null;
     }
 
@@ -119,4 +138,115 @@ public class AcceptCarriageOrderService {
                 .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId()));
         return result;
     }
+
+    /**
+     * 派车
+     *
+     * @param sendCarDTO
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult commitSendCar(SendCarDTO sendCarDTO) {
+        log.info("承运订单提交派车信息详情:{}", JSONObject.toJSONString(sendCarDTO));
+        HttpResult result = new HttpResult();
+        KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(StringUtils.isNotBlank(sendCarDTO.getLOrderId()), KwtLogisticsOrder::getId, sendCarDTO.getLOrderId()));
+        if (logisticsOrder == null) {
+            result.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+            result.setMsg("单据不存在!");
+            return result;
+        }
+        if (String.valueOf(NumberConstant.ZERO).equals(sendCarDTO.getType())) {
+            for (CarListDTO car : sendCarDTO.getCarList()) {
+                if (ObjectUtils.isEmpty(car.getCount())) {
+                    throw new RuntimeException("趟次派车时,趟次次数不能为空");
+                }
+                for (int i = 0; i < car.getCount(); i++) {
+                    Long wOrderId = new IdWorker(NumberConstant.ONE).nextId();
+                    String wOrderNo = com.sckw.transport.utils.StringUtils.getWaybillNoUtil() + i;
+                    KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
+                    waybillOrder.setType(String.valueOf(NumberConstant.ZERO));
+                    waybillOrder.setEntrustAmount(new BigDecimal(car.getLoadAmount()));
+                    insertWaybillOrder(waybillOrder, wOrderId, wOrderNo, logisticsOrder, car, sendCarDTO);
+                    //insertWaybillOrderTicket(id,wOrderNo,logisticsOrder,sendCarDTO);
+                    insertWaybillOrderTrack(wOrderId);
+                }
+            }
+        } else if (String.valueOf(NumberConstant.ONE).equals(sendCarDTO.getType())) {
+            for (CarListDTO car : sendCarDTO.getCarList()) {
+                if (ObjectUtils.isEmpty(sendCarDTO.getWaitingVolume())) {
+                    throw new RuntimeException("循环派车时,剩余可运量不能为空");
+                }
+                for (int i = 0; i < car.getCount(); i++) {
+                    Long wOrderId = new IdWorker(NumberConstant.ONE).nextId();
+                    String wOrderNo = com.sckw.transport.utils.StringUtils.getWaybillNoUtil() + i;
+                    KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
+                    waybillOrder.setType(String.valueOf(NumberConstant.ONE));
+                    waybillOrder.setEntrustAmount(new BigDecimal(sendCarDTO.getWaitingVolume()));
+                    insertWaybillOrder(waybillOrder, wOrderId, wOrderNo, logisticsOrder, car, sendCarDTO);
+                    insertWaybillOrderTrack(wOrderId);
+                }
+            }
+        } else {
+            result.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+            result.setMsg("派车类型错误!");
+            return result;
+        }
+        return result;
+    }
+
+    /**
+     * 保存车辆运单状态信息
+     *
+     * @param wOrderId
+     */
+    private void insertWaybillOrderTrack(Long wOrderId) {
+        KwtWaybillOrderTrack track = new KwtWaybillOrderTrack();
+        track.setId(new IdWorker(NumberConstant.ONE).nextId());
+        track.setWOrderId(wOrderId);
+        track.setStatus(CarWaybillEnum.PENDING_ORDER.getCode());
+        track.setCreateTime(new Date());
+        track.setUpdateTime(new Date());
+        track.setCreateBy(LoginUserHolder.getUserId());
+        track.setUpdateBy(LoginUserHolder.getUserId());
+        waybillOrderTrackMapper.insert(track);
+    }
+
+    /**
+     * 保存车辆装卸单信息
+     *
+     * @param id
+     * @param wOrderNo
+     * @param logisticsOrder
+     * @param carListDTO
+     */
+    private void insertWaybillOrderTicket(Long id, String wOrderNo, KwtLogisticsOrder logisticsOrder, CarListDTO carListDTO) {
+
+    }
+
+    /**
+     * 派车主体保存
+     *
+     * @param wOrderNo
+     * @param logisticsOrder
+     * @param carListDTO
+     * @param sendCarDTO
+     */
+    private void insertWaybillOrder(KwtWaybillOrder waybillOrder, Long wOrderId, String wOrderNo, KwtLogisticsOrder logisticsOrder, CarListDTO carListDTO, SendCarDTO sendCarDTO) {
+        waybillOrder.setId(wOrderId);
+        waybillOrder.setEntId(logisticsOrder.getEntId());
+        waybillOrder.setLOrderId(Long.parseLong(sendCarDTO.getLOrderId()));
+        waybillOrder.setWOrderNo(wOrderNo);
+        waybillOrder.setStartTime(sendCarDTO.getLoadDateTime());
+        waybillOrder.setEndTime(sendCarDTO.getUnloadDateTime());
+        waybillOrder.setDriverId(Long.parseLong(carListDTO.getDriverId()));
+        waybillOrder.setTruckNo(carListDTO.getTruckNo());
+        waybillOrder.setRemark(sendCarDTO.getRemark());
+        waybillOrder.setStatus(NumberConstant.ZERO);
+        waybillOrder.setCreateBy(LoginUserHolder.getUserId());
+        waybillOrder.setCreateTime(new Date());
+        waybillOrder.setUpdateTime(new Date());
+        waybillOrder.setUpdateBy(LoginUserHolder.getUserId());
+        waybillOrderMapper.insert(waybillOrder);
+    }
 }

+ 0 - 25
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java

@@ -1,6 +1,5 @@
 package com.sckw.transport.service;
 
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.utils.CollectionUtils;
@@ -20,7 +19,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
@@ -176,27 +174,4 @@ public class ConsignOrderService {
         }
         return HttpResult.ok(carDataVOS);
     }
-
-    @Transactional(rollbackFor = Exception.class)
-    public HttpResult cancelConsign(OrderDTO orderDto) {
-        log.info("订单-撤销托运请求参数:{}", JSONObject.toJSONString(orderDto));
-        HttpResult result = new HttpResult();
-        KwtLogisticsOrder logisticsOrder = kwtLogisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                .eq(KwtLogisticsOrder::getId, orderDto.getId())
-                .eq(KwtLogisticsOrder::getLOrderNo, orderDto.getOrderNo())
-                .eq(KwtLogisticsOrder::getEntId, LoginUserHolder.getEntId()));
-        if (logisticsOrder == null) {
-            result.setMsg("单据不存在");
-        }
-        /**以此字段判别是否存在分包操作*/
-        if (logisticsOrder.getPid()==null){//撤销数据回归到贸易订单
-            //并不属于被分包
-            //待接单状态下才能撤销托运
-            //
-
-        }else {
-            //即代表存在分包,当次是属于被分包.需要将数据回归到上游数据。
-        }
-        return result;
-    }
 }

+ 39 - 36
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java

@@ -11,6 +11,8 @@ import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
+import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.transport.common.enums.LogisticsOrderEnum;
@@ -44,6 +46,9 @@ public class LogisticsConsignmentService {
     @DubboReference(version = "2.0.0", group = "design", check = false)
     RemoteSystemService remoteSystemService;
 
+    @DubboReference(version = "2.0.0", group = "design", check = false)
+    GoodsInfoService goodsInfoService;
+
     @Autowired
     public KwoTradeOrderMapper kwoTradeOrderMapper;
 
@@ -98,32 +103,31 @@ public class LogisticsConsignmentService {
             order.setAmount(new BigDecimal(NumberConstant.ZERO));
             order.setSubcontractAmount(new BigDecimal(NumberConstant.ZERO));
         }
-        String waybillNo = "waybillNo";
+        String lOrderNo = com.sckw.transport.utils.StringUtils.getLOrderNo();
         Long orderId = new IdWorker(NumberConstant.ONE).nextId();
-        insertLogisticsGoods(bo, waybillNo, orderId);
-        insertLogisticsOrder(bo, waybillNo, order, tradeOrder, orderId);
+        insertLogisticsGoods(bo, lOrderNo, orderId);
+        insertLogisticsOrder(bo, lOrderNo, order, tradeOrder, orderId);
         insertLogisticsOrderContract(bo, orderId);
-        insertLogisticsOrderUnit(bo, waybillNo, orderId);
-        insertLogisticsOrderAddress(bo, waybillNo, orderId);
-        insertLogisticsOrderTrack(bo, waybillNo, orderId);
-        sendMongoDB(waybillNo, orderId, bo, tradeOrder);
-
+        insertLogisticsOrderUnit(bo, orderId);
+        insertLogisticsOrderAddress(bo, orderId);
+        insertLogisticsOrderTrack(bo, orderId);
+        sendMongoDB(lOrderNo, orderId, bo, tradeOrder);
     }
 
     /**
      * 组装数据发送至mongoDb
      *
-     * @param waybillNo
+     * @param lOrderNo
      * @param orderId
      * @param bo
      */
-    private void sendMongoDB(String waybillNo, Long orderId, LogisticsConsignmentParam bo, KwoTradeOrder tradeOrder) {
+    private void sendMongoDB(String lOrderNo, Long orderId, LogisticsConsignmentParam bo, KwoTradeOrder tradeOrder) {
         SckwLogisticsOrder logisticsOrder = new SckwLogisticsOrder();
         logisticsOrder.setLOrderId(orderId);
-        logisticsOrder.setLOrderNo(waybillNo);
+        logisticsOrder.setLOrderNo(lOrderNo);
         logisticsOrder.setLOrderPid(null);
         logisticsOrder.setTOrderId(tradeOrder.getId());
-        logisticsOrder.setTOrderNo("D" + waybillNo);
+        logisticsOrder.setTOrderNo("D" + com.sckw.transport.utils.StringUtils.getWaybillNoUtil());
         logisticsOrder.setSettlementCycle(bo.getSettlementCycle());
         logisticsOrder.setPrice(new BigDecimal(bo.getPrice()));
         logisticsOrder.setPriceType(remoteSystemService.queryDictByTypeAndValue(DictEnum.PRICE_TYPE_0.getType(), bo.getPriceType()) == null ?
@@ -148,21 +152,23 @@ public class LogisticsConsignmentService {
 //        logisticsOrder.setUnloadTime();
 //        logisticsOrder.setLoadTime();
 //        logisticsOrder.setWOrderNo();
-        logisticsOrder.setSubcontractAmount(new BigDecimal(NumberConstant.ZERO));
-        logisticsOrder.setEntrustAmount(new BigDecimal(NumberConstant.ZERO));
-        logisticsOrder.setUnloadAmount(new BigDecimal(NumberConstant.ZERO));
-        logisticsOrder.setLoadAmount(new BigDecimal(NumberConstant.ZERO));
-        logisticsOrder.setIgnoreAmount(new BigDecimal(NumberConstant.ZERO));
-        logisticsOrder.setDeficitPrice(new BigDecimal(NumberConstant.ZERO));
+        BigDecimal decimal = new BigDecimal(NumberConstant.ZERO);
+        logisticsOrder.setSubcontractAmount(decimal);
+        logisticsOrder.setEntrustAmount(decimal);
+        logisticsOrder.setUnloadAmount(decimal);
+        logisticsOrder.setLoadAmount(decimal);
+        logisticsOrder.setIgnoreAmount(decimal);
+        logisticsOrder.setDeficitPrice(decimal);
         logisticsOrder.setPayment(Long.parseLong(bo.getPayment()));
         logisticsOrder.setTaxRate(bo.getTaxRate() == null ? null : new BigDecimal(bo.getTaxRate()));
         logisticsOrder.setRemark(bo.getRemark());
         logisticsOrder.setEntId(LoginUserHolder.getEntId());
         logisticsOrder.setFirmName(remoteSystemService.queryEntCacheById(LoginUserHolder.getEntId()).getFirmName());
         logisticsOrder.setGoodsId(Integer.parseInt(bo.getGoodsId()));
-        //todo dubbo调用订单服务
-//        logisticsOrder.setGoodsType();
-//        logisticsOrder.setGoodsSpec();
+        //todo dubbo调用商品服务
+        KwpGoods goods = goodsInfoService.getGoodsById(Long.parseLong(bo.getGoodsId()));
+        logisticsOrder.setGoodsType(goods == null ? null : goods.getGoodsType());
+        logisticsOrder.setGoodsSpec(goods == null ? null : goods.getSpec());
         logisticsOrder.setContractId(Integer.parseInt(bo.getContractId()));
         logisticsOrder.setContractNo(bo.getContractNo());
         logisticsOrder.setContractName(bo.getContractName());
@@ -212,11 +218,10 @@ public class LogisticsConsignmentService {
 
     /**
      * 物流订单-企业信息
-     *
      * @param bo
-     * @param waybillNo
+     * @param orderId
      */
-    private void insertLogisticsOrderUnit(LogisticsConsignmentParam bo, String waybillNo, Long orderId) {
+    private void insertLogisticsOrderUnit(LogisticsConsignmentParam bo, Long orderId) {
         KwtLogisticsOrderUnit checkUnit = new KwtLogisticsOrderUnit()
                 .setLOrderId(orderId)
                 .setId(new IdWorker(NumberConstant.ONE).nextId())
@@ -250,11 +255,10 @@ public class LogisticsConsignmentService {
 
     /**
      * 物流订单-状态
-     *
      * @param bo
-     * @param waybillNo
+     * @param orderId
      */
-    private void insertLogisticsOrderTrack(LogisticsConsignmentParam bo, String waybillNo, Long orderId) {
+    private void insertLogisticsOrderTrack(LogisticsConsignmentParam bo,Long orderId) {
         KwtLogisticsOrderTrack entity = new KwtLogisticsOrderTrack();
         entity.setId(new IdWorker(NumberConstant.ONE).nextId());
         entity.setLOrderId(orderId);
@@ -271,16 +275,16 @@ public class LogisticsConsignmentService {
      * 物流订单-商品信息
      *
      * @param bo
-     * @param waybillNo
+     * @param lOrderNo
      */
-    private void insertLogisticsGoods(LogisticsConsignmentParam bo, String waybillNo, Long orderId) {
+    private void insertLogisticsGoods(LogisticsConsignmentParam bo, String lOrderNo, Long orderId) {
         KwtLogisticsOrderGoods kwtLogisticsOrderGoods = new KwtLogisticsOrderGoods();
         kwtLogisticsOrderGoods.setId(new IdWorker(NumberConstant.ONE).nextId());
         kwtLogisticsOrderGoods.setGoodsId(Long.parseLong(bo.getGoodsId()));
         kwtLogisticsOrderGoods.setGoodsName(bo.getGoodsName());
         kwtLogisticsOrderGoods.setSkuId(StringUtils.isBlank(bo.getSkuId()) ? null : Long.parseLong(bo.getSkuId()));
         kwtLogisticsOrderGoods.setLOrderId(orderId);
-        kwtLogisticsOrderGoods.setLOrderNo(waybillNo);
+        kwtLogisticsOrderGoods.setLOrderNo(lOrderNo);
         kwtLogisticsOrderGoods.setUpdateBy(LoginUserHolder.getUserId());
         kwtLogisticsOrderGoods.setUpdateTime(new Date());
         kwtLogisticsOrderGoods.setCreateBy(LoginUserHolder.getUserId());
@@ -292,16 +296,16 @@ public class LogisticsConsignmentService {
      * 物流订单-主体
      *
      * @param bo
-     * @param waybillNo
+     * @param lOrderNo
      * @param order
      * @param tradeOrder
      */
-    private void insertLogisticsOrder(LogisticsConsignmentParam bo, String waybillNo, KwtLogisticsOrder order, KwoTradeOrder tradeOrder, Long orderId) {
+    private void insertLogisticsOrder(LogisticsConsignmentParam bo, String lOrderNo, KwtLogisticsOrder order, KwoTradeOrder tradeOrder, Long orderId) {
         order.setId(orderId);
         order.setEntId(LoginUserHolder.getEntId());
         order.setTOrderId(Long.parseLong(bo.getLOrderId()));
         order.setTOrderNo(bo.getLOrderNo());
-        order.setLOrderNo(waybillNo);
+        order.setLOrderNo(lOrderNo);
         order.setPid(null);
         order.setSettlementCycle(bo.getSettlementCycle());
         order.setPrice(new BigDecimal(bo.getPrice()));
@@ -352,11 +356,10 @@ public class LogisticsConsignmentService {
 
     /**
      * 物流订单-装卸货地址
-     *
      * @param bo
-     * @param waybillNo
+     * @param orderId
      */
-    private void insertLogisticsOrderAddress(LogisticsConsignmentParam bo, String waybillNo, Long orderId) {
+    private void insertLogisticsOrderAddress(LogisticsConsignmentParam bo, Long orderId) {
         KwtLogisticsOrderAddress loadOrderAddress = new KwtLogisticsOrderAddress();
         KwtLogisticsOrderAddress unloadOrderAddress = new KwtLogisticsOrderAddress();
         //todo 装卸货地址 通过dubbo查询

+ 79 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java

@@ -2,19 +2,27 @@ package com.sckw.transport.service;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.excel.utils.DateUtil;
+import com.sckw.transport.common.enums.LogisticsOrderEnum;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.DocumentParamDTO;
+import com.sckw.transport.model.dto.OrderDTO;
 import com.sckw.transport.model.vo.OrderDetailVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.ObjectUtils;
+
+import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * @author lfdc
@@ -89,6 +97,11 @@ public class TransportCommonService {
         return HttpResult.ok();
     }
 
+    /**
+     * 查看订单详情
+     * @param dto
+     * @return
+     */
     public HttpResult getOrderDetail(DocumentParamDTO dto) {
         HttpResult httpResult = new HttpResult();
         httpResult.setCode(HttpStatus.SUCCESS_CODE);
@@ -122,11 +135,9 @@ public class TransportCommonService {
         KwtLogisticsOrderUnit unitOne = logisticsOrderUnitMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderUnit>()
                 .eq(StringUtils.isNotBlank(dto.getId()), KwtLogisticsOrderUnit::getLOrderId, dto.getId())
                 .eq(KwtLogisticsOrderUnit::getUnitType, NumberConstant.ONE));
-//                .eq(KwtLogisticsOrderUnit::getEntId, logisticsOrder.getEntId()));
         KwtLogisticsOrderUnit unitTwo = logisticsOrderUnitMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderUnit>()
                 .eq(StringUtils.isNotBlank(dto.getId()), KwtLogisticsOrderUnit::getLOrderId, dto.getId())
                 .eq(KwtLogisticsOrderUnit::getUnitType, NumberConstant.TWO));
-//                .eq(KwtLogisticsOrderUnit::getEntId, logisticsOrder.getEntId()));
         KwtLogisticsOrderAddress loadOrderAddress = logisticsOrderAddressMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderAddress>()
                 .eq(StringUtils.isNotBlank(dto.getId()), KwtLogisticsOrderAddress::getLOrderId, dto.getId())
                 .eq(KwtLogisticsOrderAddress::getAddressType, NumberConstant.ONE));
@@ -174,4 +185,70 @@ public class TransportCommonService {
         orderDetailVO.setPerformanceAmount(logisticsOrder.getLoadAmount() == null ? null : String.valueOf(logisticsOrder.getLoadAmount()));
         return orderDetailVO;
     }
+
+    /**
+     * 撤销托运
+     * @param orderDto
+     * @return
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public HttpResult cancelConsign(OrderDTO orderDto) {
+        log.info("订单-撤销托运请求参数:{}", JSONObject.toJSONString(orderDto));
+        HttpResult result = new HttpResult();
+        KwtLogisticsOrder logisticsOrder = logisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                .eq(KwtLogisticsOrder::getId, orderDto.getId())
+                .eq(KwtLogisticsOrder::getLOrderNo, orderDto.getOrderNo())
+                .eq(KwtLogisticsOrder::getEntId, LoginUserHolder.getEntId()));
+        if (logisticsOrder == null) {
+            result.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+            result.setMsg("单据不存在");
+            return result;
+        }
+        if (!LogisticsOrderEnum.TO_BE_PLANNED.getCode().equals(logisticsOrder.getStatus())) {
+            result.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
+            result.setMsg("待接单才允许撤销托运");
+            return result;
+        }
+        /**以此字段判别是否存在分包操作*/
+        if (ObjectUtils.isEmpty(logisticsOrder.getPid())) {
+            /**并不存在分包,撤销数据回归到贸易订单,[待接单状态]下才能撤销托运*/
+            //todo 调用dubbo 修改数值
+            Long tOrderId = logisticsOrder.getTOrderId();
+            String tOrderNo = logisticsOrder.getTOrderNo();
+            logisticsOrder.setDelFlag(1);
+            logisticsOrder.setUpdateTime(new Date());
+            logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
+            logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                    .eq(KwtLogisticsOrder::getId, logisticsOrder.getId())
+                    .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ONE)
+                    .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
+                    .set(KwtLogisticsOrder::getUpdateTime, new Date()));
+        } else {
+            /**即代表存在分包,当次是属于被分包.需要将数据回归到上游数据。*/
+            Long pid = logisticsOrder.getPid();
+            KwtLogisticsOrder order = logisticsOrderMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                    .eq(KwtLogisticsOrder::getId, pid));
+            //上游分配量
+            BigDecimal amount = logisticsOrder.getAmount();
+            //已经完成的量
+            BigDecimal unloadAmount = logisticsOrder.getUnloadAmount();
+            //未完成的量
+            BigDecimal subtract = amount.subtract(unloadAmount);
+            //.setScale(2,BigDecimal.ROUND_HALF_DOWN)
+            BigDecimal add = order.getSubcontractAmount().add(subtract);
+            logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                    .eq(KwtLogisticsOrder::getId, order.getId())
+                    .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ONE)
+                    .set(KwtLogisticsOrder::getSubcontractAmount,add)
+                    .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
+                    .set(KwtLogisticsOrder::getUpdateTime, new Date()));
+
+            logisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                    .eq(KwtLogisticsOrder::getId, logisticsOrder.getId())
+                    .set(KwtLogisticsOrder::getDelFlag, NumberConstant.ONE)
+                    .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
+                    .set(KwtLogisticsOrder::getUpdateTime, new Date()));
+        }
+        return result;
+    }
 }

+ 16 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/utils/StringUtils.java

@@ -0,0 +1,16 @@
+package com.sckw.transport.utils;
+
+/**
+ * @author lfdc
+ * @description 字符串工具类
+ * @date 2023-07-14 10:07:20
+ */
+public class StringUtils {
+    public static String getWaybillNoUtil() {
+        return "waybillNo";
+    }
+
+    public static String getLOrderNo() {
+        return "lOrderNo";
+    }
+}

+ 37 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

@@ -44,4 +44,41 @@
     deficit_price, payment, tax_rate, remark, `status`, create_by, create_time, update_by,
     update_time, del_flag
     </sql>
+    <update id="updateByPrimaryKey" parameterType="com.sckw.transport.model.KwtLogisticsOrder">
+        update kwt_logistics_order
+        set ent_id = #{entId,jdbcType=BIGINT},
+            t_order_id = #{tOrderId,jdbcType=BIGINT},
+            t_order_no = #{tOrderNo,jdbcType=VARCHAR},
+            l_order_no = #{lOrderNo,jdbcType=VARCHAR},
+            pid = #{pid,jdbcType=BIGINT},
+            settlement_cycle = #{settlementCycle,jdbcType=BIGINT},
+            billing_mode = #{billingMode,jdbcType=VARCHAR},
+            price = #{price,jdbcType=DECIMAL},
+            price_type = #{priceType,jdbcType=BIGINT},
+            amount = #{amount,jdbcType=DECIMAL},
+            unit = #{unit,jdbcType=VARCHAR},
+            loss = #{loss,jdbcType=DECIMAL},
+            loss_unit = #{lossUnit,jdbcType=VARCHAR},
+            goods_price = #{goodsPrice,jdbcType=DECIMAL},
+            goods_price_unit = #{goodsPriceUnit,jdbcType=VARCHAR},
+            start_time = #{startTime,jdbcType=TIMESTAMP},
+            ent_time = #{entTime,jdbcType=TIMESTAMP},
+            subcontract_amount = #{subcontractAmount,jdbcType=DECIMAL},
+            entrust_amount = #{entrustAmount,jdbcType=DECIMAL},
+            unload_amount = #{unloadAmount,jdbcType=DECIMAL},
+            load_amount = #{loadAmount,jdbcType=DECIMAL},
+            ignore_amount = #{ignoreAmount,jdbcType=DECIMAL},
+            deficit_amount = #{deficitAmount,jdbcType=DECIMAL},
+            deficit_price = #{deficitPrice,jdbcType=DECIMAL},
+            payment = #{payment,jdbcType=BIGINT},
+            tax_rate = #{taxRate,jdbcType=DECIMAL},
+            remark = #{remark,jdbcType=VARCHAR},
+            `status` = #{status,jdbcType=INTEGER},
+            create_by = #{createBy,jdbcType=BIGINT},
+            create_time = #{createTime,jdbcType=TIMESTAMP},
+            update_by = #{updateBy,jdbcType=BIGINT},
+            update_time = #{updateTime,jdbcType=TIMESTAMP},
+            del_flag = #{delFlag,jdbcType=INTEGER}
+        where id = #{id,jdbcType=BIGINT}
+    </update>
 </mapper>

+ 3 - 1
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

@@ -17,6 +17,8 @@
         <result column="status" jdbcType="INTEGER" property="status" />
         <result column="create_by" jdbcType="BIGINT" property="createBy" />
         <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+        <result column="start_time" jdbcType="TIMESTAMP" property="startTime" />
+        <result column="end_time" jdbcType="TIMESTAMP" property="endTime" />
         <result column="update_by" jdbcType="BIGINT" property="updateBy" />
         <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
         <result column="del_flag" jdbcType="INTEGER" property="delFlag" />
@@ -24,6 +26,6 @@
     <sql id="Base_Column_List">
         id, ent_id, l_order_id, w_order_no, truck_no, driver_id, entrust_amount, unload_amount,
     load_amount, deficit_amount, remark, `status`, create_by, create_time, update_by,
-    update_time, del_flag
+    update_time, del_flag,start_time,end_time
     </sql>
 </mapper>