diff --git a/jero-boot/db/蔚来标准sql/dev_third_record.sql b/jero-boot/db/蔚来标准sql/dev_third_record.sql index 925808229..b3f1e7ad9 100644 --- a/jero-boot/db/蔚来标准sql/dev_third_record.sql +++ b/jero-boot/db/蔚来标准sql/dev_third_record.sql @@ -1109,5 +1109,5 @@ INSERT INTO `laws_weilai`.`sys_permission` (`id`, `parent_id`, `name`, `url`, `c INSERT INTO `laws_weilai`.`sys_permission` (`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `redirect`, `menu_type`, `perms`, `perms_type`, `sort_no`, `always_show`, `icon`, `is_route`, `is_leaf`, `keep_alive`, `hidden`, `description`, `create_by`, `create_time`, `update_by`, `update_time`, `del_flag`, `rule_flag`, `status`, `internal_or_external`, `menu_en`) VALUES ('1567711678239260673', '1539780399024934914', '法规意见-批量删除', NULL, NULL, NULL, NULL, 2, 'regulatoryComments:batchDelete', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2022-09-08 11:09:25', NULL, NULL, 0, 0, '1', 0, 'Regulatory Comments - batch Delete'); INSERT INTO `laws_weilai`.`sys_permission` (`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `redirect`, `menu_type`, `perms`, `perms_type`, `sort_no`, `always_show`, `icon`, `is_route`, `is_leaf`, `keep_alive`, `hidden`, `description`, `create_by`, `create_time`, `update_by`, `update_time`, `del_flag`, `rule_flag`, `status`, `internal_or_external`, `menu_en`) VALUES ('1567711460491968513', '1539780399024934914', '法规意见-删除', NULL, NULL, NULL, NULL, 2, 'regulatoryComments:delete', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2022-09-08 11:08:34', NULL, NULL, 0, 0, '1', 0, 'Regulatory Comments - delete'); --- 上报库删除按钮 +-- 上报库删除按钮 2022-09-14已同步生产环境 INSERT INTO `laws_weilai`.`sys_permission`(`id`, `parent_id`, `name`, `url`, `component`, `component_name`, `redirect`, `menu_type`, `perms`, `perms_type`, `sort_no`, `always_show`, `icon`, `is_route`, `is_leaf`, `keep_alive`, `hidden`, `description`, `create_by`, `create_time`, `update_by`, `update_time`, `del_flag`, `rule_flag`, `status`, `internal_or_external`, `menu_en`) VALUES ('1569609701240446977', '1539429224550457346', '删除', NULL, NULL, NULL, NULL, 2, 'params:report:delete', '1', 1.00, 0, NULL, 1, 1, 0, 0, NULL, 'admin', '2022-09-13 16:51:29', NULL, NULL, 0, 0, '1', 0, 'Delete'); \ No newline at end of file diff --git a/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/collect/mapper/xml/ParamsManifestEOMapper.xml b/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/collect/mapper/xml/ParamsManifestEOMapper.xml index 12e46fcfd..c44aae67c 100644 --- a/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/collect/mapper/xml/ParamsManifestEOMapper.xml +++ b/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/collect/mapper/xml/ParamsManifestEOMapper.xml @@ -78,7 +78,7 @@ pm.state as state, concat(pni.project_name,'-',pyni.year_name) as project_name, pm.params_template_id as params_template_id, - pt.params_template_name as params_template_name, + if (pt.params_template_name is not null, pt.params_template_name, pm.params_template_name) as params_template_name, pm.params_template_publish_version as params_template_publish_version, pm.create_time as create_time from params_manifest pm diff --git a/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/report/service/impl/ParamsReportDetailEOServiceImpl.java b/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/report/service/impl/ParamsReportDetailEOServiceImpl.java index 4879c80b5..3ecc063ea 100644 --- a/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/report/service/impl/ParamsReportDetailEOServiceImpl.java +++ b/jero-boot/jero-boot-module-certification/src/main/java/com/jero/modules/cert/report/service/impl/ParamsReportDetailEOServiceImpl.java @@ -30,6 +30,7 @@ import com.jero.modules.cert.template.enums.ParamsIsMustEnum; import com.jero.modules.ocr.util.LineHumpUtil; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; +import com.jero.modules.project.util.Docx4jUtils; import com.jero.modules.project.util.ExcelUtil; import com.jero.modules.project.util.WordUtil; import com.jero.modules.split.common.ReadExcel; @@ -48,6 +49,7 @@ import org.docx4j.Docx4J; import org.docx4j.openpackaging.exceptions.Docx4JException; import org.docx4j.openpackaging.packages.SpreadsheetMLPackage; import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mock.web.MockMultipartFile; @@ -785,6 +787,8 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl> fileListAll = (List>) allParamsInfoList.get(2).get("fileListAll"); @@ -838,7 +842,7 @@ public class ParamsReportDetailEOServiceImpl extends ServiceImpl addBatch(@Validated @RequestBody ProjectLawsInventoryRejectCauseEO projectLawsInventoryRejectCauseEO) { + projectLawsInventoryRejectCauseEOService.addBatch(projectLawsInventoryRejectCauseEO); + return Result.OK("添加成功!"); + } + /** * 编辑 * diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLawsInventoryEOEn.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLawsInventoryEOEn.java index c18d10358..9653db607 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLawsInventoryEOEn.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLawsInventoryEOEn.java @@ -66,7 +66,7 @@ public class ProjectLawsInventoryEOEn implements Serializable { private String projectLibraryId; /**编号*/ - @Excel(name = "Number", width = 20) + @Excel(name = "*Number", width = 20) @ApiModelProperty(value = "编号") private String serialNumber; @@ -116,13 +116,14 @@ public class ProjectLawsInventoryEOEn implements Serializable { private String implementType; /**新车型实施日期*/ + @Excel(name = "New Type Execution Date", width = 30, format = "yyyy-MM-dd") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "新车型实施日期") private Date xin1Che1Xing2Shi2Shi1Ri4Qi1; /**在产车实施日期*/ - @Excel(name = "New Vehicle Execute Date", width = 30, format = "yyyy-MM-dd") + @Excel(name = "New Vehicle Execution Date", width = 30, format = "yyyy-MM-dd") @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "在产车实施日期") @@ -135,7 +136,7 @@ public class ProjectLawsInventoryEOEn implements Serializable { private String attestationType; /**认证级别*/ - @Excel(name = "Certification Level", width = 25,dicCode ="attestation_rank") + @Excel(name = "*Certification Level", width = 25,dicCode ="attestation_rank") @ApiModelProperty(value = "认证级别") @Dict(dicCode ="attestation_rank") private String attestationRank; @@ -150,7 +151,7 @@ public class ProjectLawsInventoryEOEn implements Serializable { private String wvtaId; /**责任领域*/ - @Excel(name = "Responsible Field", width = 25,dicCode ="duty_territory") + @Excel(name = "*Responsible Field", width = 25,dicCode ="duty_territory") @ApiModelProperty(value = "责任领域") @Dict(dicCode ="duty_territory") private String dutyTerritory; @@ -212,7 +213,7 @@ public class ProjectLawsInventoryEOEn implements Serializable { private String designInitiatorId; /**设计符合性确认-发起人名称*/ - @Excel(name = "Initiator", width = 25,groupName = "Design Compliance Check") + @Excel(name = "Reviewer", width = 25,groupName = "Design Compliance Check") @TableField(exist = false) private String designInitiatorName; @@ -268,7 +269,7 @@ public class ProjectLawsInventoryEOEn implements Serializable { private String prehomoInitiatorId; /**prehomo确认-发起人名称*/ - @Excel(name = "Initiator", width = 25,groupName = "Pre-homo Check") + @Excel(name = "Reviewer", width = 25,groupName = "Pre-homo Check") @TableField(exist = false) private String prehomoInitiatorName; @@ -324,7 +325,7 @@ public class ProjectLawsInventoryEOEn implements Serializable { private String verifyInitiatorId; /**验证符合性确认-发起人名称*/ - @Excel(name = "Initiator", width = 25,groupName = "Validation Compliance Check") + @Excel(name = "Reviewer", width = 25,groupName = "Validation Compliance Check") @TableField(exist = false) private String verifyInitiatorName; diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLawsInventoryRejectCauseEO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLawsInventoryRejectCauseEO.java index 8b7304ff7..ce9e64e4a 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLawsInventoryRejectCauseEO.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectLawsInventoryRejectCauseEO.java @@ -1,21 +1,19 @@ package com.jero.modules.project.entity; -import java.io.Serializable; -import java.io.UnsupportedEncodingException; -import java.math.BigDecimal; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; -import com.jero.common.aspect.annotation.Dict; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; /** @@ -88,4 +86,6 @@ public class ProjectLawsInventoryRejectCauseEO implements Serializable { @ApiModelProperty(value = "拒绝类型") private java.lang.String rejectType; + @TableField(exist = false) + private String taskIds; } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/DataSourceEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/DataSourceEnum.java new file mode 100644 index 000000000..d24a61a35 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/DataSourceEnum.java @@ -0,0 +1,34 @@ +package com.jero.modules.project.enums; + +/** + * @description + * @date 2022/9/14 16:09 + * @auth zhn + */ +public enum DataSourceEnum { + TEMPLATE_DATA("模板数据","1"), + LIST_DATA("列表数据","2"); + String name; + String value; + + DataSourceEnum(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/InventoryAffirmStatusEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/InventoryAffirmStatusEnum.java index 9954add24..1396fdbf3 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/InventoryAffirmStatusEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/InventoryAffirmStatusEnum.java @@ -57,5 +57,14 @@ public enum InventoryAffirmStatusEnum { } return null; } + public static String getTextByName(String name) { + InventoryAffirmStatusEnum[] values = values(); + for (InventoryAffirmStatusEnum inventoryAffirmStatusEnum : values) { + if (inventoryAffirmStatusEnum.name.equals(name)) { + return inventoryAffirmStatusEnum.value; + } + } + return null; + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/TaskAffirmStatusEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/TaskAffirmStatusEnum.java index 937ecc88e..4376edb71 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/TaskAffirmStatusEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/enums/TaskAffirmStatusEnum.java @@ -53,5 +53,14 @@ public enum TaskAffirmStatusEnum { } return null; } + public static String getTextByName(String name) { + TaskAffirmStatusEnum[] values = values(); + for (TaskAffirmStatusEnum taskAffirmStatusEnum : values) { + if (taskAffirmStatusEnum.name.equals(name)) { + return taskAffirmStatusEnum.value; + } + } + return null; + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLawsInventoryRejectCauseEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLawsInventoryRejectCauseEOService.java index f112fe1a4..a71e5a86f 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLawsInventoryRejectCauseEOService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLawsInventoryRejectCauseEOService.java @@ -22,6 +22,8 @@ public interface IProjectLawsInventoryRejectCauseEOService extends IService list = Arrays.asList(titleOne.split(",")); @@ -3929,10 +3929,10 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl fileInfos = getOssFiles(dataList); + + //用户 + List userIdList = new ArrayList<>(); + for (ProjectLawsInventoryEO lawsInventoryEO : dataList) { + getUserIdList(userIdList, lawsInventoryEO); + } + List sysUserList = new ArrayList<>(); + if(CollectionUtils.isNotEmpty(userIdList)){ + userIdList = userIdList.stream().distinct().collect(Collectors.toList()); + QueryWrapper sysUserQueryWrapper = new QueryWrapper<>(); + sysUserQueryWrapper.select("id,username"); + sysUserQueryWrapper.lambda().in(SysUser::getId,userIdList); + sysUserList = sysUserMapper.selectList(sysUserQueryWrapper); + } + //所有用户 - List sysUserList = sysUserService.list(); +// List sysUserList = sysUserService.list(); //数据转换(文件名称,对应标准) dataTransition(dataList, fileInfos,sysUserList,projectLawsInventoryEO); @@ -4076,6 +4091,51 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl userIdList, ProjectLawsInventoryEO lawsInventoryEO) { + //认证工程师id + if (StringUtils.isNotEmpty(lawsInventoryEO.getHomologationEngineerId())) { + userIdList.add(lawsInventoryEO.getHomologationEngineerId()); + } + //法规工程师id + if (StringUtils.isNotEmpty(lawsInventoryEO.getRegulationOwnerId())) { + userIdList.add(lawsInventoryEO.getRegulationOwnerId()); + } + //工程接口人id + if (StringUtils.isNotEmpty(lawsInventoryEO.getEngineeringInterfacePerson())) { + userIdList.add(lawsInventoryEO.getEngineeringInterfacePerson()); + } + + //设计符合性确认 + //发起人 + if (StringUtils.isNotEmpty(lawsInventoryEO.getDesignInitiatorId())) { + userIdList.add(lawsInventoryEO.getDesignInitiatorId()); + } + //责任人 + if (StringUtils.isNotEmpty(lawsInventoryEO.getDesignDutyId())) { + userIdList.add(lawsInventoryEO.getDesignDutyId()); + } + + //prehomo确认 + //发起人 + if (StringUtils.isNotEmpty(lawsInventoryEO.getPrehomoInitiatorId())) { + userIdList.add(lawsInventoryEO.getPrehomoInitiatorId()); + } + //责任人 + if (StringUtils.isNotEmpty(lawsInventoryEO.getPrehomoDutyId())) { + userIdList.add(lawsInventoryEO.getPrehomoDutyId()); + } + + //验证符合性确认 + //发起人 + if (StringUtils.isNotEmpty(lawsInventoryEO.getVerifyInitiatorId())) { + userIdList.add(lawsInventoryEO.getVerifyInitiatorId()); + } + //责任人 + if (StringUtils.isNotEmpty(lawsInventoryEO.getVerifyDutyId())) { + userIdList.add(lawsInventoryEO.getVerifyDutyId()); + } + } + private void transition(List dataListEn,ProjectLawsInventoryEO projectLawsInventoryEOTemp){ //下拉选数据字典 @@ -4205,24 +4265,24 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl datas = new ArrayList<>(); File excelFile = excelfilelist.get(0); Workbook workbook = WorkbookFactory.create(excelFile); @@ -4322,80 +4384,197 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl rowList = new LinkedHashMap<>(); - for (int j = 0; j < columNos; j++) { - Cell cell = row.getCell(j); - Cell headerCell = headerRow.getCell(j); - if (cell != null) { - if (i == 0) { - cell.setCellType(HSSFCell.CELL_TYPE_STRING); - headerSb.append(cell.getStringCellValue() + ","); - if(j == 11){ - break; - } - }else if(i == 1){ - if(j > 11){ - String flag = ""; - if(11 < j && j < 18){ - if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ - flag ="设计"; - }else{ - flag ="design "; - } - key = flag + headerCell.getStringCellValue(); - } - if(17 < j && j < 24){ - if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ - flag ="pre"; - }else{ - flag ="pre "; - } - key = flag + headerCell.getStringCellValue(); - } - if(23 < j && j < 30){ - if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ - flag ="验证"; - }else{ - flag ="verify "; - } - key = flag + headerCell.getStringCellValue(); - } - headerSb.append(key + ","); - } - } else if(i > 2){ - List headList = Arrays.asList(headerSb.toString().split(",")); - String field =""; - if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType() && HSSFDateUtil.isCellDateFormatted(cell)) { - Date d = cell.getDateCellValue(); - field = fieldConvert(headList.get(j)); - rowList.put(field, df.format(d)); - } else { - field = fieldConvert(headList.get(j)); + //以sheet页第一行的列数为标记,判断用的是导入模板还是用的列表导出的数据 + short lastCellNum = sheet.getRow(0).getLastCellNum(); + if(lastCellNum == 32){ + dataSource = DataSourceEnum.LIST_DATA.getValue(); + if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ + title = "*编号,标题,子标题," + + "清单确认状态,任务确认状态,适用地区,对应标准," + + "实施类别,新车型实施日期,在产车实施日期,认证类型,*认证级别," + + "适用增补件,WVTA ID,*责任领域,法规工程师,认证工程师,工程接口人,备注," + + "设计交付物类型,设计交付物模板,设计发起人,设计责任人,设计截止时间,设计交付物说明," + + "pre交付物类型,pre交付物模板,pre发起人,pre责任人,pre截止时间,pre交付物说明," + + "验证交付物类型,验证交付物模板,验证发起人,验证责任人,验证截止时间,验证交付物说明"; + }else{ + title = "*Number,Title,Sub-Title," + + "List Confirmation Status,Task Confirmation Status,Area,Compare EU/CN," + + "Usage,New Type Execution Date,New Vehicle Execution Date,Certification Type,"+ + "*Certification Level,Applicable Supplement,WVTA ID,*Responsible Field,"+ + "Regulation Engineer,Homologation Engineer,Engineering Interface,Comments,"+ + "design Deliverable Type,design Deliverable Template,design Reviewer,design Assignee,design Due Date,design Deliverable Description,"+ + "pre Deliverable Type,pre Deliverable Template,pre Reviewer,pre Assignee,pre Due Date,pre Deliverable Description,"+ + "verify Deliverable Type,verify Deliverable Template,verify Reviewer,verify Assignee,verify Due Date,verify Deliverable Description"; + } + //导入的数据为列表导出的数据 + for (int i = 0; i <= rowNos; i++) { + Row row = sheet.getRow(i); + Row headerRow = sheet.getRow(i); + boolean isBlank = isRowEmpty(row); + String key = ""; + if (row != null && !isBlank) { + int columNos = headerRow.getLastCellNum();// 表头总共的列数 + Map rowList = new LinkedHashMap<>(); + for (int j = 0; j < columNos; j++) { + Cell cell = row.getCell(j); + Cell headerCell = headerRow.getCell(j); + if (cell != null) { + if (i == 0) { cell.setCellType(HSSFCell.CELL_TYPE_STRING); - String stringCellValue = cell.getStringCellValue(); - if (StringUtils.isNotBlank(stringCellValue)) { - String replace = stringCellValue.replace(",", ","); - rowList.put(field, replace); + headerSb.append(cell.getStringCellValue() + ","); + if(j == 18){ + break; + } + }else if(i == 1){ + if(j > 18){ + String flag = ""; + if(18 < j && j < 25){ + if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ + flag ="设计"; + }else{ + flag ="design "; + } + key = flag + headerCell.getStringCellValue(); + } + if(24 < j && j < 31){ + if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ + flag ="pre"; + }else{ + flag ="pre "; + } + key = flag + headerCell.getStringCellValue(); + } + if(30 < j && j < 37){ + if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ + flag ="验证"; + }else{ + flag ="verify "; + } + key = flag + headerCell.getStringCellValue(); + } + headerSb.append(key + ","); + } + } else if(i > 1){ + List headList = Arrays.asList(headerSb.toString().split(",")); + String field =""; + if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType() && HSSFDateUtil.isCellDateFormatted(cell)) { + Date d = cell.getDateCellValue(); + field = fieldConvert(headList.get(j)); + rowList.put(field, df.format(d)); } else { - rowList.put(field, ""); + field = fieldConvert(headList.get(j)); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + String stringCellValue = cell.getStringCellValue(); + if (StringUtils.isNotBlank(stringCellValue)) { + String replace = stringCellValue.replace(",", ","); + rowList.put(field, replace); + } else { + rowList.put(field, ""); + } } } } } + if (i > 1) { + dataList.add(rowList); + } } - if (i > 2) { - dataList.add(rowList); + } + }else{ + if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ + title = "*编号,子标题,WVTA ID," + + "实施类别,认证类型,*认证级别,适用增补件," + + "*责任领域,法规工程师,认证工程师,工程接口人," + + "备注," + + "设计交付物类型,设计交付物模板,设计发起人,设计责任人,设计截止时间,设计交付物说明," + + "pre交付物类型,pre交付物模板,pre发起人,pre责任人,pre截止时间,pre交付物说明," + + "验证交付物类型,验证交付物模板,验证发起人,验证责任人,验证截止时间,验证交付物说明"; + }else{ + title = "*Number,Sub-Title,WVTA ID," + + "Usage,Certification Type,*Certification Level,Applicable Supplement," + + "*Responsible Field,Regulation Engineer,Homologation Engineer,Engineering Interface," + + "Comments," + + "design Deliverable Type,design Deliverable Template,design Reviewer,design Assignee,design Due Date,design Deliverable Description," + + "pre Deliverable Type,pre Deliverable Template,pre Reviewer,pre Assignee,pre Due Date,pre Deliverable Description," + + "verify Deliverable Type,verify Deliverable Template,verify Reviewer,verify Assignee,verify Due Date,verify Deliverable Description"; + } + //导入的数据为填写模板的数据 + for (int i = 0; i <= rowNos; i++) { + Row row = sheet.getRow(i); + Row headerRow = sheet.getRow(i); + boolean isBlank = isRowEmpty(row); + String key = ""; + if (row != null && !isBlank) { + int columNos = headerRow.getLastCellNum();// 表头总共的列数 + Map rowList = new LinkedHashMap<>(); + for (int j = 0; j < columNos; j++) { + Cell cell = row.getCell(j); + Cell headerCell = headerRow.getCell(j); + if (cell != null) { + if (i == 0) { + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + headerSb.append(cell.getStringCellValue() + ","); + if(j == 11){ + break; + } + }else if(i == 1){ + if(j > 11){ + String flag = ""; + if(11 < j && j < 18){ + if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ + flag ="设计"; + }else{ + flag ="design "; + } + key = flag + headerCell.getStringCellValue(); + } + if(17 < j && j < 24){ + if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ + flag ="pre"; + }else{ + flag ="pre "; + } + key = flag + headerCell.getStringCellValue(); + } + if(23 < j && j < 30){ + if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ + flag ="验证"; + }else{ + flag ="verify "; + } + key = flag + headerCell.getStringCellValue(); + } + headerSb.append(key + ","); + } + } else if(i > 2){ + List headList = Arrays.asList(headerSb.toString().split(",")); + String field =""; + if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType() && HSSFDateUtil.isCellDateFormatted(cell)) { + Date d = cell.getDateCellValue(); + field = fieldConvert(headList.get(j)); + rowList.put(field, df.format(d)); + } else { + field = fieldConvert(headList.get(j)); + cell.setCellType(HSSFCell.CELL_TYPE_STRING); + String stringCellValue = cell.getStringCellValue(); + if (StringUtils.isNotBlank(stringCellValue)) { + String replace = stringCellValue.replace(",", ","); + rowList.put(field, replace); + } else { + rowList.put(field, ""); + } + } + } + } + } + if (i > 2) { + dataList.add(rowList); + } } } } + if (dataList.size() == 0) { //删除原上传文件 FileUnZip.deleteDir(saveDirectory); @@ -4440,11 +4619,254 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl categoryList = sysCategoryService.list(); //普通数据字典 List dictItemList = sysDictItemServiceImpl.selectItemsAll(); - importDatas(datas, dictItemList, zipEntryName,saveDirectory,projectLawsInventoryEO,categoryList); + importDatas(datas, dictItemList, zipEntryName,saveDirectory,projectLawsInventoryEO,categoryList,dataSource); //删除原上传文件 FileUnZip.deleteDir(saveDirectory); } +// @SneakyThrows +// @Override +// public void importData(MultipartFile file, ProjectLawsInventoryEO projectLawsInventoryEO) { +// String title = ""; +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// title = "*编号,子标题,WVTA ID," + +// "实施类别,认证类型,*认证级别,适用增补件," + +// "*责任领域,法规工程师,认证工程师,工程接口人," + +// "备注," + +// "设计交付物类型,设计交付物模板,设计发起人,设计责任人,设计截止时间,设计交付物说明," + +// "pre交付物类型,pre交付物模板,pre发起人,pre责任人,pre截止时间,pre交付物说明," + +// "验证交付物类型,验证交付物模板,验证发起人,验证责任人,验证截止时间,验证交付物说明"; +// }else{ +// title = "*Number,Sub-Title,WVTA ID," + +// "Usage,Certification Type,*Certification Level,Applicable Supplement," + +// "*Responsible Field,Regulation Engineer,Homologation Engineer,Engineering Interface," + +// "Comments," + +// "design Deliverable Type,design Deliverable Template,design initiator,design Assignee,design Due Date,design Deliverable Description," + +// "pre Deliverable Type,pre Deliverable Template,pre initiator,pre Assignee,pre Due Date,pre Deliverable Description," + +// "verify Deliverable Type,verify Deliverable Template,verify initiator,verify Assignee,verify Due Date,verify Deliverable Description"; +// } +// +// int pos = file.getOriginalFilename().lastIndexOf("."); +// String str = file.getOriginalFilename().substring(pos + 1).toLowerCase(); +// String filenameorg = file.getOriginalFilename().substring(0, pos); +// //判断上传文件必须是zip +// if (!str.equals("zip")) { +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("请上传zip格式的文件或rar格式的文件"); +// }else{ +// throw new JeroBootException("Please upload a zip file or rar file"); +// } +// +// } +// String path = uploadpath + File.separator + "modal" + File.separator + filenameorg + System.currentTimeMillis(); +// File saveDirectory = new File(path); +// if (!saveDirectory.isDirectory()) { +// saveDirectory.mkdir(); +// } +// FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path + File.separator + file.getOriginalFilename())); +// //解压缩 +// String zipEntryName = ""; +// if (str.equals("zip")) { +// zipEntryName = FileUnZip.unZipFiles(path + File.separator + file.getOriginalFilename(), path); +// } +// +// +// //判断压缩包下是否只有一个文件夹 +// File fileTemp = new File(path); +// int length = fileTemp.listFiles().length; +// if (length > 2) { +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("压缩包中必须有且仅有一个文件夹,请重新上传"); +// }else{ +// throw new JeroBootException("There must be only one folder in the compressed package Please upload it again"); +// } +// +// } +// File fileNew = new File(zipEntryName); +// List fileList = new ArrayList<>(); +// for (File file1 : fileNew.listFiles()) { +// if (file1.getName().contains(".xls") || file1.getName().contains(".xlsx")) { +// fileList.add(file1); +// } +// } +// if (fileList.size() == 0) { +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("压缩包根目录下没有excel作为导入数据,请重新上传"); +// }else{ +// throw new JeroBootException("Excel does not exist in the root directory of the compressed package Please upload it again"); +// } +// +// } else if (fileList.size() > 1) { +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("压缩包根目录下仅能存在一个excel为导入数据,请重新上传"); +// }else{ +// throw new JeroBootException("Only one Excel file can be imported in the compressed package root directory. Please upload data again"); +// } +// +// } +// +// // 数据相关处理, +// // 1.获取其中的Excel, +// List excelfilelist = FileUnZip.readImpExcelFile(zipEntryName); +// System.gc(); +// if (excelfilelist.size() < 1) { +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("压缩包内没有上传Excel数据"); +// }else{ +// throw new JeroBootException("No Excel data is uploaded in the compressed package"); +// } +// +// } else if (excelfilelist.size() > 1) { +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("压缩包内有多个Excel数据源"); +// }else{ +// throw new JeroBootException("There are multiple Excel data sources in the zip package"); +// } +// +// } +// List datas = new ArrayList<>(); +// File excelFile = excelfilelist.get(0); +// Workbook workbook = WorkbookFactory.create(excelFile); +// List> dataList = new ArrayList<>(); +// if (workbook != null) { +// DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); +// Sheet sheet = workbook.getSheetAt(0); +// if (sheet != null) { +// StringBuilder headerSb = new StringBuilder(); +// int rowNos = sheet.getLastRowNum();// 得到excel的总记录条数 +// for (int i = 0; i <= rowNos; i++) { +// Row row = sheet.getRow(i); +// Row headerRow = sheet.getRow(i); +// boolean isBlank = isRowEmpty(row); +// String key = ""; +// if (row != null && !isBlank) { +// int columNos = headerRow.getLastCellNum();// 表头总共的列数 +// Map rowList = new LinkedHashMap<>(); +// for (int j = 0; j < columNos; j++) { +// Cell cell = row.getCell(j); +// Cell headerCell = headerRow.getCell(j); +// if (cell != null) { +// if (i == 0) { +// cell.setCellType(HSSFCell.CELL_TYPE_STRING); +// headerSb.append(cell.getStringCellValue() + ","); +// if(j == 11){ +// break; +// } +// }else if(i == 1){ +// if(j > 11){ +// String flag = ""; +// if(11 < j && j < 18){ +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// flag ="设计"; +// }else{ +// flag ="design "; +// } +// key = flag + headerCell.getStringCellValue(); +// } +// if(17 < j && j < 24){ +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// flag ="pre"; +// }else{ +// flag ="pre "; +// } +// key = flag + headerCell.getStringCellValue(); +// } +// if(23 < j && j < 30){ +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// flag ="验证"; +// }else{ +// flag ="verify "; +// } +// key = flag + headerCell.getStringCellValue(); +// } +// headerSb.append(key + ","); +// } +// } else if(i > 2){ +// List headList = Arrays.asList(headerSb.toString().split(",")); +// String field =""; +// if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType() && HSSFDateUtil.isCellDateFormatted(cell)) { +// Date d = cell.getDateCellValue(); +// field = fieldConvert(headList.get(j)); +// rowList.put(field, df.format(d)); +// } else { +// field = fieldConvert(headList.get(j)); +// cell.setCellType(HSSFCell.CELL_TYPE_STRING); +// String stringCellValue = cell.getStringCellValue(); +// if (StringUtils.isNotBlank(stringCellValue)) { +// String replace = stringCellValue.replace(",", ","); +// rowList.put(field, replace); +// } else { +// rowList.put(field, ""); +// } +// } +// } +// } +// } +// if (i > 2) { +// dataList.add(rowList); +// } +// } +// } +// +// if (dataList.size() == 0) { +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("请填写必填字段内容,带*的为必填"); +// }else{ +// throw new JeroBootException("Please fill in the required fields marked with *"); +// } +// +// }else{ +// //数据转换 JSON.parseObject(JSON.toJSONString(map), MyUser.class) +// for (Map stringStringMap : dataList) { +// ProjectLawsInventoryEO projectLawsInventoryEOTemp = JSON.parseObject(JSON.toJSONString(stringStringMap), ProjectLawsInventoryEO.class); +// projectLawsInventoryEOTemp.setCut(projectLawsInventoryEO.getCut()); +// projectLawsInventoryEOTemp.setProjectLibraryId(projectLawsInventoryEO.getProjectLibraryId()); +// projectLawsInventoryEOTemp.setTaskAffirmStatus(TaskAffirmStatusEnum.NOT_STARTED.getValue()); +// projectLawsInventoryEOTemp.setInventoryAffirmStatus(InventoryAffirmStatusEnum.NOT_STARTED.getValue()); +// datas.add(projectLawsInventoryEOTemp); +// } +// } +// // 校验头部是否符合模板 +// String substring = headerSb.toString(); +// if (substring.endsWith(",") || substring.endsWith(",")){ +// substring = headerSb.substring(0, headerSb.length() - 1); +// } +// +// String excelHeader = substring.toString(); +// if (!title.equals(excelHeader)) { +// workbook.close(); +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ +// throw new JeroBootException("读取失败,请严格按照模板文件导入数据"); +// }else{ +// throw new JeroBootException("The data fails to be read. Import data strictly according to the template file"); +// } +// +// } +// } +// } +// workbook.close(); +// List categoryList = sysCategoryService.list(); +// //普通数据字典 +// List dictItemList = sysDictItemServiceImpl.selectItemsAll(); +// importDatas(datas, dictItemList, zipEntryName,saveDirectory,projectLawsInventoryEO,categoryList); +// //删除原上传文件 +// FileUnZip.deleteDir(saveDirectory); +// +// } @Override @Transactional @@ -4565,7 +4987,427 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl categoryList) { + List categoryList, + String dataSource) { + List msgList = new ArrayList<>(); + if(DataSourceEnum.LIST_DATA.getValue().equals(dataSource)){ + //列表数据验证 + msgList = dataListVerify(dataList, dictItemList, zipEntryName, projectLawsInventoryEOTemp, categoryList, dataSource); + }else{ + //模板数据验证 + msgList = dataTemplateVerify(dataList, dictItemList, zipEntryName, projectLawsInventoryEOTemp, categoryList, dataSource); + } + if (msgList.size() > 0) { + //返回报错信息 + String html = ""; + for (String s : msgList) { + html += s + "
"; + } + FileUnZip.deleteDir(saveDirectory); + throw new JeroBootException(html); + } else { + if (dataList.size() != 0) { + this.saveBatch(dataList); + //项目任务清单数据初始化。 + List projectTaskInventoryEOList = new ArrayList<>(); + for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { + ProjectTaskInventoryEO projectTaskInventoryEO = new ProjectTaskInventoryEO(); + String projectTaskInventoryId = UUID.randomUUID().toString().replace("-", ""); + projectTaskInventoryEO.setId(projectTaskInventoryId); + projectTaskInventoryEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId()); + projectLawsInventoryEO.setStandId(projectLawsInventoryEO.getStandId()); + projectTaskInventoryEOList.add(projectTaskInventoryEO); + } + this.projectTaskInventoryEOService.saveBatch(projectTaskInventoryEOList); + //初始化项目状态评估 + projectTaskInventoryEOList.forEach(taskInventory -> { + this.initConditionAssessmentEO(taskInventory.getProjectLawsInventoryId()); + }); + + //更新log + String serialNumber = dataList.stream().map(e->e.getSerialNumber()).collect(Collectors.joining(",")); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String username = sysUser.getUsername(); + String contentLog = username+"向清单中导入了“"+serialNumber+"”"; + String enContentLog = username+" imported “"+serialNumber+"” into the list."; + projectLawsInventoryLogEOService.updateLog(contentLog, dataList.get(0).getProjectLibraryId(),CutEnum.CN.getValue()); + projectLawsInventoryLogEOService.updateLog(enContentLog, dataList.get(0).getProjectLibraryId(),CutEnum.EN.getValue()); + } + } + } + + /** + * 列表数据验证 + * @param dataList + * @param dictItemList + * @param zipEntryName + * @param projectLawsInventoryEOTemp + * @param categoryList + * @param dataSource + * @return + */ + @NotNull + private List dataListVerify(List dataList, + List dictItemList, + String zipEntryName, + ProjectLawsInventoryEO projectLawsInventoryEOTemp, + List categoryList, + String dataSource) { + String dictId = sysCategoryMapper.getDictId("deliverable_template"); + List collect = categoryList.stream().filter(e -> e.getSysDictId().equals(dictId)).collect(Collectors.toList()); + List treeNameList = new ArrayList<>(); + if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ + treeNameList = collect.stream().map(SysCategory::getName).collect(Collectors.toList()); + }else{ + treeNameList = collect.stream().map(SysCategory::getEnName).collect(Collectors.toList()); + } + int i = 2; + List msgList = new ArrayList<>(); + String value = ""; + boolean flag = true; + + //编号验证 + verifySerialNumber(dataList,projectLawsInventoryEOTemp,dataSource); + for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { + i++; + String errorMsg = ""; + if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ + errorMsg = "第" + i + "行:"; + }else{ + errorMsg = i + " line:"; + } + //编号 + String serialNumber = projectLawsInventoryEO.getSerialNumber(); + //子标题subtitle + String subtitle = projectLawsInventoryEO.getSubtitle(); + //WVTA ID + String wvtaId = projectLawsInventoryEO.getWvtaId(); + //备注 remark + String remark = projectLawsInventoryEO.getRemark(); + //认证级别 + String attestationRank = projectLawsInventoryEO.getAttestationRank(); + //责任领域 + String dutyTerritory = projectLawsInventoryEO.getDutyTerritory(); + //认证类型 + String attestationType = projectLawsInventoryEO.getAttestationType(); + //实施类别 + String implementType = projectLawsInventoryEO.getImplementType(); + //法规工程师regulationOwnerId + String regulationOwnerId = projectLawsInventoryEO.getRegulationOwnerId(); + + //认证工程师homologationEngineerId + String homologationEngineerId = projectLawsInventoryEO.getHomologationEngineerId(); + + //工程接口人engineeringInterfacePerson + String engineeringInterfacePerson = projectLawsInventoryEO.getEngineeringInterfacePerson(); + + //设计交付物类型 + String designDeliverableType = projectLawsInventoryEO.getDesignDeliverableType(); + //设计发起人 + String designInitiator = projectLawsInventoryEO.getDesignInitiatorId(); + //设计责任人 + String designDuty = projectLawsInventoryEO.getDesignDutyId(); + //设计截止时间designDueDate + Date designDueDate = projectLawsInventoryEO.getDesignDueDate(); + + //pre交付物类型 + String prehomoDeliverableType = projectLawsInventoryEO.getPrehomoDeliverableType(); + //pre发起人 + String prehomoInitiator = projectLawsInventoryEO.getPrehomoInitiatorId(); + //pre责任人 + String prehomoDuty = projectLawsInventoryEO.getPrehomoDutyId(); + //pre截止时间prehomoDueDate + Date prehomoDueDate = projectLawsInventoryEO.getPrehomoDueDate(); + + //确认交付物类型 + String verifyDeliverableType = projectLawsInventoryEO.getVerifyDeliverableType(); + //确认发起人 + String verifyInitiator = projectLawsInventoryEO.getVerifyInitiatorId(); + //确认责任人 + String verifyDuty = projectLawsInventoryEO.getVerifyDutyId(); + //确认截止时间verifyDueDate + Date verifyDueDate = projectLawsInventoryEO.getVerifyDueDate(); + String applicableSupplement = projectLawsInventoryEO.getApplicableSupplement(); + + //文件 + String designDeliverableTemplate = projectLawsInventoryEO.getDesignDeliverableTemplate(); + String prehomoDeliverableTemplate = projectLawsInventoryEO.getPrehomoDeliverableTemplate(); + String verifyDeliverableTemplate = projectLawsInventoryEO.getVerifyDeliverableTemplate(); + //标题 + String title = projectLawsInventoryEO.getTitle(); + //清单确认状态 + String inventoryAffirmStatus = projectLawsInventoryEO.getInventoryAffirmStatus(); + //任务确认状态 + String taskAffirmStatus = projectLawsInventoryEO.getTaskAffirmStatus(); + //适用地区 + String region = projectLawsInventoryEO.getRegion(); + //对应标准 + String correspondingStandard = projectLawsInventoryEO.getCorrespondingStandard(); + //新车型实施日期 + Date xin1Che1Xing2Shi2Shi1Ri4Qi1 = projectLawsInventoryEO.getXin1Che1Xing2Shi2Shi1Ri4Qi1(); + //在产出实施日期 + Date implementTime = projectLawsInventoryEO.getImplementTime(); + + //清单确认状态,任务确认状态默认为未发起 +// //清单确认状态数据转换 +// if(StringUtils.isNotBlank(inventoryAffirmStatus)){ +// String textByName = InventoryAffirmStatusEnum.getTextByName(inventoryAffirmStatus); +// projectLawsInventoryEO.setInventoryAffirmStatus(textByName); +// } +// //任务确认状态数据转换 +// if(StringUtils.isNotBlank(taskAffirmStatus)){ +// String textByName = TaskAffirmStatusEnum.getTextByName(taskAffirmStatus); +// projectLawsInventoryEO.setTaskAffirmStatus(textByName); +// } + //适用地区数据转换 + if(StringUtils.isNotBlank(region)){ + String regionTemp = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, region,msgList,"适用地区","Region","region"); + projectLawsInventoryEO.setRegion(regionTemp); + } + //新车型实施日期验证 + flag = dateVerify(projectLawsInventoryEO, errorMsg, xin1Che1Xing2Shi2Shi1Ri4Qi1,msgList,"新车型实施日","New Type Execution Date"); + //在产车实施日期验证 + flag = dateVerify(projectLawsInventoryEO, errorMsg, implementTime,msgList,"在产车实施日期","New Vehicle Execution Date"); + + + //编号(输入框必填) + flag = must(projectLawsInventoryEO, errorMsg, msgList, serialNumber, "编号", "Number"); + + //子标题 + if(StringUtils.isNotBlank(subtitle)){ + if(subtitle.length() > 300){ + String message = ""; + if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ + message = errorMsg + "子标题不能超过300个字符, "; + }else{ + message = errorMsg + " Subheadings cannot be checked more than 300 characters, "; + } + msgList.add(message); + } + } + //WVTA ID + if(StringUtils.isNotBlank(wvtaId)){ + if(wvtaId.length() > 100){ + String message = ""; + if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ + message = errorMsg + "WVTA ID不能超过100个字符, "; + }else{ + message = errorMsg + " The WVTA ID cannot contain more than 100 characters, "; + } + msgList.add(message); + } + } + //备注 remark + if(StringUtils.isNotBlank(remark)){ + if(remark.length() > 300){ + String message = ""; + if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ + message = errorMsg + "备注不能超过300个字符, "; + }else{ + message = errorMsg + " Note The value cannot exceed 300 characters, "; + } + msgList.add(message); + } + } + + //实施类别(单选不必填) + value = pullSingle(dictItemList, projectLawsInventoryEO, errorMsg, implementType,msgList,"实施类别","Usage","implement_type"); + if(StringUtils.isNotBlank(value)){ + projectLawsInventoryEO.setImplementType(value); + } + //认证类型(多选不必填) + value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, attestationType,msgList,"认证类型","Certification Type","attestation_type"); + if(StringUtils.isNotBlank(value)){ + projectLawsInventoryEO.setAttestationType(value); + } + + //认证级别(多选必填) +// flag = must(projectLawsInventoryEO, errorMsg, msgList, attestationRank,"认证级别","Certification Level"); + if(StringUtils.isNotBlank(projectLawsInventoryEO.getAttestationRank())){ + value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, attestationRank,msgList,"认证级别","Certification Level","attestation_rank"); + if(StringUtils.isNotBlank(value)){ + projectLawsInventoryEO.setAttestationRank(value); + } + } + + //责任领域(多选必填) +// flag = must(projectLawsInventoryEO, errorMsg, msgList, dutyTerritory,"责任领域","Responsible Field"); + if(StringUtils.isNotBlank(projectLawsInventoryEO.getDutyTerritory())){ + value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, dutyTerritory,msgList,"责任领域","Responsible Field","duty_territory"); + if(StringUtils.isNotBlank(value)){ + projectLawsInventoryEO.setDutyTerritory(value); + } + } + //工程接口人(责任领域下的工程接口人) + Map objectMap = iProjectRelatedPersonnelService.queryPersonByProjectId(projectLawsInventoryEOTemp.getProjectLibraryId(), value); + + //法规工程师 + List> mapLawList = (List>) objectMap.get("lawEngineerList"); + //认证工程师 + List> mapCertificationList = (List>) objectMap.get("certificationEngineerList"); + //工程接口人 + List> mapPersonList = (List>) objectMap.get("engineeringInterfacePersonList"); + //所有人 + List> allPersonList = (List>) objectMap.get("allPersonList"); + + String nameCn = ""; + String nameEn = ""; + //法规工程师 + if(StringUtils.isNotBlank(regulationOwnerId)){ + nameCn = "法规工程师"; + nameEn = "regulatory engineer"; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, regulationOwnerId, mapLawList,nameCn,nameEn, ProjectRoleEnum.REGULATI_ENGINEER.getValue()); + } + + //认证工程师 + if(StringUtils.isNotBlank(homologationEngineerId)){ + nameCn = "认证工程师"; + nameEn = "certification engineer "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, homologationEngineerId, mapCertificationList,nameCn,nameEn,ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue()); + } + + //工程接口人 + if(StringUtils.isNotBlank(engineeringInterfacePerson)){ + nameCn = "工程接口人"; + nameEn = "Engineering Interface "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, engineeringInterfacePerson, mapPersonList,nameCn,nameEn,ProjectRoleEnum.ENGINEERING_INTERFACE_PERSON.getValue()); + } + + + //设计 + //交付物类型 + value = tree(categoryList,treeNameList, projectLawsInventoryEO, errorMsg, designDeliverableType,msgList,"交付物类型","Deliverable Type","deliverable_template"); + if(StringUtils.isNotBlank(value)){ + String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); + projectLawsInventoryEO.setDesignDeliverableType(treeId); + } + + //交付物模板 + value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, designDeliverableTemplate,msgList,"交付物模板","Deliverable Template",dataSource); + if(StringUtils.isNotBlank(value)){ + projectLawsInventoryEO.setDesignDeliverableTemplate(value); + } + + //发起人 + if(StringUtils.isNotBlank(designInitiator)){ + nameCn = "设计符合性确认发起人"; + nameEn = "confirm design conformance initiator "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, designInitiator, allPersonList,nameCn,nameEn,ProjectRoleEnum.DESIGNINITIATOR.getValue()); + } + + //责任人 + if(StringUtils.isNotBlank(designDuty)){ + nameCn = "设计符合性确认责任人"; + nameEn = "confirm design conformance responsible"; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, designDuty, allPersonList,nameCn,nameEn,ProjectRoleEnum.DESIGNDUTY.getValue()); + } + + //截止时间 + flag = dateVerify(projectLawsInventoryEO, errorMsg, designDueDate,msgList,"截止时间","due date"); + if(flag){ + projectLawsInventoryEO.setDesignDueDate(designDueDate); + } + + + //pre + //交付物类型 + value = tree(categoryList, treeNameList,projectLawsInventoryEO, errorMsg, prehomoDeliverableType,msgList,"交付物类型","Deliverable Type","deliverable_template"); + if(StringUtils.isNotBlank(value)){ + String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); + projectLawsInventoryEO.setPrehomoDeliverableType(treeId); + } + + //交付物模板 + value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, prehomoDeliverableTemplate,msgList,"交付物模板","Deliverable Template",dataSource); + if(StringUtils.isNotBlank(value)){ + projectLawsInventoryEO.setPrehomoDeliverableTemplate(value); + } + + //发起人 + if(StringUtils.isNotBlank(prehomoInitiator)){ + nameCn = "Pre-homo确认发起人"; + nameEn = "Pre-homo identifies the initiator "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList, prehomoInitiator, allPersonList,nameCn,nameEn,ProjectRoleEnum.PREHOMOINITIATOR.getValue()); + } + + //责任人 + if(StringUtils.isNotBlank(prehomoDuty)){ + nameCn = "Pre-homo确认责任人"; + nameEn = "Pre-homo identifies the person responsible "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList,prehomoDuty, allPersonList,nameCn,nameEn,ProjectRoleEnum.PREHOMODUTY.getValue()); + } + + //截止时间 + flag = dateVerify(projectLawsInventoryEO, errorMsg, prehomoDueDate,msgList,"截止时间","due date"); + if(flag){ + projectLawsInventoryEO.setPrehomoDueDate(prehomoDueDate); + } + + //确认 + //交付物类型 + value = tree(categoryList,treeNameList,projectLawsInventoryEO, errorMsg, verifyDeliverableType,msgList,"交付物类型","Deliverable Type","deliverable_template"); + if(StringUtils.isNotBlank(value)){ + String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); + projectLawsInventoryEO.setVerifyDeliverableType(treeId); + } + + //交付物模板 + value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, verifyDeliverableTemplate,msgList,"交付物模板","Deliverable Template",dataSource); + if(StringUtils.isNotBlank(value)){ + projectLawsInventoryEO.setVerifyDeliverableTemplate(value); + } + + + //发起人 + if(StringUtils.isNotBlank(verifyInitiator)){ + nameCn = "验证符合性确认发起人"; + nameEn = "verify conformance validates the originator "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList,verifyInitiator, allPersonList,nameCn,nameEn,ProjectRoleEnum.VERIFYINITIATOR.getValue()); + } + + //责任人 + if(StringUtils.isNotBlank(verifyDuty)){ + nameCn = "验证符合性确认责任人"; + nameEn = "verify conformance to confirm the responsible person "; + //验证人员是否存在 + personnelVerify(projectLawsInventoryEO, errorMsg, msgList,verifyDuty, allPersonList,nameCn,nameEn,ProjectRoleEnum.VERIFYDUTY.getValue()); + } + + + //截止时间 + flag = dateVerify(projectLawsInventoryEO, errorMsg, verifyDueDate,msgList,"截止时间","due date"); + if(flag){ + projectLawsInventoryEO.setVerifyDueDate(verifyDueDate); + } + } + return msgList; + } + + /** + * 模板数据验证 + * @param dataList + * @param dictItemList + * @param zipEntryName + * @param projectLawsInventoryEOTemp + * @param categoryList + * @param dataSource + * @return + */ + @NotNull + private List dataTemplateVerify(List dataList, + List dictItemList, + String zipEntryName, + ProjectLawsInventoryEO projectLawsInventoryEOTemp, + List categoryList, + String dataSource) { String dictId = sysCategoryMapper.getDictId("deliverable_template"); List collect = categoryList.stream().filter(e -> e.getSysDictId().equals(dictId)).collect(Collectors.toList()); List treeNameList = new ArrayList<>(); @@ -4580,7 +5422,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl 0) { - //返回报错信息 - String html = ""; - for (String s : msgList) { - html += s + "
"; - } - FileUnZip.deleteDir(saveDirectory); - throw new JeroBootException(html); - } else { - if (dataList.size() != 0) { - this.saveBatch(dataList); - //项目任务清单数据初始化。 - List projectTaskInventoryEOList = new ArrayList<>(); - for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { - ProjectTaskInventoryEO projectTaskInventoryEO = new ProjectTaskInventoryEO(); - String projectTaskInventoryId = UUID.randomUUID().toString().replace("-", ""); - projectTaskInventoryEO.setId(projectTaskInventoryId); - projectTaskInventoryEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId()); - projectLawsInventoryEO.setStandId(projectLawsInventoryEO.getStandId()); - projectTaskInventoryEOList.add(projectTaskInventoryEO); - } - this.projectTaskInventoryEOService.saveBatch(projectTaskInventoryEOList); - //初始化项目状态评估 - projectTaskInventoryEOList.forEach(taskInventory -> { - this.initConditionAssessmentEO(taskInventory.getProjectLawsInventoryId()); - }); - - //更新log - String serialNumber = dataList.stream().map(e->e.getSerialNumber()).collect(Collectors.joining(",")); - LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - String username = sysUser.getUsername(); - String contentLog = username+"向清单中导入了“"+serialNumber+"”"; - String enContentLog = username+" imported “"+serialNumber+"” into the list."; - projectLawsInventoryLogEOService.updateLog(contentLog, dataList.get(0).getProjectLibraryId(),CutEnum.CN.getValue()); - projectLawsInventoryLogEOService.updateLog(enContentLog, dataList.get(0).getProjectLibraryId(),CutEnum.EN.getValue()); - } - } + return msgList; } +// private void importDatas(List dataList, +// List dictItemList, +// String zipEntryName, +// File saveDirectory, +// ProjectLawsInventoryEO projectLawsInventoryEOTemp, +// List categoryList, +// String dataSource) { +// String dictId = sysCategoryMapper.getDictId("deliverable_template"); +// List collect = categoryList.stream().filter(e -> e.getSysDictId().equals(dictId)).collect(Collectors.toList()); +// List treeNameList = new ArrayList<>(); +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ +// treeNameList = collect.stream().map(SysCategory::getName).collect(Collectors.toList()); +// }else{ +// treeNameList = collect.stream().map(SysCategory::getEnName).collect(Collectors.toList()); +// } +// int i = 3; +// List msgList = new ArrayList<>(); +// String value = ""; +// boolean flag = true; +// +// //编号验证 +// verifySerialNumber(dataList,projectLawsInventoryEOTemp,dataSource); +// for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { +// i++; +// String errorMsg = ""; +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ +// errorMsg = "第" + i + "行:"; +// }else{ +// errorMsg = i + " line:"; +// } +// //编号 +// String serialNumber = projectLawsInventoryEO.getSerialNumber(); +// //子标题subtitle +// String subtitle = projectLawsInventoryEO.getSubtitle(); +// //WVTA ID +// String wvtaId = projectLawsInventoryEO.getWvtaId(); +// //备注 remark +// String remark = projectLawsInventoryEO.getRemark(); +// //认证级别 +// String attestationRank = projectLawsInventoryEO.getAttestationRank(); +// //责任领域 +// String dutyTerritory = projectLawsInventoryEO.getDutyTerritory(); +// //认证类型 +// String attestationType = projectLawsInventoryEO.getAttestationType(); +// //实施类别 +// String implementType = projectLawsInventoryEO.getImplementType(); +// //法规工程师regulationOwnerId +// String regulationOwnerId = projectLawsInventoryEO.getRegulationOwnerId(); +// +// //认证工程师homologationEngineerId +// String homologationEngineerId = projectLawsInventoryEO.getHomologationEngineerId(); +// +// //工程接口人engineeringInterfacePerson +// String engineeringInterfacePerson = projectLawsInventoryEO.getEngineeringInterfacePerson(); +// +// //设计交付物类型 +// String designDeliverableType = projectLawsInventoryEO.getDesignDeliverableType(); +// //设计发起人 +// String designInitiator = projectLawsInventoryEO.getDesignInitiatorId(); +// //设计责任人 +// String designDuty = projectLawsInventoryEO.getDesignDutyId(); +// //设计截止时间designDueDate +// Date designDueDate = projectLawsInventoryEO.getDesignDueDate(); +// +// //pre交付物类型 +// String prehomoDeliverableType = projectLawsInventoryEO.getPrehomoDeliverableType(); +// //pre发起人 +// String prehomoInitiator = projectLawsInventoryEO.getPrehomoInitiatorId(); +// //pre责任人 +// String prehomoDuty = projectLawsInventoryEO.getPrehomoDutyId(); +// //pre截止时间prehomoDueDate +// Date prehomoDueDate = projectLawsInventoryEO.getPrehomoDueDate(); +// +// //确认交付物类型 +// String verifyDeliverableType = projectLawsInventoryEO.getVerifyDeliverableType(); +// //确认发起人 +// String verifyInitiator = projectLawsInventoryEO.getVerifyInitiatorId(); +// //确认责任人 +// String verifyDuty = projectLawsInventoryEO.getVerifyDutyId(); +// //确认截止时间verifyDueDate +// Date verifyDueDate = projectLawsInventoryEO.getVerifyDueDate(); +// +// //文件 +// String designDeliverableTemplate = projectLawsInventoryEO.getDesignDeliverableTemplate(); +// String prehomoDeliverableTemplate = projectLawsInventoryEO.getPrehomoDeliverableTemplate(); +// String verifyDeliverableTemplate = projectLawsInventoryEO.getVerifyDeliverableTemplate(); +// +// //编号(输入框必填) +// flag = must(projectLawsInventoryEO, errorMsg, msgList, serialNumber, "编号", "Number"); +// +// //子标题 +// if(StringUtils.isNotBlank(subtitle)){ +// if(subtitle.length() > 300){ +// String message = ""; +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ +// message = errorMsg + "子标题不能超过300个字符, "; +// }else{ +// message = errorMsg + " Subheadings cannot be checked more than 300 characters, "; +// } +// msgList.add(message); +// } +// } +// //WVTA ID +// if(StringUtils.isNotBlank(wvtaId)){ +// if(wvtaId.length() > 100){ +// String message = ""; +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ +// message = errorMsg + "WVTA ID不能超过100个字符, "; +// }else{ +// message = errorMsg + " The WVTA ID cannot contain more than 100 characters, "; +// } +// msgList.add(message); +// } +// } +// //备注 remark +// if(StringUtils.isNotBlank(remark)){ +// if(remark.length() > 300){ +// String message = ""; +// if(CutEnum.CN.getValue().equals(projectLawsInventoryEOTemp.getCut())){ +// message = errorMsg + "备注不能超过300个字符, "; +// }else{ +// message = errorMsg + " Note The value cannot exceed 300 characters, "; +// } +// msgList.add(message); +// } +// } +// +// //实施类别(单选不必填) +// value = pullSingle(dictItemList, projectLawsInventoryEO, errorMsg, implementType,msgList,"实施类别","Usage","implement_type"); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setImplementType(value); +// } +// //认证类型(单选不必填) +// value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, attestationType,msgList,"认证类型","Certification Type","attestation_type"); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setAttestationType(value); +// } +// +// //认证级别(多选必填) +// flag = must(projectLawsInventoryEO, errorMsg, msgList, attestationRank,"认证级别","Certification Level"); +// if(flag){ +// value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, attestationRank,msgList,"认证级别","Certification Level","attestation_rank"); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setAttestationRank(value); +// } +// } +// +// //责任领域(多选必填) +// flag = must(projectLawsInventoryEO, errorMsg, msgList, dutyTerritory,"责任领域","Responsible Field"); +// if(flag){ +// value = pullMore(dictItemList, projectLawsInventoryEO, errorMsg, dutyTerritory,msgList,"责任领域","Responsible Field","duty_territory"); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setDutyTerritory(value); +// } +// } +// //工程接口人(责任领域下的工程接口人) +// Map objectMap = iProjectRelatedPersonnelService.queryPersonByProjectId(projectLawsInventoryEOTemp.getProjectLibraryId(), value); +// +// //法规工程师 +// List> mapLawList = (List>) objectMap.get("lawEngineerList"); +// //认证工程师 +// List> mapCertificationList = (List>) objectMap.get("certificationEngineerList"); +// //工程接口人 +// List> mapPersonList = (List>) objectMap.get("engineeringInterfacePersonList"); +// //所有人 +// List> allPersonList = (List>) objectMap.get("allPersonList"); +// +// String nameCn = ""; +// String nameEn = ""; +// //法规工程师 +// if(StringUtils.isNotBlank(regulationOwnerId)){ +// nameCn = "法规工程师"; +// nameEn = "regulatory engineer"; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList, regulationOwnerId, mapLawList,nameCn,nameEn,ProjectRoleEnum.REGULATI_ENGINEER.getValue()); +// } +// +// //认证工程师 +// if(StringUtils.isNotBlank(homologationEngineerId)){ +// nameCn = "认证工程师"; +// nameEn = "certification engineer "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList, homologationEngineerId, mapCertificationList,nameCn,nameEn,ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue()); +// } +// +// //工程接口人 +// if(StringUtils.isNotBlank(engineeringInterfacePerson)){ +// nameCn = "工程接口人"; +// nameEn = "Engineering Interface "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList, engineeringInterfacePerson, mapPersonList,nameCn,nameEn,ProjectRoleEnum.ENGINEERING_INTERFACE_PERSON.getValue()); +// } +// +// +// //设计 +// //交付物类型 +// value = tree(categoryList,treeNameList, projectLawsInventoryEO, errorMsg, designDeliverableType,msgList,"交付物类型","Deliverable Type","deliverable_template"); +// if(StringUtils.isNotBlank(value)){ +// String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); +// projectLawsInventoryEO.setDesignDeliverableType(treeId); +// } +// +// //交付物模板 +// value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, designDeliverableTemplate,msgList,"交付物模板","Deliverable Template",dataSource); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setDesignDeliverableTemplate(value); +// } +// +// //发起人 +// if(StringUtils.isNotBlank(designInitiator)){ +// nameCn = "设计符合性确认发起人"; +// nameEn = "confirm design conformance initiator "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList, designInitiator, allPersonList,nameCn,nameEn,ProjectRoleEnum.DESIGNINITIATOR.getValue()); +// } +// +// //责任人 +// if(StringUtils.isNotBlank(designDuty)){ +// nameCn = "设计符合性确认责任人"; +// nameEn = "confirm design conformance responsible"; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList, designDuty, allPersonList,nameCn,nameEn,ProjectRoleEnum.DESIGNDUTY.getValue()); +// } +// +// //截止时间 +// flag = dateVerify(projectLawsInventoryEO, errorMsg, designDueDate,msgList,"在产车实施日期","on the production vehicle implementation date"); +// if(flag){ +// projectLawsInventoryEO.setImplementTime(designDueDate); +// } +// +// +// //pre +// //交付物类型 +// value = tree(categoryList, treeNameList,projectLawsInventoryEO, errorMsg, prehomoDeliverableType,msgList,"交付物类型","Deliverable Type","deliverable_template"); +// if(StringUtils.isNotBlank(value)){ +// String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); +// projectLawsInventoryEO.setPrehomoDeliverableType(treeId); +// } +// +// //交付物模板 +// value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, prehomoDeliverableTemplate,msgList,"交付物模板","Deliverable Template",dataSource); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setPrehomoDeliverableTemplate(value); +// } +// +// //发起人 +// if(StringUtils.isNotBlank(prehomoInitiator)){ +// nameCn = "Pre-homo确认发起人"; +// nameEn = "Pre-homo identifies the initiator "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList, prehomoInitiator, allPersonList,nameCn,nameEn,ProjectRoleEnum.PREHOMOINITIATOR.getValue()); +// } +// +// //责任人 +// if(StringUtils.isNotBlank(prehomoDuty)){ +// nameCn = "Pre-homo确认责任人"; +// nameEn = "Pre-homo identifies the person responsible "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList,prehomoDuty, allPersonList,nameCn,nameEn,ProjectRoleEnum.PREHOMODUTY.getValue()); +// } +// +// //截止时间 +// flag = dateVerify(projectLawsInventoryEO, errorMsg, prehomoDueDate,msgList,"在产车实施日期","on the production vehicle implementation date"); +// if(flag){ +// projectLawsInventoryEO.setPrehomoDueDate(prehomoDueDate); +// } +// +// //确认 +// //交付物类型 +// value = tree(categoryList,treeNameList,projectLawsInventoryEO, errorMsg, verifyDeliverableType,msgList,"交付物类型","Deliverable Type","deliverable_template"); +// if(StringUtils.isNotBlank(value)){ +// String treeId = getTreeId(categoryList, projectLawsInventoryEOTemp, treeNameList, value); +// projectLawsInventoryEO.setVerifyDeliverableType(treeId); +// } +// +// //交付物模板 +// value = templateTransition(zipEntryName, projectLawsInventoryEO, errorMsg, verifyDeliverableTemplate,msgList,"交付物模板","Deliverable Template",dataSource); +// if(StringUtils.isNotBlank(value)){ +// projectLawsInventoryEO.setVerifyDeliverableTemplate(value); +// } +// +// +// //发起人 +// if(StringUtils.isNotBlank(verifyInitiator)){ +// nameCn = "验证符合性确认发起人"; +// nameEn = "verify conformance validates the originator "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList,verifyInitiator, allPersonList,nameCn,nameEn,ProjectRoleEnum.VERIFYINITIATOR.getValue()); +// } +// +// //责任人 +// if(StringUtils.isNotBlank(verifyDuty)){ +// nameCn = "验证符合性确认责任人"; +// nameEn = "verify conformance to confirm the responsible person "; +// //验证人员是否存在 +// personnelVerify(projectLawsInventoryEO, errorMsg, msgList,verifyDuty, allPersonList,nameCn,nameEn,ProjectRoleEnum.VERIFYDUTY.getValue()); +// } +// +// +// //截止时间 +// flag = dateVerify(projectLawsInventoryEO, errorMsg, verifyDueDate,msgList,"在产车实施日期","on the production vehicle implementation date"); +// if(flag){ +// projectLawsInventoryEO.setVerifyDueDate(verifyDueDate); +// } +// } +// +// if (msgList.size() > 0) { +// //返回报错信息 +// String html = ""; +// for (String s : msgList) { +// html += s + "
"; +// } +// FileUnZip.deleteDir(saveDirectory); +// throw new JeroBootException(html); +// } else { +// if (dataList.size() != 0) { +// this.saveBatch(dataList); +// //项目任务清单数据初始化。 +// List projectTaskInventoryEOList = new ArrayList<>(); +// for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { +// ProjectTaskInventoryEO projectTaskInventoryEO = new ProjectTaskInventoryEO(); +// String projectTaskInventoryId = UUID.randomUUID().toString().replace("-", ""); +// projectTaskInventoryEO.setId(projectTaskInventoryId); +// projectTaskInventoryEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId()); +// projectLawsInventoryEO.setStandId(projectLawsInventoryEO.getStandId()); +// projectTaskInventoryEOList.add(projectTaskInventoryEO); +// } +// this.projectTaskInventoryEOService.saveBatch(projectTaskInventoryEOList); +// //初始化项目状态评估 +// projectTaskInventoryEOList.forEach(taskInventory -> { +// this.initConditionAssessmentEO(taskInventory.getProjectLawsInventoryId()); +// }); +// +// //更新log +// String serialNumber = dataList.stream().map(e->e.getSerialNumber()).collect(Collectors.joining(",")); +// LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); +// String username = sysUser.getUsername(); +// String contentLog = username+"向清单中导入了“"+serialNumber+"”"; +// String enContentLog = username+" imported “"+serialNumber+"” into the list."; +// projectLawsInventoryLogEOService.updateLog(contentLog, dataList.get(0).getProjectLibraryId(),CutEnum.CN.getValue()); +// projectLawsInventoryLogEOService.updateLog(enContentLog, dataList.get(0).getProjectLibraryId(),CutEnum.EN.getValue()); +// } +// } +// } private String tree(List categoryList,List nameList,ProjectLawsInventoryEO projectLawsInventoryEO, String errorMsg, String value,List msgList, @@ -4970,7 +6119,9 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl dataList,ProjectLawsInventoryEO projectLawsInventoryEOTemp){ + private void verifySerialNumber(List dataList, + ProjectLawsInventoryEO projectLawsInventoryEOTemp, + String dataSource){ //1. 验证标准号在文档库中是否存在 List serialNumberList = dataList.stream().map(ProjectLawsInventoryEO::getSerialNumber).collect(Collectors.toList()); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); @@ -4990,29 +6141,31 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.in(ProjectLawsInventoryEO::getSerialNumber,serialNumberList).in(ProjectLawsInventoryEO::getProjectLibraryId,projectLawsInventoryEOTemp.getProjectLibraryId()); - List projectLawsInventoryEOList = this.list(lambdaQueryWrapper); - List serialNumberTempList = projectLawsInventoryEOList.stream().map(ProjectLawsInventoryEO::getSerialNumber).collect(Collectors.toList()); - if(projectLawsInventoryEOList.size() > 0){ - if(CutEnum.CN.getValue().equals(dataList.get(0).getCut())){ - throw new JeroBootException(StringUtils.join(serialNumberTempList,",")+"已存在,不能重复添加"); - }else{ - throw new JeroBootException(StringUtils.join(serialNumberTempList,",")+" already exists and cannot be added again"); + //导入数据为列表导出的数据时,不需要一下验证 + if(!DataSourceEnum.LIST_DATA.getValue().equals(dataSource)){ + //2. 验证标准号在法规清单中是否添加过 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.in(ProjectLawsInventoryEO::getSerialNumber,serialNumberList).in(ProjectLawsInventoryEO::getProjectLibraryId,projectLawsInventoryEOTemp.getProjectLibraryId()); + List projectLawsInventoryEOList = this.list(lambdaQueryWrapper); + List serialNumberTempList = projectLawsInventoryEOList.stream().map(ProjectLawsInventoryEO::getSerialNumber).collect(Collectors.toList()); + if(projectLawsInventoryEOList.size() > 0){ + if(CutEnum.CN.getValue().equals(dataList.get(0).getCut())){ + throw new JeroBootException(StringUtils.join(serialNumberTempList,",")+"已存在,不能重复添加"); + }else{ + throw new JeroBootException(StringUtils.join(serialNumberTempList,",")+" already exists and cannot be added again"); + } + } + //3. 通过编号将导入的数据与文档库进行关联 + for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { + List collect = bussDocumentLibraryEOList.stream() + .filter(e -> e.getSerialNumber().equals(projectLawsInventoryEO.getSerialNumber())).collect(Collectors.toList()); + projectLawsInventoryEO.setTitle(collect.get(0).getTitle());//标题 + projectLawsInventoryEO.setCorrespondingStandard(collect.get(0).getCorrespondingStandard());//对应标准 + projectLawsInventoryEO.setRegion(collect.get(0).getRegion());//适用地区 + projectLawsInventoryEO.setImplementTime(collect.get(0).getImplementTime());//在产车实施日期 + projectLawsInventoryEO.setXin1Che1Xing2Shi2Shi1Ri4Qi1(collect.get(0).getXin1Che1Xing2Shi2Shi1Ri4Qi1());//新车实施日期 + projectLawsInventoryEO.setStandId(collect.get(0).getId());//新车实施日期 } - } - //3. 通过编号将导入的数据与文档库进行关联 - for (ProjectLawsInventoryEO projectLawsInventoryEO : dataList) { - List collect = bussDocumentLibraryEOList.stream() - .filter(e -> e.getSerialNumber().equals(projectLawsInventoryEO.getSerialNumber())).collect(Collectors.toList()); - projectLawsInventoryEO.setTitle(collect.get(0).getTitle());//标题 - projectLawsInventoryEO.setCorrespondingStandard(collect.get(0).getCorrespondingStandard());//对应标准 - projectLawsInventoryEO.setRegion(collect.get(0).getRegion());//适用地区 - projectLawsInventoryEO.setImplementTime(collect.get(0).getImplementTime());//在产车实施日期 - projectLawsInventoryEO.setXin1Che1Xing2Shi2Shi1Ri4Qi1(collect.get(0).getXin1Che1Xing2Shi2Shi1Ri4Qi1());//新车实施日期 - projectLawsInventoryEO.setStandId(collect.get(0).getId());//新车实施日期 } } @@ -5124,9 +6277,16 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl valueList = new ArrayList<>(); if (StringUtils.isNotBlank(value)) { List list = Arrays.asList(value.split(",")); - List collect = dictItemList.stream().filter(e ->dictCode.equals(e.getDictCode()) && list.contains(e.getItemText())).collect(Collectors.toList()); - if(list.size() == collect.size()){ - valueList = collect.stream().map(SysDictItem::getItemValue).collect(Collectors.toList()); + List sysDictItemList = new ArrayList<>(); + if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ + sysDictItemList = dictItemList.stream().filter(e ->dictCode.equals(e.getDictCode()) && list.contains(e.getItemText())).collect(Collectors.toList()); + }else{ + sysDictItemList = dictItemList.stream().filter(e ->dictCode.equals(e.getDictCode()) && list.contains(e.getEnName())).collect(Collectors.toList()); + } + + if(list.size() == sysDictItemList.size()){ + valueList = sysDictItemList.stream().map(SysDictItem::getItemValue).collect(Collectors.toList()); + }else{ //数据中有与数据字典不匹配的值 List finalValueList = valueList; @@ -5154,8 +6314,14 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl collect = dictItemList.stream().filter(e ->dictCode.equals(e.getDictCode()) && value.equals(e.getItemText())).collect(Collectors.toList()); - if (collect.size() == 0) { + List sysDictItemList = new ArrayList<>(); + if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ + sysDictItemList = dictItemList.stream().filter(e ->dictCode.equals(e.getDictCode()) && value.equals(e.getItemText())).collect(Collectors.toList()); + }else{ + sysDictItemList = dictItemList.stream().filter(e ->dictCode.equals(e.getDictCode()) && value.equals(e.getEnName())).collect(Collectors.toList()); + } + + if (sysDictItemList.size() == 0) { if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ errorMsg += nameCn + "中的" + value + "与数据字典不匹配, "; }else{ @@ -5163,7 +6329,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl msgList, - String nameCn,String nameEn) { + String nameCn,String nameEn,String dataSource) { String value = ""; if (StringUtils.isNotBlank(designDeliverableTemplate)) { StringBuilder sb = new StringBuilder(); for (String fileName : designDeliverableTemplate.split(",")) { - List nowFileList = FileUnZip.readFileByFilename(zipEntryName, fileName,projectLawsInventoryEO.getCut(),errorMsg,msgList,nameCn,nameEn); + List nowFileList = new ArrayList<>(); + if(DataSourceEnum.LIST_DATA.getValue().equals(dataSource)){ + nowFileList = FileUnZip.readFileByFilenameDataList(zipEntryName, fileName,projectLawsInventoryEO.getCut(),errorMsg,msgList,nameCn,nameEn,projectLawsInventoryEO); + }else{ + nowFileList = FileUnZip.readFileByFilename(zipEntryName, fileName,projectLawsInventoryEO.getCut(),errorMsg,msgList,nameCn,nameEn); + } if (nowFileList.size() == 0) { // if(CutEnum.CN.getValue().equals(projectLawsInventoryEO.getCut())){ // errorMsg += "压缩包中没有" + fileName + "文件; "; @@ -5212,79 +6383,100 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl implements IProjectLawsInventoryRejectCauseEOService { + @Autowired + private TaskFeignClient taskFeignClient; + /** * 保存 * @@ -35,6 +45,35 @@ public class ProjectLawsInventoryRejectCauseEOServiceImpl extends ServiceImpl taskIdList = Arrays.asList(projectLawsInventoryRejectCauseEO.getTaskIds().split(",")); + + List insertEOList = new ArrayList<>(); + // 获取法规清单id + for(String taskId : taskIdList) { + ProjectLawsInventoryRejectCauseEO insertEO = new ProjectLawsInventoryRejectCauseEO(); + BeanUtils.copyProperties(projectLawsInventoryRejectCauseEO, insertEO); + + String taskDetailJson = taskFeignClient.queryTaskDetailByTaskIds(taskId); + ProjectLawsInventoryEO projectLawsInventoryEO = JSONObject.parseObject(taskDetailJson, ProjectLawsInventoryEO.class); + insertEO.setProjectLawsInventoryId(projectLawsInventoryEO.getId()); + insertEO.setTaskIds(null); + Date now = new Date(); + insertEO.setCreateTime(now); + insertEO.setUpdateTime(now); + + insertEOList.add(insertEO); + } + saveBatch(insertEOList); + } + /** * 更新 * diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/Docx4jUtils.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/Docx4jUtils.java index 6f58696cb..862e8e2ed 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/Docx4jUtils.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/Docx4jUtils.java @@ -100,6 +100,70 @@ public final class Docx4jUtils { return true; } + /** + * cleanDocumentPart + * + * @param documentPart + */ + public static boolean cleanDocumentPartDouble(MainDocumentPart documentPart) throws Exception { + if (documentPart == null) { + return false; + } + Document document = documentPart.getContents(); + String wmlTemplate = + XmlUtils.marshaltoString(document, true, false, Context.jc); + wmlTemplate = cleanXmlString(wmlTemplate); + document = (Document) XmlUtils.unwrap(DocxVariableClearUtils.doCleanDocumentPart(wmlTemplate, Context.jc)); +// document = (Document) DocumentHelper.parseText(wmlTemplate); + documentPart.setContents(document); + return true; + } + + public static String cleanXmlString(String string) { + + StringBuilder appender = new StringBuilder(); + + //判断每一行数据中不包含'$'的数据先添加进新文件 + if (!string.contains("$")) { + appender.append(string); + return appender.toString(); + } + //如果一行数据中包含'$'变量符将替换为'#$' + string = string.replaceAll("\\$", "#\\$"); + //然后以'#'切割成每一行(数组),这样一来'$'都将在每一行的开头 + String[] ss = string.split("#"); + + //遍历每一行(数组ss) + for (int i = 0; i < ss.length; i++) { + // 同一行的数据写到同一行,文件追加自动换行了(最后的完整数据) + StringBuilder sb = new StringBuilder(); + //暂存数据 + String s1 = ss[i]; + //将不是以'$'开头的行数据放进StringBuilder + if (!s1.startsWith("$")) { + if (i > 0) { + sb.append("#"); + } + sb.append(s1); + appender.append(sb.toString()); + continue; + } + //被分离的数据一般都是'${'这样被分开 + //匹配以'$'开头的变量找到'}' 得到索引位置 + int i1 = s1.indexOf("}"); + //先切割得到这个完整体 + String substr = s1.substring(0, i1 + 1); + //把变量追加到StringBuilder + sb.append(substr.replaceAll("\n","").replaceAll("<[^>]+>", "")); + //再将标签数据追加到StringBuilder包裹变量 + sb.append(s1.substring(i1 + 1)); + + appender.append(sb.toString()); + } + + return appender.toString(); + } + /** * 清扫 docx4j 模板变量字符,通常以${variable}形式 *

diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/WordUtil.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/WordUtil.java index 4d66e753e..b492d8057 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/WordUtil.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/WordUtil.java @@ -59,6 +59,11 @@ public class WordUtil { documentPart.variableReplace((HashMap) map); } + public static void replaceVariableWithOutClear(WordprocessingMLPackage wordMLPackage, Map map) throws Exception { + MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart(); + documentPart.variableReplace((HashMap) map); + } + public static void replaceTable(String templatePath, int tableNum, int rowNum, List> dataList, String outPath) throws Exception { WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File(templatePath)); MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart(); @@ -203,7 +208,6 @@ public class WordUtil { public static void replacePictureBatch(WordprocessingMLPackage wordMLPackage, List> picList) throws Exception { try { MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart(); - Docx4jUtils.cleanDocumentPart(mainDocumentPart); Document wmlDoc = (Document)mainDocumentPart.getJaxbElement(); Body body = wmlDoc.getBody(); List textList = getAllPlaceholderElementFromObject(body); // 获取文档中所有占位符 @@ -241,7 +245,6 @@ public class WordUtil { */ public static Map filterParams(WordprocessingMLPackage wordMLPackage, Map params) throws Exception { MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart(); - Docx4jUtils.cleanDocumentPart(mainDocumentPart); Document wmlDoc = (Document)mainDocumentPart.getJaxbElement(); Body body = wmlDoc.getBody(); List textList = getAllPlaceholderElementFromObject(body); // 获取文档中所有占位符 diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/common/FileUnZip.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/common/FileUnZip.java index bd676b932..d40b912e5 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/common/FileUnZip.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/common/FileUnZip.java @@ -1,6 +1,7 @@ package com.jero.modules.split.common; import com.jero.common.constant.enums.CutEnum; +import com.jero.modules.project.entity.ProjectLawsInventoryEO; import com.xkcoding.http.util.StringUtil; import org.apache.commons.lang3.StringUtils; import org.apache.tools.zip.ZipEntry; @@ -169,6 +170,69 @@ public class FileUnZip { return resultlist; } + /** + * 根据文件名称读取固定目录下文件 + * 适用范围:filename内容 dir/file + * gaoyan + * @param filename + */ + public static List readFileByFilenameDataList(String path, + String filename, + String cut, + String errorMsg, + List msgList, + String nameCn, + String nameEn, + ProjectLawsInventoryEO projectLawsInventoryEO) { + //法规清单列表数据导入的时候,交付物模板字段为文件属性,填写时需要在本文件同级目录下以标准号为名称建立文件夹,并在文件夹下放置文件,假设在AAA标准号下放置了B.docx,则应填写AAA/B.docx + filename = projectLawsInventoryEO.getSerialNumber()+"/"+filename; + String filenameOne = ""; + String filenameTwo = ""; + if(filename.contains("/")){ + filenameOne = filename.split("/")[0]; + filenameTwo = filename.split("/")[1]; + } + List resultlist = new ArrayList<>(); + if (StringUtil.isNotEmpty(path)){ + File file = new File(path); + if (file.isDirectory()) { + File[] files = file.listFiles(); + for (File fi : files) { + if(fi.isDirectory()){ + File[] filesTemp = fi.listFiles(); + for (File fileTemp : filesTemp) { + // 对文件进行过滤 + if (fileTemp.getName().equals(filenameTwo) && fi.getName().equals(filenameOne) && StringUtils.isNotBlank(filenameOne)) { + resultlist.add(fileTemp); + } + } + }else{ + // 对文件进行过滤 + if (fi.getName().equals(filenameTwo) && fi.getPath().contains(filenameOne) && StringUtils.isNotBlank(filenameOne)) { + resultlist.add(fi); + } + } + } + } + } + if(resultlist.size() == 0){ + String name = ""; + if(filename.contains("/")){ + name = filenameTwo; + }else{ + name = filename; + } + if(CutEnum.CN.getValue().equals(cut)){ + errorMsg += nameCn + name + "格式不正确或者压缩包中没有" + name + "文件,请参考模板下载中的说明"; + }else{ + errorMsg += nameEn + name + " Incorrect format or not present in compressed package " + name + " file please refer to the description in template download;"; + } + if(msgList != null){ + msgList.add(errorMsg); + } + } + return resultlist; + } /** * 根据文件名称读取固定目录下文件 * 适用范围:filename内容 dir/file diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/controller/workFlowController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/controller/workFlowController.java index 8d1c4b8fd..0d4502e30 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/controller/workFlowController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/controller/workFlowController.java @@ -97,6 +97,22 @@ public class workFlowController { return str; } + @AutoLog(value = "批量完成任务") + @ApiOperation(value="批量完成任务", notes="批量完成任务") + @PostMapping("/completeTaskBatch") + public Result completeTaskByUserIdBatch(@RequestBody BusMes busMes){ + if(StringUtils.isEmpty(busMes.getUserId())){ + LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + busMes.setUserId(currentUser.getId()); + } + Result str = workFlowFeignClient.completeTaskByUserIdBatch(busMes); + if(str.getCode() == 500){ + str.setSuccess(false); + } +// sendWebsocket(busMes.getTaskId(),busMes.getTaskId()); + return str; + } + public void sendWebsocket(String msgId, String msgTet) { com.alibaba.fastjson.JSONObject obj = new com.alibaba.fastjson.JSONObject(); obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_TOPIC); diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/entity/BusMes.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/entity/BusMes.java index 9efe58262..c60926925 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/entity/BusMes.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/entity/BusMes.java @@ -28,6 +28,15 @@ public class BusMes { private String nowStateType; + private String flag; + private String approvalOpinion; // 反馈意见 待办流程-批量办理专用 + private String dreUserId; // 待办流程-批量办理专用 + private String dreUserIdName; // 待办流程-批量办理专用 + private String handlingTime; // 待办流程-批量办理专用 + private String projectLawsInventoryIds; // 待办流程-批量办理专用 + private String taskDefinitionKey; // 待办流程-批量办理专用 + + public String getUserId() { return userId; } @@ -128,4 +137,60 @@ public class BusMes { public String getNowStateType() { return nowStateType; } public void setNowStateType(String nowStateType) { this.nowStateType = nowStateType; } + + public String getFlag() { + return flag; + } + + public void setFlag(String flag) { + this.flag = flag; + } + + public String getApprovalOpinion() { + return approvalOpinion; + } + + public void setApprovalOpinion(String approvalOpinion) { + this.approvalOpinion = approvalOpinion; + } + + public String getDreUserId() { + return dreUserId; + } + + public void setDreUserId(String dreUserId) { + this.dreUserId = dreUserId; + } + + public String getDreUserIdName() { + return dreUserIdName; + } + + public void setDreUserIdName(String dreUserIdName) { + this.dreUserIdName = dreUserIdName; + } + + public String getHandlingTime() { + return handlingTime; + } + + public void setHandlingTime(String handlingTime) { + this.handlingTime = handlingTime; + } + + public String getProjectLawsInventoryIds() { + return projectLawsInventoryIds; + } + + public void setProjectLawsInventoryIds(String projectLawsInventoryIds) { + this.projectLawsInventoryIds = projectLawsInventoryIds; + } + + public String getTaskDefinitionKey() { + return taskDefinitionKey; + } + + public void setTaskDefinitionKey(String taskDefinitionKey) { + this.taskDefinitionKey = taskDefinitionKey; + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/entity/BusProcessName.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/entity/BusProcessName.java index 7649958a1..29eeb524d 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/entity/BusProcessName.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/entity/BusProcessName.java @@ -1,6 +1,5 @@ package com.jero.modules.wkflow.entity; -import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModel; import lombok.Data; import lombok.EqualsAndHashCode; @@ -73,4 +72,6 @@ public class BusProcessName implements Serializable { private String projectName; private String handlingTime; + + private String projectLawsInventoryId; } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/WorkFlowFeignClient.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/WorkFlowFeignClient.java index 5cf557492..0490604f4 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/WorkFlowFeignClient.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/WorkFlowFeignClient.java @@ -36,6 +36,14 @@ public interface WorkFlowFeignClient { @RequestMapping(value = "/bat-wkflow/completeTask",method = RequestMethod.POST) Result completeTaskByUserId(@RequestBody BusMes busMes); + /** + * 批量完成任务 + * @param busMes + * @return + */ + @RequestMapping(value = "/bat-wkflow/completeTaskBatch",method = RequestMethod.POST) + Result completeTaskByUserIdBatch(@RequestBody BusMes busMes); + /** * 通过流程实例id查询当前待办的流程实例是否结束 * @param prcId diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/impl/WorkFlowFeignClientImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/impl/WorkFlowFeignClientImpl.java index ae1940c04..e8db6f85e 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/impl/WorkFlowFeignClientImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/wkflow/feginClient/impl/WorkFlowFeignClientImpl.java @@ -46,6 +46,16 @@ public class WorkFlowFeignClientImpl{ return stringWrapper; } + /** + * 批量完成任务 + * @param busMes + * @return + */ + public Result completeTaskByUserIdBatch( BusMes busMes){ + Result stringWrapper = workFlowFeignClient.completeTaskByUserIdBatch(busMes); + return stringWrapper; + } + /** * 通过流程实例id查询当前待办的流程实例是否结束 * @param prcId diff --git a/jero-web/src/common/lang/en-us.js b/jero-web/src/common/lang/en-us.js index 66dd59a4c..7eafd047e 100644 --- a/jero-web/src/common/lang/en-us.js +++ b/jero-web/src/common/lang/en-us.js @@ -1292,4 +1292,10 @@ module.exports = { Deletetitle:'Delete the title', toConfirmed: 'to confirm', confirmtitle:'The title is incorrect. Please re-enter it', + batchProcessing:'Batch Processing', + onlyDataTaskConfirmationProcessSelected:'Only data of task confirmation process can be selected', + processNode:'Process Node', + personChargeReceivesTheTask:'Person in charge receives the task', + theResponsiblePersonTaskForTheSecondTime:'The responsible person receives the task for the second time', + processNodesAreInconsistentPleaseSelectConsistentData:'Process nodes are inconsistent; Please select consistent data', } \ No newline at end of file diff --git a/jero-web/src/common/lang/zh-cn.js b/jero-web/src/common/lang/zh-cn.js index 960943483..251fe8bd5 100644 --- a/jero-web/src/common/lang/zh-cn.js +++ b/jero-web/src/common/lang/zh-cn.js @@ -1394,4 +1394,10 @@ module.exports = { Deletetitle:'删除标题', toConfirmed: '来确认', confirmtitle:'标题不正确,请重新输入', + batchProcessing:'批量办理', + onlyDataTaskConfirmationProcessSelected:'只能选择流程类型为任务确认流程的数据', + processNode:'流程节点', + personChargeReceivesTheTask:'责任人接收任务', + theResponsiblePersonTaskForTheSecondTime:'责任人二次接收任务', + processNodesAreInconsistentPleaseSelectConsistentData:'流程节点不一致;请选择一致的数据', } \ No newline at end of file diff --git a/jero-web/src/components/TaskCutOffTime/index.vue b/jero-web/src/components/TaskCutOffTime/index.vue index 513d2861f..2837302dd 100644 --- a/jero-web/src/components/TaskCutOffTime/index.vue +++ b/jero-web/src/components/TaskCutOffTime/index.vue @@ -238,6 +238,7 @@ export default { if(res.data.result.length == 0){ this.visibleoperationFailed = false this.textLoading = false + this.visible = false _this.$message.success(this.$t('OperationSuccessful')) this.$emit('areaVisibleTaskCutOffTimeflag', false) this.$emit('GetgetTableList') @@ -246,6 +247,7 @@ export default { this.NotSelectedRowKeysValue = res.data.result this.visibleoperationFailed = true this.textLoading = false + this.visible = false } // this.$emit('areaVisibleTaskCutOffTimeflag', false) diff --git a/jero-web/src/components/TaskCutOffTime/indexonekey.vue b/jero-web/src/components/TaskCutOffTime/indexonekey.vue index 8a79f9690..f266acc78 100644 --- a/jero-web/src/components/TaskCutOffTime/indexonekey.vue +++ b/jero-web/src/components/TaskCutOffTime/indexonekey.vue @@ -239,12 +239,14 @@ export default { _this.$message.success(this.$t('OperationSuccessful')) this.$emit('areaVisibleTaskCutOffTimeAll', false) this.$emit('GetgetTableList') + this.visible = false this.textLoading = false }else{ this.NotSelectedRowKeysValue = res.data.result this.visibleoperationFailed = true this.textLoading = false + this.visible = false } // this.$emit('areaVisibleTaskCutOffTime', false) diff --git a/jero-web/src/views/processCenter/components/examineInformation.vue b/jero-web/src/views/processCenter/components/examineInformation.vue index cfbefa921..2f97ec816 100644 --- a/jero-web/src/views/processCenter/components/examineInformation.vue +++ b/jero-web/src/views/processCenter/components/examineInformation.vue @@ -135,7 +135,7 @@ dreUserIdName: [ { required: true, - message: this.$t('selectIssuer') + this.$t('cannotEmpty'), + message: this.$t('selectInquiry') + this.$t('cannotEmpty'), trigger: 'change' } ], diff --git a/jero-web/src/views/processCenter/processList/tabComponents/processCenter/components/batchProcessing.vue b/jero-web/src/views/processCenter/processList/tabComponents/processCenter/components/batchProcessing.vue new file mode 100644 index 000000000..1ea338cea --- /dev/null +++ b/jero-web/src/views/processCenter/processList/tabComponents/processCenter/components/batchProcessing.vue @@ -0,0 +1,250 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/processCenter/processList/tabComponents/processCenter/index.vue b/jero-web/src/views/processCenter/processList/tabComponents/processCenter/index.vue index e6f9393d3..0a37d733a 100644 --- a/jero-web/src/views/processCenter/processList/tabComponents/processCenter/index.vue +++ b/jero-web/src/views/processCenter/processList/tabComponents/processCenter/index.vue @@ -1,9 +1,65 @@ @@ -37,13 +94,18 @@ import { getAction, postAction, deleteAction, downloadFile } from '@/api/manage' import { mapGetters } from 'vuex' import store from '@/store/' + import batchProcessing from './components/batchProcessing' import moment from 'moment' export default { name: 'ProcessCenter', + components: { + batchProcessing + }, data() { return { searchForm: {}, + queryParam: {}, total: 0, pageNo: 1, pageSize: 10, @@ -53,6 +115,20 @@ 5: this.$t('collectionOfRegulatoryOpinionsProcess'), 6: this.$t('regulatoryTechnologyAssessmentProcess') }, + processNodeList: [ + { + name: this.$t('personChargeReceivesTheTask'), + value: 'zrrjsrw' + }, + { + name: this.$t('engineerReply'), + value: 'dreqr' + }, + { + name: this.$t('theResponsiblePersonTaskForTheSecondTime'), + value: 'zrrqr' + } + ], columns: [ { title: this.$t('RelatedItems'), @@ -83,6 +159,13 @@ ellipsis: true, scopedSlots: { customRender: 'prcType' } }, + { + title: this.$t('processNode'), + dataIndex: 'taskInfo', + align: 'center', + width: 180, + ellipsis: true, + }, { title: this.$t('Sponsor'), dataIndex: 'creatUserName', @@ -136,18 +219,60 @@ }, methods: { ...mapGetters(['userInfo']), - onSelectChange() { - + onSelectChange(value) { + this.selectedRowKeys = [] + if (value && value.length > 0) { + value.forEach(res => { + res = JSON.parse(res) + if (res.prcType == '1') { + this.selectedRowKeys.push(JSON.stringify(res)) + } else { + this.$message.warning(this.$t('onlyDataTaskConfirmationProcessSelected')) + } + }) + } + }, + batchProcessingClick() { + if (this.selectedRowKeys && this.selectedRowKeys.length > 0) { + let selectedRowKeys = JSON.parse(JSON.stringify(this.selectedRowKeys)) + let content = [] + selectedRowKeys.forEach(res => { + content.push(JSON.parse(res)) + }) + for (let i = 0; i < content.length; i++) { + if (content[i].taskDefinitionKey != content[0].taskDefinitionKey) { + this.$message.warning(this.$t('processNodesAreInconsistentPleaseSelectConsistentData')) + return + } + } + this.$refs.batchProcessingRef.getData(JSON.parse(JSON.stringify(content))) + } else { + this.$message.warning(this.$t('selectLeastOne')) + } + }, + batchProcessingForm() { + this.pageNo = 1 + this.queryProcess() + }, + searchQuery() { + this.pageNo = 1 + this.queryProcess() + }, + searchReset() { + this.queryParam = {} + this.pageNo = 1 + this.queryProcess() }, queryProcess() { this.loading = true - let parmes = JSON.parse(JSON.stringify(this.searchForm)) + let parmes = JSON.parse(JSON.stringify(this.queryParam)) parmes.current = this.pageNo parmes.size = this.pageSize parmes.userId = this.userInfo().userId postAction('task/todoTaskList', parmes).then((res) => { this.dataSource = res.list || [] this.total = res.count + this.selectedRowKeys = [] this.loading = false }) }, @@ -192,8 +317,68 @@