From 5209741e94438f2ee045a80eabc89df2b2d3a259 Mon Sep 17 00:00:00 2001 From: caihaohan Date: Thu, 14 Dec 2023 23:34:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=A0=87=E5=87=86=E5=8C=96=E5=8F=91?= =?UTF-8?q?=E8=B5=B7=E6=B5=81=E7=A8=8B=E5=AF=BC=E5=85=A5=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ESAnnualInitController.java | 2 +- .../entity/ProcessEsAnnualInit.java | 82 ++++++++++-------- .../impl/ProcessEsAnnualInitServiceImpl.java | 41 ++++++--- .../controller/ESAnnualReportController.java | 2 +- .../ProcessEsAnnualReportServiceImpl.java | 6 -- .../modules/activiti/util/ExcelUtils.java | 33 +++++-- .../excelTemplate/es-annual-init.xlsx | Bin 10413 -> 10458 bytes 7 files changed, 104 insertions(+), 62 deletions(-) diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java index 226b9d41..b4d818d3 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/controller/ESAnnualInitController.java @@ -153,7 +153,7 @@ public class ESAnnualInitController { @PostMapping("/importExcel") @ApiOperation(value = "企标年度制修订标准化发起流程-导入", notes = "企标年度制修订标准化发起流程-导入") @AutoLog(value = "企标年度制修订标准化发起流程-导入") - @DictPoint + @Translation public Result importExcel(@ApiParam(value = "要上传的文件", required = true) @RequestParam("file") MultipartFile file) { Map resultMap = annualInitService.importData(file); Object flag = resultMap.get("flag"); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/entity/ProcessEsAnnualInit.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/entity/ProcessEsAnnualInit.java index 8916802a..df159bb9 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/entity/ProcessEsAnnualInit.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/esAnnualInit/entity/ProcessEsAnnualInit.java @@ -130,25 +130,18 @@ public class ProcessEsAnnualInit implements Serializable { @ApiModelProperty(value = "企标英文名称") private String enStandardEnglishName; - /** - * 企标体系 - */ - @Excel(name = "*标准体系", width = 25, orderNum = "5") - @Dict(dictTable = "laws_tree_node", dicCode = "id", dicText = "node_name") - @ApiModelProperty(value = "企标体系") - private String enStandardSystem; - /** * 企业标准代号 */ - @Excel(name = "企业标准代号", width = 15, orderNum = "6") + @Excel(name = "企业标准代号", width = 15, orderNum = "4") @ApiModelProperty(value = "企业标准代号") + @Dict(dicCode = "enterprise_standard_code") private String enStandardCode; /** * 企业名称代号 */ - @Excel(name = "企业名称代号", width = 15, orderNum = "7") + @Excel(name = "企业名称代号", width = 15, orderNum = "5") @Dict(dicCode = "enterprise_name_code") @ApiModelProperty(value = "企业名称代号") private String enNameCode; @@ -156,11 +149,19 @@ public class ProcessEsAnnualInit implements Serializable { /** * 标准类别代号 */ - @Excel(name = "标准类别代号", width = 15, orderNum = "8") + @Excel(name = "标准类别代号", width = 15, orderNum = "6") @Dict(dicCode = "standard_category_code") @ApiModelProperty(value = "标准类别代号") private String standardCategoryCode; + /** + * 企标体系 + */ + @Excel(name = "*标准体系", width = 25, orderNum = "7") + @Dict(dictTable = "laws_tree_node", dicCode = "id", dicText = "node_name") + @ApiModelProperty(value = "企标体系") + private String enStandardSystem; + /** * 年代号 */ @@ -170,7 +171,7 @@ public class ProcessEsAnnualInit implements Serializable { /** * 标准类型 */ - @Excel(name = "*标准类型", width = 15, orderNum = "13") + @Excel(name = "标准类型", width = 15, orderNum = "8") @Dict(dicCode = "esp_standard_type") @ApiModelProperty(value = "标准类型") private String standardType; @@ -178,7 +179,7 @@ public class ProcessEsAnnualInit implements Serializable { /** * 企标等级分类 */ - @Excel(name = "*标准等级分类", width = 15, orderNum = "14") + @Excel(name = "标准等级分类", width = 15, orderNum = "9") @Dict(dicCode = "standard_grade_classify") @ApiModelProperty(value = "企标等级分类") private String enStandardClassification; @@ -186,30 +187,36 @@ public class ProcessEsAnnualInit implements Serializable { /** * 草稿计划完成日期 */ - @Excel(name = "草稿计划完成日期", width = 20, orderNum = "17") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "草稿计划完成日期") private Date draftPlannedCompleteDate; + @Excel(name = "草稿计划完成日期", width = 20, orderNum = "10") + private String draftPlannedCompleteDateString; + /** * 征求意见稿计划完成日期 */ - @Excel(name = "征求意见稿计划完成日期", width = 24, orderNum = "18") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "征求意见稿计划完成日期") private Date solicitationDraftPlanCompleteDate; + @Excel(name = "征求意见稿计划完成日期", width = 24, orderNum = "11") + private String solicitationDraftPlanCompleteDateString; + /** * 计划报批日期 */ - @Excel(name = "计划报批日期", width = 15, orderNum = "19") @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "计划报批日期") private Date planApprovalDate; + @Excel(name = "计划报批日期", width = 15, orderNum = "12") + private String planApprovalDateString; + /** * 项目状态 */ @@ -225,21 +232,31 @@ public class ProcessEsAnnualInit implements Serializable { /** * 零部件名称 */ + @Excel(name = "*零部件名称", width = 15, orderNum = "13") + @Dict(dicCode = "part_name") @ApiModelProperty(value = "零部件名称") private String componentName; + /** + * 授权部门 + */ + @Excel(name = "*授权部门", width = 15, orderNum = "14") + @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") + @ApiModelProperty(value = "授权部门") + private String authDept; + /** * 主起草人 */ - @Excel(name = "*主起草人", width = 15, orderNum = "10") - @Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname") + @Excel(name = "*主起草人", width = 15, orderNum = "15") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "CONCAT(realname, '(', username, ')')") @ApiModelProperty(value = "主起草人") private String mainDraftingUser; /** * 主起草单位 */ - @Excel(name = "*主起草单位", width = 15, orderNum = "11") + @Excel(name = "*主起草单位", width = 15, orderNum = "16") @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") @ApiModelProperty(value = "主起草单位") private String mainDraftingUnit; @@ -247,16 +264,16 @@ public class ProcessEsAnnualInit implements Serializable { /** * 主起草单位责任人 */ - @Excel(name = "*主起草单位责任人", width = 20, orderNum = "12") - @Dict(dicCode = "id", dictTable = "sys_user", dicText = "realname") + @Excel(name = "*主起草单位责任人", width = 20, orderNum = "17") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "CONCAT(realname, '(', username, ')')") @ApiModelProperty(value = "主起草单位责任人") private String mainDraftingUnitResponsiblePerson; /** * 标准推进人 */ - @Excel(name = "*标准推进人", width = 15, orderNum = "16") - @Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname") + @Excel(name = "*标准推进人", width = 15, orderNum = "18") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "CONCAT(realname, '(', username, ')')") @ApiModelProperty(value = "标准推进人") private String standardPromoter; @@ -278,7 +295,6 @@ public class ProcessEsAnnualInit implements Serializable { /** * 上传附件 */ - @Dict(dictTable = "oss_file", dicCode = "id", dicText = "file_name") @ApiModelProperty(value = "上传附件") private String uploadAttachment; @@ -288,18 +304,10 @@ public class ProcessEsAnnualInit implements Serializable { @ApiModelProperty(value = "变更原因") private String changeReason; - /** - * 授权部门 - */ - @Excel(name = "*授权部门", width = 15, orderNum = "4") - @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") - @ApiModelProperty(value = "授权部门") - private String authDept; - /** * 配合单位 */ - @Excel(name = "*配合单位", width = 15, orderNum = "9") + @Excel(name = "*配合单位", width = 15, orderNum = "19") @Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name") @ApiModelProperty(value = "配合单位") private String cooperationUnit; @@ -307,15 +315,15 @@ public class ProcessEsAnnualInit implements Serializable { /** * 联络人 */ - @Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname") - @Excel(name = "*联络人", width = 15, orderNum = "15") + @Excel(name = "*联络人", width = 15, orderNum = "20") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "CONCAT(realname, '(', username, ')')") @ApiModelProperty(value = "联络人") private String contactUser; /** * 流程中的主起草人 */ - @Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "CONCAT(realname, '(', username, ')')") @ApiModelProperty(value = "流程中的主起草人") private String prcMainDraftUser; @@ -335,7 +343,7 @@ public class ProcessEsAnnualInit implements Serializable { /** * 审批人 */ - @Dict(dictTable = "sys_user", dicCode = "id", dicText = "realname") + @Dict(dicCode = "id", dictTable = "sys_user", dicText = "CONCAT(realname, '(', username, ')')") @ApiModelProperty(value = "审批人") private String approvalUser; 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 39a24da2..572e233e 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 @@ -22,9 +22,12 @@ import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessNodeLinkService; import com.jero.modules.activiti.service.ProcessNodeService; import com.jero.modules.activiti.util.ExcelUtils; +import com.jero.modules.laws.common.util.ImportUtil; import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; import com.jero.modules.sys.utils.UserUtils; +import lombok.Cleanup; +import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; @@ -38,6 +41,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.io.IOException; +import java.io.InputStream; import java.util.*; import java.util.stream.Collectors; @@ -81,6 +85,9 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl importData(MultipartFile file) { List listDict = commonAPI.getDictItemAll(); Map resultMap = new HashMap<>(); @@ -356,7 +364,9 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl list = ExcelImportUtil.importExcel(file.getInputStream(), ProcessEsAnnualInit.class, params); + @Cleanup + InputStream inputStream = file.getInputStream(); + List list = ExcelImportUtil.importExcel(inputStream, ProcessEsAnnualInit.class, params); list.remove(0); list.remove(0); if (list.isEmpty()) { @@ -367,7 +377,7 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl 0) { + if (!errorMsgs.isEmpty()) { resultMap.put("msg", errorMsgs); resultMap.put("flag", YesOrNoEnum.NO.getValue()); } else { @@ -383,12 +393,6 @@ public class ProcessEsAnnualInitServiceImpl 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.setCooperationUnit(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getCooperationUnit(), listDict)); item.setMainDraftingUser(excelUtils.translateDictValue("CONCAT(realname, '(', username, ')')", "id", "sys_user", item.getMainDraftingUser(), listDict)); item.setMainDraftingUnit(excelUtils.translateDictValue("depart_name", "id", "sys_depart", item.getMainDraftingUnit(), listDict)); item.setMainDraftingUnitResponsiblePerson(excelUtils.translateDictValue("CONCAT(realname, '(', username, ')')", "id", "sys_user", item.getMainDraftingUnitResponsiblePerson(), listDict)); item.setStandardPromoter(excelUtils.translateDictValue("CONCAT(realname, '(', username, ')')", "id", "sys_user", item.getStandardPromoter(), listDict)); + item.setEnStandardSystem(excelUtils.translateDictValue("node_name", "id", "laws_tree_node", item.getEnStandardSystem(), listDict)); item.setContactUser(excelUtils.translateDictValue("CONCAT(realname, '(', username, ')')", "id", "sys_user", item.getContactUser(), listDict)); + item.setStandardType(excelUtils.translateDictValue("esp_standard_type", item.getStandardType(), listDict)); + item.setEnStandardCode(excelUtils.translateDictValue("enterprise_standard_code", item.getEnStandardCode(), listDict)); + item.setEnStandardClassification(excelUtils.translateDictValue("standard_category_code", item.getEnStandardClassification(), listDict)); + item.setComponentName(excelUtils.translateDictValue("part_name", item.getComponentName(), listDict)); + item.setProjectType(excelUtils.translateDictValue("esp_revision_type", item.getProjectType(), listDict)); + item.setDraftPlannedCompleteDate(importUtil.convertDate(item.getDraftPlannedCompleteDateString())); + item.setSolicitationDraftPlanCompleteDate(importUtil.convertDate(item.getSolicitationDraftPlanCompleteDateString())); + item.setPlanApprovalDate(importUtil.convertDate(item.getPlanApprovalDateString())); }); } @@ -459,6 +470,11 @@ public class ProcessEsAnnualInitServiceImpl extends ServiceImpl 0) { errorMsgs.add(errMsgHeader.append(errMsg).toString()); 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 29dd3690..60310b19 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 @@ -79,7 +79,7 @@ public class ESAnnualReportController { @PostMapping("/importExcel") @ApiOperation(value = "企标年度制修订主动上报流程-导入", notes = "企标年度制修订主动上报流程-导入") @AutoLog(value = "企标年度制修订主动上报流程-导入") - @DictPoint + @Translation public Result importExcel(@ApiParam(value = "要上传的文件", required = true) @RequestParam("file") MultipartFile file) { Map resultMap = annualReportService.importData(file); Object flag = resultMap.get("flag"); 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 49afe904..e481c8ca 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 @@ -356,12 +356,6 @@ public class ProcessEsAnnualReportServiceImpl extends ServiceImpl() { - @Override - public int compare(Field o1, Field o2) { - Excel excel1 = o1.getAnnotation(Excel.class); - Excel excel2 = o2.getAnnotation(Excel.class); - return Integer.compare(Integer.parseInt(excel1.orderNum()), Integer.parseInt(excel2.orderNum())); - } + annotatedFields.sort((o1, o2) -> { + Excel excel1 = o1.getAnnotation(Excel.class); + Excel excel2 = o2.getAnnotation(Excel.class); + return Integer.compare(Integer.parseInt(excel1.orderNum()), Integer.parseInt(excel2.orderNum())); }); // 提取排序后字段的name属性值 @@ -375,4 +372,26 @@ public class ExcelUtils { } } + + public String validPartName(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return "零部件名称不能为空"; + } + // 检查工作组 + if (!excelUtils.validDict("part_name", value, null, null, true, listDict)) { + return "'零部件名称'无效。"; + } + return ""; + } + + public String validStandardCode(String value, List listDict) { + if (StrUtil.isBlank(value)) { + return ""; + } + // 检查工作组 + if (!excelUtils.validDict("enterprise_standard_code", value, null, null, true, listDict)) { + return "'企业标准代号'无效。"; + } + return ""; + } } diff --git a/laws-modules/src/main/resources/excelTemplate/es-annual-init.xlsx b/laws-modules/src/main/resources/excelTemplate/es-annual-init.xlsx index 32150b98f0c0cf71e9efc6644dfaee4790b90fdf..0b3eed8c5d4db98377f75d6ee21c21dd5c775c4d 100644 GIT binary patch delta 4635 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 delta 4598 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 W;b~}3s4NyQ`aP5#pN8w-(7yoAE_t>9