Merge remote-tracking branch 'origin/SecondStage' into SecondStage

This commit is contained in:
梁琦涛
2024-09-25 18:14:40 +08:00
12 changed files with 786 additions and 69 deletions
@@ -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;
@@ -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;
@@ -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";
}
@@ -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<T> startProcess(@Validated @RequestBody ProcessInfoVO<ProcessVehicleDomesticReleaseVo> processInfoVO) {
processVehicleDomesticReleaseService.startProcess(processInfoVO);
return Result.OK();
}
@AutoLog(value = "国内整车型号和VIN前八位管控流程-同意")
@ApiOperation(value = "国内整车型号和VIN前八位管控流程-同意", notes = "国内整车型号和VIN前八位管控流程-同意")
@PostMapping("/agree")
public Result<T> agree(@Validated @RequestBody ProcessInfoVO<ProcessVehicleDomesticReleaseVo> processInfoVO) {
processVehicleDomesticReleaseService.approveTask(processInfoVO, true);
return Result.OK();
}
@AutoLog(value = "国内整车型号和VIN前八位管控流程-驳回")
@ApiOperation(value = "国内整车型号和VIN前八位管控流程-驳回", notes = "国内整车型号和VIN前八位管控流程-驳回")
@PostMapping("/reject")
public Result<T> reject(@Validated @RequestBody ProcessInfoVO<ProcessVehicleDomesticReleaseVo> processInfoVO) {
processVehicleDomesticReleaseService.approveTask(processInfoVO, false);
return Result.OK();
}
@AutoLog(value = "国内整车型号和VIN前八位管控流程-提交")
@ApiOperation(value = "国内整车型号和VIN前八位管控流程-提交", notes = "国内整车型号和VIN前八位管控流程-提交")
@PostMapping("/submit")
public Result<T> submit(@Validated @RequestBody ProcessInfoVO<ProcessVehicleDomesticReleaseVo> 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));
}
}
@@ -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;
/**
* <p>
@@ -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;
}
@@ -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<ProcessVehicleDomesticRelease>().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<SysUser> querySysUser = new LambdaQueryWrapper<>();
querySysUser.eq(SysUser::getUsername,processVehicleDomesticRelease.getCreateBy());
SysUser sysUser = sysUserService.getOne(querySysUser,false);
if(!Objects.isNull(sysUser)){
sendMessageDTO.setSendUser(sysUser.getId());
}
Map<String, String> sendMap = new HashMap<>();
sendMap.put("standardNumber","测试占位符1");
sendMap.put("standardName", "测试占位符2");
sendMessageDTO.setMap(sendMap);
sendMessageAPI.sendMessage(sendMessageDTO);
log.info("国内整车型号和VIN前八位管控流程:监听执行器执行结束");
}
}
@@ -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<ProcessV
ModelAndView exportTemplateByType(HttpServletRequest request);
Result<?> importExcel(HttpServletRequest request);
void startProcess(ProcessInfoVO<ProcessVehicleDomesticReleaseVo> processInfoVO);
void approveTask(ProcessInfoVO<ProcessVehicleDomesticReleaseVo> processInfoVO, boolean pass);
void submit(ProcessInfoVO<ProcessVehicleDomesticReleaseVo> processInfoVO);
ProcessInfoVO<ProcessVehicleDomesticReleaseVo> getHandleData(String taskId);
}
@@ -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<ProcessVehicleDomesticReleaseMapper, ProcessVehicleDomesticRelease> implements IProcessVehicleDomesticReleaseService {
private static final String NEWLINE_CHARACTER = "</br>";
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<Proces
return Result.OK(excelList);
}
@Override
public void startProcess(ProcessInfoVO<ProcessVehicleDomesticReleaseVo> processInfoVO) {
// 流程Key
String processDefinitionKey = ProcessType.DOMESTIC_VEHICLE_CONTROL_PUBLISH.getProcessKey();
// 流程信息
BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO();
// 任务信息
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
// 人员信息
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
// 业务数据
ProcessVehicleDomesticReleaseVo businessInfoDTO = processInfoVO.getBusinessInfoDTO();
// 设置流程变量
Map<String, Object> 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<ProcessVehicleDomesticReleaseVo> 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<ProcessVehicleDomesticReleaseVo> 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<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
// 设置流程变量
Map<String, Object> 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<ProcessVehicleDomesticReleaseVo> getHandleData(String taskId) {
if (!actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("任务不存在");
}
ProcessInfoVO<ProcessVehicleDomesticReleaseVo> 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<ProcessVehicleDomesticRelease> 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<LawsVehicleDomesticLibrarySublist> 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<ProcessVehicleDomesticReleaseVo> processInfoVO, String processInstanceId) {
ProcessVehicleDomesticReleaseVo businessInfoDTO = processInfoVO.getBusinessInfoDTO();
if (!Objects.isNull(businessInfoDTO)) {
ProcessVehicleDomesticRelease processVehicleDomesticRelease = getOne(new LambdaQueryWrapper<ProcessVehicleDomesticRelease>().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<String, Object> changeVariables(Map<String, Object> userInfoMap) {
Map<String, Object> 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<ProcessVehicleDomesticReleaseVo> 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<String, Object> setVariables(Map<String, Object> userInfoMap) {
Map<String, Object> 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)) {
@@ -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;
}
@@ -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";
/**
* 法规释疑库-发布状态:未发布
*/
@@ -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;
}