Merge remote-tracking branch '惠信/dev_zhangke' into develop

This commit is contained in:
曹鹏飞 2025-08-01 18:27:35 +08:00
commit 2c232359a3
3 changed files with 225 additions and 160 deletions

View File

@ -25,10 +25,9 @@ import org.springframework.web.client.RestTemplate;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import static cn.dev33.satoken.SaManager.log; import static cn.dev33.satoken.SaManager.log;
@ -74,22 +73,40 @@ public class NormalPGIControllerService {
@Resource @Resource
private StringRedisTemplate stringRedisTemplate; private StringRedisTemplate stringRedisTemplate;
/**
* 根据订单编号获取订单详情信息包括订单头信息和订单行项目信息
* <p>
* 该方法首先根据订单编号查询订单主表信息若不存在则返回 null
* 若存在则进一步查询订单行项目列表并结合 SAP 系统同步物料相关信息
* 最终组装成 PDAOrderVO 对象返回
*
* @param orderNo 订单编号用于查询订单主表和子表数据
* @return PDAOrderVO 包含订单头信息和行项目信息的视图对象若未找到对应订单则返回 null
* @throws Exception 查询或业务处理过程中可能抛出的异常
*/
public PDAOrderVO getOrderItemByOrderNo(@RequestParam String orderNo) throws Exception { public PDAOrderVO getOrderItemByOrderNo(@RequestParam String orderNo) throws Exception {
//return ApiResult.success(wmsSrmOrderItemService.getOrderItem(orderId)); // 根据订单编号查询订单主表信息
PDAOrderVO pdaOrderVO = new PDAOrderVO();
WmsSrmOrder order = wmsSrmOrderService.lambdaQuery().eq(WmsSrmOrder::getNoteNum, orderNo).one(); WmsSrmOrder order = wmsSrmOrderService.lambdaQuery().eq(WmsSrmOrder::getNoteNum, orderNo).one();
if (Objects.isNull(order)) if (Objects.isNull(order))
return null; return null;
PDAOrderVO pdaOrderVO = new PDAOrderVO();
// 设置订单头基本信息
pdaOrderVO.setNoteNum(order.getNoteNum()); pdaOrderVO.setNoteNum(order.getNoteNum());
pdaOrderVO.setSupplierNum(order.getSupplierNum()); pdaOrderVO.setSupplierNum(order.getSupplierNum());
pdaOrderVO.setSupplierName(order.getSupplierName()); pdaOrderVO.setSupplierName(order.getSupplierName());
List<WmsSrmOrderItem> orderItemList = wmsSrmOrderItemService.lambdaQuery().eq(WmsSrmOrderItem::getOrderId, order.getId()).list(); // 查询订单行项目列表
if (CollectionUtil.isNotEmpty(orderItemList)) { List<WmsSrmOrderItem> orderItemList = wmsSrmOrderItemService.lambdaQuery()
List<PDAOrderItemVO> orderItemVOList = new ArrayList<>(); .eq(WmsSrmOrderItem::getOrderId, order.getId())
.list();
if (CollectionUtil.isEmpty(orderItemList)) {
return pdaOrderVO;
}
// if (CollectionUtil.isNotEmpty(orderItemList)) {
List<PDAOrderItemVO> orderItemVOList = new ArrayList<>();
// 遍历订单行项目填充详细信息并从 SAP 获取补充数据
for (WmsSrmOrderItem item : orderItemList) { for (WmsSrmOrderItem item : orderItemList) {
PDAOrderItemVO itemVO = new PDAOrderItemVO(); PDAOrderItemVO itemVO = new PDAOrderItemVO();
itemVO.setId(item.getId()); itemVO.setId(item.getId());
@ -101,8 +118,7 @@ public class NormalPGIControllerService {
itemVO.setOrderQty(item.getOrderQty()); itemVO.setOrderQty(item.getOrderQty());
itemVO.setUomCode(item.getUomCode()); itemVO.setUomCode(item.getUomCode());
itemVO.setDeliveryQty(item.getDeliveryQty()); itemVO.setDeliveryQty(item.getDeliveryQty());
// SAP 系统获取物料相关信息
SAPSyncParamsDTO syncParamsDTO = sapCommonService.getMaterialInfoInOrder(item.getPoNum(), order.getSupplierNum(), item.getItemCode()); SAPSyncParamsDTO syncParamsDTO = sapCommonService.getMaterialInfoInOrder(item.getPoNum(), order.getSupplierNum(), item.getItemCode());
if (Objects.nonNull(syncParamsDTO)) { if (Objects.nonNull(syncParamsDTO)) {
itemVO.setItemName(syncParamsDTO.getMaktx()); itemVO.setItemName(syncParamsDTO.getMaktx());
@ -112,62 +128,67 @@ public class NormalPGIControllerService {
itemVO.setBinNos(syncParamsDTO.getBinNos()); itemVO.setBinNos(syncParamsDTO.getBinNos());
itemVO.setLbprt(syncParamsDTO.getLbprt()); itemVO.setLbprt(syncParamsDTO.getLbprt());
itemVO.setTransportNum(syncParamsDTO.getTransportNum()); itemVO.setTransportNum(syncParamsDTO.getTransportNum());
boolean isQuality ; // 判断是否质检
if (syncParamsDTO.getKzkri().equals("X")) boolean isQuality = "X".equals(syncParamsDTO.getKzkri());
isQuality = true;
else
isQuality = false;
itemVO.setIsQuality(isQuality); itemVO.setIsQuality(isQuality);
orderItemVOList.add(itemVO); orderItemVOList.add(itemVO);
} }
} }
// 设置订单行项目列表到返回对象中
pdaOrderVO.setOrderItemVOList(orderItemVOList); pdaOrderVO.setOrderItemVOList(orderItemVOList);
}
return pdaOrderVO; return pdaOrderVO;
} }
@Transactional
public void takeDelivery(List<SrmMaterialReceiptQO> request) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request)).throwMessage("收货参数为空");
List<WmsSrmMaterialReceipt> receipts = new ArrayList<>();
List<WmsSrmMaterialReceiptItem> receiptitems = new ArrayList<>();
List<WmsInTaskItem> tasks = new ArrayList<>();
List<SRMLineVOListItem> srmLineVOListItems = new ArrayList<>();
request.forEach(item -> { private void validateScanCodes(SrmMaterialReceiptQO item, SAPSyncParamsDTO materialInfoInOrder) {
SAPSyncParamsDTO materialInfoInOrder = null; String lbprt = materialInfoInOrder.getLbprt();
try {
materialInfoInOrder = sapCommonService.getMaterialInfoInOrder(item.getPoNum(), item.getSupplierNum(), item.getItemCode());
} catch (Exception e) {
log.error("获取物料信息失败", e);
throw new RuntimeException(e);
}
VUtil.trueThrowBusinessError(Objects.isNull(materialInfoInOrder)).throwMessage("无法获取到有效订单信息" + item.getPoNum());
//判断收货数量是否大于了未收数量
VUtil.trueThrowBusinessError(item.getReceiptNum().add(item.getCrossNumber()).compareTo(materialInfoInOrder.getTransportNum()) > 0).throwMessage("无法获取到有效订单信息" + item.getPoNum());
//判断序列号批次号是否规范 //判断序列号批次号是否规范
// 1 - 批次号为空序列号为空 // 1 - 批次号为空序列号为空
// 2 - 批次号必填序列号为空 // 2 - 批次号必填序列号为空
// 3 - 批次号为空序列号必填 // 3 - 批次号为空序列号必填
// 4 - 批次号必填序列号必填 // 4 - 批次号必填序列号必填
if ("2".equals(lbprt) || "4".equals(lbprt)) {
//批次號必填 VUtil.trueThrowBusinessError(
if (materialInfoInOrder.getLbprt().equals("2") || materialInfoInOrder.getLbprt().equals("4")) { CollectionUtil.isEmpty(item.getScanCodes()) ||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(item.getScanCodes()) || item.getScanCodes().stream().anyMatch(code -> StrUtil.isBlank(code.getBatchNumber()))).throwMessage("此物料[" + item.getItemCode() + "]必须填写批次号" + item.getPoNum()); item.getScanCodes().stream().anyMatch(code -> StrUtil.isBlank(code.getBatchNumber()))
).throwMessage("此物料[" + item.getItemCode() + "]必须填写批次号,订单号:" + item.getPoNum());
} }
//序列號必填 if ("3".equals(lbprt) || "4".equals(lbprt)) {
if (materialInfoInOrder.getLbprt().equals("3") || materialInfoInOrder.getLbprt().equals("4")) { VUtil.trueThrowBusinessError(
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(item.getScanCodes()) || item.getScanCodes().stream().anyMatch(code -> StrUtil.isBlank(code.getSerialNumber()))).throwMessage("此物料[" + item.getItemCode() + "]必须填写序列号" + item.getPoNum()); CollectionUtil.isEmpty(item.getScanCodes()) ||
item.getScanCodes().stream().anyMatch(code -> StrUtil.isBlank(code.getSerialNumber()))
).throwMessage("此物料[" + item.getItemCode() + "]必须填写序列号,订单号:" + item.getPoNum());
} }
List<String> serialNumbers = new ArrayList<>(); }
List<String> batchNumbers = new ArrayList<>();
boolean isQuality = materialInfoInOrder.getKzkri().equals("X") ? true : false; /**
if (!isQuality) { * 推送质检物料到SRM
*/
private void pushInspectionMaterialsToSRM(SrmMaterialReceiptQO receiptQO, List<SRMLineVOListItem> srmLineVOListItems) {
SRMInspectionInputDTO pushDto = new SRMInspectionInputDTO();
SRMInspectionContentDTO content = new SRMInspectionContentDTO();
content.setLineVOList(srmLineVOListItems);
content.setSupplierName(receiptQO.getSupplierName());
content.setSupplierNum(receiptQO.getSupplierNum());
content.setReceiveNum("ZJ-" + receiptQO.getNoteNum());
content.setReceiveType("BY_DELIVERY");
pushDto.setContent(content);
pushDto.setCode("SCAN_RCV_RECEIVE_TO_SRM");
pushInspectionMaterialsToSRM(pushDto);
}
/**
* 收货单质检单任务单组装
*/
private void generyReceipt(SrmMaterialReceiptQO item,
boolean isQuality,
SAPSyncParamsDTO materialInfoInOrder,
List<WmsSrmMaterialReceipt> receipts,
List<WmsSrmMaterialReceiptItem> receiptItems,
List<WmsInTaskItem> tasks,
List<SRMLineVOListItem> srmLineVOListItems
) {
// 保存收货信息 // 保存收货信息
WmsSrmMaterialReceipt receipt = new WmsSrmMaterialReceipt(); WmsSrmMaterialReceipt receipt = new WmsSrmMaterialReceipt();
Long receiptId = IdUtil.getSnowflakeNextId(); Long receiptId = IdUtil.getSnowflakeNextId();
@ -179,8 +200,6 @@ public class NormalPGIControllerService {
receipt.setCreateTime(LocalDateTime.now()); receipt.setCreateTime(LocalDateTime.now());
receipt.setCreateUserId(UserUtil.getUserId()); receipt.setCreateUserId(UserUtil.getUserId());
receipt.setCreateUserName(UserUtil.getUserName()); receipt.setCreateUserName(UserUtil.getUserName());
//条码内容 //条码内容
if (CollectionUtil.isNotEmpty(item.getScanCodes())) { if (CollectionUtil.isNotEmpty(item.getScanCodes())) {
item.getScanCodes().forEach(scanCode -> { item.getScanCodes().forEach(scanCode -> {
@ -196,17 +215,9 @@ public class NormalPGIControllerService {
receiptItem.setCreateTime(LocalDateTime.now()); receiptItem.setCreateTime(LocalDateTime.now());
receiptItem.setReceiptId(receiptId); receiptItem.setReceiptId(receiptId);
receiptItem.setId(IdUtil.getSnowflakeNextId()); receiptItem.setId(IdUtil.getSnowflakeNextId());
receiptitems.add(receiptItem); receiptItems.add(receiptItem);
if (!serialNumbers.contains(receiptItem.getSerialNumber())) {
serialNumbers.add(receiptItem.getSerialNumber()); //上架任务
}
if (!batchNumbers.contains(receiptItem.getBatchNumber())) {
batchNumbers.add(receiptItem.getBatchNumber());
}
});
}
receipts.add(receipt);
//生成上架任务
WmsInTaskItem taskItem = new WmsInTaskItem(); WmsInTaskItem taskItem = new WmsInTaskItem();
taskItem.setPoNum(item.getPoNum()) taskItem.setPoNum(item.getPoNum())
.setPoLineNumber(item.getPoLineNumber()) .setPoLineNumber(item.getPoLineNumber())
@ -225,13 +236,14 @@ public class NormalPGIControllerService {
.setFactory(materialInfoInOrder.getWerks()) .setFactory(materialInfoInOrder.getWerks())
.setDataStatus((short) 0) .setDataStatus((short) 0)
.setFailResult("") .setFailResult("")
.setSerialNumber(serialNumbers.isEmpty() ? "" : String.join(";", serialNumbers)) .setSerialNumber(scanCode.getSerialNumber())
.setBatchNumber(batchNumbers.isEmpty() ? "" : String.join(";", batchNumbers)) .setBatchNumber(scanCode.getBatchNumber())
.setInspectionQty(new BigDecimal(0.00)) .setInspectionQty(new BigDecimal(0.00))
.setSupplierNum(item.getSupplierNum()) .setSupplierNum(item.getSupplierNum())
.setInspectionOrder(""); .setInspectionOrder("");
tasks.add(taskItem); tasks.add(taskItem);
} else {
if (isQuality) {
//质检物料发送到质检单 //质检物料发送到质检单
SRMLineVOListItem srmItem = new SRMLineVOListItem(); SRMLineVOListItem srmItem = new SRMLineVOListItem();
srmItem.setItemCode(item.getItemCode()); srmItem.setItemCode(item.getItemCode());
@ -239,42 +251,56 @@ public class NormalPGIControllerService {
srmItem.setUnit(materialInfoInOrder.getMeins()); srmItem.setUnit(materialInfoInOrder.getMeins());
srmItem.setFactory(materialInfoInOrder.getWerks()); srmItem.setFactory(materialInfoInOrder.getWerks());
srmItem.setReceivedWarehouse(materialInfoInOrder.getWarehouseNo()); srmItem.setReceivedWarehouse(materialInfoInOrder.getWarehouseNo());
srmItem.setReceiveBatchNum(batchNumbers.isEmpty() ? "" : String.join(";", batchNumbers)); srmItem.setReceiveBatchNum(scanCode.getBatchNumber());
srmItem.setReceivedQty(item.getReceiptNum()); srmItem.setReceivedQty(item.getReceiptNum());
srmItem.setSerialNum(serialNumbers.isEmpty() ? "" : String.join(";", serialNumbers)); srmItem.setSerialNum(scanCode.getSerialNumber());
srmItem.setLineNumber(Integer.valueOf(item.getLineNumber())); srmItem.setLineNumber(Integer.valueOf(item.getLineNumber()));
srmItem.setNoteNum(item.getNoteNum()); srmItem.setNoteNum(item.getNoteNum());
srmItem.setReceivedDate(DateTime.now()); srmItem.setReceivedDate(DateTime.now());
srmItem.setInspectionFlag("Y"); srmItem.setInspectionFlag("Y");
srmLineVOListItems.add(srmItem); srmLineVOListItems.add(srmItem);
} }
}); });
}
receipts.add(receipt);
}
/**
* 保存送货信息
* */
public void takeDelivery(List<SrmMaterialReceiptQO> request) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request)).throwMessage("收货参数为空");
List<WmsSrmMaterialReceipt> receipts = new ArrayList<>();
List<WmsSrmMaterialReceiptItem> receiptitems = new ArrayList<>();
List<WmsInTaskItem> tasks = new ArrayList<>();
List<SRMLineVOListItem> srmLineVOListItems = new ArrayList<>();
request.forEach(item -> {
SAPSyncParamsDTO materialInfoInOrder = null;
try {
materialInfoInOrder = sapCommonService.getMaterialInfoInOrder(item.getPoNum(), item.getSupplierNum(), item.getItemCode());
} catch (Exception e) {
log.error("获取物料信息失败", e);
throw new RuntimeException(e);
}
VUtil.trueThrowBusinessError(Objects.isNull(materialInfoInOrder)).throwMessage("无法获取到有效订单信息" + item.getPoNum());
//数量验证(判断收货数量是否大于了未收数量)
VUtil.trueThrowBusinessError(item.getReceiptNum().add(item.getCrossNumber()).compareTo(materialInfoInOrder.getTransportNum()) > 0).throwMessage("无法获取到有效订单信息" + item.getPoNum());
//序列号和批次号验证
validateScanCodes(item, materialInfoInOrder);
boolean isQuality = materialInfoInOrder.getKzkri().equals("X") ? true : false;
// 生成相关单据
generyReceipt(item, isQuality, materialInfoInOrder, receipts, receiptitems, tasks, srmLineVOListItems);
});
//推送质检单
if (Objects.nonNull(srmLineVOListItems) && !srmLineVOListItems.isEmpty()) { if (Objects.nonNull(srmLineVOListItems) && !srmLineVOListItems.isEmpty()) {
SrmMaterialReceiptQO receiptQO = request.get(0); SrmMaterialReceiptQO receiptQO = request.get(0);
SRMInspectionInputDTO pushDto = new SRMInspectionInputDTO(); pushInspectionMaterialsToSRM(receiptQO, srmLineVOListItems);
SRMInspectionContentDTO content = new SRMInspectionContentDTO(); }
content.setLineVOList(srmLineVOListItems); //生成wms的单据
content.setSupplierName(receiptQO.getSupplierName()); wmsSrmMaterialReceiptService.generateReceiptInfo(receipts, receiptitems, tasks);
content.setSupplierNum(receiptQO.getSupplierNum());
content.setReceiveNum("ZJ-" + receiptQO.getNoteNum());
content.setReceiveType("BY_DELIVERY");
pushDto.setContent(content);
pushDto.setCode("SCAN_RCV_RECEIVE_TO_SRM");
pushInspectionMaterialsToSRM(pushDto);
} }
if (Objects.nonNull(receipts) && !receipts.isEmpty()) {
wmsSrmMaterialReceiptService.saveBatch(receipts);
}
if (Objects.nonNull(receipts) && !receipts.isEmpty()) {
wmsSrmMaterialReceiptItemService.saveBatch(receiptitems);
}
if (Objects.nonNull(receipts) && !receipts.isEmpty()) {
if (!taskService.generateTask(tasks, (short) 1))
log.error("收货单生成上架任务失败");
}
}
/** /**
* 将检验物料信息推送到SRM系统 * 将检验物料信息推送到SRM系统

View File

@ -1,7 +1,11 @@
package com.nflg.wms.repository.service; package com.nflg.wms.repository.service;
import com.nflg.wms.repository.entity.WmsInTaskItem;
import com.nflg.wms.repository.entity.WmsSrmMaterialReceipt; import com.nflg.wms.repository.entity.WmsSrmMaterialReceipt;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.nflg.wms.repository.entity.WmsSrmMaterialReceiptItem;
import java.util.List;
/** /**
* <p> * <p>
@ -13,4 +17,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface IWmsSrmMaterialReceiptService extends IService<WmsSrmMaterialReceipt> { public interface IWmsSrmMaterialReceiptService extends IService<WmsSrmMaterialReceipt> {
void generateReceiptInfo(List<WmsSrmMaterialReceipt> receipts,
List<WmsSrmMaterialReceiptItem> receiptitems,
List<WmsInTaskItem> tasks);
} }

View File

@ -1,10 +1,19 @@
package com.nflg.wms.repository.service.impl; package com.nflg.wms.repository.service.impl;
import com.nflg.wms.repository.entity.WmsInTaskItem;
import com.nflg.wms.repository.entity.WmsSrmMaterialReceipt; import com.nflg.wms.repository.entity.WmsSrmMaterialReceipt;
import com.nflg.wms.repository.entity.WmsSrmMaterialReceiptItem;
import com.nflg.wms.repository.mapper.WmsSrmMaterialReceiptMapper; import com.nflg.wms.repository.mapper.WmsSrmMaterialReceiptMapper;
import com.nflg.wms.repository.service.IWmsSrmMaterialReceiptService; import com.nflg.wms.repository.service.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Objects;
import static cn.dev33.satoken.SaManager.log;
/** /**
* <p> * <p>
@ -17,4 +26,27 @@ import org.springframework.stereotype.Service;
@Service @Service
public class WmsSrmMaterialReceiptServiceImpl extends ServiceImpl<WmsSrmMaterialReceiptMapper, WmsSrmMaterialReceipt> implements IWmsSrmMaterialReceiptService { public class WmsSrmMaterialReceiptServiceImpl extends ServiceImpl<WmsSrmMaterialReceiptMapper, WmsSrmMaterialReceipt> implements IWmsSrmMaterialReceiptService {
@Resource
private IWmsSrmMaterialReceiptItemService wmsSrmMaterialReceiptItemService;
@Resource
private IWmsSrmMaterialReceiptService wmsSrmMaterialReceiptService;
@Resource
private IWmsInTaskService taskService;
@Override
@Transactional
public void generateReceiptInfo(List<WmsSrmMaterialReceipt> receipts, List<WmsSrmMaterialReceiptItem> receiptitems, List<WmsInTaskItem> tasks) {
if (Objects.nonNull(receipts) && !receipts.isEmpty()) {
wmsSrmMaterialReceiptService.saveBatch(receipts);
}
if (Objects.nonNull(receipts) && !receipts.isEmpty()) {
wmsSrmMaterialReceiptItemService.saveBatch(receiptitems);
}
if (Objects.nonNull(receipts) && !receipts.isEmpty()) {
if (!taskService.generateTask(tasks, (short) 1))
log.error("收货单生成上架任务失败");
}
}
} }