Przeglądaj źródła

feat(d2-02-t3): 装配培养态来源——AppData.GetCultivation只读HouseBin.Dish(优先数state==0在培养胚胎)+Program注入DebugSessionManager

huangjie 3 dni temu
rodzic
commit
44b67e380b

+ 23 - 0
ivf_tl_operate_2.0/control/ivf_tl_Control/AppData.cs

@@ -25,6 +25,7 @@ using Npgsql.TypeHandlers.GeometricHandlers;
 using System;
 using System.Collections.Generic;
 using System.Configuration;
+using System.Linq;
 using System.Diagnostics;
 using System.IO;
 using System.Text.Json.Nodes;
@@ -211,6 +212,28 @@ namespace ivf_tl_Control
         public HouseBin HouseBin10;
         public BufferBottleBin BufferBottleBin;
 
+        /// <summary>D2-02 第三阶段:按 houseSn 读该舱培养态(Dish!=null=在培养),供调试 acquire 给 operate 弹确认框。只读,不改采集。</summary>
+        public (bool cultivating, int embryoCount) GetCultivation(int houseSn)
+        {
+            try
+            {
+                var bin = houseSn switch
+                {
+                    1 => HouseBin1, 2 => HouseBin2, 3 => HouseBin3, 4 => HouseBin4, 5 => HouseBin5,
+                    6 => HouseBin6, 7 => HouseBin7, 8 => HouseBin8, 9 => HouseBin9, 10 => HouseBin10,
+                    _ => null
+                };
+                var dish = bin?.Dish;                       // 缓冲瓶舱11无养胚胎 → 视为不培养
+                if (dish == null) return (false, 0);
+                // 优先数"仍在培养(state==0)"的胚胎(总数 embryoCount 含已移植/冷冻/作废的,不代表此刻在养);取不到明细则退回 embryoCount。
+                int count = dish.Embryo != null && dish.Embryo.Count > 0
+                    ? dish.Embryo.Count(e => e.state == 0)
+                    : dish.embryoCount;
+                return (true, count > 0 ? count : 0);
+            }
+            catch { return (false, 0); }
+        }
+
         // ── M5-03-2:各链路「最后成功通讯时间」只读时间戳 ──
         // 仅在已有的成功分支里赋值(不改上报逻辑/不改报文),供 GetMonitorSnapshot 只读呈现「不假装实时」。
         // LastHttpOkAt 由 operate 侧 HTTP 轮询(M5-04-4)写入,control 这里只持有/透传。

+ 2 - 1
ivf_tl_operate_2.0/control/ivf_tl_ControlHost/Program.cs

@@ -49,7 +49,8 @@ namespace IvfTl.ControlHost
                     houseSn => IvfTl.Hardware.Impl.HardwareAccessLayer.Instance.GetHouseGate(houseSn),
                     () => DateTime.UtcNow,
                     ttlMs: 10000,
-                    log: msg => Log4netHelper.WriteLog(msg));
+                    log: msg => Log4netHelper.WriteLog(msg),
+                    cultivationOf: houseSn => { try { return ivf_tl_Control.AppData.Instance.GetCultivation(houseSn); } catch { return (false, 0); } });
                 _http = new ControlHttpServer(
                     hostArgs.Port,
                     BuildStatus,        // /ping 轻量