From 5e82bb2e4b82421936c74ea709d4448d01a1aea1 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Wed, 25 Oct 2023 07:34:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=91=E8=B5=B7=E5=B9=B4=E5=BA=A6?= =?UTF-8?q?=E5=88=B6=E4=BF=AE=E8=AE=A2=E4=B8=BB=E5=8A=A8=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=20=E6=A8=A1=E6=9D=BF=E4=B8=8B=E8=BD=BD=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ProcessEsAnnualInitServiceImpl.java | 147 ++++++-------- .../controller/ESAnnualReportController.java | 47 ++--- .../entity/ProcessEsAnnualReport.java | 28 ++- .../ProcessEsAnnualReportServiceImpl.java | 184 ++++++++---------- .../modules/activiti/util/ExcelUtils.java | 158 ++++++++++++++- .../excelTemplate/es-annual-report.xlsx | Bin 0 -> 10387 bytes pom.xml | 1 + 7 files changed, 327 insertions(+), 238 deletions(-) create mode 100644 laws-modules/src/main/resources/excelTemplate/es-annual-report.xlsx diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/impl/ProcessEsAnnualInitServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/impl/ProcessEsAnnualInitServiceImpl.java index b8cebb57..e69b88b9 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/impl/ProcessEsAnnualInitServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/service/impl/ProcessEsAnnualInitServiceImpl.java @@ -1,6 +1,7 @@ package com.jero.modules.activiti.process.esAnnualInit.service.impl; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.api.CommonAPI; import com.jero.common.constant.enums.YesOrNoEnum; @@ -51,7 +52,7 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl headers; try { - headers = ExcelUtils.getHeaderFromExcel(file.getInputStream()); + headers = ExcelUtils.getHeaderFromExcel(file.getInputStream(), 0); } catch (Exception e) { errorMsgs.add("上传模板错误,请检查后重试。"); resultMap.put("msg", errorMsgs); @@ -111,14 +112,27 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl list) { + List originStandardNoList = list.stream().map(ProcessEsAnnualInit::getOriginEnStandardNo).collect(Collectors.toList()); + + LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); + esWrapper.in(LawsEnterpriseStandard::getStandardNumber, originStandardNoList); + List esList = enterpriseStandardService.list(esWrapper); + // 转换成key为企标编号的map + Map esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getStandardNumber, item -> item)); + list.forEach(item-> { // 如果是制定则去除掉所有的原企标名称 原企标编号 if (ESPProjectType.ENACT.getValue().equals(item.getProjectType())) { item.setOriginEnStandardName(null); item.setOriginEnStandardNo(null); + // 设置变更状态 制定是新增 修订是变更 item.setChangeStatus("1"); } else { item.setChangeStatus("2"); + item.setOriginEnStandardNo(esMap.get(item.getOriginEnStandardNo()).getStandardName()); + item.setEnStandardCode(esMap.get(item.getOriginEnStandardNo()).getStandardCode()); + item.setEnNameCode(esMap.get(item.getOriginEnStandardNo()).getNameCode()); + item.setStandardCategoryCode(esMap.get(item.getOriginEnStandardNo()).getCategoryCode()); } }); } @@ -141,7 +155,7 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl esList = enterpriseStandardService.list(); List errorMsgs = new ArrayList<>(); - int i = 3; + int i = 4; Iterator iterator = list.iterator(); while (iterator.hasNext()) { ProcessEsAnnualInit plan = iterator.next(); @@ -150,7 +164,6 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl 0) { errorMsgs.add(errMsgHeader.append(errMsg).toString()); @@ -182,85 +198,6 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl listDict) { - // 非空检查 - if (StrUtil.isBlank(value)) { - return "'授权部门'不能为空。"; - } - // 检查授权部门 - if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", false, listDict)) { - return "'授权部门'无效。"; - } - return ""; - } - private String validStandardCode(String value, List listDict) { - // 检查企业标准代号 - if (!excelUtils.validDict("enterprise_standard_code", value, null, null, true, listDict)) { - return "'企业标准代号'无效。"; - } - return ""; - } - private String validCooperateUnit(String value, List listDict) { // 非空检查 - if (StrUtil.isBlank(value)) { - return "'配合单位'不能为空。"; - } - // 检查配合单位 - if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", false, listDict)) { - return "'配合单位'无效。"; - } - return ""; - } - private String validMainDraftingUser(String value, List listDict) { - if (StrUtil.isBlank(value)) { - return "'主起草人'不能为空。"; - } - // 检查主起草人 - if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { - return "'主起草人'无效。"; - } - return ""; - } - private String validMainDraftingUnit(String value, List listDict) { - if (StrUtil.isBlank(value)) { - return "'主起草单位'不能为空。"; - } - // 检查主起草单位 - if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", true, listDict)) { - return "'主起草单位'无效。"; - } - return ""; - } - private String validMainDraftingUnitResponsiblePerson(String value, List listDict) { - if (StrUtil.isBlank(value)) { - return "'主起草单位负责人'不能为空。"; - } - // 检查主起草单位负责人 - if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { - return "'主起草单位负责人'无效。"; - } - return ""; - } - private String validStandardPromoter(String value, List listDict) { - if (StrUtil.isBlank(value)) { - return "'标准推进人'不能为空。"; - } - // 检查标准推进人 - if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { - return "'标准推进人'无效。"; - } - return ""; - } - private String validContactUser(String value, List listDict) { - if (StrUtil.isBlank(value)) { - return "'联络人'不能为空。"; - } - // 检查联络人 - if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { - return "'联络人'无效。"; - } - return ""; - } - private String validProjectType(ProcessEsAnnualInit plan, List listDict, List esList) { String projectType = plan.getProjectType(); String originEnStandardNo = plan.getProjectType(); @@ -272,7 +209,7 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl 50) { return "'新企标名称'过长(最多50字)。"; diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java index 75252027..2cc60de8 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/controller/ESAnnualReportController.java @@ -10,22 +10,21 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; -import org.apache.poi.ss.formula.functions.T; -import org.jeecgframework.poi.excel.def.NormalExcelConstants; -import org.jeecgframework.poi.excel.entity.ExportParams; -import org.jeecgframework.poi.excel.entity.enmus.ExcelType; -import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.apache.commons.compress.utils.IOUtils; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.HttpHeaders; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.io.OutputStream; + import javax.annotation.Resource; -import java.util.ArrayList; import java.util.List; import java.util.Map; -import static com.jero.common.system.base.controller.JeroController.*; - /** * @author: Mzaxd * @Date: 2023/10/18 10:44 @@ -43,21 +42,23 @@ public class ESAnnualReportController { * 导入模板下载 */ @GetMapping("/templateDownload") - @ApiOperation(value = "企标年度制修订主动上报流程-导入模板下载", notes = "企标年度制修订主动上报流程-导入模板下载", - produces = "application/octet-stream") + @ApiOperation(value = "企标年度制修订主动上报流程-导入模板下载", notes = "企标年度制修订主动上报流程-导入模板下载" + ,produces = "application/octet-stream") @AutoLog(value = "企标年度制修订主动上报流程-导入模板下载") - public ModelAndView templateDownload() { - // AutoPoi 导出Excel - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - String title = "各部门主动上报导入模板"; - mv.addObject(FILE_NAME, title); - mv.addObject(CLASS, ProcessEsAnnualReport.class); - ExportParams exportParams = new ExportParams(title, title); - // 导出xlsx - exportParams.setType(ExcelType.XSSF); - mv.addObject(PARAMS, exportParams); - mv.addObject(NormalExcelConstants.DATA_LIST, new ArrayList()); - return mv; + public void templateDownload(HttpServletResponse response) { + try { + ClassPathResource resource = new ClassPathResource("excelTemplate/es-annual-report.xlsx"); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=es-annual-report.xlsx"); + + try (InputStream in = resource.getInputStream(); OutputStream out = response.getOutputStream()) { + IOUtils.copy(in, out); + } + response.flushBuffer(); + } catch (Exception e) { + // 记录错误或执行其他处理 + e.printStackTrace(); + } } /** diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/ProcessEsAnnualReport.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/ProcessEsAnnualReport.java index a02cdb5c..ece6a4d2 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/ProcessEsAnnualReport.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/entity/ProcessEsAnnualReport.java @@ -93,7 +93,7 @@ public class ProcessEsAnnualReport implements Serializable { /** * 项目类型 */ - @Excel(name = "制修订类型", width = 15, orderNum = "1") + @Excel(name = "*制修订类型", width = 15, orderNum = "1") @Dict(dicCode = "esp_revision_type") @ApiModelProperty(value = "制修订类型") private String projectType; @@ -114,14 +114,13 @@ public class ProcessEsAnnualReport implements Serializable { /** * 原企标名称 */ - @Excel(name = "原企标名称", width = 15, orderNum = "3") @ApiModelProperty(value = "原企标名称") private String originEnStandardName; /** * 新企标名称 */ - @Excel(name = "新企标名称", width = 15, orderNum = "4") + @Excel(name = "*新企标名称", width = 15, orderNum = "4") @ApiModelProperty(value = "新企标名称") private String newEnStandardName; @@ -132,8 +131,10 @@ public class ProcessEsAnnualReport implements Serializable { private String enStandardEnglishName; /** - * 企标体系 + * 标准体系 */ + @Excel(name = "*标准体系", width = 25, orderNum = "6") + @Dict(dictTable = "laws_tree_node", dicCode = "id", dicText = "node_name") @ApiModelProperty(value = "企标体系") private String enStandardSystem; @@ -148,12 +149,16 @@ public class ProcessEsAnnualReport implements Serializable { /** * 企业名称代号 */ + @Excel(name = "企业名称代号", width = 15, orderNum = "6") + @Dict(dicCode = "enterprise_name_code") @ApiModelProperty(value = "企业名称代号") private String enNameCode; /** * 标准类别代号 */ + @Excel(name = "标准类别代号", width = 15, orderNum = "6") + @Dict(dicCode = "standard_category_code") @ApiModelProperty(value = "标准类别代号") private String standardCategoryCode; @@ -166,12 +171,16 @@ public class ProcessEsAnnualReport implements Serializable { /** * 标准类型 */ + @Excel(name = "*标准类型", width = 15, orderNum = "10") + @Dict(dicCode = "esp_standard_type") @ApiModelProperty(value = "标准类型") private String standardType; /** * 企标等级分类 */ + @Excel(name = "*标准等级分类", width = 15, orderNum = "10") + @Dict(dicCode = "standard_grade_classify") @ApiModelProperty(value = "企标等级分类") private String enStandardClassification; @@ -222,6 +231,7 @@ public class ProcessEsAnnualReport implements Serializable { /** * 主起草人 */ + @Excel(name = "*主起草人", width = 15, orderNum = "8") @Dict(dictTable = "sys_user", dicCode = "id", dicText = "username") @ApiModelProperty(value = "主起草人") private String mainDraftingUser; @@ -229,7 +239,7 @@ public class ProcessEsAnnualReport implements Serializable { /** * 主起草单位 */ - @Excel(name = "主起草单位", width = 15, orderNum = "8") + @Excel(name = "*主起草单位", width = 15, orderNum = "8") @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") @ApiModelProperty(value = "主起草单位") private String mainDraftingUnit; @@ -237,7 +247,7 @@ public class ProcessEsAnnualReport implements Serializable { /** * 主起草单位责任人 */ - @Excel(name = "主起草单位责任人", width = 20, orderNum = "9") + @Excel(name = "*起草单位责任人", width = 20, orderNum = "9") @Dict(dicCode = "id", dictTable = "sys_user", dicText = "username") @ApiModelProperty(value = "主起草单位责任人") private String mainDraftingUnitResponsiblePerson; @@ -245,7 +255,7 @@ public class ProcessEsAnnualReport implements Serializable { /** * 标准推进人 */ - @Excel(name = "标准推进人", width = 15, orderNum = "11") + @Excel(name = "*标准推进人", width = 15, orderNum = "11") @Dict(dicCode = "id", dictTable = "sys_user", dicText = "username") @ApiModelProperty(value = "标准推进人") private String standardPromoter; @@ -302,7 +312,7 @@ public class ProcessEsAnnualReport implements Serializable { /** * 授权部门 */ - @Excel(name = "授权部门", width = 15, orderNum = "5") + @Excel(name = "*授权部门", width = 15, orderNum = "5") @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") @ApiModelProperty(value = "授权部门") private String authDept; @@ -310,7 +320,7 @@ public class ProcessEsAnnualReport implements Serializable { /** * 配合单位 */ - @Excel(name = "配合单位", width = 15, orderNum = "7") + @Excel(name = "*配合单位", width = 15, orderNum = "7") @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") @ApiModelProperty(value = "配合单位") private String cooperationUnit; diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java index 0e8ce0ce..ff27e054 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualReport/service/impl/ProcessEsAnnualReportServiceImpl.java @@ -1,11 +1,11 @@ package com.jero.modules.activiti.process.esAnnualReport.service.impl; import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.api.CommonAPI; import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.exception.JeroBootException; -import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.vo.SysDictItemCore; import com.jero.modules.activiti.process.common.enums.ProcessType; import com.jero.modules.activiti.process.common.service.ActFlowCommonService; @@ -29,7 +29,6 @@ import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.entity.ImportParams; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; @@ -69,9 +68,6 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl setVariables(String processInstanceId) { return null; @@ -121,7 +117,7 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl esAnnualReportList, boolean b) { + public void approvalProcess(String taskId, List esAnnualReportList, boolean pass) { String userId = UserUtils.getUserId(); Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); String taskDefinitionKey = task.getTaskDefinitionKey(); @@ -132,7 +128,6 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl importData(MultipartFile file) { List listDict = commonAPI.getDictItemAll(); @@ -142,7 +137,7 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl headers; try { - headers = ExcelUtils.getHeaderFromExcel(file.getInputStream()); + headers = ExcelUtils.getHeaderFromExcel(file.getInputStream(), 0); } catch (Exception e) { errorMsgs.add("上传模板错误,请检查后重试。"); resultMap.put("msg", errorMsgs); @@ -161,13 +156,14 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl list = ExcelImportUtil.importExcel(file.getInputStream(), ProcessEsAnnualReport.class, params); - if (list.isEmpty()) { + list.remove(0); + list.remove(0); + if (list.size() == 0) { errorMsgs.add("文件暂无数据,请检查后重试。"); resultMap.put("msg", errorMsgs); resultMap.put("flag", YesOrNoEnum.NO.getValue()); @@ -201,7 +197,17 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl list) { + List originStandardNoList = list.stream().map(ProcessEsAnnualReport::getOriginEnStandardNo).collect(Collectors.toList()); + + LambdaQueryWrapper esWrapper = new LambdaQueryWrapper<>(); + esWrapper.in(LawsEnterpriseStandard::getStandardNumber, originStandardNoList); + List esList = enterpriseStandardService.list(esWrapper); + // 转换成key为企标编号的map + Map esMap = esList.stream().collect(Collectors.toMap(LawsEnterpriseStandard::getStandardNumber, item -> item)); + list.forEach(item-> { // 如果是制定则去除掉所有的原企标名称 原企标编号 if (ESPProjectType.ENACT.getValue().equals(item.getProjectType())) { @@ -211,15 +217,18 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl list, List listDict) { list.forEach(item -> { item.setProjectType(excelUtils.translateDictValue("esp_revision_type", item.getProjectType(), listDict)); - item.setAuthDept(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getAuthDept(), listDict)); item.setEnStandardCode(excelUtils.translateDictValue("enterprise_standard_code", item.getEnStandardCode(), listDict)); + item.setAuthDept(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getAuthDept(), listDict)); item.setCooperationUnit(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getCooperationUnit(), listDict)); item.setMainDraftingUser(excelUtils.translateDictValue("username", "id", "sys_user", item.getMainDraftingUser(), listDict)); item.setMainDraftingUnit(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getMainDraftingUnit(), listDict)); @@ -228,12 +237,11 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl validationList(List list, List listDict) { List esList = enterpriseStandardService.list(); List errorMsgs = new ArrayList<>(); - int i = 3; + int i = 4; Iterator iterator = list.iterator(); while (iterator.hasNext()) { ProcessEsAnnualReport plan = iterator.next(); @@ -242,14 +250,16 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl 0) { errorMsgs.add(errMsgHeader.append(errMsg).toString()); @@ -274,83 +286,8 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl listDict) { - // 非空检查 - if (StrUtil.isBlank(value)) { - return "'授权部门'不能为空。"; - } - // 检查授权部门 - if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", false, listDict)) { - return "'授权部门'无效。"; - } - return ""; - } - private String validStandardCode(String value, List listDict) { - // 检查企业标准代号 - if (!excelUtils.validDict("enterprise_standard_code", value, null, null, true, listDict)) { - return "'企业标准代号'无效。"; - } - return ""; - } - private String validCooperateUnit(String value, List listDict) { // 非空检查 - if (StrUtil.isBlank(value)) { - return "'配合单位'不能为空。"; - } - // 检查配合单位 - if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", false, listDict)) { - return "'配合单位'无效。"; - } - return ""; - } - private String validMainDraftingUser(String value, List listDict) { - if (StrUtil.isBlank(value)) { - return "'主起草人'不能为空。"; - } - // 检查主起草人 - if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { - return "'主起草人'无效。"; - } - return ""; - } - private String validMainDraftingUnit(String value, List listDict) { - if (StrUtil.isBlank(value)) { - return "'主起草单位'不能为空。"; - } - // 检查主起草单位 - if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", true, listDict)) { - return "'主起草单位'无效。"; - } - return ""; - } - private String validMainDraftingUnitResponsiblePerson(String value, List listDict) { - if (StrUtil.isBlank(value)) { - return "'主起草单位负责人'不能为空。"; - } - // 检查主起草单位负责人 - if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { - return "'主起草单位负责人'无效。"; - } - return ""; - } - private String validStandardPromoter(String value, List listDict) { - if (StrUtil.isBlank(value)) { - return "'标准推进人'不能为空。"; - } - // 检查标准推进人 - if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { - return "'标准推进人'无效。"; - } - return ""; - } - private String validWorkGroup(String value, List listDict) { - // 检查工作组 - if (!excelUtils.validDict("name", value, "laws_working_group", "id", true, listDict)) { - return "'工作组'无效。"; - } - return ""; - } - private String validProjectType(ProcessEsAnnualReport plan, List listDict, List esList) { + StringBuilder errMsg = new StringBuilder(); String projectType = plan.getProjectType(); String originEnStandardNo = plan.getProjectType(); String newEnStandardName = plan.getNewEnStandardName(); @@ -361,19 +298,50 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl 50) { - return "'新企标名称'过长(最多50字)。"; + errMsg.append("'新企标名称'过长(最多50字)。"); } - return ""; + return errMsg.toString(); } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/util/ExcelUtils.java b/laws-modules/src/main/java/com/jero/modules/activiti/util/ExcelUtils.java index d36310b3..8484097f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/util/ExcelUtils.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/util/ExcelUtils.java @@ -1,8 +1,13 @@ package com.jero.modules.activiti.util; +import cn.hutool.core.util.StrUtil; import com.jero.common.api.CommonAPI; import com.jero.common.system.vo.SysDictItemCore; import com.jero.common.util.oConvertUtils; +import com.jero.modules.activiti.process.esAnnualInit.entity.ProcessEsAnnualInit; +import com.jero.modules.activiti.process.esInitChange.entity.enums.ESPProjectType; +import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; +import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; import com.jero.modules.system.entity.SysDictItem; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; @@ -31,6 +36,12 @@ public class ExcelUtils { @Resource private CommonAPI commonAPI; + @Resource + private ExcelUtils excelUtils; + + @Resource + private ILawsEnterpriseStandardService enterpriseStandardService; + public static Date excelSerialDateToJavaDate(double serialDate) { // 首先,我们定义数据库支持的最早和最晚的日期。 Calendar minDate = Calendar.getInstance(); @@ -57,17 +68,19 @@ public class ExcelUtils { * @return HeadRow的List * @throws Exception */ - public static List getHeaderFromExcel(InputStream is) throws Exception { + public static List getHeaderFromExcel(InputStream is, Integer index) throws Exception { List headers = new ArrayList<>(); Workbook workbook = new XSSFWorkbook(is); Sheet sheet = workbook.getSheetAt(0); // HeadRow在index 1 - for (int rowIndex = 1; rowIndex <= 1; rowIndex++) { + for (int rowIndex = index; rowIndex <= index; rowIndex++) { Row row = sheet.getRow(rowIndex); for (Cell cell : row) { - headers.add(cell.getStringCellValue()); + String cellValue = cell.getStringCellValue(); + // 否则,直接添加到列表 + headers.add(cellValue); } } return headers; @@ -141,8 +154,13 @@ public class ExcelUtils { return false; } int count = dictValue.split(",").length; - String value = this.translateDictValue(dictCode, dicText, dicTable, dictValue, listDict); - return value != null && value.split(",").length == count; + String value; + if (dicTable == null) { + value = this.translateDictValue(dictCode, dictValue, listDict); + } else { + value = this.translateDictValue(dictCode, dicText, dicTable, dictValue, listDict); + } + return value != null && value.split(",").length == count && StrUtil.isNotBlank(value); } /** @@ -155,7 +173,8 @@ public class ExcelUtils { public String translateDictValue(String code, String text, List listDict) { StringBuilder textValue = new StringBuilder(); String tmpValue = null; - List listNew = listDict.stream().filter(o -> Objects.equals(o.getDictCode(), code) && Objects.equals(o.getItemText(), text.trim())).collect(Collectors.toList()); + List listNew = listDict.stream() + .filter(o -> Objects.equals(o.getDictCode(), code) && Objects.equals(o.getItemText(), text.trim())).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(listNew)) { tmpValue = listNew.get(0).getItemValue(); } @@ -191,7 +210,8 @@ public class ExcelUtils { if (!StringUtils.isEmpty(table)) { tmpValue = commonAPI.queryTableDictTextByKey(table, text, code, k.trim()); } else { - List listNew = listDict.stream().filter(o -> Objects.equals(o.getDictCode(), code) && Objects.equals(o.getItemValue(), k.trim())).collect(Collectors.toList()); + List listNew = listDict.stream() + .filter(o -> Objects.equals(o.getDictCode(), code) && Objects.equals(o.getItemValue(), k.trim())).collect(Collectors.toList()); if (!CollectionUtils.isEmpty(listNew)) { tmpValue = listNew.get(0).getItemText(); } @@ -206,4 +226,128 @@ public class ExcelUtils { } return textValue.toString(); } + + + public String validStandardClassification(String value, List listDict) { + // 非空检查 + if (StrUtil.isBlank(value)) { + return "'标准等级分类'不能为空。"; + } + // 检查授权部门 + if (!excelUtils.validDict("standard_grade_classify", value, null, null, true, listDict)) { + return "'标准等级分类'无效。"; + } + return ""; + } + + public String validStandardType(String value, List listDict) { + // 非空检查 + if (StrUtil.isBlank(value)) { + return "'标准类型'不能为空。"; + } + // 检查授权部门 + if (!excelUtils.validDict("esp_standard_type", value, null, null, true, listDict)) { + return "'标准类型'无效。"; + } + return ""; + } + + public String validAuthDept(String value, List listDict) { + // 非空检查 + if (StrUtil.isBlank(value)) { + return "'授权部门'不能为空。"; + } + // 检查授权部门 + if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", false, listDict)) { + return "'授权部门'无效。"; + } + return ""; + } + + public String validCooperateUnit(String value, List listDict) { + // 非空检查 + if (StrUtil.isBlank(value)) { + return "'配合单位'不能为空。"; + } + // 检查配合单位 + if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", false, listDict)) { + return "'配合单位'无效。"; + } + return ""; + } + + public String validMainDraftingUser(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'主起草人'不能为空。"; + } + // 检查主起草人 + if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { + return "'主起草人'无效。"; + } + return ""; + } + + public String validMainDraftingUnit(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'主起草单位'不能为空。"; + } + // 检查主起草单位 + if (!excelUtils.validDict("depart_name", value, "sys_depart", "id", true, listDict)) { + return "'主起草单位'无效。"; + } + return ""; + } + + public String validMainDraftingUnitResponsiblePerson(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'主起草单位负责人'不能为空。"; + } + // 检查主起草单位负责人 + if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { + return "'主起草单位负责人'无效。"; + } + return ""; + } + + public String validStandardPromoter(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'标准推进人'不能为空。"; + } + // 检查标准推进人 + if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { + return "'标准推进人'无效。"; + } + return ""; + } + + public String validContactUser(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'联络人'不能为空。"; + } + // 检查联络人 + if (!excelUtils.validDict("username", value, "sys_user", "id", true, listDict)) { + return "'联络人'无效。"; + } + return ""; + } + + public String validStandardSystem(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "'标准体系'不能为空。"; + } + // 检查主起草人 + if (!excelUtils.validDict("node_name", value, "laws_tree_node", "id", false, listDict)) { + return "'标准体系'无效。"; + } + return ""; + } + + public String validWorkGroup(String value, List listDict) { + // 检查工作组 + if (!excelUtils.validDict("name", value, "laws_working_group", "id", true, listDict)) { + return "'工作组'无效。"; + } + return ""; + } + } diff --git a/laws-modules/src/main/resources/excelTemplate/es-annual-report.xlsx b/laws-modules/src/main/resources/excelTemplate/es-annual-report.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..75b9ea4ffdc0aaecda88509f58487b344eb2f14b GIT binary patch literal 10387 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index db94569a..18cb29f1 100644 --- a/pom.xml +++ b/pom.xml @@ -352,6 +352,7 @@ eot ttf svg + xlsx