|
@@ -95,28 +95,66 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
} else if (flowConfigHeaderVO.getFlowType().equals("SO")) {
|
|
|
for (AgvCallItemDTO agvCall : agvCallDTO.getAgvCallItemDTOList()) {
|
|
|
//判断总库存是否足够
|
|
|
- //TODO 循环判断取出的数据是否够,不够继续取
|
|
|
+ Double totalQty = agvCall.getQty();
|
|
|
+ int trySize = 100;
|
|
|
Double qty = invLotLocIdService.queryInvBySku(agvCall.getSku(), agvCall.getLotattDTO(), zoneIdList);
|
|
|
- if (qty < agvCall.getQty()) {
|
|
|
+ if (qty == null || qty < agvCall.getQty()) {
|
|
|
throw new ServiceException("所需库存不够");
|
|
|
}
|
|
|
// locationFrom = this.zoneLocationAllocation(locationFromList, "locationFrom", "SO", asnSoStrategy, agvCall, token);
|
|
|
- BaseLocationInfo soLocationFrom;
|
|
|
- if (locationFromList != null && locationFromList.size() > 0) {
|
|
|
- List<Long> locationList = new ArrayList<>();
|
|
|
- for (BaseLocationInfo b : locationFromList) {
|
|
|
- locationList.add(b.getId());
|
|
|
+ while (trySize > 0) {
|
|
|
+ BaseLocationInfo soLocationFrom;
|
|
|
+ if (locationFromList != null && locationFromList.size() > 0) {
|
|
|
+ List<Long> locationList = new ArrayList<>();
|
|
|
+ for (BaseLocationInfo b : locationFromList) {
|
|
|
+ locationList.add(b.getId());
|
|
|
+ }
|
|
|
+ List<BaseLocationLotattVO> locationLotattVOList = baseLocationInfoMapper.selectSortedLocationLotattListByLocationIdList(locationList, 1L, agvCall.getLotattDTO().getAttr(), agvCall.getSku());
|
|
|
+ OutWarehouseDTO outWarehouseDTO = new OutWarehouseDTO();
|
|
|
+ outWarehouseDTO.setSku(agvCall.getSku());
|
|
|
+ outWarehouseDTO.setQty(agvCall.getQty());
|
|
|
+ outWarehouseDTO.setWeight(agvCall.getWeight());
|
|
|
+ outWarehouseDTO.setSupplier(agvCall.getSupplier());
|
|
|
+ outWarehouseDTO.setLotattDTO(agvCall.getLotattDTO());
|
|
|
+ outWarehouseDTO.setWarehouseId(agvCallDTO.getWarehouseId());
|
|
|
+ soLocationFrom = locationAllocationStrategy.filterLockInv(locationLotattVOList, outWarehouseDTO, asnSoStrategy, token);
|
|
|
+ } else {
|
|
|
+ OutWarehouseDTO outWarehouseDTO = new OutWarehouseDTO();
|
|
|
+ outWarehouseDTO.setSku(agvCall.getSku());
|
|
|
+ outWarehouseDTO.setQty(agvCall.getQty());
|
|
|
+ outWarehouseDTO.setWeight(agvCall.getWeight());
|
|
|
+ outWarehouseDTO.setSupplier(agvCall.getSupplier());
|
|
|
+ outWarehouseDTO.setLotattDTO(agvCall.getLotattDTO());
|
|
|
+ outWarehouseDTO.setWarehouseId(agvCall.getWarehouseId());
|
|
|
+ soLocationFrom = outInvAllocation(outWarehouseDTO, token);
|
|
|
}
|
|
|
- List<BaseLocationLotattVO> locationLotattVOList = baseLocationInfoMapper.selectSortedLocationLotattListByLocationIdList(locationList, 1L, agvCall.getLotattDTO().getAttr(), agvCall.getSku());
|
|
|
- OutWarehouseDTO outWarehouseDTO = new OutWarehouseDTO();
|
|
|
- outWarehouseDTO.setSku(agvCall.getSku());
|
|
|
- outWarehouseDTO.setQty(agvCall.getQty());
|
|
|
- outWarehouseDTO.setWeight(agvCall.getWeight());
|
|
|
- outWarehouseDTO.setSupplier(agvCall.getSupplier());
|
|
|
- outWarehouseDTO.setLotattDTO(agvCall.getLotattDTO());
|
|
|
- outWarehouseDTO.setWarehouseId(agvCallDTO.getWarehouseId());
|
|
|
- soLocationFrom = locationAllocationStrategy.filterLockInv(locationLotattVOList, outWarehouseDTO, asnSoStrategy, token);
|
|
|
- } else {
|
|
|
+ if (soLocationFrom == null) {
|
|
|
+ throw new ServiceException("没有可分配的库存", token);
|
|
|
+ }
|
|
|
+ locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "SO", asnSoStrategy, agvCall, token);
|
|
|
+ wcsTaskList.addAll(this.genTask(soLocationFrom, locationTo, flowConfigHeaderVO, token));
|
|
|
+ Double current = invLotLocIdMapper.queryInvBySkuLocationId(agvCall.getSku(), soLocationFrom.getId(), agvCall.getLotattDTO());
|
|
|
+ if (current != null) {
|
|
|
+ totalQty -= current;
|
|
|
+ if (totalQty <= 0) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ trySize--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (flowConfigHeaderVO.getFlowType().equals("MV")) {
|
|
|
+ for (AgvCallItemDTO agvCall : agvCallDTO.getAgvCallItemDTOList()) {
|
|
|
+ Double totalQty = agvCall.getQty();
|
|
|
+ int trySize = 100;
|
|
|
+ if (agvCall.getQty() != null) {
|
|
|
+ Double qty = invLotLocIdService.queryInvBySku(agvCall.getSku(), agvCall.getLotattDTO(), zoneIdList);
|
|
|
+ if (qty == null || qty < agvCall.getQty()) {
|
|
|
+ throw new ServiceException("所需库存不够");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ while (trySize > 0) {
|
|
|
OutWarehouseDTO outWarehouseDTO = new OutWarehouseDTO();
|
|
|
outWarehouseDTO.setSku(agvCall.getSku());
|
|
|
outWarehouseDTO.setQty(agvCall.getQty());
|
|
@@ -124,30 +162,27 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
outWarehouseDTO.setSupplier(agvCall.getSupplier());
|
|
|
outWarehouseDTO.setLotattDTO(agvCall.getLotattDTO());
|
|
|
outWarehouseDTO.setWarehouseId(agvCall.getWarehouseId());
|
|
|
- soLocationFrom = outInvAllocation(outWarehouseDTO, token);
|
|
|
- }
|
|
|
- if (soLocationFrom == null) {
|
|
|
- throw new ServiceException("没有可分配的库存", token);
|
|
|
- }
|
|
|
- locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "SO", asnSoStrategy, agvCall, token);
|
|
|
- wcsTaskList.addAll(this.genTask(soLocationFrom, locationTo, flowConfigHeaderVO, token));
|
|
|
- }
|
|
|
- } else if (flowConfigHeaderVO.getFlowType().equals("MV")) {
|
|
|
- for (AgvCallItemDTO agvCall : agvCallDTO.getAgvCallItemDTOList()) {
|
|
|
- OutWarehouseDTO outWarehouseDTO = new OutWarehouseDTO();
|
|
|
- outWarehouseDTO.setSku(agvCall.getSku());
|
|
|
- outWarehouseDTO.setQty(agvCall.getQty());
|
|
|
- outWarehouseDTO.setWeight(agvCall.getWeight());
|
|
|
- outWarehouseDTO.setSupplier(agvCall.getSupplier());
|
|
|
- outWarehouseDTO.setLotattDTO(agvCall.getLotattDTO());
|
|
|
- outWarehouseDTO.setWarehouseId(agvCall.getWarehouseId());
|
|
|
- BaseLocationInfo mvLocationFrom = outInvAllocation(outWarehouseDTO, token);
|
|
|
- //locationFrom = this.zoneLocationAllocation(locationFromList, "locationFrom", "MV", asnSoStrategy, agvCall, token);
|
|
|
- locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "MV", asnSoStrategy, agvCall, token);
|
|
|
- if (mvLocationFrom == null) {
|
|
|
- throw new ServiceException("没有可以分配的库存", token);
|
|
|
+ BaseLocationInfo mvLocationFrom = outInvAllocation(outWarehouseDTO, token);
|
|
|
+ //locationFrom = this.zoneLocationAllocation(locationFromList, "locationFrom", "MV", asnSoStrategy, agvCall, token);
|
|
|
+ locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "MV", asnSoStrategy, agvCall, token);
|
|
|
+ if (mvLocationFrom == null) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if (locationTo == null) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ wcsTaskList.addAll(this.genTask(mvLocationFrom, locationTo, flowConfigHeaderVO, token));
|
|
|
+ if (agvCall.getQty() != null) {
|
|
|
+ Double current = invLotLocIdMapper.queryInvBySkuLocationId(agvCall.getSku(), mvLocationFrom.getId(), agvCall.getLotattDTO());
|
|
|
+ if (current != null) {
|
|
|
+ totalQty -= current;
|
|
|
+ if (totalQty <= 0) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ trySize--;
|
|
|
}
|
|
|
- wcsTaskList.addAll(this.genTask(mvLocationFrom, locationTo, flowConfigHeaderVO, token));
|
|
|
}
|
|
|
}
|
|
|
|