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 CK.SCP.Controller; using System.Text; using System.Data.Entity.Core; using System.Text.RegularExpressions; namespace CK.SCP.GrupUniApi.Controller { public static class OdbcApiQadController { public static void GetNewCtrlList() { UniApiEntities idb = EntitiesFactory.CreateUniApiInstance(); idb.Database.CommandTimeout = 60 * 20; var tableNameList = EnumHelper.EnumToList(); // var qadCtrlList = idb.xxqad_ctrl.Where(p => p.xxqad_domain == ScpCache.Config.QAD域 && p.xxqad_scm == "0").ToList(); var qadCtrlList = idb.xxqad_ctrl.Where(p => p.xxqad_scm == "0" ).ToList(); foreach (var qadCtrl in qadCtrlList) { if (tableNameList.All(p => p.Name != qadCtrl.xxqad_table)) continue; try { ScpEntities wdb = EntitiesFactory.CreateScpInstance(); QadTableName qadTableName; Enum.TryParse(qadCtrl.xxqad_table, false, out qadTableName); switch (qadTableName) { case QadTableName.xxqad_pt_mstr: //物料 if (GlobalVar.ApiConfig.Qad零件) { Console.WriteLine($"发现 QAD 接口数据:{qadCtrl.xxqad_table}:{qadCtrl.xxqad_table_qty}"); UpdateParts(idb, wdb, qadCtrl.xxqad_seq); } else continue; break; case QadTableName.xxqad_vd_mstr: //供应商 if (GlobalVar.ApiConfig.Qad供应商) { Console.WriteLine($"发现 QAD 接口数据:{qadCtrl.xxqad_table}:{qadCtrl.xxqad_table_qty}"); UpdateVender(idb, wdb, qadCtrl.xxqad_seq); } else continue; break; case QadTableName.xxqad_vp_mstr: //供应商物料 if (GlobalVar.ApiConfig.Qad供应商零件) { Console.WriteLine($"发现 QAD 接口数据:{qadCtrl.xxqad_table}:{qadCtrl.xxqad_table_qty}"); UpdateVendParts(idb, wdb, qadCtrl.xxqad_seq); } else continue; break; case QadTableName.xxqad_pod_det: //采购订单 if (GlobalVar.ApiConfig.Qad采购订单) { Console.WriteLine($"发现 QAD 接口数据:{qadCtrl.xxqad_table}:{qadCtrl.xxqad_table_qty}"); UpdatePurchaseOrders(idb, wdb, qadCtrl.xxqad_seq); } else continue; break; case QadTableName.xxqad_pprice_det: //采购价格 Console.WriteLine($"发现 QAD 接口数据:{qadCtrl.xxqad_table}:{qadCtrl.xxqad_table_qty}"); UpdatePrice(idb, wdb, qadCtrl.xxqad_seq); break; case QadTableName.xxqad_ppod_det: //采购价格 Console.WriteLine($"发现 QAD 接口数据:{qadCtrl.xxqad_table}:{qadCtrl.xxqad_table_qty}"); UpdatePPod(idb, wdb, qadCtrl.xxqad_seq); break; case QadTableName.xxqad_prh_det: Console.WriteLine($"发现 QAD 接口数据:{qadCtrl.xxqad_table}:{qadCtrl.xxqad_table_qty}"); AddReceive(idb, wdb, qadCtrl.xxqad_seq,0 ); AddReject(idb, wdb, qadCtrl.xxqad_seq, 0); break; } qadCtrl.xxqad_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); }); } qadCtrl.xxqad_scm = ((int)UniApiState.失败).ToString(); qadCtrl.xxqad_rmks += " SCM:" + sb.ToString(); } catch (OptimisticConcurrencyException ex)//并发冲突异常 { qadCtrl.xxqad_scm = ((int)UniApiState.失败).ToString(); qadCtrl.xxqad_rmks += " SCM:" + ex.Message; } catch (Exception ex) { qadCtrl.xxqad_scm = ((int)UniApiState.失败).ToString(); qadCtrl.xxqad_rmks += " SCM:" + ex.Message; } finally { EntitiesFactory.SaveDb(idb); } } } /// ///接收收货单 /// /// /// /// 流水号 /// 0:收货,1:退货 private static void AddReceive(UniApiEntities idb, ScpEntities wdb, string seq, int billtype) { // var qadRcvDetailList = idb.xxqad_prh_det.Where(p => p.xxqad_prh_seq == seq).ToList(); string _rec = "SELECT * FROM [UniInterface].[dbo].[xxqad_prh_det] WHERE xxqad_prh_uid IN\n" + "(\n" + "SELECT\n" + " MAX(xxqad_prh_uid)\n" + " FROM [UniInterface].[dbo].[xxqad_prh_det] where xxqad_prh_seq='{0}' and xxqad_prh_psnbr like 'C.%' and xxqad_prh_qty_rcvd>=0\n" + " GROUP BY\n" + " [xxqad_prh_psnbr]\n" + " ,[xxqad_prh_po_nbr]\n" + " ,[xxqad_prh_po_line]\n" + " ,[xxqad_prh_part]\n" + " ,[xxqad_prh_domain]\n" + ")"; var qadRcvDetailList = idb.Database.SqlQuery(string.Format(_rec, seq)).ToList(); var scpRcvList = new List(); var scpRcveDetailList = new List(); //根据xxwms_rc_po_nbr采购单字段去重 var qadReceiveNbrList = qadRcvDetailList.Where(p=> !string.IsNullOrEmpty(p.xxqad_prh_psnbr) && (p.xxqad_prh_psnbr.Contains("R.") || p.xxqad_prh_psnbr.Contains("C."))) .Select(p => p.xxqad_prh_psnbr.ToUpper()).DistinctBy(p => p).ToList(); foreach (var qadRcvNbrList in qadReceiveNbrList) { //qadRcvDetailList同一xxqad_prh_receiver所有记录 var qadDataList = qadRcvDetailList.Where(p => p.xxqad_prh_psnbr== qadRcvNbrList).ToList(); if (qadDataList.Count == 0) { continue; } var firstqadData = qadDataList[0]; var scpRcv = wdb.TB_RECEIVE_QAD.SingleOrDefault(p => p.RecvBillNum != null && p.RecvBillNum == qadRcvNbrList && p.Site == firstqadData.xxqad_prh_domain); //判断0100工厂的收货自动审核是否为允许 if (scpRcv == null) { scpRcv = new TB_RECEIVE_QAD { RecvBillNum = qadRcvNbrList,//收货单号 State = (int)FormState.开放, Remark = "", CreateTime = firstqadData.xxqad_prh_createdt == null ? DateTime.Now : (DateTime)firstqadData.xxqad_prh_createdt,//创建日期 CreateUser = firstqadData.xxqad_prh_createur,//创建用户 IsDeleted = false, GUID = System.Guid.NewGuid(), BillType = billtype, }; scpRcvList.Add(scpRcv); } scpRcv.PoBillNum = firstqadData.xxqad_prh_po_nbr;//采购单 //发货单号 scpRcv.Site = firstqadData.xxqad_prh_domain;//地点 scpRcv.VendId = firstqadData.xxqad_prh_vend;//供货商名称 scpRcv.ShipTime = firstqadData.xxqad_prh_date_ship;//收货日期 scpRcv.ErpRecvBillNum = firstqadData.xxqad_prh_receiver; scpRcv.Tax = string.IsNullOrEmpty(firstqadData.xxqad_prh_taxc) ? 0: int.Parse(firstqadData.xxqad_prh_taxc)/100; foreach (var qadData in qadDataList) { try { var poLineNum = Convert.ToInt32(qadData.xxqad_prh_po_line); var scpRcvDetail = wdb.TB_RECEIVE_DETAIL_QAD.SingleOrDefault( p => p.RecvBillNum == qadRcvNbrList && p.PoBillNum == qadData.xxqad_prh_po_nbr && p.PoLine == poLineNum && p.PartCode == qadData.xxqad_prh_part ); if (scpRcvDetail == null) { scpRcvDetail = new TB_RECEIVE_DETAIL_QAD { ErpRecvBillNum = qadData.xxqad_prh_receiver, RecvBillNum = qadRcvNbrList,//收货单号 PoBillNum = qadData.xxqad_prh_po_nbr,//采购单 PoLine = poLineNum,//订单行 PartCode = qadData.xxqad_prh_part,//零件号 Batch = qadData.xxqad_prh_vend_batch,//批次 VendBatch = qadData.xxqad_prh_vend_batch,//供应商批号 PoUnit = qadData.xxqad_prh_po_um,//采购单位 LocUnit = qadData.xxqad_prh_loc_um,//基本单位 Qty = qadData.xxqad_prh_qty_rcvd,//收货总量 CurAmt=qadData.xxqad_prh_curr_amt!=null?qadData.xxqad_prh_curr_amt.Value:0, //DockCode = ?,//收货口 State = (int)FormState.开放,// (int)FormState.关闭, CreateTime = qadData.xxqad_prh_createdt == null ? DateTime.Now : (DateTime)qadData.xxqad_prh_createdt,//创建日期 CreateUser = qadData.xxqad_prh_createur,//创建用户 IsDeleted = false, GUID = System.Guid.NewGuid(), BillType = billtype, PurCost = qadData.xxqad_prh_pur_cost, StdCost = qadData.xxqad_prh_std_cost != null? qadData.xxqad_prh_std_cost.Value:0, Rate = qadData.xxqad_prh_curr_rate != null ?qadData.xxqad_prh_curr_rate.Value : 1, Site=qadData.xxqad_prh_domain, Tax = string.IsNullOrEmpty(firstqadData.xxqad_prh_taxc) ? 0 : int.Parse(firstqadData.xxqad_prh_taxc) / 100 }; scpRcveDetailList.Add(scpRcvDetail); } //var scpPoDetail = // wdb.TB_PO_DETAIL.FirstOrDefault( // p => p.PoBillNum == qadData.xxwms_rc_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_rc_po_nbr); //if (scpPo != null) //{ // //订单明细 // var scpPoDetails = wdb.TB_PO_DETAIL.Where(p => p.PoBillNum == qadData.xxwms_rc_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; // //var _detail = wdb.TB_ASK_DETAIL.Where(p => p.PoBillNum == qadData.xxwms_rc_po_nbr && p.PoLine == poLineNum ); // //if (_detail!=null && _detail.Count() > 0) // //{ // // var _qty=_detail.Sum(p=>p.AskQty); // // if(_qty== p.ReceivedQty) // //} // } //} qadData.xxqad_prh_scmread = ((int)UniApiState.成功).ToString(); } catch (Exception ex) { qadData.xxqad_prh_scmread = ((int)UniApiState.失败).ToString(); qadData.xxqad_prh_rmks += " SCM:" + ex.Message; } qadData.xxqad_prh_updateur = ScpCache.Config.SCP用户名; qadData.xxqad_prh_updatedt = DateTime.Now; } } wdb.TB_RECEIVE_QAD.AddOrUpdate(scpRcvList.ToArray()); wdb.TB_RECEIVE_DETAIL_QAD.AddOrUpdate(scpRcveDetailList.ToArray()); Console.WriteLine($"更新 收货单 数据:{qadRcvDetailList.Count}"); } private static void AddReject(UniApiEntities idb, ScpEntities wdb, string seq, int billtype) { // var qadRcvDetailList = idb.xxqad_prh_det.Where(p => p.xxqad_prh_seq == seq).ToList(); string _rec = "SELECT * FROM [UniInterface].[dbo].[xxqad_prh_det] WHERE xxqad_prh_uid IN\n" + "(\n" + "SELECT\n" + " MAX(xxqad_prh_uid)\n" + " FROM [UniInterface].[dbo].[xxqad_prh_det] where xxqad_prh_seq='{0}' and xxqad_prh_psnbr like 'R.%' \n" + " GROUP BY\n" + " [xxqad_prh_psnbr]\n" + " ,[xxqad_prh_po_nbr]\n" + " ,[xxqad_prh_po_line]\n" + " ,[xxqad_prh_part]\n" + " ,[xxqad_prh_domain]\n" + ")"; var qadRcvDetailList = idb.Database.SqlQuery(string.Format(_rec, seq)).ToList(); var scpRcvList = new List(); var scpRcveDetailList = new List(); //根据xxwms_rc_po_nbr采购单字段去重 var qadReceiveNbrList = qadRcvDetailList.Where(p => !string.IsNullOrEmpty(p.xxqad_prh_psnbr) && (p.xxqad_prh_psnbr.Contains("R.") || p.xxqad_prh_psnbr.Contains("C."))) .Select(p => p.xxqad_prh_psnbr.ToUpper()).DistinctBy(p => p).ToList(); foreach (var qadRcvNbrList in qadReceiveNbrList) { //qadRcvDetailList同一xxqad_prh_receiver所有记录 var qadDataList = qadRcvDetailList.Where(p => p.xxqad_prh_psnbr == qadRcvNbrList).ToList(); if (qadDataList.Count == 0) { continue; } var firstqadData = qadDataList[0]; var scpRcv = wdb.TB_RECEIVE_QAD.SingleOrDefault(p => p.RecvBillNum != null && p.RecvBillNum == qadRcvNbrList && p.Site == firstqadData.xxqad_prh_domain); //判断0100工厂的收货自动审核是否为允许 if (scpRcv == null) { scpRcv = new TB_RECEIVE_QAD { RecvBillNum = qadRcvNbrList,//收货单号 State = (int)FormState.开放, Remark = "", CreateTime = firstqadData.xxqad_prh_createdt == null ? DateTime.Now : (DateTime)firstqadData.xxqad_prh_createdt,//创建日期 CreateUser = firstqadData.xxqad_prh_createur,//创建用户 IsDeleted = false, GUID = System.Guid.NewGuid(), BillType = billtype, }; scpRcvList.Add(scpRcv); } scpRcv.PoBillNum = firstqadData.xxqad_prh_po_nbr;//采购单 //发货单号 scpRcv.Site = firstqadData.xxqad_prh_domain;//地点 scpRcv.VendId = firstqadData.xxqad_prh_vend;//供货商名称 scpRcv.ShipTime = firstqadData.xxqad_prh_date_ship;//收货日期 scpRcv.ErpRecvBillNum = firstqadData.xxqad_prh_receiver; scpRcv.Tax = string.IsNullOrEmpty(firstqadData.xxqad_prh_taxc) ? 0 : int.Parse(firstqadData.xxqad_prh_taxc) / 100; foreach (var qadData in qadDataList) { try { var poLineNum = Convert.ToInt32(qadData.xxqad_prh_po_line); var scpRcvDetail = wdb.TB_RECEIVE_DETAIL_QAD.SingleOrDefault( p => p.RecvBillNum == qadRcvNbrList && p.PoBillNum == qadData.xxqad_prh_po_nbr && p.PoLine == poLineNum && p.PartCode == qadData.xxqad_prh_part ); if (scpRcvDetail == null) { scpRcvDetail = new TB_RECEIVE_DETAIL_QAD { ErpRecvBillNum = qadData.xxqad_prh_receiver, RecvBillNum = qadRcvNbrList,//收货单号 PoBillNum = qadData.xxqad_prh_po_nbr,//采购单 PoLine = poLineNum,//订单行 PartCode = qadData.xxqad_prh_part,//零件号 Batch = qadData.xxqad_prh_vend_batch,//批次 VendBatch = qadData.xxqad_prh_vend_batch,//供应商批号 PoUnit = qadData.xxqad_prh_po_um,//采购单位 LocUnit = qadData.xxqad_prh_loc_um,//基本单位 Qty = qadData.xxqad_prh_qty_rcvd,//收货总量 CurAmt = qadData.xxqad_prh_curr_amt != null ? qadData.xxqad_prh_curr_amt.Value : 0, //DockCode = ?,//收货口 State = (int)FormState.开放,// (int)FormState.关闭, CreateTime = qadData.xxqad_prh_createdt == null ? DateTime.Now : (DateTime)qadData.xxqad_prh_createdt,//创建日期 CreateUser = qadData.xxqad_prh_createur,//创建用户 IsDeleted = false, GUID = System.Guid.NewGuid(), BillType = billtype, PurCost = qadData.xxqad_prh_pur_cost, StdCost = qadData.xxqad_prh_std_cost != null ? qadData.xxqad_prh_std_cost.Value : 0, Rate = qadData.xxqad_prh_curr_rate != null ? qadData.xxqad_prh_curr_rate.Value : 1, Site = qadData.xxqad_prh_domain, Tax = string.IsNullOrEmpty(firstqadData.xxqad_prh_taxc) ? 0 : int.Parse(firstqadData.xxqad_prh_taxc) / 100 }; scpRcveDetailList.Add(scpRcvDetail); } //var scpPoDetail = // wdb.TB_PO_DETAIL.FirstOrDefault( // p => p.PoBillNum == qadData.xxwms_rc_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_rc_po_nbr); //if (scpPo != null) //{ // //订单明细 // var scpPoDetails = wdb.TB_PO_DETAIL.Where(p => p.PoBillNum == qadData.xxwms_rc_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; // //var _detail = wdb.TB_ASK_DETAIL.Where(p => p.PoBillNum == qadData.xxwms_rc_po_nbr && p.PoLine == poLineNum ); // //if (_detail!=null && _detail.Count() > 0) // //{ // // var _qty=_detail.Sum(p=>p.AskQty); // // if(_qty== p.ReceivedQty) // //} // } //} qadData.xxqad_prh_scmread = ((int)UniApiState.成功).ToString(); } catch (Exception ex) { qadData.xxqad_prh_scmread = ((int)UniApiState.失败).ToString(); qadData.xxqad_prh_rmks += " SCM:" + ex.Message; } qadData.xxqad_prh_updateur = ScpCache.Config.SCP用户名; qadData.xxqad_prh_updatedt = DateTime.Now; } } wdb.TB_RECEIVE_QAD.AddOrUpdate(scpRcvList.ToArray()); wdb.TB_RECEIVE_DETAIL_QAD.AddOrUpdate(scpRcveDetailList.ToArray()); Console.WriteLine($"更新 收货单 数据:{qadRcvDetailList.Count}"); } /// /// 更新采购订单 /// /// /// /// private static void UpdatePPod(UniApiEntities idb, ScpEntities wdb, string seq) { string _sql = "select * from\n" + "(SELECT [xxqad_ppod_uid]\n" + " ,[xxqad_ppod_seq]\n" + " ,[xxqad_ppod_nbr]\n" + " ,[xxqad_ppod_line]\n" + " ,case\n" + " LEN(replace([xxqad_ppod_rev],'-',''))\n" + " when 8 then replace([xxqad_ppod_rev],'-','')+'000'\n" + " when 11 then replace([xxqad_ppod_rev],'-','') end as xxqad_ppod_rev\n" + " ,[xxqad_ppod_site]\n" + " ,[xxqad_ppod_domain]\n" + " ,[xxqad_ppod_part]\n" + " ,[xxqad_ppod_desc]\n" + " ,[xxqad_ppod_type]\n" + " ,[xxqad_ppod_wolot]\n" + " ,[xxqad_ppod_pricum]\n" + " ,[xxqad_ppod_reccum]\n" + " ,[xxqad_ppod_qty_ord]\n" + " ,[xxqad_ppod_qty_std]\n" + " ,[xxqad_ppod_due_date]\n" + " ,[xxqad_ppod_loc_um]\n" + " ,[xxqad_ppod_um]\n" + " ,[xxqad_ppod_um_conv]\n" + " ,[xxqad_ppod_vend]\n" + " ,[xxqad_ppod_buyer]\n" + " ,[xxqad_ppod_buyer_phone]\n" + " ,[xxqad_ppod_status]\n" + " ,[xxqad_ppod_qadread]\n" + " ,[xxqad_ppod_wmsread]\n" + " ,[xxqad_ppod_scmread]\n" + " ,[xxqad_ppod_mesread]\n" + " ,[xxqad_ppod_rmks]\n" + " ,[xxqad_ppod_createdt]\n" + " ,[xxqad_ppod_createur]\n" + " ,[xxqad_ppod_updatedt]\n" + " ,[xxqad_ppod_updateur] from xxqad_ppod_det\n" + " where xxqad_ppod_seq = '{0}' and xxqad_ppod_scmread = '0'\n" + " ) as a\n" + "inner join\n" + "(\n" + "SELECT\n" + " xxqad_ppod_seq\n" + " ,[xxqad_ppod_nbr]\n" + " ,[xxqad_ppod_line]\n" + " ,[xxqad_ppod_domain]\n" + " ,[xxqad_ppod_part]\n" + " ,[xxqad_ppod_due_date]\n" + " ,[xxqad_ppod_vend]\n" + " ,max(\n" + " case\n" + " LEN(replace([xxqad_ppod_rev],'-',''))\n" + " when 8 then replace([xxqad_ppod_rev],'-','')+'000'\n" + " when 11 then replace([xxqad_ppod_rev],'-','') end\n" + " ) as xxqad_ppod_rev\n" + " FROM [xxqad_ppod_det]\n" + " where xxqad_ppod_seq = '{0}' and xxqad_ppod_scmread = '0'\n" + " group by\n" + " xxqad_ppod_seq\n" + " ,[xxqad_ppod_nbr]\n" + " ,[xxqad_ppod_line]\n" + " ,[xxqad_ppod_domain]\n" + " ,[xxqad_ppod_part]\n" + " ,[xxqad_ppod_due_date]\n" + " ,[xxqad_ppod_vend]) as b\n" + " on\n" + " a.xxqad_ppod_seq=b.xxqad_ppod_seq\n" + " and a.xxqad_ppod_domain=b.xxqad_ppod_domain\n" + " and a.xxqad_ppod_due_date=b.xxqad_ppod_due_date\n" + " and a.xxqad_ppod_line=b.xxqad_ppod_line\n" + " and a.xxqad_ppod_nbr=b.xxqad_ppod_nbr\n" + " and a.xxqad_ppod_vend=b.xxqad_ppod_vend\n" + " and a.xxqad_ppod_part=b.xxqad_ppod_part\n" + " and a.xxqad_ppod_rev=b.xxqad_ppod_rev"; _sql = string.Format(_sql, seq); var _ppodList=idb.Database.SqlQuery(_sql).ToList(); // long max = _ppodList.Select(p => long.Parse(p.xxqad_ppod_rev)).Max(); //_ppodList =_ppodList.Where(p => p.xxqad_ppod_rev == max.ToString()).ToList(); ScpEntities sdb = EntitiesFactory.CreateScpInstance(); var _ask = sdb.TB_ASK.Where(p => p.AskBillNum.Contains("K_") && p.State<(int)AskState.Confirm); var _askno = sdb.TB_ASK.Where(p => p.AskBillNum.Contains("K_") && p.State >= (int)AskState.Confirm); var _ls=_askno.Select(p => p.AskBillNum).ToList(); var _detail = sdb.V_TB_ASK_DETAIL.Where(p => p.AskBillNum.Contains("K_") && p.State < (int)AskState.Confirm); var ids=_detail.Select(p => p.UID).ToList(); var _d=sdb.TB_ASK_DETAIL.Where(p => ids.Contains(p.UID)); sdb.TB_ASK.RemoveRange(_ask); sdb.TB_ASK_DETAIL.RemoveRange(_d); sdb.SaveChanges(); var _billnumList = _ppodList.Select(p => p.xxqad_ppod_nbr.ToString()).Distinct().ToList(); var _dateList = _ppodList.Select(p => p.xxqad_ppod_due_date).Distinct().ToList(); _billnumList.ForEach(billnum =>{ _dateList.ForEach(date => { var poList = _ppodList.Where(q => q.xxqad_ppod_nbr == billnum && q.xxqad_ppod_due_date == date && q.xxqad_ppod_qty_ord>0).ToList(); if (poList.Count > 0) { var po = poList.FirstOrDefault(); var _askBillNum = "K_" + po.xxqad_ppod_nbr + "_" + po.xxqad_ppod_due_date.ToString("yyMMdd"); var _entityList = wdb.V_TB_ASK.Where(itm => itm.PoBillNum == billnum && itm.EndTime == po.xxqad_ppod_due_date ).ToList(); if (_entityList.Count == 0) { try { if (!_ls.Contains(_askBillNum)) { TB_ASK _t = new TB_ASK(); _t.AskBillNum = _askBillNum; _t.PoBillNum = po.xxqad_ppod_nbr; _t.VendId = po.xxqad_ppod_vend; _t.IsDeleted = false;//操作员 _t.CreateTime = po.xxqad_ppod_createdt == null ? DateTime.Now : po.xxqad_ppod_createdt.Value; _t.CreateUser = po.xxqad_ppod_createur; _t.Site = po.xxqad_ppod_domain; _t.Remark = po.xxqad_ppod_rev; _t.State = (int)AskState.New; _t.GUID = Guid.NewGuid(); _t.ModType = 1; _t.ErpBillNum = po.xxqad_ppod_nbr; _t.BeginTime = po.xxqad_ppod_createdt == null ? DateTime.Now : po.xxqad_ppod_createdt.Value; _t.EndTime = po.xxqad_ppod_due_date; _t.Buyer = po.xxqad_ppod_buyer; _t.BuyerPhone = po.xxqad_ppod_buyer_phone; wdb.TB_ASK.Add(_t); } } catch (Exception e) { } } // string str= Utils.XmlHelper.EntityToXml(poList); poList.ForEach(p => { if (!_ls.Contains(_askBillNum)) { var _list = wdb.V_TB_ASK_DETAIL.Where(itm => itm.PoBillNum == p.xxqad_ppod_nbr && itm.EndTime == p.xxqad_ppod_due_date && itm.VendId == p.xxqad_ppod_vend && itm.PoLine == p.xxqad_ppod_line && itm.PartCode == p.xxqad_ppod_part && itm.Site == p.xxqad_ppod_domain ).ToList(); var _askList = _list.Where(q => q.AskBillNum.Length > 11 && string.IsNullOrEmpty(Regex.Replace(q.Remark, @"\d+", string.Empty))).FirstOrDefault(); if (_askList == null) { if (p.xxqad_ppod_qty_ord > 0) { TB_ASK_DETAIL _tDetail = new TB_ASK_DETAIL(); _tDetail.Remark = p.xxqad_ppod_rev; _tDetail.PoBillNum = p.xxqad_ppod_nbr; _tDetail.AskBillNum = _askBillNum; _tDetail.PoLine = p.xxqad_ppod_line; _tDetail.PoUnit = p.xxqad_ppod_um; _tDetail.CreateTime = p.xxqad_ppod_createdt == null ? DateTime.Now : p.xxqad_ppod_createdt.Value; _tDetail.CreateUser = p.xxqad_ppod_createur; _tDetail.PartCode = p.xxqad_ppod_part; _tDetail.BeginTime = p.xxqad_ppod_createdt; _tDetail.EndTime = p.xxqad_ppod_due_date; _tDetail.AskQty = p.xxqad_ppod_qty_ord.Value; _tDetail.IsDeleted = false; _tDetail.LocUnit = p.xxqad_ppod_um; _tDetail.UnConv = p.xxqad_ppod_um_conv; _tDetail.State = (int)AskState.New; _tDetail.GUID = Guid.NewGuid(); wdb.TB_ASK_DETAIL.Add(_tDetail); } } } }); } }); }); Console.WriteLine($"更新看板数据:{_ppodList.Count}"); } /// /// 更新采购订单 /// /// /// /// private static void UpdatePurchaseOrders(UniApiEntities idb, ScpEntities wdb, string seq) { // var qadPoDetailList = idb.xxqad_pod_det.Where(p => p.xxqad_pod_seq == seq).ToList(); 原来的 xxqad_pod_modtype 1为大订单 var qadPoDetailList = idb.xxqad_pod_det.Where(p => p.xxqad_pod_seq == seq && p.xxqad_pod_scmread == "0").ToList(); var wmsPoList = new List(); var wmsPoDetailList = new List(); var qadPoNbrList = qadPoDetailList.Select(p => p.xxqad_pod_nbr.ToUpper()).DistinctBy(p => p); foreach (var qadPoNbr in qadPoNbrList) { var qadDataList = qadPoDetailList.Where(p => p.xxqad_pod_nbr == qadPoNbr).ToList(); if (qadDataList.Count == 0) { continue; } var firstqadData = qadDataList[0]; //var wmsPo = wdb.TF_PO.SingleOrDefault(p => p.ErpBillNum == qadPoNbr); var wmsPo = wdb.TB_PO.SingleOrDefault(p => p.ErpBillNum == qadPoNbr); if (wmsPo == null) { int temp; string strPoBillNum = SCP_BILLCODE_CONTROLLER.MakePOCode(); wmsPo = new TB_PO { PoBillNum = qadPoNbr,//订单号 ErpBillNum = qadPoNbr,//ERP订单号 VendId = firstqadData.xxqad_pod_vend.ToUpper(),//供应商编号 ModType = Int32.TryParse(firstqadData.xxqad_pod_modtype, out temp) ? temp : (int?)null, //单据类型(1:日程单,2:离散订单) Contacter = firstqadData.xxqad_pod_attn,//联系人 Site = firstqadData.xxqad_pod_domain,//地点 State = (int)FormState.开放,//状态 CreateTime = firstqadData.xxqad_pod_createdt == null ? DateTime.Now : (DateTime)firstqadData.xxqad_pod_createdt,//创建日期 CreateUser = firstqadData.xxqad_pod_createur,//创建用户 IsDeleted = false, GUID = System.Guid.NewGuid(), BeginTime = firstqadData.xxqad_pod_createdt==null ? DateTime.Now: (DateTime)firstqadData.xxqad_pod_createdt,//创建日期 EndTime = firstqadData.xxqad_pod_due_date//收货结束时间 }; wmsPoList.Add(wmsPo); } wmsPo.Contacter = firstqadData.xxqad_pod_attn; wmsPo.Buyer = firstqadData.xxqad_pod_buyer; wmsPo.BuyerPhone = firstqadData.xxqad_pod_buyer_phone; wmsPo.UpdateTime = firstqadData.xxqad_pod_updatedt;//更新日期 wmsPo.UpdateUser = firstqadData.xxqad_pod_updateur;//更新用户 foreach (var qadData in qadDataList) { try { var lineNum = Convert.ToInt32(qadData.xxqad_pod_line); var wmsPoDetail = wdb.TB_PO_DETAIL.SingleOrDefault( p => p.PoBillNum == qadPoNbr && p.PoLine == lineNum); if (wmsPoDetail == null) { wmsPoDetail = new TB_PO_DETAIL { PoBillNum = qadPoNbr,//订单号 PoLine = lineNum,//订单行 IsDeleted = false, GUID = System.Guid.NewGuid() }; wmsPoDetailList.Add(wmsPoDetail); } wmsPoDetail.PartCode = qadData.xxqad_pod_part.ToUpper();//零件号-物料号 wmsPoDetail.PlanQty = qadData.xxqad_pod_qty_ord;//订货数量-采购量 wmsPoDetail.BeginTime = firstqadData.xxqad_pod_createdt;//收货开始时间 wmsPoDetail.EndTime = qadData.xxqad_pod_due_date;//收货结束时间 wmsPoDetail.PoUnit = qadData.xxqad_pod_um;//采购单位 wmsPoDetail.LocUnit = qadData.xxqad_pod_loc_um.ToUpper();//存储单位 wmsPoDetail.DockCode = qadData.xxqad_pod_loc; wmsPoDetail.Price = ScpCache.Config.项目名称 == ProjectName.重庆北汽模塑.ToString() ? 0 : qadData.xxqad_pod_price; wmsPoDetail.Currency = qadData.xxqad_pod_curr;//币种 wmsPoDetail.PackQty = qadData.xxqad_pod_qty_std;//标包数量 wmsPoDetail.UnConv = qadData.xxqad_pod_um_conv;//转换率 wmsPoDetail.DockCode = qadData.xxqad_pod_loc; wmsPoDetail.State = Convert.ToInt32(qadData.xxqad_pod_status);//状态 wmsPoDetail.Remark = qadData.xxqad_pod_domain;//备注 wmsPoDetail.CreateTime = firstqadData.xxqad_pod_createdt == null ? DateTime.Now : (DateTime)firstqadData.xxqad_pod_createdt;//创建日期 wmsPoDetail.CreateUser = firstqadData.xxqad_pod_createur;//创建用户 wmsPoDetail.UpdateTime = firstqadData.xxqad_pod_updatedt;//更新日期 wmsPoDetail.UpdateUser = firstqadData.xxqad_pod_updateur;//更新用户 //if (wmsPoDetail.BillQty != 0 && wmsPoDetail.BillQty <= wmsPoDetail.ReceivedQty) // wmsPoDetail.State = (int)FormState.关闭; if (wmsPoDetail.PlanQty != 0 && wmsPoDetail.PlanQty <= wmsPoDetail.ReceivedQty) wmsPoDetail.State = (int)FormState.关闭; qadData.xxqad_pod_scmread = ((int)UniApiState.成功).ToString(); } catch (Exception ex) { qadData.xxqad_pod_scmread = ((int)UniApiState.失败).ToString(); qadData.xxqad_pod_rmks += " SCM:" + ex.Message; } qadData.xxqad_pod_updateur = ScpCache.Config.SCP用户名; qadData.xxqad_pod_updatedt = DateTime.Now; } wmsPo.State = qadDataList.All(p => p.xxqad_pod_status == ((int)FormState.关闭).ToString()) ? (int)FormState.关闭 : (int)FormState.开放; } wdb.TB_PO.AddOrUpdate(wmsPoList.ToArray()); wdb.TB_PO_DETAIL.AddOrUpdate(wmsPoDetailList.ToArray()); Console.WriteLine($"更新 采购订单 数据:{qadPoDetailList.Count}"); } /// /// 更新采购订单 /// /// /// /// private static void UpdatePrice(UniApiEntities idb, ScpEntities scpdb, string seq) { var _list = idb.xxqad_pprice_det.Where(p => p.xxqad_pprice_seq == seq && p.xxqad_pprice_scmread == "0").ToList(); var PriceList = new List(); foreach (var itm in _list) { var _price= new TB_PRICE { VendId = itm.xxqad_pprice_list, Unit = itm.xxqad_pprice_um, PartCode = itm.xxqad_pprice_part, Site = itm.xxqad_pprice_domain, Remarks = itm.xxqad_pprice_rmks, StartTime = itm.xxqad_pprice_start, EndTime = itm.xxqad_pprice_end, Curr = itm.xxqad_pprice_curr }; _price.Amt = itm.xxqad_pprice_amt; PriceList.Add(_price); } scpdb.TB_PRICE.AddOrUpdate(PriceList.ToArray()); Console.WriteLine($"更新采购价格数据:{PriceList.Count}"); } /// /// 更新供应商零件 /// /// /// /// private static void UpdateVendParts(UniApiEntities idb, ScpEntities wdb, string seq) { var qadDataList = idb.xxqad_vp_mstr.Where(p => p.xxqad_vp_seq == seq ).ToList(); var wmsDataList = new List(); foreach (var qadData in qadDataList) { try { if (string.IsNullOrEmpty(qadData.xxqad_vp_vend_part)) qadData.xxqad_vp_vend_part = qadData.xxqad_vp_part; var wmsData = wdb.TA_VEND_PART.SingleOrDefault( p => p.VendId == qadData.xxqad_vp_addr.ToUpper() && p.PartCode == qadData.xxqad_vp_part.ToUpper() && p.VendPartCode == qadData.xxqad_vp_vend_part.ToUpper() && p.Site==qadData.xxqad_vp_domain ) ?? new TA_VEND_PART { VendId = qadData.xxqad_vp_addr.ToUpper(),//供应商编号 PartCode = qadData.xxqad_vp_part.ToUpper(),//对应物料号 VendPartCode = qadData.xxqad_vp_vend_part.ToUpper(),//供应商物料号 VendPackQty = qadData.xxqad_vp_comment,//供应商物料号 //PoUnit = qadData.,//采购单位 State = 1,//状态(0:失效 1:有效) Remark = "", CreateTime = qadData.xxqad_vp_createdt == null ? DateTime.Now : (DateTime)qadData.xxqad_vp_createdt,//创建日期 CreateUser = qadData.xxqad_vp_createur,//创建用户 UpdateTime = qadData.xxqad_vp_updatedt,//更新日期 UpdateUser = qadData.xxqad_vp_updateur,//更新用户 TransportationTime=qadData.xxqad_vp_vend_lead, IsDeleted = false, GUID = new Guid() }; wmsData.Site = string.IsNullOrEmpty(wmsData.Site) ? qadData.xxqad_vp_domain : wmsData.Site; wmsData.VendPartCode = qadData.xxqad_vp_vend_part?.ToUpper() ?? qadData.xxqad_vp_part.ToUpper(); wmsData.VendPackQty = qadData.xxqad_vp_comment; wmsData.TransportationTime = qadData.xxqad_vp_vend_lead; wmsDataList.Add(wmsData); qadData.xxqad_vp_scmread = ((int)UniApiState.成功).ToString(); } catch (Exception ex) { qadData.xxqad_vp_scmread = ((int)UniApiState.失败).ToString(); qadData.xxqad_vp_rmks += " SCM:" + ex.Message; } qadData.xxqad_vp_updateur = ScpCache.Config.SCP用户名; qadData.xxqad_vp_updatedt = DateTime.Now; } wdb.TA_VEND_PART.AddOrUpdate(p=>new { p.PartCode,p.VendId, p.Site }, wmsDataList.ToArray()); Console.WriteLine($"更新 供应商零件 数据:{wmsDataList.Count}"); } /// /// 更新供应商 /// /// /// /// private static void UpdateVender(UniApiEntities idb, ScpEntities wdb, string seq) { var qadDataList = idb.xxqad_vd_mstr.Where(p => p.xxqad_vd_seq == seq ).ToList(); var wmsDataList = new List(); foreach (var qadData in qadDataList) { try { var wmsData = wdb.TA_VENDER.SingleOrDefault(p => p.VendId == qadData.xxqad_vd_addr.ToUpper() && p.Site==qadData.xxqad_vd_domain) ?? new TA_VENDER { VendId = qadData.xxqad_vd_addr.ToUpper(), VendAbbCode = "0", State = 1 }; wmsData.VendName = string.IsNullOrEmpty(qadData.xxqad_vd_name)?qadData.xxqad_vd_addr:qadData.xxqad_vd_name; wmsData.VendType = qadData.xxqad_vd_type.ToUpper().ToString(); wmsData.Country = qadData.xxqad_vd_country; wmsData.City = qadData.xxqad_vd_city; wmsData.Currency = qadData.xxqad_vd_curr.ToUpper(); wmsData.Address = qadData.xxqad_vd_line1 + qadData.xxqad_vd_line2 + qadData.xxqad_vd_line3; wmsData.ZipCode = qadData.xxqad_vd_pst_id; wmsData.Contacter = qadData.xxqad_vd_attn; wmsData.Phone = qadData.xxqad_vd_phone; wmsData.Fax = qadData.xxqad_vd_fax; wmsData.Site = string.IsNullOrEmpty(wmsData.Site)? qadData.xxqad_vd_domain:wmsData.Site; wmsData.Tax = qadData.xxqad_vd_tax;//税率 wmsDataList.Add(wmsData); qadData.xxqad_vd_scmread = ((int)UniApiState.成功).ToString(); } catch (Exception ex) { qadData.xxqad_vd_scmread = ((int)UniApiState.失败).ToString(); qadData.xxqad_vd_rmks += " SCM:" + ex.Message; } qadData.xxqad_vd_updateur = ScpCache.Config.SCP用户名; qadData.xxqad_vd_updatedt = DateTime.Now; } if (wmsDataList.Count == 0) { Console.WriteLine("更新 供应商 数据:"+ seq+"无数据"); return; } wdb.TA_VENDER.AddOrUpdate(p=>new {p.VendId,p.Site } ,wmsDataList.ToArray()); Console.WriteLine($"更新 供应商 数据:{qadDataList.Count}"); } /// /// 更新零件 /// /// /// /// private static void UpdateParts(UniApiEntities idb, ScpEntities wdb, string seq) { var qadDataList = idb.xxqad_pt_mstr.Where(p => p.xxqad_pt_seq == seq ).ToList(); var wmsDataList = new List(); foreach (var qadData in qadDataList) { try { var wmsData = wdb.TA_PART.SingleOrDefault(p => p.ErpPartCode == qadData.xxqad_pt_part.ToUpper() && p.Site==qadData.xxqad_pt_domain) ?? new TA_PART { PartCode = qadData.xxqad_pt_part.ToUpper(), ErpPartCode = qadData.xxqad_pt_part.ToUpper(), }; wmsData.PartDesc1 = qadData.xxqad_pt_desc1; wmsData.PartDesc2 = qadData.xxqad_pt_desc2; wmsData.ProjectId = qadData.xxqad_pt_group.ToUpper(); wmsData.Unit = !string.IsNullOrEmpty(qadData.xxqad_pt_um)? qadData.xxqad_pt_um.ToUpper():"EA"; wmsData.PartGroup = qadData.xxqad_pt_dsgn_grp.ToUpper(); wmsData.State = qadData.xxqad_pt_status.ToUpper(); wmsData.Site = qadData.xxqad_pt_domain; wmsDataList.Add(wmsData); qadData.xxqad_pt_scmread = ((int)UniApiState.成功).ToString(); } catch (Exception ex) { qadData.xxqad_pt_scmread = ((int)UniApiState.失败).ToString(); qadData.xxqad_pt_rmks += " SCM:" + ex.Message; } qadData.xxqad_pt_updateur = ScpCache.Config.SCP用户名; qadData.xxqad_pt_updatedt = DateTime.Now; } wdb.TA_PART.AddOrUpdate(p =>new { p.PartCode, p.Site }, wmsDataList.ToArray()); Console.WriteLine($"更新 零件信息 数据:{qadDataList.Count}"); } } }