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