diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/api/flow2/FlowDelegateQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/api/flow2/FlowDelegateQuery.java new file mode 100644 index 00000000..1c54eb65 --- /dev/null +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/api/flow2/FlowDelegateQuery.java @@ -0,0 +1,24 @@ +package com.yxt.supervise.flowable.api.flow2; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/29 + **/ +@Data +public class FlowDelegateQuery { + + @ApiModelProperty + private String userSid; + @ApiModelProperty("流程实例id") + private String instanceId; + @ApiModelProperty("任务Id") + private String taskId; + @ApiModelProperty("审批人sid") + private String assignee; + @ApiModelProperty("填写意见") + private String views; +} diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/api/flow2/MessageFlowVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/api/flow2/MessageFlowVo.java new file mode 100644 index 00000000..9f8a8d28 --- /dev/null +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/api/flow2/MessageFlowVo.java @@ -0,0 +1,20 @@ +package com.yxt.supervise.flowable.api.flow2; + +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class MessageFlowVo { + + private String sid; + private String procDefId; + private String nodeState; + private String procInsId; + private String taskDefKey; + private String taskId; + private String nextNodeUserSids; +} diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/api/flowtask/DelegateQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/api/flowtask/DelegateQuery.java new file mode 100644 index 00000000..19031dfe --- /dev/null +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/api/flowtask/DelegateQuery.java @@ -0,0 +1,19 @@ +package com.yxt.supervise.flowable.api.flowtask; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/29 + **/ +@Data +public class DelegateQuery { + + @ApiModelProperty("任务Id") + private String taskId; + + @ApiModelProperty("审批人") + private String assignee; +} diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow/FlowableMapper.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow/FlowableMapper.java index e7fa6f09..3fb5cbc5 100644 --- a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow/FlowableMapper.java +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow/FlowableMapper.java @@ -11,8 +11,13 @@ import java.util.Map; @Mapper public interface FlowableMapper extends BaseMapper { - void insetFlowableTask(Map params); + void insetFlowableTask(Map params); + FlowProcinst getFlowProcinstById(@Param("id") String id); + @Select("select * from act_hi_procinst where proc_inst_id_=#{id}") - Map getProcessInstanceById(@Param("id") String procInsId); + Map getProcessInstanceById(@Param("id") String procInsId); + + @Select("select * from act_re_procdef where id_=#{id}") + Map getProcessDefByDefId(String processDefinitionId); } diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow/FlowableService.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow/FlowableService.java index 645a4891..1be6f2fa 100644 --- a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow/FlowableService.java +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow/FlowableService.java @@ -273,4 +273,8 @@ public class FlowableService extends MybatisBaseService getProcessInstanceById(String procInsId) { return baseMapper.getProcessInstanceById(procInsId); } + + public Map getProcessDefByDefId(String processDefinitionId) { + return baseMapper.getProcessDefByDefId(processDefinitionId); + } } diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow2/FlowRest.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow2/FlowRest.java index 433904e3..0ba16008 100644 --- a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow2/FlowRest.java +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow2/FlowRest.java @@ -5,6 +5,7 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.yxt.common.base.utils.StringUtils; import com.yxt.common.core.result.ResultBean; import com.yxt.supervise.flowable.api.flow.UpdateFlowFieldVo; +import com.yxt.supervise.flowable.api.flow2.FlowDelegateQuery; import com.yxt.supervise.flowable.sqloperationsymbol.BusinessVariables; import io.swagger.annotations.ApiOperation; import org.apache.tomcat.util.threads.ThreadPoolExecutor; @@ -47,7 +48,7 @@ public class FlowRest { //获取下一环节待办人 if (StringUtils.isBlank(bv.getNextNodeUserSids())) { ResultBean userResultBean = flowService.getNextNodeUser(bv); - if(userResultBean.getSuccess()){ + if (userResultBean.getSuccess()) { return rb.setMsg(userResultBean.getMsg()); } bv.setNextNodeUserSids(userResultBean.getData()); @@ -57,6 +58,8 @@ public class FlowRest { return startResultBean; } + @ApiOperation(value = "办理") + @PostMapping(value = "/handleProsess") public ResultBean handleProsess(BusinessVariables bv) { ResultBean rb = ResultBean.fireFail(); ResultBean updateFlowFieldVoResultBean = flowService.handleProsess(bv, true); @@ -79,7 +82,7 @@ public class FlowRest { UpdateFlowFieldVo ufVo = updateFlowFieldVoResultBean.getData(); ufVo.setTaskId(bv.getTaskId()); map.put("uff", ufVo); -// flowService.cc(map, bv.getTaskDefKey()); + flowService.cc(map, bv.getTaskDefKey()); }); } catch (Exception e) { e.printStackTrace(); @@ -90,4 +93,10 @@ public class FlowRest { return updateFlowFieldVoResultBean; } + @ApiOperation(value = "加签") + @PostMapping(value = "/delegate") + public ResultBean delegate(FlowDelegateQuery flowDelegateQuery) { + return flowService.delegate(flowDelegateQuery); + } + } diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow2/FlowService.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow2/FlowService.java index f6f74230..59b04ea7 100644 --- a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow2/FlowService.java +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flow2/FlowService.java @@ -1,21 +1,29 @@ package com.yxt.supervise.flowable.biz.flow2; +import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.yxt.common.base.utils.StringUtils; import com.yxt.common.core.result.ResultBean; import com.yxt.supervise.flowable.api.flow.UpdateFlowFieldVo; +import com.yxt.supervise.flowable.api.flow2.FlowDelegateQuery; +import com.yxt.supervise.flowable.api.flow2.MessageFlowVo; import com.yxt.supervise.flowable.api.flowcomment.FlowComment; +import com.yxt.supervise.flowable.api.flowtask.DelegateQuery; import com.yxt.supervise.flowable.api.flowtask.LatestTaskVo; +import com.yxt.supervise.flowable.api.processcomment.ProcessCommentDto; import com.yxt.supervise.flowable.biz.flowtask.FlowTaskService; import com.yxt.supervise.flowable.biz.process.ExpressionCmd; +import com.yxt.supervise.flowable.biz.process.ProcessService; +import com.yxt.supervise.flowable.biz.processcomment.ProcessCommentService; import com.yxt.supervise.flowable.common.ProcessConstants; import com.yxt.supervise.flowable.sqloperationsymbol.BusinessVariables; -import com.yxt.supervise.system.sysuser.SysUserFeign; -import com.yxt.supervise.system.sysuser.SysUserVo; -import com.yxt.supervise.system.sysuser.UserQuery; -import com.yxt.supervise.system.sysuser.UserssQuery; +import com.yxt.supervise.message.message.MessageFeign; +import com.yxt.supervise.message.message.MessageFlowableQuery; +import com.yxt.supervise.system.sysflowcc.SysFlowccFeign; +import com.yxt.supervise.system.sysflowcc.SysFlowccVo; +import com.yxt.supervise.system.sysuser.*; import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.*; import org.flowable.common.engine.impl.identity.Authentication; @@ -25,6 +33,7 @@ import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.DelegationState; import org.flowable.task.api.Task; +import org.flowable.task.api.history.HistoricTaskInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -55,6 +64,16 @@ public class FlowService { protected TaskService taskService; @Autowired private FlowTaskService flowTaskService; + @Autowired + private ProcessCommentService processCommentService; + @Autowired + private HistoryService historyService; + @Autowired + private ProcessService processService; + @Autowired + private MessageFeign messageFeign; + @Autowired + private SysFlowccFeign sysFlowccFeign; public ResultBean getNextNodeUser(BusinessVariables bv) { ResultBean rb = ResultBean.fireFail(); @@ -503,4 +522,196 @@ public class FlowService { } } + public ResultBean delegate(FlowDelegateQuery flowDelegateQuery) { + ResultBean rb = ResultBean.fireFail(); + DelegateQuery delegateQuery = new DelegateQuery(); + BeanUtil.copyProperties(flowDelegateQuery, delegateQuery); + ResultBean delegate = flowTaskService.delegate(delegateQuery); + String userSid = flowDelegateQuery.getUserSid(); + String assigneeSid = flowDelegateQuery.getAssignee(); + String instanceId = flowDelegateQuery.getInstanceId(); + String views = ""; + if (StringUtils.isNotBlank(flowDelegateQuery.getViews())) { + views = flowDelegateQuery.getViews(); + } + ResultBean userVoResultBean1 = sysUserFeign.fetchBySid(userSid); + String userName = ""; + if (userVoResultBean1.getData() != null) { + userName = userVoResultBean1.getData().getName(); + } + ResultBean userVoResultBean2 = sysUserFeign.fetchBySid(assigneeSid); + ProcessCommentDto processCommentDto = new ProcessCommentDto(); + processCommentDto.setReviewerSid(userSid); + if (userVoResultBean2.getData() != null) { + String changeName = userVoResultBean2.getData().getName(); + processCommentDto.setReviewer(userName); + processCommentDto.setContent(userName + "加签给" + changeName + ":" + views); + } + processCommentDto.setTime(new Date()); + processCommentDto.setProcessId(instanceId); + processCommentService.saveOrUpdateDto(processCommentDto); + //加签内容推送至待阅 + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery() + .includeProcessVariables().taskId(delegateQuery.getTaskId()).singleResult(); + if (historicTaskInstance == null) { + return rb.setMsg("分享失败!"); + } + MessageFlowVo messageFlowVo = new MessageFlowVo(); + String procDefId = historicTaskInstance.getProcessDefinitionId(); + String procInsId = historicTaskInstance.getProcessInstanceId(); + String nodeState = historicTaskInstance.getName(); + String taskDefKey = historicTaskInstance.getTaskDefinitionKey(); + messageFlowVo.setProcDefId(procDefId); + messageFlowVo.setTaskId(delegateQuery.getTaskId()); + messageFlowVo.setNodeState(nodeState); + messageFlowVo.setProcInsId(procInsId); + messageFlowVo.setTaskDefKey(taskDefKey); + Map processVariables = historicTaskInstance.getProcessVariables(); + MessageFlowableQuery mfq = new MessageFlowableQuery(); + mfq.setUfVo(messageFlowVo); + String createrOrgPath = (String) processVariables.get("createrOrgPath"); + if (historicTaskInstance == null) { + return rb.setMsg("分享失败!"); + } + // + String assignee = (String) processVariables.get("assignee"); + ResultBean stringResultBean = sysUserFeign.fetchBySid(assignee); + String assigneeName = ""; + if (stringResultBean.getData() != null) { + assigneeName = stringResultBean.getData().getName(); + } + + Map app = new HashMap<>(); + if (processVariables.get("app") != null) { + app = (Map) processVariables.get("app"); + } + String businessSid = (String) processVariables.get("businessSid"); + mfq.setBusinessSid(businessSid); + mfq.setMsgContent(userName + "分享的流程审批,请查看"); +// act_re_procdef + Map process = processService.getProcessDefByDefId(historicTaskInstance.getProcessDefinitionId()); + + mfq.setModuleName(process.get("NAME_")); + if (processVariables.containsKey("orderNames")) { + mfq.setMsgTitle(processVariables.get("orderNames").toString()); + } else { + mfq.setMsgTitle(process.get("NAME_")); + } + mfq.setUserSids(assigneeSid); + mfq.setUserSid(assignee); + mfq.setApplicationName(assigneeName); + ResultBean resultBean = messageFeign.pushMessageShare(mfq); + return rb.success(); + } + + /** + * 流程抄送的功能 + * + * @param map + * @return + */ + public ResultBean cc(Map map, String taskDefKey) { + ResultBean rb = ResultBean.fireFail(); + log.info("FlowableRest-cc:{}", JSONObject.toJSONString(map)); + Object bv1 = map.get("bv"); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(bv1, bv); + Object uff1 = map.get("uff"); + UpdateFlowFieldVo uff = new UpdateFlowFieldVo(); + BeanUtil.copyProperties(uff1, uff); + uff.setTaskDefKey(taskDefKey); + + //流程定义的id + String modelId = bv.getModelId(); + //将modelId根据冒号:分成三部分,取第一部分作为key + List stringList = Arrays.asList(modelId.split(":")); + modelId = stringList.get(0); + //抄送的角色的sid + ResultBean roleSidByModelId = sysFlowccFeign.getRoleSidByModelId(modelId); + //组织机构sid + String projectSid = bv.getProjectSid(); + if (roleSidByModelId.getData() == null) { + log.info("抄送失败,没有配置对应的角色!"); + return rb.setMsg("抄送失败,没有配置对应的角色!"); + } + SysFlowccVo data = roleSidByModelId.getData(); + if (StringUtils.isBlank(data.getRoleSid())) { + log.info("抄送失败,没有配置对应的角色!"); + return rb.setMsg("抄送失败,没有配置对应的角色!"); + } + List list = Arrays.asList(data.getRoleSid().split(",")); + UserByRolesAndProQuery userQuery = new UserByRolesAndProQuery(); + userQuery.setRoleSids(list); + userQuery.setProjectSid(projectSid); + List sysUserVos = sysUserFeign.getUserByRoles(userQuery).getData(); + if (sysUserVos == null || sysUserVos.size() < 1) { + log.info("抄送失败,没有用户!"); + return rb.setMsg("抄送失败,没有用户!"); + } + StringBuilder userName = new StringBuilder(); + StringBuilder userSids = new StringBuilder(); + sysUserVos.forEach(f -> { + userName.append(f.getName()).append(","); + userSids.append(f.getSid()).append(","); + }); + + //抄送的业务逻辑 + MessageFlowableQuery mfq = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(uff, messageFlowVo); + mfq.setUfVo(messageFlowVo); + //移动端的参数 + HistoricTaskInstance historicTaskInstance = historyService.createHistoricTaskInstanceQuery() + .includeProcessVariables().taskId(bv.getTaskId()).singleResult(); + if (historicTaskInstance == null) { + log.info("抄送失败:没有获取到业务参数!"); + return rb.setMsg("抄送失败!"); + } + Map processVariables = historicTaskInstance.getProcessVariables(); + String createrOrgPath = (String) processVariables.get("createrOrgPath"); + if (historicTaskInstance == null) { + log.info("抄送失败:没有获取到业务参数!"); + return rb.setMsg("抄送失败!"); + } + // + String assignee = (String) processVariables.get("assignee"); + ResultBean stringResultBean = sysUserFeign.fetchBySid(assignee); + String assigneeName = ""; + if (stringResultBean.getData() != null) { + assigneeName = stringResultBean.getData().getName(); + } + + Map app = new HashMap<>(); + if (processVariables.get("app") != null) { + app = (Map) processVariables.get("app"); + } + log.info("抄送方法-historicTaskInstance:{}", JSONObject.toJSONString(historicTaskInstance)); + mfq.setBusinessSid(bv.getBusinessSid()); + mfq.setMsgContent(assigneeName + "抄送的流程审批,请查看"); +// act_re_procdef + Map process = processService.getProcessDefByDefId(historicTaskInstance.getProcessDefinitionId()); + log.info("抄送成功-process:{}", process); + if (process == null) { + log.info("抄送失败,流程定义不存在!"); + return rb.setMsg("抄送失败,流程定义不存在!"); + } + mfq.setModuleName(process.get("NAME_")); + if (processVariables.containsKey("orderNames")) { + mfq.setMsgTitle(processVariables.get("orderNames").toString()); + } else { + mfq.setMsgTitle(process.get("NAME_")); + } + userSids.deleteCharAt(userSids.length() - 1); + mfq.setUserSids(userSids.toString()); + mfq.setUserSid(assignee); + mfq.setApplicationName(assigneeName); + ResultBean resultBean = messageFeign.pushMessageCC(mfq); + log.info("抄送成功:{}", userName.toString()); + log.info("抄送成功-resultBean:{}", resultBean); + if (!resultBean.getSuccess()) { + log.info("抄送失败,同送消息异常!:{}", JSONObject.toJSONString(resultBean)); + return rb.setMsg("抄送失败,同送消息异常!"); + } + return rb.success().setMsg("抄送" + userName.toString() + "成功!"); + } } diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flowtask/FlowTaskService.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flowtask/FlowTaskService.java index b528d4c1..f06f6bc9 100644 --- a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flowtask/FlowTaskService.java +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/flowable/biz/flowtask/FlowTaskService.java @@ -2117,4 +2117,10 @@ public class FlowTaskService extends MybatisBaseService getProcessInstanceById(String procInsId) { return flowableService.getProcessInstanceById(procInsId); } + + public Map getProcessDefByDefId(String processDefinitionId) { + return flowableService.getProcessDefByDefId(processDefinitionId); + } } \ No newline at end of file diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/message/message/MessageFeign.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/message/message/MessageFeign.java new file mode 100644 index 00000000..565bd4d9 --- /dev/null +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/message/message/MessageFeign.java @@ -0,0 +1,28 @@ +package com.yxt.supervise.message.message; + +import com.yxt.common.core.result.ResultBean; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@FeignClient( + contextId = "supervise-message-Message", + name = "supervise-message", + path = "v1/Message", + fallback = MessageFeignFallBack.class) +public interface MessageFeign { + + @ApiOperation("流程审批推送消息 抄送") + @PostMapping("/pushMessageCC") + public ResultBean pushMessageCC(MessageFlowableQuery query); + + @ApiOperation("分享") + @PostMapping("/pushMessageShare") + ResultBean pushMessageShare(@RequestBody MessageFlowableQuery query); +} diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/message/message/MessageFeignFallBack.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/message/message/MessageFeignFallBack.java new file mode 100644 index 00000000..30f67e2f --- /dev/null +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/message/message/MessageFeignFallBack.java @@ -0,0 +1,12 @@ +package com.yxt.supervise.message.message; + +import org.springframework.stereotype.Component; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Component +public class MessageFeignFallBack { +} diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/message/message/MessageFlowableQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/message/message/MessageFlowableQuery.java new file mode 100644 index 00000000..fbae1c07 --- /dev/null +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/message/message/MessageFlowableQuery.java @@ -0,0 +1,31 @@ +package com.yxt.supervise.message.message; + +import com.yxt.supervise.flowable.api.flow2.MessageFlowVo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class MessageFlowableQuery { + + @ApiModelProperty("业务sid") + private String businessSid; + @ApiModelProperty("模块名称") + private String moduleName; + @ApiModelProperty("消息内容") + private String msgContent; + @ApiModelProperty("消息标题") + private String msgTitle; + @ApiModelProperty("流程相关参数") + private MessageFlowVo ufVo; + @ApiModelProperty("申请人") + private String applicationName; + @ApiModelProperty("抄送的用户sid") + private String userSids; + @ApiModelProperty("当前所登陆账号的sid") + private String userSid; +} diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccFeign.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccFeign.java new file mode 100644 index 00000000..e3285f60 --- /dev/null +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccFeign.java @@ -0,0 +1,25 @@ +package com.yxt.supervise.system.sysflowcc; + +import com.yxt.common.core.result.ResultBean; +import com.yxt.supervise.system.sysorganization.SysOrganizationFeignFallback; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@FeignClient( + contextId = "supervise-system-SysFlowcc", + name = "supervise-system", + path = "v1/sysflowcc", + fallback = SysFlowccFeignFallback.class) +public interface SysFlowccFeign { + + @ApiOperation("根据流程的id查询抄送的角色") + @PostMapping("/getRoleSidByModelId/{modelId}") + public ResultBean getRoleSidByModelId(@PathVariable("modelId") String modelId); +} diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccFeignFallback.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccFeignFallback.java new file mode 100644 index 00000000..f72b6950 --- /dev/null +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccFeignFallback.java @@ -0,0 +1,9 @@ +package com.yxt.supervise.system.sysflowcc; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +public class SysFlowccFeignFallback { +} diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccVo.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccVo.java new file mode 100644 index 00000000..67943744 --- /dev/null +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccVo.java @@ -0,0 +1,24 @@ +package com.yxt.supervise.system.sysflowcc; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class SysFlowccVo { + + private String sid; // sid + + @ApiModelProperty("流程key") + private String flowKey; // 流程key + @ApiModelProperty("流程名称") + private String flowName; // 流程名称 + @ApiModelProperty("角色sid") + private String roleSid; // 角色sid + @ApiModelProperty("角色名称") + private String roleName; // 角色名称 +} diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserFeign.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserFeign.java index ee5d2ded..d2429b39 100644 --- a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserFeign.java +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserFeign.java @@ -239,4 +239,8 @@ public interface SysUserFeign { @ApiModelProperty("根据项目和角色获取用户") @GetMapping("getUserByRoleAndProject2") public ResultBean> getUserByRoleAndProject2(@SpringQueryMap UserssQuery userQuery); + + @ApiOperation(value = "根据多个角色sid以及项目sid获取用户") + @PostMapping(value = "/getUserByRoles") + public ResultBean> getUserByRoles(UserByRolesAndProQuery userQuery); } \ No newline at end of file diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserFeignFallback.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserFeignFallback.java index 370e6eff..2aa5c564 100644 --- a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserFeignFallback.java +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserFeignFallback.java @@ -229,4 +229,9 @@ public class SysUserFeignFallback implements SysUserFeign { public ResultBean> getUserByRoleAndProject2(UserssQuery userQuery) { return null; } + + @Override + public ResultBean> getUserByRoles(UserByRolesAndProQuery userQuery) { + return null; + } } \ No newline at end of file diff --git a/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysuser/UserByRolesAndProQuery.java b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysuser/UserByRolesAndProQuery.java new file mode 100644 index 00000000..efbfde7f --- /dev/null +++ b/yxt_supervise/supervise-flowable/supervise-flowable-biz/src/main/java/com/yxt/supervise/system/sysuser/UserByRolesAndProQuery.java @@ -0,0 +1,20 @@ +package com.yxt.supervise.system.sysuser; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class UserByRolesAndProQuery { + + @ApiModelProperty(value = "角色sid必传项") + private List roleSids; + @ApiModelProperty(value = "项目sid") + private String projectSid; +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/Message.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/Message.java index 044d7963..ae5313be 100644 --- a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/Message.java +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/Message.java @@ -1,5 +1,7 @@ package com.yxt.supervise.message.api.message; +import com.yxt.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** @@ -8,5 +10,57 @@ import lombok.Data; * @date: 2023/11/24 **/ @Data -public class Message { +public class Message extends BaseEntity { + + private static final long serialVersionUID = 3595229268842695762L; + @ApiModelProperty("消息类别sid") + private String msgTypeSid; + + @ApiModelProperty("消息类别名称") + private String msgType; + + @ApiModelProperty("消息标题") + private String msgTitle; + + @ApiModelProperty("消息内容") + private String msgContent; + + @ApiModelProperty("来源(资源名称)") + private String msgSource; + + @ApiModelProperty("发送人sid") + private String senderSid; + + @ApiModelProperty("发起人姓名") + private String senderName; + + @ApiModelProperty("发送人部门Id") + private String senderDeptSid; + + @ApiModelProperty("发起人部门名称") + private String senderDeptName; + + @ApiModelProperty("业务Id(扩展字段,与工作相关)") + private String businessSid; + + @ApiModelProperty("插件Sid") + private String moduleSid; + + @ApiModelProperty("具体页面action") + private String moduleAction; + + @ApiModelProperty("0.内置Activity 1.内置WebView 2.RePlugin插件") + private String app_type; + + @ApiModelProperty("参数(规则),json类型的传参(必须为 string、string)") + private String args_json; + + @ApiModelProperty("目标网页地址") + private String h5_url; + + @ApiModelProperty("小程序页面地址") + private String xcx_url; + + @ApiModelProperty("推送的消息打开的action(APP),推送参数对应class_name") + private String msgTargetUri; } diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageDto.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageDto.java new file mode 100644 index 00000000..3d82c61e --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageDto.java @@ -0,0 +1,72 @@ +package com.yxt.supervise.message.api.message; + +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/29 + **/ +@Data +public class MessageDto implements Dto { + + private static final long serialVersionUID = -4643392187155889939L; + @ApiModelProperty("消息体sid") + private String sid; + + @ApiModelProperty("消息类别sid") + private String msgTypeSid; + + @ApiModelProperty("消息类别名称") + private String msgType; + + @ApiModelProperty("消息标题") + private String msgTitle; + + @ApiModelProperty("消息内容") + private String msgContent; + + @ApiModelProperty("来源(资源名称)") + private String msgSource; + + @ApiModelProperty("发送人sid") + private String senderSid; + + @ApiModelProperty("发起人姓名") + private String senderName; + + @ApiModelProperty("发送人部门Id") + private String senderDeptSid; + + @ApiModelProperty("发起人部门名称") + private String senderDeptName; + + @ApiModelProperty("业务Id(扩展字段,与工作相关)") + private String businessSid; + + @ApiModelProperty("插件Sid") + private String moduleSid; + + @ApiModelProperty("具体页面action") + private String moduleAction; + + @ApiModelProperty("0.内置Activity 1.内置WebView 2.RePlugin插件") + private String app_type; + + @ApiModelProperty("参数(规则),json类型的传参(必须为 string、string)") + private String args_json; + + @ApiModelProperty("目标网页地址") + private String h5_url; + + @ApiModelProperty("小程序页面地址") + private String xcx_url; + + @ApiModelProperty("推送的消息打开的action(APP),推送参数对应class_name") + private String msgTargetUri; + + @ApiModelProperty("推送taskId") + private String taskId; +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageFlowVo.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageFlowVo.java new file mode 100644 index 00000000..203644f2 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageFlowVo.java @@ -0,0 +1,20 @@ +package com.yxt.supervise.message.api.message; + +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/29 + **/ +@Data +public class MessageFlowVo { + + private String sid; + private String procDefId; + private String nodeState; + private String procInsId; + private String taskDefKey; + private String taskId; + private String nextNodeUserSids; +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageFlowableDto.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageFlowableDto.java new file mode 100644 index 00000000..b6432194 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageFlowableDto.java @@ -0,0 +1,56 @@ +package com.yxt.supervise.message.api.message; + +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/29 + **/ +@Data +public class MessageFlowableDto implements Dto { + + private static final long serialVersionUID = 3316247196699190882L; + @ApiModelProperty("接收人的sid集合") + private List list = new ArrayList<>(); + @ApiModelProperty("消息标题") + private String msgTitle; + @ApiModelProperty("消息内容") + private String msgContent; + + @ApiModelProperty("json组装") + private MessageJsonDto json; + @ApiModelProperty("创建人名称") + private String createName; + @ApiModelProperty("接收人的id集合") + private List receiveIdList; + + @ApiModelProperty("模块名称") + private String moduleName; + + @ApiModelProperty("具体页面的url") + private String moduleAction; + + @ApiModelProperty("PC具体页面的url") + private String moduleAction2; + + @ApiModelProperty("业务sid") + private String businessSid; + + @ApiModelProperty("0.内置Activity 1.内置WebView 2.RePlugin插件") + private String app_type; + + @ApiModelProperty("插件sid") + private String moduleSid; + + @ApiModelProperty("任务id") + private String taskId; + + private String userSid; + +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageFlowableQueryForCC.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageFlowableQueryForCC.java new file mode 100644 index 00000000..7d6883b3 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageFlowableQueryForCC.java @@ -0,0 +1,33 @@ +package com.yxt.supervise.message.api.message; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Map; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/29 + **/ +@Data +public class MessageFlowableQueryForCC { + + @ApiModelProperty("业务sid") + private String businessSid; + @ApiModelProperty("模块名称") + private String moduleName; + @ApiModelProperty("消息内容") + private String msgContent; + @ApiModelProperty("消息标题") + private String msgTitle; + @ApiModelProperty("流程相关参数") + private MessageFlowVo ufVo; + @ApiModelProperty("申请人") + private String applicationName; + @ApiModelProperty("抄送的用户sid") + private String userSids; + @ApiModelProperty("当前所登陆账号的sid") + private String userSid; + +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageJsonDto.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageJsonDto.java new file mode 100644 index 00000000..13bf56e0 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/message/MessageJsonDto.java @@ -0,0 +1,29 @@ +package com.yxt.supervise.message.api.message; + +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/29 + **/ +@Data +public class MessageJsonDto implements Dto { + + private static final long serialVersionUID = -4851888900240321450L; + @ApiModelProperty("任务id") + private String taskId; + @ApiModelProperty("节点名称") + private String taskName; + @ApiModelProperty("流程实例id") + private String procInsId; + @ApiModelProperty("节点id") + private String taskDefKey; + @ApiModelProperty("流程定义id") + private String deployId; + + @ApiModelProperty("流程定义id") + private String procDefId; +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/messagelist/MessageList.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/messagelist/MessageList.java new file mode 100644 index 00000000..c1d005a4 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/messagelist/MessageList.java @@ -0,0 +1,39 @@ +package com.yxt.supervise.message.api.messagelist; + +import com.yxt.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class MessageList extends BaseEntity { + + private static final long serialVersionUID = 2636101214854588182L; + @ApiModelProperty("消息sid") + private String msgSid; + + @ApiModelProperty("接收人sid") + private String receiverSid; + + @ApiModelProperty("接收人姓名") + private String receiverName; + + @ApiModelProperty("接收人部门sid") + private String receiverDeptSid; + + @ApiModelProperty("接收人部门名称") + private String receiverDeptName; + + @ApiModelProperty("接收人删除状态") + private Integer rDelStatus; + + @ApiModelProperty("发送人删除状态") + private Integer sDelStatus; + + @ApiModelProperty("状态(阅读状态,0未阅,1已阅)") + private Integer state = 0; +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/messagelist/MessageListDto.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/messagelist/MessageListDto.java new file mode 100644 index 00000000..66af4fbc --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/messagelist/MessageListDto.java @@ -0,0 +1,39 @@ +package com.yxt.supervise.message.api.messagelist; + +import com.yxt.common.core.dto.Dto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class MessageListDto implements Dto { + private static final long serialVersionUID = 8092414395907587688L; + + @ApiModelProperty("消息sid") + private String msgSid; + + @ApiModelProperty("接收人sid") + private String receiverSid; + + @ApiModelProperty("接收人姓名") + private String receiverName; + + @ApiModelProperty("接收人部门sid") + private String receiverDeptSid; + + @ApiModelProperty("接收人部门名称") + private String receiverDeptName; + + @ApiModelProperty("接收人删除状态") + private Integer rDelStatus; + + @ApiModelProperty("发送人删除状态") + private Integer sDelStatus; + + @ApiModelProperty("状态(阅读状态,0未阅,1已阅)") + private Integer state = 0; +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/messagetype/MessageType.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/messagetype/MessageType.java new file mode 100644 index 00000000..d82233c2 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/messagetype/MessageType.java @@ -0,0 +1,30 @@ +package com.yxt.supervise.message.api.messagetype; + +import com.yxt.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class MessageType extends BaseEntity { + + private static final long serialVersionUID = -8661966988081336951L; + @ApiModelProperty("消息类别名称") + private String msgType; + + @ApiModelProperty("横排消息类别图标") + private String crossIconUrl; + + @ApiModelProperty("纵排消息类别图标") + private String longIconUrl; + + @ApiModelProperty("排序") + private Integer sort; + + @ApiModelProperty("消息标识:0001为小程序、0002为app") + private String identifier; +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/messagetype/MessageTypeVo.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/messagetype/MessageTypeVo.java new file mode 100644 index 00000000..7e9fcbbb --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/api/messagetype/MessageTypeVo.java @@ -0,0 +1,26 @@ +package com.yxt.supervise.message.api.messagetype; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/29 + **/ +@Data +public class MessageTypeVo { + + @ApiModelProperty(value = "消息类别sid") + private String msgTypeSid; + @ApiModelProperty(value = "消息类别名称") + private String msgType; + @ApiModelProperty(value = "横排消息类别图标") + private String crossIconUrl; + @ApiModelProperty(value = "纵排消息类别图标") + private String longIconUrl; + @ApiModelProperty(value = "排序") + private Integer sort; + @ApiModelProperty(value = "是否有未读") + private Boolean isHave; +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/message/MessageRest.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/message/MessageRest.java index eb75684a..b22c52a9 100644 --- a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/message/MessageRest.java +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/message/MessageRest.java @@ -1,5 +1,10 @@ package com.yxt.supervise.message.biz.message; +import com.yxt.common.core.result.ResultBean; +import com.yxt.supervise.message.api.message.MessageFlowableQueryForCC; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -11,4 +16,19 @@ import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("v1/Message") public class MessageRest { + + @Autowired + private MessageService messageService; + + @ApiOperation("流程审批推送消息 抄送") + @PostMapping("/pushMessageCC") + public ResultBean pushMessageCC(MessageFlowableQueryForCC query) { + return messageService.pushMessageForCC(query); + } + + @ApiOperation("流程审批推送消息 分享") + @PostMapping("/pushMessageShare") + public ResultBean pushMessageShare(MessageFlowableQueryForCC query) { + return messageService.pushMessageShare(query); + } } diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/message/MessageService.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/message/MessageService.java index 8023c41c..3a5a605c 100644 --- a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/message/MessageService.java +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/message/MessageService.java @@ -1,9 +1,29 @@ package com.yxt.supervise.message.biz.message; +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSONObject; import com.yxt.common.base.service.MybatisBaseService; -import com.yxt.supervise.message.api.message.Message; +import com.yxt.common.base.utils.JPushServer; +import com.yxt.common.core.result.ResultBean; +import com.yxt.supervise.message.api.message.*; +import com.yxt.supervise.message.api.messagelist.MessageListDto; +import com.yxt.supervise.message.api.messagetype.MessageTypeVo; +import com.yxt.supervise.message.biz.messagelist.MessageListService; +import com.yxt.supervise.message.biz.messagetype.MessageTypeService; +import com.yxt.supervise.message.feign.flowable.SysProUrlFeign; +import com.yxt.supervise.message.feign.flowable.SysProUrlVo; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; +import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Service; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.stream.Collectors; + /** * @description: * @author: dimengzhe @@ -11,4 +31,241 @@ import org.springframework.stereotype.Service; **/ @Service public class MessageService extends MybatisBaseService { + + @Autowired + private SysProUrlFeign sysProUrlFeign; + @Autowired + private MessageTypeService messageTypeService; + @Autowired + private MessageListService messageListService; + + public ResultBean pushMessageForCC(MessageFlowableQueryForCC query) { + ResultBean rb = ResultBean.fireFail(); + MessageFlowVo ufVo = query.getUfVo(); + String procId = ufVo.getProcInsId(); + String procDefId = ufVo.getProcDefId(); + String moduleName = query.getModuleName(); + String msgContent = query.getMsgContent(); + String msgTitle = query.getMsgTitle(); + String applicationName = query.getApplicationName(); + String nextNodeUserSids = query.getUserSids(); + List receiveSidList = Arrays.asList(nextNodeUserSids.split(",")); + receiveSidList = receiveSidList.stream().distinct().collect(Collectors.toList()); + MessageFlowableDto messageFlowableDto = new MessageFlowableDto(); + MessageJsonDto messageJsonDto = new MessageJsonDto(); + BeanUtil.copyProperties(ufVo, messageJsonDto); + //查询流程审批的页面操作地址组装json的参数 + //根据taskDef和移动端标识 + //PC取前端页面 + ResultBean selectUrlByPCKey = sysProUrlFeign.selectUrlByKey(procDefId, ufVo.getTaskDefKey(), "2", "1"); + SysProUrlVo sysProUrlPCVo = selectUrlByPCKey.getData(); + messageFlowableDto.setModuleAction2(sysProUrlPCVo.getUrl()); + messageJsonDto.setTaskName(ufVo.getNodeState()); + messageJsonDto.setProcInsId(ufVo.getProcInsId()); + messageJsonDto.setDeployId(procDefId); + messageJsonDto.setProcDefId(procDefId); + messageFlowableDto.setJson(messageJsonDto); + messageFlowableDto.setList(receiveSidList); + messageFlowableDto.setModuleName(moduleName); + messageFlowableDto.setMsgContent(msgContent); + messageFlowableDto.setMsgTitle(msgTitle); + messageFlowableDto.setCreateName(applicationName); + messageFlowableDto.setTaskId(ufVo.getTaskId()); + messageFlowableDto.setUserSid(query.getUserSid()); + ResultBean stringResultBean = getMessageRead(messageFlowableDto); + String msgSid = stringResultBean.getData(); + return rb.success().setMsg(msgSid); + } + + /** + * 抄送消息 + * + * @param dto + * @return + */ + public ResultBean getMessageRead(MessageFlowableDto dto) { + ResultBean rb = ResultBean.fireFail(); + String msgTitle = dto.getMsgTitle(); + String msgContent = dto.getMsgContent(); + List list = dto.getList(); + List receiveIdList = dto.getReceiveIdList(); + // 1、保存消息体 + MessageDto messageDto = new MessageDto(); + List messageBean = messageTypeService.selectMsgTypeList("0003"); + messageBean.removeAll(Collections.singleton(null)); + if (!messageBean.isEmpty()) { + for (MessageTypeVo message : messageBean) { + if (message.getMsgType().contains("抄送")) { + messageDto.setMsgTypeSid(message.getMsgTypeSid()); + messageDto.setMsgType(message.getMsgType()); + } + } + } + messageDto.setMsgTitle(msgTitle); + messageDto.setMsgContent(msgContent); + messageDto.setMsgSource("抄送"); + messageDto.setApp_type(dto.getApp_type()); + messageDto.setModuleSid(dto.getModuleSid()); + messageDto.setBusinessSid(dto.getBusinessSid()); + //将json与appMap中的参数融合 + Map jsonMap = BeanUtil.beanToMap(dto.getJson()); + messageDto.setArgs_json(JSONObject.toJSONString(jsonMap)); + messageDto.setMsgTargetUri(dto.getModuleAction()); + messageDto.setModuleAction(dto.getModuleAction2()); + messageDto.setSenderName(dto.getCreateName()); + messageDto.setSenderSid(dto.getUserSid()); + String msgSid = saveOrUpdateMessage(messageDto).getData(); + String msgTypeSid = messageDto.getMsgTypeSid(); + // 2、保存至消息列表 + // 使用多线程保存 + List> futures = new ArrayList>(); + ExecutorService executor = Executors.newFixedThreadPool(4); + for (int i = 0; i < list.size(); i++) { + int finalI = i; + Future f = executor.submit(new Runnable() { + @Override + public void run() { + try { + System.out.println("run start-----------------" + System.currentTimeMillis() + ":" + Thread.currentThread().getName()); + MessageListDto messageList = new MessageListDto(); + messageList.setMsgSid(msgSid); + messageList.setRDelStatus(0); + messageList.setSDelStatus(0); + messageList.setReceiverSid(list.get(finalI)); + messageListService.saveOrUpdateDto(messageList); + System.out.println("run end-----------------" + System.currentTimeMillis() + ":" + Thread.currentThread().getName()); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + futures.add(f); + } + executor.shutdown(); + return rb.success().setData(msgSid); + } + + public ResultBean saveOrUpdateMessage(MessageDto dto) { + if (StringUtils.isBlank(dto.getSid())) { // 新增 + Message message = new Message(); + BeanUtil.copyProperties(dto, message, "sid"); + if (StringUtils.isNotBlank(dto.getTaskId())) { + message.setSid(dto.getTaskId()); + } else { + message.setSid(UUID.randomUUID().toString()); + } + Boolean flag = save(message); + if (flag) { + return new ResultBean().success().setMsg("保存成功").setData(message.getSid()); + } else { + return new ResultBean().fail().setMsg("保存失败"); + } + } else { // 修改 + Message message = fetchBySid(dto.getSid()); + BeanUtil.copyProperties(dto, message); + Boolean flag = updateById(message); + if (flag) { + return new ResultBean().success().setMsg("修改成功").setData(message.getSid()); + } else { + return new ResultBean().fail().setMsg("修改失败"); + } + } + } + + public ResultBean pushMessageShare(MessageFlowableQueryForCC query) { + ResultBean rb = ResultBean.fireFail(); + MessageFlowVo ufVo = query.getUfVo(); + String procDefId = ufVo.getProcDefId(); + String moduleName = query.getModuleName(); + String msgContent = query.getMsgContent(); + String msgTitle = query.getMsgTitle(); + String applicationName = query.getApplicationName(); + String nextNodeUserSids = query.getUserSids(); + List receiveSidList = Arrays.asList(nextNodeUserSids.split(",")); + MessageFlowableDto messageFlowableDto = new MessageFlowableDto(); + MessageJsonDto messageJsonDto = new MessageJsonDto(); + BeanUtil.copyProperties(ufVo, messageJsonDto); + //查询流程审批的页面操作地址组装json的参数 + //根据taskDef和移动端标识 + //PC取前端页面 + ResultBean selectUrlByPCKey = sysProUrlFeign.selectUrlByKey(procDefId, ufVo.getTaskDefKey(), "2", "1"); + SysProUrlVo sysProUrlPCVo = selectUrlByPCKey.getData(); + messageFlowableDto.setModuleAction2(sysProUrlPCVo.getUrl()); + messageJsonDto.setTaskName(ufVo.getNodeState()); + messageJsonDto.setProcInsId(ufVo.getProcInsId()); + messageJsonDto.setDeployId(procDefId); + messageJsonDto.setProcDefId(procDefId); + messageFlowableDto.setJson(messageJsonDto); + messageFlowableDto.setList(receiveSidList); + messageFlowableDto.setModuleName(moduleName); + messageFlowableDto.setMsgContent(msgContent); + messageFlowableDto.setMsgTitle(msgTitle); + messageFlowableDto.setCreateName(applicationName); + messageFlowableDto.setTaskId(ufVo.getTaskId()); + messageFlowableDto.setUserSid(query.getUserSid()); + ResultBean stringResultBean = getMessageShare(messageFlowableDto); + String msgSid = stringResultBean.getData(); + return rb.success().setMsg(msgSid); + } + + private ResultBean getMessageShare(MessageFlowableDto dto) { + ResultBean rb = ResultBean.fireFail(); + String msgTitle = dto.getMsgTitle(); + String msgContent = dto.getMsgContent(); + List list = dto.getList(); + // 1、保存消息体 + MessageDto messageDto = new MessageDto(); + List messageBean = messageTypeService.selectMsgTypeList("0003"); + messageBean.removeAll(Collections.singleton(null)); + if (!messageBean.isEmpty()) { + for (MessageTypeVo message : messageBean) { + if (message.getMsgType().contains("分享")) { + messageDto.setMsgTypeSid(message.getMsgTypeSid()); + messageDto.setMsgType(message.getMsgType()); + } + } + } + messageDto.setSenderSid(dto.getUserSid()); + messageDto.setMsgTitle(msgTitle); + messageDto.setMsgContent(msgContent); + messageDto.setMsgSource("分享"); + messageDto.setApp_type(dto.getApp_type()); + messageDto.setModuleSid(dto.getModuleSid()); + messageDto.setBusinessSid(dto.getBusinessSid()); + //将json与appMap中的参数融合 + Map jsonMap = BeanUtil.beanToMap(dto.getJson()); + messageDto.setArgs_json(JSONObject.toJSONString(jsonMap)); + messageDto.setMsgTargetUri(dto.getModuleAction()); + messageDto.setModuleAction(dto.getModuleAction2()); + messageDto.setSenderName(dto.getCreateName()); + String msgSid = saveOrUpdateMessage(messageDto).getData(); + String msgTypeSid = messageDto.getMsgTypeSid(); + // 2、保存至消息列表 + // 使用多线程保存 + List> futures = new ArrayList>(); + ExecutorService executor = Executors.newFixedThreadPool(4); + for (int i = 0; i < list.size(); i++) { + int finalI = i; + Future f = executor.submit(new Runnable() { + @Override + public void run() { + try { + System.out.println("run start-----------------" + System.currentTimeMillis() + ":" + Thread.currentThread().getName()); + MessageListDto messageList = new MessageListDto(); + messageList.setMsgSid(msgSid); + messageList.setRDelStatus(0); + messageList.setSDelStatus(0); + messageList.setReceiverSid(list.get(finalI)); + messageListService.saveOrUpdateDto(messageList); + System.out.println("run end-----------------" + System.currentTimeMillis() + ":" + Thread.currentThread().getName()); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + futures.add(f); + } + executor.shutdown(); + return rb.success().setData(msgSid); + } } diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagelist/MessageListMapper.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagelist/MessageListMapper.java new file mode 100644 index 00000000..8d5f5126 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagelist/MessageListMapper.java @@ -0,0 +1,15 @@ +package com.yxt.supervise.message.biz.messagelist; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yxt.supervise.message.api.messagelist.MessageList; +import org.apache.ibatis.annotations.Mapper; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Mapper +public interface MessageListMapper extends BaseMapper { + int selectListCount(String msgTypeSid); +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagelist/MessageListMapper.xml b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagelist/MessageListMapper.xml new file mode 100644 index 00000000..f019ce02 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagelist/MessageListMapper.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagelist/MessageListService.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagelist/MessageListService.java new file mode 100644 index 00000000..1e07ab96 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagelist/MessageListService.java @@ -0,0 +1,25 @@ +package com.yxt.supervise.message.biz.messagelist; + +import com.yxt.common.base.service.MybatisBaseService; +import com.yxt.supervise.message.api.messagelist.MessageList; +import com.yxt.supervise.message.api.messagelist.MessageListDto; +import org.springframework.stereotype.Service; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Service +public class MessageListService extends MybatisBaseService { + + public void saveOrUpdateDto(MessageListDto dto) { + MessageList entity = new MessageList(); + dto.fillEntity(entity); + this.saveOrUpdate(entity); + } + + public int selectListCount(String msgTypeSid) { + return baseMapper.selectListCount(msgTypeSid); + } +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagetype/MessageTypeMapper.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagetype/MessageTypeMapper.java new file mode 100644 index 00000000..c0f3e3c4 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagetype/MessageTypeMapper.java @@ -0,0 +1,18 @@ +package com.yxt.supervise.message.biz.messagetype; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yxt.supervise.message.api.messagetype.MessageType; +import com.yxt.supervise.message.api.messagetype.MessageTypeVo; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Mapper +public interface MessageTypeMapper extends BaseMapper { + List selectMsgTypeList(String identifier); +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagetype/MessageTypeMapper.xml b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagetype/MessageTypeMapper.xml new file mode 100644 index 00000000..a023af38 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagetype/MessageTypeMapper.xml @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagetype/MessageTypeService.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagetype/MessageTypeService.java new file mode 100644 index 00000000..63240330 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/biz/messagetype/MessageTypeService.java @@ -0,0 +1,39 @@ +package com.yxt.supervise.message.biz.messagetype; + +import com.yxt.common.base.service.MybatisBaseService; +import com.yxt.supervise.message.api.messagetype.MessageType; +import com.yxt.supervise.message.api.messagetype.MessageTypeVo; +import com.yxt.supervise.message.biz.messagelist.MessageListService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Service +public class MessageTypeService extends MybatisBaseService { + + @Autowired + private MessageListService messageListService; + + public List selectMsgTypeList(String identifier) { + List messageWxTypeVoList = baseMapper.selectMsgTypeList(identifier); + for (MessageTypeVo msgType : messageWxTypeVoList) { + boolean isHave = false; + String msgTypeSid = msgType.getMsgTypeSid(); + //查询该消息类别下是否包含未读的消息 + int count = messageListService.selectListCount(msgTypeSid); + if (count > 0) { + isHave = true; + msgType.setIsHave(isHave); + } else { + msgType.setIsHave(isHave); + } + } + return messageWxTypeVoList; + } +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/feign/flowable/SysProUrlFeign.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/feign/flowable/SysProUrlFeign.java new file mode 100644 index 00000000..4adeb97a --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/feign/flowable/SysProUrlFeign.java @@ -0,0 +1,28 @@ +package com.yxt.supervise.message.feign.flowable; + +import com.yxt.common.core.result.ResultBean; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@FeignClient( + contextId = "supervise-flowable-SysProUrlFeign", + name = "supervise-flowable", + path = "v1/flowable/proUrl", + fallback = SysProUrlFeignFallBack.class) +public interface SysProUrlFeign { + + @ApiOperation("查询流程与业务表单的url") + @GetMapping("/selectUrlByKeyWithTerminal") + ResultBean selectUrlByKey(@ApiParam(value = "流程定义id") @RequestParam(value = "procDefId") String procDefId, + @ApiParam(value = "节点id") @RequestParam(value = "taskDefKey") String taskDefKey, + @ApiParam(value = "类型:1办理,2详情") @RequestParam(value = "type") String type + , @ApiParam(value = "终端:1pc,2移动") @RequestParam(value = "terminal") String terminal); +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/feign/flowable/SysProUrlFeignFallBack.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/feign/flowable/SysProUrlFeignFallBack.java new file mode 100644 index 00000000..097883a6 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/feign/flowable/SysProUrlFeignFallBack.java @@ -0,0 +1,12 @@ +package com.yxt.supervise.message.feign.flowable; + +import org.springframework.stereotype.Component; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Component +public class SysProUrlFeignFallBack { +} diff --git a/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/feign/flowable/SysProUrlVo.java b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/feign/flowable/SysProUrlVo.java new file mode 100644 index 00000000..c11ff716 --- /dev/null +++ b/yxt_supervise/supervise-message/supervise-message-biz/src/main/java/com/yxt/supervise/message/feign/flowable/SysProUrlVo.java @@ -0,0 +1,52 @@ +package com.yxt.supervise.message.feign.flowable; + +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class SysProUrlVo { + + /** + * 表单主键 + */ + private String url; + + /** + * 类型办理或者详情 + */ + private String type; + + /** + * 终端:pc/mobile + */ + private String terminal; + /** + * 表单id + */ + private String formId; + /** + * 名称 + */ + private String title; + + /** + * 流程定义id + */ + private String proc_def_id; + + /** + * 节点id + */ + private String taskDefKey; + + /** + * app插件名称(模块名称) + */ + private String modulePluginName; + + +} diff --git a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowcc.java b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowcc.java new file mode 100644 index 00000000..6b26182d --- /dev/null +++ b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowcc.java @@ -0,0 +1,25 @@ +package com.yxt.supervise.system.sysflowcc; + +import com.yxt.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class SysFlowcc extends BaseEntity { + + + private static final long serialVersionUID = -1073201441501781817L; + @ApiModelProperty("流程key") + private String flowKey; // 流程key + @ApiModelProperty("流程名称") + private String flowName; // 流程名称 + @ApiModelProperty("角色sid") + private String roleSid; // 角色sid + @ApiModelProperty("角色名称") + private String roleName; // 角色名称 +} diff --git a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccMapper.java b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccMapper.java new file mode 100644 index 00000000..6c9adbeb --- /dev/null +++ b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccMapper.java @@ -0,0 +1,16 @@ +package com.yxt.supervise.system.sysflowcc; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Mapper +public interface SysFlowccMapper extends BaseMapper { + @Select("select * from sys_flowcc where flowKey = #{flowKey}") + SysFlowccVo selectByFlowKey(String modelId); +} diff --git a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccMapper.xml b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccMapper.xml new file mode 100644 index 00000000..0dcfc4cd --- /dev/null +++ b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccMapper.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccRest.java b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccRest.java new file mode 100644 index 00000000..d8f14cea --- /dev/null +++ b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccRest.java @@ -0,0 +1,26 @@ +package com.yxt.supervise.system.sysflowcc; + +import com.yxt.common.core.result.ResultBean; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@RestController +@RequestMapping("v1/sysflowcc") +public class SysFlowccRest { + + @Autowired + private SysFlowccService sysFlowccService; + @ApiOperation("根据流程的id查询抄送的角色") + @PostMapping("/getRoleSidByModelId/{modelId}") + public ResultBean getRoleSidByModelId(@PathVariable("modelId") String modelId){ + return sysFlowccService.getRoleSidByModelId(modelId); + } +} diff --git a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccService.java b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccService.java new file mode 100644 index 00000000..93ccfb50 --- /dev/null +++ b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccService.java @@ -0,0 +1,19 @@ +package com.yxt.supervise.system.sysflowcc; + +import com.yxt.common.base.service.MybatisBaseService; +import com.yxt.common.core.result.ResultBean; +import org.springframework.stereotype.Service; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Service +public class SysFlowccService extends MybatisBaseService { + public ResultBean getRoleSidByModelId(String modelId) { + ResultBean rb = ResultBean.fireFail(); + SysFlowccVo sysFlowccVo = baseMapper.selectByFlowKey(modelId); + return rb.success().setData(sysFlowccVo); + } +} diff --git a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccVo.java b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccVo.java new file mode 100644 index 00000000..67943744 --- /dev/null +++ b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysflowcc/SysFlowccVo.java @@ -0,0 +1,24 @@ +package com.yxt.supervise.system.sysflowcc; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class SysFlowccVo { + + private String sid; // sid + + @ApiModelProperty("流程key") + private String flowKey; // 流程key + @ApiModelProperty("流程名称") + private String flowName; // 流程名称 + @ApiModelProperty("角色sid") + private String roleSid; // 角色sid + @ApiModelProperty("角色名称") + private String roleName; // 角色名称 +} diff --git a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserMapper.java b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserMapper.java index e5401315..77c1a190 100644 --- a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserMapper.java +++ b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserMapper.java @@ -185,4 +185,6 @@ public interface SysUserMapper extends BaseMapper { List getUserOrgBySid(@Param("sid")String sid); SysUserVo getUserByUserSid(String sid); + + List getUserListAll(); } \ No newline at end of file diff --git a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserMapper.xml b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserMapper.xml index 6b381d22..c36499ad 100644 --- a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserMapper.xml +++ b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserMapper.xml @@ -402,4 +402,10 @@ left join sys_staffinfo si on si.sid = su.staffSid where su.sid = #{sid} + + \ No newline at end of file diff --git a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserRest.java b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserRest.java index 6406fb23..8c39e125 100644 --- a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserRest.java +++ b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserRest.java @@ -22,6 +22,7 @@ import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import com.yxt.supervise.system.sysuser.app.AppUserOrgInfoVo; import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.openfeign.SpringQueryMap; @@ -771,4 +772,15 @@ public class SysUserRest implements SysUserFeign { ResultBean getUserByUserSid(@RequestParam("sid")String sid){ return sysUserService.getUserByUserSid(sid); } + @ApiOperation(value = "根据多个角色sid以及项目sid获取用户") + @PostMapping(value = "/getUserByRoles") + public ResultBean> getUserByRoles(UserByRolesAndProQuery userQuery) { + return sysUserService.getUserByRoles(userQuery); + } + + @ApiOperation(value = "所有人员") + @PostMapping(value = "/getUserListAll") + ResultBean> getUserListAll(){ + return sysUserService.getUserListAll(); + } } diff --git a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserService.java b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserService.java index c414f6a0..5ab68771 100644 --- a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserService.java +++ b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserService.java @@ -1597,7 +1597,7 @@ public class SysUserService extends MybatisBaseService { List finalStringList = stringList; sysUserVoList = sysUserVoList.stream().filter(v-> finalStringList.contains(v.getSid())).collect(Collectors.toList()); }else{ - return rb.setMsg("请设置项目相关人员"); + return rb; } return rb.success().setData(sysUserVoList); } @@ -1637,4 +1637,32 @@ public class SysUserService extends MybatisBaseService { SysUserVo sysUserVo = baseMapper.getUserByUserSid(sid); return rb.success().setData(sysUserVo); } + + public ResultBean> getUserByRoles(UserByRolesAndProQuery userQuery) { + ResultBean> rb = ResultBean.fireFail(); + List roleSids = userQuery.getRoleSids(); + String projectSid = userQuery.getProjectSid(); + List list = new ArrayList<>(); + for (String s : roleSids) { + UserQuery uq = new UserQuery(); + uq.setRoleSid(s); + uq.setProjectSid(projectSid); + ResultBean> userByRole = getUserByRoleAndProject(uq); + if (userByRole.getSuccess()) { + List data = userByRole.getData(); + data.forEach(f -> { + list.add(f); + }); + } else { + log.error("角色获取人员--s:" + userByRole.getMsg()); + } + } + return rb.success().setData(list); + } + + public ResultBean> getUserListAll() { + ResultBean> rb = ResultBean.fireFail(); + List sysUserStaffVoList = baseMapper.getUserListAll(); + return rb.success().setData(sysUserStaffVoList); + } } \ No newline at end of file diff --git a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserStaffVo.java b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserStaffVo.java new file mode 100644 index 00000000..b2f37732 --- /dev/null +++ b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/SysUserStaffVo.java @@ -0,0 +1,20 @@ +package com.yxt.supervise.system.sysuser; + +import com.yxt.common.core.vo.Vo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class SysUserStaffVo implements Vo { + private static final long serialVersionUID = 8585964732292394355L; + + @ApiModelProperty("用户sid") + private String userSid; + @ApiModelProperty("人员") + private String staffName; +} diff --git a/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/UserByRolesAndProQuery.java b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/UserByRolesAndProQuery.java new file mode 100644 index 00000000..efbfde7f --- /dev/null +++ b/yxt_supervise/supervise-system/supervise-system-biz/src/main/java/com/yxt/supervise/system/sysuser/UserByRolesAndProQuery.java @@ -0,0 +1,20 @@ +package com.yxt.supervise.system.sysuser; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class UserByRolesAndProQuery { + + @ApiModelProperty(value = "角色sid必传项") + private List roleSids; + @ApiModelProperty(value = "项目sid") + private String projectSid; +} diff --git a/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/api/flowable/FlowDelegateQuery.java b/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/api/flowable/FlowDelegateQuery.java new file mode 100644 index 00000000..dcec82eb --- /dev/null +++ b/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/api/flowable/FlowDelegateQuery.java @@ -0,0 +1,24 @@ +package com.yxt.supervise.enterprisecentre.api.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Data +public class FlowDelegateQuery { + + @ApiModelProperty + private String userSid; + @ApiModelProperty("流程实例id") + private String instanceId; + @ApiModelProperty("任务Id") + private String taskId; + @ApiModelProperty("审批人sid") + private String assignee; + @ApiModelProperty("填写意见") + private String views; +} diff --git a/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/feign/FlowFeign.java b/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/feign/FlowFeign.java new file mode 100644 index 00000000..de0615ea --- /dev/null +++ b/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/feign/FlowFeign.java @@ -0,0 +1,37 @@ +package com.yxt.supervise.enterprisecentre.biz.feign; + +import com.yxt.common.core.result.ResultBean; +import com.yxt.supervise.enterprisecentre.api.flowable.BusinessVariables; +import com.yxt.supervise.enterprisecentre.api.flowable.FlowDelegateQuery; +import com.yxt.supervise.enterprisecentre.api.flowable.UpdateFlowFieldVo; +import com.yxt.supervise.enterprisecentre.biz.feign.fallback.FlowFallback; +import com.yxt.supervise.enterprisecentre.biz.feign.fallback.FlowableFallback; +import io.swagger.annotations.ApiOperation; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.PostMapping; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ + +@FeignClient( + contextId = "supervise-flowable-Flow", + name = "supervise-flowable", + path = "v2/flow", + fallback = FlowFallback.class) +public interface FlowFeign { + + @ApiOperation(value = "启动流程") + @PostMapping(value = "/startProcess") + public ResultBean startProcess(BusinessVariables bv); + + @ApiOperation(value = "办理") + @PostMapping(value = "/handleProsess") + public ResultBean handleProsess(BusinessVariables bv); + + @ApiOperation(value = "加签") + @PostMapping(value = "/delegate") + public ResultBean delegate(FlowDelegateQuery flowDelegateQuery); +} diff --git a/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/feign/fallback/FlowFallback.java b/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/feign/fallback/FlowFallback.java new file mode 100644 index 00000000..63157ef9 --- /dev/null +++ b/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/feign/fallback/FlowFallback.java @@ -0,0 +1,12 @@ +package com.yxt.supervise.enterprisecentre.biz.feign.fallback; + +import org.springframework.stereotype.Component; + +/** + * @description: + * @author: dimengzhe + * @date: 2023/11/30 + **/ +@Component +public class FlowFallback { +} diff --git a/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/paymentapply/PaymentApplyRest.java b/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/paymentapply/PaymentApplyRest.java index 71b7e7bc..d29ed5bd 100644 --- a/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/paymentapply/PaymentApplyRest.java +++ b/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/paymentapply/PaymentApplyRest.java @@ -5,6 +5,7 @@ import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import com.yxt.supervise.enterprisecentre.api.flowable.BusinessVariables; +import com.yxt.supervise.enterprisecentre.api.flowable.FlowDelegateQuery; import com.yxt.supervise.enterprisecentre.api.flowable.GetNodeQuery; import com.yxt.supervise.enterprisecentre.api.flowable.GetNodeVo; import com.yxt.supervise.enterprisecentre.api.paymentapply.*; @@ -100,5 +101,11 @@ public class PaymentApplyRest { return paymentApplyService.breakProcess(query); } + @ApiOperation(value = "加签") + @PostMapping(value = "/delegate") + public ResultBean delegate(FlowDelegateQuery query) { + return paymentApplyService.delegate(query); + } + } diff --git a/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/paymentapply/PaymentApplyService.java b/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/paymentapply/PaymentApplyService.java index f4246212..c4d1553f 100644 --- a/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/paymentapply/PaymentApplyService.java +++ b/yxt_supervise/yxt-supervise-enterprisecentre/yxt-supervise-enterprisecentre-biz/src/main/java/com/yxt/supervise/enterprisecentre/biz/paymentapply/PaymentApplyService.java @@ -16,6 +16,7 @@ import com.yxt.supervise.enterprisecentre.api.paymentapply.*; import com.yxt.supervise.enterprisecentre.api.paymentapply.flowable.PaymentApplyTaskQuery; import com.yxt.supervise.enterprisecentre.api.paymentapply.flowable.SubmitPaymentApplyDto; import com.yxt.supervise.enterprisecentre.api.sealrecord.SysUserVo; +import com.yxt.supervise.enterprisecentre.biz.feign.FlowFeign; import com.yxt.supervise.enterprisecentre.biz.feign.FlowTaskFeign; import com.yxt.supervise.enterprisecentre.biz.feign.FlowableFeign; import com.yxt.supervise.enterprisecentre.biz.feign.SysUserFeign; @@ -41,6 +42,8 @@ public class PaymentApplyService extends MybatisBaseService saveorUpdatePayment(PaymentApplyDto dto) { ResultBean rb = ResultBean.fireFail(); @@ -160,7 +163,7 @@ public class PaymentApplyService extends MybatisBaseService voResultBean = flowableFeign.startProcess(bv); + ResultBean voResultBean = flowFeign.startProcess(bv); if (!voResultBean.getSuccess()) { return rb.setMsg(voResultBean.getMsg()); } @@ -232,7 +235,7 @@ public class PaymentApplyService extends MybatisBaseService resultBean = flowableFeign.handleProsess(bv); + ResultBean resultBean = flowFeign.handleProsess(bv); if (!resultBean.getSuccess()) { return rb.setMsg(resultBean.getMsg()); } @@ -364,4 +367,12 @@ public class PaymentApplyService extends MybatisBaseService saveorUpdateRelease(QualityReleaseDto dto) { ResultBean rb = ResultBean.fireFail(); @@ -137,7 +140,7 @@ public class QualityReleaseService extends MybatisBaseService voResultBean = flowableFeign.startProcess(bv); + ResultBean voResultBean = flowFeign.startProcess(bv); if (!voResultBean.getSuccess()) { return rb.setMsg(voResultBean.getMsg()); } @@ -210,7 +213,7 @@ public class QualityReleaseService extends MybatisBaseService resultBean = flowableFeign.handleProsess(bv); + ResultBean resultBean = flowFeign.handleProsess(bv); if (!resultBean.getSuccess()) { return rb.setMsg(resultBean.getMsg()); } @@ -342,4 +345,12 @@ public class QualityReleaseService extends MybatisBaseService createQueryWrapper(SealRecordQuery query) { // todo: 这里根据具体业务调整查询条件 // 多字段Like示例:qw.and(wrapper -> wrapper.like("name", query.getName()).or().like("remark", query.getName())); @@ -362,7 +365,7 @@ public class SealRecordService extends MybatisBaseService resultBean1 = flowableFeign.startProcess(bv); + ResultBean resultBean1 = flowFeign.startProcess(bv); if(!resultBean1.getSuccess()){ return resultBean1; } @@ -491,7 +494,7 @@ public class SealRecordService extends MybatisBaseService resultBean = flowableFeign.handleProsess(bv); + ResultBean resultBean = flowFeign.handleProsess(bv); if (!resultBean.getSuccess()) { return rb.setMsg(resultBean.getMsg()); } @@ -640,4 +643,11 @@ public class SealRecordService extends MybatisBaseService voResultBean = flowableFeign.startProcess(bv); + ResultBean voResultBean = flowFeign.startProcess(bv); if (!voResultBean.getSuccess()) { return rb.setMsg(voResultBean.getMsg()); } @@ -184,7 +189,7 @@ public class WarehousingPledgeService extends MybatisBaseService resultBean = flowableFeign.handleProsess(bv); + ResultBean resultBean = flowFeign.handleProsess(bv); if (!resultBean.getSuccess()) { return rb.setMsg(resultBean.getMsg()); } @@ -354,4 +359,12 @@ public class WarehousingPledgeService extends MybatisBaseService