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 { /// /// 原料出库明细 /// 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>().GetSingleEntity(new { CN_S_TASK_NO = taskNo, SynchroFlag = sync }); return data; } public List GetList(int sync) { var data = BLLCreator.Create>().GetList(new { SynchroFlag = sync }); return data; } #endregion #region UPDATE public OperateResult UpdateSyncState(string opNo, int syncFlag, IDbTransaction trans) { var result = BLLCreator.Create>().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>().Update(new { SynchroFlag = sync }, new { CN_S_TASK_NO = taskNo }); if (logPara != null) Log.Detail(logPara, "更新WMS中的原料出库明细" + result.Describe()); return result; } #endregion #region ADD /// /// 添加原料出库明细 /// /// public OperateResult Add(string trayCode, string produceLine, string taskNo, string stockCode, LogPara logPara, int SynchroFlag = 0) { var result = OperateResult.Succeed(); var lotNo = ""; List combineCages = new List(); try { Log.Detail(logPara, "添加领料单子表!"); var trayItem = BLLCreator.Create>().GetList(new { CN_S_TRAY_CODE = trayCode }); Log.Detail(logPara, "当前托盘绑定物料数:" + trayItem.Count() + "!"); if (trayItem.Count() == 0) { return OperateResult.Error("添加领料单子表-未找到当前托盘:" + trayCode + "的托盘物料关系!"); } //获取领料单 var materialStockOuts = BLLCreator.Create().GetMaterialStockOut(trayItem.FirstOrDefault().CN_S_ITEM_CODE, produceLine); Log.Detail(logPara, "获取领料单结果:" + JsonConvert.SerializeObject(materialStockOuts)); if (materialStockOuts != null) { //根据大榜单号和托盘号去找小磅单号 var itemPound = BLLCreator.Create().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().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>().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>().Add(outDtl); } } if (result.Success) { if (combineCages.Count() > 0) { //更新并笼记录的状态 result = BLLCreator.Create().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>().Delete(new { SynchroFlag = -1, CN_S_TASK_NO = taskNo }); if (logPara != null) Log.Detail(logPara, "任务取消,删除WMS中的领料单子表结果:" + result.Describe()); return result; } #endregion } }