opt: 分切任务代码

This commit is contained in:
2024-03-12 15:35:41 +08:00
parent 25b5ed048c
commit 598b91733c
13 changed files with 237 additions and 233 deletions

View File

@@ -76,6 +76,7 @@ public class SendAirShaftAgvTask extends AbstractAcsTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject taskObj, String status) { public void updateTaskStatus(JSONObject taskObj, String status) {
SchBaseTask task = taskService.getById(taskObj.getString("task_id")); SchBaseTask task = taskService.getById(taskObj.getString("task_id"));
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
@@ -163,7 +164,6 @@ public class SendAirShaftAgvTask extends AbstractAcsTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void forceFinish(String task_id) { public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());

View File

@@ -74,6 +74,7 @@ public class SendCopperFoilSubRollTrussTask extends AbstractAcsTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void updateTaskStatus(JSONObject taskObj, String status) { public void updateTaskStatus(JSONObject taskObj, String status) {
SchBaseTask task = taskService.getById(taskObj.getString("task_id")); SchBaseTask task = taskService.getById(taskObj.getString("task_id"));
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) { if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
@@ -126,7 +127,6 @@ public class SendCopperFoilSubRollTrussTask extends AbstractAcsTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void forceFinish(String task_id) { public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());

View File

@@ -67,6 +67,7 @@ public class SlitterDownAgvTask extends AbstractAcsTask {
return resultList; return resultList;
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void updateTaskStatus(JSONObject taskObj, String status) { public void updateTaskStatus(JSONObject taskObj, String status) {
SchBaseTask task = taskService.getById(taskObj.getString("task_id")); SchBaseTask task = taskService.getById(taskObj.getString("task_id"));
@@ -128,7 +129,6 @@ public class SlitterDownAgvTask extends AbstractAcsTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void forceFinish(String task_id) { public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());

View File

@@ -177,7 +177,6 @@ public class SlitterDownTrussTask extends AbstractAcsTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void forceFinish(String task_id) { public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());

View File

@@ -80,6 +80,7 @@ public class TrussCallAirShaftTask extends AbstractAcsTask {
return resultList; return resultList;
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void updateTaskStatus(JSONObject taskObj, String status) { public void updateTaskStatus(JSONObject taskObj, String status) {
SchBaseTask task = taskService.getById(taskObj.getString("task_id")); SchBaseTask task = taskService.getById(taskObj.getString("task_id"));
@@ -196,7 +197,6 @@ public class TrussCallAirShaftTask extends AbstractAcsTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void forceFinish(String task_id) { public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());

View File

@@ -67,6 +67,7 @@ public class TrussCallShaftCacheTask extends AbstractAcsTask {
return resultList; return resultList;
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void updateTaskStatus(JSONObject taskObj, String status) { public void updateTaskStatus(JSONObject taskObj, String status) {
SchBaseTask task = taskService.getById(taskObj.getString("task_id")); SchBaseTask task = taskService.getById(taskObj.getString("task_id"));
@@ -131,7 +132,6 @@ public class TrussCallShaftCacheTask extends AbstractAcsTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void forceFinish(String task_id) { public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());

View File

@@ -79,6 +79,7 @@ public class TrussSendAirShaftTask extends AbstractAcsTask {
return resultList; return resultList;
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void updateTaskStatus(JSONObject taskObj, String status) { public void updateTaskStatus(JSONObject taskObj, String status) {
SchBaseTask task = taskService.getById(taskObj.getString("task_id")); SchBaseTask task = taskService.getById(taskObj.getString("task_id"));
@@ -168,7 +169,6 @@ public class TrussSendAirShaftTask extends AbstractAcsTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void forceFinish(String task_id) { public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());

View File

@@ -68,6 +68,7 @@ class TrussSendShaftCacheTask extends AbstractAcsTask {
return resultList; return resultList;
} }
@Transactional(rollbackFor = Exception.class)
@Override @Override
public void updateTaskStatus(JSONObject taskObj, String status) { public void updateTaskStatus(JSONObject taskObj, String status) {
SchBaseTask task = taskService.getById(taskObj.getString("task_id")); SchBaseTask task = taskService.getById(taskObj.getString("task_id"));
@@ -133,7 +134,6 @@ class TrussSendShaftCacheTask extends AbstractAcsTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void forceFinish(String task_id) { public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());

View File

@@ -185,7 +185,6 @@ public class UpShaftTrussTask extends AbstractAcsTask {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void forceFinish(String task_id) { public void forceFinish(String task_id) {
JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0); JSONObject taskObj = WQLObject.getWQLObject("SCH_BASE_Task").query("task_id = '" + task_id + "'").uniqueResult(0);
this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode()); this.updateTaskStatus(taskObj, TaskStatusEnum.FINISHED.getCode());

View File

@@ -72,42 +72,29 @@ public class SlitterServiceImpl implements SlitterService {
@Autowired @Autowired
private TrussCallShaftCacheTask trussCallShaftCacheTask; private TrussCallShaftCacheTask trussCallShaftCacheTask;
@SneakyThrows
@Override @Override
public JSONObject acsRequestShaftLoadTube(JSONObject param) { public JSONObject acsRequestShaftLoadTube(JSONObject param) {
JSONObject res = new JSONObject(); JSONObject res = new JSONObject();
JSONObject con = new JSONObject(); JSONObject con = new JSONObject();
String deviceCode = param.getString("device_code"); String deviceCode = param.getString("device_code");
RLock lock = redissonClient.getLock(deviceCode); String size = param.getString("size");
boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS); BstIvtShafttubeivt point = shafttubeivtService.getByPointCode(deviceCode, false);
try { // 判断尺寸是否相同
if (tryLock) { if (!size.equals(point.getQzz_size())) {
String size = param.getString("size"); log.error("设备:{}对应的气胀轴尺寸不批对,需要气胀轴尺寸:{},实际尺寸:{}", deviceCode, point.getQzz_size(), size);
BstIvtShafttubeivt point = shafttubeivtService.getByPointCode(deviceCode, false); throw new BadRequestException("设备:{ " + deviceCode + " }对应的气胀轴尺寸不批对" +
// 判断尺寸是否相同 ",需要气胀轴尺寸:{ " + point.getQzz_size() + " },实际尺寸:{ " + size + " }");
if (!size.equals(point.getQzz_size())) {
log.error("设备:{}对应的气胀轴尺寸不批对,需要气胀轴尺寸:{},实际尺寸:{}", deviceCode, point.getQzz_size(), size);
throw new BadRequestException("设备:{ " + deviceCode + " }对应的气胀轴尺寸不批对" +
",需要气胀轴尺寸:{ " + point.getQzz_size() + " },实际尺寸:{ " + size + " }");
}
res.put("device_code", deviceCode);
res.put("data", con);
con.put("left", point.getTube_code1());
con.put("left_size", ObjectUtil.isNotEmpty(point.getTube_name1())
? point.getTube_name1().split("\\|")[2].charAt(0) : "");
con.put("right", point.getTube_code2());
con.put("right_size", ObjectUtil.isNotEmpty(point.getTube_name2())
? point.getTube_name2().split("\\|")[2].charAt(0) : "");
con.put("number", ObjectUtil.isNotEmpty(point.getTube_code1()) && ObjectUtil.isNotEmpty(point.getTube_code2())
? "2" : "1");
} else {
throw new BadRequestException("系统繁忙,稍后在试");
}
} finally {
if (tryLock) {
lock.unlock();
}
} }
res.put("device_code", deviceCode);
res.put("data", con);
con.put("left", point.getTube_code1());
con.put("left_size", ObjectUtil.isNotEmpty(point.getTube_name1())
? point.getTube_name1().split("\\|")[2].charAt(0) : "");
con.put("right", point.getTube_code2());
con.put("right_size", ObjectUtil.isNotEmpty(point.getTube_name2())
? point.getTube_name2().split("\\|")[2].charAt(0) : "");
con.put("number", ObjectUtil.isNotEmpty(point.getTube_code1()) && ObjectUtil.isNotEmpty(point.getTube_code2())
? "2" : "1");
res.put("code", HttpStatus.HTTP_OK); res.put("code", HttpStatus.HTTP_OK);
res.put("message", "任务请求成功!"); res.put("message", "任务请求成功!");
return res; return res;
@@ -118,46 +105,34 @@ public class SlitterServiceImpl implements SlitterService {
public JSONObject acsFinishShaftPluckTube(JSONObject param) { public JSONObject acsFinishShaftPluckTube(JSONObject param) {
JSONObject res = new JSONObject(); JSONObject res = new JSONObject();
String deviceCode = param.getString("device_code"); String deviceCode = param.getString("device_code");
RLock lock = redissonClient.getLock(deviceCode); // 气涨轴编码
boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS); String qzzNo = param.getString("qzz_no");
try { String direction = param.getString("direction");
if (tryLock) { List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.getByQzzNo(qzzNo);
// 气涨轴编码 if (plans.size() == 0) {
String qzzNo = param.getString("qzz_no"); throw new BadRequestException("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!");
String direction = param.getString("direction"); }
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.getByQzzNo(qzzNo); PdmBiSlittingproductionplan plan;
if (plans.size() == 0) { if ("1".equals(direction)) {
throw new BadRequestException("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!"); plan = plans.stream().filter(p -> "1".equals(p.getLeft_or_right())).findFirst().orElse(null);
} } else {
PdmBiSlittingproductionplan plan; plan = plans.stream().filter(p -> "2".equals(p.getLeft_or_right())).findFirst().orElse(null);
if ("1".equals(direction)) { }
plan = plans.stream().filter(p -> "1".equals(p.getLeft_or_right())).findFirst().orElse(null); if (plan == null) {
} else { log.error("设备{}, 找不到气胀轴编码{}对应的分切计划!参数:{}",deviceCode, qzzNo, param);
plan = plans.stream().filter(p -> "2".equals(p.getLeft_or_right())).findFirst().orElse(null); throw new BadRequestException("找不到气胀轴编码{ " + qzzNo + " }的分切计划!");
} }
if (plan == null) { // 查找终点 todo: 如何确认是废箔还是成品
log.error("设备{}, 找不到气胀轴编码{}对应的分切计划!参数:{}",deviceCode, qzzNo, param); // todo: 暂时写死去成品称重
throw new BadRequestException("找不到气胀轴编码{ " + qzzNo + " }的分切计划!");
}
// 查找终点 todo: 如何确认是废箔还是成品
// todo: 暂时写死去成品称重
// BstIvtShafttubeivt one = shafttubeivtService.getOne(new LambdaQueryWrapper<BstIvtShafttubeivt>() // BstIvtShafttubeivt one = shafttubeivtService.getOne(new LambdaQueryWrapper<BstIvtShafttubeivt>()
// .eq(BstIvtShafttubeivt::getPoint_type, "4").eq(BstIvtShafttubeivt::getPoint_location, "0")); // .eq(BstIvtShafttubeivt::getPoint_type, "4").eq(BstIvtShafttubeivt::getPoint_location, "0"));
JSONObject taskParam = new JSONObject(); JSONObject taskParam = new JSONObject();
taskParam.put("point_code1", deviceCode); taskParam.put("point_code1", deviceCode);
taskParam.put("point_code2", "B_CZW01"); taskParam.put("point_code2", "B_CZW01");
taskParam.put("material_code", plan.getContainer_name()); taskParam.put("material_code", plan.getContainer_name());
taskParam.put("task_type", "6"); taskParam.put("task_type", "6");
taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA); taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
sendCopperFoilSubRollTrussTask.createTask(taskParam); sendCopperFoilSubRollTrussTask.createTask(taskParam);
} else {
throw new BadRequestException("系统繁忙,稍后在试");
}
} finally {
if (tryLock) {
lock.unlock();
}
}
res.put("code", HttpStatus.HTTP_OK); res.put("code", HttpStatus.HTTP_OK);
res.put("message", "任务请求成功!"); res.put("message", "任务请求成功!");
return res; return res;
@@ -169,40 +144,28 @@ public class SlitterServiceImpl implements SlitterService {
// 参数设备号type插拔轴位qzzSize // 参数设备号type插拔轴位qzzSize
JSONObject res = new JSONObject(); JSONObject res = new JSONObject();
String deviceCode = param.getString("device_code"); String deviceCode = param.getString("device_code");
RLock lock = redissonClient.getLock(deviceCode); String qzzNo = param.getString("qzz_no");
boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS); if (ObjectUtil.isEmpty(qzzNo)) {
try { log.error("气涨轴编码不能为空!");
if (tryLock) { throw new BadRequestException("气涨轴编码不能为空!");
String qzzNo = param.getString("qzz_no"); }
if (ObjectUtil.isEmpty(qzzNo)) { List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.getByQzzNo(qzzNo);
log.error("气涨轴编码不能为空!"); if (plans.size() == 0) {
throw new BadRequestException("气涨轴编码不能为空!"); log.error("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!");
} throw new BadRequestException("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!");
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.getByQzzNo(qzzNo); }
if (plans.size() == 0) { // 反馈 纸管尺寸
log.error("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!"); JSONObject r = new JSONObject();
throw new BadRequestException("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!"); res.put("data", r);
} r.put("device_code", deviceCode);
// 反馈 纸管尺寸 for (PdmBiSlittingproductionplan plan : plans) {
JSONObject r = new JSONObject(); String s = String.valueOf("1".equals(plan.getPaper_tube_or_FRP())
res.put("data", r); ? plan.getPaper_tube_model().split("\\|")[2].charAt(0)
r.put("device_code", deviceCode); : plan.getFRP_model().split("\\|")[2].charAt(0));
for (PdmBiSlittingproductionplan plan : plans) { if ("1".equals(plan.getLeft_or_right())) {
String s = String.valueOf("1".equals(plan.getPaper_tube_or_FRP()) r.put("left_size", s);
? plan.getPaper_tube_model().split("\\|")[2].charAt(0)
: plan.getFRP_model().split("\\|")[2].charAt(0));
if ("1".equals(plan.getLeft_or_right())) {
r.put("left_size", s);
} else {
r.put("right_size", s);
}
}
} else { } else {
throw new BadRequestException("系统繁忙,稍后在试"); r.put("right_size", s);
}
} finally {
if (tryLock) {
lock.unlock();
} }
} }
res.put("code", HttpStatus.HTTP_OK); res.put("code", HttpStatus.HTTP_OK);
@@ -217,95 +180,82 @@ public class SlitterServiceImpl implements SlitterService {
JSONObject res = new JSONObject(); JSONObject res = new JSONObject();
// 穿拔轴位 // 穿拔轴位
String deviceCode = param.getString("device_code"); String deviceCode = param.getString("device_code");
RLock lock = redissonClient.getLock(deviceCode); // todo: 纸管
boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS); String weight1 = param.getString("weight1");
String material1 = param.getString("material1");
String weight2 = param.getString("weight2");
String material2 = param.getString("material2");
// 判断是否有未完成的任务
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getPoint_code1, deviceCode)
.lt(SchBaseTask::getTask_status, "07"));
if (list.size() > 0) {
log.error("点位[{}]存在未完成得任务!", deviceCode);
throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!");
}
BstIvtShafttubeivt startPoint = shafttubeivtService.getOne(new LambdaQueryWrapper<BstIvtShafttubeivt>()
.eq(BstIvtShafttubeivt::getPoint_code, deviceCode));
// 获取分切计划
List<String> collect = Stream.of(startPoint.getContainer_name1(), startPoint.getContainer_name2())
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getContainer_name, collect)
.eq(PdmBiSlittingproductionplan::getIs_delete, "0"));
if (plans.size() == 0) {
log.error("找不到[{}]对应的分切计划!", collect);
throw new BadRequestException("找不到[" + collect + "]对应的分切计划!");
}
// 当前套轴的分切计划
PdmBiSlittingproductionplan demoPlan = plans.get(0);
// 查找是否有同组的气胀轴位置
BstIvtCutpointivt cutPoint = slitterMapper.getSameGroupPoint(demoPlan);
if (ObjectUtil.isEmpty(cutPoint)) {
// 也有可能在路上, 获取任务的终点
String endPoint = slitterMapper.getSameGroupTaskPoint(demoPlan);
if (ObjectUtil.isNotEmpty(endPoint)) {
cutPoint = bcutpointivtService.getOne(new LambdaQueryWrapper<BstIvtCutpointivt>()
.eq(BstIvtCutpointivt::getTruss_point_code1, endPoint).or()
.eq(BstIvtCutpointivt::getTruss_point_code2, endPoint));
}
}
if (ObjectUtil.isEmpty(cutPoint)) {
// 获取一个空位 (上下区域)
List<BstIvtCutpointivt> emptyNotTaskPoint = bcutpointivtService.getAreaNotTaskPointByStatus(
"1", "1", startPoint.getPoint_location(), "1");
if (emptyNotTaskPoint.size() == 0) {
throw new BadRequestException("找不到可用套轴对接位!");
}
cutPoint = emptyNotTaskPoint.get(0);
}
// 枷锁
RLock lockPoint = redissonClient.getLock(cutPoint.getPoint_code());
boolean tryLockPoint = lockPoint.tryLock(0, TimeUnit.SECONDS);
try { try {
if (tryLock) { if (tryLockPoint) {
String taskCode = param.getString("task_code"); // 分切计划设置套轴完成
// todo: 纸管 String qzzNo = IdUtil.getSnowflake(1,1).nextIdStr();
String weight1 = param.getString("weight1"); plans.forEach(plan -> {
String material1 = param.getString("material1"); plan.setIs_child_tz_ok("1");
String weight2 = param.getString("weight2"); plan.setQzzno(qzzNo);
String material2 = param.getString("material2"); TaskUtils.updateOptMessageBySlitterPlan(plan);
// 判断是否有未完成的任务 });
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>() slittingproductionplanService.updateBatchById(plans);
.eq(SchBaseTask::getPoint_code1, deviceCode) // 创建任务
.lt(SchBaseTask::getTask_status, "07")); JSONObject taskParam = new JSONObject();
if (list.size() > 0) { taskParam.put("point_code1", startPoint.getPoint_code());
log.error("点位[{}]存在未完成得任务!", deviceCode); taskParam.put("point_code2", "1".equals(demoPlan.getUp_or_down())
throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!"); ? cutPoint.getTruss_point_code1() : cutPoint.getTruss_point_code2());
} taskParam.put("vehicle_code1", "1".equals(demoPlan.getUp_or_down()) ? qzzNo : "");
BstIvtShafttubeivt startPoint = shafttubeivtService.getOne(new LambdaQueryWrapper<BstIvtShafttubeivt>() taskParam.put("vehicle_code2", "2".equals(demoPlan.getUp_or_down()) ? qzzNo : "");
.eq(BstIvtShafttubeivt::getPoint_code, deviceCode)); taskParam.put("task_type", "6");
// 获取分切计划 taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
List<String> collect = Stream.of(startPoint.getContainer_name1(), startPoint.getContainer_name2()) trussSendAirShaftTask.createTask(taskParam);
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getContainer_name, collect)
.eq(PdmBiSlittingproductionplan::getIs_delete, "0"));
if (plans.size() == 0) {
log.error("找不到[{}]对应的分切计划!", collect);
throw new BadRequestException("找不到[" + collect + "]对应的分切计划!");
}
// 当前套轴的分切计划
PdmBiSlittingproductionplan demoPlan = plans.get(0);
// 查找是否有同组的气胀轴位置
BstIvtCutpointivt cutPoint = slitterMapper.getSameGroupPoint(demoPlan);
if (ObjectUtil.isEmpty(cutPoint)) {
// 也有可能在路上, 获取任务的终点
String endPoint = slitterMapper.getSameGroupTaskPoint(demoPlan);
if (ObjectUtil.isNotEmpty(endPoint)) {
cutPoint = bcutpointivtService.getOne(new LambdaQueryWrapper<BstIvtCutpointivt>()
.eq(BstIvtCutpointivt::getTruss_point_code1, endPoint).or()
.eq(BstIvtCutpointivt::getTruss_point_code2, endPoint));
}
}
if (ObjectUtil.isEmpty(cutPoint)) {
// 获取一个空位 (上下区域)
List<BstIvtCutpointivt> emptyNotTaskPoint = bcutpointivtService.getAreaNotTaskPointByStatus(
"1", "1", startPoint.getPoint_location(), "1");
if (emptyNotTaskPoint.size() == 0) {
throw new BadRequestException("找不到可用套轴对接位!");
}
cutPoint = emptyNotTaskPoint.get(0);
}
// 枷锁
RLock lockPoint = redissonClient.getLock(cutPoint.getPoint_code());
boolean tryLockPoint = lockPoint.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLockPoint) {
// 分切计划设置套轴完成
String qzzNo = IdUtil.getSnowflake(1,1).nextIdStr();
plans.forEach(plan -> {
plan.setIs_child_tz_ok("1");
plan.setQzzno(qzzNo);
TaskUtils.updateOptMessageBySlitterPlan(plan);
});
slittingproductionplanService.updateBatchById(plans);
// 创建任务
JSONObject taskParam = new JSONObject();
taskParam.put("point_code1", startPoint.getPoint_code());
taskParam.put("point_code2", "1".equals(demoPlan.getUp_or_down())
? cutPoint.getTruss_point_code1() : cutPoint.getTruss_point_code2());
taskParam.put("vehicle_code1", "1".equals(demoPlan.getUp_or_down()) ? qzzNo : "");
taskParam.put("vehicle_code2", "2".equals(demoPlan.getUp_or_down()) ? qzzNo : "");
taskParam.put("task_type", "6");
taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
trussSendAirShaftTask.createTask(taskParam);
} else {
throw new BadRequestException("系统繁忙,稍后在试");
}
} finally {
if (tryLockPoint) {
lockPoint.unlock();
}
}
} else { } else {
throw new BadRequestException("系统繁忙,稍后在试"); throw new BadRequestException("系统繁忙,稍后在试");
} }
} finally { } finally {
if (tryLock) { if (tryLockPoint) {
lock.unlock(); lockPoint.unlock();
} }
} }
res.put("code", HttpStatus.HTTP_OK); res.put("code", HttpStatus.HTTP_OK);
@@ -318,44 +268,32 @@ public class SlitterServiceImpl implements SlitterService {
public JSONObject acsSendShaftToCache(JSONObject param) { public JSONObject acsSendShaftToCache(JSONObject param) {
JSONObject res = new JSONObject(); JSONObject res = new JSONObject();
String deviceCode = param.getString("device_code"); String deviceCode = param.getString("device_code");
RLock lock = redissonClient.getLock(deviceCode); String qzzSize = param.getString("size");
boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS); // 判断是否有未完成的任务
try { List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
if (tryLock) { .eq(SchBaseTask::getPoint_code1, deviceCode)
String qzzSize = param.getString("size"); .lt(SchBaseTask::getTask_status, "07"));
// 判断是否有未完成的任务 if (list.size() > 0) {
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>() throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!");
.eq(SchBaseTask::getPoint_code1, deviceCode)
.lt(SchBaseTask::getTask_status, "07"));
if (list.size() > 0) {
throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!");
}
BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false);
// 临时存放气涨轴尺寸
startPoint.setQzz_size(qzzSize);
// 获取空位
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskShaftCacheEmpty(startPoint);
if (shafttubeivts.size() == 0) {
throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位");
}
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
// 创建任务
param.put("point_code1", deviceCode);
param.put("point_code2", shafttubeivt.getPoint_code());
// hint: 当前分切计划的气涨轴尺寸
param.put("qzz_size", qzzSize);
param.put("task_type", "6");
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
param.put("is_bushing", "0");
trussCallShaftCacheTask.createTask(param);
} else {
throw new BadRequestException("系统繁忙,稍后在试");
}
} finally {
if (tryLock) {
lock.unlock();
}
} }
BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false);
// 临时存放气涨轴尺寸
startPoint.setQzz_size(qzzSize);
// 获取空位
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskShaftCacheEmpty(startPoint);
if (shafttubeivts.size() == 0) {
throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位");
}
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
// 创建任务
param.put("point_code1", deviceCode);
param.put("point_code2", shafttubeivt.getPoint_code());
// hint: 当前分切计划的气涨轴尺寸
param.put("qzz_size", qzzSize);
param.put("task_type", "6");
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
param.put("is_bushing", "0");
trussCallShaftCacheTask.createTask(param);
res.put("code", HttpStatus.HTTP_OK); res.put("code", HttpStatus.HTTP_OK);
res.put("message", "请求成功"); res.put("message", "请求成功");
return res; return res;

View File

@@ -116,7 +116,7 @@ public class AcsToWmsController {
} }
/*@PostMapping("/getQZZInfo") /*@PostMapping("/getQZZInfo")
@SaIgnore @SaIgnore
public ResponseEntity<Object> getQZZInfo(@RequestBody JSONObject jo) { public ResponseEntity<Object> getQZZInfo(@RequestBody JSONObject jo) {
return new ResponseEntity<>(acsToWmsService.getQZZInfo(jo), HttpStatus.OK); return new ResponseEntity<>(acsToWmsService.getQZZInfo(jo), HttpStatus.OK);
@@ -177,5 +177,10 @@ public class AcsToWmsController {
return new ResponseEntity<>(acsToWmsService.deviceApplyExceptional(whereJson), HttpStatus.OK); return new ResponseEntity<>(acsToWmsService.deviceApplyExceptional(whereJson), HttpStatus.OK);
} }
@PostMapping("/slitterApply")
@Log(value = "二期分切请求", isInterfaceLog = true, interfaceLogType = InterfaceLogType.ACS_TO_LMS)
@SaIgnore
public ResponseEntity<Object> slitterApply(@RequestBody JSONObject param) {
return new ResponseEntity<>(acsToWmsService.slitterApply(param), HttpStatus.OK);
}
} }

View File

@@ -167,4 +167,11 @@ public interface AcsToWmsService {
* } * }
*/ */
JSONObject deviceApplyExceptional(JSONObject whereJson); JSONObject deviceApplyExceptional(JSONObject whereJson);
/**
* 二期分切请求
* @param param /
* @return /
*/
JSONObject slitterApply(JSONObject param);
} }

View File

@@ -21,6 +21,7 @@ import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService; import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.TwoBoxExcepTask; import org.nl.b_lms.sch.tasks.TwoBoxExcepTask;
import org.nl.b_lms.sch.tasks.first_floor_area.MzhcwTask; import org.nl.b_lms.sch.tasks.first_floor_area.MzhcwTask;
import org.nl.b_lms.sch.tasks.slitter.service.SlitterService;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum; import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
import org.nl.b_lms.storage_manage.ios.enums.TASKEnum; import org.nl.b_lms.storage_manage.ios.enums.TASKEnum;
import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.*; import org.nl.b_lms.storage_manage.ios.service.iostorInv.util.service.*;
@@ -47,6 +48,7 @@ import org.nl.wms.st.inbill.service.RawAssistIStorService;
import org.nl.wms.st.inbill.service.StorPublicService; import org.nl.wms.st.inbill.service.StorPublicService;
import org.redisson.api.RLock; 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.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -126,6 +128,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
@Resource @Resource
private MzhcwTask mzhcwTask; private MzhcwTask mzhcwTask;
private final SlitterService slitterService;
/** /**
* task_id任务标识 * task_id任务标识
@@ -2029,4 +2033,56 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
return result; return result;
} }
@SneakyThrows
@Override
public JSONObject slitterApply(JSONObject param) {
log.info("slitterApply请求参数---------------------------------------------{}", param);
JSONObject res = new JSONObject();
String deviceCode = param.getString("device_code");
String type = param.getString("type");
if (ObjectUtil.isEmpty(type)) {
throw new BadRequestException("任务类型「type」不能为空");
}
RLock lock = redissonClient.getLock(deviceCode);
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
try {
if (tryLock) {
switch (type) {
case "1":
// 申请套管
res = slitterService.acsRequestShaftLoadTube(param);
break;
case "2":
// 套管完成
res = slitterService.acsFinishLoadShaft(param);
break;
case "3":
// 拔轴完成
res = slitterService.acsFinishShaftPluckTube(param);
break;
case "4":
// 申请拔轴
res = slitterService.acsRequestShaftPluckTube(param);
break;
case "5":
// 缓存线已满,生产桁架任务
res = slitterService.acsSendShaftToCache(param);
break;
default:
log.error("slitterApply任务类型「{}」无效!,参数:---------------------------------------------{}", type, param);
throw new BadRequestException("任务类型「" + type + "」无效!");
}
} else {
log.error("slitterApply系统繁忙参数---------------------------------------------{}", param);
throw new BadRequestException("系统繁忙,请稍后再试!");
}
} finally {
if (tryLock) {
lock.unlock();
}
}
log.info("slitterApply返回参数---------------------------------------------{}", res);
return res;
}
} }