add:增加公共类直接下发逻辑,重写子卷下线下发改直接下发

opt:修改装箱区补空代码,改成查询可用点位生成下发
opt:删除装箱对接行架任务完成后调用补空任务,统一由定时器执行
This commit is contained in:
zhangzq
2025-06-22 12:36:44 +08:00
parent 43ba587817
commit c611820094
6 changed files with 118 additions and 30 deletions

View File

@@ -336,11 +336,35 @@ public class MzhcwTask extends AbstractAcsTask {
taskService.save(task); taskService.save(task);
//如果目标点位没有空位先创建不下发 //如果目标点位没有空位先创建不下发
if (isSend) { if (isSend) {
this.immediateNotifyAcs(null); this.immediateNotifyAcs(task,"");
} }
return task.getTask_id(); return task.getTask_id();
} }
@Override
public List<AcsTaskDto> addTask(SchBaseTask task) {
List<AcsTaskDto> result = new ArrayList<>();
AcsTaskDto dto = AcsTaskDto.builder()
.ext_task_id(task.getTask_id().toString())
.task_code(task.getTask_code())
.task_type(task.getAcs_task_type())
.start_device_code(task.getPoint_code1())
.next_device_code(task.getPoint_code2())
.start_device_code2(task.getPoint_code3())
.next_device_code2(task.getPoint_code4())
//四个点任务与两个点任务类型区分
.agv_action_type(task.getVehicle_code2())
.vehicle_code(task.getVehicle_code())
.priority(task.getPriority())
.remark(task.getRemark())
.class_type(IOSEnum.ACS_TYPE.code("子卷下线行架任务"))
.product_area(task.getProduct_area())
.agv_action_type(PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"))
.interaction_json(JSON.parseObject(task.getRequest_param()))
.build();
result.add(dto);
return result;
}
@Override @Override
@Transactional @Transactional

View File

@@ -164,11 +164,33 @@ public class SendDjqKzjTask extends AbstractAcsTask {
taskService.save(task); taskService.save(task);
//如果目标点位没有空位先创建不下发 //如果目标点位没有空位先创建不下发
if (isSend) { if (isSend) {
this.immediateNotifyAcs(null); this.immediateNotifyAcs(task,"");
} }
return task.getTask_id(); return task.getTask_id();
} }
@Override
public List<AcsTaskDto> addTask(SchBaseTask r) {
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
AcsTaskDto dto = AcsTaskDto.builder()
.ext_task_id(r.getTask_id().toString())
.task_code(r.getTask_code())
.task_type(r.getAcs_task_type())
.start_device_code(r.getPoint_code1())
.next_device_code(r.getPoint_code2())
.start_device_code2(r.getPoint_code3())
.next_device_code2(r.getPoint_code4())
.vehicle_code(r.getVehicle_code())
.priority(r.getPriority())
.remark(r.getRemark())
.product_area(r.getProduct_area())
.agv_action_type(r.getVehicle_code2())
.agv_system_type(PackageInfoIvtEnum.AGV_SYSTEM_TYPE.code("1楼诺宝任务"))
.interaction_json(JSON.parseObject(r.getRequest_param()))
.build();
resultList.add(dto);
return resultList;
}
@Override @Override
@Transactional @Transactional

View File

@@ -146,10 +146,6 @@ public class ZxDjwTask extends AbstractAcsTask {
bstIvtBoxinfoMapper.updateById(bstIvtBoxinfo); bstIvtBoxinfoMapper.updateById(bstIvtBoxinfo);
//5.最后一个子卷,清除装箱位木箱信息 //5.最后一个子卷,清除装箱位木箱信息
packageinfoivtService.update(null, new UpdateWrapper<BstIvtPackageinfoivt>().set("update_time", now).set("ivt_status", PackageInfoIvtEnum.IVT_STATUS.code("")).set("container_name", null).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", null).eq("point_code", schBaseTask.getPoint_code2()));
//装箱位所在区域
String block = packageinfoivtService.list(new LambdaQueryWrapper<BstIvtPackageinfoivt>().eq(BstIvtPackageinfoivt::getPoint_code,schBaseTask.getPoint_code2())).get(0).getBlock();
//6.创建装箱区->待检区或管制区补空任务
callingVehicleToDjqOrGzq(Integer.parseInt(packagerelationList.get(0).getQuanlity_in_box().toString()),block);
} }
//7.改变子卷包装状态为已装箱1 //7.改变子卷包装状态为已装箱1
PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService

View File

@@ -22,6 +22,7 @@ import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.List; import java.util.List;
@@ -75,25 +76,33 @@ public class AutoSendVehicleToDjq extends Prun {
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("")) .eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
.eq(SchBaseTask::getTask_type, "010909")); .eq(SchBaseTask::getTask_type, "010909"));
if (ObjectUtils.isNotEmpty(taskList)) { if (ObjectUtils.isNotEmpty(taskList)) {
log.warn("当前装箱区存在执行的行架任务"+taskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
return; return;
} }
} }
//存在装箱区有空载具的点位 //存在装箱区有空载具的点位
List<BstIvtPackageinfoivt> zxqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", ""); List<BstIvtPackageinfoivt> zxqVehicleList = packageinfoivtService
if (ObjectUtils.isEmpty(zxqIvtList)) { .selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"));
List<BstIvtPackageinfoivt> djqEmpList = packageinfoivtService
.selectEmpPoints(PackageInfoIvtEnum.POINT_STATUS.code("待检区"), PackageInfoIvtEnum.IVT_STATUS.code(""));
if (CollectionUtils.isEmpty(zxqVehicleList) || CollectionUtils.isEmpty(djqEmpList)) {
log.info(THIS_CLASS + "装箱区或待检区没有可用点位");
return; return;
} }
//按块执行取空任务
if (isCalling.equals(IOSEnum.IS_NOTANDYES.code(""))) {
if (StringUtils.isNotBlank(block)) {
zxqIvtList = zxqIvtList.stream().filter(r -> r.getBlock().equals(block)).collect(Collectors.toList());
}
}
JSONObject task = new JSONObject(); JSONObject task = new JSONObject();
task.put("point_code1", zxqIvtList.get(0).getPoint_code()); task.put("task_type", PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->待检区)"));
getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)")); task.put("point_code1", zxqVehicleList.get(0).getPoint_code());
task.put("vehicle_code2", PackageInfoIvtEnum.AGV_ACTION_TYPE.code("普通任务"));
task.put("task_status", TaskStatusEnum.SURE_END.getCode());
task.put("point_code2", djqEmpList.get(0).getPoint_code());
try {
sendDjqKzjTask.createTask(task);
}catch (Exception ex){
log.error(THIS_CLASS+"任务创建失败"+ex.getMessage());
}
} else { } else {
log.info("装箱区->待检区或管制区补空载具任务正在创建被锁住"); log.info(THIS_CLASS + "装箱区搬空任务正在创建被锁住");
} }
} finally { } finally {
if (lock.isLocked() && lock.isHeldByCurrentThread()) { if (lock.isLocked() && lock.isHeldByCurrentThread()) {

View File

@@ -16,7 +16,6 @@ import org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt;
import org.nl.b_lms.sch.point.service.IstIvtShaftivtService; import org.nl.b_lms.sch.point.service.IstIvtShaftivtService;
import org.nl.b_lms.sch.task.dao.SchBaseTask; import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.common.utils.SecurityUtils; import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.TaskUtils; import org.nl.common.utils.TaskUtils;
@@ -183,7 +182,7 @@ public class SendShaftToCacheTask extends AbstractAcsTask {
} }
@Override @Override
public JSONObject immediateNotifyAcs(String task_id) { public JSONObject immediateNotifyAcs(Object task_id) {
try { try {
Thread.sleep(1000); Thread.sleep(1000);
} catch (Exception ex) { } catch (Exception ex) {
@@ -191,7 +190,7 @@ public class SendShaftToCacheTask extends AbstractAcsTask {
} }
List<SchBaseTask> taskList = new ArrayList<>(); List<SchBaseTask> taskList = new ArrayList<>();
SchBaseTask baseTask = taskService.getById(task_id); SchBaseTask baseTask = taskService.getById((String)task_id);
taskList.add(baseTask); taskList.add(baseTask);
ArrayList<AcsTaskDto> resultList = new ArrayList<>(); ArrayList<AcsTaskDto> resultList = new ArrayList<>();
String agv_system_type = "2"; String agv_system_type = "2";

View File

@@ -4,6 +4,9 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.sch.AcsTaskDto; import org.nl.wms.sch.AcsTaskDto;
import org.nl.wms.sch.AcsUtil; import org.nl.wms.sch.AcsUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -34,12 +37,26 @@ public abstract class AbstractAcsTask {
return addTask(); return addTask();
} }
public List<AcsTaskDto> schedule(String taskId) {
return addTask(taskId);
}
public List<AcsTaskDto> schedule(SchBaseTask task) {
return addTask(task);
}
/** /**
* 添加任务进行下发 * 添加任务进行下发
* *
* @return * @return
*/ */
public abstract List<AcsTaskDto> addTask(); public abstract List<AcsTaskDto> addTask();
public List<AcsTaskDto> addTask(String taskId){
throw new BadRequestException("当前类没有重写addTask(taskId)方法");
};
public List<AcsTaskDto> addTask(SchBaseTask task){
throw new BadRequestException("当前类没有重写addTask(taskId)方法");
};
/** /**
* @param taskObj 代表一条任务对象 * @param taskObj 代表一条任务对象
@@ -107,25 +124,46 @@ public abstract class AbstractAcsTask {
return AcsUtil.notifyAcs("api/wms/task", jsonArray); return AcsUtil.notifyAcs("api/wms/task", jsonArray);
} }
/** /**
* *
*/ */
public JSONObject immediateNotifyAcs(String task_id) { public JSONObject immediateNotifyAcs(Object task_id) {
try { try {
Thread.sleep(1000); Thread.sleep(1000);
}catch (Exception ex){ }catch (Exception ex){
} }
List<AcsTaskDto> taskList;
if (ObjectUtil.isEmpty(task_id)){
taskList = this.schedule();
}else {
taskList = this.schedule((String) task_id);
}
if (ObjectUtil.isNotEmpty(taskList)) {
JSONArray arr = JSONArray.parseArray(JSON.toJSONString(taskList));
if (acsUtil == null){
return AcsUtil.notifyAcs("api/wms/task", arr);
}else {
return acsUtil.notifyAcs3("api/wms/task", arr);
}
}
return null;
List<AcsTaskDto> taskList = this.schedule(); }
if (ObjectUtil.isNotEmpty(taskList)) { public JSONObject immediateNotifyAcs(SchBaseTask task,String taskId) {
JSONArray arr = JSONArray.parseArray(JSON.toJSONString(taskList)); if (task==null){
if (acsUtil == null){ throw new BadRequestException("任务下发参数不能为空");
return AcsUtil.notifyAcs("api/wms/task", arr); }
}else { List<AcsTaskDto> taskList = this.schedule(task);
return acsUtil.notifyAcs3("api/wms/task", arr); if (ObjectUtil.isNotEmpty(taskList)) {
} JSONArray arr = JSONArray.parseArray(JSON.toJSONString(taskList));
} if (acsUtil == null){
return AcsUtil.notifyAcs("api/wms/task", arr);
}else {
return acsUtil.notifyAcs3("api/wms/task", arr);
}
}
return null; return null;
} }