opt: 内包间送到一楼
This commit is contained in:
@@ -174,6 +174,10 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
// 分切机设备
|
||||
String deviceCode = param.getString("point_code");
|
||||
StIvtCutpointivt device = cutpointivtService.getPintByExtCode(deviceCode, false);
|
||||
List<SchBaseTask> tasks = taskService.checkHaveTask(device.getPoint_code());
|
||||
if (tasks.size() > 0) {
|
||||
throw new BadRequestException("分切机" + deviceCode + " 已经有存在的任务");
|
||||
}
|
||||
List<String> qzzNo = Stream.of(device.getUp_qzzno(), device.getDown_qzzno())
|
||||
.filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
|
||||
if (qzzNo.size() == 0) {
|
||||
@@ -183,10 +187,6 @@ public class SlitterPdaServiceImpl implements SlitterPdaService {
|
||||
if (list.size() == 0) {
|
||||
throw new BadRequestException("分切机" + deviceCode + " 的分切计划 " + qzzNo + " 不存在");
|
||||
}
|
||||
List<SchBaseTask> tasks = taskService.checkHaveTask(deviceCode);
|
||||
if (tasks.size() > 0) {
|
||||
throw new BadRequestException("分切机" + deviceCode + " 已经有存在的任务");
|
||||
}
|
||||
List<String> collect = list
|
||||
.stream()
|
||||
.map(PdmBiSlittingproductionplan::getContainer_name)
|
||||
|
||||
@@ -329,5 +329,12 @@ public abstract class AbstractTask {
|
||||
*/
|
||||
public void agvPickUpCompleted(SchBaseTask task) {
|
||||
|
||||
}
|
||||
/**
|
||||
* AGV放货完成上报
|
||||
* @param task 任务
|
||||
*/
|
||||
public void agvReleaseCompleted(SchBaseTask task) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.sch.task_manage.tasks.nbj;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -12,6 +13,7 @@ import org.nl.wms.sch.task_manage.AbstractTask;
|
||||
import org.nl.wms.sch.task_manage.TaskStatus;
|
||||
import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
@@ -54,6 +56,16 @@ public class SubRollDownAGVTask extends AbstractTask {
|
||||
}
|
||||
SchBasePoint zxPoint = zxPoints.get(0);
|
||||
task.setPoint_code2(zxPoint.getPoint_code());
|
||||
// 创建搬运空架子的任务
|
||||
List<SchBasePoint> emptyPoint = pointService.getAllBusinessNotTaskPoint("A1", "A1-ZXZC",
|
||||
"1", "2", null, null);
|
||||
if (emptyPoint.size() > 0) {
|
||||
// 有空架子就是四点任务
|
||||
SchBasePoint point = emptyPoint.get(0);
|
||||
task.setVehicle_code2(point.getVehicle_code());
|
||||
task.setPoint_code3(point.getPoint_code());
|
||||
task.setPoint_code4(task.getPoint_code1());
|
||||
}
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
@@ -67,18 +79,37 @@ public class SubRollDownAGVTask extends AbstractTask {
|
||||
public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
checkTaskOptionStatus(taskObj);
|
||||
JSONObject requestObj = JSONObject.parseObject(taskObj.getRequest_param());
|
||||
// 起点清空(没有取货完成的业务),终点赋值
|
||||
String startPointCode = taskObj.getPoint_code1();
|
||||
// 任务设置071
|
||||
taskObj.setTask_status(TaskStatus.PICK_UP_COMPLETED.getCode());
|
||||
TaskUtils.setUpdateByType(taskObj, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
taskService.updateById(taskObj);
|
||||
// 终点赋值
|
||||
String endPointCode = taskObj.getPoint_code2();
|
||||
SchBasePoint startPoint = pointService.getById(startPointCode);
|
||||
SchBasePoint endPoint = pointService.getById(endPointCode);
|
||||
clearPoint(startPoint, taskFinishedType);
|
||||
endPoint.setPoint_status("3");
|
||||
endPoint.setMaterial_code(requestObj.getString("container_name"));
|
||||
endPoint.setVehicle_code(taskObj.getVehicle_code());
|
||||
setUpdateByType(endPoint, taskFinishedType);
|
||||
pointService.updateById(endPoint);
|
||||
// todo: 创建搬运空架子的任务
|
||||
// 判断是否为4点任务
|
||||
String startPointCode2 = taskObj.getPoint_code3();
|
||||
if (StrUtil.isNotBlank(startPointCode2)) {
|
||||
// 四点任务
|
||||
SchBasePoint startPoint2 = pointService.getById(startPointCode2);
|
||||
clearPoint(startPoint2, taskFinishedType);
|
||||
SchBasePoint endPoint2 = pointService.getById(taskObj.getPoint_code4());
|
||||
endPoint2.setPoint_status("2");
|
||||
endPoint2.setMaterial_code("");
|
||||
endPoint2.setVehicle_code(taskObj.getVehicle_code2());
|
||||
endPoint2.setSource_id("");
|
||||
PointUtils.setUpdateByType(endPoint2, taskFinishedType);
|
||||
pointService.updateById(endPoint2);
|
||||
} else {
|
||||
// 起点清空(没有取货完成的业务),终点赋值
|
||||
String startPointCode = taskObj.getPoint_code1();
|
||||
SchBasePoint startPoint = pointService.getById(startPointCode);
|
||||
clearPoint(startPoint, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
}
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
@@ -87,7 +118,6 @@ public class SubRollDownAGVTask extends AbstractTask {
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) {
|
||||
checkTaskOptionStatus(taskObj);
|
||||
// 取消
|
||||
@@ -97,4 +127,21 @@ public class SubRollDownAGVTask extends AbstractTask {
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void agvPickUpCompleted(SchBaseTask task) {
|
||||
if (TaskStatus.PICK_UP_COMPLETED.getCode().equals(task.getTask_status())) {
|
||||
log.warn("该任务已经执行过取货完成!");
|
||||
return;
|
||||
}
|
||||
// 取货完成
|
||||
// 起点清空(没有取货完成的业务),终点赋值
|
||||
String startPointCode = task.getPoint_code3();
|
||||
SchBasePoint startPoint = pointService.getById(startPointCode);
|
||||
clearPoint(startPoint, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
// 任务设置071
|
||||
task.setTask_status(TaskStatus.PICK_UP_COMPLETED.getCode());
|
||||
TaskUtils.setUpdateByType(task, TaskFinishedTypeEnum.AUTO_ACS);
|
||||
taskService.updateById(task);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.nl.wms.sch.task_manage.tasks.slitter;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@@ -21,14 +22,12 @@ import org.nl.wms.sch.task_manage.core.constant.GeneralDefinition;
|
||||
import org.nl.wms.sch.task_manage.core.enums.TaskFinishedTypeEnum;
|
||||
import org.nl.wms.sch.task_manage.tasks.nbj.SendShaftAGVTask;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
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.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@@ -64,64 +63,54 @@ public class SlitterDownAGVTask extends AbstractTask {
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 分切下料,子卷信息在请求参数中
|
||||
JSONObject requestObj = JSONObject.parseObject(task.getRequest_param());
|
||||
JSONArray container = requestObj.getJSONArray("container");
|
||||
List<String> containerList = container.toJavaList(String.class);
|
||||
// 获取分切计划,最多4个需要出站的任务
|
||||
List<PdmBiSlittingproductionplan> currentPlans = slittingproductionplanService.list(
|
||||
new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||
.in(PdmBiSlittingproductionplan::getContainer_name, containerList)
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete, "0")
|
||||
.eq(PdmBiSlittingproductionplan::getStatus, "05"));
|
||||
if (currentPlans.size() == 0) {
|
||||
throw new BadRequestException("当前子卷已经出卷或者不存在!");
|
||||
}
|
||||
// 获取上轴分切计划和下轴分切计划,各一条
|
||||
PdmBiSlittingproductionplan currentUpPlan = currentPlans.stream()
|
||||
.filter(p -> "1".equals(p.getUp_or_down()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
PdmBiSlittingproductionplan currentDownPlan = currentPlans.stream()
|
||||
.filter(p -> "2".equals(p.getUp_or_down()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
task.setPoint_code1(requestObj.getString("device_code"));
|
||||
// 查找终点,在内包间的区域找个空位.
|
||||
List<BstIvtCutpointivt> areaEmptyNotTaskPoint = bstIvtCutpointivtService.getAreaNotTaskPointByStatus("1",
|
||||
"1", "0", "1");
|
||||
if (areaEmptyNotTaskPoint.size() == 0) {
|
||||
throw new BadRequestException("请求搬运失败,内包间没有可存放位置!");
|
||||
}
|
||||
BstIvtCutpointivt endPoint = areaEmptyNotTaskPoint.get(0);
|
||||
RLock lock = redissonClient.getLock(endPoint.getPoint_code());
|
||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
task.setPoint_code2(endPoint.getPoint_code());
|
||||
// 设置气胀轴
|
||||
task.setVehicle_code(currentUpPlan != null ? currentUpPlan.getQzzno() : "");
|
||||
task.setVehicle_code2(currentDownPlan != null ? currentDownPlan.getQzzno() : "");
|
||||
} else {
|
||||
throw new BadRequestException("系统繁忙,稍后在试!!");
|
||||
taskLock(task.getConfig_code(), () -> {
|
||||
// 分切下料,子卷信息在请求参数中
|
||||
JSONObject requestObj = JSONObject.parseObject(task.getRequest_param());
|
||||
JSONArray container = requestObj.getJSONArray("container");
|
||||
List<String> containerList = container.toJavaList(String.class);
|
||||
// 获取分切计划,最多4个需要出站的任务
|
||||
List<PdmBiSlittingproductionplan> currentPlans = slittingproductionplanService.list(
|
||||
new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||
.in(PdmBiSlittingproductionplan::getContainer_name, containerList)
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete, "0")
|
||||
.eq(PdmBiSlittingproductionplan::getStatus, "05"));
|
||||
if (currentPlans.size() == 0) {
|
||||
throw new BadRequestException("当前子卷已经出卷或者不存在!");
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
// 获取上轴分切计划和下轴分切计划,各一条
|
||||
PdmBiSlittingproductionplan currentUpPlan = currentPlans.stream()
|
||||
.filter(p -> "1".equals(p.getUp_or_down()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
PdmBiSlittingproductionplan currentDownPlan = currentPlans.stream()
|
||||
.filter(p -> "2".equals(p.getUp_or_down()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
task.setPoint_code1(requestObj.getString("device_code"));
|
||||
// 查找终点,在内包间的区域找个空位.
|
||||
List<BstIvtCutpointivt> areaEmptyNotTaskPoint = bstIvtCutpointivtService.getAreaNotTaskPointByStatus("1",
|
||||
"1", "0", "1");
|
||||
if (areaEmptyNotTaskPoint.size() == 0) {
|
||||
throw new BadRequestException("请求搬运失败,内包间没有可存放位置!");
|
||||
}
|
||||
}
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
log.info("任务创建成功:{}", task);
|
||||
// 下来的分切计划修改状态:05 -> 06
|
||||
currentPlans.forEach(plan -> {
|
||||
plan.setStatus("06");
|
||||
updateOptMessageBySlitterPlan(plan);
|
||||
BstIvtCutpointivt endPoint = areaEmptyNotTaskPoint.get(0);
|
||||
task.setPoint_code2(endPoint.getPoint_code());
|
||||
// 设置气胀轴
|
||||
task.setVehicle_code(currentUpPlan != null ? currentUpPlan.getQzzno() : "");
|
||||
task.setVehicle_code2(currentDownPlan != null ? currentDownPlan.getQzzno() : "");
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
log.info("任务创建成功:{}", task);
|
||||
// 下来的分切计划修改状态:05 -> 06
|
||||
currentPlans.forEach(plan -> {
|
||||
plan.setStatus("06");
|
||||
updateOptMessageBySlitterPlan(plan);
|
||||
});
|
||||
slittingproductionplanService.updateBatchById(currentPlans);
|
||||
});
|
||||
slittingproductionplanService.updateBatchById(currentPlans);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -152,6 +141,7 @@ public class SlitterDownAGVTask extends AbstractTask {
|
||||
// 更新分切计划 状态:06 -> 09
|
||||
PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan();
|
||||
p.setStatus("09");
|
||||
p.setEnd_time(DateUtil.now());
|
||||
updateOptMessageBySlitterPlan(p);
|
||||
if (qzzNo.size() > 0) {
|
||||
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||
|
||||
Reference in New Issue
Block a user