Browse Source

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

czh 2 năm trước cách đây
mục cha
commit
5b4a2ff971
34 tập tin đã thay đổi với 916 bổ sung185 xóa
  1. 1 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/NumberConstant.java
  2. 14 3
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderStatisticsService.java
  3. 4 2
      sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderTrackService.java
  4. 4 5
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/WorkbenchController.java
  5. 3 1
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/dao/KwpSettlementRecordMapper.java
  6. 27 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/Factor.java
  7. 4 11
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/SettlementRecord.java
  8. 2 10
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/FinanceCount.java
  9. 4 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/page/MoneyPage.java
  10. 18 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/EChartsVo.java
  11. 10 2
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementRecordService.java
  12. 52 4
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/WorkbenchService.java
  13. 39 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/utils/DateTimeUtil.java
  14. 18 0
      sckw-modules/sckw-payment/src/main/java/com/sckw/payment/utils/DecimalUtils.java
  15. 47 13
      sckw-modules/sckw-payment/src/main/resources/mapper/KwpSettlementRecordMapper.xml
  16. 57 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/common/config/MessageUrlConfig.java
  17. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/common/enums/OrderTypeEnum.java
  18. 12 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java
  19. 8 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java
  20. 4 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderCarDTO.java
  21. 15 7
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsOrderStatisticsParam.java
  22. 5 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LogisticsOrderStatisticsVO.java
  23. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/OrderFinishVO.java
  24. 88 18
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java
  25. 259 46
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/CommonService.java
  26. 51 7
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ConsignOrderService.java
  27. 4 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java
  28. 49 9
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/LogisticsConsignmentService.java
  29. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ManagementLogisticsOrderService.java
  30. 14 5
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java
  31. 2 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/WaybillManagementService.java
  32. 13 0
      sckw-modules/sckw-transport/src/main/resources/bootstrap-lfdc.yml
  33. 25 10
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml
  34. 59 23
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

+ 1 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/common/enums/NumberConstant.java

@@ -65,6 +65,7 @@ public final class NumberConstant {
     public static final int COOKIE_TIMEN = 300;
 
     public static final BigDecimal ONE_HUNDRED = new BigDecimal("100.00");
+    public static final BigDecimal TEN_THOUSAND = new BigDecimal("10000.00");
 
     public NumberConstant() {
     }

+ 14 - 3
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderStatisticsService.java

@@ -1,5 +1,6 @@
 package com.sckw.order.serivce;
 
+import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.utils.DateUtils;
 import com.sckw.core.web.context.LoginUserHolder;
@@ -11,6 +12,8 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.TemporalAdjusters;
@@ -56,11 +59,19 @@ public class KwoTradeOrderStatisticsService {
                 .setStsFactorsTwo(params.getStsFactorsTwo());
         Map<String, WbTOrderExcelStsResDTO> map = kwoTradeOrderService.workbenchExcel(reqDTO).stream()
                 .collect(Collectors.toMap(WbTOrderExcelStsResDTO::getFormatDate, e -> e, (k1, k2) -> k1));
-        res.forEach(e->{
+        res.forEach(e -> {
             WbTOrderExcelStsResDTO dto = map.get(e.getFormatDate());
             if (Objects.nonNull(dto)) {
-                e.setStsFactorsOneValue(dto.getStsFactorsOneValue());
-                e.setStsFactorsTwoValue(dto.getStsFactorsTwoValue());
+                BigDecimal one = dto.getStsFactorsOneValue();
+                if (Objects.equals(params.getStsFactorsOne(), 1)) {
+                    one = one.divide(NumberConstant.TEN_THOUSAND, 2, RoundingMode.HALF_UP);
+                }
+                BigDecimal two = dto.getStsFactorsTwoValue();
+                if (Objects.equals(params.getStsFactorsTwo(), 1)) {
+                    two = two.divide(NumberConstant.TEN_THOUSAND, 2, RoundingMode.HALF_UP);
+                }
+                e.setStsFactorsOneValue(one);
+                e.setStsFactorsTwoValue(two);
             }
         });
         return res;

+ 4 - 2
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderTrackService.java

@@ -43,7 +43,9 @@ public class KwoTradeOrderTrackService {
      */
     public List<KwoTradeOrderTrack> getByOrderId(Long orderId) {
         LambdaQueryWrapper<KwoTradeOrderTrack> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(KwoTradeOrderTrack::getTOrderId,orderId).eq(KwoTradeOrderTrack::getDelFlag, Global.NO);
+        wrapper.eq(KwoTradeOrderTrack::getTOrderId, orderId)
+                .eq(KwoTradeOrderTrack::getDelFlag, Global.NO)
+                .orderByDesc(KwoTradeOrderTrack::getCreateTime);
         List<KwoTradeOrderTrack> list = kwoTradeOrderTrackMapper.selectList(wrapper);
         return CollectionUtils.emptyIfNull(list);
     }
@@ -58,7 +60,7 @@ public class KwoTradeOrderTrackService {
      */
     public KwoTradeOrderTrack getByOrderId(Long orderId, Integer status) {
         LambdaQueryWrapper<KwoTradeOrderTrack> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(KwoTradeOrderTrack::getTOrderId,orderId).eq(KwoTradeOrderTrack::getStatus,status)
+        wrapper.eq(KwoTradeOrderTrack::getTOrderId, orderId).eq(KwoTradeOrderTrack::getStatus, status)
                 .eq(KwoTradeOrderTrack::getDelFlag, Global.NO).last("LIMIT 1");
         return kwoTradeOrderTrackMapper.selectOne(wrapper);
     }

+ 4 - 5
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/controller/WorkbenchController.java

@@ -4,11 +4,10 @@ import com.sckw.core.web.response.HttpResult;
 import com.sckw.payment.model.vo.req.FinanceCount;
 import com.sckw.payment.service.WorkbenchService;
 import jakarta.annotation.Resource;
+import jakarta.validation.Valid;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 工作台
@@ -29,8 +28,8 @@ public class WorkbenchController {
      *
      * @return
      */
-    @GetMapping("finance")
-    public HttpResult finance(FinanceCount financeCount) {
+    @PostMapping("finance")
+    public HttpResult finance(@Valid @RequestBody FinanceCount financeCount) {
         return HttpResult.ok(workbenchService.financeCount(financeCount));
     }
 

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

@@ -16,5 +16,7 @@ import java.util.List;
 public interface KwpSettlementRecordMapper extends BaseMapper<KwpSettlementRecord> {
     void insertBatch(@Param("list") List<KwpSettlementRecord> list);
 
-    List<SettlementRecord> countByDay(@Param("time") List<String> time, @Param("entId")Long entId);
+    List<SettlementRecord> countByDay(@Param("timeAll") List<String> timeAll, @Param("time") List<String> time, @Param("entId") Long entId);
+
+    List<SettlementRecord> countMonth(@Param("timeAll") List<String> timeAll, @Param("time") List<String> time, @Param("entId") Long entId);
 }

+ 27 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/dto/Factor.java

@@ -0,0 +1,27 @@
+package com.sckw.payment.model.dto;
+
+import jakarta.validation.constraints.NotBlank;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 统计因子
+ *
+ * @author xucaiqin
+ * @date 2023-09-20 09:03:38
+ */
+@Getter
+@Setter
+public class Factor {
+
+    /**
+     * 统计因子 1,2,3
+     */
+    @NotBlank(message = "统计因子1不能为空")
+    private String factorOne;
+    /**
+     * 统计因子 1,2,3
+     */
+    @NotBlank(message = "统计因子2不能为空")
+    private String factorTwo;
+}

+ 4 - 11
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/SettlementRecord.java

@@ -1,10 +1,8 @@
 package com.sckw.payment.model.vo;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.math.BigDecimal;
-import java.time.LocalDate;
 
 /**
  * 结算统计
@@ -14,10 +12,6 @@ import java.time.LocalDate;
  */
 @Data
 public class SettlementRecord {
-    /**
-     * 企业id
-     */
-    private Long entId;
 
     /**
      * 总应收金额
@@ -25,17 +19,17 @@ public class SettlementRecord {
     private BigDecimal totalReceiveMoney;
 
     /**
-     * 待收金额
+     * 待收金额(未回款金额)
      */
     private BigDecimal exactMoney;
 
     /**
-     * 已收金额(累加金额)
+     * 已收金额(回款金额)
      */
     private BigDecimal receivedMoney;
 
     /**
-     * 逾期待收金额
+     * 逾期待收金额(逾期未回款金额)
      */
     private BigDecimal overdueExactMoney;
 
@@ -62,6 +56,5 @@ public class SettlementRecord {
     /**
      * 创建日期
      */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private LocalDate createTime;
+    private String createTime;
 }

+ 2 - 10
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/FinanceCount.java

@@ -1,12 +1,10 @@
 package com.sckw.payment.model.vo.req;
 
+import com.sckw.payment.model.dto.Factor;
 import jakarta.validation.constraints.NotNull;
-import jakarta.validation.constraints.Size;
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.List;
-
 /**
  * 财务统计
  *
@@ -15,7 +13,7 @@ import java.util.List;
  */
 @Getter
 @Setter
-public class FinanceCount {
+public class FinanceCount extends Factor {
     /**
      * 周期维度 1-日、2-周、3-月 4-年
      */
@@ -31,11 +29,5 @@ public class FinanceCount {
      */
 //    @NotBlank(message = "周期维度不能为空")
     private String endTime;
-    /**
-     * 统计因子
-     */
-    @Size(message = "统计因子不能为空", min = 1)
-    @NotNull(message = "统计因子不能为空")
-    private List<Integer> factor;
 
 }

+ 4 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/req/page/MoneyPage.java

@@ -21,6 +21,10 @@ public class MoneyPage extends BasePara implements MoneyChange {
      */
     @NotBlank(message = "支付通道不能为空")
     private String channel;
+    @NotBlank(message = "uid不能为空")
+    private String uid;
+    @NotBlank(message = "往来单位不能为空")
+    private String filter;
 
     @JsonFormat(pattern = "yyyy-MM-dd")
     private String startCreateTime;

+ 18 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/model/vo/res/EChartsVo.java

@@ -0,0 +1,18 @@
+package com.sckw.payment.model.vo.res;
+
+import com.sckw.payment.model.dto.Factor;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author xucaiqin
+ * @date 2023-09-20 08:44:40
+ */
+@Getter
+@Setter
+public class EChartsVo extends Factor {
+    /**
+     * 创建日期
+     */
+    private String createTime;
+}

+ 10 - 2
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/KwpSettlementRecordService.java

@@ -2,6 +2,7 @@ package com.sckw.payment.service;
 
 import com.sckw.payment.dao.KwpSettlementRecordMapper;
 import com.sckw.payment.model.vo.SettlementRecord;
+import com.sckw.payment.utils.DateTimeUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -21,7 +22,14 @@ public class KwpSettlementRecordService {
     private final KwpSettlementRecordMapper kwpSettlementRecordMapper;
 
 
-    public List<SettlementRecord> financeCount(List<String> financeCount, Long entId) {
-        return kwpSettlementRecordMapper.countByDay(financeCount,entId);
+    public List<SettlementRecord> financeCount(List<String> financeCount, Long entId, Integer circle) {
+        //3-月
+        if (circle == 3) {
+            List<String> timeAll = DateTimeUtil.generateMonthRange(DateTimeUtil.parseYMD(financeCount.get(0)), DateTimeUtil.parseYMD(financeCount.get(1)));
+            return kwpSettlementRecordMapper.countMonth(timeAll, financeCount, entId);
+        } else {
+            List<String> timeAll = DateTimeUtil.generateDateRange(DateTimeUtil.parseYMD(financeCount.get(0)), DateTimeUtil.parseYMD(financeCount.get(1)));
+            return kwpSettlementRecordMapper.countByDay(timeAll, financeCount, entId);
+        }
     }
 }

+ 52 - 4
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/service/WorkbenchService.java

@@ -1,16 +1,22 @@
 package com.sckw.payment.service;
 
 import com.sckw.core.web.context.LoginUserHolder;
+import com.sckw.payment.model.vo.SettlementRecord;
 import com.sckw.payment.model.vo.req.FinanceCount;
+import com.sckw.payment.model.vo.res.EChartsVo;
 import com.sckw.payment.utils.DateTimeUtil;
+import com.sckw.payment.utils.DecimalUtils;
 import jakarta.annotation.Resource;
-import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 工作台
@@ -20,7 +26,6 @@ import java.util.List;
  */
 @Slf4j
 @Service
-@RequiredArgsConstructor
 public class WorkbenchService {
 
     @Resource
@@ -33,7 +38,7 @@ public class WorkbenchService {
 
         //时间参数为空,按照默认维度统计
         if (StringUtils.isBlank(financeCount.getStartTime()) && StringUtils.isBlank(financeCount.getEndTime())) {
-            //按照周期维度生成时间段
+            //按照周期维度生成时间段2
             if (circle == 1) {
                 //从今天倒推15天
                 time.add(DateTimeUtil.getComputeDaysStr(-14));
@@ -54,6 +59,49 @@ public class WorkbenchService {
             }
         }
         Long entId = LoginUserHolder.getEntId();
-        return kwpSettlementRecordService.financeCount(time,entId);
+        DecimalFormat df = new DecimalFormat("0.00");
+        //获取数据,按照统计因子进行处理,并转换成万元
+        List<SettlementRecord> settlementRecords = kwpSettlementRecordService.financeCount(time, entId, circle);
+        return settlementRecords.stream().map(a -> {
+            EChartsVo eChartsVo = new EChartsVo();
+            eChartsVo.setCreateTime(a.getCreateTime());
+            switch (financeCount.getFactorOne()) {
+                case "1" ->
+                        eChartsVo.setFactorOne(df.format(a.getReceivedMoney().divide(new BigDecimal("10000.0"), 2, RoundingMode.HALF_UP)));
+                case "2" ->
+                        eChartsVo.setFactorOne(df.format(a.getExactMoney().divide(new BigDecimal("10000.0"), 2, RoundingMode.HALF_UP)));
+                case "3" ->
+                        eChartsVo.setFactorOne(df.format(a.getOverdueExactMoney().divide(new BigDecimal("10000.0"), 2, RoundingMode.HALF_UP)));
+                case "4" -> {
+                    BigDecimal overdueExactMoney = a.getOverdueExactMoney();
+                    //总应收金额
+                    BigDecimal totalReceiveMoney = a.getTotalReceiveMoney();
+                    if (totalReceiveMoney.compareTo(new BigDecimal("0.0")) <= 0) {
+                        eChartsVo.setFactorOne("0.00%");
+                    } else {
+                        eChartsVo.setFactorOne(DecimalUtils.financePercent(overdueExactMoney, totalReceiveMoney));
+                    }
+                }
+            }
+            switch (financeCount.getFactorTwo()) {
+                case "1" ->
+                        eChartsVo.setFactorTwo(df.format(a.getReceivedMoney().divide(new BigDecimal("10000.0"), 2, RoundingMode.HALF_UP)));
+                case "2" ->
+                        eChartsVo.setFactorTwo(df.format(a.getExactMoney().divide(new BigDecimal("10000.0"), 2, RoundingMode.HALF_UP)));
+                case "3" ->
+                        eChartsVo.setFactorTwo(df.format(a.getOverdueExactMoney().divide(new BigDecimal("10000.0"), 2, RoundingMode.HALF_UP)));
+                case "4" ->{
+                    BigDecimal overdueExactMoney = a.getOverdueExactMoney();
+                    //总应收金额
+                    BigDecimal totalReceiveMoney = a.getTotalReceiveMoney();
+                    if (totalReceiveMoney.compareTo(new BigDecimal("0.0")) <= 0) {
+                        eChartsVo.setFactorTwo("0.00%");
+                    } else {
+                        eChartsVo.setFactorTwo(DecimalUtils.financePercent(overdueExactMoney, totalReceiveMoney));
+                    }
+                }
+            }
+            return eChartsVo;
+        }).collect(Collectors.toList());
     }
 }

+ 39 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/utils/DateTimeUtil.java

@@ -5,7 +5,10 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.time.temporal.TemporalAdjusters;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * @description: 时间工具类
@@ -15,10 +18,12 @@ import java.time.temporal.TemporalAdjusters;
  **/
 public class DateTimeUtil {
     public static final String YMD = "yyyy-MM-dd";
+    public static final String YM = "yyyy-MM";
     public static final String HMS = "HH:mm:ss";
     public static final DateTimeFormatter YYYY_MM_DD_HH_MM_SS = DateTimeFormatter.ofPattern(YMD + " " + HMS);
     public static final DateTimeFormatter YYYYMMDDHHMMSS = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
     public static final DateTimeFormatter YYYY_MM_DD = DateTimeFormatter.ofPattern(YMD);
+    public static final DateTimeFormatter YYYY_MM = DateTimeFormatter.ofPattern(YM);
     public static final DateTimeFormatter HH_MM_SS = DateTimeFormatter.ofPattern(HMS);
 
     public static LocalDateTime parse(String date) {
@@ -39,6 +44,10 @@ public class DateTimeUtil {
         return YYYY_MM_DD_HH_MM_SS.format(localDateTime);
     }
 
+    public static String formatYM(LocalDate localDate) {
+        return YYYY_MM.format(localDate);
+    }
+
     public static String formatYMD(LocalDate localDate) {
         return YYYY_MM_DD.format(localDate);
     }
@@ -242,6 +251,36 @@ public class DateTimeUtil {
         return LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
     }
 
+
+    public static List<String> generateDateRange(LocalDate startDate, LocalDate endDate) {
+        List<String> dateRange = new ArrayList<>();
+        LocalDate currentDate = startDate;
+
+        while (!currentDate.isAfter(endDate)) {
+            dateRange.add(formatYMD(currentDate));
+            currentDate = currentDate.plus(1, ChronoUnit.DAYS); // 增加一天
+        }
+        return dateRange;
+    }
+
+    /**
+     * 根据开始时间结束时间 格式化时间范围内的时间
+     *
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    public static List<String> generateMonthRange(LocalDate startDate, LocalDate endDate) {
+        List<String> dateRange = new ArrayList<>();
+        LocalDate currentDate = startDate;
+
+        while (!currentDate.isAfter(endDate)) {
+            dateRange.add(formatYM(currentDate));
+            currentDate = currentDate.plus(1, ChronoUnit.MONTHS);
+        }
+        return dateRange;
+    }
+
     public static void main(String[] args) {
 
         System.out.println(parse("2023-12-11"));

+ 18 - 0
sckw-modules/sckw-payment/src/main/java/com/sckw/payment/utils/DecimalUtils.java

@@ -34,4 +34,22 @@ public class DecimalUtils {
         }
         return df.format(dividend.divide(divisor, 6, RoundingMode.HALF_UP).multiply(new BigDecimal("100.0")).abs()) + "%";
     }
+
+    public static String financePercent(BigDecimal dividend, BigDecimal divisor) {
+        if (Objects.isNull(dividend)) {
+            dividend = new BigDecimal("0.00");
+        }
+        //除数为0
+        if (Objects.isNull(divisor)) {
+            divisor = new BigDecimal("0.00");
+        }
+
+        if (BigDecimal.ZERO.compareTo(dividend) != 0 && BigDecimal.ZERO.compareTo(divisor) == 0) {
+            return "100.00%";
+        }
+        if (BigDecimal.ZERO.compareTo(dividend) == 0 && BigDecimal.ZERO.compareTo(divisor) == 0) {
+            return "0.00%";
+        }
+        return df.format(dividend.divide(divisor, 6, RoundingMode.HALF_UP).multiply(new BigDecimal("100.0")).abs()) + "%";
+    }
 }

+ 47 - 13
sckw-modules/sckw-payment/src/main/resources/mapper/KwpSettlementRecordMapper.xml

@@ -58,26 +58,60 @@
         </foreach>
     </insert>
     <select id="countByDay" resultType="com.sckw.payment.model.vo.SettlementRecord">
-        select sum(ksr.total_pay_money)     totalPayMoney,
-               sum(ksr.exact_money)         exactMoney,
-               sum(ksr.received_money)      receivedMoney,
-               sum(ksr.overdue_exact_money) overdueExactMoney,
-               sum(ksr.total_pay_money)     totalPayMoney,
-               sum(ksr.unpaid_money)        unpaidMoney,
-               sum(ksr.paid_money)          paidMoney,
-               sum(ksr.overdue_paid_money)  overduePaidMoney
-        from kwp_settlement_record ksr
+        SELECT temp.date                               createTime,
+               ifnull(sum(ksr.total_receive_money), 0) totalReceiveMoney,
+               ifnull(sum(ksr.exact_money), 0)         exactMoney,
+               ifnull(sum(ksr.received_money), 0)      receivedMoney,
+               ifnull(sum(ksr.overdue_exact_money), 0) overdueExactMoney,
+               ifnull(sum(ksr.total_pay_money), 0)     totalPayMoney,
+               ifnull(sum(ksr.unpaid_money), 0)        unpaidMoney,
+               ifnull(sum(ksr.paid_money), 0)          paidMoney,
+               ifnull(sum(ksr.overdue_paid_money), 0)  overduePaidMoney
+        FROM (
+        <foreach collection="timeAll" item="date" separator="UNION ALL">
+            SELECT #{date} AS date
+        </foreach>
+        ) AS temp
+            left join
+        kwp_settlement_record ksr on temp.date = ksr.create_time and ksr.ent_id = #{entId,jdbcType=BIGINT}
         <where>
-            <if test="entId != null">
-                and ksr.ent_id = #{entId,jdbcType=BIGINT}
+            <if test="time != null and time.size() != 0">
+                temp.date between
+                <foreach collection="time" open=" " separator="and" close=" " item="item">
+                    #{item,jdbcType=TIMESTAMP}
+                </foreach>
             </if>
+        </where>
+        group by temp.date
+        order by temp.date
+    </select>
+    <select id="countMonth" resultType="com.sckw.payment.model.vo.SettlementRecord">
+        SELECT temp.date                               createTime,
+               ifnull(sum(ksr.total_receive_money), 0) totalReceiveMoney,
+               ifnull(sum(ksr.exact_money), 0)         exactMoney,
+               ifnull(sum(ksr.received_money), 0)      receivedMoney,
+               ifnull(sum(ksr.overdue_exact_money), 0) overdueExactMoney,
+               ifnull(sum(ksr.total_pay_money), 0)     totalPayMoney,
+               ifnull(sum(ksr.unpaid_money), 0)        unpaidMoney,
+               ifnull(sum(ksr.paid_money), 0)          paidMoney,
+               ifnull(sum(ksr.overdue_paid_money), 0)  overduePaidMoney
+        FROM (
+        <foreach collection="timeAll" item="date" separator="UNION ALL">
+            SELECT #{date} AS date
+        </foreach>
+        ) AS temp
+            left join
+        kwp_settlement_record ksr
+        on temp.date = date_format(ksr.create_time, '%Y-%m') and ksr.ent_id = #{entId,jdbcType=BIGINT}
+        <where>
             <if test="time != null and time.size() != 0">
-                and ksr.create_time between
+                temp.date between
                 <foreach collection="time" open=" " separator="and" close=" " item="item">
                     #{item,jdbcType=TIMESTAMP}
                 </foreach>
             </if>
         </where>
-        group by ksr.create_time
+        group by temp.date
+        order by temp.date
     </select>
 </mapper>

+ 57 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/common/config/MessageUrlConfig.java

@@ -0,0 +1,57 @@
+package com.sckw.transport.common.config;
+
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @author lfdc
+ * @date 2023-09-17 10:30:51
+ */
+@Getter
+@Setter
+@Component
+@ConfigurationProperties(prefix = "message.logistics.order")
+@RefreshScope
+public class MessageUrlConfig {
+
+
+    private PcMessageUrl pc;
+    private AppMessageUrl app;
+
+    @Data
+    public static class PcMessageUrl {
+
+        /**
+         * 托运订单地址
+         */
+        private String consignLogisticsAddOrderUrl;
+
+        /**
+         * 承运订单地址
+         */
+        private String carriageLogisticsAddOrderUrl;
+
+
+    }
+
+    @Data
+    public static class AppMessageUrl {
+
+        /**
+         * 托运订单地址
+         */
+        private String consignLogisticsAddOrderUrl;
+
+        /**
+         * 承运订单地址
+         */
+        private String carriageLogisticsAddOrderUrl;
+
+    }
+
+}

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/enums/OrderTypeEnum.java → sckw-modules/sckw-transport/src/main/java/com/sckw/transport/common/enums/OrderTypeEnum.java

@@ -1,4 +1,4 @@
-package com.sckw.transport.enums;
+package com.sckw.transport.common.enums;
 
 import lombok.AllArgsConstructor;
 import lombok.Getter;

+ 12 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderMapper.java

@@ -372,10 +372,20 @@ public interface KwtLogisticsOrderMapper extends BaseMapper<KwtLogisticsOrder> {
 
     StatisticsByOrderVO selectStatisticsByOrder(@Param("statusList") List<Integer> statusList, @Param("dateStart") String dateStart, @Param("dateEnd") String dateEnd, @Param("topId") Long topId, @Param("unitType") Integer unitType);
 
-    List<LogisticsOrderStatisticsVO> workbenchLogisticsOrderStatisticsByMonth(@Param("id") Long id, @Param("statusList") List<Integer> statusList, @Param("type") Integer type, @Param("dateStart") String dateStart, @Param("dateEnd") String dateEnd);
+    List<LogisticsOrderStatisticsVO> workbenchLogisticsOrderStatisticsByMonth(@Param("id") Long id, @Param("statusList") List<Integer> statusList,
+                                                                              @Param("type") Integer type, @Param("dateStart") String dateStart,
+                                                                              @Param("dateEnd") String dateEnd,
+                                                                              @Param("typeOne") String typeOne,
+                                                                              @Param("typeTwo") String typeTwo
+    );
 
 
-    List<LogisticsOrderStatisticsVO> workbenchLogisticsOrderStatisticsByDays(@Param("id") Long id, @Param("statusList") List<Integer> statusList, @Param("type") Integer type, @Param("dateStart") String dateStart, @Param("dateEnd") String dateEnd);
+    List<LogisticsOrderStatisticsVO> workbenchLogisticsOrderStatisticsByDays(@Param("id") Long id, @Param("statusList") List<Integer> statusList,
+                                                                             @Param("type") Integer type, @Param("dateStart") String dateStart,
+                                                                             @Param("dateEnd") String dateEnd,
+                                                                             @Param("typeOne") String typeOne,
+                                                                             @Param("typeTwo") String typeTwo
+    );
 
     List<com.sckw.transport.model.dto.LogisticsOrderDTO> selectOrderListByTradeOrderIds(@Param("tradeOrderIds") List<Long> tradeOrderIds, @Param("unitType") String unitType);
 

+ 8 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderMapper.java

@@ -101,6 +101,14 @@ public interface KwtWaybillOrderMapper extends BaseMapper<KwtWaybillOrder> {
      **/
     Map<String, Object> findStatisticsSumByDriver(Map<String, Object> params);
 
+    /**
+     * @param params {driverId 司机ID, month月份}
+     * @desc 统计司机任务数(任务数/委派量/装货量/卸货量/亏吨量/亏吨扣款)
+     * @author zk
+     * @date 2023/8/1
+     **/
+    Double deficitLossAmountByDriver(Map<String, Object> params);
+
     /**
      * @param params {driverId 司机ID}
      * @desc 查询司机任务列表-待接单

+ 4 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/OrderCarDTO.java

@@ -11,6 +11,10 @@ import lombok.Data;
 @Data
 public class OrderCarDTO {
 
+    private Integer status;
+
+    private String statusLabel;
+
     /**
      * 物流订单id
      */

+ 15 - 7
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsOrderStatisticsParam.java

@@ -20,11 +20,19 @@ public class LogisticsOrderStatisticsParam {
     @SerializedName("dateType")
     private String dateType;
 
-//    /**
-//     * 统计因子 1,4,5,6
-//     */
-//    @NotBlank(message = "统计因子")
-//    @JsonProperty("type")
-//    @SerializedName("type")
-//    private String types;
+    /**
+     * 统计因子 1,2,3,4,5,6
+     */
+    @NotBlank(message = "统计因子")
+    @JsonProperty("typeOne")
+    @SerializedName("typeOne")
+    private String typeOne;
+
+    /**
+     * 统计因子 1,2,3,4,5,6
+     */
+    @NotBlank(message = "统计因子")
+    @JsonProperty("typeTwo")
+    @SerializedName("typeTwo")
+    private String typeTwo;
 }

+ 5 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/LogisticsOrderStatisticsVO.java

@@ -19,8 +19,12 @@ public class LogisticsOrderStatisticsVO {
      * 统计数
      */
     private Integer num;
+    /**
+     * 统计量
+     */
+    private BigDecimal typeOne;
     /**
      * 统计金额
      */
-    private BigDecimal totalAmount;
+    private BigDecimal typeTwo;
 }

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

@@ -19,7 +19,7 @@ public class OrderFinishVO {
     /**
      * 运输
      */
-    /*private BigDecimal amount;*/
+    private BigDecimal amount;
 
     /**
      * 总卸货量

+ 88 - 18
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/AcceptCarriageOrderService.java

@@ -48,8 +48,9 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import com.sckw.transport.common.config.MessageUrlConfig;
+import com.sckw.transport.common.enums.OrderTypeEnum;
 import com.sckw.transport.dao.*;
-import com.sckw.transport.enums.OrderTypeEnum;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.param.AcceptCarriageOrderQuery;
@@ -69,6 +70,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.time.LocalDate;
@@ -107,6 +109,12 @@ public class AcceptCarriageOrderService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
     PaymentDubboService paymentDubboService;
 
+    @Autowired
+    TransportCommonService transportCommonService;
+
+    @Autowired
+    private MessageUrlConfig messageUrlConfig;
+
     @Autowired
     public CommonService commonService;
 
@@ -297,7 +305,12 @@ public class AcceptCarriageOrderService {
         carriageUnit.setFirmName(bo.getConsignCompany());
         carriageUnit.setTopEntId(consignentMap == null ? null : consignentMap.getId());
 
-        commonService.initIatingLogisticsConsignment(checkUnit, carriageUnit, logisticsOrder.getLOrderNo(), logisticsOrder.getCreateBy(), logisticsOrder.getEntId());
+//        commonService.initIatingLogisticsConsignment(checkUnit, carriageUnit, logisticsOrder.getLOrderNo(), logisticsOrder.getCreateBy(), logisticsOrder.getEntId());
+        commonService.newSendLogisticsOrderToMessage(checkUnit,carriageUnit,logisticsOrder.getLOrderNo(), logisticsOrder.getCreateBy(), logisticsOrder.getEntId(),
+                messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl(), messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl(),
+                messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl(), messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl(),
+                MessageEnum.INITIATING_LOGISTICS_CONSIGNMENT,MessageEnum.NEW_CARRIAGE_ORDER,
+                "1");
 
         //修改父级mongodb数据
         //更新mongodb
@@ -767,9 +780,14 @@ public class AcceptCarriageOrderService {
             KwtLogisticsOrderUnit carriageOrderUnit = logisticsOrderUnitMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderUnit>()
                     .eq(KwtLogisticsOrderUnit::getLOrderId, id)
                     .eq(KwtLogisticsOrderUnit::getUnitType, NumberConstant.TWO));
-            commonService.publicLogisticsConsignmentPushMessage(consignOrderUnit, carriageOrderUnit, logisticsOrder.getLOrderNo(),
+//            commonService.publicLogisticsConsignmentPushMessage(consignOrderUnit, carriageOrderUnit, logisticsOrder.getLOrderNo(),
+//                    logisticsOrder.getCreateBy(), logisticsOrder.getEntId(),
+//                    MessageEnum.CONSIGN_ACCEPT_LOGISTICS, MessageEnum.CARRIAGE_ACCEPT_LOGISTICS);
+            commonService.newSendLogisticsOrderToMessage(consignOrderUnit,carriageOrderUnit,logisticsOrder.getLOrderNo(),
                     logisticsOrder.getCreateBy(), logisticsOrder.getEntId(),
-                    MessageEnum.CONSIGN_ACCEPT_LOGISTICS, MessageEnum.CARRIAGE_ACCEPT_LOGISTICS);
+                    messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl(),messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl(),
+                    messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl(),messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl(),
+                    MessageEnum.CONSIGN_ACCEPT_LOGISTICS, MessageEnum.CARRIAGE_ACCEPT_LOGISTICS,"1");
         } else {
             orderStatus = LogisticsOrderEnum.REJECT_ORDER.getCode();
             //todo 改为拒绝接单  数据统计在页面已退回状态中
@@ -830,10 +848,14 @@ public class AcceptCarriageOrderService {
             KwtLogisticsOrderUnit carriageOrderUnit = logisticsOrderUnitMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderUnit>()
                     .eq(KwtLogisticsOrderUnit::getLOrderId, id)
                     .eq(KwtLogisticsOrderUnit::getUnitType, NumberConstant.TWO));
-            commonService.publicLogisticsConsignmentPushMessage(consignOrderUnit, carriageOrderUnit, logisticsOrder.getLOrderNo(),
+//            commonService.publicLogisticsConsignmentPushMessage(consignOrderUnit, carriageOrderUnit, logisticsOrder.getLOrderNo(),
+//                    logisticsOrder.getCreateBy(), logisticsOrder.getEntId(),
+//                    MessageEnum.REJECT_ORDER, MessageEnum.CARRIAGE_DISALLOTMENT);
+            commonService.newSendLogisticsOrderToMessage(consignOrderUnit,carriageOrderUnit,logisticsOrder.getLOrderNo(),
                     logisticsOrder.getCreateBy(), logisticsOrder.getEntId(),
-                    MessageEnum.REJECT_ORDER, MessageEnum.CARRIAGE_DISALLOTMENT);
-
+                    messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl(),messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl(),
+                    messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl(),messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl(),
+                    MessageEnum.REJECT_ORDER, MessageEnum.CARRIAGE_DISALLOTMENT,"1");
         }
         //状态表新增状态数据
         KwtLogisticsOrderTrack track = logisticsOrderTrackMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderTrack>()
@@ -1404,6 +1426,7 @@ public class AcceptCarriageOrderService {
         statusList.add(CarWaybillEnum.COMPLETION_LOADING.getCode());
         statusList.add(CarWaybillEnum.WAIT_UNLOADING.getCode());
         statusList.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
+        statusList.add(CarWaybillEnum.APPROVAL_IN.getCode());
         int count = waybillOrderMapper.selectDataByLorderId(id, statusList);
         if (count > NumberConstant.ZERO) {
             throw new RuntimeException("检测您现在有运单正在执行中,该订单目前不可完结,请先将运单执行完毕");
@@ -1466,6 +1489,17 @@ public class AcceptCarriageOrderService {
                 log.info("承运订单-分包托运-手动完结订单异常,传递信息:{},返回信息:{}", JSONObject.toJSONString(tradeOrder), JSONObject.toJSONString(httpResult));
                 throw new BusinessException("单据完结出现错误!" + httpResult.getMsg());
             }
+            /**将生成的分配量->贸易订单*/
+            CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
+            param.setTOrderId(Long.valueOf(logisticsOrder.getTOrderId()));
+            param.setEntrustAmount(orderFinishDTO.getLoadAmount().subtract(logisticsOrder.getAmount()));
+            param.setUpdateBy(LoginUserHolder.getUserId());
+            param.setUpdateByName(LoginUserHolder.getUserName());
+            HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
+            if (result1.getCode() != HttpStatus.SUCCESS_CODE) {
+                log.info("{}拒绝接单->贸易订单失败!,返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(result1));
+                throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 拒绝接单->贸易订单失败!" + result1.getMsg());
+            }
         }
 
         //修改合同履约量
@@ -1504,6 +1538,8 @@ public class AcceptCarriageOrderService {
 //                }
 //            }
 //        }
+        transportCommonService.closeHandle(logisticsOrder.getId());
+        waybillOrderService.cancelSendCar(logisticsOrder.getId());
         return HttpResult.ok("承运订单-分包托运完结订单成功");
     }
 
@@ -1733,14 +1769,14 @@ public class AcceptCarriageOrderService {
             }
         }
         if (unitOne != null) {
-            orderDetailVO.setConsignCompanyId(unitOne.getId());
+            orderDetailVO.setConsignCompanyId(unitOne.getEntId());
             orderDetailVO.setConsignCompany(unitOne.getFirmName());
             orderDetailVO.setConsignContacts(unitOne.getContacts());
             orderDetailVO.setConsignPhone(unitOne.getPhone());
             orderDetailVO.setCollectionCompany(unitOne.getFirmName());
         }
         if (unitTwo != null) {
-            orderDetailVO.setCarrierCompanyId(unitTwo.getId());
+            orderDetailVO.setCarrierCompanyId(unitTwo.getEntId());
             orderDetailVO.setCarrierCompany(unitTwo.getFirmName());
             orderDetailVO.setCarrierContacts(unitTwo.getContacts());
             orderDetailVO.setCarrierPhone(unitTwo.getPhone());
@@ -1922,8 +1958,16 @@ public class AcceptCarriageOrderService {
         carriageUnit.setFirmName(orderDTO.getAcceptCompany());
         carriageUnit.setContactsId(Long.parseLong(orderDTO.getAcceptContactsId()));
         System.out.println("承运订单新建订单-消息列表推送 start");
-        commonService.publicLogisticsConsignmentPushMessage(consignUnit, carriageUnit, lOrderNo, LoginUserHolder.getUserId(), LoginUserHolder.getEntId()
-                , MessageEnum.CARRIAGE_NEW_LOGISTICS, MessageEnum.CARRIAGE_NEW_LOGISTICS_ORDER);
+//        commonService.publicLogisticsConsignmentPushMessage(consignUnit, carriageUnit, lOrderNo, LoginUserHolder.getUserId(), LoginUserHolder.getEntId()
+//                , MessageEnum.CARRIAGE_NEW_LOGISTICS, MessageEnum.CARRIAGE_NEW_LOGISTICS_ORDER);
+
+        commonService.newSendLogisticsOrderToMessage(consignUnit, carriageUnit, lOrderNo, LoginUserHolder.getUserId(), LoginUserHolder.getEntId()
+                , messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl(), messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl()
+                , messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl(), messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl()
+                , MessageEnum.NEW_LOGISTICS_ORDER, MessageEnum.NEW_CARRIAGE_ORDER
+                ,"1"
+        );
+
         System.out.println("承运订单新建订单-消息列表推送 end ");
         return HttpResult.ok();
     }
@@ -2120,7 +2164,7 @@ public class AcceptCarriageOrderService {
         unit.setEntId(Long.parseLong(orderDTO.getAcceptCompanyId()));
         EntCacheResDto ent1 = entMap.get(Long.parseLong(orderDTO.getAcceptCompanyId()));
         if (Objects.isNull(ent1)) {
-            throw new BusinessException("企业:" + orderDTO.getConsignCompany() + "的一级企业信息不存在!");
+            throw new BusinessException("企业:" + orderDTO.getAcceptCompany() + "的一级企业信息不存在!");
         }
         unit.setContactsId(Long.parseLong(orderDTO.getAcceptContactsId()));
         unit.setTopEntId(ent1.getId());
@@ -2751,13 +2795,13 @@ public class AcceptCarriageOrderService {
         vo.setLastTotalPrice(lastWeek.getTotalPrice());
 
         /**计算待承运量*/
-        computeCompareWaitingAmount(resultVO,currentWeek,lastWeek);
+        computeCompareWaitingAmount(resultVO, currentWeek, lastWeek);
 
         /**承运量*/
-        computeCompareAmount(resultVO,currentWeek,lastWeek);
+        computeCompareAmount(resultVO, currentWeek, lastWeek);
 
         /**总金额(费用)*/
-        computeCompareTotalPrice(resultVO,currentWeek,lastWeek);
+        computeCompareTotalPrice(resultVO, currentWeek, lastWeek);
 
         /**待处理的金额*/
         SettlementMoney settlementMoney = paymentDubboService.countCarrier(id, dateType);
@@ -2825,7 +2869,7 @@ public class AcceptCarriageOrderService {
         resultVO.setAmountVO(amountVO);
     }
 
-    private void computeCompareWaitingAmount(StatisticsResultVO resultVO,StatisticsByOrderVO currentWeek,StatisticsByOrderVO lastWeek) {
+    private void computeCompareWaitingAmount(StatisticsResultVO resultVO, StatisticsByOrderVO currentWeek, StatisticsByOrderVO lastWeek) {
         Integer flag = 1;
         BigDecimal chainRatio = new BigDecimal("0.00");
         if (currentWeek.getWaitingAmount().compareTo(new BigDecimal("0.00")) == 0
@@ -2886,7 +2930,20 @@ public class AcceptCarriageOrderService {
             //结束时间
             String dateEnd = cn.hutool.core.date.DateUtil.format(dateTime, DEF_DATE_FORMAT);
 
-            List<LogisticsOrderStatisticsVO> list = logisticsOrderMapper.workbenchLogisticsOrderStatisticsByMonth(id, statusList, OrderTypeEnum.ACCEPT_CARRIAGE_ORDER.getType(), dateStart, dateEnd);
+            List<LogisticsOrderStatisticsVO> list = logisticsOrderMapper.workbenchLogisticsOrderStatisticsByMonth(id, statusList,
+                    OrderTypeEnum.ACCEPT_CARRIAGE_ORDER.getType(), dateStart, dateEnd, logisticsOrderStatistics.getTypeOne(), logisticsOrderStatistics.getTypeTwo());
+            if (logisticsOrderStatistics.getTypeOne().equals("2")) {
+                list.forEach(vo -> {
+                    vo.setTypeTwo(vo.getTypeTwo().setScale(2, RoundingMode.HALF_UP));
+                    vo.setTypeOne(vo.getTypeOne().divide(new BigDecimal("10000")).setScale(2, RoundingMode.HALF_UP));
+                });
+            }
+            if (logisticsOrderStatistics.getTypeTwo().equals("2")) {
+                list.forEach(vo -> {
+                    vo.setTypeOne(vo.getTypeOne().setScale(2, RoundingMode.HALF_UP));
+                    vo.setTypeTwo(vo.getTypeTwo().divide(new BigDecimal("10000")).setScale(2, RoundingMode.HALF_UP));
+                });
+            }
             return HttpResult.ok(list);
         } else if (String.valueOf(NumberConstant.ONE).equals(logisticsOrderStatistics.getDateType())) {
             //开始时间
@@ -2899,7 +2956,20 @@ public class AcceptCarriageOrderService {
             }
             //结束时间
             String dateEnd = DateUtil.getLastWeekDateEndToString(0);
-            List<LogisticsOrderStatisticsVO> list = logisticsOrderMapper.workbenchLogisticsOrderStatisticsByDays(id, statusList, OrderTypeEnum.ACCEPT_CARRIAGE_ORDER.getType(), dateStart, dateEnd);
+            List<LogisticsOrderStatisticsVO> list = logisticsOrderMapper.workbenchLogisticsOrderStatisticsByDays(id, statusList,
+                    OrderTypeEnum.ACCEPT_CARRIAGE_ORDER.getType(), dateStart, dateEnd, logisticsOrderStatistics.getTypeOne(), logisticsOrderStatistics.getTypeTwo());
+            if (logisticsOrderStatistics.getTypeOne().equals("2")) {
+                list.forEach(vo -> {
+                    vo.setTypeTwo(vo.getTypeTwo().setScale(2, RoundingMode.HALF_UP));
+                    vo.setTypeOne(vo.getTypeOne().divide(new BigDecimal("10000")).setScale(2, RoundingMode.HALF_UP));
+                });
+            }
+            if (logisticsOrderStatistics.getTypeTwo().equals("2")) {
+                list.forEach(vo -> {
+                    vo.setTypeOne(vo.getTypeOne().setScale(2, RoundingMode.HALF_UP));
+                    vo.setTypeTwo(vo.getTypeTwo().divide(new BigDecimal("10000")).setScale(2, RoundingMode.HALF_UP));
+                });
+            }
             return HttpResult.ok(list);
         }
         return null;

+ 259 - 46
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/CommonService.java

@@ -25,6 +25,7 @@ import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.dao.KwtLogisticsOrderContractMapper;
 import com.sckw.transport.dao.KwtLogisticsOrderMapper;
 import com.sckw.transport.model.KwtLogisticsOrder;
@@ -55,6 +56,9 @@ public class CommonService {
     @Autowired
     private StreamBridge streamBridge;
 
+    @Autowired
+    private MessageUrlConfig messageUrlConfig;
+
     @Value("${message.logistics.order.consignLogisticsOrderUrl}")
     private String consignLogisticsOrderUrl;
 
@@ -237,23 +241,136 @@ public class CommonService {
     /**
      * 发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]
      *
-     * @param checkUnit    托运单位
+     * @param consignUnit    托运单位
+     * @param carriageUnit   承运单位
+     * @param orderNo        单据号
+     * @param createBy       创建人
+     * @param entId          创建数据的企业id
+     * @param pcConsignUrl   PC托运地址
+     * @param appConsignUrl  app托运地址
+     * @param pcCarriageUrl  PC承运地址
+     * @param appCarriageUrl app承运地址
+     * @param type 1代表给托运创建人发 2代表给承运创建人发
+     */
+    public void newSendLogisticsOrderToMessage(KwtLogisticsOrderUnit consignUnit, KwtLogisticsOrderUnit carriageUnit,
+                                               String orderNo, Long createBy, Long entId,
+                                               String pcConsignUrl, String appConsignUrl,
+                                               String pcCarriageUrl, String appCarriageUrl,
+                                               MessageEnum consignMessageEnum, MessageEnum carriageMessageEnum,
+                                               String type
+    ) {
+        boolean flag = false;
+        if (createBy.equals(consignUnit.getContactsId()) || createBy.equals(carriageUnit.getContactsId())) {
+            flag = true;
+        }
+        Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN);
+        map.put("orderNo", orderNo);
+        if (flag && createBy.equals(consignUnit.getContactsId())) {
+            sendLogisticsConsignMessage(consignUnit, map, pcConsignUrl, appConsignUrl,consignMessageEnum);
+            sendLogisticsCarriageMessage(carriageUnit, map, pcCarriageUrl, appCarriageUrl,carriageMessageEnum);
+        } else if (flag && createBy.equals(carriageUnit.getContactsId())) {
+            sendLogisticsCarriageMessage(carriageUnit, map, pcCarriageUrl, appCarriageUrl,carriageMessageEnum);
+            sendLogisticsConsignMessage(consignUnit, map, pcConsignUrl, appConsignUrl,consignMessageEnum);
+        } else {
+            sendLogisticsConsignMessage(consignUnit, map, pcConsignUrl, appConsignUrl,consignMessageEnum);
+            sendLogisticsCarriageMessage(carriageUnit, map, pcCarriageUrl, appCarriageUrl,carriageMessageEnum);
+            if (type.equals("1")) {
+                sendLogisticsCreateByMessage(createBy, entId, map,pcConsignUrl,appConsignUrl,consignMessageEnum);
+            } else {
+                sendLogisticsCreateByMessage(createBy, entId, map, pcCarriageUrl, appCarriageUrl,carriageMessageEnum);
+            }
+
+        }
+
+    }
+
+    private void sendLogisticsCreateByMessage(Long createBy, Long entId, Map<String, Object> map, String pcUrl, String appUrl,MessageEnum messageEnum) {
+        UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(createBy);
+        //给订单创建人发消息
+        List<UserInfo> userInfos = new ArrayList<>();
+        UserInfo createUser = new UserInfo();
+        createUser.setUserId(createBy).setEntId(entId);
+        userInfos.add(createUser);
+        map.put("companyName", userCacheResDto == null ? null : userCacheResDto.getEntInfo().getFirmName());
+        SckwMessage msg = new SckwMessage();
+        msg.setRequestId(UUIDUtils.get32UUID())
+                .setMessageEnum(messageEnum)
+                .setParams(map)
+                .setMsgUrls(new HashMap<>(NumberConstant.SIXTEEN) {
+                    {
+                        put("pc", pcUrl);
+                        put("app", appUrl);
+                    }
+                })
+                .setUserInfos(userInfos)
+                .setCreateBy(LoginUserHolder.getUserId());
+        log.info("发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]-创建人:{}", JSON.toJSONString(msg));
+        streamBridge.send("sckw-message", JSON.toJSONString(msg));
+    }
+
+    private void sendLogisticsCarriageMessage(KwtLogisticsOrderUnit carriageUnit, Map<String, Object> map, String pcUrl, String appUrl,MessageEnum messageEnum) {
+        //给业务联系人发消息[承运方]
+        List<UserInfo> userInfoList = new ArrayList<>();
+        UserInfo userInfo = new UserInfo();
+        userInfo.setUserId(carriageUnit.getContactsId()).setEntId(carriageUnit.getTopEntId());
+        userInfoList.add(userInfo);
+        map.put("companyName", carriageUnit.getFirmName());
+        SckwMessage sckwMessage = new SckwMessage();
+        sckwMessage.setRequestId(UUIDUtils.get32UUID())
+                .setMessageEnum(messageEnum)
+                .setParams(map)
+                .setMsgUrls(new HashMap<>() {{
+                    put("pc", pcUrl);
+                    put("app", appUrl);
+                }})
+                .setUserInfos(userInfoList)
+                .setCreateBy(LoginUserHolder.getUserId());
+        log.info("发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]-[承运方]-业务联系人:{}", JSON.toJSONString(sckwMessage));
+        streamBridge.send("sckw-message", JSON.toJSONString(sckwMessage));
+    }
+
+    private void sendLogisticsConsignMessage(KwtLogisticsOrderUnit consignUnit, Map<String, Object> map, String pcUrl, String appUrl,MessageEnum messageEnum) {
+        //给业务联系人发消息[托运方]
+        List<UserInfo> list = new ArrayList<>();
+        UserInfo userInfo = new UserInfo();
+        userInfo.setUserId(consignUnit.getContactsId()).setEntId(consignUnit.getTopEntId());
+        list.add(userInfo);
+        map.put("companyName", consignUnit.getFirmName());
+        SckwMessage message = new SckwMessage();
+        message.setRequestId(UUIDUtils.get32UUID())
+                .setMessageEnum(messageEnum)
+                .setParams(map)
+                .setMsgUrls(new HashMap<>() {{
+                    put("pc", pcUrl);
+                    put("app", appUrl);
+                }})
+                .setUserInfos(list)
+                .setCreateBy(LoginUserHolder.getUserId());
+        log.info("发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]-[托运方]-业务联系人:{}", JSON.toJSONString(message));
+        streamBridge.send("sckw-message", JSON.toJSONString(message));
+    }
+
+
+    /**
+     * 发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]
+     *
+     * @param consignUnit  托运单位
      * @param carriageUnit 承运单位
      * @param orderNo      单据号
      * @param createBy     创建人
      * @param entId        创建数据的企业id
      */
-    public void initIatingLogisticsConsignment(KwtLogisticsOrderUnit checkUnit, KwtLogisticsOrderUnit carriageUnit, String orderNo, Long createBy, Long entId) {
+    public void initIatingLogisticsConsignment(KwtLogisticsOrderUnit consignUnit, KwtLogisticsOrderUnit carriageUnit, String orderNo, Long createBy, Long entId) {
         boolean flag = false;
-        if (createBy.equals(checkUnit.getContactsId()) || createBy.equals(carriageUnit.getContactsId())) {
+        if (createBy.equals(consignUnit.getContactsId()) || createBy.equals(carriageUnit.getContactsId())) {
             flag = true;
         }
         Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN);
         map.put("orderNo", orderNo);
-        if (flag && createBy.equals(checkUnit.getContactsId())) {
-            sendMessageLogistics(checkUnit, carriageUnit, map);
+        if (flag && createBy.equals(consignUnit.getContactsId())) {
+            sendMessageLogistics(consignUnit, carriageUnit, map);
         } else if (flag && createBy.equals(carriageUnit.getContactsId())) {
-            sendMessageLogistics(checkUnit, carriageUnit, map);
+            sendMessageLogistics(consignUnit, carriageUnit, map);
         } else {
             UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(createBy);
             //给订单创建人发消息
@@ -266,7 +383,12 @@ public class CommonService {
             msg.setRequestId(UUIDUtils.get32UUID())
                     .setMessageEnum(MessageEnum.INITIATING_LOGISTICS_CONSIGNMENT)
                     .setParams(map)
-                    .setMsgUrl(consignLogisticsOrderUrl)
+                    .setMsgUrls(new HashMap<>(NumberConstant.SIXTEEN) {
+                        {
+                            put("pc", messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl());
+                            put("app", messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl());
+                        }
+                    })
                     .setUserInfos(userInfos)
                     .setCreateBy(LoginUserHolder.getUserId());
             log.info("发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]-创建人:{}", JSON.toJSONString(msg));
@@ -294,7 +416,7 @@ public class CommonService {
         sckwMessage.setRequestId(UUIDUtils.get32UUID())
                 .setMessageEnum(MessageEnum.INITIATING_LOGISTICS_CONSIGNMENT)
                 .setParams(map)
-                .setMsgUrl(carriageLogisticsOrderUrl)
+                .setMsgUrls(new HashMap<>(){{put("app",consignLogisticsOrderUrl);put("pc",carriageLogisticsOrderUrl);}})
                 .setUserInfos(userInfoList)
                 .setCreateBy(LoginUserHolder.getUserId());
         log.info("发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]-[承运方]-业务联系人:{}", JSON.toJSONString(sckwMessage));
@@ -310,7 +432,7 @@ public class CommonService {
         message.setRequestId(UUIDUtils.get32UUID())
                 .setMessageEnum(MessageEnum.NEW_CARRIAGE_ORDER)
                 .setParams(map)
-                .setMsgUrl(carriageLogisticsOrderUrl)
+                .setMsgUrls(new HashMap<>(){{put("app",consignLogisticsOrderUrl);put("pc",carriageLogisticsOrderUrl);}})
                 .setUserInfos(list)
                 .setCreateBy(LoginUserHolder.getUserId());
         log.info("发起物流托运-[贸易订单物流托运确认/承运订单分包托运确认]-[托运方]-业务联系人:{}", JSON.toJSONString(message));
@@ -338,36 +460,11 @@ public class CommonService {
         carriageUnit.setContactsId(Long.parseLong(addOrderDTO.getAcceptContactsId()));
         carriageUnit.setFirmName(addOrderDTO.getConsignCompany());
         carriageUnit.setTopEntId(acceptMap == null ? null : acceptMap.getId());
-        boolean flag = false;
-        if (createBy.equals(checkUnit.getContactsId()) || createBy.equals(carriageUnit.getContactsId())) {
-            flag = true;
-        }
-        Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN);
-        map.put("orderNo", lOrderNo);
-        if (flag && createBy.equals(checkUnit.getContactsId())) {
-            sendMessageNewLogisticsOrder(checkUnit, map, MessageEnum.NEW_LOGISTICS_ORDER, consignLogisticsOrderUrl);
-        } else if (flag && createBy.equals(carriageUnit.getContactsId())) {
-            sendMessageNewLogisticsOrder(carriageUnit, map, MessageEnum.NEW_CARRIAGE_ORDER, carriageLogisticsOrderUrl);
-        } else {
-            UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(createBy);
-            //给订单创建人发消息
-            List<UserInfo> userInfos = new ArrayList<>();
-            UserInfo createUser = new UserInfo();
-            createUser.setUserId(createBy).setEntId(entId);
-            userInfos.add(createUser);
-            map.put("companyName", userCacheResDto == null ? null : userCacheResDto.getEntInfo().getFirmName());
-            SckwMessage msg = new SckwMessage();
-            msg.setRequestId(UUIDUtils.get32UUID())
-                    .setMessageEnum(MessageEnum.NEW_LOGISTICS_ORDER)
-                    .setParams(map)
-                    .setMsgUrl(consignLogisticsOrderUrl)
-                    .setUserInfos(userInfos)
-                    .setCreateBy(LoginUserHolder.getUserId());
-            log.info("托运订单/承运订单自建物流订单-创建人:{}", JSON.toJSONString(msg));
-            streamBridge.send("sckw-message", JSON.toJSONString(msg));
-            sendMessageNewLogisticsOrder(checkUnit, map, MessageEnum.NEW_LOGISTICS_ORDER, consignLogisticsOrderUrl);
-            sendMessageNewLogisticsOrder(carriageUnit, map, MessageEnum.NEW_CARRIAGE_ORDER, carriageLogisticsOrderUrl);
-        }
+        newSendLogisticsOrderToMessage(checkUnit,carriageUnit,lOrderNo,createBy,entId
+                ,messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl(),messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl(),
+                messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl(),messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl(),
+                MessageEnum.NEW_LOGISTICS_ORDER,MessageEnum.NEW_CARRIAGE_ORDER,"1"
+        );
 
     }
 
@@ -391,7 +488,7 @@ public class CommonService {
         sckwMessage.setRequestId(UUIDUtils.get32UUID())
                 .setMessageEnum(messageEnum)
                 .setParams(map)
-                .setMsgUrl(consignLogisticsOrderUrl)
+                .setMsgUrls(new HashMap<>(){{put("app",consignLogisticsOrderUrl);put("pc",carriageLogisticsOrderUrl);}})
                 .setUserInfos(userInfoList)
                 .setCreateBy(LoginUserHolder.getUserId());
         log.info("托运订单/承运订单自建物流订单-业务联系人:{}", JSON.toJSONString(sckwMessage));
@@ -434,12 +531,15 @@ public class CommonService {
             msg.setRequestId(UUIDUtils.get32UUID())
                     .setMessageEnum(consignMessageEnum)
                     .setParams(map)
-                    .setMsgUrl(consignLogisticsOrderUrl)
+                    .setMsgUrls(new HashMap<>() {{
+                        put("pc", consignLogisticsOrderUrl);
+                        put("app", carriageLogisticsOrderUrl);
+                    }})
                     .setUserInfos(userInfos)
                     .setCreateBy(LoginUserHolder.getUserId());
             log.info(MessageEnum.getDesc(consignMessageEnum) + "-创建人:{}", JSON.toJSONString(msg));
             streamBridge.send("sckw-message", JSON.toJSONString(msg));
-            sendMessagePublicLogistics(consignUnit, carriageUnit, map,consignMessageEnum);
+            sendMessagePublicLogistics(consignUnit, carriageUnit, map, consignMessageEnum);
         }
     }
 
@@ -479,7 +579,10 @@ public class CommonService {
             msg.setRequestId(UUIDUtils.get32UUID())
                     .setMessageEnum(consignMessageEnum)
                     .setParams(map)
-                    .setMsgUrl(consignLogisticsOrderUrl)
+                    .setMsgUrls(new HashMap<>() {{
+                        put("pc", consignLogisticsOrderUrl);
+                        put("app", carriageLogisticsOrderUrl);
+                    }})
                     .setUserInfos(userInfos)
                     .setCreateBy(LoginUserHolder.getUserId());
             log.info(MessageEnum.getDesc(consignMessageEnum) + "-创建人:{}", JSON.toJSONString(msg));
@@ -500,7 +603,10 @@ public class CommonService {
         sckwMessage.setRequestId(UUIDUtils.get32UUID())
                 .setMessageEnum(consignMessageEnum)
                 .setParams(map)
-                .setMsgUrl(carriageLogisticsOrderUrl)
+                .setMsgUrls(new HashMap<>() {{
+                    put("pc", consignLogisticsOrderUrl);
+                    put("app", carriageLogisticsOrderUrl);
+                }})
                 .setUserInfos(userInfoList)
                 .setCreateBy(LoginUserHolder.getUserId());
         log.info(MessageEnum.getDesc(consignMessageEnum) + "-[承运方]-业务联系人:{}", JSON.toJSONString(sckwMessage));
@@ -511,13 +617,120 @@ public class CommonService {
         List<UserInfo> list = new ArrayList<>();
         UserInfo userInfo1 = new UserInfo();
         userInfo1.setUserId(consignUnit.getContactsId()).setEntId(consignUnit.getTopEntId());
-        list.add(userInfo);
+        list.add(userInfo1);
         map.put("companyName", consignUnit.getFirmName());
         SckwMessage message = new SckwMessage();
         message.setRequestId(UUIDUtils.get32UUID())
                 .setMessageEnum(MessageEnum.NEW_CARRIAGE_ORDER)
                 .setParams(map)
-                .setMsgUrl(carriageLogisticsOrderUrl)
+                .setMsgUrls(new HashMap<>() {{
+                    put("pc", consignLogisticsOrderUrl);
+                    put("app", carriageLogisticsOrderUrl);
+                }})
+                .setUserInfos(list)
+                .setCreateBy(LoginUserHolder.getUserId());
+        log.info(MessageEnum.getDesc(consignMessageEnum) + "-[托运方]-业务联系人:{}", JSON.toJSONString(message));
+        streamBridge.send("sckw-message", JSON.toJSONString(message));
+    }
+
+    /**
+     * @param consignUnit                     托运单位
+     * @param carriageUnit                    承运单位
+     * @param orderNo                         单据号
+     * @param createBy                        创建人
+     * @param entId                           企业id
+     * @param consignMessageEnum              托运消息体
+     * @param carriageMessageEnum             承运消息体
+     * @param pcConsignLogisticsAddOrderUrl   pc托运url
+     * @param pcCarriageLogisticsAddOrderUrl  pc承运url
+     * @param appConsignLogisticsAddOrderUrl  app托运url
+     * @param appCarriageLogisticsAddOrderUrl app承运url
+     */
+    public void pushMessageByUrl(KwtLogisticsOrderUnit consignUnit, KwtLogisticsOrderUnit carriageUnit, String orderNo, Long createBy, Long entId,
+                                 MessageEnum consignMessageEnum, MessageEnum carriageMessageEnum,
+                                 String pcConsignLogisticsAddOrderUrl, String pcCarriageLogisticsAddOrderUrl,
+                                 String appConsignLogisticsAddOrderUrl, String appCarriageLogisticsAddOrderUrl
+    ) {
+        boolean flag = false;
+        if (createBy.equals(consignUnit.getContactsId()) || createBy.equals(carriageUnit.getContactsId())) {
+            flag = true;
+        }
+        Map<String, Object> map = new HashMap<>(NumberConstant.SIXTEEN);
+        map.put("orderNo", orderNo);
+        if (flag && createBy.equals(consignUnit.getContactsId())) {
+            sendPushMessageByUrlLogistics(consignUnit, carriageUnit, map, consignMessageEnum, carriageMessageEnum);
+        } else if (flag && createBy.equals(carriageUnit.getContactsId())) {
+            sendPushMessageByUrlLogistics(consignUnit, carriageUnit, map, consignMessageEnum, carriageMessageEnum);
+        } else {
+            UserCacheResDto userCacheResDto = remoteSystemService.queryUserCacheById(createBy);
+            //给订单创建人发消息
+            List<UserInfo> userInfos = new ArrayList<>();
+            UserInfo createUser = new UserInfo();
+            createUser.setUserId(createBy).setEntId(entId);
+            userInfos.add(createUser);
+            map.put("companyName", userCacheResDto == null ? null : userCacheResDto.getEntInfo().getFirmName());
+            SckwMessage msg = new SckwMessage();
+            msg.setRequestId(UUIDUtils.get32UUID())
+                    .setMessageEnum(carriageMessageEnum)
+                    .setParams(map)
+                    .setMsgUrls(new HashMap<>(NumberConstant.SIXTEEN) {{
+                        put("pc", pcCarriageLogisticsAddOrderUrl);
+                        put("app", appCarriageLogisticsAddOrderUrl);
+                    }})
+                    .setUserInfos(userInfos)
+                    .setCreateBy(LoginUserHolder.getUserId());
+            log.info(MessageEnum.getDesc(consignMessageEnum) + "-创建人:{}", JSON.toJSONString(msg));
+            streamBridge.send("sckw-message", JSON.toJSONString(msg));
+            sendPushMessageByUrlLogistics(consignUnit, carriageUnit, map, consignMessageEnum, carriageMessageEnum);
+        }
+    }
+
+    /**
+     * @param consignUnit         托运单位
+     * @param carriageUnit        承运单位
+     * @param map
+     * @param consignMessageEnum  托运枚举
+     * @param carriageMessageEnum 承运枚
+     */
+    private void sendPushMessageByUrlLogistics(KwtLogisticsOrderUnit consignUnit, KwtLogisticsOrderUnit carriageUnit,
+                                               Map<String, Object> map,
+                                               MessageEnum consignMessageEnum,
+                                               MessageEnum carriageMessageEnum
+    ) {
+        //给业务联系人发消息[承运方]
+        List<UserInfo> userInfoList = new ArrayList<>();
+        UserInfo userInfo = new UserInfo();
+        userInfo.setUserId(carriageUnit.getContactsId()).setEntId(carriageUnit.getTopEntId());
+        userInfoList.add(userInfo);
+        map.put("companyName", carriageUnit.getFirmName());
+        SckwMessage sckwMessage = new SckwMessage();
+        sckwMessage.setRequestId(UUIDUtils.get32UUID())
+                .setMessageEnum(carriageMessageEnum)
+                .setParams(map)
+                .setMsgUrls(new HashMap<>() {{
+                    put("pc", messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl());
+                    put("app", messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl());
+                }})
+                .setUserInfos(userInfoList)
+                .setCreateBy(LoginUserHolder.getUserId());
+        log.info(MessageEnum.getDesc(carriageMessageEnum) + "-[承运方]-业务联系人:{}", JSON.toJSONString(sckwMessage));
+        streamBridge.send("sckw-message", JSON.toJSONString(sckwMessage));
+
+
+        //给业务联系人发消息[托运方]
+        List<UserInfo> list = new ArrayList<>();
+        UserInfo userInfo1 = new UserInfo();
+        userInfo1.setUserId(consignUnit.getContactsId()).setEntId(consignUnit.getTopEntId());
+        list.add(userInfo1);
+        map.put("companyName", consignUnit.getFirmName());
+        SckwMessage message = new SckwMessage();
+        message.setRequestId(UUIDUtils.get32UUID())
+                .setMessageEnum(consignMessageEnum)
+                .setParams(map)
+                .setMsgUrls(new HashMap<>() {{
+                    put("pc", messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl());
+                    put("app", messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl());
+                }})
                 .setUserInfos(list)
                 .setCreateBy(LoginUserHolder.getUserId());
         log.info(MessageEnum.getDesc(consignMessageEnum) + "-[托运方]-业务联系人:{}", JSON.toJSONString(message));

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

@@ -34,6 +34,7 @@ import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.mongo.model.TableTops;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.CompleteLogisticsOrderParam;
+import com.sckw.order.api.model.CreateOrCancelLogisticsOrderParam;
 import com.sckw.order.api.model.OrderDetailRes;
 import com.sckw.order.api.model.UnitInfoDetailRes;
 import com.sckw.payment.api.dubbo.PaymentDubboService;
@@ -45,7 +46,7 @@ import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.dao.*;
-import com.sckw.transport.enums.OrderTypeEnum;
+import com.sckw.transport.common.enums.OrderTypeEnum;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.param.AcceptCarriageOrderQuery;
@@ -66,6 +67,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.DecimalFormat;
 import java.text.ParseException;
 import java.time.LocalDate;
@@ -144,7 +146,10 @@ public class ConsignOrderService {
     public KwtLogisticsOrderCirculateMapper kwtLogisticsOrderCirculateMapper;
 
     @Autowired
-    TransportCommonService transportCommonService;
+    public TransportCommonService transportCommonService;
+
+    @Autowired
+    KwtWaybillOrderService waybillOrderService;
 
 
     /**
@@ -643,7 +648,7 @@ public class ConsignOrderService {
                     //扣亏量/吨
                     BigDecimal deduct = defectiveWeigh.compareTo(new BigDecimal("0.00")) == 0 ? new BigDecimal("0.00") : defectiveWeigh.subtract(multiply);
                     carWaybillVo.setWOrderId(String.valueOf(kwtWaybillOrder.getId()));
-                    carWaybillVo.setWOrderNo(order.getLOrderNo());
+                    carWaybillVo.setWOrderNo(kwtWaybillOrder.getWOrderNo());
                     carWaybillVo.setTruckNo(kwtWaybillOrder.getTruckNo());
                     carWaybillVo.setStatus(String.valueOf(kwtWaybillOrder.getStatus()));
                     carWaybillVo.setStatusLabel(CarWaybillEnum.getName(kwtWaybillOrder.getStatus()));
@@ -859,6 +864,16 @@ public class ConsignOrderService {
                 log.info("贸易订单手动完结订单异常,传递信息:{},返回信息:{}", JSONObject.toJSONString(tradeOrder), JSONObject.toJSONString(httpResult));
                 throw new BusinessException("单据完结出现错误!" + httpResult.getMsg());
             }
+            CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
+            param.setTOrderId(Long.valueOf(logisticsOrder.getTOrderId()));
+            param.setEntrustAmount(orderFinishDTO.getLoadAmount().subtract(logisticsOrder.getAmount()));
+            param.setUpdateBy(LoginUserHolder.getUserId());
+            param.setUpdateByName(LoginUserHolder.getUserName());
+            HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
+            if (result1.getCode() != HttpStatus.SUCCESS_CODE) {
+                log.info("托运订单手动完结订单-完结订单,返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(result1));
+                throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 托运订单手动完结订单-完结订单!"+result1.getMsg());
+            }
         }
 
         //修改合同履约量
@@ -873,6 +888,7 @@ public class ConsignOrderService {
         }
 
         transportCommonService.closeHandle(logisticsOrder.getId());
+        waybillOrderService.cancelSendCar(logisticsOrder.getId());
         return HttpResult.ok("托运订单-完结订单成功");
     }
 
@@ -958,13 +974,14 @@ public class ConsignOrderService {
     private boolean judgmentWaybillOrderIsFinish(String id) {
         boolean flag = false;
         List<Integer> statusList = new ArrayList<>();
-        statusList.add(CarWaybillEnum.PENDING_ORDER.getCode());
+//        statusList.add(CarWaybillEnum.PENDING_ORDER.getCode());
         statusList.add(CarWaybillEnum.PENDING_VEHICLE.getCode());
         statusList.add(CarWaybillEnum.EXIT_COMPLETED.getCode());
         statusList.add(CarWaybillEnum.WAIT_LOADING.getCode());
         statusList.add(CarWaybillEnum.COMPLETION_LOADING.getCode());
         statusList.add(CarWaybillEnum.WAIT_UNLOADING.getCode());
         statusList.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
+        statusList.add(CarWaybillEnum.APPROVAL_IN.getCode());
 //        statusList.add(CarWaybillEnum.APPROVAL_PASS.getCode());
         int count = kwtWaybillOrderMapper.selectDataByLorderId(id, statusList);
         if (count > NumberConstant.ZERO) {
@@ -1162,7 +1179,7 @@ public class ConsignOrderService {
      * @return
      */
     public HttpResult consignOrderFinishDetail(String orderId) {
-//        OrderFinishVO orderFinishVO = kwtLogisticsOrderMapper.selectOrderFinishData(orderId);
+        OrderFinishVO finishVO = kwtLogisticsOrderMapper.selectOrderFinishData(orderId);
         Map<String, Object> map = new HashMap(NumberConstant.SIXTEEN);
         map.put("upperlOrderId", orderId);
         //随意给个值 主要是传递不为null
@@ -1172,6 +1189,7 @@ public class ConsignOrderService {
         orderFinishVO.setLoadAmount(waybillOrderCount == null ? new BigDecimal("0.00") : waybillOrderCount.getLoadAmount());
         orderFinishVO.setUnloadAmount(waybillOrderCount == null ? new BigDecimal("0.00") : waybillOrderCount.getUnloadAmount());
         orderFinishVO.setNumber(waybillOrderCount == null ? NumberConstant.ZERO : waybillOrderCount.getTotalComplete());
+        orderFinishVO.setAmount(finishVO.getAmount());
         return HttpResult.ok(orderFinishVO);
     }
 
@@ -2204,7 +2222,20 @@ public class ConsignOrderService {
             //结束时间
             String dateEnd = cn.hutool.core.date.DateUtil.format(dateTime, DEF_DATE_FORMAT);
 
-            List<LogisticsOrderStatisticsVO> list = kwtLogisticsOrderMapper.workbenchLogisticsOrderStatisticsByMonth(id, statusList, OrderTypeEnum.CONSIGN_ORDER.getType(), dateStart, dateEnd);
+            List<LogisticsOrderStatisticsVO> list = kwtLogisticsOrderMapper.workbenchLogisticsOrderStatisticsByMonth(id, statusList,
+                    OrderTypeEnum.CONSIGN_ORDER.getType(), dateStart, dateEnd,logisticsOrderStatistics.getTypeOne(),logisticsOrderStatistics.getTypeTwo());
+            if (logisticsOrderStatistics.getTypeOne().equals("2")){
+                list.forEach(vo -> {
+                    vo.setTypeTwo(vo.getTypeTwo().setScale(2,RoundingMode.HALF_UP));
+                    vo.setTypeOne(vo.getTypeOne().divide(new BigDecimal("10000")).setScale(2, RoundingMode.HALF_UP));
+                });
+            }
+            if (logisticsOrderStatistics.getTypeTwo().equals("2")){
+                list.forEach(vo -> {
+                    vo.setTypeOne(vo.getTypeOne().setScale(2,RoundingMode.HALF_UP));
+                    vo.setTypeTwo(vo.getTypeTwo().divide(new BigDecimal("10000")).setScale(2, RoundingMode.HALF_UP));
+                });
+            }
             return HttpResult.ok(list);
         } else if (String.valueOf(NumberConstant.ONE).equals(logisticsOrderStatistics.getDateType())) {
             //开始时间
@@ -2217,7 +2248,20 @@ public class ConsignOrderService {
             }
             //结束时间
             String dateEnd = DateUtil.getLastWeekDateEndToString(0);
-            List<LogisticsOrderStatisticsVO> list = kwtLogisticsOrderMapper.workbenchLogisticsOrderStatisticsByDays(id, statusList, OrderTypeEnum.CONSIGN_ORDER.getType(), dateStart, dateEnd);
+            List<LogisticsOrderStatisticsVO> list = kwtLogisticsOrderMapper.workbenchLogisticsOrderStatisticsByDays(id, statusList,
+                    OrderTypeEnum.CONSIGN_ORDER.getType(), dateStart, dateEnd,logisticsOrderStatistics.getTypeOne(),logisticsOrderStatistics.getTypeTwo());
+            if (logisticsOrderStatistics.getTypeOne().equals("2")){
+                list.forEach(vo -> {
+                    vo.setTypeTwo(vo.getTypeTwo().setScale(2,RoundingMode.HALF_UP));
+                    vo.setTypeOne(vo.getTypeOne().divide(new BigDecimal("10000")).setScale(2, RoundingMode.HALF_UP));
+                });
+            }
+            if (logisticsOrderStatistics.getTypeTwo().equals("2")){
+                list.forEach(vo -> {
+                    vo.setTypeOne(vo.getTypeOne().setScale(2,RoundingMode.HALF_UP));
+                    vo.setTypeTwo(vo.getTypeTwo().divide(new BigDecimal("10000")).setScale(2, RoundingMode.HALF_UP));
+                });
+            }
             return HttpResult.ok(list);
         }
         return null;

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

@@ -113,7 +113,10 @@ public class KwtWaybillOrderService {
      * @date 2023/8/1
      **/
     public Map<String, Object> findStatisticsSumByDriver(Map params) {
-        return waybillOrderDao.findStatisticsSumByDriver(params);
+        Map<String, Object> data = waybillOrderDao.findStatisticsSumByDriver(params);
+        Double deficitLossAmount = waybillOrderDao.deficitLossAmountByDriver(params);
+        data.put("deficitLossAmount", deficitLossAmount);
+        return data;
     }
 
     /**

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

@@ -33,6 +33,7 @@ import com.sckw.stream.enums.MessageEnum;
 import com.sckw.stream.model.SckwBusSum;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.EntCacheResDto;
+import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.LogisticsOrderDTO;
@@ -73,6 +74,15 @@ public class LogisticsConsignmentService {
     @Autowired
     RedisLockUtil redisLockUtil;
 
+    @Autowired
+    public TransportCommonService transportCommonService;
+
+    @Autowired
+    KwtWaybillOrderService waybillOrderService;
+
+    @Autowired
+    MessageUrlConfig messageUrlConfig;
+
     @Autowired
     public CommonService commonService;
 
@@ -233,7 +243,11 @@ public class LogisticsConsignmentService {
         carriageUnit.setTopEntId(consignentMap == null ? null : consignentMap.getId());
         carriageUnit.setContactsId(Long.parseLong(bo.getConsignContactsId()));
 
-        commonService.initIatingLogisticsConsignment(checkUnit, carriageUnit, lOrderNo, LoginUserHolder.getUserId(), LoginUserHolder.getEntId());
+//        commonService.initIatingLogisticsConsignment(checkUnit, carriageUnit, lOrderNo, LoginUserHolder.getUserId(), LoginUserHolder.getEntId());
+        commonService.newSendLogisticsOrderToMessage(checkUnit, carriageUnit, lOrderNo, LoginUserHolder.getUserId(), LoginUserHolder.getEntId(),
+                messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl(),messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl(),
+                messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl(),messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl(),
+                MessageEnum.INITIATING_LOGISTICS_CONSIGNMENT,MessageEnum.NEW_CARRIAGE_ORDER,"1");
     }
 
     /**
@@ -800,7 +814,7 @@ public class LogisticsConsignmentService {
             List<LogisticsOrderDTO> list = new ArrayList<>();
             if (flag) {
                 /**数据展示*/
-                list = kwtLogisticsOrderMapper.selectOrderListNotPage(id, type);
+                list = kwtLogisticsOrderMapper.selectOrderListNotPage(id, "2");
                 /**计量单位*/
                 Map<String, String> unitTypeDictData = commonService.getDictData(DictTypeEnum.UNIT_TYPE.getType());
                 /**运价方式*/
@@ -885,6 +899,7 @@ public class LogisticsConsignmentService {
 //            orderCarDTO.setDriverName(orderCarDTO.getDriverName());
 //            orderCarDTO.setDriverPhone(orderCarDTO.getDriverPhone());
 //            orderCarDTO.setDriverCard(orderCarDTO.getDriverCard());
+                    orderCarDTO.setStatusLabel(CarWaybillEnum.getName(orderCarDTO.getStatus()));
                     orderCarDTO.setLoadAmount(truck.get(orderCarDTO.getTruckNo()) == null ?
                             null : (truck.get(orderCarDTO.getTruckNo()).getActualWeight() == null ?
                             null : (String.valueOf(truck.get(orderCarDTO.getTruckNo()).getActualWeight()))));
@@ -943,6 +958,7 @@ public class LogisticsConsignmentService {
 //            orderCarDTO.setDriverName(orderCarDTO.getDriverName());
 //            orderCarDTO.setDriverPhone(orderCarDTO.getDriverPhone());
 //            orderCarDTO.setDriverCard(orderCarDTO.getDriverCard());
+                    orderCarDTO.setStatusLabel(CarWaybillEnum.getName(orderCarDTO.getStatus()));
                     orderCarDTO.setLoadAmount(truck.get(orderCarDTO.getTruckNo()) == null ?
                             null : (truck.get(orderCarDTO.getTruckNo()).getActualWeight() == null ?
                             null : (String.valueOf(truck.get(orderCarDTO.getTruckNo()).getActualWeight()))));
@@ -1090,8 +1106,14 @@ public class LogisticsConsignmentService {
                         new LambdaQueryWrapper<KwtLogisticsOrderUnit>()
                                 .eq(KwtLogisticsOrderUnit::getLOrderId, kwtLogisticsOrder.getId())
                                 .eq(KwtLogisticsOrderUnit::getUnitType, NumberConstant.TWO));
-                commonService.cancelLogisticsConsignment(consignUnit, carriageUnit, kwtLogisticsOrder.getLOrderNo(), kwtLogisticsOrder.getCreateBy(),
-                        kwtLogisticsOrder.getEntId(), MessageEnum.CANCELLATION_LOGISTICS, MessageEnum.CARRIAGE_CANCELLATION_LOGISTICS);
+//                commonService.cancelLogisticsConsignment(consignUnit, carriageUnit, kwtLogisticsOrder.getLOrderNo(), kwtLogisticsOrder.getCreateBy(),
+//                        kwtLogisticsOrder.getEntId(), MessageEnum.CANCELLATION_LOGISTICS, MessageEnum.CARRIAGE_CANCELLATION_LOGISTICS);
+                commonService.newSendLogisticsOrderToMessage(consignUnit, carriageUnit, kwtLogisticsOrder.getLOrderNo(), kwtLogisticsOrder.getCreateBy(),
+                        kwtLogisticsOrder.getEntId(),
+                        messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl(),messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl(),
+                        messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl(),messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl(),
+                        MessageEnum.CANCELLATION_LOGISTICS, MessageEnum.CARRIAGE_CANCELLATION_LOGISTICS,
+                        "1");
             } else {
                 result.setMsg("操作失败:" + httpResult.getMsg());
                 result.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
@@ -1184,8 +1206,13 @@ public class LogisticsConsignmentService {
                         new LambdaQueryWrapper<KwtLogisticsOrderUnit>()
                                 .eq(KwtLogisticsOrderUnit::getLOrderId, id)
                                 .eq(KwtLogisticsOrderUnit::getUnitType, NumberConstant.TWO));
-                commonService.cancelLogisticsConsignment(consignUnit, carriageUnit, kwtLogisticsOrder.getLOrderNo(), kwtLogisticsOrder.getCreateBy(),
-                        kwtLogisticsOrder.getEntId(), MessageEnum.CANCELLATION_LOGISTICS, MessageEnum.CARRIAGE_CANCELLATION_LOGISTICS);
+//                commonService.cancelLogisticsConsignment(consignUnit, carriageUnit, kwtLogisticsOrder.getLOrderNo(), kwtLogisticsOrder.getCreateBy(),
+//                        kwtLogisticsOrder.getEntId(), MessageEnum.CANCELLATION_LOGISTICS, MessageEnum.CARRIAGE_CANCELLATION_LOGISTICS);
+                commonService.newSendLogisticsOrderToMessage(consignUnit, carriageUnit, kwtLogisticsOrder.getLOrderNo(), kwtLogisticsOrder.getCreateBy(),
+                        kwtLogisticsOrder.getEntId(),
+                        messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl(),messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl(),
+                        messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl(),messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl(),
+                        MessageEnum.CANCELLATION_LOGISTICS, MessageEnum.CARRIAGE_CANCELLATION_LOGISTICS,"1");
             } else {
                 result.setCode(HttpStatus.GLOBAL_EXCEPTION_CODE);
                 result.setMsg("操作失败:" + httpResult.getMsg());
@@ -1328,6 +1355,18 @@ public class LogisticsConsignmentService {
             log.info("贸易订单-采购订单/销售订单-手动完结订单异常,传递信息:{},返回信息:{}", JSONObject.toJSONString(tradeOrder), JSONObject.toJSONString(httpResult));
             throw new BusinessException("单据完结出现错误!" + httpResult.getMsg());
         }
+        CreateOrCancelLogisticsOrderParam param = new CreateOrCancelLogisticsOrderParam();
+        param.setTOrderId(Long.valueOf(logisticsOrder.getTOrderId()));
+        param.setEntrustAmount(orderFinishDTO.getLoadAmount().subtract(logisticsOrder.getAmount()));
+        param.setUpdateBy(LoginUserHolder.getUserId());
+        param.setUpdateByName(LoginUserHolder.getUserName());
+        HttpResult result1 = tradeOrderInfoService.createOrCancelLogisticsOrder(param);
+        if (result1.getCode() != HttpStatus.SUCCESS_CODE) {
+            log.info("采购订单/销售订单完结订单,返回信息:{}", "id:" + logisticsOrder.getTOrderId() + "orderNo" + logisticsOrder.getTOrderNo(), JSONObject.toJSONString(result1));
+            throw new BusinessException("{" + logisticsOrder.getTOrderNo() + "} 采购订单/销售订单完结订单失败!"+result1.getMsg());
+        }
+        transportCommonService.closeHandle(logisticsOrder.getId());
+        waybillOrderService.cancelSendCar(logisticsOrder.getId());
         //todo 直接订单完结-不递归操作
 //
 //        //存在子集
@@ -1710,14 +1749,15 @@ public class LogisticsConsignmentService {
     private boolean judgmentWaybillOrderIsFinish(String id) {
         boolean flag = false;
         List<Integer> statusList = new ArrayList<>();
-        statusList.add(CarWaybillEnum.PENDING_ORDER.getCode());
+//        statusList.add(CarWaybillEnum.PENDING_ORDER.getCode());
         statusList.add(CarWaybillEnum.PENDING_VEHICLE.getCode());
         statusList.add(CarWaybillEnum.EXIT_COMPLETED.getCode());
         statusList.add(CarWaybillEnum.WAIT_LOADING.getCode());
         statusList.add(CarWaybillEnum.COMPLETION_LOADING.getCode());
         statusList.add(CarWaybillEnum.WAIT_UNLOADING.getCode());
         statusList.add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());
-        statusList.add(CarWaybillEnum.APPROVAL_PASS.getCode());
+//        statusList.add(CarWaybillEnum.APPROVAL_PASS.getCode());
+        statusList.add(CarWaybillEnum.APPROVAL_IN.getCode());
         int count = waybillOrderMapper.selectDataByLorderId(id, statusList);
         if (count > NumberConstant.ZERO) {
             flag = true;
@@ -1734,7 +1774,7 @@ public class LogisticsConsignmentService {
      */
     public void judgmentLogisticsOrderIsFinish(KwtLogisticsOrder logisticsOrder) {
         //查询是否存在进行中的车辆运单 取至 CarWaybillEnum 枚举类
-        long[] waybillStatus = {1, 2, 3, 4, 5, 6, 7, 8};
+        long[] waybillStatus = {1, 2, 3, 4, 5, 6, 7, 13};
         List<KwtWaybillOrder> waybillOrders = waybillOrderMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrder>()
                 .eq(KwtWaybillOrder::getLOrderId, logisticsOrder.getId())
                 .in(KwtWaybillOrder::getStatus, waybillStatus));

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

@@ -402,14 +402,14 @@ public class ManagementLogisticsOrderService {
             }
         }
         if (unitOne != null) {
-            orderDetailVO.setConsignCompanyId(unitOne.getId());
+            orderDetailVO.setConsignCompanyId(unitOne.getEntId());
             orderDetailVO.setConsignCompany(unitOne.getFirmName());
             orderDetailVO.setConsignContacts(unitOne.getContacts());
             orderDetailVO.setConsignPhone(unitOne.getPhone());
             orderDetailVO.setCollectionCompany(unitOne.getFirmName());
         }
         if (unitTwo != null) {
-            orderDetailVO.setCarrierCompanyId(unitTwo.getId());
+            orderDetailVO.setCarrierCompanyId(unitTwo.getEntId());
             orderDetailVO.setCarrierCompany(unitTwo.getFirmName());
             orderDetailVO.setCarrierContacts(unitTwo.getContacts());
             orderDetailVO.setCarrierPhone(unitTwo.getPhone());

+ 14 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/TransportCommonService.java

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.sckw.contract.api.RemoteContractService;
 import com.sckw.contract.api.model.dto.res.ContractCommonInfoResDto;
-import com.sckw.core.annotation.Log;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
@@ -33,6 +32,7 @@ import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.api.model.vo.LogisticsOrderVO;
+import com.sckw.transport.common.config.MessageUrlConfig;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.CancelOrderDTO;
@@ -71,6 +71,9 @@ public class TransportCommonService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
     RemoteContractService remoteContractService;
 
+    @Autowired
+    MessageUrlConfig messageUrlConfig;
+
     @Autowired
     public CommonService commonService;
 
@@ -180,14 +183,14 @@ public class TransportCommonService {
             }
         }
         if (unitOne != null) {
-            orderDetailVO.setConsignCompanyId(unitOne.getId());
+            orderDetailVO.setConsignCompanyId(unitOne.getEntId());
             orderDetailVO.setConsignCompany(unitOne.getFirmName());
             orderDetailVO.setConsignContacts(unitOne.getContacts());
             orderDetailVO.setConsignPhone(unitOne.getPhone());
             orderDetailVO.setCollectionCompany(unitOne.getFirmName());
         }
         if (unitTwo != null) {
-            orderDetailVO.setCarrierCompanyId(unitTwo.getId());
+            orderDetailVO.setCarrierCompanyId(unitTwo.getEntId());
             orderDetailVO.setCarrierCompany(unitTwo.getFirmName());
             orderDetailVO.setCarrierContacts(unitTwo.getContacts());
             orderDetailVO.setCarrierPhone(unitTwo.getPhone());
@@ -464,8 +467,14 @@ public class TransportCommonService {
                 new LambdaQueryWrapper<KwtLogisticsOrderUnit>()
                         .eq(KwtLogisticsOrderUnit::getLOrderId, id)
                         .eq(KwtLogisticsOrderUnit::getUnitType, NumberConstant.TWO));
-        commonService.cancelLogisticsConsignment(consignUnit, carriageUnit, logisticsOrder.getLOrderNo(), logisticsOrder.getCreateBy(),
-                logisticsOrder.getEntId(), MessageEnum.CANCELLATION_LOGISTICS, MessageEnum.CARRIAGE_CANCELLATION_LOGISTICS);
+//        commonService.cancelLogisticsConsignment(consignUnit, carriageUnit, logisticsOrder.getLOrderNo(), logisticsOrder.getCreateBy(),
+//                logisticsOrder.getEntId(), MessageEnum.CANCELLATION_LOGISTICS, MessageEnum.CARRIAGE_CANCELLATION_LOGISTICS);
+        commonService.newSendLogisticsOrderToMessage(consignUnit, carriageUnit, logisticsOrder.getLOrderNo(), logisticsOrder.getCreateBy(),
+                logisticsOrder.getEntId(),
+                messageUrlConfig.getPc().getConsignLogisticsAddOrderUrl(),messageUrlConfig.getApp().getConsignLogisticsAddOrderUrl(),
+                messageUrlConfig.getPc().getCarriageLogisticsAddOrderUrl(),messageUrlConfig.getApp().getCarriageLogisticsAddOrderUrl(),
+                MessageEnum.CANCELLATION_LOGISTICS, MessageEnum.CARRIAGE_CANCELLATION_LOGISTICS,
+                "1");
         return result;
     }
 

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

@@ -97,7 +97,8 @@ public class WaybillManagementService {
         }
         WaybillDataVO waybillDataVO = new WaybillDataVO();
         Criteria criteria = new Criteria();
-        criteria.and("wOrderId").is(id);
+        //criteria.and("wOrderId").is(id);
+        criteria.and("_id").is(id);
         criteria.and("entId").is(LoginUserHolder.getEntId());
         criteria.and("delFlag").is(NumberConstant.ZERO);
         Query queryFormat = new Query(criteria);

+ 13 - 0
sckw-modules/sckw-transport/src/main/resources/bootstrap-lfdc.yml

@@ -22,6 +22,19 @@ spring:
           - dataId: sckw-common.yml
             group: sckw-service-platform
             refresh: true
+message:
+  logistics:
+    order:
+       pc:
+        #托运订单地址
+         consignLogisticsAddOrderUrl: /orderManagement/consignmentOrder
+        #承运订单地址
+         carriageLogisticsAddOrderUrl: /orderManagement/acceptanceOrder
+       app:
+        #托运订单地址
+         consignLogisticsAddOrderUrl: /pages/order/transportOrderList?type=1
+        #承运订单地址
+         carriageLogisticsAddOrderUrl: /pages/order/transportOrderList?type=2
 #spring:
 #  rabbitmq:
 #    username: admin

+ 25 - 10
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderMapper.xml

@@ -1986,7 +1986,7 @@
     </select>
 
     <select id="workbenchLogisticsOrderStatisticsByMonth" resultType="com.sckw.transport.model.vo.LogisticsOrderStatisticsVO">
-        SELECT  A.date_time as dateTime, COALESCE(B.num, 0) as num,IFNULL(B.totalAmount,0) AS totalAmount FROM
+        SELECT  A.date_time as dateTime, COALESCE(B.num, 0) as num,IFNULL(B.typeOne,0) AS typeOne , IFNULL(B.typeTwo,0) AS typeTwo FROM
         (
         SELECT
         DATE_FORMAT( DATE_ADD( #{dateStart}, INTERVAL ROW1 MONTH ), '%Y-%m' ) date_time
@@ -2008,7 +2008,17 @@
         ) A
         LEFT JOIN
         (
-        SELECT DATE_FORMAT(a.create_time, '%Y-%m') date_time, COUNT(*) num,sum(a.amount) as totalAmount
+        SELECT DATE_FORMAT(a.create_time, '%Y-%m') date_time, COUNT(*) num,
+        CASE WHEN #{typeOne} = 1 THEN
+        sum( a.amount )
+        WHEN #{typeOne} = 2 THEN
+        sum(a.amount * IFNULL( a.price, 0 ))
+        ELSE 0 end AS typeOne,
+        CASE WHEN #{typeTwo} = 2 THEN
+        sum(a.amount * IFNULL( a.price, 0 ))
+        WHEN #{typeTwo} = 1 THEN
+        sum( a.amount )
+        ELSE 0	end AS typeTwo
         FROM kwt_logistics_order a LEFT JOIN  kwt_logistics_order_unit b ON a.id = b.l_order_id
         WHERE a.del_flag = 0 AND b.unit_type = #{type}
             <if test="statusList != null and statusList.size() > 0">
@@ -2024,7 +2034,7 @@
 
     <select id="workbenchLogisticsOrderStatisticsByDays"
             resultType="com.sckw.transport.model.vo.LogisticsOrderStatisticsVO">
-        SELECT  A.date as dateTime, COALESCE(B.num, 0) as num,IFNULL(B.totalAmount,0) AS totalAmount FROM
+        SELECT  A.date as dateTime, COALESCE(B.num, 0) as num,IFNULL(B.typeOne,0) AS typeOne , IFNULL(B.typeTwo,0) AS typeTwo FROM
         (
         select date_add(#{dateStart}, interval row1 DAY) date from
         (
@@ -2040,14 +2050,19 @@
         LEFT JOIN
         (
         SELECT
-<!--        <if test="type == 1">-->
-<!--            COUNT(*) num,-->
-<!--        </if>-->
-<!--        <if test="type == 1">-->
-<!--            sum(a.amount) as totalAmount ,-->
-<!--        </if>-->
         COUNT(*) num,
-        sum(a.amount) as totalAmount ,
+        CASE
+        WHEN #{typeOne} = 1 THEN
+        sum( a.amount )
+        WHEN #{typeOne} = 2 THEN
+        sum(a.amount * IFNULL( a.price, 0 ))
+        ELSE  0 end AS typeOne,
+        CASE
+        WHEN #{typeTwo} = 2 THEN
+        sum(a.amount * IFNULL( a.price, 0 ) )
+        WHEN #{typeTwo} = 1 THEN
+        sum( a.amount )
+        ELSE 0 end AS typeTwo,
         DATE_FORMAT(a.create_time, '%Y-%m-%d') date_time
         FROM kwt_logistics_order a LEFT JOIN  kwt_logistics_order_unit b ON a.id =b.l_order_id
         WHERE a.del_flag = 0 AND b.unit_type = b.unit_type = #{type}

+ 59 - 23
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderMapper.xml

@@ -309,6 +309,41 @@
         </if>
     </select>
 
+    <select id="deficitLossAmountByDriver" resultType="java.lang.Double" parameterType="java.util.Map">
+        SELECT
+            FORMAT(sum(deficitLossAmount), 2) deficitLossAmount
+        from (
+            SELECT
+            ( deficitAmount - FORMAT((loadAmount * loss / lossUnit),2) ) deficitLossAmount
+            from (
+                SELECT
+                IFNULL(wo.deficit_amount, 0.0) deficitAmount,
+                IFNULL(lo.loss, 0.0) loss,
+                IFNULL(wo.load_amount, 0.0) loadAmount,
+                case when lo.loss_unit = 0 then 1000 when lo.loss_unit = 0 then 100 ELSE 0 end as lossUnit
+                from kwt_waybill_order wo
+                left join kwt_logistics_order lo on lo.id = wo.l_order_id
+                where wo.del_flag = 0 and lo.del_flag = 0
+                <if test="busStatus != null and busStatus == 4">
+                    and wo.status in (7, 8, 9, 10, 12, 13)
+                </if>
+                <if test="driverId != null and driverId != ''">
+                    and wo.driver_id = #{driverId, jdbcType=BIGINT}
+                </if>
+                <if test="month != null and month != ''">
+                    and LEFT(wo.create_time, 7) = #{month, jdbcType=TIMESTAMP}
+                </if>
+                <if test="startTime != null and startTime != ''">
+                    and DATE(wo.create_time) <![CDATA[ >= ]]> #{startTime,jdbcType=TIMESTAMP}
+                </if>
+                <if test="endTime != null and endTime != ''">
+                    and DATE(wo.create_time) <![CDATA[ <= ]]> #{endTime,jdbcType=TIMESTAMP}
+                </if>
+            ) tab
+        ) tab1
+    </select>
+
+
     <select id="findWaitWaybillOrderByDriver" resultType="com.sckw.transport.model.vo.WaybillOrderDriverVo"
             parameterType="java.util.Map">
         SELECT *
@@ -334,10 +369,10 @@
                      woa2.city_code      unloadCityCode,
                      woa2.city_name      unloadCityName,
                      woa2.detail_address unloadDetailAddress,
-                     wo.load_amount      loadAmount,
-                     wo.unload_amount    unloadAmount,
-                     wo.deficit_amount   deficitAmount,
-                     wo.deficit_price    deficitPrice,
+                     IFNULL(wo.load_amount, 0.0)      loadAmount,
+                     IFNULL(wo.unload_amount, 0.0)    unloadAmount,
+                     IFNULL(wo.deficit_amount, 0.0)   deficitAmount,
+                     IFNULL(wo.deficit_price, 0.0)    deficitPrice,
                      wo.truck_no         truckNo,
                      wo.status,
                      wo.create_time      createTime
@@ -365,26 +400,26 @@
                      loc.start_time      startTime,
                      loc.end_time        endTime,
                      loc.entrust_amount  entrustAmount,
-                     woa1.name           loadName,
-                     woa1.city_code      loadCityCode,
-                     woa1.city_name      loadCityName,
-                     woa1.detail_address loadDetailAddress,
-                     woa2.name           unloadName,
-                     woa2.city_code      unloadCityCode,
-                     woa2.city_name      unloadCityName,
-                     woa2.detail_address unloadDetailAddress,
-                     null                loadAmount,
-                     null                unloadAmount,
-                     null                deficitAmount,
-                     null                deficitPrice,
+                     loa1.name           loadName,
+                     loa1.city_code      loadCityCode,
+                     loa1.city_name      loadCityName,
+                     loa1.detail_address loadDetailAddress,
+                     loa2.name           unloadName,
+                     loa2.city_code      unloadCityCode,
+                     loa2.city_name      unloadCityName,
+                     loa2.detail_address unloadDetailAddress,
+                     0.0                loadAmount,
+                     0.0                unloadAmount,
+                     0.0                deficitAmount,
+                     0.0                deficitPrice,
                      loc.truck_no        truckNo,
                      1                   status,
                      loc.update_time     createTime
               FROM kwt_logistics_order_circulate loc
-                       LEFT JOIN kwt_logistics_order lo on lo.id = loc.l_order_id
-                       LEFT JOIN kwt_waybill_order_address woa1 on woa1.w_order_id = lo.id and woa1.address_type = 1
-                       LEFT JOIN kwt_waybill_order_address woa2 on woa2.w_order_id = lo.id and woa2.address_type = 2
-                       LEFT JOIN kwt_logistics_order_goods log on log.l_order_id = loc.l_order_id
+                LEFT JOIN kwt_logistics_order lo on lo.id = loc.l_order_id
+                LEFT JOIN kwt_logistics_order_address loa1 on loa1.l_order_id = lo.id and loa1.address_type = 1
+                LEFT JOIN kwt_logistics_order_address loa2 on loa2.l_order_id = lo.id and loa2.address_type = 2
+                LEFT JOIN kwt_logistics_order_goods log on log.l_order_id = loc.l_order_id
               where loc.del_flag = 0
                 and lo.del_flag = 0
                 and loc.status = 0
@@ -401,9 +436,9 @@
         wo.ent_id carrierEntId, 'xxxxx' carrierFirmName, log.goods_name goodsName, wo.start_time startTime,
         wo.end_time endTime, wo.entrust_amount entrustAmount, woa1.name loadName, woa1.city_code loadCityCode,
         woa1.city_name loadCityName, woa1.detail_address loadDetailAddress, woa2.name unloadName, woa2.city_code
-        unloadCityCode, woa2.city_name unloadCityName, woa2.detail_address unloadDetailAddress, wo.load_amount loadAmount,
-        wo.unload_amount unloadAmount, wo.deficit_amount deficitAmount, wo.deficit_price deficitPrice, wo.truck_no truckNo,
-        wo.status, wo.create_time createTime
+        unloadCityCode, woa2.city_name unloadCityName, woa2.detail_address unloadDetailAddress, IFNULL(wo.load_amount, 0.0) loadAmount,
+        IFNULL(wo.unload_amount, 0.0) unloadAmount, IFNULL(wo.deficit_amount, 0.0) deficitAmount, IFNULL(wo.deficit_price, 0.0) deficitPrice,
+        wo.truck_no truckNo, wo.status, wo.create_time createTime
         FROM kwt_waybill_order wo
         LEFT JOIN kwt_logistics_order lo on lo.id = wo.l_order_id
         LEFT JOIN kwt_waybill_order_address woa1 on woa1.w_order_id = wo.id and woa1.address_type = 1
@@ -441,6 +476,7 @@
                a.driver_phone  as driverPhone,
                a.driver_idcard as driverCard,
                a.truck_no      as truckNo,
+               a.status        as status,
                a.l_order_id    as lOrderId,
                b.l_order_no    as lOrderNo,
                b.t_order_id    as tOrderId,