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
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
using HH.WMS.Common;
using HH.WMS.DAL;
using HH.WMS.DAL.Algorithm;
using HH.WMS.DAL.Basic;
using HH.WMS.DAL.External;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Common;
using HH.WMS.Entitys.External;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace HH.WMS.BLL.External
{
    public class TN_WM_TRANSPORT_TASKBLL : BaseBLL
    {
        #region 查询输送单元扭转指引
        /// <summary>
        /// 查询输送单元扭转指引
        /// </summary>
        /// <param name="ObjNo">对象编码</param>
        /// <param name="ItemCode">物料编码</param>
        /// <param name="pageIndex">分页索引</param>
        /// <param name="pageSize">分页大小</param>
        /// <returns></returns>
        public List<TN_WM_TRANSPORT_TASKEntity> GetSearchList(string strWhere, string strOrder, int pageIndex, int pageSize, out int totalPages, out int totalRows)
        {
            return CreateDAL<TN_WM_TRANSPORT_TASKDAL>().GetSearchList(strWhere, strOrder, pageSize, pageIndex, out  totalPages, out  totalRows);
        }
        public DataTable GetTaskEntity(string taskNo)
        {
            DataTable dt = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().GetTaskEntity(taskNo);
            return dt;
        }
        /// <summary>
        /// 获取流转任务对象列表
        /// </summary>
        /// <param name="strWhere"></param>
        /// <returns></returns>
        /// <history>[HanHe(xdl)] CREATED 2018/04/28</history>
        public List<TN_WM_TRANSPORT_TASKEntity> GetTransportTaskList(string strWhere)
        {
            return CreateDAL<TN_WM_TRANSPORT_TASKDAL>().GetTransportTaskList(strWhere);
        }
        public TN_WM_TRANSPORT_TASKEntity GetTransportTask(string taskNo)
        {
            TN_WM_TRANSPORT_TASKEntity dt = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().GetTransportTask(taskNo);
            return dt;
        }
        #endregion
 
        #region 改变任务状态 - 开始
        /// <summary>
        /// 改变任务状态 - 开始 
        /// </summary>
        /// <param name="lstGuid">主键</param>
        /// <param name="taskState">状态</param>
        /// <returns></returns>
        public SqlExecuteResult Start(string taskNo, string taskState)
        {
            SqlExecuteResult result = new SqlExecuteResult();
 
            return DAOManager.ExecuteTransaction(trans =>
            {
                result = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().UpdateState(taskNo, taskState, trans);
                if (!result.Success)
                {
                    DAOManager.RollbackTransaction(trans);
                    return result;
                }
                if (taskState == "执行中")
                {
                    result = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().UpdateStartTime(taskNo, trans);
                    if (!result.Success)
                    {
                        DAOManager.RollbackTransaction(trans);
                        return result;
                    }
                }
                return result;
            });
        }
        #endregion
 
        /// <summary>
        /// PDA专用 生成任务
        /// </summary>
        /// <param name="startPosition"></param>
        /// <param name="endPosition"></param>
        /// <param name="taskPriority"></param>
        /// <param name="objLocationEntity"></param>
        /// <param name="taskNo"></param>
        /// <param name="SendAms"></param>
        /// <returns></returns>
        public SqlExecuteResult CreateTransTask(string startPosition, string endPosition, string taskPriority, string tranType, TN_WM_B_OBJ_LOCATIONEntity objLocationEntity, string taskNo = "", bool SendAms = true)
        {
            try
            {
                TN_WM_TRANSPORT_TASKEntity transEntity = new TN_WM_TRANSPORT_TASKEntity();
                if (string.IsNullOrEmpty(taskNo))
                {
                    string postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_TransTaskNo + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
                    taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
                    if (string.IsNullOrEmpty(taskNo))
                    {
                        return new SqlExecuteResult() { Exception = new Exception("未获取到任务号") };
                    }
                }
                transEntity.CN_S_TASK_NO = taskNo;
                transEntity.CN_S_STATE = Constants.TaskStateList[Constants.TaskExecState_NoExec];
                transEntity.CN_T_CREATE = transEntity.CN_T_MODIFY = DateTime.Now.ToString();
                transEntity.CN_S_TASK_TYPE = tranType;
 
                transEntity.CN_S_CIR_OBJ = "托盘";
                if (objLocationEntity == null)
                {
                    var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.VirtualTray + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
                    transEntity.CN_S_CIR_OBJ_CODE = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
 
                }
                else
                {
                    transEntity.CN_S_CIR_OBJ_CODE = objLocationEntity.CN_S_OBJ_CODE;
                }
                transEntity.CN_S_START_BIT = startPosition;
                transEntity.CN_S_END_BIT = endPosition;
                transEntity.CN_C_EXECUTED = "N";
                transEntity.CN_N_PRIORITY = int.Parse(taskPriority);
                transEntity.CN_S_PROJECT_CODE = "xme001";
                AutoBomLocationEntity endEntity = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetModel(endPosition);
                if (endEntity != null)
                {
                    transEntity.CN_S_END_AREA = endEntity.CN_S_AREA_CODE;
                }
                else
                {
                    return new SqlExecuteResult() { Exception = new Exception("结束点在mongo中不存在!") };
                }
                AutoBomLocationEntity startEntity = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetModel(startPosition);
                AutoBomStockAreaEntity startArea = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(startPosition);
 
                if (startEntity != null)
                {
                    transEntity.CN_S_START_AREA = startEntity.CN_S_AREA_CODE;
                }
                else
                {
                    return new SqlExecuteResult() { Exception = new Exception(" 起点在mongo中不存在!") };
                }
                AutoBomStockAreaEntity endArea = CreateDAL<TN_AB_STOCK_LOCATIONDAL>().GetAreaModelByLocation(endPosition);
                transEntity.CN_S_STOCK_CODE = startArea.CN_S_STOCK_CODE;
                transEntity.CN_S_START_AREA_TYPE = startArea.CN_S_STRUCTURE;
                transEntity.CN_S_END_AREA_TYPE = endArea.CN_S_STRUCTURE;
                transEntity.CN_C_START_IS_CONTROL_QTY = startArea.CN_C_IS_CONTROL_QTY;
                transEntity.CN_C_END_IS_CONTROL_QTY = endArea.CN_C_IS_CONTROL_QTY;
                transEntity.CN_S_START_CONTROL_INV = startArea.CN_C_IS_INVENTORY;
                transEntity.CN_S_END_CONTROL_INV = endArea.CN_C_IS_INVENTORY;
                //transEntity.
                // transEntity.
                SqlExecuteResult result = DAOManager.ExecuteTransaction(trans =>
                {
                    result = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().Add(new List<TN_WM_TRANSPORT_TASKEntity>() { transEntity }, trans);
                    if (!result.Success)
                    {
                        DAOManager.RollbackTransaction(trans);
                        return result;
                    }
                    if (startArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
                    {
                        CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtState(startPosition, Constants.Location_State_OutLock, Constants.Location_State_Normal, taskNo, trans);
                        if (!result.Success)
                        {
                            DAOManager.RollbackTransaction(trans);
                            return result;
                        }
                        else
                        {
 
                            if (result.Row <= 0)
                            {
                                DAOManager.RollbackTransaction(trans);
                                return new SqlExecuteResult() { Exception = new Exception("更新起点货位状态的时候,影响行数为0!请连接管理员") };
                            }
                            else
                            {
                                AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(startPosition);
                                BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(startPosition, "正常", "预出库锁定", "PDA生成任务锁定起点货位", "PDA", "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE);
 
                            }
 
                        }
                    }
 
                    if (endArea.CN_C_IS_CONTROL_QTY.Equals("Y"))
                    {
                        CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationExtState(endPosition, Constants.Location_State_InLock, Constants.Location_State_Normal, taskNo, null);
 
                        if (!result.Success)
                        {
                            DAOManager.RollbackTransaction(trans);
                            return result;
                        }
                        else
                        {
 
                            if (result.Row <= 0)
                            {
                                DAOManager.RollbackTransaction(trans);
                                return new SqlExecuteResult() { Exception = new Exception("更新终点货位状态的时候,影响行数为0!请连接管理员") };
                            }
                            else
                            {
                                AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(endPosition);
                                BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(endPosition, "正常", "预入库锁定", "PDA生成任务锁定终点货位", "PDA", "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE);
                            }
 
                        }
                    }
                    if (result.Success && SendAms)
                    {
                        result = new InfRequest().SendTask(new List<TN_WM_TRANSPORT_TASKEntity>() { transEntity });
                        Log.Info("CreateTransTask-SendAms", JsonConvert.SerializeObject(result));
                    }
 
                    return result;
                });
                return result;
            }
            catch (Exception ex)
            {
                Log.Info("CreateTransTask-CreateTransTask", ex.Message + ex.StackTrace.ToString());
                return new SqlExecuteResult() { Exception = ex };
            }
        }
 
 
 
 
 
        #region 改道
        /// <summary>
        /// 改道
        /// </summary>
        /// <param name="taskNo"></param>
        /// <param name="location"></param>
        /// <param name="updateArea"></param>
        /// <param name="type"></param>
        /// <returns></returns>
        public SqlExecuteResult UpdateWay(string taskNo, string location, string updateArea, string type)
        {
            SqlExecuteResult result = new SqlExecuteResult();
            TN_WM_TRANSPORT_TASKEntity taskEntity = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().GetTaskByNo(taskNo);
            //待修改的原来的货位
            string oriLocation = type.Equals("start") ? taskEntity.CN_S_START_BIT : taskEntity.CN_S_END_BIT;
            string guid = Guid.NewGuid().ToString();
            return DAOManager.ExecuteTransaction(trans =>
            {
                result = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().UpdateTaskPostion(taskNo, location, updateArea, type, trans);
                if (!result.Success)
                {
                    DAOManager.RollbackTransaction(trans);
                    return result;
                }
                if (result.Success)
                {
                    //将原来的货位置为正常
                    result = CreateDAL<TN_WM_LOCATION_EXTDAL>().UpdateLocationNormal(oriLocation, "正常", trans);
                    AutoBomLocationEntity locationModel = DALCreator.Create<TN_WMS_LOCATIONDAL>().GetModel(oriLocation);
                    BLLCreator.Create<TN_WM_B_LOCATION_CHANGEBLL>().AddStateChange(oriLocation, "", "正常", "AMS调用改道接口成功后将原货位设置为正常", "AMS", "", "", locationModel.CN_S_STOCK_CODE, locationModel.CN_S_AREA_CODE);
                    if (!result.Success)
                    {
                        DAOManager.RollbackTransaction(trans);
                        return result;
                    }
                }
 
                return result;
            });
        }
        #endregion
 
        public SqlExecuteResult ExecuteTransaction(string taskNo, string taskState)
        {
            var result = DAOManager.ExecuteTransaction(trans => {
                var sqlResult = new SqlExecuteResult();
                var transportTask = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().GetTaskByNo(taskNo);
 
                //起点、终点是否已经解绑
                //var startIsBindObjLocation = CreateDAL<TN_WM_B_OBJ_LOCATIONDAL>().GetModel(transportTask.CN_S_START_BIT, transportTask.CN_S_CIR_OBJ_CODE);
                //var endIsBindObjLocation = CreateDAL<TN_WM_B_OBJ_LOCATIONDAL>().GetModel(transportTask.CN_S_END_BIT, transportTask.CN_S_CIR_OBJ_CODE);
                //起点、终点是否属于当前任务号
                var startIsCurrentTask = CreateDAL<TN_WM_LOCATION_EXTDAL>().GetModel("  CN_S_LOCATION_CODE='" + transportTask.CN_S_START_BIT + "' AND CN_S_TASK_NO='" + taskNo + "' ");
                var endIsCurrentTask = CreateDAL<TN_WM_LOCATION_EXTDAL>().GetModel("  CN_S_LOCATION_CODE='" + transportTask.CN_S_END_BIT + "' AND CN_S_TASK_NO='" + taskNo + "' ");
                //托盘物料关联
                var trayItemRel = CreateDAL<HH.WMS.DAL.External.TN_WM_B_TRAY_ITEM_RELDAL>().GetItemRelModel(" CN_S_TRAY_CODE='" + transportTask.CN_S_CIR_OBJ_CODE + "' ");
 
                //更新任务状态
                sqlResult = CreateDAL<TN_WM_TRANSPORT_TASKDAL>().UpdateState(taskNo, taskState, trans);
 
                if (taskState.Equals("完成"))
                {
                    if (transportTask.CN_S_TASK_TYPE.Equals("入库"))
                    {
 
                    }
                }
                else if (taskState.Equals("取消"))
                {
 
                }
 
                return sqlResult;
            });
 
            return CreateDAL<ExecuteStateDAL>().ExecuteTransaction(taskNo, taskState);
        }
        public SqlExecuteResult UpdateTaskAuto(string taskNo, string taskState)
        {
            return CreateDAL<TN_WM_TRANSPORT_TASKDAL>().UpdateTaskAuto(taskNo, taskState, null);
        }
    }
}