using HH.WMS.BLL;
using HH.WMS.Common;
using HH.WMS.DAL;
using HH.WMS.DAL.CoreServer;
using HH.WMS.Entitys;
using HH.WMS.Entitys.Algorithm;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Common;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HH.WMS.BLL.CoreServer
{
public class InDataBLL : DapperBaseBLL
{
///
///
///
///
///
public DataTable GetInMstData(string tableName)
{
return CreateDAL().GetInMstData(tableName);
}
public DataTable GetInDtlData(string collectionName, string cCode)
{
return CreateDAL().GetInDtlData(collectionName, cCode);
}
public void AddRdrecord(DataTable RdrecordMstEntityTable,string mstTableName, string dtlTableName, string opType)
{
string stockStr = WebApiManager.HttpWMSTool_Get("api/Common/NoTokenStockList");
OperateResult or = JsonConvert.DeserializeObject(stockStr);
List stockList = JsonConvert.DeserializeObject>(or.Data.ToString());
for (int i = 0; i < RdrecordMstEntityTable.Rows.Count; i++)
{
//到货批次-自动生成
List lotInfoList = new List();
//主表集合
List inMstEntityList = new List();
#region 拼接到货批次
TN_WM_LOT_INFOEntity lotInfo = new TN_WM_LOT_INFOEntity();
string postData = "{\"appCode\":\"AutoWMS\",\"ruleName\":\"" + Constants.BatchNo + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}";
string lotCode = WebApiManager.HttpAutoBomTool_Post("Api/BillRule/GenBillNo", postData);
if (lotCode == "")
{
Log.Info("生成批次号失败!", "AutoBom接口GenBillNo未调通!");
}
lotInfo.CN_GUID = System.Guid.NewGuid().ToString().ToUpper();
lotInfo.CN_S_LOT_CODE = lotCode;
if (dtlTableName == "Rdrecords01")//只有采购入库才有供应商
{
lotInfo.CN_S_VENDOR_NO = RdrecordMstEntityTable.Rows[i]["cVenCode"].ToString();
}
else
{
lotInfo.CN_S_VENDOR_NO = "";
}
lotInfo.CN_S_CREATOR = "hh";
lotInfo.CN_S_CREATOR_BY = "汉和信息";
lotInfo.CN_T_CREATE = DateTime.Now;
lotInfoList.Add(lotInfo);
#endregion
#region 拼接入库单主表
string postDataOpNo = "{\"appCode\":\"AutoWMS\",\"ruleName\":\"" + Constants.Rule_In + "\",\"orgId\":\"\",\"orgFlag\":\"0\"}";
string opNo = WebApiManager.HttpAutoBomTool_Post("Api/BillRule/GenBillNo", postDataOpNo);
if (opNo == "")
{
Log.Info("生成入库单号失败!", "AutoBom接口GenBillNo未调通!");
}
TN_WM_INCREASE_INVENTORY_MSTEntity inMstEntity = new TN_WM_INCREASE_INVENTORY_MSTEntity();
inMstEntity.CN_GUID = System.Guid.NewGuid().ToString().ToUpper();
inMstEntity.CN_S_OP_NO = opNo;
inMstEntity.CN_T_OPERATE = Convert.ToDateTime(RdrecordMstEntityTable.Rows[i]["dDate"].ToString());
if (dtlTableName == "Rdrecords01")//只有采购入库才有供应商
{
inMstEntity.CN_S_VENDOR_NO = RdrecordMstEntityTable.Rows[i]["cVenCode"].ToString();
inMstEntity.CN_S_VENDOR_NAME = RdrecordMstEntityTable.Rows[i]["cVenName"].ToString();
}
else
{
inMstEntity.CN_S_VENDOR_NO = "";
inMstEntity.CN_S_VENDOR_NAME = "";
}
inMstEntity.CN_S_STOCK_CODE = stockList[0].CN_S_STOCK_CODE; //RdrecordMstEntityTable.Rows[i]["cWhCode"].ToString();
inMstEntity.CN_S_FROM_NO = RdrecordMstEntityTable.Rows[i]["MainId"].ToString();
inMstEntity.CN_S_AUDITOR = RdrecordMstEntityTable.Rows[i]["cChecker_Erp"].ToString();
inMstEntity.CN_T_AUDIT_TIME = string.IsNullOrEmpty(RdrecordMstEntityTable.Rows[i]["dCheckDate_Erp"].ToString()) ? DateTime.Now : Convert.ToDateTime(RdrecordMstEntityTable.Rows[i]["dCheckDate_Erp"].ToString());
inMstEntity.CN_T_CREATE = Convert.ToDateTime(RdrecordMstEntityTable.Rows[i]["dCreateDate"].ToString());
//未传递 默认值
inMstEntity.CN_S_LOT_NO = lotCode;
inMstEntity.CN_S_STATE = Constants.State_Audit;
inMstEntity.CN_S_OWNER = Constants.DefaultU8Owner;
inMstEntity.CN_S_OP_TYPE = opType;
inMstEntity.CN_S_OP_FROM = "U8";
inMstEntity.CN_S_FROM_NO = RdrecordMstEntityTable.Rows[i]["cCode"].ToString();
inMstEntity.CN_S_AUDIT_REMARK = "";
inMstEntity.CN_S_OPERATOR = "汉和信息";
inMstEntity.CN_S_CREATOR = "hh";
inMstEntity.CN_S_CREATOR_BY = "汉和信息";
inMstEntity.CN_S_MODIFY = "hh";
inMstEntity.CN_S_MODIFY_BY = "汉和信息";
inMstEntity.CN_T_MODIFY = DateTime.Now;
inMstEntity.CN_S_NOTE = "U8对接导入";
#endregion
#region 拼接入库单子表
//子表集合
List inDtlEntityList = new List();
DataTable RdrecordDtlEntityTable = BLLCreator.Create().GetInDtlData(dtlTableName, inMstEntity.CN_S_FROM_NO);
for (int j = 0; j < RdrecordDtlEntityTable.Rows.Count; j++)
{
AutoBomItemEntity itemenity = BLLCreator.Create().GetItemEntity(RdrecordDtlEntityTable.Rows[j]["cInvCode"].ToString()); ;
if (itemenity == null)
{
Log.Info("拼接子表失败!", "物料编码 " + RdrecordDtlEntityTable.Rows[j]["cInvCode"].ToString() + " 不存在或者未定版!");
}
TN_WM_INCREASE_INVENTORY_DTLEntity dtlEntity = new TN_WM_INCREASE_INVENTORY_DTLEntity();
dtlEntity.CN_GUID = System.Guid.NewGuid().ToString().ToUpper();
dtlEntity.CN_T_PRODUCTION = Convert.ToDateTime(RdrecordDtlEntityTable.Rows[j]["dMadeDate"].ToString());
dtlEntity.CN_T_MODIFY = DateTime.Now;
dtlEntity.CN_T_CREATE = DateTime.Now;
dtlEntity.CN_T_EXPIRATION = Convert.ToDateTime(RdrecordDtlEntityTable.Rows[j]["dvDate"].ToString());
//计算物料质保期
if (!string.IsNullOrEmpty(dtlEntity.CN_T_PRODUCTION.ToString()))
{
TimeSpan span = TimeSpan.Parse((dtlEntity.CN_T_EXPIRATION - dtlEntity.CN_T_PRODUCTION).ToString());
int dayDiff = span.Days;
dtlEntity.CN_F_WARRNTY_PARTS = dayDiff;
bool setPart = CreateDAL().UpdateWarrantyPart(itemenity.CN_S_ITEM_CODE, dayDiff, "TN_AB_ITEM");
if (!setPart)
{
Log.Info("UpdateWarrantyPart更新质保期失败!", "");
}
}
dtlEntity.CN_S_STATE = Constants.State_Audit;
dtlEntity.CN_S_SERIAL_NO = "";
dtlEntity.CN_S_PRODUCTION_BATCH = RdrecordDtlEntityTable.Rows[j]["cBatch"].ToString();
dtlEntity.CN_S_OP_NO = inMstEntity.CN_S_OP_NO;
dtlEntity.CN_S_MSTGUID = inMstEntity.CN_GUID;
dtlEntity.CN_S_MODEL = itemenity.CN_S_MODEL;
dtlEntity.CN_S_ITEM_NAME = itemenity.CN_S_ITEM_NAME;
dtlEntity.CN_S_ITEM_CODE = itemenity.CN_S_ITEM_CODE;
dtlEntity.CN_N_ROW_NO = Convert.ToInt32(RdrecordDtlEntityTable.Rows[j]["iRowNo"].ToString());
string unit = RdrecordDtlEntityTable.Rows[j]["cComUnitName"].ToString();
decimal qty = RdrecordDtlEntityTable.Rows[j]["iQuantity"].ToString() == null ? 0 : Convert.ToDecimal(RdrecordDtlEntityTable.Rows[j]["iQuantity"].ToString());
//计算单据的单位和入库数量
if (unit != itemenity.CN_S_MEASURE_UNIT)
{
if (string.IsNullOrEmpty(itemenity.CN_S_CONERSION))
{
Log.Info("拼接子表失败!", "请维护物料 " + itemenity.CN_S_ITEM_CODE + " 的换算比例!");
}
unit = itemenity.CN_S_MEASURE_UNIT;
decimal jishu = Convert.ToDecimal(itemenity.CN_S_CONERSION.Substring(0, itemenity.CN_S_CONERSION.IndexOf("-")));
if (jishu == 0) jishu = 1;
dtlEntity.CN_F_QUANTITY = Math.Floor(qty / jishu);
}
else
{
dtlEntity.CN_F_QUANTITY = qty;
}
dtlEntity.CN_S_MEASURE_UNIT = unit;
dtlEntity.CN_S_ARRIVAL_QTY = Math.Round(dtlEntity.CN_F_QUANTITY, 2).ToString();
dtlEntity.CN_C_IS_SCRAP = Constants.N;
dtlEntity.CN_C_IS_BALANCE = Constants.N;
dtlEntity.CN_S_ITEM_STATE = Constants.ItemState_WaitCheck;
dtlEntity.CN_S_CREATOR = "hh";
dtlEntity.CN_S_CREATOR_BY = "汉和信息";
dtlEntity.CN_S_MODIFY = "hh";
dtlEntity.CN_S_MODIFY_BY = "汉和信息";
dtlEntity.CN_T_MODIFY = DateTime.Now;
dtlEntity.CN_S_FIGURE_NO = "";
dtlEntity.CN_F_PRINTING_QTY = 0;
dtlEntity.CN_F_PLAN_PRICE = 0;
dtlEntity.CN_F_PLAN_MONEY = 0;
dtlEntity.CN_F_ALLOT_QTY = 0;
dtlEntity.CN_F_ADD_ONTRAY_QTY = 0;
dtlEntity.CN_F_WARRNTY_PARTS = 0;
dtlEntity.CN_F_UPSHELF_QTY = 0;
dtlEntity.CN_S_NOTE = "U8对接导入";
dtlEntity.CN_F_ACTUAL_PRICE = 0;
dtlEntity.CN_F_ACTUAL_MONEY = 0;
inDtlEntityList.Add(dtlEntity);
}
inMstEntity.DTLEntity = inDtlEntityList;
inMstEntityList.Add(inMstEntity);
#endregion
#region 调用WMS接口传递数据
string resultStrMst = WebApiManager.HttpWMSTool_Post("Api/In/AddU8InData", JsonConvert.SerializeObject(inMstEntityList));
if (resultStrMst == "")
{
Log.Info("保存主子表、量表接口未调通!", "Api/In/AddU8InData");
}
OperateResult orMst = JsonConvert.DeserializeObject(resultStrMst);
if (!orMst.Success)
{
Log.Info("保存主子表、量表接口调用失败!", orMst.Msg);
}
string resultStrLot = WebApiManager.HttpWMSTool_Post("Api/LotInfo/AddLotInfo", JsonConvert.SerializeObject(lotInfoList));
if (resultStrLot == "")
{
Log.Info("批次接口未调通!", "Api/LotInfo/AddLotInfo");
}
OperateResult orLot = JsonConvert.DeserializeObject(resultStrLot);
if (!orLot.Success)
{
Log.Info("批次接口调用失败!", orMst.Msg);
}
#endregion
if (orMst.Success && orLot.Success)
{
//更新单据表WMS确认状态
SqlExecuteResult sResult = CreateDAL().UpdateRdrecordCheckState(RdrecordMstEntityTable.Rows[i]["cCode"].ToString(), mstTableName);
if (!sResult.Success)
{
Log.Info("更新单据表WMS确认状态失败!", sResult.Exception.ToString());
}
}
}
}
}
}