diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/BusclaimInvoiceDelegateQuery.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/BusclaimInvoiceDelegateQuery.java new file mode 100644 index 0000000000..2e1fd498ba --- /dev/null +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/BusclaimInvoiceDelegateQuery.java @@ -0,0 +1,24 @@ +package com.yxt.anrui.as.api.asbusclaiminvoicebill.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/10 + **/ +@Data +public class BusclaimInvoiceDelegateQuery { + + @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-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/BusclaimInvoiceNodeQuery.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/BusclaimInvoiceNodeQuery.java new file mode 100644 index 0000000000..8af357ecaa --- /dev/null +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/BusclaimInvoiceNodeQuery.java @@ -0,0 +1,18 @@ +package com.yxt.anrui.as.api.asbusclaiminvoicebill.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/10 + **/ +@Data +public class BusclaimInvoiceNodeQuery { + + @ApiModelProperty(value = "环节定义id") + private String taskDefKey; + @ApiModelProperty(value = "业务sid") + private String businessSid; +} diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/BusclaimInvoiceNodeVo.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/BusclaimInvoiceNodeVo.java new file mode 100644 index 0000000000..423665a934 --- /dev/null +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/BusclaimInvoiceNodeVo.java @@ -0,0 +1,24 @@ +package com.yxt.anrui.as.api.asbusclaiminvoicebill.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/10 + **/ +@Data +public class BusclaimInvoiceNodeVo { + + @ApiModelProperty(value = "节点名称") + private String name; + @ApiModelProperty(value = "节点id") + private String id; + @ApiModelProperty(value = "审批组") + private List candidateGroups; + @ApiModelProperty(value = "是否是最后环节") + private String endTask; +} diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/BusclaimInvoiceTaskQuery.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/BusclaimInvoiceTaskQuery.java new file mode 100644 index 0000000000..bdc2d0c781 --- /dev/null +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/BusclaimInvoiceTaskQuery.java @@ -0,0 +1,43 @@ +package com.yxt.anrui.as.api.asbusclaiminvoicebill.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/10 + **/ +@Data +public class BusclaimInvoiceTaskQuery { + + /** + * 终止、驳回、撤回 + */ + @ApiModelProperty("任务Id") + @NotBlank(message = "参数错误:taskId") + private String taskId; + /** + * 终止、驳回、撤回 + */ + @ApiModelProperty("业务sid") + @NotBlank(message = "参数错误:businessSid") + private String businessSid; + /** + * 终止、驳回 + */ + @ApiModelProperty("任务意见") + private String comment; + /** + * 终止、撤回、驳回 + */ + @ApiModelProperty("用户Sid") + private String userSid; + /** + * 终止 + */ + @ApiModelProperty("流程实例Id") + private String instanceId; +} diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/CompleteBusclaimInvoiceBillDto.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/CompleteBusclaimInvoiceBillDto.java new file mode 100644 index 0000000000..e8e6620076 --- /dev/null +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/CompleteBusclaimInvoiceBillDto.java @@ -0,0 +1,35 @@ +package com.yxt.anrui.as.api.asbusclaiminvoicebill.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/10 + **/ +@Data +public class CompleteBusclaimInvoiceBillDto { + + @ApiModelProperty(value = "用户sid") + @NotBlank(message = "参数错误:userSid") + private String userSid; + @ApiModelProperty(value = "用户全路径sid") + private String orgSidPath; + @ApiModelProperty(value = "节点id") + @NotBlank(message = "参数错误:taskDefKey") + private String taskDefKey; + @ApiModelProperty(value = "任务id") + @NotBlank(message = "参数错误:taskId") + private String taskId; + @ApiModelProperty(value = "流程id") + @NotBlank(message = "参数错误:instanceId") + private String instanceId; + @ApiModelProperty(value = "意见") + private String comment; + @ApiModelProperty(value = "业务sid") + @NotBlank(message = "参数错误:businessSid") + private String businessSid; +} diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/SubmitBusclaimInvoiceBillDto.java b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/SubmitBusclaimInvoiceBillDto.java new file mode 100644 index 0000000000..650318187c --- /dev/null +++ b/yxt-as/src/main/java/com/yxt/anrui/as/api/asbusclaiminvoicebill/flowable/SubmitBusclaimInvoiceBillDto.java @@ -0,0 +1,19 @@ +package com.yxt.anrui.as.api.asbusclaiminvoicebill.flowable; + +import com.yxt.anrui.as.api.asbusclaiminvoicebill.AsBusclaimInvoiceBillDto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/10 + **/ +@Data +public class SubmitBusclaimInvoiceBillDto extends AsBusclaimInvoiceBillDto { + + @ApiModelProperty("流程实例id") + private String instanceId; + @ApiModelProperty("任务id") + private String taskId; +} diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillMapper.java b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillMapper.java index 9d17b6ba4e..27ca695fc0 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillMapper.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillMapper.java @@ -9,6 +9,8 @@ import com.yxt.anrui.as.api.asbusclaiminvoicebill.AsBusclaimInvoiceBillVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.Map; + /** * @description: * @author: dimengzhe @@ -19,4 +21,6 @@ public interface AsBusclaimInvoiceBillMapper extends BaseMapper listPage(IPage page, @Param(Constants.WRAPPER) QueryWrapper qw); int selectBySid(String join); + + int updateFlowFiled(Map beanToMap); } diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillMapper.xml b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillMapper.xml index 49c9823d4f..3f43eafe56 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillMapper.xml +++ b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillMapper.xml @@ -25,4 +25,22 @@ where length(nodeState) > 0 and find_in_set(sid, #{list}) + + + UPDATE as_busclaim_invoice_bill + SET nodeState=#{nodeState} + + , taskDefKey=#{taskDefKey} + + + , procDefId=#{procDefId} + + + , procInstId=#{procInsId} + + + , taskId=#{taskId} + + WHERE sid = #{sid} + \ No newline at end of file diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillRest.java b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillRest.java index 1772131408..fe9b00aa72 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillRest.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillRest.java @@ -1,17 +1,24 @@ package com.yxt.anrui.as.biz.asbusclaiminvoicebill; +import cn.hutool.core.bean.BeanUtil; import com.yxt.anrui.as.api.asbusclaimbill.AsBusclaimBillVo; import com.yxt.anrui.as.api.asbusclaiminvoicebill.AsBusclaimInvoiceBillDetailsVo; import com.yxt.anrui.as.api.asbusclaiminvoicebill.AsBusclaimInvoiceBillDto; import com.yxt.anrui.as.api.asbusclaiminvoicebill.AsBusclaimInvoiceBillQuery; import com.yxt.anrui.as.api.asbusclaiminvoicebill.AsBusclaimInvoiceBillVo; +import com.yxt.anrui.as.api.asbusclaiminvoicebill.flowable.*; +import com.yxt.anrui.as.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 @@ -49,4 +56,56 @@ public class AsBusclaimInvoiceBillRest { ResultBean details(@RequestParam("sid") String sid) { return asBusclaimInvoiceBillService.details(sid); } + + @ApiOperation("提交") + @PostMapping("/submitApply") + public ResultBean submitApply(@Valid @RequestBody SubmitBusclaimInvoiceBillDto dto) { + return asBusclaimInvoiceBillService.submitApply(dto); + } + + @ApiOperation(value = "办理(同意)") + @PostMapping("/complete") + public ResultBean complete(@Valid @RequestBody CompleteBusclaimInvoiceBillDto query) { + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + bv.setModelId(""); + return asBusclaimInvoiceBillService.complete(bv); + } + + @ApiOperation(value = "获取上一个环节") + @GetMapping(value = "/getPreviousNodesForReject") + ResultBean> getPreviousNodesForReject(@Valid @SpringQueryMap BusclaimInvoiceNodeQuery query) { + return asBusclaimInvoiceBillService.getPreviousNodesForReject(query); + } + + @ApiOperation(value = "获取下一个环节") + @GetMapping(value = "/getNextNodesForSubmit") + ResultBean> getNextNodesForSubmit(@Valid @SpringQueryMap BusclaimInvoiceNodeQuery query) { + return asBusclaimInvoiceBillService.getNextNodesForSubmit(query); + } + + @ApiOperation(value = "驳回任务") + @PostMapping(value = "/reject") + public ResultBean taskReject(@Valid @RequestBody BusclaimInvoiceTaskQuery query) { + return asBusclaimInvoiceBillService.taskReject(query); + } + + @ApiOperation(value = "撤回流程") + @PostMapping(value = "/revokeProcess") + public ResultBean revokeProcess(@Valid @RequestBody BusclaimInvoiceTaskQuery query) { + return asBusclaimInvoiceBillService.revokeProcess(query); + } + + @ApiOperation(value = "终止任务") + @PostMapping(value = "/breakProcess") + public ResultBean breakProcess(@Valid @RequestBody BusclaimInvoiceTaskQuery query) { + return asBusclaimInvoiceBillService.breakProcess(query); + } + + @ApiOperation(value = "加签") + @PostMapping(value = "/delegate") + @ResponseBody + public ResultBean delegate(@RequestBody BusclaimInvoiceDelegateQuery query) { + return asBusclaimInvoiceBillService.delegate(query); + } } diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillService.java b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillService.java index 4df005bdc2..87a399f28a 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillService.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/biz/asbusclaiminvoicebill/AsBusclaimInvoiceBillService.java @@ -1,13 +1,29 @@ package com.yxt.anrui.as.biz.asbusclaiminvoicebill; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.yxt.anrui.as.api.asbusclaiminvoicebill.*; +import com.yxt.anrui.as.api.asbusclaiminvoicebill.flowable.*; import com.yxt.anrui.as.api.asbusclaiminvoicebilldetail.AsBusclaimInvoiceBillDetailDto; import com.yxt.anrui.as.api.asbusclaiminvoicebilldetail.AsBusclaimInvoiceBillDetailVo; import com.yxt.anrui.as.biz.asbusclaiminvoicebilldetail.AsBusclaimInvoiceBillDetailMapper; import com.yxt.anrui.as.biz.asbusclaiminvoicebilldetail.AsBusclaimInvoiceBillDetailService; +import com.yxt.anrui.as.feign.flowable.flow.BusinessVariables; +import com.yxt.anrui.as.feign.flowable.flow.FlowableFeign; +import com.yxt.anrui.as.feign.flowable.flow.ProcDefEnum; +import com.yxt.anrui.as.feign.flowable.flow.UpdateFlowFieldVo; +import com.yxt.anrui.as.feign.flowable.flow2.FlowDelegateQuery; +import com.yxt.anrui.as.feign.flowable.flow2.FlowFeign; +import com.yxt.anrui.as.feign.flowable.flowtask.FlowTaskFeign; +import com.yxt.anrui.as.feign.flowable.flowtask.FlowTaskVo; +import com.yxt.anrui.as.feign.flowable.flowtask.LatestTaskVo; +import com.yxt.anrui.as.feign.message.MessageFeign; +import com.yxt.anrui.as.feign.message.MessageFlowVo; +import com.yxt.anrui.as.feign.message.MessageFlowableQuery; import com.yxt.common.base.config.component.FileUploadComponent; import com.yxt.common.base.service.MybatisBaseService; import com.yxt.common.base.utils.PagerUtil; @@ -15,13 +31,13 @@ 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.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.Arrays; -import java.util.Collections; -import java.util.List; +import java.util.*; +import java.util.concurrent.*; import java.util.stream.Collectors; /** @@ -38,6 +54,14 @@ public class AsBusclaimInvoiceBillService extends MybatisBaseService listPage(PagerQuery pagerQuery) { AsBusclaimInvoiceBillQuery query = pagerQuery.getParams(); @@ -160,4 +184,306 @@ public class AsBusclaimInvoiceBillService extends MybatisBaseService resultBean = saveOrUpdateBill(dto); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + String businessSid = resultBean.getData(); + asBusclaimInvoiceBill = fetchBySid(businessSid); + //创建BusinessVariables实体对象 + BusinessVariables bv = new BusinessVariables(); + //流程中的参数赋值、若有网关,则赋值网关中判断的字段。 + Map variables = new HashMap<>(); + Map appMap = new HashMap<>(); + appMap.put("sid", businessSid); + variables.put("app", appMap); + //用户的部门全路径sid + bv.setOrgSidPath(asBusclaimInvoiceBill.getOrgSidPath()); + bv.setBusinessSid(businessSid); + bv.setUserSid(dto.getCreateBySid()); + bv.setFormVariables(variables); + if (r == 1) { + //ToDo:流程定义id + bv.setModelId(""); + ResultBean voResultBean = flowFeign.startProcess(bv); + if (!voResultBean.getSuccess()) { + return rb.setMsg(voResultBean.getMsg()); + } + UpdateFlowFieldVo ufVo = voResultBean.getData(); + updateFlowFiled(BeanUtil.beanToMap(ufVo)); + asBusclaimInvoiceBill = 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()); + AsBusclaimInvoiceBill finalAsBusclaimInvoiceBill = asBusclaimInvoiceBill; + Future future1 = pool.submit(() -> { + //极光推送 + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + messageFlowableQuery.setUfVo(messageFlowVo); + messageFlowableQuery.setAppMap(appMap); + messageFlowableQuery.setBusinessSid(businessSid); + messageFlowableQuery.setModuleName("索赔单开票申请"); + messageFlowableQuery.setMsgContent(finalAsBusclaimInvoiceBill.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + messageFlowableQuery.setMsgTitle("索赔单开票申请"); + ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + }); + } catch (Exception e) { + e.printStackTrace(); + } + //==================================添加线程 + return voResultBean; + } + if (r == 2) { + // ToDo:驳回到发起人后再次提交 + if (StringUtils.isBlank(dto.getInstanceId())) { + return rb.setMsg("参数错误:instanceId"); + } + bv.setTaskId(asBusclaimInvoiceBill.getTaskId()); + bv.setTaskDefKey(asBusclaimInvoiceBill.getTaskDefKey()); + bv.setComment("重新提交"); + bv.setInstanceId(dto.getInstanceId()); + return complete(bv); + } + return rb; + } + + private int updateFlowFiled(Map beanToMap) { + return baseMapper.updateFlowFiled(beanToMap); + } + + private int submitBusinessData(SubmitBusclaimInvoiceBillDto dto, AsBusclaimInvoiceBill asBusclaimInvoiceBill) { + int r = 0; + if (StringUtils.isBlank(dto.getSid())) { + r = 1; + } else { + if (asBusclaimInvoiceBill != null) { + String businessTaskId = asBusclaimInvoiceBill.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; + } + + public ResultBean complete(BusinessVariables bv) { + ResultBean rb = ResultBean.fireFail(); + String businessSid = bv.getBusinessSid(); + AsBusclaimInvoiceBill asBusclaimInvoiceBill = fetchBySid(businessSid); + Map variables = new HashMap<>(); + Map appMap = new HashMap<>(); + appMap.put("sid", businessSid); + variables.put("app", appMap); + bv.setFormVariables(variables); + bv.setOrgSidPath(asBusclaimInvoiceBill.getOrgSidPath()); + bv.setModelId(asBusclaimInvoiceBill.getProcDefId()); + if (bv.getTaskId().equals(asBusclaimInvoiceBill.getTaskId())) { + ResultBean resultBean = flowFeign.handleProsess(bv); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + UpdateFlowFieldVo ufVo = resultBean.getData(); + updateFlowFiled(BeanUtil.beanToMap(resultBean.getData())); + if ("Event_end".equals(resultBean.getData().getTaskDefKey())) { + asBusclaimInvoiceBill = fetchBySid(businessSid); + asBusclaimInvoiceBill.setCloseDate(DateUtil.today()); + baseMapper.updateById(asBusclaimInvoiceBill); + } else { + //极光推送 + asBusclaimInvoiceBill = fetchBySid(businessSid); + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + messageFlowVo.setProcDefId(asBusclaimInvoiceBill.getProcDefId()); + messageFlowVo.setProcInsId(asBusclaimInvoiceBill.getProcInstId()); + messageFlowableQuery.setUfVo(messageFlowVo); + messageFlowableQuery.setAppMap(appMap); + messageFlowableQuery.setBusinessSid(businessSid); + messageFlowableQuery.setModuleName("索赔单开票申请"); + messageFlowableQuery.setMsgContent(asBusclaimInvoiceBill.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + messageFlowableQuery.setMsgTitle("索赔单开票申请"); + ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + } + return rb.success().setData(resultBean.getData()); + } else { + return rb.setMsg("操作失败!提交的数据不一致"); + } + } + + public ResultBean> getPreviousNodesForReject(BusclaimInvoiceNodeQuery query) { + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + AsBusclaimInvoiceBill asBusclaimInvoiceBill = fetchBySid(query.getBusinessSid()); + bv.setModelId(asBusclaimInvoiceBill.getProcDefId()); + ResultBean>> resultBean = flowTaskFeign.getPreviousNodesForReject(bv); + //判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给TemplateApplyNodeVo + List voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), BusclaimInvoiceNodeVo.class)).collect(Collectors.toList()); + return rb.success().setData(voList); + } + + public ResultBean> getNextNodesForSubmit(BusclaimInvoiceNodeQuery query) { + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + AsBusclaimInvoiceBill asBusclaimInvoiceBill = fetchBySid(query.getBusinessSid()); + bv.setModelId(asBusclaimInvoiceBill.getProcDefId()); + ResultBean>> resultBean = flowTaskFeign.getNextNodesForSubmit(bv); + //判断数组是否为空,若为空则赋值,若不为空,则遍历循环将map中的数据赋值给TemplateApplyNodeVo + List voList = Optional.ofNullable(resultBean.getData()).orElse(new ArrayList<>()).stream().map(m -> JSON.parseObject(JSON.toJSONString(m), BusclaimInvoiceNodeVo.class)).collect(Collectors.toList()); + return rb.success().setData(voList); + } + + public ResultBean taskReject(BusclaimInvoiceTaskQuery query) { + ResultBean rb = ResultBean.fireFail(); + String businessSid = query.getBusinessSid(); + AsBusclaimInvoiceBill asBusclaimInvoiceBill = fetchBySid(businessSid); + if (asBusclaimInvoiceBill == null) { + return rb.setMsg("该申请不存在"); + } + String businessTaskId = asBusclaimInvoiceBill.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); + ResultBean resultBean = flowableFeign.taskReject(flowTaskVo); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + UpdateFlowFieldVo ufVo = resultBean.getData(); + Map map = BeanUtil.beanToMap(ufVo); + //更新业务中的流程相关的参数 + updateFlowFiled(map); + //极光推送 + asBusclaimInvoiceBill = fetchBySid(businessSid); + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + String procId = asBusclaimInvoiceBill.getProcInstId(); + messageFlowVo.setProcInsId(procId); + messageFlowVo.setProcDefId(asBusclaimInvoiceBill.getProcDefId()); + messageFlowableQuery.setUfVo(messageFlowVo); + messageFlowableQuery.setAppMap(appMap); + messageFlowableQuery.setBusinessSid(businessSid); + messageFlowableQuery.setModuleName("索赔单开票申请"); + ResultBean> listResultBean = flowTaskFeign.getLatestTasks(procId); + String nextName = listResultBean.getData().get(0).getName_(); + String nextNodeUserSids = listResultBean.getData().get(0).getASSIGNEE_(); + if ("发起申请".equals(nextName)) { + messageFlowableQuery.setMsgContent("您提交的" + messageFlowableQuery.getModuleName() + "已被驳回,请重新提交"); + } else { + messageFlowableQuery.setMsgContent(asBusclaimInvoiceBill.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + } + + messageFlowableQuery.setMsgTitle("索赔单开票申请"); + ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + return rb.success(); + } + } + return rb.setMsg("操作失败!提交的数据不一致!"); + } + + public ResultBean revokeProcess(BusclaimInvoiceTaskQuery query) { + ResultBean rb = ResultBean.fireFail(); + if (StringUtils.isBlank(query.getUserSid())) { + return rb.setMsg("参数错误:userSid"); + } + AsBusclaimInvoiceBill asBusclaimInvoiceBill = fetchBySid(query.getBusinessSid()); + String businessTaskId = asBusclaimInvoiceBill.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()); + } + updateFlowFiled(BeanUtil.beanToMap(resultBean.getData())); + return rb.success().setData(resultBean.getData()); + } + } + return rb.setMsg("操作失败,提交的数据不一致!"); + } + + public ResultBean breakProcess(BusclaimInvoiceTaskQuery 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("请填写意见"); + } + AsBusclaimInvoiceBill asBusclaimInvoiceBill = fetchBySid(query.getBusinessSid()); + String businessTaskId = asBusclaimInvoiceBill.getTaskId(); + if (StringUtils.isNotBlank(businessTaskId)) { + if (query.getUserSid().equals(asBusclaimInvoiceBill.getCreateBySid())) { + FlowTaskVo flowTaskVo = new FlowTaskVo(); + BeanUtil.copyProperties(query, flowTaskVo); + ResultBean resultBean = flowableFeign.breakProcess(flowTaskVo); + if (!resultBean.getSuccess()) { + return rb.setMsg(resultBean.getMsg()); + } + Map map = BeanUtil.beanToMap(resultBean.getData()); + updateFlowFiled(map); + 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()); + } + Map map = BeanUtil.beanToMap(resultBean.getData()); + updateFlowFiled(map); + return rb.success().setData(resultBean.getData()); + } + } + } + return rb.setMsg("操作失败!提交的数据不一致!"); + } + + public ResultBean delegate(BusclaimInvoiceDelegateQuery query) { + ResultBean rb = ResultBean.fireFail(); + FlowDelegateQuery delegateQuery = new FlowDelegateQuery(); + BeanUtil.copyProperties(query, delegateQuery); + flowFeign.delegate(delegateQuery); + return rb.success(); + } } diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/feign/flowable/flow2/FlowDelegateQuery.java b/yxt-as/src/main/java/com/yxt/anrui/as/feign/flowable/flow2/FlowDelegateQuery.java index 804010084f..d13abbbf88 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/feign/flowable/flow2/FlowDelegateQuery.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/feign/flowable/flow2/FlowDelegateQuery.java @@ -13,7 +13,6 @@ public class FlowDelegateQuery { @ApiModelProperty private String userSid; @ApiModelProperty("流程实例id") -// @JsonProperty("procInsId") private String instanceId; @ApiModelProperty("任务Id") private String taskId; diff --git a/yxt-as/src/main/java/com/yxt/anrui/as/feign/flowable/flow2/FlowFeign.java b/yxt-as/src/main/java/com/yxt/anrui/as/feign/flowable/flow2/FlowFeign.java index 5748e04a95..81bf2495dc 100644 --- a/yxt-as/src/main/java/com/yxt/anrui/as/feign/flowable/flow2/FlowFeign.java +++ b/yxt-as/src/main/java/com/yxt/anrui/as/feign/flowable/flow2/FlowFeign.java @@ -1,10 +1,13 @@ package com.yxt.anrui.as.feign.flowable.flow2; +import com.yxt.anrui.as.feign.flowable.flow.BusinessVariables; +import com.yxt.anrui.as.feign.flowable.flow.UpdateFlowFieldVo; 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; +import org.springframework.web.bind.annotation.ResponseBody; @FeignClient( contextId = "anrui-flowable-Flow", @@ -15,4 +18,19 @@ public interface FlowFeign { @ApiOperation(value = "加签") @PostMapping(value = "/delegate") public ResultBean delegate(@RequestBody FlowDelegateQuery flowDelegateQuery); + + @ApiOperation(value = "启动流程") + @PostMapping(value = "/startProcess") + @ResponseBody + ResultBean startProcess(@RequestBody BusinessVariables dto); + + @ApiOperation(value = "处理流程") + @PostMapping(value = "/handleProsess") + @ResponseBody + ResultBean handleProsess(@RequestBody BusinessVariables bv); + + @ApiOperation(value = "转办") + @PostMapping(value = "/assignTask") + public ResultBean assignTask(@RequestBody FlowDelegateQuery flowDelegateQuery); + } \ No newline at end of file