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);
//如果目标点位没有空位先创建不下发
if (isSend) {
this.immediateNotifyAcs(null);
this.immediateNotifyAcs(task,"");
}
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
@Transactional

View File

@@ -164,11 +164,33 @@ public class SendDjqKzjTask extends AbstractAcsTask {
taskService.save(task);
//如果目标点位没有空位先创建不下发
if (isSend) {
this.immediateNotifyAcs(null);
this.immediateNotifyAcs(task,"");
}
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
@Transactional

View File

@@ -146,10 +146,6 @@ public class ZxDjwTask extends AbstractAcsTask {
bstIvtBoxinfoMapper.updateById(bstIvtBoxinfo);
//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()));
//装箱位所在区域
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
PdmBiSubpackagerelation pdmBiSubpackagerelation = subpackageRelationService

View File

@@ -22,6 +22,7 @@ import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.List;
@@ -75,25 +76,33 @@ public class AutoSendVehicleToDjq extends Prun {
.eq(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code(""))
.eq(SchBaseTask::getTask_type, "010909"));
if (ObjectUtils.isNotEmpty(taskList)) {
log.warn("当前装箱区存在执行的行架任务"+taskList.stream().map(SchBaseTask::getTask_code).collect(Collectors.joining(",")));
return;
}
}
//存在装箱区有空载具的点位
List<BstIvtPackageinfoivt> zxqIvtList = packageinfoivtService.checkEndPointTask(PackageInfoIvtEnum.POINT_STATUS.code("装箱区"), PackageInfoIvtEnum.IVT_STATUS.code("空载具"), PackageInfoIvtEnum.TASK_POINT_TYPE.code("取货任务"), "", "");
if (ObjectUtils.isEmpty(zxqIvtList)) {
List<BstIvtPackageinfoivt> zxqVehicleList = packageinfoivtService
.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;
}
//按块执行取空任务
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();
task.put("point_code1", zxqIvtList.get(0).getPoint_code());
getPointCode(task, PackageInfoIvtEnum.TASK_TYPE.code("补空(装箱区->管制区)"));
task.put("task_type", 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 {
log.info("装箱区->待检区或管制区补空载具任务正在创建被锁住");
log.info(THIS_CLASS + "装箱区搬空任务正在创建被锁住");
}
} finally {
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.task.dao.SchBaseTask;
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.common.utils.SecurityUtils;
import org.nl.common.utils.TaskUtils;
@@ -183,7 +182,7 @@ public class SendShaftToCacheTask extends AbstractAcsTask {
}
@Override
public JSONObject immediateNotifyAcs(String task_id) {
public JSONObject immediateNotifyAcs(Object task_id) {
try {
Thread.sleep(1000);
} catch (Exception ex) {
@@ -191,7 +190,7 @@ public class SendShaftToCacheTask extends AbstractAcsTask {
}
List<SchBaseTask> taskList = new ArrayList<>();
SchBaseTask baseTask = taskService.getById(task_id);
SchBaseTask baseTask = taskService.getById((String)task_id);
taskList.add(baseTask);
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
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.JSONArray;
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.AcsUtil;
import org.springframework.beans.factory.annotation.Autowired;
@@ -34,12 +37,26 @@ public abstract class AbstractAcsTask {
return addTask();
}
public List<AcsTaskDto> schedule(String taskId) {
return addTask(taskId);
}
public List<AcsTaskDto> schedule(SchBaseTask task) {
return addTask(task);
}
/**
* 添加任务进行下发
*
* @return
*/
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 代表一条任务对象
@@ -107,25 +124,46 @@ public abstract class AbstractAcsTask {
return AcsUtil.notifyAcs("api/wms/task", jsonArray);
}
/**
*
*/
public JSONObject immediateNotifyAcs(String task_id) {
public JSONObject immediateNotifyAcs(Object task_id) {
try {
Thread.sleep(1000);
}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)) {
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);
}
}
}
public JSONObject immediateNotifyAcs(SchBaseTask task,String taskId) {
if (task==null){
throw new BadRequestException("任务下发参数不能为空");
}
List<AcsTaskDto> taskList = this.schedule(task);
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;
}