diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/common/ProcessNewStandardImportConstants.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/common/ProcessNewStandardImportConstants.java new file mode 100644 index 00000000..5cf5b427 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/common/ProcessNewStandardImportConstants.java @@ -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"; +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/controller/ProcessPartTypeApplyController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/controller/ProcessPartTypeApplyController.java new file mode 100644 index 00000000..b3d7213b --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/controller/ProcessPartTypeApplyController.java @@ -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 { + + @Resource + private IProcessPartTypeApplyService sccService; + + @Resource + private ActFlowCommonService actFlowCommonService; + + @AutoLog(value = "关键零部件型号申请流程-发起流程") + @ApiOperation(value = "关键零部件型号申请流程-发起流程", notes = "关键零部件型号申请流程-发起流程") + @PostMapping(value = "/start") + public Result startProcess(@Validated @RequestBody ProcessInfoVO processInfoVO) { + sccService.startProcess(processInfoVO); + return Result.OK(); + } + + @AutoLog(value = "关键零部件型号申请流程-同意") + @ApiOperation(value = "关键零部件型号申请流程-同意", notes = "关键零部件型号申请流程-同意") + @PostMapping("/agree") + public Result agree(@Validated @RequestBody ProcessInfoVO processInfoVO) { + sccService.approveTask(processInfoVO, true); + return Result.OK(); + } + + @AutoLog(value = "关键零部件型号申请流程-驳回") + @ApiOperation(value = "关键零部件型号申请流程-驳回", notes = "关键零部件型号申请流程-驳回") + @PostMapping("/reject") + public Result reject(@Validated @RequestBody ProcessInfoVO processInfoVO) { + sccService.approveTask(processInfoVO, false); + return Result.OK(); + } + + @AutoLog(value = "关键零部件型号申请流程-提交") + @ApiOperation(value = "关键零部件型号申请流程-提交", notes = "关键零部件型号申请流程-提交") + @PostMapping("/submit") + public Result submit(@Validated @RequestBody ProcessInfoVO 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)); + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/entity/ProcessPartTypeApply.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/entity/ProcessPartTypeApply.java new file mode 100644 index 00000000..53a03efb --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/entity/ProcessPartTypeApply.java @@ -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 list; + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/entity/ProcessPartTypeApplyRecord.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/entity/ProcessPartTypeApplyRecord.java new file mode 100644 index 00000000..8b5217fa --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/entity/ProcessPartTypeApplyRecord.java @@ -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; +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/listener/ProcessPartTypeApplyEndListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/listener/ProcessPartTypeApplyEndListener.java new file mode 100644 index 00000000..08f3d626 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/listener/ProcessPartTypeApplyEndListener.java @@ -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); + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/mapper/ProcessPartTypeApplyMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/mapper/ProcessPartTypeApplyMapper.java new file mode 100644 index 00000000..61503493 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/mapper/ProcessPartTypeApplyMapper.java @@ -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 { + +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/mapper/ProcessPartTypeApplyRecordMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/mapper/ProcessPartTypeApplyRecordMapper.java new file mode 100644 index 00000000..fe9d3cee --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/mapper/ProcessPartTypeApplyRecordMapper.java @@ -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 { + +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/mapper/xml/ProcessPartTypeApplyMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/mapper/xml/ProcessPartTypeApplyMapper.xml new file mode 100644 index 00000000..95656401 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/mapper/xml/ProcessPartTypeApplyMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/mapper/xml/ProcessPartTypeApplyRecordMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/mapper/xml/ProcessPartTypeApplyRecordMapper.xml new file mode 100644 index 00000000..48bdbc77 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/mapper/xml/ProcessPartTypeApplyRecordMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/service/IProcessPartTypeApplyRecordService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/service/IProcessPartTypeApplyRecordService.java new file mode 100644 index 00000000..a6d4c148 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/service/IProcessPartTypeApplyRecordService.java @@ -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 { + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/service/IProcessPartTypeApplyService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/service/IProcessPartTypeApplyService.java new file mode 100644 index 00000000..5a5d7715 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/service/IProcessPartTypeApplyService.java @@ -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 { + + void startProcess(ProcessInfoVO processInfoVO); + + void approveTask(ProcessInfoVO processInfoVO, boolean b); + + ProcessInfoVO getHandleData(String taskId); + + void submit(ProcessInfoVO processInfoVO); + + String generate(ProcessPartTypeApply scc, MultipartFile modelFile, MultipartFile splitFile); + + void flowListener(DelegateExecution delegateExecution); +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/service/impl/ProcessPartTypeApplyRecordServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/service/impl/ProcessPartTypeApplyRecordServiceImpl.java new file mode 100644 index 00000000..b5183e5b --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/service/impl/ProcessPartTypeApplyRecordServiceImpl.java @@ -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 + implements IProcessPartTypeApplyRecordService { + +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/service/impl/ProcessPartTypeApplyServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/service/impl/ProcessPartTypeApplyServiceImpl.java new file mode 100644 index 00000000..259a3261 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/service/impl/ProcessPartTypeApplyServiceImpl.java @@ -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 + 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 processInfoVO) { + // 流程Key + String processDefinitionKey = ProcessType.NEW_STANDARD_IMPORT.getProcessKey(); + // 流程信息 + BasicProcessInfoDTO processInfo = processInfoVO.getBasicProcessInfoDTO(); + // 任务信息 + BasicTaskInfoDTO processTask = processInfoVO.getBasicTaskInfoDTO(); + // 人员信息 + Map userInfoMap = processInfoVO.getUserInfoMap(); + // 业务数据 + ProcessPartTypeApply 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.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 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; + } + + /** + * 第一个节点业务数据处理 + * @param processInfoVO + */ + private void startNodeBusProcess(ProcessInfoVO processInfoVO) { + ProcessPartTypeApply businessInfoDTO = processInfoVO.getBusinessInfoDTO(); + saveOrUpdate(businessInfoDTO); + if(!StringUtils.isEmpty(businessInfoDTO.getIds())){ + List ids = Arrays.asList(businessInfoDTO.getIds().split(",")); + LambdaUpdateWrapper 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 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 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 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 queryWrapperProcessPartTypeApply = new LambdaQueryWrapper<>(); + queryWrapperProcessPartTypeApply.eq(ProcessPartTypeApply::getProcessInstanceId, processInstanceId); + ProcessPartTypeApply processPartTypeApply = getOne(queryWrapperProcessPartTypeApply,false); + if(Objects.isNull(processPartTypeApply)){ + return; + } + LambdaQueryWrapper queryProcessPartTypeApplyRecord = new LambdaQueryWrapper<>(); + queryProcessPartTypeApplyRecord.eq(ProcessPartTypeApplyRecord::getProcessId,processPartTypeApply.getId()); + List listProcessPartTypeApplyRecord = + processPartTypeApplyRecordService.list(queryProcessPartTypeApplyRecord); + if(CollectionUtils.isEmpty(listProcessPartTypeApplyRecord)){ + return; + } + Date d = new Date(); + for (ProcessPartTypeApplyRecord processPartTypeApplyRecord : listProcessPartTypeApplyRecord) { + processPartTypeApplyRecord.setSuccessTime(d); + } + List list = JSON.parseArray(JSON.toJSONString(listProcessPartTypeApplyRecord),LawsPartType.class); + lawsPartTypeService.saveBatch(list); + } + + @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); + } + + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(ProcessPartTypeApply::getProcessInstanceId, processInstanceId); + ProcessPartTypeApply data = getOne(lambdaQueryWrapper,false); + if(!Objects.isNull(data)){ + LambdaQueryWrapper queryProcessPartTypeApplyRecord = new LambdaQueryWrapper<>(); + queryProcessPartTypeApplyRecord.eq(ProcessPartTypeApplyRecord::getProcessId,data.getId()); + List list = processPartTypeApplyRecordService.list(queryProcessPartTypeApplyRecord); + if(!CollectionUtils.isEmpty(list)){ + data.setList(list); + } + result.setBusinessInfoDTO(data); + } + return result; + } +} + + + + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/part/vo/ProcessNewStandardImportVO.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/vo/ProcessNewStandardImportVO.java new file mode 100644 index 00000000..9d8645ba --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/part/vo/ProcessNewStandardImportVO.java @@ -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; +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/part/controller/LawsPartTypeController.java b/laws-modules/src/main/java/com/jero/modules/laws/part/controller/LawsPartTypeController.java index 50414e19..d4fad6fd 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/part/controller/LawsPartTypeController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/part/controller/LawsPartTypeController.java @@ -121,8 +121,8 @@ public class LawsPartTypeController { @PostMapping(value = "/add") // @RequiresPermissions("keyPartBindingManage:add") public Result add(@Validated @RequestBody LawsPartType lawsPartType) { - lawsPartTypeService.add(lawsPartType); - return Result.OK(ResultCommon.OK); + String id = lawsPartTypeService.add(lawsPartType); + return Result.OK(id); } /** diff --git a/laws-modules/src/main/java/com/jero/modules/laws/part/service/ILawsPartTypeService.java b/laws-modules/src/main/java/com/jero/modules/laws/part/service/ILawsPartTypeService.java index 7d49c05a..7c8f6d12 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/part/service/ILawsPartTypeService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/part/service/ILawsPartTypeService.java @@ -24,7 +24,7 @@ public interface ILawsPartTypeService extends IService { void deleteByIds(List ids); - void add(LawsPartType lawsPartType); + String add(LawsPartType lawsPartType); void edit(LawsPartType lawsPartType); diff --git a/laws-modules/src/main/java/com/jero/modules/laws/part/service/impl/LawsPartTypeServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/part/service/impl/LawsPartTypeServiceImpl.java index 5b13276f..85e5f379 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/part/service/impl/LawsPartTypeServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/part/service/impl/LawsPartTypeServiceImpl.java @@ -47,6 +47,7 @@ public class LawsPartTypeServiceImpl extends ServiceImpl queryWrapper = QueryGenerator.initQueryWrapper(lawsPartType, req.getParameterMap()); queryWrapper.eq("l1.del_flag","0"); + queryWrapper.isNotNull("l1.success_time"); Page page = new Page<>(pageNo, pageSize); IPage re = lawsPartTypeMapper.pageList(page, queryWrapper); return re; @@ -82,12 +83,21 @@ public class LawsPartTypeServiceImpl extends ServiceImpl queryWrapper = QueryGenerator.initQueryWrapper(lawsPartType, request.getParameterMap()); queryWrapper.eq("l1.del_flag","0"); + queryWrapper.isNotNull("l1.success_time"); List re = lawsPartTypeMapper.pageList( queryWrapper); // Step.2 AutoPoi 导出Excel