| | |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.vincent.rsf.framework.common.Cools; |
| | | import com.vincent.rsf.framework.exception.CoolException; |
| | | import com.vincent.rsf.server.manager.controller.params.LocToTaskParams; |
| | | import com.vincent.rsf.server.manager.entity.*; |
| | | import com.vincent.rsf.server.manager.enums.LocStsType; |
| | | import com.vincent.rsf.server.manager.enums.StationTypeEnum; |
| | | import com.vincent.rsf.framework.common.SnowflakeIdWorker; |
| | | import com.vincent.rsf.server.manager.entity.Loc; |
| | | import com.vincent.rsf.server.manager.entity.Task; |
| | | import com.vincent.rsf.server.manager.enums.TaskStsType; |
| | | import com.vincent.rsf.server.manager.enums.TaskType; |
| | | import com.vincent.rsf.server.manager.service.LocItemService; |
| | | import com.vincent.rsf.server.manager.service.LocService; |
| | | import com.vincent.rsf.server.manager.service.TaskService; |
| | | import com.vincent.rsf.server.manager.service.impl.BasContainerServiceImpl; |
| | | import com.vincent.rsf.server.manager.service.impl.WarehouseAreasServiceImpl; |
| | | import com.vincent.rsf.server.system.constant.GlobalConfigCode; |
| | | import com.vincent.rsf.server.system.entity.*; |
| | | import com.vincent.rsf.server.system.service.ConfigService; |
| | |
| | | @Autowired |
| | | private ConfigService configService; |
| | | @Autowired |
| | | private WarehouseAreasServiceImpl warehouseAreasService; |
| | | @Autowired |
| | | private LocService locService; |
| | | @Autowired |
| | | private LocItemService locItemService; |
| | | private TaskPathTemplateMergeServiceImpl taskPathTemplateMergeService; |
| | | @Autowired |
| | | private BasContainerServiceImpl basContainerService; |
| | | private TaskInstanceServiceImpl taskInstanceService; |
| | | @Autowired |
| | | private TaskPathTemplateServiceImpl taskPathTemplateService; |
| | | @Autowired |
| | | private TaskPathTemplateNodeServiceImpl taskPathTemplateNodeService; |
| | | @Autowired |
| | | private TaskInstanceServiceImpl taskInstanceService; |
| | | @Autowired |
| | | private TaskInstanceNodeServiceImpl taskInstanceNodeService; |
| | | @Autowired |
| | | private SubsystemFlowTemplateServiceImpl subsystemFlowTemplateService; |
| | | @Autowired |
| | | private FlowStepLogServiceImpl flowStepLogService; |
| | | @Autowired |
| | | private FlowStepTemplateServiceImpl flowStepTemplateService; |
| | | @Autowired |
| | | private FlowStepInstanceServiceImpl flowStepInstanceService; |
| | | private TaskInstanceNodeServiceImpl taskInstanceNodeService; |
| | | @Autowired |
| | | private SnowflakeIdWorker snowflakeIdWorker; |
| | | @Autowired |
| | | private FlowInstanceServiceImpl flowInstanceService; |
| | | @Autowired |
| | | private FlowStepInstanceServiceImpl flowStepInstanceService; |
| | | |
| | | /** |
| | | * @author Munch D. Luffy |
| | |
| | | * @description: 初始任务规划路径 |
| | | * @version 1.0 |
| | | */ |
| | | @Scheduled(cron = "0/2 * * * * ?") |
| | | @Scheduled(cron = "0/1 * * * * ?") |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void missionTemplate() throws Exception { |
| | | Config config = configService.getOne(new LambdaQueryWrapper<Config>().eq(Config::getFlag, GlobalConfigCode.AUTO_TEMPLATE_PLANNING_STEP_FLOW)); |
| | | if (!Boolean.parseBoolean(config.getVal())) { |
| | | return; |
| | | } |
| | | |
| | | List<Task> taskList = taskService.list(new LambdaQueryWrapper<Task>().eq(Task::getTaskStatus, TaskStsType.MISSION_INITIAL.id)); |
| | | if (Objects.isNull(taskList)) { |
| | | return; |
| | |
| | | Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc())); |
| | | sou = loc.getAreaId().toString(); |
| | | end = task.getTargSite(); |
| | | } else if (task.getTaskType().equals(TaskType.TASK_TYPE_CROSS_DOCKING_OUT.type)){ |
| | | Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc())); |
| | | sou = loc.getAreaId().toString(); |
| | | end = loc.getAreaId().toString(); |
| | | } |
| | | List<TaskPathTemplate> taskPathTemplates = taskPathTemplateService.list(new LambdaQueryWrapper<TaskPathTemplate>().eq(TaskPathTemplate::getSourceType, sou).eq(TaskPathTemplate::getTargetType, end)); |
| | | if (Objects.isNull(taskPathTemplates) || taskPathTemplates.isEmpty()) { |
| | | List<TaskPathTemplate> list = taskPathTemplateService.list(new LambdaQueryWrapper<>()); |
| | | List<TaskPathTemplateMerge> taskPathTemplateMergeList = taskPathTemplateMergeService.list(new LambdaQueryWrapper<TaskPathTemplateMerge>().eq(TaskPathTemplateMerge::getSourceType, sou).eq(TaskPathTemplateMerge::getTargetType, end)); |
| | | if (Objects.isNull(taskPathTemplateMergeList) || taskPathTemplateMergeList.isEmpty()) { |
| | | List<TaskPathTemplateMerge> list = taskPathTemplateMergeService.list(new LambdaQueryWrapper<TaskPathTemplateMerge>().eq(TaskPathTemplateMerge::getStepSize,1)); |
| | | if (!Cools.isEmpty(list)) { |
| | | List<String[]> stationList = new ArrayList<>(); |
| | | list.forEach(taskPathTemplate -> { |
| | |
| | | }); |
| | | List<Long> longs = RouteWmsStepFlow.routeGet(stationList, sou, end); |
| | | if (longs != null && !longs.isEmpty()) { |
| | | TaskPathTemplate taskPathTemplate = new TaskPathTemplate(); |
| | | taskPathTemplate.setTemplateCode(sou+"===>"+end); |
| | | taskPathTemplate.setTemplateName(sou+"===>"+end); |
| | | taskPathTemplate.setSourceType(sou); |
| | | taskPathTemplate.setTargetType(end); |
| | | taskPathTemplateService.save(taskPathTemplate); |
| | | TaskPathTemplateMerge taskPathTemplateMerge = new TaskPathTemplateMerge(); |
| | | taskPathTemplateMerge.setTemplateCode(sou+"===>"+end); |
| | | taskPathTemplateMerge.setTemplateName(sou+"===>"+end); |
| | | taskPathTemplateMerge.setSourceType(sou); |
| | | taskPathTemplateMerge.setTargetType(end); |
| | | List<Integer> longList = new ArrayList<>(); |
| | | for (Long id : longs) { |
| | | TaskPathTemplateMerge one = taskPathTemplateMergeService.getOne(new LambdaQueryWrapper<TaskPathTemplateMerge>().eq(TaskPathTemplateMerge::getId, id)); |
| | | longList.addAll(one.getConditionExpression()); |
| | | } |
| | | taskPathTemplateMerge.setConditionExpression(longList); |
| | | taskPathTemplateMerge.setStepSize(longList.size()); |
| | | taskPathTemplateMergeService.save(taskPathTemplateMerge); |
| | | } |
| | | System.out.println("任务:"+task.getTaskCode()+"查询步序为:"+longs); |
| | | // System.out.println("任务:"+task.getTaskCode()+"查询步序为:"+longs); |
| | | } |
| | | } else { |
| | | //生成实际路径 |
| | | boolean actualPath = generateActualPath(task, taskPathTemplateMergeList.get(0)); |
| | | if (!actualPath) { |
| | | log.error("生成实际路径失败"); |
| | | } |
| | | } |
| | | }); |
| | | } |
| | | |
| | | |
| | | public boolean generateActualPath(Task task,TaskPathTemplateMerge taskPathTemplateMerge) { |
| | | boolean actualPath = false; |
| | | List<Integer> conditionExpression = taskPathTemplateMerge.getConditionExpression(); |
| | | Integer i = 0;//it顺序 |
| | | Integer j = 0;//suT顺序 |
| | | |
| | | // 用于存储所有FlowStepTemplate |
| | | List<FlowStepTemplate> allFlowStepTemplates = new ArrayList<>(); |
| | | |
| | | // 第一遍遍历:收集所有的FlowStepTemplate |
| | | for (Integer id : conditionExpression) { |
| | | TaskPathTemplate taskPathTemplate = taskPathTemplateService.getById(id); |
| | | if (taskPathTemplate == null) { |
| | | return false; |
| | | } |
| | | List<TaskPathTemplateNode> taskPathTemplateNodeList = taskPathTemplateNodeService.list( |
| | | new LambdaQueryWrapper<TaskPathTemplateNode>() |
| | | .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()).orderByAsc(TaskPathTemplateNode::getNodeOrder)); |
| | | |
| | | for (TaskPathTemplateNode taskPathTemplateNode : taskPathTemplateNodeList) { |
| | | List<SubsystemFlowTemplate> subsystemFlowTemplateList = subsystemFlowTemplateService.list( |
| | | new LambdaQueryWrapper<SubsystemFlowTemplate>() |
| | | .eq(SubsystemFlowTemplate::getFlowCode, taskPathTemplateNode.getNodeCode()) |
| | | .eq(SubsystemFlowTemplate::getSystemCode, taskPathTemplateNode.getSystemCode())); |
| | | |
| | | for (SubsystemFlowTemplate subsystemFlowTemplate : subsystemFlowTemplateList) { |
| | | List<FlowStepTemplate> flowStepTemplateList = flowStepTemplateService.list( |
| | | new LambdaQueryWrapper<FlowStepTemplate>() |
| | | .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()).orderByAsc(FlowStepTemplate::getStepOrder)); |
| | | |
| | | allFlowStepTemplates.addAll(flowStepTemplateList); |
| | | } |
| | | } |
| | | } |
| | | |
| | | TaskInstance taskInstance = new TaskInstance(taskPathTemplateMerge,task); |
| | | boolean save = taskInstanceService.save(taskInstance); |
| | | if (!save) { |
| | | return false; |
| | | } |
| | | |
| | | // 当前处理的FlowStepTemplate在全局列表中的索引 |
| | | int globalIndex = 0; |
| | | |
| | | for (Integer id : conditionExpression) { |
| | | TaskPathTemplate taskPathTemplate = taskPathTemplateService.getById(id); |
| | | if (taskPathTemplate == null) { |
| | | return false; |
| | | } |
| | | List<TaskPathTemplateNode> taskPathTemplateNodeList = taskPathTemplateNodeService.list( |
| | | new LambdaQueryWrapper<TaskPathTemplateNode>() |
| | | .eq(TaskPathTemplateNode::getTemplateId, taskPathTemplate.getId()).orderByAsc(TaskPathTemplateNode::getNodeOrder)); |
| | | |
| | | for (TaskPathTemplateNode taskPathTemplateNode : taskPathTemplateNodeList) { |
| | | TaskInstanceNode taskInstanceNode = new TaskInstanceNode(taskPathTemplateNode); |
| | | taskInstanceNode.setTaskId(taskInstance.getId()); |
| | | taskInstanceNode.setTaskNo(taskInstance.getTaskNo()); |
| | | i++; |
| | | taskInstanceNode.setNodeOrder(i); |
| | | taskInstanceNode.setNodeCode(String.valueOf(snowflakeIdWorker.nextId())); |
| | | taskInstanceNodeService.save(taskInstanceNode); |
| | | |
| | | List<SubsystemFlowTemplate> subsystemFlowTemplateList = subsystemFlowTemplateService.list( |
| | | new LambdaQueryWrapper<SubsystemFlowTemplate>() |
| | | .eq(SubsystemFlowTemplate::getFlowCode, taskPathTemplateNode.getNodeCode()) |
| | | .eq(SubsystemFlowTemplate::getSystemCode, taskPathTemplateNode.getSystemCode())); |
| | | |
| | | for (SubsystemFlowTemplate subsystemFlowTemplate : subsystemFlowTemplateList) { |
| | | FlowInstance flowInstance = new FlowInstance(subsystemFlowTemplate); |
| | | flowInstance.setFlowInstanceNo(String.valueOf(snowflakeIdWorker.nextId())); |
| | | flowInstance.setTaskId(taskInstance.getId()); |
| | | flowInstance.setTaskNo(taskInstance.getTaskNo()); |
| | | flowInstance.setNodeInstanceId(taskInstanceNode.getId()); |
| | | flowInstance.setNodeCode(String.valueOf(snowflakeIdWorker.nextId())); |
| | | flowInstanceService.save(flowInstance); |
| | | |
| | | List<FlowStepTemplate> flowStepTemplateList = flowStepTemplateService.list( |
| | | new LambdaQueryWrapper<FlowStepTemplate>() |
| | | .eq(FlowStepTemplate::getFlowId, subsystemFlowTemplate.getId()).orderByAsc(FlowStepTemplate::getStepOrder)); |
| | | |
| | | for (FlowStepTemplate flowStepTemplate : flowStepTemplateList) { |
| | | j++; |
| | | FlowStepInstance flowStepInstance = new FlowStepInstance(flowStepTemplate); |
| | | flowStepInstance.setFlowInstanceId(flowInstance.getId()); |
| | | flowStepInstance.setFlowInstanceNo(flowInstance.getFlowInstanceNo()); |
| | | flowStepInstance.setStepOrder(j); |
| | | flowStepInstance.setStepCode(String.valueOf(snowflakeIdWorker.nextId())); |
| | | flowStepInstance.setWmsNowTaskStatus(flowStepTemplate.getWmsNowTaskStatus()); |
| | | flowStepInstance.setTaskNo(taskInstance.getTaskNo()); |
| | | |
| | | // 判断是否是最后一个 |
| | | if (globalIndex < allFlowStepTemplates.size() - 1) { |
| | | // 不是最后一个,取下一个的WmsNowTaskStatus |
| | | FlowStepTemplate nextFlowStep = allFlowStepTemplates.get(globalIndex + 1); |
| | | flowStepInstance.setWmsNextTaskStatus(nextFlowStep.getWmsNowTaskStatus()); |
| | | } else { |
| | | // 是最后一个,设置为9999 |
| | | flowStepInstance.setWmsNextTaskStatus(9999); |
| | | } |
| | | if (globalIndex == 0){ |
| | | task.setTaskStatus(flowStepTemplate.getWmsNowTaskStatus()); |
| | | flowStepInstance.setStatus((short)1); |
| | | } |
| | | flowStepInstanceService.save(flowStepInstance); |
| | | globalIndex++; // 更新全局索引 |
| | | } |
| | | } |
| | | } |
| | | } |
| | | task.setDeviceSiteId(taskInstance.getId()); |
| | | taskService.updateById(task); |
| | | return actualPath; |
| | | } |
| | | |
| | | |
| | | } |