|
@@ -1,11 +1,14 @@
|
|
|
package com.ruoyi.ams.business;
|
|
|
|
|
|
import com.ruoyi.ams.common.Constant;
|
|
|
+import com.ruoyi.ams.config.domain.AsnSoStrategy;
|
|
|
import com.ruoyi.ams.config.domain.LocationPriorityHeader;
|
|
|
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.LocationPriorityHeaderVO;
|
|
|
+import com.ruoyi.ams.config.mapper.AsnSoStrategyMapper;
|
|
|
import com.ruoyi.ams.config.mapper.LocationPriorityHeaderMapper;
|
|
|
import com.ruoyi.ams.config.service.ILocationPriorityHeaderService;
|
|
|
import com.ruoyi.ams.config.service.LocationAllocationStrategy;
|
|
@@ -14,17 +17,18 @@ import com.ruoyi.ams.inv.service.IInvLotLocIdService;
|
|
|
import com.ruoyi.ams.task.domain.WcsTask;
|
|
|
import com.ruoyi.ams.task.mapper.WcsTaskMapper;
|
|
|
import com.ruoyi.base.domain.BaseLocationInfo;
|
|
|
+import com.ruoyi.base.domain.BaseSku;
|
|
|
import com.ruoyi.base.domain.vo.BaseLocationLotattVO;
|
|
|
+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.utils.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
|
|
|
@Service
|
|
|
public class BusinessServiceImpl implements IBusinessService {
|
|
@@ -38,13 +42,18 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
@Autowired
|
|
|
private LocationAllocationStrategy locationAllocationStrategy;
|
|
|
@Autowired
|
|
|
- private LocationPriorityHeaderMapper locationPriorityHeaderMapper;
|
|
|
- @Autowired
|
|
|
private InvLotLocIdMapper invLotLocIdMapper;
|
|
|
@Autowired
|
|
|
private IInvLotLocIdService invLotLocIdService;
|
|
|
@Autowired
|
|
|
private WcsTaskMapper wcsTaskMapper;
|
|
|
+ @Autowired
|
|
|
+ private AsnSoStrategyMapper asnSoStrategyMapper;
|
|
|
+ @Autowired
|
|
|
+ private BaseLocationInfoMapper baseLocationInfoMapper;
|
|
|
+ @Autowired
|
|
|
+ private IBaseSkuService baseSkuService;
|
|
|
+
|
|
|
|
|
|
@Transactional
|
|
|
@Override
|
|
@@ -145,35 +154,44 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
BaseLocationInfo baseLocationInfo = baseLocationInfoService.selectBaseLocationInfoByIdOrNo(inWarehouseDTO.getLocationTo(), inWarehouseDTO.getWarehouseId());
|
|
|
return baseLocationInfo;
|
|
|
} else {
|
|
|
- List<Long> zoneList = new ArrayList<>();
|
|
|
if (StringUtils.isEmpty(inWarehouseDTO.getLocationZoneTo()) && StringUtils.isEmpty(inWarehouseDTO.getLocationTo())) { //不指定目标库位和区域
|
|
|
// 没有指定目标的根据sku进行匹配并进行分配
|
|
|
// 如果可以混放的区域不匹配物料也可以选择,否则只选择可以存放的区域
|
|
|
- List<Long> list = locationPriorityHeaderMapper.selectZoneIdListBySku(inWarehouseDTO.getSku());
|
|
|
- zoneList.addAll(list);
|
|
|
- } else {
|
|
|
- // 指定区域的
|
|
|
- zoneList.add(Long.parseLong(inWarehouseDTO.getLocationZoneTo()));
|
|
|
- }
|
|
|
- BaseLocationInfo resultLocation = null;
|
|
|
- for (Long zoneId : zoneList) {
|
|
|
- LocationPriorityHeader query = new LocationPriorityHeader();
|
|
|
- query.setLocationZone(zoneId.toString());
|
|
|
- List<LocationPriorityHeaderVO> list = locationPriorityHeaderService.selectLocationPriorityHeaderList(query);
|
|
|
- if (list != null && list.size() > 0) {
|
|
|
- LocationPriorityHeaderVO locationPriorityHeaderVO = list.get(0);
|
|
|
- resultLocation = locationAllocationStrategy.filterLockLocation(zoneId, inWarehouseDTO, locationPriorityHeaderVO);
|
|
|
- } else {
|
|
|
- // 如果指定区域没有配置策略则随意分配一个可用的空库位
|
|
|
- List<BaseLocationInfo> locationInfoList = baseLocationInfoService.selectSortedLocatinListByZoneId(zoneId, inWarehouseDTO.getWarehouseId());
|
|
|
- resultLocation = locationAllocationStrategy.filterLockLocation(locationInfoList);
|
|
|
+ AsnSoStrategy asnSoStrategy = asnSoStrategyMapper.selectAsnSoStrategy();
|
|
|
+ BaseSku baseSku = baseSkuService.selectBaseSkuByCustomerId(Constant.CUSTOMER_ID, inWarehouseDTO.getSku());
|
|
|
+ //判断是否强制同物料靠近,
|
|
|
+ LotattDTO lotattDTO = inWarehouseDTO.getLotattDTO();
|
|
|
+ Map<String, String> lotattMap = new HashMap<>();
|
|
|
+ if (asnSoStrategy.getAsnSameLotatt1Flag().equals("optimization")) {
|
|
|
+ lotattMap.put(asnSoStrategy.getAsnSameLotatt1Value(), lotattDTO.getAttr(asnSoStrategy.getAsnSameLotatt1Value()));
|
|
|
}
|
|
|
- if (resultLocation != null) {
|
|
|
- return resultLocation;
|
|
|
+ if (asnSoStrategy.getAsnSameLotatt2Flag().equals("optimization")) {
|
|
|
+ lotattMap.put(asnSoStrategy.getAsnSameLotatt2Value(), lotattDTO.getAttr(asnSoStrategy.getAsnSameLotatt2Value()));
|
|
|
+ }
|
|
|
+ List<BaseLocationInfo> locationInfoList = new ArrayList<>();
|
|
|
+ if (asnSoStrategy.getAsnSameSku().equals("force")) {
|
|
|
+ List<String> colNo = baseLocationInfoMapper.selectSameSkuColNo(baseSku.getSku(), null, lotattMap);
|
|
|
+ List<BaseLocationInfo> locs = baseLocationInfoMapper.selectLocationByColNos(colNo);
|
|
|
+ locationInfoList.addAll(locs);
|
|
|
+ } else if (asnSoStrategy.getAsnSameSku().equals("optimization") || asnSoStrategy.getAsnSameSkuType().equals("optimization")) {
|
|
|
+ List<String> skuColNo = baseLocationInfoMapper.selectSameSkuColNo(baseSku.getSku(), null, lotattMap);
|
|
|
+ List<String> skuTypeColNo = baseLocationInfoMapper.selectSameSkuColNo(baseSku.getSkuType(), null, lotattMap);
|
|
|
+ List<String> cols = new ArrayList<>();
|
|
|
+ cols.addAll(skuColNo);
|
|
|
+ cols.addAll(skuTypeColNo);
|
|
|
+ List<BaseLocationInfo> locs = baseLocationInfoMapper.selectLocationByColNos(cols);
|
|
|
+ locationInfoList.addAll(locs);
|
|
|
+ } else {
|
|
|
+ locationInfoList = baseLocationInfoMapper.selectLocationBindSku(baseSku.getSkuType());
|
|
|
}
|
|
|
+
|
|
|
+ } else {
|
|
|
+ // 指定区域的
|
|
|
+ List<BaseLocationInfo> locationInfoList = baseLocationInfoService.selectSortedLocatinListByZoneId(Long.parseLong(inWarehouseDTO.getLocationZoneTo()), inWarehouseDTO.getWarehouseId());
|
|
|
+ return locationAllocationStrategy.filterLockLocation(locationInfoList);
|
|
|
}
|
|
|
- return resultLocation;
|
|
|
}
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
@Transactional
|