fix:子卷下线桁架任务修改

This commit is contained in:
zhouz
2025-09-24 10:12:27 +08:00
parent 6ae7704463
commit c9d6657060
9 changed files with 114 additions and 56 deletions

View File

@@ -197,6 +197,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
* @param taskCode 任务编号 * @param taskCode 任务编号
* @param actionType 动作类型 * @param actionType 动作类型
* @return 新的点位 * @return 新的点位
* @remark 当前二次分配只会做空载具的二次分配,其他满卷的二次分配不会再做
*/ */
private String getNewPoint(String taskCode, String actionType) { private String getNewPoint(String taskCode, String actionType) {
BstIvtPackageinfoivt newPoint; BstIvtPackageinfoivt newPoint;
@@ -231,6 +232,16 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
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("补空(待检区->空载具缓存位)"))
) { ) {
count = taskService.count(new QueryWrapper<SchBaseTask>()
.eq("task_type", "010904")
.eq("is_delete", "0")
.ne("request_param", PackageInfoIvtEnum.TASK_ACTION_TYPE.code("取货完成"))
.in("task_status", Arrays.asList(TaskStatusEnum.START_AND_POINT.getCode(),
TaskStatusEnum.ISSUE.getCode(),
TaskStatusEnum.EXECUTING.getCode())));
if (count > 0) {
throw new BadRequestException("正在执行空载具上线桁架任务");
}
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("满轴缓存位->待检区"))) {
@@ -640,10 +651,10 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
if (ivtInfo == null) { if (ivtInfo == null) {
throw new BadRequestException(baseTask.getTask_code() + "取货完成或放货完成失败,目标点位:" + baseTask.getPoint_code1() + "不存在!"); throw new BadRequestException(baseTask.getTask_code() + "取货完成或放货完成失败,目标点位:" + baseTask.getPoint_code1() + "不存在!");
} }
//过滤未二次分配的任务 /*//过滤未二次分配的任务
if (StringUtils.isBlank(baseTask.getResponse_param())) { if (StringUtils.isBlank(baseTask.getResponse_param())) {
throw new BadRequestException(baseTask.getTask_code() + "取货完成失败" + ",起点未进行二次分配!"); throw new BadRequestException(baseTask.getTask_code() + "取货完成失败" + ",起点未进行二次分配!");
} }*/
//只有子卷号相同才能清除库存 //只有子卷号相同才能清除库存
if (baseTask.getVehicle_code().equals(ivtInfo.getContainer_name())) { if (baseTask.getVehicle_code().equals(ivtInfo.getContainer_name())) {
upDateIvtOrTask(baseTask, baseTask.getPoint_code1()); upDateIvtOrTask(baseTask, baseTask.getPoint_code1());
@@ -983,7 +994,7 @@ public class BstIvtPackageinfoivtServiceImpl extends ServiceImpl<BstIvtPackagein
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
@SneakyThrows @SneakyThrows
public JSONObject update(JSONObject whereJson) { public JSONObject update(JSONObject whereJson) {
RLock lock = redissonClient.getLock("updatePackageInfo------"+whereJson.getString("container_name")); RLock lock = redissonClient.getLock("updatePackageInfo------" + whereJson.getString("container_name"));
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try { try {
if (tryLock) { if (tryLock) {

View File

@@ -154,14 +154,14 @@ public class DjqTask extends AbstractAcsTask {
.eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")) .eq(SchBaseTask::getTask_type, PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"))
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_SEND.code("")) .eq(SchBaseTask::getIs_delete, IOSEnum.IS_SEND.code(""))
.lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode())); .lt(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()));
List<SchBaseTask> SamePointtaskList = taskList.stream().filter(r -> r.getPoint_code3().equals(schBaseTask.getPoint_code1())&&!r.getTask_id().equals(schBaseTask.getTask_id())).collect(Collectors.toList()); /*List<SchBaseTask> SamePointtaskList = taskList.stream().filter(r -> r.getPoint_code3().equals(schBaseTask.getPoint_code1())&&!r.getTask_id().equals(schBaseTask.getTask_id())).collect(Collectors.toList());
if (ObjectUtils.isNotEmpty(SamePointtaskList)) { if (ObjectUtils.isNotEmpty(SamePointtaskList)) {
UpdateWrapper<SchBaseTask> updateWrapper1 = new UpdateWrapper<>(); UpdateWrapper<SchBaseTask> updateWrapper1 = new UpdateWrapper<>();
updateWrapper1.eq("task_id", SamePointtaskList.get(0).getTask_id()); updateWrapper1.eq("task_id", SamePointtaskList.get(0).getTask_id());
updateWrapper1.set("point_code3", schBaseTask.getPoint_code3()); updateWrapper1.set("point_code3", schBaseTask.getPoint_code3());
taskService.update(null, updateWrapper1); taskService.update(null, updateWrapper1);
} }
updateWrapper.set(SchBaseTask::getPoint_code3, ""); updateWrapper.set(SchBaseTask::getPoint_code3, "");*/
//6.判断是否存在任务组任务 //6.判断是否存在任务组任务
packageinfoivtService.handleGroupTask(schBaseTask); packageinfoivtService.handleGroupTask(schBaseTask);
} }

View File

@@ -195,6 +195,7 @@ public class DjqToKzjhcwTask extends AbstractAcsTask {
.task_id(org.nl.common.utils.IdUtil.getStringId()) .task_id(org.nl.common.utils.IdUtil.getStringId())
.task_code(org.nl.common.utils.IdUtil.getStringId()) .task_code(org.nl.common.utils.IdUtil.getStringId())
.handle_class(THIS_CLASS) .handle_class(THIS_CLASS)
.priority("2")
.create_id(SecurityUtils.getCurrentUserId()) .create_id(SecurityUtils.getCurrentUserId())
.create_name(SecurityUtils.getCurrentUsername()) .create_name(SecurityUtils.getCurrentUsername())
.create_time(DateUtil.now()) .create_time(DateUtil.now())

View File

@@ -31,6 +31,7 @@ import org.nl.wms.util.TaskUtil;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -66,13 +67,14 @@ public class MzhcwTask extends AbstractAcsTask {
private DjqTask djqTask; private DjqTask djqTask;
@Resource @Resource
private GzqTask gzqTask; private GzqTask gzqTask;
@Resource
private SsxDjwTask ssxDjwTask;
@Resource @Resource
private DjqToKzjhcwTask djqToKzjhcwTask; private DjqToKzjhcwTask djqToKzjhcwTask;
@Override @Override
public List<AcsTaskDto> addTask() { public List<AcsTaskDto> addTask() {
ArrayList<AcsTaskDto> resultList = new ArrayList<>(); ArrayList<AcsTaskDto> resultList = new ArrayList<>();
@@ -131,12 +133,12 @@ public class MzhcwTask extends AbstractAcsTask {
//桁架放货完成信号未发送 //桁架放货完成信号未发送
if (!schBaseTask.getCar_no().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货完成"))) { if (!schBaseTask.getCar_no().equals(PackageInfoIvtEnum.TASK_ACTION_TYPE.code("放货完成"))) {
packageinfoivtService.update(null, new UpdateWrapper<BstIvtPackageinfoivt>().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); packageinfoivtService.update(null, new UpdateWrapper<BstIvtPackageinfoivt>().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));
log.info(schBaseTask.getTask_code() + "检查检查->输送线点位-满轴缓存位,桁架放货完成信号未发送!已在手动点击完成时增加满轴位:" + schBaseTask.getPoint_code2() + "的库存,子卷号为:"+schBaseTask.getVehicle_code()); log.info(schBaseTask.getTask_code() + "检查检查->输送线点位-满轴缓存位,桁架放货完成信号未发送!已在手动点击完成时增加满轴位:" + schBaseTask.getPoint_code2() + "的库存,子卷号为:" + schBaseTask.getVehicle_code());
} }
} else { } else {
//桁架放货完成信号未发送 //桁架放货完成信号未发送
packageinfoivtService.update(null, new UpdateWrapper<BstIvtPackageinfoivt>().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2())); packageinfoivtService.update(null, new UpdateWrapper<BstIvtPackageinfoivt>().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("有子卷")).set("container_name", schBaseTask.getVehicle_code()).eq("point_code", schBaseTask.getPoint_code2()));
log.info(schBaseTask.getTask_code() + "检查检查->输送线点位-满轴缓存位,桁架放货完成信号未发送!已在手动点击完成时增加满轴位:" + schBaseTask.getPoint_code2() + "的库存,子卷号为:"+schBaseTask.getVehicle_code()); log.info(schBaseTask.getTask_code() + "检查检查->输送线点位-满轴缓存位,桁架放货完成信号未发送!已在手动点击完成时增加满轴位:" + schBaseTask.getPoint_code2() + "的库存,子卷号为:" + schBaseTask.getVehicle_code());
} }
if (schBaseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))) { if (schBaseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"))) {
if (StringUtils.isNotBlank(schBaseTask.getRequest_param())) { if (StringUtils.isNotBlank(schBaseTask.getRequest_param())) {
@@ -151,6 +153,18 @@ public class MzhcwTask extends AbstractAcsTask {
log.info(schBaseTask.getTask_code() + "检查检查->四个点任务,桁架取货完成信号未发送!已在手动点击完成时清除空载具位:" + schBaseTask.getPoint_code3() + "的库存"); log.info(schBaseTask.getTask_code() + "检查检查->四个点任务,桁架取货完成信号未发送!已在手动点击完成时清除空载具位:" + schBaseTask.getPoint_code3() + "的库存");
} }
} }
if (schBaseTask.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"))) {
//空载具缓存位缺少空载具,下发一个确定终点的空载具缓存位->输送线任务
JSONObject jo1 = new JSONObject();
//创建确定终点任务
jo1.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
jo1.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"));
jo1.put("point_code2", "NBJ1002");
jo1.put("vehicle_code", schBaseTask.getVehicle_code());
jo1.put("task_status", TaskStatusEnum.SURE_END.getCode());
jo1.put("is_send", false);
ssxDjwTask.createTask(jo1);
}
} }
// 取消 // 取消
if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) { if (status.equals(IOSEnum.IS_NOTANDYES.code(""))) {
@@ -160,7 +174,7 @@ public class MzhcwTask extends AbstractAcsTask {
//任务被标记为取消 //任务被标记为取消
updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("")); updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""));
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode());
updateWrapper.set(SchBaseTask::getRemark,"任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。"); updateWrapper.set(SchBaseTask::getRemark, "任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。");
} }
taskService.update(null, updateWrapper); taskService.update(null, updateWrapper);
@@ -376,8 +390,6 @@ public class MzhcwTask extends AbstractAcsTask {
} }
@Override @Override
public void cancel(String taskId) { public void cancel(String taskId) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>() SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>()
@@ -398,9 +410,4 @@ public class MzhcwTask extends AbstractAcsTask {
} }
} }

View File

@@ -19,6 +19,7 @@ import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.enums.PackageInfoIvtEnum; import org.nl.common.enums.PackageInfoIvtEnum;
import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException; import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.AcsTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask; import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum; import org.nl.wms.sch.manage.TaskStatusEnum;

View File

@@ -101,13 +101,12 @@ public class AutoSendMzToDjq {
log.error(THIS_CLASS + "满轴->待检区agv自动搬运任务暂无可用空位,子卷号为:" + mzqPackageinfoivtList.get(0).getContainer_name()); log.error(THIS_CLASS + "满轴->待检区agv自动搬运任务暂无可用空位,子卷号为:" + mzqPackageinfoivtList.get(0).getContainer_name());
return; return;
} }
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("取货二次分配")); task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区")); task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("满轴缓存位->待检区"));
task.put("vehicle_code", mzqPackageinfoivtList.get(0).getContainer_name()); task.put("vehicle_code", mzqPackageinfoivtList.get(0).getContainer_name());
task.put("point_code1", packageinfoivtService.getWaitPoint(mzqPackageinfoivtList.get(0).getBlock(), mzqPackageinfoivtList.get(0).getWait_point_type())); task.put("point_code1", mzqPackageinfoivtList.get(0).getPoint_code());
//如果浅库位和深库位都有空位,且为一组,优先深库位 //如果浅库位和深库位都有空位,且为一组,优先深库位
task.put("point_code2", selectEmpPoints.get(0).getPoint_code()); task.put("point_code2", selectEmpPoints.get(0).getPoint_code());
task.put("point_code3", mzqPackageinfoivtList.get(0).getPoint_code());
djqTask.createTask(task); djqTask.createTask(task);
} else { } else {
log.info("满轴->待检区agv自动搬运任务正在创建被锁住。"); log.info("满轴->待检区agv自动搬运任务正在创建被锁住。");

View File

@@ -77,7 +77,7 @@ public class TaskQueue {
.eq("vehicle_code2", block) .eq("vehicle_code2", block)
.eq("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区")) .eq("task_type", PackageInfoIvtEnum.TASK_TYPE.code("待检区->装箱区"))
.eq("is_delete", IOSEnum.IS_NOTANDYES.code("")) .eq("is_delete", IOSEnum.IS_NOTANDYES.code(""))
.orderByDesc("create_time", "task_step")); .orderByAsc("create_time"));
log.info("当前zxq有起点任务数量"+list.size()); log.info("当前zxq有起点任务数量"+list.size());
for (int i = 0; i < Math.min(empPointList.size(),list.size()); i++) { for (int i = 0; i < Math.min(empPointList.size(),list.size()); i++) {
String empPoin = empPointList.get(i); String empPoin = empPointList.get(i);

View File

@@ -1873,6 +1873,50 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
result.put("status", HttpStatus.BAD_REQUEST.value()); result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("data", whereJson.getString("material_barcode")); result.put("data", whereJson.getString("material_barcode"));
RedissonUtils.lock(c -> { RedissonUtils.lock(c -> {
//1.查询满轴缓存位是否有空位
List<BstIvtPackageinfoivt> MzPoints = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
.eq(BstIvtPackageinfoivt::getIs_used, PackageInfoIvtEnum.IS_USED.code("启用"))
.eq(BstIvtPackageinfoivt::getPoint_status, PackageInfoIvtEnum.POINT_STATUS.code("满轴缓存位"))
.eq(BstIvtPackageinfoivt::getIvt_status, PackageInfoIvtEnum.IVT_STATUS.code(""))
.orderByDesc(BstIvtPackageinfoivt::getSort_seq));
if (CollectionUtils.isEmpty(MzPoints)) {
result.put("message", "满轴位无可用位置");
return result;
}
// 创建前先判断是否有已创建相同任务
List<String> taskTypes = new ArrayList<>(Arrays.asList(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务"), PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"), PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)")));
List<SchBaseTask> existTaskList1 = taskService.getExistTasks(taskTypes);
List<SchBaseTask> existTaskList2 = existTaskList1.stream().filter(r -> r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线四个点任务")) || r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位")) || r.getTask_type().equals(PackageInfoIvtEnum.TASK_TYPE.code("放空(空载具缓存位->输送线)"))).collect(Collectors.toList());
List<SchBaseTask> existTaskList3 = existTaskList1.stream().filter(r -> StringUtils.isNotBlank(r.getResponse_param())).collect(Collectors.toList());
if (!CollectionUtils.isEmpty(existTaskList2) || !CollectionUtils.isEmpty(existTaskList3)) {
result.put("message", "存在正在执行的输送线行架任务");
return result;
}
JSONObject taskParam = new JSONObject();
taskParam.put("acs_task_type", PackageInfoIvtEnum.ACS_TASK_TYPE.code("桁架任务"));
taskParam.put("vehicle_code", whereJson.getString("material_barcode"));
taskParam.put("point_code1", whereJson.getString("device_code"));
taskParam.put("point_code2", MzPoints.get(0).getPoint_code());
taskParam.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("输送线->满轴缓存位"));
taskParam.put("is_send", true);
mzhcwTask.createTask(taskParam);
PdmProductSpecServiceImpl.doRecord(SpecEnum.XX, null, Boolean.TRUE, null, whereJson.getString("material_barcode"));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!");
return result;
}, "sendProductToFirstFloor", null);
}
log.info("sendProductToFirstFloor调用成功--------------------------" + result);
return result;
}
private JSONObject getJsonObject(JSONObject whereJson, JSONObject result) {
//1.查询满轴缓存位是否有空位 //1.查询满轴缓存位是否有空位
List<BstIvtPackageinfoivt> MzPoints = packageinfoivtService List<BstIvtPackageinfoivt> MzPoints = packageinfoivtService
.list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>() .list(new LambdaUpdateWrapper<BstIvtPackageinfoivt>()
@@ -1918,11 +1962,6 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
result.put("status", HttpStatus.OK.value()); result.put("status", HttpStatus.OK.value());
result.put("message", "反馈成功!"); result.put("message", "反馈成功!");
return result; return result;
}, "sendProductToFirstFloor", null);
}
log.info("sendProductToFirstFloor调用成功--------------------------" + result);
return result;
} }
/** /**

View File

@@ -539,7 +539,7 @@ public class BakingServiceImpl implements BakingService {
throw new BadRequestException("物料基础信息中无此物料!"); throw new BadRequestException("物料基础信息中无此物料!");
} }
/*//查询该母卷对应最近的一条入烘箱记录 //查询该母卷对应最近的一条入烘箱记录
JSONObject last_hot_mst = WQLObject.getWQLObject("ST_IVT_HotRegionIOMst").query("container_name = '" + jsonHotIvt.getString("container_name") + "' AND io_type = '0' order by confirm_time desc").uniqueResult(0); JSONObject last_hot_mst = WQLObject.getWQLObject("ST_IVT_HotRegionIOMst").query("container_name = '" + jsonHotIvt.getString("container_name") + "' AND io_type = '0' order by confirm_time desc").uniqueResult(0);
JSONObject hotParam = new JSONObject(); JSONObject hotParam = new JSONObject();
@@ -565,7 +565,7 @@ public class BakingServiceImpl implements BakingService {
} else { } else {
hotParam.put("oven_time", last_hot_mst.getString("oven_time")); hotParam.put("oven_time", last_hot_mst.getString("oven_time"));
} }
this.createHotIoMst(hotParam);*/ this.createHotIoMst(hotParam);
} }
} }
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();