From 0f3ba9d165742d5653f7dc4797223cee7b5856f4 Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期四, 05 三月 2026 17:50:37 +0800
Subject: [PATCH] lsh#
---
rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java | 282 ++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 251 insertions(+), 31 deletions(-)
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java
index 217c10a..e3a1518 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskMissionSchedules.java
@@ -2,18 +2,17 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.vincent.rsf.framework.common.Cools;
+import com.vincent.rsf.framework.common.SnowflakeIdWorker;
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.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.manager.service.impl.BasStationAreaServiceImpl;
+import com.vincent.rsf.server.manager.service.impl.BasStationServiceImpl;
+import com.vincent.rsf.server.manager.service.impl.DeviceSiteServiceImpl;
import com.vincent.rsf.server.system.constant.GlobalConfigCode;
import com.vincent.rsf.server.system.entity.*;
import com.vincent.rsf.server.system.service.ConfigService;
@@ -47,31 +46,33 @@
@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;
+ @Autowired
+ private BasStationAreaServiceImpl basStationAreaService;
+ @Autowired
+ private DeviceSiteServiceImpl deviceSiteService;
+ @Autowired
+ private BasStationServiceImpl basStationService;
/**
* @author Munch D. Luffy
@@ -79,27 +80,27 @@
* @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;
}
taskList.forEach(task -> {
+ boolean endSign = true;
+ boolean endSignUp = false;
String sou = null;
String end = null;
if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_IN.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)
- || task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) {
+ || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type)) {
sou = task.getOrgSite();
Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getTargLoc()));
end = loc.getAreaId().toString();
@@ -108,30 +109,249 @@
|| task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
|| task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_OUT.type)) {
+ endSignUp = true;
Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc()));
sou = loc.getAreaId().toString();
end = task.getTargSite();
+
+ BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+ .eq(BasStation::getStationName, end)
+ .eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ );
+ if (Cools.isEmpty(basStation)) {
+ endSign = false;
+ }
+ } 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();
+ } else if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)){
+ Loc loc1 = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getTargLoc()));
+ end = loc1.getAreaId().toString();
+ Loc loc2 = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc()));
+ sou = loc2.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() || !endSign) {
+ List<TaskPathTemplateMerge> list = taskPathTemplateMergeService.list(new LambdaQueryWrapper<TaskPathTemplateMerge>().eq(TaskPathTemplateMerge::getStepSize,1));
if (!Cools.isEmpty(list)) {
List<String[]> stationList = new ArrayList<>();
list.forEach(taskPathTemplate -> {
stationList.add(taskPathTemplate.route());
});
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);
+ if (endSign && longs != null && !longs.isEmpty()) {
+ 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);
+ } else {
+ if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type)
+ || task.getTaskType().equals(TaskType.TASK_TYPE_EMPTY_OUT.type)) {//鍑哄簱
+ //娌℃湁璺緞 杩涘叆搴撳尯绛涢�夌珯鐐�
+ List<String> targSiteArea = task.getTargSiteArea();
+ //鎻愬彇鍑烘墍鏈夌珯鐐�
+ List<String> siteList = new ArrayList<>();
+ //绛涢�夊嚭瀛樺湪璺緞鐨勭珯鐐�
+ List<String> siteListRoute = new ArrayList<>();
+ //绛涢�夊彲鏇挎崲閫夐」
+ List<String> siteListUp = new ArrayList<>();
+ if (targSiteArea != null && !targSiteArea.isEmpty()) {
+ for (String areaId : targSiteArea) {
+ BasStationArea basStationArea = basStationAreaService.getById(Long.parseLong(areaId));
+ if (basStationArea == null || basStationArea.getStationAlias() == null || basStationArea.getStationAlias().isEmpty()) {
+ continue;
+ }
+ siteList.addAll(basStationArea.getStationAlias());
+ }
+ if (!siteList.isEmpty()) {
+ //鏌ヨ绔欑偣璺緞
+ for (String site : siteList) {
+ List<Long> routeGet = RouteWmsStepFlow.routeGet(stationList, sou, site);
+ if (routeGet!=null && !routeGet.isEmpty()){
+ siteListRoute.add(site);
+ }
+ }
+ Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, task.getOrgLoc()));
+ //鏌ヨ绔欑偣閰嶇疆
+ if (!siteListRoute.isEmpty()) {
+ for (String site : siteListRoute) {
+ //鎷f枡鍑哄簱 -- 鐩樼偣鍑哄簱
+ DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>()
+ .eq(DeviceSite::getSite, site)
+ .eq(!Objects.isNull(loc.getChannel()),DeviceSite::getChannel, loc.getChannel())
+ .eq(DeviceSite::getType, task.getTaskType()).last("limit 1"),false);
+ if (!Objects.isNull(deviceSite)) {
+ BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>()
+ .eq(BasStation::getStationName, site)
+ .eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type)
+ );
+ if (Cools.isEmpty(basStation) || !basStation.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) {
+ continue;
+ }
+ task.setTargSite(site);
+ taskService.updateById(task);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
}
- System.out.println("浠诲姟锛�"+task.getTaskCode()+"鏌ヨ姝ュ簭涓猴細"+longs);
+// System.out.println("浠诲姟锛�"+task.getTaskCode()+"鏌ヨ姝ュ簭涓猴細"+longs);
+ }
+ } else {
+ //鐢熸垚瀹為檯璺緞
+ boolean actualPath = generateActualPath(task, taskPathTemplateMergeList.get(0),endSignUp);
+ if (!actualPath) {
+ log.error("鐢熸垚瀹為檯璺緞澶辫触");
}
}
});
}
+
+
+ public boolean generateActualPath(Task task,TaskPathTemplateMerge taskPathTemplateMerge,boolean endSignUp) {
+ boolean actualPath = false;
+ List<Integer> conditionExpression = taskPathTemplateMerge.getConditionExpression();
+ Integer i = 0;//it椤哄簭
+ Integer j = 0;//suT椤哄簭
+
+ // 鐢ㄤ簬瀛樺偍鎵�鏈塅lowStepTemplate
+ 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;
+ }
+
+ // 褰撳墠澶勭悊鐨凢lowStepTemplate鍦ㄥ叏灞�鍒楄〃涓殑绱㈠紩
+ 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(task.getTaskCode());
+
+ // 鍒ゆ柇鏄惁鏄渶鍚庝竴涓�
+ 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());
+
+ if (endSignUp){
+ BasStation basStation = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getTargSite()));
+ if (basStation == null){
+ return false;
+ }
+ if (!basStation.getType().equals(0)){
+ basStation.setUseStatus(LocStsType.LOC_STS_TYPE_S.type);
+ basStationService.updateById(basStation);
+ }
+ }
+
+
+
+ taskService.updateById(task);
+ return actualPath;
+ }
+
+
}
--
Gitblit v1.9.1