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

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

donglang 3 недель назад
Родитель
Сommit
36f09eb789
14 измененных файлов с 293 добавлено и 76 удалено
  1. 0 12
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/feign/TradeOrderApi.java
  2. 28 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/feign/WalletApi.java
  3. 26 0
      sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/WalletFreeze.java
  4. 0 25
      sckw-modules/sckw-order/src/main/java/com/sckw/order/feign/TradeOrderApiImpl.java
  5. 29 6
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java
  6. 1 1
      sckw-modules/sckw-payment/pom.xml
  7. 19 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpBizWalletController.java
  8. 143 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/wallet/KwpBizWalletService.java
  9. 12 9
      sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java
  10. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CapacityVo.java
  11. 3 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderCirculateRepository.java
  12. 27 13
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java
  13. 1 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java
  14. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

+ 0 - 12
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/feign/TradeOrderApi.java

@@ -1,21 +1,9 @@
 package com.sckw.order.api.feign;
 package com.sckw.order.api.feign;
 
 
-import com.sckw.order.api.model.TradeOrderPara;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-
 /**
 /**
  * @author xucaiqin
  * @author xucaiqin
  * @date 2025-12-01 15:26:28
  * @date 2025-12-01 15:26:28
  */
  */
-@FeignClient(name = "sckw-order-ai", contextId = "tradeOrderApi")
 public interface TradeOrderApi {
 public interface TradeOrderApi {
-    /**
-     * 更新装卸货量
-     * @param tradeOrderPara
-     * @return
-     */
-    @GetMapping(value = "/trade/order/update")
-    void updateLoad(TradeOrderPara tradeOrderPara);
 
 
 }
 }

+ 28 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/feign/WalletApi.java

@@ -0,0 +1,28 @@
+package com.sckw.payment.api.feign;
+
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.payment.api.model.WalletFreeze;
+import jakarta.validation.Valid;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@FeignClient(name = "sckw-ng-payment", path = "/biz/wallet")
+public interface WalletApi {
+    /**
+     * 下单时冻结金额
+     *
+     */
+    @PostMapping("/freezeMoney")
+    BaseResult<Boolean> freezeMoney(@RequestBody @Valid WalletFreeze walletFreeze);
+    @PostMapping("/unfreezeMoney")
+    BaseResult<Boolean> unfreezeMoney(@RequestBody @Valid WalletFreeze walletFreeze);
+
+    /**
+     * 结算
+     *
+     */
+    @PostMapping("/dealMoney")
+    BaseResult<Boolean> dealMoney(@RequestBody @Valid WalletFreeze walletFreeze);
+
+}

+ 26 - 0
sckw-modules-api/sckw-payment-api/src/main/java/com/sckw/payment/api/model/WalletFreeze.java

@@ -0,0 +1,26 @@
+package com.sckw.payment.api.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class WalletFreeze implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 5036501461520398876L;
+
+    private Long buyEntId;
+    private Long saleEntId;
+    private BigDecimal money;
+    private Long tTradeOrderId;
+    private String orderNo;
+}

+ 0 - 25
sckw-modules/sckw-order/src/main/java/com/sckw/order/feign/TradeOrderApiImpl.java

@@ -1,25 +0,0 @@
-package com.sckw.order.feign;
-
-import com.sckw.order.api.feign.TradeOrderApi;
-import com.sckw.order.api.model.TradeOrderPara;
-import com.sckw.order.api.model.TradeOrderVo;
-import com.sckw.order.serivce.KwoTradeOrderService;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-/**
- * @author xucaiqin
- * @date 2025-12-01 15:26:28
- */
-@RestController
-@RequiredArgsConstructor
-public class TradeOrderApiImpl implements TradeOrderApi {
-    private final KwoTradeOrderService kwoTradeOrderService;
-
-
-    @Override
-    public void updateLoad(TradeOrderPara tradeOrderPara) {
-    }
-}

+ 29 - 6
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -33,6 +33,7 @@ import com.sckw.core.model.vo.TableTop;
 import com.sckw.core.utils.*;
 import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.TruckDispatchCoefficientVO;
 import com.sckw.fleet.api.model.vo.TruckDispatchCoefficientVO;
@@ -53,6 +54,8 @@ import com.sckw.order.model.vo.res.OrderDetailRes;
 import com.sckw.order.model.vo.res.UnitInfoDetailRes;
 import com.sckw.order.model.vo.res.UnitInfoDetailRes;
 import com.sckw.payment.api.dubbo.PayCenterDubboService;
 import com.sckw.payment.api.dubbo.PayCenterDubboService;
 import com.sckw.payment.api.dubbo.PaymentDubboService;
 import com.sckw.payment.api.dubbo.PaymentDubboService;
+import com.sckw.payment.api.feign.WalletApi;
+import com.sckw.payment.api.model.WalletFreeze;
 import com.sckw.payment.api.model.constant.ChannelEnum;
 import com.sckw.payment.api.model.constant.ChannelEnum;
 import com.sckw.payment.api.model.dto.WalletDto;
 import com.sckw.payment.api.model.dto.WalletDto;
 import com.sckw.payment.api.model.dto.common.R;
 import com.sckw.payment.api.model.dto.common.R;
@@ -139,7 +142,7 @@ public class KwoTradeOrderService {
     private final KwoTradeOrderGoodsUnitService kwoTradeOrderGoodsUnitService;
     private final KwoTradeOrderGoodsUnitService kwoTradeOrderGoodsUnitService;
     private final KwoTradeOrderAmountService tradeOrderAmountService;
     private final KwoTradeOrderAmountService tradeOrderAmountService;
     private final KwoTradeOrderTransportService kwoTradeOrderTransportService;
     private final KwoTradeOrderTransportService kwoTradeOrderTransportService;
-
+    private final WalletApi walletApi;
     @Value("${url.order.list.valet.pc}")
     @Value("${url.order.list.valet.pc}")
     private String pcValetListUrl;
     private String pcValetListUrl;
 
 
@@ -1916,12 +1919,17 @@ public class KwoTradeOrderService {
         KwpGoods goodsById = goodsInfoService.getGoodsById(tradeOrderParam.getGoodsId());
         KwpGoods goodsById = goodsInfoService.getGoodsById(tradeOrderParam.getGoodsId());
 
 
         TradeContractResDto tradeContractResDto = checkPara(tradeOrderParam, order, goodsById);
         TradeContractResDto tradeContractResDto = checkPara(tradeOrderParam, order, goodsById);
+        WalletFreeze walletFreeze = new WalletFreeze();
+        walletFreeze.setOrderNo(order.getTOrderNo());
+        walletFreeze.setMoney(order.getPrice());
+
         //商品地址信息
         //商品地址信息
         AddressInfoDetail goodsAddress = goodsInfoService.getGoodsAddress(tradeOrderParam.getGoodsId());
         AddressInfoDetail goodsAddress = goodsInfoService.getGoodsAddress(tradeOrderParam.getGoodsId());
         if (Objects.isNull(goodsAddress)) {
         if (Objects.isNull(goodsAddress)) {
             throw new BusinessException("商品发货地址信息不存在");
             throw new BusinessException("商品发货地址信息不存在");
         }
         }
         kwoTradeOrderMapper.insert(order);//贸易订单
         kwoTradeOrderMapper.insert(order);//贸易订单
+        walletFreeze.setTTradeOrderId(order.getId());
 
 
         GoodsInfoDto goodsInfoDto = tradeContractResDto.getGoodsInfoDto();//贸易合同,下合同关联的商品信息
         GoodsInfoDto goodsInfoDto = tradeContractResDto.getGoodsInfoDto();//贸易合同,下合同关联的商品信息
         KwoTradeOrderGoods kwoTradeOrderGoods = new KwoTradeOrderGoods();
         KwoTradeOrderGoods kwoTradeOrderGoods = new KwoTradeOrderGoods();
@@ -2032,15 +2040,21 @@ public class KwoTradeOrderService {
             unit.setId(new IdWorker(1).nextId());
             unit.setId(new IdWorker(1).nextId());
             unit.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setTopEntId(e.getEntId());
             unit.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setTopEntId(e.getEntId());
             unit.setUnitType(StrUtil.equals(e.getUnitType(), "1") ? "2" : "1");//贸易合同和订单的单位类型相反
             unit.setUnitType(StrUtil.equals(e.getUnitType(), "1") ? "2" : "1");//贸易合同和订单的单位类型相反
+            if (StrUtil.equals(unit.getUnitType(), "1")) {
+                walletFreeze.setBuyEntId(unit.getEntId());
+            }
+            if (StrUtil.equals(unit.getUnitType(), "2")) {
+                walletFreeze.setSaleEntId(unit.getEntId());
+            }
             list.add(unit);
             list.add(unit);
         });
         });
         kwoTradeOrderUnitService.insertBatch(list);
         kwoTradeOrderUnitService.insertBatch(list);
+        //钱包
+        BaseResult<Boolean> booleanBaseResult = walletApi.freezeMoney(walletFreeze);
+        if (booleanBaseResult.getCode() != 60200) {
+            throw new BusinessException(booleanBaseResult.getMessage());
+        }
 
 
-        //扣减库存
-//        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) {
     private TradeContractResDto checkPara(TradeOrderParam tradeOrderParam, KwoTradeOrder order, KwpGoods goodsById) {
@@ -2130,6 +2144,15 @@ public class KwoTradeOrderService {
 
 
 
 
         if (Objects.equals(tradeOrderAuditParam.getStatus(), 2)) {
         if (Objects.equals(tradeOrderAuditParam.getStatus(), 2)) {
+            //钱包退回金额
+            WalletFreeze walletFreeze = new WalletFreeze();
+            walletFreeze.setTTradeOrderId(kwoTradeOrder.getId());
+            walletFreeze.setOrderNo(kwoTradeOrder.getTOrderNo());
+            BaseResult<Boolean> booleanBaseResult = walletApi.unfreezeMoney(walletFreeze);
+            if (booleanBaseResult.getCode() != 60200) {
+                throw new BusinessException(booleanBaseResult.getMessage());
+            }
+
             KwoTradeOrderTrack kwoTradeOrderTrack = new KwoTradeOrderTrack();
             KwoTradeOrderTrack kwoTradeOrderTrack = new KwoTradeOrderTrack();
             kwoTradeOrderTrack.setTOrderId(kwoTradeOrder.getId());
             kwoTradeOrderTrack.setTOrderId(kwoTradeOrder.getId());
             kwoTradeOrderTrack.setTOrderNo(kwoTradeOrder.getTOrderNo());
             kwoTradeOrderTrack.setTOrderNo(kwoTradeOrder.getTOrderNo());

+ 1 - 1
sckw-modules/sckw-payment/pom.xml

@@ -147,4 +147,4 @@
         </plugins>
         </plugins>
     </build>
     </build>
 
 
-</project>
+</project>

+ 19 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/KwpBizWalletController.java

@@ -4,6 +4,7 @@ package com.sckw.payment.controller;
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.excel.utils.ExcelUtil;
+import com.sckw.payment.api.model.WalletFreeze;
 import com.sckw.payment.repose.KwpBizWalletPageResponse;
 import com.sckw.payment.repose.KwpBizWalletPageResponse;
 import com.sckw.payment.repose.KwpBizWalletPrepayPageResponse;
 import com.sckw.payment.repose.KwpBizWalletPrepayPageResponse;
 import com.sckw.payment.repose.vo.KwpBizWalletPrepayExcelVO;
 import com.sckw.payment.repose.vo.KwpBizWalletPrepayExcelVO;
@@ -122,6 +123,24 @@ public class KwpBizWalletController {
         ExcelUtil.downData(response, KwpBizWalletPrepayExcelVO.class, excelVOList);
         ExcelUtil.downData(response, KwpBizWalletPrepayExcelVO.class, excelVOList);
     }
     }
 
 
+    /**
+     * 冻结金额
+     */
+    @Operation(summary = "冻结金额", description = "冻结金额")
+    @PostMapping("/freezeMoney")
+    public BaseResult<Boolean> freezeMoney(@RequestBody @Validated WalletFreeze walletFreeze) {
+        return kwpBizWalletService.freezeMoney(walletFreeze);
+    }
 
 
+    @Operation(summary = "解冻金额", description = "解冻金额")
+    @PostMapping("/unfreezeMoney")
+    public BaseResult<Boolean> unfreezeMoney(@RequestBody @Validated WalletFreeze walletFreeze) {
+        return kwpBizWalletService.unfreezeMoney(walletFreeze);
+    }
 
 
+    @Operation(summary = "结算金额", description = "结算金额")
+    @PostMapping("/dealMoney")
+    public BaseResult<Boolean> dealMoney(@RequestBody @Validated WalletFreeze walletFreeze) {
+        return kwpBizWalletService.dealMoney(walletFreeze);
+    }
 }
 }

+ 143 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/wallet/KwpBizWalletService.java

@@ -1,6 +1,7 @@
 package com.sckw.payment.service.wallet;
 package com.sckw.payment.service.wallet;
 
 
-
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson2.JSONObject;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@@ -11,7 +12,9 @@ import com.sckw.core.common.enums.StringConstant;
 import com.sckw.core.model.enums.EntTypeEnum;
 import com.sckw.core.model.enums.EntTypeEnum;
 import com.sckw.core.model.enums.SystemTypeEnum;
 import com.sckw.core.model.enums.SystemTypeEnum;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.result.PageDataResult;
 import com.sckw.core.web.response.result.PageDataResult;
+import com.sckw.payment.api.model.WalletFreeze;
 import com.sckw.payment.enums.PrepayTypEnum;
 import com.sckw.payment.enums.PrepayTypEnum;
 import com.sckw.payment.model.KwpBizWallet;
 import com.sckw.payment.model.KwpBizWallet;
 import com.sckw.payment.model.KwpBizWalletPrepay;
 import com.sckw.payment.model.KwpBizWalletPrepay;
@@ -244,6 +247,7 @@ public class KwpBizWalletService {
 
 
     /**
     /**
      * 过滤条件
      * 过滤条件
+     *
      * @param request
      * @param request
      * @param wallet
      * @param wallet
      * @return
      * @return
@@ -281,7 +285,7 @@ public class KwpBizWalletService {
         if (entId == null) {
         if (entId == null) {
             return "";
             return "";
         }
         }
-        KwsEnterpriseResDto enterpriseResDto= remoteSystemService.queryEnterpriseByEntId(entId);
+        KwsEnterpriseResDto enterpriseResDto = remoteSystemService.queryEnterpriseByEntId(entId);
         if (enterpriseResDto == null) {
         if (enterpriseResDto == null) {
             return "";
             return "";
         }
         }
@@ -311,6 +315,7 @@ public class KwpBizWalletService {
 
 
     /**
     /**
      * 新增钱包校验
      * 新增钱包校验
+     *
      * @param request
      * @param request
      */
      */
     private void checkAddWallet(KwpBizWalletSaveRequest request) {
     private void checkAddWallet(KwpBizWalletSaveRequest request) {
@@ -467,5 +472,141 @@ public class KwpBizWalletService {
         return walletPrepayExcelVO;
         return walletPrepayExcelVO;
     }
     }
 
 
+    @Transactional(rollbackFor = Exception.class)
+    public BaseResult<Boolean> freezeMoney(WalletFreeze walletFreeze) {
+        log.info("冻结钱包:{}", JSONObject.toJSONString(walletFreeze));
+        KwpBizWallet one = kwpBizWalletRepository.getOne(new LambdaQueryWrapper<KwpBizWallet>()
+                .eq(KwpBizWallet::getSupEntId, walletFreeze.getSaleEntId())
+                .eq(KwpBizWallet::getProEntId, walletFreeze.getBuyEntId()).eq(KwpBizWallet::getState, 1)
+        );
+        if (Objects.isNull(one)) {
+            return BaseResult.failed("钱包不存在,请核实");
+        }
+        BigDecimal amount = one.getAmount();
+        if (NumberUtil.isLess(amount, walletFreeze.getMoney())) {
+            return BaseResult.failed("可用余额不足");
+        }
+        one.setAmount(NumberUtil.sub(amount, walletFreeze.getMoney()));
+        one.setPrepayAmount(NumberUtil.add(one.getPrepayAmount(), walletFreeze.getMoney()));
+        one.setUpdateUser(LoginUserHolder.getUserName());
+        kwpBizWalletRepository.updateById(one);
+        //新增订单
+        KwpBizWalletPrepay kwpBizWalletPrepay = new KwpBizWalletPrepay();
+        kwpBizWalletPrepay.setWalletId(one.getId());
+        kwpBizWalletPrepay.setOrderId(walletFreeze.getTTradeOrderId());
+        kwpBizWalletPrepay.setChangeAmount(walletFreeze.getMoney());
+        kwpBizWalletPrepay.setAmount(one.getAmount());
+        kwpBizWalletPrepay.setPrepayAmount(one.getPrepayAmount());
+        kwpBizWalletPrepay.setType(2);
+        kwpBizWalletPrepay.setRemark(StrUtil.format("[订单号:{}]冻结", walletFreeze.getOrderNo()));
+        kwpBizWalletPrepay.setVoucherUrl("");
+        kwpBizWalletPrepay.setCreateTime(new Date());
+        kwpBizWalletPrepay.setUpdateTime(new Date());
+        kwpBizWalletPrepay.setCreateUser(LoginUserHolder.getUserName());
+        kwpBizWalletPrepay.setUpdateUser(LoginUserHolder.getUserName());
+        kwpBizWalletPrepayRepository.save(kwpBizWalletPrepay);
+        return BaseResult.success();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public BaseResult<Boolean> dealMoney(WalletFreeze walletFreeze) {
+        Long tTradeOrderId = walletFreeze.getTTradeOrderId();
+        KwpBizWalletPrepay one = kwpBizWalletPrepayRepository.getOne(new LambdaQueryWrapper<KwpBizWalletPrepay>()
+                .eq(KwpBizWalletPrepay::getOrderId, tTradeOrderId)
+                .eq(KwpBizWalletPrepay::getType, 2)
+                .last("limit 1")
+        );
+        if (Objects.isNull(one)) {
+            return BaseResult.failed("冻结订单不存在");
+        }
+
+        KwpBizWallet wallet = kwpBizWalletRepository.getById(one.getWalletId());
+        if (Objects.isNull(wallet) || Objects.equals(wallet.getState(), 0)) {
+            return BaseResult.failed("钱包不存在或状态异常");
+        }
+        BigDecimal changeAmount = one.getChangeAmount();//冻结金额
+        //钱包实际可用
+        BigDecimal amount = wallet.getAmount();
+        //新增解冻订单
+        amount = NumberUtil.add(amount, changeAmount);
+        KwpBizWalletPrepay kwpBizWalletPrepay = new KwpBizWalletPrepay();
+        kwpBizWalletPrepay.setWalletId(one.getId());
+        kwpBizWalletPrepay.setOrderId(walletFreeze.getTTradeOrderId());
+        kwpBizWalletPrepay.setChangeAmount(changeAmount);
+        kwpBizWalletPrepay.setAmount(amount);
+        kwpBizWalletPrepay.setPrepayAmount(NumberUtil.sub(wallet.getPrepayAmount(), changeAmount));
+        kwpBizWalletPrepay.setType(3);
+        kwpBizWalletPrepay.setRemark(StrUtil.format("[{}][结算]解冻订单总金额", walletFreeze.getOrderNo()));
+        kwpBizWalletPrepay.setVoucherUrl("");
+        kwpBizWalletPrepay.setCreateTime(new Date());
+        kwpBizWalletPrepay.setUpdateTime(new Date());
+        kwpBizWalletPrepay.setCreateUser(LoginUserHolder.getUserName());
+        kwpBizWalletPrepay.setUpdateUser(LoginUserHolder.getUserName());
+        kwpBizWalletPrepayRepository.save(kwpBizWalletPrepay);
+
+        //新增消费订单
+        KwpBizWalletPrepay kwpBizWalletPrepay2 = new KwpBizWalletPrepay();
+        kwpBizWalletPrepay2.setWalletId(one.getId());
+        kwpBizWalletPrepay2.setOrderId(walletFreeze.getTTradeOrderId());
+        kwpBizWalletPrepay2.setChangeAmount(walletFreeze.getMoney());
+        kwpBizWalletPrepay2.setAmount(NumberUtil.sub(amount, walletFreeze.getMoney()));
+        kwpBizWalletPrepay2.setPrepayAmount(kwpBizWalletPrepay.getPrepayAmount());
+        kwpBizWalletPrepay2.setType(4);
+        kwpBizWalletPrepay2.setRemark(StrUtil.format("[{}][结算]扣除订单总金额", walletFreeze.getOrderNo()));
+        kwpBizWalletPrepay2.setVoucherUrl("");
+        kwpBizWalletPrepay2.setCreateTime(new Date());
+        kwpBizWalletPrepay2.setUpdateTime(new Date());
+        kwpBizWalletPrepay2.setCreateUser(LoginUserHolder.getUserName());
+        kwpBizWalletPrepay2.setUpdateUser(LoginUserHolder.getUserName());
+        kwpBizWalletPrepayRepository.save(kwpBizWalletPrepay);
+
+        wallet.setAmount(kwpBizWalletPrepay2.getAmount());
+        wallet.setPrepayAmount(kwpBizWalletPrepay2.getPrepayAmount());
+        kwpBizWalletRepository.updateById(wallet);
+        return BaseResult.success();
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public BaseResult<Boolean> unfreezeMoney(WalletFreeze walletFreeze) {
+        log.info("解冻钱包:{}", JSONObject.toJSONString(walletFreeze));
+        Long tTradeOrderId = walletFreeze.getTTradeOrderId();
+        KwpBizWalletPrepay one = kwpBizWalletPrepayRepository.getOne(new LambdaQueryWrapper<KwpBizWalletPrepay>()
+                .eq(KwpBizWalletPrepay::getOrderId, tTradeOrderId)
+                .eq(KwpBizWalletPrepay::getType, 2)
+                .last("limit 1")
+        );
+        if (Objects.isNull(one)) {
+            return BaseResult.failed("冻结订单不存在");
+        }
 
 
+        KwpBizWallet wallet = kwpBizWalletRepository.getById(one.getWalletId());
+        if (Objects.isNull(wallet) || Objects.equals(wallet.getState(), 0)) {
+            return BaseResult.failed("钱包不存在或状态异常");
+        }
+        BigDecimal changeAmount = one.getChangeAmount();//冻结金额
+        //钱包实际可用
+        BigDecimal amount = wallet.getAmount();
+        //新增解冻订单
+        amount = NumberUtil.add(amount, changeAmount);
+        KwpBizWalletPrepay kwpBizWalletPrepay = new KwpBizWalletPrepay();
+        kwpBizWalletPrepay.setWalletId(one.getId());
+        kwpBizWalletPrepay.setOrderId(walletFreeze.getTTradeOrderId());
+        kwpBizWalletPrepay.setChangeAmount(changeAmount);
+        kwpBizWalletPrepay.setAmount(amount);
+        kwpBizWalletPrepay.setPrepayAmount(NumberUtil.sub(wallet.getPrepayAmount(), changeAmount));
+        kwpBizWalletPrepay.setType(3);
+        kwpBizWalletPrepay.setRemark(StrUtil.format("[订单号:{}]解冻", walletFreeze.getOrderNo()));
+        kwpBizWalletPrepay.setVoucherUrl("");
+        kwpBizWalletPrepay.setCreateTime(new Date());
+        kwpBizWalletPrepay.setUpdateTime(new Date());
+        kwpBizWalletPrepay.setCreateUser(LoginUserHolder.getUserName());
+        kwpBizWalletPrepay.setUpdateUser(LoginUserHolder.getUserName());
+        kwpBizWalletPrepayRepository.save(kwpBizWalletPrepay);
+
+
+        wallet.setAmount(amount);
+        wallet.setPrepayAmount(kwpBizWalletPrepay.getPrepayAmount());
+        kwpBizWalletRepository.updateById(wallet);
+        return BaseResult.success();
+    }
 }
 }

+ 12 - 9
sckw-modules/sckw-product/src/main/java/com/sckw/product/service/KwpGoodsService.java

@@ -389,7 +389,7 @@ public class KwpGoodsService {
                 DictTypeEnum.GOODS_STATUS.getType(),
                 DictTypeEnum.GOODS_STATUS.getType(),
                 DictTypeEnum.ADDRESS_TYPE.getType(),
                 DictTypeEnum.ADDRESS_TYPE.getType(),
                 DictTypeEnum.GOODS_SPEC.getType()
                 DictTypeEnum.GOODS_SPEC.getType()
-                ));
+        ));
         Map<String, String> productNameMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<String, String> productNameMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<String, String> unitMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<String, String> unitMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<String, String> goodsStatusMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         Map<String, String> goodsStatusMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
@@ -1018,14 +1018,18 @@ public class KwpGoodsService {
             );
             );
         }
         }
         wrapper.eq(StrUtil.isNotBlank(params.getSpec()), KwpGoods::getSpec, params.getSpec());
         wrapper.eq(StrUtil.isNotBlank(params.getSpec()), KwpGoods::getSpec, params.getSpec());
-        if (Objects.nonNull(params.getSign())) {//查询签约或未签约商品
-            List<Long> longs = tradeOrderInfoService.querySignGoods(LoginUserHolder.getEntId());
-            if (Objects.equals(params.getSign(), 1)) {
-                wrapper.in(CollUtil.isNotEmpty(longs), KwpGoods::getId, longs);
-            } else {
-                wrapper.notIn(CollUtil.isNotEmpty(longs), KwpGoods::getId, longs);
+        Long entId = LoginUserHolder.getEntId();
+        if (Objects.nonNull(entId)) {
+            if (Objects.nonNull(params.getSign())) {//查询签约或未签约商品
+                List<Long> longs = tradeOrderInfoService.querySignGoods(LoginUserHolder.getEntId());
+                if (Objects.equals(params.getSign(), 1)) {
+                    wrapper.in(CollUtil.isNotEmpty(longs), KwpGoods::getId, longs);
+                } else {
+                    wrapper.notIn(CollUtil.isNotEmpty(longs), KwpGoods::getId, longs);
+                }
             }
             }
         }
         }
+
         if (Objects.nonNull(params.getContractId())) {
         if (Objects.nonNull(params.getContractId())) {
             List<Long> longs = remoteContractService.queryTradeContractInfo(params.getContractId());
             List<Long> longs = remoteContractService.queryTradeContractInfo(params.getContractId());
             wrapper.in(CollUtil.isNotEmpty(longs), KwpGoods::getId, longs);
             wrapper.in(CollUtil.isNotEmpty(longs), KwpGoods::getId, longs);
@@ -1056,7 +1060,7 @@ public class KwpGoodsService {
         Map<Long, String> entMap = entList.stream().collect(Collectors.toMap(EntCacheResDto::getId, EntCacheResDto::getFirmName, (k1, k2) -> k1));
         Map<Long, String> entMap = entList.stream().collect(Collectors.toMap(EntCacheResDto::getId, EntCacheResDto::getFirmName, (k1, k2) -> k1));
         Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.PRODUCT_NAME_TYPE.getType(),
         Map<String, Map<String, String>> dict = remoteSystemService.queryDictByType(List.of(DictTypeEnum.PRODUCT_NAME_TYPE.getType(),
                 DictTypeEnum.UNIT_TYPE.getType(), DictTypeEnum.GOODS_SPEC.getType()));
                 DictTypeEnum.UNIT_TYPE.getType(), DictTypeEnum.GOODS_SPEC.getType()));
-        Map<String, String> productNameMap, unitMap,specMap;
+        Map<String, String> productNameMap, unitMap, specMap;
         if (CollectionUtils.isNotEmpty(dict)) {
         if (CollectionUtils.isNotEmpty(dict)) {
             productNameMap = dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType());
             productNameMap = dict.get(DictTypeEnum.PRODUCT_NAME_TYPE.getType());
             unitMap = dict.get(DictTypeEnum.UNIT_TYPE.getType());
             unitMap = dict.get(DictTypeEnum.UNIT_TYPE.getType());
@@ -1066,7 +1070,6 @@ public class KwpGoodsService {
             unitMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
             unitMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
             specMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
             specMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
         }
         }
-        Long entId = LoginUserHolder.getEntId();
         list.forEach(e -> {
         list.forEach(e -> {
             BuildingMaterialsMarketList materials = BeanUtils.copyProperties(e, BuildingMaterialsMarketList.class);
             BuildingMaterialsMarketList materials = BeanUtils.copyProperties(e, BuildingMaterialsMarketList.class);
             KwpGoodsAddress address = addressMap.get(e.getId());
             KwpGoodsAddress address = addressMap.get(e.getId());

+ 2 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/CapacityVo.java

@@ -47,9 +47,9 @@ public class CapacityVo implements Serializable {
     @Schema(description = "累计卸货量")
     @Schema(description = "累计卸货量")
     private String unloadAmount;
     private String unloadAmount;
     /**
     /**
-     * 状态
+     * 最新状态
      */
      */
-    @Schema(description = "状态")
+    @Schema(description = "最新状态")
     private String status;
     private String status;
     /**
     /**
      * 状态描述
      * 状态描述

+ 3 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderCirculateRepository.java

@@ -22,12 +22,11 @@ import java.util.Set;
  */
  */
 @Repository
 @Repository
 public class KwtLogisticsOrderCirculateRepository extends ServiceImpl<KwtLogisticsOrderCirculateMapper, KwtLogisticsOrderCirculate> {
 public class KwtLogisticsOrderCirculateRepository extends ServiceImpl<KwtLogisticsOrderCirculateMapper, KwtLogisticsOrderCirculate> {
-    public IPage<KwtLogisticsOrderCirculate> queryByPage(int pageNum, int pageSize,String truckNo, Set<Long> entIds,
-                                                         Long logistOrderId) {
+    public IPage<KwtLogisticsOrderCirculate> queryByPage(int pageNum, int pageSize,String truckNo,
+                                                         Long logisticOrderId) {
         return page(new Page<>(pageNum, pageSize), Wrappers.<KwtLogisticsOrderCirculate>lambdaQuery()
         return page(new Page<>(pageNum, pageSize), Wrappers.<KwtLogisticsOrderCirculate>lambdaQuery()
                 .eq(KwtLogisticsOrderCirculate::getDelFlag,0)
                 .eq(KwtLogisticsOrderCirculate::getDelFlag,0)
-                .in(KwtLogisticsOrderCirculate::getEntId, entIds)
-                .eq(KwtLogisticsOrderCirculate::getLOrderId, logistOrderId)
+                .eq(KwtLogisticsOrderCirculate::getLOrderId, logisticOrderId)
                 .like(StringUtils.isNotBlank(truckNo),KwtLogisticsOrderCirculate::getTruckNo, truckNo)
                 .like(StringUtils.isNotBlank(truckNo),KwtLogisticsOrderCirculate::getTruckNo, truckNo)
                 .orderByDesc(KwtLogisticsOrderCirculate::getCreateTime)
                 .orderByDesc(KwtLogisticsOrderCirculate::getCreateTime)
                 .orderByDesc(KwtLogisticsOrderCirculate::getId));
                 .orderByDesc(KwtLogisticsOrderCirculate::getId));

+ 27 - 13
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -2819,9 +2819,9 @@ public class KwtLogisticsConsignmentService {
     public PageDataResult<CapacityVo> pageCapacity(CapacityReq req) {
     public PageDataResult<CapacityVo> pageCapacity(CapacityReq req) {
         log.info("查询车辆列表请求:{}", JSON.toJSONString( req));
         log.info("查询车辆列表请求:{}", JSON.toJSONString( req));
         Long logOrderId = Long.parseLong(req.getLogOrderId());
         Long logOrderId = Long.parseLong(req.getLogOrderId());
-        Set<Long> allEnt = getAllEnt(req.getEntId());
+        //Set<Long> allEnt = getAllEnt(req.getEntId());
         IPage<KwtLogisticsOrderCirculate> page = logisticsOrderCirculateRepository.queryByPage(req.getPageNum(),
         IPage<KwtLogisticsOrderCirculate> page = logisticsOrderCirculateRepository.queryByPage(req.getPageNum(),
-                req.getPageSize(), req.getTruckNo(),allEnt, logOrderId);
+                req.getPageSize(), req.getTruckNo(), logOrderId);
         List<KwtLogisticsOrderCirculate> records = page.getRecords();
         List<KwtLogisticsOrderCirculate> records = page.getRecords();
 
 
         if (org.apache.commons.collections4.CollectionUtils.isEmpty( records)){
         if (org.apache.commons.collections4.CollectionUtils.isEmpty( records)){
@@ -2852,8 +2852,7 @@ public class KwtLogisticsConsignmentService {
         if (CollectionUtils.isNotEmpty(billOrderIds)){
         if (CollectionUtils.isNotEmpty(billOrderIds)){
             List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.queryByBillOrderIds(billOrderIds);
             List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.queryByBillOrderIds(billOrderIds);
             if (CollectionUtils.isNotEmpty(waybillOrders)){
             if (CollectionUtils.isNotEmpty(waybillOrders)){
-                billOrderIdAndWaybillOrderMap = waybillOrders.stream().filter(x->Objects.equals(x.getStatus(),
-                                CarWaybillEnum.APPROVAL_PASS.getCode()))
+                billOrderIdAndWaybillOrderMap = waybillOrders.stream()
                         .collect(Collectors.groupingBy(KwtWaybillOrder::getTruckId));
                         .collect(Collectors.groupingBy(KwtWaybillOrder::getTruckId));
             }
             }
         }
         }
@@ -2862,14 +2861,16 @@ public class KwtLogisticsConsignmentService {
         Map<Long, RTruckVo> finalTruckIdAndTruckMap = truckIdAndTruckMap;
         Map<Long, RTruckVo> finalTruckIdAndTruckMap = truckIdAndTruckMap;
         Map<Long, List<KwtWaybillOrder>> finalBillOrderIdAndWaybillOrderMap = billOrderIdAndWaybillOrderMap;
         Map<Long, List<KwtWaybillOrder>> finalBillOrderIdAndWaybillOrderMap = billOrderIdAndWaybillOrderMap;
         List<CapacityVo> capacityVos = records.stream()
         List<CapacityVo> capacityVos = records.stream()
-                .map(t -> getCapacityVo(t, finalTruckIdAndTruckMap, finalBillOrderIdAndWaybillOrderMap))
+                .map(t -> getCapacityVo(t, finalTruckIdAndTruckMap, finalBillOrderIdAndWaybillOrderMap,waybillOrderSubtasks))
                 .collect(Collectors.toList());
                 .collect(Collectors.toList());
         return PageDataResult.of(page, capacityVos);
         return PageDataResult.of(page, capacityVos);
 
 
     }
     }
 
 
     @NotNull
     @NotNull
-    private static CapacityVo getCapacityVo(KwtLogisticsOrderCirculate t, Map<Long, RTruckVo> finalTruckIdAndTruckMap, Map<Long, List<KwtWaybillOrder>> finalBillOrderIdAndWaybillOrderMap) {
+    private static CapacityVo getCapacityVo(KwtLogisticsOrderCirculate t, Map<Long, RTruckVo> finalTruckIdAndTruckMap,
+                                            Map<Long, List<KwtWaybillOrder>> finalBillOrderIdAndWaybillOrderMap,
+                                            List<KwtWaybillOrderSubtask> waybillOrderSubtasks) {
         CapacityVo capacityVo = new CapacityVo();
         CapacityVo capacityVo = new CapacityVo();
         capacityVo.setTruckId(String.valueOf(t.getTruckId()));
         capacityVo.setTruckId(String.valueOf(t.getTruckId()));
         capacityVo.setTruckNo(t.getTruckNo());
         capacityVo.setTruckNo(t.getTruckNo());
@@ -2878,19 +2879,32 @@ public class KwtLogisticsConsignmentService {
         List<KwtWaybillOrder> waybillOrders = finalBillOrderIdAndWaybillOrderMap.get(t.getTruckId());
         List<KwtWaybillOrder> waybillOrders = finalBillOrderIdAndWaybillOrderMap.get(t.getTruckId());
         capacityVo.setFinishWaybillCount("0");
         capacityVo.setFinishWaybillCount("0");
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(waybillOrders)){
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(waybillOrders)){
-            capacityVo.setFinishWaybillCount(String.valueOf(waybillOrders.size()));
-            BigDecimal loadAmount = waybillOrders.stream()
+            List<KwtWaybillOrder> waybillOrderList = Optional.ofNullable(waybillOrders).orElse(List.of())
+                    .stream()
+                    .filter(x -> Objects.equals(x.getStatus(), CarWaybillV1Enum.COMPLETED.getCode()))
+                    .collect(Collectors.toList());
+            capacityVo.setFinishWaybillCount(String.valueOf(waybillOrderList.size()));
+            capacityVo.setStatus(String.valueOf(waybillOrders.get(0).getStatus()));
+            capacityVo.setStatusDesc(CarWaybillV1Enum.geDesc(waybillOrders.get(0).getStatus()));
+            List<Long> waybillOrderIds = waybillOrderList.stream()
+                    .map(KwtWaybillOrder::getId)
+                    .collect(Collectors.toList());
+
+            List<KwtWaybillOrderSubtask> subtasks = Optional.ofNullable(waybillOrderSubtasks)
+                    .orElse(List.of())
+                    .stream()
+                    .filter(x -> waybillOrderIds.contains(x.getWOrderId()))
+                    .collect(Collectors.toList());
+            BigDecimal loadAmount = subtasks.stream()
                     .filter(x -> Objects.nonNull(x.getLoadAmount()))
                     .filter(x -> Objects.nonNull(x.getLoadAmount()))
-                    .map(KwtWaybillOrder::getLoadAmount)
+                    .map(KwtWaybillOrderSubtask::getLoadAmount)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
-            BigDecimal unloadAmount = waybillOrders.stream()
+            BigDecimal unloadAmount = subtasks.stream()
                     .filter(x -> Objects.nonNull(x.getUnloadAmount()))
                     .filter(x -> Objects.nonNull(x.getUnloadAmount()))
-                    .map(KwtWaybillOrder::getUnloadAmount)
+                    .map(KwtWaybillOrderSubtask::getUnloadAmount)
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
                     .reduce(BigDecimal.ZERO, BigDecimal::add);
             capacityVo.setLoadAmount(loadAmount.setScale(2,RoundingMode.HALF_UP).toPlainString());
             capacityVo.setLoadAmount(loadAmount.setScale(2,RoundingMode.HALF_UP).toPlainString());
             capacityVo.setUnloadAmount(unloadAmount.setScale(2,RoundingMode.HALF_UP).toPlainString());
             capacityVo.setUnloadAmount(unloadAmount.setScale(2,RoundingMode.HALF_UP).toPlainString());
-            capacityVo.setStatus(String.valueOf(waybillOrders.get(0).getStatus()));
-            capacityVo.setStatusDesc(CarWaybillV1Enum.geDesc(waybillOrders.get(0).getStatus()));
         }
         }
 
 
         capacityVo.setDispatchStatus(String.valueOf(t.getStatus()));
         capacityVo.setDispatchStatus(String.valueOf(t.getStatus()));

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

@@ -4322,6 +4322,7 @@ public class KwtWaybillOrderV1Service {
             vo.setLng(node.getLng());
             vo.setLng(node.getLng());
             vo.setLat(node.getLat());
             vo.setLat(node.getLat());
             vo.setHasWeighbridge(node.getWeighbridgeId() != null);
             vo.setHasWeighbridge(node.getWeighbridgeId() != null);
+            vo.setImageUrl(node.getWeighUrl());
 
 
             // 构建状态描述
             // 构建状态描述
             //KwtWaybillOrderSubtask subtask = subtaskMap.get(node.getWSubtaskId());
             //KwtWaybillOrderSubtask subtask = subtaskMap.get(node.getWSubtaskId());

+ 2 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -747,12 +747,12 @@ public class WaybillOrderService {
 
 
         //装货地址
         //装货地址
         KwtLogisticsOrderAddress shipmentAddress = logOrderIdAndAddressMap.getOrDefault(wbOrder.getLOrderId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new KwtLogisticsOrderAddress());
         KwtLogisticsOrderAddress shipmentAddress = logOrderIdAndAddressMap.getOrDefault(wbOrder.getLOrderId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new KwtLogisticsOrderAddress());
-        wbOrderResp.setLoadAddress(shipmentAddress.getDetailAddress());
+        wbOrderResp.setLoadAddress(shipmentAddress.getCityName()+shipmentAddress.getDetailAddress());
         wbOrderResp.setLoadLng(shipmentAddress.getLng());
         wbOrderResp.setLoadLng(shipmentAddress.getLng());
         wbOrderResp.setLoadLat(shipmentAddress.getLat());
         wbOrderResp.setLoadLat(shipmentAddress.getLat());
         //卸货地址
         //卸货地址
         KwtLogisticsOrderAddress takeAddress = logOrderIdAndAddressMap.getOrDefault(wbOrder.getLOrderId() + "-" + AddressTypeEnum.TAKE.getCode(), new KwtLogisticsOrderAddress());
         KwtLogisticsOrderAddress takeAddress = logOrderIdAndAddressMap.getOrDefault(wbOrder.getLOrderId() + "-" + AddressTypeEnum.TAKE.getCode(), new KwtLogisticsOrderAddress());
-        wbOrderResp.setUnloadAddress(takeAddress.getDetailAddress());
+        wbOrderResp.setUnloadAddress(takeAddress.getCityName()+takeAddress.getDetailAddress());
         wbOrderResp.setUnloadLng(takeAddress.getLng());
         wbOrderResp.setUnloadLng(takeAddress.getLng());
         wbOrderResp.setUnloadLat(takeAddress.getLat());
         wbOrderResp.setUnloadLat(takeAddress.getLat());
         //装卸地之间距离
         //装卸地之间距离