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