From 21811bad262b3f774ca7c12a68e0bf64a8321501 Mon Sep 17 00:00:00 2001
From: baoshiwei <baoshiwei@shlanbao.cn>
Date: 星期四, 29 五月 2025 10:08:15 +0800
Subject: [PATCH] feat(eims): 支持多文件导入点检计划

---
 eims-ui/apps/web-antd/src/views/_core/authentication/login.vue                                         |    6 +-
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/InspectCheckItemVo.java            |    2 
 eims-ui/apps/web-antd/src/views/eims/insp-plan/insp-plan-import-modal.vue                              |   20 ++++--
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectPlanServiceImpl.java |  113 ++++++++++++++++++++-----------------
 eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectPlanController.java    |   11 ++-
 5 files changed, 85 insertions(+), 67 deletions(-)

diff --git a/eims-ui/apps/web-antd/src/views/_core/authentication/login.vue b/eims-ui/apps/web-antd/src/views/_core/authentication/login.vue
index 21bc24f..6ae0b70 100644
--- a/eims-ui/apps/web-antd/src/views/_core/authentication/login.vue
+++ b/eims-ui/apps/web-antd/src/views/_core/authentication/login.vue
@@ -51,10 +51,10 @@
 
 onMounted(async () => {
   // 鍚姩鍗曠偣鐧诲綍娉ㄩ噴鎺変笅杈硅繖涓�琛岋紝鍚﹀垯鏀惧紑
-  await Promise.all([loadCaptcha(), loadTenant()]);
+  // await Promise.all([loadCaptcha(), loadTenant()]);
   // 鍚姩鍗曠偣鐧诲綍鏀惧紑涓嬭竟涓よ娉ㄩ噴锛屽惁鍒欐敞閲婃帀
-  // const href = await authBinding('keycloak', '000000');
-  // window.location.href = href;
+  const href = await authBinding('keycloak', '000000');
+  window.location.href = href;
 });
 
 const formSchema = computed((): VbenFormSchema[] => {
diff --git a/eims-ui/apps/web-antd/src/views/eims/insp-plan/insp-plan-import-modal.vue b/eims-ui/apps/web-antd/src/views/eims/insp-plan/insp-plan-import-modal.vue
index 730db3c..9e995b0 100644
--- a/eims-ui/apps/web-antd/src/views/eims/insp-plan/insp-plan-import-modal.vue
+++ b/eims-ui/apps/web-antd/src/views/eims/insp-plan/insp-plan-import-modal.vue
@@ -26,15 +26,21 @@
 async function handleSubmit() {
   try {
     modalApi.modalLoading(true);
-    if (fileList.value.length !== 1) {
+    if (fileList.value.length === 0) {
       handleCancel();
       return;
     }
-    const data = {
-      file: fileList.value[0]!.originFileObj as Blob,
-      updateSupport: unref(checked),
-    };
-    const { code, msg } = await inspPlanImportData(data);
+
+    // 鏋勫缓鍖呭惈澶氫釜鏂囦欢鐨勮姹傛暟鎹紝鏀寔澶氭枃浠朵笂浼�
+    const formData = new FormData();
+    fileList.value.forEach((file) => {
+      const blob = file.originFileObj as Blob;
+      formData.append('files', blob); // 灏嗗涓枃浠朵互鏁扮粍褰㈠紡娣诲姞鍒拌〃鍗曟暟鎹腑
+    });
+    formData.append('updateSupport', unref(checked).toString()); // 娣诲姞 updateSupport 鍙傛暟
+
+    // 璋冪敤鎺ュ彛涓婁紶澶氭枃浠�
+    const { code, msg } = await inspPlanImportData(formData);
     let modal = Modal.success;
     if (code === 200) {
       emit('reload');
@@ -76,7 +82,7 @@
     <UploadDragger
       v-model:file-list="fileList"
       :before-upload="() => false"
-      :max-count="1"
+      :multiple="true"
       :show-upload-list="true"
       accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
     >
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectPlanController.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectPlanController.java
index 2151c89..1fdf405 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectPlanController.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/controller/EimsInspectPlanController.java
@@ -121,10 +121,13 @@
     @Log(title = "鐐规璁″垝", businessType = BusinessType.IMPORT)
     @SaCheckPermission("eims:inspectPlan:import")
     @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
-    public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
-        // ExcelResult<InspectCheckItemVo> result = ExcelUtil.importExcel(file.getInputStream(), InspectCheckItemVo.class, new InspectCheckItemImportListener(updateSupport));
-        String res = eimsInspectPlanService.importData(file, updateSupport);
-        return R.ok(res);
+    public R<Void> importData(@RequestPart("files") List<MultipartFile> files, boolean updateSupport) throws Exception {
+        StringBuilder successMsg = new StringBuilder();
+        for (MultipartFile file : files) {
+            String res = eimsInspectPlanService.importData(file, updateSupport);
+            successMsg.append(res).append(";");
+        }
+        return R.ok(successMsg.toString());
     }
 
     /**
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/InspectCheckItemVo.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/InspectCheckItemVo.java
index d636bc1..197c7fe 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/InspectCheckItemVo.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/domain/vo/InspectCheckItemVo.java
@@ -25,7 +25,7 @@
     /**
      * 鐐规椤瑰悕绉�
      */
-    @ExcelProperty(value = "鍐呭")
+    @ExcelProperty(value = {"鍐呭", "鐐规椤圭洰", "椤圭洰"}, index = 1)
     private String itemName;
 
 
diff --git a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectPlanServiceImpl.java b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectPlanServiceImpl.java
index 6d23e51..ab7a0a9 100644
--- a/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectPlanServiceImpl.java
+++ b/eims/ruoyi-modules/lb-eims/src/main/java/org/dromara/eims/service/impl/EimsInspectPlanServiceImpl.java
@@ -208,64 +208,73 @@
     }
 
     @Override
-    public String importData(MultipartFile file, boolean updateSupport) throws IOException, IOException {
-        // 鐐规椤圭洰鍒楄〃锛堝亣璁惧瓨鍦ㄥ搴旂殑鐐规椤筕O锛�
-        InspectCheckItemImportListener checkItemImportListener = new InspectCheckItemImportListener(updateSupport);
-        EasyExcel.read(file.getInputStream(), InspectCheckItemVo.class, checkItemImportListener).headRowNumber(3).sheet().doRead();
-        List<InspectCheckItemVo> successList = checkItemImportListener.getSuccessList();
+    public String importData(MultipartFile file, boolean updateSupport) {
+        try {
+            // 鐐规椤圭洰鍒楄〃锛堝亣璁惧瓨鍦ㄥ搴旂殑鐐规椤筕O锛�
+            InspectCheckItemImportListener checkItemImportListener = new InspectCheckItemImportListener(updateSupport);
+            EasyExcel.read(file.getInputStream(), InspectCheckItemVo.class, checkItemImportListener)
+                .headRowNumber(3).sheet().doRead();
+            List<InspectCheckItemVo> successList = checkItemImportListener.getSuccessList();
 
-        // 璇诲彇鍥哄畾璧勪骇缂栧彿锛堝亣璁句綅缃笉鍚岋級
-        EasyExcelCellListener assetNoListener = new EasyExcelCellListener(2, 23);
-        EasyExcel.read(file.getInputStream(), assetNoListener).headRowNumber(0).sheet().doReadSync();
-        String assetNo = Optional.ofNullable(assetNoListener.getCellValue())
-            .map(value -> {
-                int colonIndex = Math.max(value.indexOf(":"), value.indexOf("锛�")); // 鍚堝苟鍐掑彿澶勭悊
-                return colonIndex != -1 ? value.substring(colonIndex + 1) : value;
-            })
-            .map(String::trim)
-            .orElseThrow(() -> new ServiceException("瀵煎叆澶辫触锛屾棤娉曡鍙栧浐瀹氳祫浜х紪鍙�"));
+            // 璇诲彇鍥哄畾璧勪骇缂栧彿锛堝亣璁句綅缃笉鍚岋級
+            EasyExcelCellListener assetNoListener = new EasyExcelCellListener(2, 23);
+            EasyExcel.read(file.getInputStream(), assetNoListener).headRowNumber(0).sheet().doReadSync();
+            String assetNo = Optional.ofNullable(assetNoListener.getCellValue())
+                .map(value -> {
+                    int colonIndex = Math.max(value.indexOf(":"), value.indexOf("锛�")); // 鍚堝苟鍐掑彿澶勭悊
+                    return colonIndex != -1 ? value.substring(colonIndex + 1) : value;
+                })
+                .map(String::trim)
+                .orElse("");
 
-        // 鏌ヨ璁惧淇℃伅
-        QueryWrapper<EimsEqu> query = new QueryWrapper<>();
-        query.eq("asset_no", assetNo);
-        EimsEquVo equVo = equMapper.selectVoOne(query);
-        if (equVo == null) throw new ServiceException("璁惧鏈壘鍒帮紝璇峰厛鍦ㄨ澶囧彴甯愪腑娣诲姞");
-
-        int successNum = 0;
-        int failureNum = 0;
-        StringBuilder successMsg = new StringBuilder();
-        StringBuilder failureMsg = new StringBuilder();
-
-        for (InspectCheckItemVo itemVo : successList) {
-            if ("璁惧鐘舵�佸崱鐘舵��".equals(itemVo.getItemName())) break;
-
-            // 濡傛灉鍏佽瑕嗙洊锛屽垯鍒犻櫎宸插瓨鍦ㄧ殑璁板綍
-            if (updateSupport) {
-                LambdaQueryWrapper<EimsInspectPlan> deleteWrapper = Wrappers.lambdaQuery();
-                deleteWrapper.eq(EimsInspectPlan::getEquId, equVo.getEquId())
-                    .eq(EimsInspectPlan::getInspName, itemVo.getItemName())
-                    .eq(EimsInspectPlan::getStatus, "0");
-                baseMapper.delete(deleteWrapper);
+            if (assetNo.isEmpty()) {
+                return file.getOriginalFilename() + " 瀵煎叆澶辫触锛屾棤娉曡鍙栧浐瀹氳祫浜х紪鍙�";
             }
 
-            // 鏂板鐐规璁″垝
-            EimsInspectPlanBo bo = new EimsInspectPlanBo();
-            bo.setEquId(equVo.getEquId());
-            bo.setInspName(itemVo.getItemName());
-            bo.setStatus("0");
-            bo.setInspType("1");
-            bo.setInspRule("0");
-
-            if (!insertByBo(bo)) {
-                failureNum++;
-                failureMsg.append(failureNum).append("銆佸鍏ュけ璐�<br>");
-            } else {
-                successNum++;
-                successMsg.append(successNum).append("銆佸鍏ユ垚鍔�<br>");
+            // 鏌ヨ璁惧淇℃伅
+            QueryWrapper<EimsEqu> query = new QueryWrapper<>();
+            query.eq("asset_no", assetNo);
+            EimsEquVo equVo = equMapper.selectVoOne(query);
+            if (equVo == null) {
+                return file.getOriginalFilename() + " 璁惧鏈壘鍒帮紝璇峰厛鍦ㄨ澶囧彴甯愪腑娣诲姞";
             }
+
+            int successNum = 0;
+            int failureNum = 0;
+
+            for (InspectCheckItemVo itemVo : successList) {
+                if ("璁惧鐘舵�佸崱鐘舵��".equals(itemVo.getItemName()) || itemVo.getItemName().contains("杩愯鏃堕棿")) {
+                    break;
+                }
+
+                // 濡傛灉鍏佽瑕嗙洊锛屽垯鍒犻櫎宸插瓨鍦ㄧ殑璁板綍
+                if (updateSupport) {
+                    LambdaQueryWrapper<EimsInspectPlan> deleteWrapper = Wrappers.lambdaQuery();
+                    deleteWrapper.eq(EimsInspectPlan::getEquId, equVo.getEquId())
+                        .eq(EimsInspectPlan::getInspName, itemVo.getItemName())
+                        .eq(EimsInspectPlan::getStatus, "0");
+                    baseMapper.delete(deleteWrapper);
+                }
+
+                // 鏂板鐐规璁″垝
+                EimsInspectPlanBo bo = new EimsInspectPlanBo();
+                bo.setEquId(equVo.getEquId());
+                bo.setInspName(itemVo.getItemName());
+                bo.setStatus("0");
+                bo.setInspType("1");
+                bo.setInspRule("0");
+
+                if (!insertByBo(bo)) {
+                    failureNum++;
+                } else {
+                    successNum++;
+                }
+            }
+
+            return file.getOriginalFilename() + " 瀵煎叆鎴愬姛锛�" + successNum + "鏉★紝瀵煎叆澶辫触锛�" + failureNum + "鏉�";
+        } catch (Exception e) {
+            return file.getOriginalFilename() + " 瀵煎叆寮傚父锛�" + e.getMessage();
         }
-
-        return failureNum > 0 ? failureMsg.toString() : successMsg.toString();
     }
 
 

--
Gitblit v1.9.3