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.Common;
using HH.WMS.Common.External;
using HH.WMS.DAL;
using HH.WMS.DAL.ERP;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Entitys;
using HH.WMS.Entitys.ERP;
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.ERP
{
    /// <summary>
    /// 原料出库明细 
    /// </summary>
    public class TN_ER_MATERIAL_STOCKOUT_DTLBLL : DapperBaseBLL
    {
        #region GET
 
        public TN_ER_MATERIAL_STOCKOUT_DTLEntity Get(string taskNo, int sync = 0)
        {
            var data = BLLCreator.Create<DapperBLL<TN_ER_MATERIAL_STOCKOUT_DTLEntity>>().GetSingleEntity(new { CN_S_TASK_NO = taskNo, SynchroFlag = sync });
            return data;
        }
 
        public List<TN_ER_MATERIAL_STOCKOUT_DTLEntity> GetList(int sync)
        {
            var data = BLLCreator.Create<DapperBLL<TN_ER_MATERIAL_STOCKOUT_DTLEntity>>().GetList(new { SynchroFlag = sync });
            return data;
        }
 
        #endregion
 
        #region UPDATE
 
        public OperateResult UpdateSyncState(string opNo, int syncFlag, IDbTransaction trans)
        {
            var result = BLLCreator.Create<DapperBLL<TN_ER_MATERIAL_STOCKOUT_DTLEntity>>().Update(new { SynchroFlag = syncFlag }, new { CN_S_OP_NO = opNo });
            return result;
        }
 
        public OperateResult Update(string taskNo, int sync, LogPara logPara = null)
        {
            var result = DALCreator.Create<DapperDAL<TN_ER_MATERIAL_STOCKOUT_DTLEntity>>().Update(new { SynchroFlag = sync }, new { CN_S_TASK_NO = taskNo });
            if (logPara != null) Log.Detail(logPara, "更新WMS中的原料出库明细" + result.Describe());
            return result;
        }
 
 
 
        #endregion
 
        #region ADD
 
        /// <summary>
        /// 添加原料出库明细 
        /// </summary>
        /// <returns></returns>
        public OperateResult Add(string trayCode, string produceLine, string taskNo, string stockCode, LogPara logPara, int SynchroFlag = 0)
        {
            var result = OperateResult.Succeed();
            var lotNo = "";
            List<TN_ER_COMBINE_CAGE_HISTORYEntity> combineCages = new List<TN_ER_COMBINE_CAGE_HISTORYEntity>();
            try
            {
                Log.Detail(logPara, "添加领料单子表!");
                var trayItem = BLLCreator.Create<DapperBLL<TN_WM_B_TRAY_ITEM_MSTEntity>>().GetList(new { CN_S_TRAY_CODE = trayCode });
                Log.Detail(logPara, "当前托盘绑定物料数:" + trayItem.Count() + "!");
                if (trayItem.Count() == 0)
                {
                    return OperateResult.Error("添加领料单子表-未找到当前托盘:" + trayCode + "的托盘物料关系!");
                }
 
                //获取领料单
                var materialStockOuts = BLLCreator.Create<MiddleLibraryBLL>().GetMaterialStockOut(trayItem.FirstOrDefault().CN_S_ITEM_CODE, produceLine);
                Log.Detail(logPara, "获取领料单结果:" + JsonConvert.SerializeObject(materialStockOuts));
                if (materialStockOuts != null)
                {
                    //根据大榜单号和托盘号去找小磅单号
                    var itemPound = BLLCreator.Create<TN_ER_ITEM_POUNDBLL>().GetByTrayCode(trayCode, trayItem.FirstOrDefault().CN_S_FIGURE_NO);
                    Log.Detail(logPara, "根据大磅单号" + trayItem.FirstOrDefault().CN_S_FIGURE_NO + "和托盘号" + trayCode + "查找小磅单: " +  JsonConvert.SerializeObject(itemPound));
                    if (itemPound == null)
                    {
                        lotNo = "";
                        //return OperateResult.Error("未找到托盘:" + trayCode + ",磅单号:" + trayItem.FirstOrDefault().CN_S_FIGURE_NO + "的小磅单信息!");
                    }
                    else
                    {
                        lotNo = itemPound.CN_S_LOT_NO;
                    }
 
                    //检查是否是并笼
                    combineCages = BLLCreator.Create<TN_ER_COMBINE_CAGE_HISTORYBLL>().GetList(trayCode, "新建");
                    Log.Detail(logPara, "查找并笼数量:" + combineCages.Count());
                    if (combineCages.Count() > 0)
                    {
                        lotNo += ",";
                        //当前为并笼,拼接当前并笼的所有从笼
                        foreach (var combineCage in combineCages)
                        {
                            lotNo += combineCage.CN_S_LOT_NO + ",";
                        }
                        lotNo = lotNo.Substring(0, lotNo.Length - 1);
                    }
 
                    var trayInfo = BLLCreator.Create<DapperBLL<TN_WM_B_TRAY_INFOEntity>>().GetSingleEntity(new { CN_S_TRAY_CODE = trayCode });
                    Log.Detail(logPara, "托盘信息表:" + JsonConvert.SerializeObject(trayInfo));
                    if (trayInfo == null)
                    {
                        return OperateResult.Error("未找到当前托盘的TN_WM_B_TRAY_INFO信息!");
                    }
 
                    if (materialStockOuts.Count() > 0)
                    {
                        var materialStockOut = materialStockOuts.First();
 
                        //流水号
                        var postData = "{\"appCode\":\"" + Constants.appCode + "\",\"ruleName\":\"" + Constants.Rule_StockOut_SerialNum + "\",\"orgId\":\"0\",\"orgFlag\":\"\"}";
                        var serialNum = WebApiManager.HttpAutoBom_Post("api/BillRule/GenBillNo", postData);
                        if (serialNum.Length > 3)
                        {
                            serialNum = serialNum.Substring(3, serialNum.Length - 3);
                        }
 
                        var outDtl = new TN_ER_MATERIAL_STOCKOUT_DTLEntity
                        {
                            CN_GUID = Guid.NewGuid().ToString(),
                            CN_S_BOM_NO = materialStockOut.CN_S_BOM_NO,
                            CN_N_BOM_ID = materialStockOut.CN_N_BOM_ID,
                            CN_S_OP_NO = "0" + DateTime.Now.ToString("yyyyMMdd") + serialNum,
                            CN_S_STOCK_CODE = stockCode,
                            CN_S_ITEM_CODE = trayItem.FirstOrDefault().CN_S_ITEM_CODE,
                            CN_S_ITEM_NAME = trayItem.FirstOrDefault().CN_S_ITEM_NAME,
                            CN_S_ITEM_SPEC = trayItem.FirstOrDefault().CN_S_MODEL,
                            CN_S_LOT_NO = lotNo,
                            CN_S_TRAY_CODE = trayCode,
                            CN_S_TRAY_WEIGHT = trayInfo.CN_F_WEIGHT,
                            CN_F_WEIGHT = itemPound == null ? trayInfo.CN_F_WEIGHT : itemPound.CN_F_WEIGHT,
                            CN_F_QTY = trayItem.FirstOrDefault().CN_F_QUANTITY,
                            CN_DT_CREATE = DateTime.Now,
                            CN_S_CREATOR = "WMS",
                            SynchroFlag = 0,
                            CN_DT_OPERATION = DateTime.Now,
                            CN_S_LINE = produceLine,
                            CN_S_TASK_NO = taskNo
                        };
                        result = DALCreator.Create<DapperDAL<TN_ER_MATERIAL_STOCKOUT_DTLEntity>>().Add(outDtl);
                    }
                }
 
                if (result.Success)
                {
                    if (combineCages.Count() > 0)
                    {
                        //更新并笼记录的状态
                        result = BLLCreator.Create<TN_ER_COMBINE_CAGE_HISTORYBLL>().UpdateState(combineCages);
                        if (!result.Success)
                        {
                            return OperateResult.Error("并笼更新出库状态失败!原因:" + result.Msg);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                result = OperateResult.Error("添加原料出库明细失败!原因:" + ex.Message);
            }
            return result;
        }
 
        #endregion
 
        #region DELETE
 
        public OperateResult Delete(string taskNo, LogPara logPara)
        {
            var result = BLLCreator.Create<DapperBLL<TN_ER_MATERIAL_STOCKOUT_DTLEntity>>().Delete(new { SynchroFlag = -1, CN_S_TASK_NO = taskNo });
            if (logPara != null) Log.Detail(logPara, "任务取消,删除WMS中的领料单子表结果:" + result.Describe());
            return result;
        }
 
        #endregion
        
    }
}