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
}
}