|
@@ -13,6 +13,7 @@ import com.github.zuihou.business.edgeLibrary.entity.Storge;
|
|
|
import com.github.zuihou.business.edgeLibrary.service.StorgeService;
|
|
|
import com.github.zuihou.business.operationManagementCenter.dao.TTaskMapper;
|
|
|
import com.github.zuihou.business.operationManagementCenter.entity.TTask;
|
|
|
+import com.github.zuihou.business.operationManagementCenter.entity.TWorkpiece;
|
|
|
import com.github.zuihou.business.operationManagementCenter.entity.TaskNode;
|
|
|
import com.github.zuihou.business.operationManagementCenter.service.TaskNodeService;
|
|
|
import com.github.zuihou.business.operationManagementCenter.service.WorkpieceService;
|
|
@@ -144,6 +145,8 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
|
|
|
private String instructionUrl;
|
|
|
|
|
|
+ private boolean assembleFlag = true;
|
|
|
+
|
|
|
@Override
|
|
|
public void initResource(TaskNode taskNode, TTask task, Map dataMap) {
|
|
|
//productionresourcePosition = getResourcePosition(taskNode);
|
|
@@ -192,10 +195,46 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
String paramKey = zZone.getNo() + "_plc";
|
|
|
instructionUrl = (null == msgUtil.redis_get(ParameterKey.PARAMETERS)? "": ((Map<String,String>)msgUtil.redis_get(ParameterKey.PARAMETERS)).get(paramKey).toString());
|
|
|
|
|
|
- // TODO 后续删除,目前条用模拟接口
|
|
|
-// if("safeguard".equals(zZone.getNo())){
|
|
|
-// instructionUrl = instructionUrl.replace("8081","8083");
|
|
|
-// }
|
|
|
+ // 产品装配所在地的对应线边库
|
|
|
+ String assembleZoneKey = zoneName + "-" + bomzZone.getNo();
|
|
|
+ String assembleZoneXbkNo = DictionaryKey.YJ_ZONE_XBK.get(assembleZoneKey);
|
|
|
+
|
|
|
+ String bomZoneXbkNo = DictionaryKey.YJ_ZONE_XBK.get(zoneName);
|
|
|
+
|
|
|
+ // 查找产品装配平台可用的线边库数量,进线加工数量最多等于线边库库位数量,防止极端情况产线不能运行时人工将工件都暂存线边库
|
|
|
+ // 装配线边库数量,启用并且无料的库位
|
|
|
+ List<BBom> zoneBoms = bBomMapper.selectList(Wraps.<BBom>lbQ().in(BBom::getZoneId, bomZzoneId));
|
|
|
+ List<Long> zoneBomIds = zoneBoms.stream().map(p -> p.getId()).collect(Collectors.toList());
|
|
|
+ if (taskNode.getCompleteBatchSort() == 1){
|
|
|
+ List<ProductionresourcePosition> assembleXbkUseableList = productionresourcePositionService.getFreeProductionresourcePositionByNos(assembleZoneXbkNo.split(","));
|
|
|
+
|
|
|
+ List<ZZoneProductionresource> assembleZoneProductionresources = zZoneProductionresourceMapper.selectList(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getZoneId, zoneId));
|
|
|
+ List<Long> assembleZoneProductionresourceIds = assembleZoneProductionresources.stream().map(p -> p.getResourceId()).collect(Collectors.toList());
|
|
|
+ List<ProductionresourcePosition> assembleProductionresourcePositions = productionresourcePositionService.list(Wraps.<ProductionresourcePosition>lbQ().in(ProductionresourcePosition::getResourceId, assembleZoneProductionresourceIds));
|
|
|
+ List<Long> assembleProductionresourceStorgeIds = assembleProductionresourcePositions.stream().map(p -> p.getStorgeId()).collect(Collectors.toList());
|
|
|
+
|
|
|
+ List<TWorkpiece> assembleMachiningList = workpieceService.list(Wraps.<TWorkpiece>lbQ().in(TWorkpiece::getStorgeId, assembleProductionresourceStorgeIds).in(TWorkpiece::getBomId,zoneBomIds));
|
|
|
+ // 线内在制件数量大于线边库空闲可用数量
|
|
|
+ if(assembleMachiningList.size() >= assembleXbkUseableList.size()){
|
|
|
+ assembleFlag =false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 在判断线内线边库数量及在制件数量
|
|
|
+ List<ProductionresourcePosition> zoneXbkUseableList = productionresourcePositionService.getFreeProductionresourcePositionByNos(bomZoneXbkNo.split(","));
|
|
|
+ List<ZZoneProductionresource> zoneProductionresources = zZoneProductionresourceMapper.selectList(Wraps.<ZZoneProductionresource>lbQ().eq(ZZoneProductionresource::getZoneId, bomZzoneId));
|
|
|
+ List<Long> zoneProductionresourceIds = zoneProductionresources.stream().map(p -> p.getResourceId()).collect(Collectors.toList());
|
|
|
+ List<ProductionresourcePosition> zoneProductionresourcePositions = productionresourcePositionService.list(Wraps.<ProductionresourcePosition>lbQ().in(ProductionresourcePosition::getResourceId, zoneProductionresourceIds));
|
|
|
+ List<Long> zoneProductionresourceStorgeIds = zoneProductionresourcePositions.stream().map(p -> p.getStorgeId()).collect(Collectors.toList());
|
|
|
+ List<TWorkpiece> zonemachiningList = workpieceService.list(Wraps.<TWorkpiece>lbQ().in(TWorkpiece::getStorgeId, zoneProductionresourceStorgeIds).in(TWorkpiece::getBomId,zoneBomIds));
|
|
|
+ // 线内在制件数量大于线边库空闲可用数量
|
|
|
+ if(zonemachiningList.size() >= zoneXbkUseableList.size()){
|
|
|
+ assembleFlag =false;
|
|
|
+ }
|
|
|
+ // 保障平台数量加上线内加工数量大于产线线边库数量
|
|
|
+ if(assembleMachiningList.size() + zonemachiningList.size() >= zoneXbkUseableList.size()){
|
|
|
+ assembleFlag =false;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -295,7 +334,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
//目的库位
|
|
|
Storge jqrStorge = null;
|
|
|
|
|
|
- List<StockInfo>flikustockInfos = null;
|
|
|
+ List<StockInfo> flikustockInfos = null;
|
|
|
|
|
|
|
|
|
if(taskNode.getCompleteBatchSort()==1){
|
|
@@ -611,7 +650,7 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
Long resourceId = taskNode.getTargetResourceId();
|
|
|
String xbkFlag = "";
|
|
|
|
|
|
- if("1".equals(findAgvFlag)){ //需要提前锁定下个接驳位
|
|
|
+ if("1".equals(findAgvFlag)){//需要提前锁定下个接驳位
|
|
|
// begin modify by yejian on 20220513 for agv动态查找满足抽检一个工序需多次调度agv问题
|
|
|
// 先找到处理节点下一节点agv起点地址
|
|
|
|
|
@@ -795,13 +834,13 @@ public class RobotNodeServiceImpl implements NodeOperationService {
|
|
|
* @param task
|
|
|
* @return
|
|
|
*/
|
|
|
- private List<StockInfo>getLikuStockList(TTask task){
|
|
|
+ private List<StockInfo> getLikuStockList(TTask task){
|
|
|
List<StockInfo> returnList = null;
|
|
|
List<StockInfo> oneTray = null;
|
|
|
|
|
|
List<Productionresource> productionresources = productionresourceBizMapper.selectList(Wraps.<Productionresource>lbQ().like(Productionresource::getCode,DictionaryKey.YJ_ZONE_XBK.get("plateAndClamp")));
|
|
|
List<Long> productionresourceIds = productionresources.stream().map(t->t.getId()).collect(Collectors.toList());
|
|
|
- List<ProductionresourcePosition> startProductionresourcePositions = productionresourcePositionMapper.selectList(Wraps.<ProductionresourcePosition>lbQ().in(ProductionresourcePosition::getResourceId, productionresourceIds));
|
|
|
+ List<ProductionresourcePosition> startProductionresourcePositions = productionresourcePositionMapper.selectList(Wraps.<ProductionresourcePosition>lbQ().in(ProductionresourcePosition::getResourceId, productionresourceIds).eq(ProductionresourcePosition::getStatus,"0"));
|
|
|
List<Long> startProductionresourcePositionIds = startProductionresourcePositions.stream().map(t->t.getStorgeId()).collect(Collectors.toList());
|
|
|
|
|
|
List<BomProcedureTray>trayList = procedureTrayService.list(Wraps.<BomProcedureTray>lbQ().in(BomProcedureTray::getProcedureId, task.getProcedureId()));
|