add:新增空轴退回功能
This commit is contained in:
@@ -103,4 +103,6 @@ public interface IBstIvtShafttubeivtService extends IService<BstIvtShafttubeivt>
|
||||
* @return /
|
||||
*/
|
||||
List<BstIvtShafttubeivt> getOtherCBJData(String pointCode, String location);
|
||||
|
||||
List<BstIvtShafttubeivt> getNotTaskEmptyShaftCache(String size, String qzz_generation, String location);
|
||||
}
|
||||
|
||||
@@ -35,4 +35,8 @@ public interface BstIvtShafttubeivtMapper extends BaseMapper<BstIvtShafttubeivt>
|
||||
List<BstIvtShafttubeivt> getNotTaskShaftCacheEmpty(@Param("startPoint") BstIvtShafttubeivt startPoint);
|
||||
|
||||
List<BstIvtShafttubeivt> getOtherCBJData(String pointCode, String location);
|
||||
|
||||
List<BstIvtShafttubeivt> getNotTaskEmptyShaftCache(@Param("size") String size,
|
||||
@Param("qzz_generation") String qzz_generation,
|
||||
@Param("location") String location);
|
||||
}
|
||||
|
||||
@@ -64,4 +64,23 @@
|
||||
AND (IFNULL(bsf.container_name1,'') <![CDATA[ <> ]]> '' OR IFNULL(bsf.container_name2,'') <![CDATA[ <> ]]> '')
|
||||
AND point_location = #{location}
|
||||
</select>
|
||||
<select id="getNotTaskEmptyShaftCache"
|
||||
resultType="org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt">
|
||||
SELECT *
|
||||
FROM `bst_ivt_shafttubeivt` b
|
||||
WHERE b.have_qzz = '1'
|
||||
AND b.point_type = '6'
|
||||
AND b.qzz_size = #{size}
|
||||
<if test="qzz_size != 6">
|
||||
AND b.qzz_generation = #{qzz_generation}
|
||||
</if>
|
||||
AND b.point_location = #{location}
|
||||
AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status <![CDATA[ < ]]> '07' AND t.point_code2 = b.point_code)
|
||||
AND 0 = (SELECT COUNT(*) FROM bst_ivt_shafttubeivt bb WHERE bb.have_qzz ='1' AND bb.point_type = '6'
|
||||
<if test="qzz_size != 6">
|
||||
AND bb.qzz_generation = #{qzz_generation}
|
||||
</if>
|
||||
AND bb.qzz_size = #{qzz_size} AND bb.point_location = #{location} AND bb.sort_seq > b.sort_seq)
|
||||
ORDER BY b.sort_seq ASC
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -149,4 +149,9 @@ public class BstIvtShafttubeivtServiceImpl extends ServiceImpl<BstIvtShafttubeiv
|
||||
return bstIvtShafttubeivtMapper.getOtherCBJData(pointCode, location);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BstIvtShafttubeivt> getNotTaskEmptyShaftCache(String size, String qzz_generation,String location) {
|
||||
return bstIvtShafttubeivtMapper.getNotTaskEmptyShaftCache(size, qzz_generation, location);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -244,4 +244,11 @@ public class SlitterPdaController {
|
||||
public ResponseEntity<Object> downBait(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(slitterService.downBait(whereJson), HttpStatus.OK);
|
||||
}
|
||||
|
||||
@PostMapping("/returnShaft")
|
||||
@Log("空轴送回")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> returnShaft(@RequestBody JSONObject param) {
|
||||
return new ResponseEntity<>(slitterService.returnShaft(param), HttpStatus.OK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,219 @@
|
||||
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.common.exception.BadRequestException;
|
||||
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.nl.wms.sch.tasks.InHotTask;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @Author: tq
|
||||
* @Description: 空轴退回的AGV任务
|
||||
* @Date: 2025/4/25
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ReturnShaftAgvTask extends AbstractAcsTask {
|
||||
private final String THIS_CLASS = ReturnShaftAgvTask.class.getName();
|
||||
@Autowired
|
||||
private IschBaseTaskService taskService;
|
||||
@Autowired
|
||||
private IBstIvtCutpointivtService bcutpointivtService;
|
||||
@Autowired
|
||||
private IBstIvtShafttubeivtService shafttubeivtService;
|
||||
@Autowired
|
||||
private SendShaftToCacheTask sendShaftToCacheTask;
|
||||
|
||||
@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) {
|
||||
String requestParam = task.getRequest_param();
|
||||
JSONObject requestParamObj = JSONObject.parseObject(requestParam);
|
||||
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;
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@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())) {
|
||||
if (TaskStatusEnum.FINISHED.getCode().equals(task.getTask_status())) {
|
||||
throw new BadRequestException("任务[" + task.getTask_code() + "]已经完成!");
|
||||
}
|
||||
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||
JSONObject requestParam = JSONObject.parseObject(task.getRequest_param());
|
||||
// 互换资源
|
||||
// update: 在acs请求取货完成就已经清空点位信息
|
||||
String endPoint = task.getPoint_code2();
|
||||
BstIvtCutpointivt endPointObj = bcutpointivtService.getPintByAgvCode(endPoint, false);
|
||||
TaskUtils.pointMaintenanceInventory(task, endPointObj, "4");
|
||||
bcutpointivtService.updateById(endPointObj);
|
||||
|
||||
BstIvtShafttubeivt putWaitPoint = shafttubeivtService.getOne(new LambdaQueryWrapper<BstIvtShafttubeivt>()
|
||||
.eq(BstIvtShafttubeivt::getPoint_location, endPointObj.getPoint_location())
|
||||
.eq(BstIvtShafttubeivt::getPoint_type, "8"));
|
||||
if (ObjectUtil.isEmpty(putWaitPoint)) {
|
||||
throw new BadRequestException("未找到可存放气涨轴规格「" + endPoint + "」的等待点位");
|
||||
}
|
||||
|
||||
|
||||
// 创建行架任务
|
||||
if (ObjectUtil.isNotEmpty(endPointObj.getQzz_no1())){
|
||||
String qzzSize = endPointObj.getQzz_no1();
|
||||
String[] split = qzzSize.split("-");
|
||||
String size = split[0];
|
||||
String qzz_generation = split[1];
|
||||
List<BstIvtShafttubeivt> shafttubeivts = checkIsHaveEmptyPoint(size,qzz_generation);
|
||||
if (shafttubeivts.size() == 0) {
|
||||
throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位");
|
||||
}
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("point_code1", endPointObj.getTruss_point_code1());
|
||||
param.put("point_code2", putWaitPoint.getPoint_code());
|
||||
// hint: 当前分切计划的气涨轴尺寸
|
||||
param.put("qzz_size", endPointObj.getQzz_no1());
|
||||
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||
param.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴缓存<>气胀轴缓存位"));
|
||||
param.put("is_bushing", "0");
|
||||
sendShaftToCacheTask.createTask(param);
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(endPointObj.getQzz_no2())){
|
||||
String qzzSize = endPointObj.getQzz_no2();
|
||||
String[] split = qzzSize.split("-");
|
||||
String size = split[0];
|
||||
String qzz_generation = split[1];
|
||||
List<BstIvtShafttubeivt> shafttubeivts = checkIsHaveEmptyPoint(size,qzz_generation);
|
||||
if (shafttubeivts.size() == 0) {
|
||||
throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位");
|
||||
}
|
||||
JSONObject param = new JSONObject();
|
||||
param.put("point_code1", endPointObj.getTruss_point_code2());
|
||||
param.put("point_code2", putWaitPoint.getPoint_code());
|
||||
// hint: 当前分切计划的气涨轴尺寸
|
||||
param.put("qzz_size", endPointObj.getQzz_no2());
|
||||
param.put("task_type", SlitterEnum.TASK_TYPE.code("穿拔轴缓存<>气胀轴缓存位"));
|
||||
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||
param.put("is_bushing", "0");
|
||||
sendShaftToCacheTask.createTask(param);
|
||||
}
|
||||
|
||||
}
|
||||
// 取消
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||
}
|
||||
task.setUpdate_time(DateUtil.now());
|
||||
taskService.updateById(task);
|
||||
}
|
||||
|
||||
private List<BstIvtShafttubeivt> checkIsHaveEmptyPoint(String size, String qzz_generation) {
|
||||
// 获取空位
|
||||
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskEmptyShaftCache(size, qzz_generation,"0");
|
||||
return shafttubeivts;
|
||||
}
|
||||
|
||||
|
||||
@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(TaskStatusEnum.START_AND_POINT.getCode());
|
||||
task.setPoint_code1(form.getString("point_code1"));
|
||||
task.setPoint_code2(form.getString("point_code2"));
|
||||
task.setVehicle_code(form.getString("vehicle_code1"));
|
||||
task.setVehicle_code2(form.getString("vehicle_code2"));
|
||||
task.setAcs_task_type("3");
|
||||
task.setIs_delete("0");
|
||||
task.setRequest_param(form.toJSONString());
|
||||
task.setTask_type(form.getString("task_type"));
|
||||
task.setProduct_area(form.getString("product_area"));
|
||||
task.setRequest_param(JSONObject.toJSONString(form));
|
||||
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,166 @@
|
||||
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.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.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.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author: tq
|
||||
* @Description: 桁架从套轴对接位送气涨轴库
|
||||
* @Date: 2025/4/25
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class SendShaftToCacheTask extends AbstractAcsTask {
|
||||
private final String THIS_CLASS = SendShaftToCacheTask.class.getName();
|
||||
@Autowired
|
||||
private IschBaseTaskService taskService;
|
||||
@Autowired
|
||||
private IBstIvtShafttubeivtService shafttubeivtService;
|
||||
@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;
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@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 startPoint = task.getPoint_code1();
|
||||
String prefix = startPoint.substring(0, startPoint.length() - 2);
|
||||
String endPoint = task.getPoint_code2();
|
||||
BstIvtCutpointivt startPointObj = bcutpointivtService.getPintByAgvCode(prefix, false);
|
||||
BstIvtShafttubeivt endPointObj = shafttubeivtService.getByPointCode(endPoint, false);
|
||||
// 起点清空
|
||||
if (startPoint.contains("A")) {
|
||||
startPointObj.setQzz_no1("");
|
||||
}
|
||||
if (startPoint.contains("B")) {
|
||||
startPointObj.setQzz_no2("");
|
||||
}
|
||||
TaskUtils.pointMaintenance(task, startPointObj);
|
||||
bcutpointivtService.updateById(startPointObj);
|
||||
|
||||
endPointObj.setHave_qzz("1");
|
||||
TaskUtils.updateOptMessageByBShaftPoint(endPointObj);
|
||||
shafttubeivtService.updateById(endPointObj);
|
||||
BstIvtCutpointivt startPointParam = bcutpointivtService.getPintByAgvCode(prefix, false);
|
||||
if (ObjectUtil.isEmpty(startPointParam.getQzz_no1()) && ObjectUtil.isEmpty(startPointParam.getQzz_no2())) {
|
||||
startPointParam.setPoint_status("1");
|
||||
bcutpointivtService.updateById(startPointParam);
|
||||
}
|
||||
}
|
||||
// 取消
|
||||
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(TaskStatusEnum.START_AND_POINT.getCode());
|
||||
task.setPoint_code1(form.getString("point_code1"));
|
||||
task.setPoint_code2(form.getString("point_code2"));
|
||||
task.setTask_type("010815");
|
||||
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");
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,7 @@ public enum SlitterEnum {
|
||||
TASK_TYPE(MapOf.of("穿拔轴缓存<>穿拔轴位", "010801", "穿拔轴缓存<>分切对接位", "010802", "穿拔轴位<>气胀轴缓存位", "010803"
|
||||
, "分切机下料AGV任务", "010804", "分切机上气胀轴", "010805", "分切机下气胀轴", "010806", "备货区送载具", "010807"
|
||||
, "备货区送纸管", "010808", "分切机下料桁架任务", "010809", "分切机下料AGV到内包间", "010810", "套轴异常处理AGV任务", "010811"
|
||||
, "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814"));
|
||||
, "套轴异常处理桁架任务", "010812", "送气胀轴到分切机任务", "010813", "拔轴完毕出轴", "010814", "穿拔轴缓存<>气胀轴缓存位", "010815"));
|
||||
private Map<String, String> code;
|
||||
|
||||
public String code(String desc) {
|
||||
|
||||
@@ -355,4 +355,11 @@ public interface SlitterService {
|
||||
* @return
|
||||
*/
|
||||
JSONObject downBait(JSONObject param);
|
||||
|
||||
/**
|
||||
* 空轴退回
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
JSONObject returnShaft(JSONObject param);
|
||||
}
|
||||
|
||||
@@ -124,6 +124,8 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
@Autowired
|
||||
private UpShaftTrussTask upShaftTrussTask;
|
||||
@Autowired
|
||||
private ReturnShaftAgvTask returnShaftAgvTask;
|
||||
@Autowired
|
||||
private ISysNoticeService noticeService;
|
||||
|
||||
@Override
|
||||
@@ -2354,6 +2356,81 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JSONObject returnShaft(JSONObject param) {
|
||||
log.info("空轴退回 - {}", param);
|
||||
JSONObject res = new JSONObject();
|
||||
res.put("status", HttpStatus.HTTP_OK);
|
||||
res.put("message", "创建AGV任务成功!");
|
||||
// param: point_code
|
||||
String pointCode = param.getString("point_code");
|
||||
//缓存A气胀轴规格 3-4 三寸四代
|
||||
String size1 = param.getString("size1");
|
||||
//缓存B气胀轴规格
|
||||
String size2 = param.getString("size2");
|
||||
|
||||
BstIvtCutpointivt point = bcutpointivtService.getPintByAgvCode(pointCode, false);
|
||||
// 校验是否存在行架任务
|
||||
Boolean haveTaskByZcPoint = taskService.checkHaveTaskByZcPoint(point);
|
||||
if (haveTaskByZcPoint) {
|
||||
throw new BadRequestException("操作失败,点位[" + pointCode + "]存在未完成的行架任务!");
|
||||
}
|
||||
// 校验是否存在agv任务
|
||||
List<SchBaseTask> taskList = taskService.checkHaveStartTask(pointCode);
|
||||
if (taskList.size() > 0) {
|
||||
throw new BadRequestException("操作失败,点位[" + pointCode + "]存在未完成的agv任务!");
|
||||
}
|
||||
|
||||
if (ObjectUtil.equals(point.getPoint_status(), "2")) {
|
||||
// 如果是没货
|
||||
throw new BadRequestException("点位:" + point.getPoint_code() + "检测空气胀轴,请先清空点位信息再触发!!");
|
||||
}
|
||||
if (ObjectUtil.equals(point.getPoint_status(), "3")) {
|
||||
throw new BadRequestException("点位:" + point.getPoint_code() + "检测子卷,请先清空点位信息再触发!!");
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(point.getQzz_no1()) || ObjectUtil.isNotEmpty(point.getQzz_no2())) {
|
||||
throw new BadRequestException("点位:" + point.getPoint_code() + " 的气胀轴编码不为空,请先清空点位信息再触发!!");
|
||||
}
|
||||
if (Objects.equals(point.getPoint_status(), "1") && ObjectUtil.isEmpty(point.getQzz_no1()) && ObjectUtil.isEmpty(point.getQzz_no2())) {
|
||||
// 如果是没货 绑定为空轴状态
|
||||
point.setPoint_status("4");
|
||||
bcutpointivtService.updateById(point);
|
||||
}
|
||||
JSONObject taskParam = new JSONObject();
|
||||
|
||||
// 获取内包间缓存位
|
||||
List<BstIvtCutpointivt> areaEmptyNotTaskPoint = bcutpointivtService.getNBJCanUsePoint("1", "1", "0", "2");
|
||||
if (areaEmptyNotTaskPoint.size() <= 1) {
|
||||
throw new BadRequestException("请求搬运失败,内包间没有可存放位置!");
|
||||
}
|
||||
BstIvtCutpointivt endPoint = areaEmptyNotTaskPoint.get(0);
|
||||
RLock lock = redissonClient.getLock(endPoint.getPoint_code());
|
||||
boolean tryLock;
|
||||
try {
|
||||
tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||
} catch (InterruptedException e) {
|
||||
throw new BadRequestException("获取锁异常");
|
||||
}
|
||||
try {
|
||||
if (tryLock) {
|
||||
taskParam.put("point_code1", point.getPoint_code());
|
||||
taskParam.put("point_code2", endPoint.getPoint_code());
|
||||
taskParam.put("vehicle_code1", size1);
|
||||
taskParam.put("vehicle_code2", size2);
|
||||
taskParam.put("task_type", SlitterEnum.TASK_TYPE.code("分切机下料AGV到内包间"));
|
||||
taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||
returnShaftAgvTask.createTask(taskParam);
|
||||
} else {
|
||||
throw new BadRequestException("系统繁忙,稍后在试!!");
|
||||
}
|
||||
} finally {
|
||||
if (lock.isLocked() && lock.isHeldByCurrentThread()) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject downBait(JSONObject param) {
|
||||
|
||||
@@ -66,6 +66,22 @@ public class TaskUtils {
|
||||
target.setUpdate_time(now);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据任务维护分切点位库存
|
||||
* @param target
|
||||
*/
|
||||
public static void pointMaintenance(SchBaseTask task, BstIvtCutpointivt target) {
|
||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||
String currentUsername = SecurityUtils.getCurrentUsername();
|
||||
String now = DateUtil.now();
|
||||
target.setUpdate_optid(currentUserId);
|
||||
target.setUpdate_optname(currentUsername);
|
||||
target.setUpdate_time(now);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 用0,1,2,3四个的二进制字符表示是下单(双)上单(双)
|
||||
* @param currentUpPlan 要下来的上轴
|
||||
|
||||
@@ -2892,6 +2892,37 @@ public class AcsToWmsServiceImpl implements AcsToWmsService {
|
||||
targetPoint = task.getPoint_code2();
|
||||
}
|
||||
}
|
||||
if ("3".equals(type)) {
|
||||
if (task.getPoint_code2().contains("FHD")) {
|
||||
// 请求放货
|
||||
// 穿拔轴点位
|
||||
String deviceCode = task.getPoint_code1();
|
||||
BstIvtShafttubeivt startPoint = shafttubeivtService.getByPointCode(deviceCode, false);
|
||||
JSONObject requestParam = JSONObject.parseObject(task.getRequest_param());
|
||||
String qzzSize = requestParam.getString("qzz_size");
|
||||
if (ObjectUtil.isEmpty(qzzSize)) {
|
||||
throw new BadRequestException("气涨轴规格不能为空!");
|
||||
}
|
||||
String[] split = qzzSize.split("-");
|
||||
String size = split[0];
|
||||
String qzz_generation = split[1];
|
||||
|
||||
// 获取空位
|
||||
List<BstIvtShafttubeivt> shafttubeivts = shafttubeivtService.getNotTaskEmptyShaftCache(size, qzz_generation,"0");
|
||||
if (shafttubeivts.size() == 0) {
|
||||
throw new BadRequestException("未找到可存放气涨轴规格「" + qzzSize + "」的空暂存位");
|
||||
}
|
||||
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
|
||||
targetPoint = shafttubeivt.getPoint_code();
|
||||
// 修改任务
|
||||
task.setPoint_code2(targetPoint);
|
||||
task.setRemark("放货请求成功");
|
||||
task.setUpdate_time(DateUtil.now());
|
||||
updateFlag = true;
|
||||
} else {
|
||||
targetPoint = task.getPoint_code2();
|
||||
}
|
||||
}
|
||||
if (updateFlag) {
|
||||
taskService.updateById(task);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user