Pārlūkot izejas kodu

增加单机床不允许重复放校验
入库完成修复bug

wudingsheng 1 nedēļu atpakaļ
vecāks
revīzija
c1236b0350

+ 3 - 0
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/edgeLibrary/dao/StockInfoMapper.java

@@ -12,6 +12,7 @@ import com.github.zuihou.business.productionReadyCenter.entity.CuttingTool;
 import com.github.zuihou.business.productionReadyCenter.entity.Tray;
 import com.github.zuihou.database.mybatis.auth.DataScope;
 import com.github.zuihou.tenant.vo.DeviceResourceDetailVo;
+import io.swagger.models.auth.In;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
@@ -85,4 +86,6 @@ public interface StockInfoMapper extends SuperMapper<StockInfo> {
     String getTrayLatheTypeCode(Long id);
 
     Tray getTrayNoByStorgeId(Long storgeId);
+
+    Integer verifyResourceStockInfo(Long storgeId);
 }

+ 15 - 12
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/TaskNodeServiceImpl.java

@@ -251,6 +251,9 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
 
     private static Logger logger = LoggerFactory.getLogger(TaskNodeServiceImpl.class);
 
+    private final static String ROBOT_POINT1="{\"1\":131,\"4\":448}";
+    private final static String ROBOT_POINT2="{\"1\":132,\"4\":449}";
+
     //获取子二级节点
     public List<TaskNode> getChildren(String parent_id) {
         List autoNodeList = resourceAutoCodeService.list(new QueryWrapper<ResourceAutoCode>().eq("parent_id",
@@ -2071,8 +2074,8 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
 
        /* List<Storge> jqrStorgeList = storgeService.list(Wraps.<Storge>lbQ().isNotNull(Storge::getCampId)
                 .eq(Storge::getLockStatus,"0")
-                .eq(Storge::getPointId,"124"));
-        List<Storge> jqrStorges = jqrStorgeList.stream().filter(x -> "124".equals(x.getPointId()) && !"124".equals(x.getName())).collect(Collectors.toList());
+                .eq(Storge::getPointId,DemoLineConstant.DEMOLINE_RJQR_ZS));
+        List<Storge> jqrStorges = jqrStorgeList.stream().filter(x -> DemoLineConstant.DEMOLINE_RJQR_ZS.equals(x.getPointId()) && !DemoLineConstant.DEMOLINE_RJQR_ZS.equals(x.getName())).collect(Collectors.toList());
         if(CollectionUtil.isNotEmpty(jqrStorges)){
             //存在有机器人手抓锁定节点,释放锁定
             msgUtil.redis_del("PRIORITY_PROCESSING");
@@ -2088,14 +2091,14 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
                 if (CollectionUtil.isNotEmpty(storgeList)) {
                     logger.info("节点{}工步{}开始释放占用的资源{}", taskNode.getId(), robotStep, storgePoints.toString());
 
-                    List<Storge> storges = storgeList.stream().filter(x -> "124".equals(x.getPointId()) && !"124".equals(x.getName())).collect(Collectors.toList());
+                    List<Storge> storges = storgeList.stream().filter(x -> DemoLineConstant.DEMOLINE_RJQR_ZS.equals(x.getPointId()) && !DemoLineConstant.DEMOLINE_RJQR_ZS.equals(x.getName())).collect(Collectors.toList());
 
                     if(CollectionUtil.isNotEmpty(storges)){//存在有机器人释放的节点
                         log.warn("4-存在有机器人释放的节点");
                         if(Objects.isNull(msgUtil.redis_get("PRIORITY_PROCESSING"))){
                             Storge jqrStorge = storges.get(0);
                             boolean zcwFlag = false;
-                            if(storgePoints.contains("220") || storgePoints.contains("221")){
+                            if(storgePoints.contains(ROBOT_POINT1) || storgePoints.contains(ROBOT_POINT2)){
                                 zcwFlag = true;
                             }
                             checkPriorityTask(jqrStorge,zcwFlag);
@@ -2142,14 +2145,14 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
                         if (CollectionUtil.isNotEmpty(storgeList)) {
                             logger.info("节点{}工步{}开始释放占用的资源{}", taskNode.getId(), robotStep, storgePoints.toString());
 
-                            List<Storge> storges = storgeList.stream().filter(x -> "124".equals(x.getPointId()) && !"124".equals(x.getName())).collect(Collectors.toList());
+                            List<Storge> storges = storgeList.stream().filter(x -> DemoLineConstant.DEMOLINE_RJQR_ZS.equals(x.getPointId()) && !DemoLineConstant.DEMOLINE_RJQR_ZS.equals(x.getName())).collect(Collectors.toList());
 
                             if(CollectionUtil.isNotEmpty(storges)){//存在有机器人释放的节点
                                 log.warn("3-存在有机器人释放的节点");
                                 if(Objects.isNull(msgUtil.redis_get("PRIORITY_PROCESSING"))){
                                     Storge jqrStorge = storges.get(0);
                                     boolean zcwFlag = false;
-                                    if(storgePoints.contains("220") || storgePoints.contains("221")){
+                                    if(storgePoints.contains(ROBOT_POINT1) || storgePoints.contains(ROBOT_POINT2)){
                                         zcwFlag = true;
                                     }
                                     checkPriorityTask(jqrStorge,zcwFlag);
@@ -2169,14 +2172,14 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
                         if (CollectionUtil.isNotEmpty(storgeList)) {
                             logger.info("节点{}工步{}开始释放占用的资源{}", taskNode.getId(), robotStep, storgePoints.toString());
 
-                            List<Storge> storges = storgeList.stream().filter(x -> "124".equals(x.getPointId()) && !"124".equals(x.getName())).collect(Collectors.toList());
+                            List<Storge> storges = storgeList.stream().filter(x -> DemoLineConstant.DEMOLINE_RJQR_ZS.equals(x.getPointId()) && !DemoLineConstant.DEMOLINE_RJQR_ZS.equals(x.getName())).collect(Collectors.toList());
 
                             if(CollectionUtil.isNotEmpty(storges)){//存在有机器人释放的节点
                                 log.warn("5-存在有机器人释放的节点");
                                 if(Objects.isNull(msgUtil.redis_get("PRIORITY_PROCESSING"))){
                                     Storge jqrStorge = storges.get(0);
                                     boolean zcwFlag = false;
-                                    if(storgePoints.contains("220") || storgePoints.contains("221")){
+                                    if(storgePoints.contains(ROBOT_POINT1) || storgePoints.contains(ROBOT_POINT2)){
                                         zcwFlag = true;
                                     }
                                     checkPriorityTask(jqrStorge,zcwFlag);
@@ -2204,14 +2207,14 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
 
                     if (CollectionUtil.isNotEmpty(storgeList)) {
                         logger.info("节点{}工步{}开始释放占用的资源{}", taskNode.getId(), robotStep, storgePoints.toString());
-                        List<Storge> storges = storgeList.stream().filter(x -> "124".equals(x.getPointId()) && !"124".equals(x.getName())).collect(Collectors.toList());
+                        List<Storge> storges = storgeList.stream().filter(x -> DemoLineConstant.DEMOLINE_RJQR_ZS.equals(x.getPointId()) && !DemoLineConstant.DEMOLINE_RJQR_ZS.equals(x.getName())).collect(Collectors.toList());
 
                         if(CollectionUtil.isNotEmpty(storges)){//存在有机器人释放的节点
                             log.warn("2-存在有机器人释放的节点");
                             if(Objects.isNull(msgUtil.redis_get("PRIORITY_PROCESSING"))){
                                 Storge jqrStorge = storges.get(0);
                                 boolean zcwFlag = false;
-                                if(storgePoints.contains("220") || storgePoints.contains("221")){
+                                if(storgePoints.contains(ROBOT_POINT1) || storgePoints.contains(ROBOT_POINT2)){
                                     zcwFlag = true;
                                 }
                                 checkPriorityTask(jqrStorge,zcwFlag);
@@ -2232,14 +2235,14 @@ public class TaskNodeServiceImpl extends SuperServiceImpl<TaskNodeMapper, TaskNo
                     if (CollectionUtil.isNotEmpty(storgeList)) {
                         logger.info("节点{}工步{}开始释放占用的资源{}", taskNode.getId(), robotStep, storgePoints.toString());
 
-                        List<Storge> storges = storgeList.stream().filter(x -> "124".equals(x.getPointId()) && !"124".equals(x.getName())).collect(Collectors.toList());
+                        List<Storge> storges = storgeList.stream().filter(x -> DemoLineConstant.DEMOLINE_RJQR_ZS.equals(x.getPointId()) && !DemoLineConstant.DEMOLINE_RJQR_ZS.equals(x.getName())).collect(Collectors.toList());
 
                         if(CollectionUtil.isNotEmpty(storges)){//存在有机器人释放的节点
                             log.warn("1-存在有机器人释放的节点");
                             if(Objects.isNull(msgUtil.redis_get("PRIORITY_PROCESSING"))){
                                 Storge jqrStorge = storges.get(0);
                                 boolean zcwFlag = false;
-                                if(storgePoints.contains("220") || storgePoints.contains("221")){
+                                if(storgePoints.contains(ROBOT_POINT1) || storgePoints.contains(ROBOT_POINT2)){
                                     zcwFlag = true;
                                 }
                                 checkPriorityTask(jqrStorge,zcwFlag);

+ 2 - 2
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/operationManagementCenter/service/impl/TaskServiceImpl.java

@@ -1775,9 +1775,9 @@ public class TaskServiceImpl extends SuperServiceImpl<TTaskMapper, TTask> implem
         //获取可用子盘
         List<Tray> trayList = trayService.list(new LbqWrapper<Tray>().eq(Tray::getCategoryType, tray.getCategoryType()).eq(Tray::getProductionType, tray.getProductionType()).eq(Tray::getFiveAxis, tray.getFiveAxis()).in(Tray::getId, stockIds));
 
-        if(trayList.isEmpty() || trayList.size()==0){
+        /*if(trayList.isEmpty() || trayList.size()==0){
             throw new RuntimeException("库存没有可用的子盘");
-        }
+        }*/
         return trayList;
     }
 }

+ 31 - 15
imcs-admin-boot/imcs-business-biz/src/main/java/com/github/zuihou/business/productionResourceCenter/strategy/impl/CacheRobotStrategy.java

@@ -38,6 +38,7 @@ import com.github.zuihou.business.util.CommonUtil;
 import com.github.zuihou.business.util.MsgUtil;
 import com.github.zuihou.common.constant.DictionaryKey;
 import com.github.zuihou.common.constant.ParameterKey;
+import com.github.zuihou.context.BaseContextHandler;
 import com.github.zuihou.database.mybatis.conditions.Wraps;
 import com.github.zuihou.database.mybatis.conditions.query.LbqWrapper;
 import com.github.zuihou.database.mybatis.conditions.query.QueryWrap;
@@ -54,6 +55,7 @@ import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
+import static com.github.zuihou.common.constant.CacheKey.TENANT;
 import static java.util.stream.Collectors.groupingBy;
 
 @Component("CACHE")
@@ -110,6 +112,10 @@ public class CacheRobotStrategy implements RobotStrategy {
     @Autowired
     private StockInfoMapper stockInfoMapper;
 
+    private final static String ROBOT_POINT1="{\"1\":131,\"4\":448}";
+    private final static String ROBOT_POINT2="{\"1\":132,\"4\":449}";
+
+
     @Override
     public Map robotInfo(TaskNode taskNode, String zoneName) {
         Map<String, Object> robotInfo = Maps.newConcurrentMap();
@@ -179,6 +185,7 @@ public class CacheRobotStrategy implements RobotStrategy {
 
     @Override
     public Map robotPut(Map returnMap, TaskNode taskNode, Storge startStorge, Storge targetStorge, List<ProductionresourcePosition> robotList, String targetXbk, Long targetStorgeResourceId) {
+        BaseContextHandler.setTenant("0000");
 
         Map<String, List<ProductionresourcePosition>> jqrMap = robotList.stream().collect(Collectors.groupingBy(ProductionresourcePosition::getPointId));
 
@@ -250,7 +257,8 @@ public class CacheRobotStrategy implements RobotStrategy {
         if(startStorge==null){
             throw new RuntimeException("库位不满足,没用查询到可用子盘");
         }
-
+        
+        
 
         //暂存库位作为库位起始位不需重复锁定暂存位
         ProductionresourcePosition startPosition = productionresourcePositionService.getOne(new LbqWrapper<ProductionresourcePosition>().eq(ProductionresourcePosition::getStorgeId, startStorge.getId()).last("limit 1"));
@@ -335,16 +343,17 @@ public class CacheRobotStrategy implements RobotStrategy {
         }
 
         // 根据起始点位,获取点位属于的类型
-        Productionresource locationStorgeType  = null;
+      /*  Productionresource locationStorgeType  = null;
         Productionresource ltargetStorgeType = null;
         if(!startStorge.getPointId().isEmpty()){
             locationStorgeType = productionresourceService.findOneByPointId(startStorge.getPointId());
         }
         if(!targetStorge.getPointId().isEmpty()){
             ltargetStorgeType = productionresourceService.findOneByPointId(targetStorge.getPointId());
-        }
+        }*/
+
+
 
-        //
         startStorge.setCompleteBatchNo(taskNode.getCompleteBatchNo());
         storgeService.lockStorge(startStorge, taskNode.getId());
         //锁定抓手
@@ -358,8 +367,8 @@ public class CacheRobotStrategy implements RobotStrategy {
         Map locationMap = new HashMap();
        /* locationMap.put("locationDevice", locationStorgeType==null?"": locationStorgeType.getCode());  //当前区域
         locationMap.put("destLocationDevice", ltargetStorgeType ==null?"": ltargetStorgeType.getCode());  //目的区域*/
-        locationMap.put("location", CommonUtil.getLocationValue(startStorge.getPointId(),latheTypeCode));  //零件当前位置
-        locationMap.put("destLocation", CommonUtil.getLocationValue(targetStorge.getPointId(),latheTypeCode)); //机器人缓存位
+        locationMap.put("location", CommonUtil.getLocationValue(startStorge.getPointId(),latheTypeCode).toString());  //零件当前位置
+        locationMap.put("destLocation", CommonUtil.getLocationValue(targetStorge.getPointId(),latheTypeCode).toString()); //机器人缓存位
         locationMap.put("taskType", DictionaryKey.TASK_TYPE.get("CARRY"));
         locationMap.put("carryType", "1");
         locationMap.put("rfidType",latheTypeCode);//子盘类型
@@ -410,7 +419,7 @@ public class CacheRobotStrategy implements RobotStrategy {
         String targetXbk = !returnMap.containsKey("targetxbk") ? null : returnMap.get("targetxbk").toString();
         String xbkCount = dataMap.containsKey(taskNode.getId()+"count")? dataMap.get(taskNode.getId()+"count").toString(): null;
         //线边库移动判断暂存位是否有空余位置
-        if(targetXbk.equals("0") && robotList.size() == 1 && (!startStore.getPointId().contains("220") && !startStore.getPointId().contains("221") )){
+        if(targetXbk.equals("0") && robotList.size() == 1 && (!startStore.getPointId().contains(ROBOT_POINT1) && !startStore.getPointId().contains(ROBOT_POINT2) )){
             dataMap.put("result", false);
             dataMap.put("resultMsg", "条件判断不通过,暂存位无空闲位置,节点名字"+task.getProcedureName()+ taskNode.getNodeName()+"节点id:"+taskNode.getId());
             return dataMap;
@@ -427,7 +436,7 @@ public class CacheRobotStrategy implements RobotStrategy {
             }
             //线边库位置条件不满足
             //当前库位不在暂存位上,在线边库上
-            if(!startStore.getPointId().contains("220") && !startStore.getPointId().contains("221") ){
+            if(!startStore.getPointId().contains(ROBOT_POINT1) && !startStore.getPointId().contains(ROBOT_POINT2) ){
                 dataMap.put("result", false);
                 dataMap.put("resultMsg", "条件判断不通过,线边库临时暂存, 等待目标位置释放,节点名字"+ task.getProcedureName()+"-"+ taskNode.getNodeName()+"节点id:"+taskNode.getId());
                 return dataMap;
@@ -523,9 +532,10 @@ public class CacheRobotStrategy implements RobotStrategy {
                 //查询起始库位托盘类型,根据托盘拉丁类型选择线边库库位
                 //TODO 根据产线查适配线边库库位
 
-                StorgeType xbkStorgeType = storgeTypeService.getOne(Wraps.<StorgeType>lbQ().eq(StorgeType::getName, "线边库"));
-                List<Storge> list = storgeService.list(Wraps.<Storge>lbQ().eq(Storge::getLatheTypeCode, latheTypeCode).eq(Storge::getStorgeTypeId,xbkStorgeType.getId()).orderByAsc(Storge::getPointId));
-                targetStorge = storgeService.getById(list.get(0));
+                //StorgeType xbkStorgeType = storgeTypeService.getOne(Wraps.<StorgeType>lbQ().eq(StorgeType::getName, "线边库"));
+                //List<Storge> list = storgeService.list(Wraps.<Storge>lbQ().eq(Storge::getLatheTypeCode, latheTypeCode).eq(Storge::getStorgeTypeId,xbkStorgeType.getId()).orderByAsc(Storge::getPointId));
+                List<ProductionresourcePosition> collect = xbkList.stream().filter(vo -> vo.getLatheTypeCode().equals(latheTypeCode) || "0".equals(vo.getLatheTypeCode())).collect(Collectors.toList());
+                targetStorge = storgeService.getById(collect.get(0).getStorgeId());
                 returnMap.put("store", targetStorge);
                 returnMap.put("targetxbk", "0");
             } else {
@@ -563,9 +573,9 @@ public class CacheRobotStrategy implements RobotStrategy {
                             //筛选 拉丁类型相同并且工艺设备绑定库位
                             List<Storge> collect1 = list.stream().filter(p -> p.getLatheTypeCode().equals(latheTypeCode) && bomProcedureProductionresource.getStorgeId() != null && p.getId().equals(bomProcedureProductionresource.getStorgeId())).collect(Collectors.toList());
                             if(CollectionUtil.isNotEmpty(collect1)){
-                                Storge storge =collect1.get(0);
-                                returnMap.put("storeResourceId", storge.getResourceId());
-                                returnMap.put("store", storge);
+                                targetStorge =collect1.get(0);
+                                returnMap.put("storeResourceId", targetStorge.getResourceId());
+                                returnMap.put("store", targetStorge);
                                 returnMap.put("targetxbk", "0");
                             }else{
                                 xbkFlag = "1";
@@ -592,8 +602,14 @@ public class CacheRobotStrategy implements RobotStrategy {
                 }
             }
         }
+        Integer resourceStockInfoCount=0;
+        if(targetStorge!=null){
+            //一个机床有多个库位,只准一个机床有一个子盘
+            resourceStockInfoCount = stockInfoMapper.verifyResourceStockInfo(targetStorge.getId());
+        }
+
 
-        if ("1".equals(xbkFlag)) {
+        if ("1".equals(xbkFlag) || resourceStockInfoCount > 0) {
             ProductionresourcePosition position = xbkList.get(0);
             targetStorge = storgeService.getById(position.getStorgeId());
             returnMap.put("storeResourceId", position.getResourceId());

+ 16 - 0
imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/edgeLibrary/StockInfoMapper.xml

@@ -343,4 +343,20 @@
     <select id="getTrayNoByStorgeId" resultType="com.github.zuihou.business.productionReadyCenter.entity.Tray">
         select tt.* from imcs_s_stock_info ssi INNER JOIN imcs_t_tray tt on ssi.goods_id=tt.id where storge_id=#{storgeId}
     </select>
+
+    <select id="verifyResourceStockInfo" resultType="java.lang.Integer">
+        select count(DISTINCT storge_id) from imcs_base_hz_0000.imcs_s_stock_info ssi where EXISTS (
+
+            select storge_id  from imcs_base_hz_0000.imcs_p_productionresource_position where resource_id=(
+
+                select ppp.resource_id from imcs_base_hz_0000.imcs_p_productionresource_position ppp
+
+                                                INNER join imcs_base_hz_0000.imcs_s_storge ss on ss.id=ppp.storge_id
+
+                                                INNER JOIN imcs_base_hz_0000.imcs_s_storge_type sst on ss.storge_type_id=sst.id
+                where sst.name='机床' and ss.id=#{storgeId}
+            ) and storge_id=ssi.storge_id
+
+        )
+    </select>
 </mapper>

+ 1 - 1
imcs-admin-boot/imcs-business-biz/src/main/resources/mapper_business/base/productionResourceCenter/ProductionresourcePositionMapper.xml

@@ -43,7 +43,7 @@
 
     <select id="getPPList" resultType="com.github.zuihou.business.productionResourceCenter.entity.ProductionresourcePosition" parameterType="map">
         SELECT
-        p.*,r.code,s.lock_status lockStatus,i.goods_id goodsId,i.goods_type category,i.complete_batch_no completeBatchNo,s.complete_batch_no campCompleteBatchNo,i.unique_code uniqueCode
+        p.*,r.code,s.lock_status lockStatus,i.goods_id goodsId,i.goods_type category,i.complete_batch_no completeBatchNo,s.complete_batch_no campCompleteBatchNo,s.lathe_type_code as latheTypeCode,i.unique_code uniqueCode
         <if test="goodsName != null and goodsName != ''">
             ,b.name goodsName
         </if>

+ 2 - 1
imcs-admin-boot/imcs-business-entity/src/main/java/com/github/zuihou/business/productionResourceCenter/entity/ProductionresourcePosition.java

@@ -239,7 +239,8 @@ public class ProductionresourcePosition extends Entity<Long> {
     @Excel(name = "库位表库位名称")
     private String storgeName;
 
-
+    @TableField(exist = false)
+    private String latheTypeCode;