diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/controller/StandardInterpretFlowController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/controller/StandardInterpretFlowController.java index 8cef2e7d..9327d33a 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/controller/StandardInterpretFlowController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/controller/StandardInterpretFlowController.java @@ -10,6 +10,7 @@ import com.jero.common.util.MessageUtils; import com.jero.common.util.SnowflakeUtils; import com.jero.modules.activiti.process.standardinterpret.dto.StandardInterpretFlowDTO; import com.jero.modules.activiti.process.standardinterpret.entity.ProcessStandardInterpretClause; +import com.jero.modules.activiti.process.standardinterpret.entity.ProcessStandardInterpretClauseSublist; import com.jero.modules.activiti.process.standardinterpret.service.StandardInterpretFlowService; import com.jero.modules.activiti.process.standardinterpret.vo.StandardInterpretFlowVO; import io.swagger.annotations.Api; @@ -20,7 +21,10 @@ import lombok.extern.slf4j.Slf4j; import org.activiti.engine.task.Task; import org.apache.poi.ss.formula.functions.T; import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -56,7 +60,7 @@ public class StandardInterpretFlowController { * * @return */ - @AutoLog(value = "标准解读流程-通过标准id查询分解单列表") + @AutoLog(value = "标准解读流程-通过标准id查询分解单列表", operateType = CommonConstant.OPERATE_TYPE_1) @ApiOperation(value="标准解读流程-通过标准id查询分解单列表", notes="标准解读流程-通过标准id查询分解单列表") @GetMapping(value = "/getFileByStandardId") public Result> queryFileByStandardId(String standardId) { @@ -92,7 +96,7 @@ public class StandardInterpretFlowController { * @param standardInterpretFlowDTO 标准解读流程对象 * @return 结果对象 */ - @AutoLog(value = "标准解读流程-流程保存") + @AutoLog(value = "标准解读流程-流程保存", operateType = CommonConstant.OPERATE_TYPE_3) @ApiOperation(value="标准解读流程-流程保存", notes="标准解读流程-流程保存") @PostMapping(value = "/flowSave") public Result flowSave(@RequestBody StandardInterpretFlowDTO standardInterpretFlowDTO) { @@ -132,7 +136,7 @@ public class StandardInterpretFlowController { * @param standardInterpretFlowDTO 标准解读流程对象 * @return 结果对象 */ - @AutoLog(value = "标准解读流程-驳回") + @AutoLog(value = "标准解读流程-驳回", operateType = CommonConstant.OPERATE_TYPE_3) @ApiOperation(value="标准解读流程-驳回", notes="标准解读流程-驳回") @PostMapping(value = "/flowReject") public Result flowReject(@RequestBody StandardInterpretFlowDTO standardInterpretFlowDTO) { @@ -144,7 +148,7 @@ public class StandardInterpretFlowController { * 标准解读流程-流程转办 * @return 结果对象 */ - @AutoLog(value = "标准解读流程-流程转办") + @AutoLog(value = "标准解读流程-流程转办", operateType = CommonConstant.OPERATE_TYPE_3) @ApiOperation(value="标准解读流程-流程转办", notes="标准解读流程-流程转办") @GetMapping(value = "/flowTransfer") public Result flowTransfer(@ApiParam("任务id") String taskId, @ApiParam("用户id") String userId) { @@ -152,6 +156,32 @@ public class StandardInterpretFlowController { return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); } + /** + * 标准解读流程-导出(标准主解读人分发) + */ + @AutoLog(value = "标准解读流程-导出(标准主解读人分发)", operateType = CommonConstant.OPERATE_TYPE_6) + @ApiOperation(value="标准解读流程-导出(标准主解读人分发)", notes="标准解读流程-导出(标准主解读人分发)") + @GetMapping(value = "/exportExcelByDistribute") + public ModelAndView exportExcelByDistribute(HttpServletRequest request) { + return standardInterpretFlowService.exportExcelByDistribute(request); + } + + /** + * 标准解读流程-导入(标准主解读人不分发) + * + * @param request + * @param response + * @return + */ + @AutoLog(value = "标准解读流程-标准解读流程-导入(标准主解读人不分发)") + @ApiOperation(value="标准解读流程-标准解读流程-导入(标准主解读人不分发)", notes="标准解读流程-标准解读流程-导入(标准主解读人不分发)") + @PostMapping(value = "/importExcelByUnDistribute") + @Translation + public Result> importExcelByUnDistribute(HttpServletRequest request, + HttpServletResponse response) throws Exception { + return standardInterpretFlowService.importExcelByUnDistribute(request, response); + } + /** * 标准解读流程-生成项目id * @return 项目id diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpret.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpret.java index b4e0a245..5abe4a6e 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpret.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpret.java @@ -21,6 +21,7 @@ import org.springframework.format.annotation.DateTimeFormat; public class ProcessStandardInterpret extends BaseEntity { /**主解读人*/ @ApiModelProperty(value = "主解读人") + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "CONCAT(realname, '(', username, ')')") private String masterInterpretId; /**父id*/ @ApiModelProperty(value = "父id") @@ -62,15 +63,19 @@ public class ProcessStandardInterpret extends BaseEntity { private String decompositionSource; /**是否下发(字典:1:是,2:否)*/ @ApiModelProperty(value = "是否下发(字典:1:是,2:否)") + @Dict(dicCode = "is_distribute") private String isDistribute; /**会签人员*/ @ApiModelProperty(value = "会签人员") + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "CONCAT(realname, '(', username, ')')") private String countersignPersonIds; /**审核人员*/ @ApiModelProperty(value = "审核人员") + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "CONCAT(realname, '(', username, ')')") private String uploader; /**批准人员*/ @ApiModelProperty(value = "批准人员") + @Dict(dictTable = "sys_user", dicCode = "id", dicText = "CONCAT(realname, '(', username, ')')") private String approvePersonId; } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpretClause.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpretClause.java index b97d50d5..d07827d4 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpretClause.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpretClause.java @@ -7,6 +7,7 @@ import com.jero.modules.laws.documenttool.entity.BaseEntity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import org.jeecgframework.poi.excel.annotation.Excel; /** * 标准解读流程_条款中间表(ProcessStandardInterpretClause)表实体类 @@ -26,17 +27,21 @@ public class ProcessStandardInterpretClause extends BaseEntity { /**条款号/标准编号*/ @ApiModelProperty(value = "条款号/标准编号") @TableField(exist = false) + @Excel(name = "标准编号/条款号", width = 15) private String itemNum; /**条款标题/标准名称*/ @ApiModelProperty(value = "条款标题/标准名称") @TableField(exist = false) + @Excel(name = "标准名称/条款标题", width = 15) private String itemTitle; /**条款内容*/ @ApiModelProperty(value = "条款内容") @TableField(exist = false) + @Excel(name = "条款内容", width = 15) private String itemContent; /**各涉及部门解读人*/ @ApiModelProperty(value = "各涉及部门解读人") + @Excel(name = "各涉及部门解读人", width = 15) private String interpretPersonIds; /**分解单来源(字典)*/ @ApiModelProperty(value = "分解单来源(字典)") diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpretClauseSublist.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpretClauseSublist.java index 6ae8f5ae..d6919858 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpretClauseSublist.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/entity/ProcessStandardInterpretClauseSublist.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.TableField; import com.jero.modules.laws.documenttool.entity.BaseEntity; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; /** * 标准解读流程_条款中间表_子表(ProcessStandardInterpretClauseSublist)表实体类 @@ -26,10 +27,12 @@ public class ProcessStandardInterpretClauseSublist extends BaseEntity { /**条款号/标准编号*/ @ApiModelProperty(value = "条款号/标准编号") @TableField(exist = false) + @Excel(name = "标准编号/条款号", width = 15) private String itemNum; /**条款标题/标准名称*/ @ApiModelProperty(value = "条款标题/标准名称") @TableField(exist = false) + @Excel(name = "标准名称/条款标题", width = 15) private String itemTitle; /**条款内容*/ @ApiModelProperty(value = "条款内容") @@ -40,93 +43,119 @@ public class ProcessStandardInterpretClauseSublist extends BaseEntity { private String interpretPersonId; /**译文*/ @ApiModelProperty(value = "译文") + @Excel(name = "译文", width = 15) private String translation; /**是否与上一版相同(字典:1:是,0:否)*/ @ApiModelProperty(value = "是否与上一版相同(字典:1:是,0:否)") + @Excel(name = "是否与上一版相同", width = 15) private String isSameAsPrevVersion; /**变化点说明*/ - @ApiModelProperty(value = "变化点说明") + @ApiModelProperty(value = "相对上一版变化点说明") + @Excel(name = "相对上一版变化点说明", width = 15) private String changeDescription; /**法规注释*/ @ApiModelProperty(value = "法规注释") + @Excel(name = "法规注释", width = 15) private String regulatoryNotes; /**涉及系统/部件)*/ @ApiModelProperty(value = "涉及系统/部件)") + @Excel(name = "涉及系统/部件", width = 15) private String keywords; /**涉及系统/部件)*/ @ApiModelProperty(value = "关键控制器)") + @Excel(name = "关键控制器", width = 15) private String keyController; - /**适用零部件*/ - @ApiModelProperty(value = "适用零部件") - private String applicableComponents; /**责任部门*/ @ApiModelProperty(value = "责任部门") + @Excel(name = "责任部门", width = 15) private String responsibleDepartment; /**责任部门专业模块*/ @ApiModelProperty(value = "责任部门专业模块") private String responsibleModule; /**关联部门*/ @ApiModelProperty(value = "关联部门") + @Excel(name = "关联部门", width = 15) private String relatedDepartment; /**关联部门专业模块*/ @ApiModelProperty(value = "关联部门专业模块") private String relatedModule; /**适用车型*/ @ApiModelProperty(value = "适用车型") + @Excel(name = "适用车型", width = 15) private String applications; /**动力类型*/ @ApiModelProperty(value = "动力类型") + @Excel(name = "动力类型", width = 15) private String powerType; /**专业领域*/ @ApiModelProperty(value = "专业领域") + @Excel(name = "专业领域", width = 15) private String domainArea; /**配置需求*/ @ApiModelProperty(value = "配置需求") private String configurationRequirements; /**新认证实施日期*/ @ApiModelProperty(value = "新认证实施日期") + @Excel(name = "新认证实施日期", width = 15) private String newCerImplementDate; /**新生产车实施日期*/ @ApiModelProperty(value = "新生产车实施日期") private String newProductionImplementation; /**注册日期*/ @ApiModelProperty(value = "注册日期") + @Excel(name = "注册日期", width = 15) private String registrationDate; /**企业标准*/ @ApiModelProperty(value = "企业标准") + @Excel(name = "企业标准", width = 15) private String enterpriseStandard; /**技术规范/设计指南*/ @ApiModelProperty(value = "技术规范/设计指南") + @Excel(name = "技术规范/设计指南", width = 15) private String technicalSpecificationDesignGuide; /**图纸模板*/ @ApiModelProperty(value = "图纸模板") + @Excel(name = "图纸模板", width = 15) private String drawingTemplate; /**技术协议模板*/ @ApiModelProperty(value = "技术协议模板") + @Excel(name = "技术协议模板", width = 15) private String technicalAgreementTemplate; /**校验报告模块/checklist*/ @ApiModelProperty(value = "校验报告模块/checklist") + @Excel(name = "校验报告模块/checklist", width = 15) private String verificationReportTemplateChecklist; /**DVP模板*/ @ApiModelProperty(value = "DVP模板") + @Excel(name = "DVP模板", width = 15) private String dvpTemplate; /**DFEMA*/ @ApiModelProperty(value = "DFEMA") + @Excel(name = "DFEMA", width = 15) private String dfema; /**关键技术分解表*/ @ApiModelProperty(value = "关键技术分解表") + @Excel(name = "关键技术分解表", width = 15) private String keyTechnologyDecompositionTable; /**其他文件或模板*/ @ApiModelProperty(value = "其他文件或模板") + @Excel(name = "其他文件或模板", width = 15) private String otherDocumentsTemplates; + /**排查阶段*/ + @ApiModelProperty(value = "排查阶段") + @Excel(name = "排查阶段", width = 15) + private java.lang.String investigationStage; /**p3*/ @ApiModelProperty(value = "p3") + @Excel(name = "P3证明符合性的交付物名称", width = 15) private String p3; /**p5*/ @ApiModelProperty(value = "p5") + @Excel(name = "P5证明符合性的交付物名称", width = 15) private String p5; /**备注*/ @ApiModelProperty(value = "备注") + @Excel(name = "备注", width = 15) private String remarks; /**标准解读流程id 搜索用*/ diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/StandardInterpretFlowService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/StandardInterpretFlowService.java index f6cb1f42..df7591a6 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/StandardInterpretFlowService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/StandardInterpretFlowService.java @@ -1,12 +1,20 @@ package com.jero.modules.activiti.process.standardinterpret.service; +import com.jero.common.api.vo.Result; import com.jero.common.system.vo.DictModel; +import com.jero.modules.activiti.entity.ProcessAll; +import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.process.standardinterpret.dto.StandardInterpretDTO; import com.jero.modules.activiti.process.standardinterpret.dto.StandardInterpretFlowDTO; import com.jero.modules.activiti.process.standardinterpret.entity.ProcessStandardInterpretClause; +import com.jero.modules.activiti.process.standardinterpret.entity.ProcessStandardInterpretClauseSublist; import com.jero.modules.activiti.process.standardinterpret.vo.StandardInterpretFlowVO; import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.task.Task; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; @@ -70,6 +78,8 @@ public interface StandardInterpretFlowService { */ StandardInterpretFlowVO queryDetail(String projectId, String taskId); + StandardInterpretDTO queryBusinessData(ProcessAll processAll, ProcessApprovalRecord processApprovalRecord); + void demo(Map map); List getTaskId(String processInstanceId); @@ -88,4 +98,19 @@ public interface StandardInterpretFlowService { * @return */ List queryFileByStandardId(String standardId); + + /** + * 导出(标准主解读人分发) + * @param request + * @return + */ + ModelAndView exportExcelByDistribute(HttpServletRequest request); + + /** + * 导入(标准主解读人不分发) + * @param request + * @param response + * @return + */ + Result> importExcelByUnDistribute(HttpServletRequest request, HttpServletResponse response) throws Exception; } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/impl/StandardInterpretFlowServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/impl/StandardInterpretFlowServiceImpl.java index f3620595..4da96655 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/impl/StandardInterpretFlowServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/service/impl/StandardInterpretFlowServiceImpl.java @@ -5,11 +5,14 @@ import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.ResultCommon; import com.jero.common.constant.enums.YesOrNoEnum; import com.jero.common.exception.JeroBootException; +import com.jero.common.system.base.controller.JeroController; import com.jero.common.system.vo.DictModel; import com.jero.common.system.vo.LoginUser; -import com.jero.common.util.SnowflakeUtils; +import com.jero.common.util.*; import com.jero.modules.activiti.common.ActivitiCommon; import com.jero.modules.activiti.entity.ProcessAll; import com.jero.modules.activiti.entity.ProcessApprovalRecord; @@ -30,6 +33,7 @@ import com.jero.modules.activiti.process.standardinterpret.service.ProcessStanda import com.jero.modules.activiti.process.standardinterpret.service.ProcessStandardInterpretService; import com.jero.modules.activiti.process.standardinterpret.service.StandardInterpretFlowService; import com.jero.modules.activiti.process.standardinterpret.vo.FlowApproveInfo; +import com.jero.modules.activiti.process.standardinterpret.vo.FlowImportExcel; import com.jero.modules.activiti.process.standardinterpret.vo.StandardInterpretFlowVO; import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessApprovalRecordService; @@ -37,9 +41,16 @@ import com.jero.modules.activiti.service.ProcessNodeLinkService; import com.jero.modules.laws.documenttool.entity.LawsDocumentSplit; import com.jero.modules.laws.documenttool.mapper.DocumentSplitMapper; import com.jero.modules.laws.standard.entity.LawsDomesticStandard; +import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard; +import com.jero.modules.laws.standard.entity.PartName; import com.jero.modules.laws.standard.service.ILawsDomesticStandardService; +import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService; +import com.jero.modules.laws.standard.service.ILawsPartNameService; import com.jero.modules.split.entity.SarFileSplitInfoEO; import com.jero.modules.split.service.ISarFileSplitInfoService; +import com.jero.modules.system.entity.SysDepart; +import com.jero.modules.system.service.ISysCategoryService; +import com.jero.modules.system.service.ISysDepartService; import com.jero.modules.system.service.ISysDictService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -49,11 +60,26 @@ import org.activiti.engine.TaskService; import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -85,6 +111,12 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe private final ISarFileSplitInfoService sarFileSplitInfoService; private final DocumentSplitMapper documentSplitMapper; private final ISysDictService sysDictService; + private final ISysCategoryService sysCategoryService; + private final ISysDepartService sysDepartService; + private final ILawsPartNameService lawsPartNameService; + private final ILawsEnterpriseStandardService lawsEnterpriseStandardService; + + private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); @Override public void flowStart(StandardInterpretFlowDTO standardInterpretFlowDTO) { @@ -104,6 +136,9 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe + lawsDomesticStandard.getStandardName() + "-解读"; processAll.setPrcName(prcName); + // 设置主流程实例id + map.put(ActivitiCommon.MAIN_INSTANCE_ID, SnowflakeUtils.snowflake()); + // 根据流程key启动流程,设置流程变量,更新流程总表信息,更新流程审批信息,返回任务信息 Task task = startProcessInstanceByKey(StandardInterpretCommon.KEY_1, map, processAll, processApprovalRecord, data); @@ -281,8 +316,6 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe + "," + standardInterpretClauseSublist.getKeywords()); first.setKeyController(first.getKeyController() + "," + standardInterpretClauseSublist.getKeyController()); - first.setApplicableComponents(first.getApplicableComponents() - + "," + standardInterpretClauseSublist.getApplicableComponents()); first.setRelatedDepartment(first.getRelatedDepartment() + "," + standardInterpretClauseSublist.getRelatedDepartment()); first.setResponsibleModule(first.getResponsibleModule() @@ -388,7 +421,8 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe return standardInterpretFlowVO; } - private StandardInterpretDTO queryBusinessData(ProcessAll processAll, ProcessApprovalRecord processApprovalRecord) { + @Override + public StandardInterpretDTO queryBusinessData(ProcessAll processAll, ProcessApprovalRecord processApprovalRecord) { StandardInterpretDTO standardInterpretDTO = new StandardInterpretDTO(); // 标准解读流程 ProcessStandardInterpret processStandardInterpret = new ProcessStandardInterpret(); @@ -491,6 +525,347 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe return dictItems; } + @Override + public ModelAndView exportExcelByDistribute(HttpServletRequest request) { + // Step.1 组装查询条件 + ProcessAll processAll = new ProcessAll(); + processAll.setProjectId(request.getParameter("projectId")); + ProcessApprovalRecord processApprovalRecord = new ProcessApprovalRecord(); + processApprovalRecord.setNodeId(request.getParameter("nodeId")); + StandardInterpretDTO standardInterpretDTO = queryBusinessData(processAll, processApprovalRecord); + + // Step.2 获取导出数据 + List exportList = standardInterpretDTO.getProcessStandardInterpretClauseList(); + + // 过滤选中数据 + String selections = request.getParameter("selections"); + if (oConvertUtils.isNotEmpty(selections)) { + List selectionList = Arrays.asList(selections.split(",")); + exportList = exportList.stream() + .filter(item -> selectionList.contains(item.getId())) + .collect(Collectors.toList()); + } + + // Step.3 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + try { + mv.addObject(JeroController.FILE_NAME, URLEncoder.encode("标准主解读人分发", "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + mv.addObject(JeroController.CLASS, ProcessStandardInterpretClause.class); + //update-begin--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置-------------------- + ExportParams exportParams=new ExportParams(null, "标准主解读人分发"); + //update-end--Author:liusq Date:20210126 for:图片导出报错,ImageBasePath未设置---------------------- + mv.addObject(JeroController.PARAMS,exportParams); + mv.addObject(NormalExcelConstants.DATA_LIST, exportList); + return mv; + } + + @Override + public Result> importExcelByUnDistribute(HttpServletRequest request, HttpServletResponse response) throws Exception { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + // 获取上传文件对象 + // 解密excel + MultipartFile file = IntekeyUtils.autoDecryptFile(entity.getValue()); + ImportParams params = new ImportParams(); + params.setNeedSave(true); + params.setHeadRows(1); + // excel表格头部校验 + excelHeadVerify(file, FlowImportExcel.class, 0, 0); + List lists = ExcelImportUtil.importExcel(file.getInputStream(), + FlowImportExcel.class, params); + if (CollectionUtils.isEmpty(lists) || lists.size() <= 2) { + return Result.error(ResultCommon.IMPORT_DATA_CANNOT_BE_EMPTY); + } + lists.remove(0); + List list = BeanCopyUtils.copyBeanList(lists, + ProcessStandardInterpretClauseSublist.class); + StringBuilder errorMSG = new StringBuilder(); + // 字段校验 + for (int i = 0; i < list.size(); i++) { + String head = "第" + (i + 2) + "行:"; + List firstVerify = firstVerify(list.get(i)); + List secondVerify = secondVerify(list.get(i)); + List thirdVerify = thirdVerify(list.get(i)); + List fifthVerify = fifthVerify(list.get(i)); + List sixthVerify = sixthVerify(list.get(i)); + firstVerify.addAll(secondVerify); + firstVerify.addAll(thirdVerify); + firstVerify.addAll(fifthVerify); + firstVerify.addAll(sixthVerify); + + if (!firstVerify.isEmpty()){ + errorMSG.append(head).append(String.join("", firstVerify)).append("
"); + } + } + + //update-begin-author:taoyan date:20190528 for:批量插入数据 + //update-end-author:taoyan date:20190528 for:批量插入数据 + if (errorMSG.length() > 0){ + throw new JeroBootException("文件导入失败:
" + errorMSG); + }else { +// fillProperty(list); + return Result.OK("文件导入成功!数据行数:" + list.size(), list); + } + } + return Result.error("文件导入失败!"); + } + + private List sixthVerify(ProcessStandardInterpretClauseSublist data) { + List errorList = new ArrayList<>(); + String enterpriseStandard = data.getEnterpriseStandard(); + if (StringUtils.isNotBlank(enterpriseStandard)){ + LawsEnterpriseStandard lawsEnterpriseStandard = + lawsEnterpriseStandardService.queryByStandardNumber(enterpriseStandard); + if (Objects.isNull(lawsEnterpriseStandard)){ + errorList.add("企标标准不存在!"); + } + } + + String investigationStage = data.getInvestigationStage(); + if (StringUtils.isNotBlank(investigationStage)){ + boolean flag = true; + List list = new ArrayList<>(); + List dictItems = sysDictService.getDictItems("investigation_stage"); + for (String str : investigationStage.split(",")) { + Optional optionalDictModel = dictItems.stream() + .filter(dictModel -> dictModel.getText().equals(str)).findFirst(); + if (!optionalDictModel.isPresent()){ + errorList.add("排查阶段不存在!"); + flag = false; + break; + } + list.add(optionalDictModel.get().getValue()); + } + if (flag){ + data.setInvestigationStage(String.join(",", list)); + } + } + + return errorList; + } + + private List fifthVerify(ProcessStandardInterpretClauseSublist data) { + List errorList = new ArrayList<>(); + String applications = data.getApplications(); + if (StringUtils.isNotBlank(applications)){ + boolean flag = true; + List list = new ArrayList<>(); + List dictItems = sysDictService.getDictItems("applicable_vehicle_type"); + for (String str : applications.split(",")) { + Optional optionalDictModel = dictItems.stream() + .filter(dictModel -> dictModel.getText().equals(str)).findFirst(); + if (!optionalDictModel.isPresent()){ + errorList.add("适用车型不存在!"); + flag = false; + break; + } + list.add(optionalDictModel.get().getValue()); + } + if (flag){ + data.setApplications(String.join(",", list)); + } + } + + String powerType = data.getPowerType(); + if (StringUtils.isNotBlank(powerType)){ + boolean flag = true; + List list = new ArrayList<>(); + List dictItems = sysDictService.getDictItems("dynamic_type"); + for (String str : powerType.split(",")) { + Optional optionalDictModel = dictItems.stream() + .filter(dictModel -> dictModel.getText().equals(str)).findFirst(); + if (!optionalDictModel.isPresent()){ + errorList.add("动力类型不存在!"); + flag = false; + break; + } + list.add(optionalDictModel.get().getValue()); + } + if (flag){ + data.setPowerType(String.join(",", list)); + } + } + return errorList; + } + + private List thirdVerify(ProcessStandardInterpretClauseSublist data) { + List errorList = new ArrayList<>(); + String responsibleDepartment = data.getResponsibleDepartment(); + if (StringUtils.isNotBlank(responsibleDepartment)){ + boolean flag = true; + List list = new ArrayList<>(); + for (String str : responsibleDepartment.split(",")) { + SysDepart one = sysDepartService.getOne(new LambdaQueryWrapper() + .eq(SysDepart::getDepartName, str), false); + if (Objects.isNull(one)){ + errorList.add("责任部门不存在!"); + flag = false; + break; + }else { + list.add(str); + } + } + if (flag){ + data.setResponsibleDepartment(String.join(",", list)); + } + } + + String relatedDepartment = data.getRelatedDepartment(); + if (StringUtils.isNotBlank(relatedDepartment)){ + boolean flag = true; + List list = new ArrayList<>(); + for (String str : relatedDepartment.split(",")) { + SysDepart one = sysDepartService.getOne(new LambdaQueryWrapper() + .eq(SysDepart::getDepartName, str), false); + if (Objects.isNull(one)){ + errorList.add("关联部门不存在!"); + flag = false; + break; + }else { + list.add(str); + } + } + if (flag){ + data.setRelatedDepartment(String.join(",", list)); + } + } + return errorList; + } + + private List secondVerify(ProcessStandardInterpretClauseSublist data) { + List errorList = new ArrayList<>(); + String keywords = data.getKeywords(); + if (StringUtils.isNotBlank(keywords)){ + boolean flag = true; + List list = new ArrayList<>(); + List partNames = lawsPartNameService.list(new LambdaQueryWrapper() + .ne(PartName::getCode, "Part")); + List partNameList = partNameGetLevelPath(partNames); + for (String str : keywords.split(",")) { + List path = + partNameList.stream().filter(o -> str.equals(o.getLevelPath())) + .collect(Collectors.toList()); + if (path.size() > 1){ + errorList.add("涉及系统/部件 中 !" + str + "存在多个!"); + flag = false; + break; + }else if (path.size() == 1){ + list.add(path.get(0).getId()); + }else { + errorList.add("涉及系统/部件不存在!"); + flag = false; + break; + } + } + if (flag){ + data.setKeywords(String.join(",", list)); + } + } + + String keyController = data.getKeyController(); + if (StringUtils.isNotBlank(keyController)){ + boolean flag = true; + List list = new ArrayList<>(); + List dictItems = sysDictService.getDictItems("key_controller"); + for (String str : keyController.split(",")) { + Optional optionalDictModel = dictItems.stream() + .filter(dictModel -> dictModel.getText().equals(str)).findFirst(); + if (!optionalDictModel.isPresent()){ + errorList.add("关键控制器不存在!"); + flag = false; + break; + } + list.add(optionalDictModel.get().getValue()); + } + if (flag){ + data.setKeyController(String.join(",", list)); + } + } + return errorList; + } + + private List firstVerify(ProcessStandardInterpretClauseSublist data) { + List errorList = new ArrayList<>(); + String isSameAsPrevVersion = data.getIsSameAsPrevVersion(); + if (StringUtils.isNotBlank(isSameAsPrevVersion)){ + List dictItems = sysDictService.getDictItems("yn"); + Optional optionalDictModel = dictItems.stream() + .filter(dictModel -> dictModel.getText().equals(isSameAsPrevVersion)).findFirst(); + if (optionalDictModel.isPresent()){ + data.setIsSameAsPrevVersion(optionalDictModel.get().getValue()); + }else { + errorList.add("是否与上一版相同不存在!"); + } + } + + String domainArea = data.getDomainArea(); + if (StringUtils.isNotBlank(domainArea)){ + boolean flag = true; + List list = new ArrayList<>(); + List dictItems = sysDictService.getDictItems("professional_field"); + for (String str : domainArea.split(",")) { + Optional optionalDictModel = dictItems.stream() + .filter(dictModel -> dictModel.getText().equals(str)).findFirst(); + if (!optionalDictModel.isPresent()){ + errorList.add("专业领域不存在!"); + flag = false; + break; + } + list.add(optionalDictModel.get().getValue()); + } + if (flag){ + data.setDomainArea(String.join(",", list)); + } + } + + String newCerImplementDate = data.getNewCerImplementDate(); + if (StringUtils.isNotBlank(newCerImplementDate)){ + for (String str : newCerImplementDate.split(",")) { + try { + dateFormat.parse(str); + } catch (ParseException e) { + errorList.add("新认证实施日期格式错误!"); + break; + } + } + } + + String registrationDate = data.getRegistrationDate(); + if (StringUtils.isNotBlank(registrationDate)){ + for (String str : registrationDate.split(",")) { + try { + dateFormat.parse(str); + } catch (ParseException e) { + errorList.add("注册日期格式错误!"); + break; + } + } + } + return errorList; + } + + /** + * excel表头校验 + * @param file + * @param clazz + * @param titleRows + * @param i + */ + private void excelHeadVerify(MultipartFile file, Class clazz, int titleRows, int i) { + try { + if (!(boolean) ImportExcelUtil.checkTemplateTitle(file, clazz, titleRows, i)){ + throw new JeroBootException(ResultCommon.IMPORT_TEMPLATE_ERROR); + } + }catch (Exception e) { + e.printStackTrace(); + throw new JeroBootException(ResultCommon.IMPORT_TEMPLATE_ERROR); + } + } + @Override public void flowSave(StandardInterpretFlowDTO standardInterpretFlowDTO) { // 处理业务数据 @@ -529,7 +904,7 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe case StandardInterpretCommon.REGULATORY_ENGINEER_START: processStandardInterpretService.saveOrUpdate(processStandardInterpret); for (ProcessStandardInterpretClause standardInterpretClause : processStandardInterpretClauseList) { - standardInterpretClause.setId(String.valueOf(SnowflakeUtils.snowflake())); +// standardInterpretClause.setId(String.valueOf(SnowflakeUtils.snowflake())); standardInterpretClause.setDecompositionSource(processStandardInterpret.getDecompositionSource()); standardInterpretClause.setStandardInterpretId(standardInterpretId); } @@ -599,6 +974,37 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe // 不分发 processStandardInterpretClauseSublistService .saveOrUpdateBatch(processStandardInterpretClauseSublistList); + + // 判断是否有导入的数据,有则补齐对应中间表数据 + List newProcessStandardInterpretClauseList = new ArrayList<>(); + for (ProcessStandardInterpretClauseSublist standardInterpretClauseSublist : + processStandardInterpretClauseSublistList) { + int count = processStandardInterpretClauseService.count( + new LambdaQueryWrapper() + .eq(ProcessStandardInterpretClause::getStandardInterpretId, + standardInterpretId) + .eq(ProcessStandardInterpretClause::getClauseId, + standardInterpretClauseSublist.getClauseId())); + if (count <= 0){ + ProcessStandardInterpretClause newProcessStandardInterpretClause = + new ProcessStandardInterpretClause(); + String snowflake = String.valueOf(SnowflakeUtils.snowflake()); + newProcessStandardInterpretClause.setId(snowflake); + newProcessStandardInterpretClause.setStandardInterpretId(standardInterpretId); + newProcessStandardInterpretClause.setClauseId(standardInterpretClauseSublist.getClauseId()); + newProcessStandardInterpretClause.setDecompositionSource( + processStandardInterpret.getDecompositionSource()); + newProcessStandardInterpretClauseList.add(newProcessStandardInterpretClause); + // 更新 标准解读流程_条款中间表_子表关联关系 + processStandardInterpretClauseSublistService.update( + new LambdaUpdateWrapper() + .eq(ProcessStandardInterpretClauseSublist::getId, + standardInterpretClauseSublist.getId()) + .set(ProcessStandardInterpretClauseSublist::getStandardInterpretClauseId + , snowflake)); + } + } + processStandardInterpretClauseService.saveOrUpdateBatch(newProcessStandardInterpretClauseList); } map.put(StandardInterpretCommon.PASS_FIRST, @@ -673,4 +1079,30 @@ public class StandardInterpretFlowServiceImpl implements StandardInterpretFlowSe return task; } + private List partNameGetLevelPath(List partNames) { + List list = new ArrayList<>(); + // 一级节点 + List firstLevelList = partNames.stream() + .filter(o -> o.getParentCode().equals("Part")) + .collect(Collectors.toList()); + queryPartNameChildren(firstLevelList, partNames, "", list); + return list; + } + + private void queryPartNameChildren(List firstLevelList, List partNames, String levelPath, + List list) { + for (PartName partName : firstLevelList) { + if (StringUtils.isBlank(levelPath)){ + partName.setLevelPath(partName.getName()); + }else { + partName.setLevelPath(levelPath + "/" + partName.getName()); + } + list.add(partName); + List children = partNames.stream() + .filter(v -> v.getParentCode().equals(partName.getCode())).collect(Collectors.toList()); + if (!children.isEmpty()){ + queryPartNameChildren(children, partNames, partName.getLevelPath(), list); + } + } + } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/vo/FlowImportExcel.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/vo/FlowImportExcel.java new file mode 100644 index 00000000..aa3b0070 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/standardinterpret/vo/FlowImportExcel.java @@ -0,0 +1,131 @@ +package com.jero.modules.activiti.process.standardinterpret.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @ClassName: FlowImportExcel + * @Description: + * @Author: yjz + * @Date: 2024-07-08 14:27 + * @Version: 1.0 + **/ +@Data +public class FlowImportExcel { + /**条款号/标准编号*/ + @ApiModelProperty(value = "条款号/标准编号") + @TableField(exist = false) + @Excel(name = "标准编号/条款号", width = 15) + private String itemNum; + /**条款标题/标准名称*/ + @ApiModelProperty(value = "条款标题/标准名称") + @TableField(exist = false) + @Excel(name = "标准名称/条款标题", width = 15) + private String itemTitle; + /**译文*/ + @ApiModelProperty(value = "译文") + @Excel(name = "译文", width = 15) + private String translation; + /**是否与上一版相同(字典:1:是,0:否)*/ + @ApiModelProperty(value = "是否与上一版相同(字典:1:是,0:否)") + @Excel(name = "是否与上一版相同", width = 15) + private String isSameAsPrevVersion; + /**变化点说明*/ + @ApiModelProperty(value = "相对上一版变化点说明") + @Excel(name = "相对上一版变化点说明", width = 15) + private String changeDescription; + /**法规注释*/ + @ApiModelProperty(value = "法规注释") + @Excel(name = "法规注释", width = 15) + private String regulatoryNotes; + /**涉及系统/部件)*/ + @ApiModelProperty(value = "涉及系统/部件)") + @Excel(name = "涉及系统/部件", width = 15) + private String keywords; + /**涉及系统/部件)*/ + @ApiModelProperty(value = "关键控制器)") + @Excel(name = "关键控制器", width = 15) + private String keyController; + /**责任部门*/ + @ApiModelProperty(value = "责任部门") + @Excel(name = "责任部门", width = 15) + private String responsibleDepartment; + /**关联部门*/ + @ApiModelProperty(value = "关联部门") + @Excel(name = "关联部门", width = 15) + private String relatedDepartment; + /**适用车型*/ + @ApiModelProperty(value = "适用车型") + @Excel(name = "适用车型", width = 15) + private String applications; + /**动力类型*/ + @ApiModelProperty(value = "动力类型") + @Excel(name = "动力类型", width = 15) + private String powerType; + /**专业领域*/ + @ApiModelProperty(value = "专业领域") + @Excel(name = "专业领域", width = 15) + private String domainArea; + /**新认证实施日期*/ + @ApiModelProperty(value = "新认证实施日期") + @Excel(name = "新认证实施日期", width = 15) + private String newCerImplementDate; + /**注册日期*/ + @ApiModelProperty(value = "注册日期") + @Excel(name = "注册日期", width = 15) + private String registrationDate; + /**企业标准*/ + @ApiModelProperty(value = "企业标准") + @Excel(name = "企业标准", width = 15) + private String enterpriseStandard; + /**技术规范/设计指南*/ + @ApiModelProperty(value = "技术规范/设计指南") + @Excel(name = "技术规范/设计指南", width = 15) + private String technicalSpecificationDesignGuide; + /**图纸模板*/ + @ApiModelProperty(value = "图纸模板") + @Excel(name = "图纸模板", width = 15) + private String drawingTemplate; + /**技术协议模板*/ + @ApiModelProperty(value = "技术协议模板") + @Excel(name = "技术协议模板", width = 15) + private String technicalAgreementTemplate; + /**校验报告模块/checklist*/ + @ApiModelProperty(value = "校验报告模块/checklist") + @Excel(name = "校验报告模块/checklist", width = 15) + private String verificationReportTemplateChecklist; + /**DVP模板*/ + @ApiModelProperty(value = "DVP模板") + @Excel(name = "DVP模板", width = 15) + private String dvpTemplate; + /**DFEMA*/ + @ApiModelProperty(value = "DFEMA") + @Excel(name = "DFEMA", width = 15) + private String dfema; + /**关键技术分解表*/ + @ApiModelProperty(value = "关键技术分解表") + @Excel(name = "关键技术分解表", width = 15) + private String keyTechnologyDecompositionTable; + /**其他文件或模板*/ + @ApiModelProperty(value = "其他文件或模板") + @Excel(name = "其他文件或模板", width = 15) + private String otherDocumentsTemplates; + /**排查阶段*/ + @ApiModelProperty(value = "排查阶段") + @Excel(name = "排查阶段", width = 15) + private java.lang.String investigationStage; + /**p3*/ + @ApiModelProperty(value = "p3") + @Excel(name = "P3证明符合性的交付物名称", width = 15) + private String p3; + /**p5*/ + @ApiModelProperty(value = "p5") + @Excel(name = "P5证明符合性的交付物名称", width = 15) + private String p5; + /**备注*/ + @ApiModelProperty(value = "备注") + @Excel(name = "备注", width = 15) + private String remarks; +}