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()); } } } } } }