fix: 任务类公共入口与注释
This commit is contained in:
@@ -2,6 +2,7 @@ package org.nl.wms.sch.task_manage;
|
|||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.lang.Assert;
|
import cn.hutool.core.lang.Assert;
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.http.HttpStatus;
|
import cn.hutool.http.HttpStatus;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
@@ -10,15 +11,19 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nl.common.exception.BadRequestException;
|
import org.nl.common.exception.BadRequestException;
|
||||||
|
import org.nl.config.SpringContextHolder;
|
||||||
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
import org.nl.wms.ext.acs.service.WmsToAcsService;
|
||||||
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
|
import org.nl.wms.ext.acs.service.dto.to.wms.AcsResponse;
|
||||||
import org.nl.wms.sch.point.service.ISchBasePointService;
|
import org.nl.wms.sch.point.service.ISchBasePointService;
|
||||||
|
import org.nl.wms.sch.point.service.dao.SchBasePoint;
|
||||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||||
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
import org.nl.wms.sch.task.service.ISchBaseTaskconfigService;
|
||||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||||
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
|
||||||
import org.nl.wms.sch.task_manage.enums.TaskDirectionEnum;
|
import org.nl.wms.sch.task_manage.enums.TaskDirectionEnum;
|
||||||
|
import org.nl.wms.sch.task_manage.enums.WorkOrderStatusEnum;
|
||||||
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
|
||||||
|
import org.nl.wms.util.TaskUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -31,6 +36,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
|
|||||||
* @version 1.0
|
* @version 1.0
|
||||||
* @date 2023年05月16日 16:42
|
* @date 2023年05月16日 16:42
|
||||||
* @desc 任务抽象父类,申请任务的相关率先判断以及生成,接着到子类执行任务的创建,最后统一通过定时任务去下发到ACS
|
* @desc 任务抽象父类,申请任务的相关率先判断以及生成,接着到子类执行任务的创建,最后统一通过定时任务去下发到ACS
|
||||||
|
* <p>模板模式+策略模式,将具体的创建任务交付给具体的子类,能够做到责任拆分,各司其职</p>
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
@@ -102,6 +108,7 @@ public abstract class AbstractTask {
|
|||||||
taskDto.setNext_device_code2(task.getPoint_code4());
|
taskDto.setNext_device_code2(task.getPoint_code4());
|
||||||
taskDto.setVehicle_code(task.getVehicle_code());
|
taskDto.setVehicle_code(task.getVehicle_code());
|
||||||
taskDto.setVehicle_code2(task.getVehicle_code2());
|
taskDto.setVehicle_code2(task.getVehicle_code2());
|
||||||
|
// todo: 如果各类方法对返回参数有不同,可以通过调用子类实现的具体方法来完成赋值,也可以是统一封装到参数值中。
|
||||||
this.setTask(task.getConfig_code(), taskDto);
|
this.setTask(task.getConfig_code(), taskDto);
|
||||||
list.add(taskDto);
|
list.add(taskDto);
|
||||||
}
|
}
|
||||||
@@ -236,6 +243,69 @@ public abstract class AbstractTask {
|
|||||||
* @throws BadRequestException
|
* @throws BadRequestException
|
||||||
*/
|
*/
|
||||||
public void apply(JSONObject param) throws BadRequestException {
|
public void apply(JSONObject param) throws BadRequestException {
|
||||||
|
// 申请任务
|
||||||
|
SchBaseTask task = new SchBaseTask();
|
||||||
|
// 请求点
|
||||||
|
String apply_point_code = param.getString("device_code");
|
||||||
|
String config_code = param.getString("config_code");
|
||||||
|
String requestNo = param.getString("requestNo");
|
||||||
|
String vehicleType = param.getString("vehicle_type");
|
||||||
|
String vehicleCode = TaskUtils.defaultVehicleCode(param.getString("vehicle_code"));
|
||||||
|
AbstractTask bean = SpringContextHolder.getBean(this.getClass());
|
||||||
|
// 1、校验数据
|
||||||
|
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>()
|
||||||
|
.eq(SchBaseTaskconfig::getConfig_code, config_code));
|
||||||
|
Assert.notNull(taskConfig, "找不到配置文件,请确认[" + config_code + "]配置是否存在!");
|
||||||
|
// 最大任务数
|
||||||
|
Integer tcmn = taskConfig.getTask_create_max_num();
|
||||||
|
// 获取执行中的任务
|
||||||
|
List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(
|
||||||
|
taskConfig.getConfig_code(), apply_point_code, taskConfig.getTask_direction());
|
||||||
|
|
||||||
|
Assert.isFalse(unFinishTasksByTaskConfig.size() >= tcmn,
|
||||||
|
apply_point_code + "该点位申请的任务未完成数已超过上限,无法申请任务");
|
||||||
|
// 获取对接位点位对象
|
||||||
|
SchBasePoint pointObj = pointService.getOne(new LambdaQueryWrapper<SchBasePoint>()
|
||||||
|
.eq(SchBasePoint::getPoint_code, apply_point_code));
|
||||||
|
// 判断是否校验工单
|
||||||
|
if (taskConfig.getIs_check_workorder()) {
|
||||||
|
// 校验工单
|
||||||
|
// param.put("workorder_code", workorder.getWorkorder_code());
|
||||||
|
// 设置任务数据
|
||||||
|
}
|
||||||
|
// 校验是否需要自动agv
|
||||||
|
if (!pointObj.getIs_auto()) {
|
||||||
|
// 如果不需要自动,则不创建任务
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 2、创建申请任务
|
||||||
|
task.setAcs_trace_id(requestNo);
|
||||||
|
task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||||
|
task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||||
|
task.setConfig_code(config_code);
|
||||||
|
task.setCreate_mode(GeneralDefinition.ACS_CREATION);
|
||||||
|
task.setVehicle_code(vehicleCode);
|
||||||
|
task.setVehicle_qty(param.getInteger("vehicle_qty"));
|
||||||
|
task.setVehicle_type(vehicleType);
|
||||||
|
task.setTask_status(TaskStatus.APPLY.getCode());
|
||||||
|
task.setWorkshop_code(taskConfig.getWorkshop_code());
|
||||||
|
// 设置起/终点
|
||||||
|
bean.setTaskPoint(taskConfig, task, apply_point_code);
|
||||||
|
task.setRequest_param(JSONObject.toJSONString(param));
|
||||||
|
// 设置创建人信息
|
||||||
|
TaskUtils.setCreateByAcsOrPda(task, param);
|
||||||
|
// 3、判断是否直接找点下发
|
||||||
|
// 立即创建吧组盘放到具体位置,免得重复创建
|
||||||
|
if (taskConfig.getIs_immediate_create()) {
|
||||||
|
bean.createCompletion(task);
|
||||||
|
} else { // 不需要立即创建,需要立马组盘
|
||||||
|
// 设置组盘 - 需要的话由子类自行实现
|
||||||
|
// todo: 如果不需要这种场景,可以换成其他使用场景,目的是由策略角色去完善对此字段赋值
|
||||||
|
task.setGroup_id(bean.setGroupPlate(param));
|
||||||
|
// 创建一条单点任务。
|
||||||
|
taskService.save(task);
|
||||||
|
bean.create();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user