opt: 备货区检测搬运中的管芯数(目前单轴双管是一种规格)
This commit is contained in:
@@ -63,4 +63,10 @@ public interface IMdPbPapervehicleService extends IService<MdPbPapervehicle> {
|
||||
* @return
|
||||
*/
|
||||
List<MdPbPapervehicle> getAllTubesByPoint(String location);
|
||||
|
||||
/**
|
||||
* 获取任务中的管芯信息
|
||||
* @return
|
||||
*/
|
||||
List<MdPbPapervehicle> getInfoByTask();
|
||||
}
|
||||
|
||||
@@ -21,4 +21,6 @@ public interface MdPbPapervehicleMapper extends BaseMapper<MdPbPapervehicle> {
|
||||
Integer checkHaveTaskByPoints(List<String> pointCodes);
|
||||
|
||||
List<MdPbPapervehicle> getAllTubesByPoint(String location);
|
||||
|
||||
List<MdPbPapervehicle> getInfoByTask();
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -101,4 +101,9 @@ public class MdPbPapervehicleServiceImpl extends ServiceImpl<MdPbPapervehicleMap
|
||||
return mdPbPapervehicleMapper.getAllTubesByPoint(location);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MdPbPapervehicle> getInfoByTask() {
|
||||
return mdPbPapervehicleMapper.getInfoByTask();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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("备货区送载具"));
|
||||
|
||||
Reference in New Issue
Block a user