完善超市审批流

This commit is contained in:
zjf committed 2025-03-18 17:35:42 +08:00
1 parent b134029e39
commit 48197ac8e2
4 files changed
+101 -22

No files matched your search

@@ -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";
}
@@ -80,6 +80,7 @@ public class InventoryRecordSaveDTO {
* 单据类型(字典inventory_type)采购入库、采购退货、盘点入库等
*/
@Schema(description="单据类型(字典inventory_type)采购入库、采购退货、盘点入库等")
@NotNull
private String inventoryType;
@@ -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<SmErpInventoryRecordsEntity>()
.eq(SmErpInventoryRecordsEntity::getProcessInstanceId, processInstanceId));
Long id = one.getId();
List<SmErpInventoryRecordsItemEntity> cgPlanItemEntities = smErpInventoryRecordsItemService.list(new LambdaQueryWrapper<SmErpInventoryRecordsItemEntity>()
.eq(SmErpInventoryRecordsItemEntity::getInventoryId, id));
List<UpdateStockDTO> 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<SmErpInventoryRecordsEntity>()
.eq(SmErpInventoryRecordsEntity::getProcessInstanceId, processInstanceId)
.set(SmErpInventoryRecordsEntity::getCheckStatus, checkReason.getCheckStatus())
.set(SmErpInventoryRecordsEntity::getCheckStatus, checkStatus)
.set(SmErpInventoryRecordsEntity::getCheckReason, checkReason.getCheckReason())
);
return R.ok();
}
/**
@@ -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<SmErpInventory
smErpCgDdEntity.setTotalAmount(sum);
//发起流程
R<Process> processR = remoteFlowApiFlowService.getProcessByBusinessKey(SupermarketFlowConstant.SUPERMARKET_BHSQ_FLOW);
String inventoryType = inventoryRecordSaveDTO.getInventoryType();
String processKey = getProcessKey(inventoryType);
R<Process> processR = remoteFlowApiFlowService.getProcessByBusinessKey(processKey);
String flowId = processR.getData().getFlowId();
ProcessInstanceParamDto processInstanceParamDto = new ProcessInstanceParamDto();
processInstanceParamDto.setFlowId(flowId);
Map<String,Object> params = new HashMap<>();
params.put("inventoryType",inventoryType);
processInstanceParamDto.setParamMap(params);
R<String> stringR = remoteFlowApiFlowService.startProcessInstance(processInstanceParamDto);
String processInstanceId = stringR.getData();
smErpCgDdEntity.setProcessInstanceId(processInstanceId);
@@ -90,34 +96,34 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
List<SmErpInventoryRecordsItemEntity> cgPlanItemEntities = BeanUtils.toBean(items, SmErpInventoryRecordsItemEntity.class);
// int sum1 = cgPlanItemEntities.stream().mapToInt(SmErpInventoryRecordsItemEntity::getTotalAmount).sum();
List<UpdateStockDTO> updateStockDTOS = new ArrayList<>();
// List<UpdateStockDTO> 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<SmErpCgDdEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SmErpCgDdEntity::getCode, inventoryRecordSaveDTO.getInventoryCode());
@@ -127,6 +133,20 @@ public class SmErpInventoryRecordsServiceImpl extends ServiceImpl<SmErpInventory
return insert;
}
private String getProcessKey(String inventoryType) {
switch (inventoryType) {
case "3":
return SupermarketFlowConstant.SUPERMARKET_CGRK_FLOW;
case "4":
return SupermarketFlowConstant.SUPERMARKET_CGTH_FLOW;
case "5":
return SupermarketFlowConstant.SUPERMARKET_LSCK_FLOW;
case "6":
return SupermarketFlowConstant.SUPERMARKET_LSTH_FLOW;
default:
throw new RuntimeException("未知的库存类型");
}
}
@Override
public Object pageScope(Page page, LambdaQueryWrapper<SmErpInventoryRecordsEntity> wrapper) {
Page pageData = baseMapper.selectPageByScope(page, wrapper, DataScope.of());