完成打包收货的逻辑
This commit is contained in:
parent
4a1909a745
commit
b3c74d6a28
|
|
@ -10,10 +10,7 @@ import cn.hutool.core.util.IdUtil;
|
|||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.crypto.digest.DigestUtil;
|
||||
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.pojo.dto.*;
|
||||
import com.nflg.wms.admin.repository.SrmMaterialReceiptNoScanCodesRepository;
|
||||
import com.nflg.wms.admin.repository.SrmMaterialReceiptScanCodesRepository;
|
||||
import com.nflg.wms.admin.service.BasdeSerialNumberControllerService;
|
||||
|
|
@ -118,6 +115,8 @@ public class NormalPGIController extends BaseController {
|
|||
@Resource
|
||||
private IWmsOutProduceTicketItemService outProduceTicketItemService;
|
||||
|
||||
@Resource
|
||||
private IWmsWarehouseService wmsWarehouseService;
|
||||
//收货单分页
|
||||
|
||||
/**
|
||||
|
|
@ -287,7 +286,7 @@ public class NormalPGIController extends BaseController {
|
|||
*/
|
||||
@GetMapping("PDA/task")
|
||||
@ApiMark(moduleName = "送货单管理", apiName = "普通物料上架任务")
|
||||
public ApiResult<List<PoReceiveTaskVO>> takeDelivery(@RequestParam(required = false) String orederNo) {
|
||||
public ApiResult<List<PoReceiveTaskVO>> getTakeDelivery(@RequestParam(required = false) String orederNo) {
|
||||
List<WmsPoReceipt> wmsPoReceipts = wmsPoReceiptItemService.getTask(orederNo);
|
||||
return ApiResult.success(wmsPoReceipts
|
||||
.stream()
|
||||
|
|
@ -501,6 +500,41 @@ public class NormalPGIController extends BaseController {
|
|||
return sapSyncParamsDTOS;
|
||||
}
|
||||
|
||||
/**
|
||||
* 收货直接入库的(未启用储位管理)
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
private void setPoReceiveByIn(SrmMaterialReceiptQO item,
|
||||
List<WmsPoReceiptItem> wmsPoReceiptItems,
|
||||
Long receiveId,
|
||||
SAPSyncParamsDTO materialInfoInOrder,
|
||||
Long receiveItemId
|
||||
) {
|
||||
|
||||
WmsPoReceiptItem receiptItem = new WmsPoReceiptItem()
|
||||
.setId(receiveItemId)
|
||||
.setLineNumber(item.getLineNumber())
|
||||
.setItemCode(item.getItemCode())
|
||||
.setUomCode(materialInfoInOrder.getMeins())
|
||||
.setCreateUserId(UserUtil.getUserId())
|
||||
.setCreateUserName(UserUtil.getUserName())
|
||||
.setCreateTime(LocalDateTime.now())
|
||||
.setReceiptNum(item.getReceiptNum())
|
||||
.setReceivedWarehouse(materialInfoInOrder.getWarehouseNo())
|
||||
.setStorageLocation("")
|
||||
.setInQty(item.getReceiptNum())
|
||||
.setNoteNum(item.getNoteNum())
|
||||
.setItemName(materialInfoInOrder.getMaktx())
|
||||
.setCrossQty(new BigDecimal(0))
|
||||
.setPoLineNumber(item.getPoLineNumber())
|
||||
.setPoNum(item.getPoNum())
|
||||
.setReceiveId(receiveId)
|
||||
.setOrderItemId(item.getId())
|
||||
.setMaterialDoc("")
|
||||
.setMaterialDocYear("");
|
||||
wmsPoReceiptItems.add(receiptItem);
|
||||
}
|
||||
|
||||
private void setPoReceive(SrmMaterialReceiptQO item,
|
||||
List<WmsPoReceiptItem> wmsPoReceiptItems,
|
||||
|
|
@ -1341,7 +1375,8 @@ public class NormalPGIController extends BaseController {
|
|||
@ApiMark(moduleName = "打包扫码", apiName = "通过打包码获取到打包码的信息")
|
||||
public ApiResult<List<PDAOrderItemVO>> getPackageContents(@Valid @RequestBody PackingPDASearchQO request) {
|
||||
// 首先判断当前包是否已经收货了
|
||||
PacageScanVO pacageScanVO = wmsPackageService.getPackageInfo(request.getPackageCode());
|
||||
WmsPackage pacageScanVO = wmsPackageService.lambdaQuery().eq(WmsPackage::getPackageCode, request.getPackageCode())
|
||||
.one();
|
||||
VUtil.trueThrowBusinessError(ObjectUtil.isNull(pacageScanVO)).throwMessage("打包码不存在");
|
||||
VUtil.trueThrowBusinessError(pacageScanVO.getPackageStatus() == 0).throwMessage("此打包码尚未打包");
|
||||
VUtil.trueThrowBusinessError(pacageScanVO.getPackageStatus() == 2).throwMessage("此打包码已完成收货");
|
||||
|
|
@ -1358,58 +1393,280 @@ public class NormalPGIController extends BaseController {
|
|||
@PostMapping("takeDeliveryConfirmUnScan")
|
||||
@ApiMark(moduleName = "无需扫码收货", apiName = "无需扫码收货")
|
||||
public ApiResult<Void> takeDeliveryConfirmUnScan(@Valid @RequestBody PendingUnScanningQO request) {
|
||||
// VUtil.trueThrowBusinessError(request.getBarcodeIds().stream().distinct().count() != request.getBarcodeIds().size()).throwMessage("存在重复的码");
|
||||
// // 重新验证所有码的合法性 1、是否是已打包未收货的状态;2、是否全部是已启用储位管理的状态
|
||||
// List<PacageScanVO> pacageScanVO = wmsPackageService.getPackageInfos(request.getBarcodeIds());
|
||||
// VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(pacageScanVO)).throwMessage("打包码不存在");
|
||||
//
|
||||
// long count = pacageScanVO.stream()
|
||||
// .filter(pkg -> Objects.equals(pkg.getPackageStatus(), (short) 0))
|
||||
// .count();
|
||||
// VUtil.trueThrowBusinessError(count >= 0).throwMessage("存在尚未打包的码");
|
||||
// long count1 = pacageScanVO.stream()
|
||||
// .filter(pkg -> Objects.equals(pkg.getPackageStatus(), (short) 2))
|
||||
// .count();
|
||||
// VUtil.trueThrowBusinessError(count1 >= 0).throwMessage("存在已经收货的码");
|
||||
//
|
||||
// long count2 = pacageScanVO.stream()
|
||||
// .filter(pkg -> Objects.equals(pkg.getIsCounting(), 1))
|
||||
// .count();
|
||||
// VUtil.trueThrowBusinessError(count2 >= 0).throwMessage("存在必须扫码的包装");
|
||||
// List<PendingScanningItemDTO> items = wmsPackageService.getScanningItems(request.getBarcodeIds());
|
||||
// //对箱码要做出来,将箱码换成对应的物料码
|
||||
// List<Long> materialCodes = items.stream().filter(item -> Objects.equals(item.getPackagingType(), 1))
|
||||
// .map(item -> item.getBarcodeId())
|
||||
// .distinct()
|
||||
// .collect(Collectors.toList());
|
||||
//// List<WmsQrCodeMaster> qrCodeMasters = wmsQrCodeMasterService.getByMaterialCodes(materialCodes);
|
||||
//// if(CollectionUtil.isEmpty(materialCodes))
|
||||
//// {
|
||||
//// //计算箱内物料的数量,并判断是否是打包状态
|
||||
////
|
||||
////
|
||||
////
|
||||
//// }
|
||||
//
|
||||
//
|
||||
// //根据包装信息获取对应的物料收货信息
|
||||
// List<SrmMaterialReceiptQO> receiptQOS = new ArrayList<>();
|
||||
// //首先要对上面的信息 按照 srmId进行分组,汇总quantity
|
||||
//
|
||||
// for (PendingScanningItemDTO item : items) {
|
||||
// SrmMaterialReceiptQO qo = new SrmMaterialReceiptQO()
|
||||
// .setNoteNum(item.getDeliveryNo())
|
||||
// .setLineNumber(item.getDeliveryLineNo())
|
||||
// .setPoNum(item.getPoNumber())
|
||||
// .setPoLineNumber(item.getPoLineNumber())
|
||||
// .setItemCode(item.getMaterialCode())
|
||||
// .setId(item.getSrmId())
|
||||
// .setReceiptNum(item.getQuantity());
|
||||
//
|
||||
// // .setScanCodes(item.getScanCodes());
|
||||
// }
|
||||
// 首先判断当前包是否已经收货了
|
||||
WmsPackage pacageScanVO = wmsPackageService.lambdaQuery().eq(WmsPackage::getPackageCode, request.getPackageCode())
|
||||
.one();
|
||||
VUtil.trueThrowBusinessError(ObjectUtil.isNull(pacageScanVO)).throwMessage("打包码不存在");
|
||||
VUtil.trueThrowBusinessError(pacageScanVO.getPackageStatus() == 0).throwMessage("此打包码尚未打包");
|
||||
VUtil.trueThrowBusinessError(pacageScanVO.getPackageStatus() == 2).throwMessage("此打包码已完成收货");
|
||||
List<PDAOrderItemVO> pdaOrderVO = normalPGIControllerService.getPackageContents(request.getPackageCode());
|
||||
// 无码的时候要判断仓库,只有所有仓库都是支持大码一键收货的情况
|
||||
List<String> warehouseCodes = pdaOrderVO.stream().map(PDAOrderItemVO::getReceivedWarehouse).distinct().collect(Collectors.toList());
|
||||
List<WmsWarehouse> warehouseList = wmsWarehouseService.lambdaQuery()
|
||||
.in(WmsWarehouse::getNo, warehouseCodes)
|
||||
.eq(WmsWarehouse::getBigBoxFastReceipt, false)
|
||||
.list();
|
||||
if (CollectionUtil.isNotEmpty(warehouseList)) {
|
||||
List<String> warehouseNoList = warehouseList.stream().map(WmsWarehouse::getName).collect(Collectors.toList());
|
||||
VUtil.trueThrowBusinessError(true).throwMessage("仓库[" + warehouseNoList.stream().collect(Collectors.joining(";")) + "]");
|
||||
}
|
||||
|
||||
return ApiResult.success();
|
||||
|
||||
List<WmsPackageItemDetailDTO> dtos = wmsPackageService.getPackageItemDetails(request.getPackageCode());
|
||||
//对中码进行一个操作
|
||||
List<Long> parentIds = dtos.stream().filter(dto -> dto.getPackagingType() == 0)
|
||||
.map(WmsPackageItemDetailDTO::getBarcodeId).collect(Collectors.toList());
|
||||
|
||||
if (CollectionUtil.isNotEmpty(parentIds)) {
|
||||
List<WmsQrCodeMaster> childMasters = wmsQrCodeMasterService.lambdaQuery()
|
||||
.in(WmsQrCodeMaster::getParentBarcodeId, parentIds).list();
|
||||
childMasters.forEach(child -> {
|
||||
WmsPackageItemDetailDTO dto = new WmsPackageItemDetailDTO();
|
||||
dto.setBarcodeId(child.getId());
|
||||
dto.setMaterialCode(child.getMaterialCode());
|
||||
dto.setPackagingType(child.getPackagingType());
|
||||
dto.setBatchNo(child.getBatchNo());
|
||||
dto.setSerialNo(child.getSerialNo());
|
||||
dto.setQuantity(child.getQuantity());
|
||||
dto.setPackagingType(child.getPackagingType());
|
||||
WmsPackageItemDetailDTO parentDto = dtos.stream()
|
||||
.filter(dto1 -> dto1.getBarcodeId().equals(child.getParentBarcodeId())).findFirst().get();
|
||||
dto.setSrmOrderItemId(parentDto.getSrmOrderItemId());
|
||||
dto.setPackageItemId(parentDto.getPackageItemId());
|
||||
dtos.add(dto);
|
||||
});
|
||||
}
|
||||
|
||||
List<SrmReceiptQO> receipts = new ArrayList<>();
|
||||
//根据送货单号进行排序
|
||||
List<String> orderNos = pdaOrderVO.stream().map(PDAOrderItemVO::getDeliveryNo).distinct().collect(Collectors.toList());
|
||||
for (String orderNo : orderNos) {
|
||||
SrmReceiptQO qo = new SrmReceiptQO();
|
||||
qo.setDeliveryNo(orderNo);
|
||||
//根据送货单号,查找送货单的送货详情
|
||||
List<PDAOrderItemVO> items = pdaOrderVO.stream().filter(item -> item.getDeliveryNo().equals(orderNo)).collect(Collectors.toList());
|
||||
List<SrmMaterialReceiptQO> receiptQOS = new ArrayList<>();
|
||||
for (PDAOrderItemVO item : items) {
|
||||
SrmMaterialReceiptQO qoItem = new SrmMaterialReceiptQO()
|
||||
.setId(item.getId())
|
||||
.setNoteNum(item.getDeliveryNo())
|
||||
.setLineNumber(item.getLineNumber())
|
||||
.setPoNum(item.getPoNum())
|
||||
.setPoLineNumber(item.getPoLineNumber())
|
||||
.setItemCode(item.getItemCode())
|
||||
.setReceivedWarehouse(item.getReceivedWarehouse())
|
||||
.setUomCode(item.getUomCode())
|
||||
.setReceiptNum(item.getDeliveryQty());
|
||||
List<PDAScanCodeQO> scanCodes = new ArrayList<>();
|
||||
List<WmsPackageItemDetailDTO> dtos1 = dtos.stream()
|
||||
.filter(dto -> dto.getSrmOrderItemId().equals(item.getId())).collect(Collectors.toList());
|
||||
for (WmsPackageItemDetailDTO dto : dtos1) {
|
||||
PDAScanCodeQO scanCode = new PDAScanCodeQO();
|
||||
scanCode.setCodeContent(dto.getBarcodeId().toString() + dto.getPackagingType().toString());
|
||||
scanCode.setCodeNum(dto.getQuantity());
|
||||
scanCode.setBatchNumber(dto.getBatchNo());
|
||||
scanCode.setSerialNumbers(dto.getSerialNo());
|
||||
scanCode.setCodeId(dto.getBarcodeCode());
|
||||
scanCodes.add(scanCode);
|
||||
}
|
||||
qoItem.setScanCodes(scanCodes);
|
||||
receiptQOS.add(qoItem);
|
||||
}
|
||||
qo.setReceiptQOS(receiptQOS);
|
||||
}
|
||||
//开始收货
|
||||
GoodReceipt(receipts, pacageScanVO.getId());
|
||||
return ApiResult.success();
|
||||
}
|
||||
|
||||
|
||||
private void GoodReceipt(List<SrmReceiptQO> receipts, Long packageId) {
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(receipts)).throwMessage("收货参数为空");
|
||||
List<GoodReceiptDTO> dtos = new ArrayList<>();
|
||||
for (SrmReceiptQO request : receipts) {
|
||||
List<WmsPoReceiptItem> wmsPoReceiptItems = new ArrayList<>();
|
||||
List<WmsQcReceiveItem> wmsQcReceiveItems = new ArrayList<>();
|
||||
List<SrmMaterialReceiptScanCodes> srmMaterialReceiptScanCodes = new ArrayList<>();
|
||||
List<QCMaterialSyncDTO> qcMaterialSyncDTOS = new ArrayList<>();
|
||||
List<InventoryDTO> inventories = new ArrayList<>();
|
||||
List<ZWM3A17DTO> zwm3A17DTOS = new ArrayList<>();
|
||||
List<WmsQrCodeMaster> qrCodes = new ArrayList<>();
|
||||
WmsSrmOrder order = wmsSrmOrderService.lambdaQuery().eq(WmsSrmOrder::getNoteNum, request.getDeliveryNo()).one();
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("收货单不存在");
|
||||
List<SAPSyncParamsDTO> sapSyncParamsDTOS = getSapSyncParamsDTOS(request.getReceiptQOS(), order);
|
||||
WmsPoReceipt wmsPoReceipt = new WmsPoReceipt()
|
||||
.setCreateTime(LocalDateTime.now())
|
||||
.setId(IdUtil.getSnowflakeNextId())
|
||||
.setOrderNo(order.getNoteNum())
|
||||
.setCreateUserName(UserUtil.getUserName())
|
||||
.setCreateUserId(UserUtil.getUserId())
|
||||
.setFactoryCode(order.getIuCode())
|
||||
.setSourceType(0)
|
||||
.setIsCompleted(false);
|
||||
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(0)
|
||||
.setCreateUserId(UserUtil.getUserId());
|
||||
for (SrmMaterialReceiptQO item : request.getReceiptQOS()) {
|
||||
if (item.getReceiptNum().equals(BigDecimal.ZERO)) {
|
||||
continue;
|
||||
}
|
||||
SAPSyncParamsDTO materialInfoInOrder = sapSyncParamsDTOS.stream()
|
||||
.filter(sapSyncParamsDTO ->
|
||||
sapSyncParamsDTO.getEbeln().equals(item.getPoNum())
|
||||
&& sapSyncParamsDTO.getEbelp().equals(item.getPoLineNumber()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
//数量验证(判断收货数量是否大于了未收数量)
|
||||
VUtil.trueThrowBusinessError(item.getReceiptNum().compareTo(materialInfoInOrder.getTransportNum()) > 0).throwMessage("物料收货数量[" + item.getReceiptNum() + "]大于了未收数量[" + materialInfoInOrder.getTransportNum() + "],订单号:" + item.getPoNum());
|
||||
Long orderItemId = IdUtil.getSnowflakeNextId();
|
||||
//序列号和批次号验证
|
||||
List<SrmMaterialReceiptScanCodes> codes = normalPGIControllerService.validateScanCodes(item, materialInfoInOrder, orderItemId);
|
||||
if (CollectionUtil.isNotEmpty(codes)) {
|
||||
srmMaterialReceiptScanCodes.addAll(codes);
|
||||
}
|
||||
boolean isQuality = materialInfoInOrder.getKzkri().equals("X");
|
||||
if (isQuality) {
|
||||
setQcMaterialSyncDto(qcMaterialSyncDTOS, item, order, codes, materialInfoInOrder, wmsQcReceiveItems, wmsQcReceive.getId(), orderItemId);
|
||||
for (PDAScanCodeQO code : item.getScanCodes()) {
|
||||
// 处理条码
|
||||
WmsQrCodeMaster qrCodeMaster = wmsQrCodeMasterService.lambdaQuery()
|
||||
.eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId())
|
||||
.one();
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "】");
|
||||
qrCodeMaster.setLastScanTime(LocalDateTime.now());
|
||||
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
|
||||
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
|
||||
qrCodeMaster.setProcessStage(BarCodeProcessStage.Checking.getState());
|
||||
qrCodeMaster.setReceiptItemId(orderItemId);
|
||||
qrCodes.add(qrCodeMaster);
|
||||
}
|
||||
} else {
|
||||
WmsWarehouse warehouse = wmsWarehouseService.lambdaQuery().eq(WmsWarehouse::getNo, item.getReceivedWarehouse()).one();
|
||||
if (!warehouse.getIsDisableLocation()) {
|
||||
//设置收货明细项
|
||||
setPoReceiveByIn(item, wmsPoReceiptItems, wmsPoReceipt.getId(), materialInfoInOrder, orderItemId);
|
||||
//设置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())
|
||||
.setReceiveId(orderItemId)
|
||||
.setItem1(new ArrayList<>())
|
||||
.setItem2(new ArrayList<>());
|
||||
zwm3A17DTOS.add(zwm3A17DTO);
|
||||
}
|
||||
List<ZWM3A17Item1DTO> item1 = zwm3A17DTO.getItem1();
|
||||
List<ZWM3A17Item2DTO> item2 = zwm3A17DTO.getItem2();
|
||||
for (PDAScanCodeQO code : item.getScanCodes()) {
|
||||
// 处理条码
|
||||
WmsQrCodeMaster qrCodeMaster = wmsQrCodeMasterService.lambdaQuery()
|
||||
.eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId())
|
||||
.one();
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "】");
|
||||
qrCodeMaster.setLastScanTime(LocalDateTime.now());
|
||||
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
|
||||
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
|
||||
qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState());
|
||||
qrCodeMaster.setReceiptItemId(orderItemId);
|
||||
qrCodes.add(qrCodeMaster);
|
||||
if (qrCodeMaster.getPackagingType().equals(1)) {
|
||||
continue;
|
||||
}
|
||||
// 库存
|
||||
InventoryDTO inventoryDTO = inventories.stream()
|
||||
.filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode())
|
||||
&& inventoriesDTO.getBatchNo().equals(code.getBatchNumber())
|
||||
&& inventoriesDTO.getSerialNo().equals(code.getSerialNumbers())
|
||||
&& 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())
|
||||
.setBatchNo(code.getBatchNumber())
|
||||
.setSerialNo(code.getSerialNumbers())
|
||||
.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()));
|
||||
}
|
||||
//...................
|
||||
} else {
|
||||
setPoReceive(item, wmsPoReceiptItems, wmsPoReceipt.getId(), materialInfoInOrder, orderItemId);
|
||||
for (PDAScanCodeQO code : item.getScanCodes()) {
|
||||
// 处理条码
|
||||
WmsQrCodeMaster qrCodeMaster = wmsQrCodeMasterService.lambdaQuery()
|
||||
.eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId())
|
||||
.one();
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "】");
|
||||
qrCodeMaster.setLastScanTime(LocalDateTime.now());
|
||||
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
|
||||
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
|
||||
qrCodeMaster.setStorageLocation(materialInfoInOrder.getWarehouseNo());
|
||||
qrCodeMaster.setProcessStage(BarCodeProcessStage.Received.getState());
|
||||
qrCodeMaster.setReceiptItemId(orderItemId);
|
||||
qrCodes.add(qrCodeMaster);
|
||||
}
|
||||
}
|
||||
}
|
||||
//=========
|
||||
}
|
||||
GoodReceiptDTO dto = new GoodReceiptDTO()
|
||||
.setWmsPoReceipt(wmsPoReceipt)
|
||||
.setWmsQcReceive(wmsQcReceive)
|
||||
.setWmsPoReceiptItems(wmsPoReceiptItems)
|
||||
.setWmsQcReceiveItems(wmsQcReceiveItems)
|
||||
.setSrmMaterialReceiptScanCodes(srmMaterialReceiptScanCodes)
|
||||
.setOrderId(order.getId())
|
||||
.setInventories(inventories)
|
||||
.setZwm3A17DTOS(zwm3A17DTOS)
|
||||
.setQrCodes(qrCodes)
|
||||
.setQcMaterialSyncDTOS(qcMaterialSyncDTOS);
|
||||
dtos.add(dto);
|
||||
}
|
||||
normalPGIControllerService.takeDeliveryByPackage(dtos, packageId);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1419,7 +1676,29 @@ return ApiResult.success();
|
|||
*/
|
||||
@PostMapping("takeDeliveryConfirmByScan")
|
||||
@ApiMark(moduleName = "需扫码收货", apiName = "需扫码收货")
|
||||
public ApiResult<Void> takeDeliveryConfirmByScan(@Valid @RequestBody List<PendingScanningQO> request) {
|
||||
public ApiResult<Void> takeDeliveryConfirmByScan(@Valid @RequestBody GoodReceiptQO request) {
|
||||
// 首先判断当前包是否已经收货了
|
||||
WmsPackage pacageScanVO = wmsPackageService.lambdaQuery().eq(WmsPackage::getPackageCode, request.getPackageCode())
|
||||
.one();
|
||||
VUtil.trueThrowBusinessError(ObjectUtil.isNull(pacageScanVO)).throwMessage("打包码不存在");
|
||||
VUtil.trueThrowBusinessError(pacageScanVO.getPackageStatus() == 0).throwMessage("此打包码尚未打包");
|
||||
VUtil.trueThrowBusinessError(pacageScanVO.getPackageStatus() == 2).throwMessage("此打包码已完成收货");
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request.getItems())).throwMessage("没有收货的物料信息");
|
||||
List<SrmReceiptQO> receipts = new ArrayList<>();
|
||||
List<String> orderNos = request.getItems().stream().map(it -> it.getNoteNum()).distinct().toList();
|
||||
for (String orderNo : orderNos) {
|
||||
SrmReceiptQO receipt = new SrmReceiptQO();
|
||||
receipt.setDeliveryNo(orderNo);
|
||||
List<SrmMaterialReceiptQO> items = request.getItems().stream().filter(it -> it.getNoteNum().equals(orderNo)).toList();
|
||||
for (SrmMaterialReceiptQO item : items) {
|
||||
// 盘点是否有条码
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(item.getScanCodes())).throwMessage("[" + item.getItemCode() + "]没有码信息");
|
||||
}
|
||||
receipt.setReceiptQOS(items);
|
||||
receipts.add(receipt);
|
||||
}
|
||||
GoodReceipt(receipts, pacageScanVO.getId());
|
||||
return ApiResult.success();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -310,7 +310,7 @@ public class QrCodeMasterController extends BaseController {
|
|||
// 查询子条形码并累加其数量
|
||||
List<WmsQrCodeMaster> qrCodeMasters = qrCodeMasterService.lambdaQuery()
|
||||
.eq(WmsQrCodeMaster::getParentBarcodeId, qrCodeMaster.getId())
|
||||
.eq(WmsQrCodeMaster::getProcessStage, request.getProcessStage())
|
||||
.in(WmsQrCodeMaster::getProcessStage, request.getProcessStage())
|
||||
.list();
|
||||
VUtil.trueThrowBusinessError(ObjectUtil.isNull(qrCodeMasters))
|
||||
.throwMessage("此箱[" + request.getPackageCode() + "]为空箱");
|
||||
|
|
|
|||
|
|
@ -0,0 +1,63 @@
|
|||
package com.nflg.wms.admin.pojo.dto;
|
||||
|
||||
import com.nflg.wms.common.pojo.document.SrmMaterialReceiptScanCodes;
|
||||
import com.nflg.wms.common.pojo.dto.InventoryDTO;
|
||||
import com.nflg.wms.repository.entity.*;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class GoodReceiptDTO {
|
||||
/**
|
||||
* 采购收货单 单头
|
||||
*/
|
||||
private WmsPoReceipt wmsPoReceipt;
|
||||
|
||||
/**
|
||||
* 质检收货单 单头
|
||||
*/
|
||||
private WmsQcReceive wmsQcReceive;
|
||||
|
||||
/**
|
||||
* 采购收货单 单行
|
||||
*/
|
||||
private List<WmsPoReceiptItem> wmsPoReceiptItems;
|
||||
|
||||
/**
|
||||
* 质检收货单 单行
|
||||
*/
|
||||
private List<WmsQcReceiveItem> wmsQcReceiveItems;
|
||||
|
||||
/**
|
||||
* 扫描码
|
||||
*/
|
||||
private List<SrmMaterialReceiptScanCodes> srmMaterialReceiptScanCodes;
|
||||
|
||||
/**
|
||||
* 质检同步数据到SAP
|
||||
*/
|
||||
private List<QCMaterialSyncDTO> qcMaterialSyncDTOS;
|
||||
|
||||
/**
|
||||
* 采购单ID
|
||||
*/
|
||||
private Long orderId;
|
||||
|
||||
/**
|
||||
* 库存数据
|
||||
*/
|
||||
private List<InventoryDTO> inventories;
|
||||
|
||||
/**
|
||||
*同步库存到SAP的数据
|
||||
*/
|
||||
private List<ZWM3A17DTO> zwm3A17DTOS;
|
||||
|
||||
/**
|
||||
* 条码数据
|
||||
*/
|
||||
private List<WmsQrCodeMaster> qrCodes;
|
||||
}
|
||||
|
|
@ -20,6 +20,11 @@ public class ZWM3A17DTO {
|
|||
*/
|
||||
private String usnam;
|
||||
|
||||
/**
|
||||
* 收货单ID
|
||||
*/
|
||||
private Long receiveId;
|
||||
|
||||
private List<ZWM3A17Item1DTO> item1 = new ArrayList<>();
|
||||
|
||||
private List<ZWM3A17Item2DTO> item2 = new ArrayList<>();
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ 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.dto.GoodReceiptDTO;
|
||||
import com.nflg.wms.admin.pojo.dto.QCMaterialSyncDTO;
|
||||
import com.nflg.wms.admin.pojo.dto.ZWM3A17DTO;
|
||||
import com.nflg.wms.admin.repository.SrmMaterialReceiptNoScanCodesRepository;
|
||||
|
|
@ -104,6 +105,12 @@ public class NormalPGIControllerService {
|
|||
@Resource
|
||||
private IWmsPackageService wmsPackageService;
|
||||
|
||||
@Resource
|
||||
private IWmsQrCodeMasterService qrCodeMasterService;
|
||||
|
||||
@Resource
|
||||
private IWmsPackageItemService wmsPackageItemService;
|
||||
|
||||
/**
|
||||
* 根据订单编号获取订单详情信息,包括订单头信息和订单行项目信息。
|
||||
* <p>
|
||||
|
|
@ -544,61 +551,78 @@ public class NormalPGIControllerService {
|
|||
}
|
||||
|
||||
public List<PDAOrderItemVO> getPackageContents(@NotNull @NotBlank String packageCode) {
|
||||
// List<PackagePOItemDTO> packagePOItems = wmsPackageService.getPackagePOItems(packageCode);
|
||||
// VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(packagePOItems)).throwMessage("获取打包物料信息异常");
|
||||
//
|
||||
//
|
||||
// // 根据订单编号查询订单主表信息
|
||||
// WmsSrmOrder order = wmsSrmOrderService.lambdaQuery().eq(WmsSrmOrder::getNoteNum, orderNo)
|
||||
// .eq(WmsSrmOrder::getIsCompleted, false).one();
|
||||
// VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("此收货单[" + orderNo + "] 单号无效");
|
||||
//
|
||||
// PDAOrderVO pdaOrderVO = new PDAOrderVO();
|
||||
// // 设置订单头基本信息
|
||||
// pdaOrderVO.setNoteNum(order.getNoteNum());
|
||||
// pdaOrderVO.setSupplierNum(order.getSupplierNum());
|
||||
// pdaOrderVO.setSupplierName(order.getSupplierName());
|
||||
//
|
||||
// // 查询订单行项目列表
|
||||
// List<WmsSrmOrderItem> orderItemList = wmsSrmOrderItemService.lambdaQuery()
|
||||
// .eq(WmsSrmOrderItem::getOrderId, order.getId())
|
||||
// .list();
|
||||
// VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orderItemList)).throwMessage("此收货单[" + orderNo + "] 已完成收货,无需再次操作");
|
||||
//
|
||||
// List<PDAOrderItemVO> orderItemVOList = new ArrayList<>();
|
||||
// // 遍历订单行项目,填充详细信息并从 SAP 获取补充数据
|
||||
// for (WmsSrmOrderItem item : orderItemList) {
|
||||
// PDAOrderItemVO itemVO = new PDAOrderItemVO();
|
||||
// itemVO.setId(item.getId());
|
||||
// itemVO.setPoLineNumber(item.getPoLineNumber());
|
||||
// itemVO.setPoNum(item.getPoNum());
|
||||
// itemVO.setItemCode(item.getItemCode());
|
||||
// itemVO.setItemName(item.getItemName());
|
||||
// itemVO.setIsQuality(item.getIsQuality());
|
||||
// itemVO.setOrderQty(item.getOrderQty());
|
||||
// itemVO.setUomCode(item.getUomCode());
|
||||
// itemVO.setLineNumber(item.getLineNumber());
|
||||
// itemVO.setDeliveryQty(item.getDeliveryQty().subtract(item.getReceiptQty()));
|
||||
// // 从 SAP 系统获取物料相关信息
|
||||
// SAPSyncParamsDTO syncParamsDTO = sapCommonService.getMaterialInfoInOrder(item.getPoNum(),
|
||||
// order.getSupplierNum(), item.getItemCode(), item.getPoLineNumber());
|
||||
// if (Objects.nonNull(syncParamsDTO)) {
|
||||
// itemVO.setItemName(syncParamsDTO.getMaktx());
|
||||
// itemVO.setUomCode(syncParamsDTO.getMeins());
|
||||
// itemVO.setOrderQty(syncParamsDTO.getMenge());
|
||||
// itemVO.setReceivedWarehouse(syncParamsDTO.getWarehouseNo());
|
||||
// itemVO.setBinNos(syncParamsDTO.getBinNos());
|
||||
// itemVO.setLbprt(syncParamsDTO.getLbprt());
|
||||
// itemVO.setTransportNum(syncParamsDTO.getTransportNum());
|
||||
// // 判断是否质检
|
||||
// boolean isQuality = "X".equals(syncParamsDTO.getKzkri());
|
||||
// itemVO.setIsQuality(isQuality);
|
||||
// orderItemVOList.add(itemVO);
|
||||
// }
|
||||
// }
|
||||
// // 设置订单行项目列表到返回对象中
|
||||
// pdaOrderVO.setOrderItemVOList(orderItemVOList);
|
||||
// return pdaOrderVO;
|
||||
return null;
|
||||
List<PackagePOItemDTO> packagePOItems = wmsPackageService.getPackagePOItems(packageCode);
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(packagePOItems)).throwMessage("此大包中的物料已完成收货");
|
||||
|
||||
List<PDAOrderItemVO> orderItemVOList = new ArrayList<>();
|
||||
// 遍历订单行项目,填充详细信息并从 SAP 获取补充数据
|
||||
for (PackagePOItemDTO item : packagePOItems) {
|
||||
PDAOrderItemVO itemVO = new PDAOrderItemVO();
|
||||
itemVO.setId(item.getSrmOrderId());
|
||||
itemVO.setPoLineNumber(item.getPoLineNumber());
|
||||
itemVO.setPoNum(item.getPoNumber());
|
||||
itemVO.setItemCode(item.getMaterialCode());
|
||||
itemVO.setItemName(item.getMaterialDescription());
|
||||
itemVO.setOrderQty(item.getOrderQty());
|
||||
// itemVO.setUomCode(item.getUomCode());
|
||||
itemVO.setLineNumber(item.getDeliveryLineNo());
|
||||
itemVO.setDeliveryQty(item.getPackingQuantity());
|
||||
itemVO.setDeliveryNo(item.getDeliveryNo());
|
||||
// 从 SAP 系统获取物料相关信息
|
||||
SAPSyncParamsDTO syncParamsDTO = sapCommonService.getMaterialInfoInOrder(item.getPoNumber(),
|
||||
item.getSupplierCode(), item.getMaterialCode(), item.getPoLineNumber());
|
||||
if (Objects.nonNull(syncParamsDTO)) {
|
||||
itemVO.setItemName(syncParamsDTO.getMaktx());
|
||||
itemVO.setUomCode(syncParamsDTO.getMeins());
|
||||
itemVO.setOrderQty(syncParamsDTO.getMenge());
|
||||
itemVO.setReceivedWarehouse(syncParamsDTO.getWarehouseNo());
|
||||
itemVO.setBinNos(syncParamsDTO.getBinNos());
|
||||
itemVO.setLbprt(syncParamsDTO.getLbprt());
|
||||
itemVO.setTransportNum(syncParamsDTO.getTransportNum());
|
||||
// 判断是否质检
|
||||
boolean isQuality = "X".equals(syncParamsDTO.getKzkri());
|
||||
itemVO.setIsQuality(isQuality);
|
||||
orderItemVOList.add(itemVO);
|
||||
}
|
||||
}
|
||||
return orderItemVOList;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void takeDeliveryByPackage(List<GoodReceiptDTO> dtos, Long packageId) {
|
||||
for (GoodReceiptDTO dto : dtos) {
|
||||
//收货
|
||||
takeDelivery(dto.getWmsPoReceipt(), dto.getWmsQcReceive(), dto.getWmsPoReceiptItems(), dto.getWmsQcReceiveItems()
|
||||
, dto.getSrmMaterialReceiptScanCodes(), dto.getQcMaterialSyncDTOS(), dto.getOrderId()
|
||||
);
|
||||
//入库
|
||||
if (CollectionUtil.isNotEmpty(dto.getInventories())) {
|
||||
inventoryService.in(dto.getInventories());
|
||||
}
|
||||
//过账SAP
|
||||
if (CollectionUtil.isNotEmpty(dto.getZwm3A17DTOS())) {
|
||||
for (ZWM3A17DTO zwm3A17DTO : dto.getZwm3A17DTOS()) {
|
||||
Pair<Pair<String, String>, Pair<String, String>> returnDto = sapService.zwm3a17(zwm3A17DTO);
|
||||
wmsPoReceiptItemService.lambdaUpdate()
|
||||
.eq(WmsPoReceiptItem::getPoNum, zwm3A17DTO.getEbeln())
|
||||
.eq(WmsPoReceiptItem::getReceiveId, zwm3A17DTO.getReceiveId())
|
||||
.set(WmsPoReceiptItem::getMaterialDoc, returnDto.getKey().getKey())
|
||||
.set(WmsPoReceiptItem::getMaterialDocYear, returnDto.getValue().getValue())
|
||||
.update();
|
||||
}
|
||||
}
|
||||
//编码管理
|
||||
if (CollectionUtil.isNotEmpty(dto.getQrCodes())) {
|
||||
qrCodeMasterService.updateBarCode(dto.getQrCodes());
|
||||
// 修改包装项的收货状态
|
||||
if (Objects.nonNull(packageId) && packageId > 0) {
|
||||
List<String> codeIds = dto.getQrCodes().stream().map(WmsQrCodeMaster::getBarcodeCode).toList();
|
||||
wmsPackageItemService.lambdaUpdate()
|
||||
.eq(WmsPackageItem::getPackageId, packageId)
|
||||
.in(WmsPackageItem::getBarcodeCode, codeIds)
|
||||
.set(WmsPackageItem::getPackageStatus, (short) 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,11 +12,12 @@ public enum BarCodeProcessStage {
|
|||
Packaged((short) 1, "已装箱"),
|
||||
UnLoaded((short) 2, "未打包"),
|
||||
Loaded((short) 3, "已打包"),
|
||||
Received ((short) 4, "已收货"),
|
||||
Received((short) 4, "已收货"),
|
||||
Checking((short) 5, "质检中"),
|
||||
InBound((short) 6, "已入库"),
|
||||
OutBound((short) 7, "已出库"), //已被使用,只有退库的时候才会被重新激活
|
||||
Hold((short) 8, "已挂起");// 用于仓库转储,出库之后此二维码还需要继续使用,用一个特殊的状态标记
|
||||
Hold((short) 8, "已挂起"),
|
||||
Checked((short) 9, "质检已完成"); // 用于仓库转储,出库之后此二维码还需要继续使用,用一个特殊的状态标记
|
||||
private final short state;
|
||||
private final String description;
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,22 @@ import java.time.LocalDateTime;
|
|||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class PackagePOItemDTO {
|
||||
|
||||
/**
|
||||
* 包码
|
||||
*/
|
||||
private String packageCode;
|
||||
|
||||
/**
|
||||
* 送货单项ID
|
||||
*/
|
||||
private Long srmOrderId;
|
||||
|
||||
/**
|
||||
* 供应商编号
|
||||
*/
|
||||
private String supplierCode;
|
||||
|
||||
/**
|
||||
* 物料编号
|
||||
*/
|
||||
|
|
@ -37,13 +53,19 @@ public class PackagePOItemDTO {
|
|||
private String poNumber;
|
||||
|
||||
/**
|
||||
* 仓库
|
||||
* 采购单行号
|
||||
*/
|
||||
private String storageLocation;
|
||||
private String poLineNumber;
|
||||
|
||||
|
||||
/**
|
||||
* 送货单单号
|
||||
*/
|
||||
private String deliveryNo;
|
||||
|
||||
/**
|
||||
* 送货单行号
|
||||
*/
|
||||
private String deliveryLineNo;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
package com.nflg.wms.common.pojo.dto;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class WmsPackageItemDetailDTO {
|
||||
|
||||
/* *
|
||||
* 条码ID
|
||||
*/
|
||||
private Long barcodeId;
|
||||
|
||||
/**
|
||||
* 包装项ID
|
||||
*/
|
||||
|
||||
private Long packageItemId;
|
||||
|
||||
/**
|
||||
* 条码编号
|
||||
*/
|
||||
private String barcodeCode;
|
||||
|
||||
/**
|
||||
* 订单项ID
|
||||
*/
|
||||
private Long srmOrderItemId;
|
||||
/**
|
||||
* 条码编号
|
||||
*/
|
||||
|
||||
/**
|
||||
* 物料编号
|
||||
*/
|
||||
private String materialCode;
|
||||
/**
|
||||
* 包装类型 0 为箱子;1 为物料码
|
||||
*/
|
||||
private Short packagingType;
|
||||
/**
|
||||
* 批次编号
|
||||
*/
|
||||
private String batchNo;
|
||||
/**
|
||||
* 序列编号
|
||||
*/
|
||||
private String serialNo;
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private BigDecimal quantity;
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package com.nflg.wms.common.pojo.qo;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class GoodReceiptQO {
|
||||
/**
|
||||
* 打包码编号
|
||||
*/
|
||||
private String packageCode;
|
||||
|
||||
/**
|
||||
* 扫码记录
|
||||
*/
|
||||
private List<SrmMaterialReceiptQO> items;
|
||||
|
||||
}
|
||||
|
|
@ -28,4 +28,8 @@ public class PendingScanningQO {
|
|||
*/
|
||||
private BigDecimal pendingScanQuantity;
|
||||
|
||||
/**
|
||||
* 仓库编号
|
||||
*/
|
||||
private String warehouseCode;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ public class SrmMaterialReceiptQO {
|
|||
/**
|
||||
* 送货单行ID
|
||||
*/
|
||||
private Long id;
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 订单编号
|
||||
|
|
@ -52,11 +52,19 @@ public class SrmMaterialReceiptQO {
|
|||
@NotNull
|
||||
private BigDecimal receiptNum;
|
||||
|
||||
/**
|
||||
* 收货仓库
|
||||
*/
|
||||
private String receivedWarehouse;
|
||||
|
||||
/**
|
||||
* 扫码记录
|
||||
*/
|
||||
private List<PDAScanCodeQO> scanCodes;
|
||||
|
||||
|
||||
/**
|
||||
* 物料单位
|
||||
*/
|
||||
private String uomCode;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
package com.nflg.wms.common.pojo.qo;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class SrmReceiptQO {
|
||||
|
||||
/**
|
||||
* 送货单号
|
||||
*/
|
||||
private String deliveryNo;
|
||||
|
||||
/**
|
||||
* 收货明细
|
||||
*/
|
||||
private List<SrmMaterialReceiptQO> receiptQOS;
|
||||
}
|
||||
|
|
@ -1,8 +1,11 @@
|
|||
package com.nflg.wms.common.pojo.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.nflg.wms.common.pojo.qo.PDAScanCodeQO;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class PDAOrderItemVO {
|
||||
|
|
@ -78,4 +81,9 @@ public class PDAOrderItemVO {
|
|||
*/
|
||||
private BigDecimal transportNum;
|
||||
|
||||
/**
|
||||
* 送货单单号
|
||||
*/
|
||||
private String deliveryNo;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||
import com.nflg.wms.common.pojo.PageData;
|
||||
import com.nflg.wms.common.pojo.dto.PackagePOItemDTO;
|
||||
import com.nflg.wms.common.pojo.dto.PendingScanningItemDTO;
|
||||
import com.nflg.wms.common.pojo.dto.WmsPackageItemDetailDTO;
|
||||
import com.nflg.wms.common.pojo.qo.PackingQO;
|
||||
import com.nflg.wms.common.pojo.qo.PackingSearchQO;
|
||||
import com.nflg.wms.common.pojo.vo.*;
|
||||
|
|
@ -42,4 +43,6 @@ public interface WmsPackageMapper extends BaseMapper<WmsPackage> {
|
|||
List<PendingScanningItemDTO> getScanningItems(List<Long> barcodeIds);
|
||||
|
||||
List<PackagePOItemDTO> getPackagePOItems(String packageCode);
|
||||
|
||||
List<WmsPackageItemDetailDTO> getPackageItemDetails(String packageCode);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
|||
import com.nflg.wms.common.pojo.PageData;
|
||||
import com.nflg.wms.common.pojo.dto.PackagePOItemDTO;
|
||||
import com.nflg.wms.common.pojo.dto.PendingScanningItemDTO;
|
||||
import com.nflg.wms.common.pojo.dto.WmsPackageItemDetailDTO;
|
||||
import com.nflg.wms.common.pojo.qo.PackingQO;
|
||||
import com.nflg.wms.common.pojo.qo.PackingSearchQO;
|
||||
import com.nflg.wms.common.pojo.vo.*;
|
||||
|
|
@ -51,4 +52,6 @@ public interface IWmsPackageService extends IService<WmsPackage> {
|
|||
List<PendingScanningItemDTO> getScanningItems(List<Long> barcodeIds);
|
||||
|
||||
List<PackagePOItemDTO> getPackagePOItems(@NotNull @NotBlank String packageCode);
|
||||
|
||||
List<WmsPackageItemDetailDTO> getPackageItemDetails(String packageCode);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import com.nflg.wms.common.constant.BarCodeProcessStage;
|
|||
import com.nflg.wms.common.pojo.PageData;
|
||||
import com.nflg.wms.common.pojo.dto.PackagePOItemDTO;
|
||||
import com.nflg.wms.common.pojo.dto.PendingScanningItemDTO;
|
||||
import com.nflg.wms.common.pojo.dto.WmsPackageItemDetailDTO;
|
||||
import com.nflg.wms.common.pojo.qo.PackingQO;
|
||||
import com.nflg.wms.common.pojo.qo.PackingSearchQO;
|
||||
import com.nflg.wms.common.pojo.vo.*;
|
||||
|
|
@ -143,5 +144,10 @@ public class WmsPackageServiceImpl extends ServiceImpl<WmsPackageMapper, WmsPack
|
|||
return baseMapper.getPackagePOItems(packageCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<WmsPackageItemDetailDTO> getPackageItemDetails(String packageCode) {
|
||||
return baseMapper.getPackageItemDetails(packageCode);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -178,20 +178,67 @@
|
|||
</select>
|
||||
|
||||
<select id="getPackagePOItems" resultType="com.nflg.wms.common.pojo.dto.PackagePOItemDTO">
|
||||
select
|
||||
c.material_code,
|
||||
c.material_description,
|
||||
e.delivery_qty-e.receipt_qty as order_qty,
|
||||
case when c.packaging_type = 0 then c.po_number else d.po_number end as po_number,
|
||||
case when c.packaging_type = 0 then c.delivery_no else d.delivery_no end as delivery_no,
|
||||
case when c.packaging_type = 0 then c.quantity else sum(d.quantity) end as packing_quantity
|
||||
from wms_package a left join wms_package_item b on a.id=b.package_id
|
||||
left join wms_qr_code_master c on b.barcode_code = c.barcode_code
|
||||
left join wms_qr_code_master d on c.id = d.parent_barcode_id
|
||||
left join wms_srm_order_item e on b.srm_order_item_id=e.id
|
||||
where a.package_code=#{packageCode}
|
||||
group by c.material_code,
|
||||
c.material_description,
|
||||
e.delivery_qty,e.receipt_qty,c.packaging_type,c.po_number,d.po_number,c.delivery_no,d.delivery_no,c.quantity
|
||||
select a.material_code,
|
||||
a.material_description,
|
||||
a.order_qty,
|
||||
a.po_number,
|
||||
a.delivery_no,
|
||||
a.delivery_line_no,
|
||||
a.po_line_number,
|
||||
a.srm_order_item_id,
|
||||
a.package_code,
|
||||
a.supplier_code,
|
||||
sum(a.packing_quantity) as packing_quantity
|
||||
from (select f.supplier_code,
|
||||
a.package_code,
|
||||
b.srm_order_item_id,
|
||||
c.material_code,
|
||||
c.material_description,
|
||||
e.delivery_qty - e.receipt_qty as order_qty,
|
||||
case when c.packaging_type = 0 then c.po_number else d.po_number end as po_number,
|
||||
case
|
||||
when c.packaging_type = 0 then c.po_line_number
|
||||
else d.po_line_number end as po_line_number,
|
||||
case
|
||||
when c.packaging_type = 0 then c.delivery_line_no
|
||||
else d.delivery_line_no end as delivery_line_no,
|
||||
case when c.packaging_type = 0 then c.delivery_no else d.delivery_no end as delivery_no,
|
||||
case
|
||||
when c.packaging_type = 0 then c.quantity
|
||||
else sum(d.quantity) end as packing_quantity
|
||||
from wms_package a
|
||||
inner join wms_package_item b on a.id = b.package_id
|
||||
left join wms_qr_code_master c on b.barcode_code = c.barcode_code
|
||||
left join wms_qr_code_master d on c.id = d.parent_barcode_id and d.process_stage = 1
|
||||
left join wms_srm_order_item e on b.srm_order_item_id = e.id
|
||||
left join user_supplier f on a.supplier_id = f."id"
|
||||
where a.package_code = #{packageCode} and b.package_status = 0
|
||||
group by c.material_code,
|
||||
c.material_description,
|
||||
e.delivery_qty, e.receipt_qty, c.packaging_type, c.po_number, d.po_number, c.delivery_no,
|
||||
d.delivery_no, c.delivery_line_no, d.delivery_line_no, c.po_line_number, d.po_line_number,
|
||||
b.srm_order_item_id, a.package_code,
|
||||
f.supplier_code, c.quantity) a
|
||||
GROUP BY a.material_code,
|
||||
a.material_description, a.order_qty, a.po_number, a.delivery_no, a.delivery_line_no, a.po_line_number,
|
||||
a.srm_order_item_id, a.package_code,
|
||||
a.supplier_code
|
||||
</select>
|
||||
|
||||
<select id="getPackageItemDetails" resultType="com.nflg.wms.common.pojo.dto.WmsPackageItemDetailDTO">
|
||||
select b.id as barcodeId,
|
||||
a.id as package_item_id,
|
||||
a.srm_order_item_id,
|
||||
a.barcode_code,
|
||||
b.material_code,
|
||||
b.packaging_type,
|
||||
b.batch_no,
|
||||
b.serial_no,
|
||||
b.quantity
|
||||
from wms_package_item a
|
||||
inner join wms_package c on a.package_id = c.id
|
||||
inner join wms_qr_code_master b on a.barcode_code = b.barcode_code
|
||||
where a.package_status = 0
|
||||
and c.package_code = #{packageCode}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
Loading…
Reference in New Issue