添加关键零部件型号申请流程

This commit is contained in:
梁琦涛
2024-09-29 18:22:11 +08:00
parent 2a29683266
commit d588f3d193
17 changed files with 928 additions and 4 deletions
@@ -0,0 +1,14 @@
package com.jero.modules.activiti.process.part.common;
/**
* @author liJiaRao
* @date 2024-06-17 15:28
*/
public class ProcessNewStandardImportConstants {
private ProcessNewStandardImportConstants(){}
/**
* 法规工程师发起
*/
public static final String STANDARD_ENGINEER_START = "SID-2D0F3497-9E7D-4BC8-9A93-DAE6239E191B";
}
@@ -0,0 +1,102 @@
package com.jero.modules.activiti.process.part.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.common.system.base.controller.JeroController;
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.part.entity.ProcessPartTypeApply;
import com.jero.modules.activiti.process.part.service.IProcessPartTypeApplyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
/**
* 流程-关键零部件型号申请流程
*
* @author xxxxx
*/
@Slf4j
@Api(tags = "关键零部件型号申请流程")
@RestController
@RequestMapping("process/processPartTypeApply")
public class ProcessPartTypeApplyController extends JeroController<ProcessPartTypeApply, IProcessPartTypeApplyService> {
@Resource
private IProcessPartTypeApplyService sccService;
@Resource
private ActFlowCommonService actFlowCommonService;
@AutoLog(value = "关键零部件型号申请流程-发起流程")
@ApiOperation(value = "关键零部件型号申请流程-发起流程", notes = "关键零部件型号申请流程-发起流程")
@PostMapping(value = "/start")
public Result<T> startProcess(@Validated @RequestBody ProcessInfoVO<ProcessPartTypeApply> processInfoVO) {
sccService.startProcess(processInfoVO);
return Result.OK();
}
@AutoLog(value = "关键零部件型号申请流程-同意")
@ApiOperation(value = "关键零部件型号申请流程-同意", notes = "关键零部件型号申请流程-同意")
@PostMapping("/agree")
public Result<T> agree(@Validated @RequestBody ProcessInfoVO<ProcessPartTypeApply> processInfoVO) {
sccService.approveTask(processInfoVO, true);
return Result.OK();
}
@AutoLog(value = "关键零部件型号申请流程-驳回")
@ApiOperation(value = "关键零部件型号申请流程-驳回", notes = "关键零部件型号申请流程-驳回")
@PostMapping("/reject")
public Result<T> reject(@Validated @RequestBody ProcessInfoVO<ProcessPartTypeApply> processInfoVO) {
sccService.approveTask(processInfoVO, false);
return Result.OK();
}
@AutoLog(value = "关键零部件型号申请流程-提交")
@ApiOperation(value = "关键零部件型号申请流程-提交", notes = "关键零部件型号申请流程-提交")
@PostMapping("/submit")
public Result<T> submit(@Validated @RequestBody ProcessInfoVO<ProcessPartTypeApply> processInfoVO) {
sccService.submit(processInfoVO);
return Result.OK();
}
/**
* 关键零部件型号申请流程-办理
* @param taskId
*/
@AutoLog(value = "关键零部件型号申请流程-办理")
@ApiOperation(value="关键零部件型号申请流程-办理", notes="关键零部件型号申请流程-办理")
@GetMapping("/handle/{taskId}")
@Translation
public Result<?> handle(@PathVariable("taskId") String taskId) {
ProcessDraft draft = actFlowCommonService.getExistDraftByTaskId(taskId, ProcessTypeEnum.NEW_STANDARD_IMPORT);
if (draft != null) {
return Result.OK(draft);
}
return Result.OK(sccService.getHandleData(taskId));
}
/**
* 生成
* @param scc
*/
@AutoLog(value = "关键零部件型号申请流程-生成")
@ApiOperation(value="关键零部件型号申请流程-生成", notes="关键零部件型号申请流程-生成")
@PostMapping("/generate")
@Translation
public Result<?> generate(@RequestPart("scc") ProcessPartTypeApply scc,
@RequestPart("modelFile") MultipartFile modelFile,
@RequestPart(name = "splitFile", required = false) MultipartFile splitFile) {
return Result.OK(sccService.generate(scc, modelFile, splitFile));
}
}
@@ -0,0 +1,78 @@
package com.jero.modules.activiti.process.part.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jero.common.aspect.annotation.Dict;
import com.jero.modules.laws.marketStandard.entity.LawsMarketStandardDetail;
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;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
*
* @TableName process_standard_compliance_check
*/
@TableName(value ="process_part_type_apply")
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="process_part_type_apply对象", description="关键零部件型号申请流程")
public class ProcessPartTypeApply implements Serializable {
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private String id;
/**
* 流程实例id
*/
@ApiModelProperty(value = "流程实例id")
private String processInstanceId;
/**创建人*/
@ApiModelProperty(value = "创建人")
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建日期")
private Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新日期")
private Date updateTime;
/**
* 0表示未删除,1表示删除
*/
@ApiModelProperty(value = "0表示未删除,1表示删除")
@TableLogic
private Integer delFlag;
/**关键零部件型号ids*/
@ApiModelProperty(value = "关键零部件型号ids")
@TableField(exist = false)
private String ids;
/**
* 关键零部件型号列表
*/
@TableField(exist = false)
private List<ProcessPartTypeApplyRecord> list;
}
@@ -0,0 +1,240 @@
package com.jero.modules.activiti.process.part.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jero.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.Date;
/**
* 关键零部件型号库
*
* @TableName laws_part_type
*/
@TableName(value ="process_part_type_apply_record")
@Data
public class ProcessPartTypeApplyRecord implements Serializable {
/**
* 主键ID
*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键ID")
private String id;
/**
* 创建时间
*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 更新人
*/
@ApiModelProperty(value = "更新人")
private String updateBy;
/**
* 更新时间
*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间")
private Date updateTime;
/**
* 0表示未删除,1表示删除
*/
@TableLogic
@ApiModelProperty(value = "0表示未删除,1表示删除")
private Integer delFlag;
/**
* 零件号
*/
@ApiModelProperty(value = "零件号")
@Excel(name = "零件号", width = 15)
@NotBlank(message = "零件号")
private String partNum;
/**
* 关键零部件id
*/
@ApiModelProperty(value = "关键零部件id")
private String partRelevanceId;
/**
* 关键零部件名称
*/
@ApiModelProperty(value = "关键零部件名称")
@Excel(name = "关键零部件名称", width = 15)
@NotBlank(message = "关键零部件名称不能为空")
@TableField(exist = false)
private String regPartNameCn;
/**
* 关键零部件名称(英文)
*/
@ApiModelProperty(value = "关键零部件名称(英文)")
@Excel(name = "关键零部件名称(英文)", width = 15)
@TableField(exist = false)
private String regPartNameEn;
/**
* 零件名称
*/
@NotBlank(message = "零件名称")
@ApiModelProperty(value = "零件名称")
@Excel(name = "零件名称", width = 15)
private String partName;
/**
* 生产厂家
*/
@NotBlank(message = "生产厂家")
@ApiModelProperty(value = "生产厂家")
@Excel(name = "生产厂家", width = 15, dicCode = "production_factory_code", dictTable = "laws_part_production_factory", dicText = "production_factory")
@Dict(dicCode = "production_factory_code", dictTable = "laws_part_production_factory", dicText = "production_factory")
private String productionFactory;
/**
* 适用车型
*/
@NotBlank(message = "适用车型不能为空")
@ApiModelProperty(value = "适用车型")
@Excel(name = "适用车型", width = 15, dicCode = "applicable_vehicle_type")
@Dict(dicCode = "applicable_vehicle_type")
private String applicableVehicleType;
/**
* 技术特性与已有零件全部相同
*/
@NotBlank(message = "技术特性与已有零件全部相同")
@ApiModelProperty(value = "技术特性与已有零件全部相同")
private String technicalFeature;
/**
* 型号型式
*/
@NotBlank(message = "型号型式不能为空")
@ApiModelProperty(value = "型号型式")
@Excel(name = "型号型式", width = 15, dicCode = "form_type")
@Dict(dicCode = "form_type")
@TableField(exist = false)
private String formType;
/**
* 技术特性判定要求
*/
@ApiModelProperty(value = "技术特性判定要求")
@Excel(name = "技术特性判定要求", width = 15)
@TableField(exist = false)
private String decisionRequirement;
/**
* 已有零件对应零件号
*/
@ApiModelProperty(value = "已有零件对应零件号")
@Excel(name = "已有零件对应零件号", width = 15)
private String alreadyPartNum;
/**
* 已有零件对应零件号id
*/
@ApiModelProperty(value = "已有零件对应零件号id")
private String alreadyPartNumId;
/**
* 分类(国内)
*/
@ApiModelProperty(value = "分类(国内)")
@Excel(name = "分类(国内)", width = 15,dicCode = "classification")
@Dict(dicCode = "classification")
@TableField(exist = false)
private String classification;
/**
* 适用市场
*/
@Excel(name = "适用市场", width = 15,dicCode = "market_state")
@NotBlank(message = "适用市场不能为空")
@ApiModelProperty(value = "适用市场")
@Dict(dicCode = "market_state")
@TableField(exist = false)
private String applicableMarket;
/**
* 零部件认证交付物
*/
@ApiModelProperty(value = "零部件认证交付物")
@Excel(name = "零部件认证交付物", width = 15,dicCode = "parts_certified_deliverables")
@Dict(dicCode = "parts_certified_deliverables")
@TableField(exist = false)
private String partsCertifiedDeliverables;
/**
* 责任部门
*/
@NotBlank(message = "责任部门不能为空")
@Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name")
@ApiModelProperty(value = "责任部门")
@Excel(name = "责任部门", width = 15, dictTable = "sys_depart", dicCode = "id", dicText = "depart_name")
@TableField(exist = false)
private String responsibleDepartment;
/**
* 责任部门专业模块
*/
@NotBlank(message = "责任部门专业模块不能为空")
@ApiModelProperty(value = "责任部门专业模块")
@Dict(dicCode = "responsible_module")
@Excel(name = "责任部门专业模块", width = 15, dicCode = "responsible_module")
@TableField(exist = false)
private String responsibleModule;
/**
* 申请人
*/
@ApiModelProperty(value = "申请人")
@Dict(dictTable = "sys_user", dicCode = "id", dicText = "username")
@Excel(name = "申请人", width = 15, dictTable = "sys_user", dicCode = "id", dicText = "username")
private String createBy;
/**
* 申请部门
*/
@ApiModelProperty(value = "申请部门")
@Dict(dictTable = "sys_depart", dicCode = "id", dicText = "depart_name")
@Excel(name = "申请部门", width = 15, dictTable = "sys_depart", dicCode = "id", dicText = "depart_name")
@TableField(exist = false)
private String depId;
/**
* 完成时间
*/
@ApiModelProperty(value = "完成时间")
@Excel(name = "完成时间",format = "yyyy-MM-dd")
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date successTime;
/**
* 状态
*/
@ApiModelProperty(value = "状态")
@Excel(name = "状态", dicCode = "part_type_status")
@Dict(dicCode = "part_type_status")
private String status;
/**
* 替换前id
*/
@ApiModelProperty(value = "替换前id")
private String lastId;
/**
* 流程id
*/
@ApiModelProperty(value = "流程id")
private String processId;
/**
* FND+GPC关联
*/
@ApiModelProperty(value = "FND+GPC关联")
private String fndGpc;
}
@@ -0,0 +1,26 @@
package com.jero.modules.activiti.process.part.listener;
import com.jero.modules.activiti.process.part.service.IProcessPartTypeApplyService;
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;
/**
* @author liJiaRao
* @date 2023-06-18 15:43
*/
@Slf4j
@Component
public class ProcessPartTypeApplyEndListener implements ExecutionListener {
@Resource
private IProcessPartTypeApplyService processPartTypeApplyService;
@Override
public void notify(DelegateExecution delegateExecution) {
processPartTypeApplyService.flowListener(delegateExecution);
}
}
@@ -0,0 +1,19 @@
package com.jero.modules.activiti.process.part.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.process.part.entity.ProcessPartTypeApply;
/**
* @author
* @description 针对表【process_standard_import】的数据库操作Mapper
* @createDate 2024-07-04 10:21:21
* @Entity
*/
public interface ProcessPartTypeApplyMapper extends BaseMapper<ProcessPartTypeApply> {
}
@@ -0,0 +1,19 @@
package com.jero.modules.activiti.process.part.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.modules.activiti.process.part.entity.ProcessPartTypeApplyRecord;
/**
* @author
* @description 针对表【process_standard_import】的数据库操作Mapper
* @createDate 2024-07-04 10:21:21
* @Entity
*/
public interface ProcessPartTypeApplyRecordMapper extends BaseMapper<ProcessPartTypeApplyRecord> {
}
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.activiti.process.part.mapper.ProcessPartTypeApplyMapper">
</mapper>
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jero.modules.activiti.process.part.mapper.ProcessPartTypeApplyRecordMapper">
</mapper>
@@ -0,0 +1,13 @@
package com.jero.modules.activiti.process.part.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.activiti.process.part.entity.ProcessPartTypeApplyRecord;
/**
* @author ThinkBook
* @description 针对表【process_standard_compliance_check】的数据库操作Service
* @createDate 2024-07-04 10:21:21
*/
public interface IProcessPartTypeApplyRecordService extends IService<ProcessPartTypeApplyRecord> {
}
@@ -0,0 +1,27 @@
package com.jero.modules.activiti.process.part.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO;
import com.jero.modules.activiti.process.part.entity.ProcessPartTypeApply;
import org.activiti.engine.delegate.DelegateExecution;
import org.springframework.web.multipart.MultipartFile;
/**
* @author ThinkBook
* @description 针对表【process_standard_compliance_check】的数据库操作Service
* @createDate 2024-07-04 10:21:21
*/
public interface IProcessPartTypeApplyService extends IService<ProcessPartTypeApply> {
void startProcess(ProcessInfoVO<ProcessPartTypeApply> processInfoVO);
void approveTask(ProcessInfoVO<ProcessPartTypeApply> processInfoVO, boolean b);
ProcessInfoVO<ProcessPartTypeApply> getHandleData(String taskId);
void submit(ProcessInfoVO<ProcessPartTypeApply> processInfoVO);
String generate(ProcessPartTypeApply scc, MultipartFile modelFile, MultipartFile splitFile);
void flowListener(DelegateExecution delegateExecution);
}
@@ -0,0 +1,24 @@
package com.jero.modules.activiti.process.part.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.modules.activiti.process.part.entity.ProcessPartTypeApplyRecord;
import com.jero.modules.activiti.process.part.mapper.ProcessPartTypeApplyRecordMapper;
import com.jero.modules.activiti.process.part.service.IProcessPartTypeApplyRecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* @author ThinkBook
* @description 针对表【process_standard_compliance_check】的数据库操作Service实现
* @createDate 2024-07-04 10:21:21
*/
@Slf4j
@Service
public class ProcessPartTypeApplyRecordServiceImpl extends ServiceImpl<ProcessPartTypeApplyRecordMapper, ProcessPartTypeApplyRecord>
implements IProcessPartTypeApplyRecordService {
}
@@ -0,0 +1,326 @@
package com.jero.modules.activiti.process.part.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.exception.JeroBootException;
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.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.part.entity.ProcessPartTypeApply;
import com.jero.modules.activiti.process.part.entity.ProcessPartTypeApplyRecord;
import com.jero.modules.activiti.process.part.mapper.ProcessPartTypeApplyMapper;
import com.jero.modules.activiti.process.part.service.IProcessPartTypeApplyRecordService;
import com.jero.modules.activiti.process.part.service.IProcessPartTypeApplyService;
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.part.entity.LawsPartType;
import com.jero.modules.laws.part.service.ILawsPartRelevanceService;
import com.jero.modules.laws.part.service.ILawsPartTypeService;
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.delegate.DelegateExecution;
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.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.*;
import static com.jero.modules.activiti.common.ActivitiCommon.PASS;
/**
* @author ThinkBook
* @description 针对表【process_standard_compliance_check】的数据库操作Service实现
* @createDate 2024-07-04 10:21:21
*/
@Slf4j
@Service
public class ProcessPartTypeApplyServiceImpl extends ServiceImpl<ProcessPartTypeApplyMapper, ProcessPartTypeApply>
implements IProcessPartTypeApplyService {
@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 ILawsPartTypeService lawsPartTypeService;
@Resource
private IProcessPartTypeApplyRecordService processPartTypeApplyRecordService;
@Override
public void startProcess(ProcessInfoVO<ProcessPartTypeApply> processInfoVO) {
// 流程Key
String processDefinitionKey = ProcessType.NEW_STANDARD_IMPORT.getProcessKey();
// 流程信息
BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO();
// 任务信息
BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO();
// 人员信息
Map<String, Object> userInfoMap = processInfoVO.getUserInfoMap();
// 业务数据
ProcessPartTypeApply 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.NEW_STANDARD_IMPORT.getValue());
// 第一个节点业务数据处理
this.startNodeBusProcess(processInfoVO);
// 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, 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);
}
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;
}
/**
* 第一个节点业务数据处理
* @param processInfoVO
*/
private void startNodeBusProcess(ProcessInfoVO<ProcessPartTypeApply> processInfoVO) {
ProcessPartTypeApply businessInfoDTO = processInfoVO.getBusinessInfoDTO();
saveOrUpdate(businessInfoDTO);
if(!StringUtils.isEmpty(businessInfoDTO.getIds())){
List<String> ids = Arrays.asList(businessInfoDTO.getIds().split(","));
LambdaUpdateWrapper<ProcessPartTypeApplyRecord> updateProcessPartTypeApplyRecord = new LambdaUpdateWrapper<>();
updateProcessPartTypeApplyRecord.in(ProcessPartTypeApplyRecord::getId,ids);
updateProcessPartTypeApplyRecord.set(ProcessPartTypeApplyRecord::getProcessId,businessInfoDTO.getId());
processPartTypeApplyRecordService.update(updateProcessPartTypeApplyRecord);
}
}
@Override
@Transactional(rollbackFor = JeroBootException.class)
public void approveTask(ProcessInfoVO<ProcessPartTypeApply> 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();
if(Objects.isNull(task)){
throw new JeroBootException("找不到对应任务");
}
String processInstanceId = task.getProcessInstanceId();
String userId = actFlowCommonService.getOriginTaskAssignee(taskId);
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<ProcessPartTypeApply> 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 String generate(ProcessPartTypeApply scc, MultipartFile modelFile, MultipartFile splitFile) {
// 新增流程主表数据
this.save(scc);
// 返回主键
return scc.getId();
}
@Override
public void flowListener(DelegateExecution delegateExecution) {
log.info("触发监听");
String processInstanceId = delegateExecution.getProcessInstanceId();
LambdaQueryWrapper<ProcessPartTypeApply> queryWrapperProcessPartTypeApply = new LambdaQueryWrapper<>();
queryWrapperProcessPartTypeApply.eq(ProcessPartTypeApply::getProcessInstanceId, processInstanceId);
ProcessPartTypeApply processPartTypeApply = getOne(queryWrapperProcessPartTypeApply,false);
if(Objects.isNull(processPartTypeApply)){
return;
}
LambdaQueryWrapper<ProcessPartTypeApplyRecord> queryProcessPartTypeApplyRecord = new LambdaQueryWrapper<>();
queryProcessPartTypeApplyRecord.eq(ProcessPartTypeApplyRecord::getProcessId,processPartTypeApply.getId());
List<ProcessPartTypeApplyRecord> listProcessPartTypeApplyRecord =
processPartTypeApplyRecordService.list(queryProcessPartTypeApplyRecord);
if(CollectionUtils.isEmpty(listProcessPartTypeApplyRecord)){
return;
}
Date d = new Date();
for (ProcessPartTypeApplyRecord processPartTypeApplyRecord : listProcessPartTypeApplyRecord) {
processPartTypeApplyRecord.setSuccessTime(d);
}
List<LawsPartType> list = JSON.parseArray(JSON.toJSONString(listProcessPartTypeApplyRecord),LawsPartType.class);
lawsPartTypeService.saveBatch(list);
}
@Override
public ProcessInfoVO<ProcessPartTypeApply> getHandleData(String taskId) {
if (!actFlowCommonService.taskExists(taskId)) {
throw new JeroBootException("任务不存在");
}
ProcessInfoVO<ProcessPartTypeApply> 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);
}
LambdaQueryWrapper<ProcessPartTypeApply> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(ProcessPartTypeApply::getProcessInstanceId, processInstanceId);
ProcessPartTypeApply data = getOne(lambdaQueryWrapper,false);
if(!Objects.isNull(data)){
LambdaQueryWrapper<ProcessPartTypeApplyRecord> queryProcessPartTypeApplyRecord = new LambdaQueryWrapper<>();
queryProcessPartTypeApplyRecord.eq(ProcessPartTypeApplyRecord::getProcessId,data.getId());
List<ProcessPartTypeApplyRecord> list = processPartTypeApplyRecordService.list(queryProcessPartTypeApplyRecord);
if(!CollectionUtils.isEmpty(list)){
data.setList(list);
}
result.setBusinessInfoDTO(data);
}
return result;
}
}
@@ -0,0 +1,11 @@
package com.jero.modules.activiti.process.part.vo;
import com.jero.modules.activiti.process.ni.entity.ProcessNewStandardImport;
import lombok.Data;
@Data
public class ProcessNewStandardImportVO {
ProcessNewStandardImport standardInfo;
}
@@ -121,8 +121,8 @@ public class LawsPartTypeController {
@PostMapping(value = "/add")
// @RequiresPermissions("keyPartBindingManage:add")
public Result<T> add(@Validated @RequestBody LawsPartType lawsPartType) {
lawsPartTypeService.add(lawsPartType);
return Result.OK(ResultCommon.OK);
String id = lawsPartTypeService.add(lawsPartType);
return Result.OK(id);
}
/**
@@ -24,7 +24,7 @@ public interface ILawsPartTypeService extends IService<LawsPartType> {
void deleteByIds(List<String> ids);
void add(LawsPartType lawsPartType);
String add(LawsPartType lawsPartType);
void edit(LawsPartType lawsPartType);
@@ -47,6 +47,7 @@ public class LawsPartTypeServiceImpl extends ServiceImpl<LawsPartTypeMapper, Law
QueryWrapper<LawsPartType> queryWrapper =
QueryGenerator.initQueryWrapper(lawsPartType, req.getParameterMap());
queryWrapper.eq("l1.del_flag","0");
queryWrapper.isNotNull("l1.success_time");
Page<LawsPartType> page = new Page<>(pageNo, pageSize);
IPage<LawsPartType> re = lawsPartTypeMapper.pageList(page, queryWrapper);
return re;
@@ -82,12 +83,21 @@ public class LawsPartTypeServiceImpl extends ServiceImpl<LawsPartTypeMapper, Law
}
@Override
public void add(LawsPartType lawsPartType) {
public String add(LawsPartType lawsPartType) {
save(lawsPartType);
return lawsPartType.getId();
}
@Override
public void edit(LawsPartType lawsPartType) {
LawsPartType lawsPartTypeOld = getById(lawsPartType.getId());
if(Objects.isNull(lawsPartTypeOld)){
throw new JeroBootException(ResultCommon.NO_CORRESPONDING_DATA_FOUND);
}
LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
if(!Objects.equals(lawsPartType.getCreateBy(),sysUser.getUsername())){
throw new JeroBootException(ResultCommon.NO_PERMISSION);
}
updateById(lawsPartType);
}
@@ -138,6 +148,7 @@ public class LawsPartTypeServiceImpl extends ServiceImpl<LawsPartTypeMapper, Law
QueryWrapper<LawsPartType> queryWrapper =
QueryGenerator.initQueryWrapper(lawsPartType, request.getParameterMap());
queryWrapper.eq("l1.del_flag","0");
queryWrapper.isNotNull("l1.success_time");
List<LawsPartType> re = lawsPartTypeMapper.pageList( queryWrapper);
// Step.2 AutoPoi 导出Excel