opt: 备货区、送轴(去除分切计划状态校验)

This commit is contained in:
2025-06-30 10:30:34 +08:00
parent 594e90bb48
commit d30e25a8cd
16 changed files with 223 additions and 35 deletions

View File

@@ -69,4 +69,11 @@ public interface IMdPbPapervehicleService extends IService<MdPbPapervehicle> {
* @return
*/
List<MdPbPapervehicle> getInfoByTask();
/**
* 通过载具获取管芯编码
* @param vehicleCode
* @return
*/
List<String> getTubeCodesByVehicle(String vehicleCode);
}

View File

@@ -23,6 +23,7 @@ import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @description 服务实现
@@ -106,4 +107,15 @@ public class MdPbPapervehicleServiceImpl extends ServiceImpl<MdPbPapervehicleMap
return mdPbPapervehicleMapper.getInfoByTask();
}
@Override
public List<String> getTubeCodesByVehicle(String vehicleCode) {
LambdaQueryWrapper<MdPbPapervehicle> lam = new LambdaQueryWrapper<>();
lam.eq(MdPbPapervehicle::getVehicle_code, vehicleCode);
List<MdPbPapervehicle> list = list(lam);
if (list.size() == 0) {
return null;
}
return list.stream().map(MdPbPapervehicle::getMaterial_code).distinct().collect(Collectors.toList());
}
}

View File

@@ -111,6 +111,15 @@ public interface IBstIvtStockingivtService extends IService<BstIvtStockingivt> {
*/
List<BhTubePointDto> getNeedPaperTubesPoint(String pointType, List<String> tubes, String location);
/**
* 分组聚合获取需要管芯数组的托盘位置(搬运中的数据)
* @param pointType
* @param tube
* @param location
* @return
*/
List<BhTubePointDto> getNeedPaperTubePointInTasking(String pointType, String tube, String location);
/**
* 获取3个托盘的数据
* @param location

View File

@@ -38,7 +38,7 @@ public interface BstIvtStockingivtMapper extends BaseMapper<BstIvtStockingivt> {
/**
* 分组聚合获取备货区中数量够用的的货位
* @param pointType 类型:0暂存位置1靠近分切机
* @param pointType 类型:2暂存位置1靠近桁架
* @param tube 纸管号 两个都是一样的,因此拿一个就行
* @param location 位置0上区域1下区域
* @return /
@@ -46,7 +46,7 @@ public interface BstIvtStockingivtMapper extends BaseMapper<BstIvtStockingivt> {
List<BhTubePointDto> getNeedPaperTubePoint(String pointType, String tube, String location);
/**
* 分组聚合获取备货区中数量够用的的货位
* @param pointType 类型:0暂存位置1靠近分切机
* @param pointType 类型:2暂存位置1靠近桁架
* @param tubes 纸管号 两个不一定一样的
* @param location 位置0上区域1下区域
* @return /
@@ -56,5 +56,12 @@ public interface BstIvtStockingivtMapper extends BaseMapper<BstIvtStockingivt> {
List<BhTubeMovePointDto> getCanMovePointList(String location, String pointType);
List<BstIvtStockingivt> getMoveTaskPoints();
/**
* 分组聚合获取备货区中数量够用的的货位(任务中)
* @param pointType 类型2暂存位置1靠近桁架
* @param tube 纸管号 两个都是一样的,因此拿一个就行
* @param location 位置0上区域1下区域
* @return /
*/
List<BhTubePointDto> getNeedPaperTubePointInTasking(String pointType, String tube, String location);
}

View File

@@ -140,4 +140,24 @@
AND t.task_status <![CDATA[ <> ]]> '07'
AND t.is_delete = '0'
</select>
<select id="getNeedPaperTubePointInTasking"
resultType="org.nl.b_lms.sch.tasks.slitter.mapper.dto.BhTubePointDto">
SELECT
bs.point_code,
MAX( bs.vehicle_code ) AS vehicle_code,
MAX(t.task_id) AS task_id,
SUM( mp.qty ) AS qty
FROM
`bst_ivt_stockingivt` bs
LEFT JOIN md_pb_papervehicle mp ON mp.vehicle_code = bs.vehicle_code
LEFT JOIN sch_base_task t ON t.point_code1 = bs.point_code AND t.task_type = '010807' AND t.is_delete = '0' AND t.task_status <![CDATA[ < ]]> '07'
WHERE bs.point_location = #{location}
AND bs.point_type = #{pointType}
AND bs.ivt_status = '1'
AND bs.is_used = '1'
AND mp.material_code = #{tube}
AND IFNULL(t.task_id,'') <![CDATA[ <> ]]> ''
GROUP BY
bs.point_code;
</select>
</mapper>

View File

@@ -321,6 +321,11 @@ public class BstIvtStockingivtServiceImpl extends ServiceImpl<BstIvtStockingivtM
return bstIvtStockingivtMapper.getNeedPaperTubesPoint(pointType, tubes, location);
}
@Override
public List<BhTubePointDto> getNeedPaperTubePointInTasking(String pointType, String tube, String location) {
return bstIvtStockingivtMapper.getNeedPaperTubePointInTasking(pointType, tube, location);
}
@Override
public List<BhTubeMovePointDto> getCanMovePointList(String location, String pointType) {
return bstIvtStockingivtMapper.getCanMovePointList(location, pointType);

View File

@@ -152,4 +152,6 @@ public interface IPdmBiSlittingproductionplanService extends IService<PdmBiSlitt
* @return
*/
List<PdmBiSlittingproductionplan> getXnPlanByDevice(String deviceCode);
List<PdmBiSlittingproductionplan> getPlansByDto(SlitterPlanDistinctDto dto);
}

View File

@@ -14,6 +14,7 @@ import lombok.extern.slf4j.Slf4j;
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.mapper.PdmBiSlittingproductionplanMapper;
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.util.SlitterTaskUtil;
import org.nl.b_lms.storage_manage.ios.enums.IOSEnum;
@@ -212,4 +213,26 @@ public class PdmBiSlittingproductionplanServiceImpl extends ServiceImpl<PdmBiSli
.eq(PdmBiSlittingproductionplan::getIs_delete, "0");
return this.list(lam);
}
@Override
public List<PdmBiSlittingproductionplan> getPlansByDto(SlitterPlanDistinctDto dto) {
List<PdmBiSlittingproductionplan> checkPlans = list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.eq(PdmBiSlittingproductionplan::getResource_name, dto.getResource_name())
.eq(PdmBiSlittingproductionplan::getParent_container_name, dto.getParent_container_name())
.eq(PdmBiSlittingproductionplan::getUp_or_down, dto.getUp_or_down())
.eq(PdmBiSlittingproductionplan::getSplit_group, dto.getSplit_group())
.eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO)
.eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES));
if (checkPlans.size() == 0) {
// 可能是改切所以换成restruct_container_name来使用
checkPlans = list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.eq(PdmBiSlittingproductionplan::getResource_name, dto.getResource_name())
.eq(PdmBiSlittingproductionplan::getRestruct_container_name, dto.getParent_container_name())
.eq(PdmBiSlittingproductionplan::getUp_or_down, dto.getUp_or_down())
.eq(PdmBiSlittingproductionplan::getSplit_group, dto.getSplit_group())
.eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO)
.eq(PdmBiSlittingproductionplan::getIs_paper_ok, SlitterConstant.SLITTER_YES));
}
return checkPlans;
}
}

View File

@@ -119,7 +119,9 @@ public class StockAreaCallTubeTask extends AbstractAcsTask {
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.setTask_status(ObjectUtil.isNotEmpty(form.getString("task_status"))
? form.getString("task_status")
: TaskStatusEnum.START_AND_POINT.getCode());
task.setPoint_code1(form.getString("point_code1"));
task.setPoint_code2(form.getString("point_code2"));
task.setVehicle_code(form.getString("vehicle_code"));

View File

@@ -21,6 +21,7 @@ import org.nl.common.utils.TaskUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.modules.wql.WQL;
import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.modules.wql.util.SpringContextHolder;
import org.nl.wms.sch.AcsTaskDto;
import org.nl.wms.sch.manage.AbstractAcsTask;
import org.nl.wms.sch.manage.TaskStatusEnum;
@@ -30,6 +31,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static org.nl.b_lms.sch.tasks.slitter.util.SlitterTaskUtil.doSavePaperInfos;
@@ -129,6 +132,30 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask {
.eq(MdPbPapervehicle::getVehicle_code, callPoint.getString("vehicle_code")));
doSavePaperInfos(paperList, param);
stockAreaCallTubeTask.createTask(param);
// 如果有半条任务,要看看是不是这个任务的后置任务,是的话需要修改状态并下发。
List<SchBaseTask> tasks = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.in(SchBaseTask::getTask_type, Stream.of(SlitterEnum.TASK_TYPE.code("备货区送载具"), SlitterEnum.TASK_TYPE.code("备货区送纸管")).collect(Collectors.toList()))
.eq(SchBaseTask::getTask_status, TaskStatusEnum.SURE_START.getCode())
.eq(SchBaseTask::getIs_delete, "0")
.orderByAsc(SchBaseTask::getCreate_time));
for (SchBaseTask baseTask : tasks) {
JSONObject halfRequestParam = JSONObject.parseObject(baseTask.getRequest_param());
if (ObjectUtil.isEmpty(halfRequestParam) || ObjectUtil.isEmpty(halfRequestParam.getString("task_id"))) {
break;
}
String taskId = halfRequestParam.getString("task_id");
if (task.getTask_id().equals(taskId)) {
baseTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
baseTask.setRemark("前置任务触发后置任务");
taskService.updateById(baseTask);
if (THIS_CLASS.equals(baseTask.getHandle_class())) {
this.immediateNotifyAcs(null);
}
if (StockAreaCallTubeTask.class.getName().equals(baseTask.getHandle_class())) {
stockAreaCallTubeTask.immediateNotifyAcs(null);
}
}
}
}
}
// 取消
@@ -147,7 +174,9 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask {
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.setTask_status(ObjectUtil.isNotEmpty(form.getString("task_status"))
? form.getString("task_status")
: TaskStatusEnum.START_AND_POINT.getCode());
task.setPoint_code1(form.getString("point_code1"));
task.setPoint_code2(form.getString("point_code2"));
task.setPoint_code3(ObjectUtil.isNotEmpty(callPoint)

View File

@@ -121,6 +121,7 @@ public class TrussCallAirShaftTask extends AbstractAcsTask {
.set(BstIvtShafttubeivt::getUpdate_time, DateUtil.now())
.eq(BstIvtShafttubeivt::getPoint_code, task.getPoint_code2());
shafttubeivtService.update(shaftLamUpdate);
// todo: 有问题
if (ObjectUtil.isEmpty(startPointObj.getQzz_no1()) && ObjectUtil.isEmpty(startPointObj.getQzz_no2())) {
// 查找半条任务,并创建下发
List<SchBaseTask> list = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
@@ -133,19 +134,19 @@ public class TrussCallAirShaftTask extends AbstractAcsTask {
if ("010814".equals(schBaseTask.getTask_type())) {
JSONObject requestParam = JSONObject.parseObject(schBaseTask.getRequest_param());
if (ObjectUtil.isNotEmpty(requestParam.getString("needPosition")) && "A".equals(requestParam.getString("needPosition"))) {
schBaseTask.setPoint_code2(task.getPoint_code1() + "_" + requestParam.getString("needPosition"));
schBaseTask.setPoint_code2(task.getPoint_code1().split("_")[0] + "_" + requestParam.getString("needPosition"));
}
if (ObjectUtil.isNotEmpty(requestParam.getString("needPosition")) && "B".equals(requestParam.getString("needPosition"))) {
schBaseTask.setPoint_code2(task.getPoint_code1() + "_" + requestParam.getString("needPosition"));
schBaseTask.setPoint_code2(task.getPoint_code1().split("_")[0] + "_" + requestParam.getString("needPosition"));
}
schBaseTask.setRemark("AGV取货完成触发!");
schBaseTask.setRemark("桁架任务完成触发!");
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
taskService.updateById(schBaseTask);
trussSendAirShaftTask.immediateNotifyAcs(schBaseTask.getTask_id());
} else if ("010812".equals(schBaseTask.getTask_type())) {
schBaseTask.setRemark("AGV取货完成触发!");
schBaseTask.setPoint_code2(task.getPoint_code1() + "_A");
schBaseTask.setRemark("桁架任务完成触发!");
schBaseTask.setPoint_code2(task.getPoint_code1().split("_")[0] + "_A");
schBaseTask.setUpdate_time(DateUtil.now());
schBaseTask.setTask_status(TaskStatusEnum.START_AND_POINT.getCode());
taskService.updateById(schBaseTask);

View File

@@ -41,6 +41,7 @@ import org.nl.system.service.notice.ISysNoticeService;
import org.nl.system.service.param.ISysParamService;
import org.nl.system.service.param.dao.Param;
import org.nl.wms.ext.acs.service.WmsToAcsService;
import org.nl.wms.sch.manage.TaskStatusEnum;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
@@ -315,9 +316,9 @@ public class AutoCallAirShaftTask extends Prun {
stepErrorInfo.add("呼叫出轴失败-穿拔轴" + empty.getPoint_code() + "不进行套轴,跳过!");
return;
}
toCallAgvMovePaperTube(needPlans, location, empty);
// 保存所需要的分切计划数据到点位上(套轴对接位)更新分切计划
saveCutPlanMessage(empty, needPlans, qzzSize);
toCallAgvMovePaperTube(needPlans, location, empty, plans);
return;
}
// 查找一条没任务的点位
@@ -396,7 +397,7 @@ public class AutoCallAirShaftTask extends Prun {
// 拔管数量
param.put("pullCount", oldPlans.size());
param.put("containers", oldPlans.stream().map(PdmBiSlittingproductionplan::getContainer_name).collect(Collectors.toList()));
toCallAgvMovePaperTube(needPlans, location, empty);
toCallAgvMovePaperTube(needPlans, location, empty, plans);
trussCallAirShaftTask.createTask(param);
// 将分切计划is_paper_ok 1(纸管已经准备好) -> 2(已经套轴)
needPlans.forEach(p -> {
@@ -528,8 +529,10 @@ public class AutoCallAirShaftTask extends Prun {
* <p>默认双管芯尺寸一致
* @param needPlans 所需要套轴的分切计划
* @param location 位置
* @param empty 穿拔轴点位
* @param plans 总计划
*/
public Boolean toCallAgvMovePaperTube(List<PdmBiSlittingproductionplan> needPlans, String location, BstIvtShafttubeivt empty) {
public Boolean toCallAgvMovePaperTube(List<PdmBiSlittingproductionplan> needPlans, String location, BstIvtShafttubeivt empty, List<SlitterPlanDistinctDto> plans) {
// 1 前置参数获取
// 最多两根
List<String> tubes = needPlans.stream().map(plan -> {
@@ -608,12 +611,25 @@ public class AutoCallAirShaftTask extends Prun {
}
// 2.3 查找type=0的位置(待命的托盘)中是否存在(需要判断的是单独一个托盘) 校验了不在搬运中
List<BhTubePointDto> stockingivtList = stockingivtService.getNeedPaperTubePoint("0", tubes.get(0), location);
String flag = "0";
// 如果找不到,可能当前的管芯正在搬出去
if (stockingivtList.size() == 0) {
stockingivtList = stockingivtService.getNeedPaperTubePointInTasking("1", tubes.get(0), location);
if (stockingivtList.size() > 0) {
flag = "1";
}
}
// 找一个点位: 目的需要的点位
// 筛选单独托盘有超过所需数
BhTubePointDto needPoint = null;
for (BhTubePointDto bhTubePointDto : stockingivtList) {
if (bhTubePointDto.getQty() >= needQuantity) {
needPoint = bhTubePointDto;
// 如果是任务中的需要反查获取任务中的point_code2
if ("1".equals(flag)) {
SchBaseTask baseTask = taskService.getById(needPoint.getTask_id());
needPoint.setPoint_code(baseTask.getPoint_code2());
}
break;
}
}
@@ -627,14 +643,15 @@ public class AutoCallAirShaftTask extends Prun {
}
// 3 找到就创建AGV搬运任务
// 筛选3个位置中数量最少的搬走, 如果是空位,直接搬运过来
List<BhTubeMovePointDto> needMovePointListAll = stockingivtService.getCanMovePointList(location, "1");
List<BhTubeMovePointDto> canMovePointListAll = stockingivtService.getCanMovePointList(location, "1");
// 过滤掉另一台穿拔轴需要的轴的数据
List<BhTubeMovePointDto> needMovePointList = new ArrayList<>();
List<BhTubeMovePointDto> canMovePointList;
if (ObjectUtil.isEmpty(one)) {
needMovePointList = needMovePointListAll;
canMovePointList = canMovePointListAll;
} else {
// 把另一台机构所需要的管芯对应的位置过滤掉
List<String> otherTubes = Stream.of(one.getTube_code1(), one.getTube_code2()).filter(ObjectUtil::isNotEmpty).collect(Collectors.toList());
needMovePointList = needMovePointListAll.stream().filter(bh -> {
canMovePointList = canMovePointListAll.stream().filter(bh -> {
String vehicleCode = bh.getVehicle_code();
if (otherTubes.size() == 0 || "0".equals(bh.getIvt_status()) || ObjectUtil.isEmpty(vehicleCode)) {
return true;
@@ -645,7 +662,8 @@ public class AutoCallAirShaftTask extends Prun {
}).collect(Collectors.toList());
}
// 3.1 空位就直接创建搬过来的任务
BhTubeMovePointDto needMovePoint = needMovePointList.size() > 0 ? needMovePointList.get(0) : null;
// 如果有空位,第一个肯定是空位,所以获取第一个元素判断状态即可canMovePointList
BhTubeMovePointDto needMovePoint = canMovePointList.size() > 0 ? canMovePointList.get(0) : null;
if (ObjectUtil.isEmpty(needMovePoint) || "0".equals(needMovePoint.getIvt_status())) {
// 直接搬过来即可
JSONObject param = new JSONObject();
@@ -653,6 +671,8 @@ public class AutoCallAirShaftTask extends Prun {
param.put("point_code2", needMovePoint.getPoint_code());
param.put("vehicle_code", needPoint.getVehicle_code());
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
param.put("task_id", "1".equals(flag) ? needPoint.getTask_id() : "");
param.put("task_status", "1".equals(flag) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.START_AND_POINT.getCode());
param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管"));
// 存储纸管信息
List<MdPbPapervehicle> paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper<MdPbPapervehicle>()
@@ -673,6 +693,8 @@ public class AutoCallAirShaftTask extends Prun {
param.put("vehicle_code", needPoint.getVehicle_code());
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送纸管"));
param.put("task_id", "1".equals(flag) ? needPoint.getTask_id() : "");
param.put("task_status", "1".equals(flag) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.START_AND_POINT.getCode());
// 存储纸管信息
List<MdPbPapervehicle> paperList = mdPbPapervehicleService.list(new LambdaQueryWrapper<MdPbPapervehicle>()
.eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code()));
@@ -681,7 +703,43 @@ public class AutoCallAirShaftTask extends Prun {
stepErrorInfo.add("备货区正在搬运管芯过来,托盘号:[" + needPoint.getVehicle_code() + "]。");
return true;
}
// 3.3 查找一个没有任务的空位(创建交换任务)
// 3.3 排序,获取最后的起点,需要根据下一趟需要套轴的管芯规格来进行过滤
if (plans.size() > 0) {
PdmBiSlittingproductionplan needDemoPlan = needPlans.get(0);
// 除去当前计划的设备.
List<SlitterPlanDistinctDto> willPassPlan = plans.stream()
.filter(p -> !p.getResource_name().equals(needDemoPlan.getResource_name()))
.collect(Collectors.toList());
if (ObjectUtil.isNotEmpty(willPassPlan)) {
log.info("即将套轴的计划:{}", willPassPlan);
SlitterPlanDistinctDto distinctDto = willPassPlan.get(0);
// 获取对应的计划
List<PdmBiSlittingproductionplan> willNextPlans = slittingproductionplanService.getPlansByDto(distinctDto);
// 过滤计划中的管芯编码
List<String> nextTubs = willNextPlans.stream().map(p -> "1".equals(p.getPaper_tube_or_FRP())
? p.getPaper_tube_material()
: p.getFRP_material()).distinct().collect(Collectors.toList());
log.info("预期下一个所需管芯: {}", nextTubs);
// 通过canMovePointList过滤
List<BhTubeMovePointDto> movePointDtos = canMovePointList.stream().filter(p -> {
// 获取载具对应的管芯编码
List<String> vehicleTubes = papervehicleService.getTubeCodesByVehicle(p.getVehicle_code());
// 过滤掉在nextTubs的数据
for (String vehicleTube : vehicleTubes) {
if (nextTubs.contains(vehicleTube)) {
return false;
}
}
return true;
}).collect(Collectors.toList());
if (ObjectUtil.isNotEmpty(movePointDtos)) {
// 避免3个全是包含所需的
needMovePoint = movePointDtos.get(0);
}
}
}
log.info("可以移出来的点位:{}", needMovePoint);
// 3.4 查找一个没有任务的空位(创建交换任务)
List<BstIvtStockingivt> list = stockingivtService.getEmptyPointNotTask(location, "0");
if (list.size() == 0) {
noticeService.createNotice("备货区找不到空位置搬运",
@@ -700,6 +758,8 @@ public class AutoCallAirShaftTask extends Prun {
param.put("material_code", tubes.get(0));
param.put("call_point", needPoint);
param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送载具"));
param.put("task_id", "1".equals(flag) ? needPoint.getTask_id() : "");
param.put("task_status", "1".equals(flag) ? TaskStatusEnum.SURE_START.getCode() : TaskStatusEnum.START_AND_POINT.getCode());
param.put("product_area", SlitterConstant.SLITTER_TASK_AREA);
stockAreaSendVehicleTask.createTask(param);
stepErrorInfo.add("备货区交换托盘中...请等待。");

View File

@@ -73,12 +73,11 @@ public class AutoSendAirShaftAgvTask {
continue;
}
// 最多4条分切计划
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect)
.eq(PdmBiSlittingproductionplan::getStatus, "01")
.eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO));
List<PdmBiSlittingproductionplan> plans = slittingproductionplanService.list(new LambdaQueryWrapper<PdmBiSlittingproductionplan>()
.in(PdmBiSlittingproductionplan::getQzzno, collect)
.eq(PdmBiSlittingproductionplan::getIs_delete, SlitterConstant.SLITTER_NO));
if (plans.size() == 0) {
log.info("找不到状态01的分切计划,送到异常处理位置!");
log.info("找不到分切计划,送到异常处理位置!");
// 不能抛异常需要通过通知的形式并且创建agv搬到异常处理位4
// 判断套轴暂存位异常点位是否含有任务
List<BstIvtCutpointivt> exceptionPoints = bcutpointivtService.getAreaNotTaskPointByStatus("4", "1", "0", "0");

View File

@@ -2,12 +2,14 @@ package org.nl.b_lms.sch.tasks.slitter.mapper.dto;
import lombok.Data;
import java.io.Serializable;
/**
* @Author: lyd
* @Date: 2025/3/18
*/
@Data
public class BhTubePointDto {
public class BhTubePointDto implements Serializable {
/**
* 点位
@@ -21,4 +23,8 @@ public class BhTubePointDto {
* 数量
*/
private Integer qty;
/**
* 任务id
*/
private String task_id;
}

View File

@@ -169,10 +169,6 @@ public class SlitterServiceImpl implements SlitterService {
List<String> tubes = Stream.of(point.getTube_code1(), point.getTube_code2())
.filter(ObjectUtil::isNotEmpty)
.collect(Collectors.toList());
// 判断是否存在纸管(查找三点位是否有所需的管芯)
// List<MdPbPapervehicle> list = papervehicleService.list(new LambdaQueryWrapper<MdPbPapervehicle>()
// .in(MdPbPapervehicle::getMaterial_code, tubes)
// .gt(MdPbPapervehicle::getQty, 0));
List<GxQtyDto> gxQtyList = papervehicleService.getGxPoints(point.getPoint_location(), tubes);
// point.getTube_code1() 编码 getTube_name1() 纸制筒管|纸管|6英寸|1300 or 纸制筒管|纸管|3英寸|12|650
res.put("device_code", deviceCode);
@@ -180,11 +176,6 @@ public class SlitterServiceImpl implements SlitterService {
if ("1".equals(autoSendEmpty.getValue()) && gxQtyList.size() == 0) {
con.put("is_bushing", SlitterConstant.TO_SHAFT_INFO_97);
} else {
// int sum = list.stream()
// .mapToInt(e -> e.getQty().intValue())
// .sum();
// // 需要求和判断当前数量和所需数
// con.put("is_bushing", sum >= tubes.size() ? SlitterConstant.SLITTER_YES : SlitterConstant.SLITTER_NO);
List<GxQtyDto> hasNeedPoint = gxQtyList.stream()
.filter(gx -> "1".equals(gx.getPoint_type()) && gx.getQty() >= tubes.size())
.collect(Collectors.toList());

View File

@@ -1,8 +1,14 @@
package org.nl.system.service.quartz.task;
import lombok.extern.slf4j.Slf4j;
import org.nl.b_lms.sch.tasks.first_floor_area.auto.Prun;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
/**
* @Author: lyd
* @Description: 测试例子
@@ -10,10 +16,19 @@ import org.springframework.stereotype.Component;
*/
@Slf4j
@Component
public class TestTask {
public class TestTask extends Prun {
@Autowired
private RedissonClient redissonClient;
public void run() {
log.info("测试");
try {
Thread.sleep(15000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
log.info("run 执行成功");
}
public void run1(String str) {