|
|
|
|
@ -12,6 +12,8 @@ import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.springblade.common.exception.BusinessException; |
|
|
|
|
import org.springblade.core.secure.utils.AuthUtil; |
|
|
|
|
import org.springblade.core.tool.api.R; |
|
|
|
|
import org.springblade.desk.basic.pojo.entity.CenterTeam; |
|
|
|
|
import org.springblade.desk.basic.service.ICenterTeamService; |
|
|
|
|
import org.springblade.desk.dashboard.pojo.entity.BsWorkCenterEntity; |
|
|
|
|
import org.springblade.desk.dashboard.service.IBsWorkCenterService; |
|
|
|
|
import org.springblade.desk.logistics.enums.DistinguishRegionsEnum; |
|
|
|
|
@ -115,6 +117,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
* 工位服务:提供工位基础信息查询 |
|
|
|
|
*/ |
|
|
|
|
private final IBsWorkCenterService bsWorkCenterService; |
|
|
|
|
private final ICenterTeamService iCenterTeamService; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 任务执行记录服务:处理AGV调度任务的生成与执行 |
|
|
|
|
@ -148,7 +151,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
IStationService stationService, |
|
|
|
|
ILocationService locationService, |
|
|
|
|
AgvTaskTypeUtil agvTaskTypeUtil, |
|
|
|
|
IBsWorkCenterService bsWorkCenterService, |
|
|
|
|
IBsWorkCenterService bsWorkCenterService, ICenterTeamService iCenterTeamService, |
|
|
|
|
ITaskExecuteRecordService taskExecuteRecordService, IWorkOrderService workOrderService, IWorkPlanService workPlanService, IPrWorkPlanService prWorkPlanService, IPrWorkOrderService prWorkOrderService, IStationCenterService stationCenterService, IPrYieldOrderService prYieldOrderService) { |
|
|
|
|
this.yieldOrderService = yieldOrderService; |
|
|
|
|
this.taskService = taskService; |
|
|
|
|
@ -157,6 +160,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
this.locationService = locationService; |
|
|
|
|
this.agvTaskTypeUtil = agvTaskTypeUtil; |
|
|
|
|
this.bsWorkCenterService = bsWorkCenterService; |
|
|
|
|
this.iCenterTeamService = iCenterTeamService; |
|
|
|
|
this.taskExecuteRecordService = taskExecuteRecordService; |
|
|
|
|
this.workOrderService = workOrderService; |
|
|
|
|
this.workPlanService = workPlanService; |
|
|
|
|
@ -245,7 +249,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
|
|
|
|
|
// 1. 查询空闲状态的站点
|
|
|
|
|
|
|
|
|
|
List<StationVO> freeStationList = stationService.getStatusStationList(STATUS_FREE, true,null, CONVEYOR_LINE_RECEIVE_ONLY, false); |
|
|
|
|
List<StationVO> freeStationList = stationService.getStatusStationList(STATUS_FREE, true, null, CONVEYOR_LINE_RECEIVE_ONLY, false); |
|
|
|
|
// 2. 构建返回列表(默认添加输送线回库选项)
|
|
|
|
|
List<BsWorkCenterVO> resultList = new ArrayList<>(); |
|
|
|
|
BsWorkCenterVO conveyorVO = new BsWorkCenterVO(); |
|
|
|
|
@ -376,7 +380,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
// 5. 设置结束工位ID并处理不同回库类型
|
|
|
|
|
Long endWcId = returnToWarehouseDto.getEndWcId(); |
|
|
|
|
task.setWcId(endWcId); |
|
|
|
|
if (returnToWarehouseDto.getStationRegion()!=null) { |
|
|
|
|
if (returnToWarehouseDto.getStationRegion() != null) { |
|
|
|
|
task.setStationRegion(returnToWarehouseDto.getStationRegion()); |
|
|
|
|
} |
|
|
|
|
if (endWcId == 0) { |
|
|
|
|
@ -462,32 +466,32 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
BsWorkCenterEntity workCenter = bsWorkCenterService.getById(wcID); |
|
|
|
|
|
|
|
|
|
LinkedHashMap<String, Object> map = new LinkedHashMap<>(); |
|
|
|
|
map.put("wcId",wcID); |
|
|
|
|
map.put("wcId", wcID); |
|
|
|
|
if (DistinguishRegionsEnum.includeByWcName(workCenter.getWcName())) { |
|
|
|
|
List<YieldOrder> list = yieldOrderService.list(new LambdaQueryWrapper<YieldOrder>().eq(YieldOrder::getCardNo, orderBindList.get(0).getCardNo())); |
|
|
|
|
String useDept =""; |
|
|
|
|
if (list!=null&&list.size()!=0) { |
|
|
|
|
useDept= list.get(0).getUseDept(); |
|
|
|
|
}else { |
|
|
|
|
String useDept = ""; |
|
|
|
|
if (list != null && list.size() != 0) { |
|
|
|
|
useDept = list.get(0).getUseDept(); |
|
|
|
|
} else { |
|
|
|
|
List<PrYieldOrder> list1 = prYieldOrderService.list(new LambdaQueryWrapper<PrYieldOrder>().eq(PrYieldOrder::getCardNo, orderBindList.get(0).getCardNo())); |
|
|
|
|
if (list1!=null&&list1.size()!=0) { |
|
|
|
|
useDept= list1.get(0).getUseDept(); |
|
|
|
|
if (list1 != null && list1.size() != 0) { |
|
|
|
|
useDept = list1.get(0).getUseDept(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
String code = DistinguishRegionsEnum.wcNameByCode(workCenter.getWcName()); |
|
|
|
|
String logisticsAnagementRegion = DictCache.getValue(code, useDept); |
|
|
|
|
System.out.println("logisticsAnagementRegion = " + logisticsAnagementRegion); |
|
|
|
|
if (logisticsAnagementRegion!=null) { |
|
|
|
|
map.put("stationRegion",logisticsAnagementRegion); |
|
|
|
|
}else { |
|
|
|
|
List<StationVO> freeStationList = stationService.getStatusStationList(null, false,wcID, STATION_RECEIVE_ONLY, false); |
|
|
|
|
map.put("stationRegion",freeStationList.get(0).getStationRegion()); |
|
|
|
|
if (logisticsAnagementRegion != null) { |
|
|
|
|
map.put("stationRegion", logisticsAnagementRegion); |
|
|
|
|
} else { |
|
|
|
|
List<StationVO> freeStationList = stationService.getStatusStationList(null, false, wcID, STATION_RECEIVE_ONLY, false); |
|
|
|
|
map.put("stationRegion", freeStationList.get(0).getStationRegion()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}else { |
|
|
|
|
List<StationVO> statusStationList = stationService.getStatusStationList(null, true,wcID, CONVEYOR_LINE_RECEIVE_ONLY, false); |
|
|
|
|
map.put("stationRegion",statusStationList.get(0).getStationRegion()); |
|
|
|
|
} else { |
|
|
|
|
List<StationVO> statusStationList = stationService.getStatusStationList(null, true, wcID, CONVEYOR_LINE_RECEIVE_ONLY, false); |
|
|
|
|
map.put("stationRegion", statusStationList.get(0).getStationRegion()); |
|
|
|
|
} |
|
|
|
|
return R.data(map); |
|
|
|
|
} |
|
|
|
|
@ -714,20 +718,20 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
// 1. 尝试分配空闲站点
|
|
|
|
|
List<StationVO> freeStationList = null; |
|
|
|
|
if (agvSend) { |
|
|
|
|
freeStationList = stationService.getStatusStationList(STATUS_FREE, true,task.getWcId(), CONVEYOR_LINE_RECEIVE_ONLY, false); |
|
|
|
|
freeStationList = stationService.getStatusStationList(STATUS_FREE, true, task.getWcId(), CONVEYOR_LINE_RECEIVE_ONLY, false); |
|
|
|
|
} else { |
|
|
|
|
freeStationList = stationService.getStatusStationList(STATUS_FREE, true,task.getWcId(), STATION_RECEIVE_ONLY, false); |
|
|
|
|
freeStationList = stationService.getStatusStationList(STATUS_FREE, true, task.getWcId(), STATION_RECEIVE_ONLY, false); |
|
|
|
|
} |
|
|
|
|
String wcName = bsWorkCenterService.getById(task.getWcId()).getWcName(); |
|
|
|
|
if (freeStationList!=null&&freeStationList.size()!=0) { |
|
|
|
|
if (freeStationList != null && freeStationList.size() != 0) { |
|
|
|
|
//判断是不是镀后库作业中心
|
|
|
|
|
if (DistinguishRegionsEnum.includeByWcName(wcName)&&!agvSend) { |
|
|
|
|
if (DistinguishRegionsEnum.includeByWcName(wcName) && !agvSend) { |
|
|
|
|
log.info("是读后库"); |
|
|
|
|
freeStationList=freeStationList.stream().filter(s->s.getStationRegion().equals(task.getStationRegion())).toList(); |
|
|
|
|
freeStationList = freeStationList.stream().filter(s -> s.getStationRegion().equals(task.getStationRegion())).toList(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
if (freeStationList!=null&&freeStationList.size()!=0) { |
|
|
|
|
if (freeStationList != null && freeStationList.size() != 0) { |
|
|
|
|
StationVO station = null; |
|
|
|
|
station = freeStationList.get(0); |
|
|
|
|
task.setStationId(station.getId()); |
|
|
|
|
@ -893,7 +897,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
// 异常处理:回滚任务
|
|
|
|
|
taskService.removeById(task); |
|
|
|
|
List<Station> stationList = stationService.list(new LambdaQueryWrapper<Station>().eq(Station::getId, task.getStationId())); |
|
|
|
|
if (stationList!=null&&stationList.size()!=0) { |
|
|
|
|
if (stationList != null && stationList.size() != 0) { |
|
|
|
|
stationList.get(0).setStationStatus(STATUS_FREE); |
|
|
|
|
stationService.updateById(stationList.get(0)); |
|
|
|
|
} |
|
|
|
|
@ -1068,7 +1072,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
//判断是否是镀后库作业中心
|
|
|
|
|
if (DistinguishRegionsEnum.includeByWcName(workCenter.getWcName())) { |
|
|
|
|
List<YieldOrder> yieldOrderList = yieldOrderService.list(new LambdaQueryWrapper<YieldOrder>().eq(YieldOrder::getCardNo, orderList.get(0).getCardNo())); |
|
|
|
|
if (yieldOrderList!=null&&yieldOrderList.size()!=0) { |
|
|
|
|
if (yieldOrderList != null && yieldOrderList.size() != 0) { |
|
|
|
|
String code = DistinguishRegionsEnum.wcNameByCode(workCenter.getWcName()); |
|
|
|
|
String logisticsAnagementRegion = DictCache.getValue(code, yieldOrderList.get(0).getUseDept()); |
|
|
|
|
if (!logisticsAnagementRegion.isEmpty()) { |
|
|
|
|
@ -1078,7 +1082,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
List<PrYieldOrder> yieldOrderList1 = prYieldOrderService.list(new LambdaQueryWrapper<PrYieldOrder>().eq(PrYieldOrder::getCardNo, orderList.get(0).getCardNo())); |
|
|
|
|
if (yieldOrderList1!=null&&yieldOrderList1.size()!=0) { |
|
|
|
|
if (yieldOrderList1 != null && yieldOrderList1.size() != 0) { |
|
|
|
|
String code = DistinguishRegionsEnum.wcNameByCode(workCenter.getWcName()); |
|
|
|
|
String logisticsAnagementRegion = DictCache.getValue(code, yieldOrderList1.get(0).getUseDept()); |
|
|
|
|
if (!logisticsAnagementRegion.isEmpty()) { |
|
|
|
|
@ -1100,7 +1104,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
List<Long> stationIdList = stationCenterList.stream().map(s -> s.getStationId()).toList(); |
|
|
|
|
List<Station> stationList = stationService.list(new LambdaQueryWrapper<Station>().in(Station::getId, stationIdList)); |
|
|
|
|
List<String> list = stationList.stream().map(s -> s.getStationRegion()).distinct().toList(); |
|
|
|
|
if (list.size()==1) { |
|
|
|
|
if (list.size() == 1) { |
|
|
|
|
detailsVO.setStationRegion(stationList.get(0).getStationRegion()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1191,9 +1195,9 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public R getStationRegion() { |
|
|
|
|
List<StationVO> freeStationList = stationService.getStatusStationList(STATUS_FREE,false, null, CONVEYOR_LINE_RECEIVE_ONLY, false); |
|
|
|
|
List<StationVO> freeStationList = stationService.getStatusStationList(STATUS_FREE, false, null, CONVEYOR_LINE_RECEIVE_ONLY, false); |
|
|
|
|
|
|
|
|
|
if (freeStationList==null||freeStationList.size()==0) { |
|
|
|
|
if (freeStationList == null || freeStationList.size() == 0) { |
|
|
|
|
return R.fail("没有占用区域"); |
|
|
|
|
} |
|
|
|
|
List<String> stationRegionList = freeStationList.stream().map(StationVO::getStationRegion).distinct().toList(); |
|
|
|
|
@ -1201,7 +1205,7 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
for (String stationRegion : stationRegionList) { |
|
|
|
|
StationRegionVo stationRegionVo = new StationRegionVo(); |
|
|
|
|
stationRegionVo.setStationRegion(stationRegion); |
|
|
|
|
List<String> stationList = freeStationList.stream().filter(s -> stationRegion!=null&&s.getStationRegion()!=null&&stationRegion.equals(s.getStationRegion())).map(StationVO::getStationCode).distinct().collect(Collectors.toUnmodifiableList()); |
|
|
|
|
List<String> stationList = freeStationList.stream().filter(s -> stationRegion != null && s.getStationRegion() != null && stationRegion.equals(s.getStationRegion())).map(StationVO::getStationCode).distinct().collect(Collectors.toUnmodifiableList()); |
|
|
|
|
stationRegionVo.setStationCodeList(stationList); |
|
|
|
|
list.add(stationRegionVo); |
|
|
|
|
} |
|
|
|
|
@ -1210,8 +1214,6 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
/** |
|
|
|
|
* 箱条码绑定主入口 |
|
|
|
|
@ -1311,15 +1313,16 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
private R<?> checkOrderWorkCenterConsistency(String orderCardNo, Long currentWcId) { |
|
|
|
|
// ====================== 处理标准工单 ======================
|
|
|
|
|
List<WorkOrder> workOrderList = workOrderService.lambdaQuery() |
|
|
|
|
.select(WorkOrder::getId) |
|
|
|
|
.eq(WorkOrder::getCardNo, orderCardNo) |
|
|
|
|
.list(); |
|
|
|
|
|
|
|
|
|
if (workOrderList != null && !workOrderList.isEmpty()) { |
|
|
|
|
WorkOrder workOrder = workOrderList.get(0); |
|
|
|
|
List<WorkPlan> workPlanList = workPlanService.lambdaQuery() |
|
|
|
|
.select(WorkPlan::getStatus, WorkPlan::getNextWpId, WorkPlan::getWoId, WorkPlan::getMakeTeam) |
|
|
|
|
.eq(WorkPlan::getWoId, workOrder.getId()) |
|
|
|
|
.list(); |
|
|
|
|
|
|
|
|
|
if (workPlanList == null || workPlanList.isEmpty()) { |
|
|
|
|
log.info("workPlanList"); |
|
|
|
|
return R.fail(orderCardNo + "车间订单异常"); |
|
|
|
|
@ -1330,17 +1333,40 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
|
|
|
|
|
// 根据工序状态判断使用当前工序还是下一道工序
|
|
|
|
|
if (workPlan.getStatus() < 3) { |
|
|
|
|
workCenterId = workPlan.getWorkCenterId(); |
|
|
|
|
// workCenterId = workPlan.getWorkCenterId();
|
|
|
|
|
if (workPlan.getMakeTeam() == null) { |
|
|
|
|
return R.fail(orderCardNo + "车间订单班次异常"); |
|
|
|
|
} else { |
|
|
|
|
List<CenterTeam> list = iCenterTeamService.list(new LambdaQueryWrapper<CenterTeam>() |
|
|
|
|
.select(CenterTeam::getWcId, CenterTeam::getTsId) |
|
|
|
|
.eq(CenterTeam::getTsId, (workPlan.getMakeTeam()))); |
|
|
|
|
if (list == null || list.size() == 0) { |
|
|
|
|
return R.fail(orderCardNo + "车间订单班次查询作业中心异常"); |
|
|
|
|
} else { |
|
|
|
|
workCenterId = list.get(0).getWcId(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
|
|
|
|
|
List<WorkPlan> nextWorkPlanList = workPlanService.lambdaQuery() |
|
|
|
|
.select(WorkPlan::getStatus, WorkPlan::getNextWpId, WorkPlan::getWoId, WorkPlan::getMakeTeam) |
|
|
|
|
.eq(WorkPlan::getId, workPlan.getNextWpId()) |
|
|
|
|
.list(); |
|
|
|
|
|
|
|
|
|
if (nextWorkPlanList == null || nextWorkPlanList.isEmpty()) { |
|
|
|
|
return R.fail(orderCardNo + "车间下一工序订单异常"); |
|
|
|
|
} |
|
|
|
|
workCenterId = nextWorkPlanList.get(0).getWorkCenterId(); |
|
|
|
|
if (nextWorkPlanList.get(0).getMakeTeam() == null) { |
|
|
|
|
return R.fail(orderCardNo + "车间订单班次异常"); |
|
|
|
|
} |
|
|
|
|
List<CenterTeam> list = iCenterTeamService.list(new LambdaQueryWrapper<CenterTeam>() |
|
|
|
|
.select(CenterTeam::getWcId, CenterTeam::getTsId) |
|
|
|
|
.eq(CenterTeam::getTsId, (workPlan.getMakeTeam()))); |
|
|
|
|
if (list == null || list.size() == 0) { |
|
|
|
|
return R.fail(orderCardNo + "车间订单班次查询作业中心异常"); |
|
|
|
|
} else { |
|
|
|
|
workCenterId = list.get(0).getWcId(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return validateWorkCenter(orderCardNo, currentWcId, workCenterId); |
|
|
|
|
@ -1348,12 +1374,14 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
|
|
|
|
|
// ====================== 处理PR工单 ======================
|
|
|
|
|
List<PrWorkOrder> prWorkOrderList = prWorkOrderService.lambdaQuery() |
|
|
|
|
.select(PrWorkOrder::getWpId) |
|
|
|
|
.eq(PrWorkOrder::getCardNo, orderCardNo) |
|
|
|
|
.list(); |
|
|
|
|
|
|
|
|
|
if (prWorkOrderList != null && !prWorkOrderList.isEmpty()) { |
|
|
|
|
PrWorkOrder prWorkOrder = prWorkOrderList.get(0); |
|
|
|
|
List<PrWorkPlan> workPlanList = prWorkPlanService.lambdaQuery() |
|
|
|
|
.select(PrWorkPlan::getStatus, PrWorkPlan::getNextWpId, PrWorkPlan::getWpId, PrWorkPlan::getMakeTeam) |
|
|
|
|
.eq(PrWorkPlan::getWpId, prWorkOrder.getWpId()) |
|
|
|
|
.list(); |
|
|
|
|
|
|
|
|
|
@ -1364,17 +1392,41 @@ public class IOrderBoxServiceImpl implements IOrderBoxService { |
|
|
|
|
PrWorkPlan workPlan = workPlanList.get(0); |
|
|
|
|
Long workCenterId; |
|
|
|
|
|
|
|
|
|
if (workPlan.getCurStatus() < 3) { |
|
|
|
|
workCenterId = workPlan.getWcId(); |
|
|
|
|
if (workPlan.getStatus() < 3) { |
|
|
|
|
if (workPlan.getMakeTeam() == null) { |
|
|
|
|
return R.fail(orderCardNo + "车间订单班次异常"); |
|
|
|
|
} else { |
|
|
|
|
List<CenterTeam> list = iCenterTeamService.list(new LambdaQueryWrapper<CenterTeam>() |
|
|
|
|
.select(CenterTeam::getWcId, CenterTeam::getTsId) |
|
|
|
|
.eq(CenterTeam::getTsId, (workPlan.getMakeTeam()))); |
|
|
|
|
if (list == null || list.size() == 0) { |
|
|
|
|
return R.fail(orderCardNo + "车间订单班次查询作业中心异常"); |
|
|
|
|
} else { |
|
|
|
|
workCenterId = list.get(0).getWcId(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
List<PrWorkPlan> nextWorkPlanList = prWorkPlanService.lambdaQuery() |
|
|
|
|
.select(PrWorkPlan::getStatus, PrWorkPlan::getNextWpId, PrWorkPlan::getWpId, PrWorkPlan::getMakeTeam) |
|
|
|
|
.eq(PrWorkPlan::getWpId, workPlan.getNextWpId()) |
|
|
|
|
.list(); |
|
|
|
|
|
|
|
|
|
if (nextWorkPlanList == null || nextWorkPlanList.isEmpty()) { |
|
|
|
|
return R.fail(orderCardNo + "车间订单异常"); |
|
|
|
|
} |
|
|
|
|
workCenterId = nextWorkPlanList.get(0).getWcId(); |
|
|
|
|
workPlan = nextWorkPlanList.get(0); |
|
|
|
|
if (workPlan.getMakeTeam() == null) { |
|
|
|
|
return R.fail(orderCardNo + "车间订单班次异常"); |
|
|
|
|
} else { |
|
|
|
|
List<CenterTeam> list = iCenterTeamService.list(new LambdaQueryWrapper<CenterTeam>() |
|
|
|
|
.select(CenterTeam::getWcId, CenterTeam::getTsId) |
|
|
|
|
.eq(CenterTeam::getTsId, (workPlan.getMakeTeam()))); |
|
|
|
|
if (list == null || list.size() == 0) { |
|
|
|
|
return R.fail(orderCardNo + "车间订单班次查询作业中心异常"); |
|
|
|
|
} else { |
|
|
|
|
workCenterId = list.get(0).getWcId(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return validateWorkCenter(orderCardNo, currentWcId, workCenterId); |
|
|
|
|
|