fix:增加二次分配任务重复校验
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user