feat: 人工呼叫空轴
This commit is contained in:
@@ -0,0 +1,143 @@
|
|||||||
|
package org.nl.b_lms.sch.tasks.slitter;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService;
|
||||||
|
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
|
||||||
|
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.slitter.constant.SlitterConstant;
|
||||||
|
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||||
|
import org.nl.common.utils.SecurityUtils;
|
||||||
|
import org.nl.common.utils.TaskUtils;
|
||||||
|
import org.nl.modules.wql.WQL;
|
||||||
|
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.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: lyd
|
||||||
|
* @Date: 2025/9/3
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class AgvCallShaftManuallyTask extends AbstractAcsTask {
|
||||||
|
private final String THIS_CLASS = AgvCallShaftManuallyTask.class.getName();
|
||||||
|
@Autowired
|
||||||
|
private IschBaseTaskService taskService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IBstIvtCutpointivtService bcutpointivtService;
|
||||||
|
@Override
|
||||||
|
public List<AcsTaskDto> addTask() {
|
||||||
|
/*
|
||||||
|
* 下发给ACS时需要特殊处理
|
||||||
|
*/
|
||||||
|
List<SchBaseTask> taskList = taskService.getIssueTasks(THIS_CLASS);
|
||||||
|
|
||||||
|
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
|
||||||
|
String agv_system_type = "2";
|
||||||
|
for (SchBaseTask task : taskList) {
|
||||||
|
AcsTaskDto dto = AcsTaskDto.builder()
|
||||||
|
.ext_task_id(task.getTask_id())
|
||||||
|
.task_code(task.getTask_code())
|
||||||
|
.task_type(task.getAcs_task_type())
|
||||||
|
.start_device_code(task.getPoint_code1())
|
||||||
|
.next_device_code(task.getPoint_code2())
|
||||||
|
.start_device_code2(task.getPoint_code3())
|
||||||
|
.next_device_code2(task.getPoint_code4())
|
||||||
|
.vehicle_code(task.getVehicle_code())
|
||||||
|
.agv_system_type(agv_system_type)
|
||||||
|
.priority(task.getPriority())
|
||||||
|
.remark(task.getRemark())
|
||||||
|
.product_area(task.getProduct_area())
|
||||||
|
.build();
|
||||||
|
resultList.add(dto);
|
||||||
|
}
|
||||||
|
return resultList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||||
|
SchBaseTask task = taskService.getById(taskObj.getString("task_id"));
|
||||||
|
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
|
||||||
|
// 更新任务状态为执行中
|
||||||
|
task.setTask_status(TaskStatusEnum.EXECUTING.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
||||||
|
// 更改任务状态为完成
|
||||||
|
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||||
|
String endPoint = task.getPoint_code2();
|
||||||
|
BstIvtCutpointivt agvPoint = bcutpointivtService.getPintByAgvCode(endPoint, false);
|
||||||
|
agvPoint.setPoint_status("2");
|
||||||
|
agvPoint.setUpdate_time(DateUtil.now());
|
||||||
|
agvPoint.setRemark("人工呼叫空轴!");
|
||||||
|
bcutpointivtService.updateById(agvPoint);
|
||||||
|
}
|
||||||
|
// 取消
|
||||||
|
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||||
|
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||||
|
}
|
||||||
|
TaskUtils.updateOptMessageByTask(task);
|
||||||
|
taskService.updateById(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String createTask(JSONObject form) {
|
||||||
|
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||||
|
String currentUsername = SecurityUtils.getCurrentUsername();
|
||||||
|
|
||||||
|
SchBaseTask task = new SchBaseTask();
|
||||||
|
task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||||
|
task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||||
|
task.setTask_status(ObjectUtil.isNotEmpty(form.getString("task_status"))
|
||||||
|
? form.getString("task_status")
|
||||||
|
: TaskStatusEnum.START_AND_POINT.getCode());
|
||||||
|
task.setPoint_code1(form.getString("point_code1"));
|
||||||
|
task.setPoint_code2(form.getString("point_code2"));
|
||||||
|
// 行家任务给6,AGV给3
|
||||||
|
task.setAcs_task_type("3");
|
||||||
|
task.setIs_delete(SlitterConstant.SLITTER_NO);
|
||||||
|
task.setRequest_param(form.toJSONString());
|
||||||
|
task.setTask_type(form.getString("task_type"));
|
||||||
|
task.setProduct_area(form.getString("product_area"));
|
||||||
|
task.setCreate_id(currentUserId);
|
||||||
|
task.setCreate_name(currentUsername);
|
||||||
|
task.setCreate_time(DateUtil.now());
|
||||||
|
task.setHandle_class(THIS_CLASS);
|
||||||
|
//根据类型获取对应的任务优先级
|
||||||
|
JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", task.getTask_type()).process().uniqueResult(0);
|
||||||
|
if (ObjectUtil.isEmpty(priority_jo)) {
|
||||||
|
task.setPriority("1");
|
||||||
|
} else {
|
||||||
|
task.setPriority(priority_jo.getString("value"));
|
||||||
|
}
|
||||||
|
taskService.save(task);
|
||||||
|
this.immediateNotifyAcs(null);
|
||||||
|
return task.getTask_id();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
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, "0");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,177 @@
|
|||||||
|
package org.nl.b_lms.sch.tasks.slitter;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.util.IdUtil;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService;
|
||||||
|
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
|
||||||
|
import org.nl.b_lms.bst.ivt.shafttubeivt.service.IBstIvtShafttubeivtService;
|
||||||
|
import org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt;
|
||||||
|
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.slitter.constant.SlitterConstant;
|
||||||
|
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum;
|
||||||
|
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
|
||||||
|
import org.nl.common.utils.SecurityUtils;
|
||||||
|
import org.nl.common.utils.TaskUtils;
|
||||||
|
import org.nl.modules.wql.WQL;
|
||||||
|
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.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 人工叫轴桁架任务
|
||||||
|
* @Author: lyd
|
||||||
|
* @Date: 2025/9/3
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Component
|
||||||
|
public class TrussCallShaftManuallyTask extends AbstractAcsTask {
|
||||||
|
private final String THIS_CLASS = TrussCallShaftManuallyTask.class.getName();
|
||||||
|
@Autowired
|
||||||
|
private IschBaseTaskService taskService;
|
||||||
|
@Autowired
|
||||||
|
private IBstIvtCutpointivtService bcutpointivtService;
|
||||||
|
@Autowired
|
||||||
|
private IBstIvtShafttubeivtService bshafttubeivtService;
|
||||||
|
@Autowired
|
||||||
|
private AgvCallShaftManuallyTask agvCallShaftManuallyTask;
|
||||||
|
@Override
|
||||||
|
public List<AcsTaskDto> addTask() {
|
||||||
|
/*
|
||||||
|
* 下发给ACS时需要特殊处理
|
||||||
|
*/
|
||||||
|
List<SchBaseTask> taskList = taskService.getIssueTasks(THIS_CLASS);
|
||||||
|
|
||||||
|
ArrayList<AcsTaskDto> resultList = new ArrayList<>();
|
||||||
|
String agv_system_type = "2";
|
||||||
|
for (SchBaseTask task : taskList) {
|
||||||
|
AcsTaskDto dto = AcsTaskDto.builder()
|
||||||
|
.ext_task_id(task.getTask_id())
|
||||||
|
.task_code(task.getTask_code())
|
||||||
|
.task_type(task.getAcs_task_type())
|
||||||
|
.start_device_code(task.getPoint_code1())
|
||||||
|
.next_device_code(task.getPoint_code2())
|
||||||
|
.start_device_code2(task.getPoint_code3())
|
||||||
|
.next_device_code2(task.getPoint_code4())
|
||||||
|
.vehicle_code(task.getVehicle_code())
|
||||||
|
.agv_system_type(agv_system_type)
|
||||||
|
.priority(task.getPriority())
|
||||||
|
.remark(task.getRemark())
|
||||||
|
.product_area(task.getProduct_area())
|
||||||
|
.build();
|
||||||
|
resultList.add(dto);
|
||||||
|
}
|
||||||
|
return resultList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void updateTaskStatus(JSONObject taskObj, String status) {
|
||||||
|
SchBaseTask task = taskService.getById(taskObj.getString("task_id"));
|
||||||
|
if (TaskStatusEnum.EXECUTING.getCode().equals(status)) {
|
||||||
|
// 更新任务状态为执行中
|
||||||
|
task.setTask_status(TaskStatusEnum.EXECUTING.getCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (StrUtil.equals(status, TaskStatusEnum.FINISHED.getCode())) {
|
||||||
|
// 更改任务状态为完成
|
||||||
|
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||||
|
// 判断当前的任务组是否都做完了,做完了就申请AGV搬走
|
||||||
|
JSONObject requestObj = JSONObject.parseObject(task.getRequest_param());
|
||||||
|
String startPoint = task.getPoint_code1();
|
||||||
|
String endPoint = task.getPoint_code2();
|
||||||
|
SchBaseTask one = taskService.getOne(new LambdaQueryWrapper<SchBaseTask>()
|
||||||
|
.eq(SchBaseTask::getIs_delete, "0")
|
||||||
|
.eq(SchBaseTask::getTask_group_id, task.getTask_group_id())
|
||||||
|
.ne(SchBaseTask::getTask_id, task.getTask_id())
|
||||||
|
.lt(SchBaseTask::getTask_status, "07"), false);
|
||||||
|
// 数据赋值
|
||||||
|
BstIvtShafttubeivt startPointObj = bshafttubeivtService.getByPointCode(startPoint, false);
|
||||||
|
startPointObj.setHave_qzz("0");
|
||||||
|
startPointObj.setTube_name1("");
|
||||||
|
startPointObj.setPlan("");
|
||||||
|
TaskUtils.updateOptMessageByBShaftPoint(startPointObj);
|
||||||
|
bshafttubeivtService.updateById(startPointObj);
|
||||||
|
BstIvtCutpointivt endPointObj = bcutpointivtService.getPintByTrussCode(endPoint, false);
|
||||||
|
endPointObj.setPoint_status("2");
|
||||||
|
endPointObj.setRemark("等待搬运空轴...");
|
||||||
|
bcutpointivtService.updateById(endPointObj);
|
||||||
|
if (ObjectUtil.isEmpty(one)) {
|
||||||
|
// 创建AGV任务
|
||||||
|
JSONObject exParam = new JSONObject();
|
||||||
|
exParam.put("point_code1", endPointObj.getPoint_code());
|
||||||
|
exParam.put("point_code2", task.getPoint_code3());
|
||||||
|
exParam.put("task_type", SlitterEnum.TASK_TYPE.code("送空轴AGV任务"));
|
||||||
|
exParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||||
|
agvCallShaftManuallyTask.createTask(exParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 取消
|
||||||
|
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||||
|
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||||
|
}
|
||||||
|
TaskUtils.updateOptMessageByTask(task);
|
||||||
|
taskService.updateById(task);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String createTask(JSONObject form) {
|
||||||
|
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||||
|
String currentUsername = SecurityUtils.getCurrentUsername();
|
||||||
|
|
||||||
|
SchBaseTask task = new SchBaseTask();
|
||||||
|
task.setTask_id(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||||
|
task.setTask_code(IdUtil.getSnowflake(1, 1).nextIdStr());
|
||||||
|
task.setTask_status(ObjectUtil.isNotEmpty(form.getString("task_status"))
|
||||||
|
? form.getString("task_status")
|
||||||
|
: TaskStatusEnum.START_AND_POINT.getCode());
|
||||||
|
task.setPoint_code1(form.getString("point_code1"));
|
||||||
|
task.setPoint_code2(form.getString("point_code2"));
|
||||||
|
task.setPoint_code3(form.getString("point_code3"));
|
||||||
|
task.setTask_group_id(form.getString("group_id"));
|
||||||
|
task.setAcs_task_type("6");
|
||||||
|
task.setIs_delete("0");
|
||||||
|
task.setRequest_param(form.toJSONString());
|
||||||
|
task.setTask_type(form.getString("task_type"));
|
||||||
|
task.setProduct_area(form.getString("product_area"));
|
||||||
|
task.setCreate_id(currentUserId);
|
||||||
|
task.setCreate_name(currentUsername);
|
||||||
|
task.setCreate_time(DateUtil.now());
|
||||||
|
task.setHandle_class(THIS_CLASS);
|
||||||
|
//根据类型获取对应的任务优先级
|
||||||
|
JSONObject priority_jo = WQL.getWO("PDA_COOLIN").addParam("flag", "3").addParam("task_type", task.getTask_type()).process().uniqueResult(0);
|
||||||
|
if (ObjectUtil.isEmpty(priority_jo)) {
|
||||||
|
task.setPriority("1");
|
||||||
|
} else {
|
||||||
|
task.setPriority(priority_jo.getString("value"));
|
||||||
|
}
|
||||||
|
taskService.save(task);
|
||||||
|
this.immediateNotifyAcs(null);
|
||||||
|
return task.getTask_id();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
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, "0");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,8 +26,13 @@ public enum SlitterEnum {
|
|||||||
, "套轴异常处理AGV任务", "010811", "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813"
|
, "套轴异常处理AGV任务", "010811", "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813"
|
||||||
, "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815", "备货区单独送空载具", "010816"
|
, "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815", "备货区单独送空载具", "010816"
|
||||||
, "拼单送轴", "010817", "拆单两点移动任务", "010818", "拆单四点移动任务", "010819"
|
, "拼单送轴", "010817", "拆单两点移动任务", "010818", "拆单四点移动任务", "010819"
|
||||||
, "满轴拼单桁架任务", "010820")
|
, "满轴拼单桁架任务", "010820", "送空轴AGV任务", "010821", "人工叫空轴桁架任务", "010822")
|
||||||
);
|
),
|
||||||
|
/**
|
||||||
|
* 二次请求
|
||||||
|
*/
|
||||||
|
TRUSS_SECONDARY_REQUEST(MapOf.of("套轴取货二次分配", "1", "拔轴放货二次分配", "2", "进轴放货二次分配", "3", "出轴取货二次分配", "4"))
|
||||||
|
;
|
||||||
|
|
||||||
private Map<String, String> code;
|
private Map<String, String> code;
|
||||||
|
|
||||||
|
|||||||
@@ -94,4 +94,10 @@ public class SlitterController {
|
|||||||
slitterService.recover(entity);
|
slitterService.recover(entity);
|
||||||
return new ResponseEntity<>( HttpStatus.OK);
|
return new ResponseEntity<>( HttpStatus.OK);
|
||||||
}
|
}
|
||||||
|
@PostMapping("/callShaft")
|
||||||
|
@Log("呼叫空轴")
|
||||||
|
@SaIgnore
|
||||||
|
public ResponseEntity<Object> callShaft(@RequestBody JSONObject entity){
|
||||||
|
return new ResponseEntity<>(slitterService.callShaft(entity), HttpStatus.OK);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -398,4 +398,6 @@ public interface SlitterService {
|
|||||||
* @param param
|
* @param param
|
||||||
*/
|
*/
|
||||||
JSONObject getTubeLength(JSONObject param);
|
JSONObject getTubeLength(JSONObject param);
|
||||||
|
|
||||||
|
JSONObject callShaft(JSONObject entity);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -148,6 +148,8 @@ public class SlitterServiceImpl implements SlitterService {
|
|||||||
private ClassstandardService classstandardService;
|
private ClassstandardService classstandardService;
|
||||||
@Autowired
|
@Autowired
|
||||||
private StockAreaSendVehicleTask stockAreaSendVehicleTask;
|
private StockAreaSendVehicleTask stockAreaSendVehicleTask;
|
||||||
|
@Autowired
|
||||||
|
private TrussCallShaftManuallyTask trussCallShaftManuallyTask;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JSONObject acsRequestShaftLoadTube(JSONObject param) {
|
public JSONObject acsRequestShaftLoadTube(JSONObject param) {
|
||||||
@@ -3008,6 +3010,90 @@ public class SlitterServiceImpl implements SlitterService {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public JSONObject callShaft(JSONObject param) {
|
||||||
|
// area、point_code、row(size,generation)
|
||||||
|
log.info("呼叫空轴:{}", param);
|
||||||
|
JSONObject res = new JSONObject();
|
||||||
|
String area = param.getString("area");
|
||||||
|
String pointCode = param.getString("point_code");
|
||||||
|
RLock open = redissonClient.getLock(pointCode);
|
||||||
|
boolean openLock;
|
||||||
|
try {
|
||||||
|
openLock = open.tryLock(0, TimeUnit.SECONDS);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
if (openLock) {
|
||||||
|
JSONArray row = param.getJSONArray("row");
|
||||||
|
if (row.size() > 2) {
|
||||||
|
throw new BadRequestException("一次最多只能呼叫两根轴!");
|
||||||
|
}
|
||||||
|
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||||
|
.lt(SchBaseTask::getTask_status, "07")
|
||||||
|
.eq(SchBaseTask::getIs_delete, "0")
|
||||||
|
.and(la2 -> la2.eq(SchBaseTask::getPoint_code1, pointCode)
|
||||||
|
.or()
|
||||||
|
.eq(SchBaseTask::getPoint_code2, pointCode)
|
||||||
|
.or()
|
||||||
|
.eq(SchBaseTask::getPoint_code3, pointCode)
|
||||||
|
.or()
|
||||||
|
.eq(SchBaseTask::getPoint_code4, pointCode)));
|
||||||
|
if (list.size() > 0) {
|
||||||
|
throw new BadRequestException("点位[" + pointCode + "]存在未完成得任务!");
|
||||||
|
}
|
||||||
|
BstIvtCutpointivt agvPoint = bcutpointivtService.getPintByAgvCode(pointCode, false);
|
||||||
|
String groupId = IdUtil.getSnowflake(1, 1).nextIdStr();
|
||||||
|
// 找终点
|
||||||
|
// 获取一个空位 (上下区域)
|
||||||
|
List<BstIvtCutpointivt> emptyNotTaskPoint = bcutpointivtService.getNBJAreaNotTaskPointByStatus(
|
||||||
|
"1", "1", agvPoint.getPoint_location(), "1");
|
||||||
|
if (emptyNotTaskPoint.size() == 0) {
|
||||||
|
throw new BadRequestException("内包间没有空的套轴对接位!");
|
||||||
|
}
|
||||||
|
BstIvtCutpointivt cutpointivt = emptyNotTaskPoint.get(0);
|
||||||
|
for (int i = 0; i < row.size(); i++) {
|
||||||
|
JSONObject rowJSONObject = row.getJSONObject(i);
|
||||||
|
BstIvtShafttubeivt pickWaitPoint = shafttubeivtService.getOne(new LambdaQueryWrapper<BstIvtShafttubeivt>()
|
||||||
|
.eq(BstIvtShafttubeivt::getPoint_location, agvPoint.getPoint_location())
|
||||||
|
.eq(BstIvtShafttubeivt::getPoint_type, "7"));
|
||||||
|
if (ObjectUtil.isEmpty(pickWaitPoint)) {
|
||||||
|
throw new BadRequestException("未找到可存放气涨轴规格「" + rowJSONObject.getString("size") + "」的等待点位");
|
||||||
|
}
|
||||||
|
// 判断库内有没有可用的轴
|
||||||
|
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskShaftCache(rowJSONObject.getString("size"),
|
||||||
|
rowJSONObject.getString("generation"), agvPoint.getPoint_location());
|
||||||
|
if (shafttubeivts.size() == 0) {
|
||||||
|
throw new BadRequestException("没有气胀轴尺寸[" + rowJSONObject.getString("size") + "],代数["
|
||||||
|
+ rowJSONObject.getString("generation") + "]的库存!");
|
||||||
|
}
|
||||||
|
// 创建桁架任务(二次分配)
|
||||||
|
JSONObject taskParam = new JSONObject();
|
||||||
|
taskParam.put("point_code1", pickWaitPoint.getPoint_code());
|
||||||
|
taskParam.put("point_code2", i == 0 ? cutpointivt.getTruss_point_code1() : cutpointivt.getTruss_point_code2());
|
||||||
|
taskParam.put("point_code3", pointCode);
|
||||||
|
taskParam.put("task_type", SlitterEnum.TASK_TYPE.code("人工叫空轴桁架任务"));
|
||||||
|
taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||||
|
taskParam.put("qzz_size", rowJSONObject.getString("size"));
|
||||||
|
taskParam.put("qzz_generation", rowJSONObject.getString("generation"));
|
||||||
|
taskParam.put("group_id", groupId);
|
||||||
|
trussCallShaftManuallyTask.createTask(taskParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
throw new BadRequestException("系统繁忙,稍后在试!!");
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (open.isLocked() && open.isHeldByCurrentThread()) {
|
||||||
|
open.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.put("status", HttpStatus.HTTP_OK);
|
||||||
|
res.put("message", "请求成功");
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
public List<String> getRedisListValue(String key) {
|
public List<String> getRedisListValue(String key) {
|
||||||
List<String> stepTipLogs = (List<String>) redisUtils.get(key);
|
List<String> stepTipLogs = (List<String>) redisUtils.get(key);
|
||||||
if (CollectionUtil.isEmpty(stepTipLogs)) {
|
if (CollectionUtil.isEmpty(stepTipLogs)) {
|
||||||
|
|||||||
@@ -20,6 +20,8 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService;
|
||||||
|
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
|
||||||
import org.nl.b_lms.bst.ivt.shafttubeivt.service.IBstIvtShafttubeivtService;
|
import org.nl.b_lms.bst.ivt.shafttubeivt.service.IBstIvtShafttubeivtService;
|
||||||
import org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt;
|
import org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt;
|
||||||
import org.nl.b_lms.pda.service.ProductOutTwoService;
|
import org.nl.b_lms.pda.service.ProductOutTwoService;
|
||||||
@@ -36,6 +38,7 @@ import org.nl.b_lms.sch.tasks.TwoBoxExcepTask;
|
|||||||
import org.nl.b_lms.sch.tasks.TwoExceptionInTask;
|
import org.nl.b_lms.sch.tasks.TwoExceptionInTask;
|
||||||
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.first_floor_area.SsxDjwTask;
|
import org.nl.b_lms.sch.tasks.first_floor_area.SsxDjwTask;
|
||||||
|
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterEnum;
|
||||||
import org.nl.b_lms.sch.tasks.slitter.service.SlitterService;
|
import org.nl.b_lms.sch.tasks.slitter.service.SlitterService;
|
||||||
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
|
import org.nl.b_lms.storage_manage.database.service.IBstIvtBoxinfoService;
|
||||||
import org.nl.b_lms.storage_manage.database.service.IMdpbBoxtypeService;
|
import org.nl.b_lms.storage_manage.database.service.IMdpbBoxtypeService;
|
||||||
@@ -186,6 +189,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IBstIvtShafttubeivtService shafttubeivtService;
|
private IBstIvtShafttubeivtService shafttubeivtService;
|
||||||
@Autowired
|
@Autowired
|
||||||
|
private IBstIvtCutpointivtService bstIvtCutpointivtService;
|
||||||
|
@Autowired
|
||||||
private RedisUtils redisUtils;
|
private RedisUtils redisUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -2830,16 +2835,26 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
|||||||
boolean updateFlag = false;
|
boolean updateFlag = false;
|
||||||
if ("1".equals(type)) {
|
if ("1".equals(type)) {
|
||||||
if (task.getPoint_code1().contains("QHD")) {
|
if (task.getPoint_code1().contains("QHD")) {
|
||||||
// 请求取货
|
|
||||||
String deviceCode = task.getPoint_code2();
|
|
||||||
List<String> stepTipLogs = getRedisListValue("ERROR" + deviceCode);
|
|
||||||
BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false);
|
|
||||||
JSONObject requestParam = JSONObject.parseObject(task.getRequest_param());
|
JSONObject requestParam = JSONObject.parseObject(task.getRequest_param());
|
||||||
String qzzSize = requestParam.getString("qzz_size");
|
String qzzSize = requestParam.getString("qzz_size");
|
||||||
|
// 请求取货
|
||||||
|
String deviceCode = task.getPoint_code2();
|
||||||
|
BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false);
|
||||||
|
String generation;
|
||||||
|
String location;
|
||||||
|
if (ObjectUtil.isNotEmpty(startPoint)) {
|
||||||
|
generation = startPoint.getQzz_generation();
|
||||||
|
location = startPoint.getPoint_location();
|
||||||
|
} else {
|
||||||
|
BstIvtCutpointivt cutPoint = bstIvtCutpointivtService.getPintByTrussCode(deviceCode, false);
|
||||||
|
location = cutPoint.getPoint_location();
|
||||||
|
generation = requestParam.getString("qzz_generation");
|
||||||
|
}
|
||||||
// 获取气涨轴缓存没有任务的点位
|
// 获取气涨轴缓存没有任务的点位
|
||||||
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskShaftCache(qzzSize,
|
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskShaftCache(qzzSize,
|
||||||
startPoint.getQzz_generation(), startPoint.getPoint_location());
|
generation, location);
|
||||||
if (shafttubeivts.size() == 0) {
|
if (shafttubeivts.size() == 0) {
|
||||||
|
List<String> stepTipLogs = getRedisListValue("ERROR" + deviceCode);
|
||||||
stepTipLogs.add(">>>桁架取轴二次请求异常:未找到气涨轴规格「" + qzzSize + "」的暂存位");
|
stepTipLogs.add(">>>桁架取轴二次请求异常:未找到气涨轴规格「" + qzzSize + "」的暂存位");
|
||||||
redisUtils.set("ERROR" + deviceCode, stepTipLogs);
|
redisUtils.set("ERROR" + deviceCode, stepTipLogs);
|
||||||
throw new BadRequestException("未找到气涨轴规格「" + qzzSize + "」的暂存位");
|
throw new BadRequestException("未找到气涨轴规格「" + qzzSize + "」的暂存位");
|
||||||
@@ -2916,6 +2931,31 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
|||||||
targetPoint = task.getPoint_code2();
|
targetPoint = task.getPoint_code2();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if ("4".equals(type)) {
|
||||||
|
if (task.getPoint_code1().contains("QHD")) {
|
||||||
|
// 请求取货
|
||||||
|
String deviceCode = task.getPoint_code2();
|
||||||
|
BstIvtCutpointivt cutPoint = bstIvtCutpointivtService.getPintByTrussCode(deviceCode, false);
|
||||||
|
JSONObject requestParam = JSONObject.parseObject(task.getRequest_param());
|
||||||
|
String qzzSize = requestParam.getString("qzz_size");
|
||||||
|
String qzz_generation = ObjectUtil.isNotEmpty(requestParam.getString("qzz_generation")) ? requestParam.getString("qzz_generation") : "4";
|
||||||
|
// 获取气涨轴缓存没有任务的点位
|
||||||
|
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskShaftCache(qzzSize,
|
||||||
|
qzz_generation, cutPoint.getPoint_location());
|
||||||
|
if (shafttubeivts.size() == 0) {
|
||||||
|
throw new BadRequestException("未找到气涨轴规格「" + qzzSize + "」的暂存位");
|
||||||
|
}
|
||||||
|
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
|
||||||
|
targetPoint = shafttubeivt.getPoint_code();
|
||||||
|
// 修改任务
|
||||||
|
task.setPoint_code1(targetPoint);
|
||||||
|
task.setRemark("取货请求成功");
|
||||||
|
task.setUpdate_time(DateUtil.now());
|
||||||
|
updateFlag = true;
|
||||||
|
} else {
|
||||||
|
targetPoint = task.getPoint_code1();
|
||||||
|
}
|
||||||
|
}
|
||||||
if (updateFlag) {
|
if (updateFlag) {
|
||||||
taskService.updateById(task);
|
taskService.updateById(task);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user