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

View File

@@ -13,7 +13,6 @@ import org.nl.common.enums.PackageInfoIvtEnum;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -25,6 +24,8 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor @RequiredArgsConstructor
public class AutoSendVehicleToDjq { public class AutoSendVehicleToDjq {
private final String THIS_CLASS = AutoSendVehicleToDjq.class.getName(); private final String THIS_CLASS = AutoSendVehicleToDjq.class.getName();
@Resource @Resource
private RedissonClient redissonClient; private RedissonClient redissonClient;
@Resource @Resource
@@ -32,6 +33,9 @@ public class AutoSendVehicleToDjq {
@Resource @Resource
private SendGzqKzjTask sendGzqKzjTask; private SendGzqKzjTask sendGzqKzjTask;
@Resource
private IbstIvtPackageinfoivtService ibstIvtPackageinfoivtService;
@Resource @Resource
private IbstIvtPackageinfoivtService packageinfoivtService; private IbstIvtPackageinfoivtService packageinfoivtService;
@@ -48,27 +52,22 @@ public class AutoSendVehicleToDjq {
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try { try {
if (tryLock) { if (tryLock) {
//存在装箱区有空载具的点位 String pointCode2;
String pointCode2 = null;
JSONObject task = new JSONObject(); 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("取货任务"), "", ""); List<BstIvtPackageinfoivt> zxqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", "");
if (CollectionUtils.isEmpty(zxqIvtList)) { if (CollectionUtils.isEmpty(zxqIvtList)) {
return; return;
} }
//待检区有空位且过滤未完成任务 if ( Integer.parseInt(zxqIvtList.get(0).getSort_seq().toString()) % 2 != 0) {
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 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"));
pointCode2 = djqPackageinfoivtList.get(0).getPoint_code();
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"));
} else { } else {
//管制区有空位 pointCode2 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)"));
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("补空(装箱区->管制区)"));
}
} }
//去装箱区搬运空载具 //去装箱区搬运空载具
if (pointCode2 != null) { 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; private DjqToKzjhcwTask djqToKzjhcwTask;
@Resource @Resource
private GzqToKzjhcwTask gzqToKzjhcwTask; private GzqToKzjhcwTask gzqToKzjhcwTask;
@Resource
private BstIvtPackageinfoivtMapper bstIvtPackageinfoivtMapper;
@Resource @Resource
private IbstIvtPackageinfoivtService packageinfoivtService; private IbstIvtPackageinfoivtService packageinfoivtService;
@@ -112,10 +110,10 @@ public class AutoSendVehicleToKzj {
return; return;
} }
if (existTask.size() % 2 != 0) { if (existTask.size() % 2 != 0) {
//优先去待检 //优先去管制
pointCode1 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"));
} else {
pointCode1 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)")); pointCode1 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(待检区->空载具缓存位)"));
} else {
pointCode1 = getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(管制区->空载具缓存位)"));
} }
//去待检区或管制区搬运空载具 //去待检区或管制区搬运空载具
if (pointCode1 != null) { 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")), 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 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.isNotEmpty(jsonPointZc) || ObjectUtil.isNotEmpty(cool_jo)) {
if (ObjectUtil.isEmpty(jsonPointZc)) { if (ObjectUtil.isEmpty(jsonPointZc)) {
jsonPointZc = cool_jo; jsonPointZc = cool_jo;
@@ -149,9 +149,29 @@ public class BakingServiceImpl implements BakingService {
} }
} }
if (ObjectUtil.isEmpty(jsonHotIvt)) {
//如果属于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)) { if (ObjectUtil.isEmpty(jsonHotIvt)) {
throw new BadRequestException("烘烤区没有合适温度的空位!"); throw new BadRequestException("烘烤区没有合适温度的空位!");
} }
} else {
throw new BadRequestException("烘烤区没有合适温度的空位!");
}
}
// 2.创建暂存位 --> 烘烤区任务 // 2.创建暂存位 --> 烘烤区任务
JSONObject param = new JSONObject(); JSONObject param = new JSONObject();
param.put("type", "2"); // 1- 冷却区入烘箱 2- 暂存位入烘箱 param.put("type", "2"); // 1- 冷却区入烘箱 2- 暂存位入烘箱

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); 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)) { if (ObjectUtil.isEmpty(cool_jo)) {
throw new BadRequestException("请输入或者扫描冷却区满轴位的点位做为起点!"); throw new BadRequestException("请输入或者扫描冷却区满轴位的点位做为起点!");
} else { } else {
@@ -285,7 +287,47 @@ public class FeedingServiceImpl implements FeedingService {
} }
if (cool_jo.getString("product_area").equals("B1")) { if (cool_jo.getString("product_area").equals("B1")) {
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 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(); JSONObject task_jo = new JSONObject();
task_jo.put("point_code1", cool_jo.getString("point_code")); task_jo.put("point_code1", cool_jo.getString("point_code"));
String reging_id = ""; String reging_id = "";
@@ -320,19 +362,24 @@ public class FeedingServiceImpl implements FeedingService {
map.put("point_type", "5"); map.put("point_type", "5");
JSONObject pointArr = WQL.getWO("PDA_OVENINANDOUT_01").addParamMap(map).process().uniqueResult(0); 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)) { if (ObjectUtil.isEmpty(pointArr)) {
throw new BadRequestException("没有无货且没有任务的点位类型为出箱的烘箱对接位!"); throw new BadRequestException("没有无货且没有任务的点位类型为出箱的烘箱对接位!");
} }
}
task_jo.put("point_code2", pointArr.getString("point_code")); task_jo.put("point_code2", pointArr.getString("point_code"));
//将分切机的点位作为目的点桁架任务完成时自动创建AGV任务 //将分切机的点位作为目的点桁架任务完成时自动创建AGV任务
task_jo.put("point_code3", next_point_code); task_jo.put("point_code3", next_point_code);
task_jo.put("vehicle_code", cool_jo.getString("container_name")); task_jo.put("material_code", cool_jo.getString("container_name"));
task_jo.put("product_area", cut_jo.getString("product_area")); task_jo.put("product_area", cool_jo.getString("product_area"));
task_jo.put("task_type", "010205"); task_jo.put("task_type", "010205");
OutHotTask outHotTask = new OutHotTask(); OutHotTask outHotTask = new OutHotTask();
String task_id = outHotTask.createTask(task_jo); String task_id = outHotTask.createTask(task_jo);
}
} else { } else {
JSONObject jo = new JSONObject(); 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_location", jsonSb.getString("point_location"));
//只找入箱点位 //只找入箱点位
cache_map.put("point_type", "4"); 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); 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)) { if (ObjectUtil.isEmpty(point_code2_jo)) {
throw new BadRequestException("未查询到可用的点位类型为入箱的烘箱对接位!"); throw new BadRequestException("未查询到可用的点位类型为入箱的烘箱对接位!");
} }

View File

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

View File

@@ -129,7 +129,7 @@
FROM FROM
sch_base_task sch_base_task
WHERE 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 task_status < '07'
AND is_delete = '0' AND is_delete = '0'
) )

View File

@@ -114,17 +114,50 @@ public class CoolCutTask extends AbstractAcsTask {
if ("B1".equals(product_area)) { if ("B1".equals(product_area)) {
//更新起点烘箱对接位 //更新起点烘箱对接位
JSONObject dj_jo = WQLObject.getWQLObject("sch_base_point").query("point_code ='" + point_code1 + "'").uniqueResult(0); JSONObject dj_jo = WQLObject.getWQLObject("sch_base_point").query("point_code ='" + point_code1 + "'").uniqueResult(0);
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("point_status", "1");
dj_jo.put("material_code", ""); dj_jo.put("material_code", "");
WQLObject.getWQLObject("sch_base_point").update(dj_jo); 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); JSONObject cut_jo = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("empty_point_code = '" + point_code3 + "'").uniqueResult(0);
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_point_status", "02");
cut_jo.put("empty_vehicle_code", "SJG"); cut_jo.put("empty_vehicle_code", "SJG");
cut_jo.put("update_optid", currentUserId); cut_jo.put("update_optid", currentUserId);
cut_jo.put("update_optname", currentUsername); cut_jo.put("update_optname", currentUsername);
cut_jo.put("update_time", DateUtil.now()); cut_jo.put("update_time", DateUtil.now());
WQLObject.getWQLObject("ST_IVT_CutPointIvt").update(cut_jo); WQLObject.getWQLObject("ST_IVT_CutPointIvt").update(cut_jo);
}
//更新空轴点位 //更新空轴点位
JSONObject jsonCoolIvt2 = WQLObject.getWQLObject("st_ivt_coolpointivt").query("empty_point_code = '" + point_code4 + "'").uniqueResult(0); JSONObject jsonCoolIvt2 = WQLObject.getWQLObject("st_ivt_coolpointivt").query("empty_point_code = '" + point_code4 + "'").uniqueResult(0);
jsonCoolIvt2.put("empty_point_status", "02"); jsonCoolIvt2.put("empty_point_status", "02");
@@ -207,20 +240,38 @@ public class CoolCutTask extends AbstractAcsTask {
if ("B1".equals(product_area)) { if ("B1".equals(product_area)) {
//更新起点烘箱对接位 //更新起点烘箱对接位
JSONObject dj_jo = WQLObject.getWQLObject("sch_base_point").query("point_code ='" + point_code1 + "'").uniqueResult(0); JSONObject dj_jo = WQLObject.getWQLObject("sch_base_point").query("point_code ='" + point_code1 + "'").uniqueResult(0);
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("point_status", "1");
dj_jo.put("material_code", ""); dj_jo.put("material_code", "");
WQLObject.getWQLObject("sch_base_point").update(dj_jo); 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); JSONObject cut_jo = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("full_point_code = '" + point_code2 + "'").uniqueResult(0);
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_point_status", "02");
cut_jo.put("empty_vehicle_code", "SJG"); cut_jo.put("empty_vehicle_code", "SJG");
cut_jo.put("update_optid", currentUserId); cut_jo.put("update_optid", currentUserId);
cut_jo.put("update_optname", currentUsername); cut_jo.put("update_optname", currentUsername);
cut_jo.put("update_time", DateUtil.now()); cut_jo.put("update_time", DateUtil.now());
WQLObject.getWQLObject("ST_IVT_CutPointIvt").update(cut_jo); WQLObject.getWQLObject("ST_IVT_CutPointIvt").update(cut_jo);
} else {
} }
} else {
// 更新主表状态 // 更新主表状态
JSONObject coolMst = ivtTab.query("task_id = '" + task_id + "'").uniqueResult(0); JSONObject coolMst = ivtTab.query("task_id = '" + task_id + "'").uniqueResult(0);
coolMst.put("bill_status", "50"); coolMst.put("bill_status", "50");
@@ -266,6 +317,8 @@ public class CoolCutTask extends AbstractAcsTask {
} }
} }
}
if ("010303".equals(jsonTask.getString("task_type"))) { if ("010303".equals(jsonTask.getString("task_type"))) {
//更新分切区空轴库存 //更新分切区空轴库存
JSONObject cut_jo2 = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("empty_point_code = '" + point_code1 + "'").uniqueResult(0); JSONObject cut_jo2 = WQLObject.getWQLObject("ST_IVT_CutPointIvt").query("empty_point_code = '" + point_code1 + "'").uniqueResult(0);
@@ -379,6 +432,7 @@ public class CoolCutTask extends AbstractAcsTask {
json.put("vehicle_code", form.getString("vehicle_code")); json.put("vehicle_code", form.getString("vehicle_code"));
json.put("vehicle_code2", form.getString("vehicle_code2")); json.put("vehicle_code2", form.getString("vehicle_code2"));
json.put("product_area", form.getString("product_area")); json.put("product_area", form.getString("product_area"));
json.put("material_code", form.getString("material_code"));
json.put("handle_class", THIS_CLASS); json.put("handle_class", THIS_CLASS);
json.put("create_id", currentUserId); json.put("create_id", currentUserId);
json.put("create_name", currentUsername); json.put("create_name", currentUsername);

View File

@@ -103,12 +103,27 @@ public class OutHotTask extends AbstractAcsTask {
if (jsonTask.getString("task_type").equals("010205")) { 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); 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任务 //创建AGV任务
JSONObject jo = new JSONObject(); JSONObject jo = new JSONObject();
if (StrUtil.equals("01", cut_jo.getString("empty_point_status"))) { if (StrUtil.equals("01", cut_jo.getString("empty_point_status"))) {
jo.put("point_code1", jsonTask.getString("point_code2")); jo.put("point_code1", jsonTask.getString("point_code2"));
jo.put("point_code2", cut_jo.getString("full_point_code")); 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("product_area", cut_jo.getString("product_area"));
jo.put("task_type", "010302"); jo.put("task_type", "010302");
} else { } else {
@@ -131,7 +146,7 @@ public class OutHotTask extends AbstractAcsTask {
throw new BadRequestException("冷却区空位不足"); throw new BadRequestException("冷却区空位不足");
} }
jo.put("point_code4", jsonCooIvt.getString("empty_point_code")); 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("product_area", cut_jo.getString("product_area"));
jo.put("task_type", "010301"); jo.put("task_type", "010301");
} }

View File

@@ -151,7 +151,6 @@
{{ dict.label.is_used[scope.row.is_used] }} {{ dict.label.is_used[scope.row.is_used] }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="remark" label="备注" /> <el-table-column prop="remark" label="备注" />
<el-table-column prop="update_time" label="修改时间" min-width="150" show-overflow-tooltip /> <el-table-column prop="update_time" label="修改时间" min-width="150" show-overflow-tooltip />
<el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right"> <el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right">

View File

@@ -142,6 +142,7 @@
<el-table-column prop="vehicle_code" label="载具编码1" width="130" show-overflow-tooltip /> <el-table-column prop="vehicle_code" label="载具编码1" width="130" show-overflow-tooltip />
<el-table-column prop="vehicle_code2" label="载具编码2" width="100" show-overflow-tooltip /> <el-table-column prop="vehicle_code2" label="载具编码2" width="100" show-overflow-tooltip />
<el-table-column prop="request_param" label="请求参数" min-width="120" show-overflow-tooltip /> <el-table-column prop="request_param" label="请求参数" min-width="120" show-overflow-tooltip />
<el-table-column prop="response_param" label="返回参数" min-width="120" show-overflow-tooltip />
<el-table-column prop="task_name" label="任务描述" min-width="120" show-overflow-tooltip /> <el-table-column prop="task_name" label="任务描述" min-width="120" show-overflow-tooltip />
<el-table-column prop="create_name" label="创建人" width="135" show-overflow-tooltip /> <el-table-column prop="create_name" label="创建人" width="135" show-overflow-tooltip />
<el-table-column prop="create_time" label="创建时间" width="135" show-overflow-tooltip /> <el-table-column prop="create_time" label="创建时间" width="135" show-overflow-tooltip />