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

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

czh 2 лет назад
Родитель
Сommit
0349d6c61e
17 измененных файлов с 364 добавлено и 98 удалено
  1. 1 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpSettlementLogisticsMapper.java
  2. 6 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/SettlementLogisticsDto.java
  3. 11 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/SettlementReq.java
  4. 8 4
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementLogisticsService.java
  5. 28 18
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpSettlementLogisticsMapper.xml
  6. 1 1
      sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java
  7. 0 2
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/MaxPurchaseNumParam.java
  8. 15 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/res/GoodsDetail.java
  9. 33 0
      sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/res/RecommendGoods.java
  10. 41 4
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java
  11. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/SubcontractConsignmentDTO.java
  12. 2 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsConsignmentParam.java
  13. 5 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderDetailVO.java
  14. 206 60
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  15. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java
  16. 4 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java
  17. 1 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java

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

@@ -43,7 +43,7 @@ public interface KwpSettlementLogisticsMapper extends BaseMapper<KwpSettlementLo
      * @author Aick Spt
      * @date 2023-07-24 16:24
      */
-    SettlementLogisticsDto detail(@Param("id") Long id, @Param("unitType") Integer unitType);
+    SettlementLogisticsDto detail(@Param("id") Long id, @Param("unitType") Integer unitType, @Param("unitTypeTwo") Integer unitTypeTwo);
 
     /**
      * 根据条件查物流结算订单-导出

+ 6 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/SettlementLogisticsDto.java

@@ -153,10 +153,15 @@ public class SettlementLogisticsDto {
     private String lLedgerNo;
 
     /**
-     * 客户企业类型
+     * 客户企业类型1
      */
     private Integer unitType;
 
+    /**
+     * 客户企业类型2
+     */
+    private Integer unitTypeTwo;
+
     /**
      * 客户名称
      */

+ 11 - 1
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/SettlementReq.java

@@ -56,8 +56,18 @@ public class SettlementReq extends BasePara {
     private Long entId;
 
     /**
-     * 筛选交易方
+     * 交易方式
+     */
+    private String trading;
+
+    /**
+     * 筛选交易方1
      */
     private Integer unitType;
 
+    /**
+     * 筛选交易方2
+     */
+    private Integer unitTypeTwo;
+
 }

+ 8 - 4
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementLogisticsService.java

@@ -51,6 +51,7 @@ public class KwpSettlementLogisticsService {
      */
     public List<TableTop> getCountListCollection(SettlementReq settlementReq) {
         settlementReq.setUnitType(LogisticsUnitType.SHIPPER);
+        settlementReq.setUnitTypeTwo(LogisticsUnitType.CARRIER);
         return getCountList(settlementReq);
     }
 
@@ -62,6 +63,7 @@ public class KwpSettlementLogisticsService {
      */
     public List<TableTop> getCountListPayment(SettlementReq settlementReq) {
         settlementReq.setUnitType(LogisticsUnitType.CARRIER);
+        settlementReq.setUnitTypeTwo(LogisticsUnitType.SHIPPER);
         return getCountList(settlementReq);
     }
 
@@ -73,6 +75,7 @@ public class KwpSettlementLogisticsService {
      */
     public PageMoreRes<SettlementLogisticsDto> pageSelectCollection(SettlementReq settlementReq) {
         settlementReq.setUnitType(LogisticsUnitType.SHIPPER);
+        settlementReq.setUnitTypeTwo(LogisticsUnitType.CARRIER);
         return pageSelect(settlementReq);
     }
 
@@ -84,6 +87,7 @@ public class KwpSettlementLogisticsService {
      */
     public PageMoreRes<SettlementLogisticsDto> pageSelectPayment(SettlementReq settlementReq) {
         settlementReq.setUnitType(LogisticsUnitType.CARRIER);
+        settlementReq.setUnitTypeTwo(LogisticsUnitType.SHIPPER);
         return pageSelect(settlementReq);
     }
 
@@ -97,7 +101,7 @@ public class KwpSettlementLogisticsService {
         if (id == null) {
             throw new BusinessException("结算单ID必传");
         }
-        return detail(id, LogisticsUnitType.SHIPPER);
+        return detail(id, LogisticsUnitType.SHIPPER, LogisticsUnitType.CARRIER);
     }
 
     /**
@@ -107,7 +111,7 @@ public class KwpSettlementLogisticsService {
      * @date 2023-07-24 16:24
      */
     public SettlementLogisticsDto detailPayment(Long id) {
-        return detail(id, LogisticsUnitType.CARRIER);
+        return detail(id, LogisticsUnitType.CARRIER, LogisticsUnitType.SHIPPER);
     }
 
     /**
@@ -229,8 +233,8 @@ public class KwpSettlementLogisticsService {
      * @author Aick Spt
      * @date 2023-08-07 10:14
      */
-    private SettlementLogisticsDto detail(Long id, Integer unitType) {
-        SettlementLogisticsDto settlementLogisticsDto = settlementLogisticsMapper.detail(id, unitType);
+    private SettlementLogisticsDto detail(Long id, Integer unitType, Integer unitTypeTwo) {
+        SettlementLogisticsDto settlementLogisticsDto = settlementLogisticsMapper.detail(id, unitType, unitTypeTwo);
         if (settlementLogisticsDto == null) {
             throw new BusinessException("查无数据");
         }

+ 28 - 18
sckw-modules/sckw-payment/src/main/resources/mapper/KwpSettlementLogisticsMapper.xml

@@ -78,12 +78,15 @@
                l.url          as attachmentUrl,
 
                lu.unit_type   as unitType,
-               lu.firm_name   as firmName,
+               lu2.firm_name  as firmName,
 
         <include refid="Join_Column_List"/>
         from kwp_settlement_logistics s
-                 left join kwp_ledger_logistics l on s.l_ledger_id = l.id
-                 left join kwp_ledger_logistics_unit lu on s.l_ledger_id = lu.l_ledger_id
+                 inner join kwp_ledger_logistics l on s.l_ledger_id = l.id
+                 inner join kwp_ledger_logistics_unit lu on s.l_ledger_id = lu.l_ledger_id and
+                                                            lu.unit_type = #{settlementReq.unitType,jdbcType=INTEGER}
+                 inner join kwp_ledger_logistics_unit lu2 on s.l_ledger_id = lu2.l_ledger_id and lu2.unit_type =
+                                                                                                 #{settlementReq.unitTypeTwo,jdbcType=INTEGER}
     </sql>
     <!--  连表筛选准备  -->
     <sql id="settlementLogisticsSelectSum">
@@ -91,8 +94,10 @@
                sum(l.settle_price) as actualReceivable,
                sum(s.actual_price) as currentReceipt
         from kwp_settlement_logistics s
-                 left join kwp_ledger_logistics l on s.l_ledger_id = l.id
-                 left join kwp_ledger_logistics_unit lu on s.l_ledger_id = lu.l_ledger_id
+                 inner join kwp_ledger_logistics l on s.l_ledger_id = l.id
+                 inner join kwp_ledger_logistics_unit lu on s.l_ledger_id = lu.l_ledger_id and lu.unit_type = #{settlementReq.unitType,jdbcType=INTEGER}
+        inner join kwp_ledger_logistics_unit lu2 on s.l_ledger_id = lu2.l_ledger_id and lu2.unit_type =
+                                                                                        #{settlementReq.unitTypeTwo,jdbcType=INTEGER}
     </sql>
 
     <!--  根据连表,查询条件准备  -->
@@ -101,14 +106,16 @@
             and s.status = #{settlementReq.status}
         </if>
 
-        <if test="settlementReq.unitType != null">
-            and lu.unit_type = #{settlementReq.unitType}
-        </if>
+<!--        <if test="settlementReq.unitType != null">-->
+<!--            and lu.unit_type = #{settlementReq.unitType}-->
+<!--        </if>-->
 
         <if test="settlementReq.entId != null">
-            and lu.top_ent_id = #{settlementReq.entId}
+            and lu2.top_ent_id =#{settlementReq.entId,jdbcType=INTEGER}
+        </if>
+        <if test="settlementReq.trading != null and settlementReq.trading != ''">
+            and klt.trading = #{settlementReq.trading,jdbcType=VARCHAR}
         </if>
-
         <if test="settlementReq.startCreateTime != null and settlementReq.endCreateTime != null">
             and s.create_time between #{settlementReq.startCreateTime,jdbcType=TIMESTAMP} and #{settlementReq.endCreateTime,jdbcType=TIMESTAMP}
         </if>
@@ -155,8 +162,8 @@
     <select id="getCountList" resultType="java.lang.Long">
         select count(s.id) as num
         from kwp_settlement_logistics s
-                 left join kwp_ledger_logistics l on s.l_ledger_id = l.id
-                 left join kwp_ledger_logistics_unit lu on s.l_ledger_id = lu.l_ledger_id
+                 inner join kwp_ledger_logistics l on s.l_ledger_id = l.id
+                 inner join kwp_ledger_logistics_unit lu on s.l_ledger_id = lu.l_ledger_id
         <where>
             l.del_flag = 0
               and s.del_flag = 0
@@ -175,15 +182,18 @@
                l.url          as attachmentUrl,
 
                lu.unit_type   as unitType,
-               lu.firm_name   as firmName,
+               lu2.firm_name  as firmName,
         <include refid="Join_Column_List"/>
         from kwp_settlement_logistics s
-                 left join kwp_ledger_logistics l on s.l_ledger_id = l.id
-                 left join kwp_ledger_logistics_unit lu on s.l_ledger_id = lu.l_ledger_id
+                 inner join kwp_ledger_logistics l on s.l_ledger_id = l.id
+                 inner join kwp_ledger_logistics_unit lu
+                            on s.l_ledger_id = lu.l_ledger_id and lu.unit_type = #{unitType,jdbcType=INTEGER}
+                 inner join kwp_ledger_logistics_unit lu2 on s.l_ledger_id = lu2.l_ledger_id and lu2.unit_type =
+                                                                                                 #{unitTypeTwo,jdbcType=INTEGER}
         where s.id = #{id,jdbcType=BIGINT}
-        <if test="unitType != null">
-            and lu.unit_type = #{unitType}
-        </if>
+        <!--        <if test="unitType != null">-->
+        <!--            and lu.unit_type = #{unitType}-->
+        <!--        </if>-->
     </select>
 
     <!--  根据多个结算运费物流订单id查订单,用于导出   -->

+ 1 - 1
sckw-modules/sckw-product/src/main/java/com/sckw/product/controller/KwpGoodsController.java

@@ -67,7 +67,7 @@ public class KwpGoodsController {
     @GetMapping("/detail")
     @Log(description = "获取商品详情")
     public HttpResult detail(@RequestParam Long id) {
-        return HttpResult.ok(kwpGoodsService.detail(id));
+        return HttpResult.ok(kwpGoodsService.getDetail(id));
     }
 
     /**

+ 0 - 2
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/req/MaxPurchaseNumParam.java

@@ -1,7 +1,6 @@
 package com.sckw.product.model.vo.req;
 
 import jakarta.validation.constraints.DecimalMin;
-import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import lombok.Getter;
 import lombok.Setter;
@@ -35,7 +34,6 @@ public class MaxPurchaseNumParam {
     /**
      * 交易方式
      */
-    @NotBlank(message = "交易方式不能为空")
     private String trading;
 
     /**

+ 15 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/res/GoodsDetail.java

@@ -36,6 +36,16 @@ public class GoodsDetail {
      */
     private String ent;
 
+    /**
+     * 企业主营范围
+     */
+    private String entBusiness;
+
+    /**
+     * 企业地址
+     */
+    private String entAddress;
+
     /**
      * 供应单位id
      */
@@ -183,4 +193,9 @@ public class GoodsDetail {
      */
     private List<GoodsAttributesDetail> attributes;
 
+    /**
+     * 推荐商品
+     */
+    private List<RecommendGoods> recommendGoodsList;
+
 }

+ 33 - 0
sckw-modules/sckw-product/src/main/java/com/sckw/product/model/vo/res/RecommendGoods.java

@@ -0,0 +1,33 @@
+package com.sckw.product.model.vo.res;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+
+/**
+ * @desc: 推荐商品
+ * @author: yzc
+ * @date: 2023-08-15 11:25
+ */
+@Getter
+@Setter
+@ToString
+@Accessors(chain = true)
+public class RecommendGoods {
+
+    private Long id;
+
+    private String name;
+
+    private String unit;
+
+    private String unitLabel;
+
+    private String thumb;
+
+    private BigDecimal price;
+
+}

+ 41 - 4
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -166,6 +166,37 @@ public class KwpGoodsService {
         }
     }
 
+    /**
+     * @desc: 获取商品详情
+     * @author: yzc
+     * @date: 2023-08-15 14:28
+     * @Param id:
+     * @return: com.sckw.product.model.vo.res.GoodsDetail
+     */
+    public GoodsDetail getDetail(Long id) {
+        GoodsDetail detail = detail(id);
+        LambdaQueryWrapper<KwpGoods> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(KwpGoods::getGoodsType, detail.getGoodsType()).eq(KwpGoods::getStatus, GoodsStatusEnum.PUT_ON_SHELVES.getCode())
+                .eq(KwpGoods::getDelFlag, Global.NO).ne(KwpGoods::getId, id).last("LIMIT 4");
+        List<KwpGoods> list = kwpGoodsMapper.selectList(wrapper);
+        if (CollectionUtils.isEmpty(list)) {
+            return detail;
+        }
+        List<Long> goodsIds = list.stream().map(KwpGoods::getId).toList();
+        Map<Long, List<KwpGoodsPriceRange>> map = kwpGoodsPriceRangeService.getByGoodsIds(goodsIds).stream()
+                .collect(Collectors.groupingBy(KwpGoodsPriceRange::getGoodsId));
+        List<RecommendGoods> recommendGoodsList = new ArrayList<>();
+        list.forEach(e -> {
+            RecommendGoods recommendGoods = BeanUtils.copyProperties(e, RecommendGoods.class);
+            List<KwpGoodsPriceRange> prices = map.get(recommendGoods.getId());
+            recommendGoods.setUnitLabel(DictEnum.getLabel(DictTypeEnum.UNIT_TYPE.getType(), recommendGoods.getUnit()))
+                    .setPrice(CollectionUtils.isNotEmpty(prices) ? prices.get(0).getPrice() : null);
+            recommendGoodsList.add(recommendGoods);
+        });
+        detail.setRecommendGoodsList(recommendGoodsList);
+        return detail;
+    }
+
     /**
      * @desc: 获取商品详情
      * @author: yzc
@@ -179,9 +210,15 @@ public class KwpGoodsService {
             throw new BusinessException("当前商品不存在!");
         }
         GoodsDetail detail = BeanUtils.copyProperties(goods, GoodsDetail.class);
-        List<EntCacheResDto> entCacheList = remoteSystemService.queryEntCacheByIds(Arrays.asList(detail.getEntId(), detail.getSupplyEntId()));
-        Map<Long, String> entMap = entCacheList.stream().collect(Collectors.toMap(EntCacheResDto::getId, EntCacheResDto::getFirmName, (k1, k2) -> k1));
-        detail.setEnt(entMap.get(detail.getEntId())).setSupplyEnt(entMap.get(detail.getSupplyEntId()));
+        Map<Long, EntCacheResDto> entMap = remoteSystemService.queryEntCacheMapByIds(Arrays.asList(detail.getEntId(), detail.getSupplyEntId()));
+        EntCacheResDto ent = entMap.get(detail.getEntId());
+        if (Objects.nonNull(ent)) {
+            detail.setEnt(ent.getFirmName()).setEntBusiness(ent.getBusiness()).setEntAddress(ent.getCityName());
+        }
+        EntCacheResDto supplyEnt = entMap.get(detail.getSupplyEntId());
+        if (Objects.nonNull(supplyEnt)) {
+            detail.setEntAddress(supplyEnt.getFirmName());
+        }
         UserCacheResDto managerInfo = remoteSystemService.queryUserCacheById(detail.getManager());
         if (Objects.nonNull(managerInfo)) {
             detail.setManagerName(managerInfo.getName()).setManagerPhone(managerInfo.getPhone());
@@ -858,7 +895,7 @@ public class KwpGoodsService {
             throw new BusinessException("商品不存在或已下架!");
         }
         BigDecimal amount = goods.getAmount();
-        if (!param.getTrading().startsWith("1")) {
+        if (Objects.isNull(param.getTrading()) || !param.getTrading().startsWith("1")) {
             return amount;
         }
         if (Objects.isNull(param.getProcureEntId()) || Objects.isNull(param.getSupplyEntId())) {

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

@@ -136,7 +136,7 @@ public class SubcontractConsignmentDTO /**implements IdsList*/ {
     /**
      * 货物id
      */
-    @NotNull(message = "货物id不能为空")
+//    @NotNull(message = "货物id不能为空")
     private String goodsId;
 
     /**

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

@@ -25,6 +25,8 @@ public class LogisticsConsignmentParam {
     /**
      *总量
      */
+    @Digits(integer = 10,fraction = 2,message = "总量格式不正确")
+    @DecimalMin(value = "0.00",message = "分配总量量不能小于{value}")
     private BigDecimal amount;
     /**
      * 分配承运量

+ 5 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderDetailVO.java

@@ -57,6 +57,11 @@ public class OrderDetailVO {
      * 扣亏损值
      */
     private String deduct;
+
+    /**
+     * 商品名称
+     */
+    private String goodsId;
     /**
      * 商品名称
      */

+ 206 - 60
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -29,6 +29,7 @@ import com.sckw.mongo.enums.BusinessTypeEnum;
 import com.sckw.mongo.model.SckwLogisticsOrder;
 import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
+import com.sckw.order.api.model.CompleteLogisticsOrderParam;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
 import com.sckw.stream.model.SckwBusSum;
@@ -143,14 +144,14 @@ public class AcceptCarriageOrderService {
             log.info("承运订单-分包托运 用户id:{}", LoginUserHolder.getUserId());
             throw new RuntimeException("企业信息查询异常");
         }
-        if (!entCacheResDto.getEntTypes().contains(String.valueOf(NumberConstant.THREE))) {
-            throw new RuntimeException("当前用户企业不具有分包功能权限!");
-        }
+//        if (!entCacheResDto.getEntTypes().contains(String.valueOf(NumberConstant.THREE))) {
+//            throw new RuntimeException("当前用户企业不具有分包功能权限!");
+//        }
         KwtLogisticsOrder order = new KwtLogisticsOrder();
         if (!bo.getIsFullDose()) {
             BigDecimal amount = bo.getAmount();
             BigDecimal carryingCapacity = bo.getCarryingCapacity();
-            if (carryingCapacity.compareTo(amount) < 0) {
+            if (amount.compareTo(carryingCapacity) < 0) {
                 log.error("运订单分包托运-可分配量分配错误:{}", bo.getLOrderId());
                 throw new RuntimeException("可分配量分配错误");
             }
@@ -238,8 +239,6 @@ public class AcceptCarriageOrderService {
         busSum.setMethod(2);
         //业务汇总数据对象
         busSum.setObject(lOrder);
-        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
-        busSum.setMethod(NumberConstant.TWO);
         streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
         //新增当前分包mongodb数据
         subcontractSendMongoDB(lOrderNo, orderId, bo, logisticsOrder, orderStatus);
@@ -291,10 +290,13 @@ public class AcceptCarriageOrderService {
         logisticsOrder.setRemark(bo.getRemark());
         logisticsOrder.setEntId(LoginUserHolder.getEntId());
         logisticsOrder.setFirmName(remoteSystemService.queryEntCacheById(LoginUserHolder.getEntId()).getFirmName());
-        logisticsOrder.setGoodsId(Long.parseLong(bo.getGoodsId()));
-        KwpGoods goods = goodsInfoService.getGoodsById(Long.parseLong(bo.getGoodsId()));
-        logisticsOrder.setGoodsType(goods == null ? null : goods.getGoodsType());
-        logisticsOrder.setGoodsSpec(goods == null ? null : goods.getSpec());
+        if (bo.getGoodsId() != null) {
+            logisticsOrder.setGoodsId(Long.parseLong(bo.getGoodsId()));
+            KwpGoods goods = goodsInfoService.getGoodsById(Long.parseLong(bo.getGoodsId()));
+            logisticsOrder.setGoodsType(goods == null ? null : goods.getGoodsType());
+            logisticsOrder.setGoodsSpec(goods == null ? null : goods.getSpec());
+        }
+        logisticsOrder.setGoodsName(bo.getGoodsName());
         logisticsOrder.setContractId(bo.getContractId());
         logisticsOrder.setContractNo(bo.getContractNo());
         logisticsOrder.setContractName(bo.getContractName());
@@ -566,7 +568,7 @@ public class AcceptCarriageOrderService {
     private void insertSubcontractLogisticsGoods(SubcontractConsignmentDTO bo, String lOrderNo, Long orderId) {
         KwtLogisticsOrderGoods kwtLogisticsOrderGoods = new KwtLogisticsOrderGoods();
         kwtLogisticsOrderGoods.setId(new IdWorker(NumberConstant.ONE).nextId());
-//        kwtLogisticsOrderGoods.setGoodsId(Long.parseLong(bo.getGoodsId()));
+        kwtLogisticsOrderGoods.setGoodsId(bo.getGoodsId() == null ? null : Long.parseLong(bo.getGoodsId()));
         kwtLogisticsOrderGoods.setGoodsName(bo.getGoodsName());
 //        kwtLogisticsOrderGoods.setSkuId(StringUtils.isBlank(bo.getSkuId()) ? null : Long.parseLong(bo.getSkuId()));
         kwtLogisticsOrderGoods.setLOrderId(orderId);
@@ -1082,6 +1084,7 @@ public class AcceptCarriageOrderService {
      * @param orderFinishDTO
      * @return
      */
+    @Transactional(rollbackFor = Exception.class)
     public HttpResult commitAcceptCarriageOrderFinish(OrderFinishDTO orderFinishDTO) {
         /** 订单完结 物流运单状态为【待派车】、【运输中】可操作*/
         /**完结拦截 必须车辆运单无正在运输中的单据才能完结 状态有 待接单之后已核弹之前的状态 都不能完结*/
@@ -1114,35 +1117,162 @@ public class AcceptCarriageOrderService {
         if (count > NumberConstant.ZERO) {
             throw new RuntimeException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
         }
+        BigDecimal ignoreAmount = logisticsOrder.getAmount().subtract(logisticsOrder.getTotalLoadAmount());
+        //修改单据本身数据
+        updateDataByItself(logisticsOrder, orderFinishDTO, ignoreAmount);
+        //获取物流订单下的子单
         /**完结订单-对应物流订单下子订单都要进行完结*/
         List<KwtLogisticsOrder> kwtLogisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
-                .in(KwtLogisticsOrder::getPids, Long.parseLong(orderFinishDTO.getId())));
-        if (CollectionUtils.isNotEmpty(kwtLogisticsOrders)) {
-            for (KwtLogisticsOrder kwtLogisticsOrder : kwtLogisticsOrders) {
-                String[] split = kwtLogisticsOrder.getPids().split(StringConstant.COMMA);
-                if (split.length > NumberConstant.ONE) {
-                    for (String s : split) {
-                        if (String.valueOf(kwtLogisticsOrder.getId()).equals(s)) {
-                            //本身订单
-                            //只存在当前订单无分包订单
-                            /**单据完结修改状态以及数据*/
-                            updateDataByItself(logisticsOrder, orderFinishDTO);
-                        } else {
-                            //修改分包后的订单-代表存在分包订单
-                            /**单据完结修改状态以及数据*/
-                            updateDataBySubset(orderFinishDTO, s);
-                        }
-                    }
-                } else {
-                    //只存在当前订单无分包订单
-                    /**单据完结修改状态以及数据*/
-                    updateDataByItself(logisticsOrder, orderFinishDTO);
-                }
+                .eq(KwtLogisticsOrder::getDelFlag, NumberConstant.ZERO)
+                .apply(id != null, "FIND_IN_SET ('" + id + "', pids)").ne(KwtLogisticsOrder::getId, id));
+        /**找到该订单下所有的物流订单**/
+        //需要修改的mongodb数据
+        List<Map<String, Object>> list = new ArrayList<>();
+        if (!org.springframework.util.CollectionUtils.isEmpty(kwtLogisticsOrders)) {
+            //修改单据状态
+//            List<Long> ids = kwtLogisticsOrders.stream().map(KwtLogisticsOrder::getId).collect(Collectors.toList());
+            //修改单据剩余运输量
+            kwtLogisticsOrders.forEach(kwtLogisticsOrder -> {
+                BigDecimal subtract = kwtLogisticsOrder.getAmount().subtract(kwtLogisticsOrder.getTotalLoadAmount());
+                updateLogisticOrderAndTrack(kwtLogisticsOrder.getId(), orderFinishDTO, subtract);
+                //新增mongodb要修改的数据
+                Map<String, Object> map = new HashMap<>();
+                map.put("id", kwtLogisticsOrder.getId());
+                map.put("ignoreAmount", subtract);
+                list.add(map);
+//                updateMongoDbByLogisticsOrder(kwtLogisticsOrder.getId(), orderFinishDTO, subtract);
+            });
+        }
+        /**是否是一级订单,是->推送至贸易,否,数据推送至物流订单上级*/
+        if (logisticsOrder.getPid() == null) {
+            //数据推送至贸易订单
+            CompleteLogisticsOrderParam tradeOrder = new CompleteLogisticsOrderParam();
+            //获取实际装货量-实际卸货量
+            Map<String, BigDecimal> map = kwtLogisticsOrderMapper.countAmountByTradeOrderId(logisticsOrder.getTOrderId());
+            //获取是否订单已经全部处理完成
+            List<Integer> orderStatusList = new ArrayList<>();
+            orderStatusList.add(LogisticsOrderEnum.TO_BE_PLANNED.getCode());
+            orderStatusList.add(LogisticsOrderEnum.PENDING_ORDER.getCode());
+            orderStatusList.add(LogisticsOrderEnum.WAIT_DELIVERY.getCode());
+            orderStatusList.add(LogisticsOrderEnum.IN_TRANSIT.getCode());
+            List<KwtLogisticsOrder> logisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
+                    .eq(KwtLogisticsOrder::getTOrderId, logisticsOrder.getTOrderId())
+                    .in(KwtLogisticsOrder::getStatus, statusList));
+            if (org.springframework.util.CollectionUtils.isEmpty(logisticsOrders)) {
+                tradeOrder.setIsAllComplete(true);
+            }
+            tradeOrder.setTOrderId(logisticsOrder.getTOrderId());
+            tradeOrder.setActualLoadAmount(map.get("totalLoadAmount"));
+            tradeOrder.setActualUnloadAmount(map.get("totalUnloadAmount"));
+            tradeOrder.setUpdateBy(LoginUserHolder.getUserId());
+            tradeOrder.setUpdateByName(LoginUserHolder.getUserName());
+            HttpResult httpResult = tradeOrderInfoService.completeLogisticsOrder(tradeOrder);
+            if (httpResult.getCode() != HttpStatus.SUCCESS_CODE) {
+                log.info("贸易订单手动完结订单异常,传递信息:{},返回信息:{}", JSONObject.toJSONString(tradeOrder), JSONObject.toJSONString(httpResult));
+                throw new BusinessException("单据完结出现错误!");
+            }
+        }
+        //修改mongodb的数据
+        updateMongoDbByLogisticsOrder(logisticsOrder.getId(), orderFinishDTO, ignoreAmount);
+        if (!CollectionUtils.isEmpty(list) && list.size() > 0) {
+            for (Map<String, Object> map : list) {
+                updateMongoDbByLogisticsOrder(Long.parseLong(map.get("id").toString()), orderFinishDTO, new BigDecimal(map.get("ignoreAmount").toString()));
             }
         }
+//        /**完结订单-对应物流订单下子订单都要进行完结*/
+//        List<KwtLogisticsOrder> kwtLogisticsOrders = kwtLogisticsOrderMapper.selectList(new LambdaQueryWrapper<KwtLogisticsOrder>()
+//                .in(KwtLogisticsOrder::getPids, Long.parseLong(orderFinishDTO.getId())));
+//        if (CollectionUtils.isNotEmpty(kwtLogisticsOrders)) {
+//            for (KwtLogisticsOrder kwtLogisticsOrder : kwtLogisticsOrders) {
+//                String[] split = kwtLogisticsOrder.getPids().split(StringConstant.COMMA);
+//                if (split.length > NumberConstant.ONE) {
+//                    for (String s : split) {
+//                        if (String.valueOf(kwtLogisticsOrder.getId()).equals(s)) {
+//                            //本身订单
+//                            //只存在当前订单无分包订单
+//                            /**单据完结修改状态以及数据*/
+//                            updateDataByItself(logisticsOrder, orderFinishDTO);
+//                        } else {
+//                            //修改分包后的订单-代表存在分包订单
+//                            /**单据完结修改状态以及数据*/
+//                            updateDataBySubset(orderFinishDTO, s);
+//                        }
+//                    }
+//                } else {
+//                    //只存在当前订单无分包订单
+//                    /**单据完结修改状态以及数据*/
+//                    updateDataByItself(logisticsOrder, orderFinishDTO);
+//                }
+//            }
+//        }
         return HttpResult.ok("承运订单-分包托运完结订单成功");
     }
 
+    private void updateLogisticOrderAndTrack(Long lOrderId, OrderFinishDTO orderFinishDTO, BigDecimal ignoreAmount) {
+        Integer code = LogisticsOrderEnum.HAVE_FINISHED.getCode();
+        kwtLogisticsOrderMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrder>()
+                .set(KwtLogisticsOrder::getStatus, code)
+                .set(KwtLogisticsOrder::getUpdateBy, LoginUserHolder.getUserId())
+                .set(KwtLogisticsOrder::getIgnoreAmount, ignoreAmount)
+                .set(KwtLogisticsOrder::getUpdateTime, new Date())
+                .eq(KwtLogisticsOrder::getId, lOrderId)
+        );
+        KwtLogisticsOrderTrack track = logisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
+                .eq(KwtLogisticsOrderTrack::getLOrderId, lOrderId).eq(KwtLogisticsOrderTrack::getStatus, code)
+        );
+        if (track != null) {
+            logisticsOrderTrackMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderTrack>()
+                    .set(KwtLogisticsOrderTrack::getUpdateBy, LoginUserHolder.getUserId())
+                    .set(KwtLogisticsOrderTrack::getUpdateTime, new Date())
+                    .set(KwtLogisticsOrderTrack::getRemark, orderFinishDTO.getRemark())
+                    .eq(KwtLogisticsOrderTrack::getId, track.getId())
+            );
+        } else {
+            KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
+            orderTrack.setId(new IdWorker(NumberConstant.ONE).nextId());
+            orderTrack.setLOrderId(lOrderId);
+            orderTrack.setRemark(orderFinishDTO.getRemark());
+            orderTrack.setStatus(code);
+            orderTrack.setCreateBy(LoginUserHolder.getUserId());
+            orderTrack.setCreateTime(new Date());
+            orderTrack.setUpdateBy(LoginUserHolder.getUserId());
+            orderTrack.setUpdateTime(new Date());
+            orderTrack.setDelFlag(NumberConstant.ZERO);
+            logisticsOrderTrackMapper.insert(orderTrack);
+        }
+    }
+
+    /**
+     * 根据物流订单修改mongodb数据
+     *
+     * @param id             物流订单id
+     * @param orderFinishDTO
+     * @param ignoreAmount   剩余量
+     */
+    private void updateMongoDbByLogisticsOrder(Long id, OrderFinishDTO orderFinishDTO, BigDecimal ignoreAmount) {
+        //更新mongodb
+        SckwLogisticsOrder lOrder = new SckwLogisticsOrder();
+        lOrder.set_id(id);
+        lOrder.setLOrderId(id);
+        lOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus());
+        lOrder.setUpdateTime(new Date());
+        lOrder.setUpdateBy(LoginUserHolder.getUserId());
+        lOrder.setUpdateByName(LoginUserHolder.getUserName());
+        lOrder.setTotalLoadAmount(orderFinishDTO.getLoadAmount());
+        lOrder.setTotalUnloadAmount(orderFinishDTO.getUnloadAmount());
+        lOrder.setIgnoreAmount(ignoreAmount);
+        //rabbitMq业务汇总数据发送/消费对象
+        SckwBusSum busSum = new SckwBusSum();
+        //业务汇总类型
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        //操作对象(1新增/2修改/3替换数据)
+        busSum.setMethod(2);
+        //业务汇总数据对象
+        busSum.setObject(lOrder);
+        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+        busSum.setMethod(NumberConstant.TWO);
+        streamBridge.send("sckw-busSum", JSON.toJSONString(busSum));
+    }
 
     /**
      * 承运订单-分包托运-完结订单-修改本身数据
@@ -1150,39 +1280,55 @@ public class AcceptCarriageOrderService {
      * @param logisticsOrder 本身物流订单数据
      * @param orderFinishDTO 页面传递数据
      */
-    private void updateDataByItself(KwtLogisticsOrder logisticsOrder, OrderFinishDTO orderFinishDTO) {
+    private void updateDataByItself(KwtLogisticsOrder logisticsOrder, OrderFinishDTO orderFinishDTO, BigDecimal ignoreAmount) {
         logisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
         logisticsOrder.setLoadAmount(orderFinishDTO.getLoadAmount());
         logisticsOrder.setUnloadAmount(orderFinishDTO.getUnloadAmount());
         logisticsOrder.setUpdateBy(LoginUserHolder.getUserId());
         logisticsOrder.setUpdateTime(new Date());
         logisticsOrder.setRemark(orderFinishDTO.getRemark());
+        logisticsOrder.setTotalLoadAmount(orderFinishDTO.getLoadAmount());
+        logisticsOrder.setTotalUnloadAmount(orderFinishDTO.getUnloadAmount());
+        logisticsOrder.setIgnoreAmount(ignoreAmount);
         kwtLogisticsOrderMapper.updateById(logisticsOrder);
-        KwtLogisticsOrderTrack track = new KwtLogisticsOrderTrack();
-        track.setId(new IdWorker(NumberConstant.ONE).nextId());
-        track.setLOrderId(logisticsOrder.getId());
-        track.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
-        track.setCreateTime(new Date());
-        track.setRemark(orderFinishDTO.getRemark());
-        track.setCreateBy(LoginUserHolder.getUserId());
-        track.setUpdateBy(LoginUserHolder.getUserId());
-        track.setUpdateTime(new Date());
-        logisticsOrderTrackMapper.insert(track);
-        /**单据完结修改Mongodb*/
-        SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
-        updateParam.setLOrderId(Long.parseLong(orderFinishDTO.getId()))
-                .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
-                .setUpdateBy(LoginUserHolder.getUserId())
-                .setUpdateByName(LoginUserHolder.getUserName())
-                .setUpdateTime(new Date())
-                .setLoadAmount(orderFinishDTO.getLoadAmount())
-                .setUnloadAmount(orderFinishDTO.getUnloadAmount())
-        ;
-        SckwBusSum busSum = new SckwBusSum();
-        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
-        busSum.setMethod(2);
-        busSum.setObject(updateParam);
-        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
+        KwtLogisticsOrderTrack track = logisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
+                .eq(KwtLogisticsOrderTrack::getLOrderId, logisticsOrder.getId()).eq(KwtLogisticsOrderTrack::getStatus, LogisticsOrderEnum.HAVE_FINISHED.getCode())
+        );
+        if (track != null) {
+            logisticsOrderTrackMapper.update(null, new LambdaUpdateWrapper<KwtLogisticsOrderTrack>()
+                    .set(KwtLogisticsOrderTrack::getUpdateBy, LoginUserHolder.getUserId())
+                    .set(KwtLogisticsOrderTrack::getUpdateTime, new Date())
+                    .set(KwtLogisticsOrderTrack::getRemark, orderFinishDTO.getRemark())
+                    .eq(KwtLogisticsOrderTrack::getId, track.getId())
+            );
+        } else {
+            KwtLogisticsOrderTrack orderTrack = new KwtLogisticsOrderTrack();
+            orderTrack.setId(new IdWorker(NumberConstant.ONE).nextId());
+            orderTrack.setLOrderId(logisticsOrder.getId());
+            orderTrack.setRemark(orderFinishDTO.getRemark());
+            orderTrack.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+            orderTrack.setCreateBy(LoginUserHolder.getUserId());
+            orderTrack.setCreateTime(new Date());
+            orderTrack.setUpdateBy(LoginUserHolder.getUserId());
+            orderTrack.setUpdateTime(new Date());
+            orderTrack.setDelFlag(NumberConstant.ZERO);
+            logisticsOrderTrackMapper.insert(orderTrack);
+        }
+//        /**单据完结修改Mongodb*/
+//        SckwLogisticsOrder updateParam = new SckwLogisticsOrder();
+//        updateParam.setLOrderId(Long.parseLong(orderFinishDTO.getId()))
+//                .setStatus(LogisticsOrderEnum.HAVE_FINISHED.getStatus())
+//                .setUpdateBy(LoginUserHolder.getUserId())
+//                .setUpdateByName(LoginUserHolder.getUserName())
+//                .setUpdateTime(new Date())
+//                .setLoadAmount(orderFinishDTO.getLoadAmount())
+//                .setUnloadAmount(orderFinishDTO.getUnloadAmount())
+//        ;
+//        SckwBusSum busSum = new SckwBusSum();
+//        busSum.setBusSumType(BusinessTypeEnum.LOGISTICS_ORDER_TYPE.getName());
+//        busSum.setMethod(2);
+//        busSum.setObject(updateParam);
+//        streamBridge.send("sckw-busSum", com.alibaba.fastjson2.JSON.toJSONString(busSum));
     }
 
     /**
@@ -1368,7 +1514,7 @@ public class AcceptCarriageOrderService {
             orderStatus = LogisticsOrderEnum.WAIT_DELIVERY.getCode();
         } else {
             log.info("承运订单创建订单异常");
-            throw new RuntimeException("自建订单异常");
+            throw new BusinessException("自建订单异常");
         }
         /**2023-08-04 自建订单商品可以不需要关联查询*/
 //        /**获取商品信息*/

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

@@ -952,7 +952,7 @@ public class ConsignOrderService {
             orderStatus = LogisticsOrderEnum.WAIT_DELIVERY.getCode();
         } else {
             log.info("托运订单创建订单异常");
-            throw new RuntimeException("自建订单异常");
+            throw new BusinessException("自建订单异常");
         }
         saveConsignLogisticsOrder(addOrderDTO, lOrderId, orderStatus, lOrderNo);
         saveConsignLogisticsOrderAddress(addOrderDTO, lOrderId);

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

@@ -153,18 +153,18 @@ public class LogisticsConsignmentService {
         OrderDetailRes tradeOrder = tradeOrderInfoService.getOrderDetailById(Long.parseLong(bo.getTOrderId()));
         if (tradeOrder == null) {
             log.error("订单id查找失败:{}", bo.getTOrderId());
-            throw new RuntimeException("单据错误,数据不存在");
+            throw new BusinessException("单据错误,数据不存在");
         }
         KwtLogisticsOrder order = new KwtLogisticsOrder();
         if (!bo.getIsFullDose()) {
             BigDecimal amount = bo.getAmount();
             BigDecimal carryingCapacity = bo.getCarryingCapacity();
-            if (carryingCapacity.compareTo(amount) < 0) {
+            if (amount.compareTo(carryingCapacity) < 0) {
                 log.error("可分配量分配错误:{}", bo.getTOrderId());
-                throw new RuntimeException("可分配量分配错误");
+                throw new BusinessException("可分配量分配错误");
             }
             if (ArrayUtil.isEmpty(bo.getCarryingCapacity())) {
-                throw new RuntimeException("不是全量分配时,分配量不能为空!");
+                throw new BusinessException("不是全量分配时,分配量不能为空!");
             }
             order.setAmount(bo.getCarryingCapacity());
         } else {

+ 1 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java

@@ -176,6 +176,7 @@ public class TransportCommonService {
             orderDetailVO.setCarrierContacts(unitTwo.getContacts());
             orderDetailVO.setCarrierPhone(unitTwo.getPhone());
         }
+        orderDetailVO.setGoodsId(String.valueOf(orderGoods == null ? null : orderGoods.getGoodsId()));
         orderDetailVO.setGoodsName(orderGoods == null ? null : orderGoods.getGoodsName());
         orderDetailVO.setNumber(logisticsOrder.getAmount() == null ? null : String.valueOf(logisticsOrder.getAmount()));
         orderDetailVO.setPrice(logisticsOrder.getPrice() == null ? null : String.valueOf(logisticsOrder.getPrice()));