fix: 国际化优化、任务管理修改

This commit is contained in:
2024-04-08 11:01:56 +08:00
parent 5c533fff98
commit 47e497cb1e
25 changed files with 591 additions and 222 deletions

View File

@@ -15,13 +15,11 @@ import org.nl.config.SpringContextHolder;
import org.nl.wms.ext.acs.service.WmsToAcsService;
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.dao.SchBasePoint;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
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.SchBaseTaskconfig;
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.util.TaskUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,7 +27,6 @@ import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* @author ldjun
@@ -55,6 +52,7 @@ public abstract class AbstractTask {
/**
* 任务创建
* 根据配置生成任务,如并发控制等
*
* @throws BadRequestException /
*/
protected abstract void create() throws BadRequestException;
@@ -62,9 +60,11 @@ public abstract class AbstractTask {
/**
* 任务创建
* 只会创建完整的任务,创建失败则抛出异常
*
* @param task /
*/
protected void createCompletion(SchBaseTask task){}
protected void createCompletion(SchBaseTask task) {
}
/**
@@ -92,15 +92,9 @@ public abstract class AbstractTask {
//1、获取任务
//2、根据任务配置补全任务
//3、下发
List<AcsTaskDto> list = new CopyOnWriteArrayList<>();
List<AcsTaskDto> list = new ArrayList<>();
for (SchBaseTask task : taskList) {
AcsTaskDto taskDto = new AcsTaskDto();
String responseParam = task.getResponse_param();
if (ObjectUtil.isNotEmpty(responseParam)) {
JSONObject jsonObject = JSONObject.parseObject(responseParam);
taskDto.setDirection(jsonObject.getString("direction"));
taskDto.setPut_device_code(jsonObject.getString("fmj_device"));
}
taskDto.setExt_task_uuid(task.getTask_id());
taskDto.setTask_code(task.getTask_code());
taskDto.setRoute_plan_code("normal");
@@ -110,7 +104,8 @@ public abstract class AbstractTask {
taskDto.setNext_device_code2(task.getPoint_code4());
taskDto.setVehicle_code(task.getVehicle_code());
taskDto.setVehicle_code2(task.getVehicle_code2());
// todo: 如果各类方法对返回参数有不同,可以通过调用子类实现的具体方法来完成赋值,也可以是统一封装到参数值中。
// 如果各类方法对返回参数有不同,可以通过调用子类实现的deliveryBeforeProcessing方法来完成赋值,也可以是统一封装到参数值中。
this.deliveryBeforeProcessing(task, taskDto);
this.setTask(task.getConfig_code(), taskDto);
list.add(taskDto);
}
@@ -135,7 +130,7 @@ public abstract class AbstractTask {
String taskCode = errObj.getString("task_code");
if (taskCode.equals(schBaseTask.getTask_code())) {
// 出错的任务就设置出错信息为备注,不是出错就设置下发
schBaseTask.setTask_status(TaskStatus.CREATED.getCode());
schBaseTask.setTask_status(TaskStatus.START_AND_POINT.getCode());
schBaseTask.setRemark(errObj.getString("message"));
break;
}
@@ -168,8 +163,10 @@ public abstract class AbstractTask {
public void getAllFinishTask() {
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_status, TaskStatus.CREATED.getCode()));
if (ObjectUtil.isEmpty(list)) return;
.eq(SchBaseTask::getTask_status, TaskStatus.START_AND_POINT.getCode()));
if (ObjectUtil.isEmpty(list)) {
return;
}
// 下发
this.renotifyAcs(list);
}
@@ -189,8 +186,9 @@ public abstract class AbstractTask {
/**
* 修改状态
* 以下改为public会出现自动注入类出现问题
*
* @param task_code /
* @param status /
* @param status /
*/
protected abstract void updateStatus(String task_code, TaskStatus status);
@@ -222,7 +220,16 @@ public abstract class AbstractTask {
}
/**
* 强制结束完成任务
* 下发前的处理可以根据任务类进行给acs任务类更新数据
* @param task LMS任务
* @param acsTaskDto ACS任务
*/
public void deliveryBeforeProcessing(SchBaseTask task, AcsTaskDto acsTaskDto) {
}
/**
* 强制结束完成任务
*
* @param task_code 任务标识
* @return
* @discription 强制结束完成任务
@@ -240,67 +247,44 @@ public abstract class AbstractTask {
/**
* 申请任务
*
* @param param
* @throws BadRequestException
* <p>创建task的总入口会根据自定义的子类去执行创建方法。</p>
* @param param 请求任务的参数可以是只确定了单个点也可以是4个点都确定了
* @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.setCreate_mode(ObjectUtil.isNotEmpty(param.getString("create_mode"))
? param.getString("create_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());
task.setProduct_area(param.getString("product_area"));
// 设置起/终点
bean.setTaskPoint(taskConfig, task, apply_point_code);
task.setPoint_code1(param.getString("point_code1"));
task.setPoint_code2(param.getString("point_code2"));
task.setPoint_code3(param.getString("point_code3"));
task.setPoint_code4(param.getString("point_code4"));
task.setRequest_param(JSONObject.toJSONString(param));
// 设置创建人信息
TaskUtils.setCreateByAcsOrPda(task, param);
// 3、判断是否直接找点下发
// 立即创建吧组盘放到具体位置,免得重复创建
if (taskConfig.getIs_immediate_create()) {
if ("1".equals(param.getString("is_immediate_create"))) {
bean.createCompletion(task);
} else { // 不需要立即创建,需要立马组盘
} else {
// 不需要立即创建
// 设置组盘 - 需要的话由子类自行实现
// todo: 如果不需要这种场景,可以换成其他使用场景,目的是由策略角色去完善对此字段赋值
task.setGroup_id(bean.setGroupPlate(param));

View File

@@ -1,4 +1,5 @@
package org.nl.wms.sch.task_manage.task.second_floor_area;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.BooleanUtil;
@@ -17,6 +18,7 @@ import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.nl.wms.storage_manage.ios.enums.IOSEnum;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@@ -76,7 +78,7 @@ public class CallEmpReelTask extends AbstractTask {
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(String task_code, TaskStatus status) {
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq( SchBaseTask::getTask_code,task_code), false);
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq(SchBaseTask::getTask_code, task_code), false);
if (schBaseTask == null) {
throw new BadRequestException("CallEmpReelTask任务更新接口任务号为空");
}
@@ -134,13 +136,13 @@ public class CallEmpReelTask extends AbstractTask {
task.setTask_id(org.nl.common.utils.IdUtil.getStringId());
task.setTask_code(org.nl.common.utils.IdUtil.getStringId());
task.setHandle_class(THIS_CLASS);
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentUsername());
task.setCreate_time(DateUtil.now());
task.setIs_send(isSend ? "1" : "0");
task.setAcs_task_type(StrUtil.isEmpty(task.getAcs_task_type()) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : (task.getAcs_task_type()));
task.setTask_status(StrUtil.isEmpty(task.getTask_status()) ? TaskStatus.START_AND_POINT.getCode() : task.getTask_status());
task.setProduct_area(StrUtil.isEmpty(task.getProduct_area()) ? "A1" : task.getProduct_area());
task.setCreate_id(SecurityUtils.getCurrentUserId());
task.setCreate_name(SecurityUtils.getCurrentUsername());
task.setCreate_time(DateUtil.now());
task.setIs_send(isSend ? "1" : "0");
task.setAcs_task_type(StrUtil.isEmpty(task.getAcs_task_type()) ? PackageInfoIvtEnum.ACS_TASK_TYPE.code("agv任务") : (task.getAcs_task_type()));
task.setTask_status(StrUtil.isEmpty(task.getTask_status()) ? TaskStatus.START_AND_POINT.getCode() : task.getTask_status());
task.setProduct_area(StrUtil.isEmpty(task.getProduct_area()) ? "A1" : task.getProduct_area());
taskService.save(task);
//如果目标点位没有空位先创建不下发
if (isSend) {