Browse Source

提交合同查询接口

chenxiaofei 1 tháng trước cách đây
mục cha
commit
5c117d6122

+ 100 - 8
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/TruckNoUtils.java

@@ -25,6 +25,11 @@ public class TruckNoUtils {
      */
     private static final String TRUCK_NO_PATTERN_8 = "^[京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新使]{1}[A-Z]{1}[0-9A-Z]{6}$";
 
+    /**
+     * 省份简称(用于智能拆分车牌号)
+     */
+    private static final String PROVINCES = "京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新使";
+
     /**
      * 支持的分隔符:中文逗号、英文逗号、空格、换行符、制表符
      */
@@ -79,9 +84,11 @@ public class TruckNoUtils {
 
     /**
      * 从字符串中拆分车牌号
-     * 支持中文逗号、英文逗号、空格、换行符等分隔符
+     * 支持两种模式:
+     * 1. 分隔符模式:中文逗号、英文逗号、空格、换行符等分隔符
+     * 2. 智能识别模式:无分隔符,通过识别省份简称自动拆分(如:川A12345京B67890)
      *
-     * @param truckNoStr 车牌号字符串,如:"川A12345,京B67890,粤C11111 沪D22222"
+     * @param truckNoStr 车牌号字符串,如:"川A12345,京B67890" 或 "川A12345京B67890"
      * @return 车牌号列表
      */
     public static List<String> splitTruckNos(String truckNoStr) {
@@ -89,17 +96,103 @@ public class TruckNoUtils {
             return new ArrayList<>();
         }
 
-        // 使用正则表达式分割
+        List<String> result = new ArrayList<>();
+        
+        // 先尝试按分隔符拆分
         String[] parts = truckNoStr.split(DELIMITER_PATTERN);
         
-        return Arrays.stream(parts)
-                .map(String::trim)
+        for (String part : parts) {
+            if (StringUtils.isBlank(part)) {
+                continue;
+            }
+            
+            // 去除空格并转大写
+            String cleaned = part.trim().replaceAll("\\s+", "").toUpperCase();
+            
+            // 检查是否包含多个车牌号(通过识别省份简称)
+            List<String> subParts = splitByProvince(cleaned);
+            result.addAll(subParts);
+        }
+        
+        return result.stream()
                 .filter(StringUtils::isNotBlank)
-                .map(TruckNoUtils::formatTruckNo)
                 .distinct()
                 .collect(Collectors.toList());
     }
 
+    /**
+     * 通过识别省份简称智能拆分车牌号
+     * 例如:"川A12345京B67890" -> ["川A12345", "京B67890"]
+     *
+     * @param str 待拆分的字符串
+     * @return 拆分后的车牌号列表
+     */
+    private static List<String> splitByProvince(String str) {
+        List<String> result = new ArrayList<>();
+        
+        if (StringUtils.isBlank(str)) {
+            return result;
+        }
+        
+        int i = 0;
+        while (i < str.length()) {
+            char c = str.charAt(i);
+            
+            // 检查是否为省份简称
+            if (PROVINCES.indexOf(c) != -1) {
+                // 找到省份简称,尝试提取完整车牌号
+                String truckNo = extractTruckNo(str, i);
+                if (StringUtils.isNotBlank(truckNo)) {
+                    result.add(truckNo);
+                    i += truckNo.length();
+                } else {
+                    i++;
+                }
+            } else {
+                i++;
+            }
+        }
+        
+        // 如果没有识别到省份简称,说明可能是完整的单个车牌号
+        if (result.isEmpty() && StringUtils.isNotBlank(str)) {
+            result.add(str);
+        }
+        
+        return result;
+    }
+
+    /**
+     * 从指定位置提取车牌号
+     * 车牌号格式:省份简称(1位) + 字母(1位) + 数字/字母(5-6位)
+     *
+     * @param str 源字符串
+     * @param startIndex 起始位置(省份简称的位置)
+     * @return 提取的车牌号,如果格式不正确返回空字符串
+     */
+    private static String extractTruckNo(String str, int startIndex) {
+        // 最短7位(标准车牌),最长8位(新能源车牌)
+        int minLength = 7;
+        int maxLength = 8;
+        
+        // 先尝试提取8位(新能源车牌)
+        if (startIndex + maxLength <= str.length()) {
+            String candidate = str.substring(startIndex, startIndex + maxLength);
+            if (isValidTruckNo(candidate)) {
+                return candidate;
+            }
+        }
+        
+        // 再尝试提取7位(标准车牌)
+        if (startIndex + minLength <= str.length()) {
+            String candidate = str.substring(startIndex, startIndex + minLength);
+            if (isValidTruckNo(candidate)) {
+                return candidate;
+            }
+        }
+        
+        return "";
+    }
+
     /**
      * 获取车牌号校验失败的原因
      *
@@ -124,8 +217,7 @@ public class TruckNoUtils {
 
         // 检查省份简称
         char province = formatted.charAt(0);
-        String provinces = "京津冀晋蒙辽吉黑沪苏浙皖闽赣鲁豫鄂湘粤桂琼川贵云渝藏陕甘青宁新使";
-        if (provinces.indexOf(province) == -1) {
+        if (PROVINCES.indexOf(province) == -1) {
             return "省份简称不正确:" + province;
         }
 

+ 13 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java

@@ -63,6 +63,8 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.ZoneId;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -1194,7 +1196,17 @@ public class KwcContractLogisticsService {
         saveContractLogistics.setName(baseInfo.getContractName());
         saveContractLogistics.setSigningWay(baseInfo.getSigningWay());
         saveContractLogistics.setStartTime(baseInfo.getStartTime());
-        saveContractLogistics.setEndTime(baseInfo.getEndTime());
+        if (Objects.isNull(baseInfo.getEndTime())){
+            // 创建 LocalDate 对象
+            LocalDate localDate = LocalDate.of(9999, 12, 12);
+
+// 将 LocalDate 转换为 Date
+            Date date1 = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
+            saveContractLogistics.setEndTime(date1);
+        }else {
+            saveContractLogistics.setEndTime(baseInfo.getEndTime());
+        }
+
         saveContractLogistics.setStatus(ContractStatusEnum.SUBMIT.getCode());
         saveContractLogistics.setCreateBy(LoginUserHolder.getUserId());
         saveContractLogistics.setCreateTime(date);

+ 10 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/controller/KwfFleetController.java

@@ -21,6 +21,7 @@ import com.sckw.fleet.model.request.QueryFleetReq;
 import com.sckw.fleet.model.vo.KwfFleetVo;
 import com.sckw.fleet.model.vo.QueryFleetResp;
 import com.sckw.fleet.service.KwfFleetService;
+import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -148,7 +149,16 @@ public class KwfFleetController {
      * 分页查询车队列表
      */
     @PostMapping("/findFleetByPage")
+    @Schema(description = "分页查询车队列表")
     public BaseResult<PageDataResult<QueryFleetResp>> findFleetByPage(@RequestBody QueryFleetReq req) {
         return BaseResult.success(fleetService.findFleetByPage(req));
     }
+    /**
+     * 获取车队列表
+     */
+    @PostMapping("/findFleetList")
+    public BaseResult<List<QueryFleetResp>> findFleetList(@RequestBody QueryFleetReq req) {
+        return BaseResult.success(fleetService.findFleetList(req));
+    }
+
 }

+ 12 - 6
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/BatchTruckValidateReq.java

@@ -1,12 +1,11 @@
 package com.sckw.fleet.model.request;
 
 import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotBlank;
 import lombok.Data;
 
 import java.io.Serial;
 import java.io.Serializable;
-import java.util.List;
 
 /**
  * @author system
@@ -21,9 +20,16 @@ public class BatchTruckValidateReq implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
-     * 车牌号列表(支持中文逗号、英文逗号、空格、换行符分隔)
+     * 车牌号字符串(支持中文逗号、英文逗号、空格、换行符分隔)
      */
-    @NotEmpty(message = "车牌号列表不能为空")
-    @Schema(description = "车牌号列表", required = true, example = "[\"川A12345\", \"京B67890\", \"粤C11111\"]")
-    private List<String> truckNos;
+    @NotBlank(message = "车牌号不能为空")
+    @Schema(description = "车牌号字符串,多个车牌号用中文逗号、英文逗号、空格或换行符分隔", 
+            required = true, 
+            example = "川A12345,京B67890,粤C11111 沪D22222")
+    private String truckNos;
+    /**
+     * 企业ID
+     */
+    @Schema(description = "企业ID")
+    private Long entId;
 }

+ 3 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/model/request/QueryFleetReq.java

@@ -1,6 +1,7 @@
 package com.sckw.fleet.model.request;
 
 import com.sckw.core.web.request.PageReq;
+import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -21,9 +22,11 @@ public class QueryFleetReq extends PageReq implements Serializable {
     /**
      * 车队id
      */
+    @Schema(description = "车队id")
     private String fleetId;
     /**
      * 企业id
      */
+    @Schema(description = "企业id")
     private String entId;
 }

+ 7 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/repository/KwfTruckRepository.java

@@ -110,4 +110,11 @@ public class KwfTruckRepository extends ServiceImpl<KwfTruckMapper, KwfTruck> {
                 .eq(BaseModel::getDelFlag,0)
                 .eq(KwfTruck::getTruckNo, truckNo));
     }
+
+    public List<KwfTruck> queryByTruckNosAndEntId(List<String> truckNoList, Long entId) {
+        return list(Wrappers.<KwfTruck>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .eq(Objects.nonNull(entId),KwfTruck::getEntId, entId)
+                .in(CollectionUtils.isNotEmpty(truckNoList),KwfTruck::getTruckNo, truckNoList));
+    }
 }

+ 4 - 0
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfFleetService.java

@@ -316,4 +316,8 @@ public class KwfFleetService {
         truckInfo.setAxleNum(truck.getCarAxis());
         return truckInfo;
     }
+
+    public List<QueryFleetResp> findFleetList(QueryFleetReq req) {
+        return null;
+    }
 }

+ 11 - 11
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/service/KwfTruckService.java

@@ -1844,24 +1844,24 @@ public class KwfTruckService {
      */
     public List<TruckValidateVo> batchValidateTruckNos(BatchTruckValidateReq req) {
         log.info("批量校验车牌号,请求参数:{}", JSON.toJSONString(req));
-        
+        Long entId = Objects.nonNull(req.getEntId()) ? req.getEntId() : LoginUserHolder.getEntId();
         List<TruckValidateVo> result = new ArrayList<>();
         
-        if (CollectionUtils.isEmpty(req.getTruckNos())) {
+        if (StringUtils.isBlank(req.getTruckNos())) {
             return result;
         }
 
-        // 格式化车牌号列表
-        List<String> formattedTruckNos = TruckNoUtils.formatTruckNos(req.getTruckNos());
+        // 使用TruckNoUtils拆分车牌号字符串(支持中文逗号、英文逗号、空格、换行符等)
+        List<String> truckNoList = TruckNoUtils.splitTruckNos(req.getTruckNos());
         
+        if (CollectionUtils.isEmpty(truckNoList)) {
+            return result;
+        }
+
         // 批量查询车辆信息
         Map<String, KwfTruck> truckMap = new HashMap<>();
-        if (!formattedTruckNos.isEmpty()) {
-            List<KwfTruck> trucks = kwfTruckRepository.list(
-                Wrappers.lambdaQuery(KwfTruck.class)
-                    .in(KwfTruck::getTruckNo, formattedTruckNos)
-                    .eq(KwfTruck::getDelFlag, 0)
-            );
+        if (!truckNoList.isEmpty()) {
+            List<KwfTruck> trucks = kwfTruckRepository.queryByTruckNosAndEntId(truckNoList,entId);
             truckMap = trucks.stream()
                 .collect(Collectors.toMap(KwfTruck::getTruckNo, Function.identity(), (k1, k2) -> k1));
         }
@@ -1876,7 +1876,7 @@ public class KwfTruckService {
         }
 
         // 处理每个车牌号
-        for (String originalTruckNo : req.getTruckNos()) {
+        for (String originalTruckNo : truckNoList) {
             TruckValidateVo vo = validateSingleTruckNo(originalTruckNo, truckMap, entMap);
             result.add(vo);
         }