Forráskód Böngészése

fix:修复因重复IMEI码导致的错误,改为使用工单号+IMEI映射到对应的工单文件夹;修改数据输入和输出的模型

yang yi 10 hónapja
szülő
commit
f15be13490

+ 30 - 25
src/main/java/space/anyi/amountVerification/App.java

@@ -227,7 +227,7 @@ public class App extends Application {
         alert.setHeaderText("金额验证工具");
         alert.setContentText("作者: 杨逸\n" +
                            "联系方式: huanglve2004@163.com\n\n" +
-                           "版本: 1.0.0\n" +
+                           "版本: 1.0.1\n" +
                            "描述: 用于金额验证的桌面应用程序");
 
         alert.showAndWait();
@@ -285,10 +285,10 @@ public class App extends Application {
 
     private void startVerification() {
         //如果当前时间大于2025-11-28,则关闭程序
-        //if (System.currentTimeMillis() > 1764341281000L) {
-        //    new Alert(Alert.AlertType.ERROR, "软件已过期,请联系作者获取最新版本").showAndWait();
-        //    Platform.exit();
-        //}
+        if (System.currentTimeMillis() > 1764341281000L) {
+            new Alert(Alert.AlertType.ERROR, "软件已过期,请联系作者获取最新版本").showAndWait();
+            Platform.exit();
+        }
         startButton.setDisable(true);
         String filePath = fileField.getText();
         String folderPath = folderField.getText();
@@ -384,18 +384,21 @@ public class App extends Application {
         for (InputModel inputModel : inputModelList) {
             OutputModel outputModel = new OutputModel(inputModel);
             String imei = inputModel.getImei().trim();
-            log.info("开始对账IMEI:{}",imei);
+            String workOrderNumber = inputModel.getWorkOrderNumber().trim();
+            String fileKey = workOrderNumber + "-" + imei;
+            fileKey = fileKey.toUpperCase(Locale.ROOT);
+            log.info("开始对账工单:{}",fileKey);
             //找到对应工单文件的路径
-            File workOrderFile = workOrderFileMap.getOrDefault(imei, null);
+            File workOrderFile = workOrderFileMap.getOrDefault(fileKey, null);
             if (Objects.isNull(workOrderFile)) {
-                log.warn("未找到IMEI:{}对应的工单文件",imei);
-                errorImeiList.add(new OutputErrorModel(imei));
+                log.warn("未找到{}对应的工单文件",fileKey);
+                errorImeiList.add(new OutputErrorModel(imei,workOrderNumber));
                 processedWorkOrders++;
                 double progress = 0.5 + (0.4 * processedWorkOrders / totalWorkOrders);
-                updateProgress("解析工单文件: " + processedWorkOrders + "/" + totalWorkOrders + " (IMEI未找到: " + imei + ")", progress);
+                updateProgress("解析工单文件: " + processedWorkOrders + "/" + totalWorkOrders + " (工单文件未找到: " + fileKey + ")", progress);
                 continue;
             }
-            log.info("找到IMEI:{}对应的工单文件:{}",imei,workOrderFile.getName());
+            log.info("找到{}对应的工单文件:{}",fileKey,workOrderFile.getName());
             //解析工单文件
             log.info("开始解析工单文件:{}",workOrderFile.getName());
             String text = null;
@@ -410,7 +413,7 @@ public class App extends Application {
             if (Objects.isNull(text)) {
                 //没有文本
                 log.warn("解析IMEI:{}对应的工单文件: {} 失败",imei,workOrderFile.getName());
-                errorImeiList.add(new OutputErrorModel(imei));
+                errorImeiList.add(new OutputErrorModel(imei,workOrderNumber));
             }else{
                 Matcher matcher = pattern.matcher(text);
                 if (matcher.find()) {
@@ -422,7 +425,7 @@ public class App extends Application {
                     outputModel.setMargin(amount1.subtract(amount2).doubleValue());
                 } else {
                     log.warn("IMEI:{}未匹配到金额",imei);
-                    errorImeiList.add(new OutputErrorModel(imei));
+                    errorImeiList.add(new OutputErrorModel(imei,workOrderNumber));
                 }
             }
             log.info("解析IMEI:{}对应的工单文件: {} 完成",imei,workOrderFile.getName());
@@ -494,7 +497,7 @@ public class App extends Application {
         File folder = new File(folderPath);
         File[] files = folder.listFiles();
 
-        // 扫描文件夹并建立IMEI-工单文件映射
+        // 扫描文件夹并建立工单号+IMEI=工单文件映射
         int totalFolders = files.length;
         int processedFolders = 0;
 
@@ -503,26 +506,28 @@ public class App extends Application {
                 continue;
             }
             log.info("正在扫描文件夹,查找工单文件: {}", file.getName());
-            File[] listFiles = file.listFiles();
-            String[] split = file.getName().split("-");
-            String imei = split[split.length-1].trim();
-            log.debug("IMEI: {}", imei);
+            File[] childrenFiles = file.listFiles();
+            String fileKey = file.getName().replaceAll(" ","").toUpperCase(Locale.ROOT);
+            log.debug("fileKey: {}", fileKey);
             //拿到文件夹里的工单文件(文件类型可能是PDF或JPG)
-            for (File workOrderFile : listFiles) {
+            for (File workOrderFile : childrenFiles) {
+                if (workOrderFile.isDirectory()) {
+                    continue;
+                }
                 if (workOrderFile.getName().contains("工单照片")) {
-                    if (workOrderFileMap.containsKey(imei)) {
-                        log.warn("出现重复的imei: {}", imei);
+                    if (workOrderFileMap.containsKey(fileKey)) {
+                        log.error("出现重复的工单文件夹: {}", fileKey);
                         //出现重复的imei
                         Platform.runLater(()->{
                             Alert alert = new Alert(Alert.AlertType.ERROR);
-                            alert.setHeaderText("出现重复的imei");
-                            alert.setContentText("请检查文件夹中是否出现重复的imei:" + imei);
+                            alert.setHeaderText("出现重复的工单文件夹");
+                            alert.setContentText("请检查文件夹中是否出现重复的工单文件夹:" + fileKey);
                             alert.showAndWait();
                         });
                         return;
                     }
-                    log.info("找到IMEI;{}对应的工单文件: {}", imei,workOrderFile.getName());
-                    workOrderFileMap.put(imei, workOrderFile);
+                    log.info("找到工单文件: {}",workOrderFile.getName());
+                    workOrderFileMap.put(fileKey, workOrderFile);
                     break;
                 }
             }

+ 15 - 3
src/main/java/space/anyi/amountVerification/model/InputModel.java

@@ -15,13 +15,16 @@ public class InputModel {
     private String imei;
     @ExcelProperty("赔付金额")
     private String amount;
+    @ExcelProperty("工单号")
+    private String workOrderNumber;
 
     public InputModel() {
     }
 
-    public InputModel(String imei, String amount) {
+    public InputModel(String imei, String amount, String workOrderNumber) {
         this.imei = imei;
         this.amount = amount;
+        this.workOrderNumber = workOrderNumber;
     }
 
     public String getImei() {
@@ -40,11 +43,20 @@ public class InputModel {
         this.amount = amount;
     }
 
+    public String getWorkOrderNumber() {
+        return workOrderNumber;
+    }
+
+    public void setWorkOrderNumber(String workOrderNumber) {
+        this.workOrderNumber = workOrderNumber;
+    }
+
     @Override
     public String toString() {
         return "InputModel{" +
-                "input='" + imei + '\'' +
-                ", amount=" + amount +
+                "imei='" + imei + '\'' +
+                ", amount='" + amount + '\'' +
+                ", workOrderNumber='" + workOrderNumber + '\'' +
                 '}';
     }
 }

+ 15 - 3
src/main/java/space/anyi/amountVerification/model/OutputErrorModel.java

@@ -10,14 +10,17 @@ import com.alibaba.excel.annotation.ExcelProperty;
  * @Description:
  */
 public class OutputErrorModel {
+    @ExcelProperty(value = "工单号",order = 0)
+    private String workOrderNumber;
     @ExcelProperty(value = "IMEI码",order = 1)
     private String imei;
 
     public OutputErrorModel() {
     }
 
-    public OutputErrorModel(String imei) {
+    public OutputErrorModel(String imei, String workOrderNumber) {
         this.imei = imei;
+        this.workOrderNumber = workOrderNumber;
     }
 
     public String getImei() {
@@ -28,10 +31,19 @@ public class OutputErrorModel {
         this.imei = imei;
     }
 
+    public String getWorkOrderNumber() {
+        return workOrderNumber;
+    }
+
+    public void setWorkOrderNumber(String workOrderNumber) {
+        this.workOrderNumber = workOrderNumber;
+    }
+
     @Override
     public String toString() {
-        return "OutErrorModel{" +
-                "imei='" + imei + '\'' +
+        return "OutputErrorModel{" +
+                "workOrderNumber='" + workOrderNumber + '\'' +
+                ", imei='" + imei + '\'' +
                 '}';
     }
 }

+ 13 - 1
src/main/java/space/anyi/amountVerification/model/OutputModel.java

@@ -10,6 +10,8 @@ import com.alibaba.excel.annotation.ExcelProperty;
  * @Description:
  */
 public class OutputModel {
+    @ExcelProperty(value = "工单号",order = 0)
+    private String workOrderNumber;
     @ExcelProperty(value = "IMEI码",order = 1)
     private String imei;
     @ExcelProperty(value = "赔付金额",order = 2)
@@ -25,6 +27,7 @@ public class OutputModel {
     public OutputModel(InputModel inputModel) {
         this.imei = inputModel.getImei();
         this.amount = Double.valueOf(inputModel.getAmount());
+        this.workOrderNumber = inputModel.getWorkOrderNumber();
     }
 
     public OutputModel(String imei, Double amount, Double pdfAmount, Double margin) {
@@ -66,10 +69,19 @@ public class OutputModel {
         this.margin = margin;
     }
 
+    public String getWorkOrderNumber() {
+        return workOrderNumber;
+    }
+
+    public void setWorkOrderNumber(String workOrderNumber) {
+        this.workOrderNumber = workOrderNumber;
+    }
+
     @Override
     public String toString() {
         return "OutputModel{" +
-                "imei='" + imei + '\'' +
+                "workOrderNumber='" + workOrderNumber + '\'' +
+                ", imei='" + imei + '\'' +
                 ", amount=" + amount +
                 ", pdfAmount=" + pdfAmount +
                 ", margin=" + margin +