opt: 分切业务、气胀轴缓存库分配规则
This commit is contained in:
@@ -68,4 +68,20 @@ public interface IBstIvtShafttubeivtService extends IService<BstIvtShafttubeivt>
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<BstIvtShafttubeivt> getByQzzSize(String qzzSize, String specification, String location);
|
List<BstIvtShafttubeivt> getByQzzSize(String qzzSize, String specification, String location);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取没任务的气涨轴缓存位
|
||||||
|
* @param qzzSize
|
||||||
|
* @param specification
|
||||||
|
* @param location
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<BstIvtShafttubeivt> getNotTaskShaftCache(String qzzSize, String specification, String location);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取没任务的空的位置
|
||||||
|
* @param startPoint
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<BstIvtShafttubeivt> getNotTaskShaftCacheEmpty(BstIvtShafttubeivt startPoint);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,4 +14,8 @@ public interface BstIvtShafttubeivtMapper extends BaseMapper<BstIvtShafttubeivt>
|
|||||||
List<BstIvtShafttubeivt> getAllShaftPointsByConditions(String type, String location, String have);
|
List<BstIvtShafttubeivt> getAllShaftPointsByConditions(String type, String location, String have);
|
||||||
|
|
||||||
List<BstIvtShafttubeivt> getByQzzSize(String qzzSize, String specification, String location);
|
List<BstIvtShafttubeivt> getByQzzSize(String qzzSize, String specification, String location);
|
||||||
|
|
||||||
|
List<BstIvtShafttubeivt> getNotTaskShaftCache(String qzzSize, String specification, String location);
|
||||||
|
|
||||||
|
List<BstIvtShafttubeivt> getNotTaskShaftCacheEmpty(BstIvtShafttubeivt startPoint);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,4 +21,28 @@
|
|||||||
WHERE bsf.is_used = '1' AND bsf.qzz_size = #{qzzSize} AND bsf.point_type = '1'
|
WHERE bsf.is_used = '1' AND bsf.qzz_size = #{qzzSize} AND bsf.point_type = '1'
|
||||||
AND bsf.qzz_generation = #{specification} AND bsf.point_location = #{location}
|
AND bsf.qzz_generation = #{specification} AND bsf.point_location = #{location}
|
||||||
</select>
|
</select>
|
||||||
|
<select id="getNotTaskShaftCache"
|
||||||
|
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 = #{qzzSize}
|
||||||
|
AND b.qzz_generation = #{specification}
|
||||||
|
AND b.point_location = #{location}
|
||||||
|
AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status <![CDATA[ < ]]> '07' AND t.point_code1 = b.point_code)
|
||||||
|
ORDER BY b.sort_seq DESC
|
||||||
|
</select>
|
||||||
|
<select id="getNotTaskShaftCacheEmpty"
|
||||||
|
resultType="org.nl.b_lms.bst.ivt.shafttubeivt.service.dao.BstIvtShafttubeivt">
|
||||||
|
SELECT *
|
||||||
|
FROM `bst_ivt_shafttubeivt` b
|
||||||
|
WHERE b.have_qzz = '0'
|
||||||
|
AND b.point_type = '6'
|
||||||
|
AND b.qzz_size = #{qzz_size}
|
||||||
|
AND b.qzz_generation = #{qzz_generation}
|
||||||
|
AND b.point_location = #{point_location}
|
||||||
|
AND 0 = (SELECT COUNT(*) FROM sch_base_task t WHERE t.task_status <![CDATA[ < ]]> '07' AND t.point_code1 = b.point_code)
|
||||||
|
ORDER BY b.sort_seq ASC
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@@ -106,4 +106,14 @@ public class BstIvtShafttubeivtServiceImpl extends ServiceImpl<BstIvtShafttubeiv
|
|||||||
return bstIvtShafttubeivtMapper.getByQzzSize(qzzSize, specification, location);
|
return bstIvtShafttubeivtMapper.getByQzzSize(qzzSize, specification, location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<BstIvtShafttubeivt> getNotTaskShaftCache(String qzzSize, String specification, String location) {
|
||||||
|
return bstIvtShafttubeivtMapper.getNotTaskShaftCache(qzzSize, specification, location);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<BstIvtShafttubeivt> getNotTaskShaftCacheEmpty(BstIvtShafttubeivt startPoint) {
|
||||||
|
return bstIvtShafttubeivtMapper.getNotTaskShaftCacheEmpty(startPoint);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,4 +49,11 @@ public interface IPdmBiSlittingproductionplanService extends IService<PdmBiSlitt
|
|||||||
* @return /
|
* @return /
|
||||||
*/
|
*/
|
||||||
List<SlitterPlanDistinctDto> getAllCutPlan(String area);
|
List<SlitterPlanDistinctDto> getAllCutPlan(String area);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过气涨轴编码获取分切计划
|
||||||
|
* @param qzzNo 气胀轴尺寸
|
||||||
|
* @return 最多两个
|
||||||
|
*/
|
||||||
|
List<PdmBiSlittingproductionplan> getByQzzNo(String qzzNo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package org.nl.b_lms.pdm.bi.slittingproductionplan.service.impl;
|
|||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
@@ -80,4 +81,13 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl<PdmBiSli
|
|||||||
return pdmBiSlittingproductionplanMapper.getAllCutPlan(area);
|
return pdmBiSlittingproductionplanMapper.getAllCutPlan(area);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<PdmBiSlittingproductionplan> getByQzzNo(String qzzNo) {
|
||||||
|
LambdaQueryWrapper<PdmBiSlittingproductionplan> lam = new QueryWrapper<PdmBiSlittingproductionplan>().lambda();
|
||||||
|
lam.eq(PdmBiSlittingproductionplan::getQzzno, qzzNo)
|
||||||
|
.eq(PdmBiSlittingproductionplan::getIs_delete, "0")
|
||||||
|
.eq(PdmBiSlittingproductionplan::getStatus, "09");
|
||||||
|
return pdmBiSlittingproductionplanMapper.selectList(lam);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ public class SendCopperFoilSubRollTrussTask extends AbstractAcsTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public String createTask(JSONObject form) {
|
public String createTask(JSONObject form) {
|
||||||
String currentUserId = SecurityUtils.getCurrentUserId();
|
String currentUserId = SecurityUtils.getCurrentUserId();
|
||||||
String currentUsername = SecurityUtils.getCurrentUsername();
|
String currentUsername = SecurityUtils.getCurrentUsername();
|
||||||
|
|||||||
@@ -0,0 +1,141 @@
|
|||||||
|
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.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.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: lyd
|
||||||
|
* @Description: 桁架从气涨轴缓存位送气涨轴到套拔轴位
|
||||||
|
* @Date: 2024/3/8
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class TrussCallShaftCacheTask extends AbstractAcsTask {
|
||||||
|
private final String THIS_CLASS = TrussCallShaftCacheTask.class.getName();
|
||||||
|
@Autowired
|
||||||
|
private IschBaseTaskService taskService;
|
||||||
|
@Autowired
|
||||||
|
private IBstIvtShafttubeivtService shafttubeivtService;
|
||||||
|
@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 startPoint = task.getPoint_code1();
|
||||||
|
BstIvtShafttubeivt startPointObj = shafttubeivtService.getByPointCode(startPoint, false);
|
||||||
|
// 起点清空
|
||||||
|
startPointObj.setHave_qzz("0");
|
||||||
|
TaskUtils.updateOptMessageByBShaftPoint(startPointObj);
|
||||||
|
shafttubeivtService.updateById(startPointObj);
|
||||||
|
}
|
||||||
|
// 取消
|
||||||
|
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.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
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
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,148 @@
|
|||||||
|
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.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.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: lyd
|
||||||
|
* @Description: 桁架送气涨轴到缓存区
|
||||||
|
* @Date: 2024/3/8
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
@Service
|
||||||
|
public class TrussSendShaftCacheTask extends AbstractAcsTask {
|
||||||
|
private final String THIS_CLASS = TrussSendShaftCacheTask.class.getName();
|
||||||
|
@Autowired
|
||||||
|
private IschBaseTaskService taskService;
|
||||||
|
@Autowired
|
||||||
|
private IBstIvtShafttubeivtService shafttubeivtService;
|
||||||
|
|
||||||
|
@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 startPoint = task.getPoint_code1();
|
||||||
|
String endPoint = task.getPoint_code2();
|
||||||
|
BstIvtShafttubeivt startPointObj = shafttubeivtService.getByPointCode(startPoint, false);
|
||||||
|
BstIvtShafttubeivt endPointObj = shafttubeivtService.getByPointCode(endPoint, false);
|
||||||
|
// 起点清空
|
||||||
|
startPointObj.setHave_qzz("0");
|
||||||
|
TaskUtils.updateOptMessageByBShaftPoint(startPointObj);
|
||||||
|
shafttubeivtService.updateById(startPointObj);
|
||||||
|
// 终点设置值
|
||||||
|
endPointObj.setHave_qzz("1");
|
||||||
|
TaskUtils.updateOptMessageByBShaftPoint(endPointObj);
|
||||||
|
shafttubeivtService.updateById(endPointObj);
|
||||||
|
}
|
||||||
|
// 取消
|
||||||
|
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.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
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,7 +5,6 @@ import cn.hutool.core.util.ObjectUtil;
|
|||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService;
|
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.cutpointivt.service.dao.BstIvtCutpointivt;
|
||||||
@@ -13,9 +12,9 @@ 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.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
|
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
|
||||||
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
|
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
|
||||||
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.slitter.TrussCallAirShaftTask;
|
import org.nl.b_lms.sch.tasks.slitter.TrussCallAirShaftTask;
|
||||||
|
import org.nl.b_lms.sch.tasks.slitter.TrussCallShaftCacheTask;
|
||||||
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant;
|
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant;
|
||||||
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto;
|
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto;
|
||||||
import org.nl.common.utils.SecurityUtils;
|
import org.nl.common.utils.SecurityUtils;
|
||||||
@@ -28,8 +27,6 @@ import org.springframework.transaction.annotation.Isolation;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: lyd
|
* @Author: lyd
|
||||||
@@ -53,8 +50,10 @@ public class AutoCallAirShaftTask {
|
|||||||
private TrussCallAirShaftTask trussCallAirShaftTask;
|
private TrussCallAirShaftTask trussCallAirShaftTask;
|
||||||
@Autowired
|
@Autowired
|
||||||
private WmsToAcsService wmsToAcsService;
|
private WmsToAcsService wmsToAcsService;
|
||||||
|
@Autowired
|
||||||
|
private TrussCallShaftCacheTask trussCallShaftCacheTask;
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_UNCOMMITTED)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void run() {
|
public void run() {
|
||||||
// 1、获取空的插拔轴位(无任务) todo:(目前都是上区域,下区域未考虑)
|
// 1、获取空的插拔轴位(无任务) todo:(目前都是上区域,下区域未考虑)
|
||||||
List<BstIvtShafttubeivt> emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2","0","0");
|
List<BstIvtShafttubeivt> emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2","0","0");
|
||||||
@@ -109,7 +108,7 @@ public class AutoCallAirShaftTask {
|
|||||||
List<BstIvtCutpointivt> qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, area);
|
List<BstIvtCutpointivt> qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, area);
|
||||||
if (qzzPoint.size() == 0) {
|
if (qzzPoint.size() == 0) {
|
||||||
// 调用ACS滚条气涨轴下来
|
// 调用ACS滚条气涨轴下来
|
||||||
toAcsOutShaft(qzzSize, specification, location);
|
toAcsOutShaft(qzzSize, specification, location, empty);
|
||||||
// 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划
|
// 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划
|
||||||
saveCutPlanMessage(empty, needPlans, qzzSize);
|
saveCutPlanMessage(empty, needPlans, qzzSize);
|
||||||
return;
|
return;
|
||||||
@@ -119,7 +118,7 @@ public class AutoCallAirShaftTask {
|
|||||||
if (ObjectUtil.isEmpty(startPoint)) {
|
if (ObjectUtil.isEmpty(startPoint)) {
|
||||||
// 如果不存在,则发起信号滚气涨轴
|
// 如果不存在,则发起信号滚气涨轴
|
||||||
// 调用ACS滚条气涨轴下来
|
// 调用ACS滚条气涨轴下来
|
||||||
toAcsOutShaft(qzzSize, specification, location);
|
toAcsOutShaft(qzzSize, specification, location, empty);
|
||||||
// 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划
|
// 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划
|
||||||
saveCutPlanMessage(empty, needPlans, qzzSize);
|
saveCutPlanMessage(empty, needPlans, qzzSize);
|
||||||
return;
|
return;
|
||||||
@@ -159,17 +158,23 @@ public class AutoCallAirShaftTask {
|
|||||||
/**
|
/**
|
||||||
* 获取对应的气胀轴库1
|
* 获取对应的气胀轴库1
|
||||||
* @param qzzSize 气涨轴尺寸
|
* @param qzzSize 气涨轴尺寸
|
||||||
* @param specification 标箔、锂电
|
* @param specification 标箔、锂电(1,2)
|
||||||
* @param location 位置:上半部分还是下半部分
|
* @param location 位置:上半部分还是下半部分
|
||||||
|
* @param empty 套拔轴点位
|
||||||
*/
|
*/
|
||||||
private void toAcsOutShaft(String qzzSize, String specification, String location) {
|
private void toAcsOutShaft(String qzzSize, String specification, String location, BstIvtShafttubeivt empty) {
|
||||||
// todo: 访问acs判断是否有无气涨轴
|
|
||||||
// 需要区分上下
|
// 需要区分上下
|
||||||
List<BstIvtShafttubeivt> shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize, specification, location);
|
List<BstIvtShafttubeivt> shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize, specification, location);
|
||||||
if (shafttubeivts.size() == 0) {
|
if (shafttubeivts.size() == 0) {
|
||||||
throw new BadRequestException("气胀轴库找不到[" + qzzSize + "]规格的气涨轴");
|
throw new BadRequestException("气胀轴库找不到[" + qzzSize + "]规格的气涨轴");
|
||||||
}
|
}
|
||||||
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
|
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
|
||||||
|
// todo: 访问acs判断是否有无气涨轴
|
||||||
|
boolean flag = true;
|
||||||
|
if (!flag) {
|
||||||
|
// 气涨轴库没有对应的气涨轴,就到气涨轴暂存区获取
|
||||||
|
toCreatShaftCacheTask(qzzSize, specification, location, empty);
|
||||||
|
} else {
|
||||||
JSONArray acsParam = new JSONArray();
|
JSONArray acsParam = new JSONArray();
|
||||||
JSONObject acsQzz = new JSONObject();
|
JSONObject acsQzz = new JSONObject();
|
||||||
acsQzz.put("device_code", shafttubeivt.getPoint_code());
|
acsQzz.put("device_code", shafttubeivt.getPoint_code());
|
||||||
@@ -179,7 +184,38 @@ public class AutoCallAirShaftTask {
|
|||||||
acsParam.add(acsQzz);
|
acsParam.add(acsQzz);
|
||||||
wmsToAcsService.action(acsParam);
|
wmsToAcsService.action(acsParam);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建气涨轴缓存的桁架任务
|
||||||
|
* @param qzzSize 气涨轴尺寸
|
||||||
|
* @param specification 标箔、锂电(1,2)
|
||||||
|
* @param location 位置:上半部分还是下半部分
|
||||||
|
* @param empty 套拔轴点位
|
||||||
|
*/
|
||||||
|
private void toCreatShaftCacheTask(String qzzSize, String specification, String location, BstIvtShafttubeivt empty) {
|
||||||
|
// 获取气涨轴缓存没有任务的点位
|
||||||
|
List<BstIvtShafttubeivt> shafttubeivts = bstIvtShafttubeivtService.getNotTaskShaftCache(qzzSize, specification, location);
|
||||||
|
if (shafttubeivts.size() == 0) {
|
||||||
|
throw new BadRequestException("未找到气涨轴规格「" + qzzSize + "」的暂存位");
|
||||||
|
}
|
||||||
|
BstIvtShafttubeivt shafttubeivt = shafttubeivts.get(0);
|
||||||
|
JSONObject param = new JSONObject();
|
||||||
|
param.put("point_code1", shafttubeivt.getPoint_code());
|
||||||
|
param.put("point_code2", empty.getPoint_code());
|
||||||
|
param.put("is_bushing", "1");
|
||||||
|
param.put("task_type", "6");
|
||||||
|
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||||
|
param.put("qzz_size", qzzSize);
|
||||||
|
trussCallShaftCacheTask.createTask(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存信息到点位上
|
||||||
|
* @param empty 套拔轴机位置
|
||||||
|
* @param needPlans 需要的分切计划
|
||||||
|
* @param qzzSize 气涨轴尺寸
|
||||||
|
*/
|
||||||
private void saveCutPlanMessage(BstIvtShafttubeivt empty, List<PdmBiSlittingproductionplan> needPlans, String qzzSize) {
|
private void saveCutPlanMessage(BstIvtShafttubeivt empty, List<PdmBiSlittingproductionplan> needPlans, String qzzSize) {
|
||||||
empty.setHave_qzz("1");
|
empty.setHave_qzz("1");
|
||||||
empty.setQzz_size(qzzSize);
|
empty.setQzz_size(qzzSize);
|
||||||
@@ -219,6 +255,10 @@ public class AutoCallAirShaftTask {
|
|||||||
slittingproductionplanService.updateBatchById(needPlans);
|
slittingproductionplanService.updateBatchById(needPlans);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 不需要套轴,就只做拔轴
|
||||||
|
* @param empty 空的插拔轴点位
|
||||||
|
*/
|
||||||
private void makePullShaft(BstIvtShafttubeivt empty) {
|
private void makePullShaft(BstIvtShafttubeivt empty) {
|
||||||
List<BstIvtCutpointivt> notTaskPoints = bcutpointivtService.getAreaNotTaskPointByStatus("1", "3", "0");
|
List<BstIvtCutpointivt> notTaskPoints = bcutpointivtService.getAreaNotTaskPointByStatus("1", "3", "0");
|
||||||
if (notTaskPoints.size() == 0) {
|
if (notTaskPoints.size() == 0) {
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package org.nl.b_lms.sch.tasks.slitter.auto;
|
|||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.nl.b_lms.bst.ivt.cutpointivt.service.IBstIvtCutpointivtService;
|
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.cutpointivt.service.dao.BstIvtCutpointivt;
|
||||||
@@ -14,10 +15,13 @@ import org.nl.b_lms.sch.tasks.slitter.SendAirShaftAgvTask;
|
|||||||
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant;
|
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant;
|
||||||
import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper;
|
import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper;
|
||||||
import org.nl.modules.common.exception.BadRequestException;
|
import org.nl.modules.common.exception.BadRequestException;
|
||||||
|
import org.redisson.api.RLock;
|
||||||
|
import org.redisson.api.RedissonClient;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
@@ -39,7 +43,10 @@ public class AutoSendAirShaftAgvTask {
|
|||||||
private SendAirShaftAgvTask sendAirShaftAgvTask;
|
private SendAirShaftAgvTask sendAirShaftAgvTask;
|
||||||
@Autowired
|
@Autowired
|
||||||
private SlitterMapper slitterMapper;
|
private SlitterMapper slitterMapper;
|
||||||
|
@Autowired
|
||||||
|
private RedissonClient redissonClient;
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
public void run() {
|
public void run() {
|
||||||
// 获取套轴对接位有气涨轴没任务的点位
|
// 获取套轴对接位有气涨轴没任务的点位
|
||||||
List<BstIvtCutpointivt> cutPoints = bcutpointivtService.getAreaNotTaskPointByStatus("1", "2", "0");
|
List<BstIvtCutpointivt> cutPoints = bcutpointivtService.getAreaNotTaskPointByStatus("1", "2", "0");
|
||||||
@@ -74,14 +81,18 @@ public class AutoSendAirShaftAgvTask {
|
|||||||
}
|
}
|
||||||
// 如果两个气涨轴编码则表示一组满了
|
// 如果两个气涨轴编码则表示一组满了
|
||||||
// 查找分切对接没任务的空位
|
// 查找分切对接没任务的空位
|
||||||
// todo:枷锁
|
|
||||||
List<BstIvtCutpointivt> emptyPoint = slitterMapper.getEmptyCutPointNotTask(deviceCut.getSort_seq());
|
List<BstIvtCutpointivt> emptyPoint = slitterMapper.getEmptyCutPointNotTask(deviceCut.getSort_seq());
|
||||||
if (emptyPoint.size() == 0) {
|
if (emptyPoint.size() == 0) {
|
||||||
log.warn("找不到对应的位置!");
|
log.warn("找不到对应的位置!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 创建任务
|
// 创建任务
|
||||||
|
// 枷锁
|
||||||
BstIvtCutpointivt endPoint = emptyPoint.get(0);
|
BstIvtCutpointivt endPoint = emptyPoint.get(0);
|
||||||
|
RLock lock = redissonClient.getLock(endPoint.getPoint_code());
|
||||||
|
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
||||||
|
try {
|
||||||
|
if (tryLock) {
|
||||||
JSONObject param = new JSONObject();
|
JSONObject param = new JSONObject();
|
||||||
param.put("point_code1", cutPoint.getPoint_code());
|
param.put("point_code1", cutPoint.getPoint_code());
|
||||||
param.put("point_code2", endPoint.getPoint_code());
|
param.put("point_code2", endPoint.getPoint_code());
|
||||||
@@ -90,6 +101,14 @@ public class AutoSendAirShaftAgvTask {
|
|||||||
param.put("task_type", "3");
|
param.put("task_type", "3");
|
||||||
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
|
||||||
sendAirShaftAgvTask.createTask(param);
|
sendAirShaftAgvTask.createTask(param);
|
||||||
|
} else {
|
||||||
|
throw new BadRequestException("系统繁忙,稍后在试");
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (tryLock) {
|
||||||
|
lock.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,6 +35,13 @@ public interface SlitterService {
|
|||||||
*/
|
*/
|
||||||
JSONObject acsFinishLoadShaft(JSONObject param);
|
JSONObject acsFinishLoadShaft(JSONObject param);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ACS申请送气涨轴到气涨轴暂存位
|
||||||
|
* @param param
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
JSONObject acsSendShaftToCache(JSONObject param);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分切机下料
|
* 分切机下料
|
||||||
* @param param
|
* @param param
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package org.nl.b_lms.sch.tasks.slitter.service.impl;
|
package org.nl.b_lms.sch.tasks.slitter.service.impl;
|
||||||
|
|
||||||
import cn.hutool.core.date.DateUtil;
|
|
||||||
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.core.util.IdUtil;
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import cn.hutool.http.HttpStatus;
|
import cn.hutool.http.HttpStatus;
|
||||||
@@ -68,37 +67,50 @@ public class SlitterServiceImpl implements SlitterService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private RedissonClient redissonClient;
|
private RedissonClient redissonClient;
|
||||||
|
|
||||||
|
@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);
|
||||||
|
boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS);
|
||||||
|
try {
|
||||||
|
if (tryLock) {
|
||||||
String size = param.getString("size");
|
String size = param.getString("size");
|
||||||
BstIvtShafttubeivt point = shafttubeivtService.getByPointCode(deviceCode, false);
|
BstIvtShafttubeivt point = shafttubeivtService.getByPointCode(deviceCode, false);
|
||||||
res.put("code", HttpStatus.HTTP_OK);
|
|
||||||
res.put("device_code", deviceCode);
|
res.put("device_code", deviceCode);
|
||||||
res.put("data", con);
|
res.put("data", con);
|
||||||
con.put("left", point.getTube_code1());
|
con.put("left", point.getTube_code1());
|
||||||
con.put("right", point.getTube_code2());
|
con.put("right", point.getTube_code2());
|
||||||
|
} else {
|
||||||
|
throw new BadRequestException("系统繁忙,稍后在试");
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (tryLock) {
|
||||||
|
lock.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.put("code", HttpStatus.HTTP_OK);
|
||||||
|
res.put("message", "任务请求成功!");
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
@Override
|
@Override
|
||||||
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);
|
||||||
|
try {
|
||||||
|
if (tryLock) {
|
||||||
// 气涨轴编码
|
// 气涨轴编码
|
||||||
String taskId = param.getString("task_id");
|
String qzzNo = param.getString("qzz_no");
|
||||||
// 获取上一个桁架任务
|
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.getByQzzNo(qzzNo);
|
||||||
SchBaseTask previousTask = taskService.getById(taskId);
|
if (plans.size() == 0) {
|
||||||
String requestParam = previousTask.getRequest_param();
|
throw new BadRequestException("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!");
|
||||||
JSONObject requestParamObj = JSONObject.parseObject(requestParam);
|
}
|
||||||
List<String> collect = Stream.of(requestParamObj.getString("left"), requestParamObj.getString("right"))
|
|
||||||
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
|
|
||||||
// hint: 使用子卷号
|
|
||||||
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
|
||||||
.eq(PdmBiSlittingproductionplan::getContainer_name, collect)
|
|
||||||
.eq(PdmBiSlittingproductionplan::getStatus, "09"));
|
|
||||||
PdmBiSlittingproductionplan plan;
|
PdmBiSlittingproductionplan plan;
|
||||||
if ("1".equals(deviceCode.substring(deviceCode.length() - 1))) {
|
if ("1".equals(deviceCode.substring(deviceCode.length() - 1))) {
|
||||||
plan = plans.stream().filter(p -> "1".equals(p.getLeft_or_right())).findFirst().orElse(null);
|
plan = plans.stream().filter(p -> "1".equals(p.getLeft_or_right())).findFirst().orElse(null);
|
||||||
@@ -116,42 +128,61 @@ public class SlitterServiceImpl implements SlitterService {
|
|||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
@Override
|
@Override
|
||||||
public JSONObject acsRequestShaftPluckTube(JSONObject param) {
|
public JSONObject acsRequestShaftPluckTube(JSONObject param) {
|
||||||
// 参数:设备号,type,插拔轴位,task_id
|
// 参数:设备号,type,插拔轴位,qzzSize
|
||||||
JSONObject res = new JSONObject();
|
JSONObject res = new JSONObject();
|
||||||
String deviceCode = param.getString("device_code");
|
String deviceCode = param.getString("device_code");
|
||||||
String taskId = param.getString("task_id");
|
RLock lock = redissonClient.getLock(deviceCode);
|
||||||
if (ObjectUtil.isEmpty(taskId)) {
|
boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS);
|
||||||
throw new BadRequestException("任务id不能为空!");
|
try {
|
||||||
|
if (tryLock) {
|
||||||
|
String qzzNo = param.getString("qzz_no");
|
||||||
|
if (ObjectUtil.isEmpty(qzzNo)) {
|
||||||
|
throw new BadRequestException("气涨轴编码不能为空!");
|
||||||
}
|
}
|
||||||
SchBaseTask previousTask = taskService.getById(taskId);
|
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.getByQzzNo(qzzNo);
|
||||||
// 反馈 纸管尺寸
|
|
||||||
String requestParam = previousTask.getRequest_param();
|
|
||||||
JSONObject requestParamObj = JSONObject.parseObject(requestParam);
|
|
||||||
List<String> collect = Stream.of(requestParamObj.getString("left"), requestParamObj.getString("right"))
|
|
||||||
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
|
|
||||||
// hint: 使用子卷号
|
|
||||||
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
|
||||||
.eq(PdmBiSlittingproductionplan::getContainer_name, collect)
|
|
||||||
.eq(PdmBiSlittingproductionplan::getStatus, "09"));
|
|
||||||
if (plans.size() == 0) {
|
if (plans.size() == 0) {
|
||||||
throw new BadRequestException("查询不到对应的子卷信息!");
|
throw new BadRequestException("查询不到气胀轴编码「" + qzzNo + "」对应的子卷信息!");
|
||||||
}
|
}
|
||||||
PdmBiSlittingproductionplan plan = plans.get(0);
|
// 反馈 纸管尺寸
|
||||||
|
JSONObject r = new JSONObject();
|
||||||
|
res.put("data", r);
|
||||||
|
r.put("device_code", deviceCode);
|
||||||
|
for (PdmBiSlittingproductionplan plan : plans) {
|
||||||
String s = String.valueOf("1".equals(plan.getPaper_tube_or_FRP())
|
String s = String.valueOf("1".equals(plan.getPaper_tube_or_FRP())
|
||||||
? plan.getPaper_tube_model()
|
? plan.getPaper_tube_model()
|
||||||
: plan.getFRP_model().split("\\|")[2].charAt(0));
|
: plan.getFRP_model().split("\\|")[2].charAt(0));
|
||||||
JSONObject r = new JSONObject();
|
if ("1".equals(plan.getLeft_or_right())) {
|
||||||
|
r.put("left_size", s);
|
||||||
|
} else {
|
||||||
|
r.put("right_size", s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
throw new BadRequestException("系统繁忙,稍后在试");
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (tryLock) {
|
||||||
|
lock.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
res.put("code", HttpStatus.HTTP_OK);
|
res.put("code", HttpStatus.HTTP_OK);
|
||||||
res.put("data", r);
|
res.put("message", "请求成功");
|
||||||
r.put("size", s);
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,7 +193,7 @@ 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);
|
RLock lock = redissonClient.getLock(deviceCode);
|
||||||
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
|
boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS);
|
||||||
try {
|
try {
|
||||||
if (tryLock) {
|
if (tryLock) {
|
||||||
String taskCode = param.getString("task_code");
|
String taskCode = param.getString("task_code");
|
||||||
@@ -212,7 +243,7 @@ public class SlitterServiceImpl implements SlitterService {
|
|||||||
}
|
}
|
||||||
// 枷锁
|
// 枷锁
|
||||||
RLock lockPoint = redissonClient.getLock(cutPoint.getPoint_code());
|
RLock lockPoint = redissonClient.getLock(cutPoint.getPoint_code());
|
||||||
boolean tryLockPoint = lockPoint.tryLock(0, TimeUnit.SECONDS);
|
boolean tryLockPoint = lockPoint.tryLock(5, TimeUnit.SECONDS);
|
||||||
try {
|
try {
|
||||||
if (tryLockPoint) {
|
if (tryLockPoint) {
|
||||||
// 分切计划设置套轴完成
|
// 分切计划设置套轴完成
|
||||||
@@ -254,12 +285,58 @@ public class SlitterServiceImpl implements SlitterService {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
@Override
|
||||||
|
public JSONObject acsSendShaftToCache(JSONObject param) {
|
||||||
|
JSONObject res = new JSONObject();
|
||||||
|
String deviceCode = param.getString("device_code");
|
||||||
|
RLock lock = redissonClient.getLock(deviceCode);
|
||||||
|
boolean tryLock = lock.tryLock(10, TimeUnit.SECONDS);
|
||||||
|
try {
|
||||||
|
if (tryLock) {
|
||||||
|
String qzzSize = param.getString("qzz_size");
|
||||||
|
// 判断是否有未完成的任务
|
||||||
|
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
|
||||||
|
.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");
|
||||||
|
} else {
|
||||||
|
throw new BadRequestException("系统繁忙,稍后在试");
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (tryLock) {
|
||||||
|
lock.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
res.put("code", HttpStatus.HTTP_OK);
|
||||||
|
res.put("message", "请求成功");
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public JSONObject mesSlittingMachineSendMaterial(JSONObject param) {
|
public JSONObject mesSlittingMachineSendMaterial(JSONObject param) {
|
||||||
JSONObject res = new JSONObject();
|
JSONObject res = new JSONObject();
|
||||||
res.put("status", HttpStatus.HTTP_OK);
|
|
||||||
res.put("message", "子卷出站任务生成成功!");
|
|
||||||
// todo: 获取子卷号数组
|
// todo: 获取子卷号数组
|
||||||
JSONArray containers = param.getJSONArray("container");
|
JSONArray containers = param.getJSONArray("container");
|
||||||
List<String> containerList = containers.toJavaList(String.class);
|
List<String> containerList = containers.toJavaList(String.class);
|
||||||
@@ -269,6 +346,7 @@ public class SlitterServiceImpl implements SlitterService {
|
|||||||
// 获取分切计划,最多4个需要出站的任务
|
// 获取分切计划,最多4个需要出站的任务
|
||||||
List<PdmBiSlittingproductionplan> currentPlans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
List<PdmBiSlittingproductionplan> currentPlans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||||
.in(PdmBiSlittingproductionplan::getContainer_name, containerList)
|
.in(PdmBiSlittingproductionplan::getContainer_name, containerList)
|
||||||
|
.eq(PdmBiSlittingproductionplan::getIs_delete, "0")
|
||||||
.eq(PdmBiSlittingproductionplan::getStatus, "05"));
|
.eq(PdmBiSlittingproductionplan::getStatus, "05"));
|
||||||
if (currentPlans.size() == 0) {
|
if (currentPlans.size() == 0) {
|
||||||
throw new BadRequestException("当前子卷已经出卷或者不存在!");
|
throw new BadRequestException("当前子卷已经出卷或者不存在!");
|
||||||
@@ -298,8 +376,12 @@ public class SlitterServiceImpl implements SlitterService {
|
|||||||
if (emptyPoints.size() == 0) {
|
if (emptyPoints.size() == 0) {
|
||||||
throw new BadRequestException("分切机【" + device.getExt_code() + "】找不到对应的对接位!");
|
throw new BadRequestException("分切机【" + device.getExt_code() + "】找不到对应的对接位!");
|
||||||
}
|
}
|
||||||
// todo: 枷锁
|
// 枷锁
|
||||||
BstIvtCutpointivt emptyPoint = emptyPoints.get(0);
|
BstIvtCutpointivt emptyPoint = emptyPoints.get(0);
|
||||||
|
RLock lock = redissonClient.getLock(emptyPoint.getPoint_code());
|
||||||
|
boolean tryLock = lock.tryLock(5, TimeUnit.SECONDS);
|
||||||
|
try {
|
||||||
|
if (tryLock) {
|
||||||
// 创建任务
|
// 创建任务
|
||||||
if (currentUpPlan != null && currentDownPlan != null) {
|
if (currentUpPlan != null && currentDownPlan != null) {
|
||||||
// 双轴任务 下双
|
// 双轴任务 下双
|
||||||
@@ -328,6 +410,14 @@ public class SlitterServiceImpl implements SlitterService {
|
|||||||
slitterDownTrussTask.createTask(taskParam);
|
slitterDownTrussTask.createTask(taskParam);
|
||||||
slittingproductionplanService.updateBatchById(currentPlans);
|
slittingproductionplanService.updateBatchById(currentPlans);
|
||||||
return res;
|
return res;
|
||||||
|
} else {
|
||||||
|
throw new BadRequestException("系统繁忙,稍后在试");
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (tryLock) {
|
||||||
|
lock.unlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
PdmBiSlittingproductionplan tmpPlan = timePlans.get(0);
|
PdmBiSlittingproductionplan tmpPlan = timePlans.get(0);
|
||||||
// hint: 以第一条为准,过滤和第一条同组同母卷的分切计划
|
// hint: 以第一条为准,过滤和第一条同组同母卷的分切计划
|
||||||
@@ -414,6 +504,8 @@ public class SlitterServiceImpl implements SlitterService {
|
|||||||
mergedList.addAll(currentPlans);
|
mergedList.addAll(currentPlans);
|
||||||
mergedList.addAll(nextPlans);
|
mergedList.addAll(nextPlans);
|
||||||
slittingproductionplanService.updateBatchById(mergedList);
|
slittingproductionplanService.updateBatchById(mergedList);
|
||||||
|
res.put("status", HttpStatus.HTTP_OK);
|
||||||
|
res.put("message", "子卷出站任务生成成功!");
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user