opt: 备货区、送轴(去除分切计划状态校验)
This commit is contained in:
@@ -69,4 +69,11 @@ public interface IMdPbPapervehicleService extends IService<MdPbPapervehicle> {
|
||||
* @return
|
||||
*/
|
||||
List<MdPbPapervehicle> getInfoByTask();
|
||||
|
||||
/**
|
||||
* 通过载具获取管芯编码
|
||||
* @param vehicleCode
|
||||
* @return
|
||||
*/
|
||||
List<String> getTubeCodesByVehicle(String vehicleCode);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -152,4 +152,6 @@ public interface IPdmBiSlittingproductionplanService extends IService<PdmBiSlitt
|
||||
* @return
|
||||
*/
|
||||
List<PdmBiSlittingproductionplan> getXnPlanByDevice(String deviceCode);
|
||||
|
||||
List<PdmBiSlittingproductionplan> getPlansByDto(SlitterPlanDistinctDto dto);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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("备货区交换托盘中...请等待。");
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user