diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java b/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java index 4991e586..b15b49d6 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java @@ -17,7 +17,8 @@ public enum ProcessTypeEnum { MARKET_STANDARD_PUBLISH("市场清单发布流程", 4, "com.jero.modules.activiti.process.ms.service.impl.ProcessMarketStandardReleaseServiceImpl", "/workCenter/MarketListReleaseProcess", "/workCenter/MarketListReleaseProcess"), ENTERPRISE_STANDARD_ABOLISH_PUBLISH("企标废止发布流程", 5, "com.jero.modules.activiti.process.abolish.service.impl.ProcessAbolishReleaseServiceImpl", "/workCenter/AbolishReleaseProcess", "/workCenter/AbolishReleaseProcess"), ES_REVISION_ADVICE("企业标准制修订及征求意见流程", 6, "com.jero.modules.activiti.process.esRevisionAdvice.service.impl.EsRevisionServiceImpl","/workCenter/enterpriseStandardRevision/enterpriseStandardRevisionFlow","/workCenter/enterpriseStandardRevision"), - ANNUAL_INIT("年度制修订计划流程", 7, "com.jero.modules.activiti.process.annualinit.service.impl.ProcessAnnualInitService","/workCenter/enterpriseStandardRevision/enterpriseStandardRevisionFlow","/workCenter/enterpriseStandardRevision") + ANNUAL_INIT("年度制修订计划流程", 7, "com.jero.modules.activiti.process.annualinit.service.impl.ProcessAnnualInitService","/workCenter/enterpriseStandardRevision/enterpriseStandardRevisionFlow","/workCenter/enterpriseStandardRevision"), + DOMESTIC_VEHICLE_CONTROL_PUBLISH("国内整车型号和VIN前八位管控流程", 8, "com.jero.modules.activiti.process.vehicledomestic.service.impl.ProcessVehicleDomesticReleaseServiceImpl","/workCenter/VehicleDomesticReleaseProcess","/workCenter/VehicleDomesticReleaseProcess") ; private final String name; diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/enums/ProcessType.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/enums/ProcessType.java index a58bf81e..8ea7e34f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/common/enums/ProcessType.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/common/enums/ProcessType.java @@ -17,7 +17,8 @@ public enum ProcessType { MARKET_STANDARD_PUBLISH("市场清单发布流程", "4", "market_standard_publish", "ProcessNewStandardImportServiceImpl"), ENTERPRISE_STANDARD_ABOLISH_PUBLISH("企标废止发布流程", "5", "enterprise_standard_abolish_publish", "ProcessAbolishReleaseServiceImpl"), ES_REVISION_ADVICE("企标制修订及征求意见流程", "6", "es_revision_advice", "ProcessEsRevisionServiceImpl"), - ANNUAL_INIT("年度制修订计划流程", "7", "process-annual-init", "ProcessAnnualInitService") + ANNUAL_INIT("年度制修订计划流程", "7", "process-annual-init", "ProcessAnnualInitService"), + DOMESTIC_VEHICLE_CONTROL_PUBLISH("国内整车型号和VIN前八位管控流程", "8", "domestic_vehicle_control_publish", "ProcessVehicleDomesticReleaseServiceImpl") ; private final String name; diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/common/Constant.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/common/Constant.java deleted file mode 100644 index 81c665cb..00000000 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/common/Constant.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.jero.modules.activiti.process.vehicledomestic.common; - -public interface Constant { - - String TAKE_EFFECT = "1"; - - String ABOLISH = "2"; - - String FUEL_OIL = "1"; - - String HYBRID_POWER = "2"; - - String PURE_ELECTRIC = "3"; - -} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/controller/ProcessVehicleDomesticReleaseController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/controller/ProcessVehicleDomesticReleaseController.java index 1598376c..c9301195 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/controller/ProcessVehicleDomesticReleaseController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/controller/ProcessVehicleDomesticReleaseController.java @@ -2,12 +2,17 @@ package com.jero.modules.activiti.process.vehicledomestic.controller; import com.jero.common.api.vo.Result; import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.aspect.annotation.Translation; +import com.jero.modules.activiti.enums.ProcessTypeEnum; +import com.jero.modules.activiti.process.common.entity.ProcessDraft; +import com.jero.modules.activiti.process.common.service.ActFlowCommonService; +import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; import com.jero.modules.activiti.process.vehicledomestic.service.IProcessVehicleDomesticReleaseService; +import com.jero.modules.activiti.process.vehicledomestic.vo.ProcessVehicleDomesticReleaseVo; import io.swagger.annotations.ApiOperation; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; @@ -26,32 +31,65 @@ public class ProcessVehicleDomesticReleaseController { @Resource private IProcessVehicleDomesticReleaseService processVehicleDomesticReleaseService; + @Resource + private ActFlowCommonService actFlowCommonService; - /** - * 根据能源类型导出模板 - */ @AutoLog(value = "国内整车型号和VIN前八位管控流程-根据能源类型导出模板") @ApiOperation(value="国内整车型号和VIN前八位管控流程-根据能源类型导出模板", notes="国内整车型号和VIN前八位管控流程-根据能源类型导出模板") @GetMapping(value = "/exportTemplateByType") - // @RequiresPermissions("clubManagement:clubManagement:import") public ModelAndView exportTemplateByType(HttpServletRequest request) { return processVehicleDomesticReleaseService.exportTemplateByType(request); } - /** - * 导入 - * @param request - * @return - */ @AutoLog(value = "国内整车型号和VIN前八位管控流程-导入") @ApiOperation(value="国内整车型号和VIN前八位管控流程-导入", notes="国内整车型号和VIN前八位管控流程-导入") @PostMapping(value = "/importExcel") -// @RequiresPermissions("clubManagement:clubManagement:import") public Result excelimport(HttpServletRequest request) { return processVehicleDomesticReleaseService.importExcel(request); } + @AutoLog(value = "国内整车型号和VIN前八位管控流程-发起流程") + @ApiOperation(value = "国内整车型号和VIN前八位管控流程-发起流程", notes = "国内整车型号和VIN前八位管控流程-发起流程") + @PostMapping(value = "/start") + public Result startProcess(@Validated @RequestBody ProcessInfoVO processInfoVO) { + processVehicleDomesticReleaseService.startProcess(processInfoVO); + return Result.OK(); + } + @AutoLog(value = "国内整车型号和VIN前八位管控流程-同意") + @ApiOperation(value = "国内整车型号和VIN前八位管控流程-同意", notes = "国内整车型号和VIN前八位管控流程-同意") + @PostMapping("/agree") + public Result agree(@Validated @RequestBody ProcessInfoVO processInfoVO) { + processVehicleDomesticReleaseService.approveTask(processInfoVO, true); + return Result.OK(); + } + @AutoLog(value = "国内整车型号和VIN前八位管控流程-驳回") + @ApiOperation(value = "国内整车型号和VIN前八位管控流程-驳回", notes = "国内整车型号和VIN前八位管控流程-驳回") + @PostMapping("/reject") + public Result reject(@Validated @RequestBody ProcessInfoVO processInfoVO) { + processVehicleDomesticReleaseService.approveTask(processInfoVO, false); + return Result.OK(); + } + + @AutoLog(value = "国内整车型号和VIN前八位管控流程-提交") + @ApiOperation(value = "国内整车型号和VIN前八位管控流程-提交", notes = "国内整车型号和VIN前八位管控流程-提交") + @PostMapping("/submit") + public Result submit(@Validated @RequestBody ProcessInfoVO processInfoVO) { + processVehicleDomesticReleaseService.submit(processInfoVO); + return Result.OK(); + } + + @AutoLog(value = "国内整车型号和VIN前八位管控流程-办理") + @ApiOperation(value="国内整车型号和VIN前八位管控流程-办理", notes="国内整车型号和VIN前八位管控流程-办理") + @GetMapping("/handle/{taskId}") + @Translation + public Result handle(@PathVariable("taskId") String taskId) { + ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.DOMESTIC_VEHICLE_CONTROL_PUBLISH); + if (draft != null) { + return Result.OK(draft); + } + return Result.OK(processVehicleDomesticReleaseService.getHandleData(taskId)); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/entity/ProcessVehicleDomesticRelease.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/entity/ProcessVehicleDomesticRelease.java index 2ef9c5c8..be45c84b 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/entity/ProcessVehicleDomesticRelease.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/entity/ProcessVehicleDomesticRelease.java @@ -2,14 +2,16 @@ package com.jero.modules.activiti.process.vehicledomestic.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; -import java.time.LocalDateTime; import com.baomidou.mybatisplus.annotation.TableId; import java.io.Serializable; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; /** *

@@ -41,9 +43,6 @@ public class ProcessVehicleDomesticRelease implements Serializable { @ApiModelProperty(value = "抄送人员") private String copyUser; - @ApiModelProperty(value = "0表示流程未完成,1表示流程已完成") - private Integer isFinish; - @ApiModelProperty(value = "0表示未删除,1表示删除") private Integer delFlag; @@ -51,13 +50,17 @@ public class ProcessVehicleDomesticRelease implements Serializable { private String createBy; @ApiModelProperty(value = "创建时间") - private LocalDateTime createTime; + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date createTime; @ApiModelProperty(value = "更新人") private String updateBy; @ApiModelProperty(value = "更新时间") - private LocalDateTime updateTime; + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/listener/ProcessDomesticVehicleEndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/listener/ProcessDomesticVehicleEndListener.java new file mode 100644 index 00000000..3cdaf739 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/listener/ProcessDomesticVehicleEndListener.java @@ -0,0 +1,78 @@ +package com.jero.modules.activiti.process.vehicledomestic.listener; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.api.SendMessageAPI; +import com.jero.common.api.dto.message.SendMessageDTO; +import com.jero.modules.activiti.process.common.enums.ProcessType; +import com.jero.modules.activiti.process.vehicledomestic.entity.ProcessVehicleDomesticRelease; +import com.jero.modules.activiti.process.vehicledomestic.service.IProcessVehicleDomesticReleaseService; +import com.jero.modules.laws.businessSupport.common.Constant; +import com.jero.modules.laws.businessSupport.entity.LawsVehicleDomesticLibrary; +import com.jero.modules.laws.businessSupport.service.ILawsVehicleDomesticLibraryService; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysUserService; +import lombok.extern.slf4j.Slf4j; +import org.activiti.engine.delegate.DelegateExecution; +import org.activiti.engine.delegate.ExecutionListener; +import org.springframework.stereotype.Component; +import javax.annotation.Resource; +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * @author: Mzaxd + * @Date: 2023/10/10 14:14 + */ +@Slf4j +@Component("ProcessDomesticVehicleEndListener") +public class ProcessDomesticVehicleEndListener implements ExecutionListener, Serializable { + + @Resource + private IProcessVehicleDomesticReleaseService processVehicleDomesticReleaseService; + @Resource + private ILawsVehicleDomesticLibraryService lawsVehicleDomesticLibraryService; + @Resource + private ISysUserService sysUserService; + @Resource + private SendMessageAPI sendMessageAPI; + + + /** + * 国内整车型号和VIN前八位管控流程结束之后给抄送人发消息 + * @param delegateExecution + */ + @Override + public void notify(DelegateExecution delegateExecution) { + log.info("国内整车型号和VIN前八位管控流程:监听执行器开始执行"); + // 找到流程实例Id + String processInstanceId = delegateExecution.getProcessInstanceId(); + // 更新业务主表的字段 + ProcessVehicleDomesticRelease processVehicleDomesticRelease = processVehicleDomesticReleaseService.getOne(new LambdaQueryWrapper().eq(ProcessVehicleDomesticRelease::getProcessInstanceId, processInstanceId), false); + LawsVehicleDomesticLibrary lawsVehicleDomesticLibrary = lawsVehicleDomesticLibraryService.getById(processVehicleDomesticRelease.getVehicleId()); + lawsVehicleDomesticLibrary.setFinishDate(new Date()); // 完成日期 + lawsVehicleDomesticLibrary.setIsFinish(Constant.IS_FINISH); // 是否完成流程 + lawsVehicleDomesticLibrary.setState(Constant.TAKE_EFFECT); // 状态 + lawsVehicleDomesticLibraryService.updateById(lawsVehicleDomesticLibrary); + // 给抄送人发送消息 + String processDefinitionKey = ProcessType.NEW_STANDARD_IMPORT.getProcessKey(); + // 发送消息 + SendMessageDTO sendMessageDTO = new SendMessageDTO(); + sendMessageDTO.setTemplateCode(processDefinitionKey); + sendMessageDTO.setToUserId(processVehicleDomesticRelease.getCopyUser()); + LambdaQueryWrapper querySysUser = new LambdaQueryWrapper<>(); + querySysUser.eq(SysUser::getUsername,processVehicleDomesticRelease.getCreateBy()); + SysUser sysUser = sysUserService.getOne(querySysUser,false); + if(!Objects.isNull(sysUser)){ + sendMessageDTO.setSendUser(sysUser.getId()); + } + Map sendMap = new HashMap<>(); + sendMap.put("standardNumber","测试占位符1"); + sendMap.put("standardName", "测试占位符2"); + sendMessageDTO.setMap(sendMap); + sendMessageAPI.sendMessage(sendMessageDTO); + log.info("国内整车型号和VIN前八位管控流程:监听执行器执行结束"); + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/service/IProcessVehicleDomesticReleaseService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/service/IProcessVehicleDomesticReleaseService.java index c12e9865..f7e0924f 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/service/IProcessVehicleDomesticReleaseService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/service/IProcessVehicleDomesticReleaseService.java @@ -2,9 +2,10 @@ package com.jero.modules.activiti.process.vehicledomestic.service; import com.baomidou.mybatisplus.extension.service.IService; import com.jero.common.api.vo.Result; +import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; import com.jero.modules.activiti.process.vehicledomestic.entity.ProcessVehicleDomesticRelease; +import com.jero.modules.activiti.process.vehicledomestic.vo.ProcessVehicleDomesticReleaseVo; import org.springframework.web.servlet.ModelAndView; - import javax.servlet.http.HttpServletRequest; /** @@ -20,4 +21,12 @@ public interface IProcessVehicleDomesticReleaseService extends IService importExcel(HttpServletRequest request); + + void startProcess(ProcessInfoVO processInfoVO); + + void approveTask(ProcessInfoVO processInfoVO, boolean pass); + + void submit(ProcessInfoVO processInfoVO); + + ProcessInfoVO getHandleData(String taskId); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/service/impl/ProcessVehicleDomesticReleaseServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/service/impl/ProcessVehicleDomesticReleaseServiceImpl.java index 1784feac..f6f02648 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/service/impl/ProcessVehicleDomesticReleaseServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/service/impl/ProcessVehicleDomesticReleaseServiceImpl.java @@ -1,16 +1,42 @@ package com.jero.modules.activiti.process.vehicledomestic.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.api.vo.Result; import com.jero.common.api.vo.ResultCommon; import com.jero.common.exception.JeroBootException; import com.jero.common.system.base.controller.JeroController; import com.jero.common.util.ImportExcelUtil; -import com.jero.modules.activiti.process.vehicledomestic.common.Constant; +import com.jero.modules.activiti.common.ActivitiCommon; +import com.jero.modules.activiti.entity.ProcessAll; +import com.jero.modules.activiti.entity.ProcessApprovalRecord; +import com.jero.modules.activiti.enums.ProcessTypeEnum; +import com.jero.modules.activiti.process.abolish.entity.ProcessAbolishRelease; +import com.jero.modules.activiti.process.common.enums.ProcessType; +import com.jero.modules.activiti.process.common.service.ActFlowCommonService; +import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO; +import com.jero.modules.activiti.process.fb.dto.BasicTaskInfoDTO; +import com.jero.modules.activiti.process.fb.service.IProcessHandleService; +import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; import com.jero.modules.activiti.process.vehicledomestic.entity.ProcessVehicleDomesticRelease; import com.jero.modules.activiti.process.vehicledomestic.mapper.ProcessVehicleDomesticReleaseMapper; import com.jero.modules.activiti.process.vehicledomestic.service.IProcessVehicleDomesticReleaseService; +import com.jero.modules.activiti.process.vehicledomestic.vo.ProcessVehicleDomesticReleaseVo; import com.jero.modules.activiti.process.vehicledomestic.vo.excel.*; +import com.jero.modules.activiti.service.ProcessAllService; +import com.jero.modules.activiti.service.ProcessApprovalRecordService; +import com.jero.modules.activiti.service.ProcessNodeLinkService; +import com.jero.modules.laws.businessSupport.common.Constant; +import com.jero.modules.laws.businessSupport.entity.LawsVehicleDomesticLibrary; +import com.jero.modules.laws.businessSupport.entity.LawsVehicleDomesticLibrarySublist; +import com.jero.modules.laws.businessSupport.service.ILawsVehicleDomesticLibraryService; +import com.jero.modules.laws.businessSupport.service.ILawsVehicleDomesticLibrarySublistService; +import com.jero.modules.sys.utils.UserUtils; +import lombok.extern.slf4j.Slf4j; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; +import org.activiti.engine.runtime.ProcessInstance; +import org.activiti.engine.task.Task; import org.apache.commons.lang3.StringUtils; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; @@ -20,16 +46,17 @@ import org.jeecgframework.poi.excel.entity.enmus.ExcelType; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; +import static com.jero.modules.activiti.common.ActivitiCommon.PASS; /** @@ -41,12 +68,33 @@ import java.util.stream.Collectors; * @since 2024-09-23 */ @Service +@Transactional(rollbackFor = JeroBootException.class) +@Slf4j public class ProcessVehicleDomesticReleaseServiceImpl extends ServiceImpl implements IProcessVehicleDomesticReleaseService { private static final String NEWLINE_CHARACTER = "
"; private static final String ENERGY_TYPE = "energyType"; + @Resource + private ActFlowCommonService actFlowCommonService; + @Resource + private ProcessNodeLinkService processNodeLinkService; + @Resource + private ProcessApprovalRecordService processApprovalRecordService; + @Resource + private ProcessAllService processAllService; + @Resource + private RuntimeService runtimeService; + @Resource + private IProcessHandleService processHandleService; + @Resource + private TaskService taskService; + @Resource + private ILawsVehicleDomesticLibraryService lawsVehicleDomesticLibraryService; + @Resource + private ILawsVehicleDomesticLibrarySublistService lawsVehicleDomesticLibrarySublistService; + @Override public ModelAndView exportTemplateByType(HttpServletRequest request) { String energyType = request.getParameter(ENERGY_TYPE); @@ -118,6 +166,248 @@ public class ProcessVehicleDomesticReleaseServiceImpl extends ServiceImpl processInfoVO) { + // 流程Key + String processDefinitionKey = ProcessType.DOMESTIC_VEHICLE_CONTROL_PUBLISH.getProcessKey(); + // 流程信息 + BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO(); + // 任务信息 + BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO(); + // 人员信息 + Map userInfoMap = processInfoVO.getUserInfoMap(); + // 业务数据 + ProcessVehicleDomesticReleaseVo businessInfoDTO = processInfoVO.getBusinessInfoDTO(); + // 设置流程变量 + Map actVariables = setVariables(userInfoMap); + // 删除草稿 + actFlowCommonService.getExistDraftAndRemove(processInfoVO.getDraftId()); + // 启动流程 + ProcessInstance processInstance = actFlowCommonService.startProcess(processDefinitionKey, actVariables); + // 获取流程实例ID + String processDefinitionId = processInstance.getProcessDefinitionId(); + String processInstanceId = processInstance.getId(); + businessInfoDTO.setProcessInstanceId(processInstanceId); + processInfo.setProcessInstanceId(processInstanceId); + processInfo.setProcessDefinitionId(processDefinitionId); + processInfo.setProcessType(ProcessTypeEnum.DOMESTIC_VEHICLE_CONTROL_PUBLISH.getValue()); + // 第一个节点业务数据处理 + startNodeBusProcess(processInfoVO); + // 保存选人信息 + processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, changeVariables(userInfoMap)); + // 当前用户Id + String userId = UserUtils.getUserId(); + // 获取第一个任务的taskId + String taskId = actFlowCommonService.getFirstTaskId(processInstanceId, userId, processDefinitionId); + processTask.setTaskId(taskId); + // 保存第一个节点的草稿 + processHandleService.saveToDraft(processInfoVO, UserUtils.getUserId()); + // 更新审批表为完成,填充数据 + actFlowCommonService.updateApprovalInfo(processTask, taskId); + // 根据流程实例id更新流程总表 + actFlowCommonService.updateProcessAll(processInfo); + // 自动完成第一个任务 + actFlowCommonService.completeTask(taskId, userId); + // 保存快照 + processHandleService.saveToSnapshot(processInfoVO,userId); + } + + @Override + public void approveTask(ProcessInfoVO processInfoVO, boolean pass) { + BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO(); + String taskId = processTask.getTaskId(); + // 获取task + if (StringUtils.isBlank(taskId) || !actFlowCommonService.taskExists(taskId)) { + throw new JeroBootException("taskId为空或任务不存在"); + } + // 获取当前节点的id + ProcessApprovalRecord processApprovalRecord = actFlowCommonService.getNodeIdByTaskId(taskId); + String xmlNodeId = processApprovalRecord.getNodeId(); + //任务Id 查询任务对象 + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + String processInstanceId = task.getProcessInstanceId(); + String userId = actFlowCommonService.getOriginTaskAssignee(taskId); + if(Objects.isNull(task)){ + throw new JeroBootException("找不到对应任务"); + } + if (pass && task.getName().equals("法规部门处理人审批")) { + startRegulatoryProcess(processInfoVO, processInstanceId); + } + if(Objects.isNull(processTask.getCommitFlag())){ + processTask.setCommitFlag(pass ? ActivitiCommon.COMMIT_FLAG1 : ActivitiCommon.COMMIT_FLAG2); + } + // 更新审批表为完成,填充数据 + actFlowCommonService.updateApprovalInfo(processTask, taskId); + // 设置流程变量 + runtimeService.setVariable(processInstanceId, PASS, pass); + // 审批节点 + actFlowCommonService.completeTask(taskId, userId); + // 驳回,结束所有节点 + processApprovalRecordService.updateApprovalRecordFinishFlag(pass, taskId, xmlNodeId, processInstanceId); + // 保存快照 + // 获取流程通用数据 + ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId); + if(!Objects.isNull(process)){ + BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO(); + basicProcessInfoDTO.setProcessName(process.getPrcName()); + basicProcessInfoDTO.setProcessType(process.getPrcType()); + basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId()); + basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId()); + basicProcessInfoDTO.setProcessDescription(process.getPrcMes()); + basicProcessInfoDTO.setProcessDueDate(process.getDueTime()); + processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO); + // 保存快照 + processHandleService.saveToSnapshot(processInfoVO,userId); + } + } + + @Override + public void submit(ProcessInfoVO processInfoVO) { + BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO(); + String taskId = processTask.getTaskId(); + // 获取task + if (StringUtils.isBlank(taskId) || !actFlowCommonService.taskExists(taskId)) { + throw new JeroBootException("taskId为空或任务不存在"); + } + //任务Id 查询任务对象 + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + if(Objects.isNull(task)){ + throw new JeroBootException("找不到对应任务"); + } + // 人员信息 + Map userInfoMap = processInfoVO.getUserInfoMap(); + // 设置流程变量 + Map actVariables = setVariables(userInfoMap); + String processInstanceId = task.getProcessInstanceId(); + runtimeService.setVariables(processInstanceId,actVariables); + String userId = actFlowCommonService.getOriginTaskAssignee(taskId); + // 发起节点 更新业务数据 + startNodeBusProcess(processInfoVO); + // 更新审批表为完成,填充数据 + actFlowCommonService.updateApprovalInfo(processTask, taskId); + // 审批节点 + actFlowCommonService.completeTask(taskId, userId); + // 保存快照 + // 获取流程通用数据 + ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId); + if(!Objects.isNull(process)){ + BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO(); + basicProcessInfoDTO.setProcessName(process.getPrcName()); + basicProcessInfoDTO.setProcessType(process.getPrcType()); + basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId()); + basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId()); + basicProcessInfoDTO.setProcessDescription(process.getPrcMes()); + basicProcessInfoDTO.setProcessDueDate(process.getDueTime()); + processInfoVO.setBasicProcessInfoDTO(basicProcessInfoDTO); + // 保存快照 + processHandleService.saveToSnapshot(processInfoVO,userId); + } + } + + @Override + public ProcessInfoVO getHandleData(String taskId) { + if (!actFlowCommonService.taskExists(taskId)) { + throw new JeroBootException("任务不存在"); + } + ProcessInfoVO result = new ProcessInfoVO<>(); + // 使用流程引擎根据taskId找到流程实例Id + String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId); + // 获取流程通用数据 + ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId); + if(!Objects.isNull(process)){ + BasicProcessInfoDTO basicProcessInfoDTO = new BasicProcessInfoDTO(); + basicProcessInfoDTO.setProcessName(process.getPrcName()); + basicProcessInfoDTO.setProcessType(process.getPrcType()); + basicProcessInfoDTO.setProcessDefinitionId(process.getProcessDefinitionId()); + basicProcessInfoDTO.setProcessInstanceId(process.getProcessInstanceId()); + basicProcessInfoDTO.setProcessDescription(process.getPrcMes()); + basicProcessInfoDTO.setProcessDueDate(process.getDueTime()); + result.setBasicProcessInfoDTO(basicProcessInfoDTO); + } + // 获取流程实例数据 + ProcessVehicleDomesticReleaseVo processVehicleDomesticReleaseVo = new ProcessVehicleDomesticReleaseVo(); + // 流程表 + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(ProcessVehicleDomesticRelease::getProcessInstanceId, processInstanceId); + ProcessVehicleDomesticRelease processVehicleDomesticRelease = getOne(lambdaQueryWrapper,false); + processVehicleDomesticReleaseVo.setCopyUser(processVehicleDomesticRelease.getCopyUser()); + // 业务主表 + LawsVehicleDomesticLibrary lawsVehicleDomesticLibrary = lawsVehicleDomesticLibraryService.getById(processVehicleDomesticRelease.getVehicleId()); + processVehicleDomesticReleaseVo.setRemark(lawsVehicleDomesticLibrary.getRemark()); + processVehicleDomesticReleaseVo.setEnergyType(lawsVehicleDomesticLibrary.getEnergyType()); + // 业务子表 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(LawsVehicleDomesticLibrarySublist::getVehicleId, processVehicleDomesticRelease.getVehicleId()); + LawsVehicleDomesticLibrarySublist lawsVehicleDomesticLibrarySublist = lawsVehicleDomesticLibrarySublistService.getOne(queryWrapper); + BeanUtils.copyProperties(lawsVehicleDomesticLibrarySublist, processVehicleDomesticReleaseVo); + result.setBusinessInfoDTO(processVehicleDomesticReleaseVo); + return result; + } + + private void startRegulatoryProcess(ProcessInfoVO processInfoVO, String processInstanceId) { + ProcessVehicleDomesticReleaseVo businessInfoDTO = processInfoVO.getBusinessInfoDTO(); + if (!Objects.isNull(businessInfoDTO)) { + ProcessVehicleDomesticRelease processVehicleDomesticRelease = getOne(new LambdaQueryWrapper().eq(ProcessVehicleDomesticRelease::getProcessInstanceId, processInstanceId), false); + LawsVehicleDomesticLibrary lawsVehicleDomesticLibrary = lawsVehicleDomesticLibraryService.getById(processVehicleDomesticRelease.getVehicleId()); + lawsVehicleDomesticLibrary.setVehicleModel(businessInfoDTO.getVehicleModel()); // 整车型号 + lawsVehicleDomesticLibrary.setVinTopEight(businessInfoDTO.getVinTopEight()); // VIN前八位 + lawsVehicleDomesticLibrary.setVehicleBasis(businessInfoDTO.getVehicleBasis()); // 整车型号编制依据 + lawsVehicleDomesticLibrary.setVinBasis(businessInfoDTO.getVinBasis()); // VIN编制依据 + lawsVehicleDomesticLibrary.setRegulatoryEngineer(UserUtils.getUserId()); // 法规工程师 + lawsVehicleDomesticLibraryService.updateById(lawsVehicleDomesticLibrary); + } + } + + private Map changeVariables(Map userInfoMap) { + Map map = new HashMap<>(); + userInfoMap.forEach((key, value) -> { + if(Objects.equals("checkUserLeader2List",key + "List")){ + map.put(key + "List", value); + } + map.put(key, value); + }); + return map; + } + + private void startNodeBusProcess(ProcessInfoVO processInfoVO) { + ProcessVehicleDomesticReleaseVo businessInfoDTO = processInfoVO.getBusinessInfoDTO(); + // 保存数据到 国内整车型号及VIN前八位管控库表 + LawsVehicleDomesticLibrary lawsVehicleDomesticLibrary = new LawsVehicleDomesticLibrary(); + BeanUtils.copyProperties(businessInfoDTO, lawsVehicleDomesticLibrary); + lawsVehicleDomesticLibrary.setIsFinish(Constant.NOT_FINISH); // 流程未完成 + lawsVehicleDomesticLibrary.setApplicant(UserUtils.getUserId()); // 流程发起人 + lawsVehicleDomesticLibraryService.save(lawsVehicleDomesticLibrary); + String vehicleId = lawsVehicleDomesticLibrary.getId(); // 主表id + // 保存数据到 国内整车型号及VIN前八位管控库子表 + LawsVehicleDomesticLibrarySublist lawsVehicleDomesticLibrarySublist = new LawsVehicleDomesticLibrarySublist(); + BeanUtils.copyProperties(businessInfoDTO, lawsVehicleDomesticLibrarySublist); + lawsVehicleDomesticLibrarySublist.setVehicleId(vehicleId); + lawsVehicleDomesticLibrarySublistService.save(lawsVehicleDomesticLibrarySublist); + // 保存数据到 国内整车型号及VIN前八位管控库流程表 + ProcessVehicleDomesticRelease processVehicleDomesticRelease = new ProcessVehicleDomesticRelease(); + processVehicleDomesticRelease.setVehicleId(vehicleId); + processVehicleDomesticRelease.setProcessInstanceId(businessInfoDTO.getProcessInstanceId()); + processVehicleDomesticRelease.setCopyUser(businessInfoDTO.getCopyUser()); + this.save(processVehicleDomesticRelease); + } + + private Map setVariables(Map userInfoMap) { + Map map = new HashMap<>(); + // 人员信息 + userInfoMap.forEach((key, value) -> { + if(Objects.equals("checkUserLeader1List",key + "List") || + Objects.equals("checkUserLeader2List",key + "List") || + Objects.equals("checkUserLeader3List",key + "List") || + Objects.equals("checkUserLeader4List",key + "List")){ + map.put(key, value); + map.put(key + "List", Arrays.asList(value.toString().split(","))); + return; + } + map.put(key, value); + }); + return map; + } + private StringBuilder validatorExcel(String energyType, List excelList) { StringBuilder msg; if (Constant.FUEL_OIL.equals(energyType)) { diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/vo/ProcessVehicleDomesticReleaseVo.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/vo/ProcessVehicleDomesticReleaseVo.java new file mode 100644 index 00000000..ccee8a34 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/vehicledomestic/vo/ProcessVehicleDomesticReleaseVo.java @@ -0,0 +1,135 @@ +package com.jero.modules.activiti.process.vehicledomestic.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; +import java.util.Date; + + +@Data +public class ProcessVehicleDomesticReleaseVo { + + @ApiModelProperty(value = "主键ID") + private String id; + + @ApiModelProperty(value = "流程实例Id") + private String processInstanceId; + + @ApiModelProperty(value = "抄送人员") + private String copyUser; + + @ApiModelProperty(value = "能源类型") + private String energyType; + + @ApiModelProperty(value = "整车型号") + private String vehicleModel; + + @ApiModelProperty(value = "vin前八位") + private String vinTopEight; + + @ApiModelProperty(value = "整车型号编制依据") + private String vehicleBasis; + + @ApiModelProperty(value = "vin编制依据") + private String vinBasis; + + @ApiModelProperty(value = "代替整车型号") + private String insteadVehicleModel; + + @ApiModelProperty(value = "申请人") + private String applicant; + + @ApiModelProperty(value = "完成日期") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date finishDate; + + @ApiModelProperty(value = "备注") + private String remark; + + @ApiModelProperty(value = "法规工程师") + private String regulatoryEngineer; + + @ApiModelProperty(value = "状态") + private String state; + + @ApiModelProperty(value = "车型代码") + private String vehicleTypeCode; + + @ApiModelProperty(value = "动力类型") + private String powerType; + + @ApiModelProperty(value = "车辆外廓尺寸(长*宽*高)") + private String carOutSize; + + @ApiModelProperty(value = "前后标牌") + private String aroundSignage; + + @ApiModelProperty(value = "整备质量(教练车)") + private String vehicleQuality; + + @ApiModelProperty(value = "驱动型式") + private String drivingType; + + @ApiModelProperty(value = "车身形式") + private String bodyType; + + @ApiModelProperty(value = "燃料类型") + private String fuelType; + + @ApiModelProperty(value = "发动机型号") + private String engineType; + + @ApiModelProperty(value = "变速器型式") + private String transmissionType; + + @ApiModelProperty(value = "变速器型号") + private String transmissionModel; + + @ApiModelProperty(value = "发动机排量(L)") + private String engineCapacity; + + @ApiModelProperty(value = "驱动电机型号") + private String driveMotorModel; + + @ApiModelProperty(value = "驱动电机峰值功率(kw)") + private String driveMotorPeakPower; + + @ApiModelProperty(value = "驱动电机额定功率(kw)") + private String driveMotorRatedPower; + + @ApiModelProperty(value = "驱动电机类型") + private String driveMotorType; + + @ApiModelProperty(value = "动力电池型号") + private String powerBatteryModel; + + @ApiModelProperty(value = "电池类型") + private String batteryType; + + @ApiModelProperty(value = "混合方式") + private String mixedModel; + + @ApiModelProperty(value = "动力电池组标称电压") + private String powerBatteryVoltage; + + @ApiModelProperty(value = "动力电池组总成标称容量") + private String powerBatteryVolume; + + @ApiModelProperty(value = "驱动电机的布置位置") + private String driveMotorPlace; + + @ApiModelProperty(value = "排放水平") + private String emissionLevel; + + @ApiModelProperty(value = "油耗阶段") + private String fuelConsumptionStage; + + @ApiModelProperty(value = "前排正面气囊") + private String frontFrontAirbag; + + @ApiModelProperty(value = "前排座椅侧气囊") + private String frontSeatSideAirbags; + +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/businessSupport/common/Constant.java b/laws-modules/src/main/java/com/jero/modules/laws/businessSupport/common/Constant.java index b8e6a104..8adcfcc8 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/businessSupport/common/Constant.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/businessSupport/common/Constant.java @@ -3,15 +3,40 @@ package com.jero.modules.laws.businessSupport.common; public interface Constant { /** - * 整车型号及vin前八位库-状态:现行 + * 国内整车型号及vin前八位库-燃料类型:传统燃油 + */ + String FUEL_OIL = "1"; + + /** + * 国内整车型号及vin前八位库-燃料类型:混合动力 + */ + String HYBRID_POWER = "2"; + + /** + * 国内整车型号及vin前八位库-燃料类型:纯电动 + */ + String PURE_ELECTRIC = "3"; + + /** + * 整车型号及vin前八位库-状态:生效 */ String TAKE_EFFECT = "1"; /** - * 整车型号及vin前八位库-状态:废弃 + * 整车型号及vin前八位库-状态:作废 */ String ABOLISH = "2"; + /** + * 整车型号及vin前八位库-流程未完成 + */ + String NOT_FINISH = "0"; + + /** + * 整车型号及vin前八位库-流程已完成 + */ + String IS_FINISH = "1"; + /** * 法规释疑库-发布状态:未发布 */ diff --git a/laws-modules/src/main/java/com/jero/modules/laws/businessSupport/entity/LawsVehicleDomesticLibrary.java b/laws-modules/src/main/java/com/jero/modules/laws/businessSupport/entity/LawsVehicleDomesticLibrary.java index 8b39def7..1b387c86 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/businessSupport/entity/LawsVehicleDomesticLibrary.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/businessSupport/entity/LawsVehicleDomesticLibrary.java @@ -67,12 +67,15 @@ public class LawsVehicleDomesticLibrary implements Serializable { @ApiModelProperty(value = "法规工程师") private String regulatoryEngineer; - @ApiModelProperty(value = "状态") + @ApiModelProperty(value = "状态 1-生效 2-作废") private String state; @ApiModelProperty(value = "逻辑删除") private Integer delFlag; + @ApiModelProperty(value = "流程是否完成 0-未完成 1-已完成") + private String isFinish; + @ApiModelProperty(value = "创建人") private String createBy; @@ -97,28 +100,4 @@ public class LawsVehicleDomesticLibrary implements Serializable { @ApiModelProperty(value = "子表数据") private LawsVehicleDomesticLibrarySublist lawsVehicleDomesticLibrarySublist; - @ApiModelProperty(value = "发动机型号") - private String engineType; - - @ApiModelProperty(value = "变速器型式") - private String transmissionType; - - @ApiModelProperty(value = "变速器型号") - private String transmissionModel; - - @ApiModelProperty(value = "发动机排量(L)") - private String engineCapacity; - - @ApiModelProperty(value = "排放水平") - private String emissionLevel; - - @ApiModelProperty(value = "油耗阶段") - private String fuelConsumptionStage; - - @ApiModelProperty(value = "前排正面气囊") - private String frontFrontAirbag; - - @ApiModelProperty(value = "前排座椅侧气囊") - private String frontSeatSideAirbags; - } diff --git a/laws-modules/src/main/resources/bpmn/国内整车型号和VIN前八位管控流程.bpmn20.xml b/laws-modules/src/main/resources/bpmn/国内整车型号和VIN前八位管控流程.bpmn20.xml new file mode 100644 index 00000000..81a5d961 --- /dev/null +++ b/laws-modules/src/main/resources/bpmn/国内整车型号和VIN前八位管控流程.bpmn20.xml @@ -0,0 +1,173 @@ + + + + 国内整车型号和VIN前八位管控流程 + + + + + + + + ${!pass} + + + + + + + + + + + + + + + + ${pass} + + + + + + ${pass} + + + + + + ${pass} + + + + + + + + + + ${pass} + + + ${!pass} + + + ${!pass} + + + ${!pass} + + + ${!pass} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +