|
@ -1,44 +1,47 @@ |
|
|
package org.nl.wms.sch_manage.service.util; |
|
|
package org.nl.wms.sch_manage.service.util; |
|
|
|
|
|
|
|
|
import cn.hutool.core.date.DateUtil; |
|
|
import cn.hutool.core.date.DateUtil; |
|
|
import cn.hutool.core.lang.Assert; |
|
|
|
|
|
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; |
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
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.wms.ext.service.WmsToAcsService; |
|
|
import org.nl.wms.ext.service.util.AcsResponse; |
|
|
import org.nl.wms.ext.service.util.AcsResponse; |
|
|
import org.nl.wms.sch_manage.enums.TaskStatus; |
|
|
import org.nl.wms.sch_manage.enums.TaskStatus; |
|
|
import org.nl.wms.sch_manage.service.ISchBaseTaskService; |
|
|
import org.nl.wms.sch_manage.service.ISchBaseTaskService; |
|
|
import org.nl.wms.sch_manage.service.ISchBaseTaskconfigService; |
|
|
|
|
|
import org.nl.wms.sch_manage.service.dao.SchBaseTask; |
|
|
import org.nl.wms.sch_manage.service.dao.SchBaseTask; |
|
|
import org.nl.wms.sch_manage.service.dao.SchBaseTaskconfig; |
|
|
import org.nl.wms.warehouse_management.enums.IOSConstant; |
|
|
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 java.util.ArrayList; |
|
|
import java.util.ArrayList; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @author Liuxy |
|
|
* @author Liuxy |
|
|
* @version 1.0 |
|
|
|
|
|
* @date 2025年05月19日 |
|
|
* @date 2025年05月19日 |
|
|
* @desc 任务抽象父类,申请任务的相关率先判断以及生成,接着到子类执行任务的创建,最后统一通过定时任务去下发到ACS |
|
|
* @desc 任务抽象父类,申请任务的相关率先判断以及生成,接着到子类执行任务的创建,最后统一通过定时任务去下发到ACS |
|
|
*/ |
|
|
*/ |
|
|
@Slf4j |
|
|
@Slf4j |
|
|
@Component |
|
|
@Component |
|
|
public abstract class AbstractTask { |
|
|
public abstract class AbstractTask { |
|
|
@Autowired |
|
|
|
|
|
private ISchBaseTaskService taskService; |
|
|
/** |
|
|
|
|
|
* 任务服务 |
|
|
|
|
|
*/ |
|
|
@Autowired |
|
|
@Autowired |
|
|
private ISchBaseTaskconfigService taskConfigService; |
|
|
private ISchBaseTaskService taskService; |
|
|
/* @Autowired |
|
|
|
|
|
private ISchBasePointService pointService; |
|
|
/** |
|
|
|
|
|
* wms调用acs接口服务 |
|
|
|
|
|
*/ |
|
|
@Autowired |
|
|
@Autowired |
|
|
private WmsToAcsService wmsToAcsService;*/ |
|
|
private WmsToAcsService wmsToAcsService; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 任务创建 |
|
|
* 任务创建 |
|
@ -48,55 +51,59 @@ public abstract class AbstractTask { |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 下发acs前参数整理 |
|
|
* 下发acs前参数整理 |
|
|
* @param taskId |
|
|
* |
|
|
*/ |
|
|
*/ |
|
|
public abstract AcsTaskDto sendAcsParam(String taskId); |
|
|
public abstract AcsTaskDto sendAcsParam(String taskId); |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @return WCS的任务集合 |
|
|
* 定时任务 |
|
|
* @discription 重新下发给wcs任务 |
|
|
|
|
|
* @author ldjun |
|
|
|
|
|
* @created 2020年6月12日 下午5:52:28 |
|
|
|
|
|
*/ |
|
|
*/ |
|
|
protected AcsResponse renotifyAcs(SchBaseTask task) { |
|
|
public void schedule() { |
|
|
Assert.notNull(task); |
|
|
this.autoTask(); |
|
|
List<SchBaseTask> taskList = new ArrayList<>(); |
|
|
|
|
|
taskList.add(task); |
|
|
|
|
|
return this.renotifyAcs(taskList); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* @return WCS的任务集合 |
|
|
* 查询所有任务并整理好参数 |
|
|
* @discription 重新下发给wcs任务 |
|
|
*/ |
|
|
* @author ldjun |
|
|
public void autoTask() { |
|
|
* @created 2020年6月12日 下午5:52:28 |
|
|
// 查询未执行下发的任务
|
|
|
|
|
|
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>() |
|
|
|
|
|
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO) |
|
|
|
|
|
.eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode())); |
|
|
|
|
|
if (ObjectUtil.isEmpty(taskList)) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
// 整理下发acs参数
|
|
|
|
|
|
List<AcsTaskDto> taskDtoList = new ArrayList<>(); |
|
|
|
|
|
for (SchBaseTask taskDao : taskList) { |
|
|
|
|
|
AcsTaskDto acsTaskDto = this.sendAcsParam(taskDao.getTask_id()); |
|
|
|
|
|
taskDtoList.add(acsTaskDto); |
|
|
|
|
|
} |
|
|
|
|
|
// 下发
|
|
|
|
|
|
this.renotifyAcs(taskDtoList); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 下发当前任务 |
|
|
|
|
|
* @param task_id 任务标识 |
|
|
|
|
|
*/ |
|
|
|
|
|
public AcsResponse sendTaskOne(String task_id) { |
|
|
|
|
|
List<AcsTaskDto> taskDtoList = new ArrayList<>(); |
|
|
|
|
|
taskDtoList.add(this.sendAcsParam(task_id)); |
|
|
|
|
|
return this.renotifyAcs(taskDtoList); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 下发任务 |
|
|
|
|
|
* @param taskDtoList 任务集合 |
|
|
|
|
|
* @return AcsResponse |
|
|
*/ |
|
|
*/ |
|
|
@SneakyThrows |
|
|
@SneakyThrows |
|
|
protected AcsResponse renotifyAcs(List<SchBaseTask> taskList) { |
|
|
protected AcsResponse renotifyAcs(List<AcsTaskDto> taskDtoList) { |
|
|
AcsResponse resultForAcs = AcsResponse.requestOk(); |
|
|
AcsResponse resultForAcs = AcsResponse.requestOk(); |
|
|
//1、获取任务
|
|
|
|
|
|
//2、根据任务配置补全任务
|
|
|
|
|
|
//3、下发
|
|
|
|
|
|
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"); |
|
|
|
|
|
taskDto.setVehicle_code(task.getVehicle_code()); |
|
|
|
|
|
taskDto.setVehicle_code2(task.getVehicle_code2()); |
|
|
|
|
|
this.setTask(task.getConfig_code(), taskDto); |
|
|
|
|
|
list.add(taskDto); |
|
|
|
|
|
} |
|
|
|
|
|
try { |
|
|
try { |
|
|
// 创建下发对象
|
|
|
// 创建下发对象
|
|
|
// TODO resultForAcs = wmsToAcsService.renotifyAcs(list);
|
|
|
resultForAcs = wmsToAcsService.renotifyAcs(taskDtoList); |
|
|
} catch (Exception e) { |
|
|
} catch (Exception e) { |
|
|
log.error("任务下发异常: {}", e.getMessage()); |
|
|
log.error("任务下发异常: {}", e.getMessage()); |
|
|
resultForAcs.setResponseDate(DateUtil.now()); |
|
|
resultForAcs.setResponseDate(DateUtil.now()); |
|
@ -105,7 +112,16 @@ public abstract class AbstractTask { |
|
|
} |
|
|
} |
|
|
// 如果下发完毕,就修改状态
|
|
|
// 如果下发完毕,就修改状态
|
|
|
if (resultForAcs.getCode() == HttpStatus.HTTP_OK) { |
|
|
if (resultForAcs.getCode() == HttpStatus.HTTP_OK) { |
|
|
// 解析
|
|
|
// 查询所有任务
|
|
|
|
|
|
List<SchBaseTask> taskList = taskService.list( |
|
|
|
|
|
new QueryWrapper<SchBaseTask>().lambda() |
|
|
|
|
|
.in(SchBaseTask::getTask_code, taskDtoList.stream() |
|
|
|
|
|
.map(AcsTaskDto::getTask_code) |
|
|
|
|
|
.collect(Collectors.toList()) |
|
|
|
|
|
) |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
// 解析并备注
|
|
|
JSONArray errArr = resultForAcs.getErrArr(); |
|
|
JSONArray errArr = resultForAcs.getErrArr(); |
|
|
for (SchBaseTask schBaseTask : taskList) { |
|
|
for (SchBaseTask schBaseTask : taskList) { |
|
|
schBaseTask.setTask_status(TaskStatus.ISSUED.getCode()); |
|
|
schBaseTask.setTask_status(TaskStatus.ISSUED.getCode()); |
|
@ -126,87 +142,31 @@ public abstract class AbstractTask { |
|
|
return resultForAcs; |
|
|
return resultForAcs; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private AcsTaskDto setTask(String configCode, AcsTaskDto taskDto) { |
|
|
|
|
|
SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper<SchBaseTaskconfig>() |
|
|
|
|
|
.eq(SchBaseTaskconfig::getConfig_code, configCode)); |
|
|
|
|
|
taskDto.setPriority(taskConfig.getPriority()); |
|
|
|
|
|
taskDto.setTask_type(taskConfig.getAcs_task_type()); |
|
|
|
|
|
taskDto.setRoute_plan_code(taskConfig.getRoute_plan_code()); |
|
|
|
|
|
return taskDto; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 定时任务 |
|
|
|
|
|
*/ |
|
|
|
|
|
public void schedule() { |
|
|
|
|
|
this.autoCreate(); |
|
|
|
|
|
// 下发
|
|
|
|
|
|
this.getAllFinishTask(); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void getAllFinishTask() { |
|
|
|
|
|
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>() |
|
|
|
|
|
.eq(SchBaseTask::getTask_status, TaskStatus.CREATED.getCode())); |
|
|
|
|
|
if (ObjectUtil.isEmpty(list)) { |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
// 下发
|
|
|
|
|
|
this.renotifyAcs(list); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void updateTaskStatus(String taskCode, TaskStatus status) { |
|
|
|
|
|
this.updateStatus(taskCode, status); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 自动生成任务 |
|
|
|
|
|
*/ |
|
|
|
|
|
protected void autoCreate() { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 以下改为public会出现自动注入类出现问题 |
|
|
* 以下改为public会出现自动注入类出现问题 |
|
|
* |
|
|
* |
|
|
* @param task_code |
|
|
* @param task_code r任务号 |
|
|
* @param status |
|
|
* @param status 状态码 |
|
|
*/ |
|
|
*/ |
|
|
protected abstract void updateStatus(String task_code, TaskStatus status); |
|
|
protected abstract void updateStatus(String task_code, TaskStatus status); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* 首先组盘在下发任务 |
|
|
|
|
|
* |
|
|
|
|
|
* @param param 具体参数 |
|
|
|
|
|
*/ |
|
|
|
|
|
public String setGroupPlate(JSONObject param) { |
|
|
|
|
|
return ""; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 强制结束完成任务 |
|
|
* 强制结束完成任务 |
|
|
* |
|
|
* @param task_code 任务号 |
|
|
* @param task_code |
|
|
|
|
|
*/ |
|
|
*/ |
|
|
public abstract void forceFinish(String task_code); |
|
|
public abstract void forceFinish(String task_code); |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 取消任务,货物搬回原点 |
|
|
* 取消任务,货物搬回原点 |
|
|
* |
|
|
* @param task_code 任务号 |
|
|
* @param task_code |
|
|
|
|
|
*/ |
|
|
*/ |
|
|
public abstract void cancel(String task_code); |
|
|
public abstract void cancel(String task_code); |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* 申请任务 |
|
|
* 回传mes |
|
|
* |
|
|
* @param task_code 任务号 |
|
|
* @param param |
|
|
|
|
|
* @throws BadRequestException |
|
|
|
|
|
*/ |
|
|
*/ |
|
|
public void apply(JSONObject param) throws BadRequestException { |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public abstract void backMes(String task_code); |
|
|
public abstract void backMes(String task_code); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|