schangxiang@126.com
2025-09-04 e9269528ae01bc4572b68148b9c801b51f23b669
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
using System;
using System.Collections.Generic;
using yunneiPda.EnumDefine;
using yunneiPda.orm;
using System.Linq;
using Newtonsoft.Json.Linq;
 
namespace yunneiPda
{
    /// <summary>
    /// 增补创建的扩展方法 【EditBy shaocx,2022-02-05】
    /// </summary>
    public class MyExtend
    {
        /// <summary>
        /// 获取非法站点号字符串
        /// </summary>
        /// <param name="station"></param>
        /// <returns></returns>
        public static string GetFFZDHStr(string station)
        {
            return "非法站点号:" + station;
        }
 
        /// <summary>
        /// 组盘,保存入库表单,验证托盘号是否在新建的表单中
        /// </summary>
        /// <param name="mod"></param>
        /// <param name="value"></param>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        public static bool ValidateContainerCodeIsExistInInStockOrderWithNewCreateStatus(dbmodel mod, string containerCode, ref string errMsg
            )
        {
            var queryStatus = (int)InStockOrderStatus.新建;
            inStockOrder _inStockOrder = mod.inStockOrder.FirstOrDefault(x => x.containerCode == containerCode && x.status == queryStatus);
            if (_inStockOrder != null)
            {
                errMsg = "托盘号" + containerCode + "已经在新建的组盘记录中,入库表单:" + _inStockOrder.orderCode;
                return false;
            }
            return true;
        }
 
        /// <summary>
        /// 验证托盘号是否有库存
        /// </summary>
        /// <param name="mod"></param>
        /// <param name="value"></param>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        public static bool ValidateContainerCodeIsExistStockForSalverCode(dbmodel mod, string containerCode, ref string errMsg
            )
        {
            productStock stock = mod.productStock.FirstOrDefault(x => x.containerCode == containerCode);
            if (stock != null)
            {
                var place = mod.position.FirstOrDefault(x => x.positionId == stock.positionId);
                errMsg = "托盘号" + containerCode + "已经在库存中,库位号:" + place.positionName;
                return false;
            }
 
            return true;
        }
 
        /// <summary>
        /// 组盘,保存入库表单,验证流水号是在在新建的表单中
        /// </summary>
        /// <param name="mod"></param>
        /// <param name="value"></param>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        public static bool ValidateSerialNumbersIsExistInInStockOrderWithNewCreateStatus(dbmodel mod, inStockEntity<serialNumbers> value, ref string errMsg
            )
        {
            foreach (var item in value.dataList)
            {
                var result = ValidateSingleSerialNumbersIsExistInInStockOrderWithNewCreateStatus(mod, 0, item.serialNumber, value.productCode, ref errMsg);
                if (result == false)
                {
                    return false;
                }
            }
 
            return true;
        }
        /// <summary>
        /// 组盘,保存入库表单,验证流水号是在在新建的表单中
        /// </summary>
        /// <param name="mod"></param>
        /// <param name="value"></param>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        public static bool ValidateSingleSerialNumbersIsExistInInStockOrderWithNewCreateStatus(dbmodel mod, int orderCodeId, string serialNumber, string productCode, ref string errMsg
            )
        {
            var queryStatus = (int)InStockOrderStatus.新建;
 
            var _inStockOrderList = mod.inStockOrderList.AsNoTracking().Where(x => x.serialNumber == serialNumber && x.productCode == productCode).ToList();
            if (_inStockOrderList != null && _inStockOrderList.Count > 0)
            {
                if (orderCodeId > 0)
                {//说明是编辑情况下,把当前正在编辑的过滤掉
                    //_inStockOrderList = mod.inStockOrderList.AsNoTracking().Where(x => x.orderCodeId != orderCodeId).ToList();
                    //修复查询bug,提示流水号跟工单不符的问题 【Editby shaocx,2025-04-02】
                    _inStockOrderList = _inStockOrderList.Where(x => x.orderCodeId != orderCodeId).ToList();
                }
                //优化太慢的情况,pda要求5秒内必须返回请求。所以以后pda也得优化! 【Editby shaocx,2023-09-20】
                List<int?> query_orderCodeIdList = _inStockOrderList.Select(x => x.orderCodeId).ToList();
                var _inStockOrder = mod.inStockOrder.AsNoTracking().FirstOrDefault(x => query_orderCodeIdList.Contains(x.orderCodeId) && x.status == queryStatus);
                if (_inStockOrder != null)
                {
                    errMsg = "流水号" + serialNumber + "已经在新建的组盘记录中,入库表单:" + _inStockOrder.orderCode;
                    return false;
                }
 
                //foreach (var myInStock in _inStockOrderList)
                //{
                //    var _inStockOrder = mod.inStockOrder.AsNoTracking().FirstOrDefault(x => x.orderCodeId == myInStock.orderCodeId && x.status == queryStatus);
                //    if (_inStockOrder != null)
                //    {
                //        errMsg = "流水号" + serialNumber + "已经在新建的组盘记录中,入库表单:" + _inStockOrder.orderCode;
                //        return false;
                //    }
                //}
            }
            return true;
        }
 
        /// <summary>
        /// 组盘,保存入库表单,验证流水号是在库存中
        /// </summary>
        /// <param name="mod"></param>
        /// <param name="value"></param>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        public static bool ValidateSerialNumbersIsExistStockForSalverCode(dbmodel mod, inStockEntity<serialNumbers> value, ref string errMsg
            )
        {
            foreach (var item in value.dataList)
            {
                var result = ValidateSingleSerialNumbersIsExistStockForSalverCode(mod, item.serialNumber, value.productCode, ref errMsg);
                if (result == false)
                {
                    return false;
                }
            }
            return true;
        }
 
        /// <summary>
        /// 组盘,保存入库表单,验证流水号是在库存中
        /// </summary>
        /// <param name="mod"></param>
        /// <param name="value"></param>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        public static bool ValidateSingleSerialNumbersIsExistStockForSalverCode(dbmodel mod, string serialNumber, string productCode, ref string errMsg
            )
        {
            var myStock = mod.productStockList.FirstOrDefault(x => x.serialNumber == serialNumber && x.productCode == productCode);
            if (myStock != null)
            {
                productStock stock2 = mod.productStock.FirstOrDefault(x => x.positionId == myStock.stockId);
                if (stock2 != null)
                {
                    var place2 = mod.position.FirstOrDefault(x => x.positionId == stock2.positionId);
                    if (place2 != null)
                    {
                        errMsg = "流水号" + serialNumber + "已经在库存中,库位号:" + place2.positionName;
                        return false;
                    }
                }
            }
 
            return true;
        }
 
 
        /// <summary>
        /// 组盘,保存入库表单,验证目标站点是否有库存
        /// </summary>
        /// <param name="mod"></param>
        /// <param name="value"></param>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        public static bool ValidateIsExistStockWhenSaveInCode(dbmodel mod, inStockEntity<serialNumbers> value, ref string errMsg
            )
        {
            if (string.IsNullOrEmpty(value.toStieCode)) return true;
            var stock = MyExtendHelper.GetProductStockByName(mod, value.toStieCode);
            if (stock != null)
            {
                errMsg = "站点" + value.toStieCode + "已经有库存";
                return false;
            }
            return true;
        }
 
        /// <summary>
        /// 组盘,保存入库表单,验证目标站点是否允许创建任务
        /// </summary>
        /// <param name="mod"></param>
        /// <param name="value"></param>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        public static bool ValidateIsAllowCreateTaskWhenSaveInCode(dbmodel mod, inStockEntity<serialNumbers> value, ref string errMsg
            )
        {
            if (string.IsNullOrEmpty(value.toStieCode)) return true;
            task _task = null;
            var isExist = MyExtendHelper.IsExistNoFinishedTask(mod, value.toStieCode, ref _task);
            if (isExist)
            {
                errMsg = "站点" + value.toStieCode + "有未完成的任务,任务号:" + _task.createListCode + ",起点:" + _task.sourcePlace + ",目标点:" + _task.toPlace;
                return false;
            }
            return true;
        }
 
        /// <summary>
        /// 校验站点是否有任务被占用
        /// </summary>
        /// <param name="mod"></param>
        /// <param name="positionName"></param>
        /// <param name="errMsg"></param>
        /// <returns></returns>
        public static bool CommonIsExistNoFinishedTask(dbmodel mod, string positionName, ref string errMsg
            )
        {
            task _task = null;
            var isExist = MyExtendHelper.IsExistNoFinishedTask(mod, positionName, ref _task);
            if (isExist)
            {
                errMsg = "站点" + positionName + "有未完成的任务,任务号:" + _task.createListCode + ",起点:" + _task.sourcePlace + ",目标点:" + _task.toPlace;
                return false;
            }
            return true;
        }
    }
}