From 48197ac8e2a77e6914ceeccfb64af1b64645a0a1 Mon Sep 17 00:00:00 2001 From: zjf <1799650030@qq.com> Date: Tue, 18 Mar 2025 17:35:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=B6=85=E5=B8=82=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/SupermarketFlowConstant.java | 6 ++ .../InventoryRecordSaveDTO.java | 1 + .../SmErpInventoryRecordsController.java | 56 ++++++++++++++++- .../SmErpInventoryRecordsServiceImpl.java | 60 ++++++++++++------- 4 files changed, 101 insertions(+), 22 deletions(-) diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/constant/SupermarketFlowConstant.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/constant/SupermarketFlowConstant.java index 1267a55c4..9d301b7e4 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/constant/SupermarketFlowConstant.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/constant/SupermarketFlowConstant.java @@ -28,5 +28,11 @@ public final class SupermarketFlowConstant { public static final String SUPERMARKET_CGTH_FLOW= "SUPERMARKET_CGTH_FLOW"; + public static final String SUPERMARKET_LSTH_FLOW= "SUPERMARKET_LSTH_FLOW"; + + + public static final String SUPERMARKET_LSCK_FLOW= "SUPERMARKET_LSCK_FLOW"; + + } diff --git a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveDTO.java b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveDTO.java index 7872acb7f..6b14a2366 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveDTO.java +++ b/pjcloud-supermarket/pjcloud-supermarket-api/src/main/java/com/bsd/pjcloud/supermarket/dto/inventoryrecords/InventoryRecordSaveDTO.java @@ -80,6 +80,7 @@ public class InventoryRecordSaveDTO { * 单据类型(字典inventory_type)采购入库、采购退货、盘点入库等 */ @Schema(description="单据类型(字典inventory_type)采购入库、采购退货、盘点入库等") + @NotNull private String inventoryType; diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java index e2380365a..023f0c56c 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/controller/SmErpInventoryRecordsController.java @@ -3,6 +3,9 @@ package com.bsd.pjcloud.supermarket.controller; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.collection.CollUtil; +import cn.hutool.log.Log; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -12,9 +15,12 @@ import com.bsd.pjcloud.common.core.util.R; import com.bsd.pjcloud.common.log.annotation.SysLog; import com.bsd.pjcloud.common.security.annotation.Inner; import com.bsd.pjcloud.common.security.util.SecurityUtils; +import com.bsd.pjcloud.flow.task.constant.TaskCheckStatusEnum; import com.bsd.pjcloud.flow.task.dto.ProcessNodeRecordParamDto; import com.bsd.pjcloud.flow.task.utils.GetCheckReasonUtils; import com.bsd.pjcloud.flow.task.vo.CheckStatusAndReasonVo; +import com.bsd.pjcloud.supermarket.constant.InventoryTypeEnum; +import com.bsd.pjcloud.supermarket.constant.OrderTypeEnum; import com.bsd.pjcloud.supermarket.dto.cgdd.CGPlanLinkQueryDTO; import com.bsd.pjcloud.supermarket.dto.cgplan.ErpCgPlanDTO; import com.bsd.pjcloud.supermarket.dto.inventoryrecords.*; @@ -33,8 +39,10 @@ import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.Operation; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -58,6 +66,7 @@ public class SmErpInventoryRecordsController { private final SmErpSpuService smErpSpuService; private final SmErpUnitService smErpUnitService; private final SmErpCgDdService smErpCgDdService; + private final SmErpStockService smErpStockService; /** * 分页查询 @@ -107,19 +116,62 @@ public class SmErpInventoryRecordsController { } @Operation(summary = "回调" , description = "回调" ) - @SysLog("采购订单回调" ) + @SysLog("订单回调" ) @PostMapping("/flow-callback") @Inner(value = false) @Transactional public R supermarketFlowCallback(@RequestBody ProcessNodeRecordParamDto processNodeRecordParamDto) { + String data = processNodeRecordParamDto.getData(); + System.out.println(data); + JSONObject jsonObject = JSON.parseObject(data); + String inventoryType = jsonObject.getString("inventoryType"); + if (StringUtils.isBlank(inventoryType)){ + return R.failed("缺失参数!"); + } String processInstanceId = processNodeRecordParamDto.getProcessInstanceId(); CheckStatusAndReasonVo checkReason = GetCheckReasonUtils.getCheckReason(processNodeRecordParamDto); + String checkStatus = checkReason.getCheckStatus(); + + if (checkStatus.equals(TaskCheckStatusEnum.RESULT.getCode())){ + //库存的入库出库操作 + SmErpInventoryRecordsEntity one = smErpInventoryRecordsService.getOne(new LambdaQueryWrapper() + .eq(SmErpInventoryRecordsEntity::getProcessInstanceId, processInstanceId)); + + Long id = one.getId(); + List cgPlanItemEntities = smErpInventoryRecordsItemService.list(new LambdaQueryWrapper() + .eq(SmErpInventoryRecordsItemEntity::getInventoryId, id)); + List updateStockDTOS = new ArrayList<>(); + for (SmErpInventoryRecordsItemEntity cgPlanItemEntity : cgPlanItemEntities) { + UpdateStockDTO updateStockDTO = new UpdateStockDTO(); + updateStockDTO.setId(cgPlanItemEntity.getErpSpuId()); + Double quantity = cgPlanItemEntity.getQuantity(); + String orderType = one.getOrderType(); + if (orderType.equals(OrderTypeEnum.RK.getType())){ + updateStockDTO.setIncrCount(quantity); + }else if (orderType.equals(OrderTypeEnum.CK.getType())){ + updateStockDTO.setIncrCount(-quantity); + }else if (orderType.equals(OrderTypeEnum.No.getType())){ + //无需更新库存 + }else { + throw new RuntimeException("订单类型错误"); + } + updateStockDTOS.add(updateStockDTO); + } + //审批入库 + //更新库存 + if (!CollectionUtils.isEmpty(updateStockDTOS)){ + smErpStockService.updateStock(updateStockDTOS); + } + } + + //更新库存记录审批结果 smErpInventoryRecordsService.update( new LambdaUpdateWrapper() .eq(SmErpInventoryRecordsEntity::getProcessInstanceId, processInstanceId) - .set(SmErpInventoryRecordsEntity::getCheckStatus, checkReason.getCheckStatus()) + .set(SmErpInventoryRecordsEntity::getCheckStatus, checkStatus) .set(SmErpInventoryRecordsEntity::getCheckReason, checkReason.getCheckReason()) ); + return R.ok(); } /** diff --git a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java index 37f2e1d28..a6395f9cb 100644 --- a/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java +++ b/pjcloud-supermarket/pjcloud-supermarket-biz/src/main/java/com/bsd/pjcloud/supermarket/service/impl/SmErpInventoryRecordsServiceImpl.java @@ -27,6 +27,7 @@ import com.bsd.pjcloud.supermarket.vo.cgplan.SmErpCgPlanItemVo; import com.bsd.pjcloud.supermarket.vo.cgplan.SmErpCgPlanVo; import com.bsd.pjcloud.supermarket.vo.inventoryrecord.*; import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -76,10 +77,15 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl processR = remoteFlowApiFlowService.getProcessByBusinessKey(SupermarketFlowConstant.SUPERMARKET_BHSQ_FLOW); + String inventoryType = inventoryRecordSaveDTO.getInventoryType(); + String processKey = getProcessKey(inventoryType); + R processR = remoteFlowApiFlowService.getProcessByBusinessKey(processKey); String flowId = processR.getData().getFlowId(); ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto(); processInstanceParamDto.setFlowId(flowId); + Map params = new HashMap<>(); + params.put("inventoryType",inventoryType); + processInstanceParamDto.setParamMap(params); R stringR = remoteFlowApiFlowService.startProcessInstance(processInstanceParamDto); String processInstanceId = stringR.getData(); smErpCgDdEntity.setProcessInstanceId(processInstanceId); @@ -90,34 +96,34 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl cgPlanItemEntities = BeanUtils.toBean(items, SmErpInventoryRecordsItemEntity.class); // int sum1 = cgPlanItemEntities.stream().mapToInt(SmErpInventoryRecordsItemEntity::getTotalAmount).sum(); - List updateStockDTOS = new ArrayList<>(); +// List updateStockDTOS = new ArrayList<>(); for (SmErpInventoryRecordsItemEntity cgPlanItemEntity : cgPlanItemEntities) { cgPlanItemEntity.setInventoryId(smErpCgDdEntity.getId()); cgPlanItemEntity.setDeptId(deptId); - UpdateStockDTO updateStockDTO = new UpdateStockDTO(); - updateStockDTO.setId(cgPlanItemEntity.getErpSpuId()); - Double quantity = cgPlanItemEntity.getQuantity(); +// UpdateStockDTO updateStockDTO = new UpdateStockDTO(); +// updateStockDTO.setId(cgPlanItemEntity.getErpSpuId()); +// Double quantity = cgPlanItemEntity.getQuantity(); String orderType = smErpCgDdEntity.getOrderType(); cgPlanItemEntity.setOrderType(orderType); - if (orderType.equals(OrderTypeEnum.RK.getType())){ - updateStockDTO.setIncrCount(quantity); - }else if (orderType.equals(OrderTypeEnum.CK.getType())){ - updateStockDTO.setIncrCount(-quantity); - }else if (orderType.equals(OrderTypeEnum.No.getType())){ - //无需更新库存 - }else { - throw new RuntimeException("订单类型错误"); - } +// if (orderType.equals(OrderTypeEnum.RK.getType())){ +// updateStockDTO.setIncrCount(quantity); +// }else if (orderType.equals(OrderTypeEnum.CK.getType())){ +// updateStockDTO.setIncrCount(-quantity); +// }else if (orderType.equals(OrderTypeEnum.No.getType())){ +// //无需更新库存 +// }else { +// throw new RuntimeException("订单类型错误"); +// } - updateStockDTOS.add(updateStockDTO); +// updateStockDTOS.add(updateStockDTO); } smErpInventoryRecordsItemMapper.insert(cgPlanItemEntities); - //todo 实际上应该审批后才会入库 - //更新库存 - if (!CollectionUtils.isEmpty(updateStockDTOS)){ - smErpStockService.updateStock(updateStockDTOS); - } +// //todo 实际上应该审批后才会入库 +// //更新库存 +// if (!CollectionUtils.isEmpty(updateStockDTOS)){ +// smErpStockService.updateStock(updateStockDTOS); +// } //更新已关联的采购,标记为已使用 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SmErpCgDdEntity::getCode, inventoryRecordSaveDTO.getInventoryCode()); @@ -127,6 +133,20 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl wrapper) { Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of());