using System; using System.Collections.Generic; using System.Linq; using System.Threading; using CK.SCP.Models; using CK.SCP.Models.Enums; using CK.SCP.Models.ScpEntity; using CK.SCP.Models.UniApiEntity; using Newtonsoft.Json; using CK.SCP.Models.AppBoxEntity; namespace CK.SCP.GrupUniApi.Controller { public static class OdbcApiScpController { private static string CreateSeq(string pre) { return pre + "_" + DateTime.Now.ToString(ScpCache.Config.SCP接口数据流水号格式); } private static void PutScpCtrl(UniApiEntities idb, string seq, string tableName, int rowCount, string p_domain, string p_site) { var wmsCtrl = new xxscm_ctrl { xxscm_seq = seq, xxscm_table = tableName, xxscm_table_qty = rowCount, xxscm_qad = ((int)UniApiState.待执行).ToString(), xxscm_mes = ((int)UniApiState.待执行).ToString(), xxscm_scm = ((int)UniApiState.待执行).ToString(), xxscm_wms = ((int)UniApiState.待执行).ToString(), xxscm_rmks = "", xxscm_domain = p_domain, xxscm_site = (!string.IsNullOrEmpty(p_site)) ? p_site : p_domain, //xxscm_create_time = DateTime.Now, }; idb.xxscm_ctrl.Add(wmsCtrl); } public static void PutAll(ScpEntities sdb, UniApiEntities idb, List dataList) { var billNumList = dataList.Select(p => p.BillNum).Distinct(); foreach (string billNum in billNumList) { var list = dataList.Where(p => p.BillNum == billNum).ToList(); if (GlobalVar.ApiConfig.Scm采购订单) PutScmPo(idb, list.Where(p => p.InterfaceType == UniApiType.Pobillnum.ToString()).ToList()); if (GlobalVar.ApiConfig.Scm大订单) PutScmMaxPo(idb, list.Where(p => p.InterfaceType == UniApiType.MaxPobillnum.ToString()).ToList()); if (GlobalVar.ApiConfig.Scm发货单) PutScmAsn(idb, list.Where(p => p.InterfaceType == UniApiType.Receive.ToString()).ToList()); //if (GlobalVar.ApiConfig.Scm条码明细) // PutScmBarcode(idb, list.Where(p => p.InterfaceType == UniApiType.BarCode.ToString()).ToList()); //if (GlobalVar.ApiConfig.Scm发票) // PutScmInvoice(idb, list.Where(p => p.InterfaceType == UniApiType.Invoice.ToString()).ToList()); Thread.Sleep(10); } } /// /// 发货单 /// /// /// private static void PutScmAsn(UniApiEntities idb, List dataList) { var uni_api = dataList.FirstOrDefault(); string seq = string.Empty; if (dataList.Count > 0) { seq = CreateSeq(string.IsNullOrEmpty(uni_api.Domain) ? uni_api.Site : uni_api.Domain); } var tableName = ScmTableName.xxscm_tx_mstr.ToString(); var qadDataList = new List(); var qadDataList1 = new List(); foreach (var erpData in dataList) { var qadData1 = qadDataList1.FirstOrDefault(p => p.PURDOCNO == erpData.ErpBillNum && p.purDocLineNO == erpData.ErpLineNum.ToString() ); if (qadData1 == null) { qadData1 = new PURReplenishQties { PURDOCNO = erpData.ErpBillNum, purDocLineNO = erpData.Extend3, // 增加一列BillNum 用来区分 PurAsnBillNum = erpData.BillNum, // 发货单里的qty replenishQty = erpData.Qty, client = "800", plant = erpData.Site }; //PutScpCtrl(idb, qadData.xxscm_tx_seq, tableName,1,wmsData.Domain,wmsData.Site ); qadDataList1.Add(qadData1); } erpData.State = (int)BillState.Finish; erpData.PutTime = DateTime.Now; } foreach (var wmsData in dataList) { if (wmsData.Domain == "BJCIAI") { wmsData.Domain = "BJINTIER"; wmsData.Site = "BJCIAI"; } var qadData = qadDataList.SingleOrDefault(p => p.xxscm_tx_nbr == wmsData.BillNum && p.xxscm_tx_domain == wmsData.Site && p.xxscm_tx_part == wmsData.PartCode && p.xxscm_tx_batch == wmsData.Batch && p.xxscm_tx_vend_batch == wmsData.VendBatch &&p.xxscm_tx_po_line == wmsData.ErpLineNum.ToString()); if (qadData == null) { qadData = new xxscm_tx_mstr { xxscm_tx_seq = seq, xxscm_tx_nbr = wmsData.BillNum, xxscm_tx_part = wmsData.PartCode, xxscm_tx_qadread = ((int)UniApiState.待执行).ToString(), xxscm_tx_wmsread = ((int)UniApiState.待执行).ToString(), xxscm_tx_scmread = ((int)UniApiState.待执行).ToString(), xxscm_tx_mesread = ((int)UniApiState.待执行).ToString(), xxscm_tx_createur = wmsData.CreateOper, xxscm_tx_createdt = wmsData.CreateTime, xxscm_tx_updateur = "", xxscm_tx_updatedt = DateTime.Now, xxscm_tx_rmks = "", xxscm_tx_domain = wmsData.Domain, xxscm_tx_po_nbr = wmsData.ErpBillNum, xxscm_tx_po_line = wmsData.ErpLineNum.ToString(), xxscm_tx_conv = wmsData.UmConv, xxscm_tx_date_Promise = wmsData.ValidDate, xxscm_tx_date_due = wmsData.CreateTime, xxscm_tx_date_ship = wmsData.CreateTime, xxscm_tx_loc_um = wmsData.LocUnit == null ? "" : wmsData.LocUnit, xxscm_tx_po_um = wmsData.PoUnit == null ? "" : wmsData.PoUnit, xxscm_tx_pprice = wmsData.Price, xxscm_tx_qty_std = wmsData.PackQty, xxscm_tx_qty_total = wmsData.Qty, xxscm_tx_status = ((int)FormState.开放).ToString(), xxscm_tx_type = wmsData.Barcode,//版本号 xxscm_tx_vend = wmsData.VendId, xxscm_tx_vend_batch = wmsData.VendBatch, xxscm_tx_ware = "", xxscm_tx_ware_class =wmsData.ModType,//子件 xxscm_tx_batch = wmsData.Batch, xxscm_tx_produce_date = wmsData.CreateTime, xxscm_tx_site = (!string.IsNullOrEmpty(wmsData.Site)) ? wmsData.Site : wmsData.Domain }; qadDataList.Add(qadData); } wmsData.State = (int)BillState.Finish; wmsData.PutTime = DateTime.Now; } if (qadDataList.Count == 0) return; //if (qadDataList1.Count == 0) return; idb.xxscm_tx_mstr.AddRange(qadDataList); idb.PURReplenishQty.AddRange(qadDataList1); Console.WriteLine($"新增 发货单 数据:{qadDataList.Count} 条"); PutScpCtrl(idb, seq, tableName, qadDataList.Count, uni_api.Domain, uni_api.Site); } /// /// 采购订单 /// /// /// < param name="dataList"> private static void PutScmPo(UniApiEntities idb, List dataList) { var uni_api = dataList.FirstOrDefault(); string seq = string.Empty; if (dataList.Count > 0) { seq = CreateSeq(string.IsNullOrEmpty(uni_api.Domain) ? uni_api.Site : uni_api.Domain); } var tableName = ScmTableName.xxscm_pod_det.ToString(); var qadDataList = new List(); var qadDataList1 = new List(); foreach (var erpData in dataList) { string company =""; if (erpData.Site == "W21") { company = "F02W21"; } else { company = "F02U32"; } var qadData1 = qadDataList1.SingleOrDefault(p => p.outPurDocNO == erpData.BillNum && p.outPurDocItemNO == erpData.ErpLineNum.ToString() && p.mtlNO == erpData.PartCode&&p.ctype==erpData.Receiver&&p.groupWareMaterielNO==erpData.Extend1); if (qadData1 == null) { if (erpData.PartCode != null) qadData1 = new PURSubcontractors { docDate = erpData.CreateTime, returnsItem = erpData.Extend2, purDocItemCtg = erpData.Invoice, plant = erpData.Site, purOrg = erpData.Site, companyCode = company, mtlNO = erpData.PartCode, quantity = erpData.Qty, itemDeliveryDate = erpData.PutTime, price = erpData.Price, baseUnitMeasure = erpData.PoUnit, ordPriceUnit = erpData.Batch, vendorNO = erpData.VendId, purGrp = erpData.ModType, ctype = erpData.Receiver, measureBaseUnit = erpData.LocUnit, groupWareMaterielNO = erpData.Extend1, groupWarePlant = erpData.Site, compRequireDate = erpData.PutTime, COMPONQUANTITY = string.IsNullOrEmpty(erpData.ErpBillNum) ? 0 : decimal.Parse(erpData.ErpBillNum), outPurDocNO = erpData.BillNum, outPurDocItemNO = erpData.ErpLineNum.ToString(), ordType = erpData.Barcode, alternativeBOM = erpData.Currency, storeLocation=erpData.Extend3, createdBy=erpData.CreateOper, remark=erpData.Attn }; qadDataList1.Add(qadData1); } erpData.State = (int)BillState.Finish; erpData.PutTime = DateTime.Now; } foreach (var wmsData in dataList) { var qadData = qadDataList.SingleOrDefault(p => p.xxscm_pod_nbr == wmsData.BillNum && p.xxscm_pod_nbr == wmsData.BillNum && p.xxscm_pod_part == wmsData.PartCode && p.xxscm_pod_line == wmsData.ErpLineNum&&p.xxscm_pod_groupWareMaterielNO==wmsData.Extend1); if (qadData == null) { if (wmsData.PartCode != null) qadData = new xxscm_pod_det { xxscm_pod_seq = seq, xxscm_pod_nbr = wmsData.BillNum, xxscm_pod_part = wmsData.PartCode, xxscm_pod_line = wmsData.ErpLineNum, xxscm_pod_modtype = "2", xxscm_pod_site = wmsData.Site, xxscm_pod_domain = wmsData.Domain, xxscm_pod_qty_ord = wmsData.Qty, xxscm_pod_qty_rct = 0,//0 xxscm_pod_qty_std = 0,//0 xxscm_pod_due_date = wmsData.PutTime, xxscm_pod_price = wmsData.Price, xxscm_pod_loc_um = wmsData.PoUnit, xxscm_pod_um = wmsData.Batch, xxscm_pod_um_conv = 0,//0 xxscm_pod_vend = wmsData.VendId, xxscm_pod_ship = wmsData.Extend3, xxscm_pod_buyer = wmsData.Buyer, xxscm_pod_buyer_phone = wmsData.BuyerPhone, xxscm_pod_qadread = "0", xxscm_pod_wmsread = "0", xxscm_pod_scmread = "0", xxscm_pod_mesread = "0", xxscm_pod_createdt = wmsData.CreateTime, xxscm_pod_createur = wmsData.Buyer, xxscm_pod_groupWareMaterielNO = wmsData.Extend1, xxscm_pod_componquantity = wmsData.ErpBillNum, xxscm_pod_measureBaseUnit = wmsData.LocUnit, xxscm_pod_returnsItem = "N", xxscm_pod_status = "1", xxscm_pod_curr = "RMB", xxscm_pod_companyCode = wmsData.Receiver,//类型 xxscm_pod_ctype = wmsData.SubSite, xxscm_pod_ordType = wmsData.Currency,//版本号 xxscm_pod_purOrg = wmsData.Barcode }; qadDataList.Add(qadData); } wmsData.State = (int)BillState.Finish; wmsData.PutTime = DateTime.Now; } if (qadDataList.Count == 0) return; //if (qadDataList1.Count == 0) return; idb.xxscm_pod_det.AddRange(qadDataList); idb.PURSubcontractors.AddRange(qadDataList1); Console.WriteLine($"新增 采购订单 数据:{qadDataList.Count} 条"); PutScpCtrl(idb, seq, tableName, qadDataList.Count, uni_api.Domain, uni_api.Site); } /// /// 大订单 /// /// /// < param name="dataList"> private static void PutScmMaxPo(UniApiEntities idb, List dataList) { var uni_api = dataList.FirstOrDefault(); string seq = string.Empty; if (dataList.Count > 0) { seq = CreateSeq(string.IsNullOrEmpty(uni_api.Domain) ? uni_api.Site : uni_api.Domain); } var tableName = ScmTableName.xxscm_maxpod_det.ToString(); var qadDataList = new List(); foreach (var wmsData in dataList) { var qadData = qadDataList.SingleOrDefault(p => p.xxscm_maxpod_nbr == wmsData.BillNum && p.xxscm_maxpod_qty == wmsData.Qty && p.xxscm_maxpod_part == wmsData.PartCode && p.xxscm_maxpod_line == wmsData.ErpLineNum&&p.xxscm_maxpod_idention=="A"); if (qadData == null) { if (wmsData.PartCode != null) qadData = new xxscm_maxpod_det { xxscm_maxpod_seq = seq, xxscm_maxpod_nbr = wmsData.BillNum, xxscm_maxpod_line = wmsData.ErpLineNum, xxscm_maxpod_part=wmsData.PartCode, xxscm_maxpod_groupart = wmsData.Extend1,//子件物料号 xxscm_maxpod_qty=wmsData.Qty,//订货件数 xxscm_maxpod_orderqty=wmsData.PackQty,//起订量 xxscm_maxpod_orderqtyd=wmsData.Price,//订货量吨 xxscm_maxpod_orderqtykg=wmsData.Price*1000,//订货量千克 xxscm_maxpod_createtime=wmsData.CreateTime,//创建时间 xxscm_maxpod_createuser=wmsData.CreateOper,//创建者 xxscm_maxpod_month = wmsData.VendBatch,//合同月 xxscm_maxpod_Model=wmsData.Currency,//车型 xxscm_maxpod_texture=wmsData.Batch,//材质 xxscm_maxpod_testandard=wmsData.Buyer,//技术标准 xxscm_maxpod_forecastone=wmsData.PoUnit,//预测1 xxscm_maxpod_forecasttwo=wmsData.LocUnit,//预测2 xxscm_maxpod_forecastthree=wmsData.Attn,//预测3 xxscm_maxpod_forecastfour=wmsData.Receiver,//预测4 xxscm_maxpod_forecastfive=wmsData.ModType,//预测5 xxscm_maxpod_forecastsix=wmsData.SubSite,//预测6 xxscm_maxpod_site =wmsData.Site,//地点 xxscm_maxpod_domain = wmsData.Site,//域 xxscm_maxpod_idention=wmsData.Extend3,//类型 xxscm_maxpod_vend=wmsData.VendId,//供应商编号 xxscm_maxpod_manufacturer=wmsData.Extend2,//材料厂家 xxscm_maxpod_consumption=wmsData.TaxAmt,//单件消耗 }; qadDataList.Add(qadData); } wmsData.State = (int)BillState.Finish; wmsData.PutTime = DateTime.Now; } if (qadDataList.Count == 0) return; //if (qadDataList1.Count == 0) return; idb.xxscm_maxpod_det.AddRange(qadDataList); Console.WriteLine($"新增 大订单 数据:{qadDataList.Count} 条"); PutScpCtrl(idb, seq, tableName, qadDataList.Count, uni_api.Domain, uni_api.Site); } /// /// 条码 /// /// /// private static void PutScmBarcode(UniApiEntities idb, List dataList) { var tableName = ScmTableName.xxscm_tx_det.ToString(); var qadDataList = new List(); foreach (var wmsData in dataList) { var qadData = qadDataList.SingleOrDefault(p => p.xxscm_tx_nbr == wmsData.BillNum && p.xxscm_tx_boxcode == wmsData.Barcode); if (qadData == null) { qadData = new xxscm_tx_det { xxscm_tx_seq = CreateSeq(wmsData.Domain), xxscm_tx_nbr = wmsData.BillNum, xxscm_tx_part = wmsData.PartCode, xxscm_tx_qadread = ((int)UniApiState.待执行).ToString(), xxscm_tx_wmsread = ((int)UniApiState.待执行).ToString(), xxscm_tx_scmread = ((int)UniApiState.待执行).ToString(), xxscm_tx_mesread = ((int)UniApiState.待执行).ToString(), xxscm_tx_createur = wmsData.CreateOper, xxscm_tx_createdt = wmsData.CreateTime, xxscm_tx_updateur = "", xxscm_tx_updatedt = DateTime.Now, xxscm_tx_rmks = "", xxscm_tx_domain = wmsData.Domain, xxscm_tx_vend = wmsData.VendId, xxscm_tx_batch = wmsData.VendBatch, xxscm_tx_boxcode = wmsData.Barcode, xxscm_tx_qty_real = wmsData.Qty, }; qadDataList.Add(qadData); } wmsData.State = (int)BillState.Finish; wmsData.PutTime = DateTime.Now; } if (qadDataList.Count == 0) return; idb.xxscm_tx_det.AddRange(qadDataList); Console.WriteLine($"新增 条码 数据:{qadDataList.Count} 条"); } /// /// 发票 /// /// /// //private static void PutScmInvoice(UniApiEntities idb, List dataList) //{ // try // { // if (dataList.Count > 0) // { // var tableName = ScmTableName.xxscm_inv_det.ToString(); // var _ls = dataList.Select(p => p.BillNum).Distinct().ToList(); // foreach (var invBillNum in _ls) // { // var _invList = idb.xxscm_inv_det.Where(p => p.xxscm_inv_nbr == invBillNum).ToList(); // if (_invList.Count == 0) // { // var _unapiList = dataList.Where(p => p.BillNum == invBillNum).ToList(); // var _invbill = _invList.FirstOrDefault(); // if (_unapiList.Count > 0) // { // Thread.Sleep(10); // string seq = string.Empty; // var _api = _unapiList.FirstOrDefault(); // seq = CreateSeq(string.IsNullOrEmpty(_api.Domain) ? _api.Site : _api.Domain); // var qadDataList = new List(); // int i = 0; // _unapiList.ForEach(p => // { // if (!string.IsNullOrEmpty(p.Attn)) // { // var _invoice = JsonConvert.DeserializeObject(p.Attn); // try // { // if (p.SourceBillNum != p.ErpBillNum) // { // var qadData = new xxscm_inv_det(); // qadData.xxscm_inv_seq = seq; // qadData.xxscm_inv_nbr = p.BillNum; // qadData.xxscm_inv_site = p.Site; // qadData.xxscm_inv_part = p.PartCode; // qadData.xxscm_inv_qty = p.Qty; // qadData.xxscm_inv_qadread = ((int)UniApiState.待执行).ToString(); // qadData.xxscm_inv_wmsread = ((int)UniApiState.待执行).ToString(); // qadData.xxscm_inv_scmread = ((int)UniApiState.待执行).ToString(); // qadData.xxscm_inv_mesread = ((int)UniApiState.待执行).ToString(); // qadData.xxscm_inv_createur = p.CreateOper; // qadData.xxscm_inv_createdt = p.CreateTime; // qadData.xxscm_inv_updateur = ""; // qadData.xxscm_inv_updatedt = DateTime.Now; // qadData.xxscm_inv_rmks = ""; // qadData.xxscm_inv_domain = p.Domain; // qadData.xxscm_inv_amt = Math.Round(p.Price * p.Qty, 2); // qadData.xxscm_inv_asn = p.SourceBillNum; // qadData.xxscm_inv_curr = p.Currency == null ? "CNY" : p.Currency; // qadData.xxscm_inv_vend = p.VendId; // qadData.xxscm_inv_project = p.VendBatch;//代替项目传值 // qadData.xxscm_inv_line = p.ErpLineNum; // qadData.xxscm_inv_invoice = p.Invoice; // qadData.xxscm_inv_order = p.ErpBillNum; // qadData.xxscm_inv_price = p.Price; // qadData.xxscm_inv_taxamt = Math.Round(Math.Round(p.Price * p.Qty, 2) * p.Tax, 2) + Math.Round(p.Price * p.Qty, 2); // qadData.xxscm_inv_receiver = p.Receiver; // qadData.xxscm_inv_taxt = p.Tax; // qadData.xxscm_inv_comments = ""; // qadData.xxscm_inv_holdamt = 0; // qadData.xxscm_inv_acctuser = ""; // qadData.xxscm_inv_date = _invoice.UpdateTime == null ? _invoice.CreateTime.Value.AddDays(1) : _invoice.UpdateTime.Value; // qadData.xxscm_inv_totamt = _invoice.Amount.Value; // qadData.xxscm_inv_tottax = _invoice.Total.Value; // qadData.xxscm_inv_totdiscount = _invoice.DiscountPrice == null ? 0 : _invoice.DiscountPrice.Value;//折扣金额 // qadData.xxscm_inv_tottaxvar = _invoice.BlancePrice == null ? 0 : _invoice.BlancePrice.Value;//调整税额 // qadData.xxscm_inv_totclaim = _invoice.ContractPrice == null ? 0 : _invoice.ContractPrice.Value;//索赔金额 // qadData.xxscm_inv_extend1 = _invoice.Extend1 == null ? 0 : _invoice.Extend1.Value;//纸质发票税前金额 // qadData.xxscm_inv_extend2 = _invoice.Extend2 == null ? 0 : _invoice.Extend2.Value;//纸质发票税额 // qadDataList.Add(qadData); // p.State = (int)BillState.Finish; // p.PutTime = DateTime.Now; // i++; // } // } // catch (Exception e) // { // string s = e.Message + "行号" + i.ToString(); // } // } // }); // idb.xxscm_inv_det.AddRange(qadDataList); // Console.WriteLine($"新增 发票 数据:{qadDataList.Count} 条"); // PutScpCtrl(idb, seq, tableName, qadDataList.Count, _api.Domain, _api.Site); // } // } // } // } // } // catch (Exception e) // { // throw e; // } //} } }