feat(wms): 新增采购退库功能并优化出库流程
- 在OutAssistanceController、OutCostCenterController、OutProduceController中修改二维码查询条件,将processStage的查询从ne改为eq - 注释掉多个控制器中设置factoryCode、storageLocation、binLocation为空的操作 - 在OutPurchaseController中新增Zwm3a09VO导入和相关服务依赖注入 - 新增search接口用于查询申请单数据,支持PDA使用场景 - 修改OutPurchaseController中的processStage查询逻辑 - 在保存操作后更新退料申请项的剩余数量和出库状态 - 在PurchaseReturnController中为退料申请项添加left字段初始化 - 在QrCodeMasterController中注释掉PO和交货单信息复制逻辑 - 修复ScanRecordController中groupBy方法使用的key字段 - 优化TransferCompanyController和TransferFactoryController中的位置信息清空逻辑 - 为WmsReturnRequestItem实体添加left字段存储剩余数量 - 为ZWM3A05ItemVO和ZWM3A05VO添加链式访问器和必要验证注解
This commit is contained in:
parent
65ab089569
commit
a55d503c83
|
|
@ -227,7 +227,7 @@ public class OutAssistanceController extends BaseController {
|
|||
.map(QRCodeQO::getContent)
|
||||
.collect(Collectors.toSet());
|
||||
List<WmsQrCodeMaster> qrCodeMasters = CollectionUtil.isEmpty(allQrCodes) ? Collections.emptyList() : qrCodeMasterService.lambdaQuery()
|
||||
.ne(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
|
||||
.eq(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
|
||||
.in(WmsQrCodeMaster::getBarcodeCode, allQrCodes)
|
||||
.list();
|
||||
request.getItems().forEach(qitem -> {
|
||||
|
|
@ -292,9 +292,9 @@ public class OutAssistanceController extends BaseController {
|
|||
pti.setNum(pti.getNum().add(qrCodeMaster.getQuantity()));
|
||||
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0)
|
||||
.throwMessage("物料" + materialNo + "的领取数量超出申请限制");
|
||||
qrCodeMaster.setFactoryCode("");
|
||||
qrCodeMaster.setStorageLocation("");
|
||||
qrCodeMaster.setBinLocation("");
|
||||
// qrCodeMaster.setFactoryCode("");
|
||||
// qrCodeMaster.setStorageLocation("");
|
||||
// qrCodeMaster.setBinLocation("");
|
||||
qrCodeMaster.setProcessStage(BarCodeProcessStage.OutBound.getState());
|
||||
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
|
||||
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
|
||||
|
|
|
|||
|
|
@ -225,7 +225,7 @@ public class OutCostCenterController extends BaseController {
|
|||
.map(QRCodeQO::getContent)
|
||||
.collect(Collectors.toSet());
|
||||
List<WmsQrCodeMaster> qrCodeMasters = CollectionUtil.isEmpty(allQrCodes) ? Collections.emptyList() : qrCodeMasterService.lambdaQuery()
|
||||
.ne(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
|
||||
.eq(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
|
||||
.in(WmsQrCodeMaster::getBarcodeCode, allQrCodes)
|
||||
.list();
|
||||
request.getItems().forEach(qitem -> {
|
||||
|
|
@ -286,9 +286,9 @@ public class OutCostCenterController extends BaseController {
|
|||
pti.setNum(pti.getNum().add(qrCodeMaster.getQuantity()));
|
||||
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0)
|
||||
.throwMessage("物料" + materialNo + "的领取数量超出申请限制");
|
||||
qrCodeMaster.setFactoryCode("");
|
||||
qrCodeMaster.setStorageLocation("");
|
||||
qrCodeMaster.setBinLocation("");
|
||||
// qrCodeMaster.setFactoryCode("");
|
||||
// qrCodeMaster.setStorageLocation("");
|
||||
// qrCodeMaster.setBinLocation("");
|
||||
qrCodeMaster.setProcessStage(BarCodeProcessStage.OutBound.getState());
|
||||
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
|
||||
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
|
||||
|
|
|
|||
|
|
@ -338,7 +338,7 @@ public class OutProduceController extends BaseController {
|
|||
.map(QRCodeQO::getContent)
|
||||
.collect(Collectors.toSet());
|
||||
List<WmsQrCodeMaster> qrCodeMasters = CollectionUtil.isEmpty(allQrCodes) ? Collections.emptyList() : qrCodeMasterService.lambdaQuery()
|
||||
.ne(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
|
||||
.eq(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
|
||||
.in(WmsQrCodeMaster::getBarcodeCode, allQrCodes)
|
||||
.list();
|
||||
// boolean enableOutScanChild = paramConfigService.getEnableOutScanChild();
|
||||
|
|
@ -408,9 +408,9 @@ public class OutProduceController extends BaseController {
|
|||
pti.setNum(pti.getNum().add(qrCodeMaster.getQuantity()));
|
||||
VUtil.trueThrowBusinessError(item.getNum().compareTo(item.getSqsl()) > 0)
|
||||
.throwMessage("物料" + materialNo + "的领取数量超出申请限制");
|
||||
qrCodeMaster.setFactoryCode("");
|
||||
qrCodeMaster.setStorageLocation("");
|
||||
qrCodeMaster.setBinLocation("");
|
||||
// qrCodeMaster.setFactoryCode("");
|
||||
// qrCodeMaster.setStorageLocation("");
|
||||
// qrCodeMaster.setBinLocation("");
|
||||
qrCodeMaster.setProcessStage(BarCodeProcessStage.OutBound.getState());
|
||||
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
|
||||
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
|
||||
|
|
|
|||
|
|
@ -21,15 +21,11 @@ import com.nflg.wms.common.pojo.qo.QRCodeQO;
|
|||
import com.nflg.wms.common.pojo.vo.OutPurchaseVO;
|
||||
import com.nflg.wms.common.pojo.vo.ZWM3A05ItemVO;
|
||||
import com.nflg.wms.common.pojo.vo.ZWM3A05VO;
|
||||
import com.nflg.wms.common.pojo.vo.Zwm3a09VO;
|
||||
import com.nflg.wms.common.util.UserUtil;
|
||||
import com.nflg.wms.common.util.VUtil;
|
||||
import com.nflg.wms.repository.entity.WmsOutPurchase;
|
||||
import com.nflg.wms.repository.entity.WmsOutPurchaseItem;
|
||||
import com.nflg.wms.repository.entity.WmsQrCodeMaster;
|
||||
import com.nflg.wms.repository.service.IWmsInventoryService;
|
||||
import com.nflg.wms.repository.service.IWmsOutPurchaseItemService;
|
||||
import com.nflg.wms.repository.service.IWmsOutPurchaseService;
|
||||
import com.nflg.wms.repository.service.IWmsQrCodeMasterService;
|
||||
import com.nflg.wms.repository.entity.*;
|
||||
import com.nflg.wms.repository.service.*;
|
||||
import com.nflg.wms.starter.BaseController;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
|
|
@ -74,6 +70,12 @@ public class OutPurchaseController extends BaseController {
|
|||
@Resource
|
||||
private IWmsQrCodeMasterService qrCodeMasterService;
|
||||
|
||||
@Resource
|
||||
private IWmsReturnRequestService returnRequestService;
|
||||
|
||||
@Resource
|
||||
private IWmsReturnRequestItemService returnRequestItemService;
|
||||
|
||||
// /**
|
||||
// * 获取采购退库信息(PDA使用)
|
||||
// * @return 要退库的物料信息列表
|
||||
|
|
@ -87,6 +89,42 @@ public class OutPurchaseController extends BaseController {
|
|||
// return ApiResult.success(result);
|
||||
// }
|
||||
|
||||
/**
|
||||
* 查询申请单数据(PDA使用)
|
||||
* @param no 退料申请单编号
|
||||
*/
|
||||
@GetMapping("search")
|
||||
public ApiResult<List<ZWM3A05VO>> search(@RequestParam String no) {
|
||||
WmsReturnRequest order = returnRequestService.lambdaQuery()
|
||||
.eq(WmsReturnRequest::getApprovalStatus, 1)
|
||||
.ne(WmsReturnRequest::getOutStatus, 1)
|
||||
.eq(WmsReturnRequest::getApplicationNo, no)
|
||||
.one();
|
||||
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("申请单无效");
|
||||
List<WmsReturnRequestItem> items = returnRequestItemService.lambdaQuery()
|
||||
.eq(WmsReturnRequestItem::getApplicationId, order.getId())
|
||||
.gt(WmsReturnRequestItem::getLeft, 0)
|
||||
.list();
|
||||
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(items)).throwMessage("所有物料均已完成");
|
||||
ZWM3A05VO vo = new ZWM3A05VO()
|
||||
.setPurchaseOrderId(order.getId())
|
||||
.setLifnr(order.getSupplierCode())
|
||||
.setEbeln(order.getPoNum())
|
||||
.setItems(
|
||||
items.stream()
|
||||
.map(it -> new ZWM3A05ItemVO()
|
||||
.setPurchaseOrderItemId(it.getId())
|
||||
.setMatnr(it.getMaterialCode())
|
||||
.setMaktx(it.getMaterialDescription())
|
||||
.setTemng(it.getLeft())
|
||||
.setMeins(it.getUnit())
|
||||
.setLgort(it.getStorageLocation())
|
||||
)
|
||||
.toList()
|
||||
);
|
||||
return ApiResult.success(List.of(vo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存(PDA使用)
|
||||
* @param request 采购退库信息
|
||||
|
|
@ -106,7 +144,7 @@ public class OutPurchaseController extends BaseController {
|
|||
.map(QRCodeQO::getContent)
|
||||
.collect(Collectors.toSet());
|
||||
List<WmsQrCodeMaster> qrCodeMasters = CollectionUtil.isEmpty(allQrCodes) ? Collections.emptyList() : qrCodeMasterService.lambdaQuery()
|
||||
.ne(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
|
||||
.eq(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.InBound.getState())
|
||||
.in(WmsQrCodeMaster::getBarcodeCode, allQrCodes)
|
||||
.list();
|
||||
request.getItems().forEach(it -> {
|
||||
|
|
@ -129,9 +167,9 @@ public class OutPurchaseController extends BaseController {
|
|||
VUtil.trueThrowBusinessError(!check(qrCodeMaster, it.getCharg(), it.getSernrs()))
|
||||
.throwMessage("物料" + it.getMatnr() + "包含不符合批次号和序列号的扫码记录");
|
||||
item.setNum(item.getNum().add(qrCodeMaster.getQuantity()));
|
||||
qrCodeMaster.setFactoryCode("");
|
||||
qrCodeMaster.setStorageLocation("");
|
||||
qrCodeMaster.setBinLocation("");
|
||||
// qrCodeMaster.setFactoryCode("");
|
||||
// qrCodeMaster.setStorageLocation("");
|
||||
// qrCodeMaster.setBinLocation("");
|
||||
qrCodeMaster.setProcessStage(BarCodeProcessStage.OutBound.getState());
|
||||
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
|
||||
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
|
||||
|
|
@ -246,6 +284,28 @@ public class OutPurchaseController extends BaseController {
|
|||
.setNum(list.stream().map(OutMaterialScanRecord::getNum).reduce(BigDecimal.ZERO, BigDecimal::add))
|
||||
).toList()
|
||||
);
|
||||
request.getItems().forEach(it -> {
|
||||
WmsReturnRequestItem item = returnRequestItemService.getById(it.getPurchaseOrderItemId());
|
||||
item.setLeft(item.getLeft().subtract(it.getTemng()));
|
||||
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0)
|
||||
.throwMessage("物料" + it.getMatnr() + "的扫码数量大于退货数量");
|
||||
returnRequestItemService.updateById(item);
|
||||
});
|
||||
if (returnRequestItemService.lambdaQuery()
|
||||
.eq(WmsReturnRequestItem::getApplicationId, request.getPurchaseOrderId())
|
||||
.gt(WmsReturnRequestItem::getLeft, 0)
|
||||
.exists()
|
||||
) {
|
||||
returnRequestService.lambdaUpdate()
|
||||
.set(WmsReturnRequest::getOutStatus, 2)
|
||||
.eq(WmsReturnRequest::getId, request.getPurchaseOrderId())
|
||||
.update();
|
||||
} else {
|
||||
returnRequestService.lambdaUpdate()
|
||||
.set(WmsReturnRequest::getOutStatus, 1)
|
||||
.eq(WmsReturnRequest::getId, request.getPurchaseOrderId())
|
||||
.update();
|
||||
}
|
||||
Pair<String, String> result = sapService.zwm3A06(request.getEbeln(), input1, input2);
|
||||
outPurchaseService.lambdaUpdate()
|
||||
.set(WmsOutPurchase::getMatDoc, result.getKey())
|
||||
|
|
|
|||
|
|
@ -325,7 +325,8 @@ public class PurchaseReturnController extends BaseController {
|
|||
.setMaterialDescription(purchaseReturnDTO.getMaterialDescription())
|
||||
.setRequestQuantity(purchaseReturnDTO.getRequestQuantity())
|
||||
.setOutboundStatus(Short.valueOf("0"))
|
||||
.setUnit(purchaseReturnDTO.getUnit());
|
||||
.setUnit(purchaseReturnDTO.getUnit())
|
||||
.setLeft(purchaseReturnDTO.getRequestQuantity());
|
||||
returnRequestItems.add(returnRequestItem);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,6 +190,10 @@ public class QrCodeMasterController extends BaseController {
|
|||
smallQrCodeMaster.setLastScanBy(UserUtil.getUserId());
|
||||
smallQrCodeMaster.setLastScanByname(UserUtil.getUserName());
|
||||
}
|
||||
// qrCodeMaster.setPoNumber(smallQrCodeMasters.get(0).getPoNumber());
|
||||
// qrCodeMaster.setPoLineNumber(smallQrCodeMasters.get(0).getPoLineNumber());
|
||||
// qrCodeMaster.setDeliveryNo(smallQrCodeMasters.get(0).getDeliveryNo());
|
||||
// qrCodeMaster.setDeliveryLineNo(smallQrCodeMasters.get(0).getDeliveryLineNo());
|
||||
qrCodeMaster.setQuantity(smallQrCodeMasters.stream().map(WmsQrCodeMaster::getQuantity).reduce(BigDecimal.ZERO, BigDecimal::add));
|
||||
qrCodeMaster.setLastScanTime(LocalDateTime.now());
|
||||
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ public class ScanRecordController extends BaseController {
|
|||
return tv;
|
||||
});
|
||||
v.stream()
|
||||
.collect(Collectors.groupingBy(OutMaterialScanRecord::getKey8))
|
||||
.collect(Collectors.groupingBy(OutMaterialScanRecord::getKey9))
|
||||
.forEach((key, vv) -> {
|
||||
vo.getItems().add(new OutDifferenceItemVO()
|
||||
.setRecommendbatchNo("")
|
||||
|
|
|
|||
|
|
@ -323,8 +323,8 @@ public class TransferCompanyController extends BaseController {
|
|||
pti.setNum(pti.getNum().add(qrCodeMaster.getQuantity()));
|
||||
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0)
|
||||
.throwMessage("物料" + materialNo + "的出库数量超出申请限制");
|
||||
qrCodeMaster.setStorageLocation("");
|
||||
qrCodeMaster.setBinLocation("");
|
||||
// qrCodeMaster.setStorageLocation("");
|
||||
// qrCodeMaster.setBinLocation("");
|
||||
qrCodeMaster.setProcessStage(BarCodeProcessStage.OutBound.getState());
|
||||
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
|
||||
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
|
||||
|
|
|
|||
|
|
@ -320,8 +320,8 @@ public class TransferFactoryController extends BaseController {
|
|||
item.setLeft(item.getLeft().subtract(qrCodeMaster.getQuantity()));
|
||||
VUtil.trueThrowBusinessError(item.getLeft().compareTo(BigDecimal.ZERO) < 0)
|
||||
.throwMessage("物料" + materialNo + "的出库数量超出申请限制");
|
||||
qrCodeMaster.setStorageLocation("");
|
||||
qrCodeMaster.setBinLocation("");
|
||||
// qrCodeMaster.setStorageLocation("");
|
||||
// qrCodeMaster.setBinLocation("");
|
||||
qrCodeMaster.setProcessStage(BarCodeProcessStage.OutBound.getState());
|
||||
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
|
||||
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
|
||||
|
|
|
|||
|
|
@ -6,15 +6,23 @@ import com.nflg.wms.common.pojo.qo.QRCodeQO;
|
|||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Positive;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class ZWM3A05ItemVO {
|
||||
|
||||
/**
|
||||
* 申请单项ID
|
||||
*/
|
||||
@NotNull
|
||||
private Long purchaseOrderItemId;
|
||||
|
||||
/**
|
||||
* 采购凭证的项目编号
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.nflg.wms.common.pojo.vo;
|
|||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
|
|
@ -29,6 +30,12 @@ public class ZWM3A05VO {
|
|||
@NotBlank
|
||||
private String werks;
|
||||
|
||||
/**
|
||||
* 申请单ID
|
||||
*/
|
||||
@NotNull
|
||||
private Long purchaseOrderId;
|
||||
|
||||
@Valid
|
||||
@NotEmpty
|
||||
private List<ZWM3A05ItemVO> items = new ArrayList<>();
|
||||
|
|
|
|||
|
|
@ -77,6 +77,11 @@ public class WmsReturnRequestItem implements Serializable {
|
|||
*/
|
||||
private BigDecimal requestQuantity;
|
||||
|
||||
/**
|
||||
* 剩余数量
|
||||
*/
|
||||
private BigDecimal left;
|
||||
|
||||
/**
|
||||
* 出库状态
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue