Răsfoiți Sursa

特殊情况处理

xucaiqin 1 lună în urmă
părinte
comite
2241bc19f6
32 a modificat fișierele cu 1495 adăugiri și 374 ștergeri
  1. 22 5
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/RequestCheckFilter.java
  2. 24 5
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  3. 29 0
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderSaleVo.java
  4. 70 43
      sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderController.java
  5. 7 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderMapper.java
  6. 14 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderTransportMapper.java
  7. 24 9
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  8. 8 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrder.java
  9. 7 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderAddress.java
  10. 104 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderTransport.java
  11. 1 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AcceptanceOrderParam.java
  12. 1 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AddressInfoDto.java
  13. 98 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AddressInfoPara.java
  14. 55 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/LogisticsEntDto.java
  15. 1 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/PurchaseOrderDraftParam.java
  16. 1 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/PurchaseOrderParam.java
  17. 47 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TradeOrderAuditParam.java
  18. 15 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TradeOrderListSelectParam.java
  19. 4 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TradeOrderListStatisticParam.java
  20. 84 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TradeOrderParam.java
  21. 1 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/UpdateOrderParam.java
  22. 2 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/AddressInfoDtoDetailRes.java
  23. 38 5
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java
  24. 4 1
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderProcess.java
  25. 57 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/TransportUnitInfo.java
  26. 3 4
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java
  27. 428 61
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  28. 29 0
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderTransportService.java
  29. 3 12
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/TradeOrderManageService.java
  30. 29 0
      sckw-modules/sckw-order/src/main/resources/bootstrap-local.yml
  31. 259 218
      sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderMapper.xml
  32. 26 0
      sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderTransportMapper.xml

+ 22 - 5
sckw-common/sckw-common-core/src/main/java/com/sckw/core/filter/RequestCheckFilter.java

@@ -90,15 +90,32 @@ public class RequestCheckFilter implements Filter {
 //        String accessSpecial = request.getHeader(RequestConstant.ACCESS_SPECIAL);
         String requestUri = request.getRequestURI();
         /*1、非token校验接口放行*/
-        if (EXCLUDEPATH.contains(requestUri)) {
+        if (EXCLUDEPATH.contains(requestUri)) {//不校验token时,如果存在token,也设置上下文变量信息
+            Map<String, Object> tokenMap = EncryUtil.descryV2(Global.PRI_KEY, token);
+            if (tokenMap != null) {
+                Long userId = StringUtils.isNotBlank(tokenMap.get("userId")) ? NumberUtils.parseLong(tokenMap.get("userId")) : null;
+                String key = Global.getFullUserLoginKey(systemType, userId);
+
+                String userInfoStr = RedissonUtils.getString(key);
+                LoginUserInfo loginUserInfo = StringUtils.isNotBlank(userInfoStr) ? JSON.parseObject(userInfoStr, LoginUserInfo.class) : null;
+                if (Objects.nonNull(loginUserInfo)) {
+                    loginUserInfo.setClientType(clientType);
+                    String loginEntStr = RedissonUtils.getString(Global.getFullUserEntKey(loginUserInfo.getEntId()));
+                    LoginEntInfo loginEntInfo = StringUtils.isNotBlank(loginEntStr) ? JSON.parseObject(loginEntStr, LoginEntInfo.class) : null;
+                    LoginUserHolder.set(loginUserInfo);
+                    LoginEntHolder.set(loginEntInfo);
+                }
+            }
             filterChain.doFilter(servletRequest, servletResponse);
+            LoginUserHolder.remove();
+            LoginEntHolder.remove();
             return;
         }
-        
+
         // 添加对Swagger相关路径的放行
-        if (requestUri.startsWith("/swagger-ui") || 
-            requestUri.startsWith("/v3/api-docs") || requestUri.startsWith("/doc.htm")||
-            requestUri.startsWith("/webjars/")) {
+        if (requestUri.startsWith("/swagger-ui") ||
+                requestUri.startsWith("/v3/api-docs") || requestUri.startsWith("/doc.htm") ||
+                requestUri.startsWith("/webjars/")) {
             filterChain.doFilter(servletRequest, servletResponse);
             return;
         }

+ 24 - 5
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java

@@ -3,6 +3,7 @@ package com.sckw.order.api.dubbo;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.order.api.model.*;
 
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Set;
 
@@ -23,7 +24,6 @@ public interface TradeOrderInfoService {
     OrderDetailRes getOrderDetailById(Long tOrderId);
 
 
-
     /**
      * @desc: 获取订单详情
      * @author: yzc
@@ -31,7 +31,7 @@ public interface TradeOrderInfoService {
      * @Param tOrderId:
      * @return: com.sckw.order.api.model.OrderAddressDetailRes
      */
-    OrderAddressDetailRes getOrderDetailByTradeOrderIdAndAddressId(Long tOrderId,Long tAddressId);
+    OrderAddressDetailRes getOrderDetailByTradeOrderIdAndAddressId(Long tOrderId, Long tAddressId);
 
     /**
      * @desc: 更新订单状态
@@ -61,7 +61,7 @@ public interface TradeOrderInfoService {
      * @Param loading: 辅助单位信息
      * @return: com.sckw.core.web.response.HttpResult
      */
-    HttpResult createOrCancelLogisticsOrderV1(Long updateBy,String updateByName ,Long tOrderId, List<GoodsLoadingParam> loading);
+    HttpResult createOrCancelLogisticsOrderV1(Long updateBy, String updateByName, Long tOrderId, List<GoodsLoadingParam> loading);
 
     /**
      * @desc: 完结物流订单
@@ -79,7 +79,7 @@ public interface TradeOrderInfoService {
      * @Param param:
      * @return: com.sckw.core.web.response.HttpResult
      */
-    HttpResult completeLogisticsOrderV1(Long updateBy,String updateByName ,Long tOrderId, List<GoodsLoadingV1Param> loading);
+    HttpResult completeLogisticsOrderV1(Long updateBy, String updateByName, Long tOrderId, List<GoodsLoadingV1Param> loading);
 
     /**
      * @desc: 更新订单实际交付量
@@ -126,7 +126,7 @@ public interface TradeOrderInfoService {
      * @Param secondEntId:
      * @return: java.lang.Boolean
      */
-    Boolean associateEnt(Long firstEntId,Long secondEntId);
+    Boolean associateEnt(Long firstEntId, Long secondEntId);
 
     OrderDetailVo queryByTradeOrderId(Long tradeOrderId);
 
@@ -135,4 +135,23 @@ public interface TradeOrderInfoService {
      * @return
      */
     List<OrderUnitInfoDetailVO> queryOrderUnitInfByTOrderId(Set<Long> tradeOrderId);
+
+    /**
+     * 获取当前企业,已签约的贸易合同对应的商品id
+     *
+     * @param entId
+     * @return
+     */
+    List<Long> querySignGoods(Long entId);
+
+    /**
+     * 查询近期的贸易订单,计算商品的近期销量
+     *
+     * @param start
+     * @param end
+     * @return
+     */
+    List<OrderSaleVo> queryRecentSale(LocalDateTime start, LocalDateTime end);
+
+
 }

+ 29 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/OrderSaleVo.java

@@ -0,0 +1,29 @@
+package com.sckw.order.api.model;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @desc: 订单详情响应参数
+ * @author: yzc
+ * @date: 2023-07-07 15:35
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class OrderSaleVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -2951319997472302360L;
+    private Long goodsId;
+    private BigDecimal amount;
+
+
+}

+ 70 - 43
sckw-modules/sckw-order/src/main/java/com/sckw/order/controller/KwoTradeOrderController.java

@@ -9,6 +9,8 @@ import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.order.model.vo.req.*;
 import com.sckw.order.serivce.KwoTradeOrderService;
 import io.seata.spring.annotation.GlobalTransactional;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.MediaType;
@@ -25,24 +27,25 @@ import java.util.List;
 @RestController
 @RequestMapping(value = "/kwoTradeOrder")
 @RequiredArgsConstructor
+@Tag(name = "贸易订单")
 public class KwoTradeOrderController {
 
     private final KwoTradeOrderService kwoTradeOrderService;
 
-    /**
-     * @desc: 采购下单草稿
-     * @author: yzc
-     * @date: 2023-07-07 15:29
-     * @Param purchaseOrderParam:
-     * @return: com.sckw.core.web.response.HttpResult
-     */
-    @GlobalTransactional(name = "default_tx_group")
-    @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
-    @PostMapping(value = "/addPurchaseOrderDraft", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult addPurchaseOrderDraft(@RequestBody @Validated PurchaseOrderDraftParam param) {
-        kwoTradeOrderService.addPurchaseOrderDraft(param);
-        return HttpResult.ok("采购下单草稿保存成功");
-    }
+//    /**
+//     * @desc: 采购下单草稿
+//     * @author: yzc
+//     * @date: 2023-07-07 15:29
+//     * @Param purchaseOrderParam:
+//     * @return: com.sckw.core.web.response.HttpResult
+//     */
+//    @GlobalTransactional(name = "default_tx_group")
+//    @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
+//    @PostMapping(value = "/addPurchaseOrderDraft", produces = MediaType.APPLICATION_JSON_VALUE)
+//    public HttpResult addPurchaseOrderDraft(@RequestBody @Validated PurchaseOrderDraftParam param) {
+//        kwoTradeOrderService.addPurchaseOrderDraft(param);
+//        return HttpResult.ok("采购下单草稿保存成功");
+//    }
 
     /**
      * @desc: 采购下单提交
@@ -52,45 +55,59 @@ public class KwoTradeOrderController {
      * @return: com.sckw.core.web.response.HttpResult
      */
     @GlobalTransactional(name = "default_tx_group")
-    @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
+    @RepeatSubmit(interval = 1000, message = "前方拥堵,请稍后尝试")
     @PostMapping(value = "/addPurchaseOrderSubmit", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult addPurchaseOrderSubmit(@RequestBody @Validated PurchaseOrderParam purchaseOrderParam) {
         kwoTradeOrderService.addPurchaseOrderSubmit(purchaseOrderParam);
         return HttpResult.ok("采购下单提交成功");
     }
 
-    /**
-     * @desc: 代客下单草稿
-     * @author: yzc
-     * @date: 2023-07-07 15:29
-     * @Param valetOrderParam:
-     * @return: com.sckw.core.web.response.HttpResult
-     */
-    @GlobalTransactional(name = "default_tx_group")
-    @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
-    @PostMapping(value = "/addValetOrderDraft", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult addValetOrderDraft(@RequestBody @Validated ValetOrderDraftParam param) {
-        kwoTradeOrderService.addValetOrderDraft(param);
-        return HttpResult.ok("代客下单草稿保存成功");
-    }
-
+//    /**
+//     * @desc: 代客下单草稿
+//     * @author: yzc
+//     * @date: 2023-07-07 15:29
+//     * @Param valetOrderParam:
+//     * @return: com.sckw.core.web.response.HttpResult
+//     */
+//    @GlobalTransactional(name = "default_tx_group")
+//    @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
+//    @PostMapping(value = "/addValetOrderDraft", produces = MediaType.APPLICATION_JSON_VALUE)
+//    public HttpResult addValetOrderDraft(@RequestBody @Validated ValetOrderDraftParam param) {
+//        kwoTradeOrderService.addValetOrderDraft(param);
+//        return HttpResult.ok("代客下单草稿保存成功");
+//    }
+//
+//
+//    /**
+//     * @desc: 代客下单提交
+//     * @author: yzc
+//     * @date: 2023-07-07 15:30
+//     * @Param valetOrderParam:
+//     * @return: com.sckw.core.web.response.HttpResult
+//     */
+//    @GlobalTransactional(name = "default_tx_group")
+//    @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
+//    @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 valetOrderParam:
-     * @return: com.sckw.core.web.response.HttpResult
+     * 门户贸易订单下单
      */
-    @GlobalTransactional(name = "default_tx_group")
-    @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
-    @PostMapping(value = "/addValetOrderSubmit", produces = MediaType.APPLICATION_JSON_VALUE)
-    public HttpResult addValetOrderSubmit(@RequestBody @Validated ValetOrderParam valetOrderParam) {
-        kwoTradeOrderService.addValetOrderSubmit(valetOrderParam);
-        return HttpResult.ok("代客下单提交成功");
+//    @GlobalTransactional(name = "default_tx_group")
+    @RepeatSubmit(interval = 1000, message = "前方拥堵,请稍后尝试")
+    @PostMapping(value = "/addOrder", produces = MediaType.APPLICATION_JSON_VALUE)
+    @Operation(summary = "门户贸易订单下单", description = "门户贸易订单下单")
+    public HttpResult addOrder(@RequestBody @Validated TradeOrderParam tradeOrderParam) {
+        kwoTradeOrderService.addTradeOrder(tradeOrderParam);
+        return HttpResult.ok("下单提交成功");
     }
 
     /**
+     * todo-xcq
+     *
      * @desc: 订单详情
      * @author: yzc
      * @date: 2023-07-07 15:30
@@ -98,10 +115,19 @@ public class KwoTradeOrderController {
      * @return: com.sckw.core.web.response.HttpResult
      */
     @GetMapping("/detail")
+    @Operation(summary = "贸易订单详情", description = "贸易订单详情")
     public HttpResult detail(@RequestParam Long id) {
         return HttpResult.ok("贸易订单详情查询成功", kwoTradeOrderService.getDetail(id));
     }
 
+    @PostMapping("/audit")
+    @Operation(summary = "审核贸易订单", description = "审核贸易订单")
+    @GlobalTransactional(name = "default_tx_group")
+    @RepeatSubmit(interval = 1000, message = "前方拥堵,请稍后尝试")
+    public HttpResult audit(@RequestBody @Validated TradeOrderAuditParam tradeOrderAuditParam) {
+        return HttpResult.ok("贸易订单审核成功", kwoTradeOrderService.  auditOrder(tradeOrderAuditParam));
+    }
+
     /**
      * @desc: 修改订单
      * @author: yzc
@@ -110,7 +136,7 @@ public class KwoTradeOrderController {
      * @return: com.sckw.core.web.response.HttpResult
      */
     @GlobalTransactional(name = "default_tx_group")
-    @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
+    @RepeatSubmit(interval = 1000, message = "前方拥堵,请稍后尝试")
     @PostMapping(value = "/update", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult update(@RequestBody @Validated UpdateOrderParam updateOrderParam) {
         kwoTradeOrderService.update(updateOrderParam);
@@ -125,7 +151,7 @@ public class KwoTradeOrderController {
      * @return: com.sckw.core.web.response.HttpResult
      */
     @GlobalTransactional(name = "default_tx_group")
-    @RepeatSubmit(interval = 1000,message ="前方拥堵,请稍后尝试")
+    @RepeatSubmit(interval = 1000, message = "前方拥堵,请稍后尝试")
     @PostMapping(value = "/acceptanceOrder", produces = MediaType.APPLICATION_JSON_VALUE)
     public HttpResult acceptanceOrder(@RequestBody @Validated AcceptanceOrderParam acceptanceOrderParam) {
         kwoTradeOrderService.acceptanceOrder(acceptanceOrderParam);
@@ -224,6 +250,7 @@ public class KwoTradeOrderController {
      * @return: com.sckw.core.web.response.HttpResult
      */
     @PostMapping(value = "/tradeOrderSelect", produces = MediaType.APPLICATION_JSON_VALUE)
+    @Operation(summary = "分页查询贸易订单")
     public HttpResult select(@RequestBody @Validated TradeOrderListSelectParam params) {
         return HttpResult.ok(kwoTradeOrderService.tradeOrderSelect(params));
     }

+ 7 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderMapper.java

@@ -2,6 +2,7 @@ package com.sckw.order.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.sckw.core.model.vo.TableTop;
+import com.sckw.order.api.model.OrderSaleVo;
 import com.sckw.order.api.model.TradeOrderCountStatisticsDTO;
 import com.sckw.order.model.KwoTradeOrder;
 import com.sckw.order.model.dto.*;
@@ -9,6 +10,7 @@ import com.sckw.order.model.vo.res.TradeOrderAppStatisticVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.List;
 
@@ -129,8 +131,8 @@ public interface KwoTradeOrderMapper extends BaseMapper<KwoTradeOrder> {
 
     /**
      * @desc TODO
-     * @param procureTopEntId 
-     * @param excludeStatuses 
+     * @param procureTopEntId
+     * @param excludeStatuses
      * @return java.util.List<com.sckw.order.model.dto.WorkbenchPurchaseDTO>
      * @author yzc
      * @date 2024/3/18 17:04
@@ -141,4 +143,7 @@ public interface KwoTradeOrderMapper extends BaseMapper<KwoTradeOrder> {
     WorkbenchOrderStsDTO getOrderStsInfo(@Param("query") OrderStsInfoDTO query,
                                          @Param("excludeStatuses") List<Integer> excludeStatuses);
 
+    List<Long> selectGoodsId(@Param("entId") Long entId);
+
+    List<OrderSaleVo> querySaleOrder(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end);
 }

+ 14 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/dao/KwoTradeOrderTransportMapper.java

@@ -0,0 +1,14 @@
+package com.sckw.order.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.sckw.order.model.KwoTradeOrderTransport;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author xucaiqin
+ * @date 2025-11-16 14:28:07
+ */
+@Mapper
+public interface KwoTradeOrderTransportMapper extends BaseMapper<KwoTradeOrderTransport> {
+
+}

+ 24 - 9
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -16,7 +16,7 @@ import com.sckw.order.api.model.*;
 import com.sckw.order.enums.DeliveryTypeEnum;
 import com.sckw.order.enums.OrderStatusEnum;
 import com.sckw.order.model.*;
-import com.sckw.order.model.vo.res.AddressInfoDetailRes;
+import com.sckw.order.model.vo.res.AddressInfoDtoDetailRes;
 import com.sckw.order.repository.*;
 import com.sckw.order.serivce.*;
 import com.sckw.redis.constant.RedisConstant;
@@ -31,6 +31,11 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -80,7 +85,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     @Override
     public OrderAddressDetailRes getOrderDetailByTradeOrderIdAndAddressId(Long tOrderId, Long tAddressId) {
         //地址信息
-        AddressInfoDetailRes addressInfoDetailRes = tradeOrderAddressService.getByOrderIdAndAddressId(tOrderId, tAddressId);
+        AddressInfoDtoDetailRes addressInfoDetailRes = tradeOrderAddressService.getByOrderIdAndAddressId(tOrderId, tAddressId);
         OrderAddressDetailRes orderAddressDetailRes = new OrderAddressDetailRes();
         if (addressInfoDetailRes != null) {
             BeanUtils.copyProperties(addressInfoDetailRes, orderAddressDetailRes);
@@ -384,7 +389,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         }
         order.setActualAmount(actualLoadAmount);
         kwoTradeOrderService.updateById(order);
-            
+
         return HttpResult.ok();
     }
 
@@ -479,7 +484,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     public OrderDetailVo queryByTradeOrderId(Long tradeOrderId) {
         //根据贸易订单id查询订单
         KwoTradeOrder kwoTradeOrder = kwoTradeOrderRepository.queryByTradeOrderId(tradeOrderId);
-        if (Objects.isNull(kwoTradeOrder)){
+        if (Objects.isNull(kwoTradeOrder)) {
             return new OrderDetailVo();
         }
         //根据贸易订单id查询贸易商品
@@ -511,7 +516,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         orderDetailRes.setConsignmentWay(kwoTradeOrder.getConsignmentWay());
         orderDetailRes.setStatus(kwoTradeOrder.getStatus());
 
-        if (Objects.nonNull(kwoTradeOrderGoods)){
+        if (Objects.nonNull(kwoTradeOrderGoods)) {
             OrderDetailVo.GoodsInfo goodsInfo = new OrderDetailVo.GoodsInfo();
             goodsInfo.setTOrderId(kwoTradeOrderGoods.getTOrderId());
             goodsInfo.setTOrderNo(kwoTradeOrderGoods.getTOrderNo());
@@ -525,7 +530,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             orderDetailRes.setGoodsInfo(goodsInfo);
         }
 
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwoTradeOrderUnits)){
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwoTradeOrderUnits)) {
             orderDetailRes.setUnitInfo(kwoTradeOrderUnits.stream()
                     .map(u -> {
                         OrderDetailVo.UnitInfo unitInfo = new OrderDetailVo.UnitInfo();
@@ -542,8 +547,8 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
                     }).collect(Collectors.toList())
             );
         }
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwoTradeOrderAddresses)){
-            List<OrderDetailVo.AddressInfo> addressInfos= kwoTradeOrderAddresses.stream()
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwoTradeOrderAddresses)) {
+            List<OrderDetailVo.AddressInfo> addressInfos = kwoTradeOrderAddresses.stream()
                     .map(a -> {
                         OrderDetailVo.AddressInfo addressInfo = new OrderDetailVo.AddressInfo();
                         addressInfo.setTOrderId(a.getTOrderId());
@@ -564,7 +569,7 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
                     }).collect(Collectors.toList());
             orderDetailRes.setAddressInfo(addressInfos);
         }
-        if (Objects.nonNull(kwoTradeOrderContract)){
+        if (Objects.nonNull(kwoTradeOrderContract)) {
             OrderDetailVo.TradeContractInfo tradeContractInfo = new OrderDetailVo.TradeContractInfo();
             tradeContractInfo.setContractId(kwoTradeOrderContract.getContractId());
             tradeContractInfo.setContractNo(kwoTradeOrderContract.getContractNo());
@@ -576,6 +581,16 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         return orderDetailRes;
     }
 
+    @Override
+    public List<Long> querySignGoods(Long entId) {
+        return kwoTradeOrderService.querySignGoods(entId);
+    }
+
+    @Override
+    public List<OrderSaleVo> queryRecentSale(LocalDateTime start, LocalDateTime end) {
+        return kwoTradeOrderService.queryRecentSale(start, end);
+    }
+
     /**
      * @desc: mq保存mongodb
      * @author: yzc

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

@@ -100,6 +100,14 @@ public class KwoTradeOrder extends BaseModel implements Serializable {
      * 实际交付量
      */
     private BigDecimal actualAmount;
+    /**
+     * 累计装货量
+     */
+    private BigDecimal loadAmount;
+    /**
+     * 累计卸货量
+     */
+    private BigDecimal unloadAmount;
 
     /**
      * 是否关联对账单:0未关联,1已关联

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

@@ -53,6 +53,13 @@ public class KwoTradeOrderAddress extends BaseModel implements Serializable {
 
     /**
      * 地址类型
+     * 1-冶金厂
+     * 2-水泥厂
+     * 3-商混站
+     * 物流园
+     * 港口
+     * 站台
+     * 其他
      */
     private String type;
 

+ 104 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/KwoTradeOrderTransport.java

@@ -0,0 +1,104 @@
+package com.sckw.order.model;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 贸易订单物流信息
+* @date 2025-11-16 14:28:07
+* @author xucaiqin
+*/
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+@TableName("kwo_trade_order_transport")
+public class KwoTradeOrderTransport {
+    /**
+    * 主键
+    */
+    private Long id;
+
+    /**
+    * 交易订单id
+    */
+    private Long tOrderId;
+
+    /**
+    * 订单编号
+    */
+    private String tOrderNo;
+
+    /**
+    * 企业id
+    */
+    private Long entId;
+
+    /**
+    * 企业名称
+    */
+    private String firmName;
+
+    /**
+    * 合同id
+    */
+    private Long contractId;
+
+    /**
+    * 合同编号
+    */
+    private String contractNo;
+
+    /**
+    * 运输单价
+    */
+    private BigDecimal transportPrice;
+
+    /**
+    * 联系人ID
+    */
+    private Long contactsId;
+
+    /**
+    * 联系人姓名
+    */
+    private String contacts;
+
+    /**
+    * 联系电话
+    */
+    private String phone;
+
+    /**
+    * 备注
+    */
+    private String remark;
+
+    /**
+    * 用户状态(0正常、1已锁)
+    */
+    private Integer status;
+
+    private Long createBy;
+
+    private LocalDateTime createTime;
+
+    private Long updateBy;
+
+    /**
+    * 更新时间
+    */
+    private LocalDateTime updateTime;
+
+    /**
+    * 是否删除(0未删除,1删除)
+    */
+    private Integer delFlag;
+
+}

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

@@ -65,7 +65,7 @@ public class AcceptanceOrderParam {
 
     @NotEmpty(message = "装货信息不能为空")
     @Valid
-    private List<AddressInfo> addressInfo;
+    private List<AddressInfoDto> addressInfoDto;
 
     @NotNull(message = "合同信息不能为空")
     @Valid

+ 1 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AddressInfo.java → sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AddressInfoDto.java

@@ -19,7 +19,7 @@ import java.math.BigDecimal;
 @Getter
 @Setter
 @ToString
-public class AddressInfo {
+public class AddressInfoDto {
 
     /**
      * 地址类型(1装货地址、2卸货地址)

+ 98 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/AddressInfoPara.java

@@ -0,0 +1,98 @@
+package com.sckw.order.model.vo.req;
+
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Pattern;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Range;
+
+import java.math.BigDecimal;
+
+
+@Getter
+@Setter
+@ToString
+public class AddressInfoPara {
+
+    /**
+     * 地址类型(1装货地址、2卸货地址)
+     */
+    @NotBlank(message = "地址类型不能为空")
+    @Range(min = 1, max = 2, message ="非法地址类型")
+    private String addressType;
+
+    /**
+     * 地址名称
+     */
+    @NotBlank(message = "地址名称不能为空")
+    private String name;
+
+    /**
+     * 地址类型
+     */
+    @NotBlank(message = "地址类型不能为空")
+    private String type;
+
+    /**
+     * 联系人姓名
+     */
+    @NotBlank(message = "联系人姓名不能为空")
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    @NotBlank(message = "联系电话不能为空")
+    @Pattern(regexp = "^1[3456789]\\d{9}$", message = "非法手机号格式")
+    private String phone;
+
+    /**
+     * 所在地区
+     */
+    @NotNull(message = "所在地区code不能为空")
+    private Integer cityCode;
+
+    /**
+     * 所属区域名称
+     */
+    @NotBlank(message = "所属区域名称不能为空")
+    private String cityName;
+
+    /**
+     * 详细地址
+     */
+    @NotBlank(message = "详细地址不能为空")
+    private String detailAddress;
+
+    /**
+     * 纬度
+     */
+    @NotBlank(message = "纬度不能为空")
+    private String lat;
+
+    /**
+     * 经度
+     */
+    @NotBlank(message = "经度不能为空")
+    private String lng;
+
+    /**
+     * 电子围栏
+     */
+    private String fence;
+
+    /**
+     * 货物数量
+     */
+    @NotNull(message = "货物数量不能为空")
+    @DecimalMin(value = "0.00",message = "分配量必须大于零")
+    private BigDecimal amount;
+
+    /**
+     * 地址排序
+     */
+    private Integer sort;
+}

+ 55 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/LogisticsEntDto.java

@@ -0,0 +1,55 @@
+package com.sckw.order.model.vo.req;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.math.BigDecimal;
+
+
+@Getter
+@Setter
+@ToString
+public class LogisticsEntDto {
+
+    /**
+     * 合同id
+     */
+    @NotNull(message = "物流合同不能为空")
+    private Long contractId;
+
+    /**
+     * 合同编号
+     */
+    @NotBlank(message = "合同编号不能为空")
+    private String contractNo;
+
+    @NotNull(message = "承运单位不能为空")
+    private Long entId;
+
+    @NotBlank(message = "承运企业名称不能为空")
+    private String entName;
+    /**
+     * 运输单价
+     */
+    @NotNull(message = "运输单价不能为空")
+    private BigDecimal transportPrice;
+
+    /**
+     * 联系人ID
+     */
+    private Long contactsId;
+
+    /**
+     * 联系人姓名
+     */
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    private String phone;
+
+}

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

@@ -48,7 +48,7 @@ public class PurchaseOrderDraftParam {
     /**
      * 地址信息
      */
-    private List<AddressInfo> addressInfo;
+    private List<AddressInfoDto> addressInfoDto;
     /**
      * 开始时间
      */

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

@@ -54,7 +54,7 @@ public class PurchaseOrderParam {
      */
     @NotEmpty(message = "地址信息不能为空")
     @Valid
-    private List<AddressInfo> addressInfo;
+    private List<AddressInfoDto> addressInfoDto;
     /**
      * 开始时间
      */

+ 47 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TradeOrderAuditParam.java

@@ -0,0 +1,47 @@
+package com.sckw.order.model.vo.req;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Length;
+
+import java.util.List;
+
+/**
+ * @desc: 采购订单请求参数
+ * @author: yzc
+ * @date: 2023-07-07 14:19
+ */
+@Getter
+@Setter
+@ToString
+public class TradeOrderAuditParam {
+    @NotNull(message = "贸易订单id不能为空")
+    @Schema(description = "贸易订单id")
+    private Long id;
+
+    @NotNull(message = "商品id不能为空")
+    @Schema(description = "商品id")
+    private Long goodsId;
+    /**
+     * 贸易合同
+     */
+    @NotNull(message = "贸易合同不能为空")
+    @Schema(description = "贸易合同")
+    private Long tradeContractId;
+    /**
+     * 备注
+     */
+    @Length(max = 200, message = "备注最多支持200字")
+    @Schema(description = "备注")
+    private String remark;
+
+    @NotNull(message = "状态不能为空")
+    @Schema(description = "审核状态 1-通过 2-拒绝")
+    private Integer status;
+
+    @Schema(description = "物流合同信息")
+    private List<LogisticsEntDto> logisticsContractList;
+}

+ 15 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TradeOrderListSelectParam.java

@@ -1,5 +1,6 @@
 package com.sckw.order.model.vo.req;
 
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -12,6 +13,7 @@ import lombok.ToString;
 @Getter
 @Setter
 @ToString
+@Schema(description = "查询参数")
 public class TradeOrderListSelectParam extends TradeOrderListStatisticParam {
 
     /**
@@ -22,4 +24,17 @@ public class TradeOrderListSelectParam extends TradeOrderListStatisticParam {
      * 每页数量
      */
     private int pageSize = 10;
+
+    @Schema(description = "采购单位")
+    private Long saleEntId;
+
+    @Schema(description = "供应单位")
+    private Long buyEntId;
+
+    @Schema(description = "承运单位")
+    private Long transportEntId;
+
+    @Schema(description = "订单编号")
+    private String orderNo;
+
 }

+ 4 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TradeOrderListStatisticParam.java

@@ -1,7 +1,7 @@
 package com.sckw.order.model.vo.req;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
-import jakarta.validation.constraints.NotNull;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -23,7 +23,7 @@ public class TradeOrderListStatisticParam {
      * 订单类型(2销售订单、1采购订单)
      */
     @Range(min = 1, max = 2, message = "非法订单类型")
-    @NotNull(message = "订单类型不能为空")
+//    @NotNull(message = "订单类型不能为空")
     private Integer orderType;
     /**
      * 订单编号、单位、商品名称(模糊匹配共用)
@@ -33,12 +33,14 @@ public class TradeOrderListStatisticParam {
      * 创建时间开始(yyyy-MM-dd HH:mm:ss)
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(description = "下单开始时间")
     private Date startCreateTime;
 
     /**
      * 创建时间结束(yyyy-MM-dd HH:mm:ss)
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(description = "下单结束时间")
     private Date endCreateTime;
 
     /**

+ 84 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/req/TradeOrderParam.java

@@ -0,0 +1,84 @@
+package com.sckw.order.model.vo.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.DecimalMin;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import org.hibernate.validator.constraints.Length;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * @desc: 采购订单请求参数
+ * @author: yzc
+ * @date: 2023-07-07 14:19
+ */
+@Getter
+@Setter
+@ToString
+public class TradeOrderParam {
+    @NotNull(message = "商品id不能为空")
+    @Schema(description = "商品id")
+    private Long goodsId;
+
+    /**
+     * 贸易合同
+     */
+    @NotNull(message = "贸易合同不能为空")
+    @Schema(description = "贸易合同")
+    private Long tradeContractId;
+
+    @NotBlank(message = "贸易合同名称不能为空")
+    @Schema(description = "贸易合同名称")
+    private String tradeContractName;
+    /**
+     * 订单总量
+     */
+    @NotNull(message = "采购数量不能为空")
+    @DecimalMin(value = "0.01", message = "采购数量必须大于零")
+    @Schema(description = "采购数量")
+    private BigDecimal amount;
+    /**
+     * 备注
+     */
+    @Length(max = 200, message = "备注最多支持200字")
+    @Schema(description = "备注")
+    private String remark;
+
+    /**
+     * 收货信息
+     */
+    @NotNull(message = "收货信息不能为空")
+    @Schema(description = "收货信息")
+    private AddressInfoPara addressInfo;
+
+    /**
+     * 物流合同 承运单位
+     * 合同托运方式是“采购方托运”时,才展示物流信息填写,“供应方托运”时隐藏这一块
+     */
+    @Schema(description = "物流合同信息")
+    private List<LogisticsEntDto> logisticsContractList;
+
+    /**
+     * 开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @NotNull(message = "开始时间不能为空")
+    @Schema(description = "开始时间")
+    private LocalDate startTime;
+    /**
+     * 结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @NotNull(message = "结束时间不能为空")
+    @Schema(description = "结束时间")
+    private LocalDate endTime;
+
+
+}

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

@@ -75,7 +75,7 @@ public class UpdateOrderParam {
     /**
      * 地址信息
      */
-    private List<AddressInfo> addressInfo;
+    private List<AddressInfoDto> addressInfoDto;
 
     /**
      * 合同信息

+ 2 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/AddressInfoDetailRes.java → sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/AddressInfoDtoDetailRes.java

@@ -1,6 +1,6 @@
 package com.sckw.order.model.vo.res;
 
-import com.sckw.order.model.vo.req.AddressInfo;
+import com.sckw.order.model.vo.req.AddressInfoDto;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -16,7 +16,7 @@ import java.io.Serializable;
 @Getter
 @Setter
 @ToString
-public class AddressInfoDetailRes extends AddressInfo implements Serializable {
+public class AddressInfoDtoDetailRes extends AddressInfoDto implements Serializable {
 
     @Serial
     private static final long serialVersionUID = -4151936423317034332L;

+ 38 - 5
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderDetailRes.java

@@ -3,10 +3,12 @@ package com.sckw.order.model.vo.res;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.sckw.order.model.vo.req.ContractInfo;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
 import lombok.experimental.Accessors;
+
 import java.io.Serial;
 import java.io.Serializable;
 import java.math.BigDecimal;
@@ -105,6 +107,26 @@ public class OrderDetailRes implements Serializable {
     @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private LocalDate endTime;
 
+    /**
+     * 计费方式
+     */
+    private Integer chargeType;
+    private String chargeTypeLabel;
+
+    /**
+     * 托运方式
+     */
+    private Integer consignmentWay;
+    private String consignmentWayLabel;
+
+    /**
+     * 累计装货量
+     */
+    private BigDecimal loadAmount;
+    /**
+     * 累计卸货量
+     */
+    private BigDecimal unloadAmount;
     /**
      * 已委托量
      */
@@ -164,31 +186,42 @@ public class OrderDetailRes implements Serializable {
     /**
      * 商品信息
      */
+    @Schema(description = "商品信息")
     private GoodsInfoDetailRes goodsInfo;
 
     /**
      * 单位信息
      */
+    @Schema(description = "企业单位信息,采购与供应")
     private List<UnitInfoDetailRes> unitInfo;
 
     /**
      * 地址信息
      */
-    private List<AddressInfoDetailRes> addressInfo;
+    private List<AddressInfoDtoDetailRes> addressInfo;
 
     /**
      * 合同信息
      */
+    @Schema(description = "贸易合同信息")
     private ContractInfo contractInfo;
+    /**
+     * 承运单位信息
+     */
+    @Schema(description = "承运单位信息")
+    private List<TransportUnitInfo> unitInfoList;
 
+    @Schema(description = "物流合同信息")
+    private List<ContractInfo> contractInfoList;
     /**
      * 订单进程
      */
+    @Schema(description = "审批信息")
     private List<OrderProcess> orderProcess;
 
-    /**
-     * 辅助单位
-     */
-    private List<GoodsUnitDetailRes> assistUnit;
+//    /**
+//     * 辅助单位
+//     */
+//    private List<GoodsUnitDetailRes> assistUnit;
 
 }

+ 4 - 1
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/OrderProcess.java

@@ -1,6 +1,7 @@
 package com.sckw.order.model.vo.res;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Getter;
 import lombok.Setter;
 import lombok.ToString;
@@ -28,14 +29,16 @@ public class OrderProcess implements Serializable {
     private String statusLabel;
 
     private String remark;
-
+    @Schema(description = "创建人")
     private Long createBy;
 
+    @Schema(description = "创建人")
     private String createByName;
 
     private String roleName;
 
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    @Schema(description = "创建时间")
     private Date createTime;
 
 }

+ 57 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/model/vo/res/TransportUnitInfo.java

@@ -0,0 +1,57 @@
+package com.sckw.order.model.vo.res;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @desc: 单位信息详情
+ * @author: yzc
+ * @date: 2023-07-18 11:10
+ */
+@Getter
+@Setter
+@ToString
+public class TransportUnitInfo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -2213203840951940945L;
+
+
+
+    @Schema(description = "企业id")
+    private Long entId;
+    /**
+     * 企业名称
+     */
+    @Schema(description = "企业名称")
+    private String firmName;
+    /**
+     * 运输单价
+     */
+    @Schema(description = "运输单价")
+    private BigDecimal transportPrice;
+    /**
+     * 联系人ID
+     */
+    @Schema(description = "联系人ID")
+    private Long contactsId;
+
+    /**
+     * 联系人姓名
+     */
+    @Schema(description = "联系人姓名")
+    private String contacts;
+
+    /**
+     * 联系电话
+     */
+    @Schema(description = "联系电话")
+    private String phone;
+
+}

+ 3 - 4
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderAddressService.java

@@ -9,12 +9,11 @@ import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.order.dao.KwoTradeOrderAddressMapper;
 import com.sckw.order.model.KwoTradeOrderAddress;
-import com.sckw.order.model.vo.res.AddressInfoDetailRes;
+import com.sckw.order.model.vo.res.AddressInfoDtoDetailRes;
 import com.sckw.system.api.RemoteSystemService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Service;
 
 import java.util.*;
@@ -106,7 +105,7 @@ public class KwoTradeOrderAddressService {
      * @Param torderId:
      * @return: java.util.List<com.sckw.order.model.KwoTradeOrderAddress>
      */
-    public AddressInfoDetailRes getByOrderIdAndAddressId(Long tOrderId, Long tAddressId) {
+    public AddressInfoDtoDetailRes getByOrderIdAndAddressId(Long tOrderId, Long tAddressId) {
         Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(
                 List.of(DictTypeEnum.TRADE_TYPE.getType(), DictTypeEnum.PICKUP_TYPE.getType(),
                         DictTypeEnum.DELIVERY_TYPE.getType(), DictTypeEnum.TORDER_SOURCE.getType(), DictTypeEnum.TORDER_STATUS.getType(),
@@ -126,7 +125,7 @@ public class KwoTradeOrderAddressService {
         }
         wrapper.eq(KwoTradeOrderAddress::getTOrderId, tOrderId).eq(KwoTradeOrderAddress::getDelFlag, Global.NO);
         KwoTradeOrderAddress address = kwoTradeOrderAddressMapper.selectOne(wrapper);
-        AddressInfoDetailRes addressInfoDetailRes = new AddressInfoDetailRes();
+        AddressInfoDtoDetailRes addressInfoDetailRes = new AddressInfoDtoDetailRes();
         if (address != null) {
             BeanUtils.copyProperties(address, addressInfoDetailRes);
             addressInfoDetailRes.setAddressTypeLabel(CollectionUtils.isNotEmpty(orderAddressMap) ? orderAddressMap.get(address.getAddressType()) : null);

+ 428 - 61
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -1,5 +1,7 @@
 package com.sckw.order.serivce;
 
+import com.google.common.collect.Lists;
+
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
@@ -11,6 +13,9 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.sckw.contract.api.RemoteContractService;
 import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
+import com.sckw.contract.api.model.vo.GoodsInfoDto;
+import com.sckw.contract.api.model.vo.TradeContractResDto;
+import com.sckw.contract.api.model.vo.TradeContractUnitDto;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.exception.CustomPromptException;
@@ -22,20 +27,18 @@ import com.sckw.core.model.page.PageResult;
 import com.sckw.core.model.vo.TableBottom;
 import com.sckw.core.model.vo.TableStatisticRes;
 import com.sckw.core.model.vo.TableTop;
-import com.sckw.core.utils.CollectionUtils;
-import com.sckw.core.utils.DateUtils;
-import com.sckw.core.utils.OrderGenerateSeqNoUtils;
-import com.sckw.core.utils.StringUtils;
+import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.manage.api.RemoteManageService;
 import com.sckw.manage.api.model.dto.res.FindEntCooperateResVo;
 import com.sckw.mongo.model.SckwTradeOrder;
+import com.sckw.order.api.model.OrderSaleVo;
 import com.sckw.order.api.model.TradeOrderCountStatisticsDTO;
 import com.sckw.order.dao.KwoTradeOrderMapper;
-import com.sckw.order.enums.*;
 import com.sckw.order.enums.ContractStatusEnum;
+import com.sckw.order.enums.*;
 import com.sckw.order.model.*;
 import com.sckw.order.model.dto.*;
 import com.sckw.order.model.vo.req.*;
@@ -46,6 +49,7 @@ import com.sckw.payment.api.model.constant.ChannelEnum;
 import com.sckw.payment.api.model.dto.WalletDto;
 import com.sckw.payment.api.model.dto.common.R;
 import com.sckw.product.api.dubbo.GoodsInfoService;
+import com.sckw.product.api.model.AddressInfoDetail;
 import com.sckw.product.api.model.GoodsDetail;
 import com.sckw.product.api.model.GoodsUnitDetail;
 import com.sckw.product.api.model.KwpGoods;
@@ -58,6 +62,7 @@ import com.sckw.stream.model.UserInfo;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.*;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
+import com.sckw.transport.api.model.param.AddLogisticOrderParam;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
@@ -68,6 +73,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.Function;
@@ -113,6 +119,7 @@ public class KwoTradeOrderService {
     private final KwoTradeOrderTrackService kwoTradeOrderTrackService;
     private final KwoTradeOrderGoodsUnitService kwoTradeOrderGoodsUnitService;
     private final KwoTradeOrderAmountService tradeOrderAmountService;
+    private final KwoTradeOrderTransportService kwoTradeOrderTransportService;
 
     @Value("${url.order.list.valet.pc}")
     private String pcValetListUrl;
@@ -237,13 +244,13 @@ public class KwoTradeOrderService {
         //地址信息
         kwoTradeOrderAddressService.delByOrderId(id);
         tradeOrderAmountService.delByOrderId(id);
-        List<AddressInfo> addressInfos = param.getAddressInfo();
-        if (CollUtil.isNotEmpty(addressInfos)) {
+        List<AddressInfoDto> addressInfoDtos = param.getAddressInfoDto();
+        if (CollUtil.isNotEmpty(addressInfoDtos)) {
             BigDecimal amount = Objects.isNull(param.getAmount()) ? BigDecimal.ZERO : param.getAmount();
             if (!isDraft) {
                 boolean isPurchase = OrderSourceEnum.PURCHASE.getType().equals(tradeOrder.getSource());
                 if (isPurchase) {
-                    List<AddressInfo> loadAddress = addressInfos.stream().filter(e -> Objects.equals(e.getAddressType(), OrderAddressTypeEnum.LOAD.getType())).toList();
+                    List<AddressInfoDto> loadAddress = addressInfoDtos.stream().filter(e -> Objects.equals(e.getAddressType(), OrderAddressTypeEnum.LOAD.getType())).toList();
                     if (CollUtil.isEmpty(loadAddress) || loadAddress.size() != 1) {
                         throw new BusinessException("采购下单装货地址信息有误!");
                     }
@@ -252,9 +259,9 @@ public class KwoTradeOrderService {
                 BigDecimal totalUnloadAmount = BigDecimal.ZERO;
                 boolean loadFlag = false;
                 boolean unloadFlag = false;
-                for (AddressInfo e : addressInfos) {
+                for (AddressInfoDto e : addressInfoDtos) {
                     if (Objects.equals(e.getAddressType(), OrderAddressTypeEnum.LOAD.getType())) {
-                        if (isPurchase){
+                        if (isPurchase) {
                             e.setAmount(amount);
                         }
                         totalLoadAmount = totalLoadAmount.add(e.getAmount());
@@ -273,7 +280,7 @@ public class KwoTradeOrderService {
             }
             AtomicInteger loadSort = new AtomicInteger(0);
             AtomicInteger unloadSort = new AtomicInteger(0);
-            addressInfos.forEach(e -> {
+            addressInfoDtos.forEach(e -> {
                 KwoTradeOrderAddress address = BeanUtil.copyProperties(e, KwoTradeOrderAddress.class);
                 address.setTOrderId(id).setTOrderNo(tOrderNo);
                 //todo MongoDB如何存多个地址信息?
@@ -706,7 +713,7 @@ public class KwoTradeOrderService {
                 List.of(DictTypeEnum.TRADE_TYPE.getType(), DictTypeEnum.PICKUP_TYPE.getType(),
                         DictTypeEnum.DELIVERY_TYPE.getType(), DictTypeEnum.TORDER_SOURCE.getType(), DictTypeEnum.TORDER_STATUS.getType(),
                         DictTypeEnum.PRODUCT_NAME_TYPE.getType(), DictTypeEnum.UNIT_TYPE.getType(), DictTypeEnum.TAX_RATE.getType(),
-                        DictTypeEnum.TORDER_UNIT_TYPE.getType(), DictTypeEnum.TORDER_ADDRESS_TYPE.getType(), DictTypeEnum.ADDRESS_TYPE.getType()));
+                        DictTypeEnum.TORDER_UNIT_TYPE.getType(), DictTypeEnum.TORDER_ADDRESS_TYPE.getType(), DictTypeEnum.ADDRESS_TYPE.getType(), DictTypeEnum.CONSIGNMENT_WAY.getType(), DictTypeEnum.CHARGING_TYPE.getType()));
         Map<String, String> tradeMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<String, String> pickupMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<String, String> deleveryMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
@@ -715,6 +722,8 @@ public class KwoTradeOrderService {
         Map<String, String> prodcutNameMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<String, String> unitMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<String, String> taxRateMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        Map<String, String> chargeTypeMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        Map<String, String> consignmentWayMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<String, String> orderUnitMap, orderAddressMap, addressMap;
         if (CollUtil.isNotEmpty(dict)) {
             tradeMap = dict.get(DictTypeEnum.TRADE_TYPE.getType());
@@ -728,6 +737,8 @@ public class KwoTradeOrderService {
             orderUnitMap = dict.get(DictTypeEnum.TORDER_UNIT_TYPE.getType());
             orderAddressMap = dict.get(DictTypeEnum.TORDER_ADDRESS_TYPE.getType());
             addressMap = dict.get(DictTypeEnum.ADDRESS_TYPE.getType());
+            chargeTypeMap = dict.get(DictTypeEnum.CHARGING_TYPE.getType());
+            consignmentWayMap = dict.get(DictTypeEnum.CONSIGNMENT_WAY.getType());
         } else {
             orderUnitMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
             orderAddressMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
@@ -743,7 +754,10 @@ public class KwoTradeOrderService {
                 .setPickupTypeLabel(CollUtil.isNotEmpty(pickupMap) ? pickupMap.get(detail.getPickupType()) : null)
                 .setDeliveryTypeLabel(CollUtil.isNotEmpty(deleveryMap) ? deleveryMap.get(detail.getDeliveryType()) : null)
                 .setSourceLabel(CollUtil.isNotEmpty(sourceMap) ? sourceMap.get(detail.getSource()) : null)
-                .setStatusLabel(CollUtil.isNotEmpty(statusMap) ? statusMap.get(String.valueOf(detail.getStatus())) : null);
+                .setStatusLabel(CollUtil.isNotEmpty(statusMap) ? statusMap.get(String.valueOf(detail.getStatus())) : null)
+                .setChargeTypeLabel(CollUtil.isNotEmpty(chargeTypeMap) ? chargeTypeMap.get(String.valueOf(detail.getChargeType())) : null)
+                .setConsignmentWayLabel(CollUtil.isNotEmpty(consignmentWayMap) ? consignmentWayMap.get(String.valueOf(detail.getConsignmentWay())) : null)
+        ;
         //商品信息
         KwoTradeOrderGoods orderGoods = kwoTradeOrderGoodsService.getByOrderId(id);
         if (Objects.nonNull(orderGoods)) {
@@ -764,15 +778,15 @@ public class KwoTradeOrderService {
                 detail.setGoodsInfo(goodsDetail);
 
                 //商品辅助单位信息
-                List<GoodsUnitDetailRes> assistUnit = kwoTradeOrderGoodsUnitService.findGoodsUnitDetail(id);
-                if (CollUtil.isNotEmpty(assistUnit)) {
-                    Map<String, String> finalUnitMap = unitMap;
-                    assistUnit.forEach(e -> {
-                        e.setFromUnitName(CollUtil.isNotEmpty(finalUnitMap) ? finalUnitMap.get(e.getFromUnit()) : null);
-                        e.setToUnitName(CollUtil.isNotEmpty(finalUnitMap) ? finalUnitMap.get(e.getToUnit()) : null);
-                    });
-                }
-                detail.setAssistUnit(assistUnit);
+//                List<GoodsUnitDetailRes> assistUnit = kwoTradeOrderGoodsUnitService.findGoodsUnitDetail(id);
+//                if (CollUtil.isNotEmpty(assistUnit)) {
+//                    Map<String, String> finalUnitMap = unitMap;
+//                    assistUnit.forEach(e -> {
+//                        e.setFromUnitName(CollUtil.isNotEmpty(finalUnitMap) ? finalUnitMap.get(e.getFromUnit()) : null);
+//                        e.setToUnitName(CollUtil.isNotEmpty(finalUnitMap) ? finalUnitMap.get(e.getToUnit()) : null);
+//                    });
+//                }
+//                detail.setAssistUnit(assistUnit);
             }
         }
 
@@ -793,9 +807,9 @@ public class KwoTradeOrderService {
             //分配量信息
             List<KwoTradeOrderAmount> amountList = tradeOrderAmountService.getByOrderId(id);
             Map<Long, KwoTradeOrderAmount> amountMap = amountList.stream().collect(Collectors.toMap(KwoTradeOrderAmount::getTAddressId, e -> e, (k1, k2) -> k1));
-            List<AddressInfoDetailRes> addressInfoDetails = new ArrayList<>(addressList.size());
+            List<AddressInfoDtoDetailRes> addressInfoDetails = new ArrayList<>(addressList.size());
             addressList.forEach(e -> {
-                AddressInfoDetailRes address = BeanUtil.copyProperties(e, AddressInfoDetailRes.class);
+                AddressInfoDtoDetailRes address = BeanUtil.copyProperties(e, AddressInfoDtoDetailRes.class);
                 address.setAddressTypeLabel(CollUtil.isNotEmpty(orderAddressMap) ? orderAddressMap.get(address.getAddressType()) : null);
                 address.setTypeLabel(CollUtil.isNotEmpty(addressMap) ? addressMap.get(address.getType()) : null);
                 KwoTradeOrderAmount orderAmount = amountMap.get(e.getId());
@@ -819,6 +833,40 @@ public class KwoTradeOrderService {
             }
             detail.setContractInfo(contractInfo);
         }
+        //物流合同信息和承运单位信息
+        List<KwoTradeOrderTransport> list = kwoTradeOrderTransportService.queryList(id);
+        if (CollUtil.isNotEmpty(list)) {
+            Map<Long, ContractCommonInfoResDto> contractMap = remoteContractService.queryContractBaseInfo(list.stream().map(KwoTradeOrderTransport::getContractId).collect(Collectors.toList()));
+
+            List<ContractInfo> collect = list.stream().map(d -> {
+                ContractInfo contractInfo = new ContractInfo();
+                contractInfo.setContractId(d.getContractId());
+                contractInfo.setContractNo(d.getContractNo());
+                Optional.ofNullable(contractMap.get(d.getContractId())).ifPresent(c -> {
+                            contractInfo.setContractName(c.getContactName());
+                            contractInfo.setContractSigningWay(c.getSigningWayName());
+                            contractInfo.setContractStatus(c.getStatusName());
+                        }
+                );
+                return contractInfo;
+            }).collect(Collectors.toList());
+            detail.setContractInfoList(collect);
+
+            List<TransportUnitInfo> collect1 = list.stream().map(d -> {
+                TransportUnitInfo transportUnitInfo = new TransportUnitInfo();
+                transportUnitInfo.setEntId(d.getEntId());
+                transportUnitInfo.setFirmName(d.getFirmName());
+                transportUnitInfo.setTransportPrice(d.getTransportPrice());
+                transportUnitInfo.setContactsId(d.getContactsId());
+                transportUnitInfo.setContacts(d.getContacts());
+                transportUnitInfo.setPhone(d.getPhone());
+                return transportUnitInfo;
+            }).collect(Collectors.toList());
+            detail.setUnitInfoList(collect1);
+
+        }
+
+        //todo 关联物流订单信息
         return detail;
     }
 
@@ -985,11 +1033,11 @@ public class KwoTradeOrderService {
                 throw new BusinessException("联系电话不能为空!");
             }
         });
-        List<AddressInfo> addressInfos = param.getAddressInfo();
-        if (CollectionUtils.isEmpty(addressInfos)) {
+        List<AddressInfoDto> addressInfoDtos = param.getAddressInfoDto();
+        if (CollectionUtils.isEmpty(addressInfoDtos)) {
             throw new BusinessException("地址信息不能为空!");
         }
-        addressInfos.forEach(e -> {
+        addressInfoDtos.forEach(e -> {
             if (StringUtils.isBlank(e.getAddressType())) {
                 throw new BusinessException("地址类型不能为空!");
             }
@@ -1039,13 +1087,13 @@ public class KwoTradeOrderService {
         if (amount.compareTo(totalLoadAmount) != 0) {
             throw new BusinessException("分配卸货量总量与订单总量不相符!");
         }
-        List<AddressInfo> loadAddressInfo = param.getAddressInfo();
-        long unloadCount = loadAddressInfo.stream().filter(e -> Objects.equals(OrderAddressTypeEnum.UNLOAD.getType(), e.getAddressType())).count();
+        List<AddressInfoDto> loadAddressInfoDto = param.getAddressInfoDto();
+        long unloadCount = loadAddressInfoDto.stream().filter(e -> Objects.equals(OrderAddressTypeEnum.UNLOAD.getType(), e.getAddressType())).count();
         if (unloadCount > 0) {
             throw new BusinessException("装货地址类型信息有误!");
         }
-        BigDecimal totalUnLoadAmount = loadAddressInfo.stream()
-                .map(AddressInfo::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal totalUnLoadAmount = loadAddressInfoDto.stream()
+                .map(AddressInfoDto::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
         if (amount.compareTo(totalUnLoadAmount) != 0) {
             throw new BusinessException("分配装货量总量与订单总量不相符!");
         }
@@ -1129,7 +1177,7 @@ public class KwoTradeOrderService {
             tradeOrderAmountService.delByOrderIdAndAddressIds(param.getId(), oldLoadAddressIds);
         }
         AtomicInteger loadSort = new AtomicInteger(0);
-        loadAddressInfo.forEach(e -> {
+        loadAddressInfoDto.forEach(e -> {
             KwoTradeOrderAddress address = BeanUtil.copyProperties(e, KwoTradeOrderAddress.class);
             address.setTOrderId(param.getId()).setTOrderNo(order.getTOrderNo())
                     .setSort(loadSort.getAndIncrement());
@@ -1674,33 +1722,33 @@ public class KwoTradeOrderService {
 
             OrderListResVO vo = BeanUtil.copyProperties(e, OrderListResVO.class);
             vo.setStatusLabel(statusMap.get(String.valueOf(e.getStatus())))
-            .setTradingLabel(tradeMap.get(e.getTrading()))
-            .setTrading(tradeMap.get(e.getTrading()))
-            .setDeliveryTypeLabel(deliveryMap.get(e.getDeliveryType()))
-            .setDeliveryType(deliveryMap.get(e.getDeliveryType()))
-            .setPickupTypeLabel(pickupMap.get(e.getPickupType()))
-            .setSourceLabel(sourceMap.get(e.getSource()))
-            .setSource(sourceMap.get(e.getSource()))
-            .setContractName(Objects.isNull(contract) ? null : contract.getContactName())
-            .setContractSigningWay(Objects.isNull(contract) ? null : contract.getSigningWayName())
-            .setGoodsName(Objects.isNull(goods) ? null : goods.getName())
-            .setGoodsSpec(Objects.isNull(goods) ? null : goods.getSpec())
-            .setGoodsTaxRate(Objects.isNull(goods) ? null : goods.getTaxRate())
-            .setGoodsThumb(Objects.isNull(goods) ? null : goods.getThumb())
-            .setWaitEntrustAmount(setScale(getWaitEntrustAmount(e.getAmount(), e.getEntrustAmount())))
-            .setActualPrice(actualAmount.multiply(unitPrice).setScale(2, RoundingMode.HALF_UP))
-            .setUnitPrice(setScale(e.getUnitPrice()))
-            .setPrice(setScale(e.getPrice()))
-            .setUnit(e.getUnit())
-            .setUnitLabel(unitType == null ? e.getUnit() : (unitType.get(e.getUnit()) == null ? e.getUnit() : unitType.get(e.getUnit()).getLabel()))
-            .setAmount(setScale(vo.getAmount()))
-            .setEntrustAmount(setScale(e.getEntrustAmount()))
-            .setActualAmount(setScale(e.getActualAmount()))
-            .setCreateByName(Objects.isNull(userCache) ? null : userCache.getName())
-            .setLoadName(loadName)
-            .setLoadAddress(loadAddress)
-            .setUnloadName(unloadName)
-            .setUnloadAddress(unloadAddress);
+                    .setTradingLabel(tradeMap.get(e.getTrading()))
+                    .setTrading(tradeMap.get(e.getTrading()))
+                    .setDeliveryTypeLabel(deliveryMap.get(e.getDeliveryType()))
+                    .setDeliveryType(deliveryMap.get(e.getDeliveryType()))
+                    .setPickupTypeLabel(pickupMap.get(e.getPickupType()))
+                    .setSourceLabel(sourceMap.get(e.getSource()))
+                    .setSource(sourceMap.get(e.getSource()))
+                    .setContractName(Objects.isNull(contract) ? null : contract.getContactName())
+                    .setContractSigningWay(Objects.isNull(contract) ? null : contract.getSigningWayName())
+                    .setGoodsName(Objects.isNull(goods) ? null : goods.getName())
+                    .setGoodsSpec(Objects.isNull(goods) ? null : goods.getSpec())
+                    .setGoodsTaxRate(Objects.isNull(goods) ? null : goods.getTaxRate())
+                    .setGoodsThumb(Objects.isNull(goods) ? null : goods.getThumb())
+                    .setWaitEntrustAmount(setScale(getWaitEntrustAmount(e.getAmount(), e.getEntrustAmount())))
+                    .setActualPrice(actualAmount.multiply(unitPrice).setScale(2, RoundingMode.HALF_UP))
+                    .setUnitPrice(setScale(e.getUnitPrice()))
+                    .setPrice(setScale(e.getPrice()))
+                    .setUnit(e.getUnit())
+                    .setUnitLabel(unitType == null ? e.getUnit() : (unitType.get(e.getUnit()) == null ? e.getUnit() : unitType.get(e.getUnit()).getLabel()))
+                    .setAmount(setScale(vo.getAmount()))
+                    .setEntrustAmount(setScale(e.getEntrustAmount()))
+                    .setActualAmount(setScale(e.getActualAmount()))
+                    .setCreateByName(Objects.isNull(userCache) ? null : userCache.getName())
+                    .setLoadName(loadName)
+                    .setLoadAddress(loadAddress)
+                    .setUnloadName(unloadName)
+                    .setUnloadAddress(unloadAddress);
             result.add(vo);
         });
         return PageHelperUtil.getPageResult(new PageInfo<>(result), list, pageSize);
@@ -1741,8 +1789,12 @@ public class KwoTradeOrderService {
         }
         String keywords = params.getKeywords();
         if (StringUtils.isNotBlank(keywords)) {
-            List<Long> goodIds = goodsInfoService.getGoodsByGoodsNameAndTaxRate(keywords, null);
-            dto.setGoodIds(goodIds);
+            List<SysDictResDto> sysDictResDtos = remoteSystemService.queryGoodsDict(keywords);
+            List<String> collect = new ArrayList<>();
+            if (CollUtil.isNotEmpty(sysDictResDtos)) {
+                collect = sysDictResDtos.stream().map(SysDictResDto::getValue).distinct().collect(Collectors.toList());
+            }
+            dto.setGoodIds(goodsInfoService.getGoodsByPara(keywords, collect, keywords));
         }
         return dto;
     }
@@ -1993,4 +2045,319 @@ public class KwoTradeOrderService {
         List<OrderListResDTO> list = kwoTradeOrderMapper.tradeOrderContractList(dto, contractIds);
         return buildResult(list, params.getPageSize());
     }
+
+    public List<Long> querySignGoods(Long entId) {
+        return kwoTradeOrderMapper.selectGoodsId(entId);
+    }
+
+    public List<OrderSaleVo> queryRecentSale(LocalDateTime start, LocalDateTime end) {
+        return kwoTradeOrderMapper.querySaleOrder(start, end);
+    }
+
+    /**
+     * 新增贸易订单
+     *
+     * @param tradeOrderParam
+     */
+    public void addTradeOrder(TradeOrderParam tradeOrderParam) {
+        KwoTradeOrder order = new KwoTradeOrder();
+        order.setId(new IdWorker(1).nextId());
+        //商品信息
+        KwpGoods goodsById = goodsInfoService.getGoodsById(tradeOrderParam.getGoodsId());
+
+        TradeContractResDto tradeContractResDto = checkPara(tradeOrderParam, order, goodsById);
+        //商品地址信息
+        AddressInfoDetail goodsAddress = goodsInfoService.getGoodsAddress(tradeOrderParam.getGoodsId());
+        if (Objects.isNull(goodsAddress)) {
+            throw new BusinessException("商品发货地址信息不存在");
+        }
+        kwoTradeOrderMapper.insert(order);//贸易订单
+
+        GoodsInfoDto goodsInfoDto = tradeContractResDto.getGoodsInfoDto();//贸易合同,下合同关联的商品信息
+        KwoTradeOrderGoods kwoTradeOrderGoods = new KwoTradeOrderGoods();
+        kwoTradeOrderGoods.setId(new IdWorker(1).nextId());
+        kwoTradeOrderGoods.setTOrderId(order.getId());
+        kwoTradeOrderGoods.setTOrderNo(order.getTOrderNo());
+        kwoTradeOrderGoods.setGoodsId(tradeOrderParam.getGoodsId());
+        kwoTradeOrderGoods.setGoodsType(goodsById.getGoodsType());
+        kwoTradeOrderGoods.setSkuId(goodsInfoDto.getSkuId());
+        kwoTradeOrderGoods.setUnit(goodsInfoDto.getUnit());
+        kwoTradeOrderGoods.setUnitPrice(goodsInfoDto.getPrice());
+        kwoTradeOrderGoods.setPriceRangeId(0L);//
+        kwoTradeOrderGoods.setGoodsName(goodsById.getName());
+        kwoTradeOrderGoods.setRemark("");
+        kwoTradeOrderGoods.setStatus(0);
+        kwoTradeOrderGoods.setCreateBy(LoginUserHolder.getUserId());
+        kwoTradeOrderGoods.setCreateTime(new Date());
+        kwoTradeOrderGoods.setDelFlag(0);
+        kwoTradeOrderGoodsService.insert(kwoTradeOrderGoods);
+
+        KwoTradeOrderAddress kwoTradeOrderAddress = new KwoTradeOrderAddress();
+        kwoTradeOrderAddress.setId(new IdWorker(1).nextId());
+        kwoTradeOrderAddress.setTOrderId(order.getId());
+        kwoTradeOrderAddress.setTOrderNo(order.getTOrderNo());
+        kwoTradeOrderAddress.setAddressType("1");
+        kwoTradeOrderAddress.setName(goodsAddress.getName());
+        kwoTradeOrderAddress.setType(goodsAddress.getType());
+        kwoTradeOrderAddress.setContacts(goodsAddress.getContacts());
+        kwoTradeOrderAddress.setPhone(goodsAddress.getPhone());
+        kwoTradeOrderAddress.setCityCode(goodsAddress.getCityCode());
+        kwoTradeOrderAddress.setCityName(goodsAddress.getCityName());
+        kwoTradeOrderAddress.setDetailAddress(goodsAddress.getDetailAddress());
+        kwoTradeOrderAddress.setLat(goodsAddress.getLat());
+        kwoTradeOrderAddress.setLng(goodsAddress.getLng());
+        kwoTradeOrderAddress.setFence(goodsAddress.getFence());
+        kwoTradeOrderAddress.setSort(1);
+        kwoTradeOrderAddress.setRemark("");
+        kwoTradeOrderAddress.setStatus(0);
+        kwoTradeOrderAddress.setCreateBy(LoginUserHolder.getUserId());
+        kwoTradeOrderAddress.setCreateTime(new Date());
+        kwoTradeOrderAddress.setDelFlag(0);
+        kwoTradeOrderAddressService.add(kwoTradeOrderAddress);
+
+        AddressInfoPara addressInfo = tradeOrderParam.getAddressInfo();
+        KwoTradeOrderAddress kwoTradeOrderAddress2 = new KwoTradeOrderAddress();
+        kwoTradeOrderAddress2.setId(new IdWorker(1).nextId());
+        kwoTradeOrderAddress2.setTOrderId(order.getId());
+        kwoTradeOrderAddress2.setTOrderNo(order.getTOrderNo());
+        kwoTradeOrderAddress2.setAddressType("2");
+        kwoTradeOrderAddress2.setName(addressInfo.getName());
+        kwoTradeOrderAddress2.setType(addressInfo.getType());
+        kwoTradeOrderAddress2.setContacts(addressInfo.getContacts());
+        kwoTradeOrderAddress2.setPhone(addressInfo.getPhone());
+        kwoTradeOrderAddress2.setCityCode(addressInfo.getCityCode());
+        kwoTradeOrderAddress2.setCityName(addressInfo.getCityName());
+        kwoTradeOrderAddress2.setDetailAddress(addressInfo.getDetailAddress());
+        kwoTradeOrderAddress2.setLat(addressInfo.getLat());
+        kwoTradeOrderAddress2.setLng(addressInfo.getLng());
+        kwoTradeOrderAddress2.setFence(addressInfo.getFence());
+        kwoTradeOrderAddress2.setSort(2);
+        kwoTradeOrderAddress2.setRemark("");
+        kwoTradeOrderAddress2.setStatus(0);
+        kwoTradeOrderAddress2.setCreateBy(LoginUserHolder.getUserId());
+        kwoTradeOrderAddress2.setCreateTime(new Date());
+        kwoTradeOrderAddress2.setDelFlag(0);
+        kwoTradeOrderAddressService.add(kwoTradeOrderAddress2);
+
+        KwoTradeOrderContract kwoTradeOrderContract = new KwoTradeOrderContract();
+        kwoTradeOrderContract.setContractId(tradeOrderParam.getTradeContractId());
+        kwoTradeOrderContract.setContractNo(tradeOrderParam.getTradeContractName());
+        kwoTradeOrderContract.setTOrderId(order.getId());
+        kwoTradeOrderContract.setTOrderNo(order.getTOrderNo());
+        kwoTradeOrderContract.setId(new IdWorker(1).nextId());
+        kwoTradeOrderContract.setRemark("");
+        kwoTradeOrderContract.setStatus(0);
+        kwoTradeOrderContract.setCreateBy(LoginUserHolder.getUserId());
+        kwoTradeOrderContract.setCreateTime(new Date());
+        kwoTradeOrderContract.setDelFlag(0);
+        kwoTradeOrderContractService.insert(kwoTradeOrderContract);//贸易合同信息
+
+        List<LogisticsEntDto> logisticsContractId = tradeOrderParam.getLogisticsContractList();
+        if (Objects.equals(tradeContractResDto.getConsignment(), 1) && CollUtil.isNotEmpty(logisticsContractId)) {
+            for (LogisticsEntDto logisticsEntDto : logisticsContractId) {
+                KwoTradeOrderTransport kwoTradeOrderTransport = new KwoTradeOrderTransport();
+                kwoTradeOrderTransport.setId(new IdWorker(1).nextId());
+                kwoTradeOrderTransport.setTOrderId(order.getId());
+                kwoTradeOrderTransport.setTOrderNo(order.getTOrderNo());
+                kwoTradeOrderTransport.setEntId(logisticsEntDto.getEntId());
+                kwoTradeOrderTransport.setFirmName(logisticsEntDto.getEntName());
+                kwoTradeOrderTransport.setContractId(logisticsEntDto.getContractId());
+                kwoTradeOrderTransport.setContractNo(logisticsEntDto.getContractNo());
+                kwoTradeOrderTransport.setTransportPrice(logisticsEntDto.getTransportPrice());
+                kwoTradeOrderTransport.setContactsId(logisticsEntDto.getContactsId());
+                kwoTradeOrderTransport.setContacts(logisticsEntDto.getContacts());
+                kwoTradeOrderTransport.setPhone(logisticsEntDto.getPhone());
+                kwoTradeOrderTransport.setRemark("");
+                kwoTradeOrderTransport.setStatus(0);
+                kwoTradeOrderTransport.setCreateBy(LoginUserHolder.getUserId());
+                kwoTradeOrderTransport.setCreateTime(LocalDateTime.now());
+                kwoTradeOrderTransportService.insert(kwoTradeOrderTransport);
+            }
+        }
+        List<TradeContractUnitDto> unitList = tradeContractResDto.getUnitList();
+
+        List<KwoTradeOrderUnit> list = new ArrayList<>();
+        unitList.forEach(e -> {
+            KwoTradeOrderUnit unit = BeanUtil.copyProperties(e, KwoTradeOrderUnit.class);
+            unit.setId(new IdWorker(1).nextId());
+            unit.setTOrderId(order.getId())
+                    .setUnitType(e.getUnitType())
+                    .setTOrderNo(order.getTOrderNo())
+                    .setTopEntId(e.getEntId());
+            list.add(unit);
+        });
+        kwoTradeOrderUnitService.insertBatch(list);
+
+        //扣减库存
+        HttpResult updateResult = goodsInfoService.updateGoodsAmount(tradeOrderParam.getGoodsId(), tradeOrderParam.getAmount());
+        if (!Objects.equals(HttpStatus.SUCCESS_CODE, updateResult.getCode())) {
+            throw new BusinessException(updateResult.getMsg());
+        }
+    }
+
+    private TradeContractResDto checkPara(TradeOrderParam tradeOrderParam, KwoTradeOrder order, KwpGoods goodsById) {
+        if (Objects.isNull(goodsById) || Objects.equals(goodsById.getDelFlag(), Global.YES)) {
+            throw new BusinessException("商品信息不存在");
+        }
+        TradeContractResDto tradeContractResDto = remoteContractService.queryTradeContract(tradeOrderParam.getTradeContractId(), tradeOrderParam.getGoodsId());
+        if (Objects.isNull(tradeContractResDto)) {
+            throw new BusinessException("贸易合同不存在");
+        }
+        if (!Objects.equals(tradeContractResDto.getStatus(), Integer.parseInt(ContractStatusEnum.SIGNED.getCode()))) {
+            throw new BusinessException("当前贸易合同未签约");
+        }
+        Integer consignment = tradeContractResDto.getConsignment();
+        if (Objects.equals(consignment, 1) && CollUtil.isEmpty(tradeOrderParam.getLogisticsContractList())) {//采购方托运
+            throw new BusinessException("采购方托运时,物流合同信息不能为空");
+        }
+        GoodsInfoDto goodsInfoDto = tradeContractResDto.getGoodsInfoDto();
+        if (Objects.isNull(goodsInfoDto)) {
+            throw new BusinessException("当前贸易订单不存在交易商品");
+        }
+        order.setUnit(goodsInfoDto.getUnit());
+        order.setPrice(goodsInfoDto.getPrice());
+        order.setTrading(String.valueOf(tradeContractResDto.getTrading()));
+        order.setPickupType(String.valueOf(tradeContractResDto.getConsignment()));//来源于合同约束的托运方式
+        order.setDeliveryType("");
+        order.setActualAmount(new BigDecimal("0"));
+        order.setAssociateStatement(0);
+        order.setChargeType(tradeContractResDto.getUnloadWay());
+        order.setConsignmentWay(tradeContractResDto.getConsignment());
+        order.setEntId(LoginUserHolder.getEntId())
+                .setTOrderNo(getOrderNo())
+                .setAmount(tradeOrderParam.getAmount())
+                .setStartTime(DateUtils.localDateToDateStart(tradeOrderParam.getStartTime()))
+                .setEndTime(DateUtils.localDateToDateEnd(tradeOrderParam.getEndTime()))
+                .setSource(OrderSourceEnum.PURCHASE.getType())
+                .setStatus(OrderStatusEnum.WAIT_ACCEPTED.getCode())
+                .setRemark(tradeOrderParam.getRemark());
+        return tradeContractResDto;
+    }
+
+    /**
+     * 订单审核
+     *
+     * @param tradeOrderAuditParam
+     * @return
+     */
+    public Object auditOrder(TradeOrderAuditParam tradeOrderAuditParam) {
+        KwoTradeOrder kwoTradeOrder = kwoTradeOrderMapper.selectOne(new LambdaQueryWrapper<KwoTradeOrder>().eq(KwoTradeOrder::getId, tradeOrderAuditParam.getId()).eq(KwoTradeOrder::getDelFlag, 0));
+        if (Objects.isNull(kwoTradeOrder)) {
+            throw new BusinessException("贸易订单不存在");
+        }
+        KwoTradeOrderGoods byOrderId = kwoTradeOrderGoodsService.getByOrderId(kwoTradeOrder.getId());
+        if (Objects.isNull(byOrderId)) {
+            throw new BusinessException("贸易订单关联商品信息不存在");
+        }
+        List<KwoTradeOrderAddress> addressList = kwoTradeOrderAddressService.getByOrderId(kwoTradeOrder.getId());
+        if (CollUtil.isEmpty(addressList)) {
+            throw new BusinessException("贸易订单运输地址信息不存在");
+        }
+        Map<String, List<KwoTradeOrderAddress>> addressMap = addressList.stream().collect(Collectors.groupingBy(KwoTradeOrderAddress::getAddressType));
+        if (CollUtil.isEmpty(addressMap.get(String.valueOf(AddressTypeEnum.SHIPMENT.getCode()))) && CollUtil.isEmpty(addressMap.get(String.valueOf(AddressTypeEnum.BOTH.getCode())))) {
+            throw new BusinessException("装货地址信息不存在");
+        }
+        if (CollUtil.isEmpty(addressMap.get(String.valueOf(AddressTypeEnum.TAKE.getCode()))) && CollUtil.isEmpty(addressMap.get(String.valueOf(AddressTypeEnum.BOTH.getCode())))) {
+            throw new BusinessException("卸货地址信息不存在");
+        }
+        List<KwoTradeOrderUnit> orderUnits = kwoTradeOrderUnitService.getByOrderId(kwoTradeOrder.getId());
+        if (CollUtil.isEmpty(orderUnits)) {
+            throw new BusinessException("贸易订单企业信息不存在");
+        }
+        Map<String, KwoTradeOrderUnit> unitMap = orderUnits.stream().collect(Collectors.toMap(KwoTradeOrderUnit::getUnitType, e -> e, (a, b) -> a));
+        if (unitMap.keySet().size() < 2) {
+            throw new BusinessException("贸易订单企业信息缺失");
+        }
+        TradeContractResDto tradeContractResDto = remoteContractService.queryTradeContract(tradeOrderAuditParam.getTradeContractId(), tradeOrderAuditParam.getGoodsId());
+
+        List<LogisticsEntDto> logisticsContractId = tradeOrderAuditParam.getLogisticsContractList();
+        if (Objects.equals(tradeContractResDto.getConsignment(), 2) && CollUtil.isEmpty(logisticsContractId)) {
+            throw new BusinessException("卖方托运时,物流合同不能为空");
+        }
+        if (Objects.equals(tradeOrderAuditParam.getStatus(), 2)) {
+            KwoTradeOrderTrack kwoTradeOrderTrack = new KwoTradeOrderTrack();
+            kwoTradeOrderTrack.setTOrderId(kwoTradeOrder.getId());
+            kwoTradeOrderTrack.setTOrderNo(kwoTradeOrder.getTOrderNo());
+            kwoTradeOrderTrack.setId(new IdWorker(1).nextId());
+            kwoTradeOrderTrack.setRemark(tradeOrderAuditParam.getRemark());
+            kwoTradeOrderTrack.setStatus(tradeOrderAuditParam.getStatus());//2-拒绝
+            kwoTradeOrderTrack.setCreateBy(LoginUserHolder.getUserId());
+            kwoTradeOrderTrack.setCreateTime(new Date());
+            kwoTradeOrderTrack.setDelFlag(0);
+            kwoTradeOrderTrackService.insert(kwoTradeOrderTrack);
+            return true;
+        }
+        KwoTradeOrderTrack kwoTradeOrderTrack = new KwoTradeOrderTrack();
+        kwoTradeOrderTrack.setTOrderId(kwoTradeOrder.getId());
+        kwoTradeOrderTrack.setTOrderNo(kwoTradeOrder.getTOrderNo());
+        kwoTradeOrderTrack.setId(new IdWorker(1).nextId());
+        kwoTradeOrderTrack.setRemark(tradeOrderAuditParam.getRemark());
+        kwoTradeOrderTrack.setStatus(tradeOrderAuditParam.getStatus());//1-通过
+        kwoTradeOrderTrack.setCreateBy(LoginUserHolder.getUserId());
+        kwoTradeOrderTrack.setCreateTime(new Date());
+        kwoTradeOrderTrack.setDelFlag(0);
+        kwoTradeOrderTrackService.insert(kwoTradeOrderTrack);
+        for (LogisticsEntDto logisticsEntDto : logisticsContractId) {
+            KwoTradeOrderTransport kwoTradeOrderTransport = new KwoTradeOrderTransport();
+            kwoTradeOrderTransport.setId(new IdWorker(1).nextId());
+            kwoTradeOrderTransport.setTOrderId(kwoTradeOrder.getId());
+            kwoTradeOrderTransport.setTOrderNo(kwoTradeOrder.getTOrderNo());
+            kwoTradeOrderTransport.setEntId(logisticsEntDto.getEntId());
+            kwoTradeOrderTransport.setFirmName(logisticsEntDto.getEntName());
+            kwoTradeOrderTransport.setContractId(logisticsEntDto.getContractId());
+            kwoTradeOrderTransport.setContractNo(logisticsEntDto.getContractNo());
+            kwoTradeOrderTransport.setTransportPrice(logisticsEntDto.getTransportPrice());
+            kwoTradeOrderTransport.setContactsId(logisticsEntDto.getContactsId());
+            kwoTradeOrderTransport.setContacts(logisticsEntDto.getContacts());
+            kwoTradeOrderTransport.setPhone(logisticsEntDto.getPhone());
+            kwoTradeOrderTransport.setRemark("");
+            kwoTradeOrderTransport.setStatus(0);
+            kwoTradeOrderTransport.setCreateBy(LoginUserHolder.getUserId());
+            kwoTradeOrderTransport.setCreateTime(LocalDateTime.now());
+            kwoTradeOrderTransportService.insert(kwoTradeOrderTransport);
+        }
+        //todo 通过后调用rpc
+        AddLogisticOrderParam addLogisticOrderParam = new AddLogisticOrderParam();
+        addLogisticOrderParam.setLogisticInfo(Lists.newArrayList());
+        addLogisticOrderParam.setTradeOrderId(kwoTradeOrder.getId());
+        addLogisticOrderParam.setTradeOrderNo(kwoTradeOrder.getTOrderNo());
+        if (Objects.equals(tradeContractResDto.getConsignment(), 1)) {//买方托运
+            KwoTradeOrderUnit kwoTradeOrderUnit = unitMap.get("1");//采购
+            if (Objects.nonNull(kwoTradeOrderUnit)) {
+                addLogisticOrderParam.setConsignCompany(kwoTradeOrderUnit.getFirmName());
+                addLogisticOrderParam.setConsignCompanyId(kwoTradeOrderUnit.getEntId());
+                addLogisticOrderParam.setConsignContactPhone(kwoTradeOrderUnit.getPhone());
+                addLogisticOrderParam.setConsignContacts(kwoTradeOrderUnit.getContacts());
+                addLogisticOrderParam.setConsignContactsId(kwoTradeOrderUnit.getContactsId());
+            }
+
+        } else {
+            KwoTradeOrderUnit kwoTradeOrderUnit = unitMap.get("2");//采购
+            if (Objects.nonNull(kwoTradeOrderUnit)) {
+                addLogisticOrderParam.setConsignCompany(kwoTradeOrderUnit.getFirmName());
+                addLogisticOrderParam.setConsignCompanyId(kwoTradeOrderUnit.getEntId());
+                addLogisticOrderParam.setConsignContactPhone(kwoTradeOrderUnit.getPhone());
+                addLogisticOrderParam.setConsignContacts(kwoTradeOrderUnit.getContacts());
+                addLogisticOrderParam.setConsignContactsId(kwoTradeOrderUnit.getContactsId());
+            }
+        }
+
+        addLogisticOrderParam.setGoodsId(byOrderId.getGoodsId());
+        addLogisticOrderParam.setGoodsName(byOrderId.getGoodsName());
+        addLogisticOrderParam.setGoodsType(byOrderId.getGoodsType());
+        addLogisticOrderParam.setGoodsPrice(byOrderId.getUnitPrice());
+        addLogisticOrderParam.setGoodsPriceUnit(byOrderId.getUnit());
+        List<KwoTradeOrderAddress> kwoTradeOrderAddresses = addressMap.get(String.valueOf(AddressTypeEnum.SHIPMENT.getCode()));
+        KwoTradeOrderAddress kwoTradeOrderAddress = kwoTradeOrderAddresses.get(0);
+        addLogisticOrderParam.setLoadName(kwoTradeOrderAddress.getName());
+        addLogisticOrderParam.setLoadCityCode(kwoTradeOrderAddress.getCityCode());
+        addLogisticOrderParam.setLoadCityName(kwoTradeOrderAddress.getCityName());
+        addLogisticOrderParam.setLoadContacts(kwoTradeOrderAddress.getContacts());
+        addLogisticOrderParam.setLoadPhone(kwoTradeOrderAddress.getPhone());
+        addLogisticOrderParam.setLoadDetailAddress(kwoTradeOrderAddress.getDetailAddress());
+
+        transportRemoteService.addLogisticOrder(addLogisticOrderParam);
+
+        return true;
+    }
 }

+ 29 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderTransportService.java

@@ -0,0 +1,29 @@
+package com.sckw.order.serivce;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.sckw.order.dao.KwoTradeOrderTransportMapper;
+import com.sckw.order.model.KwoTradeOrderTransport;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author xucaiqin
+ * @date 2025-11-16 14:28:07
+ */
+@Service
+public class KwoTradeOrderTransportService {
+
+    @Autowired
+    private KwoTradeOrderTransportMapper kwoTradeOrderTransportMapper;
+
+    public void insert(KwoTradeOrderTransport kwoTradeOrderTransport) {
+        kwoTradeOrderTransport.setDelFlag(0);
+        kwoTradeOrderTransportMapper.insert(kwoTradeOrderTransport);
+    }
+
+    public List<KwoTradeOrderTransport> queryList(Long id) {
+        return kwoTradeOrderTransportMapper.selectList(new LambdaQueryWrapper<KwoTradeOrderTransport>().eq(KwoTradeOrderTransport::getTOrderId, id).eq(KwoTradeOrderTransport::getDelFlag, 0));
+    }
+}

+ 3 - 12
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/TradeOrderManageService.java

@@ -95,20 +95,11 @@ public class TradeOrderManageService {
      * @return: com.sckw.core.model.page.PageResult
      */
     public PageResult listPaging(OperatorTOrderListQueryVO params) {
-        List<Long> authEntIdList = LoginUserHolder.getAuthEntIdList();
-        if (CollectionUtils.isEmpty(authEntIdList)) {
-            List<Long> ids = remoteUserService.findEnterpriseIdsByUserIdIsMain(LoginUserHolder.getUserId());
-            if (CollectionUtils.isEmpty(ids)) {
-                return PageResult.build(params.getPage(), params.getPageSize(), 0L, Collections.emptyList());
-            }
-            authEntIdList.addAll(ids);
-        }
-
         TradeOrderListStatisticParam tradeOrderListStatisticParam = new TradeOrderListExportParam();
         BeanUtils.copyProperties(params, tradeOrderListStatisticParam);
         TradeOrderListSelectDTO tradeOrderListSelectDTO = tradeOrderService.buildSelectParam(tradeOrderListStatisticParam);
         PageHelper.startPage(params.getPage(), params.getPageSize());
-        List<OrderListResDTO> list = tradeOrderMapper.tradeOrderSelect(tradeOrderListSelectDTO, tradeOrderListSelectDTO.getGoodIds(), LoginUserHolder.getAuthUserIdList(), authEntIdList);
+        List<OrderListResDTO> list = tradeOrderMapper.tradeOrderSelect(tradeOrderListSelectDTO, tradeOrderListSelectDTO.getGoodIds(), LoginUserHolder.getAuthUserIdList(), null);
         return tradeOrderService.buildResult(list, params.getPageSize());
     }
 
@@ -578,7 +569,7 @@ public class TradeOrderManageService {
         RWaybillSubOrderVo rWaybillSubOrderVo = tradeOrderIdAndSubOrderVoMap.getOrDefault(tradeOrder.getId(),new RWaybillSubOrderVo());
         List<RWaybillSubOrderVo.BillSubOrder> subOrders = rWaybillSubOrderVo.getSubOrders();
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(subOrders)){
-        
+
             //累计装货量
             BigDecimal loadTotal = subOrders.stream()
                     .map(RWaybillSubOrderVo.BillSubOrder::getLoadAmount)
@@ -603,7 +594,7 @@ public class TradeOrderManageService {
                         .map(RWaybillSubOrderVo.BillSubOrder::getLoadAmount)
                         .filter(Objects::nonNull)
                         .reduce(BigDecimal.ZERO, BigDecimal::add);
-             
+
             }
             tradeOrderPerformanceInfo.setLoadAmount(loadAmount.setScale(2, RoundingMode.HALF_UP).toPlainString());
 

+ 29 - 0
sckw-modules/sckw-order/src/main/resources/bootstrap-local.yml

@@ -0,0 +1,29 @@
+spring:
+  cloud:
+    nacos:
+      discovery:
+        # 服务注册地址
+        server-addr: @nacos.server@
+        # 命名空间
+        namespace: @nacos.namespace@
+        # 共享配置
+        group: sckw-ng-service-platform
+      config:
+        # 配置中心地址
+        server-addr: @nacos.server@
+        # 命名空间
+        namespace: @nacos.namespace@
+        # 共享配置
+        group: sckw-ng-service-platform
+        # 配置文件格式
+        file-extension: yaml
+        shared-configs:
+          - data-id: sckw-common.yml
+            group: sckw-ng-common
+            refresh: true
+
+        #可以读多个配置文件 需要在同一个命名空间下面可以是不同的组
+        extension-configs:
+          - dataId: sckw-common.yml
+            group: sckw-ng-service-platform
+            refresh: true

+ 259 - 218
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderMapper.xml

@@ -41,34 +41,33 @@
             <result column="unloadCityName" property="unloadCityName"/>
             <result column="unloadDetailAddress" property="unloadDetailAddress"/>
         </collection>
-
     </resultMap>
     <sql id="Query_Column_List_Accept_Carriage">
-        a.id                                                AS tOrderId,
-        a.status                                            AS status,
-        a.t_order_no                                        AS tOrderNo,
-        d.ent_id                                            AS procureEntId,
-        d.firm_name                                         AS procureFirmName,
-        e.ent_id                                            AS supplyEntId,
-        e.firm_name                                         AS supplyFirmName,
-        a.trading                                           AS trading,
-        a.delivery_type                                      AS deliveryType,
-        a.pickup_type                                        AS pickupType,
-        a.source                                            AS source,
-        f.contract_id                                       AS contractId,
-        f.contract_no                                       AS contractNo,
-        g.goods_id                                          AS goodsId,
-        g.unit_price                                        AS unitPrice,
-        a.price                                             AS price,
-        a.amount                                            AS amount,
-        a.entrust_amount                                    AS entrustAmount,
-        a.actual_amount                                     AS actualAmount,
-        a.start_time                                        AS startTime,
-        a.end_time                                          AS endTime,
-        a.remark                                            AS remark,
-        a.unit                                              AS unit,
-        a.create_by                                         AS createBy,
-        a.create_time                                       AS createTime
+        a.id             AS tOrderId,
+        a.status         AS status,
+        a.t_order_no     AS tOrderNo,
+        d.ent_id         AS procureEntId,
+        d.firm_name      AS procureFirmName,
+        e.ent_id         AS supplyEntId,
+        e.firm_name      AS supplyFirmName,
+        a.trading        AS trading,
+        a.delivery_type  AS deliveryType,
+        a.pickup_type    AS pickupType,
+        a.source         AS source,
+        f.contract_id    AS contractId,
+        f.contract_no    AS contractNo,
+        g.goods_id       AS goodsId,
+        g.unit_price     AS unitPrice,
+        a.price          AS price,
+        a.amount         AS amount,
+        a.entrust_amount AS entrustAmount,
+        a.actual_amount  AS actualAmount,
+        a.start_time     AS startTime,
+        a.end_time       AS endTime,
+        a.remark         AS remark,
+        a.unit           AS unit,
+        a.create_by      AS createBy,
+        a.create_time    AS createTime
     </sql>
 
     <select id="tradeOrderSelect" resultMap="mainEntityMap">
@@ -76,92 +75,93 @@
         <include refid="Query_Column_List_Accept_Carriage">
         </include>
         FROM kwo_trade_order a
-        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
-        LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
-        LEFT JOIN kwo_trade_order_contract f ON a.id = f.t_order_id AND f.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
+                 LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
+                 LEFT JOIN kwo_trade_order_contract f ON a.id = f.t_order_id AND f.del_flag = 0
         <where>
             a.del_flag = 0
 --          数据权限匹配
-            <choose>
-                <when test="entIds == null or entIds.size == 0">
-                    <if test="query.isMain == 0">
-                        and (
-                        <if test="query.orderType == 1">
-                            <if test="query.entId != null">
-                                d.top_ent_id = #{query.entId}
-                            </if>
-                            <if test="authUserIds != null and authUserIds.size() > 0">
-                                and d.contacts_id in
-                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                                    #{authUserId}
-                                </foreach>
-                                or d.create_by in
-                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                                    #{authUserId}
-                                </foreach>
-                            </if>
-                        </if>
-                        <if test="query.orderType == 2">
-                            <if test="query.entId != null">
-                                e.top_ent_id = #{query.entId}
-                            </if>
-                            <if test="authUserIds != null and authUserIds.size() > 0">
-                                and e.contacts_id in
-                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                                    #{authUserId}
-                                </foreach>
-                                or e.create_by in
-                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">
-                                    #{authUserId}
-                                </foreach>
-                            </if>
-                        </if>
-                        )
-                    </if>
-                    <if test="query.isMain == 1">
-                        and (
-                        <if test="query.orderType == 1">
-                            <if test="query.entId != null">
-                                d.top_ent_id = #{query.entId}
-                            </if>
-                        </if>
-                        <if test="query.orderType == 2">
-                            <if test="query.entId != null">
-                                e.top_ent_id = #{query.entId}
-                            </if>
-                        </if>
-                        )
-                    </if>
-                </when>
-                <otherwise>
-                    and a.ent_id in <foreach collection="entIds" separator="," open="(" close=")" item="item">
-                            #{item}
-                </foreach>
-                </otherwise>
-            </choose>
+<!--            <choose>-->
+<!--                <when test="entIds == null or entIds.size == 0">-->
+<!--                    <if test="query.isMain == 0">-->
+<!--                        and (-->
+<!--                        <if test="query.orderType == 1">-->
+<!--                            <if test="query.entId != null">-->
+<!--                                    d.top_ent_id = #{query.entId}-->
+<!--                            </if>-->
+<!--                            <if test="authUserIds != null and authUserIds.size() > 0">-->
+<!--                                and d.contacts_id in-->
+<!--                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">-->
+<!--                                    #{authUserId}-->
+<!--                                </foreach>-->
+<!--                                or d.create_by in-->
+<!--                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">-->
+<!--                                    #{authUserId}-->
+<!--                                </foreach>-->
+<!--                            </if>-->
+<!--                        </if>-->
+<!--                        <if test="query.orderType == 2">-->
+<!--                            <if test="query.entId != null">-->
+<!--                                e.top_ent_id = #{query.entId}-->
+<!--                            </if>-->
+<!--                            <if test="authUserIds != null and authUserIds.size() > 0">-->
+<!--                                and e.contacts_id in-->
+<!--                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">-->
+<!--                                    #{authUserId}-->
+<!--                                </foreach>-->
+<!--                                or e.create_by in-->
+<!--                                <foreach collection="authUserIds" item="authUserId" open="(" close=")" separator=",">-->
+<!--                                    #{authUserId}-->
+<!--                                </foreach>-->
+<!--                            </if>-->
+<!--                        </if>-->
+<!--                        )-->
+<!--                    </if>-->
+<!--                    <if test="query.isMain == 1">-->
+<!--                        and (-->
+<!--                        <if test="query.orderType == 1">-->
+<!--                            <if test="query.entId != null">-->
+<!--                                d.top_ent_id = #{query.entId}-->
+<!--                            </if>-->
+<!--                        </if>-->
+<!--                        <if test="query.orderType == 2">-->
+<!--                            <if test="query.entId != null">-->
+<!--                                e.top_ent_id = #{query.entId}-->
+<!--                            </if>-->
+<!--                        </if>-->
+<!--                        )-->
+<!--                    </if>-->
+<!--                </when>-->
+<!--                <otherwise>-->
+<!--                    and a.ent_id in-->
+<!--                    <foreach collection="entIds" separator="," open="(" close=")" item="item">-->
+<!--                        #{item}-->
+<!--                    </foreach>-->
+<!--                </otherwise>-->
+<!--            </choose>-->
 
---           状态匹配
+            --           状态匹配
             <if test="query.status != null">
-                and a.status =#{query.status}
+                and a.status = #{query.status}
                 <if test="query.status == 0">
---          草稿状态只能创建订单的人能看
-                    and a.create_by = #{query.userId}
+                    --          草稿状态只能创建订单的人能看
+                      and a.create_by = #{query.userId}
                 </if>
             </if>
             <if test="query.status == null">
---           非草稿状态or草稿状态且是当前人
-                and (
-                    a.status != 0
-                 or (a.status = 0 and a.create_by = #{query.userId})
-                )
+                --           非草稿状态or草稿状态且是当前人
+                  and (
+                            a.status != 0
+                        or (a.status = 0 and a.create_by = #{query.userId})
+                    )
             </if>
---          关键词匹配
+            --          关键词匹配
             <if test="query.keywords != null and query.keywords != ''">
                 and (
-                a.t_order_no like concat('%', #{query.keywords}, '%')
-                or d.firm_name like concat('%', #{query.keywords}, '%')
-                or e.firm_name like concat('%', #{query.keywords}, '%')
+                        a.t_order_no like concat('%', #{query.keywords}, '%')
+                    or d.firm_name like concat('%', #{query.keywords}, '%')
+                    or e.firm_name like concat('%', #{query.keywords}, '%')
                 <if test="goodIds != null and goodIds.size() > 0">
                     or g.goods_id in
                     <foreach collection="goodIds" item="goodId" open="(" close=")" separator=",">
@@ -170,39 +170,43 @@
                 </if>
                 )
             </if>
-            <if test="query.startCreateTime != null ">
+            <if test="query.startCreateTime != null">
                 and a.create_time &gt;= #{query.startCreateTime}
             </if>
-            <if test="query.endCreateTime != null ">
+            <if test="query.endCreateTime != null">
                 and a.create_time &lt;= #{query.endCreateTime}
             </if>
             <if test="(query.loadAddressCode != null and query.loadAddressCode != '') or (query.unloadAddressCode != null and query.unloadAddressCode != '')">
                 and a.id in (
-                SELECT t_order_id from kwo_trade_order_address where del_flag = 0
+                SELECT t_order_id
+                from kwo_trade_order_address where del_flag = 0
                 <if test="query.loadAddressCode != null and query.loadAddressCode != ''">
                     and address_type = 1
-                    and left(city_code, #{query.loadAddressLevel, jdbcType=INTEGER}) = left( #{query.loadAddressCode, jdbcType=INTEGER}, #{query.loadAddressLevel, jdbcType=INTEGER} )
+                    and left(city_code, #{query.loadAddressLevel, jdbcType=INTEGER}) =
+                        left(#{query.loadAddressCode, jdbcType=INTEGER}, #{query.loadAddressLevel, jdbcType=INTEGER})
                 </if>
                 <if test="query.unloadAddressCode != null and query.unloadAddressCode != ''">
                     and address_type = 2
-                    and left(city_code, #{query.unloadAddressLevel, jdbcType=INTEGER}) = left( #{query.unloadAddressCode, jdbcType=INTEGER}, #{query.unloadAddressLevel, jdbcType=INTEGER} )
+                    and left(city_code, #{query.unloadAddressLevel, jdbcType=INTEGER}) =
+                        left(#{query.unloadAddressCode, jdbcType=INTEGER},
+                             #{query.unloadAddressLevel, jdbcType=INTEGER})
                 </if>
                 )
             </if>
             <if test="query.trading != null and query.trading != ''">
-                and a.trading =#{query.trading}
+                and a.trading = #{query.trading}
             </if>
             <if test="query.source != null and query.source != ''">
-                and a.source =#{query.source}
+                and a.source = #{query.source}
             </if>
             <if test="query.deliveryType != null and query.deliveryType != ''">
-                and a.delivery_type =#{query.deliveryType}
+                and a.delivery_type = #{query.deliveryType}
             </if>
             <if test="query.deliveryType != null and query.deliveryType != ''">
-                and a.delivery_type =#{query.deliveryType}
+                and a.delivery_type = #{query.deliveryType}
             </if>
             <if test="query.pickupType != null and query.pickupType != ''">
-                and a.pickup_type =#{query.pickupType}
+                and a.pickup_type = #{query.pickupType}
             </if>
         </where>
         ORDER BY a.create_time DESC
@@ -213,10 +217,10 @@
         <include refid="Query_Column_List_Accept_Carriage">
         </include>
         FROM kwo_trade_order a
-        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
-        LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
-        LEFT JOIN kwo_trade_order_contract f ON a.id = f.t_order_id AND f.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
+                 LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
+                 LEFT JOIN kwo_trade_order_contract f ON a.id = f.t_order_id AND f.del_flag = 0
         <where>
             a.del_flag = 0
 --             数据权限匹配
@@ -224,7 +228,7 @@
                 and (
                 <if test="query.orderType == 1">
                     <if test="query.entId != null">
-                        d.top_ent_id = #{query.entId}
+                            d.top_ent_id = #{query.entId}
                     </if>
                     <if test="authUserIds != null and authUserIds.size() > 0">
                         and d.contacts_id in
@@ -268,27 +272,27 @@
                 </if>
                 )
             </if>
---             状态匹配
+            --             状态匹配
             <if test="query.status != null">
-                and a.status =#{query.status}
+                and a.status = #{query.status}
                 <if test="query.status == 0">
---                     草稿状态只能创建订单的人能看
-                    and a.create_by = #{query.userId}
+                    --                     草稿状态只能创建订单的人能看
+                      and a.create_by = #{query.userId}
                 </if>
             </if>
             <if test="query.status == null">
---                 非草稿状态or草稿状态且是当前人
-                and (
-                a.status != 0
-                or (a.status = 0 and a.create_by = #{query.userId})
-                )
+                --                 非草稿状态or草稿状态且是当前人
+                  and (
+                            a.status != 0
+                        or (a.status = 0 and a.create_by = #{query.userId})
+                    )
             </if>
---             关键词匹配
+            --             关键词匹配
             <if test="query.keywords != null and query.keywords != ''">
                 and (
-                a.t_order_no like concat('%', #{query.keywords}, '%')
-                or d.firm_name like concat('%', #{query.keywords}, '%')
-                or e.firm_name like concat('%', #{query.keywords}, '%')
+                        a.t_order_no like concat('%', #{query.keywords}, '%')
+                    or d.firm_name like concat('%', #{query.keywords}, '%')
+                    or e.firm_name like concat('%', #{query.keywords}, '%')
                 <if test="goodIds != null and goodIds.size() > 0">
                     or g.goods_id in
                     <foreach collection="goodIds" item="goodId" open="(" close=")" separator=",">
@@ -297,38 +301,42 @@
                 </if>
                 )
             </if>
-            <if test="query.startCreateTime != null ">
+            <if test="query.startCreateTime != null">
                 and a.create_time &gt;= #{query.startCreateTime}
             </if>
-            <if test="query.endCreateTime != null ">
+            <if test="query.endCreateTime != null">
                 and a.create_time &lt;= #{query.endCreateTime}
             </if>
             <if test="(query.loadAddressCode != null and query.loadAddressCode != '') or (query.unloadAddressCode != null and query.unloadAddressCode != '')">
                 and a.id in (
-                SELECT t_order_id from kwo_trade_order_address where del_flag = 0
+                SELECT t_order_id
+                from kwo_trade_order_address where del_flag = 0
                 <if test="query.loadAddressCode != null and query.loadAddressCode != ''">
                     and address_type = 1
-                    and left(city_code, #{query.loadAddressLevel, jdbcType=INTEGER}) = left( #{query.loadAddressCode, jdbcType=INTEGER}, #{query.loadAddressLevel, jdbcType=INTEGER} )
+                    and left(city_code, #{query.loadAddressLevel, jdbcType=INTEGER}) =
+                        left(#{query.loadAddressCode, jdbcType=INTEGER}, #{query.loadAddressLevel, jdbcType=INTEGER})
                 </if>
                 <if test="query.unloadAddressCode != null and query.unloadAddressCode != ''">
                     and address_type = 2
-                    and left(city_code, #{query.unloadAddressLevel, jdbcType=INTEGER}) = left( #{query.unloadAddressCode, jdbcType=INTEGER}, #{query.unloadAddressLevel, jdbcType=INTEGER} )
+                    and left(city_code, #{query.unloadAddressLevel, jdbcType=INTEGER}) =
+                        left(#{query.unloadAddressCode, jdbcType=INTEGER},
+                             #{query.unloadAddressLevel, jdbcType=INTEGER})
                 </if>
                 )
             </if>
             <if test="query.trading != null and query.trading != ''">
-                and a.trading =#{query.trading}
+                and a.trading = #{query.trading}
             </if>
             <if test="query.source != null and query.source != ''">
-                and a.source =#{query.source}
+                and a.source = #{query.source}
             </if>
             <if test="query.deliveryType != null and query.deliveryType != ''">
-                and a.delivery_type =#{query.deliveryType}
+                and a.delivery_type = #{query.deliveryType}
             </if>
             <if test="query.deliveryType != null and query.deliveryType != ''">
-                and a.delivery_type =#{query.deliveryType}
+                and a.delivery_type = #{query.deliveryType}
             </if>
---          指定贸易订单id导出
+            --          指定贸易订单id导出
             <if test="ids != null and ids.size() > 0">
                 and a.id in
                 <foreach collection="ids" item="item" open="(" close=")" separator=",">
@@ -354,18 +362,20 @@
         <include refid="Query_Column_List_Accept_Carriage">
         </include>
         FROM kwo_trade_order a
-        LEFT JOIN kwo_trade_order_address b ON a.id = b.t_order_id
-        AND b.address_type = "1" AND b.del_flag = 0
-        LEFT JOIN kwo_trade_order_address c ON a.id = c.t_order_id
-        AND c.address_type = "2" AND c.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
-        AND d.unit_type = "1" AND d.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
-        AND e.unit_type = "2" AND e.del_flag = 0
-        LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
-        LEFT JOIN kwo_trade_order_contract f ON a.id = f.t_order_id AND f.del_flag = 0
+                 LEFT JOIN kwo_trade_order_address b ON a.id = b.t_order_id
+            AND b.address_type = "1" AND b.del_flag = 0
+                 LEFT JOIN kwo_trade_order_address c ON a.id = c.t_order_id
+            AND c.address_type = "2" AND c.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
+            AND d.unit_type = "1" AND d.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
+            AND e.unit_type = "2" AND e.del_flag = 0
+                 LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
+                 LEFT JOIN kwo_trade_order_contract f ON a.id = f.t_order_id AND f.del_flag = 0
         <where>
-            a.status = 5 and a.associate_statement <![CDATA[ <> ]]> 1 and a.del_flag = 0
+            a.status = 5
+              and a.associate_statement <![CDATA[ <> ]]> 1
+              and a.del_flag = 0
             <if test="query.orderType == 1">
                 <if test="query.entId != null">
                     and d.top_ent_id = #{query.entId}
@@ -388,16 +398,16 @@
                     #{goodId}
                 </foreach>
             </if>
-            <if test="query.procureEntId != null ">
+            <if test="query.procureEntId != null">
                 and d.ent_id = #{query.procureEntId}
             </if>
             <if test="query.trading != null and query.trading != ''">
-                and a.trading =#{query.trading}
+                and a.trading = #{query.trading}
             </if>
-            <if test="query.startTime != null ">
+            <if test="query.startTime != null">
                 and a.start_time &gt;= #{query.startTime}
             </if>
-            <if test="query.endTime != null ">
+            <if test="query.endTime != null">
                 and a.end_time &lt;= #{query.endTime}
             </if>
         </where>
@@ -409,16 +419,16 @@
         <include refid="Query_Column_List_Accept_Carriage">
         </include>
         FROM kwo_trade_order a
-        LEFT JOIN kwo_trade_order_address b ON a.id = b.t_order_id
-        AND b.address_type = "1" AND b.del_flag = 0
-        LEFT JOIN kwo_trade_order_address c ON a.id = c.t_order_id
-        AND c.address_type = "2" AND c.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
-        AND d.unit_type = "1" AND d.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
-        AND e.unit_type = "2" AND e.del_flag = 0
-        LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
-        LEFT JOIN kwo_trade_order_contract f ON a.id = f.t_order_id AND f.del_flag = 0
+                 LEFT JOIN kwo_trade_order_address b ON a.id = b.t_order_id
+            AND b.address_type = "1" AND b.del_flag = 0
+                 LEFT JOIN kwo_trade_order_address c ON a.id = c.t_order_id
+            AND c.address_type = "2" AND c.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
+            AND d.unit_type = "1" AND d.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
+            AND e.unit_type = "2" AND e.del_flag = 0
+                 LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
+                 LEFT JOIN kwo_trade_order_contract f ON a.id = f.t_order_id AND f.del_flag = 0
         <where>
             a.del_flag = 0
             <if test="query.orderType == 1">
@@ -442,13 +452,16 @@
     </select>
 
     <select id="workbenchPurchaseList" resultType="com.sckw.order.model.dto.WorkbenchPurchaseDTO">
-        SELECT
-        a.id as tOrderId, a.amount as amount, a.unit as unit, a.create_time as createTime,
-        g.goods_id as goodsId, d.firm_name as procureFirmName
+        SELECT a.id          as tOrderId,
+               a.amount      as amount,
+               a.unit        as unit,
+               a.create_time as createTime,
+               g.goods_id    as goodsId,
+               d.firm_name   as procureFirmName
         FROM kwo_trade_order a
-        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
-        AND d.unit_type = "1" AND d.del_flag = 0
-        LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
+            AND d.unit_type = "1" AND d.del_flag = 0
+                 LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
         <where>
             a.del_flag = 0
             <if test="procureTopEntId != null">
@@ -461,15 +474,16 @@
                 </foreach>
             </if>
         </where>
-        ORDER BY a.create_time DESC LIMIT 10;
+        ORDER BY a.create_time DESC
+        LIMIT 10;
     </select>
 
     <select id="tradeOrderStatistic" resultType="com.sckw.core.model.vo.TableTop">
         SELECT a.status AS `value`, COUNT(a.status) AS total
         FROM kwo_trade_order a
-        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
-        LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
+                 LEFT JOIN kwo_trade_order_goods g ON a.id = g.t_order_id AND g.del_flag = 0
         <where>
             a.del_flag = 0
 --             数据权限匹配
@@ -477,7 +491,7 @@
                 and (
                 <if test="query.orderType == 1">
                     <if test="query.entId != null">
-                        d.top_ent_id = #{query.entId}
+                            d.top_ent_id = #{query.entId}
                     </if>
                     <if test="authUserIds != null and authUserIds.size() > 0">
                         and d.contacts_id in
@@ -521,27 +535,27 @@
                 </if>
                 )
             </if>
---             状态匹配
+            --             状态匹配
             <if test="query.status != null">
-                and a.status =#{query.status}
+                and a.status = #{query.status}
                 <if test="query.status == 0">
---                     草稿状态只能创建订单的人能看
-                    and a.create_by = #{query.userId}
+                    --                     草稿状态只能创建订单的人能看
+                      and a.create_by = #{query.userId}
                 </if>
             </if>
             <if test="query.status == null">
---                 非草稿状态or草稿状态且是当前人
-                and (
-                a.status != 0
-                or (a.status = 0 and a.create_by = #{query.userId})
-                )
+                --                 非草稿状态or草稿状态且是当前人
+                  and (
+                            a.status != 0
+                        or (a.status = 0 and a.create_by = #{query.userId})
+                    )
             </if>
---                      关键词匹配
+            --                      关键词匹配
             <if test="query.keywords != null and query.keywords != ''">
                 and (
-                a.t_order_no like concat('%', #{query.keywords}, '%')
-                or d.firm_name like concat('%', #{query.keywords}, '%')
-                or e.firm_name like concat('%', #{query.keywords}, '%')
+                        a.t_order_no like concat('%', #{query.keywords}, '%')
+                    or d.firm_name like concat('%', #{query.keywords}, '%')
+                    or e.firm_name like concat('%', #{query.keywords}, '%')
                 <if test="goodIds != null and goodIds.size() > 0">
                     or g.goods_id in
                     <foreach collection="goodIds" item="goodId" open="(" close=")" separator=",">
@@ -550,36 +564,40 @@
                 </if>
                 )
             </if>
-            <if test="query.startCreateTime != null ">
+            <if test="query.startCreateTime != null">
                 and a.create_time &gt;= #{query.startCreateTime}
             </if>
-            <if test="query.endCreateTime != null ">
+            <if test="query.endCreateTime != null">
                 and a.create_time &lt;= #{query.endCreateTime}
             </if>
             <if test="(query.loadAddressCode != null and query.loadAddressCode != '') or (query.unloadAddressCode != null and query.unloadAddressCode != '')">
                 and a.id in (
-                SELECT t_order_id from kwo_trade_order_address where del_flag = 0
+                SELECT t_order_id
+                from kwo_trade_order_address where del_flag = 0
                 <if test="query.loadAddressCode != null and query.loadAddressCode != ''">
                     and address_type = 1
-                    and left(city_code, #{query.loadAddressLevel, jdbcType=INTEGER}) = left( #{query.loadAddressCode, jdbcType=INTEGER}, #{query.loadAddressLevel, jdbcType=INTEGER} )
+                    and left(city_code, #{query.loadAddressLevel, jdbcType=INTEGER}) =
+                        left(#{query.loadAddressCode, jdbcType=INTEGER}, #{query.loadAddressLevel, jdbcType=INTEGER})
                 </if>
                 <if test="query.unloadAddressCode != null and query.unloadAddressCode != ''">
                     and address_type = 2
-                    and left(city_code, #{query.unloadAddressLevel, jdbcType=INTEGER}) = left( #{query.unloadAddressCode, jdbcType=INTEGER}, #{query.unloadAddressLevel, jdbcType=INTEGER} )
+                    and left(city_code, #{query.unloadAddressLevel, jdbcType=INTEGER}) =
+                        left(#{query.unloadAddressCode, jdbcType=INTEGER},
+                             #{query.unloadAddressLevel, jdbcType=INTEGER})
                 </if>
                 )
             </if>
             <if test="query.trading != null and query.trading != ''">
-                and a.trading =#{query.trading}
+                and a.trading = #{query.trading}
             </if>
             <if test="query.source != null and query.source != ''">
-                and a.source =#{query.source}
+                and a.source = #{query.source}
             </if>
             <if test="query.deliveryType != null and query.deliveryType != ''">
-                and a.delivery_type =#{query.deliveryType}
+                and a.delivery_type = #{query.deliveryType}
             </if>
             <if test="query.deliveryType != null and query.deliveryType != ''">
-                and a.delivery_type =#{query.deliveryType}
+                and a.delivery_type = #{query.deliveryType}
             </if>
         </where>
         GROUP BY a.status
@@ -588,8 +606,8 @@
     <select id="appStatistic" resultType="com.sckw.order.model.vo.res.TradeOrderAppStatisticVO">
         SELECT a.status AS `value`, COUNT(a.status) AS total
         FROM kwo_trade_order a
-        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id AND d.unit_type = "1" AND d.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id AND e.unit_type = "2" AND e.del_flag = 0
         <where>
             a.del_flag = 0
 --             数据权限匹配
@@ -597,7 +615,7 @@
                 and (
                 <if test="query.orderType == 1">
                     <if test="query.entId != null">
-                        d.top_ent_id = #{query.entId}
+                            d.top_ent_id = #{query.entId}
                     </if>
                     <if test="authUserIds != null and authUserIds.size() > 0">
                         and d.contacts_id in
@@ -643,7 +661,7 @@
                     and e.top_ent_id = #{query.entId}
                 </if>
             </if>
---             状态匹配
+            --             状态匹配
             <if test="statuses != null and statuses.size() > 0">
                 and a.status in
                 <foreach collection="statuses" item="item" open="(" close=")" separator=",">
@@ -652,26 +670,26 @@
             </if>
         </where>
         GROUP BY a.status
-
     </select>
 
     <select id="getOrderStsInfo" resultType="com.sckw.order.model.dto.WorkbenchOrderStsDTO">
-        SELECT SUM(a.amount) AS orderAmount, SUM(a.price) AS orderPrice,
+        SELECT SUM(a.amount)        AS orderAmount,
+               SUM(a.price)         AS orderPrice,
                SUM(a.actual_amount) AS orderActualAmount
         FROM kwo_trade_order a
-        LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
-        AND d.unit_type = "1" AND d.del_flag = 0
-        LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
-        AND e.unit_type = "2" AND e.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit d ON a.id = d.t_order_id
+            AND d.unit_type = "1" AND d.del_flag = 0
+                 LEFT JOIN kwo_trade_order_unit e ON a.id = e.t_order_id
+            AND e.unit_type = "2" AND e.del_flag = 0
         <where>
             a.del_flag = 0
             <if test="query.unit != null and query.unit != ''">
-                and a.unit =#{query.unit}
+                and a.unit = #{query.unit}
             </if>
-            <if test="query.startCreateTime != null ">
+            <if test="query.startCreateTime != null">
                 and a.create_time &gt;= #{query.startCreateTime}
             </if>
-            <if test="query.endCreateTime != null ">
+            <if test="query.endCreateTime != null">
                 and a.create_time &lt;= #{query.endCreateTime}
             </if>
             <if test="excludeStatuses != null and excludeStatuses.size() > 0">
@@ -706,8 +724,10 @@
                  LEFT JOIN kwo_trade_order_unit u
                            ON o.id = u.t_order_id
         <where>
-            o.del_flag = 0 AND o.status NOT IN (0, 2) AND u.del_flag = 0
-            <if test="topEntId != null ">
+            o.del_flag = 0
+              AND o.status NOT IN (0, 2)
+              AND u.del_flag = 0
+            <if test="topEntId != null">
                 and u.top_ent_id = #{topEntId}
             </if>
             <if test="enterpriseIds != null and enterpriseIds.size() > 0">
@@ -733,16 +753,37 @@
                        ELSE 0
                    END)                                     AS stsFactorsTwoValue
         FROM kwo_trade_order
-        WHERE
-          id IN (SELECT t_order_id
-                FROM kwo_trade_order_unit
-                WHERE del_flag = 0
-                AND unit_type = #{item.unitType}
-                AND top_ent_id = #{item.topEntId})
+        WHERE id IN (SELECT t_order_id
+                     FROM kwo_trade_order_unit
+                     WHERE del_flag = 0
+                       AND unit_type = #{item.unitType}
+                       AND top_ent_id = #{item.topEntId})
           AND create_time >= #{item.startTime}
           AND status NOT IN (0, 2)
           AND del_flag = 0
         GROUP BY DATE_FORMAT(create_time, #{item.dateFormat});
     </select>
 
-</mapper>
+    <select id="selectGoodsId" resultType="java.lang.Long">
+        select distinct ktog.goods_id
+        from kwo_trade_order kto
+                 left join kwo_trade_order_goods ktog on kto.id = ktog.t_order_id and ktog.del_flag = 0
+        where kto.del_flag = 0
+          and kto.ent_id = #{entId}
+    </select>
+
+    <select id="querySaleOrder" resultType="com.sckw.order.api.model.OrderSaleVo">
+        select ktog.goods_id,
+               sum(ifnull(kto.amount, 0)) as amount
+        from kwo_trade_order kto
+                 left join kwo_trade_order_goods ktog on kto.id = ktog.t_order_id and ktog.del_flag = 0
+        <where>
+            kto.del_flag = 0
+            <if test="start != null and end != null">
+                and kto.create_time between #{start} and #{end}
+            </if>
+            group by ktog.goods_id
+            order by amount desc
+        </where>
+    </select>
+</mapper>

+ 26 - 0
sckw-modules/sckw-order/src/main/resources/mapper/KwoTradeOrderTransportMapper.xml

@@ -0,0 +1,26 @@
+<?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.order.dao.KwoTradeOrderTransportMapper">
+  <resultMap id="BaseResultMap" type="com.sckw.order.model.KwoTradeOrderTransport">
+    <!--@mbg.generated-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="t_order_id" jdbcType="BIGINT" property="tOrderId" />
+    <result column="t_order_no" jdbcType="VARCHAR" property="tOrderNo" />
+    <result column="ent_id" jdbcType="BIGINT" property="entId" />
+    <result column="firm_name" jdbcType="VARCHAR" property="firmName" />
+    <result column="contract_id" jdbcType="BIGINT" property="contractId" />
+    <result column="contract_no" jdbcType="VARCHAR" property="contractNo" />
+    <result column="transport_price" jdbcType="DECIMAL" property="transportPrice" />
+    <result column="contacts_id" jdbcType="BIGINT" property="contactsId" />
+    <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>
+
+</mapper>