using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using KPlan.Forms.Bean; using KPlan.Util; using System.Collections.ObjectModel; using ModelObject = Teamcenter.Soa.Client.Model.ModelObject; using Eplan.EplApi.MasterData; using System.ComponentModel; using System.Windows.Forms; using System.Runtime.InteropServices; using MessageBox = System.Windows.MessageBox; using Eplan.EplApi.DataModel.EObjects; namespace KPlan.Forms { /// /// Interaction logic for KPartSync.xaml /// public partial class KPartSync : Window { public KPartSync(MDPartsDatabase mdPartsDatabase) { InitializeComponent(); KUtil.SetOwnerWindow(this); this.mdPartsDatabase = mdPartsDatabase; bgWorker_Parts = new KBackgroundWorker(this); bgWorker_Parts.backgroundWorker.DoWork += Async_LoadParts; bgWorker_AddAll = new KBackgroundWorker(this); bgWorker_AddAll.backgroundWorker.DoWork += Async_AddAllUnsyncedParts; bgWorker_Apply = new KBackgroundWorker(this); bgWorker_Apply.backgroundWorker.DoWork += Async_Apply; bgWorker_Query = new KBackgroundWorker(this); bgWorker_Query.backgroundWorker.DoWork += Async_QueryParts; bgWorker_EPlan_to_TC = new KBackgroundWorker(this); bgWorker_EPlan_to_TC.backgroundWorker.DoWork += Async_EPlan_to_TC; bgWorker_EPlan_to_TC.backgroundWorker.RunWorkerCompleted += bgWorker_EPlan_to_TC_RunWorkerCompleted; bgWorker_TC_to_EPlan = new KBackgroundWorker(this); bgWorker_TC_to_EPlan.backgroundWorker.DoWork += Async_TC_to_EPlan; bgWorker_TC_to_EPlan.backgroundWorker.RunWorkerCompleted += bgWorker_EPlan_to_TC_RunWorkerCompleted; bgWorker_Revise = new KBackgroundWorker(this); bgWorker_Revise.backgroundWorker.DoWork += Async_Revise; bgWorker_Query_TC = new KBackgroundWorker(this); bgWorker_Query_TC.backgroundWorker.DoWork += Async_QueryTCParts; bgWorker_UploadPartsDB = new KBackgroundWorker(this); bgWorker_UploadPartsDB.backgroundWorker.DoWork += Async_UploadPartsDB; bgWorker_SyncErpCode = new KBackgroundWorker(this); bgWorker_SyncErpCode.backgroundWorker.DoWork += Async_SyncErpCode; bgWorker_AddGroup = new KBackgroundWorker(this); bgWorker_AddGroup.backgroundWorker.DoWork += Async_AddGroup; table_Sync_To_TC.ItemsSource = ePlanToTCData; TCUtil.DO_NOTHING(); } public const string NOT_RELEASEED = "未发布"; public const string NOT_SYNCED = "未同步"; public const string PART_NOT_EXIST = "部件不存在"; public const string APPLYING = "申请中"; public const string SAP_NEED_ID = "SAP未分配ID"; private List duplicateOrderNrBeans = new List(); private MDPartsDatabase mdPartsDatabase; private KBackgroundWorker bgWorker_Parts; private KBackgroundWorker bgWorker_AddAll; private KBackgroundWorker bgWorker_Apply; private KBackgroundWorker bgWorker_Query; private KBackgroundWorker bgWorker_Query_TC; private KBackgroundWorker bgWorker_EPlan_to_TC; private KBackgroundWorker bgWorker_TC_to_EPlan; private KBackgroundWorker bgWorker_Revise; private KBackgroundWorker bgWorker_UploadPartsDB; private KBackgroundWorker bgWorker_SyncErpCode; private KBackgroundWorker bgWorker_AddGroup; private int sync_Success = 0; //private MDPart[] allParts; private Dictionary topGroupMap = new Dictionary(); private ObservableCollection ePlanToTCData = new ObservableCollection(); private ObservableCollection errData = new ObservableCollection(); private class EPlanGroup { public EPlanTreeItem topGroup { get; set; } public EPlanGroup(EPlanTreeItem topGroup) { this.topGroup = topGroup; } public Dictionary productGroupMap = new Dictionary(); } private void Async_SyncErpCode(object sender, DoWorkEventArgs e) { KUtil.Log("开始执行:同步ERP编码"); duplicateOrderNrBeans.Clear(); bgWorker_SyncErpCode.Progress("查询EPLAN数据...", 0); MDPart[] parts = EplanUtil.QueryParts(mdPartsDatabase, ""); int len = parts == null ? 0 : parts.Length; // MessageBox.Show(len + ""); KUtil.Log("查询结果数量:" + len); if (len == 0) { return; } Dictionary orderNr_itemId = new Dictionary(); for (int i = 0; i < len; i++) { if (bgWorker_SyncErpCode.IsCancel()) { e.Cancel = true; break; } MDPart part = parts[i]; //string orderNr = KUtil.RemoveSpace(EplanUtil.GetMDPropValue(part.Properties.ARTICLE_PARTNR)); //20241120 以EPLAN的ERP编码作为与TC的唯一识别; string orderNr = KUtil.RemoveSpace(EplanUtil.GetMDPropValue(part.Properties.ARTICLE_ERPNR)); //MessageBox.Show(orderNr); KUtil.Log((i + 1) + ". 检查部件:" + part.PartNr + "|" + orderNr); bgWorker_SyncErpCode.Progress("同步数据...( " + (i + 1) + " / " + len + " )", (i + 1) * 100 / len); if (!KUtil.IsEmpty(orderNr)) { string itemId = ""; if (orderNr_itemId.ContainsKey(orderNr)) { itemId = orderNr_itemId[orderNr]; } else { ModelObject[] revs= TCUtil.Query_LatestRevByOrderNr(orderNr); int revCnt = revs == null ? 0 : revs.Length; // MessageBox.Show(revCnt+""); if (revCnt==1) { Teamcenter.Soa.Client.Model.Strong.ItemRevision rev = revs[0] as Teamcenter.Soa.Client.Model.Strong.ItemRevision; if (rev != null) { ModelObject[] mos = TCUtil.Refresh(rev); TCUtil.GetProperties(false, mos, "item_id"); itemId = rev.Item_id; } } else { string manufacturer = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_MANUFACTURER).Trim(); DuplicateOrderNrBean duplicate = new DuplicateOrderNrBean() { orderNr=orderNr,partNr= part.PartNr,manufacturer=manufacturer}; if (revCnt == 0) { duplicate.reason = "TC中不存在物料"; } duplicateOrderNrBeans.Add(duplicate); } orderNr_itemId.Add(orderNr, itemId); } KUtil.Log(">> 设置ERPNumber = " + itemId); //写入ERPNumber MDPartsDatabaseTransaction trans = mdPartsDatabase.CreateTransaction(); part.Properties.ARTICLE_ORDERNR = itemId; if (!KUtil.IsEmpty(itemId)) { KUtil.Log(">> 设置为已同步"); part.Properties.ARTICLE_CERTIFICATE_ATEX = "已同步"; } trans.Commit(); trans.Dispose(); } } KUtil.Log("执行结束"); if (duplicateOrderNrBeans.Count > 0) { ExportDuplicate(duplicateOrderNrBeans); } else { KUtil.DispatcherShow(this, "同步完成"); } } public const string EXPORT_FILE_NAME = "TC存在重复的订单号"; public const string EXPORT_FILE_EXT = "xlsx"; private void ExportDuplicate(List duplicateOrderNrBeans) { int rowCnt = duplicateOrderNrBeans.Count; if (rowCnt == 0) { return; } string targetPath = null; this.Dispatcher.Invoke(new Action(delegate { using (var fbd = new FolderBrowserDialog()) { fbd.Description = "导出完成,TC中存在重复订单号,选择文件导出位置"; DialogResult result = fbd.ShowDialog(); if (result == System.Windows.Forms.DialogResult.OK) { targetPath = fbd.SelectedPath; } } })); if (string.IsNullOrWhiteSpace(targetPath)) { return; } KUtil.Log("导出重复订单号..."); KUtil.Log("导出路径:" + targetPath); string filePath = KUtil.GetFilePath(targetPath, EXPORT_FILE_NAME, EXPORT_FILE_EXT); KUtil.Log("导出文件:" + filePath); Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); if (xlApp == null) { KUtil.DispatcherShow(this, "Excel 未正确安装"); return; } Microsoft.Office.Interop.Excel.Workbook xlWorkBook; Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlWorkBook = xlApp.Workbooks.Add(misValue); xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); xlWorkSheet.Cells[1, 1] = "订货号"; xlWorkSheet.Cells[1, 2] = "部件号"; xlWorkSheet.Cells[1, 3] = "制造商"; xlWorkSheet.Cells[1, 4] = "问题原因"; for (int i = 0; i < rowCnt; i++) { int r = i + 2; DuplicateOrderNrBean bean = duplicateOrderNrBeans[i]; xlWorkSheet.Cells[r, 1] = bean.orderNr; xlWorkSheet.Cells[r, 2] = bean.partNr; xlWorkSheet.Cells[r, 3] = bean.manufacturer; xlWorkSheet.Cells[r, 4] = bean.reason; } //Here saving the file in xlsx xlWorkBook.SaveAs(filePath, Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); Marshal.ReleaseComObject(xlWorkSheet); Marshal.ReleaseComObject(xlWorkBook); Marshal.ReleaseComObject(xlApp); KUtil.DispatcherShow(this,"导出完成"); } private void Async_UploadPartsDB(object sender, DoWorkEventArgs e) { bgWorker_UploadPartsDB.Progress("准备上传EPLAN数据...", 0); string fmsHome = Environment.GetEnvironmentVariable("FMS_HOME"); string zipFile = fmsHome + "\\EPlan\\" + "EPLAN_PARTS.zip"; string eplanDataFolderPath = KUtil.GetConfigValue(KConfigure.EPLAN_DATA_SECTION, KConfigure.EPLAN_DATA_FOLDER); string skipFolders = KUtil.GetConfigValue(KConfigure.EPLAN_DATA_SECTION, KConfigure.EPLAN_DATA_SKIP_FOLDER); string dsUid = KUtil.GetConfigValue(KConfigure.EPLAN_DATA_SECTION, KConfigure.EPLAN_DATASET_UID); if (KUtil.IsEmpty(eplanDataFolderPath)) { throw new Exception("未配置EPLAN数据文件夹"); } if (KUtil.IsEmpty(dsUid)) { throw new Exception("未配置TC数据集UID"); } if (!System.IO.Directory.Exists(eplanDataFolderPath)) { throw new Exception("EPLAN数据文件夹不存在,请检查配置:" + eplanDataFolderPath); } KUtil.Log("准备上传EPLAN数据文件夹:" + eplanDataFolderPath); ModelObject mo = TCUtil.StringToComponent(dsUid); if (mo == null) { throw new Exception("未查询到数据集 uid = " + dsUid + ",请检查配置"); } ModelObject[] mos = TCUtil.Refresh(mo); TCUtil.GetProperties(false, mos, "object_string"); string dsName = mo.GetPropertyDisplayableValue("object_string"); KUtil.Log("找到数据集:" + dsName); if (!TCUtil.IsType(mo.SoaType, "Zip")) { throw new Exception("配置的数据集<" + dsName + ">不是Zip数据集,uid = " + dsUid); } this.bgWorker_UploadPartsDB.Progress("压缩目录...", 30); if (!KUtil.ZipDirectory(eplanDataFolderPath, zipFile, null, skipFolders)) { throw new Exception("压缩EPLAN部件库失败"); } KUtil.Log("压缩完成"); this.bgWorker_UploadPartsDB.Progress("上传文件...", 70); TCUtil.UploadFile((Teamcenter.Soa.Client.Model.Strong.Dataset)mo, zipFile, "ZIPFILE"); KUtil.Log("上传成功"); this.Dispatcher.Invoke(new Action(delegate { MessageBox.Show(this, "上传成功"); })); } private void Async_Revise(object sender, DoWorkEventArgs e) { List reviseList = e.Argument as List; if (reviseList.Count == 0) { return; } bgWorker_Revise.Progress("正在升版...", 0); int len = reviseList.Count; for (int i = 0; i < len; i++) { if (bgWorker_Revise.IsCancel()) { e.Cancel = true; return; } bgWorker_Revise.Progress("正在升版...( " + (i + 1) + " / " + len + " )", (i + 1) * 100 / len); KPartSyncDataRow bean = reviseList[i]; Teamcenter.Soa.Client.Model.Strong.ItemRevision newRev = TCUtil.Revise(bean.rev); if (newRev == null) { throw new Exception("对象升版失败:" + bean.tc_itemid); } Teamcenter.Soa.Client.Model.ModelObject[] mo = TCUtil.Refresh(newRev); TCUtil.GetProperties(false, mo, "item_revision_id"); MDPartsDatabaseTransaction trans = mdPartsDatabase.CreateTransaction(); bean.part.Properties.ARTICLE_CERTIFICATE_ATEX = ""; trans.Commit(); trans.Dispose(); this.Dispatcher.Invoke(new Action(delegate { bean.tc_revid = newRev.Item_revision_id; bean.tc_releasestatus = NOT_RELEASEED; bean.sync_status = NOT_SYNCED; bean.rev = newRev; bean.tc_desc = TCUtil.GetRevConfigProp(newRev, KUtil.GetConfigValue(KConfigure.UI_SOME_SECTION, KConfigure.UI_PROP_DESC)); bean.tc_manufacturer = TCUtil.GetRevConfigProp(newRev, KUtil.GetConfigValue(KConfigure.UI_SOME_SECTION, KConfigure.UI_PROP_MANUFACTURER)); table_Sync_To_TC.Items.Refresh(); })); } } private void Async_TC_to_EPlan(object sender, DoWorkEventArgs e) { sync_Success = 0; this.Dispatcher.Invoke(new Action(delegate { errData.Clear(); })); bgWorker_TC_to_EPlan.Progress("执行中...", 0); int len = 0; this.Dispatcher.Invoke(new Action(delegate { len = ePlanToTCData.Count; })); for (int i = 0; i < len; i++) { if (bgWorker_TC_to_EPlan.IsCancel()) { e.Cancel = true; return; } bgWorker_TC_to_EPlan.Progress("执行中...( " + (i + 1) + " / " + len + " )", (i + 1) * 100 / len); KPartSyncDataRow bean = ePlanToTCData[i]; if (bean.rev == null) { continue; } string errMsg = null; try { errMsg = Item_to_EPlan(bean); } catch (System.Exception ex) { KUtil.LogErr(ex); errMsg = ex.Message; } if (KUtil.IsEmpty(errMsg)) { sync_Success++; } else { if (!"已同步".Equals(errMsg)) { this.Dispatcher.Invoke(new Action(delegate { errData.Add(GetSyncResultBean(bean,errMsg)); })); } } } } private void Async_EPlan_to_TC(object sender, DoWorkEventArgs e) { sync_Success = 0; this.Dispatcher.Invoke(new Action(delegate { errData.Clear(); })); bgWorker_EPlan_to_TC.Progress("执行中...", 0); int len = 0; this.Dispatcher.Invoke(new Action(delegate { len = ePlanToTCData.Count; })); for (int i = 0; i < len; i++) { if (bgWorker_EPlan_to_TC.IsCancel()) { e.Cancel = true; return; } bgWorker_EPlan_to_TC.Progress("执行中...( " + (i + 1) + " / " + len + " )", (i + 1) * 100 / len); KPartSyncDataRow bean = ePlanToTCData[i]; if (bean.part == null) { continue; } string errMsg = null; try { errMsg = Part_to_TC(bean); } catch (System.Exception ex) { KUtil.LogErr(ex); errMsg = ex.Message; } if (KUtil.IsEmpty(errMsg)) { sync_Success++; } else { if (!"已同步".Equals(errMsg)) { this.Dispatcher.Invoke(new Action(delegate { string jldw = ""; string desc_cn = ""; string desc_en = ""; if (bean.part != null) { jldw = EplanUtil.GetMDPropValue(bean.part.Properties.ARTICLE_QUANTITYUNIT, Eplan.EplApi.Base.ISOCode.Language.L___); desc_cn = EplanUtil.GetMDPropValue(bean.part.Properties.ARTICLE_NOTE, EplanUtil.Language_CN); desc_en = EplanUtil.GetMDPropValue(bean.part.Properties.ARTICLE_NOTE, EplanUtil.Language); } errData.Add(new SyncResult(bean) { partNr = bean.eplan_partno, orderNr = bean.eplan_orderno, name = bean.eplan_name, jldw = jldw, desc_cn = desc_cn, desc_en = desc_en, reason = errMsg }); })); } } } //this.Dispatcher.Invoke(new Action(delegate{ // new PartSyncResult(this, sync_Success, ePlanToTCData.Count - sync_Success - errData.Count, errData).ShowDialog(); //})); } private void bgWorker_EPlan_to_TC_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error == null) { new PartSyncResult(mdPartsDatabase, this, sync_Success, ePlanToTCData.Count - sync_Success - errData.Count, errData).ShowDialog(); this.table_Sync_To_TC.Items.Refresh(); //else { // MessageBox.Show(parent, "操作完成"); //} } } private String Item_to_EPlan(KPartSyncDataRow bean) { Teamcenter.Soa.Client.Model.Strong.ItemRevision rev = bean.rev; MDPart part = bean.part; bool isNew = false; if (part == null) { string orderNrProp = KUtil.GetConfigValue(KConfigure.PART_SYNC_SECTION, KConfigure.PART_SYNC_OrderNr_TC); if (KUtil.IsEmpty(orderNrProp)) { throw new Exception("未配置订货号在TC中的属性"); } string orderNr = KUtil.RemoveSpace( TCUtil.GetRevConfigProp(bean.rev, orderNrProp)); string partNr = ""; this.Dispatcher.Invoke(new Action(delegate { NewPartNr newPartNrDialog = new NewPartNr(this, orderNr); newPartNrDialog.ShowDialog(); partNr = newPartNrDialog.partNr; })); if (KUtil.IsEmpty(partNr)) { return "部件不存在"; } KUtil.Log("新建部件:"+partNr); part = EplanUtil.NewPart(mdPartsDatabase, rev, partNr); if (part == null) { throw new Exception("新建Part失败:"+partNr); } //写入订货号 isNew = true; MDPartsDatabaseTransaction trans = mdPartsDatabase.CreateTransaction(); part.Properties.ARTICLE_PARTNR = orderNr; trans.Commit(); trans.Dispose(); bean.part = part; } //同步属性到EPlan KUtil.Sync_Property_to_EPlan(mdPartsDatabase, rev, bean.part); if (isNew) { MDPartsDatabaseTransaction trans = mdPartsDatabase.CreateTransaction(); bean.part.Properties.ARTICLE_ERPNR = rev.Item_id; bean.part.Properties.ARTICLE_CERTIFICATE_ATEX = "已同步"; trans.Commit(); trans.Dispose(); } string eplan_partno = EplanUtil.GetMDPropValue(part.PartNr); string eplan_orderno = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_ORDERNR); string erpNr = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_ERPNR); string manufacturer = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_MANUFACTURER).Trim(); string eplan_name = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_DESCR1,EplanUtil.Language_CN); string eplan_desc = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_NOTE,EplanUtil.Language_CN); this.Dispatcher.Invoke(new Action(delegate { bean.eplan_orderno = rev.Item_id; bean.eplan_partno = eplan_partno; bean.eplan_erpno = erpNr; bean.eplan_name = eplan_name; bean.eplan_desc = eplan_desc; if (isNew) { bean.sync_status = "已同步"; } table_Sync_To_TC.Items.Refresh(); })); return ""; } private bool checkOrderNr(KPartSyncDataRow bean) { string orderNr = bean.eplan_orderno == null ? "" : bean.eplan_orderno; foreach(KPartSyncDataRow r in ePlanToTCData) { if (orderNr.Equals(r.eplan_orderno) && !bean.Equals(r)) {//订货号重复行 return false; } } return true; } private string Part_to_TC(KPartSyncDataRow bean) { if (bean.part == null) { return "部件不存在"; } if (!checkOrderNr(bean)) { return "订货号相同"; } string errMsg = null; string releaseStatus = bean.tc_releasestatus; string syncStatus = bean.sync_status; Teamcenter.Soa.Client.Model.Strong.ItemRevision rev = null; switch (syncStatus) { case NOT_SYNCED: if (NOT_RELEASEED.Equals(releaseStatus)) { //通过item获取对象 rev = TCUtil.Query_LatestRev(bean.tc_itemid); if (rev == null) { errMsg = "未查询到对象:" + bean.tc_itemid; } } else { //失败:未升版 errMsg = "未升版"; } break; case "新增": errMsg = "请在TC中进行元器件创建"; //新建对象 反写ID //string tcItemType = KUtil.GetConfigValue(KConfigure.PART_SYNC_SECTION, KConfigure.PART_SYNC_TC_ITEM_TYPE); //if (KUtil.IsEmpty(tcItemType)) { // throw new Exception("未配置TC数据类型"); //} //rev = TCUtil.CreateNewRev(tcItemType); //if (rev == null) { // errMsg = "新建对象失败"; //} break; case SAP_NEED_ID: //失败: errMsg = SAP_NEED_ID; break; case "已同步": if (!NOT_RELEASEED.Equals(releaseStatus)) { return "未升版"; } if (NOT_RELEASEED.Equals(releaseStatus)) { //通过item获取对象 rev = TCUtil.Query_LatestRev(bean.tc_itemid); if (rev == null) { errMsg = "未查询到对象:" + bean.tc_itemid; } } else { //失败:未升版 errMsg = "未升版"; } break; //return "已同步"; case "申请中": return "申请中"; default: //失败:未知状态 errMsg = "未知同步状态:" + syncStatus; break; } if (KUtil.IsEmpty(errMsg)) { if (rev == null) { errMsg = "获取TC对象异常"; } else { { string ordernr = bean.part.Properties.ARTICLE_PARTNR; string ordernr2 = KUtil.RemoveSpace(ordernr); if (ordernr != null && !ordernr.Equals(ordernr2)) { MDPartsDatabaseTransaction trans1 = mdPartsDatabase.CreateTransaction(); KUtil.Log("订货号去空格:" + ordernr + " -> " + ordernr2); bean.part.Properties.ARTICLE_PARTNR = ordernr2; trans1.Commit(); trans1.Dispose(); } } //属性同步 发送分类 KUtil.Sync_Property_to_TC(rev, bean.part); Teamcenter.Soa.Client.Model.ModelObject[] mo = TCUtil.Refresh(rev); TCUtil.GetProperties(false, mo, "item_id", "item_revision_id", "object_name"); MDPartsDatabaseTransaction trans = mdPartsDatabase.CreateTransaction(); //EPLAN测试问题反馈-20241217 5.EPLAN同步到TC的属性对应关系有问题,修改了EPLAN中的属性 //bean.part.Properties.ARTICLE_ERPNR = rev.Item_id; bean.part.Properties.ARTICLE_ORDERNR = rev.Item_id; bean.part.Properties.ARTICLE_CERTIFICATE_ATEX = "已同步"; trans.Commit(); trans.Dispose(); this.Dispatcher.Invoke(new Action(delegate { //bean.eplan_orderno = EplanUtil.GetMDPropValue(bean.part.Properties.ARTICLE_PARTNR); bean.eplan_orderno = rev.Item_id; //bean.eplan_erpno = rev.Item_id; bean.tc_itemid = rev.Item_id; bean.tc_revid = rev.Item_revision_id; bean.tc_name = rev.Object_name; bean.sync_status = "已同步"; bean.tc_desc = TCUtil.GetRevConfigProp(rev, KUtil.GetConfigValue(KConfigure.UI_SOME_SECTION, KConfigure.UI_PROP_DESC)); bean.tc_manufacturer = TCUtil.GetRevConfigProp(rev, KUtil.GetConfigValue(KConfigure.UI_SOME_SECTION, KConfigure.UI_PROP_MANUFACTURER)); bean.rev = rev; table_Sync_To_TC.Items.Refresh(); })); } } return errMsg; } private void Async_QueryTCParts(object sender, DoWorkEventArgs e) { this.Dispatcher.Invoke(new Action(delegate { ePlanToTCData.Clear(); })); string partNr = ""; string itemId = ""; this.Dispatcher.Invoke(new Action(delegate { partNr = tb_PartNr.Text; itemId = tb_ERPNr.Text; })); string queryName = KUtil.GetConfigValue(KConfigure.PART_QUERY_SECTION, KConfigure.PART_QUERY_NAME); string itemField = KUtil.GetConfigValue(KConfigure.PART_QUERY_SECTION, KConfigure.PART_QUERY_ITEM_ID); string partField = KUtil.GetConfigValue(KConfigure.PART_QUERY_SECTION, KConfigure.PART_QUERY_ORDERNR); if (KUtil.IsEmpty(queryName) || KUtil.IsEmpty(itemField) || KUtil.IsEmpty(partField)) { throw new Exception("TC部件查询配置缺失,请检查设置"); } string orderNrProp = KUtil.GetConfigValue(KConfigure.PART_SYNC_SECTION, KConfigure.PART_SYNC_OrderNr_TC); if (KUtil.IsEmpty(orderNrProp)) { throw new Exception("未配置订货号在TC中的属性"); } Dictionary fields = new Dictionary(); if (!KUtil.IsEmpty(itemId)) { fields.Add(itemField, itemId); } if (!KUtil.IsEmpty(partNr)) { fields.Add(partField, partNr); } if (fields.Count == 0) { KUtil.DispatcherShow(this, "请输入查询条件"); //MessageBox.Show(this, "请输入查询条件"); return; } KUtil.Log("查询部件:PartNR = " + partNr + ", ErpNR = " + itemId); bgWorker_Query_TC.Progress("查询中...", 0); ModelObject[] unsyncItems = TCUtil.query(queryName, fields); int len = unsyncItems == null ? 0 : unsyncItems.Length; // MessageBox.Show(len + " 1"); KUtil.Log("查询结果数量:" + len); for (int i = 0; i < len; i++) { if (bgWorker_Query_TC.IsCancel()) { e.Cancel = true; return; } bgWorker_Query_TC.Progress("加载数据...( " + (i + 1) + " / " + len + " )", (i + 1) * 100 / len); ModelObject rev = unsyncItems[i]; ModelObject[] mo = TCUtil.Refresh(rev); TCUtil.GetProperties(false, mo, "object_string"); if (!TCUtil.IsType(rev.SoaType, "ItemRevision")) { throw new Exception("获取配置属性失败,对象不是版本类型:" + rev.GetPropertyDisplayableValue("object_string")); } Add_Sync_Data((Teamcenter.Soa.Client.Model.Strong.ItemRevision)rev, orderNrProp); } } private void Async_QueryParts(object sender, DoWorkEventArgs e) { this.Dispatcher.Invoke(new Action(delegate { ePlanToTCData.Clear(); })); string partNr = ""; string erpNr = ""; this.Dispatcher.Invoke(new Action(delegate { partNr = tb_PartNr.Text; erpNr = tb_ERPNr.Text; })); KUtil.Log("查询部件:OrderNr = " + partNr + ", ErpNR = " + erpNr); bgWorker_Query.Progress("查询中...", 0); MDPart[] unsyncParts = EplanUtil.QueryParts(mdPartsDatabase, partNr, erpNr); int len = unsyncParts == null ? 0 : unsyncParts.Length; KUtil.Log("查询结果数量:" + len); for (int i = 0; i < len; i++) { if (bgWorker_Query.IsCancel()) { e.Cancel = true; return; } bgWorker_Query.Progress("加载数据...( " + (i + 1) + " / " + len + " )", (i + 1) * 100 / len); Add_Sync_Data(unsyncParts[i], false); } } public static bool NeedApply(KPartSyncDataRow bean) { return bean != null && SAP_NEED_ID.Equals(bean.sync_status); } public static SyncResult GetSyncResultBean(KPartSyncDataRow bean, string errMsg) { string jldw = ""; string desc_cn = ""; string desc_en = ""; if (bean.part != null) { jldw = EplanUtil.GetMDPropValue(bean.part.Properties.ARTICLE_QUANTITYUNIT, Eplan.EplApi.Base.ISOCode.Language.L___); desc_cn = EplanUtil.GetMDPropValue(bean.part.Properties.ARTICLE_NOTE, EplanUtil.Language_CN); desc_en = EplanUtil.GetMDPropValue(bean.part.Properties.ARTICLE_NOTE, EplanUtil.Language); } return new SyncResult(bean) { partNr = bean.eplan_partno, orderNr = bean.eplan_orderno, name = bean.eplan_name, jldw = jldw, desc_cn = desc_cn, desc_en = desc_en, reason = errMsg }; } private void Async_Apply(object sender, DoWorkEventArgs e) { System.Collections.IList selectedItems = null; bgWorker_Apply.Progress("检查数据...", 0); this.Dispatcher.Invoke(new Action(delegate { selectedItems = table_Sync_To_TC.SelectedItems; })); if (selectedItems == null || selectedItems.Count == 0) { KUtil.DispatcherShow(this, "请选择要发起编码申请的部件"); return; } KUtil.Log("发起编码申请..."); bool descEmpty = false; List applyData = new List(); for(int i = 0; i < selectedItems.Count; i++) { KPartSyncDataRow dataRow = (KPartSyncDataRow)selectedItems[i]; if (!NeedApply(dataRow)) { continue; } SyncResult bean = GetSyncResultBean(dataRow, SAP_NEED_ID); if (KUtil.IsEmpty(bean.desc_en)) { KUtil.Log("描述缺失:" + bean.partNr); descEmpty = true; //break; } else { applyData.Add(bean); } } if(descEmpty) { KUtil.Log("缺少英文描述,请填写后重新申请"); KUtil.DispatcherShow(this, "缺少英文描述,请填写后重新申请"); return; } bgWorker_Apply.Progress("发起申请...", 0); PartSyncResult.DoApply(this, applyData, mdPartsDatabase); this.Dispatcher.Invoke(new Action(delegate { this.table_Sync_To_TC.Items.Refresh(); })); } private void Async_AddAllUnsyncedParts(object sender, DoWorkEventArgs e) { string partNr = ""; string erpNr = ""; this.Dispatcher.Invoke(new Action(delegate { partNr = tb_PartNr.Text; erpNr = tb_ERPNr.Text; })); KUtil.Log("查询未同步部件:OrderNr = " + partNr + ", ErpNR = " + erpNr); bgWorker_AddAll.Progress("查询中...", 0); List unsyncParts = EplanUtil.GetUnsyncedParts(mdPartsDatabase, partNr, erpNr); int len = unsyncParts == null ? 0 : unsyncParts.Count; KUtil.Log("查询全部未同步部件数量:" + len); for (int i = 0; i < len; i++) { if (bgWorker_AddAll.IsCancel()) { e.Cancel = true; return; } bgWorker_AddAll.Progress("加载数据...( " + (i + 1) + " / " + len + " )", (i + 1) * 100 / len); Add_Sync_Data(unsyncParts[i], false); } } private void Async_LoadParts(object sender, DoWorkEventArgs e) { EPlanTreeItem parent = (EPlanTreeItem)e.Argument; if (parent != null) { Cycle_Home(parent, e); return; } //TreeViewItem node_home = null; bgWorker_Parts.Progress("加载数据...", 0); EPlanTreeItem tree_home = null; this.Dispatcher.Invoke(new Action(delegate { tree_home = new EPlanTreeItem("Parts"); tree_Parts.Items.Add(tree_home); })); /*int len = allParts.Length; for (int i = 0; i < len; i++) { if (bgWorkder_Parts.IsCancel()) { e.Cancel = true; return; } bgWorkder_Parts.Progress("加载数据...( "+(i+1)+" / "+len+" )", (i + 1) * 100 / len); MDPart p = allParts[i]; EPlanTreeItem groupItem = FindTreeItem(p.GenericProductGroup, p.ProductGroup, tree_home); if (groupItem == null) { throw new Exception("获取组节点异常"); } this.Dispatcher.Invoke(new Action(delegate { groupItem.Items.Add(new EPlanTreeItem(p)); })); } this.Dispatcher.Invoke(new Action(delegate { foreach (EPlanGroup g in topGroupMap.Values) { g.topGroup.Items.SortDescriptions.Add(new SortDescription("Header", ListSortDirection.Ascending)); g.topGroup.Items.Refresh(); } }));*/ //加载TOPGROUP Init_TopGroup(MDPartsDatabaseItem.Enums.ProductTopGroup.Electric, tree_home); Init_TopGroup(MDPartsDatabaseItem.Enums.ProductTopGroup.Mechanic, tree_home); Init_TopGroup(MDPartsDatabaseItem.Enums.ProductTopGroup.Fluid, tree_home); Init_TopGroup(MDPartsDatabaseItem.Enums.ProductTopGroup.Process, tree_home); Init_TopGroup(MDPartsDatabaseItem.Enums.ProductTopGroup.Invaild, tree_home); Init_TopGroup(MDPartsDatabaseItem.Enums.ProductTopGroup.Undefined, tree_home); this.Dispatcher.Invoke(new Action(delegate { tree_home.IsExpanded = true; })); } private EPlanTreeItem FindTreeItem(MDPartsDatabaseItem.Enums.ProductTopGroup topGroup, MDPartsDatabaseItem.Enums.ProductGroup group, EPlanTreeItem root) { EPlanGroup ePlanGroup = null; if (topGroupMap.ContainsKey(topGroup)) { ePlanGroup = topGroupMap[topGroup]; } else { this.Dispatcher.Invoke(new Action(delegate { //string topGroupName = MDPartsDatabaseItem.GetProductTopGroupName(topGroup); EPlanTreeItem topGroupItem = new EPlanTreeItem(topGroup); ePlanGroup = new EPlanGroup(topGroupItem); root.Items.Add(topGroupItem); topGroupMap.Add(topGroup, ePlanGroup); })); } if (ePlanGroup == null) { return null; } if (ePlanGroup.productGroupMap.ContainsKey(group)) { return ePlanGroup.productGroupMap[group]; } else { EPlanTreeItem groupItem = null; this.Dispatcher.Invoke(new Action(delegate { //string groupName = MDPartsDatabaseItem.GetProductGroupName(group); groupItem = new EPlanTreeItem(topGroup,group); ePlanGroup.topGroup.Items.Add(groupItem); ePlanGroup.productGroupMap.Add(group, groupItem); })); return groupItem; } } private void Init_TopGroup(MDPartsDatabaseItem.Enums.ProductTopGroup topGroup, EPlanTreeItem tree_home) { //if (!EplanUtil.TopGroupHasPart(topGroup)) { // return; //} //string topGroupName = MDPartsDatabaseItem.GetProductTopGroupName(topGroup); EPlanTreeItem tree_TopGroup = null; this.Dispatcher.Invoke(new Action(delegate { tree_TopGroup = new EPlanTreeItem(topGroup); //KUtil.Log(tree_TopGroup.Header.ToString()); tree_home.Items.Add(tree_TopGroup); })); //加载Group MDPartsDatabaseItem.Enums.ProductGroup[] groups = MDPartsDatabaseItem.GetAvailableProductGroups(topGroup); for (int i = 0; i < groups.Length; i++) { MDPartsDatabaseItem.Enums.ProductGroup group = groups[i]; //if (!EplanUtil.GroupHasPart(topGroup, group)) { // continue; //} this.Dispatcher.Invoke(new Action(delegate { EPlanTreeItem tree_Group = new EPlanTreeItem(topGroup,group); //KUtil.Log(">> " + tree_Group.Header.ToString()); tree_TopGroup.Items.Add(tree_Group); tree_Group.Items.Add(new EPlanTreeItem());//展开加载标记 })); } this.Dispatcher.Invoke(new Action(delegate { tree_TopGroup.Items.SortDescriptions.Add(new SortDescription("Header", ListSortDirection.Ascending)); tree_TopGroup.Items.Refresh(); })); } private void Cycle_Home(EPlanTreeItem treeItem, DoWorkEventArgs e) { DateTime t1,t2; bool flag = false; this.Dispatcher.Invoke(new Action(delegate { if (!(treeItem.Items.Count == 1 && ((EPlanTreeItem)treeItem.Items.GetItemAt(0)).isLoadMark)) { flag = true; } })); if (flag) { return; } int topGroupId = -404; int groupId = -404; string groupName = ""; this.Dispatcher.Invoke(new Action(delegate { treeItem.Items.Clear(); EPlanTreeItem topGroupItem = (EPlanTreeItem)treeItem.Parent; KUtil.Log("查询:" + topGroupItem.Header + "|" + treeItem.Header); topGroupId = topGroupItem.groupId; groupId = treeItem.groupId; groupName = treeItem.Header.ToString(); })); if (topGroupId == -404 && groupId == -404) { return; } bgWorker_Parts.Progress("查询中...", 0); t1 = DateTime.Now; MDPart[] parts = EplanUtil.GetParts(mdPartsDatabase, topGroupId, groupId); t2 = DateTime.Now; //KUtil.DispatcherShow(this, "查询耗时:" + (t2 - t1).TotalSeconds + "毫秒"); KUtil.Log("查询耗时:" + (t2 - t1).TotalSeconds + "秒"); int len = parts == null ? 0 : parts.Length; for (int i = 0; i < len; i++) { if (bgWorker_Parts.IsCancel()) { e.Cancel = true; return; } bgWorker_Parts.Progress("加载数据...( " + (i + 1) + " / " + len + " )", (i + 1) * 100 / len); this.Dispatcher.Invoke(new Action(delegate { treeItem.Items.Add(new EPlanTreeItem(parts[i], groupName)); })); } //string group = treeItem.Header as string; //MDPartsDatabaseItem.GetAvailableProductGroups //ModelObject parent = treeItem.mo; //ModelObject[] children = null; ////var t = parent.GetType(); //SoaType soaType = parent.SoaType; //ModelObject[] mo = TCUtil.Refresh(parent); //if (TCUtil.IsType(soaType, "Folder")) { // TCUtil.GetProperties(false, mo, "contents"); // children = ((Folder)parent).Contents; //} //else if (TCUtil.IsType(soaType, "Item") || TCUtil.IsType(soaType, "ItemRevision")) { // children = TCUtil.GetChildFromPref(parent); //} //else if (TCUtil.IsType(soaType, "Dataset")) { // children = null; //} //else { // return; //} //if (children == null) { // return; //} //if (bgWorker_Query.IsCancel()) { // e.Cancel = true; // return; //} //ItemCollection node_children = null; //this.Dispatcher.Invoke(new Action(delegate { // node_children = treeItem.Items; //})); //int len = children.Length; //for (int i = 0; i < len; i++) { // if (bgWorker_Query.IsCancel()) { // e.Cancel = true; // return; // } // bgWorker_Homer.Progress("加载中...( " + (i + 1) + " / " + len + " )", (i + 1) * 100 / len); // ModelObject c = children[i]; // EPlanTreeItem node_child = null; // this.Dispatcher.Invoke(new Action(delegate { // node_child = new EPlanTreeItem(c); // node_children.Add(node_child); // node_child.Items.Add(new EPlanTreeItem(null)); // })); //} } private void Window_Loaded(object sender, RoutedEventArgs e) { bgWorker_Parts.Start(null,true); } private void Tree_Parts_Expanded(object sender, RoutedEventArgs e) { EPlanTreeItem item = e.OriginalSource as EPlanTreeItem; bgWorker_Parts.Start(item,true); } private void Table_Sync_To_TC_Loaded(object sender, RoutedEventArgs e) { } /// /// 元器件库添加按钮 /// /// /// private void Add_Button_Click(object sender, RoutedEventArgs e) { EPlanTreeItem selectedItem = tree_Parts.SelectedItem as EPlanTreeItem; if (selectedItem == null) { return; } if(selectedItem.part == null) { this.bgWorker_AddGroup.Start(null); return; } try { Add_Sync_Data(selectedItem.part, true); } catch (System.Exception ex) { KUtil.LogErr(ex); MessageBox.Show(this, "添加数据出错:" + ex.Message); } } private void Async_AddGroup(object sender, DoWorkEventArgs e) { EPlanTreeItem selectedItem = null; this.Dispatcher.Invoke(new Action(delegate { selectedItem = tree_Parts.SelectedItem as EPlanTreeItem; })); if (selectedItem == null) { return; } if (selectedItem.part == null) { ItemCollection items = null; this.Dispatcher.Invoke(new Action(delegate { items = selectedItem.Items; })); int len = items==null?0:items.Count; for (int i = 0; i < len; i++) { if (bgWorker_AddGroup.IsCancel()) { e.Cancel = true; return; } EPlanTreeItem child = items[i] as EPlanTreeItem; //this.Dispatcher.Invoke(new Action(delegate { // child = selectedItem.ItemContainerGenerator.ContainerFromItem(items[i]) as EPlanTreeItem; //})); if (child == null || child.part == null) { continue; } bgWorker_AddGroup.Progress("添加数据...( "+(i+1)+" / "+len+" )", (i + 1) * 100 / len); Add_Sync_Data(child.part, false); } return; } Add_Sync_Data(selectedItem.part, true); } private KPartSyncDataRow AddDataRow(bool select,Teamcenter.Soa.Client.Model.Strong.ItemRevision tcRev,MDPart part) { string partNr = ""; string orderNr = ""; string itemID = ""; string itemRev = ""; string itemName = ""; string releaseStatus = ""; string manufacturer = ""; string atex = ""; string eplan_name = ""; string eplan_desc = ""; string eplan_erpNo = ""; if (part != null) { partNr = part.PartNr; //orderNr = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_PARTNR); orderNr = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_ORDERNR); orderNr = KUtil.RemoveSpace(orderNr); eplan_erpNo = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_ERPNR); manufacturer = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_MANUFACTURER).Trim(); atex = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_CERTIFICATE_ATEX); eplan_name = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_DESCR1,EplanUtil.Language_CN); eplan_desc = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_NOTE,EplanUtil.Language_CN); } if (tcRev != null) { Teamcenter.Soa.Client.Model.ModelObject[] mo = TCUtil.Refresh(tcRev); TCUtil.GetProperties(false, mo, "item_id", "item_revision_id", "object_name", "release_status_list"); itemID = tcRev.Item_id; itemRev = tcRev.Item_revision_id; itemName = tcRev.Object_name; Teamcenter.Soa.Client.Model.Strong.ReleaseStatus[] releaseList = tcRev.Release_status_list; TCUtil.GetProperties(false, releaseList, "name"); for (int i = 0; i < releaseList.Length; i++) { releaseStatus += releaseList[i].Name; if (i != releaseList.Length - 1) { releaseStatus += ", "; } } } if (KUtil.IsEmpty(releaseStatus)) { releaseStatus = NOT_RELEASEED; } string syncStatus = GetSyncStatus(partNr,atex, manufacturer, itemID); KPartSyncDataRow b = new KPartSyncDataRow(); b.index = ePlanToTCData.Count + 1; b.eplan_orderno = orderNr; b.eplan_partno = partNr; b.eplan_erpno = eplan_erpNo; b.eplan_name = eplan_name; b.eplan_desc = eplan_desc; b.eplan_manufacturer = manufacturer; b.tc_itemid = itemID; b.tc_name = itemName; b.tc_revid = itemRev; b.tc_desc = TCUtil.GetRevConfigProp(tcRev,KUtil.GetConfigValue(KConfigure.UI_SOME_SECTION,KConfigure.UI_PROP_DESC)); b.tc_manufacturer = TCUtil.GetRevConfigProp(tcRev, KUtil.GetConfigValue(KConfigure.UI_SOME_SECTION, KConfigure.UI_PROP_MANUFACTURER)); b.tc_releasestatus = releaseStatus; b.sync_status = syncStatus; b.part = part; b.rev = tcRev; this.Dispatcher.Invoke(new Action(delegate { if (ePlanToTCData.Contains(b)) { if (select) { table_Sync_To_TC.SelectedItem = b; table_Sync_To_TC.ScrollIntoView(b); } } else { ePlanToTCData.Add(b); table_Sync_To_TC.ScrollIntoView(b); } })); return b; } private void Add_Sync_Data(MDPart part, bool select) { string orderNr = KUtil.RemoveSpace(EplanUtil.GetMDPropValue(part.Properties.ARTICLE_ERPNR)); ModelObject[] tcRevs = TCUtil.Query_LatestRevByOrderNr(orderNr); int len = tcRevs == null ? 0 : tcRevs.Length; if (len>0) { for (int k = 0; k < len; k++) { Teamcenter.Soa.Client.Model.Strong.ItemRevision tcRev = tcRevs[k] as Teamcenter.Soa.Client.Model.Strong.ItemRevision; if (tcRev == null) { continue; } AddDataRow(select,tcRev, part); } } else { AddDataRow(select,null, part); } } private void Add_Sync_Data(Teamcenter.Soa.Client.Model.Strong.ItemRevision rev, string orderNrConfig) { ModelObject[] mo = TCUtil.Refresh(rev); TCUtil.GetProperties(false, mo, "item_id", "item_revision_id", "release_status_list", "object_string"); string orderNr = TCUtil.GetRevConfigProp(rev, orderNrConfig); KUtil.Log("查询部件:OrderNr = " + orderNr); MDPart[] unsyncParts = EplanUtil.QueryParts2(mdPartsDatabase, orderNr, ""); int len = unsyncParts == null ? 0 : unsyncParts.Length; //MessageBox.Show(len + " 2"); KUtil.Log("查询结果数量:" + len); if (len > 0) { for(int k = 0; k < len; k++) { AddDataRow(false, rev, unsyncParts[k]); } } else { AddDataRow(false, rev, null); } } private string GetSyncStatus(string partNr,string syncStatus, string type, string itemID) { if (KUtil.IsEmpty(partNr)) { return PART_NOT_EXIST; } if (!"已同步".Equals(syncStatus)) { if (KUtil.IsEmpty(itemID)) { return "新增"; //if (type == null) { // type = ""; //} //type = type.Trim().ToUpper(); //if ("SIEMENS".Equals(type)||"SIE".Equals(type)) { // if (APPLYING.Equals(syncStatus)){ // return syncStatus; // } // return SAP_NEED_ID; //} //else { // return "新增"; //} } else { return NOT_SYNCED; } } return syncStatus; } private void Remove_Button_Click(object sender, RoutedEventArgs e) { try { System.Collections.IList selectedItems = table_Sync_To_TC.SelectedItems; if (selectedItems == null || selectedItems.Count == 0) { return; } while (selectedItems.Count > 0) { ePlanToTCData.Remove((KPartSyncDataRow)selectedItems[0]); table_Sync_To_TC.Items.Refresh(); } for (int i = 0; i < ePlanToTCData.Count; i++) { ePlanToTCData[i].index = (i + 1); } table_Sync_To_TC.Items.Refresh(); } catch (System.Exception ex) { KUtil.LogErr(ex); MessageBox.Show(this, ex.Message); } } private void Add_All_Button_Click(object sender, RoutedEventArgs e) { this.bgWorker_AddAll.Start(null); } private void Apply_Button_Click(object sender, RoutedEventArgs e) { this.bgWorker_Apply.Start(null); } private void Query_Button_Click(object sender, RoutedEventArgs e) { this.bgWorker_Query.Start(null); } private void EPlan_to_TC_Button_Click(object sender, RoutedEventArgs e) { this.bgWorker_EPlan_to_TC.Start(null); } private void Close_Button_Click(object sender, RoutedEventArgs e) { Close(); } private void Revise_Button_Click(object sender, RoutedEventArgs e) { System.Collections.IList selectedItems = table_Sync_To_TC.SelectedItems; if (selectedItems == null || selectedItems.Count == 0) { return; } List reviseList = new List(); for (int i = 0; i < selectedItems.Count; i++) { KPartSyncDataRow bean = selectedItems[i] as KPartSyncDataRow; if (bean.rev != null) { reviseList.Add(bean); } } if (reviseList.Count == 0) { MessageBox.Show(this, "没有可升版的数据"); return; } bgWorker_Revise.Start(reviseList); } private void TC_to_EPLAN_Button_Click(object sender, RoutedEventArgs e) { this.bgWorker_TC_to_EPlan.Start(null); } private void TC_Query_Button_Click(object sender, RoutedEventArgs e) { bgWorker_Query_TC.Start(null); } private void Tree_Parts_MouseDoubleClick(object sender, MouseButtonEventArgs e) { Add_Button_Click(sender, e); } private void Upload_PartsDB(object sender, RoutedEventArgs e) { bgWorker_UploadPartsDB.Start(null); } private void SyncErpCode_Button_Click(object sender, RoutedEventArgs e) { bgWorker_SyncErpCode.Start(null); } private void Button_Click(object sender, RoutedEventArgs e) { } } }