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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
using DataRWDAL.Base;
using SqlSugar;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Dynamic;
using System.Reflection;
using System.Runtime.InteropServices.Expando;
using XImagingXhandler.XDAL;
 
namespace DataRWDAL
{
    /// <summary>
    /// 液体类型与液体范围关系库表操作类
    /// </summary>
    public class LiquidTypeRSRangeDB:BaseDB
    {
        #region 查询返回液体类型数据集 by 查询请求参数
        /// <summary>
        /// 查询返回液体类型数据集 by 查询请求参数
        /// </summary>
        /// <param name="lType">1:默认类型;0:非默认;2:全部类型</param>
        /// <returns>液体类型数据集</returns>
        public static List<LiquidType> GetLiquidTypeFromdb(int lType)
        {
            List<LiquidType> liquidTypes = new List<LiquidType>();
            using (var db = GetInstance())
            {
                if (lType == 1 || lType == 0)
                {
                    liquidTypes = db.Queryable<LiquidType>().Where(it => it.is_default_type.Equals(lType)).OrderBy(it => it.timestamp, SqlSugar.OrderByType.Asc).ToList();
                    LiquidType lbt = new LiquidType();
                    lbt.liquid_type_id = "0";
                    lbt.liquid_type_name = "所有类型";
                    lbt.liquid_type_name_en = "All";
                    liquidTypes.Insert(0,lbt);
                }
                else if (lType == 2)
                {
                    liquidTypes = db.Queryable<LiquidType>().OrderBy(it => it.timestamp, SqlSugar.OrderByType.Asc).ToList();
                    LiquidType lbt = new LiquidType();
                    lbt.liquid_type_id = "0";
                    lbt.liquid_type_name = "所有类型";
                    lbt.liquid_type_name_en = "All";
                    liquidTypes.Insert(0,lbt);
                }
                else
                {
                    LiquidType lbt = new LiquidType();
                    lbt.liquid_type_id = "0";
                    lbt.liquid_type_name = "所有类型";
                    lbt.liquid_type_name_en = "All";
                    liquidTypes.Insert(0, lbt);
                }
            }
            return liquidTypes;
        }
        #endregion
 
        #region 查询返回液体参数数据集 by 液体类型Id、液体范围Id、设备臂Id
        /// <summary>
        /// 查询返回液体参数数据集 by 液体类型Id、液体范围Id、设备臂Id
        /// </summary>
        /// <param name="liquidTypeId">液体类型Id</param>
        /// <param name="liquidRangeId">液体范围Id</param>
        /// <param name="armId">设备臂Id</param>
        /// <returns>液体参数数据集</returns>
        public static ObservableCollection<Liquid> GetLiquidFromdbByTypeAndRange(string liquidTypeId, string liquidRangeId, string armId)
        {
            using (var db = GetInstance())
            {
                //string sqlstr = "select t.liquid_type_id,lt.liquid_type_name,lt.liquid_type_name_en,lr.liquid_range_name,lr.liquid_range_name_en,t.liquid_range_id,t.device_arm_id,l.* from liquidtypersrange t, liquid l,liquidtype lt,liquidrange lr where t.liquid_id=l.liquid_id and t.liquid_type_id=lt.liquid_type_id and t.liquid_range_id=lr.liquid_range_id and t.liquid_type_id='" + liquidTypeId + "' and t.liquid_range_id='" + liquidRangeId + "' and t.device_arm_id=" + armId + " and t.liquid_rs_status=1";
 
                // 多表查询
                var query = db.Queryable("LiquidTypeRSRange", "t").AddJoinInfo("Liquid", "l", "t.liquid_id=l.liquid_id and t.liquid_type_id='"+liquidTypeId+"' and t.liquid_range_id='"+ liquidRangeId+ "' and t.device_arm_id="+armId.ToString()+" and t.liquid_rs_status=1 and l.liquid_status=1", JoinType.Inner)
                    .AddJoinInfo("LiquidType", "lt", "lt.liquid_type_id=t.liquid_type_id", JoinType.Inner)
                    .AddJoinInfo("LiquidRange", "lr", "lr.liquid_range_id=t.liquid_range_id", JoinType.Inner)
                    .Select("t.liquid_type_id,lt.liquid_type_name,lt.liquid_type_name_en,lr.liquid_range_name,lr.liquid_range_name_en,t.liquid_range_id,t.device_arm_id,l.*");
                var a = query.ToList();
                ObservableCollection<Liquid> liquids = new ObservableCollection<Liquid>();
                foreach(ExpandoObject epo in a)
                {
                    Liquid lq= epo.ToEntity<Liquid>();
                    lq.device_arm_id = armId;
                    liquids.Add(lq);
                }
                var result = liquids;
                return result;
            }
        }
        #endregion
 
        #region 添加一条新的液体类型与液体范围关系数据 by 液体类型与液体范围关系对象
        /// <summary>
        /// 添加一条新的液体类型与液体范围关系数据 by 液体类型与液体范围关系对象
        /// </summary>
        /// <param name="liquidTypeRSRange">液体类型与液体范围关系对象</param>
        /// <returns>1:成功;0:失败</returns>
        public static int AddLiquidTypeRSRangeIntodb(LiquidTypeRSRange liquidTypeRSRange)
        {
            using (var db = GetInstance())
            {
                return db.Insertable<LiquidTypeRSRange>(liquidTypeRSRange).ExecuteCommand();
            }
        }
        #endregion
 
        #region 修改一条液体类型与液体范围关系数据 by 液体类型与液体范围关系对象的Id、液体类型Id、设备臂Id、数据状态
        /// <summary>
        /// 修改一条液体类型与液体范围关系数据 by 液体类型与液体范围关系对象的Id、液体类型Id、设备臂Id、数据状态
        /// </summary>
        /// <param name="liquidTypeRSRange">液体类型与液体范围关系对象</param>
        /// <returns>1:成功;0:失败</returns>
        public static int UpdateLiquidTypeRSRangeIntodb(LiquidTypeRSRange liquidTypeRSRange)
        {
            using (var db = GetInstance())
            {
                return db.Updateable<LiquidTypeRSRange>(liquidTypeRSRange).Where(it=>it.liquid_range_id.Equals(liquidTypeRSRange.liquid_range_id)
                                                    &&it.liquid_type_id.Equals(liquidTypeRSRange.liquid_type_id)
                                                    &&it.device_arm_id.Equals(liquidTypeRSRange.device_arm_id)
                                                    &&it.liquid_rs_status.Equals(1)).ExecuteCommand();
            }
        }
        #endregion
 
        #region 删除一条新的液体类型与液体范围关系数据 by 液体类型与液体范围关系对象
        /// <summary>
        /// 删除一条新的液体类型与液体范围关系数据 by 液体类型与液体范围关系对象
        /// </summary>
        /// <param name="liquidTypeRSRange">液体类型与液体范围关系对象</param>
        /// <returns>1:成功;0:失败</returns>
        public static int DeleteLiquidTypeRSRangeIntodb(LiquidTypeRSRange liquidTypeRSRange)
        {
            using (var db = GetInstance())
            {
                return db.Updateable<LiquidTypeRSRange>(liquidTypeRSRange).Where(it => it.liquid_range_id.Equals(liquidTypeRSRange.liquid_range_id)
                                                    && it.liquid_type_id.Equals(liquidTypeRSRange.liquid_type_id)
                                                    && it.liquid_rs_status.Equals(1)).ExecuteCommand();
            }
        }
        #endregion
    }
 
    /// <summary>
    /// ExpandoObject 转化为实体类
    /// </summary>
    public static class ExpandoObjectExtensions
    {
        public static T ToEntity<T>(this ExpandoObject expando) where T : class, new()
        {
            var entity = new T();
            var type = entity.GetType();
 
            foreach (var property in expando)
            {
                var propName = property.Key;
                var propValue = property.Value;
                var prop = type.GetProperty(propName);
 
                if (prop == null) continue;
 
                if (propValue != null && prop.PropertyType.IsAssignableFrom(propValue.GetType()))
                {
                    prop.SetValue(entity, propValue, null);
                }
                else if (propValue != null)
                {
                    var converter = TypeDescriptor.GetConverter(prop.PropertyType);
                    if (converter.CanConvertFrom(propValue.GetType()))
                    {
                        prop.SetValue(entity, converter.ConvertFrom(propValue), null);
                    }
                }
            }
 
            return entity;
        }
    }
}