opt: 备货区检测搬运中的管芯数(目前单轴双管是一种规格)

This commit is contained in:
2025-06-18 13:17:35 +08:00
parent da54fc67ab
commit 13d27fa911
6 changed files with 60 additions and 11 deletions

View File

@@ -63,4 +63,10 @@ public interface IMdPbPapervehicleService extends IService<MdPbPapervehicle> {
* @return
*/
List<MdPbPapervehicle> getAllTubesByPoint(String location);
/**
* 获取任务中的管芯信息
* @return
*/
List<MdPbPapervehicle> getInfoByTask();
}

View File

@@ -21,4 +21,6 @@ public interface MdPbPapervehicleMapper extends BaseMapper<MdPbPapervehicle> {
Integer checkHaveTaskByPoints(List<String> pointCodes);
List<MdPbPapervehicle> getAllTubesByPoint(String location);
List<MdPbPapervehicle> getInfoByTask();
}

View File

@@ -70,4 +70,13 @@
AND bs.is_used = '1'
AND p.qty > 0
</select>
<select id="getInfoByTask" resultType="org.nl.b_lms.bst.ivt.papervehicle.service.dao.MdPbPapervehicle">
SELECT p.* FROM sch_base_task t1
LEFT JOIN md_pb_papervehicle p ON p.vehicle_code = t1.vehicle_code2 AND p.qty > 0
WHERE t1.task_type = '010807' AND t1.task_status <![CDATA[ < ]]> '07' AND t1.is_delete = '0'
UNION
SELECT p.* FROM sch_base_task t2
LEFT JOIN md_pb_papervehicle p ON p.vehicle_code = t2.vehicle_code AND p.qty > 0
WHERE t2.task_type = '010808' AND t2.task_status <![CDATA[ < ]]> '07' AND t2.is_delete = '0'
</select>
</mapper>

View File

@@ -101,4 +101,9 @@ public class MdPbPapervehicleServiceImpl extends ServiceImpl<MdPbPapervehicleMap
return mdPbPapervehicleMapper.getAllTubesByPoint(location);
}
@Override
public List<MdPbPapervehicle> getInfoByTask() {
return mdPbPapervehicleMapper.getInfoByTask();
}
}

View File

@@ -154,6 +154,7 @@ public class StockAreaSendVehicleTask extends AbstractAcsTask {
? callPoint.getString("point_code")
: "");
task.setVehicle_code(form.getString("vehicle_code"));
task.setVehicle_code2(form.getString("vehicle_code2"));
task.setAcs_task_type("3");
task.setIs_delete("0");
task.setRemark("point3只是记录点不会下到ACS");

View File

@@ -47,12 +47,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -548,22 +546,22 @@ public class AutoCallAirShaftTask extends Prun {
.eq(BstIvtShafttubeivt::getPoint_type, empty.getPoint_type())
.eq(BstIvtShafttubeivt::getIs_used, "1"));
log.info("同位置的另一台穿拔轴机构:{}", one);
// 另一台所需要的数量
// 另一台所需要的数量(默认双管芯尺寸一致)
int otherDeviceTubeSize = 0;
if (ObjectUtil.isNotEmpty(one)) {
if (one.getTube_code1().equals(tubes.get(0))) {
otherDeviceTubeSize = (int) Stream.of(one.getTube_code1(), one.getTube_code2()).filter(ObjectUtil::isNotEmpty).count();
}
}
// 缺省的数量
int needQuantity = 0;
// 判断当前区域location对应的备货区是否含有相同的纸管 校验了不在搬运中
// todo: 要考虑防止所需要的托盘被搬走!
// todo: 要考虑防止所需要的托盘被搬走!双管芯的尺寸不一致
// type=1桁架底下的托盘, 关联对象material_code=纸管, qty > 0
List<BstIvtStockingivt> useList = stockingivtService.getPaperTubePoint("1", tubes.get(0), location, 0);
if (useList.size() > 0) {
// 求和,三个托盘中需要的管芯的数量。
int sum = useList.stream().mapToInt(BstIvtStockingivt::getQty).sum();
if (ObjectUtil.isNotEmpty(one)) {
if (one.getTube_code1().equals(tubes.get(0))) {
otherDeviceTubeSize = (int) Stream.of(one.getTube_code1(), one.getTube_code2()).filter(ObjectUtil::isNotEmpty).count();
}
}
// 说明三个位置中有包含此纸管的数据。
if (sum >= tubes.size() + otherDeviceTubeSize) {
return true;
@@ -573,6 +571,31 @@ public class AutoCallAirShaftTask extends Prun {
// 兜底
needQuantity = needTemp > 0 ? needTemp : 1;
}
// 查询是否存在任务正在搬运过来。(路上的是另一台机构的轴)
List<MdPbPapervehicle> havePapers = papervehicleService.getInfoByTask();
if (CollectionUtil.isNotEmpty(havePapers)) {
Map<String, BigDecimal> sumByMaterialCode = havePapers.stream()
.collect(Collectors.groupingBy(
MdPbPapervehicle::getMaterial_code,
Collectors.mapping(
MdPbPapervehicle::getQty,
Collectors.reducing(
BigDecimal.ZERO,
BigDecimal::add
)
)
));
int sumQty = sumByMaterialCode.get(tubes.get(0)).intValue();
if (sumQty >= needQuantity ) {
stepErrorInfo.add("AGV正在搬运管芯...");
log.info("AGV正在搬运管芯...");
return true;
}
// 如果不够,就计算还缺多少个
int needTemp = needQuantity - sumQty;
// 兜底
needQuantity = needTemp > 0 ? needTemp : tubes.size();
}
// 查找type=0的位置(待命的托盘)中是否存在(需要判断的是单独一个托盘) 校验了不在搬运中
List<BhTubePointDto> stockingivtList = stockingivtService.getNeedPaperTubePoint("0", tubes.get(0), location);
// 找一个点位: 目的需要的点位
@@ -610,6 +633,7 @@ public class AutoCallAirShaftTask extends Prun {
.eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code()));
doSavePaperInfos(paperList, param);
stockAreaCallTubeTask.createTask(param);
stepErrorInfo.add("备货区正在搬运管芯过来,托盘号:[" + needPoint.getVehicle_code() + "]。");
return true;
}
// 判断是否有单独拉出去的任务,有的话直接拉过来。
@@ -628,6 +652,7 @@ public class AutoCallAirShaftTask extends Prun {
.eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code()));
doSavePaperInfos(paperList, param);
stockAreaCallTubeTask.createTask(param);
stepErrorInfo.add("备货区正在搬运管芯过来,托盘号:[" + needPoint.getVehicle_code() + "]。");
return true;
}
// 查找一个没有任务的空位
@@ -645,6 +670,7 @@ public class AutoCallAirShaftTask extends Prun {
param.put("point_code1", needMovePoint.getPoint_code());
param.put("point_code2", endPoint.getPoint_code());
param.put("vehicle_code", needMovePoint.getVehicle_code());
param.put("vehicle_code2", needPoint.getVehicle_code());
param.put("material_code", tubes.get(0));
param.put("call_point", needPoint);
param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送载具"));