fix: 分切业务区域校验

This commit is contained in:
2024-03-06 18:11:40 +08:00
parent 4103b9c21e
commit 238b406aa3
31 changed files with 299 additions and 141 deletions

View File

@@ -56,9 +56,10 @@ public interface IBstIvtCutpointivtService extends IService<BstIvtCutpointivt> {
* 获取同尺寸的气涨轴
* @param type 点位类型1套轴对接位2分切缓存位3分切对接位
* @param size 气涨轴尺寸
* @param area 区域
* @return /
*/
List<BstIvtCutpointivt> getPointByTypeAndShaftSize(String type, String size);
List<BstIvtCutpointivt> getPointByTypeAndShaftSize(String type, String size, String area);
/**
* 根据桁架对应的点位编码获取点位实体

View File

@@ -13,5 +13,5 @@ public interface BstIvtCutpointivtMapper extends BaseMapper<BstIvtCutpointivt> {
List<BstIvtCutpointivt> getAreaNotTaskPointByStatus(String type, String pointStatus, String sort);
List<BstIvtCutpointivt> getPointByTypeAndShaftSize(String type, String size);
List<BstIvtCutpointivt> getPointByTypeAndShaftSize(String type, String size, String area);
}

View File

@@ -26,11 +26,18 @@
</select>
<select id="getPointByTypeAndShaftSize"
resultType="org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt">
SELECT
bc.*
FROM
`bst_ivt_cutpointivt` bc
LEFT JOIN pdm_bi_slittingproductionplan pp ON pp.qzzno = bc.qzz_no1 OR pp.qzzno = bc.qzz_no2
WHERE bc.point_type = #{type} AND pp.qzz_size = #{size} AND bc.is_used = '1' AND bc.point_status = '3'
SELECT bc.*
FROM `bst_ivt_cutpointivt` bc
LEFT JOIN pdm_bi_slittingproductionplan pp ON pp.qzzno = bc.qzz_no1
OR pp.qzzno = bc.qzz_no2
WHERE bc.point_type = #{type}
AND pp.qzz_size = #{size}
AND LEFT(p.resource_name, 2) = #{area}
AND bc.is_used = '1'
AND bc.point_status = '3'
AND 0 = (SELECT COUNT(*)
FROM sch_base_task t
WHERE t.task_status <![CDATA[ < ]]> '07'
AND (t.point_code1 = bc.truss_point_code1 OR t.point_code1 = bc.truss_point_code2))
</select>
</mapper>

View File

@@ -94,8 +94,8 @@ public class BstIvtCutpointivtServiceImpl extends ServiceImpl<BstIvtCutpointivtM
}
@Override
public List<BstIvtCutpointivt> getPointByTypeAndShaftSize(String type, String size) {
return bstIvtCutpointivtMapper.getPointByTypeAndShaftSize(type, size);
public List<BstIvtCutpointivt> getPointByTypeAndShaftSize(String type, String size, String area) {
return bstIvtCutpointivtMapper.getPointByTypeAndShaftSize(type, size, area);
}
@Override

View File

@@ -87,11 +87,6 @@ public class BstIvtShafttubeivtServiceImpl extends ServiceImpl<BstIvtShafttubeiv
@Override
public List<BstIvtShafttubeivt> getAllShaftPointsByConditions(String type, String location, String have) {
LambdaQueryWrapper<BstIvtShafttubeivt> lam = new QueryWrapper<BstIvtShafttubeivt>().lambda();
lam.eq(BstIvtShafttubeivt::getIs_used, "1")
.eq(BstIvtShafttubeivt::getPoint_type, type)
.eq(BstIvtShafttubeivt::getPoint_location, location)
.eq(BstIvtShafttubeivt::getHave_qzz, have);
return bstIvtShafttubeivtMapper.getAllShaftPointsByConditions(type, location, have);
}

View File

@@ -47,5 +47,5 @@ public interface IPdmBiSlittingproductionplanService extends IService<PdmBiSlitt
* 获取可用的分切计划
* @return /
*/
List<SlitterPlanDistinctDto> getAllCutPlan();
List<SlitterPlanDistinctDto> getAllCutPlan(String specification);
}

View File

@@ -12,5 +12,5 @@ import java.util.List;
**/
public interface PdmBiSlittingproductionplanMapper extends BaseMapper<PdmBiSlittingproductionplan> {
List<SlitterPlanDistinctDto> getAllCutPlan();
List<SlitterPlanDistinctDto> getAllCutPlan(String specification);
}

View File

@@ -64,7 +64,7 @@
AND p.is_paper_ok = '1'
AND p.is_delete = '0'
AND p.manufacture_date = '2024-01-05'
AND LEFT ( p.resource_name, 2 ) IN ( 'B2' )
AND LEFT ( p.resource_name, 2 ) = #{specification}
AND p.up_or_down IS NOT NULL
AND p.left_or_right IS NOT NULL
GROUP BY

View File

@@ -76,8 +76,8 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl<PdmBiSli
}
@Override
public List<SlitterPlanDistinctDto> getAllCutPlan() {
return pdmBiSlittingproductionplanMapper.getAllCutPlan();
public List<SlitterPlanDistinctDto> getAllCutPlan(String specification) {
return pdmBiSlittingproductionplanMapper.getAllCutPlan(specification);
}
}

View File

@@ -1,8 +1,11 @@
package org.nl.b_lms.sch.task.dao.mapper;
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* {@code @Description:} 任务表(SchBaseTask)数据持久层
* {@code @Author:} gbx
@@ -12,4 +15,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface SchBaseTaskMapper extends BaseMapper<SchBaseTask> {
List<SchBaseTask> checkHaveTask(BstIvtCutpointivt p);
}

View File

@@ -3,4 +3,16 @@
<mapper namespace="org.nl.b_lms.sch.task.dao.mapper.SchBaseTaskMapper">
<select id="checkHaveTask" resultType="org.nl.b_lms.sch.task.dao.SchBaseTask">
SELECT *
FROM sch_base_task
WHERE task_code <![CDATA[ < ]]> '07'
AND ( point_code1 = #{point_code}
OR point_code2 = #{point_code}
OR point_code1 = #{truss_point_code1}
OR point_code2 = #{truss_point_code1}
OR point_code1 = #{truss_point_code2}
OR point_code2 = #{truss_point_code2}
)
</select>
</mapper>

View File

@@ -1,5 +1,6 @@
package org.nl.b_lms.sch.task.service;
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -58,6 +59,13 @@ public interface IschBaseTaskService extends IService<SchBaseTask> {
* @return /
*/
List<SchBaseTask> getIssueTasks(String thisClass);
/**
* 检测点位是否存在任务
* @param p
* @return
*/
List<SchBaseTask> checkHaveTask(BstIvtCutpointivt p);
}

View File

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.dao.mapper.SchBaseTaskMapper;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
@@ -102,6 +103,11 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
return schBaseTaskMapper.selectList(lam);
}
@Override
public List<SchBaseTask> checkHaveTask(BstIvtCutpointivt p) {
return schBaseTaskMapper.checkHaveTask(p);
}
/**
* 获取实体基础信息

View File

@@ -133,7 +133,7 @@ public class SendAirShaftAgvTask extends AbstractAcsTask {
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("6");
task.setAcs_task_type("3");
task.setIs_delete("0");
task.setRequest_param(form.toJSONString());
task.setTask_type(form.getString("task_type"));

View File

@@ -106,7 +106,7 @@ public class SlitterDownAgvTask extends AbstractAcsTask {
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("6");
task.setAcs_task_type("3");
task.setIs_delete("0");
task.setRequest_param(form.toJSONString());
task.setTask_type(form.getString("task_type"));

View File

@@ -60,6 +60,8 @@ public class SlitterDownTrussTask extends AbstractAcsTask {
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())
@@ -69,6 +71,8 @@ public class SlitterDownTrussTask extends AbstractAcsTask {
.start_device_code2(task.getPoint_code3())
.next_device_code2(task.getPoint_code4())
.vehicle_code(task.getVehicle_code())
.truss_type(requestParamObj.getString("truss_type"))
.empty_site(requestParamObj.getString("empty_site"))
.agv_system_type(agv_system_type)
.priority(task.getPriority())
.remark(task.getRemark())

View File

@@ -68,10 +68,12 @@ public class TrussCallAirShaftTask extends AbstractAcsTask {
.next_device_code(task.getPoint_code2())
.start_device_code2(task.getPoint_code3())
.next_device_code2(task.getPoint_code4())
.vehicle_code(task.getVehicle_code())
.vehicle_code(ObjectUtil.isNotEmpty(task.getVehicle_code())
? task.getVehicle_code() : task.getVehicle_code2())
.agv_system_type(agv_system_type)
.priority(task.getPriority())
.remark(task.getRemark())
.params2(task.getRequest_param())
.product_area(task.getProduct_area())
.build();
resultList.add(dto);
@@ -165,6 +167,7 @@ public class TrussCallAirShaftTask extends AbstractAcsTask {
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("6");
task.setIs_delete("0");
task.setRequest_param(form.toJSONString());

View File

@@ -61,6 +61,8 @@ public class UpShaftTrussTask extends AbstractAcsTask {
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())
@@ -71,6 +73,8 @@ public class UpShaftTrussTask extends AbstractAcsTask {
.next_device_code2(task.getPoint_code4())
.vehicle_code(task.getVehicle_code())
.agv_system_type(agv_system_type)
.truss_type(requestParamObj.getString("truss_type"))
.empty_site(requestParamObj.getString("empty_site"))
.priority(task.getPriority())
.remark(task.getRemark())
.product_area(task.getProduct_area())

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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;
@@ -15,6 +16,7 @@ import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingprodu
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.constant.SlitterConstant;
import org.nl.b_lms.sch.tasks.slitter.mapper.dto.SlitterPlanDistinctDto;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.TaskUtils;
@@ -22,9 +24,12 @@ import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @Author: lyd
@@ -49,14 +54,28 @@ public class AutoCallAirShaftTask {
@Autowired
private WmsToAcsService wmsToAcsService;
@Transactional(rollbackFor = Exception.class)
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_UNCOMMITTED)
public void run() {
// 1、获取空的插拔轴位(无任务)
// 1、获取空的插拔轴位(无任务) todo:(目前都是上区域,下区域未考虑)
List<BstIvtShafttubeivt> emptyPoints = bstIvtShafttubeivtService.getAllShaftPointsByConditions("2","0","0");
emptyPoints.forEach(empty -> {
// 2、获取分切计划数据todo:暂时不考虑区域
// todo: 未考虑区域
List<SlitterPlanDistinctDto> plans = slittingproductionplanService.getAllCutPlan();
// 标箔1锂电2
String specification = empty.getQzz_generation();
if ("1".equals(specification)) {
if ("0".equals(empty.getPoint_location())) {
specification = "B2";
} else {
specification = "B4";
}
} else {
if ("0".equals(empty.getPoint_location())) {
specification = "B1";
} else {
specification = "B3";
}
}
// 2、获取分切计划数据hint: 根据标箔锂电区分区域
List<SlitterPlanDistinctDto> plans = slittingproductionplanService.getAllCutPlan(specification);
if (plans.size() == 0) {
// 如果不需要套轴,就只做拔轴
makePullShaft(empty);
@@ -77,12 +96,13 @@ public class AutoCallAirShaftTask {
.eq(PdmBiSlittingproductionplan::getResource_name, planDto.getResource_name())
.eq(PdmBiSlittingproductionplan::getParent_container_name, planDto.getParent_container_name())
.eq(PdmBiSlittingproductionplan::getUp_or_down, planDto.getUp_or_down())
.eq(PdmBiSlittingproductionplan::getIs_delete, "0")
.eq(PdmBiSlittingproductionplan::getIs_paper_ok, "1"));
// 获取其中一条
PdmBiSlittingproductionplan needPlan = needPlans.get(0);
String qzzSize = needPlan.getQzz_size();
// 从套轴对接位获取相同气涨轴大小
List<BstIvtCutpointivt> qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize);
List<BstIvtCutpointivt> qzzPoint = bcutpointivtService.getPointByTypeAndShaftSize("1", qzzSize, specification);
if (qzzPoint.size() == 0) {
// 调用ACS滚条气涨轴下来
toAcsOutShaft(qzzSize);
@@ -90,8 +110,8 @@ public class AutoCallAirShaftTask {
saveCutPlanMessage(empty, needPlans, qzzSize);
return;
}
// 查找一条没任务的点位 todo: 优先获取只有一根轴的点位
BstIvtCutpointivt startPoint = qzzPoint.stream().filter(point -> checkHaveTask(point)).findFirst().orElse(null);
// 查找一条没任务的点位
BstIvtCutpointivt startPoint = qzzPoint.get(0);
if (ObjectUtil.isEmpty(startPoint)) {
// 如果不存在,则发起信号滚气涨轴
// 调用ACS滚条气涨轴下来
@@ -112,7 +132,7 @@ public class AutoCallAirShaftTask {
param.put("needPlan", planDto);
param.put("is_bushing", "1");
param.put("task_type", "6");
param.put("product_area", "Test");
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
param.put("qzz_size", needPlan.getQzz_size());
// 设置子卷号
for (PdmBiSlittingproductionplan plan : needPlans) {
@@ -133,6 +153,7 @@ public class AutoCallAirShaftTask {
}
private void toAcsOutShaft(String qzzSize) {
// todo: 访问acs判断是否有无气涨轴
List<BstIvtShafttubeivt> shafttubeivts = bstIvtShafttubeivtService.getByQzzSize(qzzSize);
if (shafttubeivts.size() == 0) {
throw new BadRequestException("气胀轴库找不到[" + qzzSize + "]规格的气涨轴");
@@ -143,7 +164,7 @@ public class AutoCallAirShaftTask {
acsQzz.put("device_code", shafttubeivt.getPoint_code());
acsQzz.put("code", "to_command");
acsQzz.put("value", "1");
acsQzz.put("product_area", "Test");
acsQzz.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
acsParam.add(acsQzz);
wmsToAcsService.action(acsParam);
}
@@ -202,19 +223,20 @@ public class AutoCallAirShaftTask {
param.put("qzz_no", ObjectUtil.isNotEmpty(cutpointivt.getQzz_no1())
? cutpointivt.getQzz_no1() : cutpointivt.getQzz_no2());
param.put("task_type", "6");
param.put("product_area", "Test");
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
param.put("is_bushing", "0");
trussCallAirShaftTask.createTask(param);
}
public boolean checkHaveTask(BstIvtCutpointivt p) {
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_code, "07").and(la -> la.eq(SchBaseTask::getPoint_code1, p.getPoint_code()).or()
.eq(SchBaseTask::getPoint_code2, p.getPoint_code()).or()
.eq(SchBaseTask::getPoint_code1, p.getTruss_point_code1()).or()
.eq(SchBaseTask::getPoint_code2, p.getTruss_point_code1()).or()
.eq(SchBaseTask::getPoint_code1, p.getTruss_point_code2()).or()
.eq(SchBaseTask::getPoint_code2, p.getTruss_point_code2())));
List<String> pointCodes = Stream.of(p.getPoint_code(), p.getTruss_point_code1(), p.getTruss_point_code1()).collect(Collectors.toList());
LambdaQueryWrapper<SchBaseTask> lam = Wrappers.lambdaQuery();
lam.lt(SchBaseTask::getTask_code, "07");
lam.and(la -> la
.in(SchBaseTask::getPoint_code1, pointCodes).or()
.in(SchBaseTask::getPoint_code2, pointCodes));
List<SchBaseTask> list = taskService.list(lam);
return list.size() == 0;
}
}

View File

@@ -11,6 +11,7 @@ import org.nl.b_lms.pdm.bi.slittingproductionplan.service.dao.PdmBiSlittingprodu
import org.nl.b_lms.sch.point.dao.StIvtCutpointivt;
import org.nl.b_lms.sch.point.service.IstIvtCutpointivtService;
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.mapper.SlitterMapper;
import org.nl.modules.common.exception.BadRequestException;
import org.springframework.beans.factory.annotation.Autowired;
@@ -48,12 +49,14 @@ public class AutoSendAirShaftAgvTask {
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
// 最多4条分切计划
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect));
.in(PdmBiSlittingproductionplan::getQzzno, collect)
.eq(PdmBiSlittingproductionplan::getIs_delete, "0"));
if (plans.size() == 0) {
throw new BadRequestException("分切计划不存在");
}
// 获取任意一条
PdmBiSlittingproductionplan demoPlan = plans.get(0);
String area = demoPlan.getResource_name().substring(0, 2);
StIvtCutpointivt deviceCut = cutpointivtService.getOne(new LambdaQueryWrapper<StIvtCutpointivt>()
.eq(StIvtCutpointivt::getExt_code, demoPlan.getResource_name()));
// 校验是否为一组
@@ -83,8 +86,8 @@ public class AutoSendAirShaftAgvTask {
param.put("point_code2", endPoint.getPoint_code());
param.put("vehicle_code1", cutPoint.getQzz_no1());
param.put("vehicle_code2", cutPoint.getQzz_no2());
param.put("task_type", "6");
param.put("product_area", "Test");
param.put("task_type", "3");
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
sendAirShaftAgvTask.createTask(param);
}

View File

@@ -8,6 +8,7 @@ import org.nl.b_lms.bst.ivt.cutpointivt.service.dao.BstIvtCutpointivt;
import org.nl.b_lms.sch.task.dao.SchBaseTask;
import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.slitter.SlitterDownAgvTask;
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant;
import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper;
import org.nl.modules.common.exception.BadRequestException;
import org.redisson.api.RLock;
@@ -96,8 +97,8 @@ public class AutoSlitterDownAgvTask {
param.put("point_code2", endPoint.getPoint_code());
param.put("vehicle_code1", cut.getQzz_no1());
param.put("vehicle_code2", cut.getQzz_no2());
param.put("task_type", "1");
param.put("product_area", "Test");
param.put("task_type", "3");
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
slitterDownAgvTask.createTask(param);
}
}

View File

@@ -4,7 +4,6 @@ import cn.hutool.core.util.ObjectUtil;
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;
@@ -13,6 +12,7 @@ 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.UpShaftTrussTask;
import org.nl.b_lms.sch.tasks.slitter.constant.SlitterConstant;
import org.nl.b_lms.sch.tasks.slitter.mapper.SlitterMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -29,9 +29,6 @@ import java.util.stream.Stream;
@Slf4j
@Component
public class AutoUpShaftTrussTask {
@Autowired
private IBstIvtCutpointivtService bcutpointivtService;
@Autowired
private IstIvtCutpointivtService cutpointivtService;
@Autowired
@@ -106,7 +103,8 @@ public class AutoUpShaftTrussTask {
}
param.put("truss_type", "1");
param.put("empty_site", "0");
param.put("product_area", "Test");
param.put("task_type", "6");
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
upShaftTrussTask.createTask(param);
});
}

View File

@@ -0,0 +1,15 @@
package org.nl.b_lms.sch.tasks.slitter.constant;
/**
* @description 魔法值->常量类
* @author lyd
* @date 2024-02-26
**/
public interface SlitterConstant {
/**
* 任务区域暂定Test
*/
String SLITTER_TASK_AREA = "Test";
}

View File

@@ -34,9 +34,13 @@ public class SlitterController {
@Log("1111")
public ResponseEntity<Object> create(@RequestBody JSONObject entity){
if ("1".equals(entity.getString("type"))) {
return new ResponseEntity<>(slitterService.acsRequestShaftPluckTube(entity), HttpStatus.CREATED);
return new ResponseEntity<>(slitterService.acsRequestShaftLoadTube(entity), HttpStatus.OK);
} else if ("2".equals(entity.getString("type"))) {
return new ResponseEntity<>(slitterService.acsFinishLoadShaft(entity), HttpStatus.OK);
} else if ("3".equals(entity.getString("type"))) {
return new ResponseEntity<>(slitterService.acsFinishShaftPluckTube(entity), HttpStatus.OK);
}
return new ResponseEntity<>(slitterService.acsRequestShaftPluckTube(entity), HttpStatus.CREATED);
return new ResponseEntity<>(slitterService.acsRequestShaftLoadTube(entity), HttpStatus.OK);
}
@PostMapping("/test2")
@Log("1111")
@@ -46,7 +50,7 @@ public class SlitterController {
@PostMapping("/test3")
@Log("1111")
public ResponseEntity<Object> create3(@RequestBody JSONObject entity){
List<String> collect = Stream.of("B2382401020202A1").collect(Collectors.toList());
List<String> collect = Stream.of("B2572312312002B1").collect(Collectors.toList());
entity.put("container", collect);
return new ResponseEntity<>(slitterService.mesSlittingMachineSendMaterial(entity), HttpStatus.CREATED);
}

View File

@@ -13,7 +13,7 @@ public interface SlitterService {
* @param param
* @return
*/
JSONObject acsRequestShaftPluckTube(JSONObject param);
JSONObject acsRequestShaftLoadTube(JSONObject param);
/**
* acs申请拔轴完毕
@@ -21,6 +21,12 @@ public interface SlitterService {
* @return
*/
JSONObject acsFinishShaftPluckTube(JSONObject param);
/**
* acs申请拔轴
* @param param
* @return
*/
JSONObject acsRequestShaftPluckTube(JSONObject param);
/**
* ACS申请套轴完毕

View File

@@ -8,6 +8,7 @@ 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 lombok.SneakyThrows;
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;
@@ -21,16 +22,20 @@ import org.nl.b_lms.sch.task.service.IschBaseTaskService;
import org.nl.b_lms.sch.tasks.slitter.SendCopperFoilSubRollTrussTask;
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.constant.SlitterConstant;
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.redisson.api.RLock;
import org.redisson.api.RedissonClient;
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.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -60,9 +65,11 @@ public class SlitterServiceImpl implements SlitterService {
private SlitterDownTrussTask slitterDownTrussTask;
@Autowired
private SendCopperFoilSubRollTrussTask sendCopperFoilSubRollTrussTask;
@Autowired
private RedissonClient redissonClient;
@Override
public JSONObject acsRequestShaftPluckTube(JSONObject param) {
public JSONObject acsRequestShaftLoadTube(JSONObject param) {
JSONObject res = new JSONObject();
JSONObject con = new JSONObject();
String deviceCode = param.getString("device_code");
@@ -80,13 +87,17 @@ public class SlitterServiceImpl implements SlitterService {
public JSONObject acsFinishShaftPluckTube(JSONObject param) {
JSONObject res = new JSONObject();
String deviceCode = param.getString("device_code");
String subVolume = param.getString("sub_volume");
// 气涨轴编码
String taskId = param.getString("task_id");
// 获取上一个桁架任务
SchBaseTask previousTask = taskService.getById(taskId);
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, subVolume)
.eq(PdmBiSlittingproductionplan::getContainer_name, collect)
.eq(PdmBiSlittingproductionplan::getStatus, "09"));
PdmBiSlittingproductionplan plan;
if ("1".equals(deviceCode.substring(deviceCode.length() - 1))) {
@@ -103,75 +114,130 @@ public class SlitterServiceImpl implements SlitterService {
taskParam.put("point_code2", "B_CZW01");
taskParam.put("material_code", plan.getContainer_name());
taskParam.put("task_type", "6");
taskParam.put("product_area", "Test");
taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
sendCopperFoilSubRollTrussTask.createTask(taskParam);
res.put("code", HttpStatus.HTTP_OK);
res.put("message", "任务请求成功!");
return res;
}
@Override
public JSONObject acsRequestShaftPluckTube(JSONObject param) {
// 参数设备号type插拔轴位task_id
JSONObject res = new JSONObject();
String deviceCode = param.getString("device_code");
String taskId = param.getString("task_id");
if (ObjectUtil.isEmpty(taskId)) {
throw new BadRequestException("任务id不能为空!");
}
SchBaseTask previousTask = taskService.getById(taskId);
// 反馈 纸管尺寸
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) {
throw new BadRequestException("查询不到对应的子卷信息!");
}
PdmBiSlittingproductionplan plan = plans.get(0);
String s = String.valueOf("1".equals(plan.getPaper_tube_or_FRP())
? plan.getPaper_tube_model()
: plan.getFRP_model().split("\\|")[2].charAt(0));
JSONObject r = new JSONObject();
res.put("code", HttpStatus.HTTP_OK);
res.put("data", r);
r.put("size", s);
return res;
}
@SneakyThrows
@Override
@Transactional(rollbackFor = Exception.class)
public JSONObject acsFinishLoadShaft(JSONObject param) {
JSONObject res = new JSONObject();
String deviceCode = param.getString("device_code");
// 判断是否有未完成的任务
BstIvtShafttubeivt startPoint = shafttubeivtService.getOne(new LambdaQueryWrapper<BstIvtShafttubeivt>()
.eq(BstIvtShafttubeivt::getPoint_code, deviceCode));
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getPoint_code1, startPoint.getPoint_code())
.lt(SchBaseTask::getTask_status, "07"));
if (list.size() > 0) {
throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!");
}
// 获取分切计划
List<String> collect = Stream.of(startPoint.getContainer_name1(), startPoint.getContainer_name2())
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getContainer_name, collect));
if (plans.size() == 0) {
throw new BadRequestException("找不到对应的分切计划!");
}
// 当前套轴的分切计划
PdmBiSlittingproductionplan demoPlan = plans.get(0);
// 查找是否有同组的气胀轴位置
BstIvtCutpointivt cutPoint = slitterMapper.getSameGroupPoint(demoPlan);
if (ObjectUtil.isEmpty(cutPoint)) {
// 也有可能在路上, 获取任务的终点
String endPoint = slitterMapper.getSameGroupTaskPoint(demoPlan);
if (ObjectUtil.isNotEmpty(endPoint)) {
cutPoint = bcutpointivtService.getOne(new LambdaQueryWrapper<BstIvtCutpointivt>()
.eq(BstIvtCutpointivt::getTruss_point_code1, endPoint).or()
.eq(BstIvtCutpointivt::getTruss_point_code2, endPoint));
RLock lock = redissonClient.getLock(deviceCode);
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
try {
if (tryLock) {
String taskCode = param.getString("task_code");
// todo: 纸管
String weight1 = param.getString("weight1");
String material1 = param.getString("material1");
String weight2 = param.getString("weight2");
String material2 = param.getString("material2");
// 判断是否有未完成的任务
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getPoint_code1, deviceCode)
.lt(SchBaseTask::getTask_status, "07"));
if (list.size() > 0) {
throw new BadRequestException("点位[" + deviceCode + "]存在未完成得任务!");
}
BstIvtShafttubeivt startPoint = shafttubeivtService.getOne(new LambdaQueryWrapper<BstIvtShafttubeivt>()
.eq(BstIvtShafttubeivt::getPoint_code, deviceCode));
// 获取分切计划
List<String> collect = Stream.of(startPoint.getContainer_name1(), startPoint.getContainer_name2())
.filter(value -> value != null && !value.isEmpty()).collect(Collectors.toList());
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getContainer_name, collect)
.eq(PdmBiSlittingproductionplan::getIs_delete, "0"));
if (plans.size() == 0) {
throw new BadRequestException("找不到对应的分切计划!");
}
// 当前套轴的分切计划
PdmBiSlittingproductionplan demoPlan = plans.get(0);
String area = demoPlan.getResource_name().substring(0, 2);
// 查找是否有同组的气胀轴位置
BstIvtCutpointivt cutPoint = slitterMapper.getSameGroupPoint(demoPlan);
if (ObjectUtil.isEmpty(cutPoint)) {
// 也有可能在路上, 获取任务的终点
String endPoint = slitterMapper.getSameGroupTaskPoint(demoPlan);
if (ObjectUtil.isNotEmpty(endPoint)) {
cutPoint = bcutpointivtService.getOne(new LambdaQueryWrapper<BstIvtCutpointivt>()
.eq(BstIvtCutpointivt::getTruss_point_code1, endPoint).or()
.eq(BstIvtCutpointivt::getTruss_point_code2, endPoint));
}
}
if (ObjectUtil.isEmpty(cutPoint)) {
// 获取一个空位 todo: 枷锁
List<BstIvtCutpointivt> emptyNotTaskPoint = bcutpointivtService.getAreaNotTaskPointByStatus("1", "1", "1");
if (emptyNotTaskPoint.size() == 0) {
throw new BadRequestException("找不到可用套轴对接位!");
}
cutPoint = emptyNotTaskPoint.get(0);
}
// 分切计划设置套轴完成
String qzzNo = IdUtil.getSnowflake(1,1).nextIdStr();
plans.forEach(plan -> {
plan.setIs_child_tz_ok("1");
plan.setQzzno(qzzNo);
TaskUtils.updateOptMessageBySlitterPlan(plan);
});
slittingproductionplanService.updateBatchById(plans);
// 创建任务
JSONObject taskParam = new JSONObject();
taskParam.put("point_code1", startPoint.getPoint_code());
taskParam.put("point_code2", "1".equals(demoPlan.getUp_or_down())
? cutPoint.getTruss_point_code1() : cutPoint.getTruss_point_code2());
taskParam.put("vehicle_code1", "1".equals(demoPlan.getUp_or_down()) ? qzzNo : "");
taskParam.put("vehicle_code2", "2".equals(demoPlan.getUp_or_down()) ? qzzNo : "");
taskParam.put("task_type", "6");
taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
trussSendAirShaftTask.createTask(taskParam);
} else {
throw new BadRequestException("系统繁忙,稍后在试");
}
} finally {
if (tryLock) {
lock.unlock();
}
}
if (ObjectUtil.isEmpty(cutPoint)) {
// 获取一个空位
List<BstIvtCutpointivt> emptyNotTaskPoint = bcutpointivtService.getAreaNotTaskPointByStatus("1", "1", "1");
if (emptyNotTaskPoint.size() == 0) {
throw new BadRequestException("找不到可用套轴对接位!");
}
cutPoint = emptyNotTaskPoint.get(0);
}
// 分切计划设置套轴完成
String qzzNo = IdUtil.getSnowflake(1,1).nextIdStr();
plans.forEach(plan -> {
plan.setIs_child_tz_ok("1");
plan.setQzzno(qzzNo);
TaskUtils.updateOptMessageBySlitterPlan(plan);
});
slittingproductionplanService.updateBatchById(plans);
// 创建任务
JSONObject taskParam = new JSONObject();
taskParam.put("point_code1", startPoint.getPoint_code());
taskParam.put("point_code2", "1".equals(demoPlan.getUp_or_down())
? cutPoint.getTruss_point_code1() : cutPoint.getTruss_point_code2());
taskParam.put("vehicle_code1", "1".equals(demoPlan.getUp_or_down()) ? qzzNo : "");
taskParam.put("vehicle_code2", "2".equals(demoPlan.getUp_or_down()) ? qzzNo : "");
taskParam.put("task_type", "6");
taskParam.put("product_area", "Test");
trussSendAirShaftTask.createTask(taskParam);
res.put("status", HttpStatus.HTTP_OK);
res.put("code", HttpStatus.HTTP_OK);
res.put("message", "请求成功");
return res;
}
@@ -239,7 +305,7 @@ public class SlitterServiceImpl implements SlitterService {
taskParam.put("truss_type", "1");
taskParam.put("empty_site", "0");
}
taskParam.put("product_area", "Test");
taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
// 分切计划修改状态 05 -> 06
currentPlans.forEach(plan -> {
plan.setStatus("06");
@@ -260,7 +326,7 @@ public class SlitterServiceImpl implements SlitterService {
PdmBiSlittingproductionplan nextDownPlan = nextPlans.stream().filter(p -> "2".equals(p.getUp_or_down())).findFirst().orElse(null);
// 找到该分切计划的点位
LambdaQueryWrapper<BstIvtCutpointivt> newCutLam = new QueryWrapper<BstIvtCutpointivt>().lambda();
newCutLam.eq(BstIvtCutpointivt::getPoint_type, "3").eq(BstIvtCutpointivt::getPoint_status, "1")
newCutLam.eq(BstIvtCutpointivt::getPoint_type, "3").eq(BstIvtCutpointivt::getPoint_status, "2")
.eq(BstIvtCutpointivt::getIs_used, "1");
if (nextUpPlan != null) {
newCutLam.eq(BstIvtCutpointivt::getQzz_no1, nextUpPlan.getQzzno());
@@ -318,6 +384,7 @@ public class SlitterServiceImpl implements SlitterService {
throw new BadRequestException("错误表达式");
}
// 创建任务
taskParam.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
slitterDownTrussTask.createTask(taskParam);
// 下来的分切计划修改状态05 -> 06
currentPlans.forEach(plan -> {

View File

@@ -93,21 +93,21 @@
</select>
<select id="queryPdaAuthority" resultType="com.alibaba.fastjson.JSONObject">
SELECT
max( sys_user.user_id )as accountId,
max( sys_user.username ) as username,
max( sys_roles_menus.menu_id ) as menu_id,
max( sys_menu.component ) as component,
max( sys_menu.path ) as path,
max( sys_menu.`name` ) as name
max( sys_user.user_id ) AS accountId,
max( sys_user.username ) AS username,
max( sys_roles_menus.menu_id ) AS menu_id,
max( sys_menu.component ) AS component,
max( sys_menu.path ) AS path,
max( sys_menu.component_name ) AS component_name
FROM
sys_user AS sys_user
LEFT JOIN sys_users_roles AS sys_users_roles ON sys_users_roles.user_id = sys_user.user_id
LEFT JOIN sys_role AS sys_role ON sys_role.role_id = sys_users_roles.role_id
LEFT JOIN sys_roles_menus AS sys_roles_menus ON sys_roles_menus.role_id = sys_role.role_id
LEFT JOIN sys_menu AS sys_menu ON sys_menu.menu_id = sys_roles_menus.menu_id
sys_user sys_user
LEFT JOIN sys_users_roles sys_users_roles ON sys_users_roles.user_id = sys_user.user_id
LEFT JOIN sys_role sys_role ON sys_role.role_id = sys_users_roles.role_id
LEFT JOIN sys_roles_menus sys_roles_menus ON sys_roles_menus.role_id = sys_role.role_id
LEFT JOIN sys_menu sys_menu ON sys_menu.menu_id = sys_roles_menus.menu_id
WHERE
sys_menu.path LIKE 'RF%'
and sys_menu.is_pc='0'
sys_menu.component_name LIKE 'RF%'
and sys_menu.is_pc = '0'
AND sys_menu.hidden = 0
<if test="accountId != null">
AND sys_user.user_id = #{accountId}
@@ -123,7 +123,7 @@
sys_menu.title,
sys_menu.component,
sys_menu.path,
sys_menu.NAME,
sys_menu.component_name,
sys_menu.menu_sort
ORDER BY sys_menu.menu_sort
</select>

View File

@@ -463,7 +463,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override
public Map<String, Object> queryAuthority(Map<String, String> param) {
String accountId = SecurityUtils.getCurrentUserId();
String accountId = "1";
JSONObject returnjo = new JSONObject();
if (StrUtil.isEmpty(accountId)) {
returnjo.put("code", "0");
@@ -480,7 +480,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
for (int i = 0; i < SecondResults.size(); i++) {
JSONObject row = SecondResults.getJSONObject(i);
String menu_id = row.getString("menu_id");
JSONArray ThirdResults = baseMapper.queryPdaAuthority(accountId, "1", menu_id);
JSONArray ThirdResults = baseMapper.queryPdaAuthority(accountId, "2", menu_id);
row.put("sonTree", ThirdResults);
roleTree.add(row);
}

View File

@@ -59,6 +59,7 @@ public class AcsTaskDto {
* 扩展参数
*/
private String params;
private String params2;
/**
* 温度
*/
@@ -109,7 +110,11 @@ public class AcsTaskDto {
* 任务扩展字段
*/
private String interaction_json;
/**
* 空点位
*/
private String empty_site;
}
}

View File

@@ -22,7 +22,6 @@ import java.util.Map;
**/
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/task")
@Slf4j
public class TaskController {
@@ -31,15 +30,12 @@ public class TaskController {
@GetMapping
@Log("查询任务")
//@SaCheckPermission("task:list")
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page) {
return new ResponseEntity<>(taskService.queryAll(whereJson, page), HttpStatus.OK);
}
@GetMapping("/taskStatus")
@Log("获取任务状态列表")
public ResponseEntity<Object> getTaskStatus() {
TaskStatusEnum[] values = TaskStatusEnum.values();
JSONArray arr = new JSONArray();
@@ -59,7 +55,6 @@ public class TaskController {
@GetMapping("/finishType")
@Log("获取任务类型列表")
public ResponseEntity<Object> getFinishType() {
FinishTypeEnum[] values = FinishTypeEnum.values();
JSONArray arr = new JSONArray();
@@ -74,8 +69,6 @@ public class TaskController {
@PutMapping("/operation")
@Log("任务操作")
//@SaCheckPermission("task:edit")
public ResponseEntity<Object> update(@RequestBody Map<String, Object> map) {
taskService.operation(map);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);

View File

@@ -99,7 +99,7 @@ public class TaskServiceImpl implements TaskService {
UserAreaServiceImpl userAreaService = new UserAreaServiceImpl();
String in_area_id = userAreaService.getInArea();
if (ObjectUtil.isNotEmpty(in_area_id)) {
map.put("in_area_id", in_area_id);
// map.put("in_area_id", in_area_id);
}
JSONObject json = WQL.getWO("QSCH_TASK_01").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "update_time desc");
JSONArray content = json.getJSONArray("content");