From 1cbd8db4fd9ffa5023fd6851c0c2f55f8dedcfd8 Mon Sep 17 00:00:00 2001 From: dimengzhe Date: Thu, 9 Jan 2025 10:25:43 +0800 Subject: [PATCH] =?UTF-8?q?yxt=5Foa=E4=B8=AD=E6=B5=81=E7=A8=8B=E6=8F=90?= =?UTF-8?q?=E5=8F=96=E5=85=AC=E5=85=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flowable/api/flow/UpdateFlowFieldVo.java | 9 + .../anrui/flowable/biz/flow2/FlowService.java | 5 +- .../java/com/yxt/anrui/oa/api/OaFormRest.java | 61 +++- .../com/yxt/anrui/oa/api/OaMendApplyRest.java | 56 --- .../com/yxt/anrui/oa/biz/oaform/OaForm.java | 5 + .../yxt/anrui/oa/biz/oaform/OaFormMapper.java | 2 + .../yxt/anrui/oa/biz/oaform/OaFormMapper.xml | 8 + .../anrui/oa/biz/oaform/OaFormService.java | 297 +++++++++++++++- .../flowable/CompleteDto.java} | 14 +- .../flowable/DelegateQuery.java} | 16 +- .../oa/biz/oaform/flowable/NodeQuery.java | 21 ++ .../flowable/NodeVo.java} | 14 +- .../flowable/TaskQuery.java} | 14 +- .../oa/biz/oamendapply/OaMendApplyMapper.java | 11 +- .../oa/biz/oamendapply/OaMendApplyMapper.xml | 33 +- .../biz/oamendapply/OaMendApplyService.java | 321 +----------------- .../{flowable => }/SubmitOaMendApplyDto.java | 2 +- .../flowable/OaMendApplyNodeQuery.java | 25 -- .../flowable/flow/UpdateFlowFieldVo.java | 9 + 19 files changed, 457 insertions(+), 466 deletions(-) rename yxt-oa/src/main/java/com/yxt/anrui/oa/biz/{oamendapply/flowable/OaMendApplyCompleteDto.java => oaform/flowable/CompleteDto.java} (78%) rename yxt-oa/src/main/java/com/yxt/anrui/oa/biz/{oamendapply/flowable/OaMendApplyDelegateQuery.java => oaform/flowable/DelegateQuery.java} (67%) create mode 100644 yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/NodeQuery.java rename yxt-oa/src/main/java/com/yxt/anrui/oa/biz/{oamendapply/flowable/OaMendApplyNodeVo.java => oaform/flowable/NodeVo.java} (60%) rename yxt-oa/src/main/java/com/yxt/anrui/oa/biz/{oamendapply/flowable/OaMendApplyTaskQuery.java => oaform/flowable/TaskQuery.java} (75%) rename yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/{flowable => }/SubmitOaMendApplyDto.java (92%) delete mode 100644 yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyNodeQuery.java diff --git a/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/UpdateFlowFieldVo.java b/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/UpdateFlowFieldVo.java index fbb5b314b3..5ffbeb7b32 100644 --- a/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/UpdateFlowFieldVo.java +++ b/anrui-flowable/anrui-flowable-api/src/main/java/com/yxt/anrui/flowable/api/flow/UpdateFlowFieldVo.java @@ -11,6 +11,7 @@ public class UpdateFlowFieldVo { private String taskDefKey; private String taskId; private String nextNodeUserSids; + private String name; public String getNextNodeUserSids() { return nextNodeUserSids; @@ -67,4 +68,12 @@ public class UpdateFlowFieldVo { public void setTaskId(String taskId) { this.taskId = taskId; } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } } diff --git a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java index d015406fb2..02340f0f7c 100644 --- a/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java +++ b/anrui-flowable/anrui-flowable-biz/src/main/java/com/yxt/anrui/flowable/biz/flow2/FlowService.java @@ -333,6 +333,7 @@ public class FlowService extends MybatisBaseService { updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); updateFlowFieldVo.setProcDefId(bv.getModelId()); updateFlowFieldVo.setSid(bv.getBusinessSid()); + updateFlowFieldVo.setName(processDefinition.getName()); return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); } } @@ -358,6 +359,7 @@ public class FlowService extends MybatisBaseService { updateFlowFieldVo.setTaskDefKey(vo.getTaskDefKey()); updateFlowFieldVo.setProcDefId(bv.getModelId()); updateFlowFieldVo.setSid(bv.getBusinessSid()); + updateFlowFieldVo.setName(processDefinition.getName()); return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); } } @@ -367,6 +369,7 @@ public class FlowService extends MybatisBaseService { updateFlowFieldVo.setTaskDefKey(task_def_key_); updateFlowFieldVo.setProcDefId(bv.getModelId()); updateFlowFieldVo.setSid(bv.getBusinessSid()); + updateFlowFieldVo.setName(processDefinition.getName()); return rb.success().setData(updateFlowFieldVo).setMsg("流程启动成功"); } @@ -762,7 +765,7 @@ public class FlowService extends MybatisBaseService { List uss = Arrays.asList(userSids.toString().split(",")); List uniqueList = new ArrayList(new HashSet(uss)); uniqueList.removeIf(taskinstUserSidList::contains); - String userSidss = String.join(",",uniqueList); + String userSidss = String.join(",", uniqueList); mfq.setUserSids(userSidss); // mfq.setUserSids(userSids.toString()); mfq.setOrgPath(createrOrgPath); diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaFormRest.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaFormRest.java index 5ce830ec53..19303283b7 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaFormRest.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaFormRest.java @@ -1,16 +1,20 @@ package com.yxt.anrui.oa.api; +import cn.hutool.core.bean.BeanUtil; import com.yxt.anrui.oa.biz.oaform.*; -import com.yxt.anrui.oa.biz.oahireapply.OaHireApplyDetailsVo; -import com.yxt.anrui.oa.biz.oamendapply.OaMendApplyQuery; -import com.yxt.anrui.oa.biz.oamendapply.OaMendApplyVo; +import com.yxt.anrui.oa.biz.oaform.flowable.*; +import com.yxt.anrui.oa.feign.flowable.flow.BusinessVariables; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; +import java.util.List; + /** * @description: 基础表单 * @author: dimengzhe @@ -51,5 +55,56 @@ public class OaFormRest { return rb.success(); } + @ApiOperation(value = "办理(同意)") + @PostMapping("/complete") + public ResultBean complete(@Valid @RequestBody CompleteDto query) { + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + return oaFormService.complete(bv); + } + + @ApiOperation(value = "获取上一个环节") + @GetMapping(value = "/getPreviousNodesForReject") + public ResultBean> getPreviousNodesForReject(@Valid @SpringQueryMap NodeQuery query) { + return oaFormService.getPreviousNodesForReject(query); + } + + @ApiOperation(value = "获取下一个环节") + @GetMapping(value = "/getNextNodesForSubmit") + public ResultBean> getNextNodesForSubmit(@Valid @SpringQueryMap NodeQuery query) { + return oaFormService.getNextNodesForSubmit(query); + } + + @ApiOperation(value = "驳回任务") + @PostMapping(value = "/reject") + public ResultBean reject(@Valid @RequestBody TaskQuery query) { + return oaFormService.reject(query); + } + + @ApiOperation(value = "撤回流程") + @PostMapping(value = "/revokeProcess") + public ResultBean revokeProcess(@Valid @RequestBody TaskQuery query) { + return oaFormService.revokeProcess(query); + } + + @ApiOperation(value = "终止任务") + @PostMapping(value = "/breakProcess") + public ResultBean breakProcess(@Valid @RequestBody TaskQuery query) { + return oaFormService.breakProcess(query); + } + + @ApiOperation(value = "加签") + @PostMapping(value = "/delegate") + public ResultBean delegate(@RequestBody DelegateQuery query) { + return oaFormService.delegate(query); + } + + @ApiOperation(value = "转办") + @PutMapping(value = "/assignTask") + @ResponseBody + public ResultBean assignTask(@RequestBody DelegateQuery query) { + return oaFormService.assignTask(query); + } + } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaMendApplyRest.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaMendApplyRest.java index 43d99ae768..784e8ad531 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaMendApplyRest.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/api/OaMendApplyRest.java @@ -25,22 +25,15 @@ *********************************************************/ package com.yxt.anrui.oa.api; -import cn.hutool.core.bean.BeanUtil; -import com.yxt.anrui.oa.biz.oaleaveapply.flowable.*; import com.yxt.anrui.oa.biz.oamendapply.*; -import com.yxt.anrui.oa.biz.oamendapply.flowable.*; -import com.yxt.anrui.oa.feign.flowable.flow.BusinessVariables; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.web.bind.annotation.*; -import java.util.List; - import javax.validation.Valid; /** @@ -108,54 +101,5 @@ public class OaMendApplyRest { return oaMendApplyService.submit(dto); } - @ApiOperation(value = "办理(同意)") - @PostMapping("/complete") - public ResultBean complete(@Valid @RequestBody OaLeaveApplyCompleteDto query) { - BusinessVariables bv = new BusinessVariables(); - BeanUtil.copyProperties(query, bv); - return oaMendApplyService.complete(bv); - } - - @ApiOperation(value = "获取上一个环节") - @GetMapping(value = "/getPreviousNodesForReject") - public ResultBean> getPreviousNodesForReject(@Valid @SpringQueryMap OaMendApplyNodeQuery query) { - return oaMendApplyService.getPreviousNodesForReject(query); - } - - @ApiOperation(value = "获取下一个环节") - @GetMapping(value = "/getNextNodesForSubmit") - public ResultBean> getNextNodesForSubmit(@Valid @SpringQueryMap OaMendApplyNodeQuery query) { - return oaMendApplyService.getNextNodesForSubmit(query); - } - - @ApiOperation(value = "驳回任务") - @PostMapping(value = "/reject") - public ResultBean reject(@Valid @RequestBody OaMendApplyTaskQuery query) { - return oaMendApplyService.reject(query); - } - @ApiOperation(value = "撤回流程") - @PostMapping(value = "/revokeProcess") - public ResultBean revokeProcess(@Valid @RequestBody OaMendApplyTaskQuery query) { - return oaMendApplyService.revokeProcess(query); - } - - @ApiOperation(value = "终止任务") - @PostMapping(value = "/breakProcess") - public ResultBean breakProcess(@Valid @RequestBody OaMendApplyTaskQuery query) { - return oaMendApplyService.breakProcess(query); - } - - @ApiOperation(value = "加签") - @PostMapping(value = "/delegate") - public ResultBean delegate(@RequestBody OaMendApplyDelegateQuery query) { - return oaMendApplyService.delegate(query); - } - - @ApiOperation(value = "转办") - @PutMapping(value = "/assignTask") - @ResponseBody - public ResultBean assignTask(@RequestBody OaMendApplyDelegateQuery query) { - return oaMendApplyService.assignTask(query); - } } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaForm.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaForm.java index d28fd76849..0b569adf52 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaForm.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaForm.java @@ -15,6 +15,11 @@ import java.util.Date; @Data public class OaForm extends BaseEntity { private static final long serialVersionUID = 2307297366703765992L; + @ApiModelProperty("表单类别-流程名称") + private String formType; + @ApiModelProperty("标题") + private String title; + @ApiModelProperty("单据编号") private String billNo; @ApiModelProperty("创建人") diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.java index ab50cfc7e6..0f63d0afb8 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.java @@ -21,4 +21,6 @@ public interface OaFormMapper extends BaseMapper { IPage selectPageVo(IPage page, @Param(Constants.WRAPPER) QueryWrapper qw); int updateFlowFiled(Map map); + + String selectNum(String billNo); } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.xml b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.xml index 54e3470fa6..4d868d102b 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.xml +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormMapper.xml @@ -31,4 +31,12 @@ WHERE sid = #{sid} + + \ No newline at end of file diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java index d756606afe..a3a5a8c7e9 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/OaFormService.java @@ -1,23 +1,41 @@ package com.yxt.anrui.oa.biz.oaform; import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; -import com.yxt.anrui.oa.biz.oahireapply.OaHireApplyDetailsVo; -import com.yxt.anrui.oa.biz.oaleaveapply.OaLeaveApply; -import com.yxt.anrui.oa.biz.oaleaveapply.OaLeaveApplyQuery; -import com.yxt.anrui.oa.biz.oaleaveapply.OaLeaveApplyVo; +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import com.yxt.anrui.oa.biz.oaform.flowable.DelegateQuery; +import com.yxt.anrui.oa.biz.oaform.flowable.NodeQuery; +import com.yxt.anrui.oa.biz.oaform.flowable.NodeVo; +import com.yxt.anrui.oa.biz.oaform.flowable.TaskQuery; +import com.yxt.anrui.oa.feign.flowable.flow.BusinessVariables; +import com.yxt.anrui.oa.feign.flowable.flow.FlowableFeign; import com.yxt.anrui.oa.feign.flowable.flow.UpdateFlowFieldVo; +import com.yxt.anrui.oa.feign.flowable.flow2.FlowDelegateQuery; +import com.yxt.anrui.oa.feign.flowable.flow2.FlowFeign; +import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskFeign; +import com.yxt.anrui.oa.feign.flowable.flowtask.FlowTaskVo; +import com.yxt.anrui.oa.feign.flowable.flowtask.LatestTaskVo; +import com.yxt.anrui.oa.feign.message.MessageFeign; +import com.yxt.anrui.oa.feign.message.MessageFlowVo; +import com.yxt.anrui.oa.feign.message.MessageFlowableQuery; +import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationFeign; +import com.yxt.anrui.oa.feign.portal.sysorganization.SysOrganizationVo; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.base.utils.StringUtils; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; +import org.apache.tomcat.util.threads.ThreadPoolExecutor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; -import java.util.Map; +import java.util.*; +import java.util.concurrent.*; +import java.util.stream.Collectors; /** * @description: @@ -26,6 +44,17 @@ import java.util.Map; **/ @Service public class OaFormService extends MybatisBaseService { + @Autowired + private SysOrganizationFeign sysOrganizationFeign; + @Autowired + private FlowFeign flowFeign; + @Autowired + private MessageFeign messageFeign; + @Autowired + private FlowTaskFeign flowTaskFeign; + @Autowired + private FlowableFeign flowableFeign; + public ResultBean saveOrUpdateForm(OaFormDto dto) { ResultBean rb = ResultBean.fireFail(); String sid = dto.getSid(); @@ -69,4 +98,262 @@ public class OaFormService extends MybatisBaseService { public int updateFlow(Map map) { return baseMapper.updateFlowFiled(map); } + + public ResultBean complete(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + String businessSid = bv.getBusinessSid(); + OaForm oaForm = fetchBySid(businessSid); + Map variables = new HashMap<>(); + //网关 + + Map appMap = new HashMap<>(); + appMap.put("sid", businessSid); + variables.put("app", appMap); + bv.setFormVariables(variables); + SysOrganizationVo deptVo = sysOrganizationFeign.fetchBySid(oaForm.getDeptSid()).getData(); + bv.setOrgSidPath(deptVo.getOrgSidPath()); + bv.setModelId(oaForm.getProcDefId()); + if (bv.getTaskId().equals(oaForm.getTaskId())) { + ResultBean resultBean = flowFeign.handleProsess(bv); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + UpdateFlowFieldVo ufVo = resultBean.getData(); + //更新oaform中的流程数据 + updateFlow(BeanUtil.beanToMap(ufVo)); + if ("Event_end".equals(resultBean.getData().getTaskDefKey())) { + + } else { + //极光推送 + oaForm = fetchBySid(businessSid); + //==================================添加线程 + try { + ThreadFactory namedThreadFactory = new ThreadFactoryBuilder() + .setNameFormat("demo-pool-%d").build(); + ExecutorService pool = new ThreadPoolExecutor(2, 100, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); + OaForm oaForms = oaForm; + Future future1 = pool.submit(() -> { + //极光推送 + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + ufVo.setProcDefId(oaForms.getProcDefId()); + ufVo.setProcInsId(oaForms.getProcInstId()); + messageFlowableQuery.setUfVo(messageFlowVo); + messageFlowableQuery.setAppMap(appMap); + messageFlowableQuery.setBusinessSid(businessSid); + messageFlowableQuery.setModuleName(oaForms.getFormType()); + messageFlowableQuery.setMsgContent(oaForms.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + messageFlowableQuery.setMsgTitle(oaForms.getFormType()); + messageFeign.pushMessage(messageFlowableQuery); + }); + } catch (Exception e) { + e.printStackTrace(); + } + //==================================添加线程 + } + return rb.success().setData(resultBean.getData()); + } else { + return rb.setMsg("操作失败!提交的数据不一致"); + } + } + + public ResultBean> getPreviousNodesForReject(NodeQuery query) { + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + //流程中的参数赋值、若有网关,则赋值网关中判断的字段。 + Map variables = new HashMap<>(); + //查询业务信息 + OaForm oaForm = fetchBySid(query.getBusinessSid()); + //网关 + + bv.setModelId(oaForm.getProcDefId()); + bv.setFormVariables(variables); + ResultBean>> resultBean = flowTaskFeign.getPreviousNodesForReject(bv); + //判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给getNodeVo + List voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), NodeVo.class)).collect(Collectors.toList()); + return rb.success().setData(voList); + } + + public ResultBean> getNextNodesForSubmit(NodeQuery query) { + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + //流程中的参数赋值、若有网关,则赋值网关中判断的字段。 + Map variables = new HashMap<>(); + //查询业务信息 + OaForm oaForm = fetchBySid(query.getBusinessSid()); + //网关 + + bv.setModelId(oaForm.getProcDefId()); + bv.setFormVariables(variables); + //======================================= + ResultBean>> resultBean = flowTaskFeign.getNextNodesForSubmit(bv); + //判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给getNodeVo + List voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), NodeVo.class)).collect(Collectors.toList()); + return rb.success().setData(voList); + } + + + public ResultBean reject(TaskQuery query) { + ResultBean rb = ResultBean.fireFail(); + String businessSid = query.getBusinessSid(); + OaForm oaForm = fetchBySid(businessSid); + if (oaForm == null) { + return rb.setMsg("该申请不存在"); + } + String businessTaskId = oaForm.getTaskId(); + if (StringUtils.isNotBlank(businessTaskId)) { + if (businessTaskId.equals(query.getTaskId())) { + if (StringUtils.isBlank(query.getComment())) { + return rb.setMsg("请填写意见"); + } + if (StringUtils.isBlank(query.getUserSid())) { + return rb.setMsg("参数错误:userSid"); + } + FlowTaskVo flowTaskVo = new FlowTaskVo(); + BeanUtil.copyProperties(query, flowTaskVo); + Map variables = new HashMap<>(); + Map appMap = new HashMap<>(); + appMap.put("sid", businessSid); + variables.put("app", appMap); + //网关 + + flowTaskVo.setValues(variables); + ResultBean resultBean = flowableFeign.taskReject(flowTaskVo); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + UpdateFlowFieldVo ufVo = resultBean.getData(); + updateFlow(BeanUtil.beanToMap(ufVo)); + //极光推送 + oaForm = fetchBySid(businessSid); + //==================================添加线程 + try { + ThreadFactory namedThreadFactory = new ThreadFactoryBuilder() + .setNameFormat("demo-pool-%d").build(); + ExecutorService pool = new ThreadPoolExecutor(2, 100, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); + OaForm oaForms = oaForm; + Future future1 = pool.submit(() -> { + //极光推送 + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + ufVo.setProcInsId(oaForms.getProcInstId()); + ufVo.setProcDefId(oaForms.getProcDefId()); + messageFlowableQuery.setUfVo(messageFlowVo); + messageFlowableQuery.setAppMap(appMap); + messageFlowableQuery.setBusinessSid(businessSid); + messageFlowableQuery.setModuleName(oaForms.getFormType()); + ResultBean> listResultBean = flowTaskFeign.getLatestTasks(oaForms.getProcInstId()); + String nextNodeUserSids = listResultBean.getData().get(0).getASSIGNEE_(); + List receiveSidList = Arrays.asList(nextNodeUserSids.split(",")); + if (receiveSidList.size() == 1 && receiveSidList.get(0).equals(oaForms.getCreateBySid())) { + messageFlowableQuery.setMsgContent("您提交的" + messageFlowableQuery.getModuleName() + "已被驳回,请重新提交"); + } else { + messageFlowableQuery.setMsgContent(oaForms.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + } + messageFlowableQuery.setMsgTitle(oaForms.getFormType()); + messageFeign.pushMessage(messageFlowableQuery); + }); + } catch (Exception e) { + e.printStackTrace(); + } + //==================================添加线程 + return rb.success(); + } + } + return rb.setMsg("操作失败!提交的数据不一致!"); + } + + public ResultBean revokeProcess(TaskQuery query) { + ResultBean rb = ResultBean.fireFail(); + if (StringUtils.isBlank(query.getUserSid())) { + return rb.setMsg("参数错误:userSid"); + } + OaForm oaForm = fetchBySid(query.getBusinessSid()); + String businessTaskId = oaForm.getTaskId(); + if (StringUtils.isNotBlank(businessTaskId)) { + if (businessTaskId.equals(query.getTaskId())) { + FlowTaskVo flowTaskVo = new FlowTaskVo(); + BeanUtil.copyProperties(query, flowTaskVo); + ResultBean resultBean = flowableFeign.revokeProcess(flowTaskVo); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + updateFlow(BeanUtil.beanToMap(resultBean.getData())); + return rb.success().setData(resultBean.getData()); + } + } + return rb.setMsg("操作失败,提交的数据不一致!"); + } + + public ResultBean breakProcess(TaskQuery query) { + ResultBean rb = ResultBean.fireFail(); + if (StringUtils.isBlank(query.getInstanceId())) { + return rb.setMsg("参数错误:instanceId"); + } + if (StringUtils.isBlank(query.getUserSid())) { + return rb.setMsg("参数错误:userSid"); + } + if (StringUtils.isBlank(query.getComment())) { + return rb.setMsg("请填写意见"); + } + OaForm oaForm = fetchBySid(query.getBusinessSid()); + String businessTaskId = oaForm.getTaskId(); + if (StringUtils.isNotBlank(businessTaskId)) { + if (query.getUserSid().equals(oaForm.getCreateBySid())) { + FlowTaskVo flowTaskVo = new FlowTaskVo(); + BeanUtil.copyProperties(query, flowTaskVo); + ResultBean resultBean = flowableFeign.breakProcess(flowTaskVo); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + updateFlow(BeanUtil.beanToMap(resultBean.getData())); + return rb.success().setData(resultBean.getData()); + } else { + if (businessTaskId.equals(query.getTaskId())) { + FlowTaskVo flowTaskVo = new FlowTaskVo(); + BeanUtil.copyProperties(query, flowTaskVo); + ResultBean resultBean = flowableFeign.breakProcess(flowTaskVo); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + updateFlow(BeanUtil.beanToMap(resultBean.getData())); + return rb.success().setData(resultBean.getData()); + } + } + } + return rb.setMsg("操作失败!提交的数据不一致!"); + } + + public ResultBean delegate(DelegateQuery query) { + ResultBean rb = ResultBean.fireFail(); + FlowDelegateQuery delegateQuery = new FlowDelegateQuery(); + BeanUtil.copyProperties(query, delegateQuery); + flowFeign.delegate(delegateQuery); + return rb.success(); + } + + public ResultBean assignTask(DelegateQuery query) { + ResultBean rb = ResultBean.fireFail(); + FlowDelegateQuery delegateQuery = new FlowDelegateQuery(); + BeanUtil.copyProperties(query, delegateQuery); + flowFeign.assignTask(delegateQuery); + return rb.success(); + } + + + public int updateFormType(OaForm oaForm) { + return baseMapper.updateById(oaForm); + } + + public String selectNum(String billNo){ + return baseMapper.selectNum(billNo); + } } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyCompleteDto.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/CompleteDto.java similarity index 78% rename from yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyCompleteDto.java rename to yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/CompleteDto.java index e054cda556..5726e04ab5 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyCompleteDto.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/CompleteDto.java @@ -1,4 +1,4 @@ -package com.yxt.anrui.oa.biz.oamendapply.flowable; +package com.yxt.anrui.oa.biz.oaform.flowable; import com.yxt.common.core.dto.Dto; import io.swagger.annotations.ApiModelProperty; @@ -7,14 +7,14 @@ import lombok.Data; import javax.validation.constraints.NotBlank; /** - * @Author dimengzhe - * @Date 2022/9/6 14:57 - * @Description - */ + * @description: + * @author: dimengzhe + * @date: 2025/1/9 + **/ @Data -public class OaMendApplyCompleteDto implements Dto { - private static final long serialVersionUID = 6378752532534735663L; +public class CompleteDto implements Dto { + private static final long serialVersionUID = -252752211700409269L; @ApiModelProperty(value = "用户sid") private String userSid; @ApiModelProperty(value = "节点id") diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyDelegateQuery.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/DelegateQuery.java similarity index 67% rename from yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyDelegateQuery.java rename to yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/DelegateQuery.java index d2f50cfc90..d21917f4b7 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyDelegateQuery.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/DelegateQuery.java @@ -1,19 +1,19 @@ -package com.yxt.anrui.oa.biz.oamendapply.flowable; +package com.yxt.anrui.oa.biz.oaform.flowable; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** - * @author Administrator - * @description - * @date 2023/9/28 9:28 - */ + * @description: + * @author: dimengzhe + * @date: 2025/1/9 + **/ @Data -public class OaMendApplyDelegateQuery { +public class DelegateQuery { + @ApiModelProperty private String userSid; @ApiModelProperty("流程实例id") -// @JsonProperty("procInsId") private String instanceId; @ApiModelProperty("任务Id") private String taskId; @@ -21,6 +21,4 @@ public class OaMendApplyDelegateQuery { private String assignee; @ApiModelProperty("填写意见") private String views; - - } diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/NodeQuery.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/NodeQuery.java new file mode 100644 index 0000000000..462e1d91ae --- /dev/null +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/NodeQuery.java @@ -0,0 +1,21 @@ +package com.yxt.anrui.oa.biz.oaform.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @description: + * @author: dimengzhe + * @date: 2025/1/9 + **/ +@Data +public class NodeQuery { + + @ApiModelProperty(value = "环节定义id") + @NotBlank(message = "参数错误:taskDefKey") + private String taskDefKey; + @ApiModelProperty(value = "业务sid") + private String businessSid; +} diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyNodeVo.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/NodeVo.java similarity index 60% rename from yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyNodeVo.java rename to yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/NodeVo.java index 333ab2962f..cb73bd9443 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyNodeVo.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/NodeVo.java @@ -1,19 +1,17 @@ -package com.yxt.anrui.oa.biz.oamendapply.flowable; +package com.yxt.anrui.oa.biz.oaform.flowable; -import com.yxt.common.core.vo.Vo; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** - * @Author dimengzhe - * @Date 2022/9/6 15:03 - * @Description - */ + * @description: + * @author: dimengzhe + * @date: 2025/1/9 + **/ @Data -public class OaMendApplyNodeVo implements Vo { - private static final long serialVersionUID = -833419512294877848L; +public class NodeVo { @ApiModelProperty(value = "节点名称") private String name; diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyTaskQuery.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/TaskQuery.java similarity index 75% rename from yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyTaskQuery.java rename to yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/TaskQuery.java index c5cec2647e..009df0cccc 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/flowable/OaMendApplyTaskQuery.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oaform/flowable/TaskQuery.java @@ -1,19 +1,17 @@ -package com.yxt.anrui.oa.biz.oamendapply.flowable; +package com.yxt.anrui.oa.biz.oaform.flowable; -import com.yxt.common.core.query.Query; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotBlank; /** - * @Author dimengzhe - * @Date 2022/9/6 15:06 - * @Description - */ + * @description: + * @author: dimengzhe + * @date: 2025/1/9 + **/ @Data -public class OaMendApplyTaskQuery implements Query { - private static final long serialVersionUID = 1288615499873178778L; +public class TaskQuery { /** * 终止、驳回、撤回 diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyMapper.java b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyMapper.java index 7611b61688..3aae790876 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyMapper.java +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyMapper.java @@ -31,6 +31,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; + import java.util.Map; /** @@ -49,15 +50,13 @@ import java.util.Map; @Mapper public interface OaMendApplyMapper extends BaseMapper { - IPage selectPageVo(IPage page, @Param(Constants.WRAPPER) Wrapper qw); + IPage selectPageVo(IPage page, @Param(Constants.WRAPPER) Wrapper qw); - int updateFlowFiled(Map map); + int selectBySid(String join); - int selectBySid(String join); - String selectNum(String billNo); - OaMendApplyDetailsVo fetchDetailsVoBySid(String sid); + OaMendApplyDetailsVo fetchDetailsVoBySid(String sid); - OaMendApplyInitVo init(String sid); + OaMendApplyInitVo init(String sid); } \ No newline at end of file diff --git a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyMapper.xml b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyMapper.xml index 63fbac9fa4..5336ba2aa3 100644 --- a/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyMapper.xml +++ b/yxt-oa/src/main/java/com/yxt/anrui/oa/biz/oamendapply/OaMendApplyMapper.xml @@ -26,37 +26,12 @@ - - UPDATE oa_mend_apply - SET nodeState=#{nodeState}, nodeId=#{taskDefKey} - - , finishTime = NOW() - - - , procDefId=#{procDefId} - - - , procInstId=#{procInsId} - - - , taskId=#{taskId} - - WHERE sid=#{sid} - - - -