jt
2021-06-10 5d0d028456874576560552f5a5c4e8b801786f11
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
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
using HH.MData;
using HH.WMS.Common;
using HH.WMS.Entitys.Algorithm;
using HH.WMS.Entitys.Basic;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace HH.WMS.DAL.Basic
{
    public class TN_AB_B_STOCK_AREADAL : BaseDAL
    {
        /// <summary>
        /// 根据库区类型找库区实体
        /// </summary>
        /// <param name="areaClass"></param>
        /// <returns></returns>
        public List<AutoBomStockAreaEntity> GetSHLocationArea(string areaClass)
        {
            List<AutoBomStockAreaEntity> listLogic = new List<AutoBomStockAreaEntity>();
            var query = Query.EQ("CN_S_AREA_CLASS", areaClass);
            listLogic = MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
 
            return listLogic;
        }
        public List<AutoBomStockAreaEntity> GetZCLocationArea(string areaClass)
        {
            List<AutoBomStockAreaEntity> listLogic = new List<AutoBomStockAreaEntity>();
            var query = Query.EQ("CN_S_AREA_CLASS", areaClass);
            listLogic = MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
 
            return listLogic;
        }
        public List<AutoBomStockAreaEntity> GetAreaListByType(string areaType)
        {
            List<AutoBomStockAreaEntity> listLogic = new List<AutoBomStockAreaEntity>();
            var query = Query.EQ("CN_N_TYPE", Convert.ToInt32(areaType));
            listLogic = MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
 
            return listLogic;
        }
        public List<AutomStockEntity> GetStockList()
        {
            return MongoDBSingleton.Instance.FindAll<AutomStockEntity>("TN_AB_STOCK");
        }
 
        public List<AutoBomStockAreaEntity> GetListByStockArea(string areaType)
        {
            IMongoQuery query = null;
            if (string.IsNullOrEmpty(areaType))
            {
                List<int> lstAreaType = new List<int>();
                lstAreaType.Add(1);
                lstAreaType.Add(4);
                var listAreaCode = lstAreaType.ConvertAll<BsonValue>(x => x);
                query = Query.In("CN_N_TYPE", listAreaCode);
                //query = Query.EQ("CN_N_TYPE", 1);
            }
            else
            {
                query = Query.EQ("CN_N_TYPE", int.Parse(areaType));
            }
            return MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
        }
        #region 根据库区编码获取库区实体
        /// <summary>
        /// 所有仓库
        /// </summary>
        /// <param name="areaCode">库区编码</param>
        /// <returns></returns>
        /// <History>[HANHE(XDL)] CREATED BY 2018-11-21</History>
        public AutoBomStockAreaEntity GetStockAreaEntity(string areaCode)
        {
            AutoBomStockAreaEntity Logic = new AutoBomStockAreaEntity();
            var query = Query.EQ("CN_S_AREA_CODE", areaCode);
            Logic = MongoDBSingleton.Instance.FindOne<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
            return Logic;
        }
 
        /// <summary>
        /// 根据作业区类型获取库区列表
        /// </summary>
        /// <param name="areaClass">作业区类型</param>
        /// <returns></returns>
        public List<AutoBomStockAreaEntity> GetAreaByAreaClass(string areaClass)
        {
            List<AutoBomStockAreaEntity> listLogic = new List<AutoBomStockAreaEntity>();
            var query = Query.EQ("CN_S_AREA_CLASS", areaClass);
            listLogic = MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
            return listLogic;
        }
 
        /// <summary>
        /// 通过多个作业区类型获取库区集合
        /// </summary>
        /// <param name="areaClass"></param>
        /// <returns></returns>
        public List<AutoBomStockAreaEntity> GetAreaByManyClass(string areasClass)
        {
            IMongoQuery query = null;
            List<AutoBomStockAreaEntity> listLogic = new List<AutoBomStockAreaEntity>();
 
            List<string> lstClass = new List<string>(areasClass.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries));
            var listClass = lstClass.ConvertAll<BsonValue>(x => x);
            query = Query.In("CN_S_AREA_CLASS", listClass);
            listLogic = MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
 
            return listLogic;
        }
        /// <summary>
        /// 根据作业区类型获取库区列表
        /// </summary>
        /// <param name="areaClass">作业区类型</param>
        /// <returns></returns>
        public List<AutoBomStockAreaEntity> GetAreaByAreaClassYS(string areaClass)
        {
            List<AutoBomStockAreaEntity> listLogic = new List<AutoBomStockAreaEntity>();
            var query = Query.EQ("CN_S_AREA_CLASS", areaClass);
            SortByDocument sortBy = new SortByDocument();
            sortBy.Add("CN_N_ORDER", 1);
            listLogic = MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(query, sortBy, "TN_AB_B_STOCK_AREA");
            return listLogic;
        }
 
        /// <summary>
        /// 通过多个作业区类型获取库区集合
        /// </summary>
        /// <param name="areaClass"></param>
        /// <returns></returns>
        public List<AutoBomStockAreaEntity> GetAreaByManyClassYS(string areasClass)
        {
            IMongoQuery query = null;
            List<AutoBomStockAreaEntity> listLogic = new List<AutoBomStockAreaEntity>();
 
            List<string> lstClass = new List<string>(areasClass.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries));
            var listClass = lstClass.ConvertAll<BsonValue>(x => x);
            query = Query.In("CN_S_AREA_CLASS", listClass);
            SortByDocument sortBy = new SortByDocument();
            sortBy.Add("CN_N_ORDER", 1);
            listLogic = MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(query, sortBy, "TN_AB_B_STOCK_AREA");
 
            return listLogic;
        }
        #endregion
 
        #region 单条查询
        /// <summary>
        /// 单条查询
        /// </summary>
        /// <param name="field"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public AutoBomStockAreaEntity GetSingle(string field, string value)
        {
            var query = Query.EQ(field, value);
            return MongoDBSingleton.Instance.FindOne<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
        }
        #endregion
 
        #region 所有库区
        /// <summary>
        /// 所有库区
        /// </summary>
        /// <param name="stockCode">仓库号</param>
        /// <param name="include">包含库区类型 1:库区  2:作业区   3:逻辑分区  4:1+2 </param>
        /// <returns></returns>
        public List<AutoBomStockAreaEntity> GetArea(string stockCode, int include)
        {
            IMongoQuery mq = null;
            switch (include)
            {
                case 0:
                    if (!string.IsNullOrEmpty(stockCode))
                        mq = Query.EQ("CN_S_STOCK_CODE", stockCode);
                    break;
                case 1:
                    if (!string.IsNullOrEmpty(stockCode))
                        mq = Query.And(Query.EQ("CN_S_STOCK_CODE", stockCode), Query.EQ("CN_N_TYPE", 1));
                    else
                        mq = Query.EQ("CN_N_TYPE", 1);
                    break;
                case 2:
                    if (!string.IsNullOrEmpty(stockCode))
                        mq = Query.And(Query.EQ("CN_S_STOCK_CODE", stockCode), Query.EQ("CN_N_TYPE", 4));
                    else
                        mq = Query.EQ("CN_N_TYPE", 4);
                    break;
                case 3:
                    if (!string.IsNullOrEmpty(stockCode))
                        mq = Query.And(Query.EQ("CN_S_STOCK_CODE", stockCode), Query.EQ("CN_N_TYPE", 2));
                    else
                        mq = Query.EQ("CN_N_TYPE", 2);
                    break;
                case 4:
                    if (!string.IsNullOrEmpty(stockCode))
                        mq = Query.And(Query.EQ("CN_S_STOCK_CODE", stockCode), Query.Or(Query.EQ("CN_N_TYPE", 1), Query.EQ("CN_N_TYPE", 4)));
                    else
                        mq = Query.Or(Query.EQ("CN_N_TYPE", 1), Query.EQ("CN_N_TYPE", 4));
                    break;
            }
            SortByDocument sortBy = new SortByDocument();
            sortBy.Add("CN_S_AREA_NAME", 1);
            return MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(mq, sortBy, "TN_AB_B_STOCK_AREA");
 
            //if (!string.IsNullOrEmpty(stockCode))
            //{
            //    //var query = Query.EQ("CN_S_STOCK_CODE", stockCode);
            //    var query = Query.And(Query.EQ("CN_S_STOCK_CODE", stockCode), Query.EQ("CN_N_TYPE", 1));
            //    return MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
            //}
            //else
            //{
            //    //modify by zh 2018-12-11
            //    var query = Query.Or(Query.EQ("CN_N_TYPE", 1), Query.EQ("CN_N_TYPE", 4));
            //    return MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
            //}
        }
 
        public List<AutoBomStockAreaEntity> GetStockAreas()
        {
            return MongoDBSingleton.Instance.FindAll<AutoBomStockAreaEntity>("TN_AB_B_STOCK_AREA");
        }
 
        public AutoBomStockAreaEntity GetStockArea(string fieldName, string Value)
        {
            IMongoQuery query = Query.EQ("" + fieldName + "", Value);
            return MongoDBSingleton.Instance.FindOne<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
        }
 
        #endregion
 
        #region 获取所有自动库区
        /// <summary>
        /// 获取所有自动库区
        /// </summary>
        /// <returns></returns>
        public List<AutoBomStockAreaEntity> GetAutoAreas()
        {
            var query = Query.EQ("CN_C_IS_AUTO", Constants.Y);
            return MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
        }
        #endregion
 
        #region 修改库区模式
        /// <summary>
        /// 修改库区模式
        /// </summary>
        /// <param name="areaCode"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public bool UpdateCurrentMode(string areaCode, string value)
        {
            IMongoQuery query = Query.EQ("CN_S_AREA_CODE", areaCode);
            List<UpdateBuilder> updateList = new List<UpdateBuilder>();
            updateList.Add(Update.Set("CN_S_CURRENT_MODE", value));
            IMongoUpdate update = Update.Combine(updateList.ToArray());
            return MongoDBSingleton.Instance.Update<AutoBomStockAreaEntity>(query, update, "TN_AB_B_STOCK_AREA", UpdateFlags.Multi);
        }
        #endregion
 
        #region 获取所有库区
        /// <summary>
        /// 获取所有库区
        /// </summary>
        /// <returns></returns>
        public List<AutoBomStockAreaEntity> GetAllAreas()
        {
            return MongoDBSingleton.Instance.Find<AutoBomStockAreaEntity>(null, "TN_AB_B_STOCK_AREA");
        }
        #endregion
 
        #region 修改库区模式
        /// <summary>
        /// 修改库区模式
        /// </summary>
        /// <param name="areaEntity"></param>
        /// <returns></returns>
        public bool UpdateServiceMode(AutoBomStockAreaEntity areaEntity)
        {
            IMongoQuery query = Query.EQ("CN_S_AREA_CODE", areaEntity.CN_S_AREA_CODE);
            List<UpdateBuilder> updateList = new List<UpdateBuilder>();
            updateList.Add(Update.Set("CN_S_CURRENT_MODE", areaEntity.CN_S_CURRENT_MODE));
            IMongoUpdate update = Update.Combine(updateList.ToArray());
            return MongoDBSingleton.Instance.Update<AutoBomStockAreaEntity>(query, update, "TN_AB_B_STOCK_AREA", UpdateFlags.Multi);
        }
        #endregion
 
        public AutoBomStockAreaEntity GetEntityByArea(string id)
        {
            IMongoQuery query = Query.EQ("CN_S_AREA_CODE", id);
            return MongoDBSingleton.Instance.FindOne<AutoBomStockAreaEntity>(query, "TN_AB_B_STOCK_AREA");
        }
 
    }
}