Merge remote-tracking branch 'origin/master_merge' into master_merge

This commit is contained in:
2024-07-14 10:14:36 +08:00
17 changed files with 507 additions and 277 deletions

View File

@@ -1,15 +1,11 @@
package org.nl.b_lms.sch.point.service;
import com.alibaba.fastjson.JSONObject;
import org.nl.b_lms.sch.point.dao.BstIvtPackageinfoivt;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.common.domain.query.PageQuery;
@@ -61,7 +57,13 @@ public interface IbstIvtPackageinfoivtService extends IService<BstIvtPackageinfo
/**
* 根据点位类型查询库存
* @param ivtType 点位类型
* @param ivtStatus 库存状态
* @param sortType 排序
*/
List<BstIvtPackageinfoivt> getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType);
/**

View File

@@ -132,7 +132,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
lock.unlock();
}
}
log.info("一楼装箱区点位二次分配接口请求返回结果:---------------------------------------------" + result);
log.info("一楼装箱区点位二次分配" + taskCode + "---------------------------------------------" + result);
return result;
}
@@ -144,6 +144,8 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
* @return 新的点位
*/
private String getNewPoint(String taskCode, String actionType) {
BstIvtPackageinfoivt newPoint;
String taskPointType = null;
//执行中的任务
SchBaseTask baseTask = taskService.getOne(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_code, taskCode)
@@ -153,23 +155,22 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
throw new BadRequestException("该任务未执行或不存在!");
}
//已分配过二次分配点位
// if (StringUtils.isNotBlank(baseTask.getResponse_param())) {
// if (baseTask.getResponse_param().equals(IOSEnum.IS_SEND.code("是"))) {
// if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
// return baseTask.getPoint_code1();
// } else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) {
// return baseTask.getPoint_code2();
// }
// }
// }
BstIvtPackageinfoivt newPoint;
String taskPointType = null;
if (StringUtils.isNotBlank(baseTask.getResponse_param())) {
if (baseTask.getResponse_param().equals(IOSEnum.IS_SEND.code(""))) {
if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
return baseTask.getPoint_code1();
}
//else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) {
//return baseTask.getPoint_code2();
//}
}
}
//检查是否满足二次分配条件
checkTaskInfo(baseTask);
//空载具缓存位特殊二次分配逻辑:先判断是否有执行中的行架任务或补空载具任务,如未完成,不分配点位
if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) ||
baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))
) {
//检查是否满足二次分配条件
checkTaskInfo(baseTask);
newPoint = checkIvtSBlock(baseTask);
} else {
if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"))) {
@@ -178,25 +179,31 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
}
newPoint = getBstIvtPackageinfoivt(actionType, taskPointType, baseTask);
}
if (StringUtils.isNotBlank(newPoint.getPoint_code())) {
//更新任务起点或终点
if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
baseTask.setPoint_code1(newPoint.getPoint_code());
if (StringUtils.isNotBlank(newPoint.getContainer_name())) {
//更新子卷号
baseTask.setVehicle_code(newPoint.getContainer_name());
//分配的点位
if (newPoint != null) {
if (StringUtils.isNotBlank(newPoint.getPoint_code())) {
//更新任务起点或终点
if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
baseTask.setPoint_code1(newPoint.getPoint_code());
if (StringUtils.isNotBlank(newPoint.getContainer_name())) {
//更新子卷号
baseTask.setVehicle_code(newPoint.getContainer_name());
}
} else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) {
baseTask.setPoint_code2(newPoint.getPoint_code());
}
} else if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货分配").equals(actionType)) {
baseTask.setPoint_code2(newPoint.getPoint_code());
//标记二次分配已分配过点位
baseTask.setResponse_param(IOSEnum.IS_NOTANDYES.code(""));
taskService.updateById(baseTask);
log.info("一楼装箱区二次分配" + taskCode + ",接口返回最新点位:---------------------------------------------" + newPoint.getPoint_code());
return newPoint.getPoint_code();
} else {
log.info("一楼装箱区二次分配" + taskCode + ",分配失败,暂无点位资源或点位外层有载具阻挡!");
throw new BadRequestException("一楼装箱区二次分配" + taskCode + ",分配失败,暂无点位资源或点位外层有载具阻挡!");
}
//标记二次分配已分配过点位
baseTask.setResponse_param(IOSEnum.IS_NOTANDYES.code(""));
taskService.updateById(baseTask);
log.info("一楼装箱区二次分配任务编号为:" + taskCode + ",接口返回最新点位:---------------------------------------------" + newPoint.getPoint_code());
return newPoint.getPoint_code();
} else {
log.info("一楼装箱区二次分配任务编号为:" + taskCode + ",分配失败,暂无点位资源或点位外层有载具阻挡!");
throw new BadRequestException("一楼装箱区二次分配任务编号为:" + taskCode + ",分配失败,暂无点位资源或点位外层有载具阻挡!");
log.info("一楼装箱区二次分配" + taskCode + ",分配失败,暂无点位资源或点位外层有载具阻挡!");
throw new BadRequestException("一楼装箱区二次分配" + taskCode + ",分配失败,暂无点位资源或点位外层有载具阻挡!");
}
}
@@ -212,6 +219,8 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
*/
@Override
public List<BstIvtPackageinfoivt> checkEndPointTask(String ivtType, String ivtStatus, String pointCode, String sortType, String taskType) {
List<SchBaseTask> taskList;
Set<String> pointSets;
List<BstIvtPackageinfoivt> returList = new ArrayList<>();
List<BstIvtPackageinfoivt> packageinfoivtList = getBstIvtPackageinfoivts(ivtType, ivtStatus, sortType);
Set<String> pointIds = packageinfoivtList.stream()
@@ -223,8 +232,6 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
if (pointCode == null) {
return packageinfoivtList;
}
List<SchBaseTask> taskList;
Set<String> pointSets;
if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务")) || pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"))) {
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, null, null);
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货分配"))) {
@@ -232,8 +239,10 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货分配"))) {
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, pointIds, null, pointIds);
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务分配"))) {
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, null, null, null);
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务放货"))) {
// taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, null, null, null);
//四个点任务取货分配条件为取货完成信号即刻更新库存,所以不判断是否有起点任务
taskList = new ArrayList<>();
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务取货"))) {
taskList = bstIvtPackageinfoivtMapper.getTaskList(pointIds, null, pointIds, null);
} else if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("空载具放货"))) {
taskList = bstIvtPackageinfoivtMapper.getTaskList(null, pointIds, null, pointIds);
@@ -264,7 +273,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
return packageinfoivtList;
}
// 未完成的任务点位汇集
if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务"))) {
if (pointCode.equals(PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务"))) {
pointSets = taskList.stream()
.flatMap(task -> Stream.of(
task.getPoint_code1(),
@@ -330,7 +339,10 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
* 获取没有阻挡的点位
*/
private List<BstIvtPackageinfoivt> getNoBlockIvt(String pointCode, List<SchBaseTask> taskList, List<BstIvtPackageinfoivt> ivtList) {
Set<String> taskPointSet = taskList.stream().map(SchBaseTask::getPoint_code2).filter(pointCode2 -> !pointCode2.equals("ZXQ_01_1")).collect(Collectors.toSet());
Set<String> taskPointSet = null;
if (CollectionUtils.isEmpty(taskList)) {
taskPointSet = taskList.stream().map(SchBaseTask::getPoint_code2).filter(pointCode2 -> !pointCode2.equals("ZXQ_01_1")).collect(Collectors.toSet());
}
List<BstIvtPackageinfoivt> pointList = new ArrayList<>();
//存在补空载具任务已分配却未完成的任务
if (CollectionUtils.isEmpty(taskPointSet)) {
@@ -352,47 +364,73 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
}
/**
* 检查是否满足二次分配条件
* 校验各类型的取放货分配否满足分配条件
*/
private void checkTaskInfo(SchBaseTask baseTask) {
List<SchBaseTask> taskList1 = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
.and(
r -> r.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"))
.or()
.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")
)));
if (CollectionUtils.isNotEmpty(taskList1)) {
List<SchBaseTask> taskList3 = taskList1.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList());
if (taskList3.size() == 1) {
//校验已分配的补空载具任务是否为当前请求的任务,是可重新分配,否不允许重新分配
if (!taskList3.get(0).getTask_code().equals(baseTask.getTask_code())) {
log.info("一楼装箱区二次分配" + taskList3.get(0).getTask_code() + ",分配失败,存在多个或上一个已分配的补空载具任务未完成,请检查!");
throw new BadRequestException("一楼装箱区二次分配" + taskList3.get(0).getTask_code() + ",分配失败,存在多个或上一个已分配的补空载具任务未完成,请检查!");
//补空载具放货任务
if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) ||
baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))
) {
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
.and(
r -> r.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"))
.or()
.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))
.or()
.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))
.or()
.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))
));
//是否有执行中已分配补空载具任务
List<SchBaseTask> taskList1 = taskList.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)")) || r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"))).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(taskList1)) {
List<SchBaseTask> taskList2 = taskList1.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList());
if (taskList2.size() == 1) {
//校验已分配的补空载具任务是否为当前请求的任务,是可重新分配,否不允许重新分配
if (!taskList2.get(0).getTask_code().equals(baseTask.getTask_code())) {
log.info("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的补空载具任务编号为:" + taskList2.get(0).getTask_code() + "的任务未完成,请检查!");
throw new BadRequestException("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的补空载具任务编号为:" + taskList2.get(0).getTask_code() + "的任务未完成,请检查!");
}
} else if (taskList2.size() > 1) {
log.info("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的补空载具任务编号为:" + taskList2.get(0).getTask_code() + "的任务未完成,请检查!");
throw new BadRequestException("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的补空载具任务编号为:" + taskList2.get(0).getTask_code() + "的任务未完成,请检查!");
}
} else if (taskList3.size() > 1) {
log.info("一楼装箱区二次分配" + taskList3.get(0).getTask_code() + ",分配失败,存在多个或上一个已分配的补空载具任务未完成,请检查!");
throw new BadRequestException("一楼装箱区二次分配:" + taskList3.get(0).getTask_code() + ",分配失败,存在多个或上一个已分配的补空载具任务未完成,请检查!");
}
}
//是否有执行中的行架任务,有等待取空载具任务完成再分配
List<SchBaseTask> taskList2 = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
.and(
r -> r.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))
.or()
.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")
)));
if (CollectionUtils.isNotEmpty(taskList2)) {
if (StringUtils.isBlank(taskList2.get(0).getRequest_param())) {
log.info("一楼装箱区二次分配" + taskList2.get(0).getTask_code() + ",分配失败,请等待桁架任务取空载具动作执行完成");
throw new BadRequestException("一楼装箱区二次分配" + taskList2.get(0).getTask_code() + ",分配失败,请等待桁架任务取空载具动作执行完成");
} else {
if (!taskList2.get(0).getRequest_param().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) {
log.info("一楼装箱区二次分配" + taskList2.get(0).getTask_code() + ",分配失败,请等待桁架任务取空载具动作执行完成");
throw new BadRequestException("一楼装箱区二次分配" + taskList2.get(0).getTask_code() + ",分配失败,请等待桁架任务取空载具动作执行完成");
//是否有执行中的行架任务,有等待取空载具任务完成再分配
List<SchBaseTask> taskList3 = taskList.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) || r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(taskList3)) {
if (StringUtils.isBlank(taskList3.get(0).getRequest_param())) {
log.info("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,桁架任务编号为:" + taskList3.get(0).getTask_code() + "的取载具动作未完成,请检查!");
throw new BadRequestException("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,桁架任务编号为:" + taskList3.get(0).getTask_code() + "的取载具动作未完成,请检查!");
} else {
if (!taskList3.get(0).getRequest_param().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) {
log.info("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,桁架任务编号为:" + taskList3.get(0).getTask_code() + "的取载具动作未完成,请检查!");
throw new BadRequestException("一楼装箱区放货分配" + baseTask.getTask_code() + ",分配失败,桁架任务编号为:" + taskList3.get(0).getTask_code() + "的取载具动作未完成,请检查!");
}
}
}
} else if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"))) {
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")));
//满轴缓存位->待检区agv任务如果分配了起点是否发送取货完成信息则需等待此任务发送取货完成信号才能分配第2个任务的起点
List<SchBaseTask> taskList1 = taskList.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(taskList1)) {
//多个已分配的未完成的取满轴任务,需要全部取货完成才能继续分配
List<SchBaseTask> taskList2 = taskList1.stream().filter(r -> StringUtils.isBlank(r.getRequest_param())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(taskList2)) {
log.info("一楼装箱区取货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的取满轴任务编号为:" + taskList2.get(0).getTask_code() + "的任务未完成,请检查!");
throw new BadRequestException("一楼装箱区取货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的取满轴任务编号为:" + taskList2.get(0).getTask_code() + "的任务未完成,请检查!");
}
List<SchBaseTask> taskList3 = taskList1.stream().filter(r -> StringUtils.isNotBlank(r.getRequest_param())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(taskList3)) {
if (taskList3.stream().anyMatch(r -> !r.getRequest_param().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成")))) {
log.info("一楼装箱区取货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的取满轴任务编号为:" + taskList3.get(0).getTask_code() + "的任务未完成,请检查!");
throw new BadRequestException("一楼装箱区取货分配" + baseTask.getTask_code() + ",分配失败,存在已分配的取满轴任务编号为:" + taskList3.get(0).getTask_code() + "的任务未完成,请检查!");
}
}
}
}
@@ -401,8 +439,12 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
/**
* 根据点位类型查询库存
*
* @param ivtType 点位类型
* @param ivtStatus 库存状态
* @param sortType 排序
*/
private List<BstIvtPackageinfoivt> getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType) {
public List<BstIvtPackageinfoivt> getBstIvtPackageinfoivts(String ivtType, String ivtStatus, String sortType) {
LambdaQueryWrapper<BstIvtPackageinfoivt> queryWrapper = new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getPoint_status, ivtType);
@@ -467,23 +509,27 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
String pointCode;
//取满轴
if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"))) {
//过滤未二次分配的任务
if (StringUtils.isBlank(baseTask.getResponse_param())) {
throw new BadRequestException("取货完成失败" + baseTask.getTask_code() + ",起点未进行二次分配!");
}
List<BstIvtPackageinfoivt> ivtList = packageinfoivtService.list(new LambdaQueryWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getPoint_code, baseTask.getPoint_code1()));
if (CollectionUtils.isEmpty(ivtList)) {
throw new BadRequestException("任务编号为:" + baseTask.getTask_code() + "取货完成的目标点位不存在!");
throw new BadRequestException("取货完成失败" + baseTask.getTask_code() + "agv取货完成的目标点位不存在!");
}
//只有子卷号相同才能清除库存
if (baseTask.getVehicle_code().equals(ivtList.get(0).getContainer_name())) {
upDateIvtOrTask(baseTask, baseTask.getPoint_code1(), false);
upDateIvtOrTask(baseTask, baseTask.getPoint_code1());
}
} else if (baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) || baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))) {
pointCode = baseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) ? baseTask.getPoint_code3() : baseTask.getPoint_code1();
if (StringUtils.isBlank(baseTask.getRequest_param())) {
upDateIvtOrTask(baseTask, pointCode, true);
upDateIvtOrTask(baseTask, pointCode);
} else if (StringUtils.isNotBlank(baseTask.getRequest_param())) {
if (!baseTask.getRequest_param().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))) {
upDateIvtOrTask(baseTask, pointCode, true);
upDateIvtOrTask(baseTask, pointCode);
}
}
}
@@ -502,7 +548,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
.set("container_name", baseTask.getVehicle_code())
.set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷"))
.eq("point_code", baseTask.getPoint_code2()));
log.info("一楼装箱区二次分配的任务编号为:" + baseTask.getTask_code() + ",放货完成执行成功,放货信息:点位:" + baseTask.getPoint_code2() + "子卷号为:" + baseTask.getVehicle_code());
log.info("一楼装箱区二次放货分配" + baseTask.getTask_code() + ",放货完成执行成功,放货信息:点位:" + baseTask.getPoint_code2() + "子卷号为:" + baseTask.getVehicle_code());
} else {
throw new BadRequestException("该点位已有库存!");
}
@@ -513,20 +559,20 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
/**
* 取货完成更新点位或任务标识
*/
private void upDateIvtOrTask(SchBaseTask baseTask, String pointCode, boolean isUpDateTask) {
private void upDateIvtOrTask(SchBaseTask baseTask, String pointCode) {
UpdateWrapper<BstIvtPackageinfoivt> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("point_code", pointCode);
updateWrapper.setSql("ivt_status = '0', container_name = null");
updateWrapper.set("ivt_status", "0");
updateWrapper.set("container_name", null);
//清空起点库存状态
bstIvtPackageinfoivtMapper.update(null, updateWrapper);
if (isUpDateTask) {
//标记桁架任务取空载具完成
UpdateWrapper<SchBaseTask> updateWrapper1 = new UpdateWrapper<>();
updateWrapper1.eq("task_id", baseTask.getTask_id());
updateWrapper1.set("request_param", PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"));
taskService.update(updateWrapper1);
}
log.info("一楼装箱区二次分配的任务编号为:" + baseTask.getTask_code() + ",取货完成执行成功,取货信息:点位:" + pointCode + "子卷号为:" + baseTask.getVehicle_code());
log.info("一楼装箱区二次分配清空起点库存" + baseTask.getTask_code() + ",执行成功,点位:" + pointCode + "子卷号:" + baseTask.getVehicle_code());
//标记agv取满轴或四个点或两个点任务取空载具完成
UpdateWrapper<SchBaseTask> updateWrapper1 = new UpdateWrapper<>();
updateWrapper1.eq("task_id", baseTask.getTask_id());
updateWrapper1.set("request_param", PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"));
taskService.update(updateWrapper1);
log.info("一楼装箱区二次分配取货完成" + baseTask.getTask_code() + ",取货完成信号接收成功,点位:" + pointCode + "子卷号:" + baseTask.getVehicle_code());
}
/**
@@ -535,8 +581,8 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
* @param baseTask 任务信息
*/
private BstIvtPackageinfoivt getBstIvtPackageinfoivt(String actionType, String taskPointType, SchBaseTask baseTask) {
BstIvtPackageinfoivt newPoint;
String targetPoint ="";
BstIvtPackageinfoivt newPoint = null;
String targetPoint = "";
//1取货任务2放货任务
LambdaQueryWrapper<BstIvtPackageinfoivt> queryWrapper = new LambdaQueryWrapper<>();
if (PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货分配").equals(actionType)) {
@@ -550,6 +596,10 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
targetPoint = taskPointType;
}
BstIvtPackageinfoivt bstIvtPackageinfoivt = bstIvtPackageinfoivtMapper.selectOne(queryWrapper);
//无库存点位
if (bstIvtPackageinfoivt == null) {
return newPoint;
}
//根据任务类型返回点位分配规则
BstIvtPackageinfoivt ivtInfo = getIvtInfoFromRegion(baseTask.getTask_type(), actionType);
List<BstIvtPackageinfoivt> newPointList = packageinfoivtService.checkEndPointTask(bstIvtPackageinfoivt.getPoint_status(), ivtInfo.getIvt_status(), targetPoint, ivtInfo.getSort_seq().toString(), "");

View File

@@ -79,7 +79,7 @@ public class AutoSendMzToDjq {
return;
}
//满轴有子卷且过滤未完成任务
List<BstIvtPackageinfoivt> mzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
List<BstIvtPackageinfoivt> mzqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"), PackageInfoIvtEnum.IVT_STATUS.code("有子卷"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("四个点任务"), PackageInfoIvtEnum.SORT_TYPE.code("降序"), "");
if (CollectionUtils.isEmpty(mzqPackageinfoivtList)) {
return;
}

View File

@@ -13,7 +13,6 @@ import org.nl.common.enums.PackageInfoIvtEnum;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -25,6 +24,8 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class AutoSendVehicleToDjq {
private final String THIS_CLASS = AutoSendVehicleToDjq.class.getName();
@Resource
private RedissonClient redissonClient;
@Resource
@@ -32,6 +33,9 @@ public class AutoSendVehicleToDjq {
@Resource
private SendGzqKzjTask sendGzqKzjTask;
@Resource
private IbstIvtPackageinfoivtService ibstIvtPackageinfoivtService;
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
@@ -43,32 +47,27 @@ public class AutoSendVehicleToDjq {
@SneakyThrows
public void sendVehicleToDjqOrGzq1() {
log.info(THIS_CLASS+"-装箱区->待检区或管制区补空任务开始执行扫描。");
log.info(THIS_CLASS + "-装箱区->待检区或管制区补空任务开始执行扫描。");
RLock lock = redissonClient.getLock(THIS_CLASS);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
//存在装箱区有空载具的点位
String pointCode2 = null;
String pointCode2;
JSONObject task = new JSONObject();
List<BstIvtPackageinfoivt> ivtList =ibstIvtPackageinfoivtService.getBstIvtPackageinfoivts(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("合格品"),"");
if (CollectionUtils.isNotEmpty(ivtList)) {
return;
}
//存在装箱区有空载具的点位
List<BstIvtPackageinfoivt> zxqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", "");
if (CollectionUtils.isEmpty(zxqIvtList)) {
return;
}
//待检区有空位且过滤未完成任务
List<BstIvtPackageinfoivt> djqPackageinfoivtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
if (CollectionUtils.isNotEmpty(djqPackageinfoivtList)) {
pointCode2 = djqPackageinfoivtList.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"));
if ( Integer.parseInt(zxqIvtList.get(0).getSort_seq().toString()) % 2 != 0) {
//优先去管制区
pointCode2 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"));
} else {
//管制区有空位
List<BstIvtPackageinfoivt> gzqList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
if (CollectionUtils.isNotEmpty(gzqList)) {
pointCode2 = gzqList.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)"));
}
pointCode2 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)"));
}
//去装箱区搬运空载具
if (pointCode2 != null) {
@@ -91,6 +90,40 @@ public class AutoSendVehicleToDjq {
}
private String getPointCode(JSONObject task, String taskType) {
String pointCode2 = null;
List<BstIvtPackageinfoivt> packageList;
if (taskType.equals(PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"))) {
packageList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
if (CollectionUtils.isEmpty(packageList)) {
packageList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)"));
} else {
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"));
}
} else {
packageList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("管制区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
if (CollectionUtils.isEmpty(packageList)) {
packageList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""), PackageInfoIvtEnum.TASK_POINT_TYPE.code("放货任务"), PackageInfoIvtEnum.SORT_TYPE.code("升序"), "");
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"));
} else {
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)"));
}
}
if (CollectionUtils.isNotEmpty(packageList)) {
pointCode2 = packageList.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
}
return pointCode2;
}
/**
* 二次分配任务
*/

View File

@@ -37,8 +37,6 @@ public class AutoSendVehicleToKzj {
private DjqToKzjhcwTask djqToKzjhcwTask;
@Resource
private GzqToKzjhcwTask gzqToKzjhcwTask;
@Resource
private BstIvtPackageinfoivtMapper bstIvtPackageinfoivtMapper;
@Resource
private IbstIvtPackageinfoivtService packageinfoivtService;
@@ -112,10 +110,10 @@ public class AutoSendVehicleToKzj {
return;
}
if (existTask.size() % 2 != 0) {
//优先去待检
pointCode1 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"));
} else {
//优先去管制
pointCode1 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"));
} else {
pointCode1 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"));
}
//去待检区或管制区搬运空载具
if (pointCode1 != null) {

View File

@@ -41,7 +41,7 @@ public enum PackageInfoIvtEnum {
//起点终点类型
TASK_POINT_TYPE(MapOf.of("取货任务", "1", "放货任务", "2", "取货分配", "3", "放货分配", "4", "取货任务取货分配", "5", "放货任务放货分配", "6", "四个点任务", "7","空载具放货", "8", "四个点任务分配", "9","空载具放货分配", "10")),
TASK_POINT_TYPE(MapOf.of("取货任务", "1", "放货任务", "2", "取货分配", "3", "放货分配", "4", "取货任务取货分配", "5", "放货任务放货分配", "6", "四个点任务", "7","空载具放货", "8", "四个点任务分配", "9","空载具放货分配", "10")),
//等待点类型
WAIT_POINT_TYPE(MapOf.of("满轴区等待点", "1", "待检区等待点", "2")),

View File

@@ -118,7 +118,7 @@ public class BakingServiceImpl implements BakingService {
*/
JSONObject jsonPointZc = pointTab.query("point_code = '" + point_code1 + "'").uniqueResult(0);
JSONObject cool_jo = coolIvtTab.query("full_point_code = '" + point_code1 + "' AND point_type = '3'").uniqueResult(0);
JSONObject cool_jo = coolIvtTab.query("point_code = '" + point_code1 + "' AND point_type = '3'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(jsonPointZc) || ObjectUtil.isNotEmpty(cool_jo)) {
if (ObjectUtil.isEmpty(jsonPointZc)) {
jsonPointZc = cool_jo;
@@ -150,7 +150,27 @@ public class BakingServiceImpl implements BakingService {
}
if (ObjectUtil.isEmpty(jsonHotIvt)) {
throw new BadRequestException("烘烤区没有合适温度的空位!");
//如果属于B1的烘箱变更位置再查询
if (ObjectUtil.isNotEmpty(cool_jo) && cool_jo.getString("product_area").equals("B1")) {
jsonMap.put("point_location", jsonPointZc.getString("point_location").equals("0") ? "1" : "0");
hot_rows = WQL.getWO("PDA_BAKING_01").addParamMap(jsonMap).process().getResultJSONArray(0);
for (int i = 0; i < hot_rows.size(); i++) {
JSONObject hot_row = hot_rows.getJSONObject(i);
String point_code = hot_row.getString("point_code");
String point_temperature = (String) redisUtils.hget(point_code, "temperature");
if (!ObjectUtil.isEmpty(point_temperature)) {
if (point_temperature.equals(temperature)) {
jsonHotIvt = hot_row;
break;
}
}
}
if (ObjectUtil.isEmpty(jsonHotIvt)) {
throw new BadRequestException("烘烤区没有合适温度的空位!");
}
} else {
throw new BadRequestException("烘烤区没有合适温度的空位!");
}
}
// 2.创建暂存位 --> 烘烤区任务
JSONObject param = new JSONObject();

View File

@@ -268,7 +268,9 @@ public class FeedingServiceImpl implements FeedingService {
}
JSONObject cool_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code = '" + point_code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(cool_jo)) {
cool_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("point_code = '" + point_code + "'").uniqueResult(0);
}
if (ObjectUtil.isEmpty(cool_jo)) {
throw new BadRequestException("请输入或者扫描冷却区满轴位的点位做为起点!");
} else {
@@ -285,54 +287,99 @@ public class FeedingServiceImpl implements FeedingService {
}
if (cool_jo.getString("product_area").equals("B1")) {
JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("full_point_code = '" + next_point_code + "'").uniqueResult(0);
JSONObject task_jo = new JSONObject();
task_jo.put("point_code1", cool_jo.getString("point_code"));
String reging_id = "";
//查询出的对接位
switch (cool_jo.getString("product_area")) {
case "A1":
reging_id = RegionTypeEnum.A_HKZC.getId();
break;
case "A2":
reging_id = RegionTypeEnum.B_HKZC.getId();
break;
case "A3":
reging_id = RegionTypeEnum.C_HKZC.getId();
break;
case "A4":
reging_id = RegionTypeEnum.D_HKZC.getId();
break;
case "B1":
reging_id = RegionTypeEnum.B1_HKZC.getId();
break;
case "B2":
reging_id = RegionTypeEnum.B2_HKZC.getId();
break;
default:
break;
if (ObjectUtil.isNotEmpty(cool_jo) && cool_jo.getString("point_type").equals("4")) {
JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("full_point_code = '" + next_point_code + "'").uniqueResult(0);
//起点为分切缓存位,终点为分切机
JSONObject jo = new JSONObject();
if (StrUtil.equals("01", cut_jo.getString("empty_point_status"))) {
jo.put("point_code1", cool_jo.getString("full_point_code"));
jo.put("point_code2", cut_jo.getString("full_point_code"));
jo.put("material_code", cool_jo.getString("container_name"));
jo.put("product_area", cut_jo.getString("product_area"));
jo.put("task_type", "010302");
} else {
jo.put("point_code1", cool_jo.getString("full_point_code"));
jo.put("point_code2", cut_jo.getString("full_point_code"));
jo.put("point_code3", cut_jo.getString("empty_point_code"));
// 2.找冷却区空货位
JSONObject map = new JSONObject();
map.put("flag", "2");
map.put("product_area", cut_jo.getString("product_area"));
map.put("point_location", "0");
JSONObject jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0);
// 如果为空
if (ObjectUtil.isEmpty(jsonCooIvt)) {
map.put("point_location", "1");
jsonCooIvt = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0);
}
if (ObjectUtil.isEmpty(jsonCooIvt)) {
throw new BadRequestException("冷却区空位不足");
}
jo.put("point_code4", jsonCooIvt.getString("empty_point_code"));
jo.put("material_code", cool_jo.getString("container_name"));
jo.put("product_area", cut_jo.getString("product_area"));
jo.put("task_type", "010301");
}
AbstractAcsTask task = new CoolCutTask();
task.createTask(jo);
} else {
JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("full_point_code = '" + next_point_code + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(cut_jo) && ObjectUtil.isEmpty(cool_jo)) {
throw new BadRequestException("目的点不存在!");
}
JSONObject task_jo = new JSONObject();
task_jo.put("point_code1", cool_jo.getString("point_code"));
String reging_id = "";
//查询出的对接位
switch (cool_jo.getString("product_area")) {
case "A1":
reging_id = RegionTypeEnum.A_HKZC.getId();
break;
case "A2":
reging_id = RegionTypeEnum.B_HKZC.getId();
break;
case "A3":
reging_id = RegionTypeEnum.C_HKZC.getId();
break;
case "A4":
reging_id = RegionTypeEnum.D_HKZC.getId();
break;
case "B1":
reging_id = RegionTypeEnum.B1_HKZC.getId();
break;
case "B2":
reging_id = RegionTypeEnum.B2_HKZC.getId();
break;
default:
break;
}
JSONObject map = new JSONObject();
map.put("flag", "1");
map.put("reging_id", reging_id);
map.put("point_location", cool_jo.getString("point_location"));
//只找出箱点位
map.put("point_type", "5");
JSONObject pointArr = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isEmpty(pointArr)) {
map.put("point_location", cool_jo.getString("point_location").equals("0") ? "1" : "0");
pointArr = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isEmpty(pointArr)) {
throw new BadRequestException("没有无货且没有任务的点位类型为出箱的烘箱对接位!");
}
}
task_jo.put("point_code2", pointArr.getString("point_code"));
//将分切机的点位作为目的点桁架任务完成时自动创建AGV任务
task_jo.put("point_code3", next_point_code);
task_jo.put("material_code", cool_jo.getString("container_name"));
task_jo.put("product_area", cool_jo.getString("product_area"));
task_jo.put("task_type", "010205");
OutHotTask outHotTask = new OutHotTask();
String task_id = outHotTask.createTask(task_jo);
}
JSONObject map = new JSONObject();
map.put("flag", "1");
map.put("reging_id", reging_id);
map.put("point_location", cool_jo.getString("point_location"));
//只找出箱点位
map.put("point_type", "5");
JSONObject pointArr = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0);
if (ObjectUtil.isEmpty(pointArr)) {
throw new BadRequestException("没有无货且没有任务的点位类型为出箱的烘箱对接位!");
}
task_jo.put("point_code2", pointArr.getString("point_code"));
//将分切机的点位作为目的点桁架任务完成时自动创建AGV任务
task_jo.put("point_code3", next_point_code);
task_jo.put("vehicle_code", cool_jo.getString("container_name"));
task_jo.put("product_area", cut_jo.getString("product_area"));
task_jo.put("task_type", "010205");
OutHotTask outHotTask = new OutHotTask();
String task_id = outHotTask.createTask(task_jo);
} else {
JSONObject jo = new JSONObject();
//查询该分切机对应的点位

View File

@@ -215,8 +215,13 @@ public class RawFoilServiceImpl implements RawFoilService {
cache_map.put("point_location", jsonSb.getString("point_location"));
//只找入箱点位
cache_map.put("point_type", "4");
cache_map.put("mater_flag", "1");
JSONObject point_code2_jo = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(cache_map).process().uniqueResult(0);
if (ObjectUtil.isEmpty(point_code2_jo)) {
cache_map.put("point_location", jsonSb.getString("point_location").equals("0") ? "1" : "0");
point_code2_jo = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(cache_map).process().uniqueResult(0);
}
if (ObjectUtil.isEmpty(point_code2_jo)) {
throw new BadRequestException("未查询到可用的点位类型为入箱的烘箱对接位!");
}

View File

@@ -82,6 +82,9 @@
OPTION 输入.point_type = "5"
IFNULL(po.material_code,'') = ''
ENDOPTION
OPTION 输入.mater_flag = "1"
IFNULL(po.material_code,'') = ''
ENDOPTION
UNION
SELECT
task.task_id,
@@ -137,6 +140,9 @@
OPTION 输入.point_type = "5"
IFNULL(po.material_code,'') = ''
ENDOPTION
OPTION 输入.mater_flag = "1"
IFNULL(po.material_code,'') = ''
ENDOPTION
) c
GROUP BY
c.point_code

View File

@@ -129,7 +129,7 @@
FROM
sch_base_task
WHERE
( point_code1 = empty_point_code OR point_code2 = empty_point_code )
( point_code1 = empty_point_code OR point_code2 = empty_point_code OR point_code2 = point_code )
AND task_status < '07'
AND is_delete = '0'
)

View File

@@ -114,17 +114,50 @@ public class CoolCutTask extends AbstractAcsTask {
if ("B1".equals(product_area)) {
//更新起点烘箱对接位
JSONObject dj_jo = WQLObject.getWQLObject("sch_base_point").query("point_code ='" + point_code1 + "'").uniqueResult(0);
dj_jo.put("point_status", "1");
dj_jo.put("material_code", "");
WQLObject.getWQLObject("sch_base_point").update(dj_jo);
JSONObject cool_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code ='" + point_code1 + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(dj_jo)) {
dj_jo.put("point_status", "1");
dj_jo.put("material_code", "");
WQLObject.getWQLObject("sch_base_point").update(dj_jo);
}
if (ObjectUtil.isNotEmpty(cool_jo)) {
cool_jo.put("full_point_status", "01");
cool_jo.put("container_name", "");
cool_jo.put("workorder_id", "");
cool_jo.put("update_optid", currentUserId);
cool_jo.put("update_optname", currentUsername);
cool_jo.put("update_time", DateUtil.now());
WQLObject.getWQLObject("st_ivt_coolpointivt").update(cool_jo);
}
JSONObject full_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code ='" + point_code2 + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(full_jo)) {
full_jo.put("full_point_status", "02");
full_jo.put("container_name", jsonTask.getString("material_code"));
full_jo.put("update_optid", currentUserId);
full_jo.put("update_optname", currentUsername);
full_jo.put("update_time", DateUtil.now());
WQLObject.getWQLObject("st_ivt_coolpointivt").update(full_jo);
}
//更新满轴终点的空轴对接位
JSONObject cut_jo = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("empty_point_code = '" + point_code3 + "'").uniqueResult(0);
cut_jo.put("empty_point_status", "02");
cut_jo.put("empty_vehicle_code", "SJG");
cut_jo.put("update_optid", currentUserId);
cut_jo.put("update_optname", currentUsername);
cut_jo.put("update_time", DateUtil.now());
WQLObject.getWQLObject("ST_IVT_CutPointIvt").update(cut_jo);
if (ObjectUtil.isEmpty(cut_jo)) {
cut_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("empty_point_code = '" + point_code3 + "'").uniqueResult(0);
cut_jo.put("empty_point_status", "01");
cut_jo.put("empty_vehicle_code", "");
cut_jo.put("update_optid", currentUserId);
cut_jo.put("update_optname", currentUsername);
cut_jo.put("update_time", DateUtil.now());
WQLObject.getWQLObject("st_ivt_coolpointivt").update(cut_jo);
} else {
cut_jo.put("empty_point_status", "02");
cut_jo.put("empty_vehicle_code", "SJG");
cut_jo.put("update_optid", currentUserId);
cut_jo.put("update_optname", currentUsername);
cut_jo.put("update_time", DateUtil.now());
WQLObject.getWQLObject("ST_IVT_CutPointIvt").update(cut_jo);
}
//更新空轴点位
JSONObject jsonCoolIvt2 = WQLObject.getWQLObject("st_ivt_coolpointivt").query("empty_point_code = '" + point_code4 + "'").uniqueResult(0);
jsonCoolIvt2.put("empty_point_status", "02");
@@ -207,63 +240,83 @@ public class CoolCutTask extends AbstractAcsTask {
if ("B1".equals(product_area)) {
//更新起点烘箱对接位
JSONObject dj_jo = WQLObject.getWQLObject("sch_base_point").query("point_code ='" + point_code1 + "'").uniqueResult(0);
dj_jo.put("point_status", "1");
dj_jo.put("material_code", "");
WQLObject.getWQLObject("sch_base_point").update(dj_jo);
JSONObject cool_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code ='" + point_code1 + "'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(dj_jo)) {
dj_jo.put("point_status", "1");
dj_jo.put("material_code", "");
WQLObject.getWQLObject("sch_base_point").update(dj_jo);
}
if (ObjectUtil.isNotEmpty(cool_jo)) {
cool_jo.put("full_point_status", "01");
cool_jo.put("container_name", "");
cool_jo.put("workorder_id", "");
cool_jo.put("update_optid", currentUserId);
cool_jo.put("update_optname", currentUsername);
cool_jo.put("update_time", DateUtil.now());
WQLObject.getWQLObject("st_ivt_coolpointivt").update(cool_jo);
}
//更新满轴终点的空轴对接位
JSONObject cut_jo = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("full_point_code = '" + point_code2 + "'").uniqueResult(0);
cut_jo.put("empty_point_status", "02");
cut_jo.put("empty_vehicle_code", "SJG");
if (ObjectUtil.isEmpty(cut_jo)) {
cut_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code = '" + point_code2 + "'").uniqueResult(0);
cut_jo.put("full_point_status", "02");
cut_jo.put("container_name", jsonTask.getString("material_code"));
WQLObject.getWQLObject("st_ivt_coolpointivt").update(cut_jo);
} else {
cut_jo.put("empty_point_status", "02");
cut_jo.put("empty_vehicle_code", "SJG");
cut_jo.put("update_optid", currentUserId);
cut_jo.put("update_optname", currentUsername);
cut_jo.put("update_time", DateUtil.now());
WQLObject.getWQLObject("ST_IVT_CutPointIvt").update(cut_jo);
}
} else {
// 更新主表状态
JSONObject coolMst = ivtTab.query("task_id = '" + task_id + "'").uniqueResult(0);
coolMst.put("bill_status", "50");
ivtTab.update(coolMst);
//更新冷却区母卷库存
JSONObject jsonCoolIvt = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code = '" + point_code1 + "'").uniqueResult(0);
String container_name = jsonCoolIvt.getString("container_name"); // 母卷号
jsonCoolIvt.put("full_point_status", "01");
jsonCoolIvt.put("container_name", "");
jsonCoolIvt.put("workorder_id", "");
jsonCoolIvt.put("ivt_qty", "0");
jsonCoolIvt.put("cool_ivt_status", "01");
jsonCoolIvt.put("instorage_time", "");
jsonCoolIvt.put("update_optid", currentUserId);
jsonCoolIvt.put("update_optname", currentUsername);
jsonCoolIvt.put("update_time", DateUtil.now());
WQLObject.getWQLObject("st_ivt_coolpointivt").update(jsonCoolIvt);
//更新分切区母卷库存
JSONObject cut_jo = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("full_point_code = '" + point_code2 + "'").uniqueResult(0);
cut_jo.put("full_point_status", "02");
cut_jo.put("container_name", container_name);
cut_jo.put("update_optid", currentUserId);
cut_jo.put("update_optname", currentUsername);
cut_jo.put("update_time", DateUtil.now());
WQLObject.getWQLObject("ST_IVT_CutPointIvt").update(cut_jo);
} else {
//更新该母卷对应分切计划的状态
HashMap<String, String> map = new HashMap<>();
map.put("is_parent_ok", "1");
WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(map, "parent_container_name = '" + container_name + "'");
//回传MES
JSONObject mom_jo = new JSONObject();
mom_jo.put("contain_name", container_name);
mom_jo.put("warehouse", "1");
//判断该接口是否需要回传
JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'cutPlanMomRollDeliveryComplete'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) {
new LmsToMesServiceImpl().cutPlanMomRollDeliveryComplete(mom_jo);
}
}
// 更新主表状态
JSONObject coolMst = ivtTab.query("task_id = '" + task_id + "'").uniqueResult(0);
coolMst.put("bill_status", "50");
ivtTab.update(coolMst);
//更新冷却区母卷库存
JSONObject jsonCoolIvt = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code = '" + point_code1 + "'").uniqueResult(0);
String container_name = jsonCoolIvt.getString("container_name"); // 母卷号
jsonCoolIvt.put("full_point_status", "01");
jsonCoolIvt.put("container_name", "");
jsonCoolIvt.put("workorder_id", "");
jsonCoolIvt.put("ivt_qty", "0");
jsonCoolIvt.put("cool_ivt_status", "01");
jsonCoolIvt.put("instorage_time", "");
jsonCoolIvt.put("update_optid", currentUserId);
jsonCoolIvt.put("update_optname", currentUsername);
jsonCoolIvt.put("update_time", DateUtil.now());
WQLObject.getWQLObject("st_ivt_coolpointivt").update(jsonCoolIvt);
//更新分切区母卷库存
JSONObject cut_jo = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("full_point_code = '" + point_code2 + "'").uniqueResult(0);
cut_jo.put("full_point_status", "02");
cut_jo.put("container_name", container_name);
cut_jo.put("update_optid", currentUserId);
cut_jo.put("update_optname", currentUsername);
cut_jo.put("update_time", DateUtil.now());
WQLObject.getWQLObject("ST_IVT_CutPointIvt").update(cut_jo);
//更新该母卷对应分切计划的状态
HashMap<String, String> map = new HashMap<>();
map.put("is_parent_ok", "1");
WQLObject.getWQLObject("PDM_BI_SlittingProductionPlan").update(map, "parent_container_name = '" + container_name + "'");
//回传MES
JSONObject mom_jo = new JSONObject();
mom_jo.put("contain_name", container_name);
mom_jo.put("warehouse", "1");
//判断该接口是否需要回传
JSONObject back_jo = WQLObject.getWQLObject("MD_PB_InterfaceBack").query("interface_name = 'cutPlanMomRollDeliveryComplete'").uniqueResult(0);
if (ObjectUtil.isNotEmpty(back_jo) && "1".equals(back_jo.getString("is_back"))) {
new LmsToMesServiceImpl().cutPlanMomRollDeliveryComplete(mom_jo);
}
}
if ("010303".equals(jsonTask.getString("task_type"))) {
@@ -379,6 +432,7 @@ public class CoolCutTask extends AbstractAcsTask {
json.put("vehicle_code", form.getString("vehicle_code"));
json.put("vehicle_code2", form.getString("vehicle_code2"));
json.put("product_area", form.getString("product_area"));
json.put("material_code", form.getString("material_code"));
json.put("handle_class", THIS_CLASS);
json.put("create_id", currentUserId);
json.put("create_name", currentUsername);

View File

@@ -117,56 +117,56 @@ public class InHotTask extends AbstractAcsTask {
String hot_point_code = "";
// 判断此任务是否有三个点位
if (ObjectUtil.isEmpty(jsonTask.getString("point_code3"))) {
if (ObjectUtil.isEmpty(jsonTask.getString("point_code3"))) {
if (jsonTask.getString("task_type").equals("010204")) {
//更新冷却区库存
JSONObject cool_jo = coolIvtTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
cool_jo.put("full_point_status", "02");
cool_jo.put("cool_ict_status", "01");
cool_jo.put("container_name", jsonTask.getString("material_code"));
coolIvtTab.update(cool_jo);
//更新对接位库存
JSONObject dj_jo = pointTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0);
dj_jo.put("point_status", "1");
dj_jo.put("material_code", "");
pointTab.update(dj_jo);
return;
} else {
/*
* 暂存区入烘箱任务
*/
// 更新烘箱区库存状态
JSONObject jsonHotIvt = hotIvtTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
jsonHotIvt.put("point_status", "02");
jsonHotIvt.put("container_name", jsonHotMst.getString("container_name"));
jsonHotIvt.put("workorder_id", jsonHotMst.getString("workorder_id"));
jsonHotIvt.put("ivt_qty", jsonHotMst.getString("qty"));
jsonHotIvt.put("instorage_time", DateUtil.now());
jsonHotIvt.put("update_optid", currentUserId);
jsonHotIvt.put("update_optname", currentUsername);
jsonHotIvt.put("update_time", DateUtil.now());
hotIvtTab.update(jsonHotIvt);
String product_area = jsonHotIvt.getString("product_area");
if (product_area.equals("B1")) {
JSONObject jsonPoint = coolIvtTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0);
jsonPoint.put("container_name", "");
jsonPoint.put("full_point_status", "01");
coolIvtTab.update(jsonPoint);
if (jsonTask.getString("task_type").equals("010204")) {
//更新冷却区库存
JSONObject cool_jo = coolIvtTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
cool_jo.put("full_point_status", "02");
cool_jo.put("cool_ict_status", "01");
cool_jo.put("container_name", jsonTask.getString("material_code"));
coolIvtTab.update(cool_jo);
//更新对接位库存
JSONObject dj_jo = pointTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0);
dj_jo.put("point_status", "1");
dj_jo.put("material_code", "");
pointTab.update(dj_jo);
return;
} else {
// 更新暂存区点位状态为空位
JSONObject jsonPoint = pointTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0);
jsonPoint.put("point_status", "1");
jsonPoint.put("material_code", "");
pointTab.update(jsonPoint);
/*
* 暂存区入烘箱任务
*/
// 更新烘箱区库存状态
JSONObject jsonHotIvt = hotIvtTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
jsonHotIvt.put("point_status", "02");
jsonHotIvt.put("container_name", jsonHotMst.getString("container_name"));
jsonHotIvt.put("workorder_id", jsonHotMst.getString("workorder_id"));
jsonHotIvt.put("ivt_qty", jsonHotMst.getString("qty"));
jsonHotIvt.put("instorage_time", DateUtil.now());
jsonHotIvt.put("update_optid", currentUserId);
jsonHotIvt.put("update_optname", currentUsername);
jsonHotIvt.put("update_time", DateUtil.now());
hotIvtTab.update(jsonHotIvt);
String product_area = jsonHotIvt.getString("product_area");
if (product_area.equals("B1")) {
JSONObject jsonPoint = coolIvtTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0);
jsonPoint.put("container_name", "");
jsonPoint.put("full_point_status", "01");
coolIvtTab.update(jsonPoint);
} else {
// 更新暂存区点位状态为空位
JSONObject jsonPoint = pointTab.query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0);
jsonPoint.put("point_status", "1");
jsonPoint.put("material_code", "");
pointTab.update(jsonPoint);
}
hot_point_code = jsonHotIvt.getString("ext_code");
}
hot_point_code = jsonHotIvt.getString("ext_code");
}
} else {
} else {
/*
* 冷却区入烘箱任务
*/

View File

@@ -103,12 +103,27 @@ public class OutHotTask extends AbstractAcsTask {
if (jsonTask.getString("task_type").equals("010205")) {
JSONObject cut_jo = WQLObject.getWQLObject("st_ivt_cutpointivt").query("full_point_code = '" + jsonTask.getString("point_code3") + "'").uniqueResult(0);
if (ObjectUtil.isEmpty(cut_jo)) {
cut_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("full_point_code = '" + jsonTask.getString("point_code3") + "'").uniqueResult(0);
}
//清空起点库存
JSONObject cool_jo = WQLObject.getWQLObject("st_ivt_coolpointivt").query("point_code = '" + jsonTask.getString("point_code1") + "'").uniqueResult(0);
cool_jo.put("container_name", "");
cool_jo.put("full_point_status", "01");
WQLObject.getWQLObject("st_ivt_coolpointivt").update(cool_jo);
//更新终点库存
JSONObject jsonPoint2 = pointTab.query("point_code = '" + jsonTask.getString("point_code2") + "'").uniqueResult(0);
jsonPoint2.put("point_status", "2");
jsonPoint2.put("material_code", jsonTask.getString("material_code"));
pointTab.update(jsonPoint2);
//创建AGV任务
JSONObject jo = new JSONObject();
if (StrUtil.equals("01", cut_jo.getString("empty_point_status"))) {
jo.put("point_code1", jsonTask.getString("point_code2"));
jo.put("point_code2", cut_jo.getString("full_point_code"));
jo.put("vehicle_code", jsonTask.getString("material_code"));
jo.put("material_code", jsonTask.getString("material_code"));
jo.put("product_area", cut_jo.getString("product_area"));
jo.put("task_type", "010302");
} else {
@@ -131,7 +146,7 @@ public class OutHotTask extends AbstractAcsTask {
throw new BadRequestException("冷却区空位不足");
}
jo.put("point_code4", jsonCooIvt.getString("empty_point_code"));
jo.put("vehicle_code", jsonTask.getString("container_name"));
jo.put("material_code", jsonTask.getString("material_code"));
jo.put("product_area", cut_jo.getString("product_area"));
jo.put("task_type", "010301");
}