From 70a7ddb2a50ee06b86e05b128059dd342fb15c9c Mon Sep 17 00:00:00 2001 From: liao Date: Tue, 14 Nov 2023 15:08:42 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E6=B3=95=E8=A7=84=E9=87=87=E8=B4=AD?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/20230905标准法规库.sql | 20 ++ .../activiti/enums/ProcessTypeEnum.java | 1 + ...onTaskId.java => ConsultationTaskKey.java} | 4 +- .../fb/common/ProcessDefinitionKey.java | 2 + .../ProcessFbEntryChangeController.java | 4 +- .../controller/ProcessFbInfoController.java | 18 ++ ...ocessFbStandardConsultationController.java | 8 + .../ProcessFbStandardPurchaseController.java | 106 ++++++++++ .../fb/entity/ProcessFbStandardPurchase.java | 74 +++++++ .../fb/listener/SetVariableListener.java | 9 + .../ProcessFbStandardPurchaseMapper.java | 17 ++ .../xml/ProcessFbStandardPurchaseMapper.xml | 18 ++ ...IProcessFbStandardConsultationService.java | 7 + .../IProcessFbStandardPurchaseService.java | 66 ++++++ .../fb/service/IProcessHandleService.java | 9 + ...cessFbStandardConsultationServiceImpl.java | 70 +++++++ .../ProcessFbStandardPurchaseServiceImpl.java | 198 ++++++++++++++++++ .../impl/ProcessHandleServiceImpl.java | 18 ++ .../src/main/resources/bpmn/法规采购流程.bpmn | 184 ++++++++++++++++ 19 files changed, 829 insertions(+), 4 deletions(-) rename laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/{ConsultationTaskId.java => ConsultationTaskKey.java} (95%) create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbStandardPurchaseController.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/fb/entity/ProcessFbStandardPurchase.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/fb/listener/SetVariableListener.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/fb/mapper/ProcessFbStandardPurchaseMapper.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/fb/mapper/xml/ProcessFbStandardPurchaseMapper.xml create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessFbStandardPurchaseService.java create mode 100644 laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessFbStandardPurchaseServiceImpl.java create mode 100644 laws-modules/src/main/resources/bpmn/法规采购流程.bpmn diff --git a/db/20230905标准法规库.sql b/db/20230905标准法规库.sql index 8e304ba8..4df120bd 100644 --- a/db/20230905标准法规库.sql +++ b/db/20230905标准法规库.sql @@ -416,4 +416,24 @@ CREATE TABLE `process_fb_consultation_list` alter table process_fb_consultation_list comment '标准征求意见流程-征求意见列表表'; +DROP TABLE IF EXISTS `process_fb_standard_purchase`; +CREATE TABLE `process_fb_standard_purchase` +( + `id` varchar(36) NOT NULL PRIMARY KEY COMMENT '主键ID', + `create_by` varchar(36) COMMENT '创建人', + `create_time` datetime(0) COMMENT '创建时间', + `update_by` varchar(36) COMMENT '更新人', + `update_time` datetime(0) COMMENT '更新时间', + `org_code` varchar(64) COMMENT '所属部门', + `del_flag` int(1) DEFAULT 0 COMMENT '0表示未删除,1表示删除', + + `business_id` varchar(50) COMMENT '业务id', + `sort` int(8) COMMENT '排序', + `standard_number` varchar(50) COMMENT '标准编号', + `standard_name` varchar(50) COMMENT '标准名称', + `purchase_reason` varchar(500) COMMENT '采购理由' +) COMMENT = '法规采购流程表'; +alter table process_fb_standard_purchase + comment '法规采购流程表'; + diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java b/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java index 122db716..13e30186 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/enums/ProcessTypeEnum.java @@ -14,6 +14,7 @@ public enum ProcessTypeEnum { FB_ENTRY_CHANGE("标准法规入库/变更流程",1, "com.jero.modules.activiti.process.fb.service.impl.ProcessHandleServiceImpl"), FB_STANDARD_CONSULTATION("标准征求意见流程",2, "com.jero.modules.activiti.process.fb.service.impl.ProcessFbStandardConsultationServiceImpl"), + FB_STANDARD_PURCHASE("法规采购流程",6, "com.jero.modules.activiti.process.fb.service.impl.ProcessFbStandardPurchaseServiceImpl"), ES_INIT_CHANGE("企标立项/变更计划",7, "com.jero.modules.activiti.process.esInitChange.service.impl.ProcessEsInitChangeServiceImpl"), ES_ANNUAL_REPORT("年度制修订计划审批流程(各部门主动上报)",8, "com.jero.modules.activiti.process.esAbolish.service.impl.ProcessEsAbolishServiceImpl"), ES_ANNUAL_INIT("年度制修订计划审批流程(标准化发起)",9, "com.jero.modules.activiti.process.esAnnualReport.service.impl.ProcessEsAnnualReportServiceImpl"), diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ConsultationTaskId.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ConsultationTaskKey.java similarity index 95% rename from laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ConsultationTaskId.java rename to laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ConsultationTaskKey.java index e9640c7c..ad8e7ed4 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ConsultationTaskId.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ConsultationTaskKey.java @@ -5,9 +5,9 @@ package com.jero.modules.activiti.process.fb.common; * @Date: 2023/11/13 10:55 * @Description: 标准征求意见流程taskId */ -public class ConsultationTaskId { +public class ConsultationTaskKey { - private ConsultationTaskId() {} + private ConsultationTaskKey() {} public static final String ENGINEER_START = "engineer_start"; // 法规工程师发起 diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ProcessDefinitionKey.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ProcessDefinitionKey.java index 1baf9f8b..7662ab47 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ProcessDefinitionKey.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/common/ProcessDefinitionKey.java @@ -13,4 +13,6 @@ public class ProcessDefinitionKey { public static final String FB_STANDARD_CONSULTATION = "fb-standard-consultation"; // 标准征求意见流程 + public static final String FB_STANDARD_PURCHASE = "fb-standard-purchase"; // 法规采购流程 + } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbEntryChangeController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbEntryChangeController.java index b2f1bf32..e48bac6d 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbEntryChangeController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbEntryChangeController.java @@ -78,8 +78,8 @@ public class ProcessFbEntryChangeController extends JeroController saveToDraft(@Validated @RequestBody ProcessInfoVO processInfoVO) { processFbEntryChangeService.saveToDraft(processInfoVO); diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbInfoController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbInfoController.java index 42d15cdc..b530ea60 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbInfoController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbInfoController.java @@ -18,6 +18,8 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.activiti.engine.runtime.ProcessInstance; +import org.apache.poi.ss.formula.functions.T; import org.apache.shiro.SecurityUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -74,4 +76,20 @@ public class ProcessFbInfoController { return Result.OK(sentList); } + @ApiOperation(value = "测试") + @GetMapping("/test") + public Result test() { + List subProcessInstanceList = processHandleService + .subProcessList("20231114120041259", "Activity_0mj9ddw"); + System.out.println("================================测试开始================================="); + subProcessInstanceList.forEach(subProcessInstance -> { + System.out.println("Sub Process Instance ID: " + subProcessInstance.getId()); + System.out.println("Sub Process Definition Key: " + subProcessInstance.getProcessDefinitionKey()); + // 其他子流程实例信息 + System.out.println(subProcessInstance.toString()); + }); + System.out.println("======================================================================="); + return Result.OK(); + } + } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbStandardConsultationController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbStandardConsultationController.java index 0af3e0ea..8f35d8d9 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbStandardConsultationController.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbStandardConsultationController.java @@ -54,4 +54,12 @@ public class ProcessFbStandardConsultationController extends JeroController submit(@Validated @RequestBody ProcessInfoVO processInfoVO) { + processFbStandardConsultationService.submit(processInfoVO); + return Result.OK(); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbStandardPurchaseController.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbStandardPurchaseController.java new file mode 100644 index 00000000..0c67be19 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/controller/ProcessFbStandardPurchaseController.java @@ -0,0 +1,106 @@ +package com.jero.modules.activiti.process.fb.controller; + +import com.jero.common.api.vo.Result; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.modules.activiti.process.common.entity.TransferVO; +import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardPurchase; +import com.jero.modules.activiti.process.fb.service.IProcessFbStandardPurchaseService; +import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import com.jero.common.system.base.controller.JeroController; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import io.swagger.annotations.Api; +import org.springframework.web.servlet.ModelAndView; + +import java.util.List; + + +/** + * @Description: 法规采购流程表 + * @Author: jero-boot + * @Date: 2023-11-14 + * @Version: V1.0 + */ +@Api(tags="法规采购流程表") +@RestController +@RequestMapping("/activiti.process.fb/processFbStandardPurchase") +@Slf4j +public class ProcessFbStandardPurchaseController extends JeroController { + @Autowired + private IProcessFbStandardPurchaseService processFbStandardPurchaseService; + + @GetMapping("/queryProcessInfoVO") + @AutoLog(value = "法规采购流程表-查询流程信息") + @ApiImplicitParams({ + @ApiImplicitParam(name = "draftId", value = "草稿id"), + @ApiImplicitParam(name = "processInstanceId", value = "流程实例id") + }) + @ApiOperation("法规采购流程表-查询流程信息") + public Result>> queryProcessInfoVO(String draftId, String processInstanceId){ + ProcessInfoVO> processInfoVO = processFbStandardPurchaseService.queryProcessInfoVO(draftId, processInstanceId); + return Result.OK(processInfoVO); + } + + @AutoLog(value = "法规采购流程表-发起流程") + @ApiOperation(value = "法规采购流程表-发起流程", notes = "流程处理-发起流程") + @PostMapping(value = "/startProcess") + public Result startProcess(@Validated @RequestBody ProcessInfoVO> processInfoVO) { + processFbStandardPurchaseService.startProcess(processInfoVO); + return Result.OK(); + } + + @AutoLog(value = "法规采购流程表-同意") + @ApiOperation(value="法规采购流程表-同意", notes="法规采购流程表-同意") + @PostMapping("/agree") + public Result agree(@Validated @RequestBody ProcessInfoVO> processInfoVO) { + processFbStandardPurchaseService.approveTask(processInfoVO, true); + return Result.OK(); + } + + @AutoLog(value = "法规采购流程表-驳回") + @ApiOperation(value="法规采购流程表-驳回", notes="法规采购流程表-驳回") + @PostMapping("/reject") + public Result reject(@Validated @RequestBody ProcessInfoVO> processInfoVO) { + processFbStandardPurchaseService.approveTask(processInfoVO, false); + return Result.OK(); + } + + @AutoLog(value = "法规采购流程表-转办") + @ApiOperation(value="法规采购流程表-转办", notes="法规采购流程表-转办") + @PostMapping(value = "/transfer") + public Result transfer(@RequestBody TransferVO transferVO) { + processFbStandardPurchaseService.transfer(transferVO.getTaskId(), transferVO.getUserId()); + return Result.OK(); + } + + @AutoLog(value = "法规采购流程表-保存为草稿") + @ApiOperation(value = "法规采购流程表-保存为草稿", notes = "法规采购流程表-保存为草稿") + @PostMapping(value = "/saveToDraft") + public Result saveToDraft(@Validated @RequestBody ProcessInfoVO> processInfoVO) { + processFbStandardPurchaseService.saveToDraft(processInfoVO); + return Result.OK(); + } + + @AutoLog(value = "法规采购流程表-导出") + @ApiOperation(value = "法规采购流程表-导出", notes = "法规采购流程表-导出") + @GetMapping(value = "/exportXls") + public ModelAndView exportXls(@RequestParam(name = "businessId") String businessId) { + return processFbStandardPurchaseService.exportXls(businessId); + } + + @AutoLog(value = "法规采购流程表-抄送") + @ApiOperation(value = "法规采购流程表-抄送", notes = "法规采购流程表-抄送") + @GetMapping(value = "/carbonCopy") + public Result carbonCopy(@RequestParam(name = "processInstanceId") String processInstanceId, + @RequestParam(name = "userIds") String userIds) { + processFbStandardPurchaseService.carbonCopy(processInstanceId, userIds); + return Result.OK(); + } + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/entity/ProcessFbStandardPurchase.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/entity/ProcessFbStandardPurchase.java new file mode 100644 index 00000000..d187633e --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/entity/ProcessFbStandardPurchase.java @@ -0,0 +1,74 @@ +package com.jero.modules.activiti.process.fb.entity; + +import java.io.Serializable; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + + +/** + * @Description: 法规采购流程表 + * @Author: jero-boot + * @Date: 2023-11-14 + * @Version: V1.0 + */ +@Data +@TableName("process_fb_standard_purchase") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="process_fb_standard_purchase对象", description="法规采购流程表") +public class ProcessFbStandardPurchase implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键ID*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键ID") + private java.lang.String id; + /**创建人*/ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + /**创建时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "创建时间") + private java.util.Date createTime; + /**更新人*/ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + /**更新时间*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + @ApiModelProperty(value = "更新时间") + private java.util.Date updateTime; + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private java.lang.String orgCode; + /**0表示未删除,1表示删除*/ + @ApiModelProperty(value = "0表示未删除,1表示删除") + private java.lang.Integer delFlag; + /**业务id*/ + @ApiModelProperty(value = "业务id") + private java.lang.String businessId; + /**排序*/ + @ApiModelProperty(value = "排序") + private java.lang.Integer sort; + /**标准编号*/ + @Excel(name = "标准号", width = 15) + @ApiModelProperty(value = "标准编号") + private java.lang.String standardNumber; + /**标准名称*/ + @Excel(name = "标准名称", width = 15) + @ApiModelProperty(value = "标准名称") + private java.lang.String standardName; + /**采购理由*/ + @ApiModelProperty(value = "采购理由") + private java.lang.String purchaseReason; +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/listener/SetVariableListener.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/listener/SetVariableListener.java new file mode 100644 index 00000000..ad5193d0 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/listener/SetVariableListener.java @@ -0,0 +1,9 @@ +package com.jero.modules.activiti.process.fb.listener; + +/** + * @Author: liao + * @Date: 2023/11/13 17:01 + * @Description: 设置子流程变量名 + */ +public class SetVariableListener { +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/mapper/ProcessFbStandardPurchaseMapper.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/mapper/ProcessFbStandardPurchaseMapper.java new file mode 100644 index 00000000..f2965675 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/mapper/ProcessFbStandardPurchaseMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.activiti.process.fb.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardPurchase; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 法规采购流程表 + * @Author: jero-boot + * @Date: 2023-11-14 + * @Version: V1.0 + */ +public interface ProcessFbStandardPurchaseMapper extends BaseMapper { + +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/mapper/xml/ProcessFbStandardPurchaseMapper.xml b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/mapper/xml/ProcessFbStandardPurchaseMapper.xml new file mode 100644 index 00000000..e787fd5f --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/mapper/xml/ProcessFbStandardPurchaseMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessFbStandardConsultationService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessFbStandardConsultationService.java index c671e3db..af662254 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessFbStandardConsultationService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessFbStandardConsultationService.java @@ -26,4 +26,11 @@ public interface IProcessFbStandardConsultationService extends IService processInfoVO, boolean pass); + + /** + * @Author: liao + * @Date: 2023/11/13 16:00 + * @Description: 提交 + **/ + void submit(ProcessInfoVO processInfoVO); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessFbStandardPurchaseService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessFbStandardPurchaseService.java new file mode 100644 index 00000000..ba3317b2 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessFbStandardPurchaseService.java @@ -0,0 +1,66 @@ +package com.jero.modules.activiti.process.fb.service; + +import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardPurchase; +import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; +import org.springframework.web.servlet.ModelAndView; + +import java.util.List; + +/** + * @Description: 法规采购流程表 + * @Author: jero-boot + * @Date: 2023-11-14 + * @Version: V1.0 + */ +public interface IProcessFbStandardPurchaseService extends IService { + + /** + * @Author: liao + * @Date: 2023/11/14 14:07 + * @Description: 查询流程信息 + **/ + ProcessInfoVO> queryProcessInfoVO(String draftId, String processInstanceId); + + /** + * @Author: liao + * @Date: 2023/11/14 14:07 + * @Description: 发起流程 + **/ + void startProcess(ProcessInfoVO> processInfoVO); + + /** + * @Author: liao + * @Date: 2023/11/14 14:07 + * @Description: 审批 + **/ + void approveTask(ProcessInfoVO> processInfoVO, boolean pass); + + /** + * @Author: liao + * @Date: 2023/11/14 14:08 + * @Description: 转办 + **/ + void transfer(String taskId, String toUserId); + + /** + * @Author: liao + * @Date: 2023/11/14 14:08 + * @Description: 保存为草稿 + **/ + void saveToDraft(ProcessInfoVO> processInfoVO); + + /** + * @Author: liao + * @Date: 2023/11/14 14:55 + * @Description: 导出 + **/ + ModelAndView exportXls(String businessId); + + /** + * @Author: liao + * @Date: 2023/11/14 15:07 + * @Description: 抄送 + **/ + void carbonCopy(String processInstanceId, String userIds); +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessHandleService.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessHandleService.java index cc0c4994..10a646e6 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessHandleService.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/IProcessHandleService.java @@ -2,7 +2,9 @@ package com.jero.modules.activiti.process.fb.service; import com.jero.modules.activiti.process.fb.dto.ProcessDTO; import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; +import org.activiti.engine.runtime.ProcessInstance; +import java.util.List; import java.util.Map; /** @@ -94,4 +96,11 @@ public interface IProcessHandleService { * @Description: 判断流程是否结束 **/ Boolean isProcessFinish(String processInstanceId); + + /** + * @Author: liao + * @Date: 2023/11/14 11:37 + * @Description: 获取全部子流程实例 + **/ + List subProcessList(String superProcessInstanceId, String subProcessDefinitionKey); } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessFbStandardConsultationServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessFbStandardConsultationServiceImpl.java index 66f54c66..4e513427 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessFbStandardConsultationServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessFbStandardConsultationServiceImpl.java @@ -1,10 +1,14 @@ package com.jero.modules.activiti.process.fb.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.common.api.vo.ResultCommon; import com.jero.common.util.UUIDUtils; import com.jero.modules.activiti.enums.ProcessTypeEnum; +import com.jero.modules.activiti.process.fb.common.ConsultationTaskKey; import com.jero.modules.activiti.process.fb.common.ProcessDefinitionKey; 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.entity.ProcessFbConsultationList; import com.jero.modules.activiti.process.fb.entity.ProcessFbConsultationUserLink; import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardConsultation; import com.jero.modules.activiti.process.fb.mapper.ProcessFbStandardConsultationMapper; @@ -14,6 +18,9 @@ import com.jero.modules.activiti.process.fb.service.IProcessHandleService; import com.jero.modules.activiti.process.fb.vo.ProcessFbStandardConsultationVO; import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; import com.jero.modules.laws.common.util.CurrentUserUtil; +import org.activiti.engine.RuntimeService; +import org.activiti.engine.TaskService; +import org.activiti.engine.task.Task; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -41,6 +48,10 @@ public class ProcessFbStandardConsultationServiceImpl extends ServiceImpl processInfoVO, boolean pass) { } + + /** + * @Author: liao + * @Date: 2023/11/13 16:00 + * @Description: 提交 + **/ + @Override + public void submit(ProcessInfoVO processInfoVO) { + BasicTaskInfoDTO taskInfo = processInfoVO.getBasicTaskInfoDTO(); // 任务信息 + + ProcessFbStandardConsultationVO businessInfoDTO = processInfoVO.getBusinessInfoDTO(); // 全部业务信息 + ProcessFbStandardConsultation businessBasicInfo = businessInfoDTO.getProcessFbStandardConsultation(); // 业务基本信息 + processInfoVO.setBusinessId(businessBasicInfo.getId()); + + updateById(businessBasicInfo); // 更新业务基本信息 + + String taskId = taskInfo.getTaskId(); + + Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + String taskDefinitionKey = task.getTaskDefinitionKey(); // 任务定义id + processHandleService.isMyTask(taskId); // 判断是否拥有任务处理权 + + if (ConsultationTaskKey.DEPART_LEADER_START.equals(taskDefinitionKey)) { // 各部所主管级领导分发 + processDepartLeaderStart(processInfoVO); + } + } + + /** + * @Author: liao + * @Date: 2023/11/14 9:35 + * @Description: 各部所主管级领导分发 + **/ + private void processDepartLeaderStart(ProcessInfoVO processInfoVO) { + ProcessFbStandardConsultationVO businessInfoDTO = processInfoVO.getBusinessInfoDTO(); // 全部业务信息 + ProcessFbConsultationUserLink userLink = businessInfoDTO.getProcessFbConsultationUserLink(); // 业务分派信息 + + LambdaQueryWrapper removeWrapper = new LambdaQueryWrapper<>(); + removeWrapper.eq(ProcessFbConsultationUserLink::getBusinessId, processInfoVO.getBusinessId()); + removeWrapper.eq(ProcessFbConsultationUserLink::getDepartLeaderId, CurrentUserUtil.getId()); + processFbConsultationUserLinkService.remove(removeWrapper); // 删除原先存储的关联 + + if ("1".equals(userLink.getUserType())) { // 模块负责人 + if (StringUtils.isBlank(userLink.getModuleOwnerId())) { + throw new JeroBootException(ResultCommon.EMPTY_COMMON, "moduleOwnerId"); + } + List moduleOwnerIds = Arrays.asList(userLink.getModuleOwnerId().split(",")); + List linkList = new ArrayList<>(); + moduleOwnerIds.forEach(moduleOwnerId -> { + ProcessFbConsultationUserLink link = new ProcessFbConsultationUserLink(); + link.setBusinessId(processInfoVO.getBusinessId()); + link.setDepartLeaderId(CurrentUserUtil.getId()); + link.setModuleOwnerId(moduleOwnerId); + linkList.add(link); + }); + processFbConsultationUserLinkService.saveBatch(linkList, linkList.size()); + } else { // 设计工程师 + + } + } } diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessFbStandardPurchaseServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessFbStandardPurchaseServiceImpl.java new file mode 100644 index 00000000..6bbe12bc --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessFbStandardPurchaseServiceImpl.java @@ -0,0 +1,198 @@ +package com.jero.modules.activiti.process.fb.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.api.vo.ResultCommon; +import com.jero.common.system.base.controller.JeroController; +import com.jero.common.util.UUIDUtils; +import com.jero.modules.activiti.enums.ProcessTypeEnum; +import com.jero.modules.activiti.process.fb.common.ProcessDefinitionKey; +import com.jero.modules.activiti.process.fb.dto.BasicProcessInfoDTO; +import com.jero.modules.activiti.process.fb.entity.ProcessFbEntryChange; +import com.jero.modules.activiti.process.fb.entity.ProcessFbStandardPurchase; +import com.jero.modules.activiti.process.fb.mapper.ProcessFbStandardPurchaseMapper; +import com.jero.modules.activiti.process.fb.service.IProcessFbStandardPurchaseService; +import com.jero.modules.activiti.process.fb.service.IProcessHandleService; +import com.jero.modules.activiti.process.fb.vo.ProcessInfoVO; +import com.jero.modules.laws.common.util.CurrentUserUtil; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.jero.common.exception.JeroBootException; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.web.servlet.ModelAndView; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + + +/** + * @Description: 法规采购流程表 + * @Author: jero-boot + * @Date: 2023-11-14 + * @Version: V1.0 + */ +@Service +@Slf4j +@Transactional(rollbackFor = JeroBootException.class) +public class ProcessFbStandardPurchaseServiceImpl extends ServiceImpl implements IProcessFbStandardPurchaseService { + + @Resource + private IProcessHandleService processHandleService; + @Value("${jero.path.upload}") + private String upLoadPath; + + /** + * @Author: liao + * @Date: 2023/11/14 14:08 + * @Description: 查询流程信息 + **/ + @Override + public ProcessInfoVO> queryProcessInfoVO(String draftId, String processInstanceId) { + ProcessInfoVO processInfoVO = processHandleService.queryProcessInfoVO(draftId, processInstanceId); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProcessFbStandardPurchase::getBusinessId, processInfoVO.getBusinessId()); + queryWrapper.orderByAsc(ProcessFbStandardPurchase::getSort); + List purchaseList = list(queryWrapper); + processInfoVO.setBusinessInfoDTO(purchaseList); + + return processInfoVO; + } + + /** + * @Author: liao + * @Date: 2023/11/14 14:09 + * @Description: 发起流程 + **/ + @Override + public void startProcess(ProcessInfoVO> processInfoVO) { + String processName = addBusinessInfo(processInfoVO);// 保存业务信息 + + Map userInfoMap = processInfoVO.getUserInfoMap(); // 用户变量map + userInfoMap.put("engineer", CurrentUserUtil.getId()); // 第一个任务节点设置成自己 + BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO(); + basicProcessInfoDTO.setProcessDefinitionId(processHandleService.getDefinitionIdByKey(ProcessDefinitionKey.FB_STANDARD_PURCHASE)); // 流程定义id + basicProcessInfoDTO.setProcessName(processName); // 流程名称 + basicProcessInfoDTO.setProcessType(ProcessTypeEnum.FB_STANDARD_PURCHASE.getValue()); // 流程类型 + processHandleService.startProcess(processInfoVO); + } + + /** + * @Author: liao + * @Date: 2023/11/14 14:18 + * @Description: 添加业务信息 + **/ + private String addBusinessInfo(ProcessInfoVO> processInfoVO) { + List businessInfoList = processInfoVO.getBusinessInfoDTO(); + if (CollectionUtils.isEmpty(businessInfoList)) { + throw new JeroBootException(ResultCommon.EMPTY_COMMON, "businessInfo"); + } + String businessId = businessInfoList.get(0).getBusinessId(); + if (StringUtils.isBlank(businessId)) { + businessId = UUIDUtils.randomUUID20(); + } + processInfoVO.setBusinessId(businessId); + for (int i = 0; i < businessInfoList.size(); i++) { + if (StringUtils.isBlank(businessInfoList.get(i).getStandardNumber())) { + throw new JeroBootException(ResultCommon.EMPTY_COMMON, "standardNumber"); + } + if (StringUtils.isBlank(businessInfoList.get(i).getStandardName())) { + throw new JeroBootException(ResultCommon.EMPTY_COMMON, "standardName"); + } + businessInfoList.get(i).setBusinessId(businessId); + businessInfoList.get(i).setSort(i + 1); + } + + LambdaQueryWrapper removeWrapper = new LambdaQueryWrapper<>(); + removeWrapper.eq(ProcessFbStandardPurchase::getBusinessId, businessId); + remove(removeWrapper); // 先删除历史数据 + + saveBatch(businessInfoList, businessInfoList.size()); // 保存到数据库 + + return businessInfoList.get(0).getStandardNumber() + "-" + businessInfoList.get(0).getStandardName() + "-" + "采购"; + } + + /** + * @Author: liao + * @Date: 2023/11/14 14:09 + * @Description: 审批 + **/ + @Override + public void approveTask(ProcessInfoVO> processInfoVO, boolean pass) { + List businessInfoList = processInfoVO.getBusinessInfoDTO(); + processInfoVO.setBusinessId(businessInfoList.get(0).getBusinessId()); + processHandleService.approveTask(processInfoVO, pass); + + BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO(); + String processInstanceId = basicProcessInfoDTO.getProcessInstanceId(); + // 如果流程结束 + if (pass && processHandleService.isProcessFinish(processInstanceId)) { + log.info("《法规采购流程》结束,流程名称:{}", basicProcessInfoDTO.getProcessName()); + } + } + + /** + * @Author: liao + * @Date: 2023/11/14 14:09 + * @Description: 转办 + **/ + @Override + public void transfer(String taskId, String toUserId) { + processHandleService.transfer(taskId, toUserId); + } + + /** + * @Author: liao + * @Date: 2023/11/14 14:09 + * @Description: 保存为草稿 + **/ + @Override + public void saveToDraft(ProcessInfoVO> processInfoVO) { + addBusinessInfo(processInfoVO); // 保存业务信息 + // 流程信息 + BasicProcessInfoDTO basicProcessInfoDTO = processInfoVO.getBasicProcessInfoDTO(); + basicProcessInfoDTO.setProcessType(ProcessTypeEnum.FB_STANDARD_PURCHASE.getValue()); // 流程类型 + + processHandleService.saveToDraft(processInfoVO); + } + + /** + * @Author: liao + * @Date: 2023/11/14 14:55 + * @Description: 导出 + **/ + @Override + public ModelAndView exportXls(String businessId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ProcessFbStandardPurchase::getBusinessId, businessId); + queryWrapper.orderByAsc(ProcessFbStandardPurchase::getSort); + List exportList = list(queryWrapper); // 准备数据 + + String title = "法规采购流程"; + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + mv.addObject(JeroController.FILE_NAME, title); //此处设置的filename无效 ,前端会重更新设置一下 + mv.addObject(JeroController.CLASS, ProcessFbStandardPurchase.class); + ExportParams exportParams=new ExportParams(title + "报表", "导出人:" + CurrentUserUtil.getRealName(), title); + exportParams.setImageBasePath(upLoadPath); + mv.addObject(JeroController.PARAMS,exportParams); + mv.addObject(NormalExcelConstants.DATA_LIST, exportList); + return mv; + } + + /** + * @Author: liao + * @Date: 2023/11/14 15:07 + * @Description: 抄送 + **/ + @Override + public void carbonCopy(String processInstanceId, String userIds) { + log.info("已发送抄送消息..."); + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java index 377dd4c7..7e78c709 100644 --- a/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/activiti/process/fb/service/impl/ProcessHandleServiceImpl.java @@ -96,6 +96,11 @@ public class ProcessHandleServiceImpl implements IProcessHandleService { // 完成任务 taskService.complete(taskId); + + System.out.println("================================流程信息================================="); + System.out.println("流程实例id: " + processInstanceId); + System.out.println("流程实例name: " + processInstance.getName()); + System.out.println("======================================================================="); } /** @@ -356,4 +361,17 @@ public class ProcessHandleServiceImpl implements IProcessHandleService { return false; } + /** + * @Author: liao + * @Date: 2023/11/14 11:38 + * @Description: 获取全部子流程实例 + **/ + @Override + public List subProcessList(String superProcessInstanceId, String subProcessDefinitionKey) { + return runtimeService.createProcessInstanceQuery() + .superProcessInstanceId(superProcessInstanceId) + .processDefinitionKey(subProcessDefinitionKey) + .list(); + } + } diff --git a/laws-modules/src/main/resources/bpmn/法规采购流程.bpmn b/laws-modules/src/main/resources/bpmn/法规采购流程.bpmn new file mode 100644 index 00000000..5fc2e699 --- /dev/null +++ b/laws-modules/src/main/resources/bpmn/法规采购流程.bpmn @@ -0,0 +1,184 @@ + + + + + Flow_1w8ixsw + + + Flow_1w8ixsw + Flow_0o2iuu5 + Flow_0s4y3m3 + Flow_0fdb834 + Flow_0r9olk3 + + + + Flow_0r9olk3 + Flow_0fzcm0e + + + + Flow_0fzcm0e + Flow_1scfly1 + Flow_0o2iuu5 + + + + Flow_1scfly1 + Flow_074022s + + + ${pass} + + + Flow_074022s + Flow_1vgiww1 + Flow_0s4y3m3 + + + + Flow_1vgiww1 + Flow_1d7vhzl + + + ${pass} + + + Flow_1d7vhzl + Flow_0u0oqjz + Flow_0fdb834 + + + + Flow_0u0oqjz + Flow_0j7mfpf + + + ${pass} + + + Flow_0j7mfpf + + + + ${!pass} + + + ${!pass} + + + ${!pass} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +