From bcd90314646203b32f73c89c1c2f89eaa96e2c9f Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期五, 18 七月 2025 18:05:35 +0800
Subject: [PATCH] art: 设备台账-查询需要做技术状态鉴定的设备列表

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java |  330 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 317 insertions(+), 13 deletions(-)

diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java
index 056eb5f..2405991 100644
--- a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamSecondMaintenanceOrderController.java
@@ -2,7 +2,9 @@
 
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -21,11 +23,11 @@
 import org.jeecg.modules.eam.service.IEamSecondMaintenanceOrderService;
 import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
@@ -94,6 +96,119 @@
     }
 
     /**
+     * 鎵归噺娣诲姞
+     * @param requests
+     * @return
+     */
+    @AutoLog(value = "璁惧浜岀骇淇濆吇-鎵归噺娣诲姞")
+    @ApiOperation(value = "璁惧浜岀骇淇濆吇-鎵归噺娣诲姞", notes = "璁惧浜岀骇淇濆吇-鎵归噺娣诲姞")
+    @PostMapping(value = "/batchAdd")
+    public Result<?> batchAdd(@RequestBody List<EamSecondMaintenanceRequest> requests) {
+        if (CollectionUtils.isEmpty(requests)) {
+            return Result.error("娣诲姞鐨勫璞″垪琛ㄤ笉鑳戒负绌猴紒");
+        }
+
+        // 璁板綍鎴愬姛/澶辫触鐨勬潯鐩�
+        List<String> successOrders = new ArrayList<>();
+        List<Map<String, Object>> failedItems = new ArrayList<>();
+
+        for (int i = 0; i < requests.size(); i++) {
+            EamSecondMaintenanceRequest item = requests.get(i);
+            try {
+                // 1. 鍙傛暟鏍¢獙
+                if (item == null) {
+                    failedItems.add(createErrorItem(i, "瀵硅薄涓虹┖"));
+                    continue;
+                }
+                if (StrUtil.isEmpty(item.getStandardId())) {
+                    failedItems.add(createErrorItem(i, "淇濆吇椤逛笉鑳戒负绌�"));
+                    continue;
+                }
+
+                // 2. 鐢熸垚缂栫爜骞惰缃睘鎬�
+                String codeSeq = businessCodeRuleService.generateBusinessCodeSeq(
+                        BusinessCodeConst.SECOND_MAINTENANCE_CODE_RULE);
+                item.setOrderNum(codeSeq);
+                item.setCreationMethod(OrderCreationMethodEnum.MANUAL.name());
+
+                // 3. 鎵ц娣诲姞
+                if (eamSecondMaintenanceOrderService.addMaintenance(item)) {
+                    successOrders.add(codeSeq);
+                } else {
+                    failedItems.add(createErrorItem(i, "鏈嶅姟娣诲姞澶辫触"));
+                }
+            } catch (Exception e) {
+                failedItems.add(createErrorItem(i, "绯荤粺寮傚父: " + e.getMessage()));
+            }
+        }
+
+        // 4. 鏋勯�犺繑鍥炵粨鏋�
+        if (failedItems.isEmpty()) {
+            return Result.OK("鎵归噺娣诲姞鎴愬姛锛屽叡娣诲姞" + successOrders.size() + "鏉¤褰�");
+        } else {
+            Map<String, Object> result = new HashMap<>();
+            result.put("successCount", successOrders.size());
+            result.put("failedCount", failedItems.size());
+            result.put("failedDetails", failedItems);
+
+            return Result.OK(
+                    "閮ㄥ垎娣诲姞澶辫触锛堟垚鍔�" + successOrders.size() + "鏉★紝澶辫触" + failedItems.size() + "鏉★級",
+                    result
+            );
+        }
+    }
+
+    // 鍒涘缓閿欒鏉$洰淇℃伅
+    private Map<String, Object> createErrorItem(int index, String reason) {
+        Map<String, Object> error = new HashMap<>();
+        error.put("index", index);
+        error.put("reason", reason);
+        return error;
+    }
+
+    /**
+     * 鍒涘缓閿欒椤硅鎯�
+     * @param id 宸ュ崟ID
+     * @param errorMessage 閿欒淇℃伅
+     * @param detail 閿欒璇︽儏
+     * @return 閿欒璇︽儏Map
+     */
+    private Map<String, Object> createErrorItem(String id, String errorMessage, Object detail) {
+        Map<String, Object> errorItem = new HashMap<>();
+        errorItem.put("id", id);
+        errorItem.put("error", errorMessage);
+        if (detail != null) {
+            errorItem.put("detail", detail);
+        }
+        return errorItem;
+    }
+
+    /**
+     * 鏋勫缓鎵归噺鎿嶄綔杩斿洖缁撴灉
+     * @param successCount 鎴愬姛鏁伴噺
+     * @param failedDetails 澶辫触璇︽儏鍒楄〃
+     * @param actionName 鎿嶄綔鍚嶇О锛�"浣滃簾"鎴�"杩樺師"锛�
+     * @return 缁熶竴鏍煎紡鐨勮繑鍥炵粨鏋�
+     */
+    private Result<?> buildBatchResult(int successCount,
+                                       List<Map<String, Object>> failedDetails,
+                                       List<String> successIds,
+                                       String actionName) {
+        Map<String, Object> resultMap = new HashMap<>();
+        resultMap.put("successCount", successCount);
+        resultMap.put("failedCount", failedDetails.size());
+        resultMap.put("successIds", successIds);
+        resultMap.put("failedDetails", failedDetails);
+
+        if (failedDetails.isEmpty()) {
+            return Result.OK("鎵归噺" + actionName + "鎴愬姛锛屽叡" + actionName + " " + successCount + " 鏉″伐鍗曪紒"+resultMap);
+        } else {
+            return Result.OK("鎵归噺" + actionName + "閮ㄥ垎鎴愬姛锛堟垚鍔�" + successCount + "鏉★紝澶辫触" + failedDetails.size() + "鏉★級"+resultMap.get("failedDetails"));
+        }
+    }
+
+
+    /**
      * 缂栬緫
      *
      * @param request
@@ -131,6 +246,167 @@
     }
 
     /**
+     * 閫氳繃id浣滃簾
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "璁惧浜岀骇淇濆吇-浣滃簾")
+    @ApiOperation(value = "璁惧浜岀骇淇濆吇-浣滃簾", notes = "璁惧浜岀骇淇濆吇-浣滃簾")
+    @DeleteMapping(value = "/abolish")
+    public Result<?> abolish(@RequestParam(name = "id", required = true) String id) {
+        EamSecondMaintenanceOrder entity = eamSecondMaintenanceOrderService.getById(id);
+        if (entity == null) {
+            return Result.error("瑕佷綔搴熺殑鏁版嵁涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
+        }
+        if (!SecondMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
+            return Result.error("璇ョ姸鎬佺殑鏁版嵁涓嶅厑璁歌繘琛屼綔搴燂紒");
+        }
+        entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.ABOLISH.name());
+        eamSecondMaintenanceOrderService.updateById(entity);
+        return Result.OK("浣滃簾鎴愬姛!");
+    }
+
+    @AutoLog(value = "鍛ㄤ繚宸ュ崟-鎵归噺浣滃簾")
+    @ApiOperation(value = "鍛ㄤ繚宸ュ崟-鎵归噺浣滃簾", notes = "鍛ㄤ繚宸ュ崟-鎵归噺浣滃簾")
+    @DeleteMapping(value = "/abolishBatch")
+    public Result<?> abolishBatch(@RequestParam(name = "ids", required = true) String ids) {
+        List<String> list = Arrays.asList(ids.split(","));
+
+        // 璁板綍鎿嶄綔缁撴灉
+        int successCount = 0;
+        List<Map<String, Object>> failedDetails = new ArrayList<>();
+        List<String> successIds = new ArrayList<>();
+
+        for (String id : list) {
+            try {
+                EamSecondMaintenanceOrder entity = eamSecondMaintenanceOrderService.getById(id);
+                if (entity == null) {
+                    // 璁板綍宸ュ崟涓嶅瓨鍦�
+                    failedDetails.add(createErrorItem(id, "宸ュ崟涓嶅瓨鍦�", null));
+                    continue;
+                }
+
+                if (!SecondMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
+                    // 璁板綍鐘舵�佷笉绗﹀悎瑕佹眰
+                    failedDetails.add(createErrorItem(id, "宸ュ崟鐘舵�佷笉婊¤冻浣滃簾瑕佹眰", entity.getMaintenanceStatus()));
+                    continue;
+                }
+
+                entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.ABOLISH.name());
+                boolean updateResult = eamSecondMaintenanceOrderService.updateById(entity);
+
+                if (updateResult) {
+                    successCount++;
+                    successIds.add(id);
+                } else {
+                    // 璁板綍鏇存柊澶辫触
+                    failedDetails.add(createErrorItem(id, "鏇存柊鎿嶄綔鎵ц澶辫触", entity.getMaintenanceStatus()));
+                }
+            } catch (Exception e) {
+                // 璁板綍绯荤粺寮傚父
+                failedDetails.add(createErrorItem(id, "绯荤粺寮傚父: " + e.getMessage(), null));
+            }
+        }
+
+        // 鏋勯�犺繑鍥炵粨鏋�
+        return buildBatchResult(successCount, failedDetails, successIds, "浣滃簾");
+    }
+
+    /**
+     * 杩樺師浣滃簾宸ュ崟
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "璁惧浜岀骇淇濆吇-杩樺師浣滃簾宸ュ崟")
+    @ApiOperation(value = "璁惧浜岀骇淇濆吇-杩樺師浣滃簾宸ュ崟", notes = "璁惧浜岀骇淇濆吇-杩樺師浣滃簾宸ュ崟")
+    @GetMapping(value = "/restore")
+    public Result<?> restore(@RequestParam(name = "id", required = true) String id) {
+        EamSecondMaintenanceOrder entity = eamSecondMaintenanceOrderService.getById(id);
+        if (entity == null) {
+            return Result.error("瑕佽繕鍘熺殑浣滃簾鏁版嵁涓嶅瓨鍦紝璇峰埛鏂伴噸璇曪紒");
+        }
+        if (!SecondMaintenanceStatusEnum.ABOLISH.name().equals(entity.getMaintenanceStatus())) {
+            return Result.error("璇ョ姸鎬佺殑鏁版嵁涓嶅厑璁歌繘琛岃繕鍘燂紒");
+        }
+        //鏌ヨ褰撳墠璁惧鍜屼繚鍏昏鑼僫d鏄惁鏈夊��
+        List<EamSecondMaintenanceOrder> eamSecondMaintenanceOrderList=eamSecondMaintenanceOrderService
+                .list(new QueryWrapper<EamSecondMaintenanceOrder>().eq("equipment_id",entity.getEquipmentId())
+                        .eq("standard_id",entity.getStandardId())
+                        .ne("maintenance_status",SecondMaintenanceStatusEnum.ABOLISH.name()));
+        if(!eamSecondMaintenanceOrderList.isEmpty()){
+            return Result.error("璇ヨ澶囧凡瀛樺湪瀵瑰簲浜屼繚宸ュ崟锛屼笉鍏佽杩樺師!");
+        }
+        entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_MAINTENANCE.name());
+        eamSecondMaintenanceOrderService.updateById(entity);
+        return Result.OK("杩樺師鎴愬姛!");
+    }
+
+    /**
+     * 鎵归噺杩樺師浣滃簾宸ュ崟
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "璁惧浜岀骇淇濆吇-鎵归噺杩樺師浣滃簾宸ュ崟")
+    @ApiOperation(value = "璁惧浜岀骇淇濆吇-鎵归噺杩樺師浣滃簾宸ュ崟", notes = "璁惧浜岀骇淇濆吇-鎵归噺杩樺師浣滃簾宸ュ崟")
+    @DeleteMapping(value = "/restoreBatch")
+    public Result<?> restoreBatch(@RequestParam(name = "ids", required = true) String ids) {
+        List<String> list = Arrays.asList(ids.split(","));
+
+        // 璁板綍鎿嶄綔缁撴灉
+        int successCount = 0;
+        List<Map<String, Object>> failedDetails = new ArrayList<>();
+        List<String> successIds = new ArrayList<>();
+
+        for (String id : list) {
+            try {
+                EamSecondMaintenanceOrder entity = eamSecondMaintenanceOrderService.getById(id);
+                if (entity == null) {
+                    // 璁板綍宸ュ崟涓嶅瓨鍦�
+                    failedDetails.add(createErrorItem(id, "宸ュ崟涓嶅瓨鍦�", null));
+                    continue;
+                }
+
+                if (!SecondMaintenanceStatusEnum.ABOLISH.name().equals(entity.getMaintenanceStatus())) {
+                    // 璁板綍鐘舵�佷笉鏄凡浣滃簾
+                    failedDetails.add(createErrorItem(id, "宸ュ崟鐘舵�佷笉鏄凡浣滃簾", entity.getMaintenanceStatus()));
+                    continue;
+                }
+
+                // 鏌ヨ褰撳墠璁惧鍜屼繚鍏昏鑼冩槸鍚﹀瓨鍦ㄩ潪浣滃簾鐘舵�佺殑宸ュ崟
+                List<EamSecondMaintenanceOrder> existingOrders = eamSecondMaintenanceOrderService
+                        .list(new QueryWrapper<EamSecondMaintenanceOrder>()
+                                .eq("equipment_id", entity.getEquipmentId())
+                                .eq("standard_id", entity.getStandardId())
+                                .ne("maintenance_status", SecondMaintenanceStatusEnum.ABOLISH.name()));
+
+                if (CollectionUtils.isNotEmpty(existingOrders)) {
+                    // 璁板綍瀛樺湪闈炰綔搴熺姸鎬佺殑宸ュ崟
+                    failedDetails.add(createErrorItem(id, "璇ヨ澶囧拰淇濆吇瑙勮寖宸插瓨鍦ㄩ潪浣滃簾鐘舵�佺殑宸ュ崟", existingOrders.size()));
+                    continue;
+                }
+
+                entity.setMaintenanceStatus(SecondMaintenanceStatusEnum.WAIT_MAINTENANCE.name());
+                boolean updateResult = eamSecondMaintenanceOrderService.updateById(entity);
+
+                if (updateResult) {
+                    successCount++;
+                    successIds.add(id);
+                } else {
+                    // 璁板綍鏇存柊澶辫触
+                    failedDetails.add(createErrorItem(id, "鏇存柊鎿嶄綔鎵ц澶辫触", entity.getMaintenanceStatus()));
+                }
+            } catch (Exception e) {
+                // 璁板綍绯荤粺寮傚父
+                failedDetails.add(createErrorItem(id, "绯荤粺寮傚父: " + e.getMessage(), null));
+            }
+        }
+
+        // 鏋勯�犺繑鍥炵粨鏋�
+        return buildBatchResult(successCount, failedDetails, successIds, "杩樺師");
+    }
+
+    /**
      * 閫氳繃id棰嗗彇
      *
      * @param id
@@ -153,22 +429,50 @@
      * @param ids
      * @return
      */
-    @AutoLog(value = "鍛ㄤ繚宸ュ崟-鎵归噺棰嗗彇")
-    @ApiOperation(value = "鍛ㄤ繚宸ュ崟-鎵归噺棰嗗彇", notes = "鍛ㄤ繚宸ュ崟-鎵归噺棰嗗彇")
+    @AutoLog(value = "璁惧浜岀骇淇濆吇-鎵归噺棰嗗彇")
+    @ApiOperation(value = "璁惧浜岀骇淇濆吇-鎵归噺棰嗗彇", notes = "璁惧浜岀骇淇濆吇-鎵归噺棰嗗彇")
     @DeleteMapping(value = "/collectBatch")
     public Result<?> collectBatch(@RequestParam(name = "ids", required = true) String ids) {
         List<String> list = Arrays.asList(ids.split(","));
-        AtomicInteger i = new AtomicInteger();
-        list.forEach(id -> {
-            EamSecondMaintenanceOrder entity = eamSecondMaintenanceOrderService.getById(id);
-            if (entity != null && SecondMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
-                boolean b = eamSecondMaintenanceOrderService.collect(id);
-                if (b) {
-                    i.getAndIncrement();
+
+        // 璁板綍鎿嶄綔缁撴灉
+        int successCount = 0;
+        List<Map<String, Object>> failedDetails = new ArrayList<>();
+        List<String> successIds = new ArrayList<>();
+
+        for (String id : list) {
+            try {
+                EamSecondMaintenanceOrder entity = eamSecondMaintenanceOrderService.getById(id);
+                if (entity == null) {
+                    // 璁板綍宸ュ崟涓嶅瓨鍦�
+                    failedDetails.add(createErrorItem(id, "宸ュ崟涓嶅瓨鍦�", null));
+                    continue;
                 }
+
+                // 鐘舵�佹牎楠�
+                if (!SecondMaintenanceStatusEnum.WAIT_MAINTENANCE.name().equals(entity.getMaintenanceStatus())) {
+                    failedDetails.add(createErrorItem(id,
+                            "宸ュ崟褰撳墠鐘舵�佷笉婊¤冻棰嗗彇鏉′欢",
+                            entity.getMaintenanceStatus()));
+                    continue;
+                }
+
+                // 鎵ц棰嗗彇鎿嶄綔
+                boolean collectResult = eamSecondMaintenanceOrderService.collect(id);
+
+                if (collectResult) {
+                    successCount++;
+                    successIds.add(id);
+                } else {
+                    failedDetails.add(createErrorItem(id, "棰嗗彇鎿嶄綔鎵ц澶辫触", null));
+                }
+            } catch (Exception e) {
+                failedDetails.add(createErrorItem(id, "绯荤粺寮傚父: " + e.getMessage(), null));
             }
-        });
-        return Result.OK("鎵归噺棰嗗彇鎴愬姛 " + i.get() + " 鏉″伐鍗曪紒");
+        }
+
+        // 鏋勯�犺繑鍥炵粨鏋滐紙浣跨敤涓庢壒閲忎綔搴�/杩樺師鐩稿悓鐨勬柟娉曪級
+        return buildBatchResult(successCount, failedDetails, successIds, "棰嗗彇");
     }
 
     /**

--
Gitblit v1.9.3