From ed2f1aba5f057ba1c5669e10e4ae5b3a9b87cc43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A7=9C=E7=8E=89=E7=90=A6?= <7507756+jiang_yuqi@user.noreply.gitee.com> Date: Sun, 14 Apr 2024 22:14:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90u=E5=8F=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/IFlowDefinitionService.java | 13 ++-- .../impl/FlowDefinitionServiceImpl.java | 15 +++++ .../ruoyi/system/domain/FlowTaskEntity.java | 11 ++++ .../trouble/pshProblemmodifyDraft/index.vue | 2 +- .../trouble/sspProblemmodifyDraft/index.vue | 2 +- .../controller/WcFlowableController.java | 19 ++++++ sql/SQL集合.txt | 54 +++-------------- .../impl/WeChatMessageServiceImpl.java | 60 +++++++++++++++++++ 8 files changed, 123 insertions(+), 53 deletions(-) diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IFlowDefinitionService.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IFlowDefinitionService.java index 7d0185c3..bbb1242f 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IFlowDefinitionService.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/IFlowDefinitionService.java @@ -5,16 +5,12 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.flowable.domain.vo.ProcKeyRole; import com.ruoyi.system.domain.FlowProcDefDto; import org.flowable.bpmn.model.FlowElement; -import org.flowable.engine.repository.ProcessDefinition; -import org.flowable.engine.runtime.ProcessInstance; -import org.flowable.task.api.Task; +import org.flowable.bpmn.model.UserTask; import java.io.IOException; import java.io.InputStream; -import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Objects; /** * @author Tony @@ -120,4 +116,11 @@ public interface IFlowDefinitionService { * @return */ public void updateProcKeyRoleSort(ProcKeyRole procKeyRole); + + /** + * 读取流程节点 + * @param deployId + * @return + */ + public List findFlowNodes(String deployId); } diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowDefinitionServiceImpl.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowDefinitionServiceImpl.java index d9436102..744a108b 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowDefinitionServiceImpl.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowDefinitionServiceImpl.java @@ -21,6 +21,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowElement; +import org.flowable.bpmn.model.UserTask; import org.flowable.engine.repository.Deployment; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.repository.ProcessDefinitionQuery; @@ -207,6 +208,20 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl return list; } + /** + * 读取流程节点 + * @param deployId + * @return + */ + @Override + public List findFlowNodes(String deployId){ + ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployId).singleResult(); + //获得图片流 + BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId()); + List list = bpmnModel.getProcesses().get(0).findFlowElementsOfType(UserTask.class); + return list; + } + /** * 根据流程定义ID启动流程实例 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/FlowTaskEntity.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/FlowTaskEntity.java index 352465c4..5dea64b7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/FlowTaskEntity.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/FlowTaskEntity.java @@ -99,6 +99,9 @@ public class FlowTaskEntity extends BaseEntity{ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date finishTime; + @ApiModelProperty("任务完成类型") + private String taskComType; + private long deptId; private long projectId; @@ -345,4 +348,12 @@ public class FlowTaskEntity extends BaseEntity{ public void setBusinessKey(String businessKey) { this.businessKey = businessKey; } + + public String getTaskComType() { + return taskComType; + } + + public void setTaskComType(String taskComType) { + this.taskComType = taskComType; + } } diff --git a/ruoyi-ui/src/views/trouble/pshProblemmodifyDraft/index.vue b/ruoyi-ui/src/views/trouble/pshProblemmodifyDraft/index.vue index 73ecb72c..7dbbccdf 100644 --- a/ruoyi-ui/src/views/trouble/pshProblemmodifyDraft/index.vue +++ b/ruoyi-ui/src/views/trouble/pshProblemmodifyDraft/index.vue @@ -682,7 +682,7 @@ export default { let data = []; for (let i = 0; i < this.projectUnitUsers.length; i++) { if (this.projectUnitUsers[i].projectId == row.projectId) { - data = this.projectUnitUsers[i].data; + data = this.projectUnitUsers[i].fjdata; break; } } diff --git a/ruoyi-ui/src/views/trouble/sspProblemmodifyDraft/index.vue b/ruoyi-ui/src/views/trouble/sspProblemmodifyDraft/index.vue index ff553803..f0ec40e1 100644 --- a/ruoyi-ui/src/views/trouble/sspProblemmodifyDraft/index.vue +++ b/ruoyi-ui/src/views/trouble/sspProblemmodifyDraft/index.vue @@ -682,7 +682,7 @@ export default { let data = []; for (let i = 0; i < this.projectUnitUsers.length; i++) { if (this.projectUnitUsers[i].projectId == row.projectId) { - data = this.projectUnitUsers[i].data; + data = this.projectUnitUsers[i].fjdata; break; } } diff --git a/ruoyi-wechat/src/main/java/com/ruoyi/web/flowable/controller/WcFlowableController.java b/ruoyi-wechat/src/main/java/com/ruoyi/web/flowable/controller/WcFlowableController.java index 5db79468..5dbffc9f 100644 --- a/ruoyi-wechat/src/main/java/com/ruoyi/web/flowable/controller/WcFlowableController.java +++ b/ruoyi-wechat/src/main/java/com/ruoyi/web/flowable/controller/WcFlowableController.java @@ -22,6 +22,7 @@ import com.ruoyi.system.service.ISysUserService; import com.yanzhu.jh.project.service.ISurProjectAuditinfoService; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; +import org.flowable.bpmn.model.UserTask; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -289,4 +290,22 @@ public class WcFlowableController extends BaseController { return success(flowBusinessKeyService.quueryCount(flowTaskEntity)); } + /** + * 查询流程节点 + * @param deployId + * @return + */ + @ApiOperation(value = "查询流程节点") + @GetMapping("/readDeployNotes/{deployId}") + public AjaxResult readDeployNotes(@ApiParam(value = "流程定义id") @PathVariable(value = "deployId") String deployId) { + String key = "YANZHU.FLOW.readDeployNotes:" + deployId; + Object object = redisCache.getCacheObject(key); + if (object != null) { + return success(object); + } + List list = flowDefinitionService.findFlowNodes(deployId); + redisCache.setCacheObject(key, list, 2, TimeUnit.MINUTES); + return success(list); + } + } diff --git a/sql/SQL集合.txt b/sql/SQL集合.txt index 3c7c9910..d63d742d 100644 --- a/sql/SQL集合.txt +++ b/sql/SQL集合.txt @@ -70,11 +70,13 @@ LEFT JOIN ( tu.user_id AS assigneeId, tu.nick_name AS assigneeName, td.dept_name AS assigneeDeptName, - ht.PROC_INST_ID_ + ht.PROC_INST_ID_, + ahc.TYPE_ as taskComType FROM act_hi_taskinst ht LEFT JOIN sys_user tu ON tu.user_id = ht.ASSIGNEE_ LEFT JOIN sys_dept td ON td.dept_id = tu.dept_id + left join act_hi_comment ahc on ahc.TASK_ID_ = ht.ID_ AND ahc.PROC_INST_ID_ is not NULL WHERE ht.ID_ IN ( SELECT @@ -85,9 +87,9 @@ LEFT JOIN ( PROC_INST_ID_ ) GROUP BY ht.PROC_INST_ID_ + ) ht ON ht.PROC_INST_ID_ = RES.PROC_INST_ID_ ) - ##待办 DROP view vw_flow_await; CREATE VIEW vw_flow_await AS (SELECT @@ -152,49 +154,6 @@ WHERE ##审批意见 DROP view vw_flow_comment; CREATE VIEW vw_flow_comment AS ( -SELECT - hc.ID_ AS commentId, - hc.TYPE_ AS commentType, - ht.ID_ AS taskId, - ht.NAME_ AS taskName, - ht.REV_ AS rev, - CASE -WHEN hc.TYPE_ = 1 -AND ht.REV_ != 2 THEN - '通过' -WHEN hc.TYPE_ != 1 THEN - '驳回' -END AS commentResult, - ht.PROC_INST_ID_ AS procInstId, - ht.TASK_DEF_KEY_ AS taskDefKey, - ht.EXECUTION_ID_ AS executionId, - ht.DELETE_REASON_ AS deleteReason, - DATE_FORMAT( - ht.START_TIME_, - '%Y-%m-%d %H:%i:%S' -) AS startTime, - DATE_FORMAT( - ht.END_TIME_, - '%Y-%m-%d %H:%i:%S' -) AS endTime, - ht.DURATION_ AS duration, - hc.MESSAGE_ AS message, - ru.nick_name AS assigneeName, - rd.dept_name AS deptName, -r.role_name as candidate -FROM - act_hi_taskinst ht -LEFT JOIN act_hi_comment hc ON hc.TASK_ID_ = ht.ID_ -LEFT JOIN act_hi_identitylink hi on hi.TASK_ID_ = ht.ID_ and hi.TYPE_ = 'candidate' -left JOIN sys_role r on r.role_id = hi.group_Id_ -LEFT JOIN sys_user ru ON ru.user_id = ht.ASSIGNEE_ -LEFT JOIN sys_dept rd ON rd.dept_id = ru.dept_id -where hc.TYPE_ is null or hc.TYPE_!='event' -) - -##审批意见V2 -DROP view vw_flow_comment; -CREATE VIEW vw_flow_comment AS ( SELECT hc.ID_ AS commentId, hc.TYPE_ AS commentType, @@ -268,7 +227,8 @@ DEF.END_TIME_ as finishTime, ru.user_id AS startUserId, ru.nick_name AS startUserName, rd.dept_name AS startDeptName, - RES.ASSIGNEE_ + RES.ASSIGNEE_, + ahc.TYPE_ as taskComType FROM act_hi_taskinst RES LEFT OUTER JOIN act_hi_procinst DEF ON RES.PROC_INST_ID_ = DEF.PROC_INST_ID_ @@ -276,9 +236,11 @@ LEFT OUTER join act_re_procdef pd on RES.PROC_DEF_ID_ = pd.ID_ LEFT OUTER JOIN sur_project sp ON DEF.BUSINESS_KEY_ = sp.id LEFT JOIN sys_user ru ON ru.user_id = RES.ASSIGNEE_ LEFT JOIN sys_dept rd ON rd.dept_id = ru.dept_id +left join act_hi_comment ahc on ahc.TASK_ID_ = RES.ID_ AND ahc.PROC_INST_ID_ is not NULL WHERE RES.ASSIGNEE_ is not null and RES.END_TIME_ is not null) + ##君哥其它sql CREATE VIEW vw_smz_ssp_problemmodify_audit AS diff --git a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/impl/WeChatMessageServiceImpl.java b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/impl/WeChatMessageServiceImpl.java index 13e958d9..665678a0 100644 --- a/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/impl/WeChatMessageServiceImpl.java +++ b/yanzhu-jh/src/main/java/com/yanzhu/jh/wxsetting/service/impl/WeChatMessageServiceImpl.java @@ -100,6 +100,7 @@ public class WeChatMessageServiceImpl { WxMpTemplateMessage copyTemplateMessage = WxMpTemplateMessage.builder() .toUser(this.getMsgId(copySendUser)) .templateId(TemplateMessageEnum.TROUBLE_SUBMIT.getId()) + .miniProgram(new WxMpTemplateMessage.MiniProgram(WechatAccountConfig.getWxAppId(), "/pageage/project_problemmodify/"+handlePath+"/list/index?barProId="+smzSspProblemmodify.getProjectId())) .build(); copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("thing7", this.getMsgProName(smzSspProblemmodify.getProjectId()))); copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("thing5", this.getMsgName(smzSspProblemmodify.getCreateUser())+"〔"+DictUtils.getDictLabel("sys_ssp_yhfl",smzSspProblemmodify.getRoleType()+"")+"〕")); @@ -126,6 +127,25 @@ public class WeChatMessageServiceImpl { templateMessage.addWxMpTemplateData(new WxMpTemplateData("const10", "隐患整改提交复检")); list.add(templateMessage); + /** + * 通知抄送人 + */ + if(StringUtils.isNotBlank(smzSspProblemmodify.getCopySendUser())){ + String[] copySendUsers = smzSspProblemmodify.getCopySendUser().split(","); + for(String copySendUser:copySendUsers){ + WxMpTemplateMessage copyTemplateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgId(smzSspProblemmodify.getRecheckSendUser())) + .templateId(this.getMsgId(copySendUser)) + .miniProgram(new WxMpTemplateMessage.MiniProgram(WechatAccountConfig.getWxAppId(), "/pageage/project_problemmodify/"+handlePath+"/list/index?barProId="+smzSspProblemmodify.getProjectId())) + .build(); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("thing11", this.getMsgProName(smzSspProblemmodify.getProjectId()))); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("const16", infoTypeName+"/"+ DictUtils.getDictLabel(infoTypeDict,smzSspProblemmodify.getDangerType()))); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", smzSspProblemmodify.getLordSent())); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("time3", DateUtils.getTime())); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("const10", "隐患整改提交复检")); + list.add(copyTemplateMessage); + } + } } else if(state==3){ /** * 复检人驳回整改 @@ -142,6 +162,26 @@ public class WeChatMessageServiceImpl { templateMessage.addWxMpTemplateData(new WxMpTemplateData("time3", DateUtils.getTime())); templateMessage.addWxMpTemplateData(new WxMpTemplateData("const10", "隐患整改复检驳回,请重新提交整改")); list.add(templateMessage); + + /** + * 通知抄送人 + */ + if(StringUtils.isNotBlank(smzSspProblemmodify.getCopySendUser())){ + String[] copySendUsers = smzSspProblemmodify.getCopySendUser().split(","); + for(String copySendUser:copySendUsers){ + WxMpTemplateMessage copyTemplateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgId(smzSspProblemmodify.getRecheckSendUser())) + .templateId(this.getMsgId(copySendUser)) + .miniProgram(new WxMpTemplateMessage.MiniProgram(WechatAccountConfig.getWxAppId(), "/pageage/project_problemmodify/"+handlePath+"/list/index?barProId="+smzSspProblemmodify.getProjectId())) + .build(); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("thing11", this.getMsgProName(smzSspProblemmodify.getProjectId()))); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("const16", infoTypeName+"/"+ DictUtils.getDictLabel(infoTypeDict,smzSspProblemmodify.getDangerType()))); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", smzSspProblemmodify.getRecheckSend())); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("time3", DateUtils.getTime())); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("const10", "隐患整改复检驳回,请重新提交整改")); + list.add(copyTemplateMessage); + } + } } else if(state==4){ /** * 复检人通过整改 @@ -158,6 +198,26 @@ public class WeChatMessageServiceImpl { templateMessage.addWxMpTemplateData(new WxMpTemplateData("time3", DateUtils.getTime())); templateMessage.addWxMpTemplateData(new WxMpTemplateData("const10", "隐患整改复检通过")); list.add(templateMessage); + + /** + * 通知抄送人 + */ + if(StringUtils.isNotBlank(smzSspProblemmodify.getCopySendUser())){ + String[] copySendUsers = smzSspProblemmodify.getCopySendUser().split(","); + for(String copySendUser:copySendUsers){ + WxMpTemplateMessage copyTemplateMessage = WxMpTemplateMessage.builder() + .toUser(this.getMsgId(smzSspProblemmodify.getRecheckSendUser())) + .templateId(this.getMsgId(copySendUser)) + .miniProgram(new WxMpTemplateMessage.MiniProgram(WechatAccountConfig.getWxAppId(), "/pageage/project_problemmodify/"+handlePath+"/list/index?barProId="+smzSspProblemmodify.getProjectId())) + .build(); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("thing11", this.getMsgProName(smzSspProblemmodify.getProjectId()))); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("const16", infoTypeName+"/"+ DictUtils.getDictLabel(infoTypeDict,smzSspProblemmodify.getDangerType()))); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("thing2", smzSspProblemmodify.getRecheckSend())); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("time3", DateUtils.getTime())); + copyTemplateMessage.addWxMpTemplateData(new WxMpTemplateData("const10", "隐患整改复检通过")); + list.add(copyTemplateMessage); + } + } } this.send(list, MessageTypeEnum.getYHPCLX(smzSspProblemmodify.getInfoType())+state); }