using System; using System.Collections.Generic; using System.Data.Entity.Migrations; using System.Linq; using CK.SCP.Models; using CK.SCP.Models.Enums; using CK.SCP.Models.ScpEntity; using CK.SCP.Models.UniApiEntity; using CK.SCP.Utils; using System.Text; using System.Data.Entity.Core; using CK.SCP.Models.ScpEntity.ExcelExportEnttity; namespace CK.SCP.GrupUniApi.Controller { public static class OdbcApiWmsController { public static void GetNewCtrlList() { UniApiEntities idb = EntitiesFactory.CreateUniApiInstance(); idb.Database.CommandTimeout = 60 * 20; var tableNameList = EnumHelper.EnumToList(); List _lst = new List(); _lst.Add("xxwms_rc_det"); _lst.Add("xxwms_rt_det"); _lst.Add("xxwms_arv_det"); _lst.Add("xxwms_qua_det"); _lst.Add("xxwms_review_det"); var wmsCtrlList = idb.xxwms_ctrl.Where(p => p.xxwms_scm == "0" && _lst.Contains(p.xxwms_table)).ToList(); // var wmsCtrlList = idb.xxwms_ctrl.Where(p => p.xxwms_wms == "0").ToList(); //删除scp所有原料库存数据 if (GlobalVar.ApiConfig.Wms库存) { ScpEntities wdb = EntitiesFactory.CreateScpInstance(); var kucunlist = wmsCtrlList.Where(p => p.xxwms_table == "xxwms_ld_det").ToList(); //如果有库存数据 if (kucunlist.Count > 0) { var _stockList = wdb.TS_STOCK.ToList(); wdb.TS_STOCK.RemoveRange(_stockList); //EntitiesFactory.SaveDb(wdb); //取最近日期的流水号 xxwms_ctrl ctrl = idb.xxwms_ctrl.Where(p => p.xxwms_table == "xxwms_ld_det").OrderByDescending(p => p.xxwms_seq).FirstOrDefault(); if (ctrl != null && !string.IsNullOrEmpty(ctrl.xxwms_seq)) { Console.WriteLine($"发现 WMS 接口数据:{ctrl.xxwms_table}:{ctrl.xxwms_table_qty}"); UpdateMaterialStocks(idb, wdb, ctrl.xxwms_seq); EntitiesFactory.SaveDb(wdb); } } } Console.WriteLine($"调用WMS 接口数据:{wmsCtrlList.Count.ToString()}"); foreach (var wmsCtrl in wmsCtrlList) { int state = 0; if (tableNameList.All(p => p.Name != wmsCtrl.xxwms_table)) continue; try { ScpEntities wdb = EntitiesFactory.CreateScpInstance(); //Console.WriteLine($"发现 WMS 接口数据:{wmsCtrl.xxwms_table}:{wmsCtrl.xxwms_table_qty}"); WmsTableName wmsTableName; Enum.TryParse(wmsCtrl.xxwms_table, false, out wmsTableName); switch (wmsTableName) { case WmsTableName.xxwms_ld_det://原料库存 if (GlobalVar.ApiConfig.Wms库存) { //Console.WriteLine($"发现 WMS 接口数据:{wmsCtrl.xxwms_table}:{wmsCtrl.xxwms_table_qty}"); //UpdateMaterialStocks(idb, wdb, wmsCtrl.xxwms_seq); } else continue; break; case WmsTableName.xxwms_rc_det://接收收货单 //TODO if (GlobalVar.ApiConfig.Wms收货单) { Console.WriteLine($"发现 WMS 接口数据:{wmsCtrl.xxwms_table}:{wmsCtrl.xxwms_table_qty}"); AddMaterialReceive(idb, wdb, wmsCtrl.xxwms_seq, 0);//xxwms_seq:流水号 AddMaterialReturn_RC(idb, wdb, wmsCtrl.xxwms_seq, 1);//xxwms_seq:流水号 state = 1; } break; case WmsTableName.xxwms_rt_det: //TODO if (GlobalVar.ApiConfig.Wms退货单) { Console.WriteLine($"发现 WMS 接口数据:{wmsCtrl.xxwms_table}:{wmsCtrl.xxwms_table_qty}"); AddMaterialReturn(idb, wdb, wmsCtrl.xxwms_seq, 1);//xxwms_seq:流水号 } break; case WmsTableName.xxwms_arv_det: //TODO if (GlobalVar.ApiConfig.Wms到货单) { Console.WriteLine($"发现 WMS 接口数据:{wmsCtrl.xxwms_table}:{wmsCtrl.xxwms_table_qty}"); AddMaterialArrive(idb, wdb, wmsCtrl.xxwms_seq);//xxwms_seq:流水号 } break; case WmsTableName.xxwms_qua_det: //TODO if (GlobalVar.ApiConfig.Wms库存质量) { Console.WriteLine($"发现 WMS 接口数据:{wmsCtrl.xxwms_table}:{wmsCtrl.xxwms_table_qty}"); AddMaterialQuality(idb, wdb, wmsCtrl.xxwms_seq); } break; case WmsTableName.xxwms_review_det: //TODO if (GlobalVar.ApiConfig.Wms评审单) { Console.WriteLine($"发现 WMS 接口数据:{wmsCtrl.xxwms_table}:{wmsCtrl.xxwms_table_qty}"); AddReview(idb, wdb, wmsCtrl.xxwms_seq); } break; } wmsCtrl.xxwms_scm = ((int)UniApiState.成功).ToString(); EntitiesFactory.SaveDb(wdb); } catch (System.Data.Entity.Validation.DbEntityValidationException dbEx)//捕获实体验证异常 { var sb = new StringBuilder(); foreach (var error in dbEx.EntityValidationErrors.ToList()) { error.ValidationErrors.ToList().ForEach(i => { sb.AppendFormat("表:{0},字段:{1},信息:{2}\r\n", error.Entry.Entity.GetType().Name, i.PropertyName, i.ErrorMessage); }); } wmsCtrl.xxwms_scm = ((int)UniApiState.失败).ToString(); wmsCtrl.xxwms_rmks += " SCM:" + sb.ToString(); } catch (OptimisticConcurrencyException ex)//并发冲突异常 { wmsCtrl.xxwms_scm = ((int)UniApiState.失败).ToString(); wmsCtrl.xxwms_rmks += " SCM:" + ex.Message; } catch (Exception ex) { wmsCtrl.xxwms_scm = ((int)UniApiState.失败).ToString(); wmsCtrl.xxwms_rmks += " SCM:" + ex.Message; } finally { EntitiesFactory.SaveDb(idb); if (wmsCtrl.xxwms_scm == "1" && state==1) { UpdateReceive(wmsCtrl.xxwms_seq); } } } } /// /// 更新原料库存 /// /// /// /// private static void UpdateMaterialStocks(UniApiEntities idb, ScpEntities wdb, string seq) { var wmsld_detList = idb.xxwms_ld_det.Where(p => p.xxwms_ld_seq == seq).ToList(); var scpRcvList = new List(); foreach (var wmsld_detData in wmsld_detList) { var scpRcv = new TS_STOCK { BarCode = wmsld_detData.xxwms_ld_barcode,//标签号 Site = wmsld_detData.xxwms_ld_domain,//工厂 PartCode = wmsld_detData.xxwms_ld_part,//零件号 VendId = wmsld_detData.xxwms_ld_vend,//供应商编号 LocCode = wmsld_detData.xxwms_ld_loc,//库位 Batch = wmsld_detData.xxwms_ld_lot,//批次 VendBatch = wmsld_detData.xxwms_ld_vend_batch,//供应商批次 Qty = wmsld_detData.xxwms_ld_qty,//数量 ReceiveDate = wmsld_detData.xxwms_ld_date,//收货日期 ProduceDate = wmsld_detData.xxwms_ld_time,//生产时间 LocUnit = wmsld_detData.xxwms_ld_um,//单位 Remark = "",//备注 State = (int)FormState.关闭, CreateTime = wmsld_detData.xxwms_ld_createdt == null ? DateTime.Now : (DateTime)wmsld_detData.xxwms_ld_createdt,//创建日期 CreateUser = wmsld_detData.xxwms_ld_createur//创建用户 }; scpRcvList.Add(scpRcv); } wdb.TS_STOCK.AddOrUpdate(scpRcvList.ToArray()); Console.WriteLine($"更新 原料库存 数据:{wmsld_detList.Count}"); } private static void UpdateReceive(string p_seq) { ScpEntities scpdb = EntitiesFactory.CreateScpInstance(); UniApiEntities idb = EntitiesFactory.CreateUniApiInstance(); try { string _sql = "Update TB_ASN_DETAIL set extend1=recqty from tb_asn_detail D inner join\n" + " (SELECT SUM(a.Qty) AS RecQty, a.AsnBillNum, a.PoLine, a.PartCode, a.PoBillNum,a.batch\n" + " FROM V_TB_RECEIVE_DETAIL AS a INNER JOIN\n" + " TB_ASN_DETAIL AS B ON a.AsnBillNum = B.AsnBillNum AND a.PoLine = B.PoLine AND\n" + " a.PartCode = B.PartCode AND a.PoBillNum = B.PoBillNum and a.Batch=b.Batch\n" + " where a.AsnBillNum in ({0})\n" + " GROUP BY a.AsnBillNum, a.PoLine, a.PartCode, a.PoBillNum,a.Batch) AS C on D.AsnBillNum = C.AsnBillNum AND D.PoLine = C.PoLine AND\n" + " D.PartCode = C.PartCode AND D.PoBillNum = C.PoBillNum and D.Batch=C.Batch"; var qadRcvDetailList = idb.xxwms_rc_det.Where(p => p.xxwms_rc_seq == p_seq && p.xxwms_rc_qty_total >= 0).ToList(); var _lst = qadRcvDetailList.Select(p => p.xxwms_rc_ps_nbr).ToList().Distinct(); if (_lst.Count() > 0) { var _list = new List(); foreach (var itm in _lst) { _list.Add(string.Format("'{0}'", itm)); } scpdb.Database.ExecuteSqlCommand(_sql, string.Join(",", _list)); } } catch (Exception e) { } finally { EntitiesFactory.SaveDb(idb); EntitiesFactory.SaveDb(scpdb); } } /// ///接收收货单 /// /// /// /// 流水号 /// 0:收货,1:退货 private static void AddMaterialReceive(UniApiEntities idb, ScpEntities wdb, string seq, int billtype) { var qadRcvDetailList = idb.xxwms_rc_det.Where(p => p.xxwms_rc_seq == seq&&p.xxwms_rc_qty_total>=0).ToList(); var scpRcvList = new List(); var scpRcveDetailList = new List(); var scpMaxPoDetailList = new List(); var scpConSumeList = new List(); //根据xxwms_rc_po_nbr采购单字段去重 var qadReceiveNbrList = qadRcvDetailList.Select(p => p.xxwms_rc_nbr.ToUpper()).DistinctBy(p => p); foreach (var qadRcvNbrList in qadReceiveNbrList) { //qadRcvDetailList同一xxqad_prh_receiver所有记录 var qadDataList = qadRcvDetailList.Where(p => p.xxwms_rc_nbr == qadRcvNbrList ).ToList(); if (qadDataList.Count == 0) { continue; } var firstqadData = qadDataList[0]; List _lsQty = new List(); var scpRcv = wdb.TB_RECEIVE.SingleOrDefault(p => p.RecvBillNum != null && p.RecvBillNum == qadRcvNbrList && p.Site==firstqadData.xxwms_rc_domain); //判断0100工厂的收货自动审核是否为允许 bool isRerviceOk = false; if (!string.IsNullOrEmpty(firstqadData.xxwms_rc_domain)) { string site = firstqadData.xxwms_rc_domain;//0100 List configs = wdb.TA_FACTORY_CONFIG.Where(p => p.FactoryId == site).ToList(); foreach (TA_FACTORY_CONFIG cfg in configs) { TA_CONFIG tacfg = wdb.TA_CONFIG.Where(p => p.UID == cfg.ConfigId).SingleOrDefault(); if(tacfg != null && !string.IsNullOrEmpty(tacfg.ParamName) && tacfg.ParamName == "收货自动审核") { if ("允许" == tacfg.ParamValue) { isRerviceOk = true; } } } } if (scpRcv == null) { int istate = 0; if (isRerviceOk == false) { istate = (int)FormState.关闭; } else { istate = (int)FormState.开放; } scpRcv = new TB_RECEIVE { RecvBillNum = qadRcvNbrList,//收货单号 State = istate, Remark = "", CreateTime = firstqadData.xxwms_rc_createdt == null ? DateTime.Now : (DateTime)firstqadData.xxwms_rc_createdt,//创建日期 CreateUser = firstqadData.xxwms_rc_createur,//创建用户 IsDeleted = false, GUID = System.Guid.NewGuid(), BillType = billtype }; scpRcvList.Add(scpRcv); } scpRcv.PoBillNum = firstqadData.xxwms_rc_po_nbr;//采购单 scpRcv.AsnBillNum = firstqadData.xxwms_rc_ps_nbr;//发货单号 scpRcv.Site = firstqadData.xxwms_rc_domain;//地点 scpRcv.VendId = firstqadData.xxwms_rc_vend;//供货商名称 scpRcv.ShipTime = firstqadData.xxwms_rc_date_ship;//收货日期 scpRcv.SubSite = !string.IsNullOrEmpty(firstqadData.xxwms_rc_site)? firstqadData.xxwms_rc_site: firstqadData.xxwms_rc_domain; //var scpAsn = wdb.TF_ASN.FirstOrDefault(p => p.BillNum == scpRcv.AsnBillNum); var scpAsn = wdb.TB_ASN.Where(p => p.AsnBillNum== scpRcv.AsnBillNum && p.IsDeleted==false).ToList();//发货单主表订单号==收货单主表发货单号 if (scpAsn != null && scpAsn.Count>0) { scpAsn.ForEach(p => { p.State = (int)AsnState.Receive; }); wdb.TB_ASN.AddOrUpdate(scpAsn.ToArray()); } var scpAsnDetail = wdb.TB_ASN_DETAIL.Where(p => p.AsnBillNum == scpRcv.AsnBillNum && p.IsDeleted == false).ToList(); if (scpAsnDetail != null && scpAsnDetail.Count > 0) { scpAsnDetail.ForEach(p => { p.State = (int)AsnState.Receive; }); wdb.TB_ASN_DETAIL.AddOrUpdate(scpAsnDetail.ToArray()); } foreach (var qadData in qadDataList) { try { if (qadData.xxwms_rc_domain == "W21") { var Po = wdb.TB_PO.FirstOrDefault(p => p.PoBillNum == qadData.xxwms_rc_po_nbr); if (Po != null) { if (Po.UpdateInfo == "Y") { string[] arr = qadData.xxwms_rc_ware_class.Split(';'); foreach (var ar in arr) { if (ar != "") { string[] arrr = ar.Split('-'); string pobillnum = arrr[0]; decimal qty = decimal.Parse(arrr[1]); var maxpodetail = wdb.TB_MAXPO_DETAIL.FirstOrDefault(p => p.PartCode == qadData.xxwms_rc_part && p.PoBillNum == pobillnum); if (maxpodetail != null) { maxpodetail.ReceQty = maxpodetail.ReceQty + qty; scpMaxPoDetailList.Add(maxpodetail); TB_MAXPO_CONSUME cONSUME = new TB_MAXPO_CONSUME(); cONSUME.PoBillNum = pobillnum; cONSUME.BillNum = qadData.xxwms_rc_nbr; cONSUME.PartCode = qadData.xxwms_rc_part; cONSUME.VendId = maxpodetail.VendId; cONSUME.PoQty = qty; cONSUME.ShipTime = qadData.xxwms_rc_date_ship; scpConSumeList.Add(cONSUME); } } } } } else { if (!string.IsNullOrEmpty(qadData.xxwms_rc_ware_class)) { string[] arr = qadData.xxwms_rc_ware_class.Split(';'); foreach (var ar in arr) { if (ar != "") { string[] arrr = ar.Split('-'); string pobillnum = arrr[0]; decimal qty = decimal.Parse(arrr[1]); var maxpodetail = wdb.TB_MAXPO_DETAIL.FirstOrDefault(p => p.PartCode == qadData.xxwms_rc_part && p.PoBillNum == pobillnum); if (maxpodetail != null) { maxpodetail.ReturnQty = maxpodetail.ReturnQty - qty; scpMaxPoDetailList.Add(maxpodetail); TB_MAXPO_CONSUME cONSUME = new TB_MAXPO_CONSUME(); cONSUME.PoBillNum = pobillnum; cONSUME.BillNum = qadData.xxwms_rc_nbr; cONSUME.PartCode = qadData.xxwms_rc_part; cONSUME.VendId = maxpodetail.VendId; cONSUME.PoQty = -qty; cONSUME.ShipTime = qadData.xxwms_rc_date_ship; scpConSumeList.Add(cONSUME); } } } } } } var poLineNum = Convert.ToInt32(qadData.xxwms_rc_po_line); var scpRcvDetail = wdb.TB_RECEIVE_DETAIL.SingleOrDefault( p => p.RecvBillNum == qadRcvNbrList && p.PoBillNum == qadData.xxwms_rc_po_nbr && p.PoLine == poLineNum && p.PartCode == qadData.xxwms_rc_part && p.Batch == qadData.xxwms_rc_lot ); if (scpRcvDetail == null) { int istate = 0; if (isRerviceOk == false) { istate = (int)FormState.关闭; } else { istate = (int)FormState.开放; } scpRcvDetail = new TB_RECEIVE_DETAIL { RecvBillNum = qadRcvNbrList,//收货单号 PoBillNum = qadData.xxwms_rc_po_nbr,//采购单 PoLine = poLineNum,//订单行 PartCode = qadData.xxwms_rc_part,//零件号 Batch = qadData.xxwms_rc_lot,//批次 VendBatch = qadData.xxwms_rc_vend_batch,//供应商批号 PoUnit = qadData.xxwms_rc_po_um,//采购单位 LocUnit = qadData.xxwms_rc_loc_um,//基本单位 Qty = qadData.xxwms_rc_qty_total,//收货总量 DockCode = qadData.xxwms_rc_loc,//收货口 State = istate,// (int)FormState.关闭, Site = firstqadData.xxwms_rc_domain, SubSite = !string.IsNullOrEmpty(firstqadData.xxwms_rc_site) ? firstqadData.xxwms_rc_site : firstqadData.xxwms_rc_domain, CreateTime = qadData.xxwms_rc_createdt == null ? DateTime.Now : (DateTime)qadData.xxwms_rc_createdt,//创建日期 CreateUser = qadData.xxwms_rc_createur,//创建用户 Extend1 = qadData.xxwms_rc_ps_nbr,//发货单号 IsDeleted = false, GUID = System.Guid.NewGuid(), BillType = billtype }; scpRcveDetailList.Add(scpRcvDetail); } qadData.xxwms_rc_wmsread = ((int)UniApiState.成功).ToString(); } catch (Exception ex) { qadData.xxwms_rc_wmsread = ((int)UniApiState.失败).ToString(); qadData.xxwms_rc_rmks += " SCM:" + ex.Message; } qadData.xxwms_rc_updateur = ScpCache.Config.SCP用户名; qadData.xxwms_rc_updatedt = DateTime.Now; } } wdb.TB_RECEIVE.AddOrUpdate(scpRcvList.ToArray()); wdb.TB_RECEIVE_DETAIL.AddOrUpdate(scpRcveDetailList.ToArray()); wdb.TB_MAXPO_DETAIL.AddOrUpdate(scpMaxPoDetailList.ToArray()); wdb.TB_MAXPO_CONSUME.AddOrUpdate(scpConSumeList.ToArray()); Console.WriteLine($"更新 收货单 数据:{qadRcvDetailList.Count}"); } /// /// 接收退货单 /// private static void AddMaterialReturn_RC(UniApiEntities idb, ScpEntities wdb, string seq, int billtype) { var qadRcvDetailList = idb.xxwms_rc_det.Where(p => p.xxwms_rc_seq == seq && p.xxwms_rc_qty_total < 0).ToList(); var scpRcvList = new List(); var scpRcveDetailList = new List(); //根据xxqad_prh_receiver字段去重 var qadReceiveNbrList = qadRcvDetailList.Select(p => p.xxwms_rc_nbr.ToUpper()).DistinctBy(p => p); foreach (var qadRcvNbrList in qadReceiveNbrList) { //qadRcvDetailList同一xxqad_prh_receiver所有记录 var qadDataList = qadRcvDetailList.Where(p => p.xxwms_rc_nbr == qadRcvNbrList).ToList(); if (qadDataList.Count == 0) { continue; } var firstqadData = qadDataList[0]; var scpRcv = wdb.TB_RECEIVE.SingleOrDefault(p => p.RecvBillNum == qadRcvNbrList && p.Site == firstqadData.xxwms_rc_domain); //判断0100工厂的收货自动审核是否为允许 bool isRerviceOk = false; if (!string.IsNullOrEmpty(firstqadData.xxwms_rc_domain)) { string site = firstqadData.xxwms_rc_domain;//0100 List configs = wdb.TA_FACTORY_CONFIG.Where(p => p.FactoryId == site).ToList(); foreach (TA_FACTORY_CONFIG cfg in configs) { TA_CONFIG tacfg = wdb.TA_CONFIG.Where(p => p.UID == cfg.ConfigId).SingleOrDefault(); if (tacfg != null && !string.IsNullOrEmpty(tacfg.ParamName) && tacfg.ParamName == "收货自动审核") { if ("允许" == tacfg.ParamValue) { isRerviceOk = true; } } } } if (scpRcv == null) { int istate = 0; if (isRerviceOk == false) { istate = (int)FormState.关闭; } else { istate = (int)FormState.开放; } scpRcv = new TB_RECEIVE { RecvBillNum = qadRcvNbrList,//退货单号 State = istate, Remark = "", Site = firstqadData.xxwms_rc_domain, CreateTime = firstqadData.xxwms_rc_createdt == null ? DateTime.Now : (DateTime)firstqadData.xxwms_rc_createdt,//创建日期 CreateUser = firstqadData.xxwms_rc_createur,//创建用户 IsDeleted = false, GUID = System.Guid.NewGuid(), BillType = billtype }; scpRcvList.Add(scpRcv); } scpRcv.PoBillNum = firstqadData.xxwms_rc_po_nbr;//采购单 //scpRcv.AsnBillNum = firstqadData.xxqad_prh_psnbr;//发货单号 scpRcv.Site = firstqadData.xxwms_rc_domain;//地点 scpRcv.VendId = firstqadData.xxwms_rc_vend;//供货商名称 scpRcv.ShipTime = firstqadData.xxwms_rc_date_ship;//收货日期 scpRcv.SubSite = !string.IsNullOrEmpty(firstqadData.xxwms_rc_site) ? firstqadData.xxwms_rc_site : firstqadData.xxwms_rc_domain; //var scpAsn = wdb.TF_ASN.FirstOrDefault(p => p.BillNum == scpRcv.AsnBillNum); var scpAsn = wdb.TB_ASN.FirstOrDefault(p => p.PoBillNum == scpRcv.AsnBillNum);//发货单主表订单号==退货单主表发货单号 if (scpAsn != null) scpAsn.State = (int)ShipState.Reject; foreach (var qadData in qadDataList) { try { var poLineNum = Convert.ToInt32(qadData.xxwms_rc_po_line); var scpRcvDetail = wdb.TB_RECEIVE_DETAIL.SingleOrDefault( p => p.RecvBillNum == qadRcvNbrList && p.PoBillNum == qadData.xxwms_rc_po_nbr && p.PoLine == poLineNum && p.PartCode == qadData.xxwms_rc_part && p.Batch == qadData.xxwms_rc_lot); if (scpRcvDetail == null) { int istate = 0; if (isRerviceOk == false) { istate = (int)FormState.关闭; } else { istate = (int)FormState.开放; } scpRcvDetail = new TB_RECEIVE_DETAIL { RecvBillNum = qadRcvNbrList,//退货单号码 PoBillNum = qadData.xxwms_rc_po_nbr,//采购单 PoLine = poLineNum,//订单行 PartCode = qadData.xxwms_rc_part,//物料号 Batch = qadData.xxwms_rc_lot,//批次 VendBatch = qadData.xxwms_rc_vend_batch,//供应商批号 PoUnit = qadData.xxwms_rc_po_um,//采购单位 LocUnit = qadData.xxwms_rc_loc_um,//基本单位 Qty = qadData.xxwms_rc_qty_total,//退货总量 DockCode = qadData.xxwms_rc_loc,//收货口 State = istate,// (int)FormState.关闭, Site = firstqadData.xxwms_rc_domain, SubSite = firstqadData.xxwms_rc_site, CreateTime = qadData.xxwms_rc_createdt == null ? DateTime.Now : (DateTime)qadData.xxwms_rc_createdt,//创建日期 CreateUser = qadData.xxwms_rc_createur,//创建用户 IsDeleted = false, GUID = System.Guid.NewGuid(), BillType = billtype }; scpRcveDetailList.Add(scpRcvDetail); } //var scpPoDetail = // wdb.TB_PO_DETAIL.FirstOrDefault( // p => p.PoBillNum == qadData.xxwms_rt_po_nbr && p.PoLine == poLineNum); //if (scpPoDetail != null) //{ // //订单明细RejectQty已退数量 += 退货明细Qty已结束量 // scpPoDetail.RejectQty -= scpRcvDetail.Qty; //} //var scpPo = wdb.TB_PO.FirstOrDefault(p => p.ErpBillNum == qadData.xxwms_rt_po_nbr); //if (scpPo != null) //{ // //订单明细 // var scpPoDetails = wdb.TB_PO_DETAIL.Where(p => p.PoBillNum == qadData.xxwms_rt_po_nbr); // //if (scpPoDetails.All(p => p.BillQty == p.ReceivedQty)) // // scpPo.State = (int)PlanState.Complete; // if (scpPoDetails.All(p => p.PlanQty == p.ReceivedQty)) //订货数量==已收数量 // scpPo.State = (int)PlanState.Complete; //} qadData.xxwms_rc_wmsread = ((int)UniApiState.成功).ToString(); } catch (Exception ex) { qadData.xxwms_rc_wmsread = ((int)UniApiState.失败).ToString(); qadData.xxwms_rc_rmks += " SCM:" + ex.Message; } qadData.xxwms_rc_updateur = ScpCache.Config.SCP用户名; qadData.xxwms_rc_updatedt = DateTime.Now; } } wdb.TB_RECEIVE.AddOrUpdate(scpRcvList.ToArray()); wdb.TB_RECEIVE_DETAIL.AddOrUpdate(scpRcveDetailList.ToArray()); Console.WriteLine($"更新 退货单 数据:{qadRcvDetailList.Count}"); } #region WMS库存质量 private static void AddMaterialQuality(UniApiEntities idb, ScpEntities sdb, string seq) { var wms_qualList = idb.xxwms_qua_det.Where(p => p.xxwms_qua_seq == seq).ToList(); if (seq == "QUA_CNS_190219_13553074281") { string str = seq; } var _qualList = new List(); foreach (var itm in wms_qualList) { var scpQual = new TB_QUALITY(); scpQual.Type = itm.xxwms_qua_infotype; scpQual.Barcode = itm.xxwms_qua_barcode; scpQual.Loccode = itm.xxwms_qua_loccode; scpQual.Pobillnum = itm.xxwms_qua_pobillnum; scpQual.QualityNo = itm.xxwms_qua_nbr; scpQual.Poline = (decimal)itm.xxwms_qua_poline; scpQual.Inspecttype = itm.xxwms_qua_inspecttype; scpQual.Partcode = itm.xxwms_qua_partcode; scpQual.Batch = itm.xxwms_qua_batch; scpQual.ReceiveQty = itm.xxwms_qua_receiveqty; scpQual.SampleQty = itm.xxwms_qua_sampleqty; scpQual.Inspqty = itm.xxwms_qua_inspqty; scpQual.Passqty = itm.xxwms_qua_passqty; scpQual.Failqty = itm.xxwms_qua_failqty; scpQual.Crackqty = itm.xxwms_qua_crackqty; scpQual.Inspresult = itm.xxwms_qua_inspresult; scpQual.Failreason = itm.xxwms_qua_failreason; scpQual.Vendid = itm.xxwms_qua_vendid; scpQual.Vendbatch = itm.xxwms_qua_vendbatch; scpQual.state = itm.xxwms_qua_state; scpQual.Billtime = itm.xxwms_qua_billtime; scpQual.Domain = itm.xxwms_qua_domain; scpQual.Site = itm.xxwms_qua_domain; scpQual.By1 = itm.xxwms_qua_by1; scpQual.By2 = itm.xxwms_qua_by2; scpQual.By3 = itm.xxwms_qua_by3; scpQual.CreateTime = itm.xxwms_qua_createdt??DateTime.Now; scpQual.CreateUser = itm.xxwms_qua_createur; scpQual.UpdateTime = itm.xxwms_qua_updatedt; scpQual.UpdateUser = itm.xxwms_qua_updateur; scpQual.GUID = Guid.NewGuid(); _qualList.Add(scpQual); sdb.TB_QUALITY.Add(scpQual); } //sdb.TB_QUALITY.Add(_qualList.ToArray()); Console.WriteLine($"更新质量库数据:{_qualList.Count}"); } #endregion #region pnigshen private static void AddReview(UniApiEntities idb, ScpEntities sdb, string seq) { var wms_qualList = idb.xxwms_review_det.Where(p => p.xxwms_review_seq == seq).ToList(); var _qualList = new List(); foreach (var itm in wms_qualList) { var _entity=sdb.TM_HYANTOLIN_REVIEW.Where(p => p.ReviewBillNum == itm.xxwms_review_nbr && p.Domain == itm.xxwms_review_domain).FirstOrDefault(); if (_entity == null) { _entity = new TM_HYANTOLIN_REVIEW(); if (!string.IsNullOrEmpty(itm.xxwms_review_reviewtype)) { _entity.ReviewType = (EnumReviewType)int.Parse(itm.xxwms_review_reviewtype.ToString()); } if (!string.IsNullOrEmpty(itm.xxwms_review_reviewsite)) { _entity.ReviewSite = (EnumReviewSite)int.Parse(itm.xxwms_review_reviewsite.ToString()); } } _entity.ReviewBillNum = itm.xxwms_review_nbr; _entity.RelationReviewNo = itm.xxwms_review_relationnbr; _entity.BarCode = itm.xxwms_review_barcode; _entity.PartCode = itm.xxwms_review_partcode; _entity.Batch = itm.xxwms_review_batch; _entity.ProjectId = itm.xxwms_review_projectid; _entity.Qty = itm.xxwms_review_qty; _entity.BadCouse = itm.xxwms_review_badcouse; _entity.ReviewResult = itm.xxwms_review_reviewresult; _entity.UltimateDepart = itm.xxwms_review_ultimatedepart; _entity.UltimateName = itm.xxwms_review_ultimatename; _entity.ClaimAmount =itm.xxwms_review_claimamount; _entity.OperName = itm.xxwms_review_opername; _entity.BillDate = itm.xxwms_review_billdate; _entity.CreateTime = itm.xxwms_review_createtime; _entity.ReviewTime = itm.xxwms_review_reviewtime; _entity.Domain = itm.xxwms_review_domain; //var partcode=sdb.V_TB_PO_DETAIL.Where(p => p.Site == _entity.Domain && p.PartCode == _entity.PartCode).FirstOrDefault(); //if (partcode != null) //{ // _entity.UltimateName = partcode.VendId; //} _entity.Guid = Guid.NewGuid(); _qualList.Add(_entity); //sdb.TB_QUALITY.Add(scpQual); } sdb.TM_HYANTOLIN_REVIEW.AddOrUpdate(_qualList.ToArray()); Console.WriteLine($"更新质量库数据:{_qualList.Count}"); } #endregion /// /// 接收退货单 /// private static void AddMaterialReturn(UniApiEntities idb, ScpEntities wdb, string seq, int billtype) { //var qadRcvDetailList = idb.xxqad_prh_det.Where(p => p.xxqad_prh_seq == seq).ToList(); var qadRcvDetailList = idb.xxwms_rt_det.Where(p => p.xxwms_rt_seq == seq).ToList(); var scpRcvList = new List(); var scpRcveDetailList = new List(); var scpMaxPoDetailList = new List(); var scpConSumeList = new List(); //根据xxqad_prh_receiver字段去重 var qadReceiveNbrList = qadRcvDetailList.Select(p => p.xxwms_rt_nbr.ToUpper()).DistinctBy(p => p); foreach (var qadRcvNbrList in qadReceiveNbrList) { //qadRcvDetailList同一xxqad_prh_receiver所有记录 var qadDataList = qadRcvDetailList.Where(p => p.xxwms_rt_nbr == qadRcvNbrList ).ToList(); if (qadDataList.Count == 0) { continue; } var firstqadData = qadDataList[0]; var scpRcv = wdb.TB_RECEIVE.SingleOrDefault(p => p.RecvBillNum == qadRcvNbrList && p.Site ==firstqadData.xxwms_rt_domain); //判断0100工厂的收货自动审核是否为允许 bool isRerviceOk = false; if (!string.IsNullOrEmpty(firstqadData.xxwms_rt_domain)) { string site = firstqadData.xxwms_rt_domain;//0100 List configs = wdb.TA_FACTORY_CONFIG.Where(p => p.FactoryId == site).ToList(); foreach (TA_FACTORY_CONFIG cfg in configs) { TA_CONFIG tacfg = wdb.TA_CONFIG.Where(p => p.UID == cfg.ConfigId).SingleOrDefault(); if (tacfg != null && !string.IsNullOrEmpty(tacfg.ParamName) && tacfg.ParamName == "收货自动审核") { if ("允许" == tacfg.ParamValue) { isRerviceOk = true; } } } } if (scpRcv == null) { int istate = 0; if (isRerviceOk == false) { istate = (int)FormState.关闭; } else { istate = (int)FormState.开放; } scpRcv = new TB_RECEIVE { RecvBillNum = qadRcvNbrList,//退货单号 State = istate, Remark = "", CreateTime = firstqadData.xxwms_rt_createdt == null ? DateTime.Now : (DateTime)firstqadData.xxwms_rt_createdt,//创建日期 CreateUser = firstqadData.xxwms_rt_createur,//创建用户 IsDeleted = false, GUID = System.Guid.NewGuid(), BillType = billtype }; scpRcvList.Add(scpRcv); } scpRcv.PoBillNum = firstqadData.xxwms_rt_po_nbr;//采购单 //scpRcv.AsnBillNum = firstqadData.xxqad_prh_psnbr;//发货单号 scpRcv.Site = firstqadData.xxwms_rt_domain;//地点 scpRcv.VendId = firstqadData.xxwms_rt_vend;//供货商名称 scpRcv.ShipTime = firstqadData.xxwms_rt_date_ship;//收货日期 scpRcv.SubSite = !string.IsNullOrEmpty(firstqadData.xxwms_rt_site)? firstqadData.xxwms_rt_site: firstqadData.xxwms_rt_domain; //var scpAsn = wdb.TF_ASN.FirstOrDefault(p => p.BillNum == scpRcv.AsnBillNum); var scpAsn = wdb.TB_ASN.FirstOrDefault(p => p.PoBillNum == scpRcv.AsnBillNum);//发货单主表订单号==退货单主表发货单号 if (scpAsn != null) scpAsn.State = (int)ShipState.Reject; foreach (var qadData in qadDataList) { try { if (qadData.xxwms_rt_domain == "W21") { var Po = wdb.TB_PO.FirstOrDefault(p => p.PoBillNum == qadData.xxwms_rt_po_nbr); if (Po != null) { if (Po.UpdateInfo == "Y") { string[] arr = qadData.xxwms_rt_ware_class.Split(';'); foreach (var ar in arr) { if (ar != "") { string[] arrr = ar.Split('-'); string pobillnum = arrr[0]; decimal qty = decimal.Parse(arrr[1]); var maxpodetail = wdb.TB_MAXPO_DETAIL.FirstOrDefault(p => p.PartCode == qadData.xxwms_rt_part && p.PoBillNum == pobillnum); if (maxpodetail != null) { maxpodetail.ReturnQty = maxpodetail.ReturnQty -qty; scpMaxPoDetailList.Add(maxpodetail); TB_MAXPO_CONSUME cONSUME = new TB_MAXPO_CONSUME(); cONSUME.PoBillNum = pobillnum; cONSUME.BillNum = qadData.xxwms_rt_nbr; cONSUME.PartCode = qadData.xxwms_rt_part; cONSUME.VendId = maxpodetail.VendId; cONSUME.PoQty = -qty; cONSUME.ShipTime = qadData.xxwms_rt_date_ship; scpConSumeList.Add(cONSUME); } } } } } } var poLineNum = Convert.ToInt32(qadData.xxwms_rt_po_line); var scpRcvDetail = wdb.TB_RECEIVE_DETAIL.SingleOrDefault( p => p.RecvBillNum == qadRcvNbrList && p.PoBillNum == qadData.xxwms_rt_po_nbr && p.PoLine == poLineNum && p.PartCode == qadData.xxwms_rt_part && p.Batch == qadData.xxwms_rt_lot); if (scpRcvDetail == null) { int istate = 0; if (isRerviceOk == false) { istate = (int)FormState.关闭; } else { istate = (int)FormState.开放; } scpRcvDetail = new TB_RECEIVE_DETAIL { RecvBillNum = qadRcvNbrList,//退货单号码 PoBillNum = qadData.xxwms_rt_po_nbr,//采购单 PoLine = poLineNum,//订单行 PartCode = qadData.xxwms_rt_part,//物料号 Batch = qadData.xxwms_rt_lot,//批次 VendBatch = qadData.xxwms_rt_vend_batch,//供应商批号 PoUnit = qadData.xxwms_rt_po_um,//采购单位 LocUnit = qadData.xxwms_rt_loc_um,//基本单位 Qty = qadData.xxwms_rt_qty_total,//退货总量 State = istate,// (int)FormState.关闭, Site = firstqadData.xxwms_rt_domain, SubSite=firstqadData.xxwms_rt_site, CreateTime = qadData.xxwms_rt_createdt == null ? DateTime.Now : (DateTime)qadData.xxwms_rt_createdt,//创建日期 CreateUser = qadData.xxwms_rt_createur,//创建用户 IsDeleted = false, GUID = System.Guid.NewGuid(), BillType = billtype }; scpRcveDetailList.Add(scpRcvDetail); } //var scpPoDetail = // wdb.TB_PO_DETAIL.FirstOrDefault( // p => p.PoBillNum == qadData.xxwms_rt_po_nbr && p.PoLine == poLineNum); //if (scpPoDetail != null) //{ // //订单明细RejectQty已退数量 += 退货明细Qty已结束量 // scpPoDetail.RejectQty -= scpRcvDetail.Qty; //} //var scpPo = wdb.TB_PO.FirstOrDefault(p => p.ErpBillNum == qadData.xxwms_rt_po_nbr); //if (scpPo != null) //{ // //订单明细 // var scpPoDetails = wdb.TB_PO_DETAIL.Where(p => p.PoBillNum == qadData.xxwms_rt_po_nbr); // //if (scpPoDetails.All(p => p.BillQty == p.ReceivedQty)) // // scpPo.State = (int)PlanState.Complete; // if (scpPoDetails.All(p => p.PlanQty == p.ReceivedQty)) //订货数量==已收数量 // scpPo.State = (int)PlanState.Complete; //} qadData.xxwms_rt_wmsread = ((int)UniApiState.成功).ToString(); } catch (Exception ex) { qadData.xxwms_rt_wmsread = ((int)UniApiState.失败).ToString(); qadData.xxwms_rt_rmks += " SCM:" + ex.Message; } qadData.xxwms_rt_updateur = ScpCache.Config.SCP用户名; qadData.xxwms_rt_updatedt = DateTime.Now; } } wdb.TB_RECEIVE.AddOrUpdate(scpRcvList.ToArray()); wdb.TB_RECEIVE_DETAIL.AddOrUpdate(scpRcveDetailList.ToArray()); wdb.TB_MAXPO_DETAIL.AddOrUpdate(scpMaxPoDetailList.ToArray()); wdb.TB_MAXPO_CONSUME.AddOrUpdate(scpConSumeList.ToArray()); Console.WriteLine($"更新 退货单 数据:{qadRcvDetailList.Count}"); } /// ///接收到货单 /// /// /// /// 流水号 private static void AddMaterialArrive(UniApiEntities idb, ScpEntities wdb, string seq) { //var qadRcvDetailList = idb.xxqad_prh_det.Where(p => p.xxqad_prh_seq == seq).ToList(); var qadRcvDetailList = idb.xxwms_arv_det.Where(p => p.xxwms_arv_seq == seq).ToList(); var scpRcvList = new List(); var scpRcveDetailList = new List(); //根据xxwms_rc_po_nbr采购单字段去重 var qadReceiveNbrList = qadRcvDetailList.Select(p => p.xxwms_arv_nbr.ToUpper()).DistinctBy(p => p); foreach (var qadRcvNbrList in qadReceiveNbrList) { //qadRcvDetailList同一xxqad_prh_receiver所有记录 var qadDataList = qadRcvDetailList.Where(p => p.xxwms_arv_nbr == qadRcvNbrList).ToList(); if (qadDataList.Count == 0) { continue; } var firstqadData = qadDataList[0]; //var scpRcv = wdb.TB_RECEIVE.SingleOrDefault(p => p.BillNum == qadRcvNbrList); //var scpRcv = wdb.TB_RECEIVE.SingleOrDefault(p => p.PoBillNum != null && p.PoBillNum == qadRcvNbrList); var scpRcv = wdb.TB_ARRIVE.SingleOrDefault(p => p.ArrvBillNum != null && p.ArrvBillNum == qadRcvNbrList); //判断0100工厂的收货自动审核是否为允许 bool isRerviceOk = false; if (!string.IsNullOrEmpty(firstqadData.xxwms_arv_site)) { string site = firstqadData.xxwms_arv_site;//0100 List configs = wdb.TA_FACTORY_CONFIG.Where(p => p.FactoryId == site).ToList(); foreach (TA_FACTORY_CONFIG cfg in configs) { TA_CONFIG tacfg = wdb.TA_CONFIG.Where(p => p.UID == cfg.ConfigId).SingleOrDefault(); if (tacfg != null && !string.IsNullOrEmpty(tacfg.ParamName) && tacfg.ParamName == "收货自动审核") { if ("允许" == tacfg.ParamValue) { isRerviceOk = true; } } } } if (scpRcv == null) { int istate = 0; if (isRerviceOk == false) { istate = (int)FormState.关闭; } else { istate = (int)FormState.开放; } scpRcv = new TB_ARRIVE { ArrvBillNum = qadRcvNbrList,//到货单号 State = istate, Remark = "", CreateTime = firstqadData.xxwms_arv_createdt == null ? DateTime.Now : (DateTime)firstqadData.xxwms_arv_createdt,//创建日期 CreateUser = firstqadData.xxwms_arv_createur,//创建用户 IsDeleted = false, GUID = System.Guid.NewGuid(), BillType = string.IsNullOrEmpty(firstqadData.xxwms_arv_trtype) ? 1 : int.Parse(firstqadData.xxwms_arv_trtype) //1-收货单 2-退货单 }; scpRcvList.Add(scpRcv); } scpRcv.PoBillNum = firstqadData.xxwms_arv_po_nbr;//采购单 scpRcv.AsnBillNum = firstqadData.xxwms_arv_ps_nbr;//发货单号 scpRcv.Site = firstqadData.xxwms_arv_site;//地点 scpRcv.VendId = firstqadData.xxwms_arv_vend;//供货商名称 scpRcv.ShipTime = firstqadData.xxwms_arv_date_ship;//收货日期 foreach (var qadData in qadDataList) { try { var poLineNum = Convert.ToInt32(qadData.xxwms_arv_po_line); //var scpRcvDetail = // wdb.TB_RECEIVE_DETAIL.SingleOrDefault( // p => p.BillNum == qadRcvNbrList && // p.PoBillNum == qadData.xxqad_prh_po_nbr && // p.PoLineNum == poLineNum && // p.AsnBillNum == qadData.xxqad_prh_psnbr && // p.PartCode == qadData.xxqad_prh_part && // p.Batch == qadData.xxqad_prh_lot); var scpRcvDetail = wdb.TB_ARRIVE_DETAIL.SingleOrDefault( p => p.ArrvBillNum == qadRcvNbrList && p.PoBillNum == qadData.xxwms_arv_po_nbr && p.PoLine == poLineNum && p.PartCode == qadData.xxwms_arv_part && p.Batch == qadData.xxwms_arv_lot); if (scpRcvDetail == null) { int istate = 0; if (isRerviceOk == false) { istate = (int)FormState.关闭; } else { istate = (int)FormState.开放; } scpRcvDetail = new TB_ARRIVE_DETAIL { ArrvBillNum = qadRcvNbrList,//到货单号 PoBillNum = qadData.xxwms_arv_po_nbr,//采购单 PoLine = poLineNum,//订单行 PartCode = qadData.xxwms_arv_part,//零件号 Batch = qadData.xxwms_arv_lot,//批次 VendBatch = qadData.xxwms_arv_vend_batch,//供应商批号 PoUnit = qadData.xxwms_arv_po_um,//采购单位 LocUnit = qadData.xxwms_arv_loc_um,//基本单位 Qty = qadData.xxwms_arv_qty_total,//收货总量 //DockCode = ?,//收货口 State = istate,// (int)FormState.关闭, Remark = "", CreateTime = qadData.xxwms_arv_createdt == null ? DateTime.Now : (DateTime)qadData.xxwms_arv_createdt,//创建日期 CreateUser = qadData.xxwms_arv_createur,//创建用户 IsDeleted = false, GUID = System.Guid.NewGuid(), BillType = string.IsNullOrEmpty(firstqadData.xxwms_arv_trtype) ? 1 : int.Parse(firstqadData.xxwms_arv_trtype) //1-收货单 2-退货单 }; scpRcveDetailList.Add(scpRcvDetail); } //var scpPoDetail = // wdb.TB_PO_DETAIL.FirstOrDefault( // p => p.PoBillNum == qadData.xxwms_arv_po_nbr && p.PoLine == poLineNum); //if (scpPoDetail != null) //{ // //订单明细ReceivedQty已收数量 += 收货明细Qty已结束量 // scpPoDetail.ReceivedQty += scpRcvDetail.Qty; //} //var scpPo = wdb.TB_PO.FirstOrDefault(p => p.ErpBillNum == qadData.xxwms_arv_po_nbr); //if (scpPo != null) //{ // //订单明细 // var scpPoDetails = wdb.TB_PO_DETAIL.Where(p => p.PoBillNum == qadData.xxwms_arv_po_nbr); // //if (scpPoDetails.All(p => p.BillQty == p.ReceivedQty)) // // scpPo.State = (int)PlanState.Complete; // if (scpPoDetails.All(p => p.PlanQty == p.ReceivedQty)) //订货数量==已收数量 // scpPo.State = (int)PlanState.Complete; //} qadData.xxwms_arv_wmsread = ((int)UniApiState.成功).ToString(); } catch (Exception ex) { qadData.xxwms_arv_wmsread = ((int)UniApiState.失败).ToString(); qadData.xxwms_arv_rmks += " SCM:" + ex.Message; } qadData.xxwms_arv_updateur = ScpCache.Config.SCP用户名; qadData.xxwms_arv_updatedt = DateTime.Now; } } wdb.TB_ARRIVE.AddOrUpdate(scpRcvList.ToArray()); wdb.TB_ARRIVE_DETAIL.AddOrUpdate(scpRcveDetailList.ToArray()); Console.WriteLine($"更新 到货单 数据:{qadRcvDetailList.Count}"); } } }