Compare commits

...

4 Commits

Author SHA1 Message Date
zhangke 9d327f9ed1 新增无码收货和无码上架的功能 2025-09-21 23:06:27 +08:00
zhangke fc54a528e8 1、添加无码收货的,功改了一半 2025-09-21 18:13:39 +08:00
zhangke d8f4368d20 1、添加无码收货的,功改了一半 2025-09-19 21:25:14 +08:00
zhangke 8eb712741f 1、添加无码收货的,功改了一半 2025-09-19 21:23:19 +08:00
20 changed files with 816 additions and 82 deletions

View File

@ -8,14 +8,19 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.crypto.digest.MD5;
import com.nflg.wms.admin.pojo.document.SrmMaterialReceiptNoScanCodes;
import com.nflg.wms.admin.pojo.document.SrmMaterialReceiptScanCodes;
import com.nflg.wms.admin.pojo.dto.QCMaterialSyncDTO;
import com.nflg.wms.admin.pojo.dto.ZWM3A17DTO;
import com.nflg.wms.admin.pojo.dto.ZWM3A17Item1DTO;
import com.nflg.wms.admin.pojo.dto.ZWM3A17Item2DTO;
import com.nflg.wms.admin.repository.SrmMaterialReceiptNoScanCodesRepository;
import com.nflg.wms.admin.repository.SrmMaterialReceiptScanCodesRepository;
import com.nflg.wms.admin.service.NormalPGIControllerService;
import com.nflg.wms.admin.service.SAPCommonService;
import com.nflg.wms.admin.util.NoUtil;
import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.dto.*;
@ -67,6 +72,8 @@ public class NormalPGIController extends BaseController {
@Resource
private SrmMaterialReceiptScanCodesRepository srmMaterialReceiptScanCodesRepository;
@Resource
private SrmMaterialReceiptNoScanCodesRepository srmMaterialReceiptNoScanCodesRepository;
@Resource
private IWmsPoReceiptService wmsPoReceiptService;
@ -77,6 +84,7 @@ public class NormalPGIController extends BaseController {
/**
* 送货单列表
*
* @param request
* @return
*/
@ -88,6 +96,7 @@ public class NormalPGIController extends BaseController {
/**
* 送货单详情
*
* @param orderId 订单ID
* @return
*/
@ -104,6 +113,7 @@ public class NormalPGIController extends BaseController {
/**
* 获取扫码的详情信息
*
* @param orderItemId 订单项ID
* @return
*/
@ -118,6 +128,7 @@ public class NormalPGIController extends BaseController {
/**
* 扫描送货单号获取送货单详情PDA
*
* @param orderNo 送货单号
* @return
*/
@ -150,6 +161,7 @@ public class NormalPGIController extends BaseController {
.setCreateUserName(UserUtil.getUserName())
.setCreateUserId(UserUtil.getUserId())
.setFactoryCode(order.getIuCode())
.setSourceType(0)
.setIsCompleted(false);
WmsQcReceive wmsQcReceive = new WmsQcReceive()
@ -160,6 +172,7 @@ public class NormalPGIController extends BaseController {
.setCreateUserName(UserUtil.getUserName())
.setFactoryCode(order.getIuCode())
.setIsCheck(false)
.setSourceType(0)
.setCreateUserId(UserUtil.getUserId());
List<WmsPoReceiptItem> wmsPoReceiptItems = new ArrayList<>();
@ -218,6 +231,7 @@ public class NormalPGIController extends BaseController {
/**
* 普通物料的上架任务PDA
*
* @param orederNo 送货单号或是任务单号
* @return
*/
@ -235,7 +249,7 @@ public class NormalPGIController extends BaseController {
/**
* 上架任务详情PDA
* * @param id 任务ID
* */
*/
@GetMapping("PDA/task/item")
@ApiMark(moduleName = "送货单管理", apiName = "普通上架物料详情")
public ApiResult<List<PoReceiveTaskItemVO>> takeDeliveryItem(@Valid @RequestParam Long taskId) {
@ -251,6 +265,7 @@ public class NormalPGIController extends BaseController {
/**
* 采购物料入库确认PDA
*
* @param request
* @return
*/
@ -409,9 +424,14 @@ public class NormalPGIController extends BaseController {
.distinct()
.collect(Collectors.toList());
//重新读取SAP的接口更新物料信息(已收货数仓库信息储位信息 )
List<SAPSyncParamsDTO> sapSyncParamsDTOS = uniqueCombinations.stream()
.map(triple -> sapCommonService.getMaterialInfoInOrder(triple.getLeft(), triple.getMiddle(), triple.getRight()))
.collect(Collectors.toList());
List<SAPSyncParamsDTO> sapSyncParamsDTOS=new ArrayList<>();
uniqueCombinations.forEach(triple -> {
List<SAPSyncParamsDTO> items= sapCommonService.getMaterialInfoInOrder(triple.getLeft(), triple.getMiddle(), triple.getRight());
if(CollectionUtil.isNotEmpty( items))
{
sapSyncParamsDTOS.addAll(items);
}
});
return sapSyncParamsDTOS;
}
@ -628,39 +648,397 @@ public class NormalPGIController extends BaseController {
qcDto.getReceiptIds().add(qmsReceiptItem.getId());
}
/****
//一键收货
/**
* 一键收货查询
*
* @param request
* @return
*/
@PostMapping("getDeliveryByNoScan")
@ApiMark(moduleName = "送货单管理", apiName = "一键收货查询")
public ApiResult<List<BarcodeLessReceivingVO>> getDeliveryByNoScan(@Valid @RequestBody BarcodeLessReceivingSearchQO request) {
List<BarcodeLessReceivingVO> list = new ArrayList<>();
List<WmsSrmOrder> orders = wmsSrmOrderService.lambdaQuery()
.in(WmsSrmOrder::getId, request.getId())
.eq(WmsSrmOrder::getIsCompleted, false)
.list();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orders)).throwMessage("不存在未完成收货的物料!");
// 查找订单信息
List<WmsSrmOrderItem> items = wmsSrmOrderItemService.lambdaQuery()
.in(WmsSrmOrderItem::getOrderId, request.getId())
.apply(" deliveryQty>receiptQty")
.list();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(items)).throwMessage("不存在未收货的物料!");
for (WmsSrmOrderItem item : items) {
WmsSrmOrder order = orders.stream().filter(o -> o.getId().equals(item.getOrderId())).findFirst().orElse(null);
if (Objects.isNull(order)) {
continue;
}
BarcodeLessReceivingVO qo = new BarcodeLessReceivingVO();
qo.setId(item.getId());
qo.setOrderId(item.getOrderId());
qo.setPoNum(item.getPoNum());
qo.setPoLineNumber(item.getPoLineNumber());
qo.setLineNumber(item.getLineNumber());
qo.setNoteNum(item.getNoteNum());
qo.setItemCode(item.getItemCode());
qo.setUnRecieveQty(item.getOrderQty().subtract(item.getReceiptQty()));
qo.setDeliveryQty(item.getDeliveryQty());
qo.setSerialNumbers("");
qo.setIuCode(order.getIuCode());
qo.setSupplierNum(order.getSupplierNum());
qo.setReceiptQty(item.getReceiptQty());
// 获取当前订单的物料属性
SAPSyncParamsDTO materialInfoInOrder = sapCommonService.getMaterialInfoInOrder(item.getPoNum(),
order.getSupplierNum(),
item.getItemCode(), item.getPoLineNumber());
VUtil.trueThrowBusinessError(Objects.isNull(materialInfoInOrder)).throwMessage("当前物料信息【" + item.getItemCode() + "】,订单号【" + item.getPoNum() + "】,供应商【" + order.getSupplierName() + "】在SAP中搜索不到有效信息");
qo.setItemName(materialInfoInOrder.getMaktx());
qo.setUomCode(materialInfoInOrder.getMeins());
qo.setReceivedWarehouse(materialInfoInOrder.getWarehouseNo());
qo.setBatchNumber(NoUtil.getBatchNo(order.getSupplierNum()));
qo.setBinNos(materialInfoInOrder.getBinNos());
qo.setTransportNum(materialInfoInOrder.getTransportNum());
qo.setLbprt(materialInfoInOrder.getLbprt());
qo.setIsQuality(materialInfoInOrder.getKzkri().equals("X") ? true : false);
list.add(qo);
}
return ApiResult.success(list);
}
@PostMapping("takeDeliveryByNoScan")
@ApiMark(moduleName = "送货单管理", apiName = "一键收货")
public ApiResult<Void> takeDeliveryByNoScan(@Valid @RequestBody SrmMaterialReceiptQO request) {
private List<SrmMaterialReceiptNoScanCodes> validateNoScanCodes(BarcodeLessReceivingVO item,
SAPSyncParamsDTO materialInfoInOrder,
List<SrmMaterialReceiptScanCodes> scanCodeQOS) {
String lbprt = materialInfoInOrder.getLbprt();
//判断序列号批次号是否规范
// 1 - 批次号为空序列号为空
// 2 - 批次号必填序列号为空
// 3 - 批次号为空序列号必填
// 4 - 批次号必填序列号必填
if ("2".equals(lbprt) || "4".equals(lbprt)) {
VUtil.trueThrowBusinessError(StrUtil.isBlank(item.getBatchNumber())).throwMessage("此物料[" + item.getItemCode() + "]必须填写批次号,订单号:" + item.getPoNum());
WmsSrmOrder order = wmsSrmOrderService.lambdaQuery().eq(WmsSrmOrder::getNoteNum, request.getNoteNum()).one();
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("收货单不存在");
List<WmsSrmOrderItem> items = wmsSrmOrderItemService.lambdaQuery()
.eq(WmsSrmOrderItem::getOrderId, order.getId())
.list();
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(items)).throwMessage("收货单详情不存在");
List<SrmMaterialReceiptQO> requestList = new ArrayList<>();
items.forEach(item -> {
SrmMaterialReceiptQO qoItem = new SrmMaterialReceiptQO();
qoItem.setNoteNum(order.getNoteNum());
qoItem.setLineNumber(item.getLineNumber());
qoItem.setSupplierNum(order.getSupplierNum());
qoItem.setSupplierName(order.getSupplierName());
}
qoItem.setPoNum(item.getPoNum());
qoItem.setPoLineNumber(item.getPoLineNumber());
qoItem.setItemCode(item.getItemCode());
if ("3".equals(lbprt) || "4".equals(lbprt)) {
VUtil.trueThrowBusinessError(StrUtil.isBlank(item.getSerialNumbers())).throwMessage("此物料[" + item.getItemCode() + "]必须填写批次号,订单号:" + item.getPoNum());
// 判断序列号的数量是否OK
Integer iQty = Convert.toInt(Math.ceil(item.getUnRecieveQty().doubleValue()));
Integer serialNumberCount = item.getSerialNumbers().split(",").length;
VUtil.trueThrowBusinessError(serialNumberCount < iQty).throwMessage("此物料[" + item.getItemCode() + "]的序列号数量不可以小于【" + iQty + "】个,订单号:" + item.getPoNum());
}
List<SrmMaterialReceiptNoScanCodes> srmMaterialReceiptScanCodes = new ArrayList<>();
List<String> codeIds = new ArrayList<>();
if (StrUtil.isBlank(item.getSerialNumbers())) {
String codeContent = item.getItemCode() + "&" + item.getPoNum() + "&" + item.getPoLineNumber() + "&" + item.getLineNumber()
+ "&" + item.getNoteNum() + "&" + item.getIuCode() + "&" + item.getSupplierNum() + "&" + item.getUnRecieveQty()
+ "&" + item.getUomCode() + "&" + item.getReceivedWarehouse() + "&" + item.getBatchNumber()
+ "&" + item.getSerialNumbers();
String codeId = DigestUtil.md5Hex(codeContent);
srmMaterialReceiptScanCodes.add(new SrmMaterialReceiptNoScanCodes()
.setCodeId(codeId)
.setOrderNo(item.getNoteNum())
.setOrderItemId(item.getId())
.setCodeNum(item.getUnRecieveQty())
.setSerialNumbers(item.getSerialNumbers())
.setCodeContent(codeContent)
.setIsIntoStorage(false));
scanCodeQOS.add(new SrmMaterialReceiptScanCodes()
.setCodeId(codeId)
.setOrderNo(item.getNoteNum())
.setOrderItemId(item.getId())
.setIsIntoStorage(false)
.setCodeNum(item.getUnRecieveQty())
.setBatchNumber(item.getBatchNumber())
.setSerialNumbers(item.getSerialNumbers())
.setCodeContent(codeContent)
);
codeIds.add(codeId);
// 21602
} else {
String[] serialNumbers = item.getSerialNumbers().split(",");
for (int i = 0; i < serialNumbers.length; i++) {
String codeContent = item.getItemCode() + "&" + item.getPoNum() + "&" + item.getPoLineNumber()
+ "&" + item.getLineNumber()
+ "&" + item.getNoteNum() + "&" + item.getIuCode() + "&" + item.getSupplierNum() + "&1"
+ "&" + item.getUomCode() + "&" + item.getReceivedWarehouse() + "&" + item.getBatchNumber()
+ "&" + serialNumbers[i];
String codeId = DigestUtil.md5Hex(codeContent);
srmMaterialReceiptScanCodes.add(new SrmMaterialReceiptNoScanCodes()
.setCodeId(codeId)
.setOrderNo(item.getNoteNum())
.setOrderItemId(item.getId())
.setCodeNum(new BigDecimal(1))
.setSerialNumbers(serialNumbers[i])
.setCodeContent(codeContent)
.setIsIntoStorage(false));
scanCodeQOS.add(new SrmMaterialReceiptScanCodes()
.setCodeId(codeId)
.setOrderNo(item.getNoteNum())
.setOrderItemId(item.getId())
.setIsIntoStorage(false)
.setCodeNum(new BigDecimal(1))
.setBatchNumber(item.getBatchNumber())
.setSerialNumbers(serialNumbers[i])
.setCodeContent(codeContent)
);
codeIds.add(codeId);
}
}
//查看是否有重复的条码
List<SrmMaterialReceiptNoScanCodes> existingCodes = srmMaterialReceiptNoScanCodesRepository.findByCodeIdIn(codeIds);
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(existingCodes)).throwMessage("存在已使用的条码,不能重复使用");
return srmMaterialReceiptScanCodes;
}
@PostMapping("takeDeliveryByNoScan")
@ApiMark(moduleName = "送货单管理", apiName = "一键收货")
public ApiResult<Void> takeDeliveryByNoScan(@Valid @RequestBody List<BarcodeLessReceivingVO> request) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request)).throwMessage("收货参数为空");
// 获取到多个收货单
List<String> orderNos = request.stream().map(BarcodeLessReceivingVO::getNoteNum).distinct().collect(Collectors.toList());
List<WmsSrmOrder> orders = wmsSrmOrderService.lambdaQuery().in(WmsSrmOrder::getNoteNum, orderNos)
.eq(WmsSrmOrder::getIsCompleted, false).list();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orders)).throwMessage("无效的送货单");
List<WmsPoReceipt> wmsPoReceipts = new ArrayList<>();
List<WmsQcReceive> wmsQcReceives = new ArrayList<>();
List<WmsPoReceiptItem> wmsPoReceiptItems = new ArrayList<>();
List<WmsQcReceiveItem> wmsQcReceiveItems = new ArrayList<>();
List<QCMaterialSyncDTO> qcMaterialSyncDTOS = new ArrayList<>();
List<SrmMaterialReceiptNoScanCodes> codes = new ArrayList<>();
List<Long> orderIds = new ArrayList<>();
for (WmsSrmOrder order : orders) {
orderIds.add(order.getId());
WmsPoReceipt wmsPoReceipt = new WmsPoReceipt()
.setCreateTime(LocalDateTime.now())
.setId(IdUtil.getSnowflakeNextId())
.setOrderNo(order.getNoteNum())
.setCreateUserName(UserUtil.getUserName())
.setCreateUserId(UserUtil.getUserId())
.setFactoryCode(order.getIuCode())
.setSourceType(1)
.setIsCompleted(false);
wmsPoReceipts.add(wmsPoReceipt);
WmsQcReceive wmsQcReceive = new WmsQcReceive()
.setCreateTime(LocalDateTime.now())
.setId(IdUtil.getSnowflakeNextId())
.setIsCompleted((short) 0)
.setOrderNo(order.getNoteNum())
.setCreateUserName(UserUtil.getUserName())
.setFactoryCode(order.getIuCode())
.setIsCheck(false)
.setSourceType(1)
.setCreateUserId(UserUtil.getUserId());
wmsQcReceives.add(wmsQcReceive);
}
for (BarcodeLessReceivingVO item : request) {
if (item.getUnRecieveQty().equals(BigDecimal.ZERO)) {
continue;
}
SAPSyncParamsDTO materialInfoInOrder = sapCommonService.getMaterialInfoInOrder(item.getPoNum(),
item.getSupplierNum(),
item.getItemCode(), item.getPoLineNumber());
VUtil.trueThrowBusinessError(item.getUnRecieveQty().compareTo(materialInfoInOrder.getTransportNum()) > 0)
.throwMessage("物料收货数量[" + item.getUnRecieveQty() + "]大于了未收数量[" + materialInfoInOrder.getTransportNum() + "],订单号:" + item.getPoNum());
//序列号和批次号验证以及条码信息的组装
List<SrmMaterialReceiptScanCodes> scanCodeQOS = new ArrayList<>();
List<SrmMaterialReceiptNoScanCodes> itemCodes = validateNoScanCodes(item, materialInfoInOrder, scanCodeQOS);
if (CollectionUtil.isNotEmpty(itemCodes)) {
codes.addAll(itemCodes);
}
WmsSrmOrder order = orders.stream().filter(it -> it.getNoteNum().equals(item.getNoteNum()))
.findFirst().orElse(null);
if (Objects.isNull(order)) {
continue;
}
WmsQcReceive wmsQcReceive = wmsQcReceives.stream().filter(it -> it.getOrderNo().equals(item.getNoteNum()))
.findFirst().orElse(null);
//判断是否为质检物料
boolean isQuality = materialInfoInOrder.getKzkri().equals("X");
SrmMaterialReceiptQO materialSyncDTO = new SrmMaterialReceiptQO()
.setId(item.getId())
.setNoteNum(item.getNoteNum())
.setLineNumber(item.getLineNumber())
.setPoNum(item.getPoNum())
.setPoLineNumber(item.getPoLineNumber())
.setItemCode(item.getItemCode())
.setReceiptNum(item.getUnRecieveQty());
// 如果是质检单
if (isQuality) {
setQcMaterialSyncDto(qcMaterialSyncDTOS, materialSyncDTO, order, scanCodeQOS, materialInfoInOrder, wmsQcReceiveItems, wmsQcReceive.getId());
} else {
WmsPoReceipt wmsPoReceipt = wmsPoReceipts.stream().filter(it -> it.getOrderNo().equals(item.getNoteNum()))
.findFirst().orElse(null);
if (Objects.isNull(wmsPoReceipt)) {
continue;
}
setPoReceive(materialSyncDTO, wmsPoReceiptItems, wmsPoReceipt.getId(), materialInfoInOrder);
}
}
// 盘点条码是否重复
Map<String, Long> duplicateCodes = codes.stream()
.collect(Collectors.groupingBy(
SrmMaterialReceiptNoScanCodes::getCodeId,
Collectors.counting()
))
.entrySet()
.stream()
.filter(entry -> entry.getValue() > 1)
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue
));
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(duplicateCodes)).throwMessage("存在重复条码");
normalPGIControllerService.takeNoScanDelivery(wmsPoReceipts, wmsQcReceives, wmsPoReceiptItems, wmsQcReceiveItems, codes, qcMaterialSyncDTOS, orderIds);
return ApiResult.success();
}
/**
* 采购物料入库确认无码
*
* @param request
* @return
*/
@PostMapping("unscan/task/confirm")
@ApiMark(moduleName = "送货单管理", apiName = "普通物料任务上架确认")
public ApiResult<Void> takeDeliveryConfirm(@Valid @RequestBody ReceiveQO request) {
WmsPoReceipt wmsPoReceipt=wmsPoReceiptService.getById(request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(wmsPoReceipt)).throwMessage("无此任务");
VUtil.trueThrowBusinessError(!wmsPoReceipt.getSourceType().equals(1)).throwMessage("不属于无码收货的采购单");
//首先判断是否已经确认
VUtil.trueThrowBusinessError(Objects.isNull(wmsPoReceipt)).throwMessage("收货单不存在");
VUtil.trueThrowBusinessError(Objects.equals(wmsPoReceipt.getIsCompleted(), true)).throwMessage("此任务已入库");
List<WmsPoReceiptItem> wmsPoReceiptItems = wmsPoReceiptItemService.lambdaQuery()
.eq(WmsPoReceiptItem::getReceiveId, wmsPoReceipt.getId())
.list();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(wmsPoReceiptItems)).throwMessage("获取入库详情失败");
List<WmsPoReceiptItem> receiptItems = new ArrayList<>();
List<StorageLocationDTO> storageLocationDTOS = new ArrayList<>();
List<InventoryDTO> inventories = new ArrayList<>();
List<ZWM3A17DTO> zwm3A17DTOS = new ArrayList<>();
List<SrmMaterialReceiptNoScanCodes> scanCodes = new ArrayList<>();
for (WmsPoReceiptItem item : wmsPoReceiptItems) {
item.setCrossQty(new BigDecimal(0));
item.setReceivedWarehouse(item.getReceivedWarehouse());
item.setInQty(item.getReceiptNum());
item.setUpdateTime(LocalDateTime.now());
item.setUpdateUserId(UserUtil.getUserId());
item.setUpdateUserName(UserUtil.getUserName());
receiptItems.add(item);
// SAP 和条码处理
//传入SAP的信息
ZWM3A17DTO zwm3A17DTO = zwm3A17DTOS.stream()
.filter(zwm3A17DTO1 -> zwm3A17DTO1.getEbeln().equals(item.getPoNum()))
.findFirst()
.orElse(null);
if (Objects.isNull(zwm3A17DTO)) {
zwm3A17DTO = new ZWM3A17DTO()
.setEbeln(item.getPoNum())
.setUsnam(UserUtil.getUserName())
.setItem1(new ArrayList<>())
.setItem2(new ArrayList<>());
zwm3A17DTOS.add(zwm3A17DTO);
}
List<ZWM3A17Item1DTO> item1 = zwm3A17DTO.getItem1();
List<ZWM3A17Item2DTO> item2 = zwm3A17DTO.getItem2();
List<SrmMaterialReceiptNoScanCodes> scanCode = srmMaterialReceiptNoScanCodesRepository.findByOrderItemId(item.getOrderItemId());
if (CollectionUtil.isNotEmpty(scanCode)) {
scanCode = scanCode.stream().filter(code -> code.getIsIntoStorage() == false)
.toList();
}
if (CollectionUtil.isNotEmpty(scanCode)) {
scanCode.forEach(code -> {
// 库存
InventoryDTO inventoryDTO = inventories.stream()
.filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode())
&& inventoriesDTO.getBatchNumber().equals(code.getBatchNumber())
&& inventoriesDTO.getFactoryNo().equals(wmsPoReceipt.getFactoryCode())
&& inventoriesDTO.getWarehouseNo().equals(item.getReceivedWarehouse())
).findFirst().orElse(null);
if (Objects.isNull(inventoryDTO)) {
inventoryDTO = new InventoryDTO()
.setMaterialNo(item.getItemCode())
.setFactoryNo(wmsPoReceipt.getFactoryCode())
.setWarehouseNo(item.getReceivedWarehouse())
.setBatchNumber(code.getBatchNumber())
.setNum(code.getCodeNum());
inventories.add(inventoryDTO);
} else {
inventoryDTO.setNum(inventoryDTO.getNum().add(code.getCodeNum()));
}
ZWM3A17Item1DTO ietm1Dto = item1.stream()
.filter(dto1 ->
dto1.getEBELP().equals(item.getPoLineNumber())
&& dto1.getMATNR().equals(item.getItemCode())
&& dto1.getMeins().equals(item.getUomCode())
&& dto1.getCHARG().equals(code.getBatchNumber())
&& dto1.getWERKS().equals(wmsPoReceipt.getFactoryCode())
&& dto1.getLGORT().equals(item.getReceivedWarehouse())
).findFirst().orElse(null);
if (Objects.isNull(ietm1Dto)) {
item1.add(new ZWM3A17Item1DTO()
.setEBELP(item.getPoLineNumber())
.setMATNR(item.getItemCode())
.setERFMG(code.getCodeNum())
.setMEINS(item.getUomCode())
.setCHARG(code.getBatchNumber())
.setWERKS(wmsPoReceipt.getFactoryCode())
.setLGORT(item.getReceivedWarehouse())
.setKZKRI("")
);
} else {
ietm1Dto.setERFMG(ietm1Dto.getERFMG().add(code.getCodeNum()));
}
item2.add(new ZWM3A17Item2DTO()
.setEBELP(item.getPoLineNumber())
.setFLAG("")
.setSERNR(code.getSerialNumbers()));
scanCodes.add(code);
});
} else {
// 库存
InventoryDTO inventoryDTO = new InventoryDTO()
.setMaterialNo(item.getItemCode())
.setFactoryNo(wmsPoReceipt.getFactoryCode())
.setWarehouseNo(item.getReceivedWarehouse())
.setBatchNumber("")
.setNum(item.getInQty());
inventories.add(inventoryDTO);
item1.add(new ZWM3A17Item1DTO()
.setEBELP(item.getPoLineNumber())
.setMATNR(item.getItemCode())
.setERFMG(item.getInQty())
.setMEINS(item.getUomCode())
.setCHARG("")
.setWERKS(wmsPoReceipt.getFactoryCode())
.setLGORT(item.getReceivedWarehouse())
.setKZKRI("")
);
}
}
normalPGIControllerService.takeDeliveryConfirmUnScan(receiptItems, storageLocationDTOS, inventories, zwm3A17DTOS, request.getId(), scanCodes);
// normalPGIControllerService.takeDeliveryConfirm(receiptItems, storageLocationDTOS, inventories, zwm3A17DTOS, request.getTaskId(), scanCodes);
return ApiResult.success();
}
qoItem.setOrderItemId(item.getId());
qoItem.setReceiptNum(item.getDeliveryQty());
qoItem.setCrossNumber(new BigDecimal(0.00));
requestList.add(qoItem);
});
//获取到订单信息
normalPGIControllerService.takeDelivery(requestList);
return ApiResult.success();
}
*/
}

View File

@ -12,14 +12,8 @@ import com.nflg.wms.common.pojo.ApiResult;
import com.nflg.wms.common.pojo.PageData;
import com.nflg.wms.common.pojo.dto.InventoryDTO;
import com.nflg.wms.common.pojo.dto.StorageLocationDTO;
import com.nflg.wms.common.pojo.qo.DeliverNormalOrderSearchQO;
import com.nflg.wms.common.pojo.qo.NomalQMOrderSearchQO;
import com.nflg.wms.common.pojo.qo.PoReceiveTaskItemConfirmQO;
import com.nflg.wms.common.pojo.qo.QCReceiveTaskConfirmQO;
import com.nflg.wms.common.pojo.vo.DeliverNormalOrderVO;
import com.nflg.wms.common.pojo.vo.QCTaskItemVO;
import com.nflg.wms.common.pojo.vo.QCTaskVO;
import com.nflg.wms.common.pojo.vo.QualityInspectionVO;
import com.nflg.wms.common.pojo.qo.*;
import com.nflg.wms.common.pojo.vo.*;
import com.nflg.wms.common.util.UserUtil;
import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.*;
@ -66,6 +60,7 @@ public class NormalQMController extends BaseController {
/**
* 获取SRM推送过来的质检单信息
*
* @param request
* @return
*/
@ -77,6 +72,7 @@ public class NormalQMController extends BaseController {
/**
* 质检物料上架任务PDA
*
* @param orderNo 送货单号或任务单号
* @return
*/
@ -89,8 +85,9 @@ public class NormalQMController extends BaseController {
/**
* 质检物料上架物料详情
*
* @param taskId 任务ID
* **/
**/
@GetMapping("PDA/task/item")
@ApiMark(moduleName = "质检物料管理", apiName = "质检任务上架物料详情")
public ApiResult<List<QCTaskItemVO>> getTaskItem(@Valid @NotNull @RequestParam Long taskId) {
@ -100,8 +97,9 @@ public class NormalQMController extends BaseController {
/**
* 质检物料上架任务确认
*
* @param request
* **/
**/
@PostMapping("PDA/task/confirm")
@ApiMark(moduleName = "质检物料管理", apiName = "质检任务上架确认")
public ApiResult<Void> confirm(@Valid @RequestBody List<QCReceiveTaskConfirmQO> request) {
@ -255,6 +253,46 @@ public class NormalQMController extends BaseController {
}
/**
* 无码质检任务上架确认
*
* @param request 任务ID
* @return
*/
@PostMapping("unscan/task/confirm")
@ApiMark(moduleName = "质检物料管理", apiName = "无码质检任务上架确认")
public ApiResult<Void> confirmNoScan(@Valid @RequestBody ReceiveQO request) {
WmsQcReceive qcReceive = wmsQcReceiveService.getById( request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(qcReceive)).throwMessage("无此任务");
VUtil.trueThrowBusinessError(!qcReceive.getSourceType().equals(1)).throwMessage("不属于无码收货的采购单");
//根据ID获取到任务单
List<QCReceiveTaskConfirmQO> taskConfirmQOS = new ArrayList<>();
List<QCTaskItemVO> tasks = normalQMControllerService.getTaskItem(qcReceive.getId());
if (CollectionUtil.isNotEmpty(tasks)) {
for (QCTaskItemVO item : tasks) {
QCReceiveTaskConfirmQO taskConfirmQO = new QCReceiveTaskConfirmQO();
taskConfirmQO.setId(qcReceive.getId())
.setFactoryCode(qcReceive.getFactoryCode())
.setPoNum(qcReceive.getOrderNo())
.setStorageLocation(item.getStorageLocation())
.setReceivedWarehouse(item.getReceivedWarehouse())
.setStorageLocationNew(item.getStorageLocation())
.setCrossQty(new BigDecimal(0));
List<Long> qcIdList = item.getScanCodes().stream()
.map(QCTaskItemScanCodesVO::getId)
.collect(Collectors.toList());
taskConfirmQO.setQcIdList(qcIdList);
taskConfirmQOS.add(taskConfirmQO);
}
}
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(taskConfirmQOS)).throwMessage("无效的上架任务");
return confirm(taskConfirmQOS);
}
private void set3A18DTOS(ZWM3A18DTO zwm3A18DTO,
WmsSrmQualityInspection code,
QCReceiveTaskConfirmQO item) {

View File

@ -0,0 +1,65 @@
package com.nflg.wms.admin.pojo.document;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.math.BigDecimal;
@Data
@Accessors(chain = true)
@Document(collection = "SrmMaterialReceiptNoScanCodes")
public class SrmMaterialReceiptNoScanCodes {
@Id
private String id;
/**
* 收货单的单号
*/
private String orderNo;
/***
* 收货单的单行ID号
*
*/
private Long orderItemId;
/**
* 二维码编号
*/
private String codeId;
/**
* 数量
*/
@NotNull
private BigDecimal codeNum;
/**
* 批次号
*/
private String batchNumber;
/**
* 序列号
*/
private String serialNumbers;
/**
* 二维码内容
*/
private String codeContent;
private String key;
public String getKey() {
return this.batchNumber + ";" + this.serialNumbers;
}
/**
* 是否已上架
*/
private Boolean IsIntoStorage;
}

View File

@ -59,7 +59,8 @@ public class SrmMaterialReceiptScanCodes {
}
/**
* 是否
* 是否已上架
*/
private Boolean IsIntoStorage;
}

View File

@ -0,0 +1,21 @@
package com.nflg.wms.admin.repository;
import com.nflg.wms.admin.pojo.document.SrmMaterialReceiptNoScanCodes;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.mongodb.repository.Update;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface SrmMaterialReceiptNoScanCodesRepository
extends MongoRepository<SrmMaterialReceiptNoScanCodes, String> {
List<SrmMaterialReceiptNoScanCodes> findByOrderItemId(Long orderItemId);
List<SrmMaterialReceiptNoScanCodes> findByCodeIdIn(List<String> attr0);
@Query("{ 'codeId' : { $in : ?0 } }")
@Update("{ $set : { 'isIntoStorage' : ?1 } }")
void updateIsIntoStorage(List<String> codeIds, boolean isIntoStorage);
}

View File

@ -9,7 +9,8 @@ import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface SrmMaterialReceiptScanCodesRepository extends MongoRepository<SrmMaterialReceiptScanCodes, String> {
public interface SrmMaterialReceiptScanCodesRepository
extends MongoRepository<SrmMaterialReceiptScanCodes, String> {
List<SrmMaterialReceiptScanCodes> findByOrderItemId(Long orderItemId);
List<SrmMaterialReceiptScanCodes> findByCodeIdIn(List<String> attr0);

View File

@ -4,9 +4,11 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.nflg.wms.admin.pojo.document.SrmMaterialReceiptNoScanCodes;
import com.nflg.wms.admin.pojo.document.SrmMaterialReceiptScanCodes;
import com.nflg.wms.admin.pojo.dto.QCMaterialSyncDTO;
import com.nflg.wms.admin.pojo.dto.ZWM3A17DTO;
import com.nflg.wms.admin.repository.SrmMaterialReceiptNoScanCodesRepository;
import com.nflg.wms.admin.repository.SrmMaterialReceiptScanCodesRepository;
import com.nflg.wms.common.pojo.dto.*;
import com.nflg.wms.common.pojo.qo.PDAScanCodeQO;
@ -18,6 +20,7 @@ import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.*;
import com.nflg.wms.repository.service.*;
import jakarta.annotation.Resource;
import jakarta.validation.constraints.NotNull;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.data.redis.core.StringRedisTemplate;
@ -80,7 +83,7 @@ public class NormalPGIControllerService {
private StringRedisTemplate stringRedisTemplate;
@Resource
private IWmsSrmMaterialQmsReceiptItemService wmsSrmMaterialQmsReceiptItemService;
private SrmMaterialReceiptNoScanCodesRepository srmMaterialReceiptNoCodesRepository;
@Resource
private SrmMaterialReceiptScanCodesRepository srmMaterialReceiptCanCodesRepository;
@Resource
@ -142,7 +145,8 @@ public class NormalPGIControllerService {
itemVO.setLineNumber(item.getLineNumber());
itemVO.setDeliveryQty(item.getDeliveryQty().subtract(item.getReceiptQty()));
// SAP 系统获取物料相关信息
SAPSyncParamsDTO syncParamsDTO = sapCommonService.getMaterialInfoInOrder(item.getPoNum(), order.getSupplierNum(), item.getItemCode());
SAPSyncParamsDTO syncParamsDTO = sapCommonService.getMaterialInfoInOrder(item.getPoNum(),
order.getSupplierNum(), item.getItemCode(), item.getPoLineNumber());
if (Objects.nonNull(syncParamsDTO)) {
itemVO.setItemName(syncParamsDTO.getMaktx());
itemVO.setUomCode(syncParamsDTO.getMeins());
@ -246,10 +250,6 @@ public class NormalPGIControllerService {
.set(WmsSrmOrder::getIsCompleted, true)
.eq(WmsSrmOrder::getId, orderId).update();
}
// 保存扫描码
if (CollectionUtil.isNotEmpty(srmMaterialReceiptScanCodes)) {
srmMaterialReceiptCanCodesRepository.insert(srmMaterialReceiptScanCodes);
}
if (CollectionUtil.isNotEmpty(qcMaterialSyncDTOS)) {
for (QCMaterialSyncDTO dto : qcMaterialSyncDTOS) {
//导入SAP
@ -270,6 +270,11 @@ public class NormalPGIControllerService {
}
}
}
// 保存扫描码
if (CollectionUtil.isNotEmpty(srmMaterialReceiptScanCodes)) {
srmMaterialReceiptCanCodesRepository.insert(srmMaterialReceiptScanCodes);
}
}
@Transactional
@ -323,12 +328,133 @@ public class NormalPGIControllerService {
//修改二维码的入库状态
if (CollectionUtil.isNotEmpty(scanCodes)) {
List<String> codeIds = scanCodes.stream().map(SrmMaterialReceiptScanCodes::getId).toList();
srmMaterialReceiptCanCodesRepository.updateIsIntoStorage(codeIds, true);
srmMaterialReceiptCanCodesRepository.updateIsIntoStorage(codeIds, true);
}
}
public void takeNoScanDelivery(List<WmsPoReceipt> wmsPoReceipts, List<WmsQcReceive> wmsQcReceives
, List<WmsPoReceiptItem> wmsPoReceiptItems
, List<WmsQcReceiveItem> wmsQcReceiveItems, List<SrmMaterialReceiptNoScanCodes> codes
, List<QCMaterialSyncDTO> qcMaterialSyncDTOS
, List<Long> orderIds
) {
//生成普通物料的入库待检单并修改送货单相应的收货数量
if (CollectionUtil.isNotEmpty(wmsPoReceipts)) {
for (WmsPoReceipt wmsPoReceipt : wmsPoReceipts) {
wmsPoReceipt.setInNum(basdeSerialNumberControllerService.generateSerialNumber(2));
List<WmsPoReceiptItem> items = wmsPoReceiptItems.stream().filter(q -> q.getNoteNum().equals(wmsPoReceipt.getOrderNo()))
.toList();
if (CollectionUtil.isNotEmpty(items)) {
wmsPoReceiptService.save(wmsPoReceipt);
wmsPoReceiptItemService.saveBatch(items);
}
}
}
//生成质检物料的入库待检单并修改送货单相应的收货数量
if (CollectionUtil.isNotEmpty(wmsQcReceives)) {
for (WmsQcReceive wmsQcReceive : wmsQcReceives) {
wmsQcReceive.setInNo(basdeSerialNumberControllerService.generateSerialNumber(1));
List<WmsQcReceiveItem> items = wmsQcReceiveItems.stream().filter(q -> q.getNoteNum().equals(wmsQcReceive.getOrderNo()))
.toList();
if (CollectionUtil.isNotEmpty(items)) {
wmsQcReceiveService.save(wmsQcReceive);
wmsQcReceiveItemService.saveBatch(items);
}
}
}
for (Long orderId : orderIds) {
//更新收货单的完结状态
List<WmsSrmOrder> orders = wmsSrmOrderService.getUnCompletedItem(orderId);
if (CollectionUtil.isEmpty(orders)) {
wmsSrmOrderService.lambdaUpdate()
.set(WmsSrmOrder::getIsCompleted, true)
.eq(WmsSrmOrder::getId, orderId).update();
}
}
if (CollectionUtil.isNotEmpty(qcMaterialSyncDTOS)) {
for (QCMaterialSyncDTO dto : qcMaterialSyncDTOS) {
//导入SAP
Pair<Pair<String, String>, Pair<String, String>> zwm3A17ReturnDTO = sapService.zwm3a17(dto.getZwm3A17DTO());
//推入srm
SRMInspectionContentDTO content = dto.getPushDto().getContent();
content.setReceiveNum(zwm3A17ReturnDTO.getValue().getKey());
pushInspectionMaterialsToSRM(dto.getPushDto());
//修改收货单的物料凭证和年度物料凭证
List<Long> ids = dto.getReceiptIds();
//修改收货单的物料凭证和年度物料凭证
if (CollectionUtil.isNotEmpty(ids)) {
wmsQcReceiveItemService.lambdaUpdate()
.set(WmsQcReceiveItem::getMaterialDoc, zwm3A17ReturnDTO.getValue().getKey())
.set(WmsQcReceiveItem::getMaterialDocYear, zwm3A17ReturnDTO.getValue().getValue())
.in(WmsQcReceiveItem::getId, ids)
.update();
}
}
}
// 保存扫描码
if (CollectionUtil.isNotEmpty(codes)) {
srmMaterialReceiptNoCodesRepository.insert(codes);
}
}
public void takeDeliveryConfirmUnScan(List<WmsPoReceiptItem> receiptItems, List<StorageLocationDTO> storageLocationDTOS,
List<InventoryDTO> inventories, List<ZWM3A17DTO> zwm3A17DTOS, Long id,
List<SrmMaterialReceiptNoScanCodes> scanCodes) {
if (CollectionUtil.isNotEmpty(receiptItems)) {
wmsPoReceiptItemService.updateBatchById(receiptItems);
}
//修改任务的状态
List<Long> ids = wmsPoReceiptService.checkItemStatus(id);
if (CollectionUtil.isEmpty(ids)) {
wmsPoReceiptService.lambdaUpdate()
.eq(WmsPoReceipt::getId, id)
.set(WmsPoReceipt::getIsCompleted, true)
.set(WmsPoReceipt::getUpdateTime, LocalDateTime.now())
.set(WmsPoReceipt::getUpdateUserId, UserUtil.getUserId())
.set(WmsPoReceipt::getUpdateUserName, UserUtil.getUserName())
.update();
}
if (CollectionUtil.isNotEmpty(inventories)) {
inventoryService.in(inventories);
}
if (CollectionUtil.isNotEmpty(storageLocationDTOS)) {
storageLocationDTOS.forEach(storageLocationDTO -> {
sapService.zwm3A02(storageLocationDTO.getFactory(),
storageLocationDTO.getMaterialNo(),
storageLocationDTO.getWarehouseNo(), storageLocationDTO.getBinNos());
});
}
//推送到SAP
if (CollectionUtil.isNotEmpty(zwm3A17DTOS)) {
for (ZWM3A17DTO zwm3A17DTO : zwm3A17DTOS) {
Pair<Pair<String, String>, Pair<String, String>> returnDto = sapService.zwm3a17(zwm3A17DTO);
wmsPoReceiptItemService.lambdaUpdate()
.eq(WmsPoReceiptItem::getPoNum, zwm3A17DTO.getEbeln())
.eq(WmsPoReceiptItem::getReceiveId, id)
.set(WmsPoReceiptItem::getMaterialDoc, returnDto.getKey().getKey())
.set(WmsPoReceiptItem::getMaterialDocYear, returnDto.getValue().getValue())
.update();
}
}
//修改二维码的入库状态
if (CollectionUtil.isNotEmpty(scanCodes)) {
List<String> codeIds = scanCodes.stream().map(SrmMaterialReceiptNoScanCodes::getId).toList();
srmMaterialReceiptNoCodesRepository.updateIsIntoStorage(codeIds, true);
}
}
/**
* 将检验物料信息推送到SRM系统
*

View File

@ -20,27 +20,62 @@ public class SAPCommonService {
@Resource
private SapService sapService;
public SAPSyncParamsDTO getMaterialInfoInOrder(String orderNo, String supplierNo, String materialNo) {
// SAPSyncParamsDTO dto = new SAPSyncParamsDTO();
// dto.setMaktx("物料描述");
// dto.setEbelp("1");
// dto.setMatnr(materialNo);
// dto.setMenge(new BigDecimal(100));
// dto.setWemng(new BigDecimal(10));
// dto.setMeins("PC");
// dto.setEbeln(orderNo);
// dto.setTransportNum(new BigDecimal(80));
// dto.setMatkl("物料组");
// dto.setWgbez("物料描述");
// dto.setWerks("1010");
// dto.setLbprt("1");
// dto.setKzkri("");
// dto.setWarehouseNo("122222");
// dto.setBinNos("2121");
// return dto;
public List<SAPSyncParamsDTO> getMaterialInfoInOrder(String orderNo, String supplierNo, String materialNo) {
//获取订单信息
SAPMaterialInfoInOrderDTO materialInfoInOrder = CollectionUtil.get(sapService.zim004(orderNo, supplierNo, materialNo), 0);
List<SAPMaterialInfoInOrderDTO> sapMaterialInfoInOrder = sapService.zim004(orderNo, supplierNo, materialNo);
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(sapMaterialInfoInOrder)).throwMessage("无法获取到有效订单信息" + orderNo);
//SAPMaterialInfoInOrderDTO materialInfoInOrder = sapMaterialInfoInOrder.stream().filter(item -> item.getEbelp().equals(orderItemNo)).findFirst().orElse(null);
// SAPMaterialInfoInOrderDTO materialInfoInOrder = CollectionUtil.get(sapService.zim004(orderNo, supplierNo, materialNo), 0);
//VUtil.trueThrowBusinessError(Objects.isNull(materialInfoInOrder)).throwMessage("无法获取到有效订单信息" + orderNo);
List<SAPSyncParamsDTO> result=new ArrayList<>();
for (SAPMaterialInfoInOrderDTO materialInfoInOrder : sapMaterialInfoInOrder) {
SAPSyncParamsDTO syncParams = new SAPSyncParamsDTO();
syncParams.setMaktx(materialInfoInOrder.getMaktx());
syncParams.setEbelp(materialInfoInOrder.getEbelp());
syncParams.setMatnr(materialInfoInOrder.getMatnr());
syncParams.setMenge(materialInfoInOrder.getMenge());
syncParams.setWemng(materialInfoInOrder.getWemng());
syncParams.setMeins(materialInfoInOrder.getMeins());
syncParams.setEbeln(materialInfoInOrder.getEbeln());
syncParams.setTransportNum(materialInfoInOrder.getTransportNum());
syncParams.setMatkl(materialInfoInOrder.getMatkl());
syncParams.setWgbez(materialInfoInOrder.getWgbez());
syncParams.setWerks(materialInfoInOrder.getWerks());
syncParams.setLbprt(materialInfoInOrder.getLbprt());
syncParams.setKzkri(materialInfoInOrder.getKzkri());
//获取仓库信息
List<String> warehouseNos = new ArrayList<>();
warehouseNos.add(materialInfoInOrder.getWarehouseNo());
List<String> materialNos = new ArrayList<>();
materialNos.add(materialInfoInOrder.getMatnr());
List<SAPSyncFromDTO> list = sapService.zwm3A01(materialInfoInOrder.getWerks(), warehouseNos, materialNos, null, null);
if (!CollectionUtil.isEmpty(list)) {
//同步仓库信息
SAPSyncFromDTO dbWarehouse = list.get(0);
syncParams.setWarehouseNo(dbWarehouse.getWarehouseNo());
syncParams.setBinNos(dbWarehouse.getBinNos());
}
result.add(syncParams);
}
return result;
}
/**
* 获取物料信息
*
* @param orderNo 订单号
* @param supplierNo 供应商代码
* @param materialNo 物料编号
* @param orderItemNo 订单行项目号
* @return
*/
public SAPSyncParamsDTO getMaterialInfoInOrder(String orderNo, String supplierNo, String materialNo, String orderItemNo) {
//获取订单信息
List<SAPMaterialInfoInOrderDTO> sapMaterialInfoInOrder = sapService.zim004(orderNo, supplierNo, materialNo);
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(sapMaterialInfoInOrder)).throwMessage("无法获取到有效订单信息" + orderNo);
SAPMaterialInfoInOrderDTO materialInfoInOrder = sapMaterialInfoInOrder.stream().filter(item -> item.getEbelp().equals(orderItemNo)).findFirst().orElse(null);
// SAPMaterialInfoInOrderDTO materialInfoInOrder = CollectionUtil.get(sapService.zim004(orderNo, supplierNo, materialNo), 0);
VUtil.trueThrowBusinessError(Objects.isNull(materialInfoInOrder)).throwMessage("无法获取到有效订单信息" + orderNo);
SAPSyncParamsDTO syncParams = new SAPSyncParamsDTO();

View File

@ -27,15 +27,23 @@ public class BarcodeLessReceivingQO {
*/
private String serialNumbers;
/**
* 库存地点
*/
private String receivedWarehouse;
/**
* 是否质检
*/
private Boolean isQuality;
/**
* 未收货数量
*/
private BigDecimal unRecieveQty;
/**
* 制造商
*/
private String supplierNum;
}

View File

@ -2,11 +2,13 @@ package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.List;
@Data
@Accessors(chain = true)
public class PDAScanCodeQO {

View File

@ -0,0 +1,10 @@
package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@Data
public class ReceiveQO {
@NotNull
private Long id;
}

View File

@ -3,6 +3,7 @@ package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.util.List;
@ -11,6 +12,7 @@ import java.util.List;
* 送货单收货参数
*/
@Data
@Accessors(chain = true)
public class SrmMaterialReceiptQO {
/**

View File

@ -17,7 +17,7 @@ public class BarcodeLessReceivingVO {
/**
* 送货单ID
*/
private String orderId;
private Long orderId;
/**
* 采购订单号
*/
@ -36,7 +36,7 @@ public class BarcodeLessReceivingVO {
/**
* 送货单号
*/
private String noteNum;
private String noteNum;
/**
* 物料编码
@ -99,5 +99,23 @@ public class BarcodeLessReceivingVO {
*/
private Boolean isQuality;
/**
* 物料属性
* // 1 - 批次号为空序列号为空
* // 2 - 批次号必填序列号为空
* // 3 - 批次号为空序列号必填
* // 4 - 批次号必填序列号必填
*/
private String lbprt;
/**
* 货位编号
*/
private String binNos;
/**
*SAP 未收货数量
*/
private BigDecimal transportNum;
}

View File

@ -83,4 +83,11 @@ public class POReceiptVO {
* 入库时间
*/
private LocalDate inTime;
/**
* 入库单来源类型
* 0 来源于扫码收货
* 1 无码收货
*/
private Integer sourceType;
}

View File

@ -75,4 +75,11 @@ public class QCReceiptVO {
* 是否已开检
*/
private Boolean isCheck;
/**
* 入库单来源类型
* 0 来源于扫码收货
* 1 无码收货
*/
private Integer sourceType;
}

View File

@ -77,4 +77,11 @@ public class WmsPoReceipt implements Serializable {
* 入库人姓名
*/
private String updateUserName;
/**
* 入库单来源类型
* 0 来源于扫码收货
* 1 无码收货
*/
private Integer sourceType;
}

View File

@ -82,4 +82,11 @@ public class WmsQcReceive implements Serializable {
* 是否已开检测
*/
private Boolean isCheck;
/**
* 入库单来源类型
* 0 来源于扫码收货
* 1 无码收货
*/
private Integer sourceType;
}

View File

@ -5,7 +5,7 @@
<select id="getTask" resultType="com.nflg.wms.repository.entity.WmsPoReceipt">
select *
from wms_po_receipt
where is_completed=false
where is_completed=false and sourceType=0
<if test="orederNo !=null and orederNo !='' ">
and ( order_no like #{orederNo} or in_num like #{orederNo} )
</if>

View File

@ -15,7 +15,7 @@
c.supplier_name,b.supplier_num,
a.is_completed,a.create_time as receive_time,
a.update_time as in_time, a.create_user_name as receive_user_name,
a.update_user_name as in_user_name from wms_po_receipt a left join
a.update_user_name as in_user_name,a.source_type from wms_po_receipt a left join
wms_srm_order b on a.order_no=b.note_num
left join user_supplier c on b.supplier_num=c.supplier_code
<where>

View File

@ -9,7 +9,7 @@
create_time,
factory_code
from wms_qc_receive
where is_completed !=2 and is_check = true
where is_completed !=2 and is_check = true and sourceType=0
<if test="orderNo != null and orderNo != ''">
and ( in_no like concat( '%',#{orderNo},'%') or order_no like concat( '%',#{orderNo},'%') )
</if>
@ -32,7 +32,8 @@
a.update_time as in_time,
a.create_user_name as receive_user_name,
a.update_user_name as in_user_name,
a.is_check
a.is_check,
a.source_type
from wms_qc_receive a
left join
wms_srm_order b on a.order_no = b.note_num