schangxiang@126.com
2025-11-04 f5ed29dc26c7cd952d56ec5721a2efc43cd25992
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XImagingXhandler.XDAL;
using System.Resources;
using XCoreBLL.Resource;
using System.Xml;
using System.Xml.Linq;
using System.Data;
using DriverManager;
using DriverLibrary;
using DriverLib;
using DriverLib.Engine;
using System.Collections.ObjectModel;
using XCommon.Log;
using DataCalcDAL.Com;
using DataEntity.Share;
using XCommon;
using HxEnum;
 
namespace XCore
{
    /// <summary>
    /// 吸液业务逻辑处理
    /// </summary>
    public class DilutionBll
    {
        string strCurrentCulture = "";
        WellCalc wellCalc = new WellCalc();
        LatticeBll latticeBll = new LatticeBll();
 
        public DilutionBll()
        {
            strCurrentCulture = System.Threading.Thread.CurrentThread.CurrentCulture.Name;
        }
 
        public MethodDilution GenerateMethodDilutionDataByXmlNode(XmlNode xmlNode)
        {
            MethodDilution methodDilution = new MethodDilution();
 
            methodDilution.isrun = xmlNode.SelectSingleNode("isrun").InnerText;
            methodDilution.status = xmlNode.SelectSingleNode("status").InnerText;
            methodDilution.name = xmlNode.SelectSingleNode("name").InnerText;
            methodDilution.label = xmlNode.SelectSingleNode("label").InnerText;
            methodDilution.strIndex = xmlNode.SelectSingleNode("strIndex").InnerText;
 
            #region 机械臂
            methodDilution.armText = xmlNode.SelectSingleNode("arm/text").InnerText;
            methodDilution.armValue = xmlNode.SelectSingleNode("arm/value").InnerText;
            methodDilution.headType = xmlNode.SelectSingleNode("headType").InnerText;
 
            string strchs = xmlNode.SelectSingleNode("channels").InnerText;
            // 从xml中获取通道数组值
            methodDilution.channels = ComUtility.GetChannelsFromXml(strchs);
            #endregion
 
            #region 吸头盒
            methodDilution.labwaretipText = xmlNode.SelectSingleNode("labwaretip/text").InnerText;
            methodDilution.labwaretipValue = xmlNode.SelectSingleNode("labwaretip/value").InnerText;
            #endregion
 
            #region 选择目标板 相关
            methodDilution.positionTextGradientDilution = xmlNode.SelectSingleNode("position/text").InnerText;
            methodDilution.positionValueGradientDilution = xmlNode.SelectSingleNode("position/value").InnerText;
            methodDilution.labwareTextGradientDilution = xmlNode.SelectSingleNode("labware/text").InnerText;
            methodDilution.labwareValueGradientDilution = xmlNode.SelectSingleNode("labware/value").InnerText;
            methodDilution.wellarrayGradientDilution = xmlNode.SelectSingleNode("wellarray").InnerText;             // 吸液选中的孔位,逗号分割
            methodDilution.volume = float.Parse(xmlNode.SelectSingleNode("volume").InnerText);      // 体积
 
            // 液体类型
            methodDilution.liquidTypeTextGradientDilution = xmlNode.SelectSingleNode("liquidType/text").InnerText;
            methodDilution.liquidTypeValueGradientDilution = xmlNode.SelectSingleNode("liquidType/value").InnerText;
            // 液体范围
            methodDilution.liquidRangeTextGradientDilution = xmlNode.SelectSingleNode("liquidRange/text").InnerText;
            methodDilution.liquidRangeValueGradientDilution = xmlNode.SelectSingleNode("liquidRange/value").InnerText;
            // 液体
            methodDilution.liquidTextGradientDilution = xmlNode.SelectSingleNode("liquid/text").InnerText;
            methodDilution.liquidValueGradientDilution = xmlNode.SelectSingleNode("liquid/value").InnerText;
 
            #region 混合
            methodDilution.bMix = xmlNode.SelectSingleNode("enableMix").InnerText.ToLower() == "true" ? true : false;
            methodDilution.mixvolume = Convert.ToDouble(xmlNode.SelectSingleNode("mixvolume").InnerText);
            methodDilution.mixcount = Convert.ToInt32(xmlNode.SelectSingleNode("mixcount").InnerText);
            methodDilution.mixAspiratePositionText = xmlNode.SelectSingleNode("mixAspiratePosition/text").InnerText;
            methodDilution.mixAspiratePositionValue = Convert.ToInt32(xmlNode.SelectSingleNode("mixAspiratePosition/value").InnerText);
            methodDilution.mixAspirateDistance = Convert.ToDouble(xmlNode.SelectSingleNode("mixAspirateDistance").InnerText);
            methodDilution.mixAspirateSpeed = Convert.ToDouble(xmlNode.SelectSingleNode("mixAspirateSpeed").InnerText);
            methodDilution.mixDispensePositionText = xmlNode.SelectSingleNode("mixDispensePosition/text").InnerText;
            methodDilution.mixDispensePositionValue = Convert.ToInt32(xmlNode.SelectSingleNode("mixDispensePosition/value").InnerText);
            methodDilution.mixDispenseDistance = Convert.ToDouble(xmlNode.SelectSingleNode("mixDispenseDistance").InnerText);
            methodDilution.mixDispenseSpeed = Convert.ToDouble(xmlNode.SelectSingleNode("mixDispenseSpeed").InnerText);
            #endregion
 
            // 稀释方向
            methodDilution.dilutionDirectionText = xmlNode.SelectSingleNode("dilutionDirection/text").InnerText;
            methodDilution.dilutionDirectionValue =
                EnumManagement.GetField<DilutionDirectionEnum>(Convert.ToInt32(xmlNode.SelectSingleNode("dilutionDirection/value").InnerText));
 
            // 更换Tip
            methodDilution.changeTipsValueGradientDilution = xmlNode.SelectSingleNode("changeTipsValue").InnerText;
            // 舍弃选中范围最后一行或最后一列多余的体积
            methodDilution.isDiscardLastVolume = bool.Parse(xmlNode.SelectSingleNode("isDiscardLastVolume").InnerText);
            #endregion
 
            #region 梯度稀释设置 相关
            methodDilution.positionTextAddDiluent = xmlNode.SelectSingleNode("positionDilution/text").InnerText;
            methodDilution.positionValueAddDiluent = xmlNode.SelectSingleNode("positionDilution/value").InnerText;
            methodDilution.labwareTextAddDiluent = xmlNode.SelectSingleNode("labwareDilution/text").InnerText;
            methodDilution.labwareValueAddDiluent = xmlNode.SelectSingleNode("labwareDilution/value").InnerText;
            methodDilution.wellarrayAddDiluent = xmlNode.SelectSingleNode("wellarrayDilution").InnerText;
            methodDilution.dilutionFactor = int.Parse(xmlNode.SelectSingleNode("dilutionFactor").InnerText);
 
            // 液体类型
            methodDilution.liquidTypeTextAddDiluent = xmlNode.SelectSingleNode("liquidTypeDilution/text").InnerText;
            methodDilution.liquidTypeValueAddDiluent = xmlNode.SelectSingleNode("liquidTypeDilution/value").InnerText;
            // 液体范围
            methodDilution.liquidRangeTextAddDiluent = xmlNode.SelectSingleNode("liquidRangeDilution/text").InnerText;
            methodDilution.liquidRangeValueAddDiluent = xmlNode.SelectSingleNode("liquidRangeDilution/value").InnerText;
            // 液体
            methodDilution.liquidTextAddDiluent = xmlNode.SelectSingleNode("liquidDilution/text").InnerText;
            methodDilution.liquidValueAddDiluent = xmlNode.SelectSingleNode("liquidDilution/value").InnerText;
 
            // 更换Tip
            methodDilution.changeTipsValueAddDiluent = xmlNode.SelectSingleNode("changeTipsValueDilution").InnerText;
 
            // 目标板选中范围的首行或首列加入稀释液
            methodDilution.isTargetSelectRangeFirstAddDiluent = bool.Parse(xmlNode.SelectSingleNode("isTargetSelectRangeFirstAddDiluent").InnerText);
            #endregion
 
            return methodDilution;
        }
 
        #region 检查所有属性设置是否满足要求
        /// <summary>
        /// 检查所有属性设置是否满足要求
        /// </summary>
        /// <param name="methodAspirate">吸液属性对象</param>
        /// <returns>检查所有属性设置是否满足要求</returns>
        public MethodPropertyInfo CheckProperty(MethodAspirate methodAspirate)
        {
            MethodPropertyInfo methodPropertyInfo = new MethodPropertyInfo();
 
            if (strCurrentCulture== "zh-CN")
            {
               
            }
            else if(strCurrentCulture == "en-US")
            {
               
            }
            return methodPropertyInfo;
        }
        #endregion
 
 
    }
}