|
@@ -1,17 +1,10 @@
|
|
|
package com.ruoyi.ams.business;
|
|
|
|
|
|
-import com.alibaba.fastjson.JSON;
|
|
|
import com.ruoyi.ams.common.Constant;
|
|
|
import com.ruoyi.ams.config.domain.AsnSoStrategy;
|
|
|
-import com.ruoyi.ams.config.domain.FlowConfigHeader;
|
|
|
-import com.ruoyi.ams.config.domain.dto.AgvCallDTO;
|
|
|
-import com.ruoyi.ams.config.domain.dto.InWarehouseDTO;
|
|
|
-import com.ruoyi.ams.config.domain.dto.LotattDTO;
|
|
|
-import com.ruoyi.ams.config.domain.dto.OutWarehouseDTO;
|
|
|
+import com.ruoyi.ams.config.domain.dto.*;
|
|
|
import com.ruoyi.ams.config.domain.vo.FlowConfigHeaderVO;
|
|
|
import com.ruoyi.ams.config.mapper.AsnSoStrategyMapper;
|
|
|
-import com.ruoyi.ams.config.service.IFlowConfigHeaderService;
|
|
|
-import com.ruoyi.ams.config.service.ILocationPriorityHeaderService;
|
|
|
import com.ruoyi.ams.config.service.LocationAllocationStrategy;
|
|
|
import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
|
|
|
import com.ruoyi.ams.inv.service.IInvLotLocIdService;
|
|
@@ -24,6 +17,8 @@ import com.ruoyi.base.mapper.BaseLocationInfoMapper;
|
|
|
import com.ruoyi.base.service.IBaseLocationInfoService;
|
|
|
import com.ruoyi.base.service.IBaseSkuService;
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
+import com.ruoyi.common.core.redis.RedisCache;
|
|
|
+import com.ruoyi.common.core.redis.RedisKey;
|
|
|
import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
import com.ruoyi.common.utils.uuid.SnowflakeIdWorker;
|
|
@@ -38,7 +33,6 @@ import java.util.stream.Collectors;
|
|
|
@Slf4j
|
|
|
@Service
|
|
|
public class BusinessServiceImpl implements IBusinessService {
|
|
|
-
|
|
|
@Autowired
|
|
|
private IBusinessService businessService;
|
|
|
@Autowired
|
|
@@ -58,82 +52,115 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
@Autowired
|
|
|
private IBaseSkuService baseSkuService;
|
|
|
@Autowired
|
|
|
- private IFlowConfigHeaderService flowConfigHeaderService;
|
|
|
+ private RedisCache redisCache;
|
|
|
|
|
|
@Transactional
|
|
|
@Override
|
|
|
- public AjaxResult agvCall(List<AgvCallDTO> agvCallDTOList) {
|
|
|
- AgvCallDTO agvCallDTO = new AgvCallDTO();
|
|
|
- for (AgvCallDTO agvCall : agvCallDTOList) {
|
|
|
- agvCallDTO.setLocationFrom(agvCall.getLocationFrom());
|
|
|
- agvCallDTO.setLocationTo(agvCall.getLocationTo());
|
|
|
- agvCallDTO.setId(agvCall.getId());
|
|
|
- agvCallDTO.setWarehouseId(agvCall.getWarehouseId());
|
|
|
- agvCallDTO.setLotattDTO(agvCall.getLotattDTO());
|
|
|
- break;
|
|
|
- }
|
|
|
-
|
|
|
- BaseLocationInfo locationFrom = null;
|
|
|
- BaseLocationInfo locationTo = null;
|
|
|
- List<WcsTask> wcsTaskList = new ArrayList<>();
|
|
|
- //查询所属流程
|
|
|
- FlowConfigHeaderVO flowConfigHeaderVO = flowConfigHeaderService.selectFlowConfigHeaderById(agvCallDTO.getId());
|
|
|
+ public AjaxResult agvCall(FlowConfigHeaderVO flowConfigHeaderVO, List<AgvCallDTO> agvCallDTOList) {
|
|
|
+ //唯一操作标识,用于redis标记。报错时根据该id进行删除
|
|
|
+ Long token = SnowflakeIdWorker.generateId();
|
|
|
+ //查询全局配置策略
|
|
|
AsnSoStrategy asnSoStrategy = asnSoStrategyMapper.selectAsnSoStrategy();
|
|
|
- if (flowConfigHeaderVO == null) {
|
|
|
- log.info("-----------指令查询不到对应的流程:" + JSON.toJSONString(agvCallDTOList));
|
|
|
- return AjaxResult.error("指令查询不到对应的流程");
|
|
|
- }
|
|
|
- String paramLocationFrom = agvCallDTO.getLocationFrom();
|
|
|
- String paramLocationTo = agvCallDTO.getLocationTo();
|
|
|
- List<String> zoneIdList = new ArrayList<>();
|
|
|
- if (StringUtils.isEmpty(paramLocationFrom)) {
|
|
|
- paramLocationFrom = flowConfigHeaderVO.getLocationFrom();
|
|
|
- }
|
|
|
- if (StringUtils.isEmpty(paramLocationTo)) {
|
|
|
- paramLocationTo = flowConfigHeaderVO.getLocationTo();
|
|
|
- }
|
|
|
- if (!StringUtils.isEmpty(flowConfigHeaderVO.getLocationFrom())) {
|
|
|
- zoneIdList = Arrays.stream(flowConfigHeaderVO.getLocationFrom().split(",")).collect(Collectors.toList());
|
|
|
- }
|
|
|
|
|
|
+ for (AgvCallDTO agvCallDTO : agvCallDTOList) {
|
|
|
+ //如果是入库把起始库位相同的数据整合到一起生成库存记录
|
|
|
+ BaseLocationInfo locationFrom = null;
|
|
|
+ BaseLocationInfo locationTo = null;
|
|
|
+ List<WcsTask> wcsTaskList = new ArrayList<>();
|
|
|
+ String paramLocationFrom = agvCallDTO.getLocationFrom();
|
|
|
+ String paramLocationTo = agvCallDTO.getLocationTo();
|
|
|
+ List<String> zoneIdList = new ArrayList<>();
|
|
|
+ if (StringUtils.isEmpty(paramLocationFrom)) {
|
|
|
+ paramLocationFrom = flowConfigHeaderVO.getLocationFrom();
|
|
|
+ }
|
|
|
+ if (StringUtils.isEmpty(paramLocationTo)) {
|
|
|
+ paramLocationTo = flowConfigHeaderVO.getLocationTo();
|
|
|
+ }
|
|
|
+ if (!StringUtils.isEmpty(flowConfigHeaderVO.getLocationFrom())) {
|
|
|
+ zoneIdList = Arrays.stream(flowConfigHeaderVO.getLocationFrom().split(",")).collect(Collectors.toList());
|
|
|
+ }
|
|
|
|
|
|
- List<BaseLocationInfo> locationFromList = this.convertLocation(paramLocationFrom, agvCallDTO.getWarehouseId());
|
|
|
- List<BaseLocationInfo> locationToList = this.convertLocation(paramLocationTo, agvCallDTO.getWarehouseId());
|
|
|
+ List<BaseLocationInfo> locationFromList = this.convertLocation(paramLocationFrom, agvCallDTO.getWarehouseId());
|
|
|
+ List<BaseLocationInfo> locationToList = this.convertLocation(paramLocationTo, agvCallDTO.getWarehouseId());
|
|
|
|
|
|
- if (flowConfigHeaderVO.getFlowType().equals("ASN")) {
|
|
|
- locationFrom = this.zoneLocationAllocation(locationFromList, "locationFrom", "ASN", asnSoStrategy, agvCallDTO);
|
|
|
- locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "ASN", asnSoStrategy, agvCallDTO);
|
|
|
- //2.初始化库存
|
|
|
- for (AgvCallDTO agvCall : agvCallDTOList) {
|
|
|
- invLotLocIdService.initInv(locationFrom.getId().toString(), agvCall.getSku(), Constant.CUSTOMER_ID, agvCall.getQty(), agvCall.getLotattDTO());
|
|
|
- }
|
|
|
- wcsTaskList.addAll(this.genTask(locationFrom, locationTo, flowConfigHeaderVO));
|
|
|
- } else if (flowConfigHeaderVO.getFlowType().equals("SO")) {
|
|
|
- for (AgvCallDTO agvCall : agvCallDTOList) {
|
|
|
- //判断总库存是否足够
|
|
|
- Double qty = invLotLocIdService.queryInvBySku(agvCall.getSku(), agvCall.getLotattDTO(), zoneIdList);
|
|
|
- if (qty < agvCall.getQty()) {
|
|
|
- throw new ServiceException("所需库存不够");
|
|
|
+ if (flowConfigHeaderVO.getFlowType().equals("ASN")) {
|
|
|
+ AgvCallItemDTO agvCall = agvCallDTO.getAgvCallItemDTOList().get(0);
|
|
|
+ locationFrom = this.zoneLocationAllocation(locationFromList, "locationFrom", "ASN", asnSoStrategy, agvCall, token);
|
|
|
+ locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "ASN", asnSoStrategy, agvCall, token);
|
|
|
+ //2.初始化库存
|
|
|
+ for (AgvCallItemDTO call : agvCallDTO.getAgvCallItemDTOList()) {
|
|
|
+ invLotLocIdService.initInv(locationFrom.getId().toString(), call.getSku(), Constant.CUSTOMER_ID, call.getQty(), call.getLotattDTO());
|
|
|
+ }
|
|
|
+ wcsTaskList.addAll(this.genTask(locationFrom, locationTo, flowConfigHeaderVO, token));
|
|
|
+ } else if (flowConfigHeaderVO.getFlowType().equals("SO")) {
|
|
|
+ for (AgvCallItemDTO agvCall : agvCallDTO.getAgvCallItemDTOList()) {
|
|
|
+ //判断总库存是否足够
|
|
|
+ //TODO 循环判断取出的数据是否够,不够继续取
|
|
|
+ Double qty = invLotLocIdService.queryInvBySku(agvCall.getSku(), agvCall.getLotattDTO(), zoneIdList);
|
|
|
+ if (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());
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ wcsTaskList.addAll(this.genTask(mvLocationFrom, locationTo, flowConfigHeaderVO, token));
|
|
|
}
|
|
|
- locationFrom = this.zoneLocationAllocation(locationFromList, "locationFrom", "SO", asnSoStrategy, agvCall);
|
|
|
- locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "SO", asnSoStrategy, agvCall);
|
|
|
- wcsTaskList.addAll(this.genTask(locationFrom, locationTo, flowConfigHeaderVO));
|
|
|
}
|
|
|
- } else if (flowConfigHeaderVO.getFlowType().equals("MV")) {
|
|
|
- locationFrom = this.zoneLocationAllocation(locationFromList, "locationFrom", "MV", asnSoStrategy, agvCallDTO);
|
|
|
- locationTo = this.zoneLocationAllocation(locationToList, "locationTo", "MV", asnSoStrategy, agvCallDTO);
|
|
|
- wcsTaskList.addAll(this.genTask(locationFrom, locationTo, flowConfigHeaderVO));
|
|
|
- }
|
|
|
|
|
|
// for (WcsTask wcsTask : wcsTaskList) {
|
|
|
// this.addTask(wcsTask);
|
|
|
// }
|
|
|
+ }
|
|
|
return AjaxResult.success("任务下发成功");
|
|
|
}
|
|
|
|
|
|
@Transactional
|
|
|
@Override
|
|
|
- public BaseLocationInfo inLocationAllocation(InWarehouseDTO inWarehouseDTO) {
|
|
|
+ public BaseLocationInfo inLocationAllocation(InWarehouseDTO inWarehouseDTO, Long token) {
|
|
|
/**
|
|
|
* 根据sku查询可以存放的zone
|
|
|
* 根据每个zone的配置去分配可以存放的库位
|
|
@@ -186,18 +213,18 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
} else {
|
|
|
locationInfoList = baseLocationInfoMapper.selectLocationBindSku(baseSku.getSkuType());
|
|
|
}
|
|
|
- return locationAllocationStrategy.filterLockLocation(locationInfoList, inWarehouseDTO, asnSoStrategy);
|
|
|
+ return locationAllocationStrategy.filterLockLocation(locationInfoList, inWarehouseDTO, asnSoStrategy, token);
|
|
|
} else {
|
|
|
// 指定区域的
|
|
|
List<BaseLocationInfo> locationInfoList = baseLocationInfoService.selectSortedLocatinListByZoneId(Long.parseLong(inWarehouseDTO.getLocationZoneTo()), inWarehouseDTO.getWarehouseId());
|
|
|
- return locationAllocationStrategy.filterLockLocation(locationInfoList);
|
|
|
+ return locationAllocationStrategy.filterLockLocation(locationInfoList, token);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Transactional
|
|
|
@Override
|
|
|
- public BaseLocationInfo outInvAllocation(OutWarehouseDTO outWarehouseDTO) {
|
|
|
+ public BaseLocationInfo outInvAllocation(OutWarehouseDTO outWarehouseDTO, Long token) {
|
|
|
/**
|
|
|
* 指定位置出库
|
|
|
*/
|
|
@@ -218,12 +245,12 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
LotattDTO lotattDTO = outWarehouseDTO.getLotattDTO();
|
|
|
List<BaseLocationLotattVO> locationInfoList = baseLocationInfoMapper.selectSortedLocationLotattListByZoneIdList(zoneIdList, outWarehouseDTO.getWarehouseId(), lotattDTO.getAttr());
|
|
|
AsnSoStrategy asnSoStrategy = asnSoStrategyMapper.selectAsnSoStrategy();
|
|
|
- return locationAllocationStrategy.filterLockInv(locationInfoList, outWarehouseDTO, asnSoStrategy);
|
|
|
+ return locationAllocationStrategy.filterLockInv(locationInfoList, outWarehouseDTO, asnSoStrategy, token);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public BaseLocationInfo zoneLocationAllocation(List<BaseLocationInfo> locationInfoList, String locationType, String type, AsnSoStrategy asnSoStrategy, AgvCallDTO agvCallDTO) {
|
|
|
+ public BaseLocationInfo zoneLocationAllocation(List<BaseLocationInfo> locationInfoList, String locationType, String type, AsnSoStrategy asnSoStrategy, AgvCallItemDTO agvCallDTO, Long token) {
|
|
|
BaseLocationInfo locationInfo = null;
|
|
|
if (type.equals("ASN")) {
|
|
|
//入库
|
|
@@ -232,15 +259,18 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
if (!b.getStockStatus().equals("00")) {
|
|
|
continue;
|
|
|
}
|
|
|
+ if (!redisCache.lockCacheObject(RedisKey.LOCK_LOCATION + b.getId(), b.getId().toString(), token)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
locationInfo = b;
|
|
|
break;
|
|
|
}
|
|
|
if (locationInfo == null) {
|
|
|
- throw new ServiceException("没有可以分配的库位");
|
|
|
+ throw new ServiceException("入库起始库位没有可以分配的空库位", token);
|
|
|
}
|
|
|
} else {
|
|
|
if (locationInfoList != null && locationInfoList.size() > 0) {
|
|
|
- locationInfo = locationAllocationStrategy.filterLockLocation(locationInfoList);
|
|
|
+ locationInfo = locationAllocationStrategy.filterLockLocation(locationInfoList, token);
|
|
|
} else {
|
|
|
InWarehouseDTO inWarehouseDTO = new InWarehouseDTO();
|
|
|
inWarehouseDTO.setWarehouseId(agvCallDTO.getWarehouseId());
|
|
@@ -251,10 +281,10 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
inWarehouseDTO.setSupplier(agvCallDTO.getSupplier());
|
|
|
inWarehouseDTO.setWeight(agvCallDTO.getWeight());
|
|
|
inWarehouseDTO.setLotattDTO(agvCallDTO.getLotattDTO());
|
|
|
- locationInfo = inLocationAllocation(inWarehouseDTO);
|
|
|
+ locationInfo = inLocationAllocation(inWarehouseDTO, token);
|
|
|
}
|
|
|
if (locationInfo == null) {
|
|
|
- throw new RuntimeException("没有可以分配的库位");
|
|
|
+ throw new ServiceException("目标库位没有可以分配的库位", token);
|
|
|
}
|
|
|
return locationInfo;
|
|
|
}
|
|
@@ -267,7 +297,7 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
for (BaseLocationInfo b : locationInfoList) {
|
|
|
locationList.add(b.getId());
|
|
|
}
|
|
|
- List<BaseLocationLotattVO> locationLotattVOList = baseLocationInfoMapper.selectSortedLocationLotattListByLocationIdList(locationList, agvCallDTO.getWarehouseId(), agvCallDTO.getLotattDTO().getAttr(), agvCallDTO.getSku());
|
|
|
+ List<BaseLocationLotattVO> locationLotattVOList = baseLocationInfoMapper.selectSortedLocationLotattListByLocationIdList(locationList, 1L, agvCallDTO.getLotattDTO().getAttr(), agvCallDTO.getSku());
|
|
|
OutWarehouseDTO outWarehouseDTO = new OutWarehouseDTO();
|
|
|
outWarehouseDTO.setSku(agvCallDTO.getSku());
|
|
|
outWarehouseDTO.setQty(agvCallDTO.getQty());
|
|
@@ -275,7 +305,7 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
outWarehouseDTO.setSupplier(agvCallDTO.getSupplier());
|
|
|
outWarehouseDTO.setLotattDTO(agvCallDTO.getLotattDTO());
|
|
|
outWarehouseDTO.setWarehouseId(agvCallDTO.getWarehouseId());
|
|
|
- locationInfo = locationAllocationStrategy.filterLockInv(locationLotattVOList, outWarehouseDTO, asnSoStrategy);
|
|
|
+ locationInfo = locationAllocationStrategy.filterLockInv(locationLotattVOList, outWarehouseDTO, asnSoStrategy, token);
|
|
|
} else {
|
|
|
OutWarehouseDTO outWarehouseDTO = new OutWarehouseDTO();
|
|
|
outWarehouseDTO.setSku(agvCallDTO.getSku());
|
|
@@ -284,10 +314,10 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
outWarehouseDTO.setSupplier(agvCallDTO.getSupplier());
|
|
|
outWarehouseDTO.setLotattDTO(agvCallDTO.getLotattDTO());
|
|
|
outWarehouseDTO.setWarehouseId(agvCallDTO.getWarehouseId());
|
|
|
- locationInfo = outInvAllocation(outWarehouseDTO);
|
|
|
+ locationInfo = outInvAllocation(outWarehouseDTO, token);
|
|
|
}
|
|
|
if (locationInfo == null) {
|
|
|
- throw new RuntimeException("没有可分配的库存");
|
|
|
+ throw new ServiceException("没有可分配的库存", token);
|
|
|
}
|
|
|
return locationInfo;
|
|
|
} else { //目标库位
|
|
@@ -299,7 +329,7 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
break;
|
|
|
}
|
|
|
if (locationInfo == null) {
|
|
|
- throw new RuntimeException("没有可以分配的库位");
|
|
|
+ throw new ServiceException("没有可以分配的库位", token);
|
|
|
}
|
|
|
}
|
|
|
} else { //移库
|
|
@@ -309,7 +339,7 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
for (BaseLocationInfo b : locationInfoList) {
|
|
|
locationList.add(b.getId());
|
|
|
}
|
|
|
- List<BaseLocationLotattVO> locationLotattVOList = baseLocationInfoMapper.selectSortedLocationLotattListByLocationIdList(locationList, agvCallDTO.getWarehouseId(), agvCallDTO.getLotattDTO().getAttr(), agvCallDTO.getSku());
|
|
|
+ List<BaseLocationLotattVO> locationLotattVOList = baseLocationInfoMapper.selectSortedLocationLotattListByLocationIdList(locationList, 1L, agvCallDTO.getLotattDTO().getAttr(), agvCallDTO.getSku());
|
|
|
OutWarehouseDTO outWarehouseDTO = new OutWarehouseDTO();
|
|
|
outWarehouseDTO.setSku(agvCallDTO.getSku());
|
|
|
outWarehouseDTO.setQty(agvCallDTO.getQty());
|
|
@@ -317,7 +347,7 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
outWarehouseDTO.setSupplier(agvCallDTO.getSupplier());
|
|
|
outWarehouseDTO.setLotattDTO(agvCallDTO.getLotattDTO());
|
|
|
outWarehouseDTO.setWarehouseId(agvCallDTO.getWarehouseId());
|
|
|
- locationInfo = locationAllocationStrategy.filterLockInv(locationLotattVOList, outWarehouseDTO, asnSoStrategy);
|
|
|
+ locationInfo = locationAllocationStrategy.filterLockInv(locationLotattVOList, outWarehouseDTO, asnSoStrategy, token);
|
|
|
}
|
|
|
} else {
|
|
|
for (BaseLocationInfo b : locationInfoList) {
|
|
@@ -329,7 +359,7 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
}
|
|
|
}
|
|
|
if (locationInfo == null) {
|
|
|
- throw new ServiceException("没有可以分配的库位");
|
|
|
+ throw new ServiceException("没有可以分配的库位", token);
|
|
|
}
|
|
|
}
|
|
|
return locationInfo;
|
|
@@ -355,7 +385,10 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<WcsTask> genTask(BaseLocationInfo locationFrom, BaseLocationInfo locationTo, FlowConfigHeaderVO flowConfigHeaderVO) {
|
|
|
+ public List<WcsTask> genTask(BaseLocationInfo locationFrom, BaseLocationInfo locationTo, FlowConfigHeaderVO flowConfigHeaderVO, Long token) {
|
|
|
+ if (locationFrom == null || locationTo == null) {
|
|
|
+ throw new ServiceException("任务执行库位不能为空", token);
|
|
|
+ }
|
|
|
List<WcsTask> wcsTaskList = new ArrayList<>();
|
|
|
if (StringUtils.isEmpty(flowConfigHeaderVO.getRootFlow())) {
|
|
|
String taskNo = System.currentTimeMillis() + "";
|
|
@@ -370,10 +403,11 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
wcsTask.setCreateDate(new Date());
|
|
|
wcsTask.setBusinessType("01");
|
|
|
wcsTask.setTaskType("");
|
|
|
+ wcsTask.setExt8(token.toString());
|
|
|
wcsTaskList.add(wcsTask);
|
|
|
businessService.addTask(wcsTask);
|
|
|
} else {
|
|
|
- //获取对应的流程
|
|
|
+ /*//获取对应的流程
|
|
|
List<FlowConfigHeader> headerVOList = flowConfigHeaderService.sortFlowConfigHeader(Long.parseLong(flowConfigHeaderVO.getRootFlow()));
|
|
|
AsnSoStrategy asnSoStrategy = asnSoStrategyMapper.selectAsnSoStrategy();
|
|
|
String taskNo = System.currentTimeMillis() + "";
|
|
@@ -414,7 +448,7 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
child.setTaskType("");
|
|
|
wcsTaskList.add(child);
|
|
|
beforeTaskNo = currentNo;
|
|
|
- }
|
|
|
+ }*/
|
|
|
}
|
|
|
return wcsTaskList;
|
|
|
}
|