zhao
2021-06-04 c7ec496f9e41c2227103b3ef776e4a3f91bce6b2
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
using HH.WMS.BLL;
using HH.WMS.BLL.Algorithm;
using HH.WMS.BLL.InStock;
using HH.WMS.BLL.SysMgr;
using HH.WMS.Common;
using HH.WMS.Common.Algorithm;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Entitys;
using HH.WMS.WebApi.Areas.Common.Controllers;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
 
namespace HH.WMS.WebApi.Areas.InStock.Controllers
{
    public class UpController : BaseController
    {
        #region 获取所有待上架(暂存区)的物料(到货入+移库入)
        /// <summary>
        /// 获取所有待上架(暂存区)的物料(到货入+移库入)
        /// </summary>
        /// <param name="itemCode">物料编号</param>
        /// <returns></returns>
        /// <History>[HANHE(DBS)] CREATED BY 2019-03-7</History>
        public OperateResult GetWaitUpShelvesItems(string itemCode)
        {
            return ValidateToken(m =>
            {
                List < TN_WM_B_TRAY_ITEM_MSTEntity > waitUp = BLLCreator.Create<TN_WM_INCREASE_INVENTORYBLL>().GetWaitUpShelvesItems(itemCode);
                return OperateResult.Succeed("", waitUp);
            });
        }
        #endregion
 
        #region 获取托盘预分配信息
        /// <summary>
        /// 获取托盘预分配信息
        /// </summary>
        /// <param name="trayCode">托盘号</param>
        /// <returns></returns>
        /// <History>[HANHE(DBS)] CREATED BY 2019-03-7</History>
        public OperateResult GetTrayAlloc(string trayCode)
        {
            return ValidateToken(m =>
            {
                List<TN_WM_TRAY_ALLOCEntity> list = BLLCreator.Create<DapperBLL<TN_WM_TRAY_ALLOCEntity>>().GetList(new { CN_S_TRAY_CODE = trayCode });
                return OperateResult.Succeed("", list);
            });
        }
        #endregion
 
        #region 指引-托盘出库
        /// <summary>
        /// 根据物料、数量指引托盘
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        /// <History>[HANHE(DBS)] CREATED BY 2019-03-07</History>
        /// <History>[HANHE(XDL)] CREATED BY 2019-03-26</History>
        public OperateResult CommitUpGuide(List<dynamic> data)
        {
            try
            {
                string tokenId = data[0].tokenId.ToString();
                return ValidateToken(tokenId, m =>
                {
                    //计算托盘
                    List<itemInClass> listItemClass = new List<itemInClass>();
                    foreach (dynamic item in data)
                    {
                        itemInClass itemEntity = new itemInClass()//需要补料的物料
                        {
                            itemCode = item.item.ToString(),
                            lotNo = "",
                            //packingCode = item.CN_S_PACKING_CODE,
                            itemQty = decimal.Parse(item.qty.ToString())
                        };
                        listItemClass.Add(itemEntity);
                    }
                    OutFeedResultEntity feedAlloc = BLLCreator.Create<Feed_AlgorBLL>().Feed(new FeedAlgorEntity()
                    {
                        FeedType = FeedGoodType.FridTrayFirst,
                        stockArea = data[0].workAreaCode.ToString(),
                        lstItem = listItemClass,
                        lockLocation = false
                    });
                    if (!feedAlloc.Success)
                        return OperateResult.Error("算法异常:" + feedAlloc.Msg);
 
                    List<TN_WM_TRAY_ALLOCEntity> lstAllocQuery = BLLCreator.Create<TN_WM_TRAY_ALLOCBLL>().AllocFindEntity(feedAlloc, m);
                    List<TN_WM_TASKEntity> taskList = BLLCreator.Create<TN_WM_TASKBLL>().InstallTasks(lstAllocQuery, data[0].trayEndBit.ToString());
 
                    return BLLCreator.Create<TN_WM_B_TRAY_LOCATIONBLL>().CommitUpGuide(lstAllocQuery, taskList);
 
                });
            }
            catch (Exception ex)
            {
                Log.Info("托盘指引出库异常!", ex.Message.ToString());
                return OperateResult.Error(ex.Message.ToString());
            }
        }
        #endregion
 
        #region 上架-自动入库
        /// <summary>
        /// 上架
        /// </summary>
        /// <param name="task">任务实体</param>
        /// <returns></returns>
        /// <History>[HANHE(DBS)] CREATED BY 2019-03-11</History>
        public OperateResult CommitUp(TN_WM_TASKEntity task)
        {
            return ValidateToken(task.TokenId, m =>
            {
                List<TN_WM_B_TRAY_ITEM_MSTEntity> items = BLLCreator.CreateDapper<TN_WM_B_TRAY_ITEM_MSTEntity>().GetTopList(1, new { CN_S_TRAY_CODE = task.CN_S_TRAY_CODE });
                //计算合适的货位
                //调用入库算法-调用调用AutoBom接口,获取空货位
                InAlgorEnitty iAe = new InAlgorEnitty()
                {
                    stockAreaCode = task.CN_S_END_AREA,
                    logicCode = "",
                    locationQty = 1,
                    trayCode = task.CN_S_TRAY_CODE,
                    itemCode = items.Count == 0 ? "" : items[0].CN_S_ITEM_CODE,
                    lockLocation = false
                };
 
                InResultEntity irEresult = BLLCreator.Create<In_AlgorBLL>().In(iAe);
                if (!irEresult.Success)
                    return OperateResult.Error("算法异常:" + irEresult.Msg);
 
                OperateResult or = new OperateResult();
                foreach (locationEntity n in irEresult.lstLocation)
                {
                    or = GetCode(m, Constants.Rule_TaskNo);//获取新的任务号
                    if (!or.Success)
                        return or;
 
                    task.CN_N_PRIORITY = 1;
                    task.CN_S_CREATOR = task.CN_S_MODIFY = m.CN_S_LOGIN;
                    task.CN_S_CREATOR_BY = task.CN_S_MODIFY_BY = m.CN_S_NAME;
                    task.CN_S_END_BIT = n.locationCode;
                    task.CN_S_STATE = "未执行";
                    task.CN_S_TASK_NO = or.Data.ToString();
                    task.CN_T_CREATE = task.CN_T_MODIFY = DateTime.Now;
                }
 
                return BLLCreator.Create<TN_WM_TASKBLL>().CreateTask(task);
            });
        }
        #endregion
 
        #region 补料-托盘物料绑定
        /// <summary>
        /// 上架
        /// </summary>
        /// <param name="trayItemEntity">托盘物料实体</param>
        /// <returns></returns>
        /// <History>[HANHE(XDL)] CREATED BY 2019-03-27</History>
        public OperateResult CommitTrayItem(List<TN_WM_B_TRAY_ITEM_MSTEntity> trayItemEntity)
        {
            try
            {
                string tokenId = trayItemEntity[0].TokenId.ToString();
                return ValidateToken(tokenId, m =>
                {
                    return BLLCreator.Create<TN_WM_B_TRAY_ITEM_RELBLL>().CommitTrayItem(trayItemEntity,m);
                });
            }
            catch (Exception ex)
            {
                Log.Info("托盘指引出库异常!", ex.Message.ToString());
                return OperateResult.Error(ex.Message.ToString());
            }
        }
        #endregion
    }
}