|
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
|
{
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="tableName"></param>
|
/// <returns></returns>
|
public DataTable GetInMstData(string tableName)
|
{
|
return CreateDAL<InDataDAL>().GetInMstData(tableName);
|
}
|
|
public DataTable GetInDtlData(string collectionName, string cCode)
|
{
|
return CreateDAL<InDataDAL>().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<OperateResult>(stockStr);
|
List<TN_AB_STOCKEntity> stockList = JsonConvert.DeserializeObject<List<TN_AB_STOCKEntity>>(or.Data.ToString());
|
for (int i = 0; i < RdrecordMstEntityTable.Rows.Count; i++)
|
{
|
//到货批次-自动生成
|
List<TN_WM_LOT_INFOEntity> lotInfoList = new List<TN_WM_LOT_INFOEntity>();
|
//主表集合
|
List<TN_WM_INCREASE_INVENTORY_MSTEntity> inMstEntityList = new List<TN_WM_INCREASE_INVENTORY_MSTEntity>();
|
|
#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<TN_WM_INCREASE_INVENTORY_DTLEntity> inDtlEntityList = new List<TN_WM_INCREASE_INVENTORY_DTLEntity>();
|
|
DataTable RdrecordDtlEntityTable = BLLCreator.Create<InDataBLL>().GetInDtlData(dtlTableName, inMstEntity.CN_S_FROM_NO);
|
for (int j = 0; j < RdrecordDtlEntityTable.Rows.Count; j++)
|
{
|
AutoBomItemEntity itemenity = BLLCreator.Create<MongoBLL>().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<MongoDAL>().UpdateWarrantyPart<AutoBomItemEntity>(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<OperateResult>(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<OperateResult>(resultStrLot);
|
if (!orLot.Success)
|
{
|
Log.Info("批次接口调用失败!", orMst.Msg);
|
}
|
#endregion
|
|
if (orMst.Success && orLot.Success)
|
{
|
//更新单据表WMS确认状态
|
SqlExecuteResult sResult = CreateDAL<InDataDAL>().UpdateRdrecordCheckState(RdrecordMstEntityTable.Rows[i]["cCode"].ToString(), mstTableName);
|
if (!sResult.Success)
|
{
|
Log.Info("更新单据表WMS确认状态失败!", sResult.Exception.ToString());
|
}
|
}
|
}
|
}
|
}
|
}
|