You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1136 lines
54 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Eplan.EplApi.Base;
using Eplan.EplApi.DataModel;
using Eplan.EplApi.HEServices;
using Eplan.EplApi.MasterData;
using KPlan.Forms.Bean;
using KPlan.Util;
using Oracle.ManagedDataAccess.Client;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.IO;
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 System.Xml;
using Teamcenter.ClientX;
using Teamcenter.Services.Strong.Core;
using Teamcenter.Services.Strong.Core._2008_06.DataManagement;
using Teamcenter.Soa.Client.Model;
namespace KPlan.Forms {
/// <summary>
/// Interaction logic for KCheckProject.xaml
/// </summary>
public partial class KCheckProject_Ex : Window {
private KBackgroundWorker bgWorker_load;
private KBackgroundWorker bgWorker_export;
private KBackgroundWorker bgWorker_save;
private KBackgroundWorker bgWorker_check_all;
private KBackgroundWorker bgWorker_check_error;
public Project currentProject { get; set; }
public string projId { get; set; }
private string projName;
private string projDir;
public string exportFile { get; set; }
private DataTable checkResultData = new DataTable();
private List<string> titles = new List<string>();
private List<string> checkConfig = new List<string>();
private Dictionary<string, string> saveConfig = new Dictionary<string, string>();
private List<int> checkResultWidth = new List<int>();
private List<CheckTableRowData> rowDatas = new List<CheckTableRowData>();
private bool enableExport = false;
private bool canSave = false;
private int INDEX_IND = -1;
private int INDEX_RES = -1;
private const string SKIP_PDF = "skip_pdf";
private Teamcenter.Soa.Client.Model.Strong.ItemRevision projItemRevision;
private Teamcenter.Soa.Client.Model.Strong.Item projItem;
private List<string> errIdList2 = new List<string>();
public KCheckProject_Ex(Project currentProject, string projectDir,string exportFile, string projectCode) {
InitializeComponent();
KUtil.SetOwnerWindow(this);
LoadCheckTable();
bgWorker_load = new KBackgroundWorker(this);
bgWorker_load.backgroundWorker.DoWork += Async_Load;
bgWorker_export = new KBackgroundWorker(this);
bgWorker_export.backgroundWorker.DoWork += Async_Export;
bgWorker_save = new KBackgroundWorker(this);
bgWorker_save.backgroundWorker.DoWork += Async_SaveToTC;
bgWorker_check_all = new KBackgroundWorker(this);
bgWorker_check_all.backgroundWorker.DoWork += Async_Check_All;
bgWorker_check_error = new KBackgroundWorker(this);
bgWorker_check_error.backgroundWorker.DoWork += Async_Check_Error;
this.currentProject = currentProject;
this.projId = projectCode;
this.projName = currentProject.ProjectName;
this.projDir = projectDir;
this.exportFile = exportFile;
}
public static string BackupProject(string dir, Project project) {
string elkName = project.ProjectFullName + ".elk";
string zipName = project.ProjectName + ".zw1";
Progress progress = new Progress("SimpleProgress");
progress.SetTitle("备份项目...");
progress.SetAllowCancel(true);
progress.BeginPart(100.0, "");
progress.ShowImmediately();
try {
KUtil.Log("备份项目:" + elkName + " -> " + zipName);
Backup backup = new Backup();
backup.Project(elkName, "", dir, zipName, Backup.Type.MakeBackup, Backup.Medium.Disk, 0.0, Backup.Amount.All, false, true, true, false);
if (progress.Canceled()) {
return null;
}
}
catch (System.Exception ex) {
KUtil.LogErr(ex);
return null;
}
finally {
progress.EndPart(true);
}
return dir + zipName;
}
public static string ExportPDF(string dir, Project project) {
if (project.Pages == null || project.Pages.Length == 0) {
KUtil.Log("没有Page取消导出PDF" + project.ProjectName);
return SKIP_PDF;
}
string pdfName = dir + project.ProjectName + ".pdf";
Progress progress = new Progress("SimpleProgress");
progress.SetTitle("导出PDF...");
progress.SetAllowCancel(true);
progress.BeginPart(100.0, "");
try {
KUtil.Log("导出PDF" + project.ProjectName + " -> " + pdfName);
Export export = new Export();
export.PdfProject(project, "", pdfName, Export.DegreeOfColor.BlackAndWhite, true, "", true);
if (progress.Canceled()) {
return null;
}
}
finally {
progress.EndPart(true);
}
return pdfName;
}
[Obsolete]
private void Async_SaveToTC(object sender, DoWorkEventArgs e) {
if (KUtil.IsEmpty(projFile) || KUtil.IsEmpty(pdfFile)) {
throw new Exception("文件导出异常");
}
this.Dispatcher.Invoke(new Action(delegate {
Visibility = Visibility.Hidden;
}));
try {
bgWorker_save.Progress("保存项目信息...", 0);
Teamcenter.Soa.Client.Model.Strong.ItemRevision projItemRevision = e.Argument as Teamcenter.Soa.Client.Model.Strong.ItemRevision;
if (projItemRevision == null) {
projItemRevision = TCUtil.Query_LatestRev(projId);
}
//检查发布,已经发布不允许保存
TCUtil.GetProperties(false, new Teamcenter.Soa.Client.Model.ModelObject[] { projItemRevision }, "item_revision_id");
string ver = projItemRevision.Item_revision_id;
ProjectPropertyList projectProperties = currentProject.Properties;
projectProperties.PROJ_CUSTOM_SUPPLEMENTARYFIELD100.Set(projId);
projectProperties.PROJ_CUSTOM_SUPPLEMENTARYFIELD99.Set(ver);
bgWorker_save.Progress("更新BOM...", 0);
//更新bom
CreateOrUpdateBom(projItemRevision, e);
//同步项目属性
bgWorker_save.Progress("同步项目属性...", 0);
KUtil.Sync_ProjProperty_to_TC(projItemRevision, currentProject);
//创建数据集
CreateOrUpdateDataset(projItemRevision, e);
}
finally {
this.Dispatcher.Invoke(new Action(delegate {
Visibility = Visibility.Visible;
}));
}
}
private void CreateOrUpdateDataset(Teamcenter.Soa.Client.Model.Strong.ItemRevision projRev, DoWorkEventArgs e) {
string ZW1DSType = KUtil.GetConfigValue(KConfigure.PROJ_SYNC_SECTION, KConfigure.PROJ_SYNC_ZW_DSTYPE);
string ZW1DSRef = KUtil.GetConfigValue(KConfigure.PROJ_SYNC_SECTION, KConfigure.PROJ_SYNC_ZW_DSREF);
string PDFDSType = KUtil.GetConfigValue(KConfigure.PROJ_SYNC_SECTION, KConfigure.PROJ_SYNC_PDF_DSTYPE);
string PDFDSRef = KUtil.GetConfigValue(KConfigure.PROJ_SYNC_SECTION, KConfigure.PROJ_SYNC_PDF_DSREF);
Teamcenter.Soa.Client.Model.Strong.Dataset zw1Dataset = null;
Teamcenter.Soa.Client.Model.Strong.Dataset pdfDataset = null;
if (!SKIP_PDF.Equals(pdfFile)) {
bgWorker_save.Progress("创建PDF图纸...", 20);
pdfDataset = TCUtil.CreateNewDataset(PDFDSType, projId + "PDF图纸");
if (pdfDataset == null) {
throw new Exception("创建PDF图纸数据集失败");
}
if (bgWorker_save.IsCancel()) {
e.Cancel = true;
return;
}
}
bgWorker_save.Progress("创建EPLAN数据包...", 40);
zw1Dataset = TCUtil.CreateNewDataset(ZW1DSType, projId + "EPLAN数据包");
if (zw1Dataset == null) {
throw new Exception("创建EPLAN数据包数据集失败");
}
if (bgWorker_save.IsCancel()) {
e.Cancel = true;
return;
}
if (pdfDataset != null) {
bgWorker_save.Progress("上传PDF图纸...", 60);
TCUtil.UploadFile(pdfDataset, pdfFile, PDFDSRef);
if (bgWorker_save.IsCancel()) {
e.Cancel = true;
return;
}
}
bgWorker_save.Progress("上传EPLAN数据包...", 80);
TCUtil.UploadFile(zw1Dataset, projFile, ZW1DSRef);
if (bgWorker_save.IsCancel()) {
e.Cancel = true;
return;
}
bgWorker_save.Progress("更新关系...", 100);
ModelObject[] zw1Children = TCUtil.GetChild(projRev, "IMAN_specification", ZW1DSType);
ModelObject[] pdfChildren = TCUtil.GetChild(projRev, "IMAN_specification", PDFDSType);
TCUtil.RemoveChildren(projRev, zw1Children, "IMAN_specification");
TCUtil.RemoveChildren(projRev, pdfChildren, "IMAN_specification");
TCUtil.CreateNewRelation(projRev, zw1Dataset, "IMAN_specification");
if (pdfDataset != null) {
TCUtil.CreateNewRelation(projRev, pdfDataset, "IMAN_specification");
}
KUtil.DispatcherShow(this, "保存项目完成");
}
private void CreateOrUpdateBom_QueryChildFromDB(Teamcenter.Soa.Client.Model.Strong.ItemRevision projRev, DoWorkEventArgs e) {
int childCount = rowDatas.Count;
if (childCount == 0) {
return;
}
TCUtil.GetProperties(true, TCUtil.Refresh(projRev), "structure_revisions");
ReservationService res = ReservationService.getService(Teamcenter.ClientX.Session.getConnection());
Teamcenter.Soa.Client.Model.Strong.PSBOMViewRevision[] ps_revs = projRev.Structure_revisions;
for (int j = 0; j < ps_revs.Length; j++) {
Teamcenter.Soa.Client.Model.Strong.PSBOMViewRevision ps_rev = ps_revs[j];
string[] attris2 = { "is_modifiable", "object_string", "checked_out" };
TCUtil.GetProperties(true, TCUtil.Refresh(ps_rev), attris2);
if (!ps_rev.Is_modifiable) {
throw new Exception("当前用户无权修改BOM");
}
if (ps_rev.Checked_out == "Y") {
throw new Exception("BOM已经签出请确认签入后再执行本操作");
}
}
ServiceData s_data = res.Checkout(ps_revs, "", "");
TCUtil.ThrowServiceDataError(s_data);
KUtil.Log("同步BOM属性...");
//合并数据
List<CheckTableRowData> bomData = new List<CheckTableRowData>();
foreach (CheckTableRowData bean in rowDatas) {
int index = bomData.IndexOf(bean);
if (index >= 0) {
bomData[index].addCombineNode(bean);
}
else {
bomData.Add(bean);
}
}
childCount = bomData.Count;
// connect database
string oradb = KUtil.GetConfigValue(KConfigure.LOGIN_SECTION, KConfigure.DBCONN);// "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TC)));User Id=infodba;Password=infodba;";
if (KUtil.IsEmpty(oradb)) {
throw new Exception("未配置数据库连接");
}
Dictionary<string, bool> existMap = new Dictionary<string, bool>();
try {
Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo[] children_infos = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo[childCount];
using (OracleConnection conn = new OracleConnection(oradb)) {
conn.Open();
DateTime time = DateTime.Now;
for (int i = 0; i < childCount; i++) {
bgWorker_save.Progress("更新BOM...", (i + 1) * 100 / childCount);
if (bgWorker_save.IsCancel()) {
e.Cancel = true;
return;
}
CheckTableRowData rowData = bomData[i];
Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelOccInfo occ_info = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelOccInfo();
occ_info.AttrsToSet = rowData.GetBomProp(saveConfig);
Teamcenter.Soa.Client.Model.Strong.ItemRevision itemrev = TCUtil.Query_LatestRev(rowData.itemId, conn);
//Console.WriteLine("CreateOrUpdateBom------------------"+10);
if (itemrev == null) {
throw new Exception("对象不存在:" + rowData.itemId);
}
KUtil.Log((i + 1) + ". " + rowData.itemId + " > " + GetSyncInfo(occ_info.AttrsToSet));
Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo children_info = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo();
children_info.Child = itemrev;
children_info.OccInfo = occ_info;
children_infos[i] = children_info;
}
KUtil.Log("查询耗时:"+(DateTime.Now - time));
}
bgWorker_save.Progress("更新BOM...", 100);
Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2[] struct_infos = new Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2[1];
Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2 struct_info = new Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2();
struct_info.ChildInfo = children_infos;
struct_info.Parent = projRev;
struct_info.Precise = false;
struct_infos[0] = struct_info;
Teamcenter.Services.Strong.Cad.StructureManagementService ss_service = Teamcenter.Services.Strong.Cad.StructureManagementService.getService(Teamcenter.ClientX.Session.getConnection());
Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructurePref2 struct_pref = new Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructurePref2();
Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.CreateOrUpdateRelativeStructureResponse cursResp =
ss_service.CreateOrUpdateRelativeStructure(struct_infos, "view", true, struct_pref);
TCUtil.ThrowServiceDataError(cursResp.ServiceData);
if (cursResp.Output.Count == 0) {
throw new Exception("Bom创建失败");
}
KUtil.Log("同步完成");
}
finally {
if (ps_revs != null) {
ServiceData resp = res.Checkin(ps_revs);
TCUtil.ThrowServiceDataError(resp);
}
}
}
private void CreateOrUpdateBom(Teamcenter.Soa.Client.Model.Strong.ItemRevision projRev, DoWorkEventArgs e)
{
int childCount = rowDatas.Count;
if (childCount == 0)
{
return;
}
TCUtil.GetProperties(true, TCUtil.Refresh(projRev), "structure_revisions");
ReservationService res = ReservationService.getService(Teamcenter.ClientX.Session.getConnection());
//Teamcenter.Soa.Client.Model.Strong.PSBOMViewRevision[] ps_revs = projRev.Structure_revisions;
//for (int j = 0; j < ps_revs.Length; j++)
//{
// Teamcenter.Soa.Client.Model.Strong.PSBOMViewRevision ps_rev = ps_revs[j];
// string[] attris2 = { "is_modifiable", "object_string", "checked_out" };
// TCUtil.GetProperties(true, TCUtil.Refresh(ps_rev), attris2);
// if (!ps_rev.Is_modifiable)
// {
// throw new Exception("当前用户无权修改BOM");
// }
// if (ps_rev.Checked_out == "Y")
// {
// throw new Exception("BOM已经签出请确认签入后再执行本操作");
// }
//}
//ServiceData s_data = res.Checkout(ps_revs, "", "");
//TCUtil.ThrowServiceDataError(s_data);
KUtil.Log("同步BOM属性...");
//合并数据
List<CheckTableRowData> bomData = new List<CheckTableRowData>();
foreach (CheckTableRowData bean in rowDatas)
{
int index = bomData.IndexOf(bean);
if (index >= 0)
{
bomData[index].addCombineNode(bean);
}
else
{
bomData.Add(bean);
}
}
childCount = bomData.Count;
try
{
//Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo[] children_infos = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo[childCount];
//Dictionary<Teamcenter.Soa.Client.Model.Strong.ItemRevision, List<Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo>> projRevChildrenMap
// = new Dictionary<Teamcenter.Soa.Client.Model.Strong.ItemRevision, List<Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo>>();
Dictionary<Teamcenter.Soa.Client.Model.Strong.ItemRevision, List<Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo>> levelRevChildrenMap
= new Dictionary<Teamcenter.Soa.Client.Model.Strong.ItemRevision, List<Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo>>();
//projectRev
List<Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo> projectRevRelativeStructureChildInfoList
= new List<Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo>();
levelRevChildrenMap.Add(projRev, projectRevRelativeStructureChildInfoList);
for (int i = 0; i < childCount; i++)
{
bgWorker_save.Progress("更新BOM...", (i + 1) * 100 / childCount);
if (bgWorker_save.IsCancel())
{
e.Cancel = true;
return;
}
CheckTableRowData rowData = bomData[i];
//获取(创建)位置层对象
String[] levelSplit = rowData.deviceTag.Split('+');
String lasterLevel = levelSplit[levelSplit.Length - 1].Split('-')[0];
String levelItemid = projRev.GetPropertyDisplayableValue("item_id") + lasterLevel;
Teamcenter.Soa.Client.Model.Strong.ItemRevision levelrev = TCUtil.Query_LatestRev(levelItemid);
if (levelrev == null)
{
levelrev = TCUtil.createItem("XA2_Productdraw", levelItemid);
Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo level_info
= new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo();
level_info.Child = levelrev;
//children_info.OccInfo = occ_info;
//children_infos[i] = level_info;
projectRevRelativeStructureChildInfoList.Add(level_info);
//KUtil.DispatcherShow(this, "projectRevRelativeStructureChildInfoList Count->" + projectRevRelativeStructureChildInfoList.Count() + "");
}
else
{
if (!levelRevChildrenMap.ContainsKey(levelrev))
{
Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo level_info
= new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo();
level_info.Child = levelrev;
projectRevRelativeStructureChildInfoList.Add(level_info);
//List<Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo> projectRevRelativeStructureChildInfoList2 = levelRevChildrenMap[projRev];
////projectRevRelativeStructureChildInfoList2.Add(levelrev);
//KUtil.DispatcherShow(this, "projectRevRelativeStructureChildInfoList2 Count->" + projectRevRelativeStructureChildInfoList2.Count() + "");
}
}
if (!levelRevChildrenMap.ContainsKey(levelrev))
{
List<Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo> relativeStructureChildInfoListNew
= new List<Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo>();
levelRevChildrenMap.Add(levelrev, relativeStructureChildInfoListNew);
}
//levelRev
List<Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo> relativeStructureChildInfoList = levelRevChildrenMap[levelrev];
Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelOccInfo occ_info = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelOccInfo();
occ_info.AttrsToSet = rowData.GetBomProp(saveConfig);
Teamcenter.Soa.Client.Model.Strong.ItemRevision itemrev = TCUtil.Query_LatestRev(rowData.orderNo);
if (itemrev == null)
{
throw new Exception("对象不存在:" + rowData.orderNo);
}
KUtil.Log((i + 1) + ". " + rowData.itemId + " > " + GetSyncInfo(occ_info.AttrsToSet));
TCUtil.GetProperties(true, TCUtil.Refresh(levelrev), "structure_revisions");
//ReservationService level_res = ReservationService.getService(Teamcenter.ClientX.Session.getConnection());
//Teamcenter.Soa.Client.Model.Strong.PSBOMViewRevision[] level_ps_revs = levelrev.Structure_revisions;
//ServiceData level_s_data = level_res.Checkout(level_ps_revs, "", "");
//Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo[] level_children_infos = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo[1];
Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo level_children_info = new Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo();
level_children_info.Child = itemrev;
level_children_info.OccInfo = occ_info;
relativeStructureChildInfoList.Add(level_children_info);
//level_children_infos[0] = level_children_info;
}
bgWorker_save.Progress("更新BOM...", 100);
//KUtil.DispatcherShow(this, "levelRevChildrenMap Count->"+levelRevChildrenMap.Count()+"");
Teamcenter.Services.Strong.Cad.StructureManagementService ss_service = Teamcenter.Services.Strong.Cad.StructureManagementService.getService(Teamcenter.ClientX.Session.getConnection());
foreach (Teamcenter.Soa.Client.Model.Strong.ItemRevision revKey in levelRevChildrenMap.Keys)
{
for (int k = 0; k < revKey.Structure_revisions.Length; k++)
{
Teamcenter.Soa.Client.Model.Strong.PSBOMViewRevision ps_rev = revKey.Structure_revisions[k];
string[] attris2 = { "is_modifiable", "object_string", "checked_out" };
TCUtil.GetProperties(true, TCUtil.Refresh(ps_rev), attris2);
if (!ps_rev.Is_modifiable)
{
throw new Exception("当前用户无权修改BOM");
}
if (ps_rev.Checked_out == "Y")
{
throw new Exception("BOM已经签出请确认签入后再执行本操作");
}
}
ServiceData ss_data = res.Checkout(revKey.Structure_revisions, "", "");
List<Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo> revRelativeStructureChildInfoList = levelRevChildrenMap[revKey];
//KUtil.DispatcherShow(this, "revRelativeStructureChildInfoList Count->" + revRelativeStructureChildInfoList.Count() + "");
Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.RelativeStructureChildInfo[] children_infos = revRelativeStructureChildInfoList.ToArray();
//KUtil.DispatcherShow(this, "children_infos Count->" + children_infos.Count() + "");
Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2[] struct_infos = new Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2[1];
Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2 struct_info = new Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructureInfo2();
struct_info.ChildInfo = children_infos;
struct_info.Parent = revKey;
struct_info.Precise = false;
struct_infos[0] = struct_info;
Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructurePref2 struct_pref = new Teamcenter.Services.Strong.Cad._2007_12.StructureManagement.CreateOrUpdateRelativeStructurePref2();
Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.CreateOrUpdateRelativeStructureResponse cursResp =
ss_service.CreateOrUpdateRelativeStructure(struct_infos, "view", true, struct_pref);
TCUtil.ThrowServiceDataError(cursResp.ServiceData);
if (cursResp.Output.Count == 0)
{
throw new Exception("Bom创建失败");
}
if (revKey.Structure_revisions != null)
{
for (int k = 0; k < revKey.Structure_revisions.Length; k++)
{
Teamcenter.Soa.Client.Model.Strong.PSBOMViewRevision ps_rev = revKey.Structure_revisions[k];
string[] attris2 = { "is_modifiable", "object_string", "checked_out" };
TCUtil.GetProperties(true, TCUtil.Refresh(ps_rev), attris2);
if (ps_rev.Checked_out == "Y")
{
ServiceData resp = res.Checkin(revKey.Structure_revisions);
break;
}
}
//ServiceData resp = res.Checkin(revKey.Structure_revisions);
//TCUtil.ThrowServiceDataError(resp);
}
KUtil.Log("同步完成");
}
}
finally
{
//if (ps_revs != null)
//{
// ServiceData resp = res.Checkin(ps_revs);
// TCUtil.ThrowServiceDataError(resp);
//}
}
}
private string GetSyncInfo(Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo[] attrs) {
int len = attrs == null ? 0 : attrs.Length;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++) {
Teamcenter.Services.Strong.Cad._2007_01.StructureManagement.AttributesInfo attr = attrs[i];
sb.Append("|" + attr.Name + "=" + attr.Value);
}
sb.Append("|");
return sb.ToString();
}
private void Async_Export(object sender, DoWorkEventArgs e) {
bgWorker_export.Progress("准备导出项目检查数据...", 0);
string fileName = e.Argument as string;
KUtil.Log("导出申请单:"+fileName);
if (string.IsNullOrWhiteSpace(fileName)) {
throw new Exception("文件路径为空");
}
System.Globalization.CultureInfo oldCI;
//get the old CurrenCulture and set the new, en-US
oldCI = System.Threading.Thread.CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
if (File.Exists(fileName)) {
File.Delete(fileName);
}
excel.Visible = false;
excel.Application.Workbooks.Add(true);
Microsoft.Office.Interop.Excel.Workbook wb = excel.ActiveWorkbook;
Microsoft.Office.Interop.Excel.Worksheet st = (Microsoft.Office.Interop.Excel.Worksheet)wb.ActiveSheet;
int colCnt = titles.Count;
int rowIndex = 1;
int col = 1;
INDEX_RES = -1;
INDEX_IND = -1;
st.Cells.NumberFormat = "@";
for (int i = 0; i < colCnt; i++) {
if (i == INDEX_IND || i == INDEX_RES) {
continue;
}
st.Cells[rowIndex, col++] = titles[i];
}
int rowCnt = rowDatas.Count;
for (int i = 0; i < rowCnt; i++) {
if (bgWorker_export.IsCancel()) {
e.Cancel = true;
break;
}
bgWorker_export.Progress("导出项目检查数据... " + (i + 1) + "/" + rowCnt + " ", (i + 1) * 100 / rowCnt);
CheckTableRowData data = rowDatas[i];
//if (data.checkOK) {
// continue;
//}
rowIndex++;
object[] rowData = data.rowData;
col = 1;
for (int j = 0; j < colCnt; j++) {
if (j == INDEX_IND || j == INDEX_RES) {
continue;
}
st.Cells[rowIndex, col++] = rowData[j]?.ToString();
}
// st.Cells[rowIndex, col++] = "10 / 10 / 09";
}
if (e.Cancel) {
wb.Close(false, Type.Missing, Type.Missing);
excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
System.GC.Collect();
return;
}
st.Columns.AutoFit();
st.Application.ActiveWindow.SplitRow = 1;
st.Application.ActiveWindow.FreezePanes = true;
// Now apply autofilter
/*Microsoft.Office.Interop.Excel.Range firstRow = (Microsoft.Office.Interop.Excel.Range)st.Rows[1];
firstRow.AutoFilter(1,
Type.Missing,
Microsoft.Office.Interop.Excel.XlAutoFilterOperator.xlAnd,
Type.Missing,
true);*/
//保存excel文件
wb.SaveCopyAs(fileName);
//关闭文件
wb.Close(false, Type.Missing, Type.Missing);
excel.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
System.GC.Collect();
this.Dispatcher.Invoke(new Action(delegate {
MessageBoxResult res = MessageBox.Show(this, "数据导出完成,是否打开文件?", "", MessageBoxButton.YesNo, MessageBoxImage.Information);
if (res == MessageBoxResult.Yes) {
System.Diagnostics.Process.Start("explorer", "/n, " + fileName);
}
}));
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI;
}
private void Async_Check_All(object sender, DoWorkEventArgs e) {
bool saveProject = (bool)e.Argument;
enableExport = true;
this.Dispatcher.Invoke(new Action(delegate {
checkResultData.Rows.Clear();
}));
this.rowDatas.Clear();
this.errIdList2.Clear();
XmlDocument doc = new XmlDocument();
doc.Load(exportFile);
XmlNode partsList = doc.SelectSingleNode("partsList");
if (partsList == null) {
KUtil.Log("没有找到节点partsList");
return;
}
XmlNodeList deviceNodes = partsList.SelectNodes("device");
int deviceCnt = deviceNodes == null ? 0 : deviceNodes.Count;
KUtil.Log("device数量" + deviceCnt);
string checkWire = KUtil.GetConfigValue(KConfigure.CHECK_SECTION, KConfigure.CHECK_WIRE);
KUtil.Log("检查连接线:" + checkWire);
//DateTime time1 = DateTime.Now;
string oradb = KUtil.GetConfigValue(KConfigure.LOGIN_SECTION, KConfigure.DBCONN);// "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TC)));User Id=infodba;Password=infodba;";
if (KUtil.IsEmpty(oradb)) {
throw new Exception("未配置数据库连接");
}
Dictionary<string, bool> existMap = new Dictionary<string, bool>();
using (OracleConnection conn = new OracleConnection(oradb)) {
conn.Open();
for (int i = 0; i < deviceCnt; i++) {
if (bgWorker_check_all.IsCancel()) {
e.Cancel = true;
break;
}
bgWorker_check_all.Progress("检查数据... " + (i + 1) + "/" + deviceCnt + " ", (i + 1) * 100 / deviceCnt);
XmlNode deviceNode = deviceNodes.Item(i);
XmlNodeList partNodes = deviceNode.SelectNodes("part");
int partCnt = partNodes == null ? 0 : partNodes.Count;
for (int j = 0; j < partCnt; j++) {
if (bgWorker_check_all.IsCancel()) {
e.Cancel = true;
break;
}
XmlNode partNode = partNodes.Item(j);
CheckPartNode(partNode, "TRUE".Equals(checkWire?.ToUpper()), conn, existMap);
}
}
}
this.Dispatcher.Invoke(new Action(delegate {
b_Export.IsEnabled = enableExport;
//b_save.IsEnabled = !enableExport;
}));
WriteErrorIds();
if (!saveProject) {
return;
}
if (errIdList2.Count > 0) {
KUtil.DispatcherShow(this, "检查出错,无法保存项目");
}
else {
this.Dispatcher.Invoke(new Action(delegate {
SaveProject();
}));
}
}
private void Async_Check_Error(object sender, DoWorkEventArgs e) {
enableExport = true;
this.Dispatcher.Invoke(new Action(delegate {
checkResultData.Rows.Clear();
}));
this.rowDatas.Clear();
this.errIdList2.Clear();
string[] errIds2 = TCUtil.GetPropArrayValue(projItem, KUtil.GetConfigValue(KConfigure.CHECK_SECTION, KConfigure.ERROR_ARRAY_PROP));
KUtil.Log("检查错误项:" + (errIds2 == null ? "null" : string.Join(", ", errIds2)));
int len = errIds2 == null ? 0 : errIds2.Length;
string oradb = KUtil.GetConfigValue(KConfigure.LOGIN_SECTION, KConfigure.DBCONN);// "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=TC)));User Id=infodba;Password=infodba;";
if (KUtil.IsEmpty(oradb)) {
throw new Exception("未配置数据库连接");
}
Dictionary<string, bool> existMap = new Dictionary<string, bool>();
Eplan.EplApi.MasterData.MDPartsDatabase mdPartsDatabase = Util.EplanUtil.OpenDatabase();
using (OracleConnection conn = new OracleConnection(oradb)) {
conn.Open();
for (int i = 0; i < len; i++) {
if (bgWorker_check_error.IsCancel()) {
e.Cancel = true;
break;
}
bgWorker_check_error.Progress("检查错误项... " + (i + 1) + "/" + len + " ", (i + 1) * 100 / len);
string orderNr = errIds2[i];
checkItemID(mdPartsDatabase, orderNr, null, conn, existMap);
}
}
Util.EplanUtil.UpdateAndClose(mdPartsDatabase);
this.Dispatcher.Invoke(new Action(delegate {
b_Export.IsEnabled = enableExport;
//b_save.IsEnabled = !enableExport;
}));
WriteErrorIds();
}
private void WriteErrorIds() {
//this.Dispatcher.Invoke(new Action(delegate {
// b_check_error.IsEnabled = errIdList2.Count > 0;
//}));
//string propName = KUtil.GetConfigValue(KConfigure.CHECK_SECTION, KConfigure.ERROR_ARRAY_PROP);
//string[] propVal = errIdList2.ToArray();
//KUtil.Log("更新项目错误ID" + propName + " = " + string.Join(", ", propVal));
//TCUtil.SetArrayProperty(this.projItem, propName, propVal);
}
private void Async_Load(object sender, DoWorkEventArgs e) {
bgWorker_load.Progress("查询项目...", 100);
ProjectPropertyList projectProperties = currentProject.Properties;
try {
projItemRevision = TCUtil.Query_LatestRev(projId);
if (projItemRevision != null) {
TCUtil.GetProperties(false, TCUtil.Refresh(projItemRevision),"items_tag");
projItem = projItemRevision.Items_tag;
}
}
catch (System.Exception e1) {
KUtil.LogErr(e1);
}
bool projExist = projItemRevision!=null;
//string[] errIds = TCUtil.GetPropArrayValue(projItem, KUtil.GetConfigValue(KConfigure.CHECK_SECTION, KConfigure.ERROR_ARRAY_PROP));
//KUtil.Log("找到原错误项:"+(errIds==null?"null":string.Join(", ",errIds)));
this.Dispatcher.Invoke(new Action(delegate {
this.tb_ProjId.Content = projId;
this.tb_ProjName.Content = projName;
}));
this.Dispatcher.Invoke(new Action(delegate {
b_Export.IsEnabled = enableExport;
b_save.IsEnabled = projExist && !enableExport;
b_check_all.IsEnabled = projExist;
//b_check_error.IsEnabled = projExist && errIds!=null && errIds.Length>0;
}));
}
private void CheckPartNode(XmlNode partNode, bool checkWire, OracleConnection conn, Dictionary<string, bool> existMap) {
//检查是否需要检查
//连接线
XmlAttribute lenthvalue = partNode.Attributes["P_ARTICLE_PARTIAL_LENGTH_VALUE"];
if (lenthvalue != null && !checkWire) {
//不检查连接线
return;
}
string refCount = partNode.Attributes["P_ARTICLEREF_COUNT"]?.InnerText;
string lenth = lenthvalue?.InnerText;
if (!KUtil.IsEmpty(refCount) && !KUtil.IsEmpty(lenth)) {
double dwire_length = Convert.ToDouble(lenth);
if (dwire_length != 0.0) {
double drecord_num = Convert.ToDouble(refCount);
drecord_num = dwire_length * drecord_num;
refCount = drecord_num.ToString();
}
}
if ("0".Equals(refCount)) {
return;
}
string itemId = partNode.Attributes["P_ARTICLE_ERPNR"]?.InnerText;
string orderNo = partNode.Attributes["P_ARTICLE_PARTNR"]?.InnerText;
string orderNo2 = partNode.Attributes["P_ARTICLE_ORDERNR"]?.InnerText;
//System.Windows.Forms.MessageBox.Show(refCount +"|"+ itemId + "|"+ orderNo+ "|" +orderNo2);
checkItemID(itemId, orderNo2, partNode, conn, existMap);
}
private void checkItemID(MDPartsDatabase mdPartDatabase, string orderNr, XmlNode partNode, OracleConnection conn, Dictionary<string, bool> existMap) {
bool itemExist = false;
string itemUid = null;
MDPart[] res = EplanUtil.SearchPartByOrderNo(mdPartDatabase, orderNr);
if (res == null || res.Length == 0) {
throw new Exception("通过订货号["+orderNr+"]未查询到部件");
}
if (res.Length > 1) {
throw new Exception("通过订货号["+orderNr+"]查询到多个部件:"+res.Length);
}
MDPart part = res[0];
string itemId = EplanUtil.GetMDPropValue(part.Properties.ARTICLE_ERPNR); ;
if (!KUtil.IsEmpty(itemId)) {
if (existMap.ContainsKey(itemId)) {
itemExist = existMap[itemId];
}
else {
//DateTime time = DateTime.Now;
using (OracleCommand cmd = new OracleCommand()) {
cmd.Connection = conn;
cmd.CommandText = "select PUID from PITEM where PITEM_ID = '" + itemId + "'";
using (OracleDataReader dr = cmd.ExecuteReader()) {
if (dr.HasRows) {
itemExist = true;
}
if (dr.Read()) {
itemUid = dr.GetString(0);
//KUtil.Log("UID = "+itemUid);
}
//int res = dr.GetInt32(0);
//KUtil.Log("查询结果数量:" + res);
//itemExist = res > 0;
}
}
existMap.Add(itemId, itemExist);
// KUtil.Log("查询"+itemId+"耗时:"+(DateTime.Now-time));
}
}
CheckTableRowData data = new CheckTableRowData(itemId, orderNr, partNode, itemExist, itemUid);
MessageBox.Show("1");
rowDatas.Add(data);
object[] rowData = data.GetRowData(rowDatas.Count, checkConfig);
if (!data.checkOK) {
//if (!errIdList2.Contains(data.itemId)) {
// errIdList2.Add(data.itemId);
//}
//20200508 改成订货号 P_ARTICLE_ORDERNR
if (!errIdList2.Contains(orderNr)) {
errIdList2.Add(orderNr);
}
enableExport = true;
canSave = false;
}
this.Dispatcher.Invoke(new Action(delegate {
checkResultData.Rows.Add(rowData);
}));
}
private void checkItemID(string itemId, string orderNr, XmlNode partNode, OracleConnection conn, Dictionary<string, bool> existMap) {
bool itemExist = false;
string itemUid = null;
if (!KUtil.IsEmpty(orderNr)) {
if (existMap.ContainsKey(orderNr)) {
itemExist = existMap[orderNr];
}
else {
//DateTime time = DateTime.Now;
using (OracleCommand cmd = new OracleCommand()) {
cmd.Connection = conn;
cmd.CommandText = "select PUID from PITEM where PITEM_ID = '" + orderNr + "'";
using (OracleDataReader dr = cmd.ExecuteReader()) {
if (dr.HasRows) {
itemExist = true;
}
if (dr.Read()) {
itemUid = dr.GetString(0);
//KUtil.Log("UID = "+itemUid);
}
//int res = dr.GetInt32(0);
//KUtil.Log("查询结果数量:" + res);
//itemExist = res > 0;
}
}
existMap.Add(orderNr, itemExist);
// KUtil.Log("查询"+itemId+"耗时:"+(DateTime.Now-time));
}
}
//KUtil.DispatcherShow(this, "orderNr:" + orderNr);
CheckTableRowData data = new CheckTableRowData(itemId,orderNr, partNode, itemExist, itemUid);
//MessageBox.Show("2");
rowDatas.Add(data);
object[] rowData = data.GetRowData(rowDatas.Count, checkConfig);
if (!data.checkOK) {
//if (!errIdList2.Contains(data.itemId)) {
// errIdList2.Add(data.itemId);
//}
//20200508 改成订货号 P_ARTICLE_ORDERNR
if (!errIdList2.Contains(orderNr)) {
errIdList2.Add(orderNr);
}
enableExport = true;
canSave = false;
}
this.Dispatcher.Invoke(new Action(delegate {
checkResultData.Rows.Add(rowData);
}));
}
private void LoadCheckTable() {
checkResultData.Rows.Clear();
string queryResults = KUtil.GetConfigValue(KConfigure.CHECK_SECTION, KConfigure.CHECK_TITLE);
string[] queryResultSplit = queryResults.Split(';');
int len = queryResultSplit.Length;
for (int i = 0; i < len; i++) {
string queryResult = queryResultSplit[i].Trim();
if (KUtil.IsEmpty(queryResult)) {
continue;
}
string title = queryResult;
string config = queryResult;
int width = 50;
string[] split = queryResult.Split(',');
if (split.Length > 1) {
title = split[0].Trim();
config = split[1].Trim();
}
if (split.Length > 2) {
Int32.TryParse(split[2].Trim(), out width);
}
titles.Add(title);
checkConfig.Add(config);
checkResultWidth.Add(width);
if (CheckTableRowData.INDEX.Equals(config)) {
INDEX_IND = i;
}
else if (CheckTableRowData.CHECK.Equals(config)) {
INDEX_RES = i;
}
checkResultData.Columns.Add(new DataColumn() {
ColumnName = title,
DataType = CheckTableRowData.INDEX.Equals(config) ? typeof(Int32) : typeof(string)
});
}
string saveConfigStr = KUtil.GetConfigValue(KConfigure.CHECK_SECTION, KConfigure.SAVE_BOM_PROP);
string[] saveConfigSplit = saveConfigStr?.Split(';');
len = saveConfigSplit == null ? 0 : saveConfigSplit.Length;
for (int i = 0; i < len; i++) {
string config = saveConfigSplit[i].Trim();
if (KUtil.IsEmpty(config)) {
continue;
}
string[] split = config.Split('=');
if (split.Length == 2) {
string tc = split[0].Trim();
string eplan = split[1].Trim();
if (!KUtil.IsEmpty(tc) && !KUtil.IsEmpty(eplan)) {
if (!saveConfig.ContainsKey(tc)) {
saveConfig.Add(tc, eplan);
}
else {
KUtil.Log("检测到重复配置:" + config);
}
}
}
}
datagrid_CheckResult.DataContext = checkResultData.DefaultView;
}
private void Window_Loaded(object sender, RoutedEventArgs e) {
this.bgWorker_load.Start(null);
}
private void datagrid_CheckResult_Loaded(object sender, RoutedEventArgs e) {
int len = checkResultWidth.Count;
for (int i = 0; i < len; i++) {
datagrid_CheckResult.Columns[i].Width = checkResultWidth[i];
}
}
private void b_Close_Click(object sender, RoutedEventArgs e) {
Close();
}
private void b_Export_Click(object sender, RoutedEventArgs e) {
if (rowDatas.Count == 0) {
return;
}
//获取路径
//string nowtime = DateTime.Now.ToString("yyyy-MM-dd");//= DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss");
string fileName = "检查数据.xlsx";
System.Windows.Forms.SaveFileDialog sf = new System.Windows.Forms.SaveFileDialog();
sf.FileName = fileName;
sf.DefaultExt = "xlsx";
sf.Filter = "Excel文件 (*.xlsx)|*.xlsx";
if (sf.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
if (File.Exists(fileName)) {
MessageBoxResult res = MessageBox.Show(this, "文件已存在,是否覆盖?", "", MessageBoxButton.YesNo, MessageBoxImage.Information);
if (res != MessageBoxResult.Yes) {
return;
}
File.Delete(fileName);
}
bgWorker_export.Start(sf.FileName);
}
}
private void SaveProject() {
KUtil.Log("开始保存项目...");
System.Windows.Forms.Screen screen = System.Windows.Forms.Screen.FromHandle(new System.Windows.Interop.WindowInteropHelper(this).Handle);
double top = this.Top;
double left = this.Left;
projFile = null;
pdfFile = null;
//Teamcenter.Soa.Client.Model.Strong.ItemRevision projItemRevision = null;
string ver = "";
ProjectPropertyList projectProperties = currentProject.Properties;
try {
//projItemRevision = TCUtil.Query_LatestRev(projId);
if (projItemRevision == null) {
MessageBox.Show(this, "未查询到TC中的项目对象");
return;
}
TCUtil.Refresh(projItemRevision);
//检查发布,已经发布不允许保存
TCUtil.GetProperties(false, new Teamcenter.Soa.Client.Model.ModelObject[] { projItemRevision }, "item_revision_id", "release_status_list");
Teamcenter.Soa.Client.Model.Strong.ReleaseStatus[] releaseStatus = projItemRevision.Release_status_list;
if (releaseStatus != null && releaseStatus.Length > 0) {
MessageBox.Show(this, "TC中项目对象“" + projId + "”的最新版本已发布,不可以进行保存");
return;
}
string oldVer = null;
if (projectProperties.PROJ_CUSTOM_SUPPLEMENTARYFIELD99 != null && !projectProperties.PROJ_CUSTOM_SUPPLEMENTARYFIELD99.IsEmpty) {
oldVer = projectProperties.PROJ_CUSTOM_SUPPLEMENTARYFIELD99.ToString(ISOCode.Language.L___);
}
ver = projItemRevision.Item_revision_id;
if (!string.IsNullOrWhiteSpace(oldVer) && !oldVer.Equals(ver)) {
MessageBoxResult res = MessageBox.Show("当前版本为" + oldVer + "版与最新版(" + ver + ")不一致是否继续保存?", "", MessageBoxButton.YesNo);
if (res != MessageBoxResult.Yes) {
return;
}
}
}
catch (Exception ex) {
KUtil.LogErr(ex);
MessageBox.Show(this, "检查项目对象出错:" + ex.Message);
return;
}
Top = screen.Bounds.Height;
Left = screen.Bounds.Width;
try {
projFile = BackupProject(projDir, currentProject);
if (KUtil.IsEmpty(projFile)) {
return;
}
if (!File.Exists(projFile)) {
throw new Exception("导出文件不存在:" + projFile);
}
pdfFile = ExportPDF(projDir, currentProject);
if (KUtil.IsEmpty(pdfFile)) {
return;
}
if (!SKIP_PDF.Equals(pdfFile) && !File.Exists(pdfFile)) {
throw new Exception("导出文件不存在:" + pdfFile);
}
}
catch (System.Exception ex) {
KUtil.LogErr(ex);
Top = top;
Left = left;
MessageBox.Show(this, "导出数据出错:" + ex.Message);
return;
}
finally {
Top = top;
Left = left;
}
try {
projectProperties.PROJ_CUSTOM_SUPPLEMENTARYFIELD100.Set(projId);
projectProperties.PROJ_CUSTOM_SUPPLEMENTARYFIELD99.Set(ver);
}
catch (Exception ex) {
KUtil.LogErr(ex);
MessageBox.Show(this, "更新本地项目信息出错:" + ex.Message);
return;
}
bgWorker_save.Start(projItemRevision);
}
private void CheckAndSave(bool saveProject) {
KUtil.Log("开始导出Partlist: " + exportFile);
Progress progress = new Progress("SimpleProgress");
try {
ExportPartList(progress, currentProject, exportFile);
if (progress.Canceled()) {
progress.EndPart(true);
return;
}
progress.EndPart(true);
if (!File.Exists(exportFile)) {
MessageBox.Show("导出Partlist异常未找到导出文件");
return;
}
}
catch (System.Exception ex) {
progress.EndPart(true);
KUtil.LogErr(ex);
MessageBox.Show("执行出错:" + ex.Message);
return;
}
this.bgWorker_check_all.Start(saveProject);
}
private string projFile;
private string pdfFile;
private void b_save_Click(object sender, RoutedEventArgs e) {
CheckAndSave(true);
}
private void b_check_error_Click(object sender, RoutedEventArgs e) {
this.bgWorker_check_error.Start(null);
}
private void b_check_all_Click(object sender, RoutedEventArgs e) {
CheckAndSave(false);
}
private void ExportPartList(Progress progress, Project currentProject, string exportFile) {
progress.SetTitle("导出检查数据...");
progress.SetAllowCancel(true);
progress.BeginPart(100.0, "");
EplanUtil.ExportPartList(currentProject, exportFile, PartsService.Format.XML);
}
}
}