opt: 备货区检测搬运中的管芯数(目前单轴双管是一种规格)
This commit is contained in:
@@ -63,4 +63,10 @@ public interface IMdPbPapervehicleService extends IService<MdPbPapervehicle> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
List<MdPbPapervehicle> getAllTubesByPoint(String location);
|
List<MdPbPapervehicle> getAllTubesByPoint(String location);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取任务中的管芯信息
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<MdPbPapervehicle> getInfoByTask();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,4 +21,6 @@ public interface MdPbPapervehicleMapper extends BaseMapper<MdPbPapervehicle> {
|
|||||||
Integer checkHaveTaskByPoints(List<String> pointCodes);
|
Integer checkHaveTaskByPoints(List<String> pointCodes);
|
||||||
|
|
||||||
List<MdPbPapervehicle> getAllTubesByPoint(String location);
|
List<MdPbPapervehicle> getAllTubesByPoint(String location);
|
||||||
|
|
||||||
|
List<MdPbPapervehicle> getInfoByTask();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,4 +70,13 @@
|
|||||||
AND bs.is_used = '1'
|
AND bs.is_used = '1'
|
||||||
AND p.qty > 0
|
AND p.qty > 0
|
||||||
</select>
|
</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>
|
</mapper>
|
||||||
|
|||||||
@@ -101,4 +101,9 @@ public class MdPbPapervehicleServiceImpl extends ServiceImpl<MdPbPapervehicleMap
|
|||||||
return mdPbPapervehicleMapper.getAllTubesByPoint(location);
|
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")
|
? callPoint.getString("point_code")
|
||||||
: "");
|
: "");
|
||||||
task.setVehicle_code(form.getString("vehicle_code"));
|
task.setVehicle_code(form.getString("vehicle_code"));
|
||||||
|
task.setVehicle_code2(form.getString("vehicle_code2"));
|
||||||
task.setAcs_task_type("3");
|
task.setAcs_task_type("3");
|
||||||
task.setIs_delete("0");
|
task.setIs_delete("0");
|
||||||
task.setRemark("point3只是记录点,不会下到ACS");
|
task.setRemark("point3只是记录点,不会下到ACS");
|
||||||
|
|||||||
@@ -47,12 +47,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
@@ -548,22 +546,22 @@ public class AutoCallAirShaftTask extends Prun {
|
|||||||
.eq(BstIvtShafttubeivt::getPoint_type, empty.getPoint_type())
|
.eq(BstIvtShafttubeivt::getPoint_type, empty.getPoint_type())
|
||||||
.eq(BstIvtShafttubeivt::getIs_used, "1"));
|
.eq(BstIvtShafttubeivt::getIs_used, "1"));
|
||||||
log.info("同位置的另一台穿拔轴机构:{}", one);
|
log.info("同位置的另一台穿拔轴机构:{}", one);
|
||||||
// 另一台所需要的数量
|
// 另一台所需要的数量(默认双管芯尺寸一致)
|
||||||
int otherDeviceTubeSize = 0;
|
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;
|
int needQuantity = 0;
|
||||||
// 判断当前区域location对应的备货区是否含有相同的纸管 校验了不在搬运中
|
// 判断当前区域location对应的备货区是否含有相同的纸管 校验了不在搬运中
|
||||||
// todo: 要考虑防止所需要的托盘被搬走!
|
// todo: 要考虑防止所需要的托盘被搬走!双管芯的尺寸不一致
|
||||||
// type=1(桁架底下的托盘), 关联对象material_code=纸管, qty > 0
|
// type=1(桁架底下的托盘), 关联对象material_code=纸管, qty > 0
|
||||||
List<BstIvtStockingivt> useList = stockingivtService.getPaperTubePoint("1", tubes.get(0), location, 0);
|
List<BstIvtStockingivt> useList = stockingivtService.getPaperTubePoint("1", tubes.get(0), location, 0);
|
||||||
if (useList.size() > 0) {
|
if (useList.size() > 0) {
|
||||||
// 求和,三个托盘中需要的管芯的数量。
|
// 求和,三个托盘中需要的管芯的数量。
|
||||||
int sum = useList.stream().mapToInt(BstIvtStockingivt::getQty).sum();
|
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) {
|
if (sum >= tubes.size() + otherDeviceTubeSize) {
|
||||||
return true;
|
return true;
|
||||||
@@ -573,6 +571,31 @@ public class AutoCallAirShaftTask extends Prun {
|
|||||||
// 兜底
|
// 兜底
|
||||||
needQuantity = needTemp > 0 ? needTemp : 1;
|
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的位置(待命的托盘)中是否存在(需要判断的是单独一个托盘) 校验了不在搬运中
|
// 查找type=0的位置(待命的托盘)中是否存在(需要判断的是单独一个托盘) 校验了不在搬运中
|
||||||
List<BhTubePointDto> stockingivtList = stockingivtService.getNeedPaperTubePoint("0", tubes.get(0), location);
|
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()));
|
.eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code()));
|
||||||
doSavePaperInfos(paperList, param);
|
doSavePaperInfos(paperList, param);
|
||||||
stockAreaCallTubeTask.createTask(param);
|
stockAreaCallTubeTask.createTask(param);
|
||||||
|
stepErrorInfo.add("备货区正在搬运管芯过来,托盘号:[" + needPoint.getVehicle_code() + "]。");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// 判断是否有单独拉出去的任务,有的话直接拉过来。
|
// 判断是否有单独拉出去的任务,有的话直接拉过来。
|
||||||
@@ -628,6 +652,7 @@ public class AutoCallAirShaftTask extends Prun {
|
|||||||
.eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code()));
|
.eq(MdPbPapervehicle::getVehicle_code, needPoint.getVehicle_code()));
|
||||||
doSavePaperInfos(paperList, param);
|
doSavePaperInfos(paperList, param);
|
||||||
stockAreaCallTubeTask.createTask(param);
|
stockAreaCallTubeTask.createTask(param);
|
||||||
|
stepErrorInfo.add("备货区正在搬运管芯过来,托盘号:[" + needPoint.getVehicle_code() + "]。");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
// 查找一个没有任务的空位
|
// 查找一个没有任务的空位
|
||||||
@@ -645,6 +670,7 @@ public class AutoCallAirShaftTask extends Prun {
|
|||||||
param.put("point_code1", needMovePoint.getPoint_code());
|
param.put("point_code1", needMovePoint.getPoint_code());
|
||||||
param.put("point_code2", endPoint.getPoint_code());
|
param.put("point_code2", endPoint.getPoint_code());
|
||||||
param.put("vehicle_code", needMovePoint.getVehicle_code());
|
param.put("vehicle_code", needMovePoint.getVehicle_code());
|
||||||
|
param.put("vehicle_code2", needPoint.getVehicle_code());
|
||||||
param.put("material_code", tubes.get(0));
|
param.put("material_code", tubes.get(0));
|
||||||
param.put("call_point", needPoint);
|
param.put("call_point", needPoint);
|
||||||
param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送载具"));
|
param.put("task_type", SlitterEnum.TASK_TYPE.code("备货区送载具"));
|
||||||
|
|||||||
Reference in New Issue
Block a user