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
using HH.Redis.ReisModel;
using HH.WMS.Common;
using HH.WMS.DAL;
using HH.WMS.DAL.Basic;
using HH.WMS.DAL.InStock;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Common;
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.InStock
{
    public class TN_WM_HKINBLL : DapperBaseBLL
    {
        #region 新增工单
        /// <summary>
        /// 新增工单
        /// </summary>
        /// <param name="Entity">工单实体</param>
        /// <returns></returns>
        /// <History>[HANHE(XDL)] CREATED BY 2019-02-20</History>
        public OperateResult AddInOrder(TN_WM_WORK_ORDEREntity Entity, RedisUserEntity t)
        {
 
            OperateResult operateResult = UseTransaction(trans =>
            {
                //新增主表
                CreateDAL<DapperDAL<TN_WM_WORK_ORDEREntity>>().Add(Entity, trans);
 
            });
 
            return operateResult;
        }
        #endregion
 
        #region 修改工单
        /// <summary>
        /// 修改工单
        /// </summary>
        /// <param name="Entity">工单实体</param>
        /// <returns></returns>
        /// <History>[HANHE(XDL)] CREATED BY 2019-02-20</History>
        public OperateResult UpdateInOrder(TN_WM_WORK_ORDEREntity entity)
        {
            OperateResult operateResult = UseTransaction(trans =>
            {
               // WorkOrderQtyReportBack("GD20081200097", "19", "9", trans);
                //修改主表
                CreateDAL<DapperDAL<TN_WM_WORK_ORDEREntity>>().Update(entity, new { CN_S_WO_NO = entity.CN_S_WO_NO }, trans);
            });
 
            return operateResult;
        }
        #endregion
 
        #region 删除工单
        /// <summary>
        /// 删除工单
        /// </summary>
        /// <param name="opNo">工单号</param>
        /// <returns></returns>
        /// <History>[HANHE(XDL)] CREATED BY 2019-02-20</History>
        public OperateResult DeleteInOrder(string opNo)
        {
            OperateResult operateResult = UseTransaction(trans =>
            {
                //删除主表
                CreateDAL<DapperDAL<TN_WM_WORK_ORDEREntity>>().Delete(new { CN_S_WO_NO = opNo }, trans);
            });
 
            return operateResult;
        }
        #endregion
 
        #region 提交工单
        /// <summary>
        /// 提交工单
        /// </summary>
        /// <param name="entity">审批实体</param>
        /// <returns></returns>
        /// <History>[HANHE(XDL)] CREATED BY 2019-02-20</History>
        public OperateResult SubmitInOrder(string opNo)
        {
            var workOrderEntity = BLLCreator.Create<DapperBLL<TN_WM_WORK_ORDEREntity>>().GetSingleEntity(new
            {
                CN_S_WO_NO = opNo
            });
            if (workOrderEntity != null)
            {
                var hasEntity = BLLCreator.Create<DapperBLL<TN_WM_WORK_ORDEREntity>>().GetSingleEntity(new
                {
                    CN_S_LINE = workOrderEntity.CN_S_LINE,
                    CN_S_STATUS = Constants.State_HK_Excuting
                });
                if (hasEntity != null)
                {
                    return OperateResult.Error("执行失败!产线<" + hasEntity.CN_S_LINE + ">已存在执行中的工单:" + hasEntity.CN_S_WO_NO + "!");
                }
            }
            else
            {
                return OperateResult.Error("工单:" + opNo + "不存在!");
            }
 
            OperateResult operateResult = UseTransaction(trans =>
             {
                 //提交主表
                 CreateDAL<TN_WM_HKINDAL>().ExamineMst(opNo, Constants.State_HK_Excuting, this.userInfo, trans);
             });
            return operateResult;
        }
        #endregion
 
        #region 强制完成工单
        /// <summary>
        /// 强制完成工单
        /// </summary>
        /// <param name="entity">审批实体</param>
        /// <returns></returns>
        /// <History>[HANHE(XDL)] CREATED BY 2019-02-20</History>
        public OperateResult CompleteInOrder(string opNo)
        {
            OperateResult operateResult = UseTransaction(trans =>
            {
                //提交主表
                CreateDAL<TN_WM_HKINDAL>().ExamineMst(opNo, Constants.State_HK_QZComplete, this.userInfo, trans);
            });
            return operateResult;
        }
        #endregion
 
        #region 查询工单列表
        /// <summary>
        /// 查询工单列表
        /// </summary>
        /// <param name="searchModel">实体</param>
        /// <returns></returns>
        /// <History>[HANHE(XDL)] CREATED BY 2018-12-18</History>
        public OperateResult GetInOrderList(SearchModel searchModel)
        {
            return CreateDAL<TN_WM_HKINDAL>().GetInOrderList(searchModel);
        }
        #endregion
 
        #region 接口:提供工单号和排产数量,增加工单中累计数
        /// <summary>
        /// 回报数量
        /// </summary>
        /// <param name="woNo">工单号</param>
        /// <param name="reportQty">回报数量</param>
        /// <param name="trayQty">托盘码盘数</param>
        /// <returns></returns>
        public OperateResult WorkOrderQtyReportBack(string woNo, string reportQty, string trayQty, IDbTransaction trans)
        {
 
            Log.Info("开始进入回报接口:WorkOrderQtyReportBack,传参", woNo + "||" + reportQty + "||" + trayQty);
 
            if (string.IsNullOrEmpty(woNo) || string.IsNullOrEmpty(reportQty) || string.IsNullOrEmpty(trayQty))
            {
                return OperateResult.Error("参数缺失!");
            }
            if (trayQty == "0")
            {
                return OperateResult.Error("托盘码盘数不能为0!");
            }
 
            var workOrderEntity = BLLCreator.Create<DapperBLL<TN_WM_WORK_ORDEREntity>>().GetSingleEntity(new
             {
                 CN_S_WO_NO = woNo
             });
 
            if (workOrderEntity != null)
            {
                //标记是否已经完成
                bool isAllOver = false;
 
                if (workOrderEntity.CN_S_STATUS != Constants.State_HK_Excuting)
                {
                    return OperateResult.Error("工单:" + woNo + "状态非<执行中>,禁止回报数量!");
                }
                if (workOrderEntity.CN_S_STATUS == Constants.State_HK_QZComplete)
                {
                    return OperateResult.Error("工单:" + woNo + "已被强制完成,禁止回报数量!");
                }
 
                decimal addupQty = workOrderEntity.CN_F_REAL_QTY + Convert.ToDecimal(reportQty);
                if (addupQty > workOrderEntity.CN_F_PLAN_QTY)
                {
                    return OperateResult.Error("工单:" + woNo + "实际生产数量<" + workOrderEntity.CN_F_REAL_QTY + ">与本次回报数量<" + reportQty + ">之和将超过计划数量<" + workOrderEntity.CN_F_PLAN_QTY + ">,禁止回报数量!");
                }
 
                decimal thisTrayQty = Math.Ceiling(Convert.ToDecimal(reportQty) / Convert.ToDecimal(trayQty));
                decimal addupTrayQty = workOrderEntity.CN_F_REAL_TRAY_QTY + thisTrayQty;
                if (addupTrayQty > workOrderEntity.CN_F_PLAN_TRAY_QTY)
                {
                    return OperateResult.Error("工单:" + woNo + "实际生产托数<" + workOrderEntity.CN_F_REAL_TRAY_QTY + ">与本次回报托数<" + thisTrayQty + ">之和将超过计划托数<" + workOrderEntity.CN_F_PLAN_TRAY_QTY + ">,禁止回报数量!");
                }
 
                if (addupQty == workOrderEntity.CN_F_PLAN_QTY && addupTrayQty == workOrderEntity.CN_F_PLAN_TRAY_QTY)
                {
                    isAllOver = true;
                }
 
                Log.Info("位置一:workOrderEntity--》", JsonConvert.SerializeObject(workOrderEntity));
                Log.Info("位置二:addupQty--》", addupQty.ToString());
                Log.Info("位置三:thisTrayQty--》", thisTrayQty.ToString());
                Log.Info("位置四:addupTrayQty--》", addupTrayQty.ToString());
                Log.Info("位置五:isAllOver--》", isAllOver.ToString());
 
                OperateResult up = new OperateResult();
                if (isAllOver)
                {
                    up = CreateDAL<DapperDAL<TN_WM_WORK_ORDEREntity>>().Update(new { CN_F_REAL_QTY = addupQty, CN_F_REAL_TRAY_QTY = addupTrayQty, CN_S_STATUS = Constants.State_HK_Complete, CN_T_MODIFY = DateTime.Now }, new { CN_S_WO_NO = woNo }, trans);
                }
                else
                {
                    up = CreateDAL<DapperDAL<TN_WM_WORK_ORDEREntity>>().Update(new { CN_F_REAL_QTY = addupQty, CN_F_REAL_TRAY_QTY = addupTrayQty }, new { CN_S_WO_NO = woNo }, trans);
                }
 
 
                Log.Info("位置六:up--》", JsonConvert.SerializeObject(up));
                Log.Info("结束本次回报!", "");
 
                return up;
            }
            else
            {
                return OperateResult.Error("工单:" + woNo + "不存在!");
            }
 
 
            return OperateResult.Succeed();
        }
 
        #endregion
 
    }
}