Pārlūkot izejas kodu

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

xucaiqin 2 gadi atpakaļ
vecāks
revīzija
5111254bb3
26 mainītis faili ar 671 papildinājumiem un 174 dzēšanām
  1. 2 2
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/AsyncThreadUtils.java
  2. 32 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/NumberUtils.java
  3. 46 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/Data.java
  4. 151 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/Result.java
  5. 32 0
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/Status.java
  6. 3 0
      sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/DateUtil.java
  7. 30 1
      sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/enums/MessageEnum.java
  8. 0 10
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java
  9. 1 1
      sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/model/CompleteLogisticsOrderParam.java
  10. 12 0
      sckw-modules/sckw-file/src/main/java/com/sckw/file/controller/FileApiController.java
  11. 19 2
      sckw-modules/sckw-file/src/main/java/com/sckw/file/service/FileService.java
  12. 18 17
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java
  13. 20 20
      sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfDriverService.java
  14. 20 2
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/CommonBusinessService.java
  15. 20 9
      sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateApplyService.java
  16. 24 29
      sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java
  17. 19 1
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/CommonService.java
  18. 44 3
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java
  19. 20 19
      sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsMenuService.java
  20. 2 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtLogisticsOrderCirculateMapper.java
  21. 33 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/UserInfoVo.java
  22. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillTrackVO.java
  23. 36 4
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/CommonService.java
  24. 51 20
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java
  25. 35 30
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/WaybillManagementService.java
  26. 0 1
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderCirculateMapper.xml

+ 2 - 2
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/AsyncThreadUtils.java

@@ -38,7 +38,7 @@ public class AsyncThreadUtils {
      * 直接提交任务,无返回值
      * @param task Runnable
      */
-    public static void submit(Runnable task){
+    public static void submit(Runnable task) {
         poolExecutor.submit(task);
     }
 
@@ -47,7 +47,7 @@ public class AsyncThreadUtils {
      * @param <T>
      * @return Future
      */
-    public static <T> Future<T> submit(Callable<T> task){
+    public static <T> Future<T> submit(Callable<T> task) {
         return poolExecutor.submit(task);
     }
 

+ 32 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/NumberUtils.java

@@ -50,6 +50,17 @@ public class NumberUtils {
         }
     }
 
+    public static Integer parseInteger(Object obj){
+        return parseInt(obj, 0);
+    }
+
+    public static Integer parseEmptyInteger(Object obj) {
+        if (obj == null) {
+            return null;
+        }
+        return parseInt(obj, 0);
+    }
+
     public static long parseLong(Object obj) {
         return parseLong(obj, 0L);
     }
@@ -68,6 +79,13 @@ public class NumberUtils {
         }
     }
 
+    public static Long parseEmptyLong(Object obj){
+        if (obj == null) {
+            return null;
+        }
+        return parseLong(obj, 0);
+    }
+
     public static float parseFloat(Object obj) {
         return parseFloat(obj, 0.0F);
     }
@@ -86,6 +104,13 @@ public class NumberUtils {
         }
     }
 
+    public static Float parseEmptyFloat(Object obj){
+        if (obj == null) {
+            return null;
+        }
+        return parseFloat(obj, 0);
+    }
+
     public static double parseDouble(Object str) {
         return parseDouble(str, 0.0D);
     }
@@ -104,6 +129,13 @@ public class NumberUtils {
         }
     }
 
+    public static Double parseEmptyDouble(Object obj){
+        if (obj == null) {
+            return null;
+        }
+        return parseDouble(obj, 0);
+    }
+
     public static BigDecimal parseBigDecimal(Object obj) {
         return parseBigDecimal(obj, new BigDecimal(0));
     }

+ 46 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/Data.java

@@ -0,0 +1,46 @@
+package com.sckw.core.web.response;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+/**
+ * @description: 数据封装
+ * @author: lfdc
+ * @copyright
+ * @create: 2022-01-27 09:49
+ **/
+public class Data {
+    @JsonInclude(JsonInclude.Include.NON_NULL)
+    private Object body;
+
+    public static Data getData() {
+        return new Data();
+    }
+
+    public static Data getData(Object data) {
+        Data da = new Data();
+        da.setBody(data);
+        return da;
+    }
+
+
+    public Object getBody() {
+        return this.body;
+    }
+
+
+    public void setBody(Object body) {
+        this.body = body;
+    }
+
+
+    public String toString() {
+        return "Data(body=" + this.getBody() + ")";
+    }
+
+    public Data() {
+    }
+
+    public Data(Object body) {
+        this.body = body;
+    }
+}

+ 151 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/Result.java

@@ -0,0 +1,151 @@
+package com.sckw.core.web.response;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+/**
+ * @description:
+ * @author: LengFaQiang
+ * @copyright 北京联众信安科技有限公司
+ * @create: 2022-01-27 10:17
+ **/
+public class Result {
+    private static final long serialVersionUID = 8295075842951977226L;
+    private int status;
+    private String msg;
+    //    @JsonProperty
+    private Object data;
+
+
+    public Result() {
+    }
+
+    public Result(Status status) {
+        this.status = status.getCode();
+        this.msg = status.getMsg();
+        this.data = Data.getData();
+    }
+
+    public Result(Status status, Object data) {
+        this.status = status.getCode();
+        this.data = data;
+    }
+
+
+    public Result(Status status, String msg) {
+        this.status = status.getCode();
+        this.msg = msg;
+//        this.data = Data.getData();
+    }
+
+    public Result(Status status, int msgCode) {
+        this.status = status.getCode();
+        this.msg = String.valueOf(msgCode);
+//        this.data = Data.getData();
+    }
+
+
+    public Result(Status status, String msg, Object data) {
+        this.status = status.getCode();
+        this.msg = msg;
+        this.data = data;
+    }
+
+    public Result(Status status, int msgCode, Object data) {
+        this.status = status.getCode();
+        this.msg = String.valueOf(msgCode);
+        this.data = data;
+    }
+
+
+    @JsonIgnore
+    public boolean isSuccess() {
+        return this.status == Status.SUCCESS.getCode();
+    }
+
+    @JsonIgnore
+    public boolean nonSuccess() {
+        return this.status != Status.SUCCESS.getCode();
+    }
+
+    public Result success() {
+        return new Result(Status.SUCCESS);
+    }
+
+    public Result illegal() {
+        return new Result(Status.BAD_REQUEST);
+    }
+
+    public Result unauthorized() {
+        return new Result(Status.UNAUTHORIZED);
+    }
+
+    public Result forbidden() {
+        return new Result(Status.FORBIDDEN);
+    }
+
+    public Result notFound() {
+        return new Result(Status.NOT_FOUND);
+    }
+
+    public Result failure() {
+        return new Result(Status.FAILURE);
+    }
+
+    public Result conflict() {
+        return new Result(Status.CONFLICT);
+    }
+
+    public int getStatus() {
+        return this.status;
+    }
+
+    public String getMsg() {
+        return this.msg;
+    }
+
+    public Object getData() {
+        return this.data;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public void setData(Data data) {
+        this.data = data;
+    }
+
+    public String toString() {
+        return "Result(status=" + this.getStatus() + ", msg=" + this.getMsg() + ", data=" + this.getData() + ")";
+    }
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public void setData(Object data) {
+        this.data = data;
+    }
+
+    public Result(int status, String msg, Object data) {
+        this.status = status;
+        this.msg = msg;
+        this.data = data;
+    }
+
+    public static Result build(Status status, Object data) {
+        return new Result(status, data);
+    }
+
+    public static Result build(Status status, String msg, Object data) {
+        return new Result(status, msg, data);
+    }
+
+    public static Result build(Status status, String msg) {
+        return new Result(status, msg);
+    }
+}

+ 32 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/web/response/Status.java

@@ -0,0 +1,32 @@
+package com.sckw.core.web.response;
+
+/**
+ * @description: 状态枚举
+ * @author: lfdc
+ * @create: 2022-01-27 09:43
+ **/
+public enum Status {
+    SUCCESS(200, "操作成功"),
+    BAD_REQUEST(400, "操作验证失败"),
+    UNAUTHORIZED(401, "操作未授权"),
+    FORBIDDEN(403, "操作被拒绝"),
+    NOT_FOUND(404, "未知操作"),
+    CONFLICT(409, "请求发生冲突"),
+    FAILURE(500, "操作失败");
+
+    private int code;
+    private String msg;
+
+    private Status(int code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public int getCode() {
+        return this.code;
+    }
+
+    public String getMsg() {
+        return this.msg;
+    }
+}

+ 3 - 0
sckw-common/sckw-common-excel/src/main/java/com/sckw/excel/utils/DateUtil.java

@@ -49,6 +49,9 @@ public class DateUtil {
      * @return
      */
     public static String getDateTime(Date date) {
+        if (date == null) {
+            return null;
+        }
         Instant instant = date.toInstant();
         ZoneId zoneId = ZoneId.systemDefault();
         LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();

+ 30 - 1
sckw-common/sckw-common-stream/src/main/java/com/sckw/stream/enums/MessageEnum.java

@@ -108,8 +108,37 @@ public enum MessageEnum {
     /**
      * 合作申请待审核
      */
-    COOPERATE_WAIT_APPROVAL("BUSINESS", "COOPERATE_WAIT_APPROVAL", "合作申请待审核", "【${entName}】对贵司发起了企业合作申请,请前往确认", "terminal,ios,android"),
+    COOPERATE_WAIT_APPROVAL("BUSINESS", "COOPERATE_WAIT_APPROVAL", "合作申请待审核", "【${entName}】对贵司发起了企业合作申请,请前往确认","terminal,ios,android"),
 
+    /**
+     * 合作申请审核通过
+     */
+    COOPERATE_PASS("BUSINESS", "COOPERATE_PASS", "合作申请审核通过", "贵司发起的与【${entName}有限公司】的合作申请,已通过", "terminal,ios,android"),
+
+    /**
+     * 合作申请审核驳回
+     */
+    COOPERATE_REFUSED("BUSINESS", "COOPERATE_REFUSED", "合作申请审核驳回", "贵司发起的与【${entName}有限公司】的合作申请,已驳回,请及时确认", "terminal,ios,android"),
+
+    /**
+     * 解除合作关系
+     */
+    COOPERATE_DISSOLVE("BUSINESS", "COOPERATE_DISSOLVE", "解除合作关系", "贵司解除了与【${entName}】的合作关系,请及时通知合作单位;操作人:${createByName}", "terminal,ios,android"),
+
+    /**
+     * 合作关系被解除
+     */
+    COOPERATE_DISSOLVED("BUSINESS", "COOPERATE_DISSOLVED", "合作关系被解除", "【${entName}】解除了与贵司的合作关系,请及时联系合作范围并确认", "terminal,ios,android"),
+
+    /**
+     * 恢复合作关系
+     */
+    COOPERATE_RESTORE("BUSINESS", "COOPERATE_RESTORE", "恢复合作关系", "贵司恢复了与【${entName}有限公司】的合作关系,请及时通知合作单位;操作人:${createByName}", "terminal,ios,android"),
+
+    /**
+     * 合作关系被恢复
+     */
+    COOPERATE_RESTORED("BUSINESS", "COOPERATE_RESTORED", "合作关系被恢复", "【${entName}有限公司】恢复了与贵司的合作关系,请及时联系合作范围并确认", "terminal,ios,android"),
 
     /**
      * 托运订单-发起物流托运

+ 0 - 10
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java

@@ -64,16 +64,6 @@ public interface TradeOrderInfoService {
      */
     void updateAssociateStatement(UpdateAssociateStatementParam param);
 
-    /**
-     * @desc: 是否关联企业  true是,false否 (废弃)
-     * @author: yzc
-     * @date: 2023-08-16 16:20
-     * @Param entId:
-     * @return: java.lang.Boolean
-     */
-    @Deprecated
-    Boolean associateEnt(Long entId);
-
     /**
      * @desc: 是否关联企业  true是,false否
      * @author: yzc

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

@@ -40,7 +40,7 @@ public class CompleteLogisticsOrderParam implements Serializable {
     private BigDecimal actualUnloadAmount;
 
     /**
-     * 物流订单是否已全部完结
+     * 物流订单是否已全部完结(废弃)
      */
     private Boolean isAllComplete;
 

+ 12 - 0
sckw-modules/sckw-file/src/main/java/com/sckw/file/controller/FileApiController.java

@@ -3,6 +3,7 @@ package com.sckw.file.controller;
 import com.sckw.core.model.file.FileInfo;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.core.web.response.Result;
 import com.sckw.file.api.dto.FileInfoDTO;
 import com.sckw.file.service.FileService;
 import com.sckw.file.service.dubbo.FileDubboApiServiceImpl;
@@ -122,6 +123,17 @@ public class FileApiController {
         return fileService.uploadFileInfo(file);
     }
 
+
+    /**
+     * app-前端调用接口上传oss
+     * @param file
+     * @return
+     */
+    @RequestMapping(value = "/appUploadFileInfo", method = RequestMethod.POST)
+    public Result appUploadFileInfo(@RequestParam("file") MultipartFile file) {
+        return fileService.appUploadFileInfo(file);
+    }
+
     /**
      * dubbo接收文件信息保存至数据库
      * @param fileInfo

+ 19 - 2
sckw-modules/sckw-file/src/main/java/com/sckw/file/service/FileService.java

@@ -13,6 +13,8 @@ import com.sckw.core.utils.StringUtils;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.core.web.response.Result;
+import com.sckw.core.web.response.Status;
 import com.sckw.file.api.dto.FileInfoDTO;
 import com.sckw.file.config.FileListConfig;
 import com.sckw.file.dao.KwsFileInfoDao;
@@ -249,19 +251,34 @@ public class FileService {
 
     public HttpResult uploadFileInfo(MultipartFile file) {
         boolean flag = checkFileFormat(file);
-        if (!flag){
+        if (!flag) {
             throw new RuntimeException("上传文件格式错误!");
         }
         FileInfo fileInfo = FileUtils.getFileDataList(file);
         fileInfo.setType(FileEnum.FILE_STORE_TYPE_OSS.getFileType());
         FileInfo returnFileInfo = FileUtils.uploadFileInfo(file, fileInfo, FileEnum.FILE_STORE_TYPE_OSS);
         FileInfoVO fileInfoVO = new FileInfoVO();
-        BeanUtils.copyProperties(returnFileInfo,fileInfoVO);
+        BeanUtils.copyProperties(returnFileInfo, fileInfoVO);
         return HttpResult.ok(fileInfoVO);
     }
 
+
+    public Result appUploadFileInfo(MultipartFile file) {
+        boolean flag = checkFileFormat(file);
+        if (!flag) {
+            return Result.build(Status.FAILURE, "上传文件格式错误!");
+        }
+        FileInfo fileInfo = FileUtils.getFileDataList(file);
+        fileInfo.setType(FileEnum.FILE_STORE_TYPE_OSS.getFileType());
+        FileInfo returnFileInfo = FileUtils.uploadFileInfo(file, fileInfo, FileEnum.FILE_STORE_TYPE_OSS);
+        FileInfoVO fileInfoVO = new FileInfoVO();
+        BeanUtils.copyProperties(returnFileInfo, fileInfoVO);
+        return Result.build(Status.SUCCESS, fileInfoVO);
+    }
+
     /**
      * 上传文件->oss文件格式校验
+     *
      * @param file
      * @return
      */

+ 18 - 17
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/dubbo/RemoteFleetServiceImpl.java

@@ -3,6 +3,8 @@ package com.sckw.fleet.dubbo;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.utils.BeanUtils;
 import com.sckw.core.utils.CollectionUtils;
+import com.sckw.core.utils.NumberUtils;
+import com.sckw.core.utils.StringUtils;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.RDriverDetailVo;
 import com.sckw.fleet.api.model.vo.RDriverVo;
@@ -51,16 +53,16 @@ public class RemoteFleetServiceImpl implements RemoteFleetService {
         /**数据处理**/
         for (Map<String, Object> driver:drivers) {
             RDriverVo driverVo = new RDriverVo();
-            driverVo.setId(driver.get("id") != null ? Long.parseLong(String.valueOf(driver.get("id"))) : null);
-            driverVo.setName(driver.get("name") != null ? String.valueOf(driver.get("name")) : null);
-            driverVo.setPhone(driver.get("phone") != null ? String.valueOf(driver.get("phone")) : null);
-            driverVo.setIdcard(driver.get("idcard") != null ? String.valueOf(driver.get("idcard")) : null);
-            driverVo.setTotalComplete(driver.get("totalComplete") != null ? Integer.parseInt(String.valueOf(driver.get("totalComplete"))) : null);
-            driverVo.setTotalTake(driver.get("totalTake") != null ? Integer.parseInt(String.valueOf(driver.get("totalTake"))) : null);
-            driverVo.setTotalWeight(driver.get("totalWeight") != null ? new BigDecimal(Double.parseDouble(String.valueOf(driver.get("totalWeight")))) : null);
+            driverVo.setId(NumberUtils.parseEmptyLong(driver.get("id")));
+            driverVo.setName(StringUtils.objectStr(driver.get("name")));
+            driverVo.setPhone(StringUtils.objectStr(driver.get("phone")));
+            driverVo.setIdcard(StringUtils.objectStr(driver.get("idcard")));
+            driverVo.setTotalComplete(NumberUtils.parseEmptyInteger(driver.get("totalComplete")));
+            driverVo.setTotalTake(NumberUtils.parseEmptyInteger(driver.get("totalTake")));
+            driverVo.setTotalWeight(new BigDecimal(NumberUtils.parseDouble(driver.get("totalWeight"))));
+            driverVo.setBusinessStatus(NumberUtils.parseEmptyInteger(driver.get("businessStatus")));
             driverMap.put(driverVo.getId(), driverVo);
         }
-
         return driverMap;
     }
 
@@ -128,17 +130,16 @@ public class RemoteFleetServiceImpl implements RemoteFleetService {
         /**数据处理**/
         for (Map<String, Object> truck:trucks) {
             RTruckVo truckVo = new RTruckVo();
-            truckVo.setId(truck.get("id") != null ? Long.parseLong(String.valueOf(truck.get("id"))) : null);
-            truckVo.setTruckNo(truck.get("truckNo") != null ? String.valueOf(truck.get("truckNo")) : null);
-            truckVo.setActualWeight(truck.get("actualWeight") != null ? Double.parseDouble(String.valueOf(truck.get("actualWeight"))) : null);
-            truckVo.setTrailerNo(truck.get("trailerNo") != null ? String.valueOf(truck.get("trailerNo")) : null);
-            truckVo.setTotalComplete(truck.get("totalComplete") != null ? Integer.parseInt(String.valueOf(truck.get("totalComplete"))) : null);
-            truckVo.setTotalTake(truck.get("totalTake") != null ? Integer.parseInt(String.valueOf(truck.get("totalTake"))) : null);
-            truckVo.setTotalWeight(truck.get("totalWeight") != null ? new BigDecimal(Double.parseDouble(String.valueOf(truck.get("totalWeight")))) : null);
-            truckVo.setBusinessStatus(truck.get("businessStatus") != null ? Integer.parseInt(String.valueOf(truck.get("businessStatus"))) : null);
+            truckVo.setId(NumberUtils.parseEmptyLong(truck.get("id")));
+            truckVo.setTruckNo(StringUtils.objectStr(truck.get("truckNo")));
+            truckVo.setActualWeight(NumberUtils.parseEmptyDouble(truck.get("actualWeight")));
+            truckVo.setTrailerNo(StringUtils.objectStr(truck.get("trailerNo")));
+            truckVo.setTotalComplete(NumberUtils.parseEmptyInteger(truck.get("totalComplete")));
+            truckVo.setTotalTake(NumberUtils.parseEmptyInteger(truck.get("totalTake")));
+            truckVo.setTotalWeight(new BigDecimal(NumberUtils.parseDouble(truck.get("totalWeight"))));
+            truckVo.setBusinessStatus(NumberUtils.parseEmptyInteger(truck.get("businessStatus")));
             truckMap.put(truckVo.getTruckNo(), truckVo);
         }
-
         return truckMap;
     }
 

+ 20 - 20
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfDriverService.java

@@ -134,32 +134,13 @@ public class KwfDriverService {
                         put("authStatus", report.get("authStatus"));
                     }});
                 }
-                driverDetailVo.setTrucks(trucks);
+                driverDetailVo.setTrucks(trucks.stream().distinct().collect(Collectors.toList()));
             }
             return driverDetailVo;
         }
         return null;
     }
 
-    /**
-     * @param type 字典类型
-     * @param value 字典值
-     * @desc 获取数据字典值
-     * @author zk
-     * @date 2023/8/30
-     **/
-    public String getDictValue(String type, String value) {
-        if (StringUtils.isBlank(type) || StringUtils.isBlank(value)) {
-            return null;
-        }
-        List<String> dictKey = new ArrayList<>(){{
-            add(type + Global.POUND + value);
-        }};
-        Map<String, SysDictResDto> dicts = remoteSystemService.queryDictMapByTypeValues(String.join(Global.COMMA, dictKey));
-        SysDictResDto dict = dicts == null ? null : dicts.get(DictTypeEnum.APPROVED_DRIVING.getType() + Global.POUND + value);
-        return dict != null ? dict.getLabel() : null;
-    }
-
     /**
      * @param params 参数
      * @desc 统计
@@ -811,6 +792,25 @@ public class KwfDriverService {
         }
     }
 
+    /**
+     * @param type 字典类型
+     * @param value 字典值
+     * @desc 获取数据字典值
+     * @author zk
+     * @date 2023/8/30
+     **/
+    public String getDictValue(String type, String value) {
+        if (StringUtils.isBlank(type) || StringUtils.isBlank(value)) {
+            return null;
+        }
+        List<String> dictKey = new ArrayList<>(){{
+            add(type + Global.POUND + value);
+        }};
+        Map<String, SysDictResDto> dicts = remoteSystemService.queryDictMapByTypeValues(String.join(Global.COMMA, dictKey));
+        SysDictResDto dict = dicts == null ? null : dicts.get(DictTypeEnum.APPROVED_DRIVING.getType() + Global.POUND + value);
+        return dict != null ? dict.getLabel() : null;
+    }
+
     /**
      * @param params 参数
      * @desc 校验司机是否有证书

+ 20 - 2
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/CommonBusinessService.java

@@ -1,9 +1,11 @@
 package com.sckw.manage.service;
 
+import com.alibaba.fastjson2.JSON;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.CooperateStatusEnum;
 import com.sckw.core.model.enums.CooperateTypeEnum;
+import com.sckw.core.utils.AsyncThreadUtils;
 import com.sckw.core.utils.CollectionUtils;
 import com.sckw.core.utils.StringUtils;
 import com.sckw.core.utils.UUIDUtils;
@@ -351,8 +353,24 @@ public class CommonBusinessService {
                 .setMsgUrl(msgUrl)
                 .setUserInfos(userInfos)
                 .setCreateBy(LoginUserHolder.getUserId());
-        log.info("合作申请:{}", com.alibaba.fastjson2.JSON.toJSONString(msg));
-        streamBridge.send("sckw-message", com.alibaba.fastjson2.JSON.toJSONString(msg));
+        AsyncThreadUtils.submit(new AsyncProcess(msg, streamBridge));
     }
 
+
+    static class AsyncProcess implements Runnable {
+
+        private SckwMessage sckwMessage;
+
+        private StreamBridge streamBridge;
+
+        AsyncProcess(SckwMessage sckwMessage, StreamBridge streamBridge) {
+            this.sckwMessage = sckwMessage;
+            this.streamBridge = streamBridge;
+        }
+
+        @Override
+        public void run() {
+            streamBridge.send("sckw-message", JSON.toJSONString(sckwMessage));
+        }
+    }
 }

+ 20 - 9
sckw-modules/sckw-manage/src/main/java/com/sckw/manage/service/KwmCooperateApplyService.java

@@ -11,10 +11,7 @@ import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.CooperateStatusEnum;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
-import com.sckw.core.utils.BeanUtils;
-import com.sckw.core.utils.CollectionUtils;
-import com.sckw.core.utils.IdWorker;
-import com.sckw.core.utils.StringUtils;
+import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.excel.utils.EasyExcelUtil;
@@ -39,6 +36,7 @@ import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -66,6 +64,9 @@ public class KwmCooperateApplyService {
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private RemoteSystemService remoteSystemService;
 
+    @Value(value = "${jumpUrl.cooperateApplyUrl}")
+    private String cooperateApplyUrl;
+
     /**
      * @param reqVo 分页入参
      * @return HttpResult
@@ -267,15 +268,24 @@ public class KwmCooperateApplyService {
         //保存发起申请
         saveInitiate(reqVo, currentEntId, chooseCooperateTypes);
 
-
-        EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(reqVo.getTargetEntId());
-        Map<String, Object> map = new HashMap<>();
-        map.put("entName", entCacheResDto.getFirmName());
+        //发起合作申请消息
+        EntCacheResDto targetEntCacheResDto = remoteSystemService.queryEntCacheById(reqVo.getTargetEntId());
+        Map<String, Object> map = new HashMap<>(Global.NUMERICAL_FOUR);
+        map.put("entName", targetEntCacheResDto.getFirmName());
         map.put("createByName", LoginUserHolder.getUserName());
         commonBusinessService.sendSystemMessage(Collections.singletonList(new UserInfo().setUserId(LoginUserHolder.getUserId()).setEntId(LoginUserHolder.getEntId())),
                 MessageEnum.SUBMIT_COOPERATE,
                 map,
-                "testUrl");
+                cooperateApplyUrl);
+
+        //合作申请待审核消息
+        EntCacheResDto entCacheResDto = remoteSystemService.queryEntCacheById(reqVo.getEntId());
+        EntCacheResDto entCacheResDto1 = remoteSystemService.queryEntTreeById(reqVo.getTargetEntId());
+        map.put("entName", entCacheResDto.getFirmName());
+        commonBusinessService.sendSystemMessage(Collections.singletonList(new UserInfo().setUserId(entCacheResDto1.getContactsId()).setEntId(entCacheResDto1.getId())),
+                MessageEnum.COOPERATE_WAIT_APPROVAL,
+                map,
+                cooperateApplyUrl);
     }
 
 
@@ -296,6 +306,7 @@ public class KwmCooperateApplyService {
             kwmCooperate.setInviteeEntId(reqVo.getTargetEntId());
 
             //我方联系人
+
             UserCacheResDto contactDto = remoteSystemService.queryUserCacheById(reqVo.getUserId());
             if (Objects.nonNull(contactDto)) {
                 kwmCooperate.setInviterContactsId(contactDto.getId());

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

@@ -126,7 +126,8 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_4.getValue())) {
                 return HttpResult.error("执行中的订单才可物流托运!");
             }
-            BigDecimal totalEntrustAmount = Objects.isNull(order.getEntrustAmount()) ? entrustAmount : entrustAmount.add(order.getEntrustAmount());
+            BigDecimal totalEntrustAmount = Objects.isNull(order.getEntrustAmount()) ?
+                    entrustAmount : entrustAmount.add(order.getEntrustAmount());
             if (order.getAmount().compareTo(totalEntrustAmount) < 0) {
                 return HttpResult.error("物流已委托总量不可大于订单总量!");
             }
@@ -154,9 +155,9 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
         if (Objects.isNull(actualLoadAmount) || Objects.isNull(actualUnloadAmount)) {
             return HttpResult.error("装卸总量不能为空!");
         }
-        if (Objects.isNull(param.getIsAllComplete())) {
-            return HttpResult.error("物流订单是否已全部完结不能为空!");
-        }
+//        if (Objects.isNull(param.getIsAllComplete())) {
+//            return HttpResult.error("物流订单是否已全部完结不能为空!");
+//        }
         if (Objects.isNull(updateBy) || StringUtils.isBlank(updateByName)) {
             return HttpResult.error("操作人信息不能为空!");
         }
@@ -172,24 +173,28 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
             if (!Objects.equals(String.valueOf(order.getStatus()), DictEnum.TORDER_STATUS_4.getValue())) {
                 return HttpResult.error("执行中的订单才可物流托运!");
             }
-            BigDecimal actualAmount = Objects.equals(order.getDeliveryType(), DictEnum.DELIVERY_TYPE_0.getValue()) ? actualLoadAmount : actualUnloadAmount;
-            order.setActualAmount(actualAmount).setUpdateBy(param.getUpdateBy());
-            if (param.getIsAllComplete() && actualAmount.compareTo(order.getAmount()) >= 0) {
-                //完结订单
-                order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
-                //记录状态
-                KwoTradeOrderTrack track = new KwoTradeOrderTrack();
-                track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus())
-                        .setCreateBy(updateBy).setUpdateBy(updateBy);
-                kwoTradeOrderTrackService.insert(track);
-                //更新合同履约量
-                KwoTradeOrderContract contract = kwoTradeOrderContractService.getByOrderId(order.getId());
-                remoteContractService.updatePerformed(contract.getContractId(), actualAmount);
-            }
+            BigDecimal actualAmount = Objects.isNull(order.getActualAmount()) ? BigDecimal.ZERO : order.getActualAmount();
+            BigDecimal addActualAmount = Objects.equals(order.getDeliveryType(), DictEnum.DELIVERY_TYPE_0.getValue())
+                    ? actualLoadAmount : actualUnloadAmount;
+            BigDecimal totalActualAmount = actualAmount.add(addActualAmount);
+            order.setActualAmount(totalActualAmount).setUpdateBy(param.getUpdateBy());
+            //不走自然完结
+//            if (param.getIsAllComplete() && actualAmount.compareTo(order.getAmount()) >= 0) {
+//                //完结订单
+//                order.setStatus(Integer.valueOf(DictEnum.TORDER_STATUS_5.getValue()));
+//                //记录状态
+//                KwoTradeOrderTrack track = new KwoTradeOrderTrack();
+//                track.setTOrderId(order.getId()).setTOrderNo(order.getTOrderNo()).setStatus(order.getStatus())
+//                        .setCreateBy(updateBy).setUpdateBy(updateBy);
+//                kwoTradeOrderTrackService.insert(track);
+//                //更新合同履约量
+//                KwoTradeOrderContract contract = kwoTradeOrderContractService.getByOrderId(order.getId());
+//                remoteContractService.updatePerformed(contract.getContractId(), actualAmount);
+//            }
             kwoTradeOrderService.updateById(order);
             //更新mongodb
             SckwTradeOrder updateParam = new SckwTradeOrder();
-            updateParam.setTOrderId(order.getId()).setActualAmount(actualAmount).setStatus(order.getStatus())
+            updateParam.setTOrderId(order.getId()).setActualAmount(totalActualAmount).setStatus(order.getStatus())
                     .setUpdateBy(param.getUpdateBy()).setUpdateByName(param.getUpdateByName()).setUpdateTime(new Date());
             saveMongoDb(updateParam);
         } finally {
@@ -274,16 +279,6 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
 
     }
 
-    @Override
-    public Boolean associateEnt(Long entId) {
-        Set<Long> tOrderIds = tradeOrderUnitService.associateEntOrderId(entId, entId);
-        if (CollectionUtils.isEmpty(tOrderIds)) {
-            return Boolean.FALSE;
-        }
-        List<KwoTradeOrder> list = kwoTradeOrderService.associateEnt(tOrderIds);
-        return CollectionUtils.isNotEmpty(list);
-    }
-
     @Override
     public Boolean associateEnt(Long firstEntId, Long secondEntId) {
         Set<Long> tOrderIds = tradeOrderUnitService.associateEntOrderId(firstEntId, secondEntId);

+ 19 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/CommonService.java

@@ -143,7 +143,25 @@ public class CommonService {
                 .setMsgUrl(msgUrl)
                 .setUserInfos(userInfos)
                 .setCreateBy(LoginUserHolder.getUserId());
-        streamBridge.send("sckw-message", com.alibaba.fastjson2.JSON.toJSONString(msg));
+        AsyncThreadUtils.submit(new AsyncProcess(msg, streamBridge));
+    }
+
+
+    static class AsyncProcess implements Runnable {
+
+        private SckwMessage sckwMessage;
+
+        private StreamBridge streamBridge;
+
+        AsyncProcess(SckwMessage sckwMessage, StreamBridge streamBridge) {
+            this.sckwMessage = sckwMessage;
+            this.streamBridge = streamBridge;
+        }
+
+        @Override
+        public void run() {
+            streamBridge.send("sckw-message", JSON.toJSONString(sckwMessage));
+        }
     }
 
 }

+ 44 - 3
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsEnterpriseService.java

@@ -1,7 +1,6 @@
 package com.sckw.system.service;
 
 import cn.hutool.core.date.DateUtil;
-import cn.hutool.core.net.URLEncoder;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.sckw.core.exception.SystemException;
@@ -29,6 +28,7 @@ import com.sckw.system.model.vo.req.*;
 import com.sckw.system.model.vo.res.*;
 import com.sckw.system.model.vo.res.KwsUserResVo;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -74,6 +74,9 @@ public class KwsEnterpriseService {
     @Autowired
     private SysAreaDao sysAreaDao;
 
+    @Value(value = "${jumpUrl.entCertificate}")
+    private String entCertificateUrl;
+
     /**
      * @param params 入库
      * @desc: 单表入库
@@ -136,7 +139,12 @@ public class KwsEnterpriseService {
     public void update(UpdateEntInfoReqVo reqVo) {
         /*1、更新企业信息表*/
         KwsEnterprise kwsEnterprise = checkKwsEnterpriseById(LoginUserHolder.getEntId());
-        commonService.checkEntRepeat(reqVo.getFirmName(), "");
+        List<KwsEnterprise> list = kwsEnterpriseDao.checkEntRepeat(reqVo.getFirmName(), "");
+        if (CollectionUtils.isNotEmpty(list)) {
+            if (!list.get(0).getId().equals(kwsEnterprise.getId())) {
+                throw new SystemException(HttpStatus.PARAMETERS_MISSING_CODE, HttpStatus.ENT_EXISTS);
+            }
+        }
         SysArea sysArea = sysAreaDao.selectById(reqVo.getCityCode());
         if (Objects.nonNull(sysArea)) {
             kwsEnterprise.setCityName(sysArea.getMergerName());
@@ -370,7 +378,7 @@ public class KwsEnterpriseService {
         commonService.sendSystemMessage(Collections.singletonList(new UserInfo().setUserId(userId).setEntId(entId)),
                                         MessageEnum.ENT_CERTIFICATE,
                                         map,
-                                        "testUrl");
+                                        entCertificateUrl);
     }
 
     /**
@@ -447,6 +455,29 @@ public class KwsEnterpriseService {
             }
         }
         commonService.updateEntCertificate(entId, BeanUtils.copyToList(kwsEntCertificates, EntCertificateInfo.class));
+
+
+        Map<String, Object> map = new HashMap<>();
+        map.put("entName", kwsEnterprise.getFirmName());
+        map.put("createByName", LoginUserHolder.getUserName());
+        MessageEnum messageEnum;
+        if (reqVo.getStatus().equals(ApprovalEnum.OK.getCode())) {
+            if (Objects.isNull(kwsEntDept)) {
+                messageEnum = MessageEnum.ENT_CERTIFICATE_PASS;
+            } else {
+                messageEnum = MessageEnum.ENT_DEPT_CERTIFICATE_PASS;
+            }
+        } else {
+            if (Objects.isNull(kwsEntDept)) {
+                messageEnum = MessageEnum.ENT_CERTIFICATE_REFUSED;
+            } else {
+                messageEnum = MessageEnum.ENT_DEPT_CERTIFICATE_REFUSED;
+            }
+        }
+        commonService.sendSystemMessage(Collections.singletonList(new UserInfo().setUserId(kwsEnterprise.getCreateBy()).setEntId(entId)),
+                messageEnum,
+                map,
+                entCertificateUrl);
     }
 
     /**
@@ -572,6 +603,13 @@ public class KwsEnterpriseService {
 
         //主体机构
         extracted(reqVo, new IdWorker(1L).nextId());
+        Map<String, Object> map = new HashMap<>();
+        map.put("entName", reqVo.getFirmName());
+        map.put("createByName", reqVo.getContacts());
+        commonService.sendSystemMessage(Collections.singletonList(new UserInfo().setUserId(LoginUserHolder.getUserId()).setEntId(LoginUserHolder.getEntId())),
+                MessageEnum.ENT_DEPT_CERTIFICATE,
+                map,
+                entCertificateUrl);
     }
 
 
@@ -810,6 +848,9 @@ public class KwsEnterpriseService {
                     queryCurrentOrganizationResVo1.setEntId(entCacheResDto1.getId());
                     queryCurrentOrganizationResVo1.setEntName(entCacheResDto1.getFirmName());
                     queryCurrentOrganizationResVo1.setPid(kwsEntDept.getEntPid());
+                    queryCurrentOrganizationResVo1.setContactsId(entCacheResDto1.getContactsId());
+                    queryCurrentOrganizationResVo1.setContacts(entCacheResDto1.getContacts());
+                    queryCurrentOrganizationResVo1.setPhone(entCacheResDto1.getPhone());
                     list.add(queryCurrentOrganizationResVo1);
                 }
             }

+ 20 - 19
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsMenuService.java

@@ -262,26 +262,27 @@ public class KwsMenuService {
 
         List<KwsMenuResVo> menuList = kwsMenuDao.findList(findMenuTreePojo);
         List<KwsMenuResVo> finalList = new ArrayList<>();
+        finalList = menuList;
         //app菜单特殊处理
-        if (SystemTypeEnum.COMPANY.getCode().equals(LoginUserHolder.getSystemType()) && ClientTypeEnum.app.getValue().equals(LoginUserHolder.getClientType())) {
-            for (KwsMenuResVo kwsMenuResVo : menuList) {
-                List<KwsMenuMapping> kwsMenuMappings = kwsMenuMappingDao.selectByMenuId(kwsMenuResVo.getId());
-                if (CollectionUtils.isEmpty(kwsMenuMappings)) {
-                    continue;
-                }
-
-                List<Long> mapIds = kwsMenuMappings.stream().map(KwsMenuMapping::getMappingId).toList();
-                List<KwsMenu> kwsMenus = kwsMenuDao.selectByKeys(mapIds);
-                if (CollectionUtils.isEmpty(kwsMenus)) {
-                    continue;
-                }
-
-                List<KwsMenuResVo> kwsMenuResVos = BeanUtils.copyToList(kwsMenus, KwsMenuResVo.class);
-                finalList.addAll(kwsMenuResVos);
-            }
-        } else {
-            finalList = menuList;
-        }
+//        if (SystemTypeEnum.COMPANY.getCode().equals(LoginUserHolder.getSystemType()) && ClientTypeEnum.app.getValue().equals(LoginUserHolder.getClientType())) {
+//            for (KwsMenuResVo kwsMenuResVo : menuList) {
+//                List<KwsMenuMapping> kwsMenuMappings = kwsMenuMappingDao.selectByMenuId(kwsMenuResVo.getId());
+//                if (CollectionUtils.isEmpty(kwsMenuMappings)) {
+//                    continue;
+//                }
+//
+//                List<Long> mapIds = kwsMenuMappings.stream().map(KwsMenuMapping::getMappingId).toList();
+//                List<KwsMenu> kwsMenus = kwsMenuDao.selectByKeys(mapIds);
+//                if (CollectionUtils.isEmpty(kwsMenus)) {
+//                    continue;
+//                }
+//
+//                List<KwsMenuResVo> kwsMenuResVos = BeanUtils.copyToList(kwsMenus, KwsMenuResVo.class);
+//                finalList.addAll(kwsMenuResVos);
+//            }
+//        } else {
+//            finalList = menuList;
+//        }
 
         List<KwsMenuResVo> rootList = new ArrayList<>();
 

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

@@ -42,13 +42,13 @@ public interface KwtLogisticsOrderCirculateMapper extends BaseMapper<KwtLogistic
      * @param lOrderId 物流订单id
      * @param truckId 车辆ID
      * @param driverId 司机主键id
-     * @param status 循环派车状态(0正常、1失效)
+     * //@param status 循环派车状态(0正常、1失效)
      * @desc 查询物流运单装卸货地址信息
      * @author zk
      * @date 2023/7/20
      **/
     KwtLogisticsOrderCirculate findCirculate(@Param("lOrderId") Long lOrderId, @Param("truckId") Long truckId,
-                                             @Param("driverId") Long driverId, @Param("status") Integer status);
+                                             @Param("driverId") Long driverId);
 
     /**
      * @param lOrderId 物流订单id

+ 33 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/UserInfoVo.java

@@ -0,0 +1,33 @@
+package com.sckw.transport.model.vo;
+
+import lombok.Data;
+import java.io.Serializable;
+
+/**
+ * desc 用户+司机信息
+ * author zk
+ * date 2023/9/7 0007
+ */
+@Data
+public class UserInfoVo implements Serializable {
+
+    /**
+     * 用户id
+     */
+    private long id;
+
+    /**
+     * 姓名
+     */
+    private String name;
+
+    /**
+     * 电话
+     */
+    private String phone;
+
+    /**
+     * 企业ID
+     */
+    private long entId;
+}

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

@@ -32,7 +32,7 @@ public class WaybillTrackVO {
     /**
      * 操作员名
      */
-    private String createBy;
+    private Long createBy;
     /**
      * 操作员名
      */

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

@@ -7,22 +7,24 @@ import com.sckw.contract.api.RemoteContractService;
 import com.sckw.core.common.enums.NumberConstant;
 import com.sckw.core.common.enums.enums.DictEnum;
 import com.sckw.core.exception.BusinessException;
+import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.LogisticsOrderEnum;
 import com.sckw.core.model.enums.OrderRuleEnum;
 import com.sckw.core.model.enums.RedisOrderGenerateEnum;
-import com.sckw.core.utils.CollectionUtils;
-import com.sckw.core.utils.DateUtils;
-import com.sckw.core.utils.OrderGenerateSeqNoUtils;
-import com.sckw.core.utils.StringUtils;
+import com.sckw.core.utils.*;
+import com.sckw.fleet.api.RemoteFleetService;
+import com.sckw.fleet.api.model.vo.RDriverVo;
 import com.sckw.mongo.model.TableTops;
 import com.sckw.redis.constant.RedisConstant;
 import com.sckw.redis.utils.RedissonUtils;
 import com.sckw.system.api.RemoteSystemService;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.dao.KwtLogisticsOrderContractMapper;
 import com.sckw.transport.dao.KwtLogisticsOrderMapper;
 import com.sckw.transport.model.KwtLogisticsOrder;
 import com.sckw.transport.model.KwtLogisticsOrderContract;
+import com.sckw.transport.model.vo.UserInfoVo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -47,6 +49,9 @@ public class CommonService {
     @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
     RemoteContractService remoteContractService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 8000)
+    RemoteFleetService remoteFleetService;
+
     @Autowired
     private KwtLogisticsOrderMapper logisticsOrderMapper;
 
@@ -183,4 +188,31 @@ public class CommonService {
         KwtLogisticsOrderContract contract = logisticsOrderContractMapper.selectOne(new LambdaQueryWrapper<KwtLogisticsOrderContract>().eq(KwtLogisticsOrderContract::getLOrderId, logisticsOrder.getId()));
         remoteContractService.updatePerformed(contract.getContractId(), actualAmount);
     }
+
+    /**
+     * @param userIds 企业用户ID+司机ID
+     * @desc 查询用户信息
+     * @author zk
+     * @date 2023/9/7
+     **/
+    public List<UserInfoVo> findUserList(List<Long> userIds) {
+        List<UserInfoVo> userList = new ArrayList<>();
+        //用户数据集
+        userIds = userIds.stream().distinct().collect(Collectors.toList());
+        Map<Long, UserCacheResDto> users = remoteSystemService.queryUserCacheMapByIds(userIds);
+        users.forEach((key,value) -> {
+            UserInfoVo userInfo = new UserInfoVo();
+            BeanUtils.copyProperties(value, userInfo);
+            userList.add(userInfo);
+        });
+
+        Map<Long, RDriverVo> drivers = remoteFleetService.findDriver(userIds);
+        drivers.forEach((key,value) -> {
+            UserInfoVo userInfo = new UserInfoVo();
+            BeanUtils.copyProperties(value, userInfo);
+            userList.add(userInfo);
+        });
+        return userList;
+    }
+
 }

+ 51 - 20
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

@@ -54,7 +54,7 @@ import java.util.stream.Collectors;
 
 /**
  * @author zk
- * @desc TODO
+ * @desc 车辆运单
  * @date 2023/7/19 0019
  */
 @Slf4j
@@ -144,24 +144,21 @@ public class KwtWaybillOrderService {
             }
         }
 
-        /**数据组装**/
+        /**数据配置**/
         List<Long> entIds = new ArrayList<>();
-        List<String> dictKey = new ArrayList<>();
         for (WaybillOrderDriverVo waybillOrder : waybillOrders) {
             entIds.add(waybillOrder.getCarrierEntId());
-            dictKey.add(DictTypeEnum.UNIT_TYPE.getType() + Global.POUND + waybillOrder.getUnit());
         }
-
         //企业数据集
         entIds = entIds.stream().distinct().collect(Collectors.toList());
-        dictKey = dictKey.stream().distinct().collect(Collectors.toList());
         Map<Long, EntCacheResDto> ents = remoteSystemService.queryEntCacheMapByIds(entIds);
-        Map<String, SysDictResDto> dicts = remoteSystemService.queryDictMapByTypeValues(String.join(Global.COMMA, dictKey));
+
+        //数据组装
         for (WaybillOrderDriverVo waybillOrder : waybillOrders) {
             EntCacheResDto ent = ents == null ? null : ents.get(waybillOrder.getCarrierEntId());
-            SysDictResDto unit = dicts == null ? null : dicts.get(DictTypeEnum.UNIT_TYPE.getType() + Global.POUND + waybillOrder.getUnit());
+            String value = getDictValue(DictTypeEnum.UNIT_TYPE.getType(), waybillOrder.getUnit());
             waybillOrder.setCarrierFirmName(ent != null ? ent.getFirmName() : null);
-            waybillOrder.setUnit(unit != null ? unit.getLabel() : null);
+            waybillOrder.setUnit(value);
         }
         return waybillOrders;
     }
@@ -239,7 +236,7 @@ public class KwtWaybillOrderService {
                 changeWaybillOrderCirculate(circulate.getId(), params, null);
                 wOrder.set_id(circulate.getId());
             } else {
-                circulate = logisticsOrderCirculateDao.findCirculate(waybillOrder.getLOrderId(), waybillOrder.getTruckId(), waybillOrder.getDriverId(), Global.NO);
+                circulate = logisticsOrderCirculateDao.findCirculate(waybillOrder.getLOrderId(), waybillOrder.getTruckId(), waybillOrder.getDriverId());
                 changeWaybillOrderCirculate(circulate.getId(), params, null);
             }
         }
@@ -286,7 +283,7 @@ public class KwtWaybillOrderService {
                 changeWaybillOrderCirculate(circulate.getId(), null, params);
                 wOrder.set_id(circulate.getId());
             } else {
-                circulate = logisticsOrderCirculateDao.findCirculate(waybillOrder.getLOrderId(), waybillOrder.getTruckId(), waybillOrder.getDriverId(), Global.NO);
+                circulate = logisticsOrderCirculateDao.findCirculate(waybillOrder.getLOrderId(), waybillOrder.getTruckId(), waybillOrder.getDriverId());
                 changeWaybillOrderCirculate(circulate.getId(), null, params);
             }
         }
@@ -494,12 +491,14 @@ public class KwtWaybillOrderService {
         List<SckwWaybillOrder> sckwWaybillOrders = new ArrayList();
         for (SendCarDto1 sendCarDto : params) {
             /**KwtWaybillOrder数据组装**/
-            String wOrderNo = getRedisGenerateWaybillOrderNo(RedisOrderGenerateEnum.WAYBILL_ORDER, OrderRuleEnum.WAYBILL_ORDER, logisticsOrder.getLOrderNo());
-            KwtWaybillOrder waybillOrder = this.setKwtWaybillOrder(sendCarDto, wOrderNo);
+            KwtWaybillOrder waybillOrder = this.setKwtWaybillOrder(sendCarDto);
             /**数据存储**/
             if (sendCarDto.getType() == Global.NUMERICAL_ONE) {
                 for (int i = 0; i < sendCarDto.getCount(); i++) {
                     //车辆运单存储
+                    String wOrderNo = getRedisGenerateWaybillOrderNo(RedisOrderGenerateEnum.WAYBILL_ORDER, OrderRuleEnum.WAYBILL_ORDER, logisticsOrder.getLOrderNo());
+                    waybillOrder.setId(null);
+                    waybillOrder.setWOrderNo(wOrderNo);
                     ranksSave(waybillOrder, loadAddress, unloadAddress);
 
                     /**SckwWaybillOrder数据组装**/
@@ -537,7 +536,6 @@ public class KwtWaybillOrderService {
         return HttpResult.ok(sckwWaybillOrders);
     }
 
-
     /**
      * 获取生成车辆运单单据号最大值处理
      */
@@ -599,7 +597,7 @@ public class KwtWaybillOrderService {
     public KwtLogisticsOrderCirculate circulateSave(KwtWaybillOrder waybillOrder) {
         //循环派车信息
         KwtLogisticsOrderCirculate circulate = logisticsOrderCirculateDao.findCirculate(waybillOrder.getLOrderId(),
-                waybillOrder.getTruckId(), waybillOrder.getDriverId(), 0);
+                waybillOrder.getTruckId(), waybillOrder.getDriverId());
         if (circulate == null) {
             circulate = new KwtLogisticsOrderCirculate();
             BeanUtils.copyProperties(waybillOrder, circulate);
@@ -607,8 +605,13 @@ public class KwtWaybillOrderService {
             circulate.setStatus(0);
             int count = logisticsOrderCirculateDao.insert(circulate);
             return count > 0 ? circulate : null;
+        } else {
+            BeanUtils.copyProperties(waybillOrder, circulate);
+            circulate.setWOrderId(null);
+            circulate.setStatus(0);
+            int count = logisticsOrderCirculateDao.updateById(circulate);
+            return count > 0 ? circulate : null;
         }
-        return circulate;
     }
 
     /**
@@ -664,11 +667,10 @@ public class KwtWaybillOrderService {
      * @author zk
      * @date 2023/7/20
      **/
-    public KwtWaybillOrder setKwtWaybillOrder(SendCarDto1 sendCarDto, String wOrderNo) {
+    public KwtWaybillOrder setKwtWaybillOrder(SendCarDto1 sendCarDto) {
         KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
         waybillOrder.setEntId(LoginUserHolder.getEntId());
         waybillOrder.setLOrderId(sendCarDto.getLOrderId());
-        waybillOrder.setWOrderNo(wOrderNo);
         waybillOrder.setType(sendCarDto.getType());
         waybillOrder.setStartTime(sendCarDto.getLoadDateTime());
         waybillOrder.setEndTime(sendCarDto.getUnloadDateTime());
@@ -1203,6 +1205,7 @@ public class KwtWaybillOrderService {
             /**5Mongodb数据更新**/
             //1车辆订单
             SckwWaybillOrder wOrder = new SckwWaybillOrder();
+            wOrder.setWOrderNo(waybillOrder.getWOrderNo());
             editSckwWaybillOrder(wOrder, waybillOrder, 2);
 
             //2承运订单
@@ -1348,6 +1351,15 @@ public class KwtWaybillOrderService {
         if (waybillOrder.getStatus() != CarWaybillEnum.PENDING_VEHICLE.getCode()) {
             return HttpResult.error("车辆运单当前状态已不能出车!");
         }
+        //车辆任务中校验
+        Map<String, Object> queryParams = new HashMap<>(Global.NUMERICAL_SIXTEEN){{
+            put("truckNo", waybillOrder.getTruckNo());
+            put("busStatus", 3);
+        }};
+        List<KwtWaybillOrder> waybillOrders = waybillOrderDao.findWaybillOrder(queryParams);
+        if (!CollectionUtils.isEmpty(waybillOrders)) {
+            return HttpResult.error("车辆正在任务中,不能出车!");
+        }
 
         /**2更新车辆运单**/
         waybillOrder.setStatus(CarWaybillEnum.EXIT_COMPLETED.getCode());
@@ -1396,7 +1408,7 @@ public class KwtWaybillOrderService {
         if (waybillOrder.getType() == Global.NUMERICAL_TWO) {
             //循环派车信息
             KwtLogisticsOrderCirculate circulate = logisticsOrderCirculateDao.findCirculate(waybillOrder.getLOrderId(),
-                    waybillOrder.getTruckId(), waybillOrder.getDriverId(), 0);
+                    waybillOrder.getTruckId(), waybillOrder.getDriverId());
             circulate.setStatus(Global.NUMERICAL_ONE);
             logisticsOrderCirculateDao.updateById(circulate);
         }
@@ -1618,7 +1630,7 @@ public class KwtWaybillOrderService {
         if (waybillOrder.getType() == Global.NUMERICAL_TWO) {
             //循环派车信息
             KwtLogisticsOrderCirculate circulate = logisticsOrderCirculateDao.findCirculate(waybillOrder.getLOrderId(),
-                    waybillOrder.getTruckId(), waybillOrder.getDriverId(), 0);
+                    waybillOrder.getTruckId(), waybillOrder.getDriverId());
             /*circulate.setWOrderId(null);
             logisticsOrderCirculateDao.updateById(circulate);*/
             Long newId = new IdWorker(Global.NUMERICAL_ONE).nextId();
@@ -2493,4 +2505,23 @@ public class KwtWaybillOrderService {
         map.put("loop", loopMap);
         return HttpResult.ok(map);
     }
+
+    /**
+     * @param type 字典类型
+     * @param value 字典值
+     * @desc 获取数据字典值
+     * @author zk
+     * @date 2023/8/30
+     **/
+    public String getDictValue(String type, String value) {
+        if (StringUtils.isBlank(type) || StringUtils.isBlank(value)) {
+            return null;
+        }
+        List<String> dictKey = new ArrayList<>(){{
+            add(type + Global.POUND + value);
+        }};
+        Map<String, SysDictResDto> dicts = remoteSystemService.queryDictMapByTypeValues(String.join(Global.COMMA, dictKey));
+        SysDictResDto dict = dicts == null ? null : dicts.get(DictTypeEnum.APPROVED_DRIVING.getType() + Global.POUND + value);
+        return dict != null ? dict.getLabel() : null;
+    }
 }

+ 35 - 30
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/WaybillManagementService.java

@@ -79,6 +79,9 @@ public class WaybillManagementService {
     @Autowired
     private MongoTemplate mongoTemplate;
 
+    @Autowired
+    private CommonService commonService;
+
     /**
      * 运单详情
      *
@@ -181,9 +184,8 @@ public class WaybillManagementService {
                 deficitRealAmount = deficitLoss.subtract(deficitAmount);
             }
             waybillTicketVO.setDeficitRealAmount(deficitRealAmount.toString());
-//            waybillBoardListVO.setLoadUrls(sckwWaybillOrder.getLoadUrls() != null ? FileUtils.getOSSAddressPrefix() + sckwWaybillOrder.getLoadUrls() : null);
-//            waybillBoardListVO.setUnloadUrls(sckwWaybillOrder.getUnloadUrls() != null ? FileUtils.getOSSAddressPrefix() + sckwWaybillOrder.getUnloadUrls() : null);
         }
+
         List<Integer> statuses = initWaybillIndexStatus();
         // 初始化各状态
         List<WaybillStatusVO> statusVOS = new ArrayList<>();
@@ -194,38 +196,41 @@ public class WaybillManagementService {
             waybillStatusVO.setDestination(CarWaybillEnum.getName(e));
             statusVOS.add(waybillStatusVO);
         });
-        List<KwtWaybillOrderTrack> kwtWaybillOrderTracks = kwtWaybillOrderTrackMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrderTrack>()
+
+        List<KwtWaybillOrderTrack> kwtWaybillOrderTracks = kwtWaybillOrderTrackMapper
+                .selectList(new LambdaQueryWrapper<KwtWaybillOrderTrack>()
                 .eq(KwtWaybillOrderTrack::getWOrderId, id));
         List<WaybillTrackVO> waybillTrackVOS = new ArrayList<>();
         if (CollectionUtils.isNotEmpty(kwtWaybillOrderTracks)) {
             List<Long> userIds = new ArrayList<>();
             kwtWaybillOrderTracks.forEach(e -> userIds.add(e.getCreateBy()));
-            List<UserCacheResDto> users = remoteSystemService.queryUserCacheByIds(userIds);
-            Map<Long, UserCacheResDto> usersMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
-            users.forEach(e -> usersMap.put(e.getId(), e));
-            for (KwtWaybillOrderTrack kwtWaybillOrderTrack : kwtWaybillOrderTracks) {
+            List<UserInfoVo> users = commonService.findUserList(userIds);
+            Map<Long, String> userNameMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            users.forEach(e -> userNameMap.put(e.getId(), e.getName()));
+            Map<Long, String> userPhoneMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+            users.forEach(e -> userPhoneMap.put(e.getId(), e.getPhone()));
+
+            for (KwtWaybillOrderTrack track : kwtWaybillOrderTracks) {
                 for (WaybillStatusVO statusVO : statusVOS) {
-                    if (statusVO.getCode().equals(kwtWaybillOrderTrack.getStatus())) {
+                    if (statusVO.getCode().equals(track.getStatus())) {
                         statusVO.setStatus(true);
-                        statusVO.setId(kwtWaybillOrderTrack.getId());
-                        statusVO.setCreateTime(DateUtil.getDateTime(kwtWaybillOrderTrack.getCreateTime()));
-                        statusVO.setOperateTime(kwtWaybillOrderTrack.getOperateTime() == null
-                                ? null : DateUtil.getDateTime(kwtWaybillOrderTrack.getOperateTime()));
-                        statusVO.setCreateByName(usersMap.get(kwtWaybillOrderTrack.getCreateBy()) == null
-                                ? null : usersMap.get(kwtWaybillOrderTrack.getCreateBy()).getName());
+                        statusVO.setId(track.getId());
+                        statusVO.setCreateTime(DateUtil.getDateTime(track.getCreateTime()));
+                        statusVO.setOperateTime(DateUtil.getDateTime(track.getOperateTime()));
+                        statusVO.setCreateByName(userNameMap.get(track.getCreateBy()));
                         break;
                     }
                 }
+
                 WaybillTrackVO waybillTrackVO = new WaybillTrackVO();
-                waybillTrackVO.setId(String.valueOf(kwtWaybillOrderTrack.getId()))
-                        .setRemark(kwtWaybillOrderTrack.getRemark())
-                        .setStatus(String.valueOf(kwtWaybillOrderTrack.getStatus()))
-                        .setStatusLabel(CarWaybillEnum.getName(kwtWaybillOrderTrack.getStatus()))
-                        .setCreateBy(usersMap.get(kwtWaybillOrderTrack.getCreateBy()) == null
-                                ? null : usersMap.get(kwtWaybillOrderTrack.getCreateBy()).getName())
-                        .setCreateByPhone(usersMap.get(kwtWaybillOrderTrack.getCreateBy()) == null
-                                ? null : usersMap.get(kwtWaybillOrderTrack.getCreateBy()).getPhone())
-                        .setCreateTime(DateUtil.getDateTime(kwtWaybillOrderTrack.getCreateTime()));
+                waybillTrackVO.setId(String.valueOf(track.getId()))
+                        .setRemark(track.getRemark())
+                        .setStatus(String.valueOf(track.getStatus()))
+                        .setStatusLabel(CarWaybillEnum.getName(track.getStatus()))
+                        .setCreateBy(track.getCreateBy())
+                        .setCreateByPhone(userPhoneMap.get(track.getCreateBy()))
+                        .setCreateByName(userNameMap.get(track.getCreateBy()))
+                        .setCreateTime(DateUtil.getDateTime(track.getCreateTime()));
                 waybillTrackVOS.add(waybillTrackVO);
             }
         }
@@ -369,7 +374,6 @@ public class WaybillManagementService {
         // mongo查询列数据,不足的数据单独关联表查询
         // 状态查询 status [2-8]
         List<Integer> statuses = initWaybillIndexStatus();
-//        List<Integer> statuses = CarWaybillEnum.getCodes();
         // 初始化各状态
         List<WaybillStatusVO> statusVOS = new ArrayList<>();
         statuses.forEach(e -> {
@@ -383,8 +387,7 @@ public class WaybillManagementService {
         Criteria criteria = buildWaybillIndexQuery(query);
         Query queryFormat = new Query(criteria);
         long total = mongoTemplate.count(queryFormat, SckwWaybillOrder.class);
-        queryFormat.with(PageRequest.of(query.getPage() - 1, query.getPageSize(),
-                Sort.by(Sort.Order.desc("createTime"))));
+        queryFormat.with(PageRequest.of(query.getPage() - 1, query.getPageSize(), Sort.by(Sort.Order.desc("createTime"))));
         // 执行查询
         List<SckwWaybillOrder> list = mongoTemplate.find(queryFormat, SckwWaybillOrder.class);
         List<WaybillBoardListVO> orders = new ArrayList<>();
@@ -423,9 +426,8 @@ public class WaybillManagementService {
             waybillBoardListVO.setLoadGrossAmount(sckwWaybillOrder.getLoadGrossAmount() != null ? String.valueOf(sckwWaybillOrder.getLoadGrossAmount()) : null);
             waybillBoardListVO.setUnloadGrossAmount(sckwWaybillOrder.getUnloadGrossAmount() != null ? String.valueOf(sckwWaybillOrder.getUnloadGrossAmount()) : null);
             waybillBoardListVO.setLoadUrls(sckwWaybillOrder.getLoadUrls());
-//            waybillBoardListVO.setLoadUrls(sckwWaybillOrder.getLoadUrls() != null ? FileUtils.getOSSAddressPrefix() + sckwWaybillOrder.getLoadUrls() : null);
-//            waybillBoardListVO.setUnloadUrls(sckwWaybillOrder.getUnloadUrls() != null ? FileUtils.getOSSAddressPrefix() + sckwWaybillOrder.getUnloadUrls() : null);
             waybillBoardListVO.setUnloadUrls(sckwWaybillOrder.getUnloadUrls());
+
             List<WaybillStatusVO> statusVOS2 = new ArrayList<>();
             statusVOS.forEach(e -> {
                 WaybillStatusVO temp = new WaybillStatusVO();
@@ -433,13 +435,16 @@ public class WaybillManagementService {
                 statusVOS2.add(temp);
             });
             waybillBoardListVO.setTracks(statusVOS2);
+
             // 运单进度
-            List<KwtWaybillOrderTrack> kwtWaybillOrderTracks = kwtWaybillOrderTrackMapper.selectList(new LambdaQueryWrapper<KwtWaybillOrderTrack>()
+            List<KwtWaybillOrderTrack> kwtWaybillOrderTracks = kwtWaybillOrderTrackMapper
+                    .selectList(new LambdaQueryWrapper<KwtWaybillOrderTrack>()
                     .eq(KwtWaybillOrderTrack::getWOrderId, sckwWaybillOrder.getWOrderId()));
+
             if (CollectionUtils.isNotEmpty(kwtWaybillOrderTracks)) {
                 List<Long> userIds = new ArrayList<>();
                 kwtWaybillOrderTracks.forEach(e -> userIds.add(e.getCreateBy()));
-                List<UserCacheResDto> users = remoteSystemService.queryUserCacheByIds(userIds);
+                List<UserInfoVo> users = commonService.findUserList(userIds);
                 Map<Long, String> usersMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
                 users.forEach(e -> usersMap.put(e.getId(), e.getName()));
                 waybillBoardListVO.getTracks().forEach(e -> {

+ 0 - 1
sckw-modules/sckw-transport/src/main/resources/mapper/KwtLogisticsOrderCirculateMapper.xml

@@ -68,7 +68,6 @@
         and l_order_id = #{lOrderId, jdbcType=BIGINT}
         and truck_id = #{truckId, jdbcType=BIGINT}
         and driver_id = #{driverId, jdbcType=BIGINT}
-        and status = #{status, jdbcType=INTEGER}
     </select>
 
     <select id="findCirculateList" resultType="com.sckw.transport.model.KwtLogisticsOrderCirculate" >