|
@@ -11,6 +11,7 @@ import com.ruoyi.ams.config.domain.AsnSoStrategy;
|
|
|
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.LocationAllocationStrategy;
|
|
|
import com.ruoyi.ams.inv.mapper.InvLotLocIdMapper;
|
|
|
import com.ruoyi.ams.inv.service.IInvLotLocIdService;
|
|
@@ -72,13 +73,13 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
@Autowired
|
|
|
private IAmsTaskService amsTaskService;
|
|
|
|
|
|
- private int geniKey(String taskNo){
|
|
|
+ private int geniKey(String taskNo) {
|
|
|
int res = CRC16Util.calcCrc16(ByteUtil.string2byteArray(taskNo));
|
|
|
- if(res == 0){
|
|
|
+ if (res == 0) {
|
|
|
BigDecimal t = new BigDecimal(taskNo);
|
|
|
t = t.add(BigDecimal.ONE);
|
|
|
return geniKey(t.toString());
|
|
|
- }else {
|
|
|
+ } else {
|
|
|
return res;
|
|
|
}
|
|
|
}
|
|
@@ -402,7 +403,7 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
}
|
|
|
} else { //移库
|
|
|
if (locationType.equals("locationFrom")) {
|
|
|
- //TODO 代码一样如果有新需求再加
|
|
|
+
|
|
|
for (BaseLocationInfo b : locationInfoList) {
|
|
|
if (!b.getStockStatus().equals("00") || !b.getIsEmpty().equals("N") || redisCache.checkIsLock(RedisKey.LOCK_LOCATION + b.getId())) {
|
|
|
continue;
|
|
@@ -411,9 +412,17 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
locationInfo = b;
|
|
|
break;
|
|
|
}
|
|
|
- if (locationInfo == null) {
|
|
|
- throw new ServiceException("没有可以分配的库位", token);
|
|
|
+ //分配时是否需要做库位占用判断
|
|
|
+ FlowConfigHeaderVO flowConfigHeaderVO = agvCallDTO.getFlowConfigHeaderVO();
|
|
|
+ if (!StringUtils.isEmpty(flowConfigHeaderVO.getLocationFromStrategyFlag()) && flowConfigHeaderVO.getLocationFromStrategyFlag().equals("Y")) {
|
|
|
+
|
|
|
+ } else {
|
|
|
+ //如果未启用策略则进行判断
|
|
|
+ if (locationInfo == null) {
|
|
|
+ throw new ServiceException("没有可以分配的库位", token);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
} else {
|
|
|
for (BaseLocationInfo b : locationInfoList) {
|
|
|
if (!b.getStockStatus().equals("00") || !b.getIsEmpty().equals("Y") || redisCache.checkIsLock(RedisKey.LOCK_LOCATION + b.getId())) {
|
|
@@ -423,8 +432,15 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
locationInfo = b;
|
|
|
break;
|
|
|
}
|
|
|
- if (locationInfo == null) {
|
|
|
- throw new ServiceException("没有可以分配的库位", token);
|
|
|
+ //分配时是否需要做库位占用判断
|
|
|
+ FlowConfigHeaderVO flowConfigHeaderVO = agvCallDTO.getFlowConfigHeaderVO();
|
|
|
+ if (!StringUtils.isEmpty(flowConfigHeaderVO.getLocationFromStrategyFlag()) && flowConfigHeaderVO.getLocationFromStrategyFlag().equals("Y")) {
|
|
|
+
|
|
|
+ } else {
|
|
|
+ //如果未启用策略则进行判断
|
|
|
+ if (locationInfo == null) {
|
|
|
+ throw new ServiceException("没有可以分配的库位", token);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -452,18 +468,30 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
|
|
|
@Override
|
|
|
public List<WcsTask> genTask(BaseLocationInfo locationFrom, BaseLocationInfo locationTo, FlowConfigHeaderVO flowConfigHeaderVO, AgvCallDTO agvCallDTO, Long token) {
|
|
|
- if (locationFrom == null || locationTo == null) {
|
|
|
- throw new ServiceException("任务执行库位不能为空", token);
|
|
|
+ if (flowConfigHeaderVO.getLocationFromStrategyFlag().equals("N")) {
|
|
|
+ if (locationFrom == null) {
|
|
|
+ throw new ServiceException("起始库位不能为空", token);
|
|
|
+ }
|
|
|
}
|
|
|
+ if (flowConfigHeaderVO.getLocationToStrategyFlag().equals("N")) {
|
|
|
+ if (locationTo == null) {
|
|
|
+ throw new ServiceException("目标库位不能为空", token);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
List<WcsTask> wcsTaskList = new ArrayList<>();
|
|
|
if (StringUtils.isEmpty(flowConfigHeaderVO.getRootFlow())) {
|
|
|
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());
|
|
|
+ if (locationFrom != null) {
|
|
|
+ wcsTask.setAreaFrom(locationFrom.getZoneId().toString());
|
|
|
+ wcsTask.setLocationFrom(locationFrom.getId().toString());
|
|
|
+ }
|
|
|
+ if (locationTo != null) {
|
|
|
+ wcsTask.setAreaTo(locationTo.getZoneId() + "");
|
|
|
+ wcsTask.setLocationTo(locationTo.getId().toString());
|
|
|
+ }
|
|
|
wcsTask.setState(9L);
|
|
|
wcsTask.setPriority(1L);
|
|
|
wcsTask.setShopId(Constant.WAREHOUSE_ID.toString());
|
|
@@ -603,7 +631,7 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
}
|
|
|
amsTask.setIsDelete(0);
|
|
|
amsTask.setAciAccept(0);
|
|
|
- amsTask.setIkey((long)geniKey(amsTask.getTaskNo()));
|
|
|
+ amsTask.setIkey((long) geniKey(amsTask.getTaskNo()));
|
|
|
amsTask.setPriority(wcsTask.getPriority().intValue());
|
|
|
amsTask.setStFrom(locFrom.getAgvStation().intValue());
|
|
|
amsTask.setStTo(locTo.getAgvStation().intValue());
|
|
@@ -655,7 +683,7 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
|
|
|
//转发任务
|
|
|
if (StringUtils.isNotEmpty(wcsTask.getTaskType())
|
|
|
- &&wcsTask.getTaskType().equals(Constant.TASK_TYPE.FORWARD.getValue())) {
|
|
|
+ && wcsTask.getTaskType().equals(Constant.TASK_TYPE.FORWARD.getValue())) {
|
|
|
sendTask(wcsTask);
|
|
|
wcsTask.setState(10L);
|
|
|
wcsTaskService.updateWcsTask(wcsTask);
|
|
@@ -694,9 +722,9 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
//目标库位
|
|
|
BaseLocationInfo locationInfoTo = baseLocationInfoService.selectBaseLocationInfoById(Long.parseLong(wcsTask.getLocationTo()));
|
|
|
//TODO 前置任务未完成不进行下发
|
|
|
- /*if(wcsTaskService.taskDispatchCheck(wcsTask) == false){
|
|
|
+ if (businessService.taskDispatchCheck(wcsTask) == false) {
|
|
|
return false;
|
|
|
- }*/
|
|
|
+ }
|
|
|
|
|
|
if (basLocationInfoFrom != null) {
|
|
|
|
|
@@ -707,13 +735,14 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
}
|
|
|
|
|
|
//起始库位巷道检测(起始库位检测是否同巷道)
|
|
|
- /*if(!StringUtils.isEmpty(basLocationInfoFrom.getColNo())){
|
|
|
- if(baseLocationInfoService.laneCheck(basLocationInfoFrom, BasLocationEnum.LANE_FROM) == false){
|
|
|
+ if (!StringUtils.isEmpty(basLocationInfoFrom.getColNo())) {
|
|
|
+ List<BaseLocationInfo> locationInfoList = baseLocationInfoMapper.laneCheck(basLocationInfoFrom.getColNo(), "LANE_FROM", Constant.WAREHOUSE_ID);
|
|
|
+ if (locationInfoList != null && locationInfoList.size() > 0) {
|
|
|
wcsTask.setRemark("起始库位同列或同巷道有车辆在任务中,等待其他任务完成");
|
|
|
- wcsTask.update();
|
|
|
+ wcsTaskService.updateWcsTask(wcsTask);
|
|
|
return false;
|
|
|
}
|
|
|
- }*/
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//起始库位是地堆需要判断是否有阻挡
|
|
@@ -812,4 +841,18 @@ public class BusinessServiceImpl implements IBusinessService {
|
|
|
return false;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean taskDispatchCheck(WcsTask wcsTask) {
|
|
|
+ if (!StringUtils.isEmpty(wcsTask.getBeforeTask())) {
|
|
|
+ List<WcsTask> taskFindBeforeRecord = wcsTaskMapper.selectBeforeTask(wcsTask.getBeforeTask());
|
|
|
+ if (taskFindBeforeRecord != null && taskFindBeforeRecord.size() > 0) {
|
|
|
+ //log.info("前置任务未完成主任务无法下发{}",wcsTask);
|
|
|
+ wcsTask.setRemark("前置任务未完成主任务无法下发");
|
|
|
+ wcsTaskService.updateWcsTask(wcsTask);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|