|
@@ -807,22 +807,25 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
|
@Transactional
|
|
|
@Override
|
|
|
public AjaxResult groupDisk(GroupDiskFrom groupDiskFrom) {
|
|
|
- // 更新托盘
|
|
|
- WmsBoxInfo boxFrom = wmsBoxInfoService.selectWmsBoxInfoByBoxNo(groupDiskFrom.getPalletNoTo());
|
|
|
- boxFrom.setIsFull(groupDiskFrom.getIsFull());
|
|
|
- wmsBoxInfoService.updateWmsBoxInfo(boxFrom);
|
|
|
-
|
|
|
String palletNoFrom = groupDiskFrom.getPalletNoFrom(); // 起始托盘
|
|
|
String palletNoTo = groupDiskFrom.getPalletNoTo(); // 目标托盘
|
|
|
String sn = groupDiskFrom.getSn(); // 条码号
|
|
|
String orderNo = ""; // 出库单号(备货才会传入)
|
|
|
String sku = ""; // 物料编码
|
|
|
+ Double qty = Double.valueOf(groupDiskFrom.getQty()); // 数量
|
|
|
+ boolean isAllUpdate = false; // 是全部修改,还是拆分
|
|
|
+ boolean isStockPalletNoTo = groupDiskFrom.isStockPalletNoTo(); // 目标托盘是否是备货托盘,为了方便,目标托盘默认是备货托盘
|
|
|
+ final Double toQty;
|
|
|
if (StringUtils.isNotEmpty(groupDiskFrom.getOrderNo())) {
|
|
|
orderNo = groupDiskFrom.getOrderNo();
|
|
|
}
|
|
|
- /// 根据条码获取物料号
|
|
|
+ // 根据条码获取物料号
|
|
|
CodeSkuRelationshipVO codeSkuRelationshipVO = codeSkuRelationshipService.checkIsProduct(sn);
|
|
|
sku = codeSkuRelationshipVO.getSku();
|
|
|
+ if (codeSkuRelationshipVO.isProduct()) {
|
|
|
+ qty = 1.0; //产品默认为1
|
|
|
+ }
|
|
|
+ toQty = qty;
|
|
|
// 根据起始托盘,条码号查出库存
|
|
|
InvLocIdSearchFrom locIdSearchFrom = new InvLocIdSearchFrom();
|
|
|
locIdSearchFrom.setSku(sku);
|
|
@@ -830,12 +833,29 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
|
lotattDTO.setLotatt07(palletNoFrom);
|
|
|
lotattDTO.setLotatt02(sn);
|
|
|
locIdSearchFrom.setLotattDTO(lotattDTO);
|
|
|
- List<InvLotLocIdLotattVO> invLotLocIdLotattVOList = invLotLocIdService.selectInvLocIdLotattList(locIdSearchFrom);
|
|
|
+ List<InvLotLocIdLotattVO> invLotLocIdLotattList = invLotLocIdService.selectInvLocIdLotattList(locIdSearchFrom);
|
|
|
// 组盘是把出库的库存重新组到一个新的托盘上,所以起始托盘和条码理应可以查询到系统里有对应的库存。
|
|
|
- if (invLotLocIdLotattVOList.size() == 0) {
|
|
|
+ if (invLotLocIdLotattList.size() == 0) {
|
|
|
return AjaxResult.error(String.format("不存在对应库存!起始托盘:%s,条码:%s", palletNoFrom, sn));
|
|
|
}
|
|
|
- // 创建Lotnum和库存对应关系,可能是一对多
|
|
|
+ // 产品的话基本只能查出有一条库存 但是物料可能会多条 但是我们只处理一条库存
|
|
|
+ List<InvLotLocIdLotattVO> invLotLocIdLotattVOList = new ArrayList<>();
|
|
|
+ InvLotLocIdLotattVO endLotattVO = new InvLotLocIdLotattVO();
|
|
|
+ List<InvLotLocIdLotattVO> equalInv = invLotLocIdLotattList.stream().filter(v -> v.getQty().compareTo(toQty) == 0).collect(Collectors.toList());
|
|
|
+ if (equalInv.size() > 0) {
|
|
|
+ endLotattVO = equalInv.get(0);
|
|
|
+ isAllUpdate = true;
|
|
|
+ } else {
|
|
|
+ List<InvLotLocIdLotattVO> greaterInv = invLotLocIdLotattList.stream().filter(v -> v.getQty().compareTo(toQty) == 1).collect(Collectors.toList());
|
|
|
+ if (greaterInv.size() > 0) {
|
|
|
+ endLotattVO = greaterInv.get(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (endLotattVO == null) {
|
|
|
+ return AjaxResult.error("组盘数量大于单条库存数量!");
|
|
|
+ }
|
|
|
+ invLotLocIdLotattVOList.add(endLotattVO);
|
|
|
+ // 创建Lotnum和库存对应关系
|
|
|
Map<String, List<InvLotLocIdLotattVO>> lotnumAndInvLocIdMap = new HashMap<>();
|
|
|
invLotLocIdLotattVOList.stream().forEach(v -> {
|
|
|
if (lotnumAndInvLocIdMap.get(v) == null) {
|
|
@@ -868,18 +888,86 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
|
invLotAtt.setCreateTime(DateUtils.getNowDate());
|
|
|
if (invLotAttMapper.insertInvLotAtt(invLotAtt) > 0) {
|
|
|
for (InvLotLocIdLotattVO v : invLocIdList) {
|
|
|
- InvLotLocIdForm invLotLocIdUpdate = new InvLotLocIdForm();
|
|
|
- invLotLocIdUpdate.setLotnum(lotnum);
|
|
|
- invLotLocIdUpdate.setLocationId(v.getLocationId().toString());
|
|
|
- invLotLocIdUpdate.setCustomerId(v.getCustomerId());
|
|
|
- invLotLocIdUpdate.setSku(v.getSku());
|
|
|
- invLotLocIdUpdate.setLotnumTo(newLotnum);
|
|
|
- invLotLocIdService.updateInvLotLocId(invLotLocIdUpdate);
|
|
|
+ // 如果是备货,备货的组盘数量不能大于分配数
|
|
|
+ if (StringUtils.isNotEmpty(orderNo)) {
|
|
|
+ Double qtyallocated = v.getQtyallocated();
|
|
|
+ if (toQty.compareTo(qtyallocated) == 1) {
|
|
|
+ return AjaxResult.error("备货组盘数量输入不合理!不可大于分配数量:" + qtyallocated);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (isAllUpdate) {
|
|
|
+ InvLotLocIdForm invLotLocIdUpdate = new InvLotLocIdForm();
|
|
|
+ invLotLocIdUpdate.setLotnum(lotnum);
|
|
|
+ invLotLocIdUpdate.setLocationId(v.getLocationId().toString());
|
|
|
+ invLotLocIdUpdate.setCustomerId(v.getCustomerId());
|
|
|
+ invLotLocIdUpdate.setSku(v.getSku());
|
|
|
+ invLotLocIdUpdate.setLotnumTo(newLotnum);
|
|
|
+ invLotLocIdService.updateInvLotLocId(invLotLocIdUpdate);
|
|
|
+ } else {
|
|
|
+ InvLotLocId invLotLocId = invLotLocIdService.selectInvLotLocIdById(v.getLocationId().toString()
|
|
|
+ , v.getCustomerId(), v.getSku(), v.getLotnum());
|
|
|
+ BigDecimal qtyallocated = invLotLocId.getQtyallocated();
|
|
|
+ // 判断是否是备货组盘
|
|
|
+ if (StringUtils.isNotEmpty(orderNo)) {
|
|
|
+ if (isStockPalletNoTo) {
|
|
|
+ // 拆分库存
|
|
|
+ // 修改原库存
|
|
|
+ InvLotLocIdForm invLotLocIdUpdate = new InvLotLocIdForm();
|
|
|
+ invLotLocIdUpdate.setLotnum(v.getLotnum());
|
|
|
+ invLotLocIdUpdate.setLocationId(v.getLocationId().toString());
|
|
|
+ invLotLocIdUpdate.setCustomerId(v.getCustomerId());
|
|
|
+ invLotLocIdUpdate.setSku(v.getSku());
|
|
|
+ invLotLocIdUpdate.setQty(invLotLocId.getQty().subtract(new BigDecimal(toQty)));
|
|
|
+ invLotLocIdUpdate.setQtyallocated(qtyallocated.subtract(new BigDecimal(toQty)));
|
|
|
+ invLotLocIdService.updateInvLotLocId(invLotLocIdUpdate);
|
|
|
+ // 插入新库存
|
|
|
+ InvLotLocId invLotLocIdInsert = invLotLocId;
|
|
|
+ invLotLocIdInsert.setLotnum(newLotnum);
|
|
|
+ invLotLocIdInsert.setQty(new BigDecimal(toQty));
|
|
|
+ invLotLocIdInsert.setQtyEach(invLotLocIdInsert.getQty());
|
|
|
+ invLotLocIdInsert.setQtyallocated(new BigDecimal(toQty));
|
|
|
+ invLotLocIdInsert.setQtyallocatedEach(invLotLocIdInsert.getQtyallocated());
|
|
|
+ invLotLocIdService.insertInvLotLocId(invLotLocIdInsert);
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ // 拆分库存
|
|
|
+ // 修改原库存
|
|
|
+ InvLotLocIdForm invLotLocIdUpdate = new InvLotLocIdForm();
|
|
|
+ invLotLocIdUpdate.setLotnum(v.getLotnum());
|
|
|
+ invLotLocIdUpdate.setLocationId(v.getLocationId().toString());
|
|
|
+ invLotLocIdUpdate.setCustomerId(v.getCustomerId());
|
|
|
+ invLotLocIdUpdate.setSku(v.getSku());
|
|
|
+ invLotLocIdUpdate.setQty(invLotLocId.getQty().subtract(new BigDecimal(toQty)));
|
|
|
+ if(qtyallocated.compareTo(new BigDecimal(toQty)) == 1) {
|
|
|
+ invLotLocIdUpdate.setQtyallocated(qtyallocated.subtract(new BigDecimal(toQty)));
|
|
|
+ }else {
|
|
|
+ invLotLocIdUpdate.setQtyallocated(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+ invLotLocIdService.updateInvLotLocId(invLotLocIdUpdate);
|
|
|
+ // 插入新库存
|
|
|
+ InvLotLocId invLotLocIdInsert = invLotLocId;
|
|
|
+ invLotLocIdInsert.setLotnum(newLotnum);
|
|
|
+ invLotLocIdInsert.setQty(new BigDecimal(toQty));
|
|
|
+ invLotLocIdInsert.setQtyEach(invLotLocIdInsert.getQty());
|
|
|
+ if(qtyallocated.compareTo(new BigDecimal(toQty)) == 1) {
|
|
|
+ invLotLocIdInsert.setQtyallocated(new BigDecimal(toQty));
|
|
|
+ }else {
|
|
|
+ invLotLocIdInsert.setQtyallocated(qtyallocated);
|
|
|
+ }
|
|
|
+ invLotLocIdInsert.setQtyallocatedEach(invLotLocIdInsert.getQtyallocated());
|
|
|
+ invLotLocIdService.insertInvLotLocId(invLotLocIdInsert);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
// }
|
|
|
+ // 更新托盘
|
|
|
+ WmsBoxInfo boxFrom = wmsBoxInfoService.selectWmsBoxInfoByBoxNo(groupDiskFrom.getPalletNoTo());
|
|
|
+ boxFrom.setIsFull(groupDiskFrom.getIsFull());
|
|
|
+ wmsBoxInfoService.updateWmsBoxInfo(boxFrom);
|
|
|
return AjaxResult.success("组盘成功!");
|
|
|
}
|
|
|
|