|
@@ -8,9 +8,11 @@ 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.vo.FlowConfigHeaderVO;
|
|
|
import com.ruoyi.ams.config.domain.vo.LocationPriorityHeaderVO;
|
|
|
import com.ruoyi.ams.config.mapper.AsnSoStrategyMapper;
|
|
|
import com.ruoyi.ams.config.mapper.LocationPriorityHeaderMapper;
|
|
|
+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;
|
|
@@ -26,12 +28,14 @@ import com.ruoyi.base.service.IBaseSkuService;
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
import com.ruoyi.common.exception.ServiceException;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
public class BusinessServiceImpl implements IBusinessService {
|
|
|
|
|
@@ -55,13 +59,59 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
private BaseLocationInfoMapper baseLocationInfoMapper;
|
|
|
@Autowired
|
|
|
private IBaseSkuService baseSkuService;
|
|
|
+ @Autowired
|
|
|
+ private IFlowConfigHeaderService flowConfigHeaderService;
|
|
|
|
|
|
|
|
|
@Transactional
|
|
|
@Override
|
|
|
public AjaxResult agvCall(List<AgvCallDTO> agvCallDTOList) {
|
|
|
for (AgvCallDTO agvCallDTO : agvCallDTOList) {
|
|
|
- //BaseLocationInfo locationFrom = agvCallDTO.getLocationFrom();
|
|
|
+ BaseLocationInfo locationFrom = null;
|
|
|
+ BaseLocationInfo locationTo = null;
|
|
|
+ //查询所属流程
|
|
|
+ FlowConfigHeaderVO flowConfigHeaderVO = flowConfigHeaderService.selectFlowConfigHeaderById(agvCallDTO.getId());
|
|
|
+ if (flowConfigHeaderVO == null) {
|
|
|
+ log.info("-----------指令查询不到对应的流程:" + JSON.toJSONString(agvCallDTO));
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //起始库位逻辑---------------------------》
|
|
|
+ List<BaseLocationInfo> locationFromList = this.convertLocation(agvCallDTO.getLocationFrom(), agvCallDTO.getWarehouseId());
|
|
|
+ //判断选择的是库位还是区域
|
|
|
+ if (locationFromList.size() > 0) { //多个库位为库区
|
|
|
+ //分配可以使用的库位
|
|
|
+
|
|
|
+ } else { //单个库位为指定
|
|
|
+
|
|
|
+ }
|
|
|
+ //如果起始库位为入库区域则生成库存
|
|
|
+ if (locationFrom.getZoneId() == Constant.ZONE_TYPE.ZONE_IN.getValue()) {
|
|
|
+ //2.初始化库存
|
|
|
+ invLotLocIdService.initInv(agvCallDTO.getLocationFrom(), agvCallDTO.getSku(), Constant.CUSTOMER_ID, agvCallDTO.getQty(), agvCallDTO.getLotattDTO());
|
|
|
+ }
|
|
|
+
|
|
|
+ //目标库位逻辑---------------------------》
|
|
|
+ List<BaseLocationInfo> locationToList = this.convertLocation(agvCallDTO.getLocationTo(), agvCallDTO.getWarehouseId());
|
|
|
+ if (locationToList.size() > 0) { //多个库位为库区
|
|
|
+ //分配可以使用的库位
|
|
|
+
|
|
|
+ } else { //单个库位为指定
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ String taskNo = System.currentTimeMillis() + "";
|
|
|
+ WcsTask wcsTask = new WcsTask();
|
|
|
+ wcsTask.setTaskNo(taskNo);
|
|
|
+ wcsTask.setAreaFrom(locationFrom.getZoneId().toString());
|
|
|
+ wcsTask.setLocationFrom(locationFrom.getId().toString());
|
|
|
+ wcsTask.setAreaTo(locationTo.getZoneId() + "");
|
|
|
+ wcsTask.setLocationTo(locationTo.getId().toString());
|
|
|
+ wcsTask.setState(9L);
|
|
|
+ wcsTask.setPriority(1L);
|
|
|
+ wcsTask.setCreateDate(new Date());
|
|
|
+ wcsTask.setBusinessType("01");
|
|
|
+ wcsTask.setTaskType("");
|
|
|
+ return businessService.addTask(wcsTask);
|
|
|
}
|
|
|
return AjaxResult.error("无效的指令");
|
|
|
}
|
|
@@ -157,6 +207,27 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public List<BaseLocationInfo> convertLocation(String locationNoOrZoneId, Long warehouseId) {
|
|
|
+ List<BaseLocationInfo> locationInfoList = new ArrayList<>();
|
|
|
+ if (!"".equals(locationNoOrZoneId)) {
|
|
|
+ String[] arr = locationNoOrZoneId.split(",");
|
|
|
+ for (String obj : arr) {
|
|
|
+ boolean isLocation = baseLocationInfoService.checkIsLocation(obj, warehouseId);
|
|
|
+ if (isLocation) {
|
|
|
+ BaseLocationInfo info = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(obj, warehouseId);
|
|
|
+ locationInfoList.add(info);
|
|
|
+ } else {
|
|
|
+ List<BaseLocationInfo> infoList = baseLocationInfoService.selectSortedLocatinListByZoneId(Long.parseLong(obj), warehouseId);
|
|
|
+ locationInfoList.addAll(infoList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+
|
|
|
+ }
|
|
|
+ return locationInfoList;
|
|
|
+ }
|
|
|
+
|
|
|
@Transactional
|
|
|
@Override
|
|
|
public AjaxResult addTask(WcsTask wcsTask) {
|