fix:增加二次分配任务重复校验

This commit is contained in:
2024-06-28 01:30:03 +08:00
parent a714b8e2d6
commit a9ef3d8f69
12 changed files with 467 additions and 185 deletions

View File

@@ -64,6 +64,9 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.lang.reflect.Method;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -1748,14 +1751,16 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
// 这个情况是有agv任务在搬去待检区或管制区的路上还没有更新任务状态需要查询是否有这种任务等这个任务更新完后
// 再补发之前创建的输送线到满轴缓存位任务;
log.info("二楼到一楼成品子卷到达一楼输送线sendProductToFirstFloor--------------------------" + whereJson.toString());
JSONObject result = new JSONObject();
if (StringUtils.isBlank(whereJson.getString("device_code")) || StringUtils.isBlank(whereJson.getString("material_barcode"))) {
throw new BadRequestException("接口sendProductToFirstFloor目标站点或子卷号参数为空");
}
if (whereJson.getString("device_code").equals("null") || whereJson.getString("material_barcode").equals("null")) {
throw new BadRequestException("接口sendProductToFirstFloor目标站点或子卷号参数为null");
}
RLock lock = redissonClient.getLock(whereJson.getString("material_barcode"));
String containerName = whereJson.getString("material_barcode");
JSONObject result = new JSONObject();
result.put("data", containerName);
RLock lock = redissonClient.getLock(containerName);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
@@ -1765,10 +1770,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
.orderByAsc(BstIvtPackageinfoivt::getSort_seq));
List<BstIvtPackageinfoivt> mzPointList = bstIvtPackageinfoivtList.stream()
.filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位").equals(r.getPoint_status())
&& PackageInfoIvtEnum.IVT_STATUS.code("").equals(r.getIvt_status())).collect(Collectors.toList());
&& PackageInfoIvtEnum.IVT_STATUS.code("").equals(r.getIvt_status()))
.sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq).reversed()).collect(Collectors.toList());
JSONObject jo = new JSONObject();
jo.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo.put("vehicle_code", whereJson.getString("material_barcode"));
jo.put("vehicle_code", containerName);
//2.创建输送线->满轴位桁架任务,
String point_code1 = whereJson.getString("device_code");
jo.put("point_code1", point_code1);
@@ -1778,56 +1785,30 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
List<BstIvtPackageinfoivt> kzjPointList = bstIvtPackageinfoivtList.stream()
.filter(r -> PackageInfoIvtEnum.POINT_STATUS.code("空载具缓存位").equals(r.getPoint_status())
&& PackageInfoIvtEnum.IVT_STATUS.code("空载具").equals(r.getIvt_status()))
.sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq).reversed()).collect(Collectors.toList());
.sorted(Comparator.comparing(BstIvtPackageinfoivt::getSort_seq)).collect(Collectors.toList());
//空载具缓存位有空载具,桁架取空载具从外到里取空载具,升序
if (CollectionUtils.isNotEmpty(kzjPointList)) {
// 创建前先判断是否有已创建相同任务
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
if (CollectionUtils.isEmpty(existTaskList)) {
jo.put("point_code3", kzjPointList.get(0).getPoint_code());
//终点为输送线点位
jo.put("point_code4", whereJson.getString("device_code"));
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
jo.put("is_send", true);
mzhcwTask.createTask(jo);
}
//创建输送线四个点任务
return createTask(containerName, jo, kzjPointList.get(0).getPoint_code(), whereJson.getString("device_code"));
} else {
//如果空载具缓存位确少空载具,创建输送线->满轴缓存位两个点任务
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
if (CollectionUtils.isEmpty(existTaskList)) {
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
jo.put("is_send", true);
mzhcwTask.createTask(jo);
}
//空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务
List<SchBaseTask> existTasks = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
if (CollectionUtils.isEmpty(existTasks)) {
JSONObject jo1 = new JSONObject();
//创建确定终点任务
jo1.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
jo1.put("point_code2", "NBJ1002");
jo1.put("task_status", TaskStatusEnum.SURE_END.getCode());
jo1.put("is_send", false);
ssxDjwTask.createTask(jo1);
}
//创建输送线->满轴缓存位两个点任务
return createTask2(containerName, jo);
}
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
} else {
// 如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发;
// List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
// //如果有就不创建,没有就创建
// if (CollectionUtils.isEmpty(existTaskList)) {
// //只确定起点NBJ1002
// JSONObject jo2 = new JSONObject();
// jo2.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
// jo2.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
// jo2.put("point_code1", "NBJ1002");
// jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
// jo2.put("is_send", false);
// mzhcwTask.createTask(jo2);
// }
//如果满轴位没有可用的空点位,先创建一个桁架任务但是不下发,等这边空出来点位,判断是否有这种桁架任务然后补发;
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"),containerName);
//如果有就不创建,没有就创建
if (CollectionUtils.isEmpty(existTaskList)) {
//只确定起点NBJ1002
JSONObject jo2 = new JSONObject();
jo2.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo2.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
jo2.put("point_code1", "NBJ1002");
jo.put("task_status", TaskStatusEnum.SURE_START.getCode());
jo2.put("is_send", false);
mzhcwTask.createTask(jo2);
}
result.put("data", containerName);
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "满轴缓存位暂无空位!");
}
@@ -1844,6 +1825,61 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return result;
}
private JSONObject createTask2(String containerName, JSONObject jo) {
JSONObject result = new JSONObject();
result.put("data", containerName);
//如果空载具缓存位确少空载具,创建输送线->满轴缓存位两个点任务
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
List<SchBaseTask> existTaskList1 = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), containerName);
if (CollectionUtils.isEmpty(existTaskList1)) {
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
jo.put("is_send", true);
mzhcwTask.createTask(jo);
//空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务
List<SchBaseTask> existTasks = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
List<SchBaseTask> existTask1 = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"), containerName);
if (CollectionUtils.isEmpty(existTask1)) {
JSONObject jo1 = new JSONObject();
//创建确定终点任务
jo1.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
jo1.put("point_code2", "NBJ1002");
jo1.put("vehicle_code", containerName);
jo1.put("task_status", TaskStatusEnum.SURE_END.getCode());
jo1.put("is_send", false);
ssxDjwTask.createTask(jo1);
}
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
} else {
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "该子卷号:" + containerName + "桁架任务已存在,二楼下一楼存在相同子卷号,请检查!");
}
return result;
}
private JSONObject createTask(String containerName, JSONObject jo, String pointCode3, String pointCode4) {
JSONObject result = new JSONObject();
result.put("data", containerName);
// 创建前先判断是否有已创建相同任务
List<SchBaseTask> existTaskList = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
List<SchBaseTask> existTaskList1 = getExistTasks(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"), containerName);
if (CollectionUtils.isEmpty(existTaskList1)) {
jo.put("point_code3", pointCode3);
//终点为输送线点位
jo.put("point_code4", pointCode4);
jo.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"));
jo.put("is_send", true);
mzhcwTask.createTask(jo);
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
} else {
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "该子卷号:" + containerName + "桁架任务已存在,二楼下一楼存在相同子卷号,请检查!");
}
return result;
}
private List<SchBaseTask> getExistTasks(String taskType) {
return taskService.list(new LambdaUpdateWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_type, taskType)
@@ -1851,6 +1887,17 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("")));
}
private List<SchBaseTask> getExistTasks(String taskType, String containerName) {
String startTime = LocalDate.now().atStartOfDay().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_type, taskType)
.eq(SchBaseTask::getVehicle_code, containerName)
.gt(SchBaseTask::getCreate_time, startTime)
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
);
}
@Override
@Transactional(rollbackFor = Exception.class)