From 28364d31074bac29ea05440d2b14f83076749eff Mon Sep 17 00:00:00 2001 From: dimengzhe <251008545@qq.com> Date: Mon, 4 Jul 2022 18:00:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=B9=E7=94=A8=E7=94=B3=E8=AF=B7=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/fincostapply/FinCostapplyMapper.java | 3 + .../biz/fincostapply/FinCostapplyMapper.xml | 16 ++ .../biz/fincostapply/FinCostapplyService.java | 231 +++++++++++++++++- 3 files changed, 243 insertions(+), 7 deletions(-) diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincostapply/FinCostapplyMapper.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincostapply/FinCostapplyMapper.java index 945bf8e282..e210787578 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincostapply/FinCostapplyMapper.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincostapply/FinCostapplyMapper.java @@ -37,6 +37,7 @@ import com.yxt.anrui.fin.api.fincostapply.FinCostapply; import com.yxt.anrui.fin.api.fincostapply.FinCostapplyVo; import java.util.List; +import java.util.Map; /** * Project: anrui-fin(财务)
@@ -74,4 +75,6 @@ public interface FinCostapplyMapper extends BaseMapper { * @return */ FinCostapplyDetailsVo fetchDetailsVoBySid(String sid); + + int updateFlowFiled(Map map); } \ No newline at end of file diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincostapply/FinCostapplyMapper.xml b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincostapply/FinCostapplyMapper.xml index 7f7160b332..05ee7d6f8e 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincostapply/FinCostapplyMapper.xml +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincostapply/FinCostapplyMapper.xml @@ -41,4 +41,20 @@ from fin_costapply fc where fc.sid = #{sid} + + + UPDATE fin_costapply + SET nodeState=#{nodeState} + , nodeId=#{taskDefKey} + + , procDefId=#{procDefId} + + + , procInstId=#{procInsId} + + + , taskId=#{taskId} + + WHERE sid = #{sid} + \ No newline at end of file diff --git a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincostapply/FinCostapplyService.java b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincostapply/FinCostapplyService.java index c9161b3ada..9c41d2d34a 100644 --- a/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincostapply/FinCostapplyService.java +++ b/anrui-fin/anrui-fin-biz/src/main/java/com/yxt/anrui/fin/biz/fincostapply/FinCostapplyService.java @@ -26,6 +26,7 @@ package com.yxt.anrui.fin.biz.fincostapply; 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.fin.api.fincostapply.*; @@ -33,16 +34,30 @@ import com.yxt.anrui.fin.api.fincostapply.flow.FinCostGetNodeQuery; import com.yxt.anrui.fin.api.fincostapply.flow.FinCostGetNodeVo; import com.yxt.anrui.fin.api.fincostapply.flow.FinCostTaskQuery; import com.yxt.anrui.fin.api.fincostapply.flow.SubmitFinCostDto; +import com.yxt.anrui.flowable.api.flow.FlowableFeign; +import com.yxt.anrui.flowable.api.flow.UpdateFlowFieldVo; +import com.yxt.anrui.flowable.api.flowtask.FlowTaskFeign; +import com.yxt.anrui.flowable.api.flowtask.FlowTaskVo; +import com.yxt.anrui.flowable.api.utils.ProcDefEnum; import com.yxt.anrui.flowable.sqloperationsymbol.BusinessVariables; +import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrg; +import com.yxt.anrui.portal.api.sysstafforg.SysStaffOrgFeign; +import com.yxt.anrui.portal.api.sysuser.SysUserFeign; +import com.yxt.anrui.portal.api.sysuser.SysUserVo; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; /** * Project: anrui-fin(财务)
@@ -60,6 +75,15 @@ import java.util.List; @Service public class FinCostapplyService extends MybatisBaseService { + @Autowired + private SysUserFeign sysUserFeign; + @Autowired + private SysStaffOrgFeign sysStaffOrgFeign; + @Autowired + private FlowableFeign flowableFeign; + @Autowired + private FlowTaskFeign flowTaskFeign; + public PagerVo listPageVo(PagerQuery pq) { FinCostapplyQuery query = pq.getParams(); QueryWrapper qw = new QueryWrapper<>(); @@ -125,9 +149,108 @@ public class FinCostapplyService extends MybatisBaseService userVoResultBean = sysUserFeign.fetchBySid(dto.getCreateBySid()); + if (!userVoResultBean.getSuccess()) { + return rb.setMsg(userVoResultBean.getMsg()); + } + //根据staffSid获取用户的组织全路径 + ResultBean staffOrgResultBean = sysStaffOrgFeign.getOrgByStaffSid(userVoResultBean.getData().getStaffSid()); + if (!staffOrgResultBean.getSuccess()) { + return rb.setMsg(staffOrgResultBean.getMsg()); + } + //用户的组织全路径 + String orgSidPath = staffOrgResultBean.getData().getOrgSidPath(); + FinCostapply finCostapply = fetchBySid(dto.getSid()); + int r = submitBusinessData(dto, finCostapply); + if (r == 3) { + return rb.setMsg("该申请不存在"); + } + if (r == 0) { + return rb.setMsg("操作失败!提交的数据不一致"); + } + //新增修改保存 + ResultBean resultBean = saveOrUpdateDto(dto); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + String businessSid = resultBean.getData(); + //创建BusinessVariables实体对象 + BusinessVariables bv = new BusinessVariables(); + //ToDo:流程中的参数赋值 + Map variables = BeanUtil.beanToMap(dto); + //用户的部门全路径sid + bv.setOrgSidPath(orgSidPath); + //业务sid + bv.setBusinessSid(businessSid); + //用户sid + bv.setUserSid(dto.getCreateBySid()); + bv.setFormVariables(variables); + //流程定义id + bv.setModelId(ProcDefEnum.FINCOSTAPPLY.getProDefId()); + if (r == 1) { + ResultBean voResultBean = flowableFeign.startProcess(bv); + if (!voResultBean.getSuccess()) { + return rb.setMsg(voResultBean.getMsg()); + } + UpdateFlowFieldVo ufVo = voResultBean.getData(); + updateFlowFiled(BeanUtil.beanToMap(ufVo)); + return voResultBean; + } + if (r == 2) { + // ToDo:驳回到发起人后再次提交 + if (StringUtils.isBlank(dto.getInstanceId())) { + return rb.setMsg("参数错误:instanceId"); + } + bv.setTaskId(finCostapply.getTaskId()); + bv.setTaskDefKey(finCostapply.getNodeId()); + bv.setComment(StringUtils.isNotBlank(dto.getComment()) ? dto.getComment() : "重新提交"); + bv.setInstanceId(dto.getInstanceId()); + return complete(bv); + } + return rb; + } + + /** + * 判断提交的流程是否被允许 + * + * @param dto + * @return + */ + private synchronized int submitBusinessData(SubmitFinCostDto dto, FinCostapply finCostapply) { + int r = 0; + if (StringUtils.isBlank(dto.getSid())) { + r = 1; + } else { + if (finCostapply != null) { + String businessTaskId = finCostapply.getTaskId(); + if (StringUtils.isBlank(businessTaskId) && StringUtils.isBlank(dto.getTaskId())) { + //新提交 + r = 1; + } else if (StringUtils.isNotBlank(businessTaskId) && businessTaskId.equals(dto.getTaskId())) { + //二次提交//只有数据一致的时候才能进行下一步 + r = 2; + } + } else { + r = 3; + } + + } + return r; + } + + /** + * 更新流程相关的状态 + * + * @param map + * @return + */ + private int updateFlowFiled(Map map) { + return baseMapper.updateFlowFiled(map); } + /** * 费用申请办理 * @@ -135,7 +258,22 @@ public class FinCostapplyService extends MybatisBaseService resultBean = flowableFeign.handleProsess(bv); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + updateFlowFiled(BeanUtil.beanToMap(resultBean.getData())); + //ToDo:出纳付款记录 + if ("Event_end".equals(resultBean.getData().getTaskDefKey())) { + + } + return rb.success().setData(resultBean.getData()); + } else { + return rb.setMsg("操作失败!提交的数据不一致"); + } } /** @@ -145,7 +283,14 @@ public class FinCostapplyService extends MybatisBaseService> getPreviousNodesForReject(FinCostGetNodeQuery query) { - return null; + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + bv.setModelId(ProcDefEnum.FINCOSTAPPLY.getProDefId()); + ResultBean>> resultBean = flowTaskFeign.getPreviousNodesForReject(bv); + //判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给getNodeVo + List voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), FinCostGetNodeVo.class)).collect(Collectors.toList()); + return rb.success().setData(voList); } /** @@ -155,7 +300,14 @@ public class FinCostapplyService extends MybatisBaseService> getNextNodesForSubmit(FinCostGetNodeQuery query) { - return null; + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + bv.setModelId(ProcDefEnum.FINCOSTAPPLY.getProDefId()); + ResultBean>> resultBean = flowTaskFeign.getNextNodesForSubmit(bv); + //判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给getNodeVo + List voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), FinCostGetNodeVo.class)).collect(Collectors.toList()); + return rb.success().setData(voList); } /** @@ -165,7 +317,33 @@ public class FinCostapplyService extends MybatisBaseService resultBean = flowableFeign.taskReject(flowTaskVo); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + Map map = BeanUtil.beanToMap(resultBean.getData()); + //更新业务中的流程相关的参数 + updateFlowFiled(map); + return rb.success(); + } + } + return rb.setMsg("操作失败!提交的数据不一致!"); } /** @@ -175,7 +353,25 @@ public class FinCostapplyService extends MybatisBaseService resultBean = flowableFeign.revokeProcess(flowTaskVo); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + updateFlowFiled(BeanUtil.beanToMap(resultBean.getData())); + return rb.success().setData(resultBean.getData()); + } + } + return rb.setMsg("操作失败,提交的数据不一致!"); } /** @@ -185,6 +381,27 @@ public class FinCostapplyService extends MybatisBaseService resultBean = flowableFeign.breakProcess(flowTaskVo); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + updateFlowFiled(BeanUtil.beanToMap(resultBean.getData())); + return rb.success().setData(resultBean.getData()); + } + } + return rb.setMsg("操作失败!提交的数据不一致!"); } } \ No newline at end of file