|
@@ -1,5 +1,6 @@
|
|
package com.ruoyi.ams.order.service.impl;
|
|
package com.ruoyi.ams.order.service.impl;
|
|
|
|
|
|
|
|
+import com.ruoyi.ams.asn.service.IWmsDocAsnHeaderService;
|
|
import com.ruoyi.ams.box.domain.WmsBoxInfo;
|
|
import com.ruoyi.ams.box.domain.WmsBoxInfo;
|
|
import com.ruoyi.ams.box.mapper.WmsBoxInfoMapper;
|
|
import com.ruoyi.ams.box.mapper.WmsBoxInfoMapper;
|
|
import com.ruoyi.ams.box.service.IWmsBoxInfoService;
|
|
import com.ruoyi.ams.box.service.IWmsBoxInfoService;
|
|
@@ -99,6 +100,8 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
private IErpBarcodesService erpBarcodesService;
|
|
private IErpBarcodesService erpBarcodesService;
|
|
@Autowired
|
|
@Autowired
|
|
private IInvLotAttService invLotAttService;
|
|
private IInvLotAttService invLotAttService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private IWmsDocAsnHeaderService iWmsDocAsnHeaderService;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 查询出库单头
|
|
* 查询出库单头
|
|
@@ -909,6 +912,11 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
return AjaxResult.error("组盘数量大于单条库存数量!");
|
|
return AjaxResult.error("组盘数量大于单条库存数量!");
|
|
}
|
|
}
|
|
invLotLocIdLotattVOList.add(endLotattVO);
|
|
invLotLocIdLotattVOList.add(endLotattVO);
|
|
|
|
+ // 不同的产品类型不允许放一个托盘上
|
|
|
|
+ boolean isSameType = iWmsDocAsnHeaderService.checkSameTypeByPalletNo(palletNoTo, sku);
|
|
|
|
+ if (!isSameType) {
|
|
|
|
+ throw new ServiceException("不同的产品类型不允许放一个托盘上");
|
|
|
|
+ }
|
|
// 验证扫描产品是否可以组盘
|
|
// 验证扫描产品是否可以组盘
|
|
AjaxResult ajaxResult = verifyThatDisksCanBeGrouped(endLotattVO);
|
|
AjaxResult ajaxResult = verifyThatDisksCanBeGrouped(endLotattVO);
|
|
if (!ajaxResult.isSuccess()) {
|
|
if (!ajaxResult.isSuccess()) {
|
|
@@ -928,7 +936,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
AjaxResult ajaxResultC = invLotLocIdService.checkPalletIsOnlyOrderNo(groupDiskFrom.getPalletNoTo()
|
|
AjaxResult ajaxResultC = invLotLocIdService.checkPalletIsOnlyOrderNo(groupDiskFrom.getPalletNoTo()
|
|
, StringUtils.isEmpty(endLotattVO.getLotatt14()) ? "" : endLotattVO.getLotatt14());
|
|
, StringUtils.isEmpty(endLotattVO.getLotatt14()) ? "" : endLotattVO.getLotatt14());
|
|
if (!ajaxResultC.isSuccess()) {
|
|
if (!ajaxResultC.isSuccess()) {
|
|
- return ajaxResult;
|
|
|
|
|
|
+ return ajaxResultC;
|
|
}
|
|
}
|
|
|
|
|
|
// 创建Lotnum和库存对应关系
|
|
// 创建Lotnum和库存对应关系
|
|
@@ -1091,7 +1099,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
String orderNo = ""; // 出库单号(备货才会传入)
|
|
String orderNo = ""; // 出库单号(备货才会传入)
|
|
String sku = ""; // 物料编码
|
|
String sku = ""; // 物料编码
|
|
Double qty = Double.valueOf(groupDiskFrom.getQty()); // 数量
|
|
Double qty = Double.valueOf(groupDiskFrom.getQty()); // 数量
|
|
- boolean isAllUpdate = false; // 是全部修改,还是拆分
|
|
|
|
|
|
+ boolean isAllUpdate = false; // 库存转移类型,是全部修改,还是拆分
|
|
boolean isStockPalletNoTo = groupDiskFrom.isStockPalletNoTo(); // 目标托盘是否是备货托盘,为了方便,目标托盘默认是备货托盘
|
|
boolean isStockPalletNoTo = groupDiskFrom.isStockPalletNoTo(); // 目标托盘是否是备货托盘,为了方便,目标托盘默认是备货托盘
|
|
final Double toQty;
|
|
final Double toQty;
|
|
if (StringUtils.isNotEmpty(groupDiskFrom.getOrderNo())) {
|
|
if (StringUtils.isNotEmpty(groupDiskFrom.getOrderNo())) {
|
|
@@ -1099,13 +1107,16 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
}
|
|
}
|
|
// 验证出库单
|
|
// 验证出库单
|
|
if (StringUtils.isNotEmpty(orderNo)) {
|
|
if (StringUtils.isNotEmpty(orderNo)) {
|
|
-// WmsDocOrderHeader header = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
|
|
|
|
-// if (header != null
|
|
|
|
-// && !header.getOrderStatus().equals(Constant.ORDER_STS.STS10.getValue())
|
|
|
|
-// && !header.getOrderStatus().equals(Constant.ORDER_STS.STS20.getValue())
|
|
|
|
-// && !header.getOrderStatus().equals(Constant.ORDER_STS.STS21.getValue())) {
|
|
|
|
-// return AjaxResult.error("出库单状态不可组盘!");
|
|
|
|
-// }
|
|
|
|
|
|
+ WmsDocOrderHeader header = wmsDocOrderHeaderService.selectWmsDocOrderHeaderByOrderNo(orderNo);
|
|
|
|
+ if(!header.getOrderType().equals(Constant.ORDER_TYP.BH.getValue())){
|
|
|
|
+ return AjaxResult.error("出库单类型不可备货组盘!");
|
|
|
|
+ }
|
|
|
|
+ if (header != null
|
|
|
|
+ && !header.getOrderStatus().equals(Constant.ORDER_STS.STS10.getValue())
|
|
|
|
+ && !header.getOrderStatus().equals(Constant.ORDER_STS.STS20.getValue())
|
|
|
|
+ && !header.getOrderStatus().equals(Constant.ORDER_STS.STS22.getValue())) {
|
|
|
|
+ return AjaxResult.error("出库单状态不可备货组盘!");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
// 根据条码获取物料号
|
|
// 根据条码获取物料号
|
|
CodeSkuRelationshipVO codeSkuRelationshipVO = codeSkuRelationshipService.checkIsProduct(sn);
|
|
CodeSkuRelationshipVO codeSkuRelationshipVO = codeSkuRelationshipService.checkIsProduct(sn);
|
|
@@ -1120,6 +1131,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
LotattDTO lotattDTO = new LotattDTO();
|
|
LotattDTO lotattDTO = new LotattDTO();
|
|
lotattDTO.setLotatt07(palletNoFrom);
|
|
lotattDTO.setLotatt07(palletNoFrom);
|
|
lotattDTO.setLotatt02(sn);
|
|
lotattDTO.setLotatt02(sn);
|
|
|
|
+ lotattDTO.setLotatt15(orderNo);
|
|
locIdSearchFrom.setLotattDTO(lotattDTO);
|
|
locIdSearchFrom.setLotattDTO(lotattDTO);
|
|
List<InvLotLocIdLotattVO> invLotLocIdLotattList = invLotLocIdService.selectInvLocIdLotattList(locIdSearchFrom);
|
|
List<InvLotLocIdLotattVO> invLotLocIdLotattList = invLotLocIdService.selectInvLocIdLotattList(locIdSearchFrom);
|
|
// 组盘是把出库的库存重新组到一个新的托盘上,所以起始托盘和条码理应可以查询到系统里有对应的库存。
|
|
// 组盘是把出库的库存重新组到一个新的托盘上,所以起始托盘和条码理应可以查询到系统里有对应的库存。
|
|
@@ -1143,6 +1155,12 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
return AjaxResult.error("组盘数量大于单条库存数量!");
|
|
return AjaxResult.error("组盘数量大于单条库存数量!");
|
|
}
|
|
}
|
|
invLotLocIdLotattVOList.add(endLotattVO);
|
|
invLotLocIdLotattVOList.add(endLotattVO);
|
|
|
|
+ //验证目标托盘库存,一个托盘只能备货一个出库单
|
|
|
|
+ AjaxResult ajaxResultC = invLotLocIdService.checkPalletIsOnlyOrderNo(groupDiskFrom.getPalletNoTo()
|
|
|
|
+ , StringUtils.isEmpty(endLotattVO.getLotatt14()) ? "" : endLotattVO.getLotatt14());
|
|
|
|
+ if (!ajaxResultC.isSuccess()) {
|
|
|
|
+ return ajaxResultC;
|
|
|
|
+ }
|
|
// 创建Lotnum和库存对应关系
|
|
// 创建Lotnum和库存对应关系
|
|
Map<String, List<InvLotLocIdLotattVO>> lotnumAndInvLocIdMap = new HashMap<>();
|
|
Map<String, List<InvLotLocIdLotattVO>> lotnumAndInvLocIdMap = new HashMap<>();
|
|
invLotLocIdLotattVOList.stream().forEach(v -> {
|
|
invLotLocIdLotattVOList.stream().forEach(v -> {
|
|
@@ -1154,11 +1172,6 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
lotnumAndInvLocIdMap.put(v.getLotnum(), locIdLotattVOList);
|
|
lotnumAndInvLocIdMap.put(v.getLotnum(), locIdLotattVOList);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
-// if (palletNoFrom.equals(palletNoTo) && orderNo.equals("")) {
|
|
|
|
- // 起始托盘和目标托盘一样,并且出库单传入为空,不做操作
|
|
|
|
-// return AjaxResult.success("起始和目标托盘一致,不用组盘!");
|
|
|
|
-
|
|
|
|
-// } else {
|
|
|
|
// 根据老Lotnum创建新的Lotnum
|
|
// 根据老Lotnum创建新的Lotnum
|
|
for (Map.Entry<String, List<InvLotLocIdLotattVO>> lotnumToInvLocId : lotnumAndInvLocIdMap.entrySet()) {
|
|
for (Map.Entry<String, List<InvLotLocIdLotattVO>> lotnumToInvLocId : lotnumAndInvLocIdMap.entrySet()) {
|
|
String lotnum = lotnumToInvLocId.getKey();
|
|
String lotnum = lotnumToInvLocId.getKey();
|
|
@@ -1167,11 +1180,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
String newLotnum = idSequenceUtils.generateId("LOTNUMBER");
|
|
String newLotnum = idSequenceUtils.generateId("LOTNUMBER");
|
|
invLotAtt.setLotnum(newLotnum);
|
|
invLotAtt.setLotnum(newLotnum);
|
|
invLotAtt.setLotatt07(palletNoTo);
|
|
invLotAtt.setLotatt07(palletNoTo);
|
|
- if (!orderNo.equals("")) {
|
|
|
|
- invLotAtt.setLotatt14(orderNo); // 备货对应的出库单号
|
|
|
|
- } else {
|
|
|
|
- invLotAtt.setLotatt14(""); // 备货对应的出库单号
|
|
|
|
- }
|
|
|
|
|
|
+ invLotAtt.setLotatt14(orderNo); // 备货对应的出库单号
|
|
invLotAtt.setCreateTime(DateUtils.getNowDate());
|
|
invLotAtt.setCreateTime(DateUtils.getNowDate());
|
|
if (invLotAttMapper.insertInvLotAtt(invLotAtt) > 0) {
|
|
if (invLotAttMapper.insertInvLotAtt(invLotAtt) > 0) {
|
|
for (InvLotLocIdLotattVO v : invLocIdList) {
|
|
for (InvLotLocIdLotattVO v : invLocIdList) {
|
|
@@ -1194,29 +1203,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
InvLotLocId invLotLocId = invLotLocIdService.selectInvLotLocIdById(v.getLocationId().toString()
|
|
InvLotLocId invLotLocId = invLotLocIdService.selectInvLotLocIdById(v.getLocationId().toString()
|
|
, v.getCustomerId(), v.getSku(), v.getLotnum());
|
|
, v.getCustomerId(), v.getSku(), v.getLotnum());
|
|
BigDecimal qtyallocated = invLotLocId.getQtyallocated();
|
|
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 {
|
|
|
|
|
|
+ if (isStockPalletNoTo) {
|
|
// 拆分库存
|
|
// 拆分库存
|
|
// 修改原库存
|
|
// 修改原库存
|
|
InvLotLocIdForm invLotLocIdUpdate = new InvLotLocIdForm();
|
|
InvLotLocIdForm invLotLocIdUpdate = new InvLotLocIdForm();
|
|
@@ -1225,32 +1212,24 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
invLotLocIdUpdate.setCustomerId(v.getCustomerId());
|
|
invLotLocIdUpdate.setCustomerId(v.getCustomerId());
|
|
invLotLocIdUpdate.setSku(v.getSku());
|
|
invLotLocIdUpdate.setSku(v.getSku());
|
|
invLotLocIdUpdate.setQty(invLotLocId.getQty().subtract(new BigDecimal(toQty)));
|
|
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);
|
|
|
|
- }
|
|
|
|
|
|
+ invLotLocIdUpdate.setQtyallocated(qtyallocated.subtract(new BigDecimal(toQty)));
|
|
invLotLocIdService.updateInvLotLocId(invLotLocIdUpdate);
|
|
invLotLocIdService.updateInvLotLocId(invLotLocIdUpdate);
|
|
// 插入新库存
|
|
// 插入新库存
|
|
InvLotLocId invLotLocIdInsert = invLotLocId;
|
|
InvLotLocId invLotLocIdInsert = invLotLocId;
|
|
invLotLocIdInsert.setLotnum(newLotnum);
|
|
invLotLocIdInsert.setLotnum(newLotnum);
|
|
invLotLocIdInsert.setQty(new BigDecimal(toQty));
|
|
invLotLocIdInsert.setQty(new BigDecimal(toQty));
|
|
invLotLocIdInsert.setQtyEach(invLotLocIdInsert.getQty());
|
|
invLotLocIdInsert.setQtyEach(invLotLocIdInsert.getQty());
|
|
- if(qtyallocated.compareTo(new BigDecimal(toQty)) == 1) {
|
|
|
|
- invLotLocIdInsert.setQtyallocated(new BigDecimal(toQty));
|
|
|
|
- }else {
|
|
|
|
- invLotLocIdInsert.setQtyallocated(qtyallocated);
|
|
|
|
- }
|
|
|
|
|
|
+ invLotLocIdInsert.setQtyallocated(new BigDecimal(toQty));
|
|
invLotLocIdInsert.setQtyallocatedEach(invLotLocIdInsert.getQtyallocated());
|
|
invLotLocIdInsert.setQtyallocatedEach(invLotLocIdInsert.getQtyallocated());
|
|
invLotLocIdService.insertInvLotLocId(invLotLocIdInsert);
|
|
invLotLocIdService.insertInvLotLocId(invLotLocIdInsert);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ // 更新出库单备货数量
|
|
|
|
+ wmsDocOrderHeaderService.modifystockCompletionStatus(orderNo,sku,new BigDecimal(toQty));
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-// }
|
|
|
|
// 更新托盘
|
|
// 更新托盘
|
|
WmsBoxInfo boxFrom = wmsBoxInfoService.selectWmsBoxInfoByBoxNo(groupDiskFrom.getPalletNoTo());
|
|
WmsBoxInfo boxFrom = wmsBoxInfoService.selectWmsBoxInfoByBoxNo(groupDiskFrom.getPalletNoTo());
|
|
boxFrom.setIsFull(groupDiskFrom.getIsFull());
|
|
boxFrom.setIsFull(groupDiskFrom.getIsFull());
|
|
@@ -1555,7 +1534,7 @@ public class WmsDocOrderHeaderServiceImpl implements IWmsDocOrderHeaderService {
|
|
details.setdEdi04(erpOrder.getVaild()); //单据状态
|
|
details.setdEdi04(erpOrder.getVaild()); //单据状态
|
|
details.setdEdi05(erpOrder.getStockId()); //仓库编号
|
|
details.setdEdi05(erpOrder.getStockId()); //仓库编号
|
|
details.setdEdi06(erpOrder.getOrderState()); //是否扫描完成
|
|
details.setdEdi06(erpOrder.getOrderState()); //是否扫描完成
|
|
- details.setdEdi07(orderNo); //项次
|
|
|
|
|
|
+ details.setdEdi07(erpOrderNo); //项次
|
|
details.setdEdi08(erpOrder.getOrderType()); //erp单据类型
|
|
details.setdEdi08(erpOrder.getOrderType()); //erp单据类型
|
|
details.setdEdi09(erpOrder.getInout()); //erp出入库类型
|
|
details.setdEdi09(erpOrder.getInout()); //erp出入库类型
|
|
details.setLineStatus("00");
|
|
details.setLineStatus("00");
|