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
using HH.WMS.BLL.InStock;
using HH.WMS.Common;
using HH.WMS.Common.External;
using HH.WMS.Common.Response;
using HH.WMS.Entitys.External;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HH.WMS.BLL.SysMgr;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Basic;
 
namespace HH.WMS.BLL.External
{
    /// <summary>
    /// 处理接口参数
    /// </summary>
    public static class ParameterHandleBLL
    {
        private static string _className = "HH.BWMS.BLL.External.ParameterHandle";
 
        #region 入作业区接口参数处理 + HandleInWorkArea
 
        /// <summary>
        /// 入作业区接口参数处理
        /// </summary>
        /// <param name="executeInWorkAreaPara"></param>
        /// <returns></returns>
        public static ExecuteInWorkAreaPara HandleInWorkArea(ExecuteInWorkAreaPara executeInWorkAreaPara)
        {
            _className += ".HandleInWorkArea";
 
            //任务号 考虑是否重复?
            if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.taskNo))
            {
                var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_InTaskNo + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
                executeInWorkAreaPara.InWorkAreaEntity.taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData); ;
                if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.taskNo))
                    executeInWorkAreaPara.BasisResponse = BasisResponse.Error("获取AUTOBOM任务号异常,请检查是否维护生成规则!", _className);
            }
 
            //托盘码
            if (string.IsNullOrEmpty(executeInWorkAreaPara.InWorkAreaEntity.trayCode))
            {
                //转运并且不传托盘号,默认从货位中获取
                if (executeInWorkAreaPara.InWorkAreaEntity.isTransport == "Y")
                {
                    //查找托盘号和物料编码 and by liuying 
                    var lstObj = BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().GetListByLocationCode(executeInWorkAreaPara.InWorkAreaEntity.startBit);
 
                    if (lstObj.Count > 0)
                    {
                        //去除已经在任务中的托盘,支持吉利项目、小木耳项目
                        var strTray = string.Join("','", lstObj.Select(o => o.CN_S_TRAY_CODE).ToList());
                        var lstTasks = BLLCreator.Create<TN_WM_TASKBLL>().GetTask(" AND CN_S_TRAY_CODE in ('" + strTray + "') AND (CN_S_STATE = '未执行' or CN_S_STATE = '执行中')");
                        var lstInTaskTray = lstTasks.Select(o => o.CN_S_TRAY_CODE).ToList();
                        lstObj.RemoveAll(o => lstInTaskTray.Contains(o.CN_S_TRAY_CODE));
 
                        if (lstObj.Count > 0)
                        {
                            executeInWorkAreaPara.InWorkAreaEntity.trayCode = lstObj[0].CN_S_TRAY_CODE;
                            var itemEntity = new ChaoYangItemDataEntity();
                            executeInWorkAreaPara.InWorkAreaEntity.data = new List<ChaoYangItemDataEntity>();
 
                            //根据托盘号查询托盘产品关联信息主表
                            var trayItemMst = BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().GetTrayItemMst(" AND CN_S_TRAY_CODE ='" + lstObj[0].CN_S_TRAY_CODE + "'");
 
                            //List<ItemRelEntity> lstItem = BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().GetItemRelModel(" WHERE CN_S_TRAY_CODE ='" + lstObj[0].CN_S_TRAY_CODE + "'");
                            if (trayItemMst.Count > 0)
                            {
                                //查询托盘产品关联信息子表
                                var trayItemDtl = BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().GetTrayItemDtl(" AND CN_PARENT_GUID='" + trayItemMst[0].CN_GUID + "'");
                                itemEntity.itemCode = trayItemMst[0].CN_S_ITEM_CODE;
                                itemEntity.itemName = trayItemMst[0].CN_S_ITEM_NAME;
                                itemEntity.itemPackUnit = trayItemDtl[0].CN_S_PACKING_UNIT;
                                itemEntity.qty = (decimal)(trayItemMst[0].CN_F_QUANTITY == null ? 0 : trayItemMst[0].CN_F_QUANTITY);
                                itemEntity.lotNo = trayItemMst[0].CN_S_PRODUCTION_BATCH;
                                itemEntity.itemState = trayItemMst[0].CN_S_ITEM_STATE;
                                itemEntity.productionDate = trayItemDtl[0].CN_T_PRODUCTION;
                                itemEntity.uniqueCode = trayItemDtl[0].CN_S_UNIQUE_CODE;
                                itemEntity.itemWeight = trayItemDtl[0].CN_S_SERIAL_NO;
                                itemEntity.itemModel = trayItemMst[0].CN_S_MODEL;
                                executeInWorkAreaPara.InWorkAreaEntity.data.Add(itemEntity);
                            }
                        }
                        else
                        {
                            executeInWorkAreaPara.BasisResponse = BasisResponse.Error("该货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "中的托盘都已在任务中,不允许重复下达", _className);
                        }
                    }
                    else
                    {
                        executeInWorkAreaPara.BasisResponse = BasisResponse.Error("起点货位" + executeInWorkAreaPara.InWorkAreaEntity.startBit + "没有绑定托盘", _className);
                        return executeInWorkAreaPara;
                    }
                }
                else
                {
                    //生成虚拟托盘
                    var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.VirtualTray + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
                    executeInWorkAreaPara.InWorkAreaEntity.trayCode = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
                }
            }
 
            //处理物料编码
            if (executeInWorkAreaPara.InWorkAreaEntity.data != null)
            {
                foreach (var itemData in executeInWorkAreaPara.InWorkAreaEntity.data)
                {
                    var item = BLLCreator.Create<HH.WMS.BLL.Basic.TN_WMS_ITEMBLL>().GetItem(itemData.itemCode);
                    //BLLCreator.Create<DapperBLL<AutoBomItemEntity>>().GetSingleEntity(new { CN_S_ITEM_CODE = itemData.itemCode });
                    if (item != null)
                    {
                        itemData.itemPackUnit = item.CN_S_PACK_UNIT;
                        itemData.itemName = item.CN_S_ITEM_NAME;
                    }
                    else
                    {
                        executeInWorkAreaPara.BasisResponse = BasisResponse.Error("物料" + itemData.itemCode + "在AutoBom中没有维护", _className);
                        return executeInWorkAreaPara;
                    }
                }
            }
            return executeInWorkAreaPara;
        }
 
        #endregion
 
        #region 出作业区接口参数处理 + HandleOutWorkArea
 
        /// <summary>
        /// 出作业区接口参数处理
        /// </summary>
        /// <param name="executeOutWorkAreaPara"></param>
        /// <returns></returns>
        public static ExecuteOutWorkAreaPara HandleOutWorkArea(ExecuteOutWorkAreaPara executeOutWorkAreaPara)
        {
            //任务号
            if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.taskNo))
            {
                var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_OutTaskNo + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
                executeOutWorkAreaPara.OutWorkAreaEntity.taskNo = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
                if (string.IsNullOrEmpty(executeOutWorkAreaPara.OutWorkAreaEntity.taskNo))
                    executeOutWorkAreaPara.BasisResponse = BasisResponse.Error("获取AUTOBOM任务号异常!", _className);
            }
 
            //获取作业区列表
            executeOutWorkAreaPara.WorkAreaProEntitys = BLLCreator.Create<TaskTransferBLL>().GetOutWorkPosition(executeOutWorkAreaPara);
            if (!executeOutWorkAreaPara.WorkAreaProEntitys.Any())
            {
                executeOutWorkAreaPara.BasisResponse = BasisResponse.Error(string.Format("未获取到当前库区:{0}货位:{1}下的作业路径!", executeOutWorkAreaPara.OutWorkAreaEntity.endArea, executeOutWorkAreaPara.OutWorkAreaEntity.endBit), _className);
                return executeOutWorkAreaPara;
            }
 
            return executeOutWorkAreaPara;
        }
 
        #endregion
 
        /// <summary>
        /// 出作业区接口返回结果
        /// </summary>
        /// <param name="trans"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public static OkTask HandleOutWorkAreaResponse(TN_WM_TRANSPORT_TASKEntity trans, int index)
        {
            if (trans.CN_S_START_AREA_TYPE == Constants.Area_Struc_LiuLiStock || trans.CN_S_START_AREA_TYPE == Constants.Area_Struc_DuiDieStock)
            {
                trans.CN_S_START_BIT += "_" + trans.CN_S_QTY_INDEX;
            }
 
            var okTask = new OkTask()
            {
                index = index,
                taskNo = trans.CN_S_TASK_NO,
                startStock = trans.CN_S_STOCK_CODE,
                startArea = trans.CN_S_START_AREA,
                startBit = trans.CN_S_START_BIT,
                endStock = trans.CN_S_STOCK_CODE,
                endArea = trans.CN_S_END_AREA,
                endBit = trans.CN_S_END_BIT,
                priority = trans.CN_N_PRIORITY,
                trayCode = trans.CN_S_CIR_OBJ_CODE
            };
            return okTask;
        }
    }
}