32 changed files with 1246 additions and 449 deletions
@ -0,0 +1,181 @@ |
|||
package org.nl.b_lms.sch.tasks.boxstack; |
|||
|
|||
import cn.hutool.core.date.DateUtil; |
|||
import cn.hutool.core.util.IdUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONArray; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack; |
|||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.mapper.BstIvtBoxstackMapper; |
|||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; |
|||
import org.nl.common.utils.SecurityUtils; |
|||
import org.nl.modules.common.exception.BadRequestException; |
|||
import org.nl.modules.wql.core.bean.WQLObject; |
|||
import org.nl.wms.sch.AcsTaskDto; |
|||
import org.nl.wms.sch.manage.AbstractAcsTask; |
|||
import org.nl.wms.sch.manage.TaskStatusEnum; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
import static org.nl.wms.util.TaskUtil.getRoutePlanCode; |
|||
|
|||
/** |
|||
* 木箱输送线任务类 |
|||
* Created by Lxy on 2024/1/19. |
|||
*/ |
|||
@Service |
|||
public class BoxSSXTask extends AbstractAcsTask { |
|||
|
|||
/** |
|||
* 处理类 |
|||
*/ |
|||
private final String THIS_CLASS = BoxSSXTask.class.getName(); |
|||
|
|||
@Resource |
|||
private BstIvtBoxstackMapper boxstackMapper; |
|||
|
|||
@Override |
|||
public List<AcsTaskDto> addTask() { |
|||
/* |
|||
* 下发给ACS时需要特殊处理 |
|||
*/ |
|||
JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); |
|||
ArrayList<AcsTaskDto> resultList = new ArrayList<>(); |
|||
for (int i = 0; i < arr.size(); i++) { |
|||
JSONObject json = arr.getJSONObject(i); |
|||
//JSONObject params = json.getJSONObject("params");
|
|||
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1); |
|||
AcsTaskDto dto = AcsTaskDto.builder() |
|||
.ext_task_id(json.getString("task_id")) |
|||
.task_code(json.getString("task_code")) |
|||
.task_type(json.getString("acs_task_type")) |
|||
.start_device_code(json.getString("point_code1")) |
|||
.next_device_code(json.getString("point_code2")) |
|||
.route_plan_code(getRoutePlanCode(json.getString("point_code2"))) |
|||
.vehicle_code(json.getString("vehicle_code")) |
|||
.priority(json.getString("priority")) |
|||
.class_type(IOSEnum.ACS_TYPE.code("装箱行架任务")) |
|||
.dtl_type(String.valueOf(dtl_type)) |
|||
.interaction_json(json.getJSONObject("request_param")) |
|||
.remark(json.getString("remark")) |
|||
.product_area(IOSEnum.PRODUCT_AREA.code("BLK")) |
|||
.build(); |
|||
|
|||
|
|||
resultList.add(dto); |
|||
} |
|||
return resultList; |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void updateTaskStatus(JSONObject taskObj, String status) { |
|||
// 任务表
|
|||
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task"); |
|||
|
|||
// 更新任务的参数
|
|||
JSONObject map = new JSONObject(); |
|||
|
|||
/* |
|||
* 1-执行中, 2-完成 ,0-acs取消 |
|||
*/ |
|||
// 执行中
|
|||
if (status.equals(TaskStatusEnum.EXECUTING.getCode())) { |
|||
|
|||
map.put("task_status", TaskStatusEnum.EXECUTING.getCode()); |
|||
} |
|||
// 完成
|
|||
if (status.equals(TaskStatusEnum.FINISHED.getCode())) { |
|||
|
|||
map.put("task_status", TaskStatusEnum.FINISHED.getCode()); |
|||
} |
|||
|
|||
// 取消
|
|||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { |
|||
|
|||
if (taskObj.getIntValue("task_status") > Integer.valueOf(TaskStatusEnum.ISSUE.getCode())) { |
|||
throw new BadRequestException("任务已执行不能取消"); |
|||
} |
|||
|
|||
// 更新任务表删除字段
|
|||
map.put("is_delete", IOSEnum.IS_NOTANDYES.code("是")); |
|||
|
|||
} |
|||
|
|||
map.put("update_optid", SecurityUtils.getCurrentUserId()); |
|||
map.put("update_optname", SecurityUtils.getCurrentNickName()); |
|||
map.put("update_time", DateUtil.now()); |
|||
|
|||
WQLObject.getWQLObject("SCH_BASE_Task").update(map, "task_id = '" + taskObj.getString("task_id") + "'"); |
|||
} |
|||
|
|||
@Override |
|||
public void findStartPoint() { |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public void findNextPoint() { |
|||
|
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public String createTask(JSONObject form) { |
|||
|
|||
if (StrUtil.isBlank(form.getString("task_type"))) { |
|||
throw new BadRequestException("业务类型不能为空!"); |
|||
} |
|||
|
|||
if (StrUtil.isBlank(form.getString("start_device_code"))) { |
|||
throw new BadRequestException("起点不能为空!"); |
|||
} |
|||
|
|||
if (StrUtil.isBlank(form.getString("next_device_code"))) { |
|||
throw new BadRequestException("终点不能为空!"); |
|||
} |
|||
//创建任务点位层数要扣减
|
|||
BstIvtBoxstack bstIvtBoxstackUpdate = boxstackMapper.selectOne(new QueryWrapper<BstIvtBoxstack>().eq("stack_code", form.getString("start_device_code"))); |
|||
BstIvtBoxstack bstIvtBoxstack = new BstIvtBoxstack(); |
|||
bstIvtBoxstack.setCurrent_layer_count(bstIvtBoxstackUpdate.getCurrent_layer_count() - 1); |
|||
JSONObject json = new JSONObject(); |
|||
json.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); |
|||
json.put("task_code", IdUtil.getSnowflake(1, 1).nextId()); |
|||
json.put("task_type", form.getString("task_type")); |
|||
json.put("vehicle_code", form.getString("vehicle_code")); |
|||
json.put("vehicle_code2", form.getString("vehicle_code2")); |
|||
json.put("vehicle_type", form.getString("vehicle_type")); |
|||
json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); |
|||
json.put("task_group_id", form.getLongValue("task_group_id")); |
|||
json.put("point_code1", form.getString("start_device_code")); |
|||
json.put("point_code2", form.getString("next_device_code")); |
|||
json.put("product_area", "BLK"); |
|||
json.put("handle_class", this.getClass().getName()); |
|||
json.put("create_id", SecurityUtils.getCurrentUserId()); |
|||
json.put("create_name", SecurityUtils.getCurrentUsername()); |
|||
json.put("create_time", DateUtil.now()); |
|||
json.put("priority", "1"); |
|||
json.put("acs_task_type", "6"); |
|||
json.put("request_param", form.getString("request_param")); |
|||
WQLObject.getWQLObject("SCH_BASE_Task").insert(json); |
|||
return json.getString("task_id"); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void forceFinish(String task_id) { |
|||
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); |
|||
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); |
|||
} |
|||
|
|||
@Override |
|||
public void cancel(String task_id) { |
|||
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); |
|||
this.updateTaskStatus(taskObj, IOSEnum.ACS_RESULT.code("取消")); |
|||
} |
|||
} |
@ -0,0 +1,215 @@ |
|||
package org.nl.b_lms.sch.tasks.boxstack; |
|||
|
|||
import cn.hutool.core.date.DateUtil; |
|||
import cn.hutool.core.util.IdUtil; |
|||
import cn.hutool.core.util.StrUtil; |
|||
import com.alibaba.fastjson.JSONArray; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
|||
import org.nl.b_lms.bst.ivt.boxstack.service.IBstIvtBoxstackService; |
|||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack; |
|||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.mapper.BstIvtBoxstackMapper; |
|||
import org.nl.b_lms.sch.task.dao.SchBaseTask; |
|||
import org.nl.b_lms.sch.task.service.IschBaseTaskService; |
|||
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; |
|||
import org.nl.common.utils.SecurityUtils; |
|||
import org.nl.modules.common.exception.BadRequestException; |
|||
import org.nl.modules.wql.core.bean.WQLObject; |
|||
import org.nl.wms.sch.AcsTaskDto; |
|||
import org.nl.wms.sch.manage.AbstractAcsTask; |
|||
import org.nl.wms.sch.manage.TaskStatusEnum; |
|||
import org.nl.wms.util.TaskUtil; |
|||
import org.springframework.stereotype.Service; |
|||
import org.springframework.transaction.annotation.Transactional; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
import static org.nl.wms.util.TaskUtil.getRoutePlanCode; |
|||
|
|||
/** |
|||
* 二期木箱行架任务类 |
|||
* Created by Lxy on 2024/1/19. |
|||
*/ |
|||
@Service |
|||
public class InBoxTrussTask extends AbstractAcsTask { |
|||
|
|||
/** |
|||
* 处理类 |
|||
*/ |
|||
private final String THIS_CLASS = InBoxTrussTask.class.getName(); |
|||
|
|||
@Resource |
|||
private BstIvtBoxstackMapper boxstackMapper; |
|||
|
|||
@Resource |
|||
private IschBaseTaskService taskService; |
|||
|
|||
@Resource |
|||
private IBstIvtBoxstackService boxstackService; |
|||
|
|||
@Override |
|||
public List<AcsTaskDto> addTask() { |
|||
/* |
|||
* 下发给ACS时需要特殊处理 |
|||
*/ |
|||
JSONArray arr = WQLObject.getWQLObject("SCH_BASE_Task").query("handle_class = '" + THIS_CLASS + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0); |
|||
ArrayList<AcsTaskDto> resultList = new ArrayList<>(); |
|||
for (int i = 0; i < arr.size(); i++) { |
|||
JSONObject json = arr.getJSONObject(i); |
|||
//JSONObject params = json.getJSONObject("params");
|
|||
char dtl_type = json.getString("task_type").charAt(json.getString("task_type").length() - 1); |
|||
AcsTaskDto dto = AcsTaskDto.builder() |
|||
.ext_task_id(json.getString("task_id")) |
|||
.task_code(json.getString("task_code")) |
|||
.task_type(json.getString("acs_task_type")) |
|||
.start_device_code(json.getString("point_code1")) |
|||
.next_device_code(json.getString("point_code2")) |
|||
.route_plan_code(getRoutePlanCode(json.getString("point_code2"))) |
|||
.vehicle_code(json.getString("vehicle_code")) |
|||
.priority(json.getString("priority")) |
|||
.class_type(IOSEnum.ACS_TYPE.code("装箱行架任务")) |
|||
.dtl_type(String.valueOf(dtl_type)) |
|||
.interaction_json(json.getJSONObject("request_param")) |
|||
.remark(json.getString("remark")) |
|||
.product_area(IOSEnum.PRODUCT_AREA.code("BLK")) |
|||
.build(); |
|||
|
|||
|
|||
resultList.add(dto); |
|||
} |
|||
return resultList; |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void updateTaskStatus(JSONObject taskObj, String status) { |
|||
String now = DateUtil.now(); |
|||
String currentUserId = SecurityUtils.getCurrentUserId(); |
|||
String currentNickName = SecurityUtils.getCurrentNickName(); |
|||
SchBaseTask schBaseTask = taskService.getOne(new LambdaUpdateWrapper<SchBaseTask>().eq(SchBaseTask::getTask_id, taskObj.getString("task_id")), false); |
|||
if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.FINISHED.getCode())) return; |
|||
LambdaUpdateWrapper<SchBaseTask> updateWrapper = new LambdaUpdateWrapper<SchBaseTask>() |
|||
.eq(SchBaseTask::getTask_id, taskObj.getString("task_id")) |
|||
.set(SchBaseTask::getUpdate_optid, currentUserId) |
|||
.set(SchBaseTask::getUpdate_optname, currentNickName) |
|||
.set(SchBaseTask::getUpdate_time, now); |
|||
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { |
|||
// 更新任务状态为执行中
|
|||
if (TaskUtil.checkParams(schBaseTask, THIS_CLASS, TaskStatusEnum.EXECUTING.getCode())) return; |
|||
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.EXECUTING.getCode()); |
|||
} |
|||
// 完成
|
|||
if (status.equals(TaskStatusEnum.FINISHED.getCode())) { |
|||
//更新木箱当前层数和木箱编码
|
|||
BstIvtBoxstack boxstack = boxstackService.getOne(new LambdaQueryWrapper<BstIvtBoxstack>() |
|||
.eq(BstIvtBoxstack::getStack_code, schBaseTask.getPoint_code1())); |
|||
|
|||
String originalString = boxstack.getBox_no(); |
|||
String itemToRemove = schBaseTask.getVehicle_code(); |
|||
|
|||
// 分割字符串,过滤掉指定项,然后重新组合
|
|||
String[] items = originalString.split(","); |
|||
List<String> itemList = new ArrayList<>(); |
|||
for (String item : items) { |
|||
if (!item.equals(itemToRemove)) { |
|||
itemList.add(item); |
|||
} |
|||
} |
|||
String modifiedString = String.join(",", itemList); |
|||
boxstack.setBox_no(modifiedString); |
|||
boxstack.setCurrent_layer_count(boxstack.getCurrent_layer_count() - 1); |
|||
boxstack.setUpdate_id(currentUserId); |
|||
boxstack.setUpdate_name(currentNickName); |
|||
boxstack.setUpdate_time(DateUtil.now()); |
|||
boxstackMapper.updateById(boxstack); |
|||
|
|||
//3.更改任务状态为完成
|
|||
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.FINISHED.getCode()); |
|||
|
|||
} |
|||
|
|||
// 取消
|
|||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) { |
|||
|
|||
if (Integer.parseInt(schBaseTask.getTask_status()) > Integer.parseInt(TaskStatusEnum.ISSUE.getCode())) { |
|||
throw new BadRequestException("任务已执行不能取消"); |
|||
} |
|||
//任务被标记为取消
|
|||
updateWrapper.set(SchBaseTask::getIs_delete, IOSEnum.IS_NOTANDYES.code("是")); |
|||
updateWrapper.set(SchBaseTask::getTask_status, TaskStatusEnum.CANCEL.getCode()); |
|||
updateWrapper.set(SchBaseTask::getRemark, "任务被ACS在:" + schBaseTask.getUpdate_time() + "调用接口强制取消。"); |
|||
|
|||
} |
|||
|
|||
taskService.update(null, updateWrapper); |
|||
} |
|||
|
|||
@Override |
|||
public void findStartPoint() { |
|||
|
|||
} |
|||
|
|||
@Override |
|||
public void findNextPoint() { |
|||
|
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public String createTask(JSONObject form) { |
|||
|
|||
if (StrUtil.isBlank(form.getString("task_type"))) { |
|||
throw new BadRequestException("业务类型不能为空!"); |
|||
} |
|||
|
|||
if (StrUtil.isBlank(form.getString("start_device_code"))) { |
|||
throw new BadRequestException("起点不能为空!"); |
|||
} |
|||
|
|||
if (StrUtil.isBlank(form.getString("next_device_code"))) { |
|||
throw new BadRequestException("终点不能为空!"); |
|||
} |
|||
//创建任务点位层数要扣减
|
|||
BstIvtBoxstack bstIvtBoxstackUpdate = boxstackMapper.selectOne(new QueryWrapper<BstIvtBoxstack>().eq("stack_code", form.getString("start_device_code"))); |
|||
BstIvtBoxstack bstIvtBoxstack = new BstIvtBoxstack(); |
|||
bstIvtBoxstack.setCurrent_layer_count(bstIvtBoxstackUpdate.getCurrent_layer_count() - 1); |
|||
JSONObject json = new JSONObject(); |
|||
json.put("task_id", IdUtil.getSnowflake(1, 1).nextId()); |
|||
json.put("task_code", IdUtil.getSnowflake(1, 1).nextId()); |
|||
json.put("task_type", form.getString("task_type")); |
|||
json.put("vehicle_code", form.getString("vehicle_code")); |
|||
json.put("vehicle_code2", form.getString("vehicle_code2")); |
|||
json.put("vehicle_type", form.getString("vehicle_type")); |
|||
json.put("task_status", TaskStatusEnum.START_AND_POINT.getCode()); |
|||
json.put("task_group_id", form.getLongValue("task_group_id")); |
|||
json.put("point_code1", form.getString("start_device_code")); |
|||
json.put("point_code2", form.getString("next_device_code")); |
|||
json.put("product_area", "BLK"); |
|||
json.put("handle_class", this.getClass().getName()); |
|||
json.put("create_id", SecurityUtils.getCurrentUserId()); |
|||
json.put("create_name", SecurityUtils.getCurrentUsername()); |
|||
json.put("create_time", DateUtil.now()); |
|||
json.put("priority", "1"); |
|||
json.put("acs_task_type", "6"); |
|||
json.put("request_param", form.getString("request_param")); |
|||
WQLObject.getWQLObject("SCH_BASE_Task").insert(json); |
|||
return json.getString("task_id"); |
|||
} |
|||
|
|||
@Override |
|||
@Transactional(rollbackFor = Exception.class) |
|||
public void forceFinish(String task_id) { |
|||
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); |
|||
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); |
|||
} |
|||
|
|||
@Override |
|||
public void cancel(String task_id) { |
|||
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); |
|||
this.updateTaskStatus(taskObj, IOSEnum.ACS_RESULT.code("取消")); |
|||
} |
|||
} |
@ -0,0 +1,121 @@ |
|||
package org.nl.b_lms.sch.tasks.boxstack.auto; |
|||
|
|||
import cn.hutool.core.collection.CollUtil; |
|||
import cn.hutool.core.collection.CollectionUtil; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
|||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|||
import groovyjarjarpicocli.CommandLine; |
|||
import lombok.RequiredArgsConstructor; |
|||
import lombok.SneakyThrows; |
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.nl.b_lms.bst.ivt.boxstack.enums.BoxStackEnum; |
|||
import org.nl.b_lms.bst.ivt.boxstack.service.IBstIvtBoxstackService; |
|||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.BstIvtBoxstack; |
|||
import org.nl.b_lms.bst.ivt.boxstack.service.dao.mapper.BstIvtBoxstackMapper; |
|||
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.boxstack.MxMoveTask; |
|||
import org.nl.common.utils.IdUtil; |
|||
import org.nl.wms.sch.manage.TaskStatusEnum; |
|||
import org.redisson.api.RLock; |
|||
import org.redisson.api.RedissonClient; |
|||
import org.springframework.stereotype.Component; |
|||
|
|||
import javax.annotation.Resource; |
|||
import java.util.*; |
|||
import java.util.concurrent.TimeUnit; |
|||
import java.util.stream.Collectors; |
|||
|
|||
|
|||
/** |
|||
* 自动将木箱从缓存区到装箱位 |
|||
*/ |
|||
@Slf4j |
|||
@Component |
|||
@RequiredArgsConstructor |
|||
public class AutoMxZxTask { |
|||
|
|||
@Resource |
|||
private IschBaseTaskService taskService; |
|||
private final String THIS_CLASS = AutoMxZxTask.class.getName(); |
|||
@Resource |
|||
private RedissonClient redissonClient; |
|||
@Resource |
|||
private MxMoveTask mxMoveTask; |
|||
@Resource |
|||
private IBstIvtBoxstackService boxstackService; |
|||
|
|||
@Resource |
|||
private BstIvtBoxstackMapper boxstackMapper; |
|||
|
|||
//缓存区->装箱位agv自动搬运任务
|
|||
public void run() { |
|||
try { |
|||
this.sendMxMove(); |
|||
} catch (Exception ex) { |
|||
log.error(ex.getMessage()); |
|||
} |
|||
} |
|||
|
|||
|
|||
@SneakyThrows |
|||
public void sendMxMove() { |
|||
log.info(THIS_CLASS + "-根据装箱计划木箱库移库定时任务开始执行扫描。"); |
|||
RLock lock = redissonClient.getLock("boxMove"); |
|||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); |
|||
try { |
|||
if (tryLock) { |
|||
//查找木箱转运agv任务
|
|||
List<SchBaseTask> taskList = taskService.list(new QueryWrapper<SchBaseTask>() |
|||
.eq("task_type", BoxStackEnum.TASK_TYPE.code("木箱缓存区到对接位")) |
|||
.eq("task_status",TaskStatusEnum.SURE_END.getCode()) |
|||
.orderByDesc("create_time","sort_seq")); |
|||
if (CollectionUtil.isEmpty(taskList)){ |
|||
return; |
|||
} |
|||
//确定终点,有位置生成agv任务 ,无位置生成移库任务
|
|||
List<BstIvtBoxstack> bstIvtBoxstacks = boxstackMapper.selectAndNoTask( BoxStackEnum.POINT_STATUS.code("对接区")); |
|||
if (CollectionUtil.isEmpty(bstIvtBoxstacks)){ |
|||
//获取对接区没有任务的对接位
|
|||
BstIvtBoxstack bstIvtBoxstack = new BstIvtBoxstack(); |
|||
bstIvtBoxstack.setPoint_status(BoxStackEnum.POINT_STATUS.code("对接区")); |
|||
List<BstIvtBoxstack> bstIvtBoxstackDJList = boxstackMapper.selectDJAndNoTask(bstIvtBoxstack); |
|||
if (CollectionUtil.isEmpty(bstIvtBoxstackDJList)){ |
|||
log.error("对接区有行架任务执行,需要等待执行完"); |
|||
return; |
|||
} |
|||
BstIvtBoxstack bstIvtBoxstackMove = bstIvtBoxstackDJList.get(0); |
|||
List<BstIvtBoxstack> bstIvtBoxstackHCList = boxstackMapper.selectHCAndNoTask(bstIvtBoxstack); |
|||
if (CollUtil.isEmpty(bstIvtBoxstackHCList)){ |
|||
log.error("缓存区无可用位置"); |
|||
return; |
|||
} |
|||
//对接位到缓存位
|
|||
MxMoveTask mxMoveDJtoHCTask = new MxMoveTask(); |
|||
JSONObject taskParam = new JSONObject(); |
|||
taskParam.put("task_type", BoxStackEnum.TASK_TYPE.code("木箱对接位到缓存区")); |
|||
taskParam.put("start_device_code", bstIvtBoxstackMove.getStack_code()); |
|||
taskParam.put("next_device_code", bstIvtBoxstackHCList.get(0).getStack_code()); |
|||
taskParam.put("material_code",bstIvtBoxstackMove.getBox_spec()); |
|||
taskParam.put("task_status", TaskStatusEnum.SURE_END.getCode()); |
|||
taskParam.put("is_send", "1"); |
|||
mxMoveDJtoHCTask.createTask(taskParam); |
|||
} else { |
|||
//下发缓存位到对接位agv任务
|
|||
SchBaseTask schBaseTask = taskList.get(0); |
|||
schBaseTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode()); |
|||
schBaseTask.setPoint_code2(bstIvtBoxstacks.get(0).getStack_code()); |
|||
taskService.updateById(schBaseTask); |
|||
} |
|||
} else { |
|||
log.info("木箱移库自动搬运任务正在创建被锁住。"); |
|||
} |
|||
} finally { |
|||
if (lock.isLocked() && lock.isHeldByCurrentThread()) { |
|||
lock.unlock(); |
|||
} |
|||
} |
|||
|
|||
} |
|||
} |
Loading…
Reference in new issue