feat: 完善分切下料桁架任务
This commit is contained in:
@@ -43,7 +43,7 @@ public interface IBstIvtShafttubeivtService extends IService<BstIvtShafttubeivt>
|
||||
void deleteAll(Set<String> ids);
|
||||
|
||||
/**
|
||||
* 获取启用的 类型 区域 有无轴的点位
|
||||
* 获取启用的 类型 区域 有无轴的点位 (无任务)
|
||||
* @param type
|
||||
* @param location
|
||||
* @param have
|
||||
|
||||
@@ -58,6 +58,13 @@ public interface IstIvtCutpointivtService extends IService<StIvtCutpointivt> {
|
||||
* @return /
|
||||
*/
|
||||
StIvtCutpointivt getPintByPointCode(String code, boolean flag);
|
||||
/**
|
||||
* 根据点位编码获取分切机上下轴
|
||||
* @param code 点位编码
|
||||
* @param flag 是否判断启用
|
||||
* @return /
|
||||
*/
|
||||
StIvtCutpointivt getPintByUpOrDownCode(String code, boolean flag);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ import org.nl.common.domain.query.PageQuery;
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
|
||||
/**
|
||||
@@ -90,6 +91,14 @@ public class StIvtCutpointivtServiceImpl extends ServiceImpl<StIvtCutpointivtMap
|
||||
return stIvtCutpointivtMapper.selectOne(lam);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StIvtCutpointivt getPintByUpOrDownCode(String code, boolean flag) {
|
||||
LambdaQueryWrapper<StIvtCutpointivt> lam = new LambdaQueryWrapper<>();
|
||||
lam.eq(flag, StIvtCutpointivt::getIs_used, "1")
|
||||
.and(la -> la.eq(StIvtCutpointivt::getUp_point_code, code).or()
|
||||
.eq(StIvtCutpointivt::getDown_point_code, code));
|
||||
return stIvtCutpointivtMapper.selectOne(lam);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取实体基础信息
|
||||
|
||||
@@ -1,12 +1,35 @@
|
||||
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.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
|
||||
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
|
||||
import org.nl.b_lms.sch.point.dao.StIvtCutpointivt;
|
||||
import org.nl.b_lms.sch.point.service.IstIvtCutpointivtService;
|
||||
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.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;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
@@ -16,29 +39,148 @@ import java.util.List;
|
||||
@Slf4j
|
||||
@Service
|
||||
public class SlitterDownTrussTask extends AbstractAcsTask {
|
||||
private final String THIS_CLASS = SlitterDownTrussTask.class.getName();
|
||||
@Autowired
|
||||
private IschBaseTaskService taskService;
|
||||
@Autowired
|
||||
private IPdmBiSlittingproductionplanService slittingproductionplanService;
|
||||
@Autowired
|
||||
private IBstIvtCutpointivtService bcutpointivtService;
|
||||
@Autowired
|
||||
private IstIvtCutpointivtService cutpointivtService;
|
||||
|
||||
@Override
|
||||
public List<AcsTaskDto> addTask() {
|
||||
return null;
|
||||
/*
|
||||
* 下发给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());
|
||||
String pointCode1 = task.getPoint_code1();
|
||||
StIvtCutpointivt point1 = cutpointivtService.getPintByUpOrDownCode(pointCode1, false);
|
||||
String pointCode2 = task.getPoint_code2();
|
||||
BstIvtCutpointivt point2 = bcutpointivtService.getPintByTrussCode(pointCode2, false);
|
||||
String tmpUpQzzNo = point1.getUp_qzzno();
|
||||
String tmpDownQzzNo = point1.getDown_qzzno();
|
||||
// 更新分切计划
|
||||
// 下来的分切计划状态:06 -> 09
|
||||
PdmBiSlittingproductionplan p = new PdmBiSlittingproductionplan();
|
||||
p.setStatus("09");
|
||||
p.setUpdate_optid("3");
|
||||
p.setUpdate_optname("ACS");
|
||||
p.setUpdate_time(DateUtil.now());
|
||||
List<String> downQzzNos = Stream.of(tmpUpQzzNo, tmpDownQzzNo)
|
||||
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
|
||||
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||
.in(PdmBiSlittingproductionplan::getQzzno, downQzzNos));
|
||||
// 上去的分切计划状态:04 -> 05
|
||||
p.setStatus("05");
|
||||
List<String> upQzzNos = Stream.of(point2.getQzz_no1(), point2.getQzz_no2())
|
||||
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
|
||||
slittingproductionplanService.update(p, new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||
.in(PdmBiSlittingproductionplan::getQzzno, upQzzNos));
|
||||
// 点位数据更新
|
||||
point1.setUp_qzzno(point2.getQzz_no1());
|
||||
point1.setDown_qzzno(point2.getQzz_no2());
|
||||
point1.setUpdate_optid(3L);
|
||||
point1.setUpdate_optname("ACS");
|
||||
point1.setUpdate_time(DateUtil.now());
|
||||
point2.setQzz_no1(tmpUpQzzNo);
|
||||
point2.setQzz_no2(tmpDownQzzNo);
|
||||
point2.setPoint_status("3");
|
||||
point2.setUpdate_optid("3");
|
||||
point2.setUpdate_optname("ACS");
|
||||
point2.setUpdate_time(DateUtil.now());
|
||||
cutpointivtService.updateById(point1);
|
||||
bcutpointivtService.updateById(point2);
|
||||
}
|
||||
|
||||
// 取消
|
||||
if (status.equals(IOSEnum.IS_NOTANDYES.code("否"))) {
|
||||
task.setTask_status(TaskStatusEnum.FINISHED.getCode());
|
||||
// todo: 分切计划回退?
|
||||
}
|
||||
task.setUpdate_time(DateUtil.now());
|
||||
taskService.updateById(task);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String createTask(JSONObject form) {
|
||||
return null;
|
||||
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.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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ public class UpShaftTrussTask extends AbstractAcsTask {
|
||||
String pointCode1 = task.getPoint_code1();
|
||||
BstIvtCutpointivt point1 = bcutpointivtService.getPintByTrussCode(pointCode1, false);
|
||||
String pointCode2 = task.getPoint_code2();
|
||||
StIvtCutpointivt point2 = cutpointivtService.getPintByPointCode(pointCode2, false);
|
||||
StIvtCutpointivt point2 = cutpointivtService.getPintByUpOrDownCode(pointCode2, false);
|
||||
// 交换数据
|
||||
point2.setUp_qzzno(point1.getQzz_no1());
|
||||
point2.setDown_qzzno(point1.getQzz_no2());
|
||||
|
||||
@@ -15,6 +15,7 @@ import org.nl.b_lms.sch.task.dao.SchBaseTask;
|
||||
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
|
||||
import org.nl.b_lms.sch.tasks.slitter.TrussCallAirShaftTask;
|
||||
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto;
|
||||
import org.nl.common.utils.TaskUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@@ -115,9 +116,7 @@ public class AutoCallAirShaftTask {
|
||||
// 将分切计划is_paper_ok 1 -> 2
|
||||
needPlans.forEach(p -> {
|
||||
p.setIs_paper_ok("2");
|
||||
p.setUpdate_optid("3");
|
||||
p.setUpdate_optname("ACS");
|
||||
p.setUpdate_time(DateUtil.now());
|
||||
TaskUtils.updateOptMessageBySlitterPlan(p);
|
||||
});
|
||||
slittingproductionplanService.updateBatchById(needPlans);
|
||||
});
|
||||
|
||||
@@ -67,7 +67,7 @@ public class AutoSendAirShaftAgvTask {
|
||||
}
|
||||
}
|
||||
// 如果两个气涨轴编码则表示一组满了
|
||||
// 查找分切对接的空位
|
||||
// 查找分切对接的空位 todo: (校验任务)
|
||||
List<BstIvtCutpointivt> emptyPoint = bcutpointivtService.list(new LambdaQueryWrapper<BstIvtCutpointivt>()
|
||||
.eq(BstIvtCutpointivt::getPoint_type, "3")
|
||||
.eq(BstIvtCutpointivt::getPoint_status, "1")
|
||||
|
||||
@@ -61,8 +61,7 @@ public class AutoUpShaftTrussTask {
|
||||
List<PdmBiSlittingproductionplan> nextPlans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||
.eq(PdmBiSlittingproductionplan::getResource_name, device.getExt_code())
|
||||
.eq(PdmBiSlittingproductionplan::getStatus, "03")
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete, "0")
|
||||
.orderByAsc(PdmBiSlittingproductionplan::getUpdate_time));
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete, "0"));
|
||||
if (nextPlans.size() == 0) {
|
||||
log.warn("分切机【" + device.getExt_code() + "】未找到套好轴的分切计划");
|
||||
// 下个分切机
|
||||
|
||||
@@ -21,4 +21,11 @@ public interface SlitterService {
|
||||
* @return
|
||||
*/
|
||||
JSONObject acsFinishLoadShaft(JSONObject param);
|
||||
|
||||
/**
|
||||
* 分切机下料
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
JSONObject mesSlittingMachineSendMaterial(JSONObject param);
|
||||
}
|
||||
|
||||
@@ -4,20 +4,25 @@ import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.http.HttpStatus;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
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.pdm.bi.slittingproductionplan.service.IPdmBiSlittingproductionplanService;
|
||||
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
|
||||
import org.nl.b_lms.sch.point.dao.StIvtCutpointivt;
|
||||
import org.nl.b_lms.sch.point.service.IstIvtCutpointivtService;
|
||||
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.SlitterDownTrussTask;
|
||||
import org.nl.b_lms.sch.tasks.slitter.TrussSendAirShaftTask;
|
||||
import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper;
|
||||
import org.nl.b_lms.sch.tasks.slitter.service.SlitterService;
|
||||
import org.nl.common.utils.TaskUtils;
|
||||
import org.nl.modules.common.exception.BadRequestException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@@ -49,6 +54,8 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
private SlitterMapper slitterMapper;
|
||||
@Autowired
|
||||
private TrussSendAirShaftTask trussSendAirShaftTask;
|
||||
@Autowired
|
||||
private SlitterDownTrussTask slitterDownTrussTask;
|
||||
|
||||
@Override
|
||||
public JSONObject acsFinishShaftPluckTube(JSONObject param) {
|
||||
@@ -144,4 +151,166 @@ public class SlitterServiceImpl implements SlitterService {
|
||||
res.put("message", "请求成功");
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public JSONObject mesSlittingMachineSendMaterial(JSONObject param) {
|
||||
JSONObject res = new JSONObject();
|
||||
res.put("status", HttpStatus.HTTP_OK);
|
||||
res.put("message", "子卷出站任务生成成功!");
|
||||
// todo: 获取子卷号数组
|
||||
JSONArray containers = param.getJSONArray("container");
|
||||
List<String> containerList = containers.toJavaList(String.class);
|
||||
if (containerList.size() == 0) {
|
||||
throw new BadRequestException("子卷参数不能为空!");
|
||||
}
|
||||
// 获取分切计划,最多4个需要出站的任务
|
||||
List<PdmBiSlittingproductionplan> currentPlans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||
.in(PdmBiSlittingproductionplan::getContainer_name, containerList));
|
||||
// 获取上轴分切计划和下轴分切计划,各一条
|
||||
PdmBiSlittingproductionplan currentUpPlan = currentPlans.stream().filter(p -> "1".equals(p.getUp_or_down())).findFirst().orElse(null);
|
||||
PdmBiSlittingproductionplan currentDownPlan = currentPlans.stream().filter(p -> "2".equals(p.getUp_or_down())).findFirst().orElse(null);
|
||||
|
||||
// 获取其中一条分切计划
|
||||
PdmBiSlittingproductionplan demoPlan = currentPlans.get(0);
|
||||
// 获得设备
|
||||
StIvtCutpointivt device = cutpointivtService.getOne(new LambdaQueryWrapper<StIvtCutpointivt>()
|
||||
.eq(StIvtCutpointivt::getExt_code, demoPlan.getResource_name()));
|
||||
// 获取当前分切机的下一组分切计划(最多四条分切计划)
|
||||
// hint: 获取到的分切可能是不同组的但具有一定时间顺序
|
||||
List<PdmBiSlittingproductionplan> timePlans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
|
||||
.eq(PdmBiSlittingproductionplan::getResource_name, device.getExt_code())
|
||||
.eq(PdmBiSlittingproductionplan::getStatus, "03")
|
||||
.eq(PdmBiSlittingproductionplan::getIs_delete, "0")
|
||||
.orderByAsc(PdmBiSlittingproductionplan::getUpdate_time));
|
||||
// 任务参数
|
||||
JSONObject taskParam = new JSONObject();
|
||||
if (timePlans.size() == 0) {
|
||||
// 如果没有下一组分切计划,就只做下卷任务(判断下单/下双)
|
||||
// 获取分切对接位没任务的空位置 todo: 校验任务未作
|
||||
List<BstIvtCutpointivt> emptyPoints = bcutpointivtService.list(new LambdaQueryWrapper<BstIvtCutpointivt>()
|
||||
.eq(BstIvtCutpointivt::getPoint_type, "3")
|
||||
.eq(BstIvtCutpointivt::getPoint_status, "1")
|
||||
.eq(BstIvtCutpointivt::getIs_used, "1")
|
||||
.last("ORDER BY ABS(sort_seq - " + device.getSort_seq() + ")"));
|
||||
if (emptyPoints.size() == 0) {
|
||||
throw new BadRequestException("分切机【" + device.getExt_code() + "】找不到对应的对接位!");
|
||||
}
|
||||
BstIvtCutpointivt emptyPoint = emptyPoints.get(0);
|
||||
// 创建任务
|
||||
if (currentUpPlan != null && currentDownPlan != null) {
|
||||
// 双轴任务 下双
|
||||
taskParam.put("point_code1", device.getUp_point_code());
|
||||
taskParam.put("point_code2", emptyPoint.getTruss_point_code2());
|
||||
taskParam.put("point_code3", device.getDown_point_code());
|
||||
taskParam.put("point_code4", emptyPoint.getTruss_point_code1());
|
||||
taskParam.put("truss_type", "1");
|
||||
taskParam.put("empty_site", "0");
|
||||
} else {
|
||||
// 单轴任务 下单
|
||||
taskParam.put("point_code1", currentUpPlan == null
|
||||
? device.getDown_point_code() : device.getUp_point_code());
|
||||
taskParam.put("point_code2", currentUpPlan == null
|
||||
? emptyPoint.getTruss_point_code1() : emptyPoint.getTruss_point_code2());
|
||||
taskParam.put("truss_type", "1");
|
||||
taskParam.put("empty_site", "0");
|
||||
}
|
||||
taskParam.put("product_area", "Test");
|
||||
// 分切计划修改状态 05 -> 06
|
||||
currentPlans.forEach(plan -> {
|
||||
plan.setStatus("06");
|
||||
plan.setUpdate_optid("3");
|
||||
plan.setUpdate_optname("ACS");
|
||||
plan.setUpdate_time(DateUtil.now());
|
||||
});
|
||||
slittingproductionplanService.updateBatchById(currentPlans);
|
||||
return res;
|
||||
}
|
||||
PdmBiSlittingproductionplan tmpPlan = timePlans.get(0);
|
||||
// hint: 以第一条为准,过滤和第一条同组同母卷的分切计划
|
||||
List<PdmBiSlittingproductionplan> nextPlans = timePlans.stream()
|
||||
.filter(plan -> plan.getParent_container_name().equals(tmpPlan.getParent_container_name()) && plan.getSplit_group().equals(tmpPlan.getSplit_group()))
|
||||
.collect(Collectors.toList());
|
||||
// 筛选上下轴各一条
|
||||
PdmBiSlittingproductionplan nextUpPlan = nextPlans.stream().filter(p -> "1".equals(p.getUp_or_down())).findFirst().orElse(null);
|
||||
PdmBiSlittingproductionplan nextDownPlan = nextPlans.stream().filter(p -> "2".equals(p.getUp_or_down())).findFirst().orElse(null);
|
||||
// 找到该分切计划的点位 todo: 应该校验没任务
|
||||
LambdaQueryWrapper<BstIvtCutpointivt> newCutLam = new QueryWrapper<BstIvtCutpointivt>().lambda();
|
||||
newCutLam.eq(BstIvtCutpointivt::getPoint_type, "3").eq(BstIvtCutpointivt::getPoint_status, "1")
|
||||
.eq(BstIvtCutpointivt::getIs_used, "1");
|
||||
if (nextUpPlan != null) {
|
||||
newCutLam.eq(BstIvtCutpointivt::getQzz_no1, nextUpPlan.getQzzno());
|
||||
}
|
||||
if (nextDownPlan != null) {
|
||||
newCutLam.eq(BstIvtCutpointivt::getQzz_no2, nextDownPlan.getQzzno());
|
||||
}
|
||||
BstIvtCutpointivt newCutPoint = bcutpointivtService.getOne(newCutLam, false);
|
||||
if (ObjectUtil.isEmpty(newCutPoint)) {
|
||||
throw new BadRequestException("分切机【" + device.getExt_code() + "】的下一组分切计划未配送完毕!");
|
||||
}
|
||||
String binaryExpress = TaskUtils.binaryConvertExpress(currentUpPlan, currentDownPlan, nextUpPlan, nextDownPlan);
|
||||
switch (binaryExpress) {
|
||||
case "00":
|
||||
// 下单上单
|
||||
taskParam.put("point_code1", currentUpPlan != null
|
||||
? device.getUp_point_code() : device.getDown_point_code());
|
||||
taskParam.put("point_code2", currentUpPlan != null
|
||||
? newCutPoint.getTruss_point_code2() : newCutPoint.getTruss_point_code1());
|
||||
taskParam.put("point_code3", nextUpPlan != null
|
||||
? device.getUp_point_code() : device.getDown_point_code());
|
||||
taskParam.put("point_code4", nextUpPlan != null
|
||||
? newCutPoint.getTruss_point_code1() : newCutPoint.getTruss_point_code2());
|
||||
taskParam.put("truss_type", "1");
|
||||
taskParam.put("empty_site", "0");
|
||||
break;
|
||||
case "01":
|
||||
// 下单上双
|
||||
taskParam.put("point_code1", currentUpPlan != null
|
||||
? device.getUp_point_code() : device.getDown_point_code());
|
||||
taskParam.put("point_code2", currentUpPlan != null
|
||||
? newCutPoint.getTruss_point_code1() : newCutPoint.getTruss_point_code2());
|
||||
taskParam.put("truss_type", "3");
|
||||
taskParam.put("empty_site", "3");
|
||||
break;
|
||||
case "10":
|
||||
// 下双上单
|
||||
taskParam.put("point_code1", device.getUp_point_code());
|
||||
taskParam.put("point_code2", newCutPoint.getTruss_point_code2());
|
||||
taskParam.put("point_code3", device.getDown_point_code());
|
||||
taskParam.put("point_code4", newCutPoint.getTruss_point_code1());
|
||||
taskParam.put("truss_type", "4");
|
||||
taskParam.put("empty_site", nextUpPlan == null ? "1" : "2");
|
||||
break;
|
||||
case "11":
|
||||
// 下双上双
|
||||
taskParam.put("point_code1", device.getUp_point_code());
|
||||
taskParam.put("point_code2", newCutPoint.getTruss_point_code2());
|
||||
taskParam.put("point_code3", device.getDown_point_code());
|
||||
taskParam.put("point_code4", newCutPoint.getTruss_point_code1());
|
||||
taskParam.put("truss_type", "3");
|
||||
taskParam.put("empty_site", "3");
|
||||
break;
|
||||
default:
|
||||
throw new BadRequestException("错误表达式");
|
||||
}
|
||||
// 创建任务
|
||||
slitterDownTrussTask.createTask(taskParam);
|
||||
// 下来的分切计划修改状态:05 -> 06
|
||||
currentPlans.forEach(plan -> {
|
||||
plan.setStatus("06");
|
||||
plan.setUpdate_optid("3");
|
||||
plan.setUpdate_optname("ACS");
|
||||
plan.setUpdate_time(DateUtil.now());
|
||||
});
|
||||
slittingproductionplanService.updateBatchById(currentPlans);
|
||||
// 上去的分切计划修改状态:03 -> 04
|
||||
nextPlans.forEach(plan -> {
|
||||
plan.setStatus("04");
|
||||
plan.setUpdate_optid("3");
|
||||
plan.setUpdate_optname("ACS");
|
||||
plan.setUpdate_time(DateUtil.now());
|
||||
});
|
||||
slittingproductionplanService.updateBatchById(nextPlans);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
package org.nl.common.utils;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
|
||||
import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingproductionplan;
|
||||
import org.nl.b_lms.sch.task.dao.SchBaseTask;
|
||||
|
||||
/**
|
||||
* @author: lyd
|
||||
@@ -32,4 +35,47 @@ public class TaskUtils {
|
||||
source.setUpdate_optname("ACS");
|
||||
source.setUpdate_time(DateUtil.now());
|
||||
}
|
||||
|
||||
/**
|
||||
* 用0,1,2,3四个的二进制字符表示是下单(双)上单(双)
|
||||
* @param currentUpPlan 要下来的上轴
|
||||
* @param currentDownPlan 要下来的下轴
|
||||
* @param nextUpPlan 要上去的上轴
|
||||
* @param nextDownPlan 要上去的下轴
|
||||
* @return 二进制表示字符串
|
||||
*/
|
||||
public static String binaryConvertExpress(PdmBiSlittingproductionplan currentUpPlan, PdmBiSlittingproductionplan currentDownPlan,PdmBiSlittingproductionplan nextUpPlan,PdmBiSlittingproductionplan nextDownPlan) {
|
||||
String binary = "";
|
||||
if (ObjectUtil.isNotEmpty(currentUpPlan) && ObjectUtil.isNotEmpty(currentDownPlan)) {
|
||||
binary += "1";
|
||||
} else {
|
||||
binary += "0";
|
||||
}
|
||||
if (ObjectUtil.isNotEmpty(nextUpPlan) && ObjectUtil.isNotEmpty(nextDownPlan)) {
|
||||
binary += "1";
|
||||
} else {
|
||||
binary += "0";
|
||||
}
|
||||
return binary;
|
||||
}
|
||||
|
||||
/**
|
||||
* 赋值分切计划的修改时间、人等信息
|
||||
* @param plan 分切计划
|
||||
*/
|
||||
public static void updateOptMessageBySlitterPlan(PdmBiSlittingproductionplan plan) {
|
||||
plan.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
plan.setUpdate_optname(SecurityUtils.getCurrentUsername());
|
||||
plan.setUpdate_time(DateUtil.now());
|
||||
}
|
||||
|
||||
/**
|
||||
* 赋值任务的修改时间、人等信息
|
||||
* @param task 任务
|
||||
*/
|
||||
public static void updateOptMessageByTask(SchBaseTask task) {
|
||||
task.setUpdate_optid(SecurityUtils.getCurrentUserId());
|
||||
task.setUpdate_optname(SecurityUtils.getCurrentUsername());
|
||||
task.setUpdate_time(DateUtil.now());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user