using Newtonsoft.Json; using RB_MES_API.Context; using RB_MES_API.Controllers; using RB_MES_API.Controllers.Cloud; using RB_MES_API.Models; using RB_MES_API.Models.Cloud; using RB_MES_APICore.Models.Pangu; using System.Data; using System.Reflection; namespace RB_MES_APICore.Controllers.Interface { public class MesApiSTKTransferDirectsService : IMesApiSTKTransferDirectsService { private readonly IShareController _shareController; private readonly IChiledSelect _chiledselect; private readonly IKDSqlHelper _kdsqlhelper; public MesApiSTKTransferDirectsService(IShareController shareController, IChiledSelect chiledSelect, IKDSqlHelper kdsqlhelper ) { _shareController = shareController; _chiledselect = chiledSelect; _kdsqlhelper = kdsqlhelper; } //private async Task SaveBatchSTKTransferDirectsAsync(DataTable dataTable, int fid, int postmid, string data) //{ // BreakData breakData = new BreakData() { Status = false, DataSet = JsonConvert.DeserializeObject(data) }; // string reason = string.Empty; // List? mes_POInStocks = _shareController.DataConvertClass(data, ref reason); // if (mes_POInStocks != null) // { // //推送数据 // var dsb = await _shareController.GetAPIList(); // DataSaveBatch? dataSave = dsb.Where(s => s.GetForm.FFunctionID == fid && s.FDocTypeID == postmid) // .FirstOrDefault(); // breakData.Message = string.Empty; // //校验是否有重复推单 // breakData = ExistsDoubleQueid(mes_POInStocks, dataSave.GetForm.FDocType); // if (breakData.Status || !string.IsNullOrEmpty(breakData.Message.ToString())) // { // return breakData; // } // List inStocks = CreateBatchSTKTransferDirects(mes_POInStocks, dataSave.FErpBillType, ref reason); // if (inStocks.Count() > 0 && reason == "") // { // breakData = await SaveBatchAsync(dataSave, dataSave.GetForm.FDBName, inStocks); // if (breakData.Status) // { // List dataBacks = new List(); // if (breakData.DataSet != null) // { // //提取出创建好的单据编号 // List> billlist = (List>)breakData.DataSet; // List billnolist = GetNewBillNoList(dataSave.GetForm.FDocType, mes_POInStocks, billlist, ref dataBacks); // Thread thread = new Thread(_shareController.SaveReciveData); // //thread_1.IsBackground = true; //这意味着主程序可能不等它保存了... // thread.Start(dataBacks); // } // else // { // dataBacks = await DataBacks(postmid, mes_POInStocks); // if (dataBacks.Count != 0) // { // Thread thread_1 = new Thread(_shareController.SaveReciveData); // //thread_1.IsBackground = true; //这意味着主程序可能不等它保存了... // thread_1.Start(dataBacks); // } // else // { // breakData.Status = false; // breakData.Message = "不可控因素,请稍后再次提交"; // } // } // breakData.DataSet = dataBacks; // } // } // else // { // breakData.Message = reason; // } // } // else // { // breakData.Message = string.IsNullOrEmpty(reason) ? "输入数据转换出错" : reason; // } // return breakData; //} ///// ///// 创建调拨单信息,并转换成Cloud的实体类 ///// ///// 接收到的数据 ///// FBillTypeID的FNumber属性 ///// 如果错误,则返回消息 ///// //public List CreateBatchSTKTransferDirects(List R011cs, string billtype, ref string reason) //{ // reason = ""; // List list = new List(); // var R011 = (from a in R011cs // group a by a.TRX_DATE into b // select b).Distinct().ToList(); // List units = _shareController.GetAPIList().Result; // foreach (var head in R011) // { // //创建单据头 // STK_TransferDirect inStock = new() // { // FBillTypeID = new Dictionary() { { "FNUMBER", billtype } }, // FDate = head.Key, // FOwnerOutIdHead = new Dictionary() { { "FNUMBER", LocalStaticRequest.DefaultOrg } }, // F_SBMI_QUEUE_ID = string.Format("R011:{0}", R011cs.FirstOrDefault().QUEUE_ID) //如果不是盘古,建议放在单据体!!! // }; // //收集物料清单,一起查询 // var mary = from a in R011cs select a.MTRL_ID; // List marylist = _chiledselect.materialsAsync(mary.ToList()).Result; // if (marylist.Count == 0) // { // reason = "输入的物料编码不存在"; // break; // } // //添加单据体,按订单号找到它的明细数据 // List entries = (from a in head // join b in R011cs on a.TRX_DATE equals b.TRX_DATE // join c in marylist on b.MTRL_ID equals c.FNumber // join d in units on c.FStoreUnitID equals d.FUNITID // join e in units on c.FBaseUnitId equals e.FUNITID // select new STK_TransferDirect.BillEntry // { // FMaterialId = new Dictionary() { { "FNumber", b.MTRL_ID } }, // FNoteEntry = b.REMARK, // FLot = new Dictionary() { { "FNumber", b.ERP_LOTNO } }, // FDestLot = new Dictionary() { { "FNumber", b.ERP_LOTNO } }, // FQty = decimal.Parse(b.QUANTITY), // FDestStockId = new Dictionary() { { "FNumber", b.TOSTORE_ID } }, // FUnitID = new Dictionary() { { "FNumber", c.FUnitNumber } }, // FBaseUnitId = new Dictionary() { { "FNumber", c.FBaseUnitNumber } }, // FSrcStockId = new Dictionary() { { "FNumber", b.STORE_ID } }, // FSaleQty = decimal.Parse(b.QUANTITY), // FSaleUnitId = new Dictionary() { { "FNumber", c.FUnitNumber } }, // FActQty = decimal.Parse(b.QUANTITY), // FSalBaseQty = Math.Round(decimal.Parse(b.QUANTITY) / (d.FConvertNumerator / d.FConvertDenominator), d.FPrecision), // FBaseQty = Math.Round(decimal.Parse(b.QUANTITY) / (d.FConvertNumerator / d.FConvertDenominator), d.FPrecision), // FOwnerOutId = new Dictionary() { { "FNumber", LocalStaticRequest.DefaultOrg } }, // FAuxPropId = string.IsNullOrEmpty(b.MTRL_VER) ? null : new STK_TransferDirect.BillEntry.AuxpropId() { FAUXPROPID__FF100001 = new Dictionary() { { "FNumber", b.MTRL_VER } } } // } // ).Distinct().ToList() // ; // var q = entries.Where(s => s.FQty <= 0).ToList(); // if (q.Count > 0) // { // reason = "入库单数量必须大于0"; // break; // } // string s = JsonConvert.SerializeObject(entries); // inStock.FBillEntry = entries; // //财务费用,隶属于单据体 // list.Add(inStock); // } // return list; //} //public async Task SaveBatchSTKTransferDirectsAsync(DataTable dataTable, int fid, int postmid, string data) //{ // BreakData breakData = new BreakData() { Status = false, DataSet = JsonConvert.DeserializeObject(data) }; // string reason = string.Empty; // List? mes_POInStocks = _shareController.DataConvertClass(data, ref reason); // if (mes_POInStocks != null) // { // //推送数据 // var dsb = await _shareController.GetAPIList(); // DataSaveBatch? dataSave = dsb.Where(s => s.GetForm.FFunctionID == fid && s.FDocTypeID == postmid) // .FirstOrDefault(); // breakData.Message = string.Empty; // //校验是否有重复推单 // breakData = ExistsDoubleQueid(mes_POInStocks, dataSave.GetForm.FDocType); // if (breakData.Status || !string.IsNullOrEmpty(breakData.Message.ToString())) // { // return breakData; // } // List inStocks = CreateBatchSTKTransferDirects(mes_POInStocks, dataSave.FErpBillType, ref reason); // if (inStocks.Count() > 0 && reason == "") // { // breakData = await SaveBatchAsync(dataSave, dataSave.GetForm.FDBName, inStocks); // if (breakData.Status) // { // List dataBacks = new List(); // if (breakData.DataSet != null) // { // //提取出创建好的单据编号 // List> billlist = (List>)breakData.DataSet; // List billnolist = GetNewBillNoList(dataSave.GetForm.FDocType, mes_POInStocks, billlist, ref dataBacks); // Thread thread = new Thread(_shareController.SaveReciveData); // //thread_1.IsBackground = true; //这意味着主程序可能不等它保存了... // thread.Start(dataBacks); // } // else // { // dataBacks = await DataBacks(postmid, mes_POInStocks); // if (dataBacks.Count != 0) // { // Thread thread_1 = new Thread(_shareController.SaveReciveData); // //thread_1.IsBackground = true; //这意味着主程序可能不等它保存了... // thread_1.Start(dataBacks); // } // else // { // breakData.Status = false; // breakData.Message = "不可控因素,请稍后再次提交"; // } // } // breakData.DataSet = dataBacks; // } // } // else // { // breakData.Message = reason; // } // } // else // { // breakData.Message = string.IsNullOrEmpty(reason) ? "输入数据转换出错" : reason; // } // return breakData; //} //private BreakData ExistsDoubleQueid(List inputdata, string DocType) where T : class //{ // BreakData breakData = new BreakData() { Status = false }; // //return breakData; // Type type = typeof(T); // PropertyInfo[] propertyInfos = type.GetProperties(); // var propertyInfo = propertyInfos.Where(s => s.Name == "QUEUE_ID"); // if (propertyInfo.Any()) // { // try // { // List strings = new List(); // PropertyInfo infos = propertyInfo.FirstOrDefault()!; // foreach (var obj in inputdata) // { // object v = infos.GetValue(obj)!; // strings.Add(string.Format("'{0}'", v.ToString())); // } // string sql = string.Format("select * from r_ReciveDataBack where FDocType='{0}' and QUEUE_ID in ({1})", DocType, string.Join(',', strings.ToArray())); // //直接SQL查询更快!!! // string messstr = string.Empty; // DataSet? dataSet = _kdsqlhelper.GetDataSet(CommandType.Text, sql, null, ref messstr!, false); // if (dataSet != null || string.IsNullOrEmpty(messstr)) // { // if (dataSet.Tables.Count != 0) // { // DataTable dataTable = dataSet.Tables[0]; // if (dataTable.Rows.Count != 0) // { // breakData.Status = true; // breakData.Message = "不可重复推单"; // var dt = (from a in dataTable.AsEnumerable() // select new // { // QUEUE_ID = a.Field("QUEUE_ID").ToString(), // FDocType = a.Field("FDocType")!, // FBillNo = a.Field("FBillNo")!, // FErpID = a.Field("FErpID"), // FSeq = a.Field("FSeq") // }).ToList(); // breakData.DataSet = dt; // } // } // } // else // { // breakData.Message = messstr; // } // } // catch (Exception ex) // { // breakData.Message = "错误在ExistsDoubleQueid中发生:" + ex.Message; // //throw; // } // } // else // { // breakData.Message = "传入的数据中必须有字段【QUEUE_ID】"; // } // return breakData; //} } }