20250402 commit

main
李建辉 3 months ago
commit 3ef96a7452

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="lib" path="sqljdbc4.jar"/>
<classpathentry kind="lib" path="lib/jxl.jar"/>
<classpathentry kind="lib" path="lib/swingx-1.6.1.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>com.connor.lidy</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

@ -0,0 +1,7 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8

@ -0,0 +1,34 @@
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Lidy
Bundle-SymbolicName: com.connor.lidy;singleton:=true
Bundle-Version: 1.0.0
Bundle-Localization: plugin
Bundle-Activator: com.connor.lidy.Activator
Bundle-Vendor: CONNOR
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
com.teamcenter.rac.kernel;bundle-version="13000.1.0",
com.teamcenter.rac.aifrcp;bundle-version="13000.1.0",
com.teamcenter.rac.util;bundle-version="13000.1.0",
com.teamcenter.rac.commonclient;bundle-version="13000.1.0",
TcSoaCoreRac;bundle-version="13000.1.0",
com.teamcenter.rac.ui;bundle-version="13000.1.0",
com.teamcenter.rac.schedule;bundle-version="13000.1.0",
org.apache.poi.39;bundle-version="3.9.0",
com.teamcenter.rac.common;bundle-version="13000.1.0",
Fnd0SoaAuditManagerRac;bundle-version="13000.1.0",
TcSoaWorkflowRac;bundle-version="13000.1.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Automatic-Module-Name: com.connor.lidy
Bundle-ActivationPolicy: lazy
Import-Package: com.teamcenter.rac.kernel,
com.teamcenter.rac.stylesheet,
org.dom4j,
org.dom4j.io
Export-Package: com.microsoft.sqlserver.jdbc,
org.jdesktop.swingx
Bundle-ClassPath: sqljdbc4.jar,
.,
lib/jxl.jar,
lib/swingx-1.6.1.jar

1
bin/.gitignore vendored

@ -0,0 +1 @@
/com/

@ -0,0 +1,8 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.,\
plugin.xml,\
sqljdbc4.jar,\
lib/jxl.jar,\
lib/swingx-1.6.1.jar

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,375 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension point="org.eclipse.ui.commands">
<command name="流程模板导出" id="WorkflowReportHandler"/>
<command name="审签信息导出" id="WorkMemberReportHandler"/>
<command name="竞品分析报表导出" id="CompetitiveReportHandler"/>
<command name="专利申请维护明细表导出" id="PatentApplyReportHandler"/>
<command name="项目运行跟踪表-产品类" id="ProjectBoardHandler"/>
<command name="项目运行跟踪表-技术类" id="TechProjectBoardHandler"/>
<command name="项目文档归档明细-产品类" id="ProjectDocReportHandler"/>
<command name="项目文档归档明细-技术类" id="TechProjectDocReportHandler"/>
<command name="代码创建报表" id="CodeCreateReportHandler"/>
<command name="物料数据明细" id="MaterialsListReportHandler"/>
<command name="有效数据报表" id="EffectiveDataReportHandler"/>
<command name="审核错误明细" id="RejectedListReportHandler"/>
<command name="审核错误统计表" id="RejectedCountReportHandler"/>
<command name="新建与更改统计" id="NewAndChangedReportHandler"/>
<command name="产品型号更改表" id="TypeChangedReportHandler"/>
<command name="使用于机型清单" id="UsedbyProductReportHandler"/>
<command name="游离物料输出" id="InvalidListReportHandler"/>
<command name="标准化系数报表" id="StandardRateReportHandler"/>
<command name="物料父级使用清单" id="ParentListReportHandler"/>
<command name="型谱结构创建" id="SpectrumStructureHandler"/>
<command name="物料设计文档关联" id="PictureMaterialSaveHandler"/>
<command name="物料项目重新选择" id="PictureMaterialHandler"/>
<command name="查询审批意见" id="QueryTaskOpinionHandler"/>
<command name="产品明细表" id="ProductListReportHandler"/>
<command name="我执行的工作流程历史" id="WorkflowHistoryHandler"/>
</extension>
<extension point="org.eclipse.ui.handlers">
<handler commandId="WorkflowReportHandler" class="com.connor.lidy.workflow.WorkflowReportHandler"/>
<handler commandId="WorkMemberReportHandler" class="com.connor.lidy.workflow.WorkMemberReportHandler"/>
<handler commandId="CompetitiveReportHandler" class="com.connor.lidy.report.CompetitiveReportHandler"/>
<handler commandId="PatentApplyReportHandler" class="com.connor.lidy.report.CompetitiveReportHandler"/>
<handler commandId="ProjectBoardHandler" class="com.connor.lidy.report.ProjectBoardHandler"/>
<handler commandId="TechProjectBoardHandler" class="com.connor.lidy.report.TechProjectBoardHandler"/>
<handler commandId="TechProjectDocReportHandler" class="com.connor.lidy.report.TechProjectDocReportHandler"/>
<handler commandId="ProjectDocReportHandler" class="com.connor.lidy.report.ProjectDocReportHandler"/>
<handler commandId="CodeCreateReportHandler" class="com.connor.lidy.workflow.CodeCreateReportHandler"/>
<handler commandId="MaterialsListReportHandler" class="com.connor.lidy.workflow.MaterialsListReportHandler"/>
<handler commandId="EffectiveDataReportHandler" class="com.connor.lidy.workflow.EffectiveDataReportHandler"/>
<handler commandId="RejectedListReportHandler" class="com.connor.lidy.workflow.RejectedListReportHandler"/>
<handler commandId="RejectedCountReportHandler" class="com.connor.lidy.workflow.RejectedCountReportHandler"/>
<handler commandId="NewAndChangedReportHandler" class="com.connor.lidy.workflow.NewAndChangedReportHandler"/>
<handler commandId="TypeChangedReportHandler" class="com.connor.lidy.workflow.TypeChangedReportHandler"/>
<handler commandId="UsedbyProductReportHandler" class="com.connor.lidy.report.UsedbyProductReportHandler"/>
<handler commandId="InvalidListReportHandler" class="com.connor.lidy.workflow.InvalidListReportHandler"/>
<handler commandId="StandardRateReportHandler" class="com.connor.lidy.report.StandardRateReportHandler"/>
<handler commandId="ParentListReportHandler" class="com.connor.lidy.report.ParentListReportHandler"/>
<handler commandId="SpectrumStructureHandler" class="com.connor.lidy.create.SpectrumStructureHandler"/>
<handler commandId="PictureMaterialSaveHandler" class="com.connor.lidy.create.PictureMaterialSaveHandler"/>
<handler commandId="PictureMaterialHandler" class="com.connor.lidy.create.PictureMaterialHandler"/>
<handler commandId="QueryTaskOpinionHandler" class="com.connor.lidy.task.QueryTaskOpinionHandler"/>
<handler commandId="ProductListReportHandler" class="com.connor.lidy.report.ProductListReportHandler"/>
<handler commandId="WorkflowHistoryHandler" class="com.connor.lidy.workflow.WorkflowHistoryHandler"/>
</extension>
<extension point="org.eclipse.ui.bindings">
<key commandId="com.connor.chint.sap2.commands.TestCommand"
sequence="M3+D"
schemeId="com.teamcenter.rac.scheme">
</key>
</extension>
<extension point="org.eclipse.ui.menus">
<!--menuContribution locationURI="popup:org.eclipse.ui.popup.any?after=additions"-->
<menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=additions">
<menu id="lidyReport" label="报表菜单"/>
</menuContribution>
<menuContribution locationURI="menu:lidyReport?after=additions">
<command commandId="WorkflowReportHandler" label="流程模板导出" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="WorkflowReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="WorkMemberReportHandler" label="审签信息导出" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="WorkMemberReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="CompetitiveReportHandler" label="竞品分析报表导出" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="CompetitiveReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="PatentApplyReportHandler" label="专利申请维护明细表导出" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="PatentApplyReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="ProjectBoardHandler" label="项目运行跟踪表-产品类" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="ProjectBoardHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="TechProjectBoardHandler" label="项目运行跟踪表-技术类" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="TechProjectBoardHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="TechProjectDocReportHandler" label="项目文档归档明细-技术类" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="TechProjectDocReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="ProjectDocReportHandler" label="项目文档归档明细-产品类" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="ProjectDocReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="CodeCreateReportHandler" label="代码创建报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="CodeCreateReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="MaterialsListReportHandler" label="物料数据明细" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="MaterialsListReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="EffectiveDataReportHandler" label="有效数据报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="EffectiveDataReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="RejectedListReportHandler" label="审核错误明细" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="RejectedListReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="RejectedCountReportHandler" label="审核错误统计表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="RejectedCountReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="NewAndChangedReportHandler" label="新建与更改统计" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="NewAndChangedReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="TypeChangedReportHandler" label="产品型号更改表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="TypeChangedReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="UsedbyProductReportHandler" label="使用于机型清单" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="UsedbyProductReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="InvalidListReportHandler" label="游离物料输出" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="InvalidListReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="StandardRateReportHandler" label="标准化系数报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="StandardRateReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="ParentListReportHandler" label="物料父级使用清单" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="ParentListReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="SpectrumStructureHandler" label="型谱结构创建" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="SpectrumStructureHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="PictureMaterialSaveHandler" label="物料设计文档关联" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="PictureMaterialSaveHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="PictureMaterialHandler" label="物料项目重新选择" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="PictureMaterialHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="ProductListReportHandler" label="产品明细表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="ProductListReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<!--command commandId="WorkflowHistoryHandler" label="我执行的工作流程历史" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="WorkflowHistoryHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="QueryTaskOpinionHandler" label="查询审批意见" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="QueryTaskOpinionHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command-->
</menuContribution>
</extension>
</plugin>

@ -0,0 +1,439 @@
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension point="org.eclipse.ui.commands">
<command name="流程模板报表" id="WorkflowReportHandler"/>
<command name="流程模板节点报表" id="WorkMemberReportHandler"/>
<command name="竞品分析报表" id="CompetitiveReportHandler"/>
<command name="专利申请维护明细表导出" id="PatentApplyReportHandler"/>
<command name="项目运行跟踪表-产品类" id="ProjectBoardHandler"/>
<command name="项目运行跟踪表-技术类" id="TechProjectBoardHandler"/>
<command name="项目文档归档明细-产品类" id="ProjectDocReportHandler"/>
<command name="项目文档归档明细-技术类" id="TechProjectDocReportHandler"/>
<command name="代码创建报表" id="CodeCreateReportHandler"/>
<command name="物料数据明细报表" id="MaterialsListReportHandler"/>
<command name="有效数据报表" id="EffectiveDataReportHandler"/>
<command name="审核错误明细报表" id="RejectedListReportHandler"/>
<command name="审核错误统计报表" id="RejectedCountReportHandler"/>
<command name="新建与更改统计报表" id="NewAndChangedReportHandler"/>
<command name="产品型号更改表" id="TypeChangedReportHandler"/>
<command name="使用于机型清单" id="UsedbyProductReportHandler"/>
<command name="游离物料报表" id="InvalidListReportHandler"/>
<command name="标准化系数报表" id="StandardRateReportHandler"/>
<command name="物料父级使用清单" id="ParentListReportHandler"/>
<command name="型谱结构创建" id="SpectrumStructureHandler"/>
<command name="物料设计文档关联" id="PictureMaterialSaveHandler"/>
<command name="项目表单更新" id="PictureMaterialHandler"/>
<command name="查询流程审批意见" id="QueryTaskOpinionHandler"/>
<command name="产品明细表" id="ProductListReportHandler"/>
<command name="我执行的工作流程历史" id="WorkflowHistoryHandler"/>
<command name="批量发起流程" id="BatchTaskCreateHandler"/>
<command name="查看最新发布设计文档" id="FindDesignHandler"/>
<command name="标准化审核" id="AssignProjectHandler"/>
</extension>
<extension point="org.eclipse.ui.handlers">
<handler commandId="WorkflowReportHandler" class="com.connor.lidy.workflow.WorkflowReportHandler"/>
<handler commandId="WorkMemberReportHandler" class="com.connor.lidy.workflow.WorkMemberReportHandler"/>
<handler commandId="CompetitiveReportHandler" class="com.connor.lidy.report.CompetitiveReportHandler"/>
<handler commandId="PatentApplyReportHandler" class="com.connor.lidy.report.CompetitiveReportHandler"/>
<handler commandId="ProjectBoardHandler" class="com.connor.lidy.report.ProjectBoardHandler"/>
<handler commandId="TechProjectBoardHandler" class="com.connor.lidy.report.TechProjectBoardHandler"/>
<handler commandId="TechProjectDocReportHandler" class="com.connor.lidy.report.TechProjectDocReportHandler"/>
<handler commandId="ProjectDocReportHandler" class="com.connor.lidy.report.ProjectDocReportHandler"/>
<handler commandId="CodeCreateReportHandler" class="com.connor.lidy.workflow.CodeCreateReportHandler"/>
<handler commandId="MaterialsListReportHandler" class="com.connor.lidy.workflow.MaterialsListReportHandler"/>
<handler commandId="EffectiveDataReportHandler" class="com.connor.lidy.workflow.EffectiveDataReportHandler"/>
<handler commandId="RejectedListReportHandler" class="com.connor.lidy.workflow.RejectedListReportHandler"/>
<handler commandId="RejectedCountReportHandler" class="com.connor.lidy.workflow.RejectedCountReportHandler"/>
<handler commandId="NewAndChangedReportHandler" class="com.connor.lidy.workflow.NewAndChangedReportHandler"/>
<handler commandId="TypeChangedReportHandler" class="com.connor.lidy.workflow.TypeChangedReportHandler"/>
<handler commandId="UsedbyProductReportHandler" class="com.connor.lidy.report.UsedbyProductReportHandler"/>
<handler commandId="InvalidListReportHandler" class="com.connor.lidy.workflow.InvalidListReportHandler"/>
<handler commandId="StandardRateReportHandler" class="com.connor.lidy.report.StandardRateReportHandler"/>
<handler commandId="ParentListReportHandler" class="com.connor.lidy.report.ParentListReportHandler"/>
<handler commandId="SpectrumStructureHandler" class="com.connor.lidy.create.SpectrumStructureHandler"/>
<handler commandId="PictureMaterialSaveHandler" class="com.connor.lidy.create.PictureMaterialSaveHandler"/>
<handler commandId="PictureMaterialHandler" class="com.connor.lidy.create.PictureMaterialHandler"/>
<handler commandId="QueryTaskOpinionHandler" class="com.connor.lidy.task.QueryTaskOpinionHandler"/>
<handler commandId="ProductListReportHandler" class="com.connor.lidy.report.ProductListReportHandler"/>
<handler commandId="WorkflowHistoryHandler" class="com.connor.lidy.workflow.WorkflowHistoryHandler"/>
<handler commandId="BatchTaskCreateHandler" class="com.connor.lidy.workflow.BatchTaskCreateHandler"/>
<handler commandId="FindDesignHandler" class="com.connor.lidy.dialog.FindDesignHandler"/>
<handler commandId="AssignProjectHandler" class="com.connor.lidy.dialog.StandardHandler"/>
</extension>
<extension point="org.eclipse.ui.bindings">
<key commandId="com.connor.chint.sap2.commands.TestCommand"
sequence="M3+D"
schemeId="com.teamcenter.rac.scheme">
</key>
</extension>
<extension point="org.eclipse.ui.menus">
<menuContribution locationURI="menu:cn.net.connor.ml.plm.menus3?after=additions">
<command commandId="BatchTaskCreateHandler" label="批量发起流程" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="BatchTaskCreateHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="FindDesignHandler" label="查看最新发布设计文档" style="push">
<visibleWhen checkEnabled="true">
<and>
<or>
<reference definitionId="com.teamcenter.rac.ui.inMainPerspective"/>
<reference definitionId="com.teamcenter.rac.pse.inMainView"/>
</or>
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="FindDesignHandler">
</equals>
</iterate>
</not>
</with>
</and>
</visibleWhen>
</command>
</menuContribution>
<!--menuContribution locationURI="popup:org.eclipse.ui.popup.any?after=additions"-->
<!--menuContribution locationURI="menu:org.eclipse.ui.main.menu?after=additions">
<menu id="lidyReport" label="报表菜单"/>
</menuContribution>
<menuContribution locationURI="menu:lidyReport?after=additions">
<command commandId="WorkflowReportHandler" label="流程模板报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="WorkflowReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="WorkMemberReportHandler" label="流程模板节点报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="WorkMemberReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="CompetitiveReportHandler" label="竞品分析报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="CompetitiveReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="PatentApplyReportHandler" label="专利申请维护明细表导出" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="PatentApplyReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="ProjectBoardHandler" label="项目运行跟踪表-产品类" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="ProjectBoardHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="TechProjectBoardHandler" label="项目运行跟踪表-技术类" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="TechProjectBoardHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="TechProjectDocReportHandler" label="项目文档归档明细-技术类" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="TechProjectDocReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="ProjectDocReportHandler" label="项目文档归档明细-产品类" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="ProjectDocReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="CodeCreateReportHandler" label="代码创建报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="CodeCreateReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="MaterialsListReportHandler" label="物料数据明细报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="MaterialsListReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="EffectiveDataReportHandler" label="有效数据报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="EffectiveDataReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="RejectedListReportHandler" label="审核错误明细报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="RejectedListReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="RejectedCountReportHandler" label="审核错误统计报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="RejectedCountReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="NewAndChangedReportHandler" label="新建与更改统计报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="NewAndChangedReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="TypeChangedReportHandler" label="产品型号更改表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="TypeChangedReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="UsedbyProductReportHandler" label="使用于机型清单" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="UsedbyProductReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="InvalidListReportHandler" label="游离物料报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="InvalidListReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="StandardRateReportHandler" label="标准化系数报表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="StandardRateReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="ParentListReportHandler" label="物料父级使用清单" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="ParentListReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="SpectrumStructureHandler" label="型谱结构创建" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="SpectrumStructureHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="PictureMaterialSaveHandler" label="物料设计文档关联" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="PictureMaterialSaveHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="PictureMaterialHandler" label="物料项目重新选择" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="PictureMaterialHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="ProductListReportHandler" label="产品明细表" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="ProductListReportHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="WorkflowHistoryHandler" label="我执行的工作流程历史" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="WorkflowHistoryHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="QueryTaskOpinionHandler" label="查询审批意见" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="QueryTaskOpinionHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
</menuContribution-->
<menuContribution locationURI="popup:org.eclipse.ui.popup.any">
<command commandId="QueryTaskOpinionHandler" label="查询流程审批意见" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="QueryTaskOpinionHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
<command commandId="AssignProjectHandler" label="标准化审核" style="push">
<visibleWhen checkEnabled="true">
<with variable="rac_command_suppression">
<not>
<iterate operator="or">
<equals value="AssignProjectHandler">
</equals>
</iterate>
</not>
</with>
</visibleWhen>
</command>
</menuContribution>
</extension>
</plugin>

Binary file not shown.

@ -0,0 +1,44 @@
package com.connor.lidy;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class Activator extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "com.connor.lidy"; //$NON-NLS-1$
// The shared instance
private static Activator plugin;
/**
* The constructor
*/
public Activator() {
}
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
}
@Override
public void stop(BundleContext context) throws Exception {
plugin = null;
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static Activator getDefault() {
return plugin;
}
}

@ -0,0 +1,233 @@
package com.connor.lidy.create;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCPreferenceService;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
public class DbPool {
public static Connection connection = null;
public static PreparedStatement ps = null;
public static ResultSet rs = null;
private static DbPool instance = null;
public static synchronized Connection getConnection() {
if (instance == null) {
instance = new DbPool();
}
return instance._getConnection();
}
private Connection _getConnection() {
try {
String sDBDriver = null;
String sConnection = null;
String sUser = null;
String sPassword = null;
// Properties p = new Properties();
// InputStream is = getClass().getResourceAsStream(
// "/sqlconn.properties");
// p.load(is);
// sDBDriver = p.getProperty("DBDriver", "1");
// sConnection = p.getProperty("Connection", "2");
// sUser = p.getProperty("User", "");
// sPassword = p.getProperty("Password", "");
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
TCSession session = (TCSession) app.getSession();
TCPreferenceService service = session.getPreferenceService();
String[] array = service.getStringValues("TC13_SqlServer_Link");
//TCPreferenceService.TC_preference_site, "TC13_SqlServer_Link");
if (array != null)
{
for (String str : array) {
// System.out.println(" ORACLE = " + str);
if (str != null && str.startsWith("DBDriver=")) {
sDBDriver = str.substring(str.indexOf("=") + 1,
str.length());
} else if (str != null && str.startsWith("Connection=")) {
sConnection = str.substring(str.indexOf("=") + 1, str.length());
} else if (str != null && str.startsWith("User=")) {
sUser = str.substring(str.indexOf("=") + 1,
str.length());
} else if (str != null
&& str.startsWith("Password=")) {
sPassword = str.substring(str.indexOf("=") + 1,
str.length());
}
}
}
// String driver_temp = reg.getString("ORACEL_DRIVER");
// String url = reg.getString("ORACEL_URL");// getProperties("URL");
// String dbName = reg.getString("ORACEL_NAME");//
// Util.getProperties("dbName");
// String dbPassword = reg.getString("ORACEL_PASSWORD");//
// Util.getProperties("dbPassword");
if (sDBDriver == null || sConnection == null || sUser == null
|| sPassword == null) {
MessageBox.post("请检查数据库首选项是否配置正确", "错误提示", MessageBox.ERROR);
}
Class.forName(sDBDriver);
connection = DriverManager.getConnection(sConnection, sUser,
sPassword);
return connection;
} catch (Exception se) {
System.out.println(se);
}
return null;
}
public static void executeUpdateSql(String sql) throws SQLException {
Statement st = connection.createStatement();
try {
connection.setAutoCommit(false);
System.out.println("sql===" + sql);
st.executeUpdate(sql);
} catch (SQLException e) {
// System.out.println(e.getMessage());
e.printStackTrace();
if (st != null)
st.close();
connection.rollback();
connection.close();
} finally {
if (st != null)
st.close();
// connection.close();
}
}
public static void executeDeleteSql(String sql) throws SQLException {
Statement st = connection.createStatement();
try {
connection.setAutoCommit(false);
System.out.println("sql===" + sql);
st.executeUpdate(sql);
connection.commit();
} catch (SQLException e) {
if (st != null)
st.close();
connection.rollback();
connection.close();
} finally {
if (st != null)
st.close();
connection.close();
}
}
public static ResultSet executeSelectSql(String sql) throws SQLException {
Statement st = connection.createStatement();
try {
connection.setAutoCommit(false);
System.out.println("sql===" + sql);
rs = st.executeQuery(sql);
// conn.commit();
} catch (SQLException e) {
if (st != null)
st.close();
connection.rollback();
connection.close();
}
return rs;
}
/**
*
*/
public final static void free(ResultSet resultSet) {
free(resultSet, null, null);
}
/**
*
*/
public final static void free(Statement statement) {
free(null, statement, null);
}
/**
*
*/
public final static void free(Connection connection) {
free(null, null, connection);
}
/**
*
*/
public final static void free(ResultSet resultSet, Statement statement) {
free(resultSet, statement, null);
}
/**
*
*/
public final static void free(Statement statement, Connection connection) {
free(null, statement, connection);
}
/**
* ()
*/
public final static void free() {
free(DbPool.rs, DbPool.ps);
}
/**
* ()
*/
public final static void freeAll() {
free(DbPool.rs, DbPool.ps, DbPool.connection);
}
/**
* ()
*/
public final static void free(ResultSet resultSet, Statement statement,
Connection connection) {
try {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} finally {
try {
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
}

@ -0,0 +1,285 @@
package com.connor.lidy.create;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Vector;
import java.util.Map.Entry;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.stylesheet.PropertyDateComponent;
import com.teamcenter.rac.util.MessageBox;
public class PictureMaterialDialog extends AbstractAIFDialog {
private static final long serialVersionUID = 1L;
private TCSession session;
private JButton searchBtn;
private JButton exportBtn;
private JButton closeBtn;
// private JButton nextPageBtn;
// private JButton prePageBtn;
// private JButton firstPageBtn;
// private JButton lastPageBtn;
private JTable impTable;
private DefaultTableModel impModel;
private Map<String, JComponent> compMap;
private Map<Integer, TCComponent> tableMap;
// private int nowPage = 0;
// private int totalPage = 0;
// private final int rowsEveryPage = 20;//每页行数
public PictureMaterialDialog(TCSession session, TCComponentItemRevision target, String search, String[] options) throws Exception {
super(AIFUtility.getActiveDesktop());
this.session = session;
compMap = new HashMap<>();
tableMap = new HashMap<>();
setTitle("项目表单更新");
JPanel msgPanel = new JPanel(new GridLayout(0,3,2,5));
// msgPanel.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(), "时间表属性"));
JLabel label1 = new JLabel("名称");
label1.setPreferredSize(new Dimension(100, 23));
JPanel propPanel1 = new JPanel(new BorderLayout());
propPanel1.add(BorderLayout.WEST, label1);
JTextField field1 = new JTextField();
field1.setPreferredSize(new Dimension(118, 23));
propPanel1.add(BorderLayout.CENTER, field1);
msgPanel.add(propPanel1);
compMap.put(label1.getText(), field1);
/*JLabel label2 = new JLabel("产品型号");
label2.setPreferredSize(new Dimension(100, 23));
JPanel propPanel2 = new JPanel(new BorderLayout());
propPanel2.add(BorderLayout.WEST, label2);
JTextField field2 = new JTextField();
field2.setPreferredSize(new Dimension(118, 23));
propPanel2.add(BorderLayout.CENTER, field2);
msgPanel.add(propPanel2);
compMap.put(label2.getText(), field2);
JLabel label3 = new JLabel("图号");
label3.setPreferredSize(new Dimension(100, 23));
JPanel propPanel3 = new JPanel(new BorderLayout());
propPanel3.add(BorderLayout.WEST, label3);
JTextField field3 = new JTextField();
field3.setPreferredSize(new Dimension(118, 23));
propPanel3.add(BorderLayout.CENTER, field3);
msgPanel.add(propPanel3);
compMap.put(label3.getText(), field3);*/
searchBtn = new JButton("查询");
exportBtn = new JButton("确定");
closeBtn = new JButton("关闭");
// firstPageBtn = new JButton("首页");
// lastPageBtn = new JButton("尾页");
// nextPageBtn = new JButton("下一页");
// prePageBtn = new JButton("上一页");
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(searchBtn);
btnPanel.add(exportBtn);
btnPanel.add(closeBtn);
JPanel topPanel = new JPanel(new BorderLayout());
topPanel.add(BorderLayout.CENTER, msgPanel);
topPanel.add(BorderLayout.SOUTH, btnPanel);
String[] tableHeader = new String[] { "序号", "名称", "项目经理", "WBS号", "产品代号", "产品型号" };
impModel = new DefaultTableModel(tableHeader, 0);
impTable = new JTable() {
private static final long serialVersionUID = 1L;
@Override
public boolean isCellEditable(int row, int col) {
return false;
}
};
impTable.getTableHeader().setReorderingAllowed(false);
impTable.setFillsViewportHeight(true);
// impTable.setEnabled(false);
impTable.setEnabled(true);
// impTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
impTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
impTable.setModel(impModel);
for(int i=1; i<impModel.getColumnCount(); i++)
impTable.getColumnModel().getColumn(i).setPreferredWidth(150);
JScrollPane tablePanel = new JScrollPane(impTable);
addActionListener(target, search);
setLayout(new BorderLayout());
add(BorderLayout.NORTH, topPanel);
add(BorderLayout.CENTER, tablePanel);
pack();
setSize(new Dimension(1300, 700));
setDefaultLookAndFeelDecorated(true);
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
// setAlwaysOnTop(true);
setVisible(true);
}
public void search(String search) throws Exception, TCException {
if(impModel.getRowCount()>0) {
for(int i=impModel.getRowCount(); i>0; i--)
impModel.removeRow(i-1);
}
Vector<String> keyV = new Vector<>();
Vector<String> valueV = new Vector<>();
String text = "";
for(Entry<String, JComponent> e : compMap.entrySet()) {
JComponent c = e.getValue();
if(c instanceof JTextField)
text = ((JTextField)c).getText();
else if(c instanceof PropertyDateComponent)
text = ((PropertyDateComponent)c).getDateViewModel().getDateString();
else
text = ((JComboBox<?>)c).getSelectedItem().toString();
if(text!=null && !text.isEmpty()) {
keyV.add(e.getKey());
//2022/11/21取消前后*
// valueV.add("*"+text+"*");
valueV.add(text);
}
}
if(text == null || text.isEmpty())
throw new Exception("请输入查询条件");
long time1 = System.nanoTime();
//TCComponent[] result = TCUtil.query(session, search, keyV, valueV);
ResultSet rs = null;
try {
text = text.replaceAll("\\*", "%");
System.out.println("name=="+text);
String selectSql = "SELECT t1.puid,t1.pobject_name,c.pml8_ProjectManagement,c.pml8_WBSNo,c.pml8_ProductCode,c.pml8_ProductType FROM PWORKSPACEOBJECT t1 inner join (select t1.puid,t2.pname from PRELEASE_STATUS_LIST t1 inner join PRELEASESTATUS t2 on t1.pvalu_0=t2.puid)t2 on t1.puid = t2.puid inner join (select b.puid,d.pml8_ProjectManagement,d.pml8_WBSNo,d.pml8_ProductCode,d.pml8_ProductType from PFORM b,PML8_PROJECTFORMSTORAGE d where b.rdata_fileu = d.puid) c on c.puid = t1.puid where t1.pobject_name like '"+text+"' and t1.pobject_type = 'ML8_ProjectForm'";
DbPool.getConnection();
rs = DbPool.executeSelectSql(selectSql);
LinkedHashMap<String, ArrayList<String>> map =new LinkedHashMap<String, ArrayList<String>>();
if(rs != null)
{
while(rs.next())
{
ArrayList<String> list =new ArrayList<String>();
list.add(rs.getString(2));
list.add(rs.getString(3));
list.add(rs.getString(4));
list.add(rs.getString(5));
list.add(rs.getString(6));
map.put(rs.getString(1), list);
}
}
System.out.println("list==========="+map.size());
if (map == null || map.size() == 0) {
MessageBox.post(AIFDesktop.getActiveDesktop(), "查询为空!", "", MessageBox.INFORMATION);
return;
}
//TCComponent[] result = session.stringToComponent(list.toArray(new String[0]));
long time2 = System.nanoTime();
System.out.println("查询总用时(ms) " + (time2 - time1)
/ 1000000);
// System.out.println("result:"+result.length);
// if(result.length==0) {
// MessageBox.post("未查询到项目!","",MessageBox.INFORMATION);
// return;
// }
long time3 = System.nanoTime();
int count = 1;
for (Entry<String, ArrayList<String>> tempMap : map.entrySet()) {
String key = tempMap.getKey();
ArrayList<String> value = tempMap.getValue();
Vector<String> v = new Vector<>();
v.add(count+"");//序号
v.add(value.get(0));//名称
v.add(value.get(1));//项目经理
v.add(value.get(2));//WBS号
v.add(value.get(3));//产品代号
v.add(value.get(4));//产品型号
tableMap.put(count, session.stringToComponent(key));
impModel.addRow(v);
count++;
}
long time4 = System.nanoTime();
System.out.println("构建表格总用时(ms) " + (time4 - time3)
/ 1000000);
} catch (Exception e1) {
e1.printStackTrace();
}
}
private void addActionListener(TCComponentItemRevision target, String search) {
final AbstractAIFDialog dialog = this;
searchBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
PictureMaterialOperation operation= new PictureMaterialOperation(tableMap,0,target,dialog,search,"查询",session);
session.queueOperation(operation);
} catch (Exception e1) {
e1.printStackTrace();
MessageBox.post(dialog, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
exportBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
int row = impTable.getSelectedRow();
if(row<0)
throw new Exception("请选择设计文档");
PictureMaterialOperation operation= new PictureMaterialOperation(tableMap,row,target,dialog,"","导出",session);
session.queueOperation(operation);
} catch (Exception e1) {
e1.printStackTrace();
MessageBox.post(dialog, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
closeBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
}
}

@ -0,0 +1,89 @@
package com.connor.lidy.create;
import javax.swing.JOptionPane;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class PictureMaterialHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("PictureMaterialHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
new Thread() {
public void run(){
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
TCSession session = (TCSession) app.getSession();
InterfaceAIFComponent target = app.getTargetComponent();
if(target==null || !(target instanceof TCComponentItemRevision)) {
MessageBox.post(desktop, "请选择零组件或原辅材料版本进行导出", "ERROR", MessageBox.ERROR);
return;
}
TCComponentItemRevision rev = (TCComponentItemRevision) target;
// TCComponentItemRevision[] revs = rev.getItem().getWorkingItemRevisions();
// if(revs.length==0) {
// MessageBox.post(desktop, "请选择未发布版本进行创建", "ERROR", MessageBox.ERROR);
// return null;
// }
// System.out.println("Working:"+revs[0]);
// if(!rev.equals(revs[revs.length-1])) {
// MessageBox.post(desktop, "请选择未发布版本进行创建", "ERROR", MessageBox.ERROR);
// return null;
// }
if(rev.getReferenceListProperty("release_status_list").length>0) {
MessageBox.post(desktop, "请选择未发布版本进行创建", "ERROR", MessageBox.ERROR);
return;
}
if(!rev.getProperty("item_revision_id").equals("A")) {
AIFComponentContext[] forms = rev.getChildren("ML8_ProjectRelation");
if(forms.length>0) {
MessageBox.post(desktop, "请选择未发布版本进行创建", "ERROR", MessageBox.ERROR);
return;
}
}
String pref = "ML8_PictureMaterial";
String options[] = session.getPreferenceService().getStringValues(pref);
if(options==null || options.length==0) {
MessageBox.post(desktop, "首选项"+pref+"配置不正确", "ERROR", MessageBox.ERROR);
return;
}
String type = rev.getItem().getType();
boolean props = false;
for(String s : options) {
if(s.equals(type))
props = true;
}
if(!props) {
MessageBox.post(desktop, "选择的版本类型不在范围内", "ERROR", MessageBox.ERROR);
return;
}
AIFComponentContext[] children = rev.getChildren("ML8_ProjectRelation");
if(children.length>0) {
int choose = JOptionPane.showOptionDialog(desktop, "选中对象已有项目表单,是否替换?", "提示",
JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, null, new String[] {"是","否"}, "结束操作");
if(choose!=0)
return;
}
new PictureMaterialDialog(session, rev, options[0], null);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
}
}.start();
return null;
}
}

@ -0,0 +1,72 @@
package com.connor.lidy.create;
import java.util.Map;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aif.AbstractAIFOperation;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.kernel.TCUserService;
import com.teamcenter.rac.util.MessageBox;
public class PictureMaterialOperation extends AbstractAIFOperation{
private Map<Integer, TCComponent> tableMap;
private int row;
private TCComponentItemRevision target;
private AbstractAIFDialog dialog;
private String exec;
private String search;
private TCSession session;
public PictureMaterialOperation(Map<Integer, TCComponent> tableMap,int row,TCComponentItemRevision target,AbstractAIFDialog dialog,String search,String exec,TCSession session) {
this.tableMap=tableMap;
this.row=row;
this.target=target;
this.dialog=dialog;
this.exec = exec;
this.search = search;
this.session = session;
}
@Override
public void executeOperation() throws Exception {
switch (exec) {
case "µ¼³ö":
export();
break;
case "²éѯ":
((PictureMaterialDialog)dialog).search(search);
break;
default:
break;
}
}
private void export() throws TCException {
TCComponent comp = tableMap.get(row);
AIFComponentContext[] children = target.getChildren("ML8_ProjectRelation");
if(children.length>0) {
for(AIFComponentContext c : children)
target.remove("ML8_ProjectRelation", (TCComponent)c.getComponent());
}
target.add("ML8_ProjectRelation", comp);
TCUserService userservice = session.getUserService();
Object[] obj = new Object[1];
obj[0] = target;
Object res = userservice.call("updateFormChangeDesc", obj);
// AIFComponentContext[] forms = comp.getChildren("ML8_ProjectRelation");
// System.out.println("forms:"+forms.length);
// if(forms.length>0) {
// for(AIFComponentContext c : forms)
// target.add("ML8_ProjectRelation", (TCComponent)c.getComponent());
// }
MessageBox.post(dialog, "ÐÞ¸ÄÍê³É", "INFO", MessageBox.INFORMATION);
dialog.dispose();
}
}

@ -0,0 +1,236 @@
package com.connor.lidy.create;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import java.util.Map.Entry;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentPseudoFolder;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.stylesheet.PropertyDateComponent;
import com.teamcenter.rac.util.MessageBox;
public class PictureMaterialSaveDialog extends AbstractAIFDialog {
private static final long serialVersionUID = 1L;
private TCSession session;
private JButton searchBtn;
private JButton exportBtn;
private JButton closeBtn;
private JTable impTable;
private DefaultTableModel impModel;
private Map<String, JComponent> compMap;
private Map<Integer, TCComponent> tableMap;
public PictureMaterialSaveDialog(TCSession session, TCComponentItemRevision target, String search, String[] options) throws Exception {
super(AIFUtility.getActiveDesktop());
this.session = session;
compMap = new HashMap<>();
tableMap = new HashMap<>();
setTitle("有图件物料另存");
JPanel msgPanel = new JPanel(new GridLayout(0,3,2,5));
// msgPanel.setBorder(new TitledBorder(BorderFactory.createEtchedBorder(), "时间表属性"));
JLabel label1 = new JLabel("产品代号");
label1.setPreferredSize(new Dimension(100, 23));
JPanel propPanel1 = new JPanel(new BorderLayout());
propPanel1.add(BorderLayout.WEST, label1);
JTextField field1 = new JTextField();
field1.setPreferredSize(new Dimension(118, 23));
propPanel1.add(BorderLayout.CENTER, field1);
msgPanel.add(propPanel1);
compMap.put(label1.getText(), field1);
JLabel label2 = new JLabel("产品型号");
label2.setPreferredSize(new Dimension(100, 23));
JPanel propPanel2 = new JPanel(new BorderLayout());
propPanel2.add(BorderLayout.WEST, label2);
JTextField field2 = new JTextField();
field2.setPreferredSize(new Dimension(118, 23));
propPanel2.add(BorderLayout.CENTER, field2);
msgPanel.add(propPanel2);
compMap.put(label2.getText(), field2);
JLabel label3 = new JLabel("图号");
label3.setPreferredSize(new Dimension(100, 23));
JPanel propPanel3 = new JPanel(new BorderLayout());
propPanel3.add(BorderLayout.WEST, label3);
JTextField field3 = new JTextField();
field3.setPreferredSize(new Dimension(118, 23));
propPanel3.add(BorderLayout.CENTER, field3);
msgPanel.add(propPanel3);
compMap.put(label3.getText(), field3);
searchBtn = new JButton("查询");
exportBtn = new JButton("确定");
closeBtn = new JButton("关闭");
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(searchBtn);
btnPanel.add(exportBtn);
btnPanel.add(closeBtn);
JPanel topPanel = new JPanel(new BorderLayout());
topPanel.add(BorderLayout.CENTER, msgPanel);
topPanel.add(BorderLayout.SOUTH, btnPanel);
String[] tableHeader = new String[] { "序号", "文档编码", "版本", "文档名称", "项目名称", "产品代号", "材料", "净重", "物料名称后缀" };
impModel = new DefaultTableModel(tableHeader, 0);
impTable = new JTable() {
private static final long serialVersionUID = 1L;
@Override
public boolean isCellEditable(int row, int col) {
return false;
}
};
impTable.getTableHeader().setReorderingAllowed(false);
impTable.setFillsViewportHeight(true);
// impTable.setEnabled(false);
impTable.setEnabled(true);
// impTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
impTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
impTable.setModel(impModel);
for(int i=1; i<impModel.getColumnCount(); i++)
impTable.getColumnModel().getColumn(i).setPreferredWidth(150);
JScrollPane tablePanel = new JScrollPane(impTable);
addActionListener(target, search, options);
setLayout(new BorderLayout());
add(BorderLayout.NORTH, topPanel);
add(BorderLayout.CENTER, tablePanel);
pack();
setSize(new Dimension(1300, 700));
setDefaultLookAndFeelDecorated(true);
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
// setAlwaysOnTop(true);
setVisible(true);
}
private void addActionListener(TCComponentItemRevision target, String search, String[] options) {
final AbstractAIFDialog dialog = this;
searchBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
if(impModel.getRowCount()>0) {
for(int i=impModel.getRowCount(); i>0; i--)
impModel.removeRow(i-1);
}
Vector<String> keyV = new Vector<>();
Vector<String> valueV = new Vector<>();
for(Entry<String, JComponent> e : compMap.entrySet()) {
JComponent c = e.getValue();
String text = "";
if(c instanceof JTextField)
text = ((JTextField)c).getText();
else if(c instanceof PropertyDateComponent)
text = ((PropertyDateComponent)c).getDateViewModel().getDateString();
else
text = ((JComboBox<?>)c).getSelectedItem().toString();
if(text!=null && !text.isEmpty()) {
keyV.add(e.getKey());
valueV.add("*"+text+"*");
}
}
if(keyV.size()==0)
throw new Exception("请输入查询条件");
TCComponent[] result = TCUtil.query(session, search, keyV, valueV);
System.out.println("result:"+result.length);
for(int i=0; i<result.length; i++) {
Vector<String> v = new Vector<>();
v.add(i+1+"");//序号
v.add(result[i].getProperty("item_id"));//文档编码
v.add(result[i].getProperty("item_revision_id"));//版本
v.add(result[i].getProperty("object_name"));//文档名称
AIFComponentContext[] children = result[i].getChildren("ML8_ProjectRelation");
if(children.length>0) {
TCComponent form = (TCComponent)children[0].getComponent();
v.add(form.getProperty("object_name"));//项目名称
v.add(form.getProperty("ml8_ProductCode"));//产品代号
}else {
v.add("");//项目名称
v.add("");//产品代号
}
v.add(result[i].getProperty("ml8_Materials"));//材料
v.add(result[i].getProperty("ml8_Suttle"));//净重
v.add(result[i].getProperty("ml8_NameSuffix"));//物料名称后缀
tableMap.put(i, result[i]);
impModel.addRow(v);
}
} catch (Exception e1) {
e1.printStackTrace();
MessageBox.post(dialog, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
exportBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
int row = impTable.getSelectedRow();
if(row<0)
throw new Exception("请选择设计文档");
TCComponent comp = tableMap.get(row);
for(String s : options) {
if(!s.contains("="))
continue;
String[] ss = s.split("=");
target.setProperty(ss[0], comp.getProperty(ss[1]));
}
AIFComponentContext[] children = target.getChildren("ML8_ProjectRelation");
if(children.length>0) {
for(AIFComponentContext c : children)
target.remove("ML8_ProjectRelation", (TCComponent)c.getComponent());
}
AIFComponentContext[] forms = comp.getChildren("ML8_ProjectRelation");
System.out.println("forms:"+forms.length);
if(forms.length>0) {
for(AIFComponentContext c : forms)
target.add("ML8_ProjectRelation", (TCComponent)c.getComponent());
}
TCComponentPseudoFolder TC_Is_Represented_By = TCUtil.getPseudoFolder(target, "TC_Is_Represented_By");
AIFComponentContext[] cs = TC_Is_Represented_By.getChildren();
if(cs.length>0) {
for(AIFComponentContext c : cs)
TC_Is_Represented_By.remove("TC_Is_Represented_By", (TCComponent)c.getComponent());
}
target.add("TC_Is_Represented_By", comp);
MessageBox.post(dialog, "修改完成", "INFO", MessageBox.INFORMATION);
dispose();
} catch (Exception e1) {
e1.printStackTrace();
MessageBox.post(dialog, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
closeBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
}
}

@ -0,0 +1,80 @@
package com.connor.lidy.create;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class PictureMaterialSaveHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("PictureMaterialSaveHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
TCSession session = (TCSession) app.getSession();
InterfaceAIFComponent target = app.getTargetComponent();
if(target==null || !(target instanceof TCComponentItemRevision)) {
MessageBox.post(desktop, "请选择零组件或原辅材料版本进行导出", "ERROR", MessageBox.ERROR);
return null;
}
TCComponentItemRevision rev = (TCComponentItemRevision) target;
// TCComponentItemRevision[] revs = rev.getItem().getWorkingItemRevisions();
// if(revs.length==0) {
// MessageBox.post(desktop, "请选择未发布版本进行创建", "ERROR", MessageBox.ERROR);
// return null;
// }
// System.out.println("Working:"+revs[0]);
// if(!rev.equals(revs[revs.length-1])) {
// MessageBox.post(desktop, "请选择未发布版本进行创建", "ERROR", MessageBox.ERROR);
// return null;
// }
if(rev.getReferenceListProperty("release_status_list").length>0) {
MessageBox.post(desktop, "请选择未发布版本进行创建", "ERROR", MessageBox.ERROR);
return null;
}
if(!rev.getProperty("item_revision_id").equals("A")) {
AIFComponentContext[] forms = rev.getChildren("ML8_ProjectRelation");
if(forms.length>0) {
MessageBox.post(desktop, "请选择未发布版本进行创建", "ERROR", MessageBox.ERROR);
return null;
}
}
String pref = "ML8_PictureMaterialSave";
String options[] = session.getPreferenceService().getStringValues(pref);
if(options==null || options.length==0) {
MessageBox.post(desktop, "首选项"+pref+"配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
String type = rev.getItem().getType()+":";
String[] props = null;
for(String s : options) {
if(s.startsWith(type))
props = s.substring(type.length()).split(";");
}
if(props==null) {
MessageBox.post(desktop, "选择的版本类型不在范围内", "ERROR", MessageBox.ERROR);
return null;
}
if(rev.getProperty("ml8_FigureNum").isEmpty()) {
MessageBox.post(desktop, "选择的版本为无图件,无法使用此功能", "ERROR", MessageBox.ERROR);
return null;
}
new PictureMaterialSaveDialog(session, rev, options[0], props);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
return null;
}
}

@ -0,0 +1,325 @@
package com.connor.lidy.create;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.common.create.BOCreateDefinition;
import com.teamcenter.rac.common.create.BOCreateDefinitionFactory;
import com.teamcenter.rac.common.create.CreateInstanceInput;
import com.teamcenter.rac.common.create.ICreateInstanceInput;
import com.teamcenter.rac.common.create.SOAGenericCreateHelper;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentFolder;
import com.teamcenter.rac.kernel.TCComponentFolderType;
import com.teamcenter.rac.kernel.TCComponentListOfValues;
import com.teamcenter.rac.kernel.TCComponentListOfValuesType;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.stylesheet.PropertyDateComponent;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.services.rac.core.LOVService;
import com.teamcenter.services.rac.core._2013_05.LOV.InitialLovData;
import com.teamcenter.services.rac.core._2013_05.LOV.LOVSearchResults;
import com.teamcenter.services.rac.core._2013_05.LOV.LOVValueRow;
import com.teamcenter.services.rac.core._2013_05.LOV.LovFilterData;
public class SpectrumStructureDialog extends AbstractAIFDialog {
private static final long serialVersionUID = 1L;
private TCSession session;
private JButton exportBtn;
private JButton cancelBtn;
private HashMap<String, JComponent> searchMap;
private TCComponent target;
private String folderType;
private String where;
private List<String> mustList;
private HashSet<String> checkSet;
@SuppressWarnings("unchecked")
public SpectrumStructureDialog(TCSession session, TCComponent target, TCComponentDataset model) throws Exception {
super(AIFUtility.getActiveDesktop());
this.session = session;
this.searchMap = new HashMap<>();
this.mustList = new ArrayList<>();
this.checkSet = new HashSet<>();
this.target = target;
TCComponentTcFile[] files = model.getTcFiles();
File xmlFile = files[0].getFile(System.getProperty("java.io.tmpdir"));
Document doc = new SAXReader().read(xmlFile);
Element Mroot = doc.getRootElement(), element = null;
TCComponent parent = null;
List<Object> ItemTypes = Mroot.elements("ItemType");
String name = target.getProperty("object_name");
for(Object o : ItemTypes) {
Element itemtype = (Element) o;
if(!target.isTypeOf(itemtype.attributeValue("objectType")))
continue;
String objectName = itemtype.attributeValue("objectName");
if(!objectName.isEmpty() && !name.equals(objectName))
continue;
String pname = itemtype.attributeValue("parentName");
if(!pname.isEmpty()) {
AIFComponentContext[] parents = target.whereReferencedByTypeRelation(null, null);
for(AIFComponentContext c : parents) {
// System.out.println("parents:"+c.getComponent().getProperty("object_name"));
if(c.getComponent().getProperty("object_name").equals(pname)) {
parent = (TCComponent) c.getComponent();
break;
}
}
if(parent == null)
continue;
}
element = itemtype;
folderType = element.attributeValue("createType");
where = element.attributeValue("where");
break;
}
if(element == null)
throw new Exception("所选对象的类型不在xml配置范围内");
// if(parent == null)
// throw new Exception("未找到符合条件的父级");
setTitle("型谱结构创建");
JPanel propPanel = new JPanel(new PropertyLayout(70, 5, 10, 5, 5, 5));
int row = 1;
TCComponentListOfValuesType lovType = (TCComponentListOfValuesType)session.getTypeComponent("ListOfValues");
// TCComponentListOfValues[] lov = lovType.find("ML8_ProjectCategory_LOV");
// String[] vals = getDynamicLOV(lov[0]);
// System.out.println("ML8_ProjectCategory_LOV:"+lov[0].getType()+"=="+vals.length);
for(Object o : element.elements()) {
Element e = (Element) o;
String defaultValue = e.attributeValue("defaultValue");
if(defaultValue.startsWith("@"))
defaultValue = target.getProperty(defaultValue.substring(1));
if(e.attributeValue("isMust").equals("true")) {
JLabel label = new JLabel("<html><body>"+e.attributeValue("displayName")+"<span style='color:#ee0000;font-size:10px'>*</span></body></html>");
propPanel.add(row+".1.left.center", label);
mustList.add(e.attributeValue("realName"));
}else {
JLabel label = new JLabel(e.attributeValue("displayName"));
propPanel.add(row+".1.left.center", label);
}
if(e.attributeValue("propertyType").equals("Date")) {
PropertyDateComponent date = new PropertyDateComponent();
if(e.attributeValue("Enabled").equals("false"))
date.setEnabled(false);
propPanel.add(row+".2.right.center", date);
searchMap.put(e.attributeValue("realName"), date);
}else if(e.attributeValue("propertyType").equals("lov")) {
JComboBox<String> combo = new JComboBox<>();
combo.setPreferredSize(new Dimension(150, 23));
combo.addItem("");
TCComponentListOfValues[] lovs = lovType.find(e.attributeValue("lovName"));//TODO lov
if(lovs==null || lovs.length==0)
throw new Exception("未找到LOV"+e.attributeValue("lovName"));
if(lovs[0].isTypeOf("Fnd0ListOfValuesDynamic")) {
for(String item : getDynamicLOV(lovs[0])) {
combo.addItem(item);
}
}
combo.setSelectedItem(defaultValue);
if(e.attributeValue("Enabled").equals("false"))
combo.setEnabled(false);
propPanel.add(row+".2.right.center", combo);
searchMap.put(e.attributeValue("realName"), combo);
}else {
JTextField text = new JTextField();
text.setPreferredSize(new Dimension(150, 23));
text.setText(defaultValue);
if(e.attributeValue("Enabled").equals("false"))
text.setEnabled(false);
propPanel.add(row+".2.right.center", text);
searchMap.put(e.attributeValue("realName"), text);
}
row++;
}
if(!searchMap.containsKey("object_name"))
throw new Exception("未配置object_name填写框");
exportBtn = new JButton("创建");
cancelBtn = new JButton("取消");
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(exportBtn);
btnPanel.add(cancelBtn);
setLayout(new BorderLayout());
add(BorderLayout.CENTER, propPanel);
add(BorderLayout.SOUTH, btnPanel);
// add(new JLabel(""));
addActionListener("");
if(!where.isEmpty()) {
String[] wheres = where.split("\\+");
for(AIFComponentContext c : target.getChildren("contents")) {
InterfaceAIFComponent comp = c.getComponent();
String ck = "";
for(String s : wheres) {
ck += comp.getProperty(s);
}
checkSet.add(ck);
}
}
pack();
if(row>5)
setSize(new Dimension(380, 220+(row-5)*25));
else
setSize(new Dimension(380, 220));
setDefaultLookAndFeelDecorated(true);
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
// setAlwaysOnTop(true);
setVisible(true);
}
private void addActionListener(String options) {
exportBtn.addActionListener(new ActionListener() {
@SuppressWarnings({ "deprecation" })
@Override
public void actionPerformed(ActionEvent arg0) {
// AIFDesktop desktop = AIFUtility.getActiveDesktop();
TCComponentFolder folder = null;
try {
String name = ((JTextField)searchMap.get("object_name")).getText();
for(String s : mustList) {
JComponent c = searchMap.get(s);
if(c instanceof JTextField) {
if(((JTextField)searchMap.get(s)).getText().isEmpty())
throw new Exception("有必填项未填写,请检查");
}else {
if(((JComboBox<?>)c).getSelectedItem().toString().isEmpty())
throw new Exception("有必填项未填写,请检查");
}
}
if(name.isEmpty())
throw new Exception("未填写名称,无法进行创建");
if(!where.isEmpty()) {
String[] wheres = where.split("\\+");
String check = "";
for(String s : wheres) {
JComponent c = searchMap.get(s);
if(c instanceof JTextField) {
check += ((JTextField)searchMap.get(s)).getText();
}else if(c instanceof JComboBox){
check += ((JComboBox<?>)c).getSelectedItem().toString();
}
}
if(checkSet.contains(check))
throw new Exception(where+"属性相同对象已存在,请检查");
}
TCComponentFolderType type = (TCComponentFolderType) session.getTypeService().getTypeComponent(folderType);
if(type==null)
throw new Exception("未找到对象类型:"+folderType);
// TCComponentFolder folder = type.create(name, "", folderType);
List<ICreateInstanceInput> input = new ArrayList<ICreateInstanceInput>();
BOCreateDefinition itemDef = (BOCreateDefinition) BOCreateDefinitionFactory.getInstance().getCreateDefinition(session, folderType);
CreateInstanceInput createInput = new CreateInstanceInput(itemDef);
createInput.add("object_name", name);
input.add(createInput);
//SOAGenericCreateHelper helper = new SOAGenericCreateHelper();
List<TCComponent> list1 = SOAGenericCreateHelper.create(session, itemDef, input);
if(list1.size()==0)
throw new Exception("文件夹创建失败");
folder = (TCComponentFolder) list1.get(0);
for(String s : searchMap.keySet()) {
JComponent c = searchMap.get(s);
if(c instanceof PropertyDateComponent) {
Date date = ((PropertyDateComponent)c).getDate();
if(date!=null)
folder.setDateProperty(s, date);
}else if(c instanceof JTextField) {
String value = ((JTextField)c).getText();
folder.setProperty(s, value);
}else {
String value = ((JComboBox<?>)c).getSelectedItem().toString();
folder.setProperty(s, value);
}
}
target.add("contents", folder);
long time = new Date().getTime();
System.out.println("time:0");
MessageBox.post(SpectrumStructureDialog.this, "创建完成", "INFO", MessageBox.INFORMATION);
System.out.println("time:"+(new Date().getTime()-time));
dispose();
System.out.println("time:"+(new Date().getTime()-time));
}catch(Exception e1) {
e1.printStackTrace();
if(folder != null)
try {
folder.delete();
} catch (Exception e) {
e.printStackTrace();
}
MessageBox.post(SpectrumStructureDialog.this, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
cancelBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
}
public String[] getDynamicLOV(TCComponentListOfValues lov) throws Exception {
Vector<String> lovDisplayValueList = new Vector<>();
// lovDisplayValueList.add("");
// Vector<String> lovValueList = new Vector<>();
LOVService lovService = LOVService.getService(session);
InitialLovData input = new InitialLovData();
LovFilterData filter = new LovFilterData();
filter.sortPropertyName = "object_name";
filter.order = 1;
filter.numberToReturn = 100;
filter.maxResults = 100;
input.lov = lov;
input.filterData = filter;
LOVSearchResults result = lovService.getInitialLOVValues(input);
// StringBuffer sb = new StringBuffer();
// sb.append(">>");
for (LOVValueRow row : result.lovValues) {
Map<String, String[]> map = row.propDisplayValues;
// Map<String, String[]> realmap = row.propInternalValues;
for (String key : map.keySet()) {
// sb.append("UID:" + row.uid + ",key:" + key + "value:" + map.get(key)[0]);
// sb.append("\n");
lovDisplayValueList.add(map.get(key)[0]);
// lovValueList.add(realmap.get(key)[0]);
}
}
// System.out.println("StringBuffer:"+sb.toString());
return lovDisplayValueList.toArray(new String[lovDisplayValueList.size()]);
}
}

@ -0,0 +1,45 @@
package com.connor.lidy.create;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class SpectrumStructureHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("SpectrumStructureHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
String pref = "ML8_SpectrumStructure";
TCSession session = (TCSession) app.getSession();
String options = session.getPreferenceService().getStringValue(pref);
if(options==null || options.isEmpty()) {
MessageBox.post(desktop, "首选项"+pref+"配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
TCComponent model = session.stringToComponent(options);//AKLAAInU5kSPsC
if(model==null || !model.isTypeOf("XMLRenderingStylesheet")) {
MessageBox.post(desktop, "首选项"+pref+"中模板UID配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
InterfaceAIFComponent target = app.getTargetComponent();
new SpectrumStructureDialog(session, (TCComponent)target, (TCComponentDataset)model);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
return null;
}
}

@ -0,0 +1,316 @@
/*
#=============================================================================
#
# opyright (c) 2009 Origin Enterprise Solution LTD.
#
#=============================================================================
# File name: CopyFolderAndAssginToProjectDialog.java
# File description:
#=============================================================================
# Date Name Action Description of Change
# 2017-5-10 Administrator Ini
#=============================================================================
*/
package com.connor.lidy.dialog;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.TitledBorder;
import com.connor.lidy.util.SqlUtil;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentContextList;
import com.teamcenter.rac.kernel.TCComponentProject;
import com.teamcenter.rac.kernel.TCComponentProjectType;
import com.teamcenter.rac.kernel.TCComponentQuery;
import com.teamcenter.rac.kernel.TCComponentQueryType;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.kernel.TCTextService;
import com.teamcenter.rac.util.ButtonLayout;
import com.teamcenter.rac.util.HorizontalLayout;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.rac.util.VerticalLayout;
//import cn.com.ebewin.ysr.util.TCUtil;
/**
* @author Administrator
*/
//@SuppressWarnings({"rawtypes","unchecked"})
public class AssignProjectDialog extends AbstractAIFDialog {
private static final long serialVersionUID = 1L;
TCSession session;
// AbstractAIFUIApplication app;
// private JList<String> projectList;
// private JList<String> targetList;
private DefaultListModel<String> projectM;
private DefaultListModel<String> targetM;
private JTextField jt2;
private InterfaceAIFComponent[] targets;
private String project;
public AssignProjectDialog(TCSession pSession, InterfaceAIFComponent[] selectTarget) {
super(AIFUtility.getActiveDesktop(), true); // true
try {
this.session = pSession;
this.targets = selectTarget;
this.project = "";
init();
}catch (Exception e) {
e.printStackTrace();
}
}
private void init() throws Exception {
setTitle("创建项目资料夹");
// final JPanel jptopleft = new JPanel(new PropertyLayout(2,2,2,2,2,2));
this.projectM = new DefaultListModel<>();
this.targetM = new DefaultListModel<>();
final JPanel jptopleft = new JPanel(new BorderLayout());
final JPanel jptopright = new JPanel(new VerticalLayout());
final TCComponentProjectType tccomponentprojecttype = (TCComponentProjectType) session.getTypeComponent("TC_Project");
final Vector<String> list = new Vector<>();//listPro("*");
if(targets.length==1) {
TCComponent[] projects = ((TCComponent)targets[0]).getReferenceListProperty("project_list");
for(TCComponent p : projects) {
String id = p.getProperty("project_id");
project += id;
list.add(id);
targetM.addElement(id);
}
}
String user = session.getUser().getUserId();
final Vector<String> projs = new Vector<>();
// Vector<String> prov = new Vector<>();//listDCProjTemplFolder();
//TODO
String options[] = session.getPreferenceService().getStringValues("Meling_SqlServer");
Connection connection = SqlUtil.getSqlserverConnection(options[0], options[1], options[2], options[3]);
List<HashMap<String, Object>> search = SqlUtil.getDBInfo(connection, "select a0.pproject_id as id "
// Connection connection = TCUtil.getDBConn(session);
// Vector<Hashtable<String, Object>> search = TCUtil.getDBInfo3Sub(connection, "select a0.pproject_id as id "
+ "from PTC_PROJECT a0,PPROJECT_MEMBERS a,PPOM_MEMBER b,PPOM_USER c,PPOM_GROUP d "
+ "where a0.rproject_teamu=a.puid and a.pvalu_0=b.puid and b.ruseru=c.puid and b.rgroupu=d.puid "
+ "and d.pprivilege=1 and a0.pis_visible=1 and c.puser_id='"+user+"'");
for(HashMap<String, Object> t : search) {
String id = t.get("id").toString();
projs.add(id);
if(!list.contains(id))
projectM.addElement(id);
}
JList<String> projectList = new JList<String>(projectM);
projectList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jptopleft.setBorder(BorderFactory.createTitledBorder(null, "供选择的项目", TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, new Font("新宋体", 0, 12))); // NOI18N
JScrollPane folderscrollPane = new JScrollPane();
folderscrollPane.setPreferredSize(new Dimension(210,310));
folderscrollPane.getViewport().add(projectList);
jptopleft.add(BorderLayout.CENTER, folderscrollPane);
JList<String> targetList = new JList<String>(targetM);
jptopright.setBorder(BorderFactory.createTitledBorder(null, "选定的项目", TitledBorder.DEFAULT_JUSTIFICATION,
TitledBorder.DEFAULT_POSITION, new Font("新宋体", 0, 12))); // NOI18N
targetList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
JScrollPane proscrollPane = new JScrollPane(targetList);
proscrollPane.setPreferredSize(new Dimension(210,310));
JButton addbtn = new JButton(">");
JButton removebtn = new JButton("<");
addbtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionevent) {
String select = projectList.getSelectedValue();
if(select==null)
return;
targetM.addElement(select);
projectM.removeElement(select);
addbtn.setEnabled(false);
}
});
removebtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionevent) {
String select = targetList.getSelectedValue();
if(select==null || select.equals(project))
return;
projectM.addElement(select);
targetM.removeElement(select);
if(targetM.isEmpty())
addbtn.setEnabled(true);
else
addbtn.setEnabled(false);
}
});
if(list.size()>0)
addbtn.setEnabled(false);
JPanel bpane = new JPanel(new PropertyLayout());
bpane.add("1.1.center.center", addbtn);
bpane.add("2.1.center.center", removebtn);
jptopleft.add(BorderLayout.EAST, bpane);
// final JTextField jt = new JTextField(30);
//
// jt.addKeyListener(new KeyAdapter() {
// public void keyReleased(KeyEvent ke) {
// char code = ke.getKeyChar();
// if (code == KeyEvent.VK_ENTER) {
// System.out.println("ceshi 回车" + code + "=====" + KeyEvent.VK_ENTER);
// Vector pronewVector = listPro(jt.getText());
// proList.setListData(pronewVector);
// }
// }
//
// });
// jptopright.add("top.bind.center.top", jt);
jptopright.add("top.bind.center.top", proscrollPane);
JSplitPane splitPane = new JSplitPane();
splitPane.setOneTouchExpandable(true);// 让分割线显示出箭头
splitPane.setContinuousLayout(true);// 操作箭头,重绘图形
splitPane.setLeftComponent(jptopleft);
splitPane.setRightComponent(jptopright);
JPanel jp1 = new JPanel(new HorizontalLayout());
jt2 = new JTextField(20);
JButton screenbtn = new JButton("筛选");
screenbtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionevent) {
String text = jt2.getText();
Enumeration<String> e = targetM.elements();
Vector<String> v = new Vector<>();
while(e.hasMoreElements()) {
v.add(e.nextElement());
}
projectM.removeAllElements();
for(String t : projs) {
if(t.contains(text) && !v.contains(t))
projectM.addElement(t);
}
}
});
jp1.add("left.bind.center.center", new JLabel("项目号筛选"));
jp1.add("unbound.bind.center.center", jt2);
jp1.add("right.bind.center.center", screenbtn);
JPanel butPanel = new JPanel(new ButtonLayout());
JButton okbtn = new JButton("开始复制");
JButton canceltn = new JButton("取消");
butPanel.add(okbtn);
butPanel.add(canceltn);
canceltn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionevent) {
dispose();
}
});
JPanel jpx = new JPanel(new VerticalLayout());
jpx.add("top.bind.center.top", jp1);
jpx.add("top.bind.center.top", splitPane);//jptop
jpx.add("top.bind.center.top", butPanel);
okbtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionevent) {
try {
Enumeration<String> e = targetM.elements();
Vector<String> v = new Vector<>();
while(e.hasMoreElements()) {
v.add(e.nextElement());
}
// for(String s : list) {
// if(!v.contains(s)) {
// TCComponentProject ps = listPro(s).get(0);
// tccomponentprojecttype.removeFromProject(ps, new TCComponent[] { targets });
// }
// }
TCComponentProject ps = listPro(v.get(0)).get(0);
for(InterfaceAIFComponent c : targets) {
TCComponent[] projects = ((TCComponent)c).getReferenceListProperty("project_list");
for(TCComponent p : projects) {
if(!v.contains(p.getProperty(""))) {
tccomponentprojecttype.removeFromProject((TCComponentProject) p, new TCComponent[] { (TCComponent) c });
}
}
tccomponentprojecttype.assignToProject(ps, (TCComponent) c);
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
add(jpx);
// setResizable(false);
pack();
centerToScreen();
setVisible(true);
}
/**
* listPro:
*/
private Vector<TCComponentProject> listPro(String str_value) {
Vector<TCComponentProject> result = new Vector<TCComponentProject>();
try {
String str_key = "project_id";
TCTextService textService = session.getTextService();
TCComponentQueryType querytype = (TCComponentQueryType) session.getTypeComponent("ImanQuery");
TCComponentQuery query = (TCComponentQuery) querytype.find("项目...");
if (null == query) {
MessageBox.post(AIFUtility.getActiveDesktop(), "请先创建查询构建器 项目... ", "警告", MessageBox.ERROR);
return null;
}
querytype.clearCache();
String as[] = { textService.getTextValue(str_key), textService.getTextValue("is_active")};
// String as[] = { "project_name" };
System.out.println("getTextValue===========" + textService.getTextValue(str_key));
String as1[] = new String[2];
as1[0] = str_value;
as1[1] = "true";
query.clearCache();
TCComponentContextList list = query.getExecuteResultsList(as, as1); // as
// =查询key
// ;
// as1
// =查询value
TCComponentProject tcpro = null;
if (list != null) {
int count = list.getListCount();
System.out.println(" pro coutn " + count);
for (int i = 0; i < count; i++) {
tcpro = (TCComponentProject) list.get(i).getComponent();
result.add(tcpro);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}

@ -0,0 +1,37 @@
package com.connor.lidy.dialog;
import javax.swing.SwingUtilities;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
public class AssignProjectHandler extends AbstractHandler
{
public Object execute(ExecutionEvent arg0) throws ExecutionException
{
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
try {
TCSession session = (TCSession) app.getSession();
final InterfaceAIFComponent[] pasteTargets = app.getTargetComponents();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new AssignProjectDialog(session, pasteTargets);
}
});
}
catch (Exception exception)
{
MessageBox.post(exception, true);
}
return null;
}
}

@ -0,0 +1,22 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.connor.lidy.dialog;
/**
*
* @author vearn
*/
public class FindDesignBean {
private Object[] values;
public Object[] getValues() {
return values;
}
public void setValues(Object[] values) {
this.values = values;
}
}

@ -0,0 +1,346 @@
package com.connor.lidy.dialog;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ListSelectionModel;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jdesktop.swingx.decorator.HighlighterFactory;
import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;
import com.connor.lidy.util.ProgressReporterDialog;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentBOMLine;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
public class FindDesignDialog extends AbstractAIFDialog {
private static final long serialVersionUID = 1L;
private TCSession session;
private JButton exportBtn;
private JButton closeBtn;
private FindDesignTable impTable;
private FindDesignModel impModel;
public FindDesignDialog(TCSession session, InterfaceAIFComponent[] targets, String[] options, ProgressReporterDialog reporter) throws Exception {
super(AIFUtility.getActiveDesktop());
this.session = session;
setTitle("查看设计文档");
exportBtn = new JButton("导出");
closeBtn = new JButton("关闭");
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(exportBtn);
btnPanel.add(closeBtn);
ArrayList<String[]> list = new ArrayList<>();
String[] tableHeader = new String[options.length-1];// { "物料版本", "设计文档版本" };
for(int i=1; i<options.length; i++) {
String[] sp = options[i].split("=");
tableHeader[i-1] = sp[0];
list.add(sp[1].split("\\."));
}
// DefaultMutableTreeTableNode node = getBomPropertyToNode(session, topline);
DefaultMutableTreeTableNode top = new DefaultMutableTreeTableNode(new FindDesignBean());
if(targets[0] instanceof TCComponentBOMLine) {
getNode((TCComponentBOMLine) targets[0], top, list);
}else {
getNode(targets, top, list);
}
impTable = getJTreeTable(top, tableHeader);
JScrollPane tablePanel = new JScrollPane(impTable);
addActionListener(tableHeader, options[0]);
setLayout(new BorderLayout());
add(BorderLayout.NORTH, btnPanel);
add(BorderLayout.CENTER, tablePanel);
pack();
setSize(new Dimension(1400, 700));
setDefaultLookAndFeelDecorated(true);
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
// setAlwaysOnTop(true);
reporter.requestCanceling();
setVisible(true);
}
private void addActionListener(String[] heads, String uid) {
exportBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
FileInputStream input = null;
FileOutputStream output = null;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
File directory = TCUtil.saveExcelChooserAsk("物料及文档明细数据"+sdf.format(new Date()));
if(directory==null)
return;
TCComponentTcFile[] files = ((TCComponentDataset)session.stringToComponent(uid)).getTcFiles();
File file = files[0].getFile(System.getProperty("java.io.tmpdir"));
input = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(input);
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row = getRow(sheet, 0);
XSSFCell cell;
int cols = heads.length;
for(int i=0; i<cols; i++) {
cell = getCell(row, i);
cell.setCellValue(heads[i]);
}
for(int i=0; i<impTable.getRowCount(); i++) {
row = getRow(sheet, i+1);
for(int j=0; j<cols; j++) {
cell = getCell(row, j);
cell.setCellValue(impTable.getValueAt(i, j).toString());
}
}
output = new FileOutputStream(file.getPath());
wb.write(output);
input.close();
output.close();
file.renameTo(directory);
MessageBox.post(FindDesignDialog.this, "导出完成", "INFO", MessageBox.INFORMATION);
} catch (Exception e1) {
e1.printStackTrace();
MessageBox.post(FindDesignDialog.this, "错误:" + e1.getMessage(), "ERROR", MessageBox.ERROR);
}finally {
if(input!=null)
try {
input.close();
} catch (Exception e) {
e.printStackTrace();
}
if(output!=null)
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
closeBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
}
//Jtable通用方法
private FindDesignTable getJTreeTable(DefaultMutableTreeTableNode node, String[] titleNames) {
int simpleLen = 100;
int totleLen = 1500;
ArrayList<Integer> isNotEditableRow = new ArrayList<Integer>();
isNotEditableRow.add(0);
isNotEditableRow.add(1);
this.impModel = new FindDesignModel(node, titleNames);
this.impModel.setIsNotEditableRow(isNotEditableRow);
//map.setColumnIdentifiers(titleNames);
FindDesignTable partsTable = new FindDesignTable(impModel);
partsTable.setIsNotEditableRow(isNotEditableRow);
partsTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
// partsTable.setRowHeight(1, 50);
// partsTable.setRowHeight(2, 100);
partsTable.setRowHeight(30);
partsTable.expandAll(); // 展开全部节点
// 隐藏列
// partsTable.HiddenCell(0);
partsTable.getColumnModel().getColumn(0).setPreferredWidth(188); // 设置第一列宽度
partsTable.getColumnModel().getColumn(1).setPreferredWidth(150); // 设置第二列宽度
partsTable.setHighlighters(HighlighterFactory.createSimpleStriping());
if (simpleLen * titleNames.length >= totleLen) {
for (int i = 0; i < titleNames.length; i++) {
partsTable.getColumnModel().getColumn(i).setPreferredWidth(simpleLen);
}
partsTable.setAutoResizeMode(0);
} else {
partsTable.setAutoResizeMode(1);
}
return partsTable;
}
private void getNode(InterfaceAIFComponent[] targets, DefaultMutableTreeTableNode pnode, ArrayList<String[]> list) {
try {
for(InterfaceAIFComponent c : targets) {
FindDesignBean bean = new FindDesignBean();
TCComponentItemRevision rev = (TCComponentItemRevision) c;
TCComponentItem item = rev.getItem();
TCComponentItemRevision drev = null;
TCComponentItem ditem = null;
AIFComponentContext[] ds = TCUtil.getPseudoFolder(rev, "TC_Is_Represented_By").getChildren();
System.out.println("rev:"+rev+"=="+ds.length);
if(ds!=null && ds.length>0) {
long time = 0;
for(AIFComponentContext d : ds) {
TCComponentItemRevision dr = (TCComponentItemRevision) d.getComponent();
TCComponent[] status = dr.getReferenceListProperty("release_status_list");
if(status==null || status.length==0)
continue;
System.out.println("status:"+status[0]);
if(!status[0].getProperty("name").equals("TCM 已发布"))//TCM_Released
continue;
long t = dr.getDateProperty("creation_date").getTime();
if(t < time)
continue;
// value = dr.toString();
drev = dr;
ditem = drev.getItem();
time = t;
}
}
Object[] v = new Object[list.size()];
for(int i=0; i<list.size(); i++) {
String[] prop = list.get(i);
if(prop[0].equals("part")) {
if(prop[1].equals("item")) {
v[i] = item.getProperty(prop[2]);
}else if(prop[1].equals("rev")) {
v[i] = rev.getProperty(prop[2]);
}else {
v[i] = "";
}
}else if(prop[0].equals("design")) {
if(drev==null) {
v[i] = "";
continue;
}
if(prop[1].equals("item")) {
v[i] = ditem.getProperty(prop[2]);
}else if(prop[1].equals("rev")) {
v[i] = drev.getProperty(prop[2]);
}else {
v[i] = "";
}
}else {
v[i] = "";
}
}
bean.setValues(v);
DefaultMutableTreeTableNode node = new DefaultMutableTreeTableNode(bean);
pnode.add(node);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void getNode(TCComponentBOMLine line, DefaultMutableTreeTableNode pnode, ArrayList<String[]> list) {
try {
FindDesignBean bean = new FindDesignBean();
TCComponentItemRevision rev = line.getItemRevision();
TCComponentItem item = line.getItem();
TCComponentItemRevision drev = null;
TCComponentItem ditem = null;
AIFComponentContext[] ds = TCUtil.getPseudoFolder(rev, "TC_Is_Represented_By").getChildren();
System.out.println("line:"+line+"=="+ds.length);
if(ds!=null && ds.length>0) {
long time = 0;
for(AIFComponentContext d : ds) {
TCComponentItemRevision dr = (TCComponentItemRevision) d.getComponent();
TCComponent[] status = dr.getReferenceListProperty("release_status_list");
if(status==null || status.length==0)
continue;
System.out.println("status:"+status[0]);
if(!status[0].getProperty("name").equals("TCM 已发布"))//TCM_Released
continue;
long t = dr.getDateProperty("creation_date").getTime();
if(t < time)
continue;
// value = dr.toString();
drev = dr;
ditem = drev.getItem();
time = t;
}
}
Object[] v = new Object[list.size()];
for(int i=0; i<list.size(); i++) {
String[] prop = list.get(i);
if(prop[0].equals("part")) {
if(prop[1].equals("item")) {
v[i] = item.getProperty(prop[2]);
}else if(prop[1].equals("rev")) {
v[i] = rev.getProperty(prop[2]);
}else {
v[i] = "";
}
}else if(prop[0].equals("design")) {
if(drev==null) {
v[i] = "";
continue;
}
if(prop[1].equals("item")) {
v[i] = ditem.getProperty(prop[2]);
}else if(prop[1].equals("rev")) {
v[i] = drev.getProperty(prop[2]);
}else {
v[i] = "";
}
}else {
v[i] = "";
}
}
bean.setValues(v);
DefaultMutableTreeTableNode node = new DefaultMutableTreeTableNode(bean);
pnode.add(node);
for(AIFComponentContext child : line.getChildren()) {
getNode((TCComponentBOMLine) child.getComponent(), node, list);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private XSSFRow getRow(XSSFSheet sheet, int num) throws Exception {
XSSFRow row = sheet.getRow(num);
if(row==null)
row = sheet.createRow(num);
return row;
}
private XSSFCell getCell(XSSFRow row, int col) throws Exception {
XSSFCell cell = row.getCell(col);
if(cell==null)
cell = row.createCell(col);
// if(row.getRowNum()>1)
// cell.setCellStyle(getCell(sourceRow, col).getCellStyle());
return cell;
}
}

@ -0,0 +1,72 @@
package com.connor.lidy.dialog;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.connor.lidy.util.ProgressReporterDialog;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponentBOMLine;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class FindDesignHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("FindDesignHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
InterfaceAIFComponent[] targets = app.getTargetComponents();
if(targets==null || targets.length==0) {
MessageBox.post(desktop, "未选中查看对象,请重新选择!", "ERROR", MessageBox.ERROR);
return null;
}
if(targets[0] instanceof TCComponentBOMLine) {
if(((TCComponentBOMLine)targets[0]).parent() != null) {
MessageBox.post(desktop, "请选择BOM顶层进行查看", "ERROR", MessageBox.ERROR);
return null;
}
}else {
for(InterfaceAIFComponent c : targets) {
if(!(c instanceof TCComponentItemRevision)) {
MessageBox.post(desktop, "请选择对象版本进行查看!", "ERROR", MessageBox.ERROR);
return null;
}
}
}
TCSession session = (TCSession) app.getSession();
String[] options = session.getPreferenceService().getStringValues("ML_LatestDesign");
if(options==null || options.length<2) {
MessageBox.post(desktop, "首选项ML_LatestDesign配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
ProgressReporterDialog reporter = new ProgressReporterDialog("提示");
reporter.reportProgressMessage("正在导出,请稍候...");
new Thread(reporter).start();
new Thread() {
public void run(){
try {
new FindDesignDialog(session, targets, options, reporter);
}catch(Exception e) {
e.printStackTrace();
reporter.requestCanceling();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
return;
}
}
}.start();
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
return null;
}
return null;
}
}

@ -0,0 +1,125 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.connor.lidy.dialog;
import java.util.List;
import org.jdesktop.swingx.treetable.DefaultMutableTreeTableNode;
import org.jdesktop.swingx.treetable.DefaultTreeTableModel;
import org.jdesktop.swingx.treetable.TreeTableNode;
/**
*
* @author vearn
*/
public class FindDesignModel extends DefaultTreeTableModel {
private String[] _names;
private List<Integer> isNotEditableRow;
public FindDesignModel(TreeTableNode node) {
super(node);
_names = new String[] { "DBOM对象", "EBOM对象","选中", "EBOMID", "物料描述","数量","发布状态","对应父节点"};
}
public FindDesignModel(TreeTableNode node, String[] _names) {
super(node);
this._names = _names;
}
public List<Integer> getIsNotEditableRow() {
return isNotEditableRow;
}
public void setIsNotEditableRow(List<Integer> isNotEditableRow) {
this.isNotEditableRow = isNotEditableRow;
}
/**
*
*/
@Override
public int getColumnCount() {
return _names.length;
}
/**
*
*/
@Override
public String getColumnName(int column) {
return _names[column];
}
/**
* Object
*/
@Override
public Object getValueAt(Object node, int column) {
Object value = null;
if (node instanceof DefaultMutableTreeTableNode) {
DefaultMutableTreeTableNode mutableNode = (DefaultMutableTreeTableNode) node;
Object o = mutableNode.getUserObject();
if (o != null && o instanceof FindDesignBean) {
FindDesignBean bean = (FindDesignBean) o;
if(bean.getValues() != null)
value = bean.getValues()[column];
/*switch (column) {
case 0:
value = bean.getDbom();
break;
case 1:
value = bean.getEbom();
break;
case 2:
value = bean.getLabel();
break;
case 3:
value = bean.getEbomId();
break;
case 4:
value = bean.getEbomDesc();
break;
case 5:
value = bean.getNum();
break;
case 6:
value = bean.getRefreshStatus();
break;
case 7:
value = bean.getParentString();
break;
}*/
}
}
return value;
}
/**
*
*
* @param the node (i.e. row) for which editing is to be determined
* @param the column for which editing is to be determined
* @return false
*/
@Override
public boolean isCellEditable(Object node, int column) {
//if(column == 5)
//{
return true;
//}
//else
//{
// return false;
//}
}
}

@ -0,0 +1,80 @@
package com.connor.lidy.dialog;
import java.awt.event.MouseEvent;
import java.util.List;
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import org.jdesktop.swingx.JXTreeTable;
public class FindDesignTable extends JXTreeTable {
/**
*
*/
private static final long serialVersionUID = 1L;
private List<Integer> isNotEditableRow;
//CheckBoxCellEditor checkBoxCellEditor = new CheckBoxCellEditor(this);
// TableCellCheckboxRenderer checkboxRenderer = new TableCellCheckboxRenderer(this);
public List<Integer> getIsNotEditableRow() {
return isNotEditableRow;
}
public void setIsNotEditableRow(List<Integer> isNotEditableRow) {
this.isNotEditableRow = isNotEditableRow;
}
public FindDesignTable(FindDesignModel testTreeTableModel) {
// Auto-generated constructor stub
super(testTreeTableModel);
}
@Override
public boolean isCellEditable(int arg0, int arg1) {
// Auto-generated method stub
return true;//super.isCellEditable(arg0, arg1);
}
@Override
public TableCellEditor getCellEditor(int row, int column) {
// Auto-generated method stub
//if(isNotEditableRow.contains(row) && column == 2)
return cellEditor;
//return super.getCellEditor(row, column);
}
public String getToolTipText(MouseEvent e) {
int row = this.rowAtPoint(e.getPoint());
int col = this.columnAtPoint(e.getPoint());
String tiptextString = null;
if (row > -1 && col > -1) {
Object value = this.getValueAt(row, col);
if (null != value && !"".equals(value))
tiptextString = value.toString();// 技륫鞫刻데禱목코휭
}
return tiptextString;
}
@Override
public TableCellRenderer getCellRenderer(int row, int column) {
return super.getCellRenderer(row, column);
}
// 茶꾜죗
public void HiddenCell(int column) {
TableColumn tc = this.getTableHeader().getColumnModel().getColumn(column);
tc.setMaxWidth(0);
tc.setPreferredWidth(0);
tc.setWidth(0);
tc.setMinWidth(0);
this.getTableHeader().getColumnModel().getColumn(column).setMaxWidth(0);
this.getTableHeader().getColumnModel().getColumn(column).setMinWidth(0);
}
}

@ -0,0 +1,354 @@
package com.connor.lidy.dialog;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.connor.lidy.util.TCUtil;
//import com.connor.ml.tcm.outfile.util.MethodUtil;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentTask;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
public class StandardDialog extends JFrame {
private static final long serialVersionUID = 1L;
private TCSession session;
private JTextArea remark;
private JButton remarkBtn;
private JButton exportBtn;
private JButton closeBtn;
private JTable impTable;
private DefaultTableModel impModel;
private ArrayList<TCComponentItemRevision> revlist;
private String[] mark;
private int mrow = -1;
// private HashMap<String, Integer> map;
// private LinkedHashMap<String, String[]> ruleOpsMap;
// public DrawingNoApplyDialog(TCSession session, String tables[], String[] options, String[] sqlOptions, InterfaceAIFComponent[] targets) throws Exception {
public StandardDialog(TCSession session, TCComponent[] models, TCComponentTask task, LinkedHashMap<String, String[]> ruleOpsMap) throws Exception {
// super(AIFUtility.getActiveDesktop());
this.session = session;
// list = new ArrayList<>();
// map = new HashMap<>();
// this.ruleOpsMap = ruleOpsMap;
// System.out.println(ruleOpsMap.toString());
setTitle("标准化审核");
remark = new JTextArea();
// remark.setPreferredSize(new Dimension(10, 10));
remark.setLineWrap(true);
remarkBtn = new JButton("修改备注");
exportBtn = new JButton("导出Excel");
closeBtn = new JButton("关闭");
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(remarkBtn);
btnPanel.add(exportBtn);
btnPanel.add(closeBtn);
JScrollPane remarkPanel = new JScrollPane(remark);
remarkPanel.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
JPanel topPanel = new JPanel(new BorderLayout());
topPanel.add(BorderLayout.NORTH, new JLabel("标准化备注"));
topPanel.add(BorderLayout.CENTER, remarkPanel);
topPanel.add(BorderLayout.SOUTH, btnPanel);
// ArrayList<String[]> props = new ArrayList<>();
// String[] tableHeader = new String[] { "序号", "itemID", "名称", "版本", "加工类型", "产品分类码", "课题号", "配置码", "部件码", "图纸类型", "新图号" };
// String[] tables = options.get(0);
String[] tableHeader = new String[ruleOpsMap.size() + 1];
tableHeader[0] = "序号";
int h = 1;
for (String s : ruleOpsMap.keySet()) {
// String[] split = tables[h].split("=");
// props.add(split[1].split("\\."));
tableHeader[h] = s;
if(s.equals("标准化备注")) {
mark = ruleOpsMap.get(s);
mrow = h;
}
// map.put(split[1], h);
h++;
}
if(mrow < 0)
throw new Exception("首选项Jd_Standard_UI配置不正确");
impModel = new DefaultTableModel(tableHeader, 0);
impTable = new JTable() {
private static final long serialVersionUID = 1L;
@Override
public boolean isCellEditable(int row, int col) {
return false;
}
};
impTable.getTableHeader().setReorderingAllowed(false);
impTable.setFillsViewportHeight(true);
// impTable.setEnabled(false);
impTable.setEnabled(true);
// impTable.setAutoResizeMode(JTable.AUTO_RESIZE_NEXT_COLUMN);
impTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
impTable.setModel(impModel);
for (int i = 1; i < impModel.getColumnCount(); i++)
impTable.getColumnModel().getColumn(i).setPreferredWidth(150);
setDatas(task, (TCComponentDataset) models[0], ruleOpsMap);
addActionListener(models);
setLayout(new BorderLayout());
add(BorderLayout.EAST, topPanel);
add(BorderLayout.CENTER, new JScrollPane(impTable));
pack();
setSize(new Dimension(1400, 500));
setDefaultLookAndFeelDecorated(true);
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
// setAlwaysOnTop(true);
setVisible(true);
}
@SuppressWarnings("rawtypes")
private void setDatas(TCComponentTask task, TCComponentDataset model, LinkedHashMap<String, String[]> ruleOpsMap) throws Exception {
TCComponentTcFile[] files = model.getTcFiles();
File file = files[0].getFile(System.getProperty("java.io.tmpdir"));
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(file);
Element root = doc.getRootElement();
Element condizione = root.element("condizione");
List typeEs = condizione.element("object_type").elements();
ArrayList<String> types = new ArrayList<>();
for(Object e : typeEs) {
types.add(((Element)e).getText());
}
List regolaEs = condizione.element("object_type").elements();
HashMap<String, Boolean> regolas = new HashMap<>();
for(Object e : regolaEs) {
String t = ((Element)e).getText();
String name = ((Element)e).getName();
if(name.equals("item"))
name = "object_type";
if(t.equals("*")) {
regolas.put(name, false);
}else {
regolas.put(name, true);
}
}
List rows = root.element("data").elements();
AIFComponentContext[] contexts = TCUtil.getPseudoFolder(task, "root_target_attachments").getChildren();
revlist = new ArrayList<>();
for(AIFComponentContext c : contexts) {
if(!types.contains(c.getComponent().getType()))
continue;
TCComponentItemRevision rev = (TCComponentItemRevision) c.getComponent();
HashMap<String, String> props = new HashMap<>();
for(String s : regolas.keySet()) {
if(rev.getTCProperty(s) == null) {
System.out.println(rev+" >> "+s+"\n属性未找到");
throw new Exception("判断条件配置错误,请检查配置信息");
}
props.put(s, rev.getProperty(s));
}
ROW:for(Object e : rows) {
for(Object t : ((Element)e).elements()) {
String name = ((Element)t).getName();
if(!props.containsKey(name))
continue;
String text = ((Element)t).getText();
String val = props.get(name);
if(regolas.get(name)) {
if(!val.equals(text) || text.equals("null") && !val.isEmpty())
continue ROW;
}else if(!regolas.get(name) && !val.contains(text)) {
continue ROW;
}
}
TCComponentItem item = rev.getItem();
String[] row = new String[ruleOpsMap.size()+1];
row[0] = impTable.getRowCount()+1+"";
int i = 1;
for(String n : ruleOpsMap.keySet()) {
row[i] = getProp(ruleOpsMap.get(n), item, rev);
i++;
}
System.out.println("row:"+Arrays.toString(row));
impModel.addRow(row);
revlist.add(rev);
break;
}
}
}
private void addActionListener(TCComponent[] models) {
impTable.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
try {
int row = impTable.getSelectedRow();
if(row < 0) {
return;
}
remark.setText(""+impTable.getValueAt(row, mrow));
} catch (Exception e1) {
e1.printStackTrace();
MessageBox.post(StandardDialog.this, "错误:" + e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
remarkBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
int row = impTable.getSelectedRow();
if(row < 0) {
MessageBox.post(StandardDialog.this, "请选择要编辑的行!", "ERROR", MessageBox.ERROR);
return;
}
String text = remark.getText();
TCComponentItemRevision rev = revlist.get(row);
TCComponentItem item = rev.getItem();
if(mark[0].equals("item") && item.isCheckedOut()) {
MessageBox.post(StandardDialog.this, item+" 已签出,无法修改!", "ERROR", MessageBox.ERROR);
return;
}else if(mark[0].equals("rev") && rev.isCheckedOut()) {
MessageBox.post(StandardDialog.this, rev+" 已签出,无法修改!", "ERROR", MessageBox.ERROR);
return;
}
// MethodUtil.openByPass(session);
if(mark[0].equals("item")) {
item.setProperty(mark[1], text);
}else if(mark[0].equals("rev")) {
rev.setProperty(mark[1], text);
}
impTable.setValueAt(text, row, mrow);
// MethodUtil.closeByPass(session);
}catch(Exception e1) {
e1.printStackTrace();
MessageBox.post(StandardDialog.this, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
//TODO
exportBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
FileInputStream input = null;
FileOutputStream output = null;
XSSFWorkbook wb = null;
try {
File directory = TCUtil.saveExcelChooser("");
if(directory==null)
return;
if(directory.exists())
directory.delete();
TCComponentDataset model = (TCComponentDataset) models[1];
TCComponentTcFile[] files = model.getTcFiles();
File file = files[0].getFile(System.getProperty("java.io.tmpdir"));
input = new FileInputStream(file);
wb = new XSSFWorkbook(input);
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
XSSFCell cell;
row = getRow(sheet, 0);
TableColumnModel cm = impTable.getColumnModel();
for(int i=0; i<cm.getColumnCount(); i++) {
cell = getCell(row, i);
cell.setCellValue(cm.getColumn(i).getHeaderValue().toString());
}
for(int i=0; i<impTable.getRowCount(); i++) {
row = getRow(sheet, i+1);
for(int j=0; j<impTable.getColumnCount(); j++) {
cell = getCell(row, j);
cell.setCellValue(impTable.getValueAt(i, j).toString());
}
}
output = new FileOutputStream(file.getPath());
wb.write(output);
input.close();
output.close();
file.renameTo(directory);
MessageBox.post(StandardDialog.this, "导出完成!", "提示", MessageBox.INFORMATION);
}catch(Exception e1) {
e1.printStackTrace();
MessageBox.post(StandardDialog.this, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}finally {
if(input!=null)
try {
input.close();
} catch (Exception e) {
e.printStackTrace();
}
if(output!=null)
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
closeBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
}
private String getProp(String[] ps, TCComponentItem item, TCComponentItemRevision rev) throws Exception {
if(ps[0].equals("item")) {
return item.getProperty(ps[1]);
}else if(ps[0].equals("rev")) {
return rev.getProperty(ps[1]);
}
return "";
}
private XSSFRow getRow(XSSFSheet sheet, int num) throws Exception {
XSSFRow row = sheet.getRow(num);
if(row==null)
row = sheet.createRow(num);
return row;
}
private XSSFCell getCell(XSSFRow row, int col) throws Exception {
XSSFCell cell = row.getCell(col);
if(cell==null)
cell = row.createCell(col);
// if(row.getRowNum()>1)
// cell.setCellStyle(getCell(sourceRow, col).getCellStyle());
return cell;
}
}

@ -0,0 +1,73 @@
package com.connor.lidy.dialog;
import java.util.LinkedHashMap;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentTask;
import com.teamcenter.rac.kernel.TCComponentTaskTemplate;
import com.teamcenter.rac.kernel.TCHandlerType;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//标准化审核
public class StandardHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("StadioExamineHandler");
TCSession session = (TCSession) AIFUtility.getCurrentApplication().getSession();
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
InterfaceAIFComponent target = AIFUtility.getCurrentApplication().getTargetComponent();
if(!(target instanceof TCComponentTask)) {
MessageBox.post(desktop, "请选择流程任务进行标准化审核!", "ERROR", MessageBox.ERROR);
return null;
}
TCComponentTask task = (TCComponentTask) target;
TCComponent handler = task.getHandler(TCHandlerType.RULE, TCComponentTaskTemplate.COMPLETE_ACTION, "Connor_check_process_member");//j6_Standard
if(handler == null) {
MessageBox.post(desktop, "节点handler配置不满足要求无法执行", "ERROR", MessageBox.ERROR);
return null;
}
LinkedHashMap<String, String[]> ruleOpsMap = new LinkedHashMap<>();
String[] options = session.getPreferenceService().getStringValues("Jd_Standard_UI");
if(options == null || options.length == 0) {
MessageBox.post(desktop, "首选项Jd_Standard_UI配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
for(String s : options) {
String[] sp = s.split("=");
String[] pp = sp[0].split("\\.");
ruleOpsMap.put(sp[1], new String[] { pp[0].toLowerCase(), pp[1] });
}
options = session.getPreferenceService().getStringValues("j6_Standard_puid");
if(options == null || options.length < 2) {
MessageBox.post(desktop, "首选项j6_Standard_puid配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
TCComponent[] datasets = session.stringToComponent(options);
if(datasets[0]==null || !datasets[0].getType().equals("XMLRenderingStylesheet")) {
MessageBox.post(desktop, "首选项j6_Standard_puid配置不正确", "ERROR", MessageBox.ERROR);//QKIAAI4S5kSPsC
return null;
}
if(datasets[1]==null || !datasets[1].getType().equals("MSExcelX")) {
MessageBox.post(desktop, "首选项j6_Standard_puid配置不正确", "ERROR", MessageBox.ERROR);//QiAAAI4S5kSPsC
return null;
}
new StandardDialog(session, datasets, task, ruleOpsMap);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
return null;
}
return null;
}
}

@ -0,0 +1,339 @@
package com.connor.lidy.report;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.ListOfValuesInfo;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentListOfValues;
import com.teamcenter.rac.kernel.TCComponentListOfValuesType;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.stylesheet.PropertyDateComponent;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.services.rac.core.LOVService;
import com.teamcenter.services.rac.core._2013_05.LOV.InitialLovData;
import com.teamcenter.services.rac.core._2013_05.LOV.LOVSearchResults;
import com.teamcenter.services.rac.core._2013_05.LOV.LOVValueRow;
import com.teamcenter.services.rac.core._2013_05.LOV.LovFilterData;
public class CompetitiveReportDialog extends AbstractAIFDialog {
private static final long serialVersionUID = 1L;
private TCSession session;
private TCComponentDataset model;
private JButton exportBtn;
private JButton cancelBtn;
private HashMap<String, JComponent> searchMap;
private HashMap<String, String[]> exportMap;
private HashMap<String, Object> objectMap;
public CompetitiveReportDialog(TCSession session, String title, String[] options, TCComponentDataset model) throws Exception {
super(AIFUtility.getActiveDesktop());
this.session = session;
this.model = model;
this.searchMap = new HashMap<>();
this.exportMap = new HashMap<>();
this.objectMap = new HashMap<>();
LinkedHashMap<String, String[]> searchMap = new LinkedHashMap<>();
for(String s : options) {
if(s.contains(":")) {
String[] ss = s.split(":");
searchMap.put(ss[0], ss);
}else if(s.contains("=")) {
String[] ss = s.split("=");
exportMap.put(ss[0], ss);
}
}
setTitle(title);
JPanel propPanel = new JPanel(new PropertyLayout(70, 5, 10, 5, 5, 5));
int row = 1;
TCComponentListOfValuesType lovType = (TCComponentListOfValuesType)session.getTypeComponent("ListOfValues");
// TCComponentListOfValues[] lov = lovType.find("ML8_ProjectCategory_LOV");
// String[] vals = getDynamicLOV(lov[0]);
// System.out.println("ML8_ProjectCategory_LOV:"+lov[0].getType()+"=="+vals.length);
for(String s : searchMap.keySet()) {
JLabel label = new JLabel(s);
propPanel.add(row+".1.left.center", label);
String[] ss = searchMap.get(s);
switch(ss[1]){
case "0":
JTextField text = new JTextField();
text.setPreferredSize(new Dimension(150, 23));
propPanel.add(row+".2.right.center", text);
this.searchMap.put(s, text);
break;
case "1":
JComboBox<String> combo = new JComboBox<>();
combo.setPreferredSize(new Dimension(150, 23));
combo.addItem("");
if(ss[2].contains(";")) {
String[] items = ss[2].split(";");
for(String item : items) {
combo.addItem(item);
}
}else {
TCComponentListOfValues[] lovs = lovType.find(ss[2]);//TODO lov
if(lovs==null || lovs.length==0)
throw new Exception("未找到LOV"+ss[2]);
if(lovs[0].isTypeOf("Fnd0ListOfValuesDynamic")) {
for(String item : getDynamicLOV(lovs[0])) {
combo.addItem(item);
}
}else {
ListOfValuesInfo vs = lovs[0].getListOfValues();
String[] dVals = vs.getLOVDisplayValues();
String[] sVals = vs.getStringListOfValues();
HashMap<String, String> map = new HashMap<>();
for(int i=0; i<dVals.length; i++) {
combo.addItem(dVals[i]);
map.put(dVals[i], sVals[i]);
}
objectMap.put(s, map);
}
}
propPanel.add(row+".2.right.center", combo);
this.searchMap.put(s, combo);
break;
case "2":
PropertyDateComponent date = new PropertyDateComponent();
propPanel.add(row+".2.right.center", date);
if(ss[2].equals("true")) {
objectMap.put(s, null);
}
this.searchMap.put(s, date);
break;
default:
break;
}
row++;
}
exportBtn = new JButton("导出");
cancelBtn = new JButton("取消");
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(exportBtn);
btnPanel.add(cancelBtn);
setLayout(new BorderLayout());
add(BorderLayout.CENTER, propPanel);
add(BorderLayout.SOUTH, btnPanel);
// add(new JLabel(""));
addActionListener(title, options[1]);
pack();
if(row>5)
setSize(new Dimension(380, 220+(row-5)*25));
else
setSize(new Dimension(380, 220));
setDefaultLookAndFeelDecorated(true);
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
// setAlwaysOnTop(true);
setVisible(true);
}
private void addActionListener(String title, String options) {
exportBtn.addActionListener(new ActionListener() {
@SuppressWarnings({ "unchecked", "deprecation" })
@Override
public void actionPerformed(ActionEvent arg0) {
AIFDesktop desktop = AIFUtility.getActiveDesktop();
FileInputStream input = null;
FileOutputStream output = null;
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
File directory = TCUtil.saveExcelChooser(title+sdf.format(new Date()));
if(directory==null)
return;
if(directory.exists())
directory.delete();
new Vector<>();
Vector<String> keyV = new Vector<>();
Vector<String> valueV = new Vector<>();
// sdf = new SimpleDateFormat("yyyy-M-d HH:mm");
sdf = new SimpleDateFormat("d-MMM-yyyy hh:mm");
for(String s : searchMap.keySet()) {
JComponent c = searchMap.get(s);
if(c instanceof JTextField) {
String text = ((JTextField)c).getText();
if(!text.isEmpty()) {
keyV.add(s);
valueV.add(text);
}
}else if(c instanceof JComboBox) {
String text = ((JComboBox<String>)c).getSelectedItem().toString();
if(!text.isEmpty()) {
keyV.add(s);
if(objectMap.containsKey(s)) {
valueV.add(((HashMap<String, String>)objectMap.get(s)).get(text));
}else {
valueV.add(text);
}
}
}else if(c instanceof PropertyDateComponent) {
Date date = ((PropertyDateComponent)c).getDate();
if(date==null)
continue;
if(objectMap.containsKey(s)) {
date.setHours(23);
date.setMinutes(59);
}
if(date != null) {
keyV.add(s);
valueV.add(sdf.format(date));
}
}
}
if(keyV.size()==0) {
throw new Exception("请填写查询条件");
}
TCComponent[] results = TCUtil.query(session, options, keyV, valueV);
TCComponentTcFile[] files = model.getTcFiles();
File file = files[0].getFile(System.getProperty("java.io.tmpdir"));
input = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(input);
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
XSSFCell cell;
for(int i=0; i<results.length; i++) {
TCComponent[] comp = getComps(results[i]);
row = getRow(sheet, i+1);
// cell = getCell(row, 0);
// cell.setCellValue(i+1);
for(String s : exportMap.keySet()) {
cell = getCell(row, Integer.parseInt(s)-1);
String[] ss = exportMap.get(s);
switch(ss[1]) {
case "item":
cell.setCellValue(comp[0].getProperty(ss[2]));
break;
case "rev":
cell.setCellValue(comp[1].getProperty(ss[2]));
break;
default:
break;
}
}
}
output = new FileOutputStream(file.getPath());
wb.write(output);
input.close();
output.close();
file.renameTo(directory);
MessageBox.post(desktop, "导出完成", "INFO", MessageBox.INFORMATION);
dispose();
}catch(Exception e1) {
e1.printStackTrace();
MessageBox.post(CompetitiveReportDialog.this, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}finally {
if(input!=null)
try {
input.close();
} catch (Exception e) {
e.printStackTrace();
}
if(output!=null)
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
});
cancelBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
}
private XSSFRow getRow(XSSFSheet sheet, int i) throws Exception {
XSSFRow row = sheet.getRow(i);
if(row==null)
row = sheet.createRow(i);
return row;
}
private XSSFCell getCell(XSSFRow row, int col) throws Exception {
XSSFCell cell = row.getCell(col);
if(cell==null)
cell = row.createCell(col);
return cell;
}
private TCComponent[] getComps(TCComponent comp) throws Exception {
TCComponent[] comps = new TCComponent[2];
if(comp instanceof TCComponentItem) {
comps[0] = comp;
comps[1] = ((TCComponentItem)comp).getLatestItemRevision();
}else if(comp instanceof TCComponentItemRevision) {
comps[0] = ((TCComponentItemRevision)comp).getItem();
comps[1] = comp;
}
return comps;
}
public String[] getDynamicLOV(TCComponentListOfValues lov) throws Exception {
Vector<String> lovDisplayValueList = new Vector<>();
// lovDisplayValueList.add("");
Vector<String> lovValueList = new Vector<>();
LOVService lovService = LOVService.getService(session);
InitialLovData input = new InitialLovData();
LovFilterData filter = new LovFilterData();
filter.sortPropertyName = "object_name";
filter.order = 1;
filter.numberToReturn = 100;
filter.maxResults = 100;
input.lov = lov;
input.filterData = filter;
LOVSearchResults result = lovService.getInitialLOVValues(input);
// StringBuffer sb = new StringBuffer();
// sb.append(">>");
for (LOVValueRow row : result.lovValues) {
Map<String, String[]> map = row.propDisplayValues;
Map<String, String[]> realmap = row.propInternalValues;
for (String key : map.keySet()) {
// sb.append("UID:" + row.uid + ",key:" + key + "value:" + map.get(key)[0]);
// sb.append("\n");
lovDisplayValueList.add(map.get(key)[0]);
lovValueList.add(realmap.get(key)[0]);
}
}
// System.out.println("StringBuffer:"+sb.toString());
return lovDisplayValueList.toArray(new String[lovDisplayValueList.size()]);
}
}

@ -0,0 +1,50 @@
package com.connor.lidy.report;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class CompetitiveReportHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("CompetitiveReportHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
String pref, title;
if(arg0.getCommand().getId().equals("CompetitiveReportHandler")) {
pref = "ML8_CompetitiveReport";
title = "竞品分析报表";
}else{
pref = "ML8_PatentApplyReport";
title = "专利申请维护明细表";
}
TCSession session = (TCSession) app.getSession();
String options[] = session.getPreferenceService().getStringValues(pref);
if(options==null || options.length<2) {
MessageBox.post(desktop, "首选项"+pref+"配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
TCComponent model = session.stringToComponent(options[0]);//wONAAIWd5kSPsC
if(model==null || !model.isTypeOf("MSExcelX")) {
MessageBox.post(desktop, "首选项"+pref+"中模板UID配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
new CompetitiveReportDialog(session, title, options, (TCComponentDataset)model);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
return null;
}
}

@ -0,0 +1,56 @@
package com.connor.lidy.report;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class ParentListReportHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("ParentListReportHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
TCSession session = (TCSession) app.getSession();
InterfaceAIFComponent target = app.getTargetComponent();
if(target==null) {
MessageBox.post(desktop, "请选择零组件或原辅材料版本进行导出", "ERROR", MessageBox.ERROR);
return null;
}
String type = target.getType();
if(!type.equals("ML8_PartRevision") && !type.equals("ML8_RawMaterialRevision")) {
MessageBox.post(desktop, "请选择零组件或原辅材料版本进行导出", "ERROR", MessageBox.ERROR);
return null;
}
String option = session.getPreferenceService().getStringValue("ML8_ParentListReport");
if(option==null || option.isEmpty()) {
MessageBox.post(desktop, "首选项ML8_ParentListReport配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
TCComponent model = session.stringToComponent(option);//AODAAInI5kSPsC
if(model==null || !model.isTypeOf("MSExcelX")) {
MessageBox.post(desktop, "首选项ML8_ParentListReport中模板UID配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
ParentListReportOperation operation = new ParentListReportOperation(session, (TCComponentItemRevision)target, (TCComponentDataset)model);
session.queueOperation(operation);
// MessageBox.post(desktop, "传递结果:", "提示", MessageBox.INFORMATION);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
return null;
}
}

@ -0,0 +1,172 @@
package com.connor.lidy.report;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.swing.JOptionPane;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFOperation;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
public class ParentListReportOperation extends AbstractAIFOperation {
// private TCSession session;
private TCComponentItemRevision target;
private TCComponentDataset model;
private XSSFRow sourceRow;
private final static String [] REV_TYPES = { "ML8_UnProductRevision", "ML8_RefrigeratorRevision", "ML8_WashingRevision", "ML8_ColdRevision",
"ML8_OthersRevision", "ML8_PartRevision", "ML8_RawMaterialRevision" };
public ParentListReportOperation(TCSession session, TCComponentItemRevision target, TCComponentDataset model) {
// this.session = session;
this.target = target;
this.model = model;
}
@Override
public void executeOperation() throws Exception {
AIFDesktop desktop = AIFUtility.getActiveDesktop();
FileInputStream input = null;
FileOutputStream output = null;
try {
TCComponentItemRevision newRev = target.getItem().getLatestItemRevision();
// getParents(target);
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
File directory = TCUtil.saveExcelChooser(newRev.getProperty("item_id")+"物料父级使用清单"+sdf.format(now));
if(directory==null)
return;
if(directory.exists())
directory.delete();
String path = directory.getPath();
TCComponentTcFile[] files = model.getTcFiles();
File file = files[0].getFile(System.getProperty("java.io.tmpdir"));
input = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(input);
int i = 1;
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
XSSFCell cell;
sourceRow = getRow(sheet, i);
System.out.println("当前物料:"+newRev);
TCComponent[] ps = newRev.whereUsed(TCComponent.WHERE_USED_ALL);
if(ps!=null)
System.out.println("找到被使用的数量:"+ps.length);
else
System.out.println("未找到父级使用");
for(TCComponent c : ps) {
TCComponentItem item = ((TCComponentItemRevision)c).getItem();
System.out.println("找到对象:"+item);
if(!c.equals(item.getLatestItemRevision())) {
System.out.println("不是最新版本");
continue;
}
String type = c.getType();
System.out.println("当前类型:"+type);
List<String> asList = Arrays.asList(REV_TYPES);
if(!asList.contains(type)) {
System.out.println("跳过");
continue;
}
String id = c.getProperty("item_id");
if(id.indexOf("-")>-1)
continue;
// if(!id.startsWith("89") && !id.startsWith("ML")&& !id.startsWith("80"))
// continue;
row = getRow(sheet, i);
cell = getCell(row, 0);
cell.setCellValue(i);//序号
cell = getCell(row, 1);
cell.setCellValue(id);//物料代码
cell = getCell(row, 2);
cell.setCellValue(c.getProperty("object_desc"));//物料描述
cell = getCell(row, 3);
cell.setCellValue(c.getProperty("ml8_StdDesc"));//标准描述
cell = getCell(row, 4);
cell.setCellValue(c.getProperty("ml8_FigureNum"));//图号
cell = getCell(row, 5);
cell.setCellValue(c.getProperty("ml8_Colour"));//颜色
cell = getCell(row, 6);
cell.setCellValue(c.getProperty("ml8_Materials"));//材料
cell = getCell(row, 7);
cell.setCellValue(c.getProperty("ml8_Specifications"));//规格
cell = getCell(row, 8);
cell.setCellValue(item.getProperty("ml8_Status"));//优选方式
cell = getCell(row, 9);
TCComponent[] released = c.getReferenceListProperty("release_status_list");
if(released!=null && released.length>0) {
// System.out.println("released:"+released[0].getProperty("object_name"));
String status = released[0].getProperty("object_name");
if(status.equals("ML8_Freeze") || status.equals("ML8_Abolish"))
cell.setCellValue("是");//是否被取代
else
cell.setCellValue("否");//是否被取代
}else
cell.setCellValue("否");//是否被取代
i++;
}
output = new FileOutputStream(file.getPath());
wb.write(output);
input.close();
output.close();
// System.out.println("file:"+file.getPath());
String newPath = System.getProperty("java.io.tmpdir")+path.substring(path.lastIndexOf("\\"));
File reFile = new File(newPath);
file.renameTo(reFile);
// System.out.println("new directory:"+reFile.getPath());
reFile.renameTo(directory);
// MessageBox.post(desktop, "导出完成", "INFO", MessageBox.INFORMATION);
int choose = JOptionPane.showOptionDialog(desktop, "已导出至:"+directory.getPath()+",是否打开?", "提示",
JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, null, new String[] {"是","否"}, "结束操作");
if(choose==0) {
Runtime runtime = Runtime.getRuntime();
runtime.exec("cmd /c start exit &&\"" + directory + "\" ");
}
} catch (Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}finally {
if(input!=null)
input.close();
if(output!=null)
output.close();
}
}
private XSSFRow getRow(XSSFSheet sheet, int num) throws Exception {
XSSFRow row = sheet.getRow(num);
if(row==null)
row = sheet.createRow(num);
return row;
}
private XSSFCell getCell(XSSFRow row, int col) throws Exception {
XSSFCell cell = row.getCell(col);
if(cell==null)
cell = row.createCell(col);
if(row.getRowNum()>2)
cell.setCellStyle(getCell(sourceRow, col).getCellStyle());
return cell;
}
}

@ -0,0 +1,86 @@
package com.connor.lidy.report;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentBOMLine;
import com.teamcenter.rac.kernel.TCComponentBOMWindow;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class ProductListReportHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("ProductListReportHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
TCSession session = (TCSession) app.getSession();
InterfaceAIFComponent target = app.getTargetComponent();
if(target==null) {
MessageBox.post(desktop, "请选择对象版本或BOM进行导出", "ERROR", MessageBox.ERROR);
return null;
}
TCComponentItemRevision topRev;
TCComponentBOMLine topLine;
if(target instanceof TCComponentBOMLine) {
topLine = (TCComponentBOMLine) target;
topRev = topLine.getItemRevision();
}else if(target instanceof TCComponentItemRevision) {
topRev = (TCComponentItemRevision) target;
TCComponentBOMWindow window = TCUtil.getWindow(session);
topLine = TCUtil.getBOMLine(session, window, topRev);
}else {
MessageBox.post(desktop, "请选择对象版本或BOM行进行导出", "ERROR", MessageBox.ERROR);
return null;
}
//+++
// for(AIFComponentContext c : topLine.getChildren()) {
// TCComponentBOMLine child = (TCComponentBOMLine) c.getComponent();
// TCComponentItem item = child.getItem();
// TCComponentItemRevision[] revs = item.getReleasedItemRevisions();
// if(revs.length==0) {
// MessageBox.post(desktop, item+"未发布,请用标准功能导出", "ERROR", MessageBox.ERROR);
// return null;
// }
// }
// String releaseStatuses=((TCComponentBOMLine) target).getStringProperty("bl_rev_release_statuses");
// if(releaseStatuses.indexOf("ML8_JGFB")<0&&releaseStatuses.indexOf("结构发布")<0) {
// MessageBox.post(desktop, "该BOM未全部发布请使用系统标准功能导出", "ERROR", MessageBox.ERROR);
// return null;
// }
//+++
String option = session.getPreferenceService().getStringValue("ML8_ProductListReport");
if(option==null || option.isEmpty()) {
MessageBox.post(desktop, "首选项ML8_ProductListReport配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
TCComponent model = session.stringToComponent(option);//AKLAAIHx5kSPsC
if(model==null || !model.isTypeOf("MSExcelX")) {
MessageBox.post(desktop, "首选项ML8_ProductListReport中模板UID配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
ProductListReportOperation operation = new ProductListReportOperation(session, topRev, (TCComponentDataset)model);
session.queueOperation(operation);
// MessageBox.post(desktop, "传递结果:", "提示", MessageBox.INFORMATION);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
return null;
}
}

@ -0,0 +1,267 @@
package com.connor.lidy.report;
import java.io.File;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFOperation;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentDatasetType;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.kernel.TCUserService;
import com.teamcenter.rac.util.MessageBox;
@SuppressWarnings("deprecation")
public class ProductListReportOperation extends AbstractAIFOperation {
private TCSession session;
private TCComponentItemRevision target;
private TCComponentDataset model;
// private XSSFRow sourceRow;
// private int row;
// private BigDecimal zero;
// private HashMap<String, BigDecimal> quantityMap;
public ProductListReportOperation(TCSession session, TCComponentItemRevision target, TCComponentDataset model) {
this.session = session;
this.target = target;
this.model = model;
}
@Override
public void executeOperation() throws Exception {
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
// zero = new BigDecimal(0);
// quantityMap = new HashMap<>();
// Date now = new Date();
// SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String item_id = target.getProperty("item_id");
String object_name = target.getProperty("object_name");
String item_revision_id = target.getProperty("item_revision_id");
String ml8_ProductCode = "", ml8_ProductType = "";
// 测试用
AIFComponentContext[] forms = target.getChildren("ML8_ProjectRelation");
// System.out.println("forms:"+forms.length);
if(forms.length>0) {
ml8_ProductCode = forms[0].getComponent().getProperty("ml8_ProductCode");
ml8_ProductType = forms[0].getComponent().getProperty("ml8_ProductType");
}else {
ml8_ProductCode = target.getProperty("ml8_ProductCode");
ml8_ProductType = target.getProperty("ml8_ProductType");
}
//2022/9/7修改数据名称中特殊符号转换为_
String pattern = "[/:*?\"<>|]";
item_id = item_id.replaceAll(pattern, "_").replace("\\", "_").replace("\n", "_").trim();
object_name = object_name.replaceAll(pattern, "_").replace("\\", "_").replace("\n", "_").trim();
item_revision_id = item_revision_id.replaceAll(pattern, "_").replace("\\", "_").replace("\n", "_").trim();
ml8_ProductCode = ml8_ProductCode.replaceAll(pattern, "_").replace("\\", "_").replace("\n", "_").trim();
ml8_ProductType = ml8_ProductType.replaceAll(pattern, "_").replace("\\", "_").replace("\n", "_").trim();
StringBuilder name = new StringBuilder(ml8_ProductCode);
name.append("(").append(ml8_ProductType).append(")").append(object_name).append("(").append(item_id).append(")_").append(item_revision_id);
// File directory = TCUtil.saveExcelChooser(object_name+"("+ml8_ProductCode+"("+ml8_ProductType+"))产品明细表");
File directory = TCUtil.saveExcelChooser(name.toString());
if(directory==null)
return;
if(directory.exists())
directory.delete();
System.out.println("directory:"+directory.getPath()+" == "+name.toString().contains("\n"));
// String path = directory.getPath();
// TCComponentTcFile[] files = model.getTcFiles();
// File file00 = files[0].getFile(System.getProperty("java.io.tmpdir"));
// String[] fileNames = model.getFileNames("excel");
//// if (fileNames.length == 0) {
//// } else {
// File file = model.getFile("excel", fileNames[0], System.getProperty("java.io.tmpdir"));
//// }
// input = new FileInputStream(file);
// XSSFWorkbook wb = new XSSFWorkbook(input);
// output = new FileOutputStream(file.getPath());
// wb.write(output);
// input.close();
// output.close();
TCComponentDatasetType dsType = (TCComponentDatasetType) session.getTypeComponent("MSExcelX");
TCComponentDataset ds = dsType.create("outexcel", "", "MSExcelX");
System.out.println("file path 开始调用C++方法"+model.getUid());
TCUserService userService =(TCUserService) session.getUserService();
Object[] params = { target, model.getUid(),ds.getUid()};
userService.call("outputBomExcel", params);
File file=null;
String[] fileNames = ds.getFileNames("excel");
if (fileNames.length == 0) {
System.out.println("导出,上传失败");
} else {
// file = ds.getFile("excel", fileNames[0], System.getProperty("java.io.tmpdir"));
file = ds.getTcFiles()[0].getFile(System.getProperty("java.io.tmpdir"));
}
// ds.refresh();
ds.delete();
System.out.println("file:"+file.getPath());
// String path1 = System.getProperty("java.io.tmpdir")+"\\"+directory.getName();
File file2 = new File(directory.getParent()+"\\"+file.getName());
file.renameTo(file2);
file2.renameTo(directory);
// System.out.println("file2:"+path2+" == "+result);
// input = new FileInputStream(file);
// XSSFWorkbook wb = new XSSFWorkbook(input);
//
// XSSFSheet sheet = wb.getSheetAt(0);
// sourceRow = getRow(sheet, 1);
// XSSFRow row;
//// XSSFCell cell;
// this.row = 1;
//
// TCComponentBOMWindow window = TCUtil.getWindow(session);
// TCComponentBOMLine line = TCUtil.getBOMLine(session, window, target);
// row = getRow(sheet, this.row);
// getCell(row, 0).setCellValue(0);//序号
// getCell(row, 1).setCellValue("0");//所属层级
// getCell(row, 2).setCellValue(item_id);//物料编码
// getCell(row, 3).setCellValue(item_revision_id);//版本
// getCell(row, 4).setCellValue(target.getProperty("ml8_FigureNum"));//图号
// getCell(row, 5).setCellValue(object_name);//物料名称
// getCell(row, 6).setCellValue("");//规格型号
// getCell(row, 7).setCellValue(1);//数量
// getCell(row, 8).setCellValue(line.getItem().getProperty("uom_tag"));//单位
// getCell(row, 9).setCellValue(target.getProperty("ml8_Suttle"));//净重
// getCell(row, 10).setCellValue("");//材料
// getCell(row, 11).setCellValue(target.getProperty("ml8_Colour"));//外观颜色
// getCell(row, 12).setCellValue(target.getProperty("ml8_AfterSale"));//是否售后备件
// getCell(row, 13).setCellValue("");//优选方式
// getCell(row, 14).setCellValue("");//通用化状态
// getCell(row, 15).setCellValue(target.getProperty("ml8_ProcessingMode"));//加工方式
// getCell(row, 16).setCellValue("");//替代项目组
// getCell(row, 17).setCellValue(target.getProperty("ml8_Remark"));//备注
// getCell(row, 18).setCellValue("");//父编码
// this.row++;
//
//// System.out.println("rule:"+window.getRevisionRule());
//// TCComponentRevisionRuleType type = (TCComponentRevisionRuleType) session.getTypeComponent("RevisionRule");
//// System.out.println("type:"+type.create("Any Status; Working", ""));
// TCComponentRevisionRule[] list = TCComponentRevisionRule.listAllRules(session);
// for(TCComponentRevisionRule rule : list) {
// if(rule.toString().equals("产品明细表导出规则")) {
// window.setRevisionRule(rule);
// break;
// }
// }
// System.out.println("rule:"+window.getRevisionRule());
// recycelBom(line.getChildren(), sheet, new BigDecimal(1));
/*for(int i=2; i<=sheet.getLastRowNum(); i++) {
row = getRow(sheet, i);
cell = getCell(row, 2);
String id = cell.getStringCellValue();
// System.out.println("id:"+id);
if(id.isEmpty())
continue;
cell = getCell(row, 7);
cell.setCellValue(quantityMap.get(id).doubleValue());
}*/
// window.close();
//
// output = new FileOutputStream(file.getPath());
// wb.write(output);
// input.close();
// output.close();
//// System.out.println("file:"+file.getPath());
// String newPath = System.getProperty("java.io.tmpdir")+path.substring(path.lastIndexOf("\\"));
// File reFile = new File(newPath);
// System.out.println("reFile:"+reFile.getPath());
// file.renameTo(reFile);
// System.out.println("file2:"+file.getPath());
// reFile.renameTo(directory);
// System.out.println("reFile2:"+reFile.getPath());
MessageBox.post(desktop, "导出完成", "INFO", MessageBox.INFORMATION);
} catch (Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
}
/*private XSSFRow getRow(XSSFSheet sheet, int num) throws Exception {
XSSFRow row = sheet.getRow(num);
if(row==null)
row = sheet.createRow(num);
return row;
}
private XSSFCell getCell(XSSFRow row, int col) throws Exception {
XSSFCell cell = row.getCell(col);
if(cell==null)
cell = row.createCell(col);
if(row.getRowNum()>1)
cell.setCellStyle(getCell(sourceRow, col).getCellStyle());
return cell;
}
private void recycelBom(AIFComponentContext[] context, XSSFSheet sheet, BigDecimal parent) throws Exception {
HashSet<String> idSet = new HashSet<>();
for(AIFComponentContext c : context) {
TCComponentBOMLine line = (TCComponentBOMLine)c.getComponent();
String id = line.getProperty("bl_item_item_id");
if(idSet.contains(id)||id.indexOf("-")>-1)
continue;
idSet.add(id);
TCComponentItemRevision rev = line.getItemRevision();
if(rev==null)
continue;
// System.out.println("bom:"+id);
BigDecimal count = getQuantity(context, id).multiply(parent);
if(quantityMap.containsKey(id))
quantityMap.put(id, quantityMap.get(id).add(count));
else
quantityMap.put(id, count);
TCComponentItem item = line.getItem();
XSSFRow row = getRow(sheet, this.row);
getCell(row, 0).setCellValue(this.row-1);//序号
getCell(row, 1).setCellValue(line.getProperty("bl_level_starting_0"));//所属层级
getCell(row, 2).setCellValue(id);//物料编码
getCell(row, 3).setCellValue(rev.getProperty("item_revision_id"));//版本
getCell(row, 4).setCellValue(rev.getProperty("ml8_FigureNum"));//图号
getCell(row, 5).setCellValue(rev.getProperty("object_name"));//物料名称
getCell(row, 6).setCellValue(rev.getProperty("ml8_Specifications"));//规格型号
getCell(row, 7).setCellValue(count.doubleValue());//数量
getCell(row, 8).setCellValue(line.getProperty("bl_uom"));//单位
if(item.getType().equals("ML8_Part")) {
getCell(row, 9).setCellValue(rev.getProperty("ml8_Suttle"));//净重
getCell(row, 14).setCellValue(rev.getProperty("ml8_GeneralIdentify"));//通用化状态
getCell(row, 16).setCellValue(line.getProperty("ML8_ProjectTeam"));//替代项目组
}else {
getCell(row, 9).setCellValue("");//净重
getCell(row, 14).setCellValue("");//通用化状态
getCell(row, 16).setCellValue("");//替代项目组
}
getCell(row, 10).setCellValue(rev.getProperty("ml8_Materials"));//材料
getCell(row, 11).setCellValue(rev.getProperty("ml8_Colour"));//外观颜色
getCell(row, 12).setCellValue(rev.getProperty("ml8_AfterSale"));//是否售后备件
getCell(row, 13).setCellValue(item.getProperty("ml8_Status"));//优选方式
// getCell(row, 14).setCellValue("");//通用化状态
getCell(row, 15).setCellValue(rev.getProperty("ml8_ProcessingMode"));//加工方式
// getCell(row, 16).setCellValue("");//替代项目组
getCell(row, 17).setCellValue(rev.getProperty("ml8_Remark"));//备注
getCell(row, 18).setCellValue(line.getProperty("bl_formatted_parent_name"));//父编码
this.row++;
AIFComponentContext[] child = line.getChildren();
if(child!=null && child.length>0)
recycelBom(line.getChildren(), sheet, count);
}
}
private BigDecimal getQuantity(AIFComponentContext[] children, String id) throws Exception {
BigDecimal q = zero;
for(AIFComponentContext c : children) {
TCComponentBOMLine bom = (TCComponentBOMLine) c.getComponent();
if(bom.getProperty("bl_item_item_id").equals(id)) {
String bl_quantity = bom.getProperty("bl_quantity");
q = q.add(new BigDecimal(bl_quantity.isEmpty() ? "1":bl_quantity));
}
}
return q;
}*/
}

@ -0,0 +1,293 @@
package com.connor.lidy.report;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import com.connor.lidy.util.MultiCombo;
import com.connor.lidy.util.ProgressReporterDialog;
import com.connor.lidy.util.SelectUserDialog;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentListOfValues;
import com.teamcenter.rac.kernel.TCComponentListOfValuesType;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.stylesheet.PropertyDateComponent;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.services.rac.core.LOVService;
import com.teamcenter.services.rac.core._2013_05.LOV.InitialLovData;
import com.teamcenter.services.rac.core._2013_05.LOV.LOVSearchResults;
import com.teamcenter.services.rac.core._2013_05.LOV.LOVValueRow;
import com.teamcenter.services.rac.core._2013_05.LOV.LovFilterData;
public class ProjectBoardDialog extends AbstractAIFDialog {
private static final long serialVersionUID = 1L;
private TCSession session;
private TCComponentDataset model;
private JButton exportBtn;
private JButton cancelBtn;
private JComponent[] comps;
public ProjectBoardDialog(TCSession session, String[] options, TCComponentDataset model, String[] departments) throws Exception {
super(AIFUtility.getActiveDesktop());
this.session = session;
this.model = model;
this.comps = new JComponent[8];
System.out.println("group:"+session.getGroup()+">>"+session.getGroup().getGroupName());
String group = session.getGroup().toString().trim();
String depart = "";
for(String s : departments) {
String[] ss = s.split(":");
if(group.equals(ss[0])) {
depart = ss[1];
}
}
if(depart.isEmpty())
throw new Exception("当前部门无法查询,请联系系统管理员!");
setTitle("项目运行跟踪表-产品类");
JPanel propPanel = new JPanel(new PropertyLayout(70, 5, 10, 5, 5, 5));
TCComponentListOfValuesType lovType = (TCComponentListOfValuesType)session.getTypeComponent("ListOfValues");
// TCComponentListOfValues[] lov = lovType.find("ML8_ProjectCategory_LOV");
// String[] vals = getDynamicLOV(lov[0]);
// System.out.println("ML8_ProjectCategory_LOV:"+lov[0].getType()+"=="+vals.length);
JLabel label1 = new JLabel("产品代号");
propPanel.add("1.1.left.center", label1);
JTextField text1 = new JTextField();
text1.setPreferredSize(new Dimension(155, 23));
propPanel.add("1.2.right.center", text1);
comps[0] = text1;
JLabel label2 = new JLabel("项目级别");
propPanel.add("2.1.left.center", label2);
JComboBox<String> combo2 = new JComboBox<>();
combo2.setPreferredSize(new Dimension(155, 23));
combo2.addItem("");
TCComponentListOfValues[] lovs2 = lovType.find("ML8_ProjectLevel_LOV");
for(String item : getDynamicLOV(lovs2[0])) {
combo2.addItem(item);
}
propPanel.add("2.2.right.center", combo2);
comps[1] = combo2;
JLabel label3 = new JLabel("项目立项时间大于");
propPanel.add("3.1.left.center", label3);
PropertyDateComponent date3 = new PropertyDateComponent();
propPanel.add("3.2.right.center", date3);
comps[2] = date3;
JLabel label4 = new JLabel("项目立项时间小于");
propPanel.add("4.1.left.center", label4);
PropertyDateComponent date4 = new PropertyDateComponent();
propPanel.add("4.2.right.center", date4);
comps[3] = date4;
JLabel label5 = new JLabel("项目经理");
propPanel.add("5.1.left.center", label5);
JPanel personPanel = new JPanel(new PropertyLayout(5, 5, 0, 5, 5, 5));
JTextField text5 = new JTextField();
text5.setPreferredSize(new Dimension(105, 23));
text5.setEditable(false);
personPanel.add("1.1.center.center", text5);
JButton personBtn = new JButton("...");
personBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
new SelectUserDialog(text5, false).showDialog();
} catch (Exception e) {
e.printStackTrace();
MessageBox.post(ProjectBoardDialog.this, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
personBtn.setPreferredSize(new Dimension(45, 23));
personPanel.add("1.2.center.center", personBtn);
propPanel.add("5.2.center.center", personPanel);
comps[4] = text5;
JLabel label6 = new JLabel("项目承担部门");
propPanel.add("6.1.left.center", label6);
// JComboBox<String> combo6 = new JComboBox<>();
// combo6.setPreferredSize(new Dimension(155, 23));
// combo6.addItem("");
//// TCComponentListOfValues[] lovs6 = lovType.find("ML8_PrjDepartment_LOV");
//// for(String item : getDynamicLOV(lovs6[0])) {
// for(String item : depart.split(";")) {
// combo6.addItem(item);
// }
MultiCombo combo6 = new MultiCombo(depart.split(";"));
combo6.setEditable(true);
propPanel.add("6.2.right.center", combo6);
combo6.setPreferredSize(new Dimension(155, 23));
comps[5] = combo6;
JLabel label7 = new JLabel("项目状态");
propPanel.add("7.1.left.center", label7);
JComboBox<String> combo7 = new JComboBox<>();
combo7.setPreferredSize(new Dimension(155, 23));
combo7.addItem("");
TCComponentListOfValues[] lovs7 = lovType.find("ML8_MissionPhase_LOV");
for(String item : getDynamicLOV(lovs7[0])) {
combo7.addItem(item);
// System.out.println("item:"+item);
}
propPanel.add("7.2.right.center", combo7);
comps[6] = combo7;
JCheckBox showEarly = new JCheckBox("显示往年已结项");
comps[7] = showEarly;
exportBtn = new JButton("导出");
cancelBtn = new JButton("取消");
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(showEarly);
btnPanel.add(exportBtn);
btnPanel.add(cancelBtn);
setLayout(new BorderLayout());
add(BorderLayout.CENTER, propPanel);
add(BorderLayout.SOUTH, btnPanel);
// add(new JLabel(""));
addActionListener(depart, options);
pack();
setSize(new Dimension(380, 300));
setDefaultLookAndFeelDecorated(true);
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
// setAlwaysOnTop(true);
setVisible(true);
}
private void addActionListener(String depart, String[] options) {
exportBtn.addActionListener(new ActionListener() {
@SuppressWarnings("deprecation")
@Override
public void actionPerformed(ActionEvent arg0) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
File directory = TCUtil.saveExcelChooserAsk("项目运行跟踪表-产品类"+sdf.format(new Date()));
if(directory==null)
return;
ProgressReporterDialog reporter = new ProgressReporterDialog("提示");
reporter.reportProgressMessage("正在导出,请稍候...");
new Thread(reporter).start();
new Thread() {
public void run(){
try {
SimpleDateFormat sdf = new SimpleDateFormat("d-MMM-yyyy hh:mm");
Vector<String> keyV = new Vector<>();
Vector<String> valV = new Vector<>();
String text1 = ((JTextField) comps[0]).getText();
if(!text1.isEmpty()) {
keyV.add("产品代号");
valV.add(text1);
}
String text2 = ((JComboBox<?>) comps[1]).getSelectedItem().toString();
if(!text2.isEmpty()) {
keyV.add("项目级别");
valV.add(text2);
}
// System.out.println("项目立项时间大于:"+((PropertyDateComponent) comps[2]).getDateString());
Date date3 = ((PropertyDateComponent) comps[2]).getDate();
if(date3 != null) {
keyV.add("项目立项时间大于");
valV.add(sdf.format(date3));
}
// System.out.println("项目立项时间小于:"+((PropertyDateComponent) comps[3]).getDateString());
Date date4 = ((PropertyDateComponent) comps[3]).getDate();
if(date4 != null) {
keyV.add("项目立项时间小于");
valV.add(sdf.format(date4));
}
String text5 = ((JTextField) comps[4]).getText();
if(!text5.isEmpty()) {
keyV.add("项目经理");
valV.add(text5);
}
// String text6 = ((JComboBox<?>) comps[5]).getSelectedItem().toString();
String text6 = ((MultiCombo) comps[5]).getText().trim();
if(!text6.isEmpty()) {
keyV.add("项目承担部门");
valV.add(text6);
}else {
keyV.add("项目承担部门");
valV.add(depart);
}
String text7 = ((JComboBox<?>) comps[6]).getSelectedItem().toString();
if(!text7.isEmpty()) {
keyV.add("项目状态");
valV.add(text7);
}
boolean oldyear = ((JCheckBox) comps[7]).isSelected();
new ProjectBoardOperation(session, options, model, directory, reporter, keyV, valV, oldyear).executeOperation();
}catch(Exception e1) {
reporter.requestCanceling();
e1.printStackTrace();
MessageBox.post(ProjectBoardDialog.this, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
}.start();
}
});
cancelBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
}
public String[] getDynamicLOV(TCComponentListOfValues lov) throws Exception {
Vector<String> lovDisplayValueList = new Vector<>();
// lovDisplayValueList.add("");
// Vector<String> lovValueList = new Vector<>();
LOVService lovService = LOVService.getService(session);
InitialLovData input = new InitialLovData();
LovFilterData filter = new LovFilterData();
filter.sortPropertyName = "object_name";
filter.order = 1;
filter.numberToReturn = 100;
filter.maxResults = 100;
input.lov = lov;
input.filterData = filter;
LOVSearchResults result = lovService.getInitialLOVValues(input);
// StringBuffer sb = new StringBuffer();
// sb.append(">>");
for (LOVValueRow row : result.lovValues) {
Map<String, String[]> map = row.propDisplayValues;
// Map<String, String[]> realmap = row.propInternalValues;
for (String key : map.keySet()) {
if(!key.equals("object_name"))
continue;
// sb.append("UID:" + row.uid + ",key:" + key + "value:" + map.get(key)[0]);
// sb.append("\n");
String[] v = map.get(key);
lovDisplayValueList.add(v[0]);
// lovValueList.add(realmap.get(key)[0]);
// System.out.println("key:"+key+"=="+v.length+">>"+v[0]);
}
}
// System.out.println("StringBuffer:"+sb.toString());
return lovDisplayValueList.toArray(new String[lovDisplayValueList.size()]);
}
}

@ -0,0 +1,93 @@
package com.connor.lidy.report;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
//import com.connor.lidy.util.ProgressReporterDialog;
//import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class ProjectBoardHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("ProjectBoardHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
TCSession session = (TCSession) app.getSession();
// ProjectBoardDialog.getComps(session.stringToComponent("AyJAAIWu5kSPsC"));
String options[] = session.getPreferenceService().getStringValues("ML8_ProjectReport");
if(options==null || options.length<2) {
MessageBox.post(desktop, "首选项ML8_ProjectReport配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
TCComponent model = session.stringToComponent(options[0]);//wtGAAIma5kSPsC SearchProjectSchedule
if(model==null || !model.isTypeOf("MSExcelX")) {
MessageBox.post(desktop, "首选项ML8_ProjectReport中模板UID配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
String departments[] = session.getPreferenceService().getStringValues("ML8_ProjectDepart");
if(departments==null || departments.length==0) {
MessageBox.post(desktop, "首选项ML8_ProjectDepart配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// System.out.println((sdf.parse("2022-01-10").getTime()-sdf.parse("2021-12-11").getTime())/(1000*60*60*24));
new ProjectBoardDialog(session, options, (TCComponentDataset)model, departments);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
/*new Thread() {
public void run(){
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
TCSession session = (TCSession) app.getSession();
// ProjectBoardDialog.getComps(session.stringToComponent("AyJAAIWu5kSPsC"));
String options[] = session.getPreferenceService().getStringValues("ML8_ProjectReport");
if(options==null || options.length<2) {
MessageBox.post(desktop, "首选项ML8_ProjectReport配置不正确", "ERROR", MessageBox.ERROR);
return;
}
TCComponent model = session.stringToComponent(options[0]);//wtGAAIma5kSPsC SearchProjectSchedule
if(model==null || !model.isTypeOf("MSExcelX")) {
MessageBox.post(desktop, "首选项ML8_ProjectReport中模板UID配置不正确", "ERROR", MessageBox.ERROR);
return;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
File directory = TCUtil.saveExcelChooserAsk("项目运行跟踪表-产品类"+ sdf.format(new Date()));
if(directory==null)
return;
ProgressReporterDialog reporter = new ProgressReporterDialog("提示");
reporter.reportProgressMessage("正在导出,请稍候...");
new Thread(reporter).start();
new Thread() {
public void run(){
try {
new ProjectBoardOperation(session, options, (TCComponentDataset)model, directory, reporter).executeOperation();
} catch (Exception e) {
reporter.requestCanceling();
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
}
}.start();
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
}
}.start();*/
return null;
}
}

@ -0,0 +1,368 @@
package com.connor.lidy.report;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Vector;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.connor.lidy.util.ProgressReporterDialog;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFOperation;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentSchedule;
import com.teamcenter.rac.kernel.TCComponentScheduleTask;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.schedule.scheduler.componentutils.ScheduleHelper;
import com.teamcenter.rac.util.MessageBox;
public class ProjectBoardOperation extends AbstractAIFOperation {
private TCSession session;
private String options[];
private TCComponentDataset model;
private File directory;
private ProgressReporterDialog reporter;
private Vector<String> keyV;
private Vector<String> valV;
private boolean oldyear;
public ProjectBoardOperation(TCSession session, String options[], TCComponentDataset model, File directory, ProgressReporterDialog reporter,
Vector<String> keyV, Vector<String> valV, boolean oldyear) {
this.session = session;
this.options = options;
this.model = model;
this.directory = directory;
this.reporter = reporter;
this.keyV = keyV;
this.valV = valV;
this.oldyear = oldyear;
}
@Override
public void executeOperation() throws Exception {
AIFDesktop desktop = AIFUtility.getActiveDesktop();
FileInputStream input = null;
FileOutputStream output = null;
XSSFWorkbook wb = null;
try {
HashMap<Integer, String[]> exportMap = new HashMap<>();
for(String s : options) {
if(s.contains("=")) {
String[] ss = s.split("=");
try {
exportMap.put(Integer.parseInt(ss[0])-1, ss);
}catch(NumberFormatException e) {
char[] cs = ss[0].toCharArray();
int col = 0;
for(int i=0; i<cs.length; i++) {
int n = ((int)cs[i])-64;
col += n*Math.pow(26, cs.length-i-1);
}
exportMap.put(col-1, ss);
}
}
}
if(directory.exists())
directory.delete();
// if(keyV.size()==0) {
// throw new Exception("请填写查询条件");
// }
TCUtil.setByPass(session, true);
TCComponent[] results = TCUtil.query(session, options[1], keyV, valV);
System.out.println("查询结果数:"+results.length);
TCComponentTcFile[] files = model.getTcFiles();
File file = files[0].getFile(System.getProperty("java.io.tmpdir"));
input = new FileInputStream(file);
wb = new XSSFWorkbook(input);
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
XSSFCell cell;
String[] assessments = new String[] { "方案评审(PDCP", "样机评审", "小批评审", "试生产评审(首单)" };
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
Date now = new Date();
int i = 2;
for(TCComponent result : results) {
System.out.println("正在导出:"+result);
reporter.reportProgressMessage("正在导出:"+result);
row = getRow(sheet, i);
// cell = getCell(row, 0);
// cell.setCellValue(i+1);
TCComponent[] comp = getComps(result);
boolean noForm = comp[3]==null, noProj = comp[1]==null;
HashMap<String, TCComponentScheduleTask> nodes = getTasks((TCComponentScheduleTask)comp[2]);
// System.out.println("nodes"+ nodes.size());
if(nodes.size()==0)
continue;
String stage, status = result.getProperty("fnd0status");
if(status.equals("已结束") || status.equals("已中止")) {
stage = status;
}else {
// stage = getStage(nodes);//TODO
stage = result.getProperty("ml8_ProjectState");
}
Date finish = result.getDateProperty("fnd0SSTActualFinish");
if(!oldyear && finish!=null && !sdf.format(finish).equals(sdf.format(now))) {
if(stage.equals("结项") || stage.equals("已中止"))
continue;
}
// HashSet<String> states = new HashSet<>();
// for(String s : nodes.keySet()) {
// String state = nodes.get(s).getProperty("fnd0state");
// if(state.equals("进行中")) {
// states.add(s);
// }
// }
// if(states.size()==0)
// states.add(assessments[0]);
cell = getCell(row, 0);
cell.setCellValue(noProj ? "":comp[1].getProperty("ml8_PrjDepartment"));//经营体
cell = getCell(row, 1);
cell.setCellValue(noProj ? "":comp[1].getProperty("ml8_PrjType"));//产品类别
cell = getCell(row, 2);
cell.setCellValue(stage);//项目运行状态
cell = getCell(row, 3);
cell.setCellValue(noProj ? "":comp[1].getProperty("ml8_ProductCode"));//代号
cell = getCell(row, 4);
cell.setCellValue(noProj ? "":comp[1].getProperty("ml8_ProductType"));//产品型号
cell = getCell(row, 5);
cell.setCellValue(noProj ? "":comp[1].getProperty("ml8_PrjLevel"));//项目级别
cell = getCell(row, 6);
// cell.setCellValue(noProj ? "":comp[1].getReferenceProperty("owning_user").getProperty("user_name"));//项目经理
cell.setCellValue(noForm ? "":comp[3].getProperty("ml8_ProjectManagement1"));//项目经理
cell = getCell(row, 7);
if(!noProj)
setDateValue(cell, comp[1], "ml8_ItemTime");//立项时间
if(!noForm) {
cell = getCell(row, 8);
setDateValue(cell, comp[3], "ml8_PDCP");//PDCP合同进程
cell = getCell(row, 9);
setDateValue(cell, comp[3], "ml8_CPDCP");//PDCP变更进程
}
if(nodes.containsKey(assessments[0])) {
TCComponentScheduleTask task = nodes.get(assessments[0]);
cell = getCell(row, 10);
setDateValue(cell, task, "actual_finish_date");//完成时间
cell = getCell(row, 11);
Date cdate = noForm? null:comp[3].getDateProperty("ml8_CPDCP");
Date date = noForm? null:(cdate==null ? comp[3].getDateProperty("ml8_PDCP"):cdate);
cell.setCellValue(getDateD(task.getDateProperty("actual_finish_date"), date));//进度偏差
}
if(!noForm) {
cell = getCell(row, 12);
setDateValue(cell, comp[3], "ml8_Prototype");//样机合同进程
cell = getCell(row, 13);
setDateValue(cell, comp[3], "ml8_Cprototype");//样机变更进程
}
if(nodes.containsKey(assessments[1])) {
TCComponentScheduleTask task = nodes.get(assessments[1]);
cell = getCell(row, 14);
setDateValue(cell, task, "actual_finish_date");//完成时间
cell = getCell(row, 15);
Date cdate = noForm? null:comp[3].getDateProperty("ml8_Cprototype");
Date date = noForm? null:(cdate==null ? comp[3].getDateProperty("ml8_Prototype"):cdate);
cell.setCellValue(getDateD(task.getDateProperty("actual_finish_date"), date));//进度偏差
}
if(!noForm) {
cell = getCell(row, 16);
setDateValue(cell, comp[3], "ml8_SmallBatch");//小批合同进程
cell = getCell(row, 17);
setDateValue(cell, comp[3], "ml8_CSmallBatch");//小批变更进程
}
if(nodes.containsKey(assessments[2])) {
TCComponentScheduleTask task = nodes.get(assessments[2]);
cell = getCell(row, 18);
setDateValue(cell, task, "actual_finish_date");//完成时间
cell = getCell(row, 19);
Date cdate = noForm? null:comp[3].getDateProperty("ml8_CSmallBatch");
Date date = noForm? null:(cdate==null ? comp[3].getDateProperty("ml8_SmallBatch"):cdate);
cell.setCellValue(getDateD(task.getDateProperty("actual_finish_date"), date));//进度偏差
}
if(!noForm) {
cell = getCell(row, 20);
setDateValue(cell, comp[3], "ml8_ADCP");//试生产合同进程
cell = getCell(row, 21);
setDateValue(cell, comp[3], "ml8_CADCP");//试生产变更进程
}
if(nodes.containsKey(assessments[3])) {
TCComponentScheduleTask task = nodes.get(assessments[3]);
cell = getCell(row, 22);
setDateValue(cell, task, "actual_finish_date");//完成时间
cell = getCell(row, 23);
Date cdate = noForm? null:comp[3].getDateProperty("ml8_CADCP");
Date date = noForm? null:(cdate==null ? comp[3].getDateProperty("ml8_ADCP"):cdate);
cell.setCellValue(getDateD(task.getDateProperty("actual_finish_date"), date));//进度偏差
}
// System.out.println("date"+getDateD(comp[3].getDateProperty("ml8_PDCP"), comp[3].getDateProperty("ml8_Prototype")));
AIFComponentContext[] contexts = TCUtil.getPseudoFolder(comp[0], "ML8_ECRProductQCD_rel").getChildren();
int changeCount = 0;
StringBuilder change = new StringBuilder("");
for(AIFComponentContext c : contexts) {
InterfaceAIFComponent compo = c.getComponent();
if(!(compo instanceof TCComponentItem))
continue;
TCComponentItem item = (TCComponentItem)compo;
TCComponentItemRevision[] revs = item.getReleasedItemRevisions();
if(revs==null || revs.length==0)
continue;
change.append(revs[0].getProperty("ml8_OAProcessNo")).append("-").append(revs[0].getProperty("ml8_CReason")).append("\n");
changeCount++;
}
cell = getCell(row, 24);
cell.setCellValue(changeCount);//变更次数
cell = getCell(row, 25);
cell.setCellValue(change.toString());//变更原因
for(int r : exportMap.keySet()) {
cell = getCell(row, r);
String[] ss = exportMap.get(r);
switch(ss[1]) {
case "1":
cell.setCellValue(comp[0].getProperty(ss[2]));
break;
case "2":
cell.setCellValue(noProj ? "":comp[1].getProperty(ss[2]));
break;
case "3":
cell.setCellValue(noForm? "":comp[3].getProperty(ss[2]));
break;
default:
break;
}
}
i++;
}
output = new FileOutputStream(file.getPath());
wb.write(output);
input.close();
output.close();
file.renameTo(directory);
reporter.requestCanceling();
MessageBox.post(desktop, "导出完成", "INFO", MessageBox.INFORMATION);
// dispose();
}catch(Exception e1) {
reporter.requestCanceling();
e1.printStackTrace();
MessageBox.post(desktop, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}finally {
TCUtil.setByPass(session, false);
if(input!=null)
try {
input.close();
} catch (Exception e) {
e.printStackTrace();
}
if(output!=null)
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private XSSFRow getRow(XSSFSheet sheet, int num) throws Exception {
XSSFRow row = sheet.getRow(num);
if(row==null)
row = sheet.createRow(num);
return row;
}
private XSSFCell getCell(XSSFRow row, int col) throws Exception {
XSSFCell cell = row.getCell(col);
if(cell==null)
cell = row.createCell(col);
// if(row.getRowNum()>1)
// cell.setCellStyle(getCell(sourceRow, col).getCellStyle());
return cell;
}
private TCComponent[] getComps(TCComponent comp) throws Exception {
TCComponent[] comps = new TCComponent[4];
if(comp instanceof TCComponentSchedule) {
comps[0] = comp;
TCComponent[] ps = comp.getReferenceListProperty("project_list");
if(ps==null || ps.length==0)
comps[1] = null;
else
comps[1] = ps[0];
comps[2] = ScheduleHelper.getScheduleSummaryTask((TCComponentSchedule)comp);
TCComponent[] refs = comp.getReferenceListProperty("IMAN_reference");
comps[3] = null;
if(refs!=null && refs.length>0) {
for(TCComponent c : refs) {
if(c.isTypeOf("ML8_ProductQCDForm1")) {
Date states = c.getDateProperty("date_released");
if(states!=null) {
comps[3] = c;
break;
}
}
}
}
// AIFComponentContext[] children = task.getChildren();
// if(children!=null && children.length>0) {
// System.out.println("child:"+children[0].getComponent());
// }
}
return comps;
}
private HashMap<String, TCComponentScheduleTask> getTasks(TCComponentScheduleTask parent) throws Exception {
AIFComponentContext[] children = parent.getChildren();
HashMap<String, TCComponentScheduleTask> nodes = new HashMap<>();
for(AIFComponentContext c : children) {
InterfaceAIFComponent comp = c.getComponent();
if(!(comp instanceof TCComponentScheduleTask))
continue;
TCComponentScheduleTask task = (TCComponentScheduleTask) comp;
String node = task.getProperty("ml8_AssessmentNode");
// System.out.println(task+"=="+ node);
if(!node.isEmpty() && !nodes.containsKey(node)) {
nodes.put(node, task);
}
HashMap<String, TCComponentScheduleTask> map = getTasks(task);
if(map.size()>0) {
for(String s : map.keySet()) {
nodes.put(s, map.get(s));
}
}
}
return nodes;
}
/*private String getStage(HashMap<String, TCComponentScheduleTask> nodes) throws Exception {
String[] stages = new String[] { "方案评审(PDCP", "样机评审", "小批评审", "试生产评审(首单)" };
if(!nodes.containsKey(stages[0]))
return "";
for(int i=0; i<stages.length; i++) {
if(nodes.containsKey(stages[i]) && !nodes.get(stages[i]).getProperty("fnd0state").equals("完成"))
return stages[i];
}
return "结项";
}*/
private String getDateD(Date date1, Date date2) {
if(date1==null || date2==null)
return "";
else
return (date1.getTime()-date2.getTime())/86400000+"";
// return date1.getDate()-date2.getDate()+"";
}
private void setDateValue(XSSFCell cell, TCComponent comp, String prop) throws Exception {
if(comp.getDateProperty(prop)!=null)
cell.setCellValue(comp.getDateProperty(prop));
}
}

@ -0,0 +1,563 @@
package com.connor.lidy.report;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.connor.lidy.util.MultiCombo;
import com.connor.lidy.util.ProgressReporterDialog;
import com.connor.lidy.util.SelectUserDialog;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.ListOfValuesInfo;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentListOfValues;
import com.teamcenter.rac.kernel.TCComponentListOfValuesType;
import com.teamcenter.rac.kernel.TCComponentSchedule;
import com.teamcenter.rac.kernel.TCComponentScheduleTask;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.schedule.scheduler.componentutils.ScheduleHelper;
import com.teamcenter.rac.stylesheet.PropertyDateComponent;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.services.rac.core.LOVService;
import com.teamcenter.services.rac.core._2013_05.LOV.InitialLovData;
import com.teamcenter.services.rac.core._2013_05.LOV.LOVSearchResults;
import com.teamcenter.services.rac.core._2013_05.LOV.LOVValueRow;
import com.teamcenter.services.rac.core._2013_05.LOV.LovFilterData;
public class ProjectDocReportDialog extends AbstractAIFDialog {
private static final long serialVersionUID = 1L;
private TCSession session;
private TCComponentDataset model;
private JCheckBox document;
private JCheckBox download;
private JButton exportBtn;
private JButton cancelBtn;
private HashMap<String, JComponent> searchMap;
private HashMap<String, Object> objectMap;
private HashMap<String, TCComponentScheduleTask> nodes;
public ProjectDocReportDialog(TCSession session, String title, String[] options, TCComponentDataset model) throws Exception {
super(AIFUtility.getActiveDesktop());
this.session = session;
this.model = model;
this.searchMap = new HashMap<>();
this.objectMap = new HashMap<>();
String departments[] = session.getPreferenceService().getStringValues("ML8_ProjectDepart");
if(departments==null || departments.length==0)
throw new Exception("首选项ML8_ProjectDepart配置不正确");
String group = session.getGroup().toString().trim();
String depart = "";
for(String s : departments) {
String[] ss = s.split(":");
if(group.equals(ss[0])) {
depart = ss[1];
}
}
if(depart.isEmpty())
throw new Exception("当前部门无法查询,请联系系统管理员!");
LinkedHashMap<String, String[]> searchMap = new LinkedHashMap<>();
for(String s : options) {
if(s.contains(":")) {
String[] ss = s.split(":");
searchMap.put(ss[0], ss);
}
}
setTitle(title);
JPanel propPanel = new JPanel(new PropertyLayout(70, 5, 10, 5, 5, 5));
int row = 1;
TCComponentListOfValuesType lovType = (TCComponentListOfValuesType)session.getTypeComponent("ListOfValues");
// TCComponentListOfValues[] lov = lovType.find("ML8_ProjectCategory_LOV");
// String[] vals = getDynamicLOV(lov[0]);
// System.out.println("ML8_ProjectCategory_LOV:"+lov[0].getType()+"=="+vals.length);
for(String s : searchMap.keySet()) {
JLabel label = new JLabel(s);
propPanel.add(row+".1.left.center", label);
String[] ss = searchMap.get(s);
switch(ss[1]){
case "0":
JTextField text = new JTextField();
text.setPreferredSize(new Dimension(150, 23));
if(ss.length==3)
text.setText(ss[2]);
propPanel.add(row+".2.right.center", text);
this.searchMap.put(s, text);
break;
case "1":
JComboBox<String> combo = new JComboBox<>();
combo.setPreferredSize(new Dimension(150, 23));
combo.addItem("");
if(ss[2].contains(";")) {
String[] items = ss[2].split(";");
for(String item : items) {
combo.addItem(item);
}
}else {
TCComponentListOfValues[] lovs = lovType.find(ss[2]);// lov
if(lovs==null || lovs.length==0)
throw new Exception("未找到LOV"+ss[2]);
if(lovs[0].isTypeOf("Fnd0ListOfValuesDynamic")) {
for(String item : getDynamicLOV(lovs[0])) {
combo.addItem(item);
}
}else {
ListOfValuesInfo vs = lovs[0].getListOfValues();
String[] dVals = vs.getLOVDisplayValues();
String[] sVals = vs.getStringListOfValues();
HashMap<String, String> map = new HashMap<>();
for(int i=0; i<dVals.length; i++) {
combo.addItem(dVals[i]);
map.put(dVals[i], sVals[i]);
}
objectMap.put(s, map);
}
}
propPanel.add(row+".2.right.center", combo);
this.searchMap.put(s, combo);
break;
case "2":
PropertyDateComponent date = new PropertyDateComponent();
propPanel.add(row+".2.right.center", date);
if(ss[2].equals("true")) {
objectMap.put(s, null);
}
this.searchMap.put(s, date);
break;
case "3":
final JTextField field = new JTextField();
field.setEditable(false);
field.setPreferredSize(new Dimension(100, 23));
JButton userBtn = new JButton("选人");
userBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
new SelectUserDialog(field, false).showDialog();
} catch (Exception e) {
e.printStackTrace();
MessageBox.post(AIFUtility.getActiveDesktop(), "错误::"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
userBtn.setPreferredSize(new Dimension(56, 23));
JPanel userPanel = new JPanel(new BorderLayout());
userPanel.add(BorderLayout.CENTER, field);
userPanel.add(BorderLayout.EAST, userBtn);
propPanel.add(row+".2.right.center", userPanel);
this.searchMap.put(s, field);
break;
default:
break;
}
row++;
}
JLabel label = new JLabel("项目承担部门");
propPanel.add(row+".1.left.center", label);
MultiCombo combo = new MultiCombo(depart.split(";"));
combo.setPreferredSize(new Dimension(150, 23));
combo.setEditable(true);
propPanel.add(row+".2.right.center", combo);
this.searchMap.put("项目承担部门", combo);
document = new JCheckBox("文档归档不全");
download = new JCheckBox("下载交付文档");
exportBtn = new JButton("导出");
cancelBtn = new JButton("取消");
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(document);
btnPanel.add(download);
btnPanel.add(exportBtn);
btnPanel.add(cancelBtn);
setLayout(new BorderLayout());
add(BorderLayout.CENTER, propPanel);
add(BorderLayout.SOUTH, btnPanel);
// add(new JLabel(""));
addActionListener(title, options[1], depart);
pack();
if(row>4)
setSize(new Dimension(380, 240+(row-4)*25));
else
setSize(new Dimension(380, 240));
setDefaultLookAndFeelDecorated(true);
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
// setAlwaysOnTop(true);
setVisible(true);
}
private void addActionListener(String title, String options, String depart) {
exportBtn.addActionListener(new ActionListener() {
@SuppressWarnings({ "unchecked", "deprecation" })
@Override
public void actionPerformed(ActionEvent arg0) {
AIFDesktop desktop = AIFUtility.getActiveDesktop();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
File directory = TCUtil.saveExcelChooserAsk(title+sdf.format(new Date()));
if(directory==null)
return;
ProgressReporterDialog reporter = new ProgressReporterDialog("提示");
reporter.reportProgressMessage("正在导出,请稍候...");
new Thread(reporter).start();
new Thread() {
public void run(){
FileInputStream input = null;
FileOutputStream output = null;
try {
if(directory.exists())
directory.delete();
Vector<String> keyV = new Vector<>();
Vector<String> valueV = new Vector<>();
// sdf = new SimpleDateFormat("yyyy-M-d HH:mm");
SimpleDateFormat sdf = new SimpleDateFormat("d-MMM-yyyy hh:mm");
for(String s : searchMap.keySet()) {
JComponent c = searchMap.get(s);
if(c instanceof JTextField) {
String text = ((JTextField)c).getText();
if(!text.isEmpty()) {
keyV.add(s);
valueV.add(text);
}
}else if(c instanceof MultiCombo) {
String text = ((MultiCombo) c).getText().trim();
keyV.add(s);
if(!text.isEmpty()) {
valueV.add(text);
}else {
valueV.add(depart);
}
}else if(c instanceof JComboBox) {
String text = ((JComboBox<String>)c).getSelectedItem().toString();
if(!text.isEmpty()) {
keyV.add(s);
if(objectMap.containsKey(s)) {
valueV.add(((HashMap<String, String>)objectMap.get(s)).get(text));
}else {
valueV.add(text);
}
}
}else if(c instanceof PropertyDateComponent) {
Date date = ((PropertyDateComponent)c).getDate();
if(date==null)
continue;
if(objectMap.containsKey(s)) {
date.setHours(23);
date.setMinutes(59);
}
if(date != null) {
keyV.add(s);
valueV.add(sdf.format(date));
}
}
}
// if(keyV.size()==0) {
// throw new Exception("请填写查询条件");
// }
TCUtil.setByPass(session, true);
TCComponent[] results = TCUtil.query(session, options, keyV, valueV);
TCComponentTcFile[] files = model.getTcFiles();
File file = files[0].getFile(System.getProperty("java.io.tmpdir"));
input = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(input);
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
XSSFCell cell;
int rowCount = sheet.getLastRowNum();
int col = 7;
StringBuilder fileErrors = new StringBuilder("");
for(TCComponent result : results) {
nodes = new HashMap<>();
TCComponentSchedule schedule = (TCComponentSchedule)result;
reporter.reportProgressMessage("正在导出:"+schedule);
TCComponent project = schedule.getReferenceListProperty("project_list")[0];
TCComponentScheduleTask summary = ScheduleHelper.getScheduleSummaryTask(schedule);
HashMap<String, TCComponentScheduleTask> map = getTasks(summary.getChildren());
row = getRow(sheet, 0);
cell = getCell(row, col);
cell.setCellValue(project.getProperty("ml8_ProductCode"));
row = getRow(sheet, 1);
cell = getCell(row, col);
cell.setCellValue(project.getProperty("ml8_ProductType"));
row = getRow(sheet, 2);
cell = getCell(row, col);
cell.setCellValue(schedule.getProperty("ml8_ProjectState"));// 考核阶段
row = getRow(sheet, 3);
cell = getCell(row, col);
cell.setCellValue(project.getReferenceProperty("owning_user").getProperty("user_name"));
row = getRow(sheet, 4);
cell = getCell(row, col);
String ml8_PrjLevel = project.getProperty("ml8_PrjLevel");
int level = ml8_PrjLevel.equals("A")? 4 : (ml8_PrjLevel.equals("B")? 5 : 6);
cell.setCellValue(ml8_PrjLevel);
row = getRow(sheet, 5);
cell = getCell(row, col);
cell.setCellValue(schedule.getProperty("object_name"));
boolean all = true;
Vector<TCComponent> downs = new Vector<>();//TODO 文档归档不全
for(int j=9; j<rowCount; j++) {
row = getRow(sheet, j);
cell = getCell(row, col);
String name = getCell(row, 2).getStringCellValue();
if(!map.containsKey(name)) {
String check = getCell(row, level).getStringCellValue();
if(check.equals("Y")) {
cell.setCellValue("归档要求已修改为N");//否 20230227修改
// all = false;
}
continue;
}
if(map.get(name).getProperty("ml8_FilingRequirements").equals("N")) {
cell.setCellValue("归档要求已修改为N");
continue;
}
if(map.get(name).getProperty("fnd0status").equals("已中止")) {
cell.setCellValue("否");
all = false;
continue;
}
TCComponent[] deliveries = map.get(name).getReferenceListProperty("sch_task_deliverable_list");
if(deliveries==null || deliveries.length==0) {
cell.setCellValue("否");
all = false;
continue;
}
TCComponent delivery = deliveries[0].getReferenceProperty("schedule_deliverable")
.getReferenceProperty("deliverable_inst");
// TCComponent[] sch_task_deliverable_list = map.get(name).getReferenceListProperty("sch_task_deliverable_list");
// for(TCComponent son : sch_task_deliverable_list) {
// TCComponent schedule_deliverable = son.getReferenceProperty("schedule_deliverable");
// TCComponent taskDelivery = schedule_deliverable.getReferenceProperty("deliverable_inst");
// if(taskDelivery == null)
// continue;
// TCComponent[] contents = taskDelivery.getReferenceListProperty("contents");
// }
// System.out.println(name+""+delivery);
if(delivery==null) {
cell.setCellValue("否");
all = false;
}else {
Date released = delivery.getDateProperty("date_released");
if(released==null) {
cell.setCellValue("否");
all = false;
}else {
cell.setCellValue("是");
downs.add(delivery);
}
}
}
if(document.isSelected() && all) {
for(int j=0; j<6; j++) {
row = getRow(sheet, j);
cell = getCell(row, col);
cell.setCellValue("");
}
for(int j=9; j<rowCount; j++) {
row = getRow(sheet, j);
cell = getCell(row, col);
cell.setCellValue("");
}
continue;
}else if(download.isSelected()) {//TODO
// System.out.println("folder"+directory.getPath());
for(TCComponent delivery : downs) {
System.out.println("下载交付物:"+delivery);
String dirs = directory.getPath().substring(0, directory.getPath().length()-5)
+"\\"+schedule.getProperty("object_name").replace("\\", "_").replace("/", "_");
File dir = new File(dirs);
if(!dir.exists() || !dir.isDirectory())
dir.mkdirs();
AIFComponentContext[] cs = delivery.getChildren("contents");
for(AIFComponentContext c : cs) {
TCComponent comp = (TCComponent) c.getComponent();
if(!(comp instanceof TCComponentItemRevision))
continue;
AIFComponentContext[] ccs = comp.getChildren();
for(AIFComponentContext cc : ccs) {
TCComponent ccomp = (TCComponent) cc.getComponent();
if(!(ccomp instanceof TCComponentDataset))
continue;
try {
TCComponentTcFile[] cfiles = ((TCComponentDataset)ccomp).getTcFiles();
cfiles[0].getFile(dirs);
}catch(Exception e) {
fileErrors.append(schedule+"中"+delivery+"文件夹下"+ccomp+"下载失败\n");
}
}
}
}
}
col++;
}
TCUtil.setByPass(session, false);
output = new FileOutputStream(file.getPath());
wb.write(output);
input.close();
output.close();
file.renameTo(directory);
reporter.requestCanceling();
if(fileErrors.length()>0)
MessageBox.post(desktop, fileErrors.toString(), "ERROR", MessageBox.ERROR);
else
MessageBox.post(desktop, "导出完成", "INFO", MessageBox.INFORMATION);
dispose();
}catch(Exception e1) {
reporter.requestCanceling();
e1.printStackTrace();
MessageBox.post(ProjectDocReportDialog.this, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}finally {
if(input!=null)
try {
input.close();
} catch (Exception e) {
e.printStackTrace();
}
if(output!=null)
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
}
});
cancelBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
}
private XSSFRow getRow(XSSFSheet sheet, int i) throws Exception {
XSSFRow row = sheet.getRow(i);
if(row==null)
row = sheet.createRow(i);
return row;
}
private XSSFCell getCell(XSSFRow row, int col) throws Exception {
XSSFCell cell = row.getCell(col);
if(cell==null)
cell = row.createCell(col);
if(col>7)
cell.setCellStyle(getCell(row, 7).getCellStyle());
return cell;
}
private HashMap<String, TCComponentScheduleTask> getTasks(AIFComponentContext[] parent) throws Exception {
// AIFComponentContext[] children = parent.getChildren();
HashMap<String, TCComponentScheduleTask> tasks = new HashMap<>();
for(AIFComponentContext c : parent) {
InterfaceAIFComponent comp = c.getComponent();
if(!(comp instanceof TCComponentScheduleTask))
continue;
TCComponentScheduleTask task = (TCComponentScheduleTask) comp;
System.out.println(task+"=="+task.getProperty("fnd0status"));
if(task.getProperty("fnd0status").equals("已中止") && task.getProperty("ml8_FilingRequirements").equals("N"))
//task.getStringProperty("fnd0status").equals("aborted") ||
continue;
if(!task.getProperty("ml8_CutOrNot").isEmpty())
continue;
if(!task.getProperty("ml8_AssessmentNode").isEmpty()) {
nodes.put(task.getProperty("object_name"), task);
}
AIFComponentContext[] children = task.getChildren("child_task_taglist");
if(children.length==0) {
String name = task.getProperty("object_name");
if(!tasks.containsKey(name)) {
tasks.put(name, task);
}else if(tasks.get(name).getProperty("fnd0status").equals("已中止")) {
tasks.put(name, task);
}
}else {
HashMap<String, TCComponentScheduleTask> map = getTasks(children);
if(map.size()>0) {
for(String s : map.keySet()) {
tasks.put(s, map.get(s));
}
}
}
}
return tasks;
}
/*private String getStage(HashMap<String, TCComponentScheduleTask> nodes) throws Exception {
String[] stages = new String[] { "方案评审(PDCP", "样机评审", "小批评审", "试生产评审(首单)" };
if(!nodes.containsKey(stages[0]))
return "";
for(int i=0; i<stages.length; i++) {
if(nodes.containsKey(stages[i]) && !nodes.get(stages[i]).getProperty("fnd0state").equals("完成"))
return stages[i];
}
return "结项";
}*/
public String[] getDynamicLOV(TCComponentListOfValues lov) throws Exception {
Vector<String> lovDisplayValueList = new Vector<>();
// lovDisplayValueList.add("");
Vector<String> lovValueList = new Vector<>();
LOVService lovService = LOVService.getService(session);
InitialLovData input = new InitialLovData();
LovFilterData filter = new LovFilterData();
filter.sortPropertyName = "object_name";
filter.order = 1;
filter.numberToReturn = 100;
filter.maxResults = 100;
input.lov = lov;
input.filterData = filter;
LOVSearchResults result = lovService.getInitialLOVValues(input);
// StringBuffer sb = new StringBuffer();
// sb.append(">>");
for (LOVValueRow row : result.lovValues) {
Map<String, String[]> map = row.propDisplayValues;
Map<String, String[]> realmap = row.propInternalValues;
for (String key : map.keySet()) {
// sb.append("UID:" + row.uid + ",key:" + key + "value:" + map.get(key)[0]);
// sb.append("\n");
lovDisplayValueList.add(map.get(key)[0]);
lovValueList.add(realmap.get(key)[0]);
}
}
// System.out.println("StringBuffer:"+sb.toString());
return lovDisplayValueList.toArray(new String[lovDisplayValueList.size()]);
}
}

@ -0,0 +1,43 @@
package com.connor.lidy.report;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class ProjectDocReportHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("ProjectDocReportHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
String pref = "ML8_ProjectDocReport", title = "项目文档归档明细-产品类";
TCSession session = (TCSession) app.getSession();
String options[] = session.getPreferenceService().getStringValues(pref);
if(options==null || options.length<2) {
MessageBox.post(desktop, "首选项"+pref+"配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
TCComponent model = session.stringToComponent(options[0]);//A_OAAIm_5kSPsC
if(model==null || !model.isTypeOf("MSExcelX")) {
MessageBox.post(desktop, "首选项"+pref+"中模板UID配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
new ProjectDocReportDialog(session, title, options, (TCComponentDataset)model);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
return null;
}
}

@ -0,0 +1,56 @@
package com.connor.lidy.report;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class StandardRateReportHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("StandardRateReportHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
TCSession session = (TCSession) app.getSession();
InterfaceAIFComponent target = app.getTargetComponent();
if(target==null) {
MessageBox.post(desktop, "请选择零组件或原辅材料版本进行导出", "ERROR", MessageBox.ERROR);
return null;
}
TCComponent comp = (TCComponent)target;
if(!comp.isTypeOf(new String[] { "ML8_WashingRevision", "ML8_ColdRevision", "ML8_RefrigeratorRevision", "ML8_OthersRevision" })) {
MessageBox.post(desktop, "请选择零组件或原辅材料版本进行导出", "ERROR", MessageBox.ERROR);
return null;
}
String option = session.getPreferenceService().getStringValue("ML8_StandardRateReport");
if(option==null || option.isEmpty()) {
MessageBox.post(desktop, "首选项ML8_StandardRateReport配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
TCComponent model = session.stringToComponent(option);//ASFAAInA5kSPsC
if(model==null || !model.isTypeOf("MSExcelX")) {
MessageBox.post(desktop, "首选项ML8_StandardRateReport中模板UID配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
StandardRateReportOperation operation = new StandardRateReportOperation(session, (TCComponentItemRevision)target, (TCComponentDataset)model);
session.queueOperation(operation);
// MessageBox.post(desktop, "传递结果:", "提示", MessageBox.INFORMATION);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
return null;
}
}

@ -0,0 +1,212 @@
package com.connor.lidy.report;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFOperation;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentBOMLine;
import com.teamcenter.rac.kernel.TCComponentBOMWindow;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentRevisionRule;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
public class StandardRateReportOperation extends AbstractAIFOperation {
private TCSession session;
private TCComponentItemRevision target;
private TCComponentDataset model;
// private XSSFRow sourceRow;
private HashSet<String> idSet;
private String ProductCode;
private double[] count;
public StandardRateReportOperation(TCSession session, TCComponentItemRevision target, TCComponentDataset model) {
this.session = session;
this.target = target;
this.model = model;
}
@Override
public void executeOperation() throws Exception {
AIFDesktop desktop = AIFUtility.getActiveDesktop();
FileInputStream input = null;
FileOutputStream output = null;
try {
idSet = new HashSet<>();
count = new double[] { 0, 0, 0 };
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
File directory = TCUtil.saveExcelChooser("标准化系数报表"+sdf.format(now));
if(directory==null)
return;
if(directory.exists())
directory.delete();
String path = directory.getPath();
TCComponentRevisionRule[] rules = TCComponentRevisionRule.listAllRules(session);
TCComponentRevisionRule taskRule = null;
for(TCComponentRevisionRule rule : rules) {
System.out.println("rule:"+rule);
if(rule.toString().equals("产品明细表导出规则")) {
taskRule = rule;
break;
}
}
TCComponentBOMWindow window = TCUtil.getWindow(session, taskRule);
TCComponentBOMLine line = TCUtil.getBOMLine(session, window, target);
AIFComponentContext[] pfs = target.getChildren("ML8_ProjectRelation");
String ProductType;
if(pfs!=null && pfs.length>0) {
TCComponent pf = (TCComponent) pfs[0].getComponent();
ProductCode = pf.getProperty("ml8_ProductCode");//产品代号
ProductType = pf.getProperty("ml8_ProductType");//产品型号
}else {
ProductCode = target.getProperty("ml8_ProductCode");
ProductType = "";
}
System.out.println("target:"+target+"=="+ProductCode);
// TCComponentItem item = line.getItem();
// if(!(item.isTypeOf("ML8_RawMaterial")) && !(line.getProperty("ML8_MBOM").equals("MBOM"))) {
// count[0]++;
// }
recycelBom(line.getChildren());
window.close();
TCComponentTcFile[] files = model.getTcFiles();
File file = files[0].getFile(System.getProperty("java.io.tmpdir"));
input = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(input);
XSSFSheet sheet = wb.getSheetAt(0);
// XSSFRow row;
XSSFCell cell;
System.out.println(count[0]+"=="+count[1]+"=="+count[2]);
cell = getCell(getRow(sheet, 1), 1);
cell.setCellValue(ProductCode);//产品代号
cell = getCell(getRow(sheet, 6), 1);
cell.setCellValue(ProductType);//产品型号
// cell = getCell(getRow(sheet, 1), 1);
// cell.setCellValue(target.getProperty("ml8_ProductCode"));//产品代号
cell = getCell(getRow(sheet, 2), 1);
cell.setCellValue(count[0]); //总件数∑
cell = getCell(getRow(sheet, 3), 1);
cell.setCellValue(count[0]==0 ? 0:(count[0]-count[1])/count[0]);//标准化率
cell = getCell(getRow(sheet, 4), 1);
cell.setCellValue(count[0]==0 ? 0:count[2]/count[0]); //通用化率
cell = getCell(getRow(sheet, 5), 1);
cell.setCellValue(count[1]); //专用件数
// cell = getCell(getRow(sheet, 6), 1);
// cell.setCellValue(target.getProperty("ml8_ProductType"));//产品型号
output = new FileOutputStream(file.getPath());
wb.write(output);
input.close();
output.close();
// System.out.println("file:"+file.getPath());
String newPath = System.getProperty("java.io.tmpdir")+path.substring(path.lastIndexOf("\\"));
File reFile = new File(newPath);
file.renameTo(reFile);
// System.out.println("new directory:"+reFile.getPath());
reFile.renameTo(directory);
MessageBox.post(desktop, "导出完成", "INFO", MessageBox.INFORMATION);
} catch (Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}finally {
if(input!=null)
input.close();
if(output!=null)
output.close();
}
}
private XSSFRow getRow(XSSFSheet sheet, int num) throws Exception {
XSSFRow row = sheet.getRow(num);
if(row==null)
row = sheet.createRow(num);
return row;
}
private XSSFCell getCell(XSSFRow row, int col) throws Exception {
XSSFCell cell = row.getCell(col);
if(cell==null)
cell = row.createCell(col);
// if(row.getRowNum()>2)
// cell.setCellStyle(getCell(sourceRow, col).getCellStyle());
return cell;
}
private void recycelBom(AIFComponentContext[] context) throws Exception {
for(AIFComponentContext c : context) {
TCComponentBOMLine line = (TCComponentBOMLine)c.getComponent();
String id = line.getProperty("bl_item_item_id");
if(idSet.contains(id))
continue;
idSet.add(id);
System.out.println("line:"+line);
// System.out.println(line+":"+count[0]+"=="+count[1]+"=="+count[2]);
TCComponentItem item = line.getItem();
if(item.isTypeOf("ML8_RawMaterial") || line.getProperty("ML8_MBOM").equals("MBOM"))
continue;
System.out.println("总数 "+id);
count[0]++;//总数
// if(line.getItemRevision().getProperty("ml8_FigureNum").equals(target.getProperty("item_id"))) {
TCComponentItemRevision rev = line.getItemRevision();
String figureNum = rev.getProperty("ml8_FigureNum");
if(figureNum.contains(".")) {
figureNum = figureNum.substring(0, figureNum.indexOf("."));
}
System.out.println("ml8_ProductCode:"+figureNum);
// if(rev.getProperty("ml8_ProductCode").equals(ProductCode)) {
if(figureNum.equals(ProductCode)) {
System.out.println("专用 "+id);
count[1]++;//专用
}
// AIFComponentContext[] ML8_ProjectRelation = rev.getChildren("ML8_ProjectRelation");
// if(ML8_ProjectRelation==null || ML8_ProjectRelation.length==0) {
//// throw new Exception(line+"版本下未找到项目名称表单");
//// System.out.println("ml8_ProductCode:"+rev.getProperty("ml8_ProductCode"));
// System.out.println("ml8_ProductCode:"+rev.getProperty("ml8_FigureNum"));
//// if(rev.getProperty("ml8_ProductCode").equals(ProductCode)) {
// if(rev.getProperty("ml8_FigureNum").equals(ProductCode)) {
// System.out.println("专用 "+id);
// count[1]++;//专用
// }
// }else {
// String s = ML8_ProjectRelation[0].getComponent().getProperty("ml8_FigureNum");
//// String s = ML8_ProjectRelation[0].getComponent().getProperty("ml8_ProductCode");
// System.out.println("ml8_ProductCode:"+s);
// if(s.equals(ProductCode)) {
// System.out.println("专用 "+id);
// count[1]++;//专用
// }
// }
System.out.println("ml8_Status:"+item.getProperty("ml8_Status"));
if(item.getProperty("ml8_Status").contains("优选")) {
System.out.println("优选 "+id);
count[2]++;//优选
}
AIFComponentContext[] child = line.getChildren();
if(child!=null && child.length>0)
recycelBom(line.getChildren());
}
}
}

@ -0,0 +1,293 @@
package com.connor.lidy.report;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import com.connor.lidy.util.MultiCombo;
import com.connor.lidy.util.ProgressReporterDialog;
import com.connor.lidy.util.SelectUserDialog;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentListOfValues;
import com.teamcenter.rac.kernel.TCComponentListOfValuesType;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.stylesheet.PropertyDateComponent;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.services.rac.core.LOVService;
import com.teamcenter.services.rac.core._2013_05.LOV.InitialLovData;
import com.teamcenter.services.rac.core._2013_05.LOV.LOVSearchResults;
import com.teamcenter.services.rac.core._2013_05.LOV.LOVValueRow;
import com.teamcenter.services.rac.core._2013_05.LOV.LovFilterData;
public class TechProjectBoardDialog extends AbstractAIFDialog {
private static final long serialVersionUID = 1L;
private TCSession session;
private TCComponentDataset model;
private JButton exportBtn;
private JButton cancelBtn;
private JComponent[] comps;
public TechProjectBoardDialog(TCSession session, String[] options, TCComponentDataset model, String[] departments) throws Exception {
super(AIFUtility.getActiveDesktop());
this.session = session;
this.model = model;
this.comps = new JComponent[8];
System.out.println("group:"+session.getGroup()+">>"+session.getGroup().getGroupName());
String group = session.getGroup().toString().trim();
String depart = "";
for(String s : departments) {
String[] ss = s.split(":");
if(group.equals(ss[0])) {
depart = ss[1];
}
}
if(depart.isEmpty())
throw new Exception("当前部门无法查询,请联系系统管理员!");
setTitle("项目运行跟踪表-技术类");
JPanel propPanel = new JPanel(new PropertyLayout(70, 5, 10, 5, 5, 5));
TCComponentListOfValuesType lovType = (TCComponentListOfValuesType)session.getTypeComponent("ListOfValues");
// TCComponentListOfValues[] lov = lovType.find("ML8_ProjectCategory_LOV");
// String[] vals = getDynamicLOV(lov[0]);
// System.out.println("ML8_ProjectCategory_LOV:"+lov[0].getType()+"=="+vals.length);
JLabel label1 = new JLabel("产品代号");
propPanel.add("1.1.left.center", label1);
JTextField text1 = new JTextField();
text1.setPreferredSize(new Dimension(155, 23));
propPanel.add("1.2.right.center", text1);
comps[0] = text1;
JLabel label2 = new JLabel("项目级别");
propPanel.add("2.1.left.center", label2);
JComboBox<String> combo2 = new JComboBox<>();
combo2.setPreferredSize(new Dimension(155, 23));
combo2.addItem("");
TCComponentListOfValues[] lovs2 = lovType.find("ML8_ProjectLevel_LOV");
for(String item : getDynamicLOV(lovs2[0])) {
combo2.addItem(item);
}
propPanel.add("2.2.right.center", combo2);
comps[1] = combo2;
JLabel label3 = new JLabel("项目立项时间大于");
propPanel.add("3.1.left.center", label3);
PropertyDateComponent date3 = new PropertyDateComponent();
propPanel.add("3.2.right.center", date3);
comps[2] = date3;
JLabel label4 = new JLabel("项目立项时间小于");
propPanel.add("4.1.left.center", label4);
PropertyDateComponent date4 = new PropertyDateComponent();
propPanel.add("4.2.right.center", date4);
comps[3] = date4;
JLabel label5 = new JLabel("项目经理");
propPanel.add("5.1.left.center", label5);
JPanel personPanel = new JPanel(new PropertyLayout(5, 5, 0, 5, 5, 5));
JTextField text5 = new JTextField();
text5.setPreferredSize(new Dimension(105, 23));
text5.setEditable(false);
personPanel.add("1.1.center.center", text5);
JButton personBtn = new JButton("...");
personBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
new SelectUserDialog(text5, false).showDialog();
} catch (Exception e) {
e.printStackTrace();
MessageBox.post(TechProjectBoardDialog.this, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
personBtn.setPreferredSize(new Dimension(45, 23));
personPanel.add("1.2.center.center", personBtn);
propPanel.add("5.2.center.center", personPanel);
comps[4] = text5;
JLabel label6 = new JLabel("项目承担部门");
propPanel.add("6.1.left.center", label6);
// JComboBox<String> combo6 = new JComboBox<>();
// combo6.setPreferredSize(new Dimension(155, 23));
// combo6.addItem("");
//// TCComponentListOfValues[] lovs6 = lovType.find("ML8_PrjDepartment_LOV");
//// for(String item : getDynamicLOV(lovs6[0])) {
// for(String item : depart.split(";")) {
// combo6.addItem(item);
// }
MultiCombo combo6 = new MultiCombo(depart.split(";"));
combo6.setEditable(true);
propPanel.add("6.2.right.center", combo6);
combo6.setPreferredSize(new Dimension(155, 23));
comps[5] = combo6;
JLabel label7 = new JLabel("项目状态");
propPanel.add("7.1.left.center", label7);
JComboBox<String> combo7 = new JComboBox<>();
combo7.setPreferredSize(new Dimension(155, 23));
combo7.addItem("");
TCComponentListOfValues[] lovs7 = lovType.find("ML8_MissionPhase_LOV");
for(String item : getDynamicLOV(lovs7[0])) {
combo7.addItem(item);
// System.out.println("item:"+item);
}
propPanel.add("7.2.right.center", combo7);
comps[6] = combo7;
JCheckBox showEarly = new JCheckBox("显示往年已结项");
comps[7] = showEarly;
exportBtn = new JButton("导出");
cancelBtn = new JButton("取消");
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(showEarly);
btnPanel.add(exportBtn);
btnPanel.add(cancelBtn);
setLayout(new BorderLayout());
add(BorderLayout.CENTER, propPanel);
add(BorderLayout.SOUTH, btnPanel);
// add(new JLabel(""));
addActionListener(depart, options);
pack();
setSize(new Dimension(380, 300));
setDefaultLookAndFeelDecorated(true);
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
// setAlwaysOnTop(true);
setVisible(true);
}
private void addActionListener(String depart, String[] options) {
exportBtn.addActionListener(new ActionListener() {
@SuppressWarnings("deprecation")
@Override
public void actionPerformed(ActionEvent arg0) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
File directory = TCUtil.saveExcelChooserAsk("项目运行跟踪表-技术类"+sdf.format(new Date()));
if(directory==null)
return;
ProgressReporterDialog reporter = new ProgressReporterDialog("提示");
reporter.reportProgressMessage("正在导出,请稍候...");
new Thread(reporter).start();
new Thread() {
public void run(){
try {
SimpleDateFormat sdf = new SimpleDateFormat("d-MMM-yyyy hh:mm");
Vector<String> keyV = new Vector<>();
Vector<String> valV = new Vector<>();
String text1 = ((JTextField) comps[0]).getText();
if(!text1.isEmpty()) {
keyV.add("产品代号");
valV.add(text1);
}
String text2 = ((JComboBox<?>) comps[1]).getSelectedItem().toString();
if(!text2.isEmpty()) {
keyV.add("项目级别");
valV.add(text2);
}
// System.out.println("项目立项时间大于:"+((PropertyDateComponent) comps[2]).getDateString());
Date date3 = ((PropertyDateComponent) comps[2]).getDate();
if(date3 != null) {
keyV.add("项目立项时间大于");
valV.add(sdf.format(date3));
}
// System.out.println("项目立项时间小于:"+((PropertyDateComponent) comps[3]).getDateString());
Date date4 = ((PropertyDateComponent) comps[3]).getDate();
if(date4 != null) {
keyV.add("项目立项时间小于");
valV.add(sdf.format(date4));
}
String text5 = ((JTextField) comps[4]).getText();
if(!text5.isEmpty()) {
keyV.add("项目经理");
valV.add(text5);
}
// String text6 = ((JComboBox<?>) comps[5]).getSelectedItem().toString();
String text6 = ((MultiCombo) comps[5]).getText().trim();
if(!text6.isEmpty()) {
keyV.add("项目承担部门");
valV.add(text6);
}else {
keyV.add("项目承担部门");
valV.add(depart);
}
String text7 = ((JComboBox<?>) comps[6]).getSelectedItem().toString();
if(!text7.isEmpty()) {
keyV.add("项目状态");
valV.add(text7);
}
boolean oldyear = ((JCheckBox) comps[7]).isSelected();
new TechProjectBoardOperation(session, options, model, directory, reporter, keyV, valV, oldyear).executeOperation();
}catch(Exception e1) {
reporter.requestCanceling();
e1.printStackTrace();
MessageBox.post(TechProjectBoardDialog.this, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
}.start();
}
});
cancelBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
}
public String[] getDynamicLOV(TCComponentListOfValues lov) throws Exception {
Vector<String> lovDisplayValueList = new Vector<>();
// lovDisplayValueList.add("");
// Vector<String> lovValueList = new Vector<>();
LOVService lovService = LOVService.getService(session);
InitialLovData input = new InitialLovData();
LovFilterData filter = new LovFilterData();
filter.sortPropertyName = "object_name";
filter.order = 1;
filter.numberToReturn = 100;
filter.maxResults = 100;
input.lov = lov;
input.filterData = filter;
LOVSearchResults result = lovService.getInitialLOVValues(input);
// StringBuffer sb = new StringBuffer();
// sb.append(">>");
for (LOVValueRow row : result.lovValues) {
Map<String, String[]> map = row.propDisplayValues;
// Map<String, String[]> realmap = row.propInternalValues;
for (String key : map.keySet()) {
if(!key.equals("object_name"))
continue;
// sb.append("UID:" + row.uid + ",key:" + key + "value:" + map.get(key)[0]);
// sb.append("\n");
String[] v = map.get(key);
lovDisplayValueList.add(v[0]);
// lovValueList.add(realmap.get(key)[0]);
// System.out.println("key:"+key+"=="+v.length+">>"+v[0]);
}
}
// System.out.println("StringBuffer:"+sb.toString());
return lovDisplayValueList.toArray(new String[lovDisplayValueList.size()]);
}
}

@ -0,0 +1,48 @@
package com.connor.lidy.report;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class TechProjectBoardHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("TechProjectBoardHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
TCSession session = (TCSession) app.getSession();
// ProjectBoardDialog.getComps(session.stringToComponent("AyJAAIWu5kSPsC"));
String options[] = session.getPreferenceService().getStringValues("ML8_TechProjectReport");
if(options==null || options.length<2) {
MessageBox.post(desktop, "首选项ML8_TechProjectReport配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
TCComponent model = session.stringToComponent(options[0]);//wtGAAIma5kSPsC SearchProjectSchedule
if(model==null || !model.isTypeOf("MSExcelX")) {
MessageBox.post(desktop, "首选项ML8_TechProjectReport中模板UID配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
String departments[] = session.getPreferenceService().getStringValues("ML8_TechProjectDepart");
if(departments==null || departments.length==0) {
MessageBox.post(desktop, "首选项ML8_TechProjectDepart配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
new TechProjectBoardDialog(session, options, (TCComponentDataset)model, departments);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
return null;
}
}

@ -0,0 +1,346 @@
package com.connor.lidy.report;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Vector;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.connor.lidy.util.ProgressReporterDialog;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFOperation;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentSchedule;
import com.teamcenter.rac.kernel.TCComponentScheduleTask;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.schedule.scheduler.componentutils.ScheduleHelper;
import com.teamcenter.rac.util.MessageBox;
public class TechProjectBoardOperation extends AbstractAIFOperation {
private TCSession session;
private String options[];
private TCComponentDataset model;
private File directory;
private ProgressReporterDialog reporter;
private Vector<String> keyV;
private Vector<String> valV;
private boolean oldyear;
public TechProjectBoardOperation(TCSession session, String options[], TCComponentDataset model, File directory, ProgressReporterDialog reporter,
Vector<String> keyV, Vector<String> valV, boolean oldyear) {
this.session = session;
this.options = options;
this.model = model;
this.directory = directory;
this.reporter = reporter;
this.keyV = keyV;
this.valV = valV;
this.oldyear = oldyear;
}
@Override
public void executeOperation() throws Exception {
AIFDesktop desktop = AIFUtility.getActiveDesktop();
FileInputStream input = null;
FileOutputStream output = null;
XSSFWorkbook wb = null;
try {
HashMap<Integer, String[]> exportMap = new HashMap<>();
for(String s : options) {
if(s.contains("=")) {
String[] ss = s.split("=");
try {
exportMap.put(Integer.parseInt(ss[0])-1, ss);
}catch(NumberFormatException e) {
char[] cs = ss[0].toCharArray();
int col = 0;
for(int i=0; i<cs.length; i++) {
int n = ((int)cs[i])-64;
col += n*Math.pow(26, cs.length-i-1);
}
exportMap.put(col-1, ss);
}
}
}
if(directory.exists())
directory.delete();
// if(keyV.size()==0) {
// throw new Exception("请填写查询条件");
// }
TCUtil.setByPass(session, true);
TCComponent[] results = TCUtil.query(session, options[1], keyV, valV);
System.out.println("查询结果数:"+results.length);
TCComponentTcFile[] files = model.getTcFiles();
File file = files[0].getFile(System.getProperty("java.io.tmpdir"));
input = new FileInputStream(file);
wb = new XSSFWorkbook(input);
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
XSSFCell cell;
String[] assessments = new String[] { "方案评审(PDCP", "ADCP评审", "转移评审" };//
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
Date now = new Date();
int i = 2;
for(TCComponent result : results) {
System.out.println("正在导出:"+result);
reporter.reportProgressMessage("正在导出:"+result);
row = getRow(sheet, i);
// cell = getCell(row, 0);
// cell.setCellValue(i+1);
TCComponent[] comp = getComps(result);
boolean noForm = comp[3]==null, noProj = comp[1]==null;
HashMap<String, TCComponentScheduleTask> nodes = getTasks((TCComponentScheduleTask)comp[2]);
// System.out.println("nodes"+ nodes.size());
if(nodes.size()==0)
continue;
String stage, status = result.getProperty("fnd0status");
if(status.equals("已结束") || status.equals("已中止")) {
stage = status;
}else {
// stage = getStage(nodes);//TODO
stage = result.getProperty("ml8_ProjectState");
}
Date finish = result.getDateProperty("fnd0SSTActualFinish");
if(!oldyear && finish!=null && !sdf.format(finish).equals(sdf.format(now))) {
if(stage.equals("结项") || stage.equals("已中止"))
continue;
}
cell = getCell(row, 0);
cell.setCellValue(i-1);//序号
cell = getCell(row, 1);
cell.setCellValue(noProj ? "":comp[1].getProperty("ml8_PrjDepartment"));//项目单元
cell = getCell(row, 2);
cell.setCellValue(noProj ? "":comp[1].getProperty("ml8_PrjType"));//项目类别
cell = getCell(row, 3);
cell.setCellValue(stage);//项目运行阶段
cell = getCell(row, 4);
cell.setCellValue(noProj ? "":comp[1].getProperty("project_id"));//项目编号
cell = getCell(row, 5);
cell.setCellValue(noProj ? "":comp[1].getProperty("project_name"));//项目名称
cell = getCell(row, 6);
cell.setCellValue(noProj ? "":comp[1].getProperty("ml8_PrjLevel"));//项目级别
cell = getCell(row, 7);
// cell.setCellValue(noProj ? "":comp[1].getReferenceProperty("owning_user").getProperty("user_name"));//项目经理
cell.setCellValue(noForm ? "":comp[3].getProperty("ml8_ProjectManagement1"));//项目经理
cell = getCell(row, 8);
if(!noProj)
setDateValue(cell, comp[1], "ml8_ItemTime");//立项时间
if(!noForm) {
cell = getCell(row, 9);
setDateValue(cell, comp[3], "ml8_PDCP");//PDCP合同进程
cell = getCell(row, 10);
setDateValue(cell, comp[3], "ml8_CPDCP");//PDCP变更进程
}
if(nodes.containsKey(assessments[0])) {
TCComponentScheduleTask task = nodes.get(assessments[0]);
cell = getCell(row, 11);
setDateValue(cell, task, "actual_finish_date");//完成时间
cell = getCell(row, 12);
Date cdate = noForm? null:comp[3].getDateProperty("ml8_CPDCP");
Date date = noForm? null:(cdate==null ? comp[3].getDateProperty("ml8_PDCP"):cdate);
cell.setCellValue(getDateD(task.getDateProperty("actual_finish_date"), date));
}
if(!noForm) {
cell = getCell(row, 13);
setDateValue(cell, comp[3], "ml8_ADCP");//ADCP合同进程
cell = getCell(row, 14);
setDateValue(cell, comp[3], "ml8_CADCP");//ADCP变更进程
}
if(nodes.containsKey(assessments[1])) {
TCComponentScheduleTask task = nodes.get(assessments[1]);
cell = getCell(row, 15);
setDateValue(cell, task, "actual_finish_date");//完成时间
cell = getCell(row, 16);
Date cdate = noForm? null:comp[3].getDateProperty("ml8_CADCP");
Date date = noForm? null:(cdate==null ? comp[3].getDateProperty("ml8_ADCP"):cdate);
cell.setCellValue(getDateD(task.getDateProperty("actual_finish_date"), date));
}
if(!noForm) {
cell = getCell(row, 17);
setDateValue(cell, comp[3], "ml8_Transfer");//转移合同进程
cell = getCell(row, 18);
setDateValue(cell, comp[3], "ml8_Ctransfer");//转移变更进程
}
if(nodes.containsKey(assessments[2])) {
TCComponentScheduleTask task = nodes.get(assessments[2]);
cell = getCell(row, 19);
setDateValue(cell, task, "actual_finish_date");//完成时间
cell = getCell(row, 20);
Date cdate = noForm? null:comp[3].getDateProperty("ml8_Ctransfer");
Date date = noForm? null:(cdate==null ? comp[3].getDateProperty("ml8_Transfer"):cdate);
cell.setCellValue(getDateD(task.getDateProperty("actual_finish_date"), date));
}
// System.out.println("date"+getDateD(comp[3].getDateProperty("ml8_PDCP"), comp[3].getDateProperty("ml8_Prototype")));
AIFComponentContext[] contexts = TCUtil.getPseudoFolder(comp[0], "ML8_ECRProductQCD_rel").getChildren();
int changeCount = 0;
StringBuilder change = new StringBuilder("");
for(AIFComponentContext c : contexts) {
InterfaceAIFComponent compo = c.getComponent();
if(!(compo instanceof TCComponentItem))
continue;
TCComponentItem item = (TCComponentItem)compo;
TCComponentItemRevision[] revs = item.getReleasedItemRevisions();
if(revs==null || revs.length==0)
continue;
change.append(revs[0].getProperty("ml8_OAProcessNo")).append("-").append(revs[0].getProperty("ml8_CReason")).append("\n");
changeCount++;
}
cell = getCell(row, 21);
cell.setCellValue(changeCount);//变更次数
cell = getCell(row, 22);
cell.setCellValue(change.toString());//变更原因
for(Integer col : exportMap.keySet()) {
cell = getCell(row, col);
String[] ss = exportMap.get(col);
switch(ss[1]) {
case "1":
cell.setCellValue(comp[0].getProperty(ss[2]));
break;
case "2":
cell.setCellValue(noProj ? "":comp[1].getProperty(ss[2]));
break;
case "3":
cell.setCellValue(noForm? "":comp[3].getProperty(ss[2]));
break;
default:
break;
}
}
i++;
}
output = new FileOutputStream(file.getPath());
wb.write(output);
input.close();
output.close();
file.renameTo(directory);
reporter.requestCanceling();
MessageBox.post(desktop, "导出完成", "INFO", MessageBox.INFORMATION);
// dispose();
}catch(Exception e1) {
reporter.requestCanceling();
e1.printStackTrace();
MessageBox.post(desktop, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}finally {
TCUtil.setByPass(session, false);
if(input!=null)
try {
input.close();
} catch (Exception e) {
e.printStackTrace();
}
if(output!=null)
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private XSSFRow getRow(XSSFSheet sheet, int num) throws Exception {
XSSFRow row = sheet.getRow(num);
if(row==null)
row = sheet.createRow(num);
return row;
}
private XSSFCell getCell(XSSFRow row, int col) throws Exception {
XSSFCell cell = row.getCell(col);
if(cell==null)
cell = row.createCell(col);
// if(row.getRowNum()>1)
// cell.setCellStyle(getCell(sourceRow, col).getCellStyle());
return cell;
}
private TCComponent[] getComps(TCComponent comp) throws Exception {
TCComponent[] comps = new TCComponent[4];
if(comp instanceof TCComponentSchedule) {
comps[0] = comp;
TCComponent[] ps = comp.getReferenceListProperty("project_list");
if(ps==null || ps.length==0)
comps[1] = null;
else
comps[1] = ps[0];
comps[2] = ScheduleHelper.getScheduleSummaryTask((TCComponentSchedule)comp);
TCComponent[] refs = comp.getReferenceListProperty("IMAN_reference");
comps[3] = null;
if(refs!=null && refs.length>0) {
for(TCComponent c : refs) {
if(c.isTypeOf("ML8_TechQCDForm1")) {
Date states = c.getDateProperty("date_released");
if(states!=null) {
comps[3] = c;
break;
}
}
}
}
// AIFComponentContext[] children = task.getChildren();
// if(children!=null && children.length>0) {
// System.out.println("child:"+children[0].getComponent());
// }
}
return comps;
}
private HashMap<String, TCComponentScheduleTask> getTasks(TCComponentScheduleTask parent) throws Exception {
AIFComponentContext[] children = parent.getChildren();
HashMap<String, TCComponentScheduleTask> nodes = new HashMap<>();
for(AIFComponentContext c : children) {
InterfaceAIFComponent comp = c.getComponent();
if(!(comp instanceof TCComponentScheduleTask))
continue;
TCComponentScheduleTask task = (TCComponentScheduleTask) comp;
String node = task.getProperty("ml8_AssessmentNode");
// System.out.println(task+"=="+ node);
if(!node.isEmpty() && !nodes.containsKey(node)) {
nodes.put(node, task);
}
HashMap<String, TCComponentScheduleTask> map = getTasks(task);
if(map.size()>0) {
for(String s : map.keySet()) {
nodes.put(s, map.get(s));
}
}
}
return nodes;
}
/*private String getStage(HashMap<String, TCComponentScheduleTask> nodes) throws Exception {
String[] stages = new String[] { "方案评审(PDCP", "ADCP评审", "转移评审" };
if(!nodes.containsKey(stages[0]))
return "";
for(int i=0; i<stages.length; i++) {
if(nodes.containsKey(stages[i]) && !nodes.get(stages[i]).getProperty("fnd0state").equals("完成"))
return stages[i];
}
return "结项";
}*/
private String getDateD(Date date1, Date date2) {
if(date1==null || date2==null)
return "";
else
return (date1.getTime()-date2.getTime())/86400000+"";
// return date1.getDate()-date2.getDate()+"";
}
private void setDateValue(XSSFCell cell, TCComponent comp, String prop) throws Exception {
if(comp.getDateProperty(prop)!=null)
cell.setCellValue(comp.getDateProperty(prop));
}
}

@ -0,0 +1,571 @@
package com.connor.lidy.report;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.connor.lidy.util.MultiCombo;
import com.connor.lidy.util.ProgressReporterDialog;
import com.connor.lidy.util.SelectUserDialog;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.ListOfValuesInfo;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentListOfValues;
import com.teamcenter.rac.kernel.TCComponentListOfValuesType;
import com.teamcenter.rac.kernel.TCComponentSchedule;
import com.teamcenter.rac.kernel.TCComponentScheduleTask;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.schedule.scheduler.componentutils.ScheduleHelper;
import com.teamcenter.rac.stylesheet.PropertyDateComponent;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.services.rac.core.LOVService;
import com.teamcenter.services.rac.core._2013_05.LOV.InitialLovData;
import com.teamcenter.services.rac.core._2013_05.LOV.LOVSearchResults;
import com.teamcenter.services.rac.core._2013_05.LOV.LOVValueRow;
import com.teamcenter.services.rac.core._2013_05.LOV.LovFilterData;
public class TechProjectDocReportDialog extends AbstractAIFDialog {
private static final long serialVersionUID = 1L;
private TCSession session;
private TCComponentDataset model;
private JCheckBox document;
private JCheckBox download;
private JButton exportBtn;
private JButton cancelBtn;
private HashMap<String, JComponent> searchMap;
private HashMap<String, String[]> exportMap;
private HashMap<String, Object> objectMap;
private HashMap<String, TCComponentScheduleTask> nodes;
public TechProjectDocReportDialog(TCSession session, String title, String[] options, TCComponentDataset model) throws Exception {
super(AIFUtility.getActiveDesktop());
this.session = session;
this.model = model;
this.searchMap = new HashMap<>();
this.exportMap = new HashMap<>();
this.objectMap = new HashMap<>();
String departments[] = session.getPreferenceService().getStringValues("ML8_ProjectDepart");
if(departments==null || departments.length==0)
throw new Exception("首选项ML8_ProjectDepart配置不正确");
String group = session.getGroup().toString().trim();
String depart = "";
for(String s : departments) {
String[] ss = s.split(":");
if(group.equals(ss[0])) {
depart = ss[1];
}
}
if(depart.isEmpty())
throw new Exception("当前部门无法查询,请联系系统管理员!");
LinkedHashMap<String, String[]> searchMap = new LinkedHashMap<>();
for(String s : options) {
if(s.contains(":")) {
String[] ss = s.split(":");
searchMap.put(ss[0], ss);
}else if(s.contains("=")) {
String[] ss = s.split("=");
exportMap.put(ss[0], ss);
}
}
setTitle(title);
JPanel propPanel = new JPanel(new PropertyLayout(70, 5, 10, 5, 5, 5));
int row = 1;
TCComponentListOfValuesType lovType = (TCComponentListOfValuesType)session.getTypeComponent("ListOfValues");
// TCComponentListOfValues[] lov = lovType.find("ML8_ProjectCategory_LOV");
// String[] vals = getDynamicLOV(lov[0]);
// System.out.println("ML8_ProjectCategory_LOV:"+lov[0].getType()+"=="+vals.length);
for(String s : searchMap.keySet()) {
JLabel label = new JLabel(s);
propPanel.add(row+".1.left.center", label);
String[] ss = searchMap.get(s);
switch(ss[1]){
case "0":
JTextField text = new JTextField();
text.setPreferredSize(new Dimension(150, 23));
propPanel.add(row+".2.right.center", text);
this.searchMap.put(s, text);
break;
case "1":
JComboBox<String> combo = new JComboBox<>();
combo.setPreferredSize(new Dimension(150, 23));
combo.addItem("");
if(ss[2].contains(";")) {
String[] items = ss[2].split(";");
for(String item : items) {
combo.addItem(item);
}
}else {
TCComponentListOfValues[] lovs = lovType.find(ss[2]);//TODO lov
if(lovs==null || lovs.length==0)
throw new Exception("未找到LOV"+ss[2]);
if(lovs[0].isTypeOf("Fnd0ListOfValuesDynamic")) {
for(String item : getDynamicLOV(lovs[0])) {
combo.addItem(item);
}
}else {
ListOfValuesInfo vs = lovs[0].getListOfValues();
String[] dVals = vs.getLOVDisplayValues();
String[] sVals = vs.getStringListOfValues();
HashMap<String, String> map = new HashMap<>();
for(int i=0; i<dVals.length; i++) {
combo.addItem(dVals[i]);
map.put(dVals[i], sVals[i]);
}
objectMap.put(s, map);
}
}
propPanel.add(row+".2.right.center", combo);
this.searchMap.put(s, combo);
break;
case "2":
PropertyDateComponent date = new PropertyDateComponent();
propPanel.add(row+".2.right.center", date);
if(ss[2].equals("true")) {
objectMap.put(s, null);
}
this.searchMap.put(s, date);
break;
case "3":
final JTextField field = new JTextField();
field.setEditable(false);
field.setPreferredSize(new Dimension(100, 23));
JButton userBtn = new JButton("选人");
userBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
try {
new SelectUserDialog(field, false).showDialog();
} catch (Exception e) {
e.printStackTrace();
MessageBox.post(AIFUtility.getActiveDesktop(), "错误::"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
userBtn.setPreferredSize(new Dimension(56, 23));
JPanel userPanel = new JPanel(new BorderLayout());
userPanel.add(BorderLayout.CENTER, field);
userPanel.add(BorderLayout.EAST, userBtn);
propPanel.add(row+".2.right.center", userPanel);
this.searchMap.put(s, field);
break;
default:
break;
}
row++;
}
JLabel label = new JLabel("项目承担部门");
propPanel.add(row+".1.left.center", label);
MultiCombo combo = new MultiCombo(depart.split(";"));
combo.setPreferredSize(new Dimension(150, 23));
combo.setEditable(true);
propPanel.add(row+".2.right.center", combo);
this.searchMap.put("项目承担部门", combo);
document = new JCheckBox("文档归档不全");
download = new JCheckBox("下载交付文档");
exportBtn = new JButton("导出");
cancelBtn = new JButton("取消");
JPanel btnPanel = new JPanel(new FlowLayout());
btnPanel.add(document);
btnPanel.add(download);
btnPanel.add(exportBtn);
btnPanel.add(cancelBtn);
setLayout(new BorderLayout());
add(BorderLayout.CENTER, propPanel);
add(BorderLayout.SOUTH, btnPanel);
// add(new JLabel(""));
addActionListener(title, options[1], depart);
pack();
if(row>4)
setSize(new Dimension(380, 240+(row-4)*25));
else
setSize(new Dimension(380, 240));
setDefaultLookAndFeelDecorated(true);
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
// setAlwaysOnTop(true);
setVisible(true);
}
private void addActionListener(String title, String options, String depart) {
exportBtn.addActionListener(new ActionListener() {
@SuppressWarnings({ "unchecked", "deprecation" })
@Override
public void actionPerformed(ActionEvent arg0) {
AIFDesktop desktop = AIFUtility.getActiveDesktop();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
File directory = TCUtil.saveExcelChooserAsk(title+sdf.format(new Date()));
if(directory==null)
return;
ProgressReporterDialog reporter = new ProgressReporterDialog("提示");
reporter.reportProgressMessage("正在导出,请稍候...");
new Thread(reporter).start();
new Thread() {
public void run(){
FileInputStream input = null;
FileOutputStream output = null;
try {
if(directory.exists())
directory.delete();
Vector<String> keyV = new Vector<>();
Vector<String> valueV = new Vector<>();
// sdf = new SimpleDateFormat("yyyy-M-d HH:mm");
SimpleDateFormat sdf = new SimpleDateFormat("d-MMM-yyyy hh:mm");
for(String s : searchMap.keySet()) {
JComponent c = searchMap.get(s);
if(c instanceof JTextField) {
String text = ((JTextField)c).getText();
if(!text.isEmpty()) {
keyV.add(s);
valueV.add(text);
}
}else if(c instanceof MultiCombo) {
String text = ((MultiCombo) c).getText().trim();
keyV.add(s);
if(!text.isEmpty()) {
valueV.add(text);
}else {
valueV.add(depart);
}
}else if(c instanceof JComboBox) {
String text = ((JComboBox<String>)c).getSelectedItem().toString();
if(!text.isEmpty()) {
keyV.add(s);
if(objectMap.containsKey(s)) {
valueV.add(((HashMap<String, String>)objectMap.get(s)).get(text));
}else {
valueV.add(text);
}
}
}else if(c instanceof PropertyDateComponent) {
Date date = ((PropertyDateComponent)c).getDate();
if(date==null)
continue;
if(objectMap.containsKey(s)) {
date.setHours(23);
date.setMinutes(59);
}
if(date != null) {
keyV.add(s);
valueV.add(sdf.format(date));
}
}
}
// if(keyV.size()==0) {
// throw new Exception("请填写查询条件");
// }
TCUtil.setByPass(session, true);
TCComponent[] results = TCUtil.query(session, options, keyV, valueV);
TCComponentTcFile[] files = model.getTcFiles();
File file = files[0].getFile(System.getProperty("java.io.tmpdir"));
input = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(input);
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
XSSFCell cell;
int rowCount = sheet.getLastRowNum();
int col = 7;
StringBuilder fileErrors = new StringBuilder("");
for(TCComponent result : results) {
nodes = new HashMap<>();
TCComponentSchedule schedule = (TCComponentSchedule)result;
reporter.reportProgressMessage("正在导出:"+schedule);
TCComponent project = schedule.getReferenceListProperty("project_list")[0];
TCComponentScheduleTask summary = ScheduleHelper.getScheduleSummaryTask(schedule);
HashMap<String, TCComponentScheduleTask> map = getTasks(summary.getChildren());
// String[] stage = getStage(nodes);
row = getRow(sheet, 0);
cell = getCell(row, col);
cell.setCellValue(project.getProperty("project_id"));
row = getRow(sheet, 1);
cell = getCell(row, col);
cell.setCellValue(schedule.getProperty("ml8_ProjectState"));//考核阶段
row = getRow(sheet, 2);
cell = getCell(row, col);
cell.setCellValue(project.getProperty("project_name"));
row = getRow(sheet, 3);
cell = getCell(row, col);
cell.setCellValue(project.getReferenceProperty("owning_user").getProperty("user_name"));
row = getRow(sheet, 4);
cell = getCell(row, col);
String ml8_PrjLevel = project.getProperty("ml8_PrjLevel");
int level = ml8_PrjLevel.equals("A")? 4 : (ml8_PrjLevel.equals("B")? 5 : 6);
cell.setCellValue(ml8_PrjLevel);
row = getRow(sheet, 5);
cell = getCell(row, col);
cell.setCellValue(schedule.getProperty("fnd0status"));//项目状态
row = getRow(sheet, 6);
cell = getCell(row, col);
cell.setCellValue(schedule.getProperty("object_name"));
boolean all = true;
Vector<TCComponent> downs = new Vector<>();//TODO 文档归档不全
for(int j=8; j<=rowCount; j++) {
row = getRow(sheet, j);
cell = getCell(row, col);
String name = getCell(row, 2).getStringCellValue();
if(!map.containsKey(name)) {
String check = getCell(row, level).getStringCellValue();
if(check.equals("Y")) {
cell.setCellValue("归档要求已修改为N");//否 20230227修改
// all = false;
}
continue;
}
if(map.get(name).getProperty("ml8_FilingRequirements").equals("N")) {
cell.setCellValue("归档要求已修改为N");
continue;
}
if(map.get(name).getProperty("fnd0status").equals("已中止")) {
cell.setCellValue("否");
all = false;
continue;
}
TCComponent[] deliveries = map.get(name).getReferenceListProperty("sch_task_deliverable_list");
if(deliveries==null || deliveries.length==0) {
cell.setCellValue("否");
all = false;
continue;
}
TCComponent delivery = deliveries[0].getReferenceProperty("schedule_deliverable")
.getReferenceProperty("deliverable_inst");
// TCComponent[] sch_task_deliverable_list = map.get(name).getReferenceListProperty("sch_task_deliverable_list");
// for(TCComponent son : sch_task_deliverable_list) {
// TCComponent schedule_deliverable = son.getReferenceProperty("schedule_deliverable");
// TCComponent taskDelivery = schedule_deliverable.getReferenceProperty("deliverable_inst");
// if(taskDelivery == null)
// continue;
// TCComponent[] contents = taskDelivery.getReferenceListProperty("contents");
// }
// System.out.println(name+""+delivery);
if(delivery==null) {
cell.setCellValue("否");
all = false;
}else {
Date released = delivery.getDateProperty("date_released");
if(released==null) {
cell.setCellValue("否");
all = false;
}else {
cell.setCellValue("是");
downs.add(delivery);
}
}
}
if(document.isSelected() && all) {
for(int j=0; j<6; j++) {
row = getRow(sheet, j);
cell = getCell(row, col);
cell.setCellValue("");
}
for(int j=9; j<rowCount; j++) {
row = getRow(sheet, j);
cell = getCell(row, col);
cell.setCellValue("");
}
continue;
}else if(download.isSelected()) {
for(TCComponent delivery : downs) {
System.out.println("下载交付物:"+delivery);
String dirs = directory.getPath().substring(0, directory.getPath().length()-5)
+"\\"+schedule.getProperty("object_name").replace("\\", "_").replace("/", "_");
File dir = new File(dirs);
if(!dir.exists() || !dir.isDirectory())
dir.mkdirs();
AIFComponentContext[] cs = delivery.getChildren("contents");
for(AIFComponentContext c : cs) {
TCComponent comp = (TCComponent) c.getComponent();
if(!(comp instanceof TCComponentItemRevision))
continue;
AIFComponentContext[] ccs = comp.getChildren();
for(AIFComponentContext cc : ccs) {
TCComponent ccomp = (TCComponent) cc.getComponent();
if(!(ccomp instanceof TCComponentDataset))
continue;
try {
TCComponentTcFile[] cfiles = ((TCComponentDataset)ccomp).getTcFiles();
cfiles[0].getFile(dirs);
}catch(Exception e) {
fileErrors.append(schedule+"中"+delivery+"文件夹下"+ccomp+"下载失败\n");
}
}
}
}
}
col++;
}
TCUtil.setByPass(session, false);
output = new FileOutputStream(file.getPath());
wb.write(output);
input.close();
output.close();
file.renameTo(directory);
reporter.requestCanceling();
if(fileErrors.length()>0)
MessageBox.post(desktop, fileErrors.toString(), "ERROR", MessageBox.ERROR);
else
MessageBox.post(desktop, "导出完成", "INFO", MessageBox.INFORMATION);
dispose();
}catch(Exception e1) {
reporter.requestCanceling();
e1.printStackTrace();
MessageBox.post(TechProjectDocReportDialog.this, "错误:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}finally {
if(input!=null)
try {
input.close();
} catch (Exception e) {
e.printStackTrace();
}
if(output!=null)
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
}
});
cancelBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
}
private XSSFRow getRow(XSSFSheet sheet, int i) throws Exception {
XSSFRow row = sheet.getRow(i);
if(row==null)
row = sheet.createRow(i);
return row;
}
private XSSFCell getCell(XSSFRow row, int col) throws Exception {
XSSFCell cell = row.getCell(col);
if(cell==null)
cell = row.createCell(col);
if(col>7)
cell.setCellStyle(getCell(row, 7).getCellStyle());
return cell;
}
private HashMap<String, TCComponentScheduleTask> getTasks(AIFComponentContext[] parent) throws Exception {
// AIFComponentContext[] children = parent.getChildren();
HashMap<String, TCComponentScheduleTask> tasks = new HashMap<>();
for(AIFComponentContext c : parent) {
InterfaceAIFComponent comp = c.getComponent();
if(!(comp instanceof TCComponentScheduleTask))
continue;
TCComponentScheduleTask task = (TCComponentScheduleTask) comp;
if(task.getProperty("fnd0status").equals("已中止") && task.getProperty("ml8_FilingRequirements").equals("N"))
//task.getStringProperty("fnd0status").equals("aborted") ||
continue;
if(!task.getProperty("ml8_CutOrNot").isEmpty())
continue;
AIFComponentContext[] children = task.getChildren("child_task_taglist");
if(!task.getProperty("ml8_AssessmentNode").isEmpty()) {
nodes.put(task.getProperty("object_name"), task);
}
if(children.length==0) {
String name = task.getProperty("object_name");
if(!tasks.containsKey(name)) {
tasks.put(name, task);
}else if(tasks.get(name).getProperty("fnd0status").equals("已中止")) {
tasks.put(name, task);
}
}else {
HashMap<String, TCComponentScheduleTask> map = getTasks(children);
if(map.size()>0) {
for(String s : map.keySet()) {
tasks.put(s, map.get(s));
}
}
}
}
return tasks;
}
/*private String[] getStage(HashMap<String, TCComponentScheduleTask> nodes) throws Exception {
String[] stages = new String[] { "方案评审(PDCP", "ADCP评审", "转移评审" };
if(!nodes.containsKey(stages[0]))
return new String[] { "", "" };
for(int i=0; i<stages.length; i++) {
if(nodes.containsKey(stages[i]) && !nodes.get(stages[i]).getProperty("fnd0state").equals("完成")) {
if(i==0)
return new String[] { stages[i], "" };
else
return new String[] { stages[i], stages[i-1] };
}
}
return new String[] { "结项", stages[2] };
}*/
public String[] getDynamicLOV(TCComponentListOfValues lov) throws Exception {
Vector<String> lovDisplayValueList = new Vector<>();
// lovDisplayValueList.add("");
Vector<String> lovValueList = new Vector<>();
LOVService lovService = LOVService.getService(session);
InitialLovData input = new InitialLovData();
LovFilterData filter = new LovFilterData();
filter.sortPropertyName = "object_name";
filter.order = 1;
filter.numberToReturn = 100;
filter.maxResults = 100;
input.lov = lov;
input.filterData = filter;
LOVSearchResults result = lovService.getInitialLOVValues(input);
// StringBuffer sb = new StringBuffer();
// sb.append(">>");
for (LOVValueRow row : result.lovValues) {
Map<String, String[]> map = row.propDisplayValues;
Map<String, String[]> realmap = row.propInternalValues;
for (String key : map.keySet()) {
// sb.append("UID:" + row.uid + ",key:" + key + "value:" + map.get(key)[0]);
// sb.append("\n");
lovDisplayValueList.add(map.get(key)[0]);
lovValueList.add(realmap.get(key)[0]);
}
}
// System.out.println("StringBuffer:"+sb.toString());
return lovDisplayValueList.toArray(new String[lovDisplayValueList.size()]);
}
}

@ -0,0 +1,43 @@
package com.connor.lidy.report;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class TechProjectDocReportHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("TechProjectDocReportHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
String pref = "ML8_TechProjectDocReport", title = "项目文档归档明细-技术类";
TCSession session = (TCSession) app.getSession();
String options[] = session.getPreferenceService().getStringValues(pref);
if(options==null || options.length<2) {
MessageBox.post(desktop, "首选项"+pref+"配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
TCComponent model = session.stringToComponent(options[0]);//A_OAAIm_5kSPsC
if(model==null || !model.isTypeOf("MSExcelX")) {
MessageBox.post(desktop, "首选项"+pref+"中模板UID配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
new TechProjectDocReportDialog(session, title, options, (TCComponentDataset)model);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
return null;
}
}

@ -0,0 +1,56 @@
package com.connor.lidy.report;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
//创建常规文件夹结构
public class UsedbyProductReportHandler extends AbstractHandler implements IHandler{
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("UsedbyProductReportHandler");
AIFDesktop desktop = AIFUtility.getActiveDesktop();
try {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
TCSession session = (TCSession) app.getSession();
InterfaceAIFComponent target = app.getTargetComponent();
if(target==null) {
MessageBox.post(desktop, "请选择零组件或原辅材料版本进行导出", "ERROR", MessageBox.ERROR);
return null;
}
String type = target.getType();
if(!type.equals("ML8_PartRevision") && !type.equals("ML8_RawMaterialRevision")) {
MessageBox.post(desktop, "请选择零组件或原辅材料版本进行导出", "ERROR", MessageBox.ERROR);
return null;
}
String option = session.getPreferenceService().getStringValue("ML8_UsedbyProductReport");
if(option==null || option.isEmpty()) {
MessageBox.post(desktop, "首选项ML8_UsedbyProductReport配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
TCComponent model = session.stringToComponent(option);//AGFAAIXI5kSPsC
if(model==null || !model.isTypeOf("MSExcelX")) {
MessageBox.post(desktop, "首选项ML8_UsedbyProductReport中模板UID配置不正确", "ERROR", MessageBox.ERROR);
return null;
}
UsedbyProductReportOperation operation = new UsedbyProductReportOperation(session, (TCComponentItemRevision)target, (TCComponentDataset)model);
session.queueOperation(operation);
// MessageBox.post(desktop, "传递结果:", "提示", MessageBox.INFORMATION);
}catch(Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}
return null;
}
}

@ -0,0 +1,191 @@
package com.connor.lidy.report;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import com.connor.lidy.util.TCUtil;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFOperation;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentBOMLine;
import com.teamcenter.rac.kernel.TCComponentBOMWindow;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
public class UsedbyProductReportOperation extends AbstractAIFOperation {
private TCSession session;
private TCComponentItemRevision target;
private List<TCComponent> parents;
private TCComponentDataset model;
private XSSFRow sourceRow;
public UsedbyProductReportOperation(TCSession session, TCComponentItemRevision target, TCComponentDataset model) {
this.session = session;
this.target = target;
this.model = model;
}
@Override
public void executeOperation() throws Exception {
AIFDesktop desktop = AIFUtility.getActiveDesktop();
FileInputStream input = null;
FileOutputStream output = null;
try {
parents = new ArrayList<>();
TCComponentItemRevision newRev = target.getItem().getLatestItemRevision();
getParents(target);
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
File directory = TCUtil.saveExcelChooser("使用于机型清单"+sdf.format(now));
if(directory==null)
return;
if(directory.exists())
directory.delete();
String path = directory.getPath();
TCComponentTcFile[] files = model.getTcFiles();
File file = files[0].getFile(System.getProperty("java.io.tmpdir"));
input = new FileInputStream(file);
XSSFWorkbook wb = new XSSFWorkbook(input);
int i = 2;
XSSFSheet sheet = wb.getSheetAt(0);
XSSFRow row;
XSSFCell cell;
sourceRow = getRow(sheet, i);
for(TCComponent c : parents) {
String ID=String.valueOf(c.getProperty("item_id"));
if(ID.indexOf("-")>-1) {
System.out.println("已过滤ID=======>"+ID);
continue;
}
row = getRow(sheet, i);
cell = getCell(row, 0);
cell.setCellValue(i-1);//序号
cell = getCell(row, 1);
cell.setCellValue(c.getProperty("item_id"));//物料代码
cell = getCell(row, 2);
cell.setCellValue(c.getProperty("object_name"));//产品名称
cell = getCell(row, 3);
cell.setCellValue(c.getProperty("object_desc"));//物料描述
cell = getCell(row, 4);
cell.setCellValue(c.getProperty("ML8_SalesMode"));//是否出口订单
cell = getCell(row, 5);
cell.setCellValue(c.getProperty("item_revision_id"));//版本
cell = getCell(row, 6);
TCComponentItemRevision parent = (TCComponentItemRevision)c;
// System.out.println(newRev+"=="+c.equals(newRev)+"=="+parents.contains(newRev));
AIFComponentContext[] pfs = parent.getChildren("ML8_ProjectRelation");
TCComponentBOMWindow window = TCUtil.getWindow(session);
TCComponentBOMLine line = TCUtil.getBOMLine(session, window, parent);
if(!target.equals(newRev)) {
cell.setCellValue("是");//是否被取代
}else if(isUsed(line.getChildren(), target.getProperty("item_id"))) {
cell.setCellValue("否");//是否被取代
}else {
cell.setCellValue("是");//是否被取代
}
window.close();
if(pfs!=null && pfs.length>0) {
TCComponent pf = (TCComponent) pfs[0].getComponent();
cell = getCell(row, 7);
cell.setCellValue(pf.getProperty("ml8_ProductCode"));//产品代号
cell = getCell(row, 8);
cell.setCellValue(pf.getProperty("ml8_ProductType"));//产品型号
}else {
cell = getCell(row, 7);
cell.setCellValue("");//产品代号
cell = getCell(row, 8);
cell.setCellValue("");//产品型号
}
cell = getCell(row, 9);
cell.setCellValue(c.getProperty("ml8_NativeProducts"));//原生产品
cell = getCell(row, 10);
cell.setCellValue(c.getProperty("ml8_ProductCode"));//历史产品代号
cell = getCell(row, 11);
cell.setCellValue(c.getProperty("ml8_ProductType"));//历史产品型号
cell = getCell(row, 12);
cell.setCellValue(c.getProperty("release_status_list"));//产品状态
i++;
}
output = new FileOutputStream(file.getPath());
wb.write(output);
input.close();
output.close();
// System.out.println("file:"+file.getPath());
String newPath = System.getProperty("java.io.tmpdir")+path.substring(path.lastIndexOf("\\"));
File reFile = new File(newPath);
file.renameTo(reFile);
// System.out.println("new directory:"+reFile.getPath());
reFile.renameTo(directory);
MessageBox.post(desktop, "导出完成", "INFO", MessageBox.INFORMATION);
} catch (Exception e) {
e.printStackTrace();
MessageBox.post(desktop, "错误:"+e.getMessage(), "ERROR", MessageBox.ERROR);
}finally {
if(input!=null)
input.close();
if(output!=null)
output.close();
}
}
private XSSFRow getRow(XSSFSheet sheet, int num) throws Exception {
XSSFRow row = sheet.getRow(num);
if(row==null)
row = sheet.createRow(num);
return row;
}
private XSSFCell getCell(XSSFRow row, int col) throws Exception {
XSSFCell cell = row.getCell(col);
if(cell==null)
cell = row.createCell(col);
if(row.getRowNum()>2)
cell.setCellStyle(getCell(sourceRow, col).getCellStyle());
return cell;
}
private void getParents(TCComponent rev) throws Exception {
TCComponent[] ps = rev.whereUsed(TCComponent.WHERE_USED_ALL);
if(ps==null || ps.length==0){
TCComponentItemRevision newRev = ((TCComponentItemRevision)rev).getItem().getLatestItemRevision();
if(!rev.equals(target) && !parents.contains(newRev) && newRev.getProperty("item_id").startsWith("ML")) {
parents.add(newRev);
}
return;
}
for(TCComponent parent : ps) {
System.out.println(rev+">>"+parent);
getParents(parent);
}
}
private boolean isUsed(AIFComponentContext[] context, String id) throws Exception {
for(AIFComponentContext c : context) {
TCComponentBOMLine line = (TCComponentBOMLine)c.getComponent();
if(line.getProperty("bl_item_item_id").equals(id))
return true;
AIFComponentContext[] children = line.getChildren();
if(children!=null && children.length>0) {
if(isUsed(children, id))
return true;
}
}
return false;
}
}

@ -0,0 +1,139 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: ComparatorTask.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 03:42:41 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Comparator;
import java.util.Date;
public class ComparatorTask implements Comparator<Object> {
private int count = 0;
public int compare(Object obj1, Object obj2) {
// Object : id$$$processDate1$$$taskDate1$$$taskFinishDate1
// id$$$processDate1$$$processName$$$previousTaskFinishDate1
int returnvalue = 0;
if (obj1 instanceof String) {
String str1 = (String) obj1;
String str2 = (String) obj2;
if (str1.indexOf("$$$") > 0) {
count = 0;
getNum(str1);
if (count == 3) {
// String id1 = str1.substring(0, str1.indexOf("$$$"));
String sep1 = str1.substring(str1.indexOf("$$$") + 3);
String processDate1 = sep1.substring(0, sep1.indexOf("$$$")).trim();
String processName1 = sep1.substring(sep1.indexOf("$$$") + 3, sep1.lastIndexOf("$$$")).trim();
String taskCreateDate1 = sep1.substring(sep1.lastIndexOf("$$$") + 3).trim();
// String id2 = str2.substring(0, str2.indexOf("$$$"));
String sep2 = str2.substring(str2.indexOf("$$$") + 3);
String processDate2 = sep2.substring(0, sep2.indexOf("$$$")).trim();
String processName2 = sep2.substring(sep2.indexOf("$$$") + 3, sep2.lastIndexOf("$$$")).trim();
String taskCreateDate2 = sep2.substring(sep2.lastIndexOf("$$$") + 3).trim();
// 先流程创建时间降序,再流程名称排,再任务上步骤完成时间降序
returnvalue = (compareDate(processDate1, processDate2) == 0 ? (compareStr(processName1, processName2) == 0 ? (compareDate(taskCreateDate1, taskCreateDate2)) : compareStr(processName1, processName2)) : compareDate(processDate2, processDate1));
}
}
}
return returnvalue;
}
/**
* compareStrString
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public int compareStr(String o1, String o2) {
String s1 = (String) o1;
String s2 = (String) o2;
if ((s1 == null) || (s1.length() == 0) || (s2 == null) || (s2.length() == 0)) { return 0; }
int len1 = s1.length();
int len2 = s2.length();
int n = Math.min(len1, len2);
char v1[] = s1.toCharArray();
char v2[] = s2.toCharArray();
int pos = 0;
while (n-- != 0) {
char c1 = v1[pos];
char c2 = v2[pos];
if (c1 != c2) { return c1 - c2; }
pos++;
}
return len1 - len2;
}
public int compareDate(String strDate1, String strDate2) {
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1;
try {
date1 = simpleDate.parse(strDate1);
Date date2 = simpleDate.parse(strDate2);
if (date1.getTime() > date2.getTime()) {
return 1;
} else {
if (date1.getTime() == date2.getTime()) {
return 0;
} else {
return -1;
}
}
}
catch (ParseException e) {
e.printStackTrace();
return 0;
}
}
public static void main(String[] args) {
new ComparatorTask().compareDate("01-3-2011 11:17", "02-3-2011 11:17");
}
/**
* compareIntint
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public int compareInt(Integer o1, Integer o2) {
int val1 = o1.intValue();
int val2 = o2.intValue();
return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1));
}
/**
* compareBooleanBoolean
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public int compareBoolean(Boolean o1, Boolean o2) {
return (o1.equals(o2) ? 0 : (o1.booleanValue() == true ? 1 : -1));
}
private void getNum(String name) {
if (name.contains("$$$")) {
count++;
getNum(name.substring(name.indexOf("$$$") + 3));
} else {
return;
}
}
}

@ -0,0 +1,73 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: QueryTaskOpinionHandler.java
#=======================================================================================================
# Date time Name Action Description of Change
#
#=======================================================================================================
*/
package com.connor.lidy.task;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCAttachmentType;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentProcessType;
import com.teamcenter.rac.kernel.TCComponentTaskTemplate;
import com.teamcenter.rac.kernel.TCComponentTaskTemplateType;
import com.teamcenter.rac.kernel.TCPreferenceService;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
public class CustAddReleaseHandler extends AbstractHandler implements IHandler{
/*
* @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
*/
@SuppressWarnings("deprecation")
public Object execute(ExecutionEvent arg0) throws ExecutionException {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
TCSession session = (TCSession) app.getSession();
try {
TCPreferenceService preSer = session.getPreferenceService();
String[] value = preSer.getStringArray(4, "Cust_Release_Templates");
if(value == null || value.length < 1){
MessageBox.post("Cust_Release_Templates配置不正确,请联系管理员!", "WARNING", 1);
return null;
}
TCComponentProcessType procType = (TCComponentProcessType) session.getTypeComponent("Job");
TCComponentTaskTemplateType taskTempType = (TCComponentTaskTemplateType) session.getTypeComponent("EPMTaskTemplate");
TCComponentTaskTemplate taskTemp = taskTempType.find(value[0], TCComponentTaskTemplate.PROCESS_TEMPLATE_TYPE);
InterfaceAIFComponent[] selectComps = app.getTargetComponents();
if(selectComps.length > 0){
int[] intArr = new int[selectComps.length];
TCComponent[] comps = new TCComponent[selectComps.length];
for (int i = 0; i < intArr.length; i++) {
intArr[i] = TCAttachmentType.TARGET;
comps[i] = (TCComponent) selectComps[i];
}
procType.create("自动发起", "添加状态", taskTemp, comps, intArr, null);
MessageBox.post("添加状态成功!", "Info", 0);
}else{
MessageBox.post("请选择对象执行此功能,谢谢!", "WARNING", 1);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

@ -0,0 +1,73 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: QueryTaskOpinionHandler.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 10:18:54 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCAttachmentType;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentProcessType;
import com.teamcenter.rac.kernel.TCComponentTaskTemplate;
import com.teamcenter.rac.kernel.TCComponentTaskTemplateType;
import com.teamcenter.rac.kernel.TCPreferenceService;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
public class CustRemoveReleaseHandler extends AbstractHandler implements IHandler{
/*
* @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
*/
@SuppressWarnings("deprecation")
public Object execute(ExecutionEvent arg0) throws ExecutionException {
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
TCSession session = (TCSession) app.getSession();
try {
TCPreferenceService preSer = session.getPreferenceService();
String[] value = preSer.getStringArray(4, "Cust_Release_Templates");
if(value == null || value.length < 2){
MessageBox.post("Cust_Release_Templates配置不正确,请联系管理员!", "WARNING", 1);
return null;
}
TCComponentProcessType procType = (TCComponentProcessType) session.getTypeComponent("Job");
TCComponentTaskTemplateType taskTempType = (TCComponentTaskTemplateType) session.getTypeComponent("EPMTaskTemplate");
TCComponentTaskTemplate taskTemp = taskTempType.find(value[1], TCComponentTaskTemplate.PROCESS_TEMPLATE_TYPE);
InterfaceAIFComponent[] selectComps = app.getTargetComponents();
if(selectComps.length > 0){
int[] intArr = new int[selectComps.length];
TCComponent[] comps = new TCComponent[selectComps.length];
for (int i = 0; i < intArr.length; i++) {
intArr[i] = TCAttachmentType.TARGET;
comps[i] = (TCComponent) selectComps[i];
}
procType.create("自动发起", "移除状态", taskTemp, comps, intArr, null);
MessageBox.post("移除状态成功!", "Info", 0);
}else{
MessageBox.post("请选择对象执行此功能,谢谢!", "WARNING", 1);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

@ -0,0 +1,148 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: ExportSearchResult.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 03:43:41 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import com.connor.lidy.task.SearchResultDialog.SearchResults;
import com.teamcenter.rac.util.MessageBox;
public class ExportSearchResult {
public ExportSearchResult(List<SearchResults> tableInfos, PackExcelInfo excelInfo) {
createExcel(tableInfos, excelInfo);
}
protected void createExcel(List<SearchResults> tableInfos, PackExcelInfo excelInfo) {
Workbook workbook = null;
WritableSheet sourceSheet;
WritableWorkbook writeWorkbook;
File file = new File(excelInfo.getTemplateFileName());
int listsize = tableInfos.size();
int pageSize = excelInfo.getPageSize();
List<Object> listTemp = new ArrayList<Object>();
try {
workbook = Workbook.getWorkbook(file);
writeWorkbook = Workbook.createWorkbook(new File(excelInfo.getTargetFileName()), workbook);
sourceSheet = writeWorkbook.getSheet(0);
WritableSheet sheet = writeWorkbook.getSheet(0);
String sourceSheetName = sourceSheet.getName();
int page = listsize / pageSize;
if (((listsize % pageSize) > 0)) {
page = page + 1;
}
for (int i = 1; i <= page; i++) {
sheet = null;
listTemp = new ArrayList<Object>();
writeWorkbook.copySheet(sourceSheetName, "第" + i + "页", i);
sheet = writeWorkbook.getSheet("第" + i + "页");
for (int j = (i - 1) * pageSize; (j < pageSize * (i)) && ((j < listsize)); j++) {
listTemp.add(tableInfos.get(j));
}
addDataToExcel(sourceSheet, sheet, listTemp, i, excelInfo);
}
writeWorkbook.removeSheet(0);
writeWorkbook.write();
writeWorkbook.close();
} catch (Exception e1) {
MessageBox.post("请检查:文件是否正在使用,请关闭", "信息提示", MessageBox.INFORMATION);
e1.printStackTrace();
}
}
private void addDataToExcel(WritableSheet sourceSheet, WritableSheet sheet, List<Object> listTemp, int currentpage, PackExcelInfo excelInfo) {
int row = excelInfo.getInitRow();
try {
for (row = 0; row < 34; row++) {
for (int col = 0; col < 15; col++) {
if (row >= 4) {
SearchResults result = (SearchResults) listTemp.get(row - 4);
if (result != null) {
if (col == 0) {
insertCell(sourceSheet, sheet, col, row, result.getIndex());
} else if (col == 1) {
insertCell(sourceSheet, sheet, col, row, result.getTask_name());
} else if (col == 2) {
insertCell(sourceSheet, sheet, col, row, result.getTask_executor());
} else if (col == 3) {
insertCell(sourceSheet, sheet, col, row, result.getTask_createDate());
} else if (col == 4) {
insertCell(sourceSheet, sheet, col, row, result.getTask_finishDate());
} else if (col == 5) {
insertCell(sourceSheet, sheet, col, row, result.getTask_status());
} else if (col == 6) {
insertCell(sourceSheet, sheet, col, row, result.getTask_note());
} else if (col == 7) {
insertCell(sourceSheet, sheet, col, row, result.getTask_type());
} else if (col == 8) {
insertCell(sourceSheet, sheet, col, row, result.getProcess_executor());
} else if (col == 9) {
insertCell(sourceSheet, sheet, col, row, result.getProcess_name());
} else if (col == 10) {
insertCell(sourceSheet, sheet, col, row, result.getProcess_createDate());
} else if (col == 11) {
insertCell(sourceSheet, sheet, col, row, result.getProcess_finishDate());
} else if (col == 12) {
insertCell(sourceSheet, sheet, col, row, result.getProcess_lastModeUser());
} else if (col == 13) {
insertCell(sourceSheet, sheet, col, row, result.getProcess_status());
} else if (col == 14) {
insertCell(sourceSheet, sheet, col, row, result.getProcess_templateName());
}
}
} else {
if ((row == 0) && (col == 0)) {
insertCell(sourceSheet, sheet, col, row, excelInfo.getTitle());
} else
insertCell(sourceSheet, sheet, col, row, "");
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void insertCell(WritableSheet sourceSheet, WritableSheet sheet, int col, int row, String value) {
try {
if ((value.trim().length() == 0) || (value == null)) {
Label lab = new Label(col, row, sourceSheet.getCell(col, row).getContents());
if (lab != null) {
if (sourceSheet.getCell(col, row) != null) {
if (sourceSheet.getCell(col, row).getCellFormat() != null) {
lab.setCellFormat(sourceSheet.getCell(col, row).getCellFormat());
}
}
sheet.addCell(lab);
}
} else {
Label lab = new Label(col, row, value);
if (lab != null) {
if (sourceSheet.getCell(col, row) != null) {
if (sourceSheet.getCell(col, row).getCellFormat() != null) {
lab.setCellFormat(sourceSheet.getCell(col, row).getCellFormat());
}
}
sheet.addCell(lab);
}
}
} catch (Exception e) {
e.printStackTrace();
} }
}

@ -0,0 +1,122 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: PackExcelInfo.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 ÏÂÎç03:45:50 tyl Ini ³õʼ»¯Îļþ
#=======================================================================================================
*/
package com.connor.lidy.task;
public class PackExcelInfo {
private String templateFileName = "c:\\viewTaskTemplate.xls";
private int pageSize = 30;
private String targetFileName = "c:\\report.xls";
private int initRow = 0;
private int initColumn = 0;
private int secondePageSize = 0;
private String title = "";
/**
* @return the initRow
*/
public int getInitRow() {
return initRow;
}
/**
* @param initRow the initRow to set
*/
public void setInitRow(int initRow) {
this.initRow = initRow;
}
/**
* @return the title
*/
public String getTitle() {
return title;
}
/**
* @param title the title to set
*/
public void setTitle(String title) {
this.title = title;
}
/**
* @return the initColumn
*/
public int getInitColumn() {
return initColumn;
}
/**
* @param initColumn the initColumn to set
*/
public void setInitColumn(int initColumn) {
this.initColumn = initColumn;
}
/**
* @return the pageSize
*/
public int getPageSize() {
return pageSize;
}
/**
* @param pageSize the pageSize to set
*/
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
/**
* @return the targetFileName
*/
public String getTargetFileName() {
return targetFileName;
}
/**
* @param targetFileName the targetFileName to set
*/
public void setTargetFileName(String targetFileName) {
this.targetFileName = targetFileName;
}
/**
* @return the templateFileName
*/
public String getTemplateFileName() {
return templateFileName;
}
/**
* @param templateFileName the templateFileName to set
*/
public void setTemplateFileName(String templateFileName) {
this.templateFileName = templateFileName;
}
/**
* @return the secondePageSize
*/
public int getSecondePageSize() {
return secondePageSize;
}
/**
* @param secondePageSize the secondePageSize to set
*/
public void setSecondePageSize(int secondePageSize) {
this.secondePageSize = secondePageSize;
}
}

@ -0,0 +1,40 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: QueryTaskOpinionCommand.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 10:19:09 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task;
import com.connor.lidy.util.ProgressReporterDialog;
import com.teamcenter.rac.aif.AbstractAIFCommand;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.kernel.TCException;
public class QueryTaskOpinionCommand extends AbstractAIFCommand {
public AbstractAIFUIApplication application;
public QueryTaskOpinionCommand(AbstractAIFUIApplication abstractaifapplication) throws TCException {
application = abstractaifapplication;
execute();
}
private void execute() throws TCException {
ProgressReporterDialog reporter = new ProgressReporterDialog("提示");
reporter.reportProgressMessage("正在导出,请稍候...");
new Thread(reporter).start();
new Thread() {
public void run(){
new QueryTaskOpinionOperation(application, reporter);
}
}.start();
}
}

@ -0,0 +1,41 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: QueryTaskOpinionHandler.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 ÉÏÎç10:18:54 tyl Ini ³õʼ»¯Îļþ
#=======================================================================================================
*/
package com.connor.lidy.task;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aifrcp.AIFUtility;
public class QueryTaskOpinionHandler extends AbstractHandler implements IHandler{
/*
* @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
*/
public Object execute(ExecutionEvent arg0) throws ExecutionException {
System.out.println("QueryTaskOpinionHandler");
AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
try {
QueryTaskOpinionCommand command = new QueryTaskOpinionCommand(app);
command.executeModal();
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,55 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: QueryTaskProcessCommand.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 10:19:35 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task;
import java.util.List;
import com.connor.lidy.task.util.GetAllUserIds;
import com.teamcenter.rac.aif.AbstractAIFCommand;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.kernel.TCException;
public class QueryTaskProcessCommand extends AbstractAIFCommand {
public AbstractAIFUIApplication application;
public QueryTaskProcessCommand(AbstractAIFUIApplication abstractaifapplication) throws TCException {
application = abstractaifapplication;
execute();
}
private void execute() throws TCException {
System.out.println(" QueryTaskProcessCommand ");
GetAllUserIds.setUsers(new GetAllUserIds(application).getAllUsers());
new Thread() {
public void run() {
while (true) {
try {
List<String> users = GetAllUserIds.getUsers();
if ((users == null) || (users.size() == 0)) {
System.out.println("--------------1000");
sleep(20000);
} else {
new SearchTaskDialog(application, "任务查询", false);
break;
}
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}

@ -0,0 +1,41 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: QueryTaskProcessHandler.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 ÉÏÎç10:19:51 tyl Ini ³õʼ»¯Îļþ
#=======================================================================================================
*/
package com.connor.lidy.task;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aifrcp.AIFUtility;
public class QueryTaskProcessHandler extends AbstractHandler implements IHandler {
/*
* @see
* org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.
* ExecutionEvent)
*/
public Object execute(ExecutionEvent arg0) throws ExecutionException {
final AbstractAIFUIApplication app = AIFUtility.getCurrentApplication();
try {
QueryTaskProcessCommand command = new QueryTaskProcessCommand(app);
command.executeModal();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

@ -0,0 +1,708 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: SearchResultDialog.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 03:46:01 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.TitledBorder;
import javax.swing.table.JTableHeader;
import com.connor.lidy.task.SearchTaskDialog.SearchCondition;
import com.connor.lidy.task.util.ColumnGroup;
import com.connor.lidy.task.util.DataSetFinder;
import com.connor.lidy.task.util.GetChoosePath;
import com.connor.lidy.task.util.GetMessageDialog;
import com.connor.lidy.task.util.GroupableTableHeader;
import com.connor.lidy.task.util.TableColorRender;
import com.connor.lidy.task.util.TableColumnRender;
import com.connor.lidy.task.util.UtilApi;
import com.teamcenter.rac.aif.AIFDesktop;
import com.teamcenter.rac.aif.AbstractAIFCommand;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.commands.open.OpenCommand;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentSignoff;
import com.teamcenter.rac.kernel.TCComponentTask;
import com.teamcenter.rac.kernel.TCComponentUserType;
import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCPreferenceService;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.kernel.TCTypeService;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.rac.util.Registry;
//public class SearchResultDialog extends AbstractAIFDialog {
public class SearchResultDialog extends JFrame {
private static final long serialVersionUID = 1L;
private List<SearchResults> results = new ArrayList<SearchResults>();
private JTable table1;
private SearchResultTableModel dtm1;
private String title = "";
private TCSession session;
private SearchCondition searchCondition;
private String[] names1 = { "*", "任务名称", "执行者", "上步骤完成时间", "完成时间", "任务状态", "会签注释", "任务类型",
"流程所有者", "工作流名称", "创建时间", "最后一次修改时间", "最后一次修改者", "状态", "工作流模板名称" };
private String[] names2 = { "*", "流程所有者", "工作流名称", "任务名称", "创建时间", "最后一次修改时间", "最后一次修改者", "状态" };
private Map<String, SearchResults> taskMap = new HashMap<String, SearchResults>();
private String reportOption = "origin_viewTask_report";
private String reportPath = "c:";
private PackExcelInfo excelInfo = new PackExcelInfo();
private boolean isExceptionSearch;
public SearchResultDialog(AbstractAIFUIApplication app, List<InterfaceAIFComponent> components, SearchCondition searchCondition, boolean isExceptionSearch) {
this.session = (TCSession) app.getSession();
this.searchCondition = searchCondition;
this.isExceptionSearch = isExceptionSearch;
getResultValue(components);
initUI();
File file = new File(excelInfo.getTemplateFileName());
if (file.exists()) {
file.delete();
}
}
@SuppressWarnings("deprecation")
private void getResultValue(List<InterfaceAIFComponent> components) {
try {
title = (new Date().toLocaleString()) + "_" + session.getUser() + "_执行任务查询条件任务执行者" + searchCondition.getUsername() + "任务时间段:[" + searchCondition.getCreateDate() + "]_[" + searchCondition.getFinishDate() + "]";
if (components != null) {
List<TCComponentTask> taskList = new ArrayList<TCComponentTask>();
List<String> taskIndexList = new ArrayList<String>();
for (int i = 0; i < components.size(); i++) {
TCComponentTask task = (TCComponentTask) components.get(i);
if (task != null) {
SearchResults result = new SearchResults();
if (!isExceptionSearch) {
if (((task.getTaskType()).equalsIgnoreCase("EPMSelectSignoffTask")) || ((task.getTaskType()).equalsIgnoreCase("EPMPerformSignoffTask"))) {
TCComponentSignoff[] sigoffs = task.getValidSignoffs();
for (int m = 0; m < sigoffs.length; m++) {
String comment = sigoffs[m].getComments();
result.setTask_note(comment);
result.setTask_executor(sigoffs[m].getProperty("signoff_member"));
result.setTask_finishDate(sigoffs[m].getProperty("decision_date"));
}
} else {
result.setTask_executor(task.getProperty("owning_user"));
result.setTask_finishDate(task.getProperty("last_mod_date"));
result.setTask_note("");
}
}
if (((task.getTaskType()).equalsIgnoreCase("EPMSelectSignoffTask")) || ((task.getTaskType()).equalsIgnoreCase("EPMPerformSignoffTask"))) {
task = task.getParent();
}
if (taskList.contains(task)) {
int taskIndex = taskList.indexOf(task);
taskList.remove(task);
taskIndexList.remove(taskIndex);
}
result.setTask_name(task.getProperty("object_name"));
if (result.getTask_type().equals("EPMTask")) {
if (result.getTask_status().equals("已开始")) {
result.setTask_name("◆" + result.getTask_name());
result.setTask_finishDate("");
}
}
Date taskCreateDate = null;
SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
result.setTask(task);
taskCreateDate = task.getDateProperty("creation_date");
result.setTask_createDate(task.getProperty("creation_date"));
TCComponentTask previousTask = task.getPrevious();
if (previousTask != null) {
result.setTask_createDate(previousTask.getProperty("last_mod_date"));
taskCreateDate = previousTask.getDateProperty("last_mod_date");
}
result.setTask_type(task.getProperty("object_type"));
result.setTask_status(task.getProperty("real_state"));
if (!result.getTask_status().equals("已完成")) {
result.setTask_finishDate("");
}
TCComponentTask rootTask = task.getRoot();
result.setProcess_name(rootTask.getProperty("job_name"));
result.setProcess_createDate(rootTask.getProperty("creation_date"));
result.setProcess_finishDate(rootTask.getProperty("last_mod_date"));
result.setProcess_lastModeUser(rootTask.getProperty("last_mod_user"));
result.setProcess_executor(rootTask.getProperty("owning_user"));
result.setProcess_status(rootTask.getProperty("real_state"));
result.setProcess_templateName(rootTask.getProperty("task_template"));
// String index = String.valueOf(i + 1) + "$$$" +
// result.getProcess_createDate() + "$$$" +
// result.getTask_createDate() + "$$$" +
// result.getTask_finishDate();
String index = String.valueOf(i + 1) + "$$$" + simpleDate.format(rootTask.getDateProperty("creation_date")) + "$$$" + result.getProcess_name() + "$$$" + simpleDate.format(taskCreateDate);
taskIndexList.add(index);
taskMap.put(index, result);
}
taskList.add(task);
}
Collections.sort(taskIndexList, new ComparatorTask());
for (int i = 0; i < taskIndexList.size(); i++) {
SearchResults result = taskMap.get(taskIndexList.get(i));
result.setIndex(String.valueOf(i + 1));
results.add(result);
}
}
}
catch (TCException e) {
e.printStackTrace();
}
}
public String getUserByID(String userID) {
try {
TCTypeService service = session.getTypeService();
TCComponentUserType userType = (TCComponentUserType) service.getTypeComponent("User");
if (userType.find(userID) != null) {
String user = userType.find(userID).toString();
return user;
}
}
catch (TCException e1) {
e1.printStackTrace();
}
return "";
}
public void initUI() {
this.setTitle("查询任务");
ImageIcon image = Registry.getImageIconFromPath("/com/teamcenter/rac/ecmanagement/images/processviewer_16.png");
this.setIconImage(image.getImage());
JPanel panel = new JPanel(new BorderLayout());
panel.add(BorderLayout.NORTH, setTopPanel());
panel.add(BorderLayout.CENTER, setCenterPanel());
panel.add(BorderLayout.SOUTH, setBottomPanel());
getContentPane().add(panel);
// this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
// this.addWindowListener(new WindowAdapter() {
// public void windowClosing(WindowEvent e) {
// dispose();
// }
// });
// showDialog();
pack();
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
this.setVisible(true);
}
private JPanel setTopPanel() {
JPanel panel = new JPanel(new BorderLayout());
panel.add(new JLabel(" "), BorderLayout.NORTH);
if (!isExceptionSearch) {
panel.add(new JLabel(" " + title), BorderLayout.CENTER);
}
panel.add(new JLabel(" "), BorderLayout.SOUTH);
return panel;
}
private JPanel setCenterPanel() {
JPanel panel1 = new JPanel(new PropertyLayout());
panel1.setBorder(new TitledBorder(""));
if (!isExceptionSearch) {
dtm1 = new SearchResultTableModel(names1, results, 0);
table1 = new JTable(dtm1) {
private static final long serialVersionUID = 1L;
protected JTableHeader createDefaultTableHeader() {
return new GroupableTableHeader(columnModel);
}
};
GroupableTableHeader header = new GroupableTableHeader(table1.getColumnModel());
javax.swing.table.TableColumnModel cm = table1.getColumnModel();
// 接受类型
ColumnGroup taskCol = new ColumnGroup("所参入任务信息");
taskCol.add(cm.getColumn(1));
taskCol.add(cm.getColumn(2));
taskCol.add(cm.getColumn(3));
taskCol.add(cm.getColumn(4));
taskCol.add(cm.getColumn(5));
taskCol.add(cm.getColumn(6));
taskCol.add(cm.getColumn(7));
header.addColumnGroup(taskCol);
ColumnGroup processCol = new ColumnGroup("所属工作流信息");
processCol.add(cm.getColumn(8));
processCol.add(cm.getColumn(9));
processCol.add(cm.getColumn(10));
processCol.add(cm.getColumn(11));
processCol.add(cm.getColumn(12));
processCol.add(cm.getColumn(13));
processCol.add(cm.getColumn(14));
header.addColumnGroup(processCol);
table1.setTableHeader(header);
table1.setDefaultRenderer(Object.class, new TableColorRender());
dtm1.setTableColumnsWidth(table1, 0);
} else {
dtm1 = new SearchResultTableModel(names2, results, 1);
table1 = new JTable(dtm1);
dtm1.setTableColumnsWidth(table1, 1);
}
table1.setRowHeight(20);
table1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// 对列进行渲染
table1.getColumnModel().getColumn(0).setCellRenderer(new TableColumnRender());
Dimension screen = getToolkit().getScreenSize();
JScrollPane scrollPane1 = new JScrollPane(table1, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
if (!isExceptionSearch) {
scrollPane1.setPreferredSize(new Dimension((int) (screen.getWidth() * (0.75)), (int) (screen.getHeight() * (0.6))));
} else {
scrollPane1.setPreferredSize(new Dimension((int) (screen.getWidth() * (0.62)), (int) (screen.getHeight() * (0.5))));
}
JPanel panel = new JPanel(new BorderLayout());
panel.setBorder(new TitledBorder(""));
panel.add(scrollPane1);
return panel;
}
private JPanel setBottomPanel() {
JPanel southPanel = new JPanel(new FlowLayout());
// southPanel.setSize(100, 15);
JButton confirmButton = new JButton("查看流程");
JButton exitButton = new JButton("退 出");
JButton exportButton = new JButton("导出Excel");
confirmButton.addActionListener(new buttonListener());
exitButton.addActionListener(new buttonListener());
exportButton.addActionListener(new buttonListener());
southPanel.add(new JLabel(" "));
southPanel.add(new JLabel(" "));
southPanel.add(new JLabel(" "));
southPanel.add(new JLabel(" "));
southPanel.add(new JLabel(" "));
southPanel.add(confirmButton);
if (!isExceptionSearch) {
southPanel.add(exportButton);
}
southPanel.add(exitButton);
return southPanel;
}
class buttonListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
String name = ((JButton) event.getSource()).getText();
if (name.equals("查看流程")) {
showProcess();
} else if (name.equals("导出Excel")) {
exportResult();
} else if (name.equals("退 出")) {
dispose();
}
}
}
private void exportResult() {
String dir = new GetChoosePath().getPath("\\viewTask.txt");
if ((dir != "") || (dir.trim().length() > 0)) {
excelInfo.setTitle(title);
excelInfo.setTemplateFileName(getTemplateFile());
String times = String.valueOf(new SimpleDateFormat("yyyyMMddhhmmss").format(new Date(System.currentTimeMillis())));
excelInfo.setTargetFileName(dir + "\\查询任务_" + times + ".xls");
new ExportSearchResult(results, excelInfo);
openFile(excelInfo.getTargetFileName(), false);
this.setVisible(true);
}
}
public String getTemplateFile() {
HashMap<String, String> cfghm = UtilApi.getPreferenceHashMap(session, TCPreferenceService.TC_preference_site, reportOption);
if (cfghm == null) {
MessageBox.post("没有配置首选项【" + reportOption + "】!", "INFO", MessageBox.INFORMATION);
return "";
}
String DatasetOwningUser = (cfghm.get("DatasetOwningUser") + "").trim();
String DatasetOwningGroup = (cfghm.get("DatasetOwningGroup") + "").trim();
String DatasetName = (cfghm.get("DatasetName") + "").trim();
DataSetFinder dataset_finder = new DataSetFinder(session);
TCComponentDataset imancomponentdataset = dataset_finder.FindDatasetByName(DatasetName, DatasetOwningUser, DatasetOwningGroup, "MSExcel");
System.out.println("imancomponentdataset=========" + imancomponentdataset);
if (imancomponentdataset != null) {
try {
File file1 = new File(reportPath);
if (!file1.exists()) {
file1.createNewFile();
}
File file = dataset_finder.ExportFileToDir(imancomponentdataset, reportPath);
if (file != null) {
System.out.println("file=========" + file.getAbsolutePath());
return file.getAbsolutePath();
}
}
catch (Exception e) {
MessageBox.post("导出数据集命名引用时出错!", "INFO", MessageBox.INFORMATION);
e.printStackTrace();
}
} else {
MessageBox.post("配置的【" + DatasetName + "】数据集模板不存在!", "INFO", MessageBox.INFORMATION);
}
return "";
}
public void openFile(String targetFile, boolean isDir) {
File file = new File(targetFile);
if (file.exists()) {
int value = 0;
if (isDir) {
value = new GetMessageDialog("INFO", "文件已经生成,是否打开其所在目录?").getValue();
// value =
// MessageDialog.openConfirm(Display.getCurrent().getActiveShell(),
// "INFO", "文件已经生成,是否打开其所在目录?");
} else {
// value =
// MessageDialog.openConfirm(Display.getCurrent().getActiveShell(),
// "INFO", "文件已经生成,是否打开?");
value = new GetMessageDialog("INFO", "文件已经生成,是否打开?").getValue();
}
if (value == 0) {
try {
Runtime runtime = Runtime.getRuntime();
runtime.exec("cmd /c start exit &&\"" + targetFile + "\" ");
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
private void showProcess() {
int row = table1.getSelectedRow();
if (row >= 0) {
final SearchResults result = results.get(row);
AIFDesktop localAIFDesktop = AIFUtility.getActiveDesktop();
// try {
// ExplorerService exploreService = new ExplorerService();
// // exploreService.expand();
// // exploreService.refresh();
// }
// catch (Exception e1) {
// e1.printStackTrace();
// }
// String str = "com.teamcenter.rac.explorer.ExplorerApplication";
// localAIFDesktop.sendToApplication(result.getTask(), str);
TCComponentTask task = result.getTask();
try {
AIFComponentContext[] context = task.getChildren();
InterfaceAIFComponent[] contexts = new InterfaceAIFComponent[] { (InterfaceAIFComponent) context[0].getComponent() };
try {
System.out.println("task.getName()==" + task.getName());
}
catch (TCException e1) {
e1.printStackTrace();
}
AbstractAIFCommand abstractaifcommand = new OpenCommand(localAIFDesktop, contexts);
try {
abstractaifcommand.executeModal();
}
catch (Exception e1) {
e1.printStackTrace();
}
}
catch (TCException e1) {
e1.printStackTrace();
}
try {
Thread.sleep(500);
}
catch (InterruptedException e) {
e.printStackTrace();
}
SearchResultDialog.this.setExtendedState(JFrame.ICONIFIED);
} else {
MessageBox.post("请选择要查看的流程!", "INFO", MessageBox.INFORMATION);
this.setVisible(true);
}
}
class SearchResults {
private String index = "";
private String task_name = "";
private String task_createDate = "";
private String task_finishDate = "";
private String task_status = "";
private String task_executor = "";
private String task_note = "";
private String task_type = "";
/**
* @return the task_type
*/
public String getTask_type() {
return task_type;
}
/**
* @param task_type the task_type to set
*/
public void setTask_type(String task_type) {
this.task_type = task_type;
}
private TCComponentTask task;
private String process_name;
private String process_createDate;
private String process_finishDate;
private String process_status;
private String process_executor;
private String process_lastModeUser;
private String process_templateName;
/**
* @return the task
*/
public TCComponentTask getTask() {
return task;
}
/**
* @return the process_lastModeUser
*/
public String getProcess_lastModeUser() {
return process_lastModeUser;
}
/**
* @param process_lastModeUser the process_lastModeUser to set
*/
public void setProcess_lastModeUser(String process_lastModeUser) {
this.process_lastModeUser = process_lastModeUser;
}
/**
* @param task the task to set
*/
public void setTask(TCComponentTask task) {
this.task = task;
}
/**
* @return the index
*/
public String getIndex() {
return index;
}
/**
* @param index the index to set
*/
public void setIndex(String index) {
this.index = index;
}
/**
* @return the task_name
*/
public String getTask_name() {
return task_name;
}
/**
* @param task_name the task_name to set
*/
public void setTask_name(String task_name) {
this.task_name = task_name;
}
/**
* @return the task_createDate
*/
public String getTask_createDate() {
return task_createDate;
}
/**
* @param task_createDate the task_createDate to set
*/
public void setTask_createDate(String task_createDate) {
this.task_createDate = task_createDate;
}
/**
* @return the task_finishDate
*/
public String getTask_finishDate() {
return task_finishDate;
}
/**
* @param task_finishDate the task_finishDate to set
*/
public void setTask_finishDate(String task_finishDate) {
this.task_finishDate = task_finishDate;
}
/**
* @return the task_status
*/
public String getTask_status() {
return task_status;
}
/**
* @param task_status the task_status to set
*/
public void setTask_status(String task_status) {
this.task_status = task_status;
}
/**
* @return the task_executor
*/
public String getTask_executor() {
return task_executor;
}
/**
* @param task_executor the task_executor to set
*/
public void setTask_executor(String task_executor) {
this.task_executor = task_executor;
}
/**
* @return the task_note
*/
public String getTask_note() {
return task_note;
}
/**
* @param task_note the task_note to set
*/
public void setTask_note(String task_note) {
this.task_note = task_note;
}
/**
* @return the process_name
*/
public String getProcess_name() {
return process_name;
}
/**
* @param process_name the process_name to set
*/
public void setProcess_name(String process_name) {
this.process_name = process_name;
}
/**
* @return the process_createDate
*/
public String getProcess_createDate() {
return process_createDate;
}
/**
* @param process_createDate the process_createDate to set
*/
public void setProcess_createDate(String process_createDate) {
this.process_createDate = process_createDate;
}
/**
* @return the process_finishDate
*/
public String getProcess_finishDate() {
return process_finishDate;
}
/**
* @param process_finishDate the process_finishDate to set
*/
public void setProcess_finishDate(String process_finishDate) {
this.process_finishDate = process_finishDate;
}
/**
* @return the process_status
*/
public String getProcess_status() {
return process_status;
}
/**
* @param process_status the process_status to set
*/
public void setProcess_status(String process_status) {
this.process_status = process_status;
}
/**
* @return the process_executor
*/
public String getProcess_executor() {
return process_executor;
}
/**
* @param process_executor the process_executor to set
*/
public void setProcess_executor(String process_executor) {
this.process_executor = process_executor;
}
/**
* @return the process_templateName
*/
public String getProcess_templateName() {
return process_templateName;
}
/**
* @param process_templateName the process_templateName to set
*/
public void setProcess_templateName(String process_templateName) {
this.process_templateName = process_templateName;
}
}
}

@ -0,0 +1,135 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: SearchResultTableModel.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 03:46:12 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task;
import java.util.Enumeration;
import java.util.List;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import com.connor.lidy.task.SearchResultDialog.SearchResults;
public class SearchResultTableModel extends DefaultTableModel {
private static final long serialVersionUID = 1L;
/**
* Creates a new instance of EditBatchProcessLineTableModel.
* @param data
*/
public SearchResultTableModel(String[] names, List<SearchResults> data, int index) {
super(getData(data, index), names);
}
public static Object[][] getData(List<SearchResults> data, int index) {
Object[][] datas = new Object[data.size()][];
for (int i = 0; i < data.size(); i++) {
if (index == 0) {
String[] info = new String[15];
info[0] = String.valueOf(i + 1);
info[1] = data.get(i).getTask_name();
info[2] = data.get(i).getTask_executor();
info[3] = data.get(i).getTask_createDate();
info[4] = data.get(i).getTask_finishDate();
info[5] = data.get(i).getTask_status();
info[6] = data.get(i).getTask_note();
info[7] = data.get(i).getTask_type();
info[8] = data.get(i).getProcess_executor();
info[9] = data.get(i).getProcess_name();
info[10] = data.get(i).getProcess_createDate();
info[11] = data.get(i).getProcess_finishDate();
info[12] = data.get(i).getProcess_lastModeUser();
info[13] = data.get(i).getProcess_status();
info[14] = data.get(i).getProcess_templateName();
datas[i] = info;
} else {
if (index == 1) {
String[] info = new String[8];
info[0] = String.valueOf(i + 1);
info[1] = data.get(i).getProcess_executor();
info[2] = data.get(i).getProcess_name();
info[3] = data.get(i).getTask_name();
info[4] = data.get(i).getProcess_createDate();
info[5] = data.get(i).getProcess_finishDate();
info[6] = data.get(i).getProcess_lastModeUser();
info[7] = data.get(i).getProcess_status();
datas[i] = info;
}
}
}
return datas;
}
@Override
public boolean isCellEditable(int row, int column) {
if (column == 0) {
return false;
} else {
return true;
}
}
// 设置列宽
public void setTableColumnsWidth(JTable myTable, int index) {
if (index == 0) {
myTable.getColumnModel().getColumn(0).setPreferredWidth(30);
myTable.getColumnModel().getColumn(1).setPreferredWidth(80);
myTable.getColumnModel().getColumn(2).setPreferredWidth(80);
myTable.getColumnModel().getColumn(3).setPreferredWidth(80);
myTable.getColumnModel().getColumn(4).setPreferredWidth(80);
myTable.getColumnModel().getColumn(5).setPreferredWidth(60);
myTable.getColumnModel().getColumn(6).setPreferredWidth(60);
myTable.getColumnModel().getColumn(7).setPreferredWidth(60);
myTable.getColumnModel().getColumn(8).setPreferredWidth(80);
myTable.getColumnModel().getColumn(9).setPreferredWidth(80);
myTable.getColumnModel().getColumn(10).setPreferredWidth(80);
myTable.getColumnModel().getColumn(11).setPreferredWidth(80);
myTable.getColumnModel().getColumn(12).setPreferredWidth(80);
myTable.getColumnModel().getColumn(13).setPreferredWidth(50);
myTable.getColumnModel().getColumn(14).setPreferredWidth(80);
} else {
if (index == 1) {
myTable.getColumnModel().getColumn(0).setPreferredWidth(30);
myTable.getColumnModel().getColumn(1).setPreferredWidth(100);
myTable.getColumnModel().getColumn(2).setPreferredWidth(120);
myTable.getColumnModel().getColumn(3).setPreferredWidth(100);
myTable.getColumnModel().getColumn(4).setPreferredWidth(120);
myTable.getColumnModel().getColumn(5).setPreferredWidth(120);
myTable.getColumnModel().getColumn(6).setPreferredWidth(100);
myTable.getColumnModel().getColumn(7).setPreferredWidth(80);
}
}
}
// 设置列宽:
public void FitTableColumns(JTable myTable) {
JTableHeader header = myTable.getTableHeader();
// header.getColumnModel().getColumn(0)
int rowCount = myTable.getRowCount();
Enumeration<TableColumn> columns = myTable.getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn column = (TableColumn) columns.nextElement();
int col = header.getColumnModel().getColumnIndex(column.getIdentifier());
int width = (int) myTable.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(myTable, column.getIdentifier(), false, false, -1, col).getPreferredSize().getWidth();
for (int row = 0; row < rowCount; row++) {
int preferedWidth = (int) myTable.getCellRenderer(row, col).getTableCellRendererComponent(myTable, myTable.getValueAt(row, col), false, false, row, col).getPreferredSize().getWidth();
width = Math.max(width, preferedWidth);
}
header.setResizingColumn(column);
column.setWidth(width + myTable.getIntercellSpacing().width);
}
}
}

@ -0,0 +1,450 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: SearchTaskDialog.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 03:46:21 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.connor.lidy.task.util.GetAllUserIds;
import com.connor.lidy.task.util.UtilApi;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent; //import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponentTask;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.DateButton;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
@SuppressWarnings("deprecation")
public class SearchTaskDialog extends AbstractAIFDialog {
// public class SearchTaskDialog extends JDialog {
// public class SearchTaskDialog extends JFrame {
private static final long serialVersionUID = 1L;
private JComboBox<String> user_cmb;
private DateButton startTime_jtb;
private DateButton endTime_jtb;
private JCheckBox EPMTask_ck;
private JCheckBox EPMDoTask_ck;
private JCheckBox EPMReviewTask_ck;
private JCheckBox EPMAcknowledgeTask_ck;
private JCheckBox EPMAddStatusTask_ck;
private JCheckBox EPMConditionTask_ck;
private String title;
private AbstractAIFUIApplication app;
private String queryName = "__SearachViewTask";
private String querySelectSigoff = "__SearchEPMReviewTask";
private TCSession session;
private boolean isExceptionSearch = false;
// private String serverInfoOption = "origin_serverinfo";
public SearchTaskDialog(AbstractAIFUIApplication app, String title, boolean isExceptionSearch) {
super(true);
this.title = title;
this.isExceptionSearch = isExceptionSearch;
this.app = app;
session = (TCSession) app.getSession();
initUI();
}
public void initUI() {
// setPersistentDisplay(false);
// setOptimalDisplay(false);
setTitle(title);
this.setResizable(false);
// this.setAlwaysOnTop(true);
// ImageIcon image =
// Registry.getImageIconFromPath("/com/teamcenter/rac/ecmanagement/images/processviewer_16.png");
// this.setIconImage(image.getImage());
JPanel panel = new JPanel(new PropertyLayout());
panel.add("1.1.left.center", new JLabel(" "));
if (isExceptionSearch) {
panel.add("1.2.left.center", setSearchExceptionPanel());
} else {
panel.add("1.2.left.center", setSearchPanel());
}
panel.add("2.1.left.center", new JLabel(" "));
this.getContentPane().add(panel);
pack();
validate();
Dimension screen = getToolkit().getScreenSize();
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
this.setVisible(true);
// showDialog();
// Dimension screen = getToolkit().getScreenSize();
// setLocation((screen.width - getSize().width) / 2, (screen.height -
// getSize().height) / 2);
}
private JPanel setSearchExceptionPanel() {
startTime_jtb = new DateButton();
endTime_jtb = new DateButton();
JPanel panel1 = new JPanel(new PropertyLayout());
panel1.setBorder(BorderFactory.createTitledBorder("请输入任务查询条件"));
panel1.add("1.1.left.center", new JLabel(" "));
panel1.add("2.1.left.center", new JLabel(" 执行时间_自 "));
panel1.add("2.2.left.center", startTime_jtb);
panel1.add("2.3.left.center", new JLabel(" "));
panel1.add("3.1.left.center", new JLabel(" 执行时间_止 "));
panel1.add("3.2.left.center", endTime_jtb);
panel1.add("4.1.left.center", new JLabel(" "));
JPanel panel = new JPanel(new PropertyLayout());
panel.add("1.1.left.center", panel1);
panel.add("1.2.left.center", setButtonPanel());
return panel;
}
private JPanel setSearchPanel() {
user_cmb = new JComboBox<>();
user_cmb.setPreferredSize(new Dimension(156, 27));
startTime_jtb = new DateButton();
endTime_jtb = new DateButton();
java.util.Date myDate = new java.util.Date();
long myTime = (myDate.getTime() / 1000) - 60 * 60 * 24 * 7;
myDate.setTime(myTime * 1000);
startTime_jtb.setDate(myDate);
new Thread() {
public void run() {
while (true) {
try {
String userRole = session.getPreferenceService().getString(4, "Cust_search_task_role");
if(session.getCurrentRole().getRoleName().equals(userRole)){
List<String> users = GetAllUserIds.getUsers();
Collections.sort(users);
if (users != null) {
for (int i = 0; i < users.size(); i++) {
user_cmb.addItem(users.get(i));
if (users.get(i).equalsIgnoreCase(session.getUser().getUserId())) {
user_cmb.setSelectedIndex(i);
}
}
user_cmb.setEnabled(true);
break;
}
}else{
user_cmb.addItem(session.getUser().toString());
break;
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
JPanel panel1 = new JPanel(new PropertyLayout());
panel1.setBorder(BorderFactory.createTitledBorder("请输入任务查询条件"));
panel1.add("1.1.left.center", new JLabel(" 执 行 者 "));
panel1.add("1.2.left.center", user_cmb);
panel1.add("1.3.left.center", new JLabel(" "));
panel1.add("2.1.left.center", new JLabel(" 执行时间_自 "));
panel1.add("2.2.left.center", startTime_jtb);
panel1.add("2.3.left.center", new JLabel(" "));
panel1.add("3.1.left.center", new JLabel(" 执行时间_止 "));
panel1.add("3.2.left.center", endTime_jtb);
panel1.add("3.3.left.center", new JLabel(" "));
JPanel panel2 = new JPanel(new PropertyLayout());
panel2.setBorder(BorderFactory.createTitledBorder("请选择查询任务类型"));
EPMTask_ck = new JCheckBox("EPMTask");
EPMDoTask_ck = new JCheckBox("EPMDoTask");
EPMReviewTask_ck = new JCheckBox("EPMReviewTask");
EPMAcknowledgeTask_ck = new JCheckBox("EPMAcknowledgeTask");
EPMAddStatusTask_ck = new JCheckBox("EPMAddStatusTask");
EPMConditionTask_ck = new JCheckBox("EPMConditionTask");
EPMTask_ck.setSelected(true);
EPMDoTask_ck.setSelected(true);
EPMReviewTask_ck.setSelected(true);
EPMAcknowledgeTask_ck.setSelected(true);
panel2.add("1.1.left.center", EPMTask_ck);
panel2.add("1.2.left.center", EPMDoTask_ck);
panel2.add("1.3.left.center", new JLabel(" "));
panel2.add("2.1.left.center", EPMReviewTask_ck);
panel2.add("2.2.left.center", EPMConditionTask_ck);
panel2.add("2.3.left.center", new JLabel(" "));
panel2.add("3.1.left.center", EPMAcknowledgeTask_ck);
panel2.add("3.2.left.center", EPMAddStatusTask_ck);
JPanel panel = new JPanel(new PropertyLayout());
panel.add("1.1.left.center", panel1);
panel.add("2.1.left.center", panel2);
panel.add("2.2.left.center", setButtonPanel());
return panel;
}
private JPanel setButtonPanel() {
JPanel panel = new JPanel(new PropertyLayout());
JButton confirmBtn = new JButton("确定");
JButton cancelBtn = new JButton("取消");
confirmBtn.addActionListener(new buttonListener());
cancelBtn.addActionListener(new buttonListener());
panel.add("1.1.left.center", new JLabel(" "));
panel.add("2.1.left.center", confirmBtn);
panel.add("3.1.left.center", new JLabel(" "));
panel.add("4.1.left.center", cancelBtn);
panel.add("5.1.left.center", new JLabel(" "));
return panel;
}
class buttonListener implements ActionListener {
public void actionPerformed(ActionEvent actionevent) {
session.setStatus("正在查询,稍等...");
JButton obj = ((JButton) actionevent.getSource());
if (obj.getText().equals("确定")) {
try {
if (startTime_jtb.getDate() == null) {
MessageBox.post("【执行时间_自】不允许为空", "INFO", MessageBox.INFORMATION);
return;
}
Date endDate = new Date();
if (endTime_jtb.getDate() != null) {
endDate = endTime_jtb.getDate();
}
if (startTime_jtb.getDate().compareTo(endDate) >= 0) {
MessageBox.post("【执行时间_止】应比【执行时间_自】晚", "INFO", MessageBox.INFORMATION);
return;
}
List<InterfaceAIFComponent> components = new ArrayList<InterfaceAIFComponent>();
SearchCondition searchCondition = new SearchCondition();
String as[] = { "修改时间晚于", "修改时间早于", "ID", "类型", "ModUserID"};
SimpleDateFormat fomat = new SimpleDateFormat("dd-M-yyyy HH:ss");
// fomat = new SimpleDateFormat("dd-M-yyyy HH:ss:mm");
String startTime = fomat.format(startTime_jtb.getDate());
String endTime = fomat.format(endDate);
/*
* windows HashMap<String, String> cfghm =
* UtilApi.getPreferenceHashMap(session,
* TCPreferenceService.TC_preference_site,
* serverInfoOption); if (cfghm == null) {
* MessageBox.post("没有配置首选项【" + serverInfoOption + "】!",
* "INFO", MessageBox.INFORMATION); return; } String
* isWindows = (cfghm.get("isWindowsServer") + "").trim();
* if (isWindows.equalsIgnoreCase("true")) { startTime =
* startTime_jtb.getDate().toLocaleString(); endTime =
* endDate.toLocaleString();
* System.out.println("Windows:startTime=========" +
* startTime); System.out.println("Windows:endTime========="
* + endTime); }
*/
// System.out.println("Windows:startTime=========" + startTime);
// System.out.println("Windows:endTime=========" + endTime);
searchCondition.setCreateDate(startTime);
searchCondition.setFinishDate(endTime);
if (!isExceptionSearch) {
String user = (user_cmb.getSelectedItem().toString());
if ((user.length() == 0) || (user == null)) {
MessageBox.post("用户不允许为空!", "INFO", MessageBox.INFORMATION);
return;
}
if ((!(EPMTask_ck.isSelected())) && (!(EPMDoTask_ck.isSelected())) && (!(EPMReviewTask_ck.isSelected())) && (!(EPMAcknowledgeTask_ck.isSelected())) && (!(EPMAddStatusTask_ck.isSelected()))) {
MessageBox.post("选择查询任务类型!", "INFO", MessageBox.INFORMATION);
return;
}
searchCondition.setUsername(user);
user = user.substring(0, user.indexOf("(")).trim();
List<String> taskList = new ArrayList<String>();
if (EPMTask_ck.isSelected()) {
taskList.add("EPMTask");
}
if (EPMDoTask_ck.isSelected()) {
taskList.add("EPMDoTask");
}
if (EPMReviewTask_ck.isSelected()) {
taskList.add("EPMReviewTask");
}
if (EPMAcknowledgeTask_ck.isSelected()) {
taskList.add("EPMAcknowledgeTask");
}
if (EPMAddStatusTask_ck.isSelected()) {
taskList.add("EPMAddStatusTask");
}
if (EPMConditionTask_ck.isSelected()) {
taskList.add("EPMConditionTask");
}
for (int i = 0; i < taskList.size(); i++) {
if (taskList.get(i).equals("EPMTask")) {
String as1[] = { startTime, endTime, user, taskList.get(i).trim(), "*" };
InterfaceAIFComponent[] components1 = UtilApi.getQueryList((TCSession) app.getSession(), queryName, as, as1);
if (components1 != null) {
for (int m = 0; m < components1.length; m++) {
components.add(components1[m]);
}
}
} else {
if (taskList.get(i).equals("EPMReviewTask")) {
String strID[] = { "memberUser" };
String as1[] = { user };
InterfaceAIFComponent[] components1 = UtilApi.getQueryList((TCSession) app.getSession(), querySelectSigoff,strID, as1);
if (components1 != null) {
for (int m = 0; m < components1.length; m++) {
components.add(components1[m]);
}
}
} else {
String as1[] = { startTime, endTime, user, taskList.get(i).trim(), "*"};
InterfaceAIFComponent[] components1 = UtilApi.getQueryList((TCSession) app.getSession(), queryName, as, as1);
if (components1 != null) {
for (int m = 0; m < components1.length; m++) {
components.add(components1[m]);
}
}
}
}
}
} else {
String as1[] = { startTime, endTime, "*", "EPMTask", "*" };
InterfaceAIFComponent[] components1 = UtilApi.getQueryList((TCSession) app.getSession(), queryName, as, as1);
if (components1 != null) {
for (int m = 0; m < components1.length; m++) {
TCComponentTask task = (TCComponentTask) components1[m];
isValidTask(task, components);
}
}
}
if ((components == null) || (components.size() == 0)) {
MessageBox.post("没有符合要求的记录!", "INFO", MessageBox.INFORMATION);
} else {
SearchTaskDialog.this.dispose();
new SearchResultDialog(app, components, searchCondition, isExceptionSearch);
}
}
catch (Exception e) {
e.printStackTrace();
}
} else {
SearchTaskDialog.this.dispose();
}
session.setReadyStatus();
}
}
private boolean isValidTask(TCComponentTask task, List<InterfaceAIFComponent> components) {
try {
TCComponentTask[] children = task.getSubtasks();
for (int i = 0; i < children.length; i++) {
TCComponentTask childrenTask = children[i];
String childState = childrenTask.getProperty("real_state");
if (childState.equals("待处理")) {
TCComponentTask previousTask = childrenTask.getPrevious();
if (previousTask != null) {
String previousType = previousTask.getProperty("object_type");
String previousState = previousTask.getProperty("real_state");
if ((previousState.equals("已完成")) && (!previousType.equals("EPMConditionTask"))) {
components.add(childrenTask);
return false;
} else {
if (!isValidTask(childrenTask, components)) {
components.add(childrenTask);
return false;
}
}
}
}
}
String taskState = task.getProperty("real_state");
if (taskState.equals("已开始")) {
if ((children != null) && (children.length >= 3)) {
int count = 0;
for (int i = 0; i < children.length; i++) {
TCComponentTask childrenTask = children[i];
String childState = childrenTask.getProperty("real_state");
if (childState.equals("已开始")) {
count++;
}
}
if (count == 0) {
components.add(task);
return false;
}
}
}
}
catch (Exception e) {
e.printStackTrace();
}
return true;
}
class SearchCondition {
private String username;
private String createDate;
private String finishDate;
/**
* @return the username
*/
public String getUsername() {
return username;
}
/**
* @param username the username to set
*/
public void setUsername(String username) {
this.username = username;
}
/**
* @return the createDate
*/
public String getCreateDate() {
return createDate;
}
/**
* @param createDate the createDate to set
*/
public void setCreateDate(String createDate) {
this.createDate = createDate;
}
/**
* @return the finishDate
*/
public String getFinishDate() {
return finishDate;
}
/**
* @param finishDate the finishDate to set
*/
public void setFinishDate(String finishDate) {
this.finishDate = finishDate;
}
}
}

@ -0,0 +1,52 @@
/*
#=============================================================================
#
# Copyright (c) 2009 Origin Enterprise Solution LTD.
#
#=============================================================================
# File name: CheckBoxColumnRender.java
# File description:
#=============================================================================
# Date Name Action Description of Change
# 2011-4-20 liqz Ini ³õʼ»¯(From Shaangu)
#=============================================================================
*/
package com.connor.lidy.task.util;
import java.awt.Component;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
public class CheckBoxColumnRender extends DefaultTableCellRenderer {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*
*/
public CheckBoxColumnRender() {
super();
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
//µÃµ½±íÍ·
JCheckBox checkBox=new JCheckBox();
// JTableHeader header = table.getTableHeader();
// if (header != null) {
// setForeground(header.getForeground());
// setBackground(header.getBackground());
// setFont(header.getFont());
// }
setHorizontalAlignment(JLabel.CENTER);
checkBox.setSelected(Boolean.valueOf(value.toString()));
// (value == null) ? "" : value.toString()
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
return checkBox;
}
}

@ -0,0 +1,205 @@
package com.connor.lidy.task.util;
import java.awt.Component;
import java.awt.Dimension;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
public class ColumnGroup {
protected TableCellRenderer renderer;
protected Vector<Object> v;
protected String text;
protected int margin = 0;
public ColumnGroup(String text) {
this(null, text);
}
public ColumnGroup(TableCellRenderer renderer, String text) {
if (renderer == null) {
this.renderer = new DefaultTableCellRenderer() {
/**
*
*/
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
JTableHeader header = table.getTableHeader();
if (header != null) {
setForeground(header.getForeground());
setBackground(header.getBackground());
setFont(header.getFont());
}
setHorizontalAlignment(JLabel.CENTER);
this.setText((value == null) ? "" : value.toString());
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
return this;
}
};
} else {
this.renderer = renderer;
}
this.text = text;
v = new Vector<>();
}
/**
* @param obj TableColumn or ColumnGroup
*/
public void add(Object obj) {
if (obj == null) {
return;
}
v.addElement(obj);
}
/**
* @param c TableColumn
* @param v ColumnGroups
*/
@SuppressWarnings("unchecked")
public Vector<Object> getColumnGroups(TableColumn c, Vector<Object> g) {
g.addElement(this);
if (v.contains(c))
return g;
Enumeration<Object> enumeration = v.elements();
while (enumeration.hasMoreElements()) {
Object obj = enumeration.nextElement();
if (obj instanceof ColumnGroup) {
Vector<Object> groups = (Vector<Object>) ((ColumnGroup) obj).getColumnGroups(c, (Vector<Object>) g.clone());
if (groups != null)
return groups;
}
}
return null;
}
public TableCellRenderer getHeaderRenderer() {
return renderer;
}
public Object getHeaderValue() {
return text;
}
public int getSize() {
return v == null ? 0 : v.size();
}
public Dimension getSize(JTable table) {
Component comp = renderer.getTableCellRendererComponent(table, getHeaderValue(), false, false, -1, -1);
int height = comp.getPreferredSize().height;
int width = 0;
Enumeration<Object> enumeration = v.elements();
while (enumeration.hasMoreElements()) {
Object obj = enumeration.nextElement();
if (obj instanceof TableColumn) {
TableColumn aColumn = (TableColumn) obj;
width += aColumn.getWidth();
width += margin;
} else {
width += ((ColumnGroup) obj).getSize(table).width;
}
}
return new Dimension(width, height);
}
/**
* :(2003-7-14 10:53:26)
* @return java.lang.String
*/
public java.lang.String getText() {
return text;
}
/**
* Column :(2002-9-25 15:49:00)
*/
public boolean removeColumn(ColumnGroup ptg, TableColumn tc) {
boolean retFlag = false;
if (tc != null) {
for (int i = 0; i < ptg.v.size(); i++) {
Object tmpObj = ptg.v.get(i);
if (tmpObj instanceof ColumnGroup) {
retFlag = removeColumn((ColumnGroup) tmpObj, tc);
// 如果找到返回
if (retFlag)
break;
} else if (tmpObj instanceof TableColumn) {
// 判断是否查找的对象
if (tmpObj == tc) {
ptg.v.remove(i);
retFlag = true;
break;
}
}
}
}
return retFlag;
}
/**
* ColumnGrp true,false; :(2002-9-25 15:49:00)
*/
public boolean removeColumnGrp(ColumnGroup ptg, ColumnGroup tg) {
boolean retFlag = false;
if (tg != null) {
for (int i = 0; i < ptg.v.size(); i++) {
Object tmpObj = ptg.v.get(i);
if (tmpObj instanceof ColumnGroup) {
// 判断是否查找的对象
if (tmpObj == tg) {
ptg.v.remove(i);
retFlag = true;
break;
} else {
retFlag = removeColumnGrp((ColumnGroup) tmpObj, tg);
// 如果找到返回
if (retFlag)
break;
}
} else if (tmpObj instanceof TableColumn) {
break;
}
}
}
return retFlag;
}
public void setColumnMargin(int margin) {
this.margin = margin;
Enumeration<Object> enumeration = v.elements();
while (enumeration.hasMoreElements()) {
Object obj = enumeration.nextElement();
if (obj instanceof ColumnGroup) {
((ColumnGroup) obj).setColumnMargin(margin);
}
}
}
public void setHeaderRenderer(TableCellRenderer renderer) {
if (renderer != null) {
this.renderer = renderer;
}
}
/**
* :(2003-7-14 10:53:26)
* @param newText java.lang.String
*/
public void setText(java.lang.String newText) {
text = newText;
}
}

@ -0,0 +1,251 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description:
#=======================================================================================================
# Date Name Action Description of Change
# 20090301 Matt Shan Ini
#=======================================================================================================
*/
package com.connor.lidy.task.util;
import java.io.File;
import com.teamcenter.rac.kernel.TCAccessControlService;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentItemType;
import com.teamcenter.rac.kernel.TCComponentQuery;
import com.teamcenter.rac.kernel.TCComponentQueryType;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCComponentUser;
import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.kernel.TCTextService;
import com.teamcenter.rac.util.MessageBox;
public class DataSetFinder {
private TCSession session = null;
/**
*
* @param session session
*/
public DataSetFinder(TCSession pSession) {
queryType = null;
datasetQuery = null;
boolean flag = false;
try {
session = pSession;
its = session.getTextService();
queryType = (TCComponentQueryType) session.getTypeComponent("ImanQuery");
}
catch (TCException imane) {
imane.printStackTrace();
imane.dump();
}
try {
datasetQuery = (TCComponentQuery) queryType.find("数据集...");
}
catch (TCException imane) {
imane.printStackTrace();
imane.dump();
flag = true;
}
if (datasetQuery == null || flag) {
try {
datasetQuery = (TCComponentQuery) queryType.find(its.getTextValue("DataSet..."));
}
catch (TCException imane) {
imane.printStackTrace();
imane.dump();
}
}
}
/**
*
* @param datasetname
* @return
*/
public TCComponentDataset FindDatasetByName(String datasetname, String pOwningUser, String pOwningGroup, String pDatasetType) {
System.out.println("-----------FindDatasetByName");
try {
//String f_dataset_name[] = { its.getTextValue("Name"), its.getTextValue("OwningUser"), its.getTextValue("OwningGroup"), its.getTextValue("DatasetType") };
String f_dataset_name[] = new String[4];
f_dataset_name[0] = its.getTextValue("Name");
if(f_dataset_name[0] == null){
f_dataset_name[0] = "Name";
}
f_dataset_name[1] = its.getTextValue("OwningUser");
if(f_dataset_name[1] == null){
f_dataset_name[1] = "Owning User";
}
f_dataset_name[2] = its.getTextValue("OwningGroup");
if(f_dataset_name[2] == null){
f_dataset_name[2] = "Owning Group";
}
f_dataset_name[3] = its.getTextValue("DatasetType");
if(f_dataset_name[3] == null){
f_dataset_name[3] = "Dataset Type";
}
f_dataset_name_value = new String[4];
f_dataset_name_value[0] = datasetname;
f_dataset_name_value[1] = pOwningUser;
f_dataset_name_value[2] = pOwningGroup;
f_dataset_name_value[3] = pDatasetType;
com.teamcenter.rac.kernel.TCComponent dataset[] = datasetQuery.execute(f_dataset_name, f_dataset_name_value);
if (dataset == null || dataset.length == 0) {
return null;
} else {
TCComponentDataset dataset0 = (TCComponentDataset) dataset[0];
TCComponentDataset dataset1 = dataset0.latest();
return dataset1;
}
}
catch (TCException imane) {
imane.printStackTrace();
imane.dump();
return null;
}
}
/**
*
* @param datasetname
* @return
*/
public TCComponentDataset FindDatasetByName(String datasetname) {
TCComponent[] components = null;
try {
TCComponentItemRevision revision =null;
TCComponentItemType tccomItemType = (TCComponentItemType) session.getTypeComponent("Item");
TCComponentItem[]items =tccomItemType.findItems(datasetname);
if(items.length >0){
revision=items[0].getLatestItemRevision() ;
}
components = revision.getRelatedComponents("IMAN_specification");// 通过关系找对象
for (TCComponent component : components) {
if (component instanceof TCComponentDataset) {
TCComponentDataset dataset = (TCComponentDataset) component;
return dataset;
}
}
} catch (TCException e) {
e.printStackTrace();
return null;
}
return null;
}
/**
*
* @param dataset
* @param nameRef
* @param filename
* @param dir
* @return
*/
public File ExportFileToDir(TCComponentDataset dataset, String nameRef, String filename, String dir) {
File exportFile = null;
try {
String workdir = dir;
File tFile = new File(workdir, filename);
if (tFile.exists())
tFile.delete();
if (!checkAccessPrivilige(session.getUser(), dataset, "EXPORT")) {
MessageBox.post("您没有权限下载报表模板文件!", "提示", MessageBox.WARNING);
return null;
}
TCComponentTcFile files[] = dataset.getTcFiles();
if (files.length != 1) {
MessageBox.post("请检查报表模板文件是否配置正确!", "提示", MessageBox.WARNING);
return null;
}
for (int i = 0; i < files.length; i++) {
exportFile = files[i].getFile(workdir, filename);
}
return exportFile;
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
private boolean checkAccessPrivilige(TCComponentUser user, TCComponent comp, String accessName) throws TCException {
TCAccessControlService accessService = ((TCSession) session).getTCAccessControlService();
boolean returnboolean = accessService.checkUsersPrivilege(user, comp, accessName);
return returnboolean;
}
/**
*
* @param dataset
* @param nameRef
* @param filename
* @param dir
* @return
*/
public File ExportFileToDir(TCComponentDataset dataset, String filename, String dir) {
File exportFile = null;
try {
String workdir = dir;
File tFile = new File(workdir, filename);
if (tFile.exists())
tFile.delete();
if (!checkAccessPrivilige(session.getUser(), dataset, "EXPORT")) {
MessageBox.post("您没有权限下载报表模板文件!", "提示", MessageBox.WARNING);
return null;
}
TCComponentTcFile files[] = dataset.getTcFiles();
if (files.length != 1) {
MessageBox.post("请检查报表模板文件是否配置正确!", "提示", MessageBox.WARNING);
return null;
}
for (int i = 0; i < files.length; i++) {
exportFile = files[i].getFile(workdir, filename);
}
return exportFile;
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
public File ExportFileToDir(TCComponentDataset dataset, String dir) {
File exportFile = null;
try {
String workdir = dir;
if (!checkAccessPrivilige(session.getUser(), dataset, "EXPORT")) {
MessageBox.post("您没有权限下载报表模板文件!", "提示", MessageBox.WARNING);
return null;
}
TCComponentTcFile files[] = dataset.getTcFiles();
if (files.length != 1) {
MessageBox.post("请检查报表模板文件是否配置正确!", "提示", MessageBox.WARNING);
return null;
}
for (int i = 0; i < files.length; i++) {
exportFile = files[i].getFile(workdir);
}
return exportFile;
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
private TCComponentQueryType queryType;
private TCComponentQuery datasetQuery;
private TCTextService its;
private String f_dataset_name_value[];
}

@ -0,0 +1,132 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: GetAllUserIds.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 03:51:32 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.kernel.TCComponentContextList;
import com.teamcenter.rac.kernel.TCComponentQuery;
import com.teamcenter.rac.kernel.TCComponentQueryType;
import com.teamcenter.rac.kernel.TCComponentUser;
import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.kernel.TCTextService;
public class GetAllUserIds {
private AbstractAIFUIApplication pseapp;
/**
* TCQuery
*/
private String findType = "__WEB_find_user";
/**
* TCQuery
*/
private String str_key = "UserId";
/**
* TCQuery
*/
private String str_value = "*";
/**
*
*/
private List<String> allUsers = null;
private Map<String, String> userMap;
public GetAllUserIds(AbstractAIFUIApplication app) {
System.out.println("_______________GetAllUserIds________");
this.pseapp = app;
userMap = new HashMap<String, String>();
allUsers = new ArrayList<String>();
getAllUser();
}
/**
* getAllUser:
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public void getAllUser() {
System.out.println("__________getAllUser__________");
TCSession session = (TCSession) pseapp.getSession();
InterfaceAIFComponent components[] = null;
TCComponentUser user = null;
try {
TCTextService textService = session.getTextService();
TCComponentQueryType querytype = (TCComponentQueryType) session.getTypeComponent("ImanQuery");
TCComponentQuery query = (TCComponentQuery) querytype.find(findType);
//querytype.clearCache();
String as[] = { textService.getTextValue(str_key) };
String as1[] = new String[1];
as1[0] = str_value;
//query.clearCache();
TCComponentContextList list = query.getExecuteResultsList(as, as1);
System.out.println("list = "+list);
if (list != null) {
int count = list.getListCount();
System.out.println("count = " + count);
if(count > 0){
components = new InterfaceAIFComponent[count];
for (int i = 0; i < count; i++) {
if(list.get(i) != null){
components[i] = list.get(i).getComponent();
}
}
}
} else {
System.out.println("__WEB_find_user==null");
}
}
catch (TCException e) {
e.printStackTrace();
}
for (int i = 0; i < components.length; i++) {
if (components[i] instanceof TCComponentUser) {
user = (TCComponentUser) components[i];
try {
String userid = user.getUserId().toString();
String userName = user.getProperty("user_name");
userMap.put(userid + "(" + userName + ")", user.toString());
allUsers.add(userid + "(" + userName + ")");
}
catch (TCException e) {
e.printStackTrace();
}
}
}
}
private static List<String> userIDs = new ArrayList<String>();
public static synchronized void setUsers(List<String> users) {
userIDs = users;
}
public static synchronized List<String> getUsers() {
return userIDs;
}
public List<String> getAllUsers() {
return allUsers;
}
public Map<String, String> getUserMap() {
return userMap;
}
}

@ -0,0 +1,100 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: GetChoosePath.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 03:45:21 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task.util;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import javax.swing.JFileChooser;
public class GetChoosePath {
public String getPath(String filename) {
String tempPath = System.getProperty("java.io.tmpdir");
File tempFile = new File(tempPath + filename);
JFileChooser jfc = null;
if (!tempFile.exists()) {
try {
tempFile.createNewFile();
jfc = new JFileChooser();
} catch (IOException e) {
e.printStackTrace();
}
} else {
if (tempFile.exists()) {
BufferedReader in;
try {
in = new BufferedReader(new InputStreamReader(new FileInputStream(tempFile)));
String line;
try {
line = in.readLine();
if ((line != null) && (line.length() > 0)) {
File file = new File(line);
if (file.exists()) {
jfc = new JFileChooser(file);
} else {
jfc = new JFileChooser();
}
} else {
jfc = new JFileChooser();
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
}
}
jfc.setFileSelectionMode(JFileChooser.SAVE_DIALOG);
jfc.setInheritsPopupMenu(true);
// jfc.setDialogTitle("...");
jfc.setMultiSelectionEnabled(false);
jfc.setFileFilter(new javax.swing.filechooser.FileFilter() {
@Override
public boolean accept(File f) {
if (f.isDirectory())
return true;
else
return false;
}
@Override
public String getDescription() {
return null;//写的是文件的类型
}
});
int openOrCancel = jfc.showSaveDialog(null);
if (openOrCancel == 0) {
try {
BufferedWriter output;
output = new BufferedWriter(new FileWriter(tempFile));
output.write(jfc.getSelectedFile().getAbsolutePath());
output.close();
} catch (IOException e1) {
e1.printStackTrace();
}
File file = jfc.getSelectedFile();
return file.getAbsolutePath();
}
return "";
}
}

@ -0,0 +1,165 @@
/*
#=============================================================================
#
# copyright (c) 2009 Origin Enterprise Solution LTD.
#
#=============================================================================
# File name: GetCommonInfo.java
# File description:
#=============================================================================
# Date Name Action Description of Change
# 2011-4-20 liqz (From shangu)
#=============================================================================
*/
package com.connor.lidy.task.util;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import javax.swing.JFileChooser;
import com.teamcenter.rac.kernel.TCAccessControlService;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentUser;
import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
public class GetCommonInfo {
private TCSession session;
public GetCommonInfo(TCSession session) {
this.session = session;
}
/**
* getChoosePath:
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public String getChoosePath() {
String tempPath = System.getProperty("java.io.tmpdir");
String currentPath = "";
BufferedReader in = null;
try {
File file1 = new File(tempPath + "\\export.txt");
JFileChooser jfc = null;
if (file1.exists()) {
in = new BufferedReader(new InputStreamReader(new FileInputStream(file1)));
String line = in.readLine();
if (line != null) {
jfc = new JFileChooser(new File(line));
} else {
jfc = new JFileChooser();
}
} else {
jfc = new JFileChooser();
}
jfc.setFileSelectionMode(JFileChooser.SAVE_DIALOG);
int openOrCann = jfc.showSaveDialog(null);
if (openOrCann == 1) {
return currentPath;
}
// 用来存储用户所选的路径:
File file2 = new File(tempPath + "\\export.txt");
if (!file2.exists()) {
file2.createNewFile();
}
try {
BufferedWriter output = new BufferedWriter(new FileWriter(file2));
output.write(jfc.getSelectedFile().getAbsolutePath());
output.close();
currentPath = jfc.getSelectedFile().getAbsolutePath();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(in != null)
try {
in.close();
} catch (Exception e) {
// Auto-generated catch block
e.printStackTrace();
}
}
return currentPath;
}
public boolean isExistFiles(String path) {
boolean flag = false;
File file = new File(path);
if (file.isDirectory()) {
if (file.listFiles().length > 0) {
flag = true;
}
}
return flag;
}
/**
* existFile:
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public boolean existFile(String filePath, String fileName) {
boolean exist = false;
try {
if (fileName.indexOf('/') >= 0) {
fileName = fileName.replace('/', '_');
}
File file = new File(filePath + "\\" + fileName);
System.out.println("filePath_fileName:" + filePath + "\\" + fileName);
if (file.exists()) {
exist = true;
}
} catch (Exception e) {
e.printStackTrace();
MessageBox.post("在检查文件是否存在的时候,出现错误!", "ERROR", MessageBox.ERROR);
}
return exist;
}
/**
*
* @param tccomponent
* @return
*/
public boolean isReleased(TCComponent tccomponent) {
boolean flag = false;
try {
String s = tccomponent.getProperty("release_status_list");
if (s != null && s.length() > 0)
flag = true;
} catch (TCException tcexception) {
flag = false;
}
return flag;
}
/**
* existFile:
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public boolean checkAccessPrivilige(TCComponentUser user, TCComponent comp, String accessName) throws TCException {
TCAccessControlService accessService = ((TCSession) session).getTCAccessControlService();
boolean returnboolean = accessService.checkUsersPrivilege(user, comp, accessName);
return returnboolean;
}
}

@ -0,0 +1,91 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: GetMessageDialog.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 04:01:59 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task.util;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.rac.util.Separator;
import com.teamcenter.rac.util.VerticalLayout;
public class GetMessageDialog extends AbstractAIFDialog {
/**
* serialVersionUID:TODO
* @since Ver 1.1
*/
private static final long serialVersionUID = 1L;
private int value = 0;
private String title = "";
private String info = "";
public GetMessageDialog(String title, String info) {
super(true);
this.title=title;
this.info=info;
this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
}
public int getValue() {
setPersistentDisplay(true);
setOptimalDisplay(false);
setTitle(title);
JPanel parentPanel;
JPanel itemInfoPanel;
parentPanel = new JPanel(new VerticalLayout(5, 2, 2, 2, 2));
itemInfoPanel = new JPanel(new PropertyLayout());
URL url=this.getClass().getResource("image/info.png");
JLabel iconLabel=new JLabel();
iconLabel.setIcon(new ImageIcon(url));
itemInfoPanel.add("1.1.left.center",iconLabel);
itemInfoPanel.add("1.2.left.center",new JLabel(info));
JButton buttonYes = new JButton("是");
buttonYes.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
value = 0;
GetMessageDialog.this.dispose();
}
});
JButton buttonNo = new JButton("否");
buttonNo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
value = 1;
GetMessageDialog.this.dispose();
}
});
JPanel panelButton = new JPanel(new FlowLayout());
panelButton.add(buttonYes);
panelButton.add(buttonNo);
parentPanel.add("top.bin", new Separator());
parentPanel.add("top.bind.left.top", itemInfoPanel);
parentPanel.add("bottom.nobind.center.top", panelButton);
getContentPane().add(parentPanel);
pack();
Dimension screen = getToolkit().getScreenSize(); // 得到屏幕尺寸
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
setVisible(true);
return value;
}
}

@ -0,0 +1,106 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: GetMessagePromptDialog.java
#=======================================================================================================
# Date Name Action Description of Change
# 2009-11-13 tyl
#=======================================================================================================
*/
package com.connor.lidy.task.util;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.rac.util.VerticalLayout;
public class GetMessagePromptDialog extends AbstractAIFDialog {
/**
* serialVersionUID:TODO
* @since Ver 1.1
*/
private static final long serialVersionUID = 1L;
private String title;
private String info;
private String info2;
private int value = 1;
/**
* Creates a new instance of PromptDialog.
*/
public GetMessagePromptDialog(String title, String info) {
super(true);
this.title = title;
this.info = info;
}
public GetMessagePromptDialog(String title, String info, String info2) {
super(true);
this.title = title;
this.info = info;
this.info2 = info2;
}
// 返回决定:
public int getValue() {
setPersistentDisplay(true);
setOptimalDisplay(false);
setTitle(title);
JPanel parentPanel;
JPanel itemInfoPanel;
parentPanel = new JPanel(new VerticalLayout(5, 2, 2, 2, 2));
itemInfoPanel = new JPanel(new PropertyLayout());
URL url = this.getClass().getResource("image/info.png");
JLabel iconLabel = new JLabel();
iconLabel.setIcon(new ImageIcon(url));
itemInfoPanel.add("1.1.left.center", iconLabel);
itemInfoPanel.add("1.2.left.center", new JLabel(info));
itemInfoPanel.add("2.1.left.center", new JLabel(" "));
itemInfoPanel.add("2.2.left.center", new JLabel(info2));
JButton buttonYes = new JButton("是");
buttonYes.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
value = 0;
GetMessagePromptDialog.this.dispose();
}
});
JButton buttonNo = new JButton("否");
buttonNo.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
value = 1;
GetMessagePromptDialog.this.dispose();
}
});
JPanel panelButton = new JPanel(new FlowLayout());
panelButton.add(buttonYes);
panelButton.add(buttonNo);
parentPanel.add("top.bin", new JLabel(" "));
parentPanel.add("top.bind.left.top", itemInfoPanel);
parentPanel.add("bottom.nobind.center.top", panelButton);
getContentPane().add(parentPanel);
pack();
Dimension screen = getToolkit().getScreenSize(); // 得到屏幕尺寸
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
setVisible(true);
return value;
}
}

@ -0,0 +1,90 @@
package com.connor.lidy.task.util;
import java.util.Enumeration;
import java.util.Vector;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
/**
* GroupableTableHeader
* @author flyx
*/
public class GroupableTableHeader extends JTableHeader {
/**
*
*/
private static final long serialVersionUID = 1L;
// private static final String uiClassID = "GroupableTableHeaderUI";
protected Vector<ColumnGroup> columnGroups = null;
public GroupableTableHeader(TableColumnModel model) {
super(model);
setUI(new GroupableTableHeaderUI());
setReorderingAllowed(false);
setRequestFocusEnabled(false);
}
public void addColumnGroup(ColumnGroup g) {
if (columnGroups == null) {
columnGroups = new Vector<>();
}
columnGroups.addElement(g);
}
/**
*
* ´´½¨ÈÕÆÚ:(2001-8-31 15:54:29)
*/
public void clearColumnGroups() {
columnGroups = null;
}
public ColumnGroup[] getColumnGroups() {
ColumnGroup[] retg=null;
if (columnGroups.size()>0) {
retg=new ColumnGroup[columnGroups.size()];
columnGroups.copyInto(retg);
}
return retg;
}
public Enumeration<Object> getColumnGroups(TableColumn col) {
if (columnGroups == null)
return null;
Enumeration<ColumnGroup> enumi = columnGroups.elements();
while (enumi.hasMoreElements()) {
ColumnGroup cGroup = (ColumnGroup) enumi.nextElement();
Vector<Object> v_ret = (Vector<Object>) cGroup.getColumnGroups(col, new Vector<>());
if (v_ret != null) {
return v_ret.elements();
}
}
return null;
}
/**
* Identifies whether or not this component can receive the focus.
* A disabled button, for example, would return false.
*
* @return true if this component can receive the focus
*/
@SuppressWarnings("deprecation")
public boolean isFocusTraversable() {
return super.isFocusTraversable() && isRequestFocusEnabled();
}
public void setColumnMargin() {
if (columnGroups == null)
return;
int columnMargin = getColumnModel().getColumnMargin();
Enumeration<ColumnGroup> enumi = columnGroups.elements();
while (enumi.hasMoreElements()) {
ColumnGroup cGroup = (ColumnGroup) enumi.nextElement();
cGroup.setColumnMargin(columnMargin);
}
}
public void setReorderingAllowed(boolean b) {
reorderingAllowed = b;
}
}

@ -0,0 +1,255 @@
package com.connor.lidy.task.util;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicTableHeaderUI;
import javax.swing.table.*;
/**
* TableHeaderUI
*
* @author flyx
*/
public class GroupableTableHeaderUI extends BasicTableHeaderUI {
private int m_height;
private Dimension createHeaderSize(long width) {
TableColumnModel columnModel = header.getColumnModel();
width += columnModel.getColumnMargin() * columnModel.getColumnCount();
if (width > Integer.MAX_VALUE) {
width = Integer.MAX_VALUE;
}
return new Dimension((int) width, getHeaderHeight());
}
/**
* (zjb) :(02-4-8 18:03:56)
*
* @return int
* @param cg
* nc.ui.pub.beans.table.ColumnGroup
*/
private int getColCountUnderColGroup(ColumnGroup cg, int iCount) {
Vector<Object> v = cg.v;
for (int i = 0; i < v.size(); i++) {
Object obj = v.elementAt(i);
if (obj instanceof ColumnGroup)
iCount = getColCountUnderColGroup((ColumnGroup) obj, iCount);
else
iCount++;
}
return iCount;
}
public int getHeaderHeight() {
int height = 0;
TableColumnModel columnModel = header.getColumnModel();
for (int column = 0; column < columnModel.getColumnCount(); column++) {
TableColumn aColumn = columnModel.getColumn(column);
TableCellRenderer renderer = aColumn.getHeaderRenderer();
//
if (renderer == null) {
renderer = new DefaultTableCellRenderer() {
/**
*
*/
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(
JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
JTableHeader header = table.getTableHeader();
if (header != null) {
setForeground(header.getForeground());
setBackground(header.getBackground());
setFont(header.getFont());
}
setHorizontalAlignment(JLabel.CENTER);
setText((value == null) ? "" : value.toString());
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
return this;
}
};
}
//
Component comp = renderer.getTableCellRendererComponent(header
.getTable(), aColumn.getHeaderValue(), false, false, -1,
column);
int cHeight = comp.getPreferredSize().height;
Enumeration<Object> enumeration = ((GroupableTableHeader) header).getColumnGroups(aColumn);
if (enumeration != null) {
while (enumeration.hasMoreElements()) {
ColumnGroup cGroup = (ColumnGroup) enumeration
.nextElement();
cHeight += cGroup.getSize(header.getTable()).height;
}
}
height = Math.max(height, cHeight);
}
height = Math.max(height, m_height);
return height;
}
public Dimension getPreferredSize(JComponent c) {
long width = 0;
Enumeration<TableColumn> enumeration = header.getColumnModel().getColumns();
while (enumeration.hasMoreElements()) {
TableColumn aColumn = (TableColumn) enumeration.nextElement();
width = width + aColumn.getWidth();
}
return createHeaderSize(width);
}
public void paint(Graphics g, JComponent c) {
Rectangle clipBounds = g.getClipBounds();
if (header.getColumnModel() == null)
return;
((GroupableTableHeader) header).setColumnMargin();
int column = 0;
Dimension size = header.getSize();
Rectangle cellRect = new Rectangle(0, 0, size.width, size.height);
Hashtable<ColumnGroup, Rectangle> h = new Hashtable<>();
int columnMargin = header.getColumnModel().getColumnMargin();
Enumeration<TableColumn> enumeration = header.getColumnModel().getColumns();
while (enumeration.hasMoreElements()) {
cellRect.height = size.height;
cellRect.y = 0;
TableColumn aColumn = (TableColumn) enumeration.nextElement();
Enumeration<Object> cGroups = ((GroupableTableHeader) header).getColumnGroups(aColumn);
if (cGroups != null) {
int groupHeight = 0;
while (cGroups.hasMoreElements()) {
ColumnGroup cGroup = (ColumnGroup) cGroups.nextElement();
Rectangle groupRect = (Rectangle) h.get(cGroup);
if (groupRect == null) {
groupRect = new Rectangle(cellRect);
Dimension d = cGroup.getSize(header.getTable());
if (!System.getProperty("java.vm.version").startsWith(
"1.2")) {
int iColCount = getColCountUnderColGroup(cGroup, 0); // 获得该多表头下的基本列数(zjb)
// System.out.println(iColCount);
groupRect.width = d.width - iColCount
* columnMargin;
} else
groupRect.width = d.width;
groupRect.height = d.height;
h.put(cGroup, groupRect);
}
paintCell(g, groupRect, cGroup);
groupHeight += groupRect.height;
cellRect.height = size.height - groupHeight;
cellRect.y = groupHeight;
}
}
if (!System.getProperty("java.vm.version").startsWith("1.2"))
cellRect.width = aColumn.getWidth();
else
cellRect.width = aColumn.getWidth() + columnMargin;
if (cellRect.intersects(clipBounds)) {
paintCell(g, cellRect, column);
}
cellRect.x += cellRect.width;
column++;
}
}
private void paintCell(Graphics g, Rectangle cellRect, int columnIndex) {
TableColumn aColumn = header.getColumnModel().getColumn(columnIndex);
TableCellRenderer renderer = aColumn.getHeaderRenderer();
//
if (renderer == null) {
renderer = new DefaultTableCellRenderer() {
/**
*
*/
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
JTableHeader header = table.getTableHeader();
if (header != null) {
setForeground(header.getForeground());
setBackground(header.getBackground());
setFont(header.getFont());
}
setHorizontalAlignment(JLabel.CENTER);
setText((value == null) ? "" : value.toString());
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
return this;
}
};
}
//
// Component component =
// renderer.getTableCellRendererComponent(header.getTable(),
// aColumn.getHeaderValue(), false, false, -1, columnIndex);
//
String headerValue = aColumn.getHeaderValue().toString();
Component component = renderer.getTableCellRendererComponent(header
.getTable(), headerValue, false, false, -1, columnIndex);
rendererPane.add(component);
rendererPane.paintComponent(g, component, header, cellRect.x,
cellRect.y, cellRect.width, cellRect.height, true);
}
private void paintCell(Graphics g, Rectangle cellRect, ColumnGroup cGroup) {
TableCellRenderer renderer = cGroup.getHeaderRenderer();
//
if (renderer == null) {
renderer = new DefaultTableCellRenderer() {
/**
*
*/
private static final long serialVersionUID = 1L;
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
JTableHeader header = table.getTableHeader();
if (header != null) {
setForeground(header.getForeground());
setBackground(header.getBackground());
setFont(header.getFont());
}
setHorizontalAlignment(JLabel.CENTER);
setText((value == null) ? "" : value.toString());
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
return this;
}
};
}
//
// Component component =
// renderer.getTableCellRendererComponent(header.getTable(),
// cGroup.getHeaderValue(), false, false, -1, -1);
//
String headerValue = cGroup.getHeaderValue().toString();
Component component = renderer.getTableCellRendererComponent(header
.getTable(), headerValue, false, false, -1, -1);
rendererPane.add(component);
rendererPane.paintComponent(g, component, header, cellRect.x,
cellRect.y, cellRect.width, cellRect.height, true);
}
public void setHeaderHeight(int iHeight) {
m_height = iHeight;
}
}

@ -0,0 +1,151 @@
/*
#=============================================================================
#
# Copyright (c) 2009 Origin Enterprise Solution LTD.
#
#=============================================================================
# File name: PackFailDownInfo.java
# File description:
#=============================================================================
# Date Name Action Description of Change
# 2011-4-20 liqz Ini ³õʼ»¯(From Shaangu)
#=============================================================================
*/
package com.connor.lidy.task.util;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
public class PackFailDownInfo {
private TCComponentItemRevision itemRev=null;
private String itemId;
private String rev;
private String datasetName;
private String reference_file;
private TCComponentDataset dataSet;
private String filePath="";
private String reason="";
private String owner="";
private String needDown="false";
/**
* @return the owner
*/
public String getOwner() {
return owner;
}
/**
* @return the itemRev
*/
public TCComponentItemRevision getItemRev() {
return itemRev;
}
/**
* @param itemRev the itemRev to set
*/
public void setItemRev(TCComponentItemRevision itemRev) {
this.itemRev = itemRev;
}
/**
* @param owner the owner to set
*/
public void setOwner(String owner) {
this.owner = owner;
}
/**
* @return the itemId
*/
public String getItemId() {
return itemId;
}
/**
* @param itemId the itemId to set
*/
public void setItemId(String itemId) {
this.itemId = itemId;
}
/**
* @return the rev
*/
public String getRev() {
return rev;
}
/**
* @param rev the rev to set
*/
public void setRev(String rev) {
this.rev = rev;
}
/**
* @return the datasetName
*/
public String getDatasetName() {
return datasetName;
}
/**
* @param datasetName the datasetName to set
*/
public void setDatasetName(String datasetName) {
this.datasetName = datasetName;
}
/**
* @return the reference_file
*/
public String getReference_file() {
return reference_file;
}
/**
* @param reference_file the reference_file to set
*/
public void setReference_file(String reference_file) {
this.reference_file = reference_file;
}
/**
* @return the dataSet
*/
public TCComponentDataset getDataSet() {
return dataSet;
}
/**
* @param dataSet the dataSet to set
*/
public void setDataSet(TCComponentDataset dataSet) {
this.dataSet = dataSet;
}
/**
* @return the filePath
*/
public String getFilePath() {
return filePath;
}
/**
* @param filePath the filePath to set
*/
public void setFilePath(String filePath) {
this.filePath = filePath;
}
/**
* @return the reason
*/
public String getReason() {
return reason;
}
/**
* @param reason the reason to set
*/
public void setReason(String reason) {
this.reason = reason;
}
/**
* @return the needDown
*/
public String getNeedDown() {
return needDown;
}
/**
* @param needDown the needDown to set
*/
public void setNeedDown(String needDown) {
this.needDown = needDown;
}
}

@ -0,0 +1,203 @@
/*
#=============================================================================
#
# Copyright (c) 2009 Origin Enterprise Solution LTD.
#
#=============================================================================
# File name: PackResultInfo.java
# File description:
#=============================================================================
# Date Name Action Description of Change
# 2011-4-20 liqz Ini (From Shaangu)
#=============================================================================
*/
package com.connor.lidy.task.util;
import java.util.List;
public class PackResultInfo {
// 时间2010-06-15:8890 下载人XXXXXX, 所选流程目录XXXXXXXXXX
private String time = "";
private String person = "";
private String job = "";
private int needNum = 0;
private int successNum = 0;
private int failNum = 0;
private int noReferenceNum = 0;
private int noPrivilegelNum = 0;
private int equalNameNum = 0;
private int noReleasedNum = 0;
private int existDataSetCount = 0;
private List<PackFailDownInfo> failDownInfo = null;
/**
* @return the time
*/
public String getTime() {
return time;
}
/**
* @param time the time to set
*/
public void setTime(String time) {
this.time = time;
}
/**
* @return the person
*/
public String getPerson() {
return person;
}
/**
* @param person the person to set
*/
public void setPerson(String person) {
this.person = person;
}
/**
* @return the job
*/
public String getJob() {
return job;
}
/**
* @param job the job to set
*/
public void setJob(String job) {
this.job = job;
}
/**
* @return the needNum
*/
public int getNeedNum() {
return needNum;
}
/**
* @param needNum the needNum to set
*/
public void setNeedNum(int needNum) {
this.needNum = needNum;
}
/**
* @return the successNum
*/
public int getSuccessNum() {
return successNum;
}
/**
* @param successNum the successNum to set
*/
public void setSuccessNum(int successNum) {
this.successNum = successNum;
}
/**
* @return the failNum
*/
public int getFailNum() {
return failNum;
}
/**
* @param failNum the failNum to set
*/
public void setFailNum(int failNum) {
this.failNum = failNum;
}
/**
* @return the noReferenceNum
*/
public int getNoReferenceNum() {
return noReferenceNum;
}
/**
* @param noReferenceNum the noReferenceNum to set
*/
public void setNoReferenceNum(int noReferenceNum) {
this.noReferenceNum = noReferenceNum;
}
/**
* @return the noPrivilegelNum
*/
public int getNoPrivilegelNum() {
return noPrivilegelNum;
}
/**
* @param noPrivilegelNum the noPrivilegelNum to set
*/
public void setNoPrivilegelNum(int noPrivilegelNum) {
this.noPrivilegelNum = noPrivilegelNum;
}
/**
* @return the equalNameNum
*/
public int getEqualNameNum() {
return equalNameNum;
}
/**
* @param equalNameNum the equalNameNum to set
*/
public void setEqualNameNum(int equalNameNum) {
this.equalNameNum = equalNameNum;
}
/**
* @return the noReleasedNum
*/
public int getNoReleasedNum() {
return noReleasedNum;
}
/**
* @param noReleasedNum the noReleasedNum to set
*/
public void setNoReleasedNum(int noReleasedNum) {
this.noReleasedNum = noReleasedNum;
}
/**
* @return the failDownInfo
*/
public List<PackFailDownInfo> getFailDownInfo() {
return failDownInfo;
}
/**
* @param failDownInfo the failDownInfo to set
*/
public void setFailDownInfo(List<PackFailDownInfo> failDownInfo) {
this.failDownInfo = failDownInfo;
}
/**
* @return the existDataSetCount
*/
public int getExistDataSetCount() {
return existDataSetCount;
}
/**
* @param existDataSetCount the existDataSetCount to set
*/
public void setExistDataSetCount(int existDataSetCount) {
this.existDataSetCount = existDataSetCount;
}
}

@ -0,0 +1,108 @@
/*
#=============================================================================
#
# opyright (c) 2009 Origin Enterprise Solution LTD.
#
#=============================================================================
# File name: PackSuccessfulInfo.java
# File description:
#=============================================================================
# Date Name Action Description of Change
# 2011-4-20 liqz Ini ³õʼ»¯(From Shaangu)
#=============================================================================
*/
package com.connor.lidy.task.util;
public class PackSuccessfulInfo {
private String index = "";
private String itemID = "";
private String itemRev = "";
private String itemOwner = "";
private String dataset = "";
private String refFile = "";
/**
* @return the index
*/
public String getIndex() {
return index;
}
/**
* @param index the index to set
*/
public void setIndex(String index) {
this.index = index;
}
/**
* @return the itemID
*/
public String getItemID() {
return itemID;
}
/**
* @param itemID the itemID to set
*/
public void setItemID(String itemID) {
this.itemID = itemID;
}
/**
* @return the itemRev
*/
public String getItemRev() {
return itemRev;
}
/**
* @param itemRev the itemRev to set
*/
public void setItemRev(String itemRev) {
this.itemRev = itemRev;
}
/**
* @return the itemOwner
*/
public String getItemOwner() {
return itemOwner;
}
/**
* @param itemOwner the itemOwner to set
*/
public void setItemOwner(String itemOwner) {
this.itemOwner = itemOwner;
}
/**
* @return the dataset
*/
public String getDataset() {
return dataset;
}
/**
* @param dataset the dataset to set
*/
public void setDataset(String dataset) {
this.dataset = dataset;
}
/**
* @return the refFile
*/
public String getRefFile() {
return refFile;
}
/**
* @param refFile the refFile to set
*/
public void setRefFile(String refFile) {
this.refFile = refFile;
}
}

@ -0,0 +1,214 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: test.java
#=======================================================================================================
# Date Name Action Description of Change
# 2010-1-6 tyl
# 2010-4-25 zyn
#=======================================================================================================
*/
package com.connor.lidy.task.util;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Vector;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.plaf.SplitPaneUI;
import javax.swing.plaf.basic.BasicSplitPaneUI;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
//import components.TableDemo;
public class QueryTaskOpinionTableHead extends JPanel {
/**
* serialVersionUID:
* @since Ver 1.1
*/
private static final long serialVersionUID = 1L;
private Object[][] objArray; // 表中的数据
private DefaultTableModel dm;
private JTable table;
private JTextArea textarea;
// private String[] headers = { "流程名称","序号", "任务" , "签审决定","执行人","提交时间","注释"};
private String[] headers = { "流程名称", "任务", "签审决定", "执行人", "开始时间", "完成时间", "注释" };
public QueryTaskOpinionTableHead() {
super(new GridLayout(1, 0));
}
// 设置组合表格标题
public void setTableHeadTestModel(Vector<String> titleArrayTemp) {
dm = new DefaultTableModel(objArray, headers);
table = new JTable(dm);
textarea = new JTextArea(15,35);
textarea.setAutoscrolls(true);
textarea.setLineWrap(true);
textarea.setEditable(false);
textarea.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent mouseEvent) {
textarea.setCursor(new Cursor(Cursor.TEXT_CURSOR)); //鼠标进入Text区后变为文本输入指针
}
public void mouseExited(MouseEvent mouseEvent) {
textarea.setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); //鼠标离开Text区后恢复默认形态
}
});
textarea.getCaret().addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
textarea.getCaret().setVisible(true); //使textarea区的文本光标显示
}
});
GroupableTableHeader header = new GroupableTableHeader(table.getColumnModel());
table.setTableHeader(header);
table.setPreferredScrollableViewportSize(new Dimension(820, 150));
addListener();
JScrollPane scrollPane = new JScrollPane(table);
JPanel jpane = new JPanel(new BorderLayout());
jpane.add(new JLabel("注释:"), BorderLayout.NORTH);
jpane.add(textarea, BorderLayout.CENTER);
JSplitPane splitPane = new JSplitPane();
splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setLeftComponent(scrollPane);
splitPane.setRightComponent(jpane);
splitPane.setDividerLocation(0.6);
splitPane.setEnabled(false);
SplitPaneUI ui = splitPane.getUI();
if (ui instanceof BasicSplitPaneUI) {
((BasicSplitPaneUI) ui).getDivider().setBorder(null);//隐藏分割线
}
add(splitPane);
}
public void setobjArray(Object[][] objArrayTemp) {
objArray = objArrayTemp;
}
/*
* This method picks good column sizes. If all column heads are wider than
* the column's cells' contents, then you can just use
* column.sizeWidthToFit().
*/
public void initColumnSizes() {
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// DefaultTableModel model = (DefaultTableModel) table.getModel();
TableColumn column = null;
Component comp = null;
int headerWidth = 0;
int cellWidth = 0;
TableCellRenderer headerRenderer = table.getTableHeader().getDefaultRenderer();
TableColumnModel colmode = table.getColumnModel();
int count = colmode.getColumnCount();
for (int i = 0; i < count; i++) {
column = table.getColumnModel().getColumn(i);
comp = headerRenderer.getTableCellRendererComponent(table, column.getHeaderValue(), false, false, 0, 0);
headerWidth = comp.getPreferredSize().width;
// if (i == 1) {
// cellWidth = 50;
// }else if (i == 2) {
// cellWidth = 50;
// }else if (i == 3) {
// cellWidth = 80;
// }else if (i == 4) {
// cellWidth = 100;
// }else {
// cellWidth = 130;
// }
if (i == 0) {
cellWidth = 180;
}else if (i == 1) {
cellWidth = 75;
}else if (i == 2) {
cellWidth = 75;
}else if (i == 3) {
cellWidth = 100;
}else {
cellWidth = 130;
}
column.setPreferredWidth(Math.max(headerWidth, cellWidth));
}
}
public String getUserChoose() {
String cellValue = null;
int selectRows = table.getSelectedRows().length;// 取得用户所选行的行数
if (selectRows == 1) {
int selectedRowIndex = table.getSelectedRow(); // 取得用户所选单行
cellValue = (String) table.getValueAt(selectedRowIndex, 6);
}
return cellValue;
}
/**
*
*/
public void addListener(){
table.addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent e) {
String userComments = getUserChoose();
String Comments = "";
if(userComments!=null){
int len = userComments.split("\t").length;
for(int i = 0;i<len;i++){
if(i!=len-1){
Comments = Comments +userComments.split("\t")[i]+"\n";
}else{
Comments = Comments +userComments.split("\t")[i];
}
}
textarea.setText(Comments);
}else{
textarea.setText("");
}
}
public void mouseEntered(MouseEvent e) {
// Auto-generated method stub
}
public void mouseExited(MouseEvent e) {
// Auto-generated method stub
}
public void mousePressed(MouseEvent e) {
// Auto-generated method stub
}
public void mouseReleased(MouseEvent e) {
// Auto-generated method stub
}
});
}
}

@ -0,0 +1,579 @@
/*
#=============================================================================
#
# Copyright (c) 2009 Origin Enterprise Solution LTD.
#
#=============================================================================
# File name: ResultDialog.java
# File description:
#=============================================================================
# Date Name Action Description of Change
# 2011-4-20 liqz Ini (From Shaangu)
#=============================================================================
*/
package com.connor.lidy.task.util;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.kernel.TCAccessControlService;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentTcFile;
import com.teamcenter.rac.kernel.TCComponentUser;
import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCPreferenceService;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.kernel.TCUserService;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
@SuppressWarnings("deprecation")
public class ResultDialog extends AbstractAIFDialog {
/**
*
*/
private static final long serialVersionUID = 1L;
private TCSession session;
private GetCommonInfo checkcommon;
private ResultTableModel dtm = null;
private JTable table;
private List<PackFailDownInfo> tableData;
private JButton confirmButton = null;
private String validTypeOption = "origin_batchdown_validtype";
// 当origin_showLogFile中的值为true则会生成日志文件c:\\batchExportDataset.log
private String isShowLogOption = "origin_showLogFile";
private String logFileName = "c:\\batchExportDataset.log";
private PackResultInfo resultInfo;
private boolean isDownReleased = false;
private WriteAndCopyFile writeLog;
private int downDataSetCount = 0;
private int isNotHavePriviligeCount = 0;
private int haveEqualDataSetCount = 0;
private int needDownCount = 0;
private int notReleasedDataSetCount = 0;
private int downCount = 0;
private List<TCComponentDataset> haveDownDataSet = new ArrayList<TCComponentDataset>();
private List<String> notExistFiles = new ArrayList<String>();
private List<PackFailDownInfo> failDownInfos = new ArrayList<PackFailDownInfo>();
private JLabel existDataSetLb = new JLabel();
private JLabel needLb = new JLabel();
private JLabel successLb = new JLabel();
private JLabel noReleaseLb = new JLabel();
private JLabel noPrevilegeLb = new JLabel();
private JLabel noReferenceFileLb = new JLabel();
private JLabel failLb = new JLabel();
private List<PackSuccessfulInfo> successfulInfos = new ArrayList<PackSuccessfulInfo>();
private String successfulDir = "c:/ugs/log";
private TCUserService userService = null;
private List<String> logsList = new ArrayList<String>();
public ResultDialog(PackResultInfo resultInfo, TCSession session) {
super(true);
this.resultInfo = resultInfo;
this.session = session;
checkcommon = new GetCommonInfo(session);
this.tableData = resultInfo.getFailDownInfo();
writeLog = new WriteAndCopyFile();
userService = (TCUserService) session.getUserService();
if (isShowLog()) {
File file = new File(logFileName);
if (file.exists()) {
writeLog.writeFile(logFileName, true, "\n");
} else {
try {
file.createNewFile();
writeLog.writeFile(logFileName, true, "\n");
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
File file = new File(logFileName);
if (file.exists()) {
file.delete();
}
}
initUI();
}
public void initUI() {
// setPersistentDisplay(true);
setOptimalDisplay(false);
this.setTitle("下载结果");
BorderLayout borderLayout = new BorderLayout();
JPanel panel = new JPanel(borderLayout);
panel.add(setTopPanel(), BorderLayout.NORTH);
// panel.add(setCenterPanel(), BorderLayout.CENTER);
panel.add(setBottomPanel(), BorderLayout.SOUTH);
getContentPane().add(panel);
// Dimension screen = getToolkit().getScreenSize();
setPreferredSize(new Dimension(400,300));
// setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
centerToScreen();
this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
});
pack();
this.setVisible(true);
}
private JPanel setTopPanel() {
JPanel panel1 = new JPanel(new PropertyLayout());
JLabel infoLb = new JLabel(" 下载文件统计:");
existDataSetLb.setText(" 存在数据集:" + resultInfo.getExistDataSetCount());
noReleaseLb.setText(" 未发布数据集:" + resultInfo.getNoReleasedNum());
noPrevilegeLb.setText(" 无权限数据集:" + resultInfo.getNoPrivilegelNum());
needLb.setText(" 需要下载文件:" + resultInfo.getNeedNum());
successLb.setText(" 成功下载文件:" + resultInfo.getSuccessNum());
noReferenceFileLb.setText(" 无引用文件数据集:" + resultInfo.getNoReferenceNum());
failLb.setText(" 未成功下载文件个数:" + resultInfo.getFailNum());
panel1.add("1.1.left.center", new JLabel());
panel1.add("2.1.left.center", existDataSetLb);
panel1.add("3.1.left.center", noReleaseLb);
panel1.add("4.1.left.center", noPrevilegeLb);
panel1.add("5.1.left.center", needLb);
panel1.add("6.1.left.center", successLb);
panel1.add("7.1.left.center", noReferenceFileLb);
JPanel panel2 = new JPanel(new PropertyLayout());
panel2.add("1.1.left.center", new JLabel());
panel2.add("2.1.left.center", failLb);
JPanel panel = new JPanel(new PropertyLayout());
panel.add("1.1.left.center", new JLabel());
panel.add("2.1.left.center", infoLb);
panel.add("3.1.left.center", panel1);
panel.add("4.1.left.center", panel2);
return panel;
}
/*
private JPanel setCenterPanel() {
JPanel panel = new JPanel(new PropertyLayout());
dtm = new ResultTableModel(tableData);
table = new JTable(dtm);
table.setRowHeight(20);
dtm.setTableColumnsWidth(table);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// 对列进行渲染
table.getColumnModel().getColumn(0).setCellRenderer(new TableColumnRender());
table.getColumnModel().getColumn(7).setCellRenderer(new CheckBoxColumnRender());
JScrollPane scrollPane = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane.setAutoscrolls(true);
scrollPane.setPreferredSize(new Dimension(690, 200));
panel.add("1.1.left.center", scrollPane);
panel.add("2.1.left.center", new JLabel(" "));
panel.setBorder(new TitledBorder(""));
return panel;
}
*/
private JPanel setBottomPanel() {
JPanel southPanel = new JPanel(new FlowLayout());
southPanel.setSize(60, 10);
confirmButton = new JButton("重新下载");
confirmButton.addActionListener(new buttonListener());
JButton exitButton = new JButton("取消");
exitButton.addActionListener(new buttonListener());
southPanel.add(confirmButton);
southPanel.add(exitButton);
return southPanel;
}
class buttonListener implements ActionListener {
public void actionPerformed(ActionEvent event) {
String name = ((JButton) event.getSource()).getText();
if (name.equals("重新下载")) {
confirmButtonAction();
} else {
if (name.equals("取消")) {
dispose();
}
}
}
}
private void writeSuccessfulLogFile(String fileName, String content) {
content = content + "\n";
writeLog.writeFile(fileName, true, content);
logsList.add(content);
}
private void confirmButtonAction() {
System.out.println("tableData.size()......." + tableData.size());
if (tableData.size() > 0) {
writeLogFile(logFileName, "\n");
writeLogFile(logFileName, "重新下载:\n");
PackSuccessfulInfo succesfulDataset = new PackSuccessfulInfo();
succesfulDataset.setIndex("序号");
succesfulDataset.setItemID("零组件ID");
succesfulDataset.setItemRev("版本");
succesfulDataset.setItemOwner("所有者");
succesfulDataset.setDataset("数据集");
succesfulDataset.setRefFile("命名的引用");
successfulInfos.add(succesfulDataset);
boolean need = false;
for (int i = 0; i < tableData.size(); i++) {
TCComponentDataset dataSet = tableData.get(i).getDataSet();
String needDown = tableData.get(i).getNeedDown();
if (needDown.equals("true")) {
need = true;
String filePath = tableData.get(i).getFilePath();
String itemId = tableData.get(i).getItemId();
String rev = tableData.get(i).getRev();
String owner = tableData.get(i).getOwner();
TCComponentItemRevision itemRevision = tableData.get(i).getItemRev();
datasetFileDown(itemRevision, dataSet, filePath, itemId, rev, owner);
}
}
SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd:HHmmss");
String time = date.format(new Date());
String logPath = successfulDir + "/陕鼓批量下载文件日志_" + (new SimpleDateFormat("yyyyMMdd")).format(new Date()) + ".log";
writeSuccessfulLogFile(logPath, " ");
writeSuccessfulLogFile(logPath, "===========================================================================================================================");
writeSuccessfulLogFile(logPath, "时间:" + time + " 下载人:" + resultInfo.getPerson() + " 所选流程(目录):" + resultInfo.getJob());
writeSuccessfulLogFile(logPath, " ");
writeSuccessfulLogFile(logPath, "存在数据集:" + haveDownDataSet.size());
writeSuccessfulLogFile(logPath, "未发布数据集:" + notReleasedDataSetCount);
writeSuccessfulLogFile(logPath, "无权限数据集:" + isNotHavePriviligeCount);
writeSuccessfulLogFile(logPath, "需下载文件:" + needDownCount);
writeSuccessfulLogFile(logPath, "成功下载文件:" + downDataSetCount);
writeSuccessfulLogFile(logPath, "无引用文件数据集:" + notExistFiles.size());
writeSuccessfulLogFile(logPath, " ");
writeSuccessfulLogFile(logPath, "已成功下载文件列表:");
writeSuccessfulLogFile(logPath, "---------------------------------------------------------------------------");
for (int i = 0; i < successfulInfos.size(); i++) {
PackSuccessfulInfo successfulInfo = successfulInfos.get(i);
writeSuccessfulLogFile(logPath, appendSpace(successfulInfo.getIndex().trim(), 5) + appendSpace(successfulInfo.getItemID().trim(), 32) + appendSpace(successfulInfo.getItemRev().trim(), 5) + appendSpace(successfulInfo.getItemOwner().trim(), 25) + appendSpace(successfulInfo.getDataset().trim(), 50) + appendSpace(successfulInfo.getRefFile().trim(), 50));
}
writeSuccessfulLogFile(logPath, " ");
// 服务器端日志
try {
Object objs[] = new Object[1];
objs[0] = logsList.toArray();
userService.call("DatasetDownLog", objs);
} catch (TCException e) {
e.printStackTrace();
}
if (need) {
writeLogFile(logFileName, " ");
writeLogFile(logFileName, "总结:");
writeLogFile(logFileName, "存在数据集:" + haveDownDataSet.size() + "个");
writeLogFile(logFileName, "未发布数据集:" + notReleasedDataSetCount + "个");
writeLogFile(logFileName, "无权限数据集:" + isNotHavePriviligeCount + "个");
writeLogFile(logFileName, "需要下载文件:" + needDownCount + "个");
writeLogFile(logFileName, "成功下载文件:" + downDataSetCount + "个");
writeLogFile(logFileName, "无引用文件数据集:" + notExistFiles.size() + "个");
writeLogFile(logFileName, "未成功下载文件:" + (needDownCount - downDataSetCount) + "个");
resultInfo.setExistDataSetCount(haveDownDataSet.size());
resultInfo.setNeedNum(needDownCount);
resultInfo.setSuccessNum(downDataSetCount);
resultInfo.setNoReleasedNum(notReleasedDataSetCount);
resultInfo.setNoPrivilegelNum(isNotHavePriviligeCount);
resultInfo.setNoReferenceNum(notExistFiles.size());
resultInfo.setEqualNameNum(haveEqualDataSetCount);
resultInfo.setFailNum(failDownInfos.size());
resultInfo.setFailDownInfo(failDownInfos);
updateDialog();
} else {
MessageBox.post("没有需要重新下载的数据集!", "INFO", MessageBox.INFORMATION);
}
} else {
MessageBox.post("没有需要重新下载的数据集!", "INFO", MessageBox.INFORMATION);
}
}
private String appendSpace(String str, int num) {
if (str.length() < num) {
for (int i = UtilApi.length(str) + 1; i <= num; i++) {
str += " ";
}
}
return str;
}
private void updateDialog() {
existDataSetLb.setText(" 存在数据集:" + resultInfo.getExistDataSetCount());
noReleaseLb.setText(" 未发布数据集:" + resultInfo.getNoReleasedNum());
noPrevilegeLb.setText(" 无权限数据集:" + resultInfo.getNoPrivilegelNum());
needLb.setText(" 需要下载文件:" + resultInfo.getNeedNum());
successLb.setText(" 成功下载文件:" + resultInfo.getSuccessNum());
noReferenceFileLb.setText(" 无引用文件数据集:" + resultInfo.getNoReferenceNum());
failLb.setText(" 需重新下载:" + resultInfo.getFailNum());
tableData = resultInfo.getFailDownInfo();
dtm = new ResultTableModel(tableData);
table.setModel(dtm);
table.setRowHeight(20);
dtm.setTableColumnsWidth(table);
table.getColumnModel().getColumn(0).setCellRenderer(new TableColumnRender());
table.getColumnModel().getColumn(7).setCellRenderer(new CheckBoxColumnRender());
dtm.setTableColumnsWidth(table);
downDataSetCount = 0;
isNotHavePriviligeCount = 0;
haveEqualDataSetCount = 0;
needDownCount = 0;
notReleasedDataSetCount = 0;
downCount = 0;
failDownInfos = new ArrayList<PackFailDownInfo>();
haveDownDataSet = new ArrayList<TCComponentDataset>();
notExistFiles = new ArrayList<String>();
}
/**
* datasetFileDown:
* @param @return
* @param dataset
* @param fileCurrentPath
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
private void datasetFileDown(TCComponentItemRevision itemRevision, TCComponentDataset dataSet, String currentPath, String itemId, String rev, String owner) {
try {
dataSet.refresh();
} catch (TCException e2) {
e2.printStackTrace();
}
if (haveDownDataSet != null) {
if (haveDownDataSet.contains(dataSet)) {
return;
}
}
String fileCurrentPath = currentPath;
haveDownDataSet.add(dataSet);
writeLogFile(logFileName, "存在数据集:" + dataSet.toString());
System.out.println("dataSet............" + dataSet.toString());
PackFailDownInfo dataSetInfo = new PackFailDownInfo();
dataSetInfo.setItemId(itemId);
dataSetInfo.setRev(rev);
dataSetInfo.setDatasetName(dataSet.toString());
dataSetInfo.setDataSet(dataSet);
dataSetInfo.setOwner(owner);
dataSetInfo.setItemRev(itemRevision);
try {
String release = dataSet.getProperty("release_status_list").trim();
if (release != null) {
String regex = ".*Released.*";
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher match = pattern.matcher(release);
boolean find = match.find();
if (!find) {
notReleasedDataSetCount++;
writeLogFile(logFileName, "未发布");
if (isDownReleased) {
dataSetInfo.setReason("未发布");
failDownInfos.add(dataSetInfo);
writeLogFile(logFileName, "");
return;
}
} else {
writeLogFile(logFileName, "已经发布");
}
}
} catch (TCException e2) {
e2.printStackTrace();
}
try {
boolean isCanExport = false;
isCanExport = checkAccessPrivilige(session.getUser(), dataSet, "EXPORT");
if (!isCanExport) {
++isNotHavePriviligeCount;
dataSetInfo.setReason("没有导出权限");
failDownInfos.add(dataSetInfo);
writeLogFile(logFileName, "没有导出权限");
writeLogFile(logFileName, " ");
return;
} else {
writeLogFile(logFileName, "有导出权限 ");
}
} catch (TCException e1) {
e1.printStackTrace();
}
TCComponentTcFile tcFile = null;
String fileName = "";
try {
if ((dataSet.getTcFiles() != null) && (dataSet.getTcFiles().length > 0)) {
// if (itemRevision != null) {
// String revType = itemRevision.getType();
// if (revType.equals("GGDitem Revision") || revType.equals("HTDitem Revision")) {
// fileCurrentPath = createFile(fileCurrentPath, changePackageName);
// }
// }
for (int i = 0; i < dataSet.getTcFiles().length; i++) {
tcFile = dataSet.getTcFiles()[i];
if (tcFile == null) {
return;
}
tcFile.refresh();
fileName = tcFile.getProperty("original_file_name");
if (fileName != null) {
needDownCount++;
dataSetInfo.setReference_file(fileName);
dataSetInfo.setFilePath(fileCurrentPath);
dataSetInfo.setNeedDown("true");
String fileType = "";
String preFileName = "";
int index = fileName.lastIndexOf(".");
if (index > 0) {
fileType = fileName.substring(index, fileName.length());
preFileName = fileName.substring(0, index);
} else {
preFileName = fileName;
}
boolean flag = checkcommon.existFile(fileCurrentPath, fileName);
if (flag) {
haveEqualDataSetCount++;
int pos = fileName.indexOf('.');
if (pos > 0) {
fileName = preFileName + "_" + UtilApi.getTimeNum() + fileType;
}
}
if (fileName.indexOf('/') >= 0) {
fileName = fileName.replace('/', '_');
}
downCount = 0;
getTCFile(tcFile, fileCurrentPath, fileName, dataSetInfo);
}
}
} else {
dataSetInfo.setReason("不存在引用文件");
failDownInfos.add(dataSetInfo);
notExistFiles.add(dataSet.toString());
writeLogFile(logFileName, "不存在引用文件!");
}
writeLogFile(logFileName, " ");
} catch (Throwable e) {
writeLogFile(logFileName, "导出文件时出现异常!");
writeLogFile(logFileName, e.getMessage());
writeLogFile(logFileName, " ");
e.printStackTrace();
}
}
private File getTCFile(TCComponentTcFile tcFile, String fileCurrentPath, String fileName, PackFailDownInfo dataSetInfo) {
++downCount;
if (downCount == 2) {
writeLogFile(logFileName, "第二次下载");
}
File file = null;
try {
file = tcFile.getFile(fileCurrentPath, fileName);
if (file != null) {
++downDataSetCount;
writeLogFile(logFileName, "导出文件:" + fileName + " " + getTime());
writeLogFile(logFileName, " ");
// successfulInfos
PackSuccessfulInfo succesfulDataset = new PackSuccessfulInfo();
succesfulDataset.setIndex(String.valueOf(downDataSetCount));
succesfulDataset.setItemID(dataSetInfo.getItemId());
succesfulDataset.setItemRev(dataSetInfo.getRev());
succesfulDataset.setItemOwner(dataSetInfo.getOwner());
succesfulDataset.setDataset(dataSetInfo.getDatasetName());
succesfulDataset.setRefFile(file.getName());
successfulInfos.add(succesfulDataset);
} else {
writeLogFile(logFileName, "没有导出文件!");
}
} catch (Throwable e) {
writeLogFile(logFileName, "文件导出时出现异常");
String exceptionMessage = e.getMessage();
writeLogFile(logFileName, exceptionMessage);
writeLogFile(logFileName, " ");
e.printStackTrace();
if (downCount < 2) {
file = getTCFile(tcFile, fileCurrentPath, fileName, dataSetInfo);
} else {
dataSetInfo.setReason(exceptionMessage);
failDownInfos.add(dataSetInfo);
}
}
return file;
}
private void writeLogFile(String fileName, String content) {
if (isShowLog()) {
content = content + "\n";
writeLog.writeFile(fileName, true, content);
}
}
public String getTime() {
String strTime = "";
try {
SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss:SSS");
strTime = bartDateFormat.format(new Date());
// System.out.println(strTime);
} catch (Exception e) {
e.printStackTrace();
}
return strTime;
}
/**
* checkAccessPrivilige:Component
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
private boolean checkAccessPrivilige(TCComponentUser user, TCComponent comp, String accessName) throws TCException {
TCAccessControlService accessService = ((TCSession) session).getTCAccessControlService();
boolean returnboolean = accessService.checkUsersPrivilege(user, comp, accessName);
return returnboolean;
}
private boolean isShowLog() {
boolean isShowLog = false;
TCPreferenceService preSer = session.getPreferenceService();
String value = preSer.getString(4, isShowLogOption).trim();
if (value.equalsIgnoreCase("true")) {
isShowLog = true;
}
return isShowLog;
}
public void isDownReleased() {
TCPreferenceService preSer = session.getPreferenceService();
String type = preSer.getString(4, validTypeOption).trim();
if (type.equalsIgnoreCase("released")) {
isDownReleased = true;
}
}
}

@ -0,0 +1,97 @@
/*
#=============================================================================
#
# Copyright (c) 2009 Origin Enterprise Solution LTD.
#
#=============================================================================
# File name: ResultTableModel.java
# File description:
#=============================================================================
# Date Name Action Description of Change
# 2011-4-20 liqz Ini (From Shaangu)
#=============================================================================
*/
package com.connor.lidy.task.util;
import java.util.Enumeration;
import java.util.List;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.JTableHeader;
import javax.swing.table.TableColumn;
public class ResultTableModel extends DefaultTableModel {
/**
*
*/
private static final long serialVersionUID = 1L;
private static String[] names = { "*", "零组件ID", "版本", "所有者","数据集", "命名的引用" ,"原因","可重新下载"};
/**
* Creates a new instance of EditBatchProcessLineTableModel.
* @param data
*/
public ResultTableModel(List<PackFailDownInfo> data) {
super(getData(data), names);
}
public static Object[][] getData(List<PackFailDownInfo> data) {
Object[][] datas = new Object[data.size()][];
for (int i = 0; i < data.size(); i++) {
String[] info = new String[8];
info[0] = String.valueOf(i + 1);
info[1] = data.get(i).getItemId();
info[2] = data.get(i).getRev();
info[3] = data.get(i).getOwner();
info[4] = data.get(i).getDatasetName();
info[5] = data.get(i).getReference_file();
info[6] = data.get(i).getReason();
info[7] = data.get(i).getNeedDown();
datas[i] = info;
}
return datas;
}
@Override
public boolean isCellEditable(int row, int column) {
if (column < 7) {
return false;
} else {
return true;
}
}
// 根据标题大小设置列宽
public void FitTableColumns(JTable myTable) {
JTableHeader header = myTable.getTableHeader();
int rowCount = myTable.getRowCount();
Enumeration<TableColumn> columns = myTable.getColumnModel().getColumns();
while (columns.hasMoreElements()) {
TableColumn column = (TableColumn) columns.nextElement();
int col = header.getColumnModel().getColumnIndex(column.getIdentifier());
int width = (int) myTable.getTableHeader().getDefaultRenderer().getTableCellRendererComponent(myTable, column.getIdentifier(), false, false, -1, col).getPreferredSize().getWidth();
for (int row = 0; row < rowCount; row++) {
int preferedWidth = (int) myTable.getCellRenderer(row, col).getTableCellRendererComponent(myTable, myTable.getValueAt(row, col), false, false, row, col).getPreferredSize().getWidth();
width = Math.max(width, preferedWidth);
}
header.setResizingColumn(column);
column.setWidth(width + myTable.getIntercellSpacing().width);
}
}
// 设置列宽
public void setTableColumnsWidth(JTable myTable) {
myTable.getColumnModel().getColumn(0).setPreferredWidth(25);
myTable.getColumnModel().getColumn(1).setPreferredWidth(100);
myTable.getColumnModel().getColumn(2).setPreferredWidth(40);
myTable.getColumnModel().getColumn(3).setPreferredWidth(100);
myTable.getColumnModel().getColumn(4).setPreferredWidth(100);
myTable.getColumnModel().getColumn(5).setPreferredWidth(125);
myTable.getColumnModel().getColumn(6).setPreferredWidth(100);
myTable.getColumnModel().getColumn(7).setPreferredWidth(80);
}
}

@ -0,0 +1,426 @@
package com.connor.lidy.task.util;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.ListCellRenderer;
import javax.swing.ListSelectionModel;
import javax.swing.tree.DefaultMutableTreeNode;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.aif.common.AIFTreeNode;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.common.organization.OrgTreePanel;
import com.teamcenter.rac.common.organization.OrganizationTree;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentGroupMember;
import com.teamcenter.rac.kernel.TCComponentProject;
import com.teamcenter.rac.kernel.TCComponentUser;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.PropertyLayout;
@SuppressWarnings("serial")
public class SelectUserDialog extends AbstractAIFDialog {
private JButton b_ok;
private JButton b_cel;
private JButton add;
private JButton remove;
private OrganizationTree tree;
private JTree projectTree;
private JList<String> l_user;
private DefaultListModel<String> lm_user;
private JTextField editPropMap;
private String group;
private boolean isMulti;
private JTable table;
private int[] colIndex;
private int rowIndex;
private TCComponentProject project;
public SelectUserDialog(JTextField editPropMap, boolean isMulti) throws Exception {
super(true);
this.editPropMap = editPropMap;
this.isMulti = isMulti;
initUI();
}
private String getValue() {
String val = "";
if (editPropMap != null) {
val = editPropMap.getText();
} else if (table != null) {
val = (String) table.getValueAt(rowIndex, colIndex[0]);
}
return val;
}
private void setValue(String text) {
if (editPropMap != null) {
editPropMap.setText(text);
} else if (table != null) {
table.setValueAt(text, rowIndex, colIndex[0]);
if (colIndex.length>1)
table.setValueAt(group, rowIndex, colIndex[1]);
}
}
public SelectUserDialog(JTable table, boolean isMulti, int[] colIndex, int rowIndex, TCComponentProject projectID) throws Exception {
super(true);
this.table = table;
this.isMulti = isMulti;
this.colIndex = colIndex;
this.rowIndex = rowIndex;
this.project = projectID;
initUI();
}
private void initUI() throws Exception {
this.setTitle("Ñ¡ÔñÈËÔ±");
this.setLayout(new BorderLayout());
int pweight = 440, pheight = 480, mweight = 280, mheight = 320;
if (isMulti) {
// this.setPreferredSize(new Dimension(640, 480));
// this.setMinimumSize(new Dimension(480, 320));
pweight = 640;
mweight = 480;
}
if(project != null) {
pheight = 700;
mheight = 700;
}
this.setPreferredSize(new Dimension(pweight, pheight));
this.setMinimumSize(new Dimension(mweight, mheight));
OrgTreePanel orgPanel = new OrgTreePanel((TCSession) AIFUtility.getCurrentApplication().getSession());
this.tree = orgPanel.getOrgTree();
if(project != null) {
JPanel panel = new JPanel(new PropertyLayout());
panel.add("1.1.center.center", orgPanel);
panel.add("2.1.center.center", initProjectPanel(orgPanel));
// FlowLayout flow = new FlowLayout();
// flow.setAlignOnBaseline(true);
// JPanel panel = new JPanel(flow);
// panel.add(orgPanel);
// panel.add(initProjectPanel(orgPanel));
this.add(BorderLayout.WEST, panel);
}else {
this.add(BorderLayout.CENTER, orgPanel);
}
this.add(BorderLayout.SOUTH, initBtnPanel());
if (isMulti) {
JPanel lp = initListPanel();
this.add(BorderLayout.EAST, lp);
initData();
}
addListeners();
}
private void initData() {
String text = getValue();
if (text.isEmpty()) {
return;
}
String[] split = text.split(",");
for (int i = 0; i < split.length; i++) {
lm_user.addElement(split[i]);
}
}
private JPanel initListPanel() {
JPanel panel = new JPanel(new BorderLayout());
FlowLayout flow = new FlowLayout();
flow.setVgap(100);
JPanel btnPanel = new JPanel(flow);
btnPanel.add(this.add);
// btnPanel.add("2.1.center.center", this.remove);
this.lm_user = new DefaultListModel<>();
this.l_user = new JList<>(lm_user);
l_user.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
this.l_user.setCellRenderer(new DeleteListRenderer(l_user));
JScrollPane scroll = new JScrollPane(l_user);
scroll.setPreferredSize(new Dimension(200, 0));
// this.add.setPreferredSize(new Dimension(50, 30));
panel.add(BorderLayout.WEST, btnPanel);
panel.add(BorderLayout.CENTER, scroll);
return panel;
}
private JPanel initBtnPanel() {
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 15, 5));
this.b_ok = new JButton("È·¶¨");
this.b_cel = new JButton("È¡Ïû");
this.add = new JButton("+");
this.remove = new JButton("-");
panel.add(b_ok);
panel.add(b_cel);
return panel;
}
private JScrollPane initProjectPanel(OrgTreePanel orgPanel) throws Exception {//TODO
Dimension orgDimension = orgPanel.getPreferredSize();
orgPanel.setPreferredSize(new Dimension(orgDimension.width*2, orgDimension.height-100));
DefaultMutableTreeNode root = new DefaultMutableTreeNode(project.getProjectID(), true);
projectTree = new JTree(root);
List<Object> team = project.getTeam();
TCComponent[] members = (TCComponent[])team.get(0);
for(TCComponent c : members) {
if(c instanceof TCComponentGroupMember) {
TCComponentGroupMember member = (TCComponentGroupMember)c;
DefaultMutableTreeNode childRoot = new DefaultMutableTreeNode(member, true);
root.add(childRoot);
}
}
projectTree.setPreferredSize(new Dimension(orgDimension.width*2, orgDimension.height/2));
// projectTree.setMaximumSize(new Dimension(orgDimension.width*2, orgDimension.height/2));
JScrollPane projectPane = new JScrollPane(projectTree);
return projectPane;
}
private String getSelectUser() throws Exception {
// Object[] comps = tree.getSelectedOrgObjects();
AIFTreeNode[] comps = tree.getSelectedNodes();
// System.out.println("comps:"+(comps==null));
if (comps == null) {
if(projectTree == null)
return null;
else if(projectTree.getSelectionModel() == null)
return null;
else if(projectTree.getLastSelectedPathComponent() == null)
return null;
DefaultMutableTreeNode selectNode = (DefaultMutableTreeNode) projectTree.getLastSelectedPathComponent();
Object selectObject = selectNode.getUserObject();
if(selectObject instanceof TCComponentGroupMember) {
String member = ((TCComponentGroupMember) selectObject).toString();
if(member.indexOf(".")>0)
group = member.substring(0, member.indexOf("."));
else
group = member.substring(0, member.indexOf("/"));
TCComponentUser user = ((TCComponentGroupMember) selectObject).getUser();
if (user != null) {
return user.getProperty("user_name");
}
}else
return null;
}
// System.out.println("comps:"+comps.length);
for (int i = 0; i < comps.length; i++) {
// OrgObject comp = (OrgObject) comps[i];
TCComponent gm = (TCComponent) comps[i].getContextComponent().getComponent();
// System.out.println("gm:"+gm);
if (gm != null && (gm instanceof TCComponentGroupMember)) {
TCComponentUser user = ((TCComponentGroupMember) gm).getUser();
if (user != null) {
group = ((DefaultMutableTreeNode)comps[i].getParent().getParent()).getUserObject().toString();
return user.getProperty("user_name");
}
}
}
return null;
}
private void addListeners() {
this.b_cel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
disposeDialog();
}
});
this.b_ok.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
if (isMulti) {
int size = lm_user.getSize();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < size; i++) {
String text = lm_user.getElementAt(i);
if (text != null) {
sb.append(text).append(";");
}
}
if (sb.length() > 0) {
sb.setLength(sb.length() - 1);
}
setValue(sb.toString());
} else {
String user = getSelectUser();
if (user != null) {
setValue(user);
} else {
setValue("");
}
}
disposeDialog();
} catch (Exception e1) {
e1.printStackTrace();
MessageBox.post("Error:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
tree.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
try {
super.mouseClicked(e);
if(projectTree != null)
projectTree.clearSelection();
if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
String user = getSelectUser();
System.out.println("user:"+user);
if (user != null) {
if (isMulti) {
if (!lm_user.contains(user.toString())) {
lm_user.addElement(user.toString());
}
} else {
setValue(user.toString());
disposeDialog();
}
}
}
} catch (Exception e1) {
e1.printStackTrace();
MessageBox.post("Error:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
if(projectTree != null) {
projectTree.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
try {
super.mouseClicked(e);
tree.clearSelection();
if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2) {
String user = getSelectUser();
if (user != null) {
if (isMulti) {
if (!lm_user.contains(user.toString())) {
lm_user.addElement(user.toString());
}
} else {
setValue(user.toString());
disposeDialog();
}
}
}
} catch (Exception e1) {
e1.printStackTrace();
MessageBox.post("Error:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
}
this.l_user.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
int ind = l_user.getSelectedIndex();
if (ind >= 0) {
lm_user.remove(ind);
}
}
@Override
public void mouseEntered(MouseEvent e) {
super.mouseEntered(e);
}
@Override
public void mouseExited(MouseEvent e) {
super.mouseExited(e);
}
});
this.add.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
String user = getSelectUser();
System.out.println("user:"+user);
if (user != null) {
if (!lm_user.contains(user.toString())) {
lm_user.addElement(user.toString());
}
}
} catch (Exception e1) {
e1.printStackTrace();
MessageBox.post("Error:"+e1.getMessage(), "ERROR", MessageBox.ERROR);
}
}
});
this.remove.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
disposeDialog();
}
});
}
private class DeleteListRenderer extends JPanel implements ListCellRenderer<String> {
JButton btn;
JLabel label;
public DeleteListRenderer(final JList<? extends String> list) {
this.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 1));
this.setBackground(Color.WHITE);
btn = getDeletetBtn();
label = new JLabel("");
this.add(btn);
this.add(label);
btn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int ind = list.getSelectedIndex();
System.out.println(ind);
if (ind >= 0) {
list.remove(ind);
}
}
});
}
@Override
public Component getListCellRendererComponent(JList<? extends String> list, String value, int index,
boolean isSelected, boolean cellHasFocus) {
label.setText(value);
return this;
}
private JButton getDeletetBtn() {
ImageIcon icon = new ImageIcon(SelectUserDialog.class.getResource("image/delete.png"));
JButton btn = new JButton(icon);
btn.setPreferredSize(new Dimension(23, 23));
btn.setContentAreaFilled(false);
btn.setFocusPainted(false);
btn.setBorderPainted(false);
btn.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
return btn;
}
}
}

@ -0,0 +1,93 @@
/*
#=============================================================================
#
# Copyright (c) 2009 Origin Enterprise Solution LTD.
#
#=============================================================================
# File name: ShowMessageDialog.java
# File description:
#=============================================================================
# Date Name Action Description of Change
# 2009-10-30 tyl
# 2010-02-10 tyl Mod
#=============================================================================
*/
package com.connor.lidy.task.util;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.teamcenter.rac.aif.AbstractAIFDialog;
import com.teamcenter.rac.util.PropertyLayout;
import com.teamcenter.rac.util.VerticalLayout;
public class ShowMessageDialog extends AbstractAIFDialog {
private static final long serialVersionUID = 1L;
private String title = "";
private String info1 = "";
private String info2 = "";
public ShowMessageDialog(String title, String info1, String info2) {
super(true);
this.title = title;
this.info1 = info1;
this.info2 = info2;
initUI();
}
public void initUI() {
setPersistentDisplay(true);
setOptimalDisplay(false);
setTitle(title);
JPanel parentPanel;
JPanel iconPanel = new JPanel();
JPanel itemInfoPanel1;
JPanel itemInfoPanel2;
parentPanel = new JPanel(new VerticalLayout(5, 2, 2, 2, 2));
itemInfoPanel2 = new JPanel(new GridLayout(2, 1));
itemInfoPanel1 = new JPanel(new PropertyLayout());
URL url = this.getClass().getResource("image/info.png");
JLabel iconLabel = new JLabel();
iconLabel.setIcon(new ImageIcon(url));
iconPanel.add(iconLabel);
itemInfoPanel2.add(new JLabel(" " + info1));
itemInfoPanel2.add(new JLabel(info2));
itemInfoPanel1.add("1.1.left.center", iconPanel);
itemInfoPanel1.add("1.2.left.center", itemInfoPanel2);
JButton buttonYes = new JButton("确定");
buttonYes.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ShowMessageDialog.this.dispose();
}
});
JPanel panelButton = new JPanel(new BorderLayout());
panelButton.setSize(10, 20);
panelButton.add(buttonYes, BorderLayout.CENTER);
parentPanel.add("top.bin", new JLabel(" "));
parentPanel.add("top.bind.left.top", itemInfoPanel1);
parentPanel.add("bottom.nobind.center.top", panelButton);
getContentPane().add(parentPanel);
pack();
Dimension screen = getToolkit().getScreenSize(); // 得到屏幕尺寸
setLocation((screen.width - getSize().width) / 2, (screen.height - getSize().height) / 2);
setVisible(true);
}
}

@ -0,0 +1,54 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: TableColorRender.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 ÏÂÎç03:46:31 tyl Ini ³õʼ»¯Îļþ
#=======================================================================================================
*/
package com.connor.lidy.task.util;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
public class TableColorRender implements TableCellRenderer {
//
public static final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component renderer = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Color foreground = table.getForeground();
Color background = table.getBackground();
if (isSelected) {
foreground = Color.WHITE;
background = Color.LIGHT_GRAY;
} else {
if (value != null) {
if (((String) value).startsWith("¡ô")) {
foreground = Color.RED;
background = Color.WHITE;
} else {
if (((String) value).startsWith("¡ï")) {
System.out.println("value============" + value);
foreground = Color.RED;
background = Color.WHITE;
}
}
}
foreground = table.getForeground();
background = table.getBackground();
}
renderer.setForeground(foreground);
renderer.setBackground(background);
return renderer;
}
}

@ -0,0 +1,51 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: TableColumnRender.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 03:50:26 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task.util;
import java.awt.Component;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.JTableHeader;
public class TableColumnRender extends DefaultTableCellRenderer {
/**
* serialVersionUID:TODO
* @since Ver 1.1
*/
private static final long serialVersionUID = 1L;
/**
*
*/
public TableColumnRender() {
super();
}
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
//得到表头
JTableHeader header = table.getTableHeader();
if (header != null) {
setForeground(header.getForeground());
setBackground(header.getBackground());
setFont(header.getFont());
}
setHorizontalAlignment(JLabel.CENTER);
this.setText((value == null) ? "" : value.toString());
setBorder(UIManager.getBorder("TableHeader.cellBorder"));
return this;
}
}

@ -0,0 +1,917 @@
/*
#=======================================================================================================
#
# Copyright (c) 2007 Origin Enterprise Solution LTD.
#
#=======================================================================================================
# File description: UtilApi.java
#=======================================================================================================
# Date time Name Action Description of Change
# 2011-1-17 03:56:51 tyl Ini
#=======================================================================================================
*/
package com.connor.lidy.task.util;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Vector;
import javax.swing.JComboBox;
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentBOMLine;
import com.teamcenter.rac.kernel.TCComponentContextList;
import com.teamcenter.rac.kernel.TCComponentQuery;
import com.teamcenter.rac.kernel.TCComponentQueryType;
import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCSession;
import com.teamcenter.rac.kernel.TCTextService;
import com.teamcenter.rac.util.MessageBox;
public class UtilApi {
/**
* Logger for this class
*/
// private static HashMap<String, String> loginUserInfoHm = new HashMap<String, String>();
/**
* session
*/
// private TCSession session;
/**
* api
* @param pseapplication
*/
public UtilApi(AbstractAIFUIApplication pseapplication) {
// session = (TCSession) pseapplication.getSession();
}
/**
* api
* @param newsession session
*/
public UtilApi(TCSession newsession) {
// session = newsession;
}
/*
private String getDefaultExportDirectory() {
String s = null;
if (s == null || s.length() == 0) {
TCPreferenceService tcpreferenceservice = session.getPreferenceService();
s = tcpreferenceservice.getString(0, "defaultExportDirectory");
}
if (s != null) {
s = s.trim();
if (s.length() == 0)
s = null;
}
return s;
}
*/
public String getEnv(String name) {
String str = "";
Iterator<Entry<String, String>> it = System.getenv().entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = it.next();
System.out.println("entry-" + entry.getKey() + ":" + entry.getValue());
if (entry.getKey().toString().equals(name)) {
str = entry.getValue() + "";
if (!str.endsWith("\\")) {
str = str + "\\";
}
break;
}
}
return str;
}
/**
* Enter
*/
@SuppressWarnings("deprecation")
public static String ENTER = new String(new byte[] { 13, 10 }, 0);
/**
* stringvector
* @param msg
* @param sepStr
* @return vector
*/
public static Vector<String> getVector(String msg, String sepStr) {
System.out.println("***********getVector()");
System.out.println("msg===" + msg);
System.out.println("sepStr===" + sepStr);
Vector<String> vt = new Vector<>();
try {
String tmpStr = null;
boolean flag = false;
int pos = -1;
if (msg == null || msg.trim().length() == 0) { return null; }
if (msg.startsWith(sepStr)) {
msg = msg.substring(1);
}
if (msg.lastIndexOf(sepStr) == msg.length() - 1) {
flag = true;
msg = msg.substring(0, msg.length() - 1);
}
while ((pos = msg.indexOf(sepStr)) > 0) {
try {
tmpStr = msg.substring(0, pos);
vt.addElement(tmpStr);
if (msg.length() > pos + 1)
msg = msg.substring(pos + 1);
}
catch (RuntimeException e) {
break;
}
}
vt.add(msg);
if (flag)
vt.add("");
}
catch (RuntimeException e) {
e.printStackTrace();
}
return vt;
}
/**
*
* @param src
* @return double
*/
public static double getFloatFromStr(String src) {
double d = 0d;
try {
if (src == null || src.length() == 0) { return 0d; }
src = src.trim();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < src.length(); i++) {
if (src.charAt(i) == '.' || src.charAt(i) == '+' || src.charAt(i) == '-') {
sb.append(src.charAt(i));
} else if (src.charAt(i) >= '0' && src.charAt(i) <= '9') {
sb.append(src.charAt(i));
}
}
d = Double.parseDouble(sb.toString());
}
catch (NumberFormatException e) {
e.printStackTrace();
}
return d;
}
/**
* getMsgboxLocate:
* @param @return
* @return Point
* @throws
* @since CodingExample Ver 1.1
*/
public static Point getMsgboxLocate() {
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int frmLocateWidth = screenSize.width * 2 / 5;
int frmLocateHeight = screenSize.height * 4 / 7;
Point p = new Point(frmLocateWidth, frmLocateHeight);
return p;
}
/**
*
* @param formLocHeigh
* @return
*/
public static Point getMsgboxLocate(double formLocHeigh) {
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
String tmp = formLocHeigh + "";
if (tmp.indexOf(".") >= 0) {
tmp = tmp.substring(0, tmp.indexOf("."));
}
int t = Integer.parseInt(tmp);
int frmLocateWidth = screenSize.width * 2 / 5;
int frmLocateHeight = t - 120;
if (frmLocateHeight <= 0)
frmLocateHeight = 0;
Point p = new Point(frmLocateWidth, frmLocateHeight);
return p;
}
/**
* double
* @param srcdouble
* @param length
* @return
*/
public static double round(double srcdouble, int length) {
double t = 0d;
try {
t = (double) Math.pow(10, length);
}
catch (RuntimeException e) {
e.printStackTrace();
}
return (Math.round(srcdouble * t)) / t;
}
/**
* bomline
* @param selectedLine bomline
* @param newsession session
* @return
*/
public static boolean validateOwnringUser(TCComponentBOMLine selectedLine, TCSession newsession) {
String userName = "";
String ownerName = "";
try {
userName = newsession.getUserName();
userName = "(" + userName + ")";
ownerName = selectedLine.getProperty("bl_rev_owning_user");
}
catch (TCException e) {
e.printStackTrace();
return false;
}
if (ownerName.indexOf(userName) < 0) {
MessageBox messagebox1 = new MessageBox("错误:您非当前选中对象的所有者,不能进行此操作!", "错误...", MessageBox.ERROR);
messagebox1.setVisible(true);
return false;
}
return true;
}
// private MessageBox messagebox1;
/**
* getTimeNum:
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public static String getTimeNum() {
String strTime = "";
try {
SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
strTime = bartDateFormat.format(new Date());
System.out.println(strTime);
}
catch (Exception e) {
e.printStackTrace();
}
return strTime;
}
/**
* getTimeNum: : formatyyyyMMddHHmmssSSS
* @param @param format
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public static String getTimeNum(String format) {
String strTime = "";
try {
SimpleDateFormat bartDateFormat = new SimpleDateFormat(format);
strTime = bartDateFormat.format(new Date());
System.out.println(strTime);
}
catch (Exception e) {
e.printStackTrace();
}
return strTime;
}
/**
*
* @param pDate
* @param pFormat
* @return pFormat=yyyyMMddHHmmssSSS
*/
public static String getFormatTimeNum(Date pDate, String pFormat) {
String strTime = "";
try {
if (pDate == null) { return ""; }
SimpleDateFormat bartDateFormat = new SimpleDateFormat(pFormat);
strTime = bartDateFormat.format(pDate);
System.out.println(strTime);
}
catch (Exception e) {
e.printStackTrace();
}
return strTime;
}
/**
* java
* @return java
*/
public static String getJavaTmpDir() {
String filepath = System.getProperty("java.io.tmpdir");
if (!filepath.endsWith("\\")) {
filepath = filepath + "\\";
}
System.out.println("getJavaTmpDir() - String filepath=" + filepath); //$NON-NLS-1$
return filepath;
}
/**
* getLimLenTxtIgnSomeVt:(),
* @param src
* @param rowLength
* @param repStr
* @param someStr
* @param @return
* @return Vector
* @throws
* @since CodingExample Ver 1.1
*/
public static Vector<String> getLimLenTxtIgnSomeVt(String src, int rowLength, String repStr, String someStr) {
String tmpstr = "";
Vector<Serializable> v;
Vector<Serializable> vt;
Vector<String> vt1 = new Vector<>();
if (src != null || UtilApi.length(src) > 0) {
v = str2vt(src, someStr);
for (int i = 0; i < v.size(); i++) {
tmpstr = v.get(i).toString();
tmpstr = UtilApi.getLimRowLenText(tmpstr, rowLength, repStr);
tmpstr = UtilApi.nbsp2space(tmpstr);
if (tmpstr.indexOf(repStr) >= 0) {
vt = str2vt(tmpstr, repStr);
for (int j = 0; j < vt.size(); j++) {
vt1.add(vt.get(j).toString());
}
} else {
vt1.add(tmpstr);
}
}
}
// if (logger.isDebugEnabled()) {
// logger.debug("getLimLenTxtIgnSomeVt(String, int, String, String) - end"); //$NON-NLS-1$
// }
return vt1;
}
/**
* getLimRowLenText:()
* @param src
* @param rowLength
* @param repStr
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public static String getLimRowLenText(String src, int rowLength, String repStr) {
String ret = "";
try {
if (src != null || UtilApi.length(src) > 0) {
src = UtilApi.nbsp2space(src);
while (UtilApi.length(src) > 0) {
if (UtilApi.length(src) > rowLength) {
ret += UtilApi.substring(src, 0, rowLength) + repStr;
src = UtilApi.substring(src, rowLength);
} else {
ret += src;
src = "";
}
}
}
}
catch (Exception e) {
e.printStackTrace();
}
String returnString = UtilApi.space2nbsp(ret);
return returnString;
}
/**
* space2nbsp:nbsp
* @param pStr
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public static String space2nbsp(String pStr) {
if (pStr == null || pStr.length() < 1)
return pStr;
String s1 = "";
for (int i = 0; i < pStr.length(); i++)
if (pStr.charAt(i) == ' ')
s1 = s1 + "&nbsp;";
else s1 = s1 + pStr.charAt(i);
return s1;
}
/**
* substring:
* @param source
* @param iniPos
* @param endPos
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public static String substring(String source, int iniPos, int endPos) {
String tmpStr = "";
String tmpStr1 = "";
String retStr = "";
int tmpLen = 0;
int len = 0;
try {
len = endPos - iniPos;
if (iniPos >= UtilApi.length(source))
return "";
tmpStr = UtilApi.substr(source, iniPos);
tmpLen = tmpStr.length();
tmpStr1 = source.substring(tmpLen);
if (UtilApi.length(tmpStr1) <= len)
retStr = tmpStr1;
else retStr = UtilApi.substr(tmpStr1, len);
}
catch (Exception e) {}
return retStr;
}
/*
* ,,
* @author patriotlml @param String origin, @param int len,
* (2) @return String, (0len)
*/
public static String substr(String source, int len) {
String retStr = "";
if (source == null || source.equals(""))
return "";
byte[] strByte = new byte[len];
if (len > UtilApi.length(source))
return source;
System.arraycopy(source.getBytes(), 0, strByte, 0, len);
int count = 0;
for (int i = 0; i < len; i++) {
int value = (int) strByte[i];
if (value < 0) {
count++;
}
}
if (count % 2 != 0) {
len = (len == 1) ? ++len : --len;
}
try {
retStr = new String(strByte, 0, len);
}
catch (Exception e) {
try {
System.arraycopy(source.getBytes(), 0, strByte, 0, len);
retStr = new String(strByte, 0, len);
}
catch (Exception ex) {}
}
return retStr;
}
/*
* ,,
* @author patriotlml @param String origin, @param int iniPos,
* @param int len, (2) @return String,
* (0len)
*/
public static String substring(String source, int iniPos) {
String tmpStr = "";
int endPos = 0;
try {
endPos = UtilApi.length(source);
tmpStr = UtilApi.substring(source, iniPos, endPos + 1);
}
catch (Exception e) {}
return tmpStr;
}
/**
* ,,2,1
* @param String s ,
* @return int,
*/
public static int length(String s) {
if (s == null)
return 0;
char[] c = s.toCharArray();
int len = 0;
for (int i = 0; i < c.length; i++) {
len++;
if (!isLetter(c[i])) {
len++;
}
}
return len;
}
/**
* getLimRowLenTextWithSplitstr: ,,
* @param src
* @param rowLength
* @param repStr
* @param splitStr
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public static String getLimRowLenTextWithSplitstr(String src, int rowLength, String repStr, String splitStr) {
Vector<String> v;
String retStr = "";
try {
src = UtilApi.nbsp2space(src);
v = UtilApi.getLimLenTxtIgnSomeVt(src, rowLength, repStr, splitStr);
for (int i = 0; i < v.size(); i++) {
retStr += v.get(i).toString();
if (i != v.size() - 1)
retStr += repStr;
}
}
catch (Exception e) {}
return retStr;
}
/**
* nbsp2space:()
* @param s
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public static String nbsp2space(String s) {
if (s == null || s.length() < 1)
return s;
String s1 = "";
if (s.indexOf("&nbsp;") >= 0)
s1 = UtilApi.ReplaceAll(s, "&nbsp;", " ");
else s1 = s;
return s1;
}
/**
* Ascill
* @param char c,
* @return boolean, true,Ascill
*/
public static boolean isLetter(char c) {
int k = 0x80;
return c / k == 0 ? true : false;
}
/**
* ReplaceAll:
* @param source
* @param regex
* @param replacement
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public static String ReplaceAll(String source, String regex, String replacement) {
if (source == null)
return "";
String stmp1 = source;
String stmp2 = "";
String stmp3 = "";
int posRegex = stmp1.indexOf(regex);
int regexLen = regex.length();
while (posRegex >= 0) {
stmp2 = stmp1.substring(0, posRegex);
stmp3 += stmp2 + replacement;
stmp1 = stmp1.substring(posRegex + regexLen);
posRegex = stmp1.indexOf(regex);
}
return stmp3 += stmp1;
}
/**
* str2vt:,
* @param source
* @param sepStr
* @param @return
* @return Vector
* @throws
* @since CodingExample Ver 1.1
*/
public static Vector<Serializable> str2vt(String source, String sepStr) {
String stmp1 = source;
String stmp2 = "";
// String stmp3 = "";
Vector<Serializable> vt = new Vector<>();
int sepPos = 0;
int sepLen = sepStr.length();
try {
do {
sepPos = stmp1.indexOf(sepStr);
if (sepPos < 0 || sepLen == 0) {
vt.add(stmp1);
return vt;
}
stmp2 = stmp1.substring(0, sepPos);
vt.add(stmp2);
stmp1 = stmp1.substring(sepPos + sepLen);
} while (stmp1.indexOf(sepStr) >= 0);
vt.add(stmp1);
}
catch (Exception e) {}
return vt;
}
/**
* str2vt:,
* @param source
* @param sepStr1
* @param sepStr2
* @param @return
* @return Vector
* @throws
* @since CodingExample Ver 1.1
*/
public static Vector<Serializable> str2vt(String source, String sepStr1, String sepStr2) {
if (source.indexOf(sepStr1) < 0) { return str2vt(source, sepStr2); }
Vector<Serializable> vector = str2vt(source, sepStr1);
Vector<Serializable> vector1 = new Vector<>();
for (int i = 0; i < vector.size(); i++)
vector1.addElement(str2vt((String) vector.get(i), sepStr2));
return vector1;
}
/**
* str2vt:,
* @param source
* @param sepStr1
* @param sepStr2
* @param sepStr3
* @param @return
* @return Vector
* @throws
* @since CodingExample Ver 1.1
*/
public static Vector<Serializable> str2vt(String source, String sepStr1, String sepStr2, String sepStr3) {
if (source.indexOf(sepStr1) < 0) { return str2vt(source, sepStr2, sepStr3); }
Vector<Serializable> vector = str2vt(source, sepStr1);
Vector<Serializable> vector1 = new Vector<>();
for (int i = 0; i < vector.size(); i++) {
vector1.addElement(str2vt((String) vector.get(i), sepStr2, sepStr3));
}
return vector1;
}
/**
* str2vt:,
* @param source
* @param sepStr1
* @param sepStr2
* @param sepStr3
* @param sepStr4
* @param @return
* @return Vector
* @throws
* @since CodingExample Ver 1.1
public static Vector str2vt(String source, String sepStr1, String sepStr2, String sepStr3, String sepStr4) {
if (source.indexOf(sepStr1) < 0) { return str2vt(source, sepStr2, sepStr3, sepStr4); }
Vector<Serializable> vector = str2vt(source, sepStr1);
Vector vector1 = new Vector();
for (int i = 0; i < vector.size(); i++)
vector1.addElement(str2vt((String) vector.get(i), sepStr2, sepStr3, sepStr4));
return vector1;
}
*/
/**
* getPreferenceHashMap:
* @param session tcsession
* @param scope
* @param pid
* @param @return
* @return HashMap<String,String>
* @throws
* @since CodingExample Ver 1.1
*/
@SuppressWarnings("deprecation")
public static String[] getPreference(TCSession session, int scope, String pid) {
try {
String options[] = session.getPreferenceService().getStringArray(scope, pid);
return options;
}
catch (Exception e) {
System.out.println("没找到选项:" + pid);
e.printStackTrace();
return null;
}
}
/**
* getPreferenceHashMap:
* @param session tcsession
* @param scope
* @param pid
* @param @return
* @return HashMap<String,String>
* @throws
* @since CodingExample Ver 1.1
*/
public static HashMap<String, String> getPreferenceHashMap(TCSession pSession, int pScope, String pid) {
HashMap<String, String> hm = new HashMap<String, String>();
try {
String[] options = getPreference(pSession, pScope, pid);
if (options == null || options.length == 0) {
System.out.println("processRows(Vector, HashMap) - ************ 没有配置" + pid + "选项!");
}
String key = "";
String value = "";
for (int i = 0; i < options.length; i++) {
if (options[i].indexOf("=") > 0) {
key = options[i].substring(0, options[i].indexOf("="));
value = options[i].substring(options[i].indexOf("=") + 1);
hm.put(key, value);
} else {
hm.put("" + i, options[i]);
}
}
}
catch (Exception e) {
e.printStackTrace();
return null;
}
return hm;
}
public static InterfaceAIFComponent[] getQueryList(TCSession session, String queryName, String as[], String as1[]) {
System.out.println("begin=====query【" + queryName + "】");
InterfaceAIFComponent[] components = null;
// 使用查询构建器:
try {
components = session.search(queryName, as, as1);
}
catch (Exception e) {
e.printStackTrace();
MessageBox.post("querying 【" + queryName + "】 error" + e.getMessage(), "INFO", MessageBox.INFORMATION);
}
System.out.println("end=====query【" + queryName + "】");
return components;
}
// ======利用系统查询构建器查询数据集=======
public static TCComponent[] searchComponentCollection(TCSession session, String queryName, String as[], String as1[]) {
TCComponent returnaimancomponent[] = null;
try {
TCTextService textService = session.getTextService();
TCComponentQueryType querytype = (TCComponentQueryType) session.getTypeComponent("ImanQuery");
TCComponentQuery query = (TCComponentQuery) querytype.find(queryName);
querytype.clearCache();
if(query == null){
System.out.println("未找到查询构建器:" + queryName);
return null;
}
int asLen = as.length;
String tValue = "";
for(int ix = 0; ix < asLen; ix++){
tValue = textService.getTextValue(as[ix]);
if(tValue != null && !tValue.equals("")){
as[ix] = tValue;
}
}
TCComponentContextList list = query.getExecuteResultsList(as, as1);
if (list != null && list.getListCount() > 0) {
int count = list.getListCount();
returnaimancomponent = new TCComponent[count];
for (int i = 0; i < count; i++) {
AIFComponentContext context = list.get(i);
returnaimancomponent[i] = (TCComponent) context.getComponent();
}
return returnaimancomponent;
} else {
return null;
}
}
catch (TCException e) {
e.printStackTrace();
}
return null;
}
/**
*
* @param str
* @param pattern yyyyMdyyyy-MM-dd
* @return
* @throws java.text.ParseException
*/
public static Date convertStringToDate(String pattern, String str) {
Date date = null;
try {
if (str.equals("") || str == null)
return date;
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
date = formatter.parse(str);
}
catch (Exception e) {
e.printStackTrace();
}
return date;
}
private static HashMap<String, String> msghm = new HashMap<>();
public static synchronized void setMsg(String key, String msg) {
msghm.put(key, msg);
}
public static synchronized String getMsg(String key) {
String msg = "";
try {
if (msghm.get(key) == null) {
msg = "";
} else {
msg = "" + msghm.get(key);
}
}
catch (Exception e) {
e.printStackTrace();
}
return msg;
}
/**
* getOptionValues:: comboBox
* @param JComboBox
* @param String
* @author liqz
* @since 20111215
* */
public static void getOptionValues(TCSession pSession,JComboBox<String> cbo,String strOptionName){
@SuppressWarnings("deprecation")
String[] arrValue= pSession.getPreferenceService().getStringArray(4, strOptionName);
cbo.addItem("");
for (int i = 0; i < arrValue.length; i++) {
cbo.addItem(arrValue[i]);
}
}
/**
* getDaysBetween:
*
* @param Date
*
* @param Date
*
* @return int
*/
public static int getDaysBetween(Date dtFormer, Date dtLater) {
GregorianCalendar vFormer = (GregorianCalendar) GregorianCalendar.getInstance();
GregorianCalendar vLatter = (GregorianCalendar) GregorianCalendar.getInstance();
vFormer.setTime(dtFormer);
vLatter.setTime(dtLater);
vFormer.set(Calendar.MILLISECOND, 0);
vFormer.set(Calendar.SECOND, 0);
vFormer.set(Calendar.MINUTE, 0);
vFormer.set(Calendar.HOUR_OF_DAY, 0);
vLatter.set(Calendar.MILLISECOND, 0);
vLatter.set(Calendar.SECOND, 0);
vLatter.set(Calendar.MINUTE, 0);
vLatter.set(Calendar.HOUR_OF_DAY, 0);
int iCounter = 0;
while (vFormer.before(vLatter)) {
vFormer.add(Calendar.DATE, 1);
iCounter++;
}
// iCounter = iCounter + 1;
return iCounter;
}
}

@ -0,0 +1,75 @@
/*
#=============================================================================
#
# copyright (c) 2009 Origin Enterprise Solution LTD.
#
#=============================================================================
# File name: WriteAndCopyFile.java
# File description:
#=============================================================================
# Date Name Action Description of Change
# 2011-4-20 liqz (From Shaangu)
#=============================================================================
*/
package com.connor.lidy.task.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.FileInputStream;
public class WriteAndCopyFile {
/**
* Creates a new instance of WriteAndCopyFile.
*/
public WriteAndCopyFile() {
}
/**
* writeFile:
* @param @param fileName true
* @param @param append
* @param @param content
* @since CodingExample Ver 1.1
*/
public void writeFile(String fileName, boolean append, String content) {
FileOutputStream fos;
try {
fos = new FileOutputStream(fileName, append);
fos.write(content.getBytes());
fos.close();
} catch (final FileNotFoundException e) {
e.printStackTrace();
} catch (final IOException e) {
e.printStackTrace();
}
}
/**
* copyFile:Copy
*
* @param @return
* @return String
* @throws
* @since CodingExample Ver 1.1
*/
public static void copyFile(String src, String dest) throws IOException {
FileInputStream in = new FileInputStream(src);
File file = new File(dest);
if (!file.exists())
file.createNewFile();
FileOutputStream out = new FileOutputStream(file);
int c;
byte buffer[] = new byte[1024];
while ((c = in.read(buffer)) != -1) {
for (int i = 0; i < c; i++)
out.write(buffer[i]);
}
in.close();
out.close();
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save