From 0e3d9d4cbdc5c492bbf0b777510099a6b5c87890 Mon Sep 17 00:00:00 2001 From: God <10745413@qq.com> Date: Fri, 9 Aug 2024 18:02:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=98=E7=9B=88=E5=85=A5=E5=BA=93=E6=B5=81?= =?UTF-8?q?=E7=A8=8B=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91=E5=AE=8C=E6=88=90?= =?UTF-8?q?=20=E7=9B=98=E4=BA=8F=E5=87=BA=E5=BA=93=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E3=80=81=E6=B5=81=E7=A8=8B=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E5=AE=8C=E6=88=90=20PC=E7=9B=98=E5=BA=93=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E3=80=81=E9=80=89=E6=8B=A9=E5=BA=93=E4=BD=8D?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BC=96=E7=A0=81=E5=88=A0=E9=99=A4=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=BF=AE=E6=94=B9=E8=B0=83=E8=AF=95=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../inventroy/WmsInventoryProfitinRest.java | 60 +++ .../inventroy/WmsInventoryProfitoutRest.java | 68 ++- .../WmsWarehouseRackMapper.xml | 4 +- .../WmsInventoryCheckbillMapper.xml | 18 +- .../WmsInventoryCheckbillService.java | 13 +- .../WmsInventoryProfitinMapper.java | 4 + .../WmsInventoryProfitinMapper.xml | 18 + .../WmsInventoryProfitinService.java | 321 +++++++++++- .../CompleteInventoryProfitinDto.java | 35 ++ .../InventoryProfitinDelegateQuery.java | 23 + .../flowable/InventoryProfitinNodeQuery.java | 18 + .../flowable/InventoryProfitinNodeVo.java | 24 + .../flowable/InventoryProfitinTaskQuery.java | 43 ++ .../flowable/SubmitInventoryProfitinDto.java | 20 + .../WmsInventoryProfitoutDetailsVo.java | 21 +- .../WmsInventoryProfitoutDto.java | 16 +- .../WmsInventoryProfitoutMapper.java | 9 +- .../WmsInventoryProfitoutMapper.xml | 37 +- .../WmsInventoryProfitoutQuery.java | 50 +- .../WmsInventoryProfitoutService.java | 473 +++++++++++++++++- .../WmsInventoryProfitoutVo.java | 54 +- .../CompleteInventoryProfitoutDto.java | 35 ++ .../InventoryProfitoutDelegateQuery.java | 23 + .../flowable/InventoryProfitoutNodeQuery.java | 18 + .../flowable/InventoryProfitoutNodeVo.java | 24 + .../flowable/InventoryProfitoutTaskQuery.java | 43 ++ .../flowable/SubmitInventoryProfitoutDto.java | 20 + .../WmsInventoryProfitoutDetailMapper.java | 10 + .../WmsInventoryProfitoutDetailService.java | 10 + .../wms/feign/flowable/flow/ProcDefEnum.java | 2 + 30 files changed, 1413 insertions(+), 101 deletions(-) create mode 100644 yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/CompleteInventoryProfitinDto.java create mode 100644 yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinDelegateQuery.java create mode 100644 yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinNodeQuery.java create mode 100644 yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinNodeVo.java create mode 100644 yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinTaskQuery.java create mode 100644 yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/SubmitInventoryProfitinDto.java create mode 100644 yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/CompleteInventoryProfitoutDto.java create mode 100644 yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutDelegateQuery.java create mode 100644 yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutNodeQuery.java create mode 100644 yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutNodeVo.java create mode 100644 yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutTaskQuery.java create mode 100644 yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/SubmitInventoryProfitoutDto.java diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInventoryProfitinRest.java b/yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInventoryProfitinRest.java index 26c932f2ad..8cf5271fe6 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInventoryProfitinRest.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInventoryProfitinRest.java @@ -25,15 +25,23 @@ *********************************************************/ package com.yxt.wms.apiadmin.inventroy; +import cn.hutool.core.bean.BeanUtil; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; +import com.yxt.wms.biz.inventory.wmsinventorycheckbill.flowable.*; import com.yxt.wms.biz.inventory.wmsinventoryprofitin.*; +import com.yxt.wms.biz.inventory.wmsinventoryprofitin.flowable.*; +import com.yxt.wms.feign.flowable.flow.BusinessVariables; 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 javax.validation.Valid; +import java.util.List; + @Api(tags = "盘盈入库申请") @RestController @RequestMapping("v1/wmsinventoryprofitin") @@ -69,4 +77,56 @@ public class WmsInventoryProfitinRest { WmsInventoryProfitinDetailsVo vo = wmsInventoryProfitinService.fetchDetailsVoBySid(sid); return rb.success().setData(vo); } + + @ApiOperation("提交") + @PostMapping("/submitApply") + public ResultBean submitApply(@Valid @RequestBody SubmitInventoryProfitinDto dto) { + return wmsInventoryProfitinService.submitApply(dto); + } + + @ApiOperation(value = "办理(同意)") + @PostMapping("/complete") + public ResultBean complete(@Valid @RequestBody CompleteInventoryProfitinDto query) { + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + bv.setModelId(""); + return wmsInventoryProfitinService.complete(bv); + } + + @ApiOperation(value = "获取上一个环节") + @GetMapping(value = "/getPreviousNodesForReject") + ResultBean> getPreviousNodesForReject(@Valid @SpringQueryMap InventoryProfitinNodeQuery query) { + return wmsInventoryProfitinService.getPreviousNodesForReject(query); + } + + @ApiOperation(value = "获取下一个环节") + @GetMapping(value = "/getNextNodesForSubmit") + ResultBean> getNextNodesForSubmit(@Valid @SpringQueryMap InventoryProfitinNodeQuery query) { + return wmsInventoryProfitinService.getNextNodesForSubmit(query); + } + + @ApiOperation(value = "驳回任务") + @PostMapping(value = "/reject") + public ResultBean taskReject(@Valid @RequestBody InventoryProfitinTaskQuery query) { + return wmsInventoryProfitinService.taskReject(query); + } + + @ApiOperation(value = "撤回流程") + @PostMapping(value = "/revokeProcess") + public ResultBean revokeProcess(@Valid @RequestBody InventoryProfitinTaskQuery query) { + return wmsInventoryProfitinService.revokeProcess(query); + } + + @ApiOperation(value = "终止任务") + @PostMapping(value = "/breakProcess") + public ResultBean breakProcess(@Valid @RequestBody InventoryProfitinTaskQuery query) { + return wmsInventoryProfitinService.breakProcess(query); + } + + @ApiOperation(value = "加签") + @PostMapping(value = "/delegate") + @ResponseBody + public ResultBean delegate(@RequestBody InventoryProfitinDelegateQuery query) { + return wmsInventoryProfitinService.delegate(query); + } } diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInventoryProfitoutRest.java b/yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInventoryProfitoutRest.java index e97a04e5ff..74af62878f 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInventoryProfitoutRest.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/apiadmin/inventroy/WmsInventoryProfitoutRest.java @@ -25,15 +25,23 @@ *********************************************************/ package com.yxt.wms.apiadmin.inventroy; +import cn.hutool.core.bean.BeanUtil; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.result.ResultBean; import com.yxt.common.core.vo.PagerVo; +import com.yxt.wms.biz.inventory.wmsinventoryprofitin.flowable.*; import com.yxt.wms.biz.inventory.wmsinventoryprofitout.*; +import com.yxt.wms.biz.inventory.wmsinventoryprofitout.flowable.*; +import com.yxt.wms.feign.flowable.flow.BusinessVariables; 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 javax.validation.Valid; +import java.util.List; + @Api(tags = "盘亏出库申请") @RestController @RequestMapping("v1/wmsinventoryprofitout") @@ -53,17 +61,13 @@ public class WmsInventoryProfitoutRest { @ApiOperation("新增或修改") @PostMapping("/save") public ResultBean save(@RequestBody WmsInventoryProfitoutDto dto){ - ResultBean rb = ResultBean.fireFail(); - wmsInventoryProfitoutService.saveOrUpdateDto(dto); - return rb.success(); + return wmsInventoryProfitoutService.saveOrUpdateDto(dto); } @ApiOperation("根据sid批量删除") @DeleteMapping("/delBySids") public ResultBean delBySids(@RequestBody String[] sids){ - ResultBean rb = ResultBean.fireFail(); - wmsInventoryProfitoutService.delBySids(sids); - return rb.success(); + return wmsInventoryProfitoutService.delAll(sids); } @ApiOperation("根据SID获取一条记录") @@ -73,4 +77,56 @@ public class WmsInventoryProfitoutRest { WmsInventoryProfitoutDetailsVo vo = wmsInventoryProfitoutService.fetchDetailsVoBySid(sid); return rb.success().setData(vo); } + + @ApiOperation("提交") + @PostMapping("/submitApply") + public ResultBean submitApply(@Valid @RequestBody SubmitInventoryProfitoutDto dto) { + return wmsInventoryProfitoutService.submitApply(dto); + } + + @ApiOperation(value = "办理(同意)") + @PostMapping("/complete") + public ResultBean complete(@Valid @RequestBody CompleteInventoryProfitoutDto query) { + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + bv.setModelId(""); + return wmsInventoryProfitoutService.complete(bv); + } + + @ApiOperation(value = "获取上一个环节") + @GetMapping(value = "/getPreviousNodesForReject") + ResultBean> getPreviousNodesForReject(@Valid @SpringQueryMap InventoryProfitoutNodeQuery query) { + return wmsInventoryProfitoutService.getPreviousNodesForReject(query); + } + + @ApiOperation(value = "获取下一个环节") + @GetMapping(value = "/getNextNodesForSubmit") + ResultBean> getNextNodesForSubmit(@Valid @SpringQueryMap InventoryProfitoutNodeQuery query) { + return wmsInventoryProfitoutService.getNextNodesForSubmit(query); + } + + @ApiOperation(value = "驳回任务") + @PostMapping(value = "/reject") + public ResultBean taskReject(@Valid @RequestBody InventoryProfitoutTaskQuery query) { + return wmsInventoryProfitoutService.taskReject(query); + } + + @ApiOperation(value = "撤回流程") + @PostMapping(value = "/revokeProcess") + public ResultBean revokeProcess(@Valid @RequestBody InventoryProfitoutTaskQuery query) { + return wmsInventoryProfitoutService.revokeProcess(query); + } + + @ApiOperation(value = "终止任务") + @PostMapping(value = "/breakProcess") + public ResultBean breakProcess(@Valid @RequestBody InventoryProfitoutTaskQuery query) { + return wmsInventoryProfitoutService.breakProcess(query); + } + + @ApiOperation(value = "加签") + @PostMapping(value = "/delegate") + @ResponseBody + public ResultBean delegate(@RequestBody InventoryProfitoutDelegateQuery query) { + return wmsInventoryProfitoutService.delegate(query); + } } diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/base/wmswarehouserack/WmsWarehouseRackMapper.xml b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/base/wmswarehouserack/WmsWarehouseRackMapper.xml index 2792cefa18..cf923c8449 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/base/wmswarehouserack/WmsWarehouseRackMapper.xml +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/base/wmswarehouserack/WmsWarehouseRackMapper.xml @@ -51,8 +51,10 @@ where rackCode =#{rackCode} and locationSid =#{locationSid} and isDelete=0 diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventorycheckbill/WmsInventoryCheckbillMapper.xml b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventorycheckbill/WmsInventoryCheckbillMapper.xml index 1437193f57..9bbc70bf4b 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventorycheckbill/WmsInventoryCheckbillMapper.xml +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventorycheckbill/WmsInventoryCheckbillMapper.xml @@ -86,29 +86,29 @@ realCount * cost AS realAmount, CASE state - WHEN 0 - THEN '正常' WHEN 1 - THEN '盘盈' + THEN '正常' WHEN 2 + THEN '盘盈' + WHEN 3 THEN '盘亏' END AS state, CASE state - WHEN 0 - THEN 0 WHEN 1 - THEN profitCount + THEN 0 WHEN 2 + THEN profitCount + WHEN 3 THEN loseCount END AS profitAndLoseCount, CASE state - WHEN 0 - THEN 0 WHEN 1 - THEN profitCount * cost + THEN 0 WHEN 2 + THEN profitCount * cost + WHEN 3 THEN loseCount * cost END AS profitAndLoseAmount, lossCount, diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventorycheckbill/WmsInventoryCheckbillService.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventorycheckbill/WmsInventoryCheckbillService.java index 64bda85d97..4d3fdd0404 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventorycheckbill/WmsInventoryCheckbillService.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventorycheckbill/WmsInventoryCheckbillService.java @@ -264,7 +264,7 @@ public class WmsInventoryCheckbillService extends MybatisBaseService saveOrUpdateDto(WmsInventoryCheckbillDto dto) { ResultBean rb = ResultBean.fireFail(); String nodeState = baseMapper.checkState(dto.getDeptSid()); - if (!"已办结".equals(nodeState)) { + if (StringUtils.isNotBlank(nodeState) && !"已办结".equals(nodeState)) { return rb.setMsg("存在盘点中数据,无法生成新的盘点单"); } SysOrganizationVo deptVo = sysOrganizationFeign.fetchBySid(dto.getDeptSid()).getData(); @@ -284,15 +284,18 @@ public class WmsInventoryCheckbillService extends MybatisBaseService wmsInventories; - if ("01".equals(dto.getCheckTypeKey())) { + List wmsInventories = null; + if ("1".equals(dto.getCheckTypeKey())) { //查询本部门指定库位下,库存数量大0并且是新件的库存 wmsInventories = wmsInventoryService.selByDeptSidAndRackSid(dto.getDeptSid(), dto.getRackSids()); - } else { + } else if ("2".equals(dto.getCheckTypeKey())){ //查询本部门下,库存数量大0并且是新件的库存 wmsInventories = wmsInventoryService.selByDeptSid(dto.getDeptSid()); } + if (wmsInventories.size() == 0){ + return rb.setMsg("该库位下没有商品库存信息"); + } + String sid = this.insertByDto(dto); for (WmsInventory wmsInventory : wmsInventories) { WmsInventoryCheckbillDetailDto wmsInventoryCheckbillDetailDto = new WmsInventoryCheckbillDetailDto(); wmsInventoryCheckbillDetailDto.setBillSid(sid); diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/WmsInventoryProfitinMapper.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/WmsInventoryProfitinMapper.java index 6dcb13d92a..f30d726d43 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/WmsInventoryProfitinMapper.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/WmsInventoryProfitinMapper.java @@ -32,6 +32,8 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.Map; + @Mapper public interface WmsInventoryProfitinMapper extends BaseMapper { @@ -40,4 +42,6 @@ public interface WmsInventoryProfitinMapper extends BaseMapper beanToMap); } \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/WmsInventoryProfitinMapper.xml b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/WmsInventoryProfitinMapper.xml index 183d7824da..7c493b1bee 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/WmsInventoryProfitinMapper.xml +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/WmsInventoryProfitinMapper.xml @@ -23,4 +23,22 @@ WHERE nodeState != '待提交' and find_in_set(sid, #{list}) + + + UPDATE wms_inventory_profitin + SET nodeState=#{nodeState}, nodeId=#{taskDefKey} + + , finishTime = NOW() + + + , procDefId=#{procDefId} + + + , procInstId=#{procInsId} + + + , taskId=#{taskId} + + WHERE sid=#{sid} + \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/WmsInventoryProfitinService.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/WmsInventoryProfitinService.java index 8da7582e47..e3f7ef53ed 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/WmsInventoryProfitinService.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/WmsInventoryProfitinService.java @@ -27,16 +27,29 @@ package com.yxt.wms.biz.inventory.wmsinventoryprofitin; 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.common.core.result.ResultBean; +import com.yxt.wms.biz.inventory.wmsinventorycheckbill.WmsInventoryCheckbill; +import com.yxt.wms.biz.inventory.wmsinventorycheckbill.flowable.*; +import com.yxt.wms.biz.inventory.wmsinventoryprofitin.flowable.*; import com.yxt.wms.biz.inventory.wmsinventoryprofitindetail.WmsInventoryProfitinDetailDetailsVo; import com.yxt.wms.biz.inventory.wmsinventoryprofitindetail.WmsInventoryProfitinDetailDto; import com.yxt.wms.biz.inventory.wmsinventoryprofitindetail.WmsInventoryProfitinDetailService; +import com.yxt.wms.feign.flowable.flow.BusinessVariables; import com.yxt.wms.feign.flowable.flow.FlowableFeign; +import com.yxt.wms.feign.flowable.flow.ProcDefEnum; +import com.yxt.wms.feign.flowable.flow.UpdateFlowFieldVo; +import com.yxt.wms.feign.flowable.flow2.FlowDelegateQuery; import com.yxt.wms.feign.flowable.flow2.FlowFeign; import com.yxt.wms.feign.flowable.flowtask.FlowTaskFeign; +import com.yxt.wms.feign.flowable.flowtask.FlowTaskVo; +import com.yxt.wms.feign.flowable.flowtask.LatestTaskVo; import com.yxt.wms.feign.message.MessageFeign; +import com.yxt.wms.feign.message.MessageFlowVo; +import com.yxt.wms.feign.message.MessageFlowableQuery; import com.yxt.wms.feign.portal.privilege.PrivilegeQuery; import com.yxt.wms.feign.portal.sysorganization.SysOrganizationFeign; import com.yxt.wms.feign.portal.sysorganization.SysOrganizationVo; @@ -49,10 +62,13 @@ import com.yxt.common.base.utils.PagerUtil; import com.yxt.common.core.query.PagerQuery; import com.yxt.common.core.vo.PagerVo; +import org.apache.tomcat.util.threads.ThreadPoolExecutor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; +import java.util.*; +import java.util.concurrent.*; +import java.util.stream.Collectors; /** * Project: yxt-wms(盘库)
@@ -235,4 +251,307 @@ public class WmsInventoryProfitinService extends MybatisBaseService variables = new HashMap<>(); + Map appMap = new HashMap<>(); + appMap.put("sid", businessSid); + variables.put("app", appMap); + //用户的部门全路径sid + SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(wmsInventoryProfitin.getDeptSid()).getData(); + if (sysOrganization != null) { + bv.setOrgSidPath(sysOrganization.getOrgSidPath()); + } + bv.setBusinessSid(businessSid); + bv.setUserSid(dto.getCreateBySid()); + bv.setFormVariables(variables); + if (r == 1) { + //ToDo:流程定义id + bv.setModelId(ProcDefEnum.WMSINVENTORYPROFITIN.getProDefId()); + ResultBean voResultBean = flowFeign.startProcess(bv); + if (!voResultBean.getSuccess()) { + return rb.setMsg(voResultBean.getMsg()); + } + UpdateFlowFieldVo ufVo = voResultBean.getData(); + updateFlowFiled(BeanUtil.beanToMap(ufVo)); + wmsInventoryProfitin = 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()); + WmsInventoryProfitin finalWmsInventoryProfitin = wmsInventoryProfitin; + 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(finalWmsInventoryProfitin.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(wmsInventoryProfitin.getTaskId()); + bv.setTaskDefKey(wmsInventoryProfitin.getNodeId()); + bv.setComment("重新提交"); + bv.setInstanceId(dto.getInstanceId()); + return complete(bv); + } + return rb; + } + + private int updateFlowFiled(Map beanToMap) { + return baseMapper.updateFlowFiled(beanToMap); + } + + + private int submitBusinessData(SubmitInventoryProfitinDto dto, WmsInventoryProfitin wmsInventoryProfitin) { + int r = 0; + if (StringUtils.isBlank(dto.getSid())) { + r = 1; + } else { + if (wmsInventoryProfitin != null) { + String businessTaskId = wmsInventoryProfitin.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(); + WmsInventoryProfitin wmsInventoryProfitin = fetchBySid(businessSid); + Map variables = new HashMap<>(); + Map appMap = new HashMap<>(); + appMap.put("sid", businessSid); + variables.put("app", appMap); + bv.setFormVariables(variables); + SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(wmsInventoryProfitin.getDeptSid()).getData(); + if (sysOrganization != null) { + bv.setOrgSidPath(sysOrganization.getOrgSidPath()); + } + bv.setModelId(wmsInventoryProfitin.getProcDefId()); + if (bv.getTaskId().equals(wmsInventoryProfitin.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())) { + + } else { + //极光推送 + wmsInventoryProfitin = fetchBySid(businessSid); + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + messageFlowVo.setProcDefId(wmsInventoryProfitin.getProcDefId()); + messageFlowVo.setProcInsId(wmsInventoryProfitin.getProcInstId()); + messageFlowableQuery.setUfVo(messageFlowVo); + messageFlowableQuery.setAppMap(appMap); + messageFlowableQuery.setBusinessSid(businessSid); + messageFlowableQuery.setModuleName("盘盈入库申请"); + messageFlowableQuery.setMsgContent(wmsInventoryProfitin.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + messageFlowableQuery.setMsgTitle("盘盈入库申请"); + ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + } + return rb.success().setData(resultBean.getData()); + } else { + return rb.setMsg("操作失败!提交的数据不一致"); + } + } + + public ResultBean> getPreviousNodesForReject(InventoryProfitinNodeQuery query) { + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + WmsInventoryProfitin wmsInventoryProfitin = fetchBySid(query.getBusinessSid()); + bv.setModelId(wmsInventoryProfitin.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), InventoryProfitinNodeVo.class)).collect(Collectors.toList()); + return rb.success().setData(voList); + } + + public ResultBean> getNextNodesForSubmit(InventoryProfitinNodeQuery query) { + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + WmsInventoryProfitin wmsInventoryProfitin = fetchBySid(query.getBusinessSid()); + bv.setModelId(wmsInventoryProfitin.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), InventoryProfitinNodeVo.class)).collect(Collectors.toList()); + return rb.success().setData(voList); + } + + public ResultBean taskReject(InventoryProfitinTaskQuery query) { + ResultBean rb = ResultBean.fireFail(); + String businessSid = query.getBusinessSid(); + WmsInventoryProfitin wmsInventoryProfitin = fetchBySid(businessSid); + if (wmsInventoryProfitin == null) { + return rb.setMsg("该申请不存在"); + } + String businessTaskId = wmsInventoryProfitin.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); + //极光推送 + wmsInventoryProfitin = fetchBySid(businessSid); + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + String procId = wmsInventoryProfitin.getProcInstId(); + messageFlowVo.setProcInsId(procId); + messageFlowVo.setProcDefId(wmsInventoryProfitin.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(wmsInventoryProfitin.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + } + + messageFlowableQuery.setMsgTitle("盘盈入库申请"); + ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + return rb.success(); + } + } + return rb.setMsg("操作失败!提交的数据不一致!"); + } + + public ResultBean revokeProcess(InventoryProfitinTaskQuery query) { + ResultBean rb = ResultBean.fireFail(); + if (StringUtils.isBlank(query.getUserSid())) { + return rb.setMsg("参数错误:userSid"); + } + WmsInventoryProfitin wmsInventoryProfitin = fetchBySid(query.getBusinessSid()); + String businessTaskId = wmsInventoryProfitin.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(InventoryProfitinTaskQuery 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("请填写意见"); + } + WmsInventoryProfitin wmsInventoryProfitin = fetchBySid(query.getBusinessSid()); + String businessTaskId = wmsInventoryProfitin.getTaskId(); + if (StringUtils.isNotBlank(businessTaskId)) { + if (query.getUserSid().equals(wmsInventoryProfitin.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(InventoryProfitinDelegateQuery query) { + ResultBean rb = ResultBean.fireFail(); + FlowDelegateQuery delegateQuery = new FlowDelegateQuery(); + BeanUtil.copyProperties(query, delegateQuery); + flowFeign.delegate(delegateQuery); + return rb.success(); + } } \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/CompleteInventoryProfitinDto.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/CompleteInventoryProfitinDto.java new file mode 100644 index 0000000000..17e80f41bb --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/CompleteInventoryProfitinDto.java @@ -0,0 +1,35 @@ +package com.yxt.wms.biz.inventory.wmsinventoryprofitin.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/11 + **/ +@Data +public class CompleteInventoryProfitinDto { + + @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-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinDelegateQuery.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinDelegateQuery.java new file mode 100644 index 0000000000..4773d9a6f8 --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinDelegateQuery.java @@ -0,0 +1,23 @@ +package com.yxt.wms.biz.inventory.wmsinventoryprofitin.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/11 + **/ +@Data +public class InventoryProfitinDelegateQuery { + + 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-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinNodeQuery.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinNodeQuery.java new file mode 100644 index 0000000000..61b6938d6f --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinNodeQuery.java @@ -0,0 +1,18 @@ +package com.yxt.wms.biz.inventory.wmsinventoryprofitin.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/11 + **/ +@Data +public class InventoryProfitinNodeQuery { + + @ApiModelProperty(value = "环节定义id") + private String taskDefKey; + @ApiModelProperty(value = "业务sid") + private String businessSid; +} diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinNodeVo.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinNodeVo.java new file mode 100644 index 0000000000..818afd5c2c --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinNodeVo.java @@ -0,0 +1,24 @@ +package com.yxt.wms.biz.inventory.wmsinventoryprofitin.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/11 + **/ +@Data +public class InventoryProfitinNodeVo { + + @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-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinTaskQuery.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinTaskQuery.java new file mode 100644 index 0000000000..defbc853aa --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/InventoryProfitinTaskQuery.java @@ -0,0 +1,43 @@ +package com.yxt.wms.biz.inventory.wmsinventoryprofitin.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/11 + **/ +@Data +public class InventoryProfitinTaskQuery { + + /** + * 终止、驳回、撤回 + */ + @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-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/SubmitInventoryProfitinDto.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/SubmitInventoryProfitinDto.java new file mode 100644 index 0000000000..f156b9fe80 --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitin/flowable/SubmitInventoryProfitinDto.java @@ -0,0 +1,20 @@ +package com.yxt.wms.biz.inventory.wmsinventoryprofitin.flowable; + +import com.yxt.wms.biz.inventory.wmsinventorycheckbill.WmsInventoryCheckbillDto; +import com.yxt.wms.biz.inventory.wmsinventoryprofitin.WmsInventoryProfitinDto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/11 + **/ +@Data +public class SubmitInventoryProfitinDto extends WmsInventoryProfitinDto { + + @ApiModelProperty("流程实例id") + private String instanceId; + @ApiModelProperty("任务id") + private String taskId; +} diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutDetailsVo.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutDetailsVo.java index c6a0a7cc94..f357ff78a2 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutDetailsVo.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutDetailsVo.java @@ -30,6 +30,10 @@ import com.yxt.common.core.vo.Vo; import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; +import java.util.List; + +import com.yxt.wms.biz.inventory.wmsinventoryprofitoutdetail.WmsInventoryProfitoutDetailDetailsVo; +import com.yxt.wms.biz.inventory.wmsinventoryprofitoutdetail.WmsInventoryProfitoutDetailDto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -53,8 +57,15 @@ public class WmsInventoryProfitoutDetailsVo implements Vo { private String sid; // sid - @ApiModelProperty("单据编号") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + @ApiModelProperty("申请日期") + private Date createTime; + @ApiModelProperty("单据编号") private String billNo; // 单据编号 + @ApiModelProperty("备注") + private String remarks; + @ApiModelProperty("申请人sid") + private String createBySid; @ApiModelProperty("制单人姓名") private String createByName; // 制单人姓名 @ApiModelProperty("申请部门sid") @@ -68,9 +79,8 @@ public class WmsInventoryProfitoutDetailsVo implements Vo { @ApiModelProperty("盘点单号") private String checkBillNo; // 盘点单号 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") - @ApiModelProperty("办结时间") - private Date finishTimeStart; // 办结时间 - private Date finishTimeEnd; // 办结时间 + @ApiModelProperty("办结时间") + private Date finishTime; @ApiModelProperty("流程定义的id") private String procDefId; // 流程定义的id @ApiModelProperty("环节定义的sid") @@ -85,5 +95,6 @@ public class WmsInventoryProfitoutDetailsVo implements Vo { private String createOrgName; // 创建组织名称 @ApiModelProperty("创建组织sid") private String createOrgSid; // 创建组织sid - + @ApiModelProperty + private List wmsInventoryProfitoutDetailList; } \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutDto.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutDto.java index 65ee23a408..ad8b537145 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutDto.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutDto.java @@ -30,6 +30,10 @@ import com.yxt.common.core.dto.Dto; import com.fasterxml.jackson.annotation.JsonFormat; import java.util.Date; +import java.util.List; + +import com.yxt.wms.biz.inventory.wmsinventoryprofitindetail.WmsInventoryProfitinDetailDto; +import com.yxt.wms.biz.inventory.wmsinventoryprofitoutdetail.WmsInventoryProfitoutDetailDto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -55,6 +59,10 @@ public class WmsInventoryProfitoutDto implements Dto { @ApiModelProperty("单据编号") private String billNo; // 单据编号 + @ApiModelProperty("备注") + private String remarks; + @ApiModelProperty("申请人sid") + private String createBySid; @ApiModelProperty("制单人姓名") private String createByName; // 制单人姓名 @ApiModelProperty("申请部门sid") @@ -68,9 +76,8 @@ public class WmsInventoryProfitoutDto implements Dto { @ApiModelProperty("盘点单号") private String checkBillNo; // 盘点单号 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") - @ApiModelProperty("办结时间") - private Date finishTimeStart; // 办结时间 - private Date finishTimeEnd; // 办结时间 + @ApiModelProperty("办结时间") + private Date finishTime; @ApiModelProperty("流程定义的id") private String procDefId; // 流程定义的id @ApiModelProperty("环节定义的sid") @@ -85,5 +92,6 @@ public class WmsInventoryProfitoutDto implements Dto { private String createOrgName; // 创建组织名称 @ApiModelProperty("创建组织sid") private String createOrgSid; // 创建组织sid - + @ApiModelProperty + private List wmsInventoryProfitoutDetailList; } \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutMapper.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutMapper.java index e4e8ba04cc..c8ef261590 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutMapper.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutMapper.java @@ -32,9 +32,16 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import java.util.Map; + @Mapper public interface WmsInventoryProfitoutMapper extends BaseMapper { IPage selectPageVo(IPage page, @Param(Constants.WRAPPER) Wrapper qw); - + + String selectNum(String billNo); + + int selectBySid(String join); + + int updateFlowFiled(Map beanToMap); } \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutMapper.xml b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutMapper.xml index 3ecb16e83d..efd454d3b3 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutMapper.xml +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutMapper.xml @@ -4,6 +4,41 @@ + + + + + + + UPDATE wms_inventory_profitout + SET nodeState=#{nodeState}, nodeId=#{taskDefKey} + + , finishTime = NOW() + + + , procDefId=#{procDefId} + + + , procInstId=#{procInsId} + + + , taskId=#{taskId} + + WHERE sid=#{sid} + \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutQuery.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutQuery.java index c9ac406deb..9db438db72 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutQuery.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutQuery.java @@ -51,37 +51,23 @@ import lombok.Data; @ApiModel(value = "盘亏出库申请 查询条件", description = "盘亏出库申请 查询条件") public class WmsInventoryProfitoutQuery implements Query { - @ApiModelProperty("单据编号") - private String billNo; // 单据编号 - @ApiModelProperty("制单人姓名") - private String createByName; // 制单人姓名 - @ApiModelProperty("申请部门sid") - private String deptSid; // 申请部门sid - @ApiModelProperty("申请部门名称") - private String deptName; // 申请部门名称 - @ApiModelProperty("业务类型") - private String busType; // 业务类型 - @ApiModelProperty("盘点单sid") - private String checkBillSid; // 盘点单sid - @ApiModelProperty("盘点单号") - private String checkBillNo; // 盘点单号 - @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") - @ApiModelProperty("办结时间") - private String finishTimeStart; // 办结时间 - private String finishTimeEnd; // 办结时间 - @ApiModelProperty("流程定义的id") - private String procDefId; // 流程定义的id - @ApiModelProperty("环节定义的sid") - private String nodeId; // 环节定义的sid - @ApiModelProperty("流程实例的sid") - private String procInstId; // 流程实例的sid - @ApiModelProperty("流程状态") - private String nodeState; // 流程状态 - @ApiModelProperty("任务id") - private String taskId; // 任务id - @ApiModelProperty("创建组织名称") - private String createOrgName; // 创建组织名称 - @ApiModelProperty("创建组织sid") - private String createOrgSid; // 创建组织sid + @ApiModelProperty("申请部门名称") + private String deptName; + @ApiModelProperty("申请人") + private String createByName; + @ApiModelProperty("单据编号") + private String billNo; + @ApiModelProperty("申请日期") + private String createTimeStart; + private String createTimeEnd; + @ApiModelProperty("办结日期") + private String finishTimeStart; + private String finishTimeEnd; + @ApiModelProperty("盘点单号") + private String checkBillNo; + + private String orgPath; + private String userSid; + private String menuUrl; } diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutService.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutService.java index d1552110f6..5436712a88 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutService.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutService.java @@ -26,41 +26,187 @@ package com.yxt.wms.biz.inventory.wmsinventoryprofitout; 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.common.core.result.ResultBean; +import com.yxt.wms.biz.inventory.wmsinventoryprofitin.WmsInventoryProfitin; +import com.yxt.wms.biz.inventory.wmsinventoryprofitin.WmsInventoryProfitinVo; +import com.yxt.wms.biz.inventory.wmsinventoryprofitin.flowable.*; +import com.yxt.wms.biz.inventory.wmsinventoryprofitindetail.WmsInventoryProfitinDetailDto; +import com.yxt.wms.biz.inventory.wmsinventoryprofitindetail.WmsInventoryProfitinDetailService; +import com.yxt.wms.biz.inventory.wmsinventoryprofitout.flowable.*; +import com.yxt.wms.biz.inventory.wmsinventoryprofitoutdetail.WmsInventoryProfitoutDetailDetailsVo; +import com.yxt.wms.biz.inventory.wmsinventoryprofitoutdetail.WmsInventoryProfitoutDetailDto; +import com.yxt.wms.biz.inventory.wmsinventoryprofitoutdetail.WmsInventoryProfitoutDetailService; +import com.yxt.wms.feign.flowable.flow.BusinessVariables; +import com.yxt.wms.feign.flowable.flow.FlowableFeign; +import com.yxt.wms.feign.flowable.flow.ProcDefEnum; +import com.yxt.wms.feign.flowable.flow.UpdateFlowFieldVo; +import com.yxt.wms.feign.flowable.flow2.FlowDelegateQuery; +import com.yxt.wms.feign.flowable.flow2.FlowFeign; +import com.yxt.wms.feign.flowable.flowtask.FlowTaskFeign; +import com.yxt.wms.feign.flowable.flowtask.FlowTaskVo; +import com.yxt.wms.feign.flowable.flowtask.LatestTaskVo; +import com.yxt.wms.feign.message.MessageFeign; +import com.yxt.wms.feign.message.MessageFlowVo; +import com.yxt.wms.feign.message.MessageFlowableQuery; +import com.yxt.wms.feign.portal.privilege.PrivilegeQuery; +import com.yxt.wms.feign.portal.sysorganization.SysOrganizationFeign; +import com.yxt.wms.feign.portal.sysorganization.SysOrganizationVo; +import com.yxt.wms.feign.portal.sysstafforg.SysStaffOrgFeign; +import com.yxt.wms.feign.portal.sysuser.SysUserFeign; +import com.yxt.wms.utils.Rule; import org.apache.commons.lang3.StringUtils; 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.vo.PagerVo; +import org.apache.tomcat.util.threads.ThreadPoolExecutor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.*; +import java.util.concurrent.*; +import java.util.stream.Collectors; + @Service public class WmsInventoryProfitoutService extends MybatisBaseService { + + @Autowired + private SysOrganizationFeign sysOrganizationFeign; + @Autowired + private SysStaffOrgFeign sysStaffOrgFeign; + @Autowired + private SysUserFeign sysUserFeign; + @Autowired + private FlowableFeign flowableFeign; + @Autowired + private FlowTaskFeign flowTaskFeign; + @Autowired + private FlowFeign flowFeign; + @Autowired + private MessageFeign messageFeign; + @Autowired + private WmsInventoryProfitoutDetailService wmsInventoryProfitoutDetailService; public PagerVo listPageVo(PagerQuery pq) { WmsInventoryProfitoutQuery query = pq.getParams(); QueryWrapper qw = new QueryWrapper<>(); + //========================================数据授权开始 + if (StringUtils.isNotBlank(query.getMenuUrl())) { + PrivilegeQuery privilegeQuery = new PrivilegeQuery(); + privilegeQuery.setOrgPath(query.getOrgPath()); + privilegeQuery.setMenuUrl(query.getMenuUrl()); + privilegeQuery.setUserSid(query.getUserSid()); + ResultBean defaultIdReltBean = sysUserFeign.selectPrivilegeLevel(privilegeQuery); + if (StringUtils.isNotBlank(defaultIdReltBean.getData())) { + //数据权限ID(1集团、2事业部、3分公司、4部门、5个人) + String orgSidPath = query.getOrgPath(); + orgSidPath = orgSidPath + "/"; + int i1 = orgSidPath.indexOf("/"); + int i2 = orgSidPath.indexOf("/", i1 + 1); + int i3 = orgSidPath.indexOf("/", i2 + 1); + int i4 = orgSidPath.indexOf("/", i3 + 1); + String orgLevelKey = defaultIdReltBean.getData(); + if ("1".equals(orgLevelKey)) { + orgSidPath = orgSidPath.substring(0, i1); + qw.like("s.orgSidPath", orgSidPath); + } else if ("2".equals(orgLevelKey)) { + orgSidPath = orgSidPath.substring(0, i2); + qw.like("s.orgSidPath", orgSidPath); + } else if ("3".equals(orgLevelKey)) { + orgSidPath = orgSidPath.substring(0, i3); + qw.like("s.orgSidPath", orgSidPath); + } else if ("4".equals(orgLevelKey)) { + orgSidPath = orgSidPath.substring(0, i4); + qw.like("s.orgSidPath", orgSidPath); + } else if ("5".equals(orgLevelKey)) { + qw.eq("wip.createBySid", query.getUserSid()); + } else { + PagerVo p = new PagerVo<>(); + return p; + } + } else { + PagerVo p = new PagerVo<>(); + return p; + } + } + if (StringUtils.isNotBlank(query.getDeptName())) { + qw.like("wip.deptName", query.getDeptName()); + } + if (StringUtils.isNotBlank(query.getCreateByName())) { + qw.like("wip.createByName", query.getCreateByName()); + } + if (StringUtils.isNotBlank(query.getBillNo())) { + qw.like("wip.billNo", query.getBillNo()); + } + if (StringUtils.isNotBlank(query.getCheckBillNo())){ + qw.like("wip.checkBillNo",query.getCheckBillNo()); + } + String createTimeStart = query.getCreateTimeStart(); + String createTimeEnd = query.getCreateTimeEnd(); + qw.apply(StringUtils.isNotEmpty(createTimeStart), "date_format (wip.createTime,'%Y-%m-%d') >= date_format('" + createTimeStart + "','%Y-%m-%d')"). + apply(StringUtils.isNotEmpty(createTimeEnd), "date_format (wip.createTime,'%Y-%m-%d') <= date_format('" + createTimeEnd + "','%Y-%m-%d')" + ); + String finishTimeStart = query.getFinishTimeStart(); + String finishTimeEnd = query.getFinishTimeEnd(); + qw.apply(StringUtils.isNotEmpty(finishTimeStart), "date_format (wip.finishTime,'%Y-%m-%d') >= date_format('" + finishTimeStart + "','%Y-%m-%d')"). + apply(StringUtils.isNotEmpty(finishTimeEnd), "date_format (wip.finishTime,'%Y-%m-%d') <= date_format('" + finishTimeEnd + "','%Y-%m-%d')" + ); IPage page = PagerUtil.queryToPage(pq); IPage pagging = baseMapper.selectPageVo(page, qw); PagerVo p = PagerUtil.pageToVo(pagging, null); return p; } - public void saveOrUpdateDto(WmsInventoryProfitoutDto dto){ + public ResultBean saveOrUpdateDto(WmsInventoryProfitoutDto dto){ + ResultBean rb = ResultBean.fireFail(); String dtoSid = dto.getSid(); + List wmsInventoryProfitoutDetailList = dto.getWmsInventoryProfitoutDetailList(); + String deptSid = dto.getDeptSid(); + SysOrganizationVo deptVo = sysOrganizationFeign.fetchBySid(deptSid).getData(); + String createOrgSid = sysStaffOrgFeign.getOrgSidByPath(deptVo.getOrgSidPath()).getData(); + SysOrganizationVo organizationVo = sysOrganizationFeign.fetchBySid(createOrgSid).getData(); + dto.setCreateOrgSid(createOrgSid); + dto.setCreateOrgName(organizationVo.getName()); if (StringUtils.isBlank(dtoSid)) { - this.insertByDto(dto); - return; + //生成单据编号 + String billNo = ""; + String date = DateUtil.format(DateUtil.date(), "yyyyMM"); + billNo = "PKCK" + organizationVo.getOrgCode() + date; + String i = baseMapper.selectNum(billNo); + if (StringUtils.isNotBlank(i)) { + billNo = Rule.getBillNo(billNo, Integer.valueOf(i).intValue()); + } else { + billNo = Rule.getBillNo(billNo, 0); + } + dto.setBillNo(billNo); + String sid = this.insertByDto(dto); + for (WmsInventoryProfitoutDetailDto wmsInventoryProfitoutDetailDto : wmsInventoryProfitoutDetailList) { + wmsInventoryProfitoutDetailDto.setMainSid(sid); + wmsInventoryProfitoutDetailService.insertByDto(wmsInventoryProfitoutDetailDto); + } + return rb.success().setData(sid); } this.updateByDto(dto); + wmsInventoryProfitoutDetailService.delByMainSid(dtoSid); + for (WmsInventoryProfitoutDetailDto wmsInventoryProfitoutDetailDto : wmsInventoryProfitoutDetailList) { + wmsInventoryProfitoutDetailDto.setMainSid(dtoSid); + wmsInventoryProfitoutDetailService.insertByDto(wmsInventoryProfitoutDetailDto); + } + return rb.success().setData(dtoSid); } - public void insertByDto(WmsInventoryProfitoutDto dto){ + public String insertByDto(WmsInventoryProfitoutDto dto){ WmsInventoryProfitout entity = new WmsInventoryProfitout(); BeanUtil.copyProperties(dto, entity, "id", "sid"); + entity.setNodeState("待提交"); baseMapper.insert(entity); + return entity.getSid(); } public void updateByDto(WmsInventoryProfitoutDto dto){ @@ -77,6 +223,325 @@ public class WmsInventoryProfitoutService extends MybatisBaseService wmsInventoryProfitoutDetailDetailsVos = wmsInventoryProfitoutDetailService.selByMainSid(sid); + vo.setWmsInventoryProfitoutDetailList(wmsInventoryProfitoutDetailDetailsVos); return vo; } + + public ResultBean delAll(String[] sids) { + ResultBean rb = ResultBean.fireFail(); + //查询该sid中是否有流程不是待提交的 + int count = baseMapper.selectBySid(StringUtils.join(sids, ",")); + if (count > 0) { + return rb.setMsg("删除的数据中包含已提交或已办结审批的数据,删除失败"); + } + delBySids(sids); + for (String sid : sids) { + wmsInventoryProfitoutDetailService.delByMainSid(sid); + } + return rb.success(); + } + + public ResultBean submitApply(SubmitInventoryProfitoutDto dto) { + ResultBean rb = ResultBean.fireFail(); + WmsInventoryProfitout wmsInventoryProfitout = fetchBySid(dto.getSid()); + int r = submitBusinessData(dto, wmsInventoryProfitout); + if (r == 3) { + return rb.setMsg("该申请不存在"); + } + if (r == 0) { + return rb.setMsg("操作失败!提交的数据不一致"); + } + String businessSid = saveOrUpdateDto(dto).getData(); + wmsInventoryProfitout = fetchBySid(businessSid); + //创建BusinessVariables实体对象 + BusinessVariables bv = new BusinessVariables(); + //流程中的参数赋值、若有网关,则赋值网关中判断的字段。 + Map variables = new HashMap<>(); + Map appMap = new HashMap<>(); + appMap.put("sid", businessSid); + variables.put("app", appMap); + //用户的部门全路径sid + SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(wmsInventoryProfitout.getDeptSid()).getData(); + if (sysOrganization != null) { + bv.setOrgSidPath(sysOrganization.getOrgSidPath()); + } + bv.setBusinessSid(businessSid); + bv.setUserSid(dto.getCreateBySid()); + bv.setFormVariables(variables); + if (r == 1) { + //ToDo:流程定义id + bv.setModelId(ProcDefEnum.WMSINVENTORYPROFITOUT.getProDefId()); + ResultBean voResultBean = flowFeign.startProcess(bv); + if (!voResultBean.getSuccess()) { + return rb.setMsg(voResultBean.getMsg()); + } + UpdateFlowFieldVo ufVo = voResultBean.getData(); + updateFlowFiled(BeanUtil.beanToMap(ufVo)); + wmsInventoryProfitout = 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()); + WmsInventoryProfitout finalWmsInventoryProfitout = wmsInventoryProfitout; + 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(finalWmsInventoryProfitout.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(wmsInventoryProfitout.getTaskId()); + bv.setTaskDefKey(wmsInventoryProfitout.getNodeId()); + bv.setComment("重新提交"); + bv.setInstanceId(dto.getInstanceId()); + return complete(bv); + } + return rb; + } + + private int updateFlowFiled(Map beanToMap) { + return baseMapper.updateFlowFiled(beanToMap); + } + + + private int submitBusinessData(SubmitInventoryProfitoutDto dto, WmsInventoryProfitout wmsInventoryProfitout) { + int r = 0; + if (StringUtils.isBlank(dto.getSid())) { + r = 1; + } else { + if (wmsInventoryProfitout != null) { + String businessTaskId = wmsInventoryProfitout.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(); + WmsInventoryProfitout wmsInventoryProfitout = fetchBySid(businessSid); + Map variables = new HashMap<>(); + Map appMap = new HashMap<>(); + appMap.put("sid", businessSid); + variables.put("app", appMap); + bv.setFormVariables(variables); + SysOrganizationVo sysOrganization = sysOrganizationFeign.fetchBySid(wmsInventoryProfitout.getDeptSid()).getData(); + if (sysOrganization != null) { + bv.setOrgSidPath(sysOrganization.getOrgSidPath()); + } + bv.setModelId(wmsInventoryProfitout.getProcDefId()); + if (bv.getTaskId().equals(wmsInventoryProfitout.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())) { + + } else { + //极光推送 + wmsInventoryProfitout = fetchBySid(businessSid); + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + messageFlowVo.setProcDefId(wmsInventoryProfitout.getProcDefId()); + messageFlowVo.setProcInsId(wmsInventoryProfitout.getProcInstId()); + messageFlowableQuery.setUfVo(messageFlowVo); + messageFlowableQuery.setAppMap(appMap); + messageFlowableQuery.setBusinessSid(businessSid); + messageFlowableQuery.setModuleName("盘亏出库申请"); + messageFlowableQuery.setMsgContent(wmsInventoryProfitout.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + messageFlowableQuery.setMsgTitle("盘亏出库申请"); + ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + } + return rb.success().setData(resultBean.getData()); + } else { + return rb.setMsg("操作失败!提交的数据不一致"); + } + } + + public ResultBean> getPreviousNodesForReject(InventoryProfitoutNodeQuery query) { + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + WmsInventoryProfitout wmsInventoryProfitout = fetchBySid(query.getBusinessSid()); + bv.setModelId(wmsInventoryProfitout.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), InventoryProfitoutNodeVo.class)).collect(Collectors.toList()); + return rb.success().setData(voList); + } + + public ResultBean> getNextNodesForSubmit(InventoryProfitoutNodeQuery query) { + ResultBean> rb = ResultBean.fireFail(); + BusinessVariables bv = new BusinessVariables(); + BeanUtil.copyProperties(query, bv); + WmsInventoryProfitout wmsInventoryProfitout = fetchBySid(query.getBusinessSid()); + bv.setModelId(wmsInventoryProfitout.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), InventoryProfitoutNodeVo.class)).collect(Collectors.toList()); + return rb.success().setData(voList); + } + + public ResultBean taskReject(InventoryProfitoutTaskQuery query) { + ResultBean rb = ResultBean.fireFail(); + String businessSid = query.getBusinessSid(); + WmsInventoryProfitout wmsInventoryProfitout = fetchBySid(businessSid); + if (wmsInventoryProfitout == null) { + return rb.setMsg("该申请不存在"); + } + String businessTaskId = wmsInventoryProfitout.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); + //极光推送 + wmsInventoryProfitout = fetchBySid(businessSid); + MessageFlowableQuery messageFlowableQuery = new MessageFlowableQuery(); + MessageFlowVo messageFlowVo = new MessageFlowVo(); + BeanUtil.copyProperties(ufVo, messageFlowVo); + String procId = wmsInventoryProfitout.getProcInstId(); + messageFlowVo.setProcInsId(procId); + messageFlowVo.setProcDefId(wmsInventoryProfitout.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(wmsInventoryProfitout.getCreateByName() + "提交的" + messageFlowableQuery.getModuleName() + ",请审批"); + } + + messageFlowableQuery.setMsgTitle("盘亏出库申请"); + ResultBean stringResultBean = messageFeign.pushMessage(messageFlowableQuery); + return rb.success(); + } + } + return rb.setMsg("操作失败!提交的数据不一致!"); + } + + public ResultBean revokeProcess(InventoryProfitoutTaskQuery query) { + ResultBean rb = ResultBean.fireFail(); + if (StringUtils.isBlank(query.getUserSid())) { + return rb.setMsg("参数错误:userSid"); + } + WmsInventoryProfitout wmsInventoryProfitout = fetchBySid(query.getBusinessSid()); + String businessTaskId = wmsInventoryProfitout.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(InventoryProfitoutTaskQuery 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("请填写意见"); + } + WmsInventoryProfitout wmsInventoryProfitout = fetchBySid(query.getBusinessSid()); + String businessTaskId = wmsInventoryProfitout.getTaskId(); + if (StringUtils.isNotBlank(businessTaskId)) { + if (query.getUserSid().equals(wmsInventoryProfitout.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(InventoryProfitoutDelegateQuery query) { + ResultBean rb = ResultBean.fireFail(); + FlowDelegateQuery delegateQuery = new FlowDelegateQuery(); + BeanUtil.copyProperties(query, delegateQuery); + flowFeign.delegate(delegateQuery); + return rb.success(); + } } \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutVo.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutVo.java index 40ab005015..58277cf003 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutVo.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/WmsInventoryProfitoutVo.java @@ -53,37 +53,27 @@ public class WmsInventoryProfitoutVo implements Vo { private String sid; // sid - @ApiModelProperty("单据编号") - private String billNo; // 单据编号 - @ApiModelProperty("制单人姓名") - private String createByName; // 制单人姓名 - @ApiModelProperty("申请部门sid") - private String deptSid; // 申请部门sid - @ApiModelProperty("申请部门名称") - private String deptName; // 申请部门名称 - @ApiModelProperty("业务类型") - private String busType; // 业务类型 - @ApiModelProperty("盘点单sid") - private String checkBillSid; // 盘点单sid - @ApiModelProperty("盘点单号") - private String checkBillNo; // 盘点单号 - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") - @ApiModelProperty("办结时间") - private Date finishTimeStart; // 办结时间 - private Date finishTimeEnd; // 办结时间 - @ApiModelProperty("流程定义的id") - private String procDefId; // 流程定义的id - @ApiModelProperty("环节定义的sid") - private String nodeId; // 环节定义的sid - @ApiModelProperty("流程实例的sid") - private String procInstId; // 流程实例的sid - @ApiModelProperty("流程状态") - private String nodeState; // 流程状态 - @ApiModelProperty("任务id") - private String taskId; // 任务id - @ApiModelProperty("创建组织名称") - private String createOrgName; // 创建组织名称 - @ApiModelProperty("创建组织sid") - private String createOrgSid; // 创建组织sid + @ApiModelProperty("流程状态") + private String nodeState; + @ApiModelProperty("单据编号") + private String billNo; + @ApiModelProperty("申请部门名称") + private String deptName; + @ApiModelProperty("制单人姓名") + private String createByName; + @ApiModelProperty("申请日期") + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + private Date createTime; + @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8") + @ApiModelProperty("办结日期") + private Date finishTime; + @ApiModelProperty("盘点单号") + private String checkBillNo; + @ApiModelProperty("业务类型") + private String busType; + @ApiModelProperty("流程定义的id") + private String procDefId; + @ApiModelProperty("流程实例的sid") + private String procInstId; } diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/CompleteInventoryProfitoutDto.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/CompleteInventoryProfitoutDto.java new file mode 100644 index 0000000000..d4f854175b --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/CompleteInventoryProfitoutDto.java @@ -0,0 +1,35 @@ +package com.yxt.wms.biz.inventory.wmsinventoryprofitout.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/11 + **/ +@Data +public class CompleteInventoryProfitoutDto { + + @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-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutDelegateQuery.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutDelegateQuery.java new file mode 100644 index 0000000000..af85e62a43 --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutDelegateQuery.java @@ -0,0 +1,23 @@ +package com.yxt.wms.biz.inventory.wmsinventoryprofitout.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/11 + **/ +@Data +public class InventoryProfitoutDelegateQuery { + + 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-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutNodeQuery.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutNodeQuery.java new file mode 100644 index 0000000000..3145c04aa4 --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutNodeQuery.java @@ -0,0 +1,18 @@ +package com.yxt.wms.biz.inventory.wmsinventoryprofitout.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/11 + **/ +@Data +public class InventoryProfitoutNodeQuery { + + @ApiModelProperty(value = "环节定义id") + private String taskDefKey; + @ApiModelProperty(value = "业务sid") + private String businessSid; +} diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutNodeVo.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutNodeVo.java new file mode 100644 index 0000000000..dfb1db075b --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutNodeVo.java @@ -0,0 +1,24 @@ +package com.yxt.wms.biz.inventory.wmsinventoryprofitout.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/11 + **/ +@Data +public class InventoryProfitoutNodeVo { + + @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-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutTaskQuery.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutTaskQuery.java new file mode 100644 index 0000000000..7fd08e4d19 --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/InventoryProfitoutTaskQuery.java @@ -0,0 +1,43 @@ +package com.yxt.wms.biz.inventory.wmsinventoryprofitout.flowable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/11 + **/ +@Data +public class InventoryProfitoutTaskQuery { + + /** + * 终止、驳回、撤回 + */ + @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-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/SubmitInventoryProfitoutDto.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/SubmitInventoryProfitoutDto.java new file mode 100644 index 0000000000..96080be6f1 --- /dev/null +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitout/flowable/SubmitInventoryProfitoutDto.java @@ -0,0 +1,20 @@ +package com.yxt.wms.biz.inventory.wmsinventoryprofitout.flowable; + +import com.yxt.wms.biz.inventory.wmsinventoryprofitin.WmsInventoryProfitinDto; +import com.yxt.wms.biz.inventory.wmsinventoryprofitout.WmsInventoryProfitoutDto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @description: + * @author: dimengzhe + * @date: 2024/5/11 + **/ +@Data +public class SubmitInventoryProfitoutDto extends WmsInventoryProfitoutDto { + + @ApiModelProperty("流程实例id") + private String instanceId; + @ApiModelProperty("任务id") + private String taskId; +} diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitoutdetail/WmsInventoryProfitoutDetailMapper.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitoutdetail/WmsInventoryProfitoutDetailMapper.java index c6ed4f2aca..833139834a 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitoutdetail/WmsInventoryProfitoutDetailMapper.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitoutdetail/WmsInventoryProfitoutDetailMapper.java @@ -26,7 +26,12 @@ package com.yxt.wms.biz.inventory.wmsinventoryprofitoutdetail; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.yxt.wms.biz.inventory.wmsinventoryprofitindetail.WmsInventoryProfitinDetailDetailsVo; +import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** * Project: yxt-wms(盘库)
@@ -44,4 +49,9 @@ import org.apache.ibatis.annotations.Mapper; @Mapper public interface WmsInventoryProfitoutDetailMapper extends BaseMapper { + @Delete("delete from wms_inventory_profitout_detail where mainSid = #{mainSid}") + void delByMainSid(String mainSid); + + @Select("select * from wms_inventory_profitout_detail where mainSid = #{mainSid}") + List selByMainSid(String mainSid); } \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitoutdetail/WmsInventoryProfitoutDetailService.java b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitoutdetail/WmsInventoryProfitoutDetailService.java index 862fe7f8d0..3a2e3fa96a 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitoutdetail/WmsInventoryProfitoutDetailService.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/biz/inventory/wmsinventoryprofitoutdetail/WmsInventoryProfitoutDetailService.java @@ -30,6 +30,8 @@ import com.yxt.common.base.service.MybatisBaseService; import org.springframework.stereotype.Service; +import java.util.List; + /** * Project: yxt-wms(盘库)
* File: WmsInventoryProfitoutDetailService.java
@@ -58,4 +60,12 @@ public class WmsInventoryProfitoutDetailService extends MybatisBaseService selByMainSid(String mainSid) { + return baseMapper.selByMainSid(mainSid); + } } \ No newline at end of file diff --git a/yxt-wms-biz/src/main/java/com/yxt/wms/feign/flowable/flow/ProcDefEnum.java b/yxt-wms-biz/src/main/java/com/yxt/wms/feign/flowable/flow/ProcDefEnum.java index d22f535e29..d618e44928 100644 --- a/yxt-wms-biz/src/main/java/com/yxt/wms/feign/flowable/flow/ProcDefEnum.java +++ b/yxt-wms-biz/src/main/java/com/yxt/wms/feign/flowable/flow/ProcDefEnum.java @@ -8,6 +8,8 @@ public enum ProcDefEnum { /***************************正式流程id***********************************/ WMSINVENCHECKREPORT("盘点报告审批", ""), + WMSINVENTORYPROFITIN("盘盈入库申请", ""), + WMSINVENTORYPROFITOUT("盘亏出库申请", ""), ;