feat: 添加锁
This commit is contained in:
@@ -58,7 +58,7 @@ public class SysCodeRuleServiceImpl extends ServiceImpl<SysCodeRuleMapper, SysCo
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
|
||||
public String codeDemo(Map form) {
|
||||
String code = (String) form.get("code");
|
||||
String id = codeRuleMapper.selectOne(new LambdaQueryWrapper<SysCodeRule>().eq(SysCodeRule::getCode, code)).getId();
|
||||
|
||||
@@ -227,7 +227,7 @@ public class RawFoilPdaServiceImpl implements RawFoilPdaService {
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.RAW_READY.getTag());
|
||||
log.info("手持生箔准备就绪, {}", param);
|
||||
// param: point_code
|
||||
String pointCode = param.getString("point_code");
|
||||
String pointCode = param.getString("point_code") + "_M";
|
||||
// 将工单设置确认下卷(如果是空轴任务就不用),再写信号给ACS
|
||||
// 1、获取对应的任务
|
||||
SchBaseTask task = taskService.getTaskByPointCodeX(null, pointCode, null, null);
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package org.nl.wms.pda.st.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
@@ -9,7 +8,6 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.config.lucene.TagNameEnum;
|
||||
import org.nl.wms.pda.st.service.NbjPdaService;
|
||||
import org.nl.wms.pdm.bi.dao.PdmBiSlittingproductionplan;
|
||||
@@ -25,9 +23,7 @@ import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
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.PdaSendShaftAGVTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.nbj.SendShaftAGVTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.nbj.SubRollDownAGVTask;
|
||||
import org.nl.wms.sch.task_manage.tasks.other.PointToPointAGVTask;
|
||||
import org.nl.wms.util.PointUtils;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
import org.slf4j.MDC;
|
||||
@@ -68,8 +64,6 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
@Autowired
|
||||
private IBstIvtCutpointivtService bcutpointivtService;
|
||||
@Autowired
|
||||
private PointToPointAGVTask pointToPointAGVTask;
|
||||
@Autowired
|
||||
private PdaSendShaftAGVTask pdaSendShaftAGVTask;
|
||||
@Override
|
||||
public JSONObject changeLiftStatus(JSONObject param) {
|
||||
@@ -122,7 +116,7 @@ public class NbjPdaServiceImpl implements NbjPdaService {
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject doSubVolumeDown(JSONObject param) {
|
||||
MDC.put(GeneralDefinition.MDC_KEY, TagNameEnum.SUB_ROLL_DOWN.getTag());
|
||||
log.info("手持子卷下线,送到货梯 - {}", param);
|
||||
log.info("手持子卷下线,送到一楼 - {}", param);
|
||||
// point_code, vehicle_code, container_name
|
||||
String pointCode = param.getString("point_code");
|
||||
String containerName = param.getString("container_name");
|
||||
|
||||
@@ -322,4 +322,12 @@ public abstract class AbstractTask {
|
||||
bean.create();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* AGV取货完成上报
|
||||
* @param task 任务
|
||||
*/
|
||||
public void agvPickUpCompleted(SchBaseTask task) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,19 +9,7 @@ package org.nl.wms.sch.task_manage;
|
||||
* @since 2023-11-16
|
||||
*/
|
||||
public enum TaskStatus {
|
||||
// APPLY("1", "申请", "申请"),
|
||||
// // 创建完成
|
||||
// CREATED("2", "创建完成", "创建完成"),
|
||||
// // 下发
|
||||
// ISSUED("3", "下发", "下发"),
|
||||
// // 执行中
|
||||
// EXECUTING("4", "执行中", "执行中"),
|
||||
// // 完成
|
||||
// FINISHED("5", "完成", "完成"),
|
||||
// // 已取消
|
||||
// CANCELED("6", "已取消", "已取消"),
|
||||
// // 未完成
|
||||
// UNFINISHED("7", "未完成", "未完成");
|
||||
// 任务状态
|
||||
APPLY("00", "申请", "申请"),
|
||||
|
||||
CREATED("01", "生成", "生成"),
|
||||
@@ -31,6 +19,7 @@ public enum TaskStatus {
|
||||
ISSUE("05", "下发", "下发"),
|
||||
EXECUTING("06", "执行中", "执行中"),
|
||||
FINISHED("07", "完成", "完成"),
|
||||
PICK_UP_COMPLETED("071", "取货完成,执行中", "acs请求取货完成后修改的任务状态"),
|
||||
CANCELED("08", "已取消", "已取消"),
|
||||
// 未完成
|
||||
UNFINISHED("09", "未完成", "未完成");
|
||||
|
||||
@@ -10,6 +10,7 @@ import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
|
||||
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
|
||||
import org.nl.wms.sch.task.service.ISchBaseTaskService;
|
||||
import org.nl.wms.sch.task.service.dao.SchBaseTask;
|
||||
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.service.BakingOperationService;
|
||||
import org.nl.wms.sch.task_manage.tasks.hot.InHotTrussTask;
|
||||
@@ -17,6 +18,7 @@ import org.nl.wms.sch.task_manage.tasks.hot.OutHotTrussTask;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -37,6 +39,7 @@ public class BakingOperationServiceImpl implements BakingOperationService {
|
||||
@Autowired
|
||||
private InHotTrussTask inHotTrussTask;
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject acsRequestOutHotTask(JSONObject param) {
|
||||
log.info("acs请求出烘箱:{}", param);
|
||||
// device_code
|
||||
@@ -63,6 +66,9 @@ public class BakingOperationServiceImpl implements BakingOperationService {
|
||||
String taskCode = param.getString("task_code");
|
||||
Assert.notBlank(taskCode, "任务编码不能为空!");
|
||||
SchBaseTask taskObj = taskService.getByCode(taskCode);
|
||||
if (ObjectUtil.isEmpty(taskObj)) {
|
||||
throw new BadRequestException("任务不存在");
|
||||
}
|
||||
JSONObject taskParam = new JSONObject();
|
||||
String requestParam = taskObj.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
|
||||
@@ -3,8 +3,8 @@ package org.nl.wms.sch.task_manage.tasks.hot;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt;
|
||||
import org.nl.wms.pdm.ivt.hot.service.IstIvtHotpointivtService;
|
||||
import org.nl.wms.pdm.ivt.hot.service.dao.StIvtHotpointivt;
|
||||
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;
|
||||
@@ -13,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.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -47,26 +48,28 @@ public class OutHotTrussTask extends AbstractTask {
|
||||
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 从烘箱暂存位找一个空位
|
||||
List<SchBasePoint> hotDjwList = pointService.getHotNotTaskPoint("A1", "A1-HXZC",
|
||||
"4", "1");
|
||||
if (hotDjwList.size() == 0) {
|
||||
throw new BadRequestException("烘箱烘烤完毕的暂存位不够!");
|
||||
}
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String startPoint = task.getPoint_code1();
|
||||
StIvtHotpointivt hotPoint = hotpointivtService.getPointByCode(startPoint, false);
|
||||
requestObj.put("workorder_id", hotPoint.getWorkorder_id());
|
||||
SchBasePoint point = hotDjwList.get(0);
|
||||
task.setVehicle_code(hotPoint.getFull_vehicle_code());
|
||||
task.setPoint_code2(point.getPoint_code());
|
||||
task.setRequest_param(JSONObject.toJSONString(requestObj));
|
||||
// 保存任务参数
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
TaskUtils.taskLock("A1-HXZC", () -> {
|
||||
// 从烘箱暂存位找一个空位
|
||||
List<SchBasePoint> hotDjwList = pointService.getHotNotTaskPoint("A1", "A1-HXZC",
|
||||
"4", "1");
|
||||
if (hotDjwList.size() == 0) {
|
||||
throw new BadRequestException("烘箱烘烤完毕的暂存位不够!");
|
||||
}
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String startPoint = task.getPoint_code1();
|
||||
StIvtHotpointivt hotPoint = hotpointivtService.getPointByCode(startPoint, false);
|
||||
requestObj.put("workorder_id", hotPoint.getWorkorder_id());
|
||||
SchBasePoint point = hotDjwList.get(0);
|
||||
task.setVehicle_code(hotPoint.getFull_vehicle_code());
|
||||
task.setPoint_code2(point.getPoint_code());
|
||||
task.setRequest_param(JSONObject.toJSONString(requestObj));
|
||||
// 保存任务参数
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -46,7 +46,7 @@ public class SubRollDownAGVTask extends AbstractTask {
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// update: 查找空位没任务的货梯 -> 查找一楼暂存位空位
|
||||
TaskUtils.createTask("A1-ZXZC", () -> {
|
||||
TaskUtils.taskLock("A1-ZXZC", () -> {
|
||||
List<SchBasePoint> zxPoints = pointService.getAllBusinessNotTaskPoint("A1", "A1-ZXZC",
|
||||
"1", "1", null, null);
|
||||
if (zxPoints.size() == 0) {
|
||||
@@ -78,6 +78,7 @@ public class SubRollDownAGVTask extends AbstractTask {
|
||||
endPoint.setVehicle_code(taskObj.getVehicle_code());
|
||||
setUpdateByType(endPoint, taskFinishedType);
|
||||
pointService.updateById(endPoint);
|
||||
// todo: 创建搬运空架子的任务
|
||||
// 任务完成
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
|
||||
@@ -2,7 +2,6 @@ package org.nl.wms.sch.task_manage.tasks.raw;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
@@ -16,18 +15,14 @@ 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.sch.task_manage.tasks.hot.InHotTrussTask;
|
||||
import org.nl.wms.util.TaskUtils;
|
||||
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.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
|
||||
import static org.nl.wms.util.TaskUtils.setUpdateByPC;
|
||||
@@ -57,50 +52,40 @@ public class RawDownAGVTask extends AbstractTask {
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String flag = requestObj.getString("is_flag");
|
||||
// 生箔位置
|
||||
String deviceCode = requestObj.getString("device_code");
|
||||
// 收卷辊库出口
|
||||
String startPointCode = requestObj.getString("start_point_code");
|
||||
RLock lock = redissonClient.getLock(HX_REGION);
|
||||
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
// 查找烘箱对接位可用的位置(没货、没任务、没禁用)
|
||||
List<SchBasePoint> hxPoints = pointService.getHotNotTaskPoint("A1", HX_REGION,
|
||||
"1", "1");
|
||||
if (hxPoints.size() == 0) {
|
||||
throw new BadRequestException("烘箱没有可以用的对接位!");
|
||||
}
|
||||
SchBasePoint hxPoint = hxPoints.get(0);
|
||||
if ("1".equals(flag)) {
|
||||
// 创建四点任务:先去收卷辊出口在到生箔位,在从生箔到烘箱对接位
|
||||
task.setPoint_code1(startPointCode);
|
||||
task.setPoint_code2(deviceCode + "_K");
|
||||
task.setPoint_code3(deviceCode + "_M");
|
||||
task.setPoint_code4(hxPoint.getPoint_code());
|
||||
} else {
|
||||
// 创建两点任务: 搬运到烘箱位置
|
||||
task.setPoint_code1(deviceCode + "_M");
|
||||
task.setPoint_code2(hxPoint.getPoint_code());
|
||||
}
|
||||
// 保存任务参数
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
TaskUtils.taskLock(HX_REGION, () -> {
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String flag = requestObj.getString("is_flag");
|
||||
// 生箔位置
|
||||
String deviceCode = requestObj.getString("device_code");
|
||||
// 收卷辊库出口
|
||||
String startPointCode = requestObj.getString("start_point_code");
|
||||
// 查找烘箱对接位可用的位置(没货、没任务、没禁用)
|
||||
List<SchBasePoint> hxPoints = pointService.getHotNotTaskPoint("A1", HX_REGION,
|
||||
"1", "1");
|
||||
if (hxPoints.size() == 0) {
|
||||
throw new BadRequestException("烘箱没有可以用的对接位!");
|
||||
}
|
||||
SchBasePoint hxPoint = hxPoints.get(0);
|
||||
if ("1".equals(flag)) {
|
||||
// 创建四点任务:先去收卷辊出口在到生箔位,在从生箔到烘箱对接位
|
||||
task.setPoint_code1(startPointCode);
|
||||
task.setPoint_code2(deviceCode + "_K");
|
||||
task.setPoint_code3(deviceCode + "_M");
|
||||
task.setPoint_code4(hxPoint.getPoint_code());
|
||||
} else {
|
||||
throw new BadRequestException("系统繁忙,稍后再试!");
|
||||
// 创建两点任务: 搬运到烘箱位置
|
||||
task.setPoint_code1(deviceCode + "_M");
|
||||
task.setPoint_code2(hxPoint.getPoint_code());
|
||||
}
|
||||
} finally {
|
||||
if (tryLock) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
// 保存任务参数
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,9 +17,8 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.nl.wms.util.TaskUtils.checkTaskOptionStatus;
|
||||
import static org.nl.wms.util.TaskUtils.setUpdateByPC;
|
||||
import static org.nl.wms.util.PointUtils.setUpdateByType;
|
||||
import static org.nl.wms.util.TaskUtils.*;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
@@ -30,6 +29,7 @@ import static org.nl.wms.util.PointUtils.setUpdateByType;
|
||||
@Component(value = "SlitterSendRollTrussTask")
|
||||
public class SlitterSendRollTrussTask extends AbstractTask {
|
||||
private final String THIS_CLASS = SlitterSendRollTrussTask.class.getName();
|
||||
private final String SJG_REGION = "A1-SJGK";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
@@ -43,19 +43,21 @@ public class SlitterSendRollTrussTask extends AbstractTask {
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 起点一样不记录,直接创建入库任务
|
||||
// 查找空位终点即可
|
||||
List<SchBasePoint> allSjgkPoints = pointService.getAllBusinessNotTaskPoint("A1",
|
||||
"A1-SJGK", "3", "1", null, null);
|
||||
if (allSjgkPoints.size() == 0) {
|
||||
throw new BadRequestException("收卷辊不存在空位!");
|
||||
}
|
||||
SchBasePoint endPoint = allSjgkPoints.get(0);
|
||||
task.setPoint_code2(endPoint.getPoint_code());
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
log.info("任务创建成功:{}", task);
|
||||
taskLock(SJG_REGION, () -> {
|
||||
List<SchBasePoint> allSjgkPoints = pointService.getAllBusinessNotTaskPoint("A1",
|
||||
SJG_REGION, "3", "1", null, null);
|
||||
if (allSjgkPoints.size() == 0) {
|
||||
throw new BadRequestException("收卷辊不存在空位!");
|
||||
}
|
||||
SchBasePoint endPoint = allSjgkPoints.get(0);
|
||||
task.setPoint_code2(endPoint.getPoint_code());
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
log.info("任务创建成功:{}", task);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -3,8 +3,10 @@ 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.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.common.exception.BadRequestException;
|
||||
import org.nl.common.utils.SecurityUtils;
|
||||
import org.nl.wms.pdm.bi.dao.PdmBiRawfoilworkorder;
|
||||
import org.nl.wms.pdm.bi.service.IpdmBiRawfoilworkorderService;
|
||||
import org.nl.wms.pdm.ivt.cut.service.dao.StIvtCutpointivt;
|
||||
@@ -52,40 +54,39 @@ public class SlitterUpAGVTask extends AbstractTask {
|
||||
|
||||
@Override
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
TaskUtils.createTask("A1-SJGK", () -> {
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String isFlag = requestObj.getString("is_flag");
|
||||
// 分切上料满料对接位
|
||||
String cutPointCode = requestObj.getString("cut_point");
|
||||
// 烘箱暂存对接位
|
||||
String deviceCode = requestObj.getString("device_code");
|
||||
StIvtCutpointivt cutPoint = cutpointivtService.getByFullCode(cutPointCode, false);
|
||||
if ("0".equals(isFlag)) {
|
||||
// 两点任务
|
||||
task.setPoint_code1(deviceCode);
|
||||
task.setPoint_code2(cutPoint.getFull_point_code());
|
||||
} else {
|
||||
// 收卷辊的入库不做校验
|
||||
List<SchBasePoint> sjgPoints = pointService.getPointByConditions("A1", "A1-SJGK",
|
||||
"1", null, null, false);
|
||||
if (sjgPoints.size() == 0) {
|
||||
throw new BadRequestException("收卷辊库找不到入口!");
|
||||
}
|
||||
SchBasePoint sjgPoint = sjgPoints.get(0);
|
||||
// 四点任务
|
||||
task.setPoint_code1(deviceCode);
|
||||
task.setPoint_code2(cutPoint.getFull_point_code());
|
||||
task.setPoint_code3(cutPoint.getEmpty_point_code());
|
||||
task.setPoint_code4(sjgPoint.getPoint_code());
|
||||
// 收卷辊不需要校验点位,因此无需加锁
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String isFlag = requestObj.getString("is_flag");
|
||||
// 分切上料满料对接位
|
||||
String cutPointCode = requestObj.getString("cut_point");
|
||||
// 烘箱暂存对接位
|
||||
String deviceCode = requestObj.getString("device_code");
|
||||
StIvtCutpointivt cutPoint = cutpointivtService.getByFullCode(cutPointCode, false);
|
||||
if ("0".equals(isFlag)) {
|
||||
// 两点任务
|
||||
task.setPoint_code1(deviceCode);
|
||||
task.setPoint_code2(cutPoint.getFull_point_code());
|
||||
} else {
|
||||
// 收卷辊的入库不做校验
|
||||
List<SchBasePoint> sjgPoints = pointService.getPointByConditions("A1", "A1-SJGK",
|
||||
"1", null, null, false);
|
||||
if (sjgPoints.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);
|
||||
});
|
||||
SchBasePoint sjgPoint = sjgPoints.get(0);
|
||||
// 四点任务
|
||||
task.setPoint_code1(deviceCode);
|
||||
task.setPoint_code2(cutPoint.getFull_point_code());
|
||||
task.setPoint_code3(cutPoint.getEmpty_point_code());
|
||||
task.setPoint_code4(sjgPoint.getPoint_code());
|
||||
}
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
log.info("任务创建成功:{}", task);
|
||||
|
||||
}
|
||||
|
||||
@@ -141,4 +142,16 @@ public class SlitterUpAGVTask extends AbstractTask {
|
||||
TaskUtils.setUpdateByType(taskObj, taskFinishedType);
|
||||
taskService.updateById(taskObj);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void agvPickUpCompleted(SchBaseTask task) {
|
||||
LambdaUpdateWrapper<SchBaseTask> lam = new LambdaUpdateWrapper<>();
|
||||
lam.set(SchBaseTask::getTask_status, TaskStatus.PICK_UP_COMPLETED.getCode())
|
||||
.set(SchBaseTask::getUpdate_id, SecurityUtils.getCurrentUserId())
|
||||
.set(SchBaseTask::getUpdate_name, SecurityUtils.getCurrentNickName())
|
||||
.set(SchBaseTask::getUpdate_time, DateUtil.now())
|
||||
.eq(SchBaseTask::getTask_code, task.getTask_code());
|
||||
boolean update = taskService.update(lam);
|
||||
log.info("任务[{}]取货完成执行{}", task.getTask_code(), update);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,15 +15,12 @@ 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.TaskUtils;
|
||||
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.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.nl.wms.util.PointUtils.clearPoint;
|
||||
import static org.nl.wms.util.TaskUtils.*;
|
||||
@@ -37,6 +34,7 @@ import static org.nl.wms.util.TaskUtils.*;
|
||||
@Component(value = "SlitterUpTrussTask")
|
||||
public class SlitterUpTrussTask extends AbstractTask {
|
||||
private final String THIS_CLASS = SlitterUpTrussTask.class.getName();
|
||||
private final static String HX_REGION = "A1-HXZC";
|
||||
@Autowired
|
||||
private ISchBasePointService pointService;
|
||||
@Autowired
|
||||
@@ -54,38 +52,28 @@ public class SlitterUpTrussTask extends AbstractTask {
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
|
||||
public void createCompletion(SchBaseTask task) {
|
||||
// 桁架任务,到对接位
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String pointCode = requestObj.getString("zc_point");
|
||||
RLock lock = redissonClient.getLock("A1-HXZC");
|
||||
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
|
||||
try {
|
||||
if (tryLock) {
|
||||
// 终点为出口
|
||||
List<SchBasePoint> endPoints = pointService.getHotNotTaskPoint("A1", "A1-HXZC",
|
||||
"1", "1");
|
||||
if (endPoints.size() == 0) {
|
||||
throw new BadRequestException("烘箱没有可以用的对接位!");
|
||||
}
|
||||
SchBasePoint point = endPoints.get(0);
|
||||
task.setPoint_code1(pointCode);
|
||||
task.setPoint_code2(point.getPoint_code());
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
log.info("任务创建成功:{}", task);
|
||||
TaskUtils.taskLock(HX_REGION, () -> {
|
||||
// 桁架任务,到对接位
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
String pointCode = requestObj.getString("zc_point");
|
||||
// 终点为出口
|
||||
List<SchBasePoint> endPoints = pointService.getHotNotTaskPoint("A1", HX_REGION,
|
||||
"1", "1");
|
||||
if (endPoints.size() == 0) {
|
||||
throw new BadRequestException("烘箱没有可以用的对接位!");
|
||||
}
|
||||
} finally {
|
||||
if (lock.isHeldByCurrentThread() && lock.isLocked()) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
SchBasePoint point = endPoints.get(0);
|
||||
task.setPoint_code1(pointCode);
|
||||
task.setPoint_code2(point.getPoint_code());
|
||||
// 创建任务
|
||||
task.setHandle_class(THIS_CLASS);
|
||||
task.setTask_status(TaskStatus.START_AND_POINT.getCode());
|
||||
setUpdateByPC(task);
|
||||
taskService.save(task);
|
||||
log.info("任务创建成功:{}", task);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -95,6 +83,7 @@ public class SlitterUpTrussTask extends AbstractTask {
|
||||
// 任务完成起点清除,创建AGV任务到达参数中的point_code的点位上
|
||||
String requestParam = taskObj.getRequest_param();
|
||||
JSONObject requestObj = JSONObject.parseObject(requestParam);
|
||||
|
||||
// 分切机满料位
|
||||
String isFlag = requestObj.getString("is_flag");
|
||||
String workorderId = requestObj.getString("workorder_id");
|
||||
@@ -102,6 +91,7 @@ public class SlitterUpTrussTask extends AbstractTask {
|
||||
String endPointCode = taskObj.getPoint_code2();
|
||||
SchBasePoint startPoint = pointService.getById(startPointCode);
|
||||
clearPoint(startPoint, taskFinishedType);
|
||||
|
||||
// 创建AGV任务
|
||||
log.info("点位{}更新完毕,创建AGV任务给分切机上料", startPointCode);
|
||||
PdmBiRawfoilworkorder order = rawfoilworkorderService.getById(workorderId);
|
||||
@@ -119,6 +109,7 @@ public class SlitterUpTrussTask extends AbstractTask {
|
||||
taskParam.put("up_task_code", taskObj.getTask_code());
|
||||
taskParam.put("create_mode", GeneralDefinition.TASK_CREATION);
|
||||
slitterUpAGVTask.apply(taskParam);
|
||||
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setFinished_type(taskFinishedType.getCode());
|
||||
setUpdateByType(taskObj, taskFinishedType);
|
||||
|
||||
@@ -44,7 +44,7 @@ public class TaskUtils {
|
||||
* @param function
|
||||
*/
|
||||
@SneakyThrows
|
||||
public static void createTask(String region, Runnable function){
|
||||
public static void taskLock(String region, Runnable function){
|
||||
RedissonClient redissonClient = SpringContextHolder.getBean(RedissonClient.class);
|
||||
RLock lock = redissonClient.getLock(region);
|
||||
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
|
||||
@@ -52,7 +52,7 @@ public class TaskUtils {
|
||||
if (tryLock) {
|
||||
PlatformTransactionManager txManager = SpringContextHolder.getBean(PlatformTransactionManager.class);
|
||||
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
|
||||
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
|
||||
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
|
||||
TransactionStatus status = txManager.getTransaction(def);
|
||||
|
||||
//执行目标方法
|
||||
|
||||
Reference in New Issue
Block a user