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