From c34f51ac8f2044b37a87a0fc2b91c03f85a37454 Mon Sep 17 00:00:00 2001
From: huangzhong <568134056@qq.com>
Date: Sat, 11 Nov 2023 17:38:28 +0800
Subject: [PATCH] =?UTF-8?q?=E7=BB=93=E6=9E=84=E5=8C=96=E4=BB=A3=E7=A0=81?=
 =?UTF-8?q?=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 BID-EVALUATION-STEP/META-INF/MANIFEST.MF      |    3 +-
 .../composite/FactorEvaluationComposite.java  |  141 +-
 .../composite/BidOpeningHallComposite.java    |    6 +
 .../SubTenderProjectEnterMenuComposite.java   |    8 +-
 .../TenderProjectEnterMenuComposite.java      |    8 +-
 .../MultyProjectFocusDecryptBidFilThread.java |   12 +
 ...MultyProjectRemoteDecryptBidFilThread.java |   12 +
 ...rojectRemoteStartBidopeningHallThread.java |   12 +
 ...tyProjectUploadBidOpeningResultThread.java |    6 +
 OBE-ACTION/META-INF/MANIFEST.MF               |    4 +-
 .../src/com/gx/obe/action/bean/FAction.java   |   26 +
 .../SupplierEvaluationFactorService.java      |   35 +
 .../com/gx/obe/web/utils/ObeHttpUtils.java    |   31 +
 .../gx/obe/web/vo/FactorClearBidContent.java  |   39 +
 .../com/gx/utils/BusinessNowTimeUtils.java    |  190 +++
 .../org.eclipse.core.resources.prefs          |    2 +
 .../obe/thread/AutoDownloadProjectThread.java |   16 +
 .../thread/NewDownloadProjectInfoThread.java  |    6 +
 .../NewReDownloadProjectInfoThread.java       |    6 +
 OBE-COMPONENTS-CORE/META-INF/MANIFEST.MF      |    5 +-
 .../entity/SupplierEvaluationFactor.java      |  152 ++
 .../com/gx/obe/components/core/Constants.java |   94 ++
 .../core/enumeration/EvaluationStepEnum.java  |    8 +-
 .../components/core/enumeration/ShowType.java |   37 +
 .../gx/obe/components/core/global/Global.java |   31 +
 .../components/core/inter/ExcelReport.java    |   12 +
 .../core/inter/LoadPdfFileView.java           |    9 +
 .../components/core/inter/PdfFileView.java    |   15 +
 .../gx/obe/components/core/vo/TableXML.java   |   21 +-
 .../src/com/gx/obe/components/core/vo/Td.java |   42 +
 .../src/com/gx/obe/components/core/vo/Tr.java |   42 +
 .../entity/evaluation/EvaluationContent.java  |  100 ++
 .../entity/evaluation/EvaluationFactor.java   |   35 +
 OBE-COMPONENTS-MESSAGES/bin/.gitignore        |    1 +
 .../BidOpeningResultLoadComposite.java        |    5 +-
 .../common/dialog/DownloadProjectDialog.java  |    5 +
 .../dialog/ServerAuthenticationDialog.java    |    6 +
 OBE-CONFIG/config.properties                  |   19 +-
 .../com/gx/obe/config/ConfigConstants.java    |   10 +-
 OBE-MANAGEMENT/META-INF/MANIFEST.MF           |    3 +-
 .../EvaluationFactorsManagerComposite.java    |   45 +-
 .../SubPackageMenuEnterComposite.java         |    8 +-
 .../TenderProjectEnterMenuComposite.java      |    8 +-
 OBE-UTILS/META-INF/MANIFEST.MF                |    1 +
 .../com/gx/obe/util/element/ElementClass.java |   72 +
 .../com/gx/obe/util/element/FieldInfo.java    |   68 +
 .../com/gx/obe/util/utils/ElementUtils.java   |   23 +
 OBE-UTILS/src/com/gx/obe/util/utils/Keys.java |    4 +
 .../com/gx/obe/util/utils/PredicateUtil.java  |   12 +
 .../com/gx/obe/util/utils/PredicateUtils.java |   20 +
 com.gx.obe.bind/.classpath                    |    7 +
 com.gx.obe.bind/.gitignore                    |    1 +
 com.gx.obe.bind/.project                      |   28 +
 .../org.eclipse.core.resources.prefs          |    3 +
 .../.settings/org.eclipse.jdt.core.prefs      |    7 +
 com.gx.obe.bind/META-INF/MANIFEST.MF          |   24 +
 com.gx.obe.bind/build.properties              |    5 +
 .../src/com/gx/obe/bind/Activator.java        |   50 +
 .../src/com/gx/obe/bind/base/P.java           |  134 ++
 .../src/com/gx/obe/bind/call/Call.java        |   59 +
 .../src/com/gx/obe/bind/call/Callback.java    |    5 +
 .../com/gx/obe/bind/exception/ExFunction.java |    7 +
 .../gx/obe/bind/exception/ExceptionFun.java   |   46 +
 .../src/com/gx/obe/bind/fun/Fun.java          |   63 +
 .../src/com/gx/obe/bind/promise/Promise.java  |  137 ++
 .../src/com/gx/obe/bind/prop/Comp.java        |   34 +
 .../src/com/gx/obe/bind/prop/Prop.java        |  103 ++
 .../src/com/gx/obe/bind/prop/RProp.java       |   34 +
 .../com/gx/obe/bind/recursion/RStream.java    |   21 +
 .../com/gx/obe/bind/recursion/Recursions.java |  167 ++
 .../gx/obe/bind/recursion/TreeForEach.java    |    7 +
 .../src/com/gx/obe/bind/rx/RxBind.java        |   80 +
 .../src/com/gx/obe/bind/rx/Status.java        |   35 +
 .../src/com/gx/obe/bind/rx/Tangent.java       |   21 +
 .../src/com/gx/obe/bind/stream/MapStream.java |   59 +
 .../com/gx/obe/bind/utils/CollectorUtils.java |   14 +
 .../src/com/gx/obe/bind/utils/PropUtils.java  |   20 +
 .../com/gx/obe/bind/view/ChangeListener.java  |   15 +
 .../src/com/gx/obe/bind/view/MView.java       |    3 +
 .../src/com/gx/obe/bind/view/RView.java       |    3 +
 .../src/com/gx/obe/bind/view/Read.java        |    8 +
 .../src/com/gx/obe/bind/view/View.java        |    8 +
 .../src/com/gx/obe/bind/view/Write.java       |    8 +
 .../org.eclipse.core.resources.prefs          |    2 +
 com.gx.obe.common.file/META-INF/MANIFEST.MF   |    6 +-
 .../obe/common/file/utils/BidFileUtils.java   |   24 +
 .../gx/obe/common/file/utils/FileUtils.java   |   60 +
 .../common/file/utils/ParsingXmlUtils.java    |   57 +-
 .../gx/obe/common/file/widget/FileButton.java |  150 ++
 .../org.eclipse.core.resources.prefs          |    2 +
 com.gx.obe.common.widget/META-INF/MANIFEST.MF |    4 +-
 .../widget/button/RectangleRadioButton.java   |   38 +
 .../widget/dialog/ProgressMessageTangent.java |   33 +
 .../listener/ProgressMessageAdapter.java      |    6 +
 .../listener/ProgressMessageListener.java     |    9 +
 .../com/gx/obe/common/widget/rt/Tangent.java  |   21 +
 .../widget/shell/ProgressMessageDialog.java   |    6 +
 .../common/widget/text/EvalFactorText.java    |   52 +
 com.gx.obe.component/.classpath               |    9 +
 com.gx.obe.component/.gitignore               |    1 +
 com.gx.obe.component/.project                 |   28 +
 .../org.eclipse.core.resources.prefs          |    2 +
 .../.settings/org.eclipse.jdt.core.prefs      |    7 +
 com.gx.obe.component/META-INF/MANIFEST.MF     |   29 +
 com.gx.obe.component/build.properties         |    5 +
 .../src/com/gx/obe/component/Activator.java   |   50 +
 .../gx/obe/component/comparison/Column.java   |   23 +
 .../component/comparison/ComparisonData.java  |   68 +
 .../component/comparison/ComparisonTable.java |  124 ++
 .../src/com/gx/obe/component/form/FForm.java  |  134 ++
 .../src/com/gx/obe/component/form/IForm.java  |   19 +
 .../src/com/gx/obe/component/grid/FGrid.java  |   92 +
 .../gx/obe/component/handler/ISelection.java  |   22 +
 .../obe/component/handler/RaidoHandler.java   |   74 +
 .../gx/obe/component/handler/TabHandler.java  |   74 +
 .../component/listener/SelectionListener.java |    7 +
 .../com/gx/obe/component/menu/ListMenu.java   |   90 +
 .../src/com/gx/obe/component/rx/RxSwt.java    |   58 +
 .../obe/component/tabfolder/CTabFolder.java   |  182 ++
 .../obe/component/tabfolder/FTabFolder.java   |   73 +
 .../com/gx/obe/component/table/CTable.java    |  299 ++++
 .../com/gx/obe/component/table/Column.java    |  111 ++
 .../com/gx/obe/component/table/FTable.java    |  203 +++
 .../src/com/gx/obe/component/table/Link.java  |   14 +
 .../src/com/gx/obe/component/table/Text.java  |    9 +
 .../obe/component/text/CapitalMoneyText.java  |  146 ++
 .../gx/obe/component/text/DocumentText.java   |  122 ++
 .../gx/obe/component/text/FStyledText.java    |   66 +
 .../gx/obe/component/text/IntegerText.java    |   32 +
 .../com/gx/obe/component/text/MoneyText.java  |   52 +
 .../obe/component/text/OrdinaryMoneyText.java |   84 +
 .../src/com/gx/obe/component/tree/ITree.java  |   47 +
 .../com/gx/obe/component/tree/ParseTrees.java |  214 +++
 .../src/com/gx/obe/component/tree/Tree.java   |   46 +
 .../com/gx/obe/component/tree/TreeSpan.java   |   35 +
 .../obe/component/utils/CompositeUtils.java   |   24 +
 .../gx/obe/component/verify/FormVerify.java   |   57 +
 .../verify/IntegerVerifyListener.java         |   50 +
 .../component/verify/MoneyVerifyListener.java |   89 +
 .../com/gx/obe/component/verify/Verify.java   |   11 +
 .../eclipse/wb/swt/SWTResourceManager.java    |  447 +++++
 .../org.eclipse.core.resources.prefs          |    2 +
 .../obe/step/dialog/EvaluationStepDialog.java |    4 +-
 com.gx.obe.struct/.classpath                  |    8 +
 com.gx.obe.struct/.gitignore                  |    1 +
 com.gx.obe.struct/.project                    |   28 +
 .../org.eclipse.core.resources.prefs          |    2 +
 .../.settings/org.eclipse.jdt.core.prefs      |    7 +
 com.gx.obe.struct/META-INF/MANIFEST.MF        |   51 +
 com.gx.obe.struct/build.properties            |    5 +
 com.gx.obe.struct/lib/Utils-1.0.0.jar         |  Bin 0 -> 476051 bytes
 .../enumeration/StructBusinessTypeEnum.java   |  226 +++
 .../struct/enumeration/StructEnum.java        |   85 +
 .../enumeration/StructTechnologyTypeEnum.java |  121 ++
 .../src/com/gx/obe/struct/Activator.java      |   50 +
 .../com/gx/obe/struct/beans/AbsoluteDO.java   |   49 +
 .../gx/obe/struct/beans/AbsoluteModelDO.java  |   43 +
 .../gx/obe/struct/beans/AttachmentFile.java   |  120 ++
 .../com/gx/obe/struct/beans/BalanceSheet.java |  156 ++
 .../gx/obe/struct/beans/BidderBasicInfo.java  |  442 +++++
 .../gx/obe/struct/beans/BusinessLicense.java  |  202 +++
 .../com/gx/obe/struct/beans/CashSheet.java    |   60 +
 .../com/gx/obe/struct/beans/Certificate.java  |   94 ++
 .../com/gx/obe/struct/beans/ConditionDO.java  |  101 ++
 .../gx/obe/struct/beans/CustomModelDo.java    |   54 +
 .../src/com/gx/obe/struct/beans/Finance.java  |  372 +++++
 .../obe/struct/beans/IntelligentEvalDO.java   |  244 +++
 .../com/gx/obe/struct/beans/LiftRateDO.java   |  159 ++
 .../com/gx/obe/struct/beans/ModelData.java    |   54 +
 .../com/gx/obe/struct/beans/ParamValueDO.java |   32 +
 .../com/gx/obe/struct/beans/Performance.java  |  658 ++++++++
 .../gx/obe/struct/beans/ProfitlossSheet.java  |  132 ++
 .../gx/obe/struct/beans/ProjectLeader.java    |  216 +++
 .../gx/obe/struct/beans/Qualification.java    |  154 ++
 .../com/gx/obe/struct/beans/RespItemDO.java   |   82 +
 .../gx/obe/struct/beans/ScoreOptionsDO.java   |   35 +
 .../gx/obe/struct/beans/SelfEvalParamsDO.java |   70 +
 .../gx/obe/struct/beans/StructDateInfo.java   |   59 +
 .../gx/obe/struct/beans/TemplateDataItem.java |  100 ++
 .../gx/obe/struct/beans/TemplateTable.java    |   82 +
 .../com/gx/obe/struct/beans/TimeModelDO.java  |  138 ++
 .../gx/obe/struct/beans/WorkExperience.java   |  126 ++
 .../struct/composite/AttachmentComposite.java |   56 +
 .../ClearBidReviewEntryComposite.java         |  317 ++++
 .../composite/EvaluationContentComposite.java |  242 +++
 .../struct/composite/ModelDataComposite.java  |  129 ++
 .../composite/ModelDataDetailComposite.java   |  147 ++
 .../TemplateTableComparisonComposite.java     |  124 ++
 .../composite/TemplateTableListComposite.java |  125 ++
 .../dialog/AuxevaluationFullScreenDialog.java |   49 +
 .../obe/struct/dialog/EditOpinionShell.java   |  429 +++++
 .../dialog/FactorClearBidStepDialog.java      |  176 ++
 .../struct/dialog/SelectStepExpertDialog.java |  166 ++
 .../gx/obe/struct/enums/DataCategoryEnum.java |   35 +
 .../enums/EvaluationFactorTypeEnum.java       |   23 +
 .../obe/struct/enums/ModelDataClassEnum.java  |   30 +
 .../obe/struct/enums/ModelDataTypeEnum.java   |  126 ++
 .../obe/struct/enums/PerformanceStatus.java   |   39 +
 .../obe/struct/factory/ModelDataFactory.java  | 1476 +++++++++++++++++
 .../handler/FactorClearBidContentFactory.java |   73 +
 .../handler/FactorClearBidContentHandler.java |   58 +
 .../FactorClearBidContentStepHandler.java     |   86 +
 .../handler/FactorClearBidFileHandler.java    |   84 +
 .../struct/handler/RelChapterTypeHandler.java |   42 +
 .../struct/inters/IFactorClearBidContent.java |   23 +
 .../com/gx/obe/struct/inters/IModelData.java  |   25 +
 .../obe/struct/inters/IModelDataDetail.java   |   19 +
 .../listener/CellDoubleClickListener.java     |    8 +
 .../struct/listener/EditOpinionListener.java  |    6 +
 .../obe/struct/listener/GoBackListener.java   |    5 +
 .../obe/struct/listener/ReturnListener.java   |    5 +
 .../parse/BidFileIndexTreeXmlParse.java       |   69 +
 .../struct/parse/SelfEvaluatesXmlParse.java   |  138 ++
 .../struct/service/AttachmentFileService.java |   30 +
 .../obe/struct/service/BidderInfoService.java |   32 +
 .../service/BusinessLicenseService.java       |   28 +
 .../struct/service/CertificateService.java    |   30 +
 .../service/EvaluationContentService.java     |   76 +
 .../gx/obe/struct/service/FinanceService.java |   28 +
 .../obe/struct/service/ModelDataService.java  |   31 +
 .../struct/service/PerformanceService.java    |   28 +
 .../struct/service/ProjectLeaderService.java  |   32 +
 .../struct/service/QualificationService.java  |   28 +
 .../struct/service/TemplateTableService.java  |   29 +
 .../struct/service/WorkExperienceService.java |   30 +
 .../com/gx/obe/struct/thread/MyThread.java    |   58 +
 .../struct/thread/ParsingStructThread.java    |  303 ++++
 .../thread/ParsingSupplierRespItemThread.java |  129 ++
 .../ParsingSupplierSelfOpinionThread.java     |  170 ++
 .../obe/struct/tree/EvaluationFactorTree.java |   71 +
 .../com/gx/obe/struct/utils/ElementUtils.java |   20 +
 .../struct/utils/ParsingStructXmlUtils.java   |  813 +++++++++
 .../gx/obe/struct/value_list/CreditGrade.java |   43 +
 .../com/gx/obe/struct/value_list/Finance.java |   42 +
 .../com/gx/obe/struct/value_list/Goods.java   |   41 +
 .../gx/obe/struct/value_list/ParamValue.java  |   31 +
 .../gx/obe/struct/value_list/ParamValues.java |   23 +
 .../gx/obe/struct/value_list/Performance.java |   43 +
 .../obe/struct/value_list/SimilarProduct.java |   64 +
 .../com/gx/obe/struct/widget/TabButton.java   |   68 +
 240 files changed, 17727 insertions(+), 39 deletions(-)
 create mode 100644 OBE-ACTION/src/com/gx/obe/action/bean/FAction.java
 create mode 100644 OBE-BUSINESS/src/com/gx/obe/web/vo/FactorClearBidContent.java
 create mode 100644 OBE-BUSINESS/src/com/gx/utils/BusinessNowTimeUtils.java
 create mode 100644 OBE-COMMON/.settings/org.eclipse.core.resources.prefs
 create mode 100644 OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/enumeration/ShowType.java
 create mode 100644 OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/global/Global.java
 create mode 100644 OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/inter/ExcelReport.java
 create mode 100644 OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/inter/LoadPdfFileView.java
 create mode 100644 OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/inter/PdfFileView.java
 create mode 100644 OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/Td.java
 create mode 100644 OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/Tr.java
 create mode 100644 OBE-COMPONENTS-CORE/src/com/gx/obe/web/entity/evaluation/EvaluationContent.java
 create mode 100644 OBE-COMPONENTS-MESSAGES/bin/.gitignore
 create mode 100644 OBE-UTILS/src/com/gx/obe/util/element/ElementClass.java
 create mode 100644 OBE-UTILS/src/com/gx/obe/util/element/FieldInfo.java
 create mode 100644 OBE-UTILS/src/com/gx/obe/util/utils/ElementUtils.java
 create mode 100644 OBE-UTILS/src/com/gx/obe/util/utils/PredicateUtil.java
 create mode 100644 com.gx.obe.bind/.classpath
 create mode 100644 com.gx.obe.bind/.gitignore
 create mode 100644 com.gx.obe.bind/.project
 create mode 100644 com.gx.obe.bind/.settings/org.eclipse.core.resources.prefs
 create mode 100644 com.gx.obe.bind/.settings/org.eclipse.jdt.core.prefs
 create mode 100644 com.gx.obe.bind/META-INF/MANIFEST.MF
 create mode 100644 com.gx.obe.bind/build.properties
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/Activator.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/base/P.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/call/Call.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/call/Callback.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/exception/ExFunction.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/exception/ExceptionFun.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/fun/Fun.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/promise/Promise.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/prop/Comp.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/prop/Prop.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/prop/RProp.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/recursion/RStream.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/recursion/Recursions.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/recursion/TreeForEach.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/rx/RxBind.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/rx/Status.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/rx/Tangent.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/stream/MapStream.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/utils/CollectorUtils.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/utils/PropUtils.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/view/ChangeListener.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/view/MView.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/view/RView.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/view/Read.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/view/View.java
 create mode 100644 com.gx.obe.bind/src/com/gx/obe/bind/view/Write.java
 create mode 100644 com.gx.obe.common.file/.settings/org.eclipse.core.resources.prefs
 create mode 100644 com.gx.obe.common.file/src/com/gx/obe/common/file/utils/BidFileUtils.java
 create mode 100644 com.gx.obe.common.file/src/com/gx/obe/common/file/widget/FileButton.java
 create mode 100644 com.gx.obe.common.widget/.settings/org.eclipse.core.resources.prefs
 create mode 100644 com.gx.obe.common.widget/src/com/gx/obe/common/widget/button/RectangleRadioButton.java
 create mode 100644 com.gx.obe.common.widget/src/com/gx/obe/common/widget/dialog/ProgressMessageTangent.java
 create mode 100644 com.gx.obe.common.widget/src/com/gx/obe/common/widget/rt/Tangent.java
 create mode 100644 com.gx.obe.common.widget/src/com/gx/obe/common/widget/text/EvalFactorText.java
 create mode 100644 com.gx.obe.component/.classpath
 create mode 100644 com.gx.obe.component/.gitignore
 create mode 100644 com.gx.obe.component/.project
 create mode 100644 com.gx.obe.component/.settings/org.eclipse.core.resources.prefs
 create mode 100644 com.gx.obe.component/.settings/org.eclipse.jdt.core.prefs
 create mode 100644 com.gx.obe.component/META-INF/MANIFEST.MF
 create mode 100644 com.gx.obe.component/build.properties
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/Activator.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/comparison/Column.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/comparison/ComparisonData.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/comparison/ComparisonTable.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/form/FForm.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/form/IForm.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/grid/FGrid.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/handler/ISelection.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/handler/RaidoHandler.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/handler/TabHandler.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/listener/SelectionListener.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/menu/ListMenu.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/rx/RxSwt.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/tabfolder/CTabFolder.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/tabfolder/FTabFolder.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/table/CTable.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/table/Column.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/table/FTable.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/table/Link.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/table/Text.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/text/CapitalMoneyText.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/text/DocumentText.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/text/FStyledText.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/text/IntegerText.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/text/MoneyText.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/text/OrdinaryMoneyText.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/tree/ITree.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/tree/ParseTrees.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/tree/Tree.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/tree/TreeSpan.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/utils/CompositeUtils.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/verify/FormVerify.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/verify/IntegerVerifyListener.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/verify/MoneyVerifyListener.java
 create mode 100644 com.gx.obe.component/src/com/gx/obe/component/verify/Verify.java
 create mode 100644 com.gx.obe.component/src/org/eclipse/wb/swt/SWTResourceManager.java
 create mode 100644 com.gx.obe.step/.settings/org.eclipse.core.resources.prefs
 create mode 100644 com.gx.obe.struct/.classpath
 create mode 100644 com.gx.obe.struct/.gitignore
 create mode 100644 com.gx.obe.struct/.project
 create mode 100644 com.gx.obe.struct/.settings/org.eclipse.core.resources.prefs
 create mode 100644 com.gx.obe.struct/.settings/org.eclipse.jdt.core.prefs
 create mode 100644 com.gx.obe.struct/META-INF/MANIFEST.MF
 create mode 100644 com.gx.obe.struct/build.properties
 create mode 100644 com.gx.obe.struct/lib/Utils-1.0.0.jar
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/evaluation/struct/enumeration/StructBusinessTypeEnum.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/evaluation/struct/enumeration/StructEnum.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/evaluation/struct/enumeration/StructTechnologyTypeEnum.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/Activator.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/AbsoluteDO.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/AbsoluteModelDO.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/AttachmentFile.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/BalanceSheet.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/BidderBasicInfo.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/BusinessLicense.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/CashSheet.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/Certificate.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/ConditionDO.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/CustomModelDo.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/Finance.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/IntelligentEvalDO.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/LiftRateDO.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/ModelData.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/ParamValueDO.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/Performance.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/ProfitlossSheet.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/ProjectLeader.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/Qualification.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/RespItemDO.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/ScoreOptionsDO.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/SelfEvalParamsDO.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/StructDateInfo.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/TemplateDataItem.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/TemplateTable.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/TimeModelDO.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/WorkExperience.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/composite/AttachmentComposite.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/composite/ClearBidReviewEntryComposite.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/composite/EvaluationContentComposite.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/composite/ModelDataComposite.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/composite/ModelDataDetailComposite.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/composite/TemplateTableComparisonComposite.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/composite/TemplateTableListComposite.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/dialog/AuxevaluationFullScreenDialog.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/dialog/EditOpinionShell.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/dialog/FactorClearBidStepDialog.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/dialog/SelectStepExpertDialog.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/enums/DataCategoryEnum.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/enums/EvaluationFactorTypeEnum.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/enums/ModelDataClassEnum.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/enums/ModelDataTypeEnum.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/enums/PerformanceStatus.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/factory/ModelDataFactory.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidContentFactory.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidContentHandler.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidContentStepHandler.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidFileHandler.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/handler/RelChapterTypeHandler.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/inters/IFactorClearBidContent.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/inters/IModelData.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/inters/IModelDataDetail.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/listener/CellDoubleClickListener.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/listener/EditOpinionListener.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/listener/GoBackListener.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/listener/ReturnListener.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/parse/BidFileIndexTreeXmlParse.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/parse/SelfEvaluatesXmlParse.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/service/AttachmentFileService.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/service/BidderInfoService.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/service/BusinessLicenseService.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/service/CertificateService.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/service/EvaluationContentService.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/service/FinanceService.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/service/ModelDataService.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/service/PerformanceService.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/service/ProjectLeaderService.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/service/QualificationService.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/service/TemplateTableService.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/service/WorkExperienceService.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/thread/MyThread.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/thread/ParsingStructThread.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/thread/ParsingSupplierRespItemThread.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/thread/ParsingSupplierSelfOpinionThread.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/tree/EvaluationFactorTree.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/utils/ElementUtils.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/utils/ParsingStructXmlUtils.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/value_list/CreditGrade.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/value_list/Finance.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/value_list/Goods.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/value_list/ParamValue.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/value_list/ParamValues.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/value_list/Performance.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/value_list/SimilarProduct.java
 create mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/widget/TabButton.java

diff --git a/BID-EVALUATION-STEP/META-INF/MANIFEST.MF b/BID-EVALUATION-STEP/META-INF/MANIFEST.MF
index 5727fc4b..e0a32181 100644
--- a/BID-EVALUATION-STEP/META-INF/MANIFEST.MF
+++ b/BID-EVALUATION-STEP/META-INF/MANIFEST.MF
@@ -24,7 +24,8 @@ Require-Bundle: org.eclipse.ui,
  com.gx.obe.answer,
  com.gx.obe.sameness,
  com.gx.obe.credit,
- org.eclipse.swt
+ org.eclipse.swt,
+ com.gx.obe.struct;bundle-version="1.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Automatic-Module-Name: BID-EVALUATION-STEP
 Bundle-ActivationPolicy: lazy
diff --git a/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/composite/FactorEvaluationComposite.java b/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/composite/FactorEvaluationComposite.java
index e9089461..74296d7f 100644
--- a/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/composite/FactorEvaluationComposite.java
+++ b/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/composite/FactorEvaluationComposite.java
@@ -73,6 +73,7 @@ import com.gx.obe.components.core.enumeration.CommonEnum;
 import com.gx.obe.components.core.enumeration.EvaluationFactorEnum;
 import com.gx.obe.components.core.enumeration.EvaluationStepEnum;
 import com.gx.obe.components.core.enumeration.ExpertEnum;
+import com.gx.obe.components.core.enumeration.ShowType;
 import com.gx.obe.config.ConfigConstants;
 import com.gx.obe.config.utils.PropertiesUtils;
 import com.gx.obe.evaluation.step.composite.struct.EvaluationView;
@@ -94,6 +95,7 @@ import com.gx.obe.evaluation.step.widgets.EvalLeftGroupButton;
 import com.gx.obe.evaluation.step.widgets.LeftMenuEnum;
 import com.gx.obe.evaluation.step.widgets.LeftMenuMouseAdapter;
 import com.gx.obe.message.Messages;
+import com.gx.obe.struct.composite.TemplateTableListComposite;
 import com.gx.obe.util.utils.CollectionUtils;
 import com.gx.obe.util.utils.FileUtils;
 import com.gx.obe.util.utils.LogUtils;
@@ -131,7 +133,7 @@ public class FactorEvaluationComposite extends EvaluationView {
 	private Composite viewContentComposite;
 	private Composite evaluation_panel_composite;
 	private Text supplier_name;
-	
+	private ImageButton curShowButton;
 //	private EvalLeftButton file_panel_both_ver;
 //	private EvalLeftButton file_panel_both_hor;
 //	private EvalLeftButton show_file_only;
@@ -166,7 +168,7 @@ public class FactorEvaluationComposite extends EvaluationView {
 	private EvalLeftGroupButton opinionGroupButton; 
 	private EvalLeftGroupButton creditGroupButton; 
 	private EvalLeftGroupButton radioGroupButton; 
-	
+	private ShowType showType;
 //	private EvalLeftButton evaluationPanelBtn;
 //	private EvalLeftGroupButton bid_file_only;
 //	private EvalLeftButton bidding_file_only;
@@ -234,6 +236,8 @@ public class FactorEvaluationComposite extends EvaluationView {
 	private List<SupplierDTO> supplierDTOList;
 	private OpenFileTipsShell openFileTipsShell;
 	private Map<String,String> supplierNameMap = new HashMap<String,String>();
+	private Composite buttonComposite;
+	private TemplateTableListComposite templateTableListComposite;
 	
 	{
 		LogUtils.logClass(FactorEvaluationComposite.class);
@@ -393,7 +397,7 @@ public class FactorEvaluationComposite extends EvaluationView {
 		right_composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
 		
 		Composite supplier_composite = new Composite(right_composite, SWT.NONE);
-		GridLayout gl_supplier_composite = new GridLayout(6, false);
+		GridLayout gl_supplier_composite = new GridLayout(10, false);
 		supplier_composite.setLayout(gl_supplier_composite);
 		supplier_composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
 		supplier_composite.setBackgroundImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/title_bg.png"));
@@ -410,6 +414,19 @@ public class FactorEvaluationComposite extends EvaluationView {
 		supplier_name.setForeground(SWTResourceManager.getColor(SWT.COLOR_BLUE));
 		supplier_name.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
 		
+		ESepator verAfter = new ESepator(supplier_composite, SWT.VERTICAL);
+		verAfter.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1));
+		
+		buttonComposite = new Composite(supplier_composite, SWT.NONE);
+		RowLayout rl_composite = new RowLayout(SWT.HORIZONTAL);
+		rl_composite.marginBottom = 0;
+		rl_composite.marginTop = 0;
+		buttonComposite.setLayout(rl_composite);
+		
+		ESepator verFront = new ESepator(supplier_composite, SWT.VERTICAL);
+		verFront.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1));
+		
+		
 		viewCredit_link = new ELink(supplier_composite, SWT.NONE);
 		viewCredit_link.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/btn/blue/view.png"));
 		viewCredit_link.setText("查看征信");
@@ -691,6 +708,8 @@ public class FactorEvaluationComposite extends EvaluationView {
 		gl_evaluation_panel_composite.marginWidth = 0;
 		evaluation_panel_composite.setLayout(gl_evaluation_panel_composite);
 		
+		 templateTableListComposite = new TemplateTableListComposite(opinionComposite, SWT.NONE);
+		
 		evaluation_talbe_composite = new Composite(evaluation_panel_composite, SWT.NONE);
 		evaluation_talbe_composite.setLayout(new FillLayout(SWT.HORIZONTAL));
 		evaluation_talbe_composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
@@ -790,7 +809,63 @@ public class FactorEvaluationComposite extends EvaluationView {
 		});
 		return imageButton;
 	}
-	
+	private void initShowButton() {
+		showType = ShowType.getByKey(PropertiesUtils.getProperty(ConfigConstants.SHOW_TYPE, ShowType.FILE.getKey()));
+
+		ImageButton fileButton = createShowButton(ShowType.FILE);
+		ImageButton opinionButton = createShowButton(ShowType.OPINION);
+		ImageButton comparisonTableButton = createShowButton(ShowType.COMPARISON_TABLE);
+//		ImageButton structButton = createShowButton(ShowType.STRUCT);
+
+		switch (showType) {
+		case FILE:
+			curShowButton = fileButton;
+			break;
+		case OPINION:
+			curShowButton = opinionButton;
+			break;
+		case COMPARISON_TABLE:
+			curShowButton = comparisonTableButton;
+			break;
+//		case STRUCT:
+//			curShowButton = structButton;
+//			break;
+		}
+		curShowButton.setSelection(true);
+	}
+
+	/**
+	 * @Description: 获得查看按钮
+	 * @author chenxw
+	 * @param type
+	 * @param buttonName
+	 * @return 
+	 */
+	private ImageButton createShowButton(ShowType type) {
+		ImageButton button = new ImageButton(buttonComposite, SWT.NONE);
+		button.setRightMargin(10);
+		button.setLeftMargin(10);
+		button.setTopMargin(5);
+		button.setBottomMargin(5);
+		button.setRightMargin(10);
+//		button.setFont(SWTResourceManager.getFont("微软雅黑", 11, SWT.NORMAL));
+		button.setForeground(ColorConstants.FONT_BLACK_COLOR);
+		button.setActiveForeground(SWTResourceManager.getColor(255, 153, 0));
+		button.setSelectionForeground(ColorConstants.FONT_BLUE_COLOR);
+		button.setData(type.getKey());
+		button.setText(type.getName());
+		button.addMouseListener(new MouseAdapter() {
+			public void mouseUp(MouseEvent e) {
+				curShowButton.setSelection(false);
+				curShowButton = button;
+				curShowButton.setSelection(true);
+				showType = type;
+				PropertiesUtils.saveProperty(ConfigConstants.SHOW_TYPE, type.getKey());
+		        refreshShowComposite();
+			}
+		});
+		return button;
+	}
 	/**
 	 * @Description: 显示投标文件或 招标文件
 	 * @author guoyr
@@ -893,7 +968,7 @@ public class FactorEvaluationComposite extends EvaluationView {
 	 */
 	private void init() {
 		menuFunctionUtils.initFunctionAuthority(menu);
-	    
+		initShowButton();
 	    initLayoutPanelGroup();
 	    initFilePanelGroup();
 	    initOpinionGroup();
@@ -1383,6 +1458,29 @@ public class FactorEvaluationComposite extends EvaluationView {
         opinionComposite.layout();
     }
     
+    private void refreshShowComposite() {
+//		supplier_name.setText(curSupplier.getSupplierName());
+		switch (showType) {
+			case FILE:
+				opinionStackLayout.topControl = viewContentComposite;
+		        showBidFileAction();
+				break;
+//			case OPINION:
+//				opinionStackLayout.topControl = factorOpinionComposite;
+//				showFactorOpenionAction();
+//				break;
+			case COMPARISON_TABLE:
+				opinionStackLayout.topControl = templateTableListComposite;
+				templateTableListComposite.refresh(curTender.getId(), curEvaluationFactor.getFactorCode(), supplierList);
+				break;
+//			case STRUCT:
+//				showStackLayout.topControl = structComposite;
+//				showStructTableAction();
+//				break;
+		}
+		opinionComposite.layout();
+	}
+    
 	/**
 	 * @Description: 选中投标人或指标
 	 * @author guoyr
@@ -1392,6 +1490,7 @@ public class FactorEvaluationComposite extends EvaluationView {
 	private void selectSupplierAndFactorAction(Supplier supplier, EvaluationFactor evaluationFactor, ExpertEvaluationResult expertEvaluationResult) {
         curEvaluationFactor = evaluationFactor;
         // 如果不是在比选界面
+        refreshShowComposite();
         if (null != supplier) {
             if (null == curSupplier || (null != curSupplier && !curSupplier.getId().equals(supplier.getId()))) {
             	// 显示供应商的投标文件
@@ -1452,6 +1551,38 @@ public class FactorEvaluationComposite extends EvaluationView {
         }
     }
 	
+	
+	
+	private void showBidFileAction() {
+        listSupplierBidFiles(curSupplier);
+        fileStackLayout.topControl = bidFileComposite;
+        fileComposite.layout();
+        
+        // 在只显示评标面板时不加载文件
+        if (evaluationPanelOnly) return;
+        
+//        fileAndPanelbothAction(evalPanlGoientation);
+        // 显示当前指标的评审点
+        listFactorEvaluationPoints(curSupplier, curEvaluationFactor);
+        
+        // 如果未能通过评审点定位文件,则直接定位供应商的文件
+        if (!locationBidFileByFactorPointAction()) {
+            loacationBidFileByDocumtntAction();
+        }
+        
+        if (bidFileGrid.getSelectionCount() > 0) {
+            // 如果显示所有评审点的界面,则刷新所有评审点
+            if (null != showEvalPointShell && !showEvalPointShell.isDisposed()) {
+                // 根据投标人加载投标分册和评审点
+                if (!ObjectUtils.getObjString(showEvalPointShell.getData("supplierId")).equals(curSupplier.getId())) {
+                    showEvalPointShell.refreshEvalPointGrid(curTender.getId(), curSupplier.getId());
+                    showEvalPointShell.setData("supplierId", curSupplier.getId());
+                }
+            }
+        }
+	}
+	
+	
 	/**
 	 * @Description: 列出当前指标的评审点
 	 * @author guoyr
diff --git a/BID-OPENING/src/com/gx/obe/opening/composite/BidOpeningHallComposite.java b/BID-OPENING/src/com/gx/obe/opening/composite/BidOpeningHallComposite.java
index 347ff001..b26febc4 100644
--- a/BID-OPENING/src/com/gx/obe/opening/composite/BidOpeningHallComposite.java
+++ b/BID-OPENING/src/com/gx/obe/opening/composite/BidOpeningHallComposite.java
@@ -619,6 +619,12 @@ public class BidOpeningHallComposite extends Composite {
 						});
 					
 					}
+
+					@Override
+					public int getErrorMessagesSize() {
+						// TODO Auto-generated method stub
+						return 0;
+					}
 					
 				};
 				new NewUpdateTenderProjectInfoThread(tenderProjectEntity, listener).start();
diff --git a/BID-OPENING/src/com/gx/obe/opening/composite/SubTenderProjectEnterMenuComposite.java b/BID-OPENING/src/com/gx/obe/opening/composite/SubTenderProjectEnterMenuComposite.java
index a5ff4aa3..1eab2553 100644
--- a/BID-OPENING/src/com/gx/obe/opening/composite/SubTenderProjectEnterMenuComposite.java
+++ b/BID-OPENING/src/com/gx/obe/opening/composite/SubTenderProjectEnterMenuComposite.java
@@ -280,7 +280,13 @@ public class SubTenderProjectEnterMenuComposite extends Composite implements Act
 		new AutoVerifyUserRemotePasswordThread(tenderProject,Constants.USER.getEncodePassWord()).start();
 		// 如果未获取最新投标信息,则自动获取
 		if(!tenderProjectService.isGetLatestBidinfo(tenderProject.getId())){
-			new RefreshProjectSupplierTenderInfoThread(tenderProject, new ProgressMessageAdapter(){}).start();
+			new RefreshProjectSupplierTenderInfoThread(tenderProject, new ProgressMessageAdapter(){
+
+				@Override
+				public int getErrorMessagesSize() {
+					// TODO Auto-generated method stub
+					return 0;
+				}}).start();
 		}
 		tenderNoLabel.addMouseListener(new ChangeTextListener());
 	}
diff --git a/BID-OPENING/src/com/gx/obe/opening/composite/TenderProjectEnterMenuComposite.java b/BID-OPENING/src/com/gx/obe/opening/composite/TenderProjectEnterMenuComposite.java
index 3bb6a25d..cfd10835 100644
--- a/BID-OPENING/src/com/gx/obe/opening/composite/TenderProjectEnterMenuComposite.java
+++ b/BID-OPENING/src/com/gx/obe/opening/composite/TenderProjectEnterMenuComposite.java
@@ -250,7 +250,13 @@ public class TenderProjectEnterMenuComposite extends Composite implements Action
 		
 		// 如果未获取最新投标信息,则自动获取
 		if(!tenderProjectService.isGetLatestBidinfo(tenderProject.getId())){
-			new RefreshProjectSupplierTenderInfoThread(tenderProject, new ProgressMessageAdapter(){}).start();
+			new RefreshProjectSupplierTenderInfoThread(tenderProject, new ProgressMessageAdapter(){
+
+				@Override
+				public int getErrorMessagesSize() {
+					// TODO Auto-generated method stub
+					return 0;
+				}}).start();
 		}
 		tenderNoLabel.addMouseListener(new ChangeTextListener());
 		tenderNameLabel.addMouseListener(new ChangeTextListener());
diff --git a/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectFocusDecryptBidFilThread.java b/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectFocusDecryptBidFilThread.java
index 268f5383..de08eb02 100644
--- a/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectFocusDecryptBidFilThread.java
+++ b/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectFocusDecryptBidFilThread.java
@@ -86,6 +86,12 @@ public class MultyProjectFocusDecryptBidFilThread implements Runnable{
 						}
 						showMessage(flag, tenderProjectEntity);
 					}
+
+					@Override
+					public int getErrorMessagesSize() {
+						// TODO Auto-generated method stub
+						return 0;
+					}
 				});
 				batchFocusDecryptBidFilThread.start();
 				myRunnableList.add(batchFocusDecryptBidFilThread);
@@ -98,6 +104,12 @@ public class MultyProjectFocusDecryptBidFilThread implements Runnable{
 						startRemoteBidOpeningListener.startRemoteBidOpening(flag, tenderProjectService.getTenderPackOpeningInfo(tenderProjectEntity.getId(), bidopeningStage), "");
 						showMessage(flag, tenderProjectEntity);
 					}
+
+					@Override
+					public int getErrorMessagesSize() {
+						// TODO Auto-generated method stub
+						return 0;
+					}
 				}, synchronizedInfoOnly);
 				startRemoteDecryptBidFilThread.start();
 				myRunnableList.add(startRemoteDecryptBidFilThread);
diff --git a/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectRemoteDecryptBidFilThread.java b/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectRemoteDecryptBidFilThread.java
index 05900e7d..7f01508f 100644
--- a/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectRemoteDecryptBidFilThread.java
+++ b/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectRemoteDecryptBidFilThread.java
@@ -82,6 +82,12 @@ public class MultyProjectRemoteDecryptBidFilThread implements Runnable{
 						}
 						showMessage(flag, tenderProjectEntity);
 					}
+
+					@Override
+					public int getErrorMessagesSize() {
+						// TODO Auto-generated method stub
+						return 0;
+					}
 				});
 				batchRemoteDecryptBidFilThread.start();
 				myRunnableList.add(batchRemoteDecryptBidFilThread);
@@ -94,6 +100,12 @@ public class MultyProjectRemoteDecryptBidFilThread implements Runnable{
 						startRemoteBidOpeningListener.startRemoteBidOpening(flag, tenderProjectService.getTenderPackOpeningInfo(tenderProjectEntity.getId(), bidopeningStage), "");
 						showMessage(flag, tenderProjectEntity);
 					}
+
+					@Override
+					public int getErrorMessagesSize() {
+						// TODO Auto-generated method stub
+						return 0;
+					}
 				}, synchronizedInfoOnly);
 				startRemoteDecryptBidFilThread.start();
 				myRunnableList.add(startRemoteDecryptBidFilThread);
diff --git a/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectRemoteStartBidopeningHallThread.java b/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectRemoteStartBidopeningHallThread.java
index ea1b40b8..5931b632 100644
--- a/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectRemoteStartBidopeningHallThread.java
+++ b/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectRemoteStartBidopeningHallThread.java
@@ -76,6 +76,12 @@ public class MultyProjectRemoteStartBidopeningHallThread implements Runnable{
 							callBack.message(MessageFormat.format(Messages.Tips_startProjectOpeningHallFail, tenderProjectEntity.getTenderName()), -1);
 						}
 					}
+
+					@Override
+					public int getErrorMessagesSize() {
+						// TODO Auto-generated method stub
+						return 0;
+					}
 				});
 //				new OpenRemoteHallListener(){
 //					public void openRemoteHall(final boolean openRemoteHall, TenderProjectEntity tenderProjectEntity, String msg){
@@ -101,6 +107,12 @@ public class MultyProjectRemoteStartBidopeningHallThread implements Runnable{
 							callBack.message(MessageFormat.format(Messages.Tips_startProjectOpeningHallFail, tenderProjectEntity.getTenderName()), -1);
 						}
 					}
+
+					@Override
+					public int getErrorMessagesSize() {
+						// TODO Auto-generated method stub
+						return 0;
+					}
 				});
 //				new OpenRemoteHallListener(){
 //					public void openRemoteHall(final boolean openRemoteHall, TenderProjectEntity tenderProjectEntity, String msg){
diff --git a/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectUploadBidOpeningResultThread.java b/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectUploadBidOpeningResultThread.java
index f6f34813..40b511eb 100644
--- a/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectUploadBidOpeningResultThread.java
+++ b/BID-OPENING/src/com/gx/obe/opening/thread/MultyProjectUploadBidOpeningResultThread.java
@@ -138,6 +138,12 @@ public class MultyProjectUploadBidOpeningResultThread implements Runnable{
 										listener.showMessage(-1, "["+projectOpeningInfo.getTenderProject().getTenderNo() + projectOpeningInfo.getTenderProject().getTenderName() +"]完成开标并上传结果失败!");
 									}
 								}
+
+								@Override
+								public int getErrorMessagesSize() {
+									// TODO Auto-generated method stub
+									return 0;
+								}
 							});
 							uploadBidOpeningResultThread.start();
 							listener.showMessage(0, "[" + projectOpeningInfo.getTenderProject().getTenderName() + "]正在完成并上传结果...");
diff --git a/OBE-ACTION/META-INF/MANIFEST.MF b/OBE-ACTION/META-INF/MANIFEST.MF
index 3a747727..9a6e0abe 100644
--- a/OBE-ACTION/META-INF/MANIFEST.MF
+++ b/OBE-ACTION/META-INF/MANIFEST.MF
@@ -10,7 +10,9 @@ Require-Bundle: org.eclipse.ui,
  org.eclipse.swt.core,
  com.gx.obe.common.icons,
  com.gx.obe.components.messages;bundle-version="1.0.0",
- com.gx.obe.business
+ com.gx.obe.business,
+ com.gx.obe.component,
+ com.gx.obe.bind;bundle-version="1.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Automatic-Module-Name: OBE-ACTION
 Bundle-ActivationPolicy: lazy
diff --git a/OBE-ACTION/src/com/gx/obe/action/bean/FAction.java b/OBE-ACTION/src/com/gx/obe/action/bean/FAction.java
new file mode 100644
index 00000000..02ea566d
--- /dev/null
+++ b/OBE-ACTION/src/com/gx/obe/action/bean/FAction.java
@@ -0,0 +1,26 @@
+package com.gx.obe.action.bean;
+
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.action.listener.ActionListener;
+import com.gx.obe.component.rx.RxSwt;
+
+public abstract class FAction<T> extends Action {
+	
+	@Override
+	public void run() {
+		ActionListener listener = this.getListener();
+		listener.onLoad(this);
+		RxSwt.run(this::supply).checkWidget(listener.getParentComposite()).exe(this::loadComposite);
+	}
+	
+	private void loadComposite(T t) {
+		ActionListener listener = this.getListener();
+		listener.loadComposite(this, consume(listener.getParentComposite(), t));
+	}
+	
+	protected abstract T supply();
+	
+	protected abstract Composite consume(Composite parent, T t);
+	
+}
diff --git a/OBE-BUSINESS/src/com/gx/obe/web/service/SupplierEvaluationFactorService.java b/OBE-BUSINESS/src/com/gx/obe/web/service/SupplierEvaluationFactorService.java
index edac0acc..635b0683 100644
--- a/OBE-BUSINESS/src/com/gx/obe/web/service/SupplierEvaluationFactorService.java
+++ b/OBE-BUSINESS/src/com/gx/obe/web/service/SupplierEvaluationFactorService.java
@@ -7,13 +7,16 @@ import java.util.Map;
 
 import org.apache.log4j.Logger;
 
+import com.gx.obe.business.entity.Result;
 import com.gx.obe.business.entity.SupplierEvaluationFactor;
 import com.gx.obe.components.core.Constants;
 import  com.gx.obe.web.utils.NetworkRequest;
+import com.gx.obe.web.utils.ObeHttpUtils;
 import com.gx.obe.http.json.JsonUtil;
 import com.gx.obe.http.util.WebReflecUtill;
 import com.gx.obe.web.utils.ResultStatus;
 import com.gx.obe.web.vo.BatchSaveOrUpdateVo;
+import com.gx.obe.web.vo.FactorClearBidContent;
 import com.gx.obe.web.vo.UpdateAssignPropertyVo;
 
 /** 
@@ -206,4 +209,36 @@ public class SupplierEvaluationFactorService {
 			return 0;
 		}
 	}
+	/**
+     * @Description: 计算指标清标意见
+     * @author chenxw
+     * @param stepId
+     * @return
+     */
+	public Result<Void> calculateFactorClearBidOpinion(String stepId) {
+		Map<String, Object> param = new HashMap<String, Object>();
+		param.put("stepId", stepId);
+		return ObeHttpUtils.getResult(URL + "/calculateFactorClearBidOpinion", param, Void.class);
+	}
+	/**
+	 * @Description: 获取指标清标内容
+	 * @author chenxw
+	 * @param stepId
+	 * @return 
+	 */
+	public FactorClearBidContent getFactorClearBidContent(String stepId) {
+		Map<String, Object> param = new HashMap<String, Object>();
+		param.put("stepId", stepId);
+		return ObeHttpUtils.getOne(URL + "/getFactorClearBidContent", param, FactorClearBidContent.class);
+	}
+	/**
+	 * @Description: 获取打分指标清标内容
+	 * @param tenderId
+	 * @return 
+	 */
+	public FactorClearBidContent getScoreFactorClearBidContent(String tenderId) {
+		Map<String, Object> param = new HashMap<String, Object>();
+		param.put("tenderId", tenderId);
+		return ObeHttpUtils.getOne(URL + "/getScoreFactorClearBidContent", param, FactorClearBidContent.class);
+	}
 }
diff --git a/OBE-BUSINESS/src/com/gx/obe/web/utils/ObeHttpUtils.java b/OBE-BUSINESS/src/com/gx/obe/web/utils/ObeHttpUtils.java
index 4075bd90..155bb8df 100644
--- a/OBE-BUSINESS/src/com/gx/obe/web/utils/ObeHttpUtils.java
+++ b/OBE-BUSINESS/src/com/gx/obe/web/utils/ObeHttpUtils.java
@@ -6,8 +6,10 @@ import java.util.Map;
 
 import org.apache.log4j.Logger;
 
+import com.gx.obe.business.entity.Result;
 import com.gx.obe.components.core.Constants;
 import com.gx.obe.http.json.JsonUtil;
+import com.gx.obe.http.jsons.JSONNull;
 import com.gx.obe.web.utils.NetworkRequest;
 import com.gx.obe.web.utils.ResultStatus;
 
@@ -50,5 +52,34 @@ public class ObeHttpUtils {
 		}
 		return new ArrayList<>();
 	}
+	public static boolean getBoolean(String path, Map<String, Object> param) {
+		String strWebServerUrl = Constants.getServiceUrl(path);
+		try {
+			return ResultStatus.getReultStatusBoolean(NetworkRequest.get(strWebServerUrl, param));
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			return false;
+		}
+	}
+	public static <T> Result<T> getResult(String path, Map<String, Object> param, Class<T> tclass) {
+		String strWebServerUrl = Constants.getServiceUrl(path);
+		try {
+			String result = NetworkRequest.get(strWebServerUrl, param);
+			if (ResultStatus.getReultStatusOK(result)) {
+				@SuppressWarnings("unchecked")
+				Result<T> jsonToBean = JsonUtil.jsonToBean(result, Result.class);
+				if (jsonToBean != null) {
+					T data = jsonToBean.getData();
+					if (data != null && data != JSONNull.NULL) {
+						jsonToBean.setData(JsonUtil.jsonToBean(data, tclass));
+					}
+					return jsonToBean;
+				}
+			}
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+		}
+		return null;
+	}
 	
 }
diff --git a/OBE-BUSINESS/src/com/gx/obe/web/vo/FactorClearBidContent.java b/OBE-BUSINESS/src/com/gx/obe/web/vo/FactorClearBidContent.java
new file mode 100644
index 00000000..d1f769b8
--- /dev/null
+++ b/OBE-BUSINESS/src/com/gx/obe/web/vo/FactorClearBidContent.java
@@ -0,0 +1,39 @@
+package com.gx.obe.web.vo;
+
+import java.util.List;
+
+import com.gx.obe.business.entity.SupplierEvaluationFactor;
+import com.gx.obe.web.entity.Supplier;
+import com.gx.obe.web.entity.evaluation.EvaluationFactor;
+
+public class FactorClearBidContent {
+	
+	private List<Supplier> supplierList;
+	private List<EvaluationFactor> factorList;
+	private List<SupplierEvaluationFactor> supplierEvaluationFactorList;
+	
+	public List<Supplier> getSupplierList() {
+		return supplierList;
+	}
+	
+	public void setSupplierList(List<Supplier> supplierList) {
+		this.supplierList = supplierList;
+	}
+	
+	public List<EvaluationFactor> getFactorList() {
+		return factorList;
+	}
+	
+	public void setFactorList(List<EvaluationFactor> factorList) {
+		this.factorList = factorList;
+	}
+	
+	public List<SupplierEvaluationFactor> getSupplierEvaluationFactorList() {
+		return supplierEvaluationFactorList;
+	}
+	
+	public void setSupplierEvaluationFactorList(List<SupplierEvaluationFactor> supplierEvaluationFactorList) {
+		this.supplierEvaluationFactorList = supplierEvaluationFactorList;
+	}
+	
+}
\ No newline at end of file
diff --git a/OBE-BUSINESS/src/com/gx/utils/BusinessNowTimeUtils.java b/OBE-BUSINESS/src/com/gx/utils/BusinessNowTimeUtils.java
new file mode 100644
index 00000000..981b8b14
--- /dev/null
+++ b/OBE-BUSINESS/src/com/gx/utils/BusinessNowTimeUtils.java
@@ -0,0 +1,190 @@
+package com.gx.utils;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+import org.apache.log4j.Logger;
+
+import com.gx.obe.message.Messages;
+import com.gx.obe.web.service.ConnectionService;
+
+/**
+ * @Description: 获取当前时间
+ * @author guoyr
+ */
+public class BusinessNowTimeUtils {
+
+	private static long NOW_TIME = 0l;
+	private static Calendar GET_DATETIME_START_CALLENDAR;// 记录获取当前时间的时间点
+	private static final String weak[] = {Messages.Weak_sun, Messages.Weak_mon, Messages.Weak_tues, Messages.Weak_wed, Messages.Weak_thur, Messages.Weak_fri, Messages.Weak_sat};
+	private static final String weakDay[] = {Messages.Weak_sunday, Messages.Weak_monday, Messages.Weak_tuesday, Messages.Weak_wednesday, Messages.Weak_thursday, Messages.Weak_friday, Messages.Weak_saturday};
+//	private static final String weakEn[] = {"Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"};
+//	private static final String weakEnDay[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
+	private static Logger LOG = Logger.getLogger(BusinessNowTimeUtils.class);
+	public static String NOW_DATE_SOURCE = "本机时间";
+	private static boolean setTime = false;
+	private static ConnectionService connectionService = new ConnectionService();
+	
+	/**
+	 * @Description: 设置当前时间
+	 * @author guoyr
+	 * @param nowDate
+	 */
+	public static void setNowTime(Date nowDate){
+		Calendar cal = Calendar.getInstance();
+		
+		cal.setTime(nowDate);
+		NOW_TIME = cal.getTimeInMillis();
+		GET_DATETIME_START_CALLENDAR = Calendar.getInstance();
+		
+		// 标记为已设置当前时间
+		setTime = true;
+		
+		LOG.info("license设置当前时间为:" + nowDate);
+	}
+	
+	/**
+	 * @Description: 获取数据库或时间服务器中的当前时间 
+	 * @author guoyr
+	 * @return
+	 */
+	private static long getNowTime() {
+		// 如果还未设置当前时间
+		if(!setTime){
+			return new Date().getTime() ;
+		}
+		return NOW_TIME + (Calendar.getInstance().getTimeInMillis()-GET_DATETIME_START_CALLENDAR.getTimeInMillis());
+	}
+	
+	/**
+	 * @Description: 获得当前时间
+	 * @author guoyr
+	 * @return
+	 */
+	public static Date getNowDate(){
+		// 如果还未设置当前时间
+		if(!setTime){
+			return new Date();
+		}
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTimeInMillis(getNowTime());
+		return calendar.getTime();
+	}
+	
+	/**
+	 * @Description: 获得当前年份
+	 * @author guoyr
+	 * @return
+	 */
+	public static int getYear() {
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(getNowDate());
+		return calendar.get(Calendar.YEAR);
+	}
+	
+	/**
+	 * @Description: 获得当前星期
+	 * @author guoyr
+	 * @return
+	 */
+	public static String getWeak(){
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(getNowDate());
+		int dayOfWeak = calendar.get(Calendar.DAY_OF_WEEK)-1;
+		return weak[dayOfWeak];
+	}
+	/**
+	 * @Description: 获得当前星期
+	 * @author guoyr
+	 * @return
+	 */
+	public static String getWeakDay(){
+		Calendar calendar = Calendar.getInstance();
+		calendar.setTime(getNowDate());
+		int dayOfWeak = calendar.get(Calendar.DAY_OF_WEEK)-1;
+		return weakDay[dayOfWeak];
+	}
+	
+	
+	/**
+	 * @Description: 获得当前日期
+	 * @author guoyr
+	 * @return
+	 */
+	public static String getDate(){
+		return new SimpleDateFormat("yyyy-MM-dd").format(getNowDate());
+	}
+	
+	/**
+	 * @Description: 获得当前时间
+	 * @author guoyr
+	 * @return
+	 */
+	public static String getTime(){
+		return new SimpleDateFormat("HH:mm:ss").format(getNowDate());
+	}
+	
+	/**
+	 * @Description: 获得当前日期和时间
+	 * @author guoyr
+	 * @return
+	 */
+	public static String getDateTime(){
+		return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(getNowDate());
+	}
+	
+	/**
+	 * @Description: 服务器的当前时间
+	 * @author guoyr
+	 * @return
+	 */
+	private static Date getServiceNowTime(){
+		Date nowDate = null;
+		long startTime = System.currentTimeMillis();    //获取开始时间
+		nowDate = connectionService.getServiceDate();
+		long endTime = System.currentTimeMillis();    //获取结束时间
+		if(null != nowDate){
+			long ms = endTime - startTime;
+			if(ms > 1000){
+				int second= (int) (ms / 1000);
+				Calendar calendar = Calendar.getInstance();
+				calendar.setTime(nowDate);
+				calendar.add(Calendar.SECOND, second);
+				nowDate = calendar.getTime();
+			}
+		}
+		return nowDate;
+	}
+	
+	/**
+	 * @Description: 获取时间服务器时间
+	 * @author guoyr
+	 * @return
+	 */
+//	private static Date getNowDateFormDateServer(){
+//		Date nowDate = null;
+//		try {
+//			String xmlStr = WebServiceUtil.invokeWebservice(PropertiesUtils.getWebserviceProperty(WebserviceConstants.WEBSERVICE_ADDRESS,"") + PropertiesUtils.getWebserviceProperty(WebserviceConstants.NOW_TIME_URL,""), PropertiesUtils.getWebserviceProperty(WebserviceConstants.NOW_TIME_METHOD,""), new Object[]{}, null);
+//			if(!"".equals(xmlStr)){
+//				Document document = DocumentHelper.parseText(xmlStr);
+//				Element root = document.getRootElement();
+//				String operTag = root.element("header").elementTextTrim("operTag");
+//				if(null != operTag && "Y".equals(operTag)){
+//					String timeStr = root.element("body").elementTextTrim("time");
+//					nowDate = DateUtils.toDate(timeStr);
+//					LOG.debug("获取时间服务器时间为" + nowDate);
+//				}else {
+//					LOG.error(root.element("header").elementTextTrim("operDesc"));
+//					LOG.error(root.element("header").elementTextTrim("operException"));
+//				}
+//			}else {
+//				LOG.error("获取时间服务器时间出错!");
+//			}
+//		} catch (Exception e) {
+//			LOG.error("", e);
+//			nowDate = null;
+//		}
+//		return nowDate;
+//	}
+}
diff --git a/OBE-COMMON/.settings/org.eclipse.core.resources.prefs b/OBE-COMMON/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..99f26c02
--- /dev/null
+++ b/OBE-COMMON/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/OBE-COMMON/src/com/gx/obe/thread/AutoDownloadProjectThread.java b/OBE-COMMON/src/com/gx/obe/thread/AutoDownloadProjectThread.java
index c53c83e3..c194db03 100644
--- a/OBE-COMMON/src/com/gx/obe/thread/AutoDownloadProjectThread.java
+++ b/OBE-COMMON/src/com/gx/obe/thread/AutoDownloadProjectThread.java
@@ -82,6 +82,11 @@ public class AutoDownloadProjectThread extends MyThread{
 					getNeedDownloadProjectList();
 				}
 			}
+			@Override
+			public int getErrorMessagesSize() {
+				// TODO Auto-generated method stub
+				return 0;
+			}
 			
 		});
 		thread.start();
@@ -190,6 +195,12 @@ public class AutoDownloadProjectThread extends MyThread{
 						}else {
 							tenderfailureSum ++;
 						}
+					}
+
+					@Override
+					public int getErrorMessagesSize() {
+						// TODO Auto-generated method stub
+						return 0;
 					};
 				});
 				thread.start();
@@ -212,6 +223,11 @@ public class AutoDownloadProjectThread extends MyThread{
 						}else {
 							tenderfailureSum ++;
 						}
+					}
+					@Override
+					public int getErrorMessagesSize() {
+						// TODO Auto-generated method stub
+						return 0;
 					};
 				});
 				downloadProjectInfoThread.start();
diff --git a/OBE-COMMON/src/com/gx/obe/thread/NewDownloadProjectInfoThread.java b/OBE-COMMON/src/com/gx/obe/thread/NewDownloadProjectInfoThread.java
index 9ef9551a..96b086de 100644
--- a/OBE-COMMON/src/com/gx/obe/thread/NewDownloadProjectInfoThread.java
+++ b/OBE-COMMON/src/com/gx/obe/thread/NewDownloadProjectInfoThread.java
@@ -336,6 +336,12 @@ public class NewDownloadProjectInfoThread extends MyThread{
 				callBack.message(msg, flag);
 			}
 
+			@Override
+			public int getErrorMessagesSize() {
+				// TODO Auto-generated method stub
+				return 0;
+			}
+
 		};
 		//下载投标人
 //		NewDownloadSupplierThread downloadSupplierListThread = new NewDownloadSupplierThread(tenderProjectEntity, otherInfoLoadingListener);
diff --git a/OBE-COMMON/src/com/gx/obe/thread/NewReDownloadProjectInfoThread.java b/OBE-COMMON/src/com/gx/obe/thread/NewReDownloadProjectInfoThread.java
index 96d32765..d653ee66 100644
--- a/OBE-COMMON/src/com/gx/obe/thread/NewReDownloadProjectInfoThread.java
+++ b/OBE-COMMON/src/com/gx/obe/thread/NewReDownloadProjectInfoThread.java
@@ -97,6 +97,12 @@ public class NewReDownloadProjectInfoThread extends MyThread{
 					public void message(String msg, int flag) {
 						callBack.message(msg, flag);
 					}
+
+					@Override
+					public int getErrorMessagesSize() {
+						// TODO Auto-generated method stub
+						return 0;
+					}
 					
 				};
 			}
diff --git a/OBE-COMPONENTS-CORE/META-INF/MANIFEST.MF b/OBE-COMPONENTS-CORE/META-INF/MANIFEST.MF
index 4aa266f4..622bfe1e 100644
--- a/OBE-COMPONENTS-CORE/META-INF/MANIFEST.MF
+++ b/OBE-COMPONENTS-CORE/META-INF/MANIFEST.MF
@@ -9,7 +9,8 @@ Require-Bundle: org.eclipse.ui,
  com.gx.obe.config,
  com.gx.obe.utils,
  com.gx.obe.lib,
- com.gx.obe.components.messages;bundle-version="1.0.0"
+ com.gx.obe.components.messages;bundle-version="1.0.0",
+ com.gx.obe.bind;bundle-version="1.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Automatic-Module-Name: com.gx.obe.components.core
 Export-Package: com.fasterxml.jackson.annotation,
@@ -47,6 +48,8 @@ Export-Package: com.fasterxml.jackson.annotation,
  com.gx.obe.business.entity,
  com.gx.obe.components.core,
  com.gx.obe.components.core.enumeration,
+ com.gx.obe.components.core.global,
+ com.gx.obe.components.core.inter,
  com.gx.obe.components.core.util,
  com.gx.obe.components.core.vo,
  com.gx.obe.enttiytdo,
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/business/entity/SupplierEvaluationFactor.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/business/entity/SupplierEvaluationFactor.java
index ac899b3d..5c3e64d7 100644
--- a/OBE-COMPONENTS-CORE/src/com/gx/obe/business/entity/SupplierEvaluationFactor.java
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/business/entity/SupplierEvaluationFactor.java
@@ -2,8 +2,12 @@ package com.gx.obe.business.entity;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
+import com.gx.obe.util.utils.SerializeUtils;
 import com.gx.obe.util.utils.XmlAnnotation;
 
 /**
@@ -86,6 +90,23 @@ public class SupplierEvaluationFactor {
 	private int childCount = 0;
 	private int level = 1;
 	
+	@XmlAnnotation(element = "paramValues")
+	private String paramValues;
+	/**
+	 * 修改评议原因
+	 */
+	private String modifyReason;
+	
+	/**
+	 * 修改评议时间
+	 */
+	private Date modifyTime;
+	
+	/**
+	 * 修改评议人
+	 */
+	private String modifyUserName;
+	
 	@XmlAnnotation(element = "remark")
 	private String opinion;
 	
@@ -94,8 +115,26 @@ public class SupplierEvaluationFactor {
 	
 	private String scoreStatus;
 	
+	
+	private Map<String, Object> paramsMap = null;
+	
 	private List<EvaluationFactorItem> evaluationFactorItemList = new ArrayList<EvaluationFactorItem>();
 	
+	/**
+	 * 
+	 */
+	private String respItemList;
+	
+	
+	@XmlAnnotation(element = "finance")
+	private String finance;
+	
+	@XmlAnnotation(element = "performance")
+	private String performance;
+	
+	@XmlAnnotation(element = "creditGrade")
+	private String creditGrade;
+	
 	public void addChild(EvaluationFactorItem factor) {
 		evaluationFactorItemList.add(factor);
 	}
@@ -368,5 +407,118 @@ public class SupplierEvaluationFactor {
 	public void setScoreStatus(String scoreStatus) {
 		this.scoreStatus = scoreStatus;
 	}
+
+	public String getModifyReason() {
+		return modifyReason;
+	}
+
+	public void setModifyReason(String modifyReason) {
+		this.modifyReason = modifyReason;
+	}
+
+	public Date getModifyTime() {
+		return modifyTime;
+	}
+
+	public void setModifyTime(Date modifyTime) {
+		this.modifyTime = modifyTime;
+	}
+
+	public String getModifyUserName() {
+		return modifyUserName;
+	}
+
+	public void setModifyUserName(String modifyUserName) {
+		this.modifyUserName = modifyUserName;
+	}
+	/**
+	 * @Description: 为评标步骤设置参数
+	 * @author guoyr
+	 * @param paramKey
+	 * @param featureList
+	 */
+	public void setParam(String paramKey, Object paramValue) {
+		if (null != computerParams) {
+			if (null == paramsMap) {
+				paramsMap = SerializeUtils.deserializeObject(getComputerParams());
+			}
+		}
+		if (null == paramsMap) {
+			paramsMap = new HashMap<String, Object>();
+		}
+		if (null != paramValue) {
+			paramsMap.put(paramKey, paramValue);
+		} else {
+			
+			paramsMap.remove(paramKey);
+		}
+		if (paramsMap.isEmpty()) {
+			computerParams = null;
+			paramsMap = null;
+		} else {
+			computerParams = SerializeUtils.serializeObject(paramsMap);
+		}
+	}
+	/**
+	 * @Description: 获得评标步骤的参数
+	 * @author guoyr
+	 * @param paramKey
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public <T> T getParamByKey(String paramKey) {
+		if (null != computerParams) {
+			if (null == paramsMap) {
+				paramsMap = SerializeUtils.deserializeObject(getComputerParams());
+			}
+			if (null != paramsMap) {
+				return (T) paramsMap.get(paramKey);
+			}
+		}
+		return null;
+	}
+	public String getParamValues() {
+		return paramValues;
+	}
+
+	public void setParamValues(String paramValues) {
+		this.paramValues = paramValues;
+	}
+
+	public String getPageNumber() {
+		return null == getParamByKey("pageNumber") ? "" : getParamByKey("pageNumber").toString();
+	}
+	
+	public String getRespItemList() {
+		return respItemList;
+	}
+
+	public void setRespItemList(String respItemList) {
+		this.respItemList = respItemList;
+	}
+
+	public String getFinance() {
+		return finance;
+	}
+
+	public void setFinance(String finance) {
+		this.finance = finance;
+	}
+
+	public String getPerformance() {
+		return performance;
+	}
+
+	public void setPerformance(String performance) {
+		this.performance = performance;
+	}
+
+	public String getCreditGrade() {
+		return creditGrade;
+	}
+
+	public void setCreditGrade(String creditGrade) {
+		this.creditGrade = creditGrade;
+	}
 	
 }
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/Constants.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/Constants.java
index 09eed6ac..e10c49f1 100644
--- a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/Constants.java
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/Constants.java
@@ -1,5 +1,10 @@
 package com.gx.obe.components.core;
 
+import java.io.File;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+import com.gx.obe.config.utils.ProjectUtils;
 import com.gx.obe.config.utils.PropertiesUtils;
 import com.gx.obe.web.entity.auth.AuthUser;
 
@@ -7,6 +12,32 @@ public class Constants {
 
 	public static final String PRODUCE_EN_NAME = "OBE";
 	public static final String PRODUCE_VERSION = "V7.0";
+	/**
+	 * 招标文件目录
+	 **/
+	public static String BIDDING_FILE_FOLDER = "biddingFile";
+	/**
+	 * 投标文件目录
+	 **/
+	public static String BID_FILE_FOLDER = "bidFile";
+	
+	/**
+	 * 系统的当前路径
+	 **/
+	public static String PRODUCT_ROOT = getPluginPath(CoreActivator.getDefault());
+	public static String getPluginPath(AbstractUIPlugin plugin){
+		String root = ProjectUtils.toFullPath(plugin, "/");
+		// 如果前面有/,读取文件时找不到
+		if(root.charAt(0)=='/'){
+			root = root.substring(1);
+		}
+		return root;
+//		if(null == PRODUCT_ROOT || "".equals(PRODUCT_ROOT)){
+//			
+//			PRODUCT_ROOT = root;
+//		}
+//		return PRODUCT_ROOT;
+	}
 	/**
 	 * 当前登录的用户
 	 **/
@@ -194,5 +225,68 @@ public class Constants {
 	
 	public static final String TIANYAN_CHECK_NOTE = "TIANYAN_CHECK_NOTE.pdf";
 	
+	
+	/**
+	 * 标书文件路径
+	 **/
+	public static String BID_FILE_PATH = PropertiesUtils.getProperty(com.gx.obe.config.ConfigConstants.BID_FILE_PATH, PRODUCT_ROOT).concat(File.separator);
+	
+	/**
+	 * @Description: 获得项目的投标文件路径
+	 * @author guoyr
+	 * @param tenderId
+
+	 */
+	public static String getBidFilePath(String tenderId){
+		return BID_FILE_PATH.concat(tenderId).concat(File.separator).concat(BID_FILE_FOLDER).concat(File.separator);
+	}
+	/**
+	 * @Description: 获得投标人的投标文件路径
+	 * @author guoyr
+	 * @param tenderId
+	 * @param supplierId
+	 * @return 
+	 */
+	public static String getBidFilePath(String tenderId, String supplierId){
+		return BID_FILE_PATH.concat(tenderId).concat(File.separator).concat(BID_FILE_FOLDER).concat(File.separator).concat(supplierId).concat(File.separator);
+	}
+	/**
+	 * 投标信封 signType
+	 */
+	public static String SIGNTYPE = "DianJu";
+	public static String ETB = ".etb";// 电子投标文件
+	public static String EZG = ".etb";//".ezg";// 电子资格投标文件
+	public static String EZB = ".ezb";// 电子招标文件
+	public static String ECN = ".enc";
+	public static String ENC = ".enc";
+	public static String XLS = ".xls";
+	public static String PDF = ".pdf";
+	public static String DOC = ".doc";
+	public static String DOCX = ".docx";
+	public static String XML = ".xml";
+	public static String LOG = ".log";
+	public static String XLSX = ".xlsx";
+	public static String ZIP = ".zip";
+	/**
+	 * @Description: 招标文件路径
+	 * @author guoyr
+	 * 
+	 * @param tenderId
+	 * @return 
+	 */
+	public static String getBiddingFilePath(String tenderId){
+		return BID_FILE_PATH.concat(tenderId).concat(File.separator).concat(BIDDING_FILE_FOLDER).concat(File.separator);
+	}
+	/**
+	 * 招标ID
+	 */
+	public static final String BIDDING_ID = "biddingId";
+	public static String getAuxiliaryPlatformUrl(String str){
+		String strWebServerUrl = PropertiesUtils.getProperty(com.gx.obe.config.ConfigConstants.AUXILIARY_SERVICE_URL, "");
+		if(!strWebServerUrl.endsWith("/")){
+			strWebServerUrl = strWebServerUrl + "/";
+		}
+		return strWebServerUrl + str;
+	}
 }
 
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/enumeration/EvaluationStepEnum.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/enumeration/EvaluationStepEnum.java
index e347e066..58d7e61f 100644
--- a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/enumeration/EvaluationStepEnum.java
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/enumeration/EvaluationStepEnum.java
@@ -28,11 +28,14 @@ public class EvaluationStepEnum {
 	public static final String BUSINESS_VETO = "18";
 	public static final String FIXED_FACTOR = "21";// 定档
 	public static final String ASSOCIATION_QUERY = "22";// 关联查询评审步骤
-	
+	public static final String FACTOR_CLEAR_BID = "23";
 	public static final String BILL_ZBT = "bill_zbt";
 	public static final String BILL_YT = "bill_yt";
 	public static final String BILL_BZ = "bill_bz";
-	
+	/**
+	 * 参数:清标内容完成计算
+	 */
+	public static final String COMPLETE_CALCULATION = "COMPLETE_CALCULATION";
 	/**
 	 * 是否对投标人进行筛选[00:不筛选;01:筛选]
 	 */
@@ -386,5 +389,6 @@ public class EvaluationStepEnum {
 	 * 打分评审强制录入意见
 	 */
 	public static final String NEED_OPINION = "NEED_OPINION";
+	public static final String EVALUATION_FACTOR_TYPE = "EVALUATION_FACTOR_TYPE";
 	
 }
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/enumeration/ShowType.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/enumeration/ShowType.java
new file mode 100644
index 00000000..c8d99486
--- /dev/null
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/enumeration/ShowType.java
@@ -0,0 +1,37 @@
+package com.gx.obe.components.core.enumeration;
+
+import java.util.Arrays;
+
+import com.gx.obe.message.Messages;
+
+public enum ShowType {
+	
+	FILE("file", Messages.Button_veiwBidFile),
+	
+	OPINION("opinion", "查看评议意见"),
+	
+	COMPARISON_TABLE("comparisonTable", "查看对比表");
+	
+//	STRUCT("struct", "查看结构化数据");
+	
+	private String key;
+	private String name;
+	
+	private ShowType(String key, String name) {
+		this.key = key;
+		this.name = name;
+	}
+	
+	public String getKey() {
+		return key;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public static ShowType getByKey(String key) {
+		return Arrays.stream(values()).filter(t -> t.getKey().equals(key)).findAny().get();
+	}
+	
+}
\ No newline at end of file
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/global/Global.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/global/Global.java
new file mode 100644
index 00000000..27d566fa
--- /dev/null
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/global/Global.java
@@ -0,0 +1,31 @@
+package com.gx.obe.components.core.global;
+
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.components.core.inter.ExcelReport;
+import com.gx.obe.components.core.inter.LoadPdfFileView;
+import com.gx.obe.components.core.inter.PdfFileView;
+
+public class Global {
+	
+	/**
+	 * @Description: Excel报表
+	 */
+	public static ExcelReport EXCEL_REPORT;
+	
+	/**
+	 * @Description: pdf文件显示器
+	 */
+	public static LoadPdfFileView PDF_FILE_VIEW = (Composite parent, int style) -> new PdfFileView() {
+		public void setFileNotExistMessage(String fileNotExistMessage) {}
+		
+		public void setCacheNumber(int cacheNumber) {}
+		
+		public void releaseFile(String filePath) {}
+		
+		public void openFile(String filePath, int page) {}
+		
+		public void openFile(String filePath) {}
+	};
+	
+}
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/inter/ExcelReport.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/inter/ExcelReport.java
new file mode 100644
index 00000000..38ba6aa3
--- /dev/null
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/inter/ExcelReport.java
@@ -0,0 +1,12 @@
+package com.gx.obe.components.core.inter;
+
+import java.util.Map;
+
+import com.gx.obe.bind.promise.Promise;
+import com.gx.obe.web.entity.tender.TenderProjectEntity;
+
+public interface ExcelReport {
+	
+	Promise<String> generate(TenderProjectEntity tenderProject, String templatePath, String reportOutPath, Map<String, Object> dateMap);
+	
+}
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/inter/LoadPdfFileView.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/inter/LoadPdfFileView.java
new file mode 100644
index 00000000..24166ff1
--- /dev/null
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/inter/LoadPdfFileView.java
@@ -0,0 +1,9 @@
+package com.gx.obe.components.core.inter;
+
+import org.eclipse.swt.widgets.Composite;
+
+public interface LoadPdfFileView {
+	
+	PdfFileView load(Composite parent, int style);
+	
+}
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/inter/PdfFileView.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/inter/PdfFileView.java
new file mode 100644
index 00000000..4f58cf75
--- /dev/null
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/inter/PdfFileView.java
@@ -0,0 +1,15 @@
+package com.gx.obe.components.core.inter;
+
+public interface PdfFileView {
+	
+	void setFileNotExistMessage(String fileNotExistMessage);
+	
+	void setCacheNumber(int cacheNumber);
+	
+	void openFile(String filePath);
+	
+	void openFile(String filePath, int page);
+
+	void releaseFile(String filePath);
+	
+}
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/TableXML.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/TableXML.java
index 76dd4513..2d7f435e 100644
--- a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/TableXML.java
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/TableXML.java
@@ -16,6 +16,21 @@ public class TableXML {
 	private List<Tr> headList = new ArrayList<TableXML.Tr>();
 	private List<Tr> bodyList = new ArrayList<TableXML.Tr>();
 	
+	public List<Tr> getHeadList() {
+		return headList;
+	}
+	
+	public void setHeadList(List<Tr> headList) {
+		this.headList = headList;
+	}
+	
+	public List<Tr> getBodyList() {
+		return bodyList;
+	}
+	
+	public void setBodyList(List<Tr> bodyList) {
+		this.bodyList = bodyList;
+	}
 	/**
 	 * @Description: 初始化
 	 * @author chenxw
@@ -150,16 +165,10 @@ public class TableXML {
 		this.headList.add(tr);
 	}
 
-	public List<Tr> getHeadList() {
-		return headList;
-	}
 
 	public void addBody(Tr tr) {
 		this.bodyList.add(tr);
 	}
 
-	public List<Tr> getBodyList() {
-		return bodyList;
-	}
 	
 }
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/Td.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/Td.java
new file mode 100644
index 00000000..e1882446
--- /dev/null
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/Td.java
@@ -0,0 +1,42 @@
+package com.gx.obe.components.core.vo;
+
+public class Td {
+	
+	private String colType;
+	private String content;
+	private int width;
+	private boolean needFill;
+	
+	public String getColType() {
+		return colType;
+	}
+	
+	public String getContent() {
+		return content;
+	}
+	
+	public int getWidth() {
+		return width;
+	}
+	
+	public void setColType(String colType) {
+		this.colType = colType;
+	}
+	
+	public void setContent(String content) {
+		this.content = content;
+	}
+	
+	public void setWidth(int width) {
+		this.width = width;
+	}
+
+	public boolean isNeedFill() {
+		return needFill;
+	}
+
+	public void setNeedFill(boolean needFill) {
+		this.needFill = needFill;
+	}
+
+}
\ No newline at end of file
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/Tr.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/Tr.java
new file mode 100644
index 00000000..71f4e240
--- /dev/null
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/Tr.java
@@ -0,0 +1,42 @@
+package com.gx.obe.components.core.vo;
+
+public class Tr {
+	
+	private Td[] tds;
+	private boolean isTitle;
+	private boolean isCount;
+	private String subjectTableID;
+	
+	public void setTds(Td[] tds) {
+		this.tds = tds;
+	}
+	
+	public Td[] getTds() {
+		return tds;
+	}
+	
+	public void setTitle(boolean isTitle) {
+		this.isTitle = isTitle;
+	}
+	
+	public boolean isTitle() {
+		return isTitle;
+	}
+	
+	public void setSubjectTableID(String subjectTableID) {
+		this.subjectTableID = subjectTableID;
+	}
+	
+	public String getSubjectTableID() {
+		return subjectTableID;
+	}
+	
+	public void setCount(boolean isCount) {
+		this.isCount = isCount;
+	}
+	
+	public boolean isCount() {
+		return isCount;
+	}
+	
+}
\ No newline at end of file
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/web/entity/evaluation/EvaluationContent.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/web/entity/evaluation/EvaluationContent.java
new file mode 100644
index 00000000..c8e6aa2d
--- /dev/null
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/web/entity/evaluation/EvaluationContent.java
@@ -0,0 +1,100 @@
+package com.gx.obe.web.entity.evaluation;
+
+/**
+ * @Description: 评审内容
+ * @author chenxw
+ */
+public class EvaluationContent {
+	
+	private String id;
+	private String tenderId;
+	private String factorCode;
+	private String relChapterType;
+	private String dataCategory;
+	private String dataCode;
+	private String evalRule;
+	private String tenderStructName;
+	private String evalPointName;
+	private Integer sortNo;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getFactorCode() {
+		return factorCode;
+	}
+	
+	public void setFactorCode(String factorCode) {
+		this.factorCode = factorCode;
+	}
+	
+	public String getRelChapterType() {
+		return relChapterType;
+	}
+	
+	public void setRelChapterType(String relChapterType) {
+		this.relChapterType = relChapterType;
+	}
+	
+	public String getDataCategory() {
+		return dataCategory;
+	}
+	
+	public void setDataCategory(String dataCategory) {
+		this.dataCategory = dataCategory;
+	}
+	
+	public String getDataCode() {
+		return dataCode;
+	}
+	
+	public void setDataCode(String dataCode) {
+		this.dataCode = dataCode;
+	}
+	
+	public String getEvalRule() {
+		return evalRule;
+	}
+	
+	public void setEvalRule(String evalRule) {
+		this.evalRule = evalRule;
+	}
+	
+	public String getTenderStructName() {
+		return tenderStructName;
+	}
+	
+	public void setTenderStructName(String tenderStructName) {
+		this.tenderStructName = tenderStructName;
+	}
+	
+	public String getEvalPointName() {
+		return evalPointName;
+	}
+	
+	public void setEvalPointName(String evalPointName) {
+		this.evalPointName = evalPointName;
+	}
+	
+	public Integer getSortNo() {
+		return sortNo;
+	}
+	
+	public void setSortNo(Integer sortNo) {
+		this.sortNo = sortNo;
+	}
+	
+}
\ No newline at end of file
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/web/entity/evaluation/EvaluationFactor.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/web/entity/evaluation/EvaluationFactor.java
index 03f56988..45ceae2c 100644
--- a/OBE-COMPONENTS-CORE/src/com/gx/obe/web/entity/evaluation/EvaluationFactor.java
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/web/entity/evaluation/EvaluationFactor.java
@@ -111,6 +111,15 @@ public class EvaluationFactor {
 	private Integer childCount = 0;
 	
 	private Integer level = 1;
+	 /**  2022-10-26
+	 * 智能评审规则存储属性(以json形式存储字符串)
+	 */
+	private String intelligentEval;
+	
+	/**
+	 * 智能评审规则
+	 */
+	private String remarks;
 	
 	/**
 	 * 添加子节点
@@ -118,6 +127,15 @@ public class EvaluationFactor {
 	 * @param libraryNode
 	 *                子节点
 	 */
+	
+	private List<EvaluationContent> evaluationContentList;
+	public List<EvaluationContent> getEvaluationContentList() {
+		return evaluationContentList;
+	}
+
+	public void setEvaluationContentList(List<EvaluationContent> evaluationContentList) {
+		this.evaluationContentList = evaluationContentList;
+	}
 	public void addChild(EvaluationFactor factor) {
 		childFactorList.add(factor);
 	}
@@ -397,5 +415,22 @@ public class EvaluationFactor {
 	
 	public AIDataParams getAIDataParams() {
 		return SerializeUtils.deserializeObject(dataParams);
+	}
+
+	public String getIntelligentEval() {
+		return intelligentEval;
+	}
+
+	public void setIntelligentEval(String intelligentEval) {
+		this.intelligentEval = intelligentEval;
+	}
+
+	public String getRemarks() {
+		return remarks;
+	}
+
+	public void setRemarks(String remarks) {
+		this.remarks = remarks;
 	}	
+	
 }
diff --git a/OBE-COMPONENTS-MESSAGES/bin/.gitignore b/OBE-COMPONENTS-MESSAGES/bin/.gitignore
new file mode 100644
index 00000000..c2d9872a
--- /dev/null
+++ b/OBE-COMPONENTS-MESSAGES/bin/.gitignore
@@ -0,0 +1 @@
+/com/
diff --git a/OBE-COMPONENTS/src/com/gx/obe/common/composite/BidOpeningResultLoadComposite.java b/OBE-COMPONENTS/src/com/gx/obe/common/composite/BidOpeningResultLoadComposite.java
index 7b55a45e..38d31492 100644
--- a/OBE-COMPONENTS/src/com/gx/obe/common/composite/BidOpeningResultLoadComposite.java
+++ b/OBE-COMPONENTS/src/com/gx/obe/common/composite/BidOpeningResultLoadComposite.java
@@ -483,7 +483,10 @@ public class BidOpeningResultLoadComposite extends Composite {
 			public void run() {
 				// 如果没有获取过最新投标信息,则自动下载供应商
 				if(!tenderProjectService.isGetLatestBidinfo(tenderProject.getId())){
-					RefreshProjectSupplierTenderInfoThread thread = new RefreshProjectSupplierTenderInfoThread(tenderProject, new ProgressMessageAdapter(){});
+					RefreshProjectSupplierTenderInfoThread thread = new RefreshProjectSupplierTenderInfoThread(tenderProject, new ProgressMessageAdapter(){
+						public int getErrorMessagesSize() {
+							return 0;
+						}});
 					thread.start();
 					thread.join();
 				}
diff --git a/OBE-COMPONENTS/src/com/gx/obe/common/dialog/DownloadProjectDialog.java b/OBE-COMPONENTS/src/com/gx/obe/common/dialog/DownloadProjectDialog.java
index 36e0ca54..d97a614c 100644
--- a/OBE-COMPONENTS/src/com/gx/obe/common/dialog/DownloadProjectDialog.java
+++ b/OBE-COMPONENTS/src/com/gx/obe/common/dialog/DownloadProjectDialog.java
@@ -705,6 +705,11 @@ public class DownloadProjectDialog extends EDialog {
 					public void finish(boolean flag) {
 						
 					}
+					@Override
+					public int getErrorMessagesSize() {
+						// TODO Auto-generated method stub
+						return 0;
+					}
 					
 				};
 				List<Future<?>> allDownloadFutureList = new ArrayList<Future<?>>();
diff --git a/OBE-COMPONENTS/src/com/gx/obe/common/dialog/ServerAuthenticationDialog.java b/OBE-COMPONENTS/src/com/gx/obe/common/dialog/ServerAuthenticationDialog.java
index a0058279..dff9422f 100644
--- a/OBE-COMPONENTS/src/com/gx/obe/common/dialog/ServerAuthenticationDialog.java
+++ b/OBE-COMPONENTS/src/com/gx/obe/common/dialog/ServerAuthenticationDialog.java
@@ -433,6 +433,12 @@ public class ServerAuthenticationDialog extends EDialog {
 					
 				}
 			}
+
+			@Override
+			public int getErrorMessagesSize() {
+				// TODO Auto-generated method stub
+				return 0;
+			}
 		});
 		thread.start();
 	}
diff --git a/OBE-CONFIG/config.properties b/OBE-CONFIG/config.properties
index c1027b6c..33c6efed 100644
--- a/OBE-CONFIG/config.properties
+++ b/OBE-CONFIG/config.properties
@@ -1,5 +1,5 @@
 #update
-#Tue Oct 10 09:20:36 CST 2023
+#Sat Nov 11 14:15:13 CST 2023
 allowImportBidFile=
 decryptType=11
 controlBidOpening=01
@@ -43,7 +43,7 @@ defaultStepProgress=02
 passwordPattern=^(?\![0-9]+$)(?\![a-zA-Z]+$)[0-9A-Za-z\!@\#$%^&*?]{6,10}$
 rebackEvaluation=01
 monitoringCenterAddress=http\://1.202.77.139\:9587/
-properties_path=/D\:/Developer/EclipseTool/eclipse-rcp-photon-R-win32/../../../GitHub/\u4EAC\u80FD/jingneng/OBE-CONFIG/config.properties
+properties_path=/E\:/gitWorkSpace/v7/jingneng/OBE-CONFIG/config.properties
 templateUpdateTime=2023-09-14 13\:11\:12
 appServiceIsParallel=true
 serverName=\u4EAC\u80FD\u96C6\u56E2\u7535\u5B50\u5546\u52A1\u5E73\u53F0(\u6D4B\u8BD5)
@@ -100,6 +100,7 @@ appServiceSignMode=RSA
 evalFullScreen=01
 netService=JNJTService
 ifShowVideoCloseButton=1
+showType=comparisonTable
 batchFileSignature=01
 bidOpeningFullscreen=00
 caSignaturePdf=
@@ -142,28 +143,28 @@ lastDownloadProjectTime=1696900836876
 defaultRecommonedCount=
 passwordPatternTips=\u5BC6\u7801\u5FC5\u987B\u5305\u542B\u5B57\u6BCD\u548C\u6570\u5B57\uFF0C\u4E14\u57286~10\u4F4D\u4E4B\u95F4\uFF01
 lockStep=
-saomaSignaturePdf=
 evalBidRoomId=aadd606ff7c1445184b9ad780c5feb60
+saomaSignaturePdf=
 oldCharsetName=
 newCharsetName=
 isAIEvaluation=00
 excelRowStart=2
-volume=100
 groupByEvalBidRoom=00
-obeLicenseServerUrl=http\://127.0.0.1\:8080/
+volume=100
 verifyEvalMachineExpert=00
+obeLicenseServerUrl=http\://127.0.0.1\:8080/
 checkNewVersion=01
 gfaServiceAddress=http\://60.209.80.97\:28443/soa/WSMServlet
 videoMeetingUrl=114.116.148.159\:8181
 versionUpdateType=OBE_Service
 creditChinaDetialURL=https\://test.powerbeijing-ec.com/jndzzb/creditChinaController.do?getZhixingDetail&creditNo\=
-qrCodeServcerAddress=http\://39.96.40.58\:8811/gxapp/scanning/
 zipEncoding=GBK
-viewEvaluationResult=01
+qrCodeServcerAddress=http\://39.96.40.58\:8811/gxapp/scanning/
 bidOpeningSupplierSytle=01
+viewEvaluationResult=01
 isUseAutomaticDownload=01
-faceCompare=http\://1.202.77.139\:8001/api/face/compare
 torrentServer=
+faceCompare=http\://1.202.77.139\:8001/api/face/compare
 bidFilePath=c\:\\bidFile
 lessThanThreeFilter=
 ftpBuffersize=1024
@@ -171,5 +172,5 @@ expertLimit=
 useSpecialPdf=01
 speed=0
 bidFileCacheCount=5
+obeWebServerUrl=http\://127.0.0.1\:9863/
 OPENOFFICE_SERVER_port=8100
-obeWebServerUrl=http\://47.95.161.231\:6850/
diff --git a/OBE-CONFIG/src/com/gx/obe/config/ConfigConstants.java b/OBE-CONFIG/src/com/gx/obe/config/ConfigConstants.java
index 8af91b72..abf34740 100644
--- a/OBE-CONFIG/src/com/gx/obe/config/ConfigConstants.java
+++ b/OBE-CONFIG/src/com/gx/obe/config/ConfigConstants.java
@@ -669,5 +669,13 @@ public class ConfigConstants {
 		}
 		return false;
 	}
-	
+	//web服务端地址
+		public static final String AUXILIARY_SERVICE_URL = "auxiliaryServiceUrl";
+		
+		/**
+	     * 评标界面标书区域是否默认显示清标意见
+	     */
+//	    public static final String IS_SHOW_FACTOR_OPINION = "isShowFactorOpinion";
+		
+	    public static final String SHOW_TYPE = "showType";
 }
diff --git a/OBE-MANAGEMENT/META-INF/MANIFEST.MF b/OBE-MANAGEMENT/META-INF/MANIFEST.MF
index dbd69200..1cbeb7ca 100644
--- a/OBE-MANAGEMENT/META-INF/MANIFEST.MF
+++ b/OBE-MANAGEMENT/META-INF/MANIFEST.MF
@@ -33,7 +33,8 @@ Require-Bundle: org.eclipse.ui,
  com.gx.obe.software;bundle-version="1.0.0",
  com.gx.obe.meeting;bundle-version="1.0.0",
  com.gx.obe.step,
- com.gx.obe.template;bundle-version="1.0.0"
+ com.gx.obe.template;bundle-version="1.0.0",
+ com.gx.obe.struct;bundle-version="1.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Automatic-Module-Name: com.gx.obe.management
 Bundle-ActivationPolicy: lazy
diff --git a/OBE-MANAGEMENT/src/com/gx/obe/management/composite/EvaluationFactorsManagerComposite.java b/OBE-MANAGEMENT/src/com/gx/obe/management/composite/EvaluationFactorsManagerComposite.java
index 8ce00448..27885ecb 100644
--- a/OBE-MANAGEMENT/src/com/gx/obe/management/composite/EvaluationFactorsManagerComposite.java
+++ b/OBE-MANAGEMENT/src/com/gx/obe/management/composite/EvaluationFactorsManagerComposite.java
@@ -9,8 +9,10 @@ import java.util.List;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.core.CallBack;
 import org.eclipse.swt.core.MessageDialog;
+import org.eclipse.swt.core.listener.LoadingAdatper;
 import org.eclipse.swt.core.utils.FileDialogUtils;
 import org.eclipse.swt.core.utils.WidgetUtils;
+import org.eclipse.swt.core.widgets.ConfirmDialog;
 import org.eclipse.swt.core.widgets.ELink;
 import org.eclipse.swt.core.widgets.ESepator;
 import org.eclipse.swt.core.widgets.ImageButton;
@@ -35,6 +37,7 @@ import com.gx.obe.common.dialog.BidRegulationsConfigDialog;
 import com.gx.obe.common.file.enumeration.FileConstants;
 import com.gx.obe.common.icons.IconsActivator;
 import com.gx.obe.common.widget.dialog.MessageViewDialog;
+import com.gx.obe.common.widget.shell.ProgressMessageDialog;
 import com.gx.obe.common.widget.thread.MyRunnable;
 import com.gx.obe.common.widget.thread.SyncThread;
 import com.gx.obe.common.widget.utils.MenuFunctionUtils;
@@ -53,6 +56,7 @@ import com.gx.obe.management.thread.ImportBillOfQuantitiesThread;
 import com.gx.obe.management.thread.NewExportEvaluationFactorThread;
 import com.gx.obe.management.thread.SupplierEvaluationFactorXmlResolverThread;
 import com.gx.obe.message.Messages;
+import com.gx.obe.struct.thread.ParsingStructThread;
 import com.gx.obe.thread.SyncThreadSet;
 import com.gx.obe.util.utils.CollectionUtils;
 import com.gx.obe.util.utils.LogUtils;
@@ -100,6 +104,7 @@ public class EvaluationFactorsManagerComposite extends Composite {
 	private boolean isInProgress = false;
 	private boolean returnFlag = false;
 	private MenuFunctionUtils menuFunctionUtils = new MenuFunctionUtils();
+	private ELink importStructInfoLink;
 	
 	{
 		LogUtils.logClass(EvaluationFactorsManagerComposite.class);
@@ -230,6 +235,17 @@ public class EvaluationFactorsManagerComposite extends Composite {
 		importsupplierFactorResponse.setText(Messages.Button_analysisResponse);
 		menuFunctionUtils.addFunction(importsupplierFactorResponse, "ANALYSIS_RESPONSE");
 		
+		
+		importStructInfoLink = new ELink(eval_method_composite, SWT.WRAP);
+		importStructInfoLink.addMouseListener(new MouseAdapter() {
+			public void mouseUp(MouseEvent e) {
+				importStructInfoAction();
+			}
+		});
+		importStructInfoLink.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/btn/blue/import.png"));
+		importStructInfoLink.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, true, 1, 1));
+		importStructInfoLink.setText("一键解析结构化数据");
+		
 		importBillOfQuantities = new ELink(eval_method_composite, SWT.WRAP);
 		importBillOfQuantities.addMouseListener(new MouseAdapter() {
 			public void mouseUp(MouseEvent e) {
@@ -1024,7 +1040,34 @@ public class EvaluationFactorsManagerComposite extends Composite {
 			thread.start();	
 		}
 	}
-	
+	/**
+	 * @Description: 解析结构化数据
+	 * @author huangzhong  
+	 */
+	private void importStructInfoAction() {
+//		MessageViewDialog dialog = new MessageViewDialog(getShell(), -1);
+//		dialog.setTitle("解析结构化数据");
+//		new Thread(new ParsingStructThread(tenderProjectEntity.getId(), dialog.getCallBack())).start();
+//		dialog.open();
+		
+		ConfirmDialog confirmDialog = new ConfirmDialog(getShell(), null, "确认已下载标书文件并解析结构化数据吗? ", null);
+		confirmDialog.addButton("一键解析", "01", null);
+		confirmDialog.addCancel(Messages.Button_close, null);
+		confirmDialog.open();
+		if(!confirmDialog.getClickStatus().equals("01")){
+			return;
+		}
+		ProgressMessageDialog messageProgress = new ProgressMessageDialog(getShell(), false, -1, new LoadingAdatper() {
+			public void finish(boolean flag) {
+			}
+		});
+		messageProgress.setTitle("一键解析结构化数据");
+		messageProgress.setOperateVisible(true);
+		messageProgress.setCountDownTime(2);
+		new Thread(new ParsingStructThread(tenderProjectEntity, messageProgress)).start();
+		messageProgress.open();
+		
+	}
 	/**
 	 * @Description: 验证是否已经进入评分环节
 	 * @author guoyr
diff --git a/OBE-MANAGEMENT/src/com/gx/obe/management/composite/SubPackageMenuEnterComposite.java b/OBE-MANAGEMENT/src/com/gx/obe/management/composite/SubPackageMenuEnterComposite.java
index b9d8b870..eae3a8db 100644
--- a/OBE-MANAGEMENT/src/com/gx/obe/management/composite/SubPackageMenuEnterComposite.java
+++ b/OBE-MANAGEMENT/src/com/gx/obe/management/composite/SubPackageMenuEnterComposite.java
@@ -409,7 +409,13 @@ public class SubPackageMenuEnterComposite extends Composite implements ActionLis
 				public void run() {
 					// 如果未获取最新投标信息,则自动获取
 					if(!tenderProjectService.isGetLatestBidinfo(tenderProject.getId())){
-						new RefreshProjectSupplierTenderInfoThread(tenderProject, new ProgressMessageAdapter(){}).start();
+						new RefreshProjectSupplierTenderInfoThread(tenderProject, new ProgressMessageAdapter(){
+
+							@Override
+							public int getErrorMessagesSize() {
+								// TODO Auto-generated method stub
+								return 0;
+							}}).start();
 					}else if(!CommonEnum.YES.equals(tenderProject.getIsPack())) {
 						//京能不要自动下载专家
 						if(!MenuFunction.HIDE.equals(menuFunctionUtils.getAuthority(MenuFunctionEnum.AUTO_DOWN_EXPERT))){
diff --git a/OBE-MANAGEMENT/src/com/gx/obe/management/composite/TenderProjectEnterMenuComposite.java b/OBE-MANAGEMENT/src/com/gx/obe/management/composite/TenderProjectEnterMenuComposite.java
index 8947ee0f..b94a8061 100644
--- a/OBE-MANAGEMENT/src/com/gx/obe/management/composite/TenderProjectEnterMenuComposite.java
+++ b/OBE-MANAGEMENT/src/com/gx/obe/management/composite/TenderProjectEnterMenuComposite.java
@@ -285,7 +285,13 @@ public class TenderProjectEnterMenuComposite extends Composite implements Action
 				public void run() {
 					// 如果未获取最新投标信息,则自动获取
 					if(!tenderProjectService.isGetLatestBidinfo(tenderProject.getId())){
-						new RefreshProjectSupplierTenderInfoThread(tenderProject, new ProgressMessageAdapter(){}).start();
+						new RefreshProjectSupplierTenderInfoThread(tenderProject, new ProgressMessageAdapter(){
+
+							@Override
+							public int getErrorMessagesSize() {
+								// TODO Auto-generated method stub
+								return 0;
+							}}).start();
 					}else if(!CommonEnum.YES.equals(tenderProject.getIsPack())) {
 						//京能不要自动下载
 						if(!MenuFunction.HIDE.equals(menuFunctionUtils.getAuthority(MenuFunctionEnum.AUTO_DOWN_EXPERT))){
diff --git a/OBE-UTILS/META-INF/MANIFEST.MF b/OBE-UTILS/META-INF/MANIFEST.MF
index b9e1220a..e43ad607 100644
--- a/OBE-UTILS/META-INF/MANIFEST.MF
+++ b/OBE-UTILS/META-INF/MANIFEST.MF
@@ -18,6 +18,7 @@ Bundle-ClassPath: .,
  lib/aspectjweaver-1.9.1.jar,
  lib/aspose-words-14.9.0-jdk16.jar
 Export-Package: com.gx.obe.util,
+ com.gx.obe.util.element,
  com.gx.obe.util.entity,
  com.gx.obe.util.pdf,
  com.gx.obe.util.thread,
diff --git a/OBE-UTILS/src/com/gx/obe/util/element/ElementClass.java b/OBE-UTILS/src/com/gx/obe/util/element/ElementClass.java
new file mode 100644
index 00000000..2a99df7b
--- /dev/null
+++ b/OBE-UTILS/src/com/gx/obe/util/element/ElementClass.java
@@ -0,0 +1,72 @@
+package com.gx.obe.util.element;
+
+
+import java.beans.IntrospectionException;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.dom4j.DocumentException;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+
+public class ElementClass<T> {
+	
+	private Class<T> tClass;
+	
+	private List<FieldInfo> fieldInfoList;
+	
+	public static <T> ElementClass<T> of(Class<T> tClass) {
+		return new ElementClass<>(tClass);
+	}
+	
+	public ElementClass(Class<T> tClass) {
+		this.tClass = tClass;
+		this.fieldInfoList = Arrays.stream(tClass.getDeclaredFields()).map(this::createFieldInfo).filter(t -> t != null).collect(Collectors.toList());;
+	}
+	
+	private FieldInfo createFieldInfo(Field field) {
+		PropertyDescriptor descriptor = null;
+		try {
+			descriptor = new PropertyDescriptor(field.getName(), tClass);
+		} catch (IntrospectionException e) {
+			return null;
+		}
+		return new FieldInfo(field, descriptor.getWriteMethod());
+	}
+	
+	public T create(Element element) {
+		T t;
+		try {
+			t = tClass.newInstance();
+		} catch (InstantiationException | IllegalAccessException e) {
+			return null;
+		}
+		fieldInfoList.forEach(fieldInfo -> fieldInfo.mapValue(t, element));
+		return t;
+	}
+	
+	public List<T> createList(Element element) {
+		List<?> elements = element.elements();
+		return elements.stream().map(t -> create((Element) t)).collect(Collectors.toList());
+	}
+	
+	public T create(String xml) {
+		try {
+			return create(DocumentHelper.parseText(xml).getRootElement());
+		} catch (DocumentException e) {
+			throw new RuntimeException(e);
+		}
+	}
+	
+	public List<T> createList(String xml) {
+		try {
+			return createList(DocumentHelper.parseText(xml).getRootElement());
+		} catch (DocumentException e) {
+			throw new RuntimeException(e);
+		}
+	}
+	
+}
diff --git a/OBE-UTILS/src/com/gx/obe/util/element/FieldInfo.java b/OBE-UTILS/src/com/gx/obe/util/element/FieldInfo.java
new file mode 100644
index 00000000..f87c72a6
--- /dev/null
+++ b/OBE-UTILS/src/com/gx/obe/util/element/FieldInfo.java
@@ -0,0 +1,68 @@
+package com.gx.obe.util.element;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.dom4j.Element;
+
+import com.gx.obe.util.utils.ElementUtils;
+
+
+
+public class FieldInfo {
+	
+	private String name;
+	
+	private Method writeMethod;
+	
+	private FieldType type;
+	
+	private Class<?> fClass;
+	
+	public FieldInfo(Field field, Method writeMethod) {
+		this.name = field.getName();
+		this.writeMethod = writeMethod;
+		this.fClass = field.getType();
+		if (fClass == String.class) this.type = FieldType.STRING;
+		else if (fClass == List.class) {
+			ParameterizedType parameterizedType = (ParameterizedType) field.getGenericType();
+			this.fClass = (Class<?>) parameterizedType.getActualTypeArguments()[0];
+			this.type = fClass == String.class ? FieldType.LIST_STRING : FieldType.LIST_OBJECT;
+		} else this.type = FieldType.OBJECT;
+	}
+	
+	public void mapValue(Object obj, Element element) {
+		Object value = getValue(element);
+		if (value == null) return;
+		try {
+			writeMethod.invoke(obj, value);
+		} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {}
+	}
+	
+	private Object getValue(Element element) {
+		Element fieldElement = element.element(name);
+		if (fieldElement == null) return null;
+		List<?> elements = fieldElement.elements();
+		switch (type) {
+			case STRING:
+				return fieldElement.getTextTrim();
+			case OBJECT:
+				return ElementClass.of(fClass).create(fieldElement);
+			case LIST_STRING:
+				return elements.stream().map(ElementUtils::as).map(Element::getTextTrim).collect(Collectors.toList());
+			case LIST_OBJECT:
+				return elements.stream().map(ElementUtils::as).map(ElementClass.of(fClass)::create).collect(Collectors.toList());
+			default:
+				return null;
+		}
+	}
+	
+	public enum FieldType {
+		STRING, OBJECT, LIST_STRING, LIST_OBJECT;
+	}
+	
+}
diff --git a/OBE-UTILS/src/com/gx/obe/util/utils/ElementUtils.java b/OBE-UTILS/src/com/gx/obe/util/utils/ElementUtils.java
new file mode 100644
index 00000000..e197b62f
--- /dev/null
+++ b/OBE-UTILS/src/com/gx/obe/util/utils/ElementUtils.java
@@ -0,0 +1,23 @@
+package com.gx.obe.util.utils;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+import org.dom4j.Element;
+
+public class ElementUtils {
+	
+	public static Function<Element, Stream<Element>> toStreamFun(String listName, String itemName) {
+		return e -> {
+			List<?> elements = Optional.ofNullable(e).map(t -> t.element(listName)).map(t -> t.elements(itemName)).orElse(null);
+			if (elements == null) return null;
+			return elements.stream().map(t -> (Element) t);
+		};
+	}
+	
+	public static <T> Element as(T t) {
+	    return (Element) t;
+	  }
+}
diff --git a/OBE-UTILS/src/com/gx/obe/util/utils/Keys.java b/OBE-UTILS/src/com/gx/obe/util/utils/Keys.java
index c1b56a75..7dd3fe03 100644
--- a/OBE-UTILS/src/com/gx/obe/util/utils/Keys.java
+++ b/OBE-UTILS/src/com/gx/obe/util/utils/Keys.java
@@ -15,6 +15,10 @@ public class Keys {
 		this.keys = keys;
 	}
 	
+	public static Keys of(Object... ks) {
+		return new Keys(ks);
+	}
+	
 	@SafeVarargs
 	public static <T> Function<T, Keys> fun(Function<T, Object>... functionKeys) {
 		return t -> new Keys(Arrays.stream(functionKeys).map(f -> f.apply(t)).toArray());
diff --git a/OBE-UTILS/src/com/gx/obe/util/utils/PredicateUtil.java b/OBE-UTILS/src/com/gx/obe/util/utils/PredicateUtil.java
new file mode 100644
index 00000000..b7b137fc
--- /dev/null
+++ b/OBE-UTILS/src/com/gx/obe/util/utils/PredicateUtil.java
@@ -0,0 +1,12 @@
+package com.gx.obe.util.utils;
+
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+public class PredicateUtil {
+	
+	public static <T, R> Predicate<T> get(Function<T, R> function, Predicate<R> predicate) {
+		return t -> predicate.test(function.apply(t));
+	}
+	
+}
diff --git a/OBE-UTILS/src/com/gx/obe/util/utils/PredicateUtils.java b/OBE-UTILS/src/com/gx/obe/util/utils/PredicateUtils.java
index ea914583..5b1a3b6c 100644
--- a/OBE-UTILS/src/com/gx/obe/util/utils/PredicateUtils.java
+++ b/OBE-UTILS/src/com/gx/obe/util/utils/PredicateUtils.java
@@ -29,4 +29,24 @@ public class PredicateUtils {
 		return t -> predicate.test(function.apply(t));
 	}
 	
+	/**
+	 * @Description: 大于
+	 * @author chenxw
+	 * @param higher
+	 * @return
+	 */
+	public static Predicate<Integer> higher(int higher) {
+		return t -> t > higher;
+	}
+	
+	/**
+	 * @Description: 小于
+	 * @author chenxw
+	 * @param lower
+	 * @return
+	 */
+	public static Predicate<Integer> lower(int lower) {
+		return t -> t < lower;
+	}
+	
 }
diff --git a/com.gx.obe.bind/.classpath b/com.gx.obe.bind/.classpath
new file mode 100644
index 00000000..1fa3e680
--- /dev/null
+++ b/com.gx.obe.bind/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/com.gx.obe.bind/.gitignore b/com.gx.obe.bind/.gitignore
new file mode 100644
index 00000000..ae3c1726
--- /dev/null
+++ b/com.gx.obe.bind/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/com.gx.obe.bind/.project b/com.gx.obe.bind/.project
new file mode 100644
index 00000000..9ca57854
--- /dev/null
+++ b/com.gx.obe.bind/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>com.gx.obe.bind</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>
diff --git a/com.gx.obe.bind/.settings/org.eclipse.core.resources.prefs b/com.gx.obe.bind/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..c01d71d1
--- /dev/null
+++ b/com.gx.obe.bind/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,3 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
+separateDerivedEncodings=true
diff --git a/com.gx.obe.bind/.settings/org.eclipse.jdt.core.prefs b/com.gx.obe.bind/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..0c68a61d
--- /dev/null
+++ b/com.gx.obe.bind/.settings/org.eclipse.jdt.core.prefs
@@ -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
diff --git a/com.gx.obe.bind/META-INF/MANIFEST.MF b/com.gx.obe.bind/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..75d32f3f
--- /dev/null
+++ b/com.gx.obe.bind/META-INF/MANIFEST.MF
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Bind
+Bundle-SymbolicName: com.gx.obe.bind
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: com.gx.obe.bind.Activator
+Bundle-Vendor: GX
+Require-Bundle: org.eclipse.ui,
+  org.eclipse.core.runtime
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Automatic-Module-Name: com.gx.obe.bind
+Bundle-ActivationPolicy: lazy
+Export-Package: com.gx.obe.bind,
+ com.gx.obe.bind.base,
+ com.gx.obe.bind.call,
+ com.gx.obe.bind.exception,
+ com.gx.obe.bind.fun,
+ com.gx.obe.bind.promise,
+ com.gx.obe.bind.prop,
+ com.gx.obe.bind.recursion,
+ com.gx.obe.bind.rx,
+ com.gx.obe.bind.stream,
+ com.gx.obe.bind.utils,
+ com.gx.obe.bind.view
diff --git a/com.gx.obe.bind/build.properties b/com.gx.obe.bind/build.properties
new file mode 100644
index 00000000..5f4af4c1
--- /dev/null
+++ b/com.gx.obe.bind/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
+javacDefaultEncoding.. = UTF-8
\ No newline at end of file
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/Activator.java b/com.gx.obe.bind/src/com/gx/obe/bind/Activator.java
new file mode 100644
index 00000000..c2b1a6d1
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/Activator.java
@@ -0,0 +1,50 @@
+package com.gx.obe.bind;
+
+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.gx.obe.bind"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	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;
+	}
+
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/base/P.java b/com.gx.obe.bind/src/com/gx/obe/bind/base/P.java
new file mode 100644
index 00000000..1d54121d
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/base/P.java
@@ -0,0 +1,134 @@
+package com.gx.obe.bind.base;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.UUID;
+import java.util.function.BiConsumer;
+import java.util.function.BiPredicate;
+import java.util.function.Supplier;
+
+import com.gx.obe.bind.view.ChangeListener;
+import com.gx.obe.bind.view.RView;
+import com.gx.obe.bind.view.Write;
+
+public class P<T> implements RView<T> {
+	
+	private boolean log;
+	
+	private T value;
+	
+	private Map<String, BiConsumer<T, T>> writeMap = new HashMap<>();
+	
+	private List<ChangeListener> changeListenerList = new ArrayList<>();
+	
+	private String name;
+	
+	private BiPredicate<T, T> predicate = (o, n) -> true;
+	
+	private T defaultValue;
+	
+	private Supplier<T> other = () -> defaultValue;
+	
+	public P<T> as(String name) {
+		this.name = Objects.requireNonNull(name);
+		this.log = true;
+		return this;
+	}
+	
+	public P<T> orElseGet(Supplier<T> other) {
+		this.other = Objects.requireNonNull(other);
+		this.value = other.get();
+		return this;
+	}
+	
+	public P<T> orElse(T defaultValue) {
+		this.defaultValue = defaultValue;
+		this.value = defaultValue;
+		return this;
+	}
+	
+	public P<T> limit(BiPredicate<T, T> predicate) {
+		this.predicate = Objects.requireNonNull(predicate);
+		return this;
+	}
+	
+	public T get() {
+		return value;
+	}
+	
+	public void bind(Write<T> write) {
+		bind(UUID.randomUUID().toString(), write);
+	}
+	
+	public void bind(String key, Write<T> write) {
+		Objects.requireNonNull(write);
+		this.writeMap.put(key, (o, n) -> write.set(n));
+	}
+	
+	public void watch(BiConsumer<T, T> biConsumer) {
+		watch(UUID.randomUUID().toString(), biConsumer);
+	}
+	
+	public void watch(String key, BiConsumer<T, T> biConsumer) {
+		Objects.requireNonNull(biConsumer);
+		this.writeMap.put(key, biConsumer);
+	}
+	
+	public void bindExe(Write<T> write) {
+		bindExe(UUID.randomUUID().toString(), write);
+	}
+	
+	public void bindExe(String key, Write<T> write) {
+		Objects.requireNonNull(write);
+		write.set(value);
+		this.writeMap.put(key, (o, n) -> write.set(n));
+	}
+	
+	public void clearBind() {
+		this.writeMap.clear();
+		this.value = other.get();
+	}
+	
+	public void clearListener() {
+		this.changeListenerList.clear();
+	}
+	
+	private void _change(T value) {
+		if (log) System.out.println(name + "  --source:" + this.value + "  --change:" + value);
+		this.value = Optional.ofNullable(value).orElseGet(other);
+		this.changeListenerList.forEach(ChangeListener::change);
+	}
+	
+	protected void change(T value) {
+		T old = this.value;
+		if (!predicate.test(old, value)) return;
+		_change(value);
+		this.writeMap.values().stream().forEach(c -> c.accept(old, get()));
+	}
+	
+	protected void change(T value, String key) {
+		T old = this.value;
+		if (!predicate.test(old, value)) return;
+		_change(value);
+		this.writeMap.entrySet().stream().filter(e -> !e.getKey().equals(key)).map(e -> e.getValue()).forEach(c -> c.accept(old, get()));
+	}
+	
+	public boolean isBind() {
+		return !writeMap.isEmpty();
+	}
+	
+	@Override
+	public void addChangeListener(ChangeListener changeListener) {
+		this.changeListenerList.add(Objects.requireNonNull(changeListener));
+	}
+	
+	@Override
+	public String toString() {
+		return "P:" + Objects.toString(value);
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/call/Call.java b/com.gx.obe.bind/src/com/gx/obe/bind/call/Call.java
new file mode 100644
index 00000000..42d70036
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/call/Call.java
@@ -0,0 +1,59 @@
+package com.gx.obe.bind.call;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+import com.gx.obe.bind.view.Read;
+import com.gx.obe.bind.view.Write;
+
+public class Call {
+	
+	private final List<Callback> callbackList = new ArrayList<>();
+	
+	public static Call of(Callback callback) {
+		return new Call().bind(callback);
+	}
+	
+	public boolean isBind() {
+		return !callbackList.isEmpty();
+	}
+	
+	public Call bind(Callback callback) {
+		callbackList.add(callback);
+		return this;
+	}
+	
+	public Call bindExe(Callback callback) {
+		callback.call();
+		return bind(callback);
+	}
+	
+	public void exe() {
+		callbackList.stream().forEach(Callback::call);
+	}
+	
+	public <T> Consumer<T> toSet() {
+		return t -> exe();
+	}
+	
+	public <T> Supplier<T> toGet() {
+		return () -> {
+			exe();
+			return null;
+		};
+	}
+	
+	public <T> Write<T> toWrite() {
+		return t -> exe();
+	}
+	
+	public <T> Read<T> toRead() {
+		return () -> {
+			exe();
+			return null;
+		};
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/call/Callback.java b/com.gx.obe.bind/src/com/gx/obe/bind/call/Callback.java
new file mode 100644
index 00000000..3a561413
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/call/Callback.java
@@ -0,0 +1,5 @@
+package com.gx.obe.bind.call;
+
+public interface Callback {
+	void call();
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/exception/ExFunction.java b/com.gx.obe.bind/src/com/gx/obe/bind/exception/ExFunction.java
new file mode 100644
index 00000000..f3c80b22
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/exception/ExFunction.java
@@ -0,0 +1,7 @@
+package com.gx.obe.bind.exception;
+
+public interface ExFunction<T, R> {
+	
+	R apply(T t) throws Exception;
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/exception/ExceptionFun.java b/com.gx.obe.bind/src/com/gx/obe/bind/exception/ExceptionFun.java
new file mode 100644
index 00000000..994cdb95
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/exception/ExceptionFun.java
@@ -0,0 +1,46 @@
+package com.gx.obe.bind.exception;
+
+import java.math.BigDecimal;
+import java.util.function.Function;
+
+public class ExceptionFun<T, R> implements Function<T, R> {
+	
+	private ExFunction<T, R> function;
+	
+	public static <T, R> ExceptionFun<T, R> of(ExFunction<T, R> function) {
+		return new ExceptionFun<>(function);
+	}
+	
+	public ExceptionFun(ExFunction<T, R> function) {
+		this.function = function;
+	}
+	
+	public R get(T t) {
+		return getOrDefault(t, null);
+	}
+	
+	public R getOrDefault(T t, R defaultValue) {
+		try {
+			return function.apply(t);
+		} catch (Exception e) {
+			return defaultValue;
+		}
+	}
+	
+	public R getOrThrow(T t) {
+		try {
+			return function.apply(t);
+		} catch (Exception e) {
+			throw new NullPointerException(e.getMessage());
+		}
+	}
+	
+	public static final ExceptionFun<String, BigDecimal> toBigDecimal = of(BigDecimal::new);
+	public static final ExceptionFun<String, Integer> toInteger = of(Integer::valueOf);
+	
+	@Override
+	public R apply(T t) {
+		return get(t);
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/fun/Fun.java b/com.gx.obe.bind/src/com/gx/obe/bind/fun/Fun.java
new file mode 100644
index 00000000..5aa16b46
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/fun/Fun.java
@@ -0,0 +1,63 @@
+package com.gx.obe.bind.fun;
+
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+
+import com.gx.obe.bind.view.Read;
+import com.gx.obe.bind.view.Write;
+
+public class Fun<T, R> {
+	
+	private Function<T, R> function;
+	
+	private Fun(Function<T, R> function) {
+		this.function = function;
+	}
+	
+	public <V> Fun<T, V> andThen(Function<R, V> after) {
+		return Fun.of(function.andThen(after));
+	}
+	
+	public <V> Fun<V, R> compose(Function<V, T> before) {
+		return Fun.of(function.compose(before));
+	}
+	
+	public Function<T, R> toFun() {
+		return function;
+	}
+	
+	public Supplier<R> toGet(T t) {
+		return () -> function.apply(t);
+	}
+	
+	public Supplier<R> toGet(Supplier<T> supplier) {
+		return () -> function.apply(supplier.get());
+	}
+	
+	public Read<R> toRead(T t) {
+		return () -> function.apply(t);
+	}
+	
+	public Read<R> toRead(Read<T> read) {
+		return () -> function.apply(read.get());
+	}
+	
+	public Consumer<T> toSet(Consumer<R> consumer) {
+		return t -> consumer.accept(function.apply(t));
+	}
+	
+	public Write<T> toWrite(Consumer<R> consumer) {
+		return t -> consumer.accept(function.apply(t));
+	}
+	
+	public Predicate<T> toTest(Predicate<R> predicate) {
+		return t -> predicate.test(function.apply(t));
+	}
+	
+	public static <T, R> Fun<T, R> of(Function<T, R> function) {
+		return new Fun<>(function);
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/promise/Promise.java b/com.gx.obe.bind/src/com/gx/obe/bind/promise/Promise.java
new file mode 100644
index 00000000..58106643
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/promise/Promise.java
@@ -0,0 +1,137 @@
+package com.gx.obe.bind.promise;
+
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+public class Promise<T> {
+	
+	private STATUS status = STATUS.PENDING;
+	
+	private T value;
+	private Exception error;
+	
+	private Consumer<T> onFullFilled = t -> {};
+	private Consumer<Exception> onRejected = e -> {};
+	
+	enum STATUS {
+		PENDING, RESOLVE, REJECT;
+	}
+	
+	public Promise(Fun<T> fun) {
+		Consumer<T> resolve = t -> {
+			this.status = STATUS.RESOLVE;
+			this.value = t;
+			this.onFullFilled.accept(t);
+			synchronized (this) {
+				this.notify();
+			}
+		};
+		Consumer<Exception> reject = e -> {
+			this.status = STATUS.REJECT;
+			this.error = e;
+			this.onRejected.accept(e);
+			synchronized (this) {
+				this.notify();
+			}
+		};
+		try {
+			fun.call(resolve, reject);
+		} catch (Exception e) {
+			reject.accept(e);
+		}
+	}
+	
+	public static <T> Promise<T> thread(Fun<T> fun) {
+		return new Promise<>((resolve, reject) -> {
+			new Thread(() -> {
+				try {
+					fun.call(resolve, reject);
+				} catch (Exception e) {
+					e.printStackTrace();
+					reject.accept(e);
+				}
+			}).start();
+		});
+	}
+	
+	public static <T> Promise<T> empty() {
+		return new Promise<>((resolve, reject) -> {});
+	}
+	
+	public static <T> Promise<T> resolve(T value) {
+		return new Promise<>((resolve, reject) -> resolve.accept(value));
+	}
+	
+	public static <T> Promise<T> reject() {
+		return reject(new RuntimeException("Promise reject error"));
+	}
+	
+	public static <T> Promise<T> reject(Exception err) {
+		return new Promise<>((resolve, reject) -> reject.accept(err));
+	}
+	
+	public static <T, R> Function<T, Promise<R>> resolveFun(Function<T, R> function) {
+		return t -> new Promise<R>((resolve, reject) -> resolve.accept(function.apply(t)));
+	}
+	
+	public <R> Promise<R> then(Function<T, Promise<R>> onFullFilled) {
+		switch (this.status) {
+			case RESOLVE:
+				return onFullFilled.apply(this.value);
+			case REJECT:
+				return new Promise<R>((resolve, reject) -> reject.accept(this.error));
+			default:
+				return new Promise<R>((resolve, reject) -> {
+					this.onFullFilled = t -> onFullFilled.apply(t).then(resolve, reject);
+					this.onRejected = reject;
+				});
+		}
+	}
+	
+	public void then(Consumer<T> onFullFilled, Consumer<Exception> onRejected) {
+		switch (status) {
+			case RESOLVE:
+				if (onFullFilled != null) onFullFilled.accept(value);
+				break;
+			case REJECT:
+				if (onRejected != null) onRejected.accept(error);
+				break;
+			default:
+				if (onFullFilled != null) this.onFullFilled = onFullFilled;
+				if (onRejected != null) this.onRejected = onRejected;
+				break;
+		}
+	}
+	
+	public void thenThrow(Consumer<T> onFullFilled) {
+		then(onFullFilled, e -> {
+			throw new RuntimeException(e.getMessage());
+		});
+	}
+	
+	public T waitOrGet() throws Exception {
+		return waitOrGet(0);
+	}
+	
+	public T waitOrGet(long timeout) throws Exception {
+		switch (status) {
+			case RESOLVE:
+				return value;
+			case REJECT:
+				throw error;
+			default:
+				synchronized (this) {
+					this.wait(timeout);
+				}
+				if (STATUS.PENDING.equals(status)) {
+					throw new RuntimeException();
+				}
+				return waitOrGet(timeout);
+		}
+	}
+	
+	public interface Fun<T> {
+		void call(Consumer<T> resolve, Consumer<Exception> reject);
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/prop/Comp.java b/com.gx.obe.bind/src/com/gx/obe/bind/prop/Comp.java
new file mode 100644
index 00000000..c16be4fd
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/prop/Comp.java
@@ -0,0 +1,34 @@
+package com.gx.obe.bind.prop;
+
+import java.util.Arrays;
+import java.util.Objects;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+import com.gx.obe.bind.view.View;
+import com.gx.obe.bind.view.Write;
+
+public class Comp<T> extends Prop<T> {
+	
+	public Comp(Supplier<T> supplier, String name, View... properties) {
+		super(Objects.requireNonNull(supplier).get());
+		Arrays.stream(Objects.requireNonNull(properties)).forEach(p -> p.addChangeListener(() -> set(supplier.get())));
+	}
+	
+	@Override
+	public Comp<T> as(String name) {
+		super.as(name);
+		return this;
+	}
+	
+	@Override
+	public void bind(Write<T> write) {
+		super.bind(write);
+	}
+	
+	public Comp<T> addSet(Consumer<T> consumer) {
+		super.addChangeListener(() -> consumer.accept(get()));
+		return this;
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/prop/Prop.java b/com.gx.obe.bind/src/com/gx/obe/bind/prop/Prop.java
new file mode 100644
index 00000000..6adab503
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/prop/Prop.java
@@ -0,0 +1,103 @@
+package com.gx.obe.bind.prop;
+
+import java.util.Objects;
+import java.util.UUID;
+import java.util.function.BiPredicate;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
+import com.gx.obe.bind.base.P;
+import com.gx.obe.bind.view.ChangeListener;
+import com.gx.obe.bind.view.MView;
+import com.gx.obe.bind.view.Read;
+import com.gx.obe.bind.view.View;
+import com.gx.obe.bind.view.Write;
+
+public class Prop<T> extends P<T> implements MView<T> {
+	
+	private Lock lock = new Lock();
+	
+	public Prop() {}
+	
+	public Prop(T value) {
+		set(value);
+	}
+	
+	public Prop<T> orElseGet(Supplier<T> other) {
+		super.orElseGet(other);
+		return this;
+	}
+	
+	public Prop<T> orElse(T defaultValue) {
+		super.orElse(defaultValue);
+		return this;
+	}
+	
+	@Override
+	public Prop<T> as(String name) {
+		super.as(name);
+		return this;
+	}
+	
+	@Override
+	public Prop<T> limit(BiPredicate<T, T> predicate) {
+		super.limit(predicate);
+		return this;
+	}
+	
+	public boolean isLock() {
+		return lock.isLock();
+	}
+	
+	public void replace(Function<T, T> function) {
+		set(Objects.requireNonNull(function).apply(get()));
+	}
+	
+	public void changer(Consumer<T> consumer) {
+		Objects.requireNonNull(consumer).accept(get());
+		set(get());
+	}
+	
+	public void bindBidirectional(MView<T> mView) {
+		Objects.requireNonNull(mView);
+		String key = UUID.randomUUID().toString();
+		bind(key, mView);
+		mView.addChangeListener(() -> set(mView.get(), key));
+	}
+	
+	public void bindBidirectional(Write<T> write, Read<T> read, View model) {
+		Objects.requireNonNull(write);
+		Objects.requireNonNull(read);
+		Objects.requireNonNull(model);
+		
+		String key = UUID.randomUUID().toString();
+		bind(key, write);
+		model.addChangeListener(() -> set(read.get(), key));
+	}
+	
+	@Override
+	public void set(T value) {
+		lock.sync(() -> change(value));
+	}
+	
+	private void set(T value, String key) {
+		lock.sync(() -> change(value, key));
+	}
+	
+}
+
+class Lock {
+	private boolean lock = false;
+	
+	public boolean isLock() {
+		return lock;
+	}
+	
+	public void sync(ChangeListener changeListener) {
+		if (lock) return;
+		lock = true;
+		changeListener.change();
+		lock = false;
+	}
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/prop/RProp.java b/com.gx.obe.bind/src/com/gx/obe/bind/prop/RProp.java
new file mode 100644
index 00000000..f0a64f66
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/prop/RProp.java
@@ -0,0 +1,34 @@
+package com.gx.obe.bind.prop;
+
+import java.util.Objects;
+import java.util.function.BiPredicate;
+
+import com.gx.obe.bind.base.P;
+import com.gx.obe.bind.view.RView;
+import com.gx.obe.bind.view.Read;
+import com.gx.obe.bind.view.View;
+
+public class RProp<T> extends P<T> {
+	
+	public void reader(Read<? extends T> read, View model) {
+		Objects.requireNonNull(read);
+		Objects.requireNonNull(model);
+		
+		model.addChangeListener(() -> change(read.get()));
+	}
+	
+	public void reader(RView<? extends T> rView) {
+		reader(rView, rView);
+	}
+	
+	public RProp<T> as(String name) {
+		super.as(name);
+		return this;
+	}
+	
+	public RProp<T> limit(BiPredicate<T, T> predicate) {
+		super.limit(predicate);
+		return this;
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/recursion/RStream.java b/com.gx.obe.bind/src/com/gx/obe/bind/recursion/RStream.java
new file mode 100644
index 00000000..6ca61d1b
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/recursion/RStream.java
@@ -0,0 +1,21 @@
+package com.gx.obe.bind.recursion;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
+
+public interface RStream<T> {
+	
+	void forEach(Consumer<T> action);
+	
+	void forEach(TreeForEach<T> treeForEach);
+	
+	void forEach(BiConsumer<List<Integer>, T> indexConsumer);
+	
+	Optional<T> findAny(Predicate<T> predicate);
+	
+	List<T> filter(Predicate<T> predicate);
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/recursion/Recursions.java b/com.gx.obe.bind/src/com/gx/obe/bind/recursion/Recursions.java
new file mode 100644
index 00000000..a2f61bdf
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/recursion/Recursions.java
@@ -0,0 +1,167 @@
+package com.gx.obe.bind.recursion;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Stream;
+
+public class Recursions<T> {
+	
+	private Function<T, Stream<T>> toStreamFun;
+	
+	public static <T> Recursions<T> array(Function<T, T[]> toArrayFun) {
+		return new Recursions<>(toArrayFun.andThen(t -> Optional.ofNullable(t).map(Stream::of).orElse(null)));
+	}
+	
+	public static <T> Recursions<T> list(Function<T, List<T>> toListFun) {
+		return new Recursions<>(toListFun.andThen(t -> Optional.ofNullable(t).map(List::stream).orElse(null)));
+	}
+	
+	public static <T> Recursions<T> stream(Function<T, Stream<T>> toStreamFun) {
+		return new Recursions<>(toStreamFun);
+	}
+	
+	public Recursions(Function<T, Stream<T>> toStreamFun) {
+		this.toStreamFun = toStreamFun;
+	}
+	
+	public RStream<T> toStream(T obj) {
+		return toStream(Stream.of(obj));
+	}
+	
+	public RStream<T> toStream(T[] array) {
+		return toStream(Stream.of(array));
+	}
+	
+	public RStream<T> toStream(List<T> stream) {
+		return toStream(stream.stream());
+	}
+	
+	public RStream<T> toStream(Stream<T> stream) {
+		return new RStream<T>() {
+			
+			public void forEach(Consumer<T> action) {
+				new ForEachRecursion(action).exe(stream);
+			}
+			
+			public void forEach(TreeForEach<T> treeForEach) {
+				new TreeForEachRecursion(treeForEach).exe(stream);
+			}
+			
+			public void forEach(BiConsumer<List<Integer>, T> indexConsumer) {
+				new IndexForEachRecursion(indexConsumer).exe(stream);
+			}
+			
+			public Optional<T> findAny(Predicate<T> predicate) {
+				Data data = new Data();
+				new AnyMatchRecursion(t -> {
+					boolean test = predicate.test(t);
+					if (test) data.t = t;
+					return test;
+				}).exe(stream);
+				return Optional.ofNullable(data.t);
+			}
+			
+			public List<T> filter(Predicate<T> predicate) {
+				List<T> list = new ArrayList<>();
+				new ForEachRecursion(t -> {
+					if (predicate.test(t)) list.add(t);
+				}).exe(stream);
+				return list;
+			}
+			
+		};
+	}
+	
+	private class AnyMatchRecursion {
+		
+		private Predicate<T> predicate;
+		
+		public AnyMatchRecursion(Predicate<T> predicate) {
+			this.predicate = predicate;
+		}
+		
+		private boolean exe(Stream<T> stream) {
+			return stream.anyMatch(t -> {
+				if (predicate.test(t)) return true;
+				return Optional.ofNullable(t).map(toStreamFun).map(this::exe).orElse(false);
+			});
+		}
+		
+	}
+	
+	private class ForEachRecursion {
+		
+		private Consumer<T> consumer;
+		
+		public ForEachRecursion(Consumer<T> consumer) {
+			this.consumer = consumer;
+		}
+		
+		private void exe(Stream<T> stream) {
+			stream.forEach(t -> {
+				consumer.accept(t);
+				Optional.ofNullable(t).map(toStreamFun).ifPresent(this::exe);
+			});
+		}
+		
+	}
+	
+	private class TreeForEachRecursion {
+		
+		private TreeForEach<T> treeForEach;
+		
+		public TreeForEachRecursion(TreeForEach<T> treeForEach) {
+			this.treeForEach = treeForEach;
+		}
+		
+		private void exe(Stream<T> stream) {
+			recursion(stream.iterator(), true);
+		}
+		
+		private void recursion(Iterator<T> iterator, boolean root) {
+			iterator.forEachRemaining(t -> {
+				Iterator<T> citerator = Optional.of(t).map(toStreamFun).map(Stream::iterator).orElse(null);
+				boolean leaf = citerator == null || !citerator.hasNext();
+				treeForEach.action(root, leaf, t);
+				if (!leaf) recursion(citerator, false);
+			});
+		}
+		
+	}
+	
+	private class IndexForEachRecursion {
+		
+		private BiConsumer<List<Integer>, T> indexConsumer;
+		
+		public IndexForEachRecursion(BiConsumer<List<Integer>, T> indexConsumer) {
+			this.indexConsumer = indexConsumer;
+		}
+		
+		private void exe(Stream<T> stream) {
+			recursion(stream, new ArrayList<>());
+		}
+		
+		private void recursion(Stream<T> stream, List<Integer> pIndex) {
+			AtomicInteger i = new AtomicInteger(1);
+			stream.forEach(t -> {
+				List<Integer> index = new ArrayList<>(pIndex);
+				index.add(i.getAndIncrement());
+				indexConsumer.accept(index, t);
+				Optional.ofNullable(t).map(toStreamFun).ifPresent(s -> recursion(s, index));
+			});
+		}
+		
+	}
+	
+	private class Data {
+		private T t;
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/recursion/TreeForEach.java b/com.gx.obe.bind/src/com/gx/obe/bind/recursion/TreeForEach.java
new file mode 100644
index 00000000..0bb32172
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/recursion/TreeForEach.java
@@ -0,0 +1,7 @@
+package com.gx.obe.bind.recursion;
+
+public interface TreeForEach<T> {
+	
+	void action(boolean root, boolean leaf, T t);
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/rx/RxBind.java b/com.gx.obe.bind/src/com/gx/obe/bind/rx/RxBind.java
new file mode 100644
index 00000000..214767b7
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/rx/RxBind.java
@@ -0,0 +1,80 @@
+package com.gx.obe.bind.rx;
+
+import java.util.Optional;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+public class RxBind<T> {
+	
+	private Supplier<T> supplier = () -> null;
+	private Consumer<Runnable> supplierSync = Runnable::run;
+	private Consumer<Runnable> consumerSync = Runnable::run;
+	private Supplier<Boolean> check = () -> true;
+	private Supplier<T> other = () -> null;
+	private Tangent tangent = Tangent.TEMP;
+	
+	public RxBind(Supplier<T> supplier) {
+		this.supplier = supplier;
+	}
+	
+	public static <T> RxBind<T> run(Supplier<T> supplier) {
+		return new RxBind<T>(supplier);
+	}
+	
+	public RxBind<T> tangent(Tangent tangent) {
+		this.tangent = tangent;
+		return this;
+	}
+	
+	public RxBind<T> supplierSync(Consumer<Runnable> supplierSync) {
+		this.supplierSync = supplierSync;
+		return this;
+	}
+	
+	public RxBind<T> consumerSync(Consumer<Runnable> consumerSync) {
+		this.consumerSync = consumerSync;
+		return this;
+	}
+	
+	public RxBind<T> check(Supplier<Boolean> check) {
+		this.check = check;
+		return this;
+	}
+	
+	public RxBind<T> other(Supplier<T> other) {
+		this.other = other;
+		return this;
+	}
+	
+	public void exe(Consumer<T> consumer) {
+		supplierSync.accept(() -> {
+			Status<T> supplyStatus = supplyStatus();
+			consumerSync.accept(() -> {
+				if (check.get()) return;
+				if (supplyStatus.isErrer()) {
+					tangent.error(supplyStatus.getException());
+				} else {
+					tangent.after();
+					try {
+						consumer.accept(Optional.ofNullable(supplyStatus.getT()).orElseGet(other));
+					} catch (Exception e) {
+						e.printStackTrace();
+					}
+				}
+			});
+		});
+		tangent.before();
+	}
+	
+	public Status<T> supplyStatus() {
+		Status<T> status = new Status<>();
+		try {
+			status.setT(supplier.get());
+		} catch (Exception e) {
+			status.setErrer(true);
+			status.setException(e);
+		}
+		return status;
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/rx/Status.java b/com.gx.obe.bind/src/com/gx/obe/bind/rx/Status.java
new file mode 100644
index 00000000..fc3edefc
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/rx/Status.java
@@ -0,0 +1,35 @@
+package com.gx.obe.bind.rx;
+
+public class Status<T> {
+	
+	private Exception exception;
+	
+	private T t;
+	
+	private boolean errer;
+	
+	public Exception getException() {
+		return exception;
+	}
+	
+	public void setException(Exception exception) {
+		this.exception = exception;
+	}
+	
+	public T getT() {
+		return t;
+	}
+	
+	public void setT(T t) {
+		this.t = t;
+	}
+	
+	public boolean isErrer() {
+		return errer;
+	}
+	
+	public void setErrer(boolean errer) {
+		this.errer = errer;
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/rx/Tangent.java b/com.gx.obe.bind/src/com/gx/obe/bind/rx/Tangent.java
new file mode 100644
index 00000000..f3b05a8b
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/rx/Tangent.java
@@ -0,0 +1,21 @@
+package com.gx.obe.bind.rx;
+
+public interface Tangent {
+	
+	static Tangent TEMP = new Tangent() {
+		public void error(Exception e) {
+			e.printStackTrace();
+		}
+		
+		public void before() {}
+		
+		public void after() {}
+	};
+	
+	void before();
+	
+	void after();
+	
+	void error(Exception e);
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/stream/MapStream.java b/com.gx.obe.bind/src/com/gx/obe/bind/stream/MapStream.java
new file mode 100644
index 00000000..dae1bce7
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/stream/MapStream.java
@@ -0,0 +1,59 @@
+package com.gx.obe.bind.stream;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.BiConsumer;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Stream;
+
+public class MapStream<K, V> {
+	
+	private Map<K, V> map;
+	
+	public MapStream(Map<K, V> map) {
+		this.map = map;
+	}
+	
+	public static <K, V> MapStream<K, V> of(Map<K, V> map) {
+		return new MapStream<>(map);
+	}
+	
+	public <T> MapStream<K, T> valueMap(Function<V, T> function) {
+		Map<K, T> map = new HashMap<>();
+		this.map.forEach((k, v) -> map.put(k, function.apply(v)));
+		return MapStream.of(map);
+	}
+	
+	public <T> void valueMap(Function<V, T> function, Map<K, T> map) {
+		this.map.forEach((k, v) -> map.put(k, function.apply(v)));
+	}
+	
+	public MapStream<K, V> removeValueIsNull() {
+		Map<K, V> map = new HashMap<>();
+		this.map.forEach((k, v) -> {
+			if (v != null) map.put(k, v);
+		});
+		return MapStream.of(map);
+	}
+	public MapStream<K, V> removeValue(Predicate<V> predicate) {
+		Map<K, V> map = new HashMap<>();
+		this.map.forEach((k, v) -> {
+			if (!predicate.test(v)) map.put(k, v);
+		});
+		return MapStream.of(map);
+	}
+	
+	public Stream<K> keyStream(Predicate<V> vPredicate) {
+		return map.entrySet().stream().filter(e -> vPredicate.test(e.getValue())).map(e -> e.getKey());
+	}
+	
+	public Map<K, V> toMap() {
+		return map;
+	}
+	
+	public void forEach(BiConsumer<K, V> action) {
+		map.forEach(action);
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/utils/CollectorUtils.java b/com.gx.obe.bind/src/com/gx/obe/bind/utils/CollectorUtils.java
new file mode 100644
index 00000000..4463c334
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/utils/CollectorUtils.java
@@ -0,0 +1,14 @@
+package com.gx.obe.bind.utils;
+
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collector;
+import java.util.stream.Collectors;
+
+public class CollectorUtils {
+	
+	public static <T, K1, K2> Collector<T, ?, Map<K1, Map<K2, T>>> groupingToMap(Function<? super T, ? extends K1> classifier, Function<? super T, ? extends K2> keyMapper) {
+		return Collectors.groupingBy(classifier, Collectors.toMap(keyMapper, Function.identity()));
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/utils/PropUtils.java b/com.gx.obe.bind/src/com/gx/obe/bind/utils/PropUtils.java
new file mode 100644
index 00000000..a11601e3
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/utils/PropUtils.java
@@ -0,0 +1,20 @@
+package com.gx.obe.bind.utils;
+
+import java.util.function.Function;
+
+import com.gx.obe.bind.prop.Prop;
+
+public class PropUtils {
+	
+	public static <T, R> void bindBidirectional(Prop<T> tProp, Prop<R> rProp, Function<T, R> trFunction, Function<R, T> rtFunction) {
+		tProp.addChangeListener(() -> {
+			if (rProp.isLock()) return;
+			rProp.set(trFunction.apply(tProp.get()));
+		});
+		rProp.addChangeListener(() -> {
+			if (tProp.isLock()) return;
+			tProp.set(rtFunction.apply(rProp.get()));
+		});
+	}
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/view/ChangeListener.java b/com.gx.obe.bind/src/com/gx/obe/bind/view/ChangeListener.java
new file mode 100644
index 00000000..1f5cbcae
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/view/ChangeListener.java
@@ -0,0 +1,15 @@
+package com.gx.obe.bind.view;
+
+public interface ChangeListener {
+	
+	void change();
+	
+	default ChangeListener andThen(ChangeListener changeListener) {
+		return () -> {
+			this.change();
+			changeListener.change();
+		};
+	}
+	
+	static ChangeListener EMPTY = () -> {};
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/view/MView.java b/com.gx.obe.bind/src/com/gx/obe/bind/view/MView.java
new file mode 100644
index 00000000..f4b036fd
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/view/MView.java
@@ -0,0 +1,3 @@
+package com.gx.obe.bind.view;
+
+public interface MView<T> extends RView<T>, Write<T> {}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/view/RView.java b/com.gx.obe.bind/src/com/gx/obe/bind/view/RView.java
new file mode 100644
index 00000000..9c1fbc4b
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/view/RView.java
@@ -0,0 +1,3 @@
+package com.gx.obe.bind.view;
+
+public interface RView<T> extends View, Read<T> {}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/view/Read.java b/com.gx.obe.bind/src/com/gx/obe/bind/view/Read.java
new file mode 100644
index 00000000..ca4ee6ce
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/view/Read.java
@@ -0,0 +1,8 @@
+package com.gx.obe.bind.view;
+
+@FunctionalInterface
+public interface Read<T> {
+	
+	T get();
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/view/View.java b/com.gx.obe.bind/src/com/gx/obe/bind/view/View.java
new file mode 100644
index 00000000..e249f6f5
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/view/View.java
@@ -0,0 +1,8 @@
+package com.gx.obe.bind.view;
+
+@FunctionalInterface
+public interface View {
+	
+	void addChangeListener(ChangeListener changeListener);
+	
+}
diff --git a/com.gx.obe.bind/src/com/gx/obe/bind/view/Write.java b/com.gx.obe.bind/src/com/gx/obe/bind/view/Write.java
new file mode 100644
index 00000000..3fdc89ea
--- /dev/null
+++ b/com.gx.obe.bind/src/com/gx/obe/bind/view/Write.java
@@ -0,0 +1,8 @@
+package com.gx.obe.bind.view;
+
+@FunctionalInterface
+public interface Write<T> {
+	
+	void set(T t);
+	
+}
diff --git a/com.gx.obe.common.file/.settings/org.eclipse.core.resources.prefs b/com.gx.obe.common.file/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..99f26c02
--- /dev/null
+++ b/com.gx.obe.common.file/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/com.gx.obe.common.file/META-INF/MANIFEST.MF b/com.gx.obe.common.file/META-INF/MANIFEST.MF
index bfffb927..321891b8 100644
--- a/com.gx.obe.common.file/META-INF/MANIFEST.MF
+++ b/com.gx.obe.common.file/META-INF/MANIFEST.MF
@@ -16,7 +16,8 @@ Require-Bundle: org.eclipse.ui,
  com.gx.obe.utils,
  com.gx.obe.common.icons,
  com.gx.obe.common.widget,
- com.gx.obe.action;bundle-version="1.0.0"
+ com.gx.obe.action;bundle-version="1.0.0",
+ com.gx.obe.bind;bundle-version="1.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Automatic-Module-Name: com.gx.obe.common.file
 Bundle-ActivationPolicy: lazy
@@ -34,4 +35,5 @@ Export-Package: com.gx.obe.common.file.adapter,
  com.gx.obe.common.file.thread,
  com.gx.obe.common.file.upload,
  com.gx.obe.common.file.upload.infer,
- com.gx.obe.common.file.utils
+ com.gx.obe.common.file.utils,
+ com.gx.obe.common.file.widget
diff --git a/com.gx.obe.common.file/src/com/gx/obe/common/file/utils/BidFileUtils.java b/com.gx.obe.common.file/src/com/gx/obe/common/file/utils/BidFileUtils.java
new file mode 100644
index 00000000..543f9a0a
--- /dev/null
+++ b/com.gx.obe.common.file/src/com/gx/obe/common/file/utils/BidFileUtils.java
@@ -0,0 +1,24 @@
+package com.gx.obe.common.file.utils;
+
+import java.util.Optional;
+
+import com.gx.obe.components.core.Constants;
+import com.gx.obe.util.utils.StringUtils;
+
+public class BidFileUtils {
+
+	/**
+	 * @Description: 获得投标文件文件名
+	 * @author chenxw
+	 * @param fileItem
+	 * @param isEnc
+	 * @return
+	 */
+	public static Optional<String> getBidFileName(String fileId, String fileName) {
+		Optional<String> suffix = Optional.ofNullable(fileId).map(FileUtils::removeFileNameENC).map(FileUtils::getFileNameBack).filter(t -> {
+			return !Constants.ZIP.equals(t);
+		});
+		return Optional.ofNullable(fileName).map(FileUtils::getFileNameFront).map(t -> t.concat(suffix.orElse(""))).filter(StringUtils::isNotEmpty);
+	}
+	
+}
diff --git a/com.gx.obe.common.file/src/com/gx/obe/common/file/utils/FileUtils.java b/com.gx.obe.common.file/src/com/gx/obe/common/file/utils/FileUtils.java
index 585f3035..99a8d792 100644
--- a/com.gx.obe.common.file/src/com/gx/obe/common/file/utils/FileUtils.java
+++ b/com.gx.obe.common.file/src/com/gx/obe/common/file/utils/FileUtils.java
@@ -18,10 +18,14 @@ import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Properties;
+import java.util.function.Function;
 import java.util.regex.Pattern;
 
 import org.apache.log4j.Logger;
 
+import com.gx.obe.components.core.Constants;
+import com.gx.obe.util.utils.StringUtils;
+
 public class FileUtils {
 
 	public FileUtils() {
@@ -981,4 +985,60 @@ public class FileUtils {
 	public static String filterFileName(String fileName){
 		return fileName==null?null:FilePattern.matcher(fileName.trim()).replaceAll("");
 	}
+	
+	public static Function<String, String> funGetSuffix = fileName -> {
+		if (fileName == null) return "";
+		int indexOf = fileName.lastIndexOf(".");
+		if (indexOf == -1) return "";
+		return fileName.substring(indexOf + 1);
+	};
+	/**
+	 * @Description: 去除文件名.enc后缀
+	 * @author chenxw
+	 * @param fileName
+	 * @return
+	 */
+	public static String removeFileNameENC(String fileName) {
+		if (StringUtils.isEmpty(fileName)) {
+			return fileName;
+		}
+		if (fileName.endsWith(Constants.ENC)) {
+			return fileName.substring(0, fileName.lastIndexOf(Constants.ENC));
+		}
+		return fileName;
+	}
+
+	/**
+	 * @Description: 获取文件名后部
+	 * @author chenxw
+	 * @param fileName
+	 * @return
+	 */
+	public static String getFileNameBack(String fileName) {
+		if (StringUtils.isEmpty(fileName)) {
+			return fileName;
+		}
+		int lastIndex = fileName.lastIndexOf(".");
+		if (lastIndex == -1) {
+			return "";
+		}
+		return fileName.substring(lastIndex);
+	}
+	/**
+	 * @Description: 获取文件名前部
+	 * @author chenxw
+	 * @param fileName
+	 * @return
+	 */
+	public static String getFileNameFront(String fileName) {
+		if (StringUtils.isEmpty(fileName)) {
+			return fileName;
+		}
+		int lastIndex = fileName.lastIndexOf(".");
+		if (lastIndex == -1) {
+			return fileName;
+		}
+		return fileName.substring(0, lastIndex);
+	}
+	
 }
diff --git a/com.gx.obe.common.file/src/com/gx/obe/common/file/utils/ParsingXmlUtils.java b/com.gx.obe.common.file/src/com/gx/obe/common/file/utils/ParsingXmlUtils.java
index e54594c7..f7959c50 100644
--- a/com.gx.obe.common.file/src/com/gx/obe/common/file/utils/ParsingXmlUtils.java
+++ b/com.gx.obe.common.file/src/com/gx/obe/common/file/utils/ParsingXmlUtils.java
@@ -4,6 +4,9 @@ import java.io.File;
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.dom4j.Document;
 import org.dom4j.Element;
@@ -40,6 +43,7 @@ import com.gx.obe.util.utils.UuidUtils;
 import com.gx.obe.util.utils.XmlUtils;
 import com.gx.obe.web.entity.AttachmentFile;
 import com.gx.obe.web.entity.Struct;
+import com.gx.obe.web.entity.evaluation.EvaluationContent;
 import com.gx.obe.web.entity.evaluation.EvaluationFactor;
 import com.gx.obe.web.entity.evaluation.EvaluationStep;
 import com.gx.obe.web.entity.price.BidPrice;
@@ -663,10 +667,59 @@ public class ParsingXmlUtils {
 				}
 			}
 		}
-		
+		resolverEvaluationContent(evaluationFactor, element);
 		return evaluationFactor;
 	}
-	
+	/**
+	 * @Description: 解析评审内容
+	 * @author chenxw
+	 * @param evaluationFactor
+	 * @param element 
+	 */
+	private static void resolverEvaluationContent(EvaluationFactor evaluationFactor, Element element) {
+		resolverEvaluationContent(evaluationFactor.getTenderId(), evaluationFactor.getFactorCode(), element.element("evaluationContentList"))
+			.ifPresent(evaluationFactor::setEvaluationContentList);
+	}
+
+	/**
+	 * @Description: 解析评审内容
+	 * @author chenxw
+	 * @param tenderId
+	 * @param factorCode
+	 * @param evaluationContentListElement
+	 * @return
+	 */
+	public static Optional<List<EvaluationContent>> resolverEvaluationContent(String tenderId, String factorCode, Element evaluationContentListElement) {
+		return Optional.ofNullable(evaluationContentListElement).map(t -> t.elements("evaluationContent")).map(l -> {
+			return streamElement(l).map(ParsingXmlUtils::initEvaluationContent).peek(t -> {
+				t.setTenderId(tenderId);
+				t.setFactorCode(factorCode);
+			}).collect(Collectors.toList());
+		});
+	}
+	private static Stream<Element> streamElement(List<?> list) {
+		return list.stream().map(t -> (Element) t);
+	}
+	/**
+	 * @Description: 初始化评审内容
+	 * @author chenxw
+	 * @param evaluationContentElement
+	 * @return
+	 */
+	private static EvaluationContent initEvaluationContent(Element evaluationContentElement) {
+		EvaluationContent evaluationContent = new EvaluationContent();
+		evaluationContent.setId(UuidUtils.getUUID());
+		evaluationContent.setRelChapterType(evaluationContentElement.elementTextTrim("relChapterType"));
+		evaluationContent.setDataCategory(evaluationContentElement.elementTextTrim("dataCategory"));
+		evaluationContent.setDataCode(evaluationContentElement.elementTextTrim("dataCode"));
+		evaluationContent.setEvalRule(evaluationContentElement.elementTextTrim("evalRule"));
+		evaluationContent.setTenderStructName(evaluationContentElement.elementTextTrim("tenderStructName"));
+		evaluationContent.setEvalPointName(evaluationContentElement.elementTextTrim("evalPointName"));
+		try {
+			evaluationContent.setSortNo(Integer.valueOf(evaluationContentElement.elementTextTrim("Order")));
+		} catch (Exception e) {}
+		return evaluationContent;
+	}
 	/**
 	 * @Description: 解析结构化数据
 	 * @author chenxw
diff --git a/com.gx.obe.common.file/src/com/gx/obe/common/file/widget/FileButton.java b/com.gx.obe.common.file/src/com/gx/obe/common/file/widget/FileButton.java
new file mode 100644
index 00000000..0816e5e7
--- /dev/null
+++ b/com.gx.obe.common.file/src/com/gx/obe/common/file/widget/FileButton.java
@@ -0,0 +1,150 @@
+package com.gx.obe.common.file.widget;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.MessageDialog;
+import org.eclipse.swt.core.widgets.EMenu;
+import org.eclipse.swt.core.widgets.EMenu.ClickListener;
+import org.eclipse.swt.core.widgets.ImageButton;
+import org.eclipse.swt.events.MenuDetectEvent;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.bind.call.Callback;
+import com.gx.obe.common.file.utils.FileUtils;
+import com.gx.obe.common.icons.IconsActivator;
+import com.gx.obe.util.utils.RuntimeUtils;
+import com.swtdesigner.ResourceManager;
+import com.swtdesigner.SWTResourceManager;
+
+public class FileButton extends Composite {
+	
+	protected File file;
+	
+	protected ImageButton imageButton;
+	
+	private List<ItemParam> itemParamList = new ArrayList<>();
+	
+	public FileButton(Composite parent, File file) {
+		this(parent, file, Optional.of(file).map(File::getName).get());
+	}
+	
+	/**
+	 * @wbp.parser.constructor
+	 */
+	public FileButton(Composite parent, File file, String fileName) {
+		super(parent, SWT.NONE);
+		
+		this.file = file;
+		GridLayout gridLayout = new GridLayout(1, false);
+		gridLayout.marginHeight = 0;
+		gridLayout.marginWidth = 0;
+		setLayout(gridLayout);
+		
+		imageButton = new ImageButton(this, SWT.BOTTOM | SWT.CENTER | SWT.WRAP);
+		GridData gd_imageButton = new GridData(SWT.CENTER, SWT.FILL, false, true, 1, 1);
+		gd_imageButton.widthHint = 100;
+		imageButton.setLayoutData(gd_imageButton);
+		
+		imageButton.setForeground(SWTResourceManager.getColor(100, 100, 100));
+		imageButton.setFont(SWTResourceManager.getFont("微软雅黑", 9, SWT.NORMAL));
+		
+		imageButton.setActiveBorderColor(SWTResourceManager.getColor(77, 163, 19));
+		imageButton.setActiveForeground(SWTResourceManager.getColor(100, 100, 100));
+		imageButton.setActiveBgColor(SWTResourceManager.getColor(205, 225, 205));
+		
+		imageButton.setGAP(0);
+		imageButton.setAlpha(120);
+		imageButton.setArcWidth(6);
+		
+		imageButton.setText(fileName);
+		imageButton.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, getFileImagePath(fileName)));
+		imageButton.addMouseListener(MouseListener.mouseDoubleClickAdapter(this::openFile));
+		imageButton.addMenuDetectListener(this::menuDetect);
+	}
+	
+	/**
+	 * @Description:  添加菜单项
+	 * @author guoyr
+	 * @param menuItemText
+	 * @param menuItemImage
+	 * @param enabled
+	 * @param callBack
+	 */
+	public void addMenuItem(String menuItemText, Image menuItemImage, boolean enabled, Callback clickListener) {
+		itemParamList.add(new ItemParam(menuItemText, menuItemImage, enabled, clickListener));
+	}
+	
+	private void menuDetect(MenuDetectEvent e) {
+		EMenu menu = new EMenu(getShell());
+		menu.addMenuItem("打开", null, true, new ClickListener() {
+			public void click() {
+				openFile(null);
+			}
+		});
+		for (ItemParam itemParam : itemParamList) {
+			menu.addMenuItem(itemParam.menuItemText, itemParam.menuItemImage, itemParam.enabled, new ClickListener() {
+				public void click() {
+					itemParam.clickListener.call();
+				}
+			});
+		}
+		menu.open();
+	}
+	
+	
+	
+	protected void openFile(MouseEvent e) {
+		if (!file.exists()) {
+			MessageDialog.openShortMessage("文件不存在!");
+			return;
+		}
+		RuntimeUtils.openFIle(file);
+	}
+	
+	/**
+	 * @Description:
+	 * @author mazc
+	 * @param fileName
+	 * @return
+	 */
+	private String getFileImagePath(String fileName) {
+		switch (FileUtils.funGetSuffix.apply(fileName)) {
+			case "pdf": return "icons/pdf_64.png";
+			case "xml": return "icons/xml_64.png";
+			case "doc": case "docx": return "icons/word_64.png";
+			case "xls": case "xlsx": return "icons/excel_64.png";
+			case "png": case "bmp": case "gif": case "psd": case "jpg": case "jpeg": return "icons/image_64.png";
+			default: return "icons/unknown_64.png";
+		}
+	}
+	
+	public File getFile() {
+		return file;
+	}
+
+	static class ItemParam {
+		
+		String menuItemText;
+		Image menuItemImage;
+		boolean enabled;
+		Callback clickListener;
+		
+		public ItemParam(String menuItemText, Image menuItemImage, boolean enabled, Callback clickListener) {
+			this.menuItemText = menuItemText;
+			this.menuItemImage = menuItemImage;
+			this.enabled = enabled;
+			this.clickListener = clickListener;
+		}
+		
+	}
+	
+}
diff --git a/com.gx.obe.common.widget/.settings/org.eclipse.core.resources.prefs b/com.gx.obe.common.widget/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..99f26c02
--- /dev/null
+++ b/com.gx.obe.common.widget/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/com.gx.obe.common.widget/META-INF/MANIFEST.MF b/com.gx.obe.common.widget/META-INF/MANIFEST.MF
index 1efd367c..8f9806ed 100644
--- a/com.gx.obe.common.widget/META-INF/MANIFEST.MF
+++ b/com.gx.obe.common.widget/META-INF/MANIFEST.MF
@@ -13,7 +13,8 @@ Require-Bundle: org.eclipse.ui,
  com.gx.obe.common.icons;bundle-version="1.0.0",
  com.gx.obe.business,
  com.gx.obe.lib;bundle-version="1.0.0",
- com.gx.obe.utils;bundle-version="1.0.0"
+ com.gx.obe.utils;bundle-version="1.0.0",
+ com.gx.obe.component;bundle-version="1.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Automatic-Module-Name: com.gx.obe.common.widget
 Bundle-ActivationPolicy: lazy
@@ -24,5 +25,6 @@ Export-Package: com.gx.obe.common.widget,
  com.gx.obe.common.widget.inter,
  com.gx.obe.common.widget.listener,
  com.gx.obe.common.widget.shell,
+ com.gx.obe.common.widget.text,
  com.gx.obe.common.widget.thread,
  com.gx.obe.common.widget.utils
diff --git a/com.gx.obe.common.widget/src/com/gx/obe/common/widget/button/RectangleRadioButton.java b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/button/RectangleRadioButton.java
new file mode 100644
index 00000000..46f4f86d
--- /dev/null
+++ b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/button/RectangleRadioButton.java
@@ -0,0 +1,38 @@
+package com.gx.obe.common.widget.button;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.widgets.ImageButton;
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.ColorConstants;
+import com.gx.obe.component.handler.ISelection;
+import com.swtdesigner.SWTResourceManager;
+
+
+public class RectangleRadioButton extends ImageButton implements ISelection {
+
+	public RectangleRadioButton(Composite parent, int style) {
+		super(parent, style | SWT.CENTER);
+		this.setRightMargin(10);
+		this.setLeftMargin(10);
+		this.setTopMargin(5);
+		this.setBottomMargin(5);
+		this.setRightMargin(10);
+		this.setFont(SWTResourceManager.getFont("微软雅黑", 10, SWT.NORMAL));
+		
+		this.setForeground(ColorConstants.NOTE_TIPS_COLOR);
+		this.setBackgroundColor(SWTResourceManager.getColor(245, 245, 245));
+		this.setForeground(ColorConstants.NOTE_TIPS_COLOR);
+		this.setBackgroundColor(SWTResourceManager.getColor(245, 245, 245));
+		
+		this.setActiveForeground(ColorConstants.SKIN_ACTIVE_FOREGROUND);
+		this.setActiveBackgroundColor(ColorConstants.SKIN_ACTIVE_BG);// 橙色
+		
+		this.setSelectionForeground(ColorConstants.SKIN_SELECTOIN_FOREGROUND);
+		this.setSelectionBgColor(ColorConstants.SKIN_BG);// 蓝色
+//		this.setArcWidth(90);
+		
+//		this.setImage(ResourceManager.getPluginImage(SWTCoreActivator.PLUGIN_ID, "icons/evaluaton_step/default.png"), 16, 16);
+	}
+
+}
diff --git a/com.gx.obe.common.widget/src/com/gx/obe/common/widget/dialog/ProgressMessageTangent.java b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/dialog/ProgressMessageTangent.java
new file mode 100644
index 00000000..dbff48c7
--- /dev/null
+++ b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/dialog/ProgressMessageTangent.java
@@ -0,0 +1,33 @@
+package com.gx.obe.common.widget.dialog;
+
+import org.eclipse.swt.widgets.Shell;
+
+import com.gx.obe.common.widget.rt.Tangent;
+import com.gx.obe.common.widget.shell.ProgressMessageDialog;
+
+public class ProgressMessageTangent implements Tangent {
+	
+	private ProgressMessageDialog dialog;
+	
+	public ProgressMessageTangent(Shell parentShell, String title) {
+		this.dialog = new ProgressMessageDialog(parentShell, false, -1, null);
+		this.dialog.setTitle(title);
+	}
+	
+	@Override
+	public void before() {
+		dialog.open();
+	}
+	
+	@Override
+	public void after() {
+		dialog.finish(dialog.getErrorMessagesSize() == 0);
+	}
+	
+	@Override
+	public void error(Exception e) {
+		dialog.message(e.getMessage(), -1);
+		dialog.finish(false);
+	}
+	
+}
diff --git a/com.gx.obe.common.widget/src/com/gx/obe/common/widget/listener/ProgressMessageAdapter.java b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/listener/ProgressMessageAdapter.java
index c6861264..859b7ea3 100644
--- a/com.gx.obe.common.widget/src/com/gx/obe/common/widget/listener/ProgressMessageAdapter.java
+++ b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/listener/ProgressMessageAdapter.java
@@ -9,5 +9,11 @@ public class ProgressMessageAdapter implements ProgressMessageListener {
 	public void setMaximumProgress(int maximumProgress) {}
 	
 	public void finish(boolean flag) {}
+
+	@Override
+	public int getErrorMessagesSize() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
 	
 }
\ No newline at end of file
diff --git a/com.gx.obe.common.widget/src/com/gx/obe/common/widget/listener/ProgressMessageListener.java b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/listener/ProgressMessageListener.java
index 60d4188c..23a50fe6 100644
--- a/com.gx.obe.common.widget/src/com/gx/obe/common/widget/listener/ProgressMessageListener.java
+++ b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/listener/ProgressMessageListener.java
@@ -7,6 +7,9 @@ public interface ProgressMessageListener {
 		public void message(String message, int flag) {}
 		public void finish(boolean flag) {}
 		public void addProgress(int addProgress) {}
+		public int getErrorMessagesSize() {
+			return 0;
+		}
 	};
 	
 	public void message(String message, int flag);
@@ -32,4 +35,10 @@ public interface ProgressMessageListener {
 	 * @param failCount
 	 */
 	public void finish(boolean flag);
+	
+	/**
+	 * 获取错误信息
+	 * @return
+	 */
+	public abstract int getErrorMessagesSize();
 }
\ No newline at end of file
diff --git a/com.gx.obe.common.widget/src/com/gx/obe/common/widget/rt/Tangent.java b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/rt/Tangent.java
new file mode 100644
index 00000000..837aaae9
--- /dev/null
+++ b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/rt/Tangent.java
@@ -0,0 +1,21 @@
+package com.gx.obe.common.widget.rt;
+
+public interface Tangent {
+	
+	static Tangent TEMP = new Tangent() {
+		public void error(Exception e) {
+			e.printStackTrace();
+		}
+		
+		public void before() {}
+		
+		public void after() {}
+	};
+	
+	void before();
+	
+	void after();
+	
+	void error(Exception e);
+	
+}
diff --git a/com.gx.obe.common.widget/src/com/gx/obe/common/widget/shell/ProgressMessageDialog.java b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/shell/ProgressMessageDialog.java
index 7516d21e..104eb74e 100644
--- a/com.gx.obe.common.widget/src/com/gx/obe/common/widget/shell/ProgressMessageDialog.java
+++ b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/shell/ProgressMessageDialog.java
@@ -537,6 +537,12 @@ public class ProgressMessageDialog extends Shell implements ProgressMessageListe
 		return finishFlag;
 	}
 
+	@Override
+	public int getErrorMessagesSize() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
 	
 }
 
diff --git a/com.gx.obe.common.widget/src/com/gx/obe/common/widget/text/EvalFactorText.java b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/text/EvalFactorText.java
new file mode 100644
index 00000000..c1e9c57f
--- /dev/null
+++ b/com.gx.obe.common.widget/src/com/gx/obe/common/widget/text/EvalFactorText.java
@@ -0,0 +1,52 @@
+package com.gx.obe.common.widget.text;
+
+import java.text.NumberFormat;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.component.text.FStyledText;
+import com.gx.obe.components.core.enumeration.EvaluationFactorEnum;
+import com.gx.obe.message.Messages;
+import com.gx.obe.util.utils.StringUtils;
+import com.gx.obe.web.entity.evaluation.EvaluationFactor;
+import com.swtdesigner.SWTResourceManager;
+
+public class EvalFactorText extends FStyledText {
+	
+	protected EvaluationFactor curFactor;
+	
+	public EvalFactorText(Composite parent) {
+		super(parent);
+	}
+	
+	public void refresh(EvaluationFactor curFactor) {
+		this.curFactor = curFactor;
+		clear();
+		if (curFactor != null) initItem();
+		refresh();
+	}
+	
+	protected void initItem() {
+		addEvalFactor();
+		addScoreRange();
+		addEvalExplain();
+	}
+	
+	protected void addEvalFactor() {
+		add(Messages.EvalFactor + ":", curFactor.getFactorName(), SWTResourceManager.getColor(20, 20, 20), SWT.NORMAL);
+	}
+	
+	protected void addScoreRange() {
+		if (EvaluationFactorEnum.AUDIT_COMPLIANCE.equals(curFactor.getAuditType())) return;
+		String factorMinScore = NumberFormat.getInstance().format(curFactor.getFactorMinScore());
+		String factorMaxScore = NumberFormat.getInstance().format(curFactor.getFactorMaxScore());
+		add(Messages.ScoreRange + ":", "[" + factorMinScore + "-" + factorMaxScore + Messages.Points + "]", SWTResourceManager.getColor(77, 163, 19), SWT.BOLD);
+	}
+	
+	protected void addEvalExplain() {
+		if (StringUtils.isEmpty(curFactor.getMemo())) return;
+		addWrap(Messages.EvalExplain + ":", curFactor.getMemo(), SWTResourceManager.getColor(100, 100, 100), SWT.NORMAL);
+	}
+	
+}
diff --git a/com.gx.obe.component/.classpath b/com.gx.obe.component/.classpath
new file mode 100644
index 00000000..fd421dbc
--- /dev/null
+++ b/com.gx.obe.component/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="lib" path="/org.eclipse.swt.core/lib/de.kupzog.KTable.jar"/>
+	<classpathentry kind="lib" path="/org.eclipse.swt.core/lib/org.eclipse.nebula.widgets.grid.jar"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/com.gx.obe.component/.gitignore b/com.gx.obe.component/.gitignore
new file mode 100644
index 00000000..ae3c1726
--- /dev/null
+++ b/com.gx.obe.component/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/com.gx.obe.component/.project b/com.gx.obe.component/.project
new file mode 100644
index 00000000..5762f292
--- /dev/null
+++ b/com.gx.obe.component/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>com.gx.obe.component</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>
diff --git a/com.gx.obe.component/.settings/org.eclipse.core.resources.prefs b/com.gx.obe.component/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..99f26c02
--- /dev/null
+++ b/com.gx.obe.component/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/com.gx.obe.component/.settings/org.eclipse.jdt.core.prefs b/com.gx.obe.component/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..0c68a61d
--- /dev/null
+++ b/com.gx.obe.component/.settings/org.eclipse.jdt.core.prefs
@@ -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
diff --git a/com.gx.obe.component/META-INF/MANIFEST.MF b/com.gx.obe.component/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..871ab47c
--- /dev/null
+++ b/com.gx.obe.component/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Component
+Bundle-SymbolicName: com.gx.obe.component
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: com.gx.obe.component.Activator
+Bundle-Vendor: GX
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.swt.core,
+ com.gx.obe.bind,
+ com.gx.obe.utils,
+ com.gx.obe.components.core
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Automatic-Module-Name: com.gx.obe.component
+Bundle-ActivationPolicy: lazy
+Export-Package: com.gx.obe.component.comparison,
+ com.gx.obe.component.form,
+ com.gx.obe.component.grid,
+ com.gx.obe.component.handler,
+ com.gx.obe.component.listener,
+ com.gx.obe.component.menu,
+ com.gx.obe.component.rx,
+ com.gx.obe.component.tabfolder,
+ com.gx.obe.component.table,
+ com.gx.obe.component.text,
+ com.gx.obe.component.tree,
+ com.gx.obe.component.utils,
+ com.gx.obe.component.verify
diff --git a/com.gx.obe.component/build.properties b/com.gx.obe.component/build.properties
new file mode 100644
index 00000000..5f4af4c1
--- /dev/null
+++ b/com.gx.obe.component/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
+javacDefaultEncoding.. = UTF-8
\ No newline at end of file
diff --git a/com.gx.obe.component/src/com/gx/obe/component/Activator.java b/com.gx.obe.component/src/com/gx/obe/component/Activator.java
new file mode 100644
index 00000000..5f7e674f
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/Activator.java
@@ -0,0 +1,50 @@
+package com.gx.obe.component;
+
+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.gx.obe.component"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	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;
+	}
+
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/comparison/Column.java b/com.gx.obe.component/src/com/gx/obe/component/comparison/Column.java
new file mode 100644
index 00000000..b56d4e54
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/comparison/Column.java
@@ -0,0 +1,23 @@
+package com.gx.obe.component.comparison;
+
+public class Column {
+	
+	private String id;
+	
+	private String name;
+	
+	public Column(String id, String name) {
+		super();
+		this.id = id;
+		this.name = name;
+	}
+	
+	public String getId() {
+		return id;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/comparison/ComparisonData.java b/com.gx.obe.component/src/com/gx/obe/component/comparison/ComparisonData.java
new file mode 100644
index 00000000..8479879f
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/comparison/ComparisonData.java
@@ -0,0 +1,68 @@
+package com.gx.obe.component.comparison;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gx.obe.util.utils.Keys;
+
+public class ComparisonData {
+	
+	private List<Column> headColList = new ArrayList<>();
+	private List<Column> titleColList = new ArrayList<>();
+	private List<Column> itemColList = new ArrayList<>();
+	private List<String> rowList = new ArrayList<>();
+	
+	private Map<Keys, String> headContentMap = new HashMap<>();
+	private Map<Keys, String> comparisonContentMap = new HashMap<>();
+	
+	public boolean addHeadCol(Column col) {
+		return headColList.add(col);
+	}
+	
+	public boolean addTitleCol(Column col) {
+		return titleColList.add(col);
+	}
+	
+	public boolean addItemCol(Column col) {
+		return itemColList.add(col);
+	}
+	
+	public boolean addRow(String row) {
+		return rowList.add(row);
+	}
+	
+	public String putHeadContent(String rowId, String headId, String value) {
+		return headContentMap.put(Keys.of(rowId, headId), value);
+	}
+	
+	public String putComparisonContent(String rowId, String titleId, String itemId, String value) {
+		return comparisonContentMap.put(Keys.of(rowId, titleId, itemId), value);
+	}
+	
+	public List<Column> getHeadColList() {
+		return headColList;
+	}
+	
+	public List<Column> getTitleColList() {
+		return titleColList;
+	}
+	
+	public List<Column> getItemColList() {
+		return itemColList;
+	}
+	
+	public List<String> getRowList() {
+		return rowList;
+	}
+	
+	public Map<Keys, String> getHeadContentMap() {
+		return headContentMap;
+	}
+	
+	public Map<Keys, String> getComparisonContentMap() {
+		return comparisonContentMap;
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/comparison/ComparisonTable.java b/com.gx.obe.component/src/com/gx/obe/component/comparison/ComparisonTable.java
new file mode 100644
index 00000000..8687e2f1
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/comparison/ComparisonTable.java
@@ -0,0 +1,124 @@
+package com.gx.obe.component.comparison;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.stream.IntStream;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.util.utils.Keys;
+
+import de.kupzog.ktable.KTable;
+import de.kupzog.ktable.KTableCellRenderer;
+import de.kupzog.ktable.SWTX;
+import de.kupzog.ktable.model.CommonKtableCModel;
+import de.kupzog.ktable.renderers.FixedWrapCellRenderer;
+import de.kupzog.ktable.renderers.TextWrapCellRenderer;
+
+public class ComparisonTable extends KTable {
+	
+	/**
+	 * @Description: 换行文本渲染
+	 */
+	private static final FixedWrapCellRenderer FIXED_RENDERER = new FixedWrapCellRenderer();
+	/**
+	 * @Description: 换行文本渲染
+	 */
+	private static final TextWrapCellRenderer TEXT_RENDERER = new TextWrapCellRenderer();
+	
+	/**
+	 * @Description: 固定行数
+	 */
+	private static final int HEAD_ROW = 2;
+	
+	private final CommonKtableCModel model;
+	
+	private final List<Column> headColList;
+	private final List<Column> titleColList;
+	private final List<Column> itemColList;
+	private final List<String> rowList;
+	
+	private final Map<Keys, String> headContentMap;
+	private final Map<Keys, String> comparisonContentMap;
+	
+	public ComparisonTable(Composite parent, ComparisonData comparisonData) {
+		super(parent, SWTX.AUTO_SCROLL | SWT.FULL_SELECTION | SWTX.EDIT_ON_KEY | SWTX.FILL_WITH_LASTCOL);
+		
+		comparisonData = Optional.ofNullable(comparisonData).orElseGet(ComparisonData::new);
+		
+		this.headColList = comparisonData.getHeadColList();
+		this.titleColList = comparisonData.getTitleColList();
+		this.itemColList = comparisonData.getItemColList();
+		this.rowList = comparisonData.getRowList();
+		
+		this.headContentMap = comparisonData.getHeadContentMap();
+		this.comparisonContentMap = comparisonData.getComparisonContentMap();
+		
+		this.model = new CommonKtableCModel(this, HEAD_ROW, headColList.size(), this.rowList.size(), titleColList.size() * itemColList.size());
+		this.setModel(model);
+		
+		IntStream.range(0, headColList.size()).forEach(i -> model.addRowSpan(0, i, HEAD_ROW));
+		IntStream.range(0, titleColList.size()).map(i -> i * itemColList.size()).map(i -> i + headColList.size()).forEach(i -> model.addColSpan(0, i, itemColList.size()));
+		
+		IntStream.range(0, titleColList.size() * itemColList.size( )+ headColList.size()).forEach(i -> model.setColumnWidth(i, 100));
+		
+		this.model.setRowHeightRender($ -> 30);
+//		this.model.setCellBackgroundRender(($, $$) -> SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		
+		this.model.setCellContentRender(this::receiveContent);
+		this.model.setCellRender(this::receiveCellRender);
+		this.model.setCellAlignmentRender(this::receiveCellAlignment);
+	}
+	
+	/**
+	 * @Description: 加载内容
+	 * @author chenxw
+	 * @param row
+	 * @param col
+	 * @return
+	 */
+	private String receiveContent(int row, int col) {
+		if (col < headColList.size()) {
+			if (row == 0) return Optional.of(headColList.get(col)).map(Column::getName).orElse("");
+			if (row == 1) return "";
+			return Optional.of(Keys.of(rowList.get(row - 2), headColList.get(col).getId())).map(headContentMap::get).orElse("");
+		}
+		col -= headColList.size();
+		int itemSize = itemColList.size();
+		if (row == 0) return Optional.of(titleColList.get(col / itemSize)).map(Column::getName).orElse("");
+		if (row == 1) return Optional.of(itemColList.get(col % itemSize)).map(Column::getName).orElse("");
+		try {
+			return Optional.of(Keys.of(rowList.get(row - 2), titleColList.get(col / itemSize).getId(), itemColList.get(col % itemSize).getId())).map(comparisonContentMap::get).orElse("");
+		} catch (Exception e) {
+			return "";
+		}
+	}
+	
+	/**
+	 * @Description: 加载渲染器
+	 * @author chenxw
+	 * @param row
+	 * @param col
+	 * @return
+	 */
+	private KTableCellRenderer receiveCellRender(int row, int col) {
+		if (this.model.isFixedCell(col, row)) {
+			return FIXED_RENDERER;
+		}
+		return TEXT_RENDERER;
+	}
+	
+	/**
+	 * @Description: 加载单元格对齐方式
+	 * @author chenxw
+	 * @param row
+	 * @param col
+	 * @return
+	 */
+	private int receiveCellAlignment(int row, int col) {
+		return SWTX.ALIGN_VERTICAL_CENTER | SWTX.ALIGN_HORIZONTAL_CENTER;
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/form/FForm.java b/com.gx.obe.component/src/com/gx/obe/component/form/FForm.java
new file mode 100644
index 00000000..2561ec91
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/form/FForm.java
@@ -0,0 +1,134 @@
+package com.gx.obe.component.form;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+public class FForm<T> extends Composite {
+	
+	private final IForm<T> iForm;
+	
+	private final List<Consumer<T>> consumerList = new ArrayList<>();
+
+	private int numColumns;
+	
+	public FForm(Composite parent, int numColumns) {
+		super(parent, SWT.NONE);
+		this.numColumns = numColumns;
+		
+		setBackground(SWTResourceManager.getColor(215, 215, 215));
+		setBackgroundMode(SWT.INHERIT_FORCE);
+		GridLayout gridLayout = new GridLayout(numColumns * 2, false);
+		gridLayout.verticalSpacing = 1;
+		gridLayout.horizontalSpacing = 1;
+		gridLayout.marginHeight = 1;
+		gridLayout.marginWidth = 1;
+		setLayout(gridLayout);
+		
+		iForm = new IForm<T>() {
+			
+			@Override
+			public void addNull() {
+				CLabel lblNewLabel = new CLabel(FForm.this, SWT.RIGHT);
+				lblNewLabel.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+				GridData gd_lblNewLabel = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+				gd_lblNewLabel.heightHint = 30;
+				gd_lblNewLabel.widthHint = 100;
+				lblNewLabel.setLayoutData(gd_lblNewLabel);
+				
+				CLabel lblNewLabel_1 = new CLabel(FForm.this, SWT.NONE);
+				lblNewLabel_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+				GridData gd_lblNewLabel_1 = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+				gd_lblNewLabel_1.heightHint = 30;
+				gd_lblNewLabel_1.widthHint = 200;
+				lblNewLabel_1.setLayoutData(gd_lblNewLabel_1);
+			}
+			
+			public void add(String title, Function<T, String> getValueFun) {
+				CLabel lblNewLabel = new CLabel(FForm.this, SWT.RIGHT);
+				lblNewLabel.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+				GridData gd_lblNewLabel = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+				gd_lblNewLabel.heightHint = 30;
+				gd_lblNewLabel.widthHint = 100;
+				lblNewLabel.setLayoutData(gd_lblNewLabel);
+				lblNewLabel.setText(title);
+				
+				CLabel lblNewLabel_1 = new CLabel(FForm.this, SWT.NONE);
+				lblNewLabel_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+				GridData gd_lblNewLabel_1 = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+				gd_lblNewLabel_1.heightHint = 30;
+				gd_lblNewLabel_1.widthHint = 200;
+				lblNewLabel_1.setLayoutData(gd_lblNewLabel_1);
+				consumerList.add(t -> lblNewLabel_1.setText(Optional.ofNullable(t).map(getValueFun).orElse("")));
+			}
+			
+			public void addLong(String title, Function<T, String> getValueFun) {
+				CLabel lblNewLabel = new CLabel(FForm.this, SWT.RIGHT);
+				lblNewLabel.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+				GridData gd_lblNewLabel = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
+				gd_lblNewLabel.heightHint = 30;
+				lblNewLabel.setLayoutData(gd_lblNewLabel);
+				lblNewLabel.setText(title);
+				
+				CLabel lblNewLabel_1 = new CLabel(FForm.this, SWT.NONE);
+				lblNewLabel_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+				GridData gd_lblNewLabel_1 = new GridData(SWT.FILL, SWT.CENTER, true, false, numColumns * 2 - 1, 1);
+				gd_lblNewLabel_1.heightHint = 30;
+				lblNewLabel_1.setLayoutData(gd_lblNewLabel_1);
+				consumerList.add(t -> lblNewLabel_1.setText(Optional.ofNullable(t).map(getValueFun).orElse("")));
+			}
+			
+			public void addBig(String title, Function<T, String> getValueFun, int height) {
+				CLabel lblNewLabel = new CLabel(FForm.this, SWT.RIGHT);
+				lblNewLabel.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+				GridData gd_lblNewLabel = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
+				gd_lblNewLabel.heightHint = height;
+				lblNewLabel.setLayoutData(gd_lblNewLabel);
+				lblNewLabel.setText(title);
+				
+				Composite composite = new Composite(FForm.this, SWT.NONE);
+				composite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+				GridData gd_composite = new GridData(SWT.FILL, SWT.FILL, true, false, numColumns * 2 - 1, 1);
+				gd_composite.heightHint = height;
+				composite.setLayoutData(gd_composite);
+				GridLayout gl_composite = new GridLayout(1, false);
+				gl_composite.marginWidth = 1;
+				composite.setLayout(gl_composite);
+				
+				Text lblNewLabel_1 = new Text(composite, SWT.WRAP | SWT.V_SCROLL);
+				lblNewLabel_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+				lblNewLabel_1.setEditable(false);
+				consumerList.add(t -> lblNewLabel_1.setText(Optional.ofNullable(t).map(getValueFun).orElse("")));
+			}
+
+		};
+		
+	}
+	
+	public void init(Consumer<IForm<T>> consumer) {
+		consumer.accept(iForm);	
+		Composite composite_1 = new Composite(this, SWT.NONE);
+		GridData gd_lblNewLabel = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
+		gd_lblNewLabel.heightHint = 0;
+		composite_1.setLayoutData(gd_lblNewLabel);
+		composite_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, numColumns * 2, 1));
+	}
+	
+	public void refresh(T t) {
+		consumerList.forEach(c -> c.accept(t));
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/form/IForm.java b/com.gx.obe.component/src/com/gx/obe/component/form/IForm.java
new file mode 100644
index 00000000..cf321764
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/form/IForm.java
@@ -0,0 +1,19 @@
+package com.gx.obe.component.form;
+
+import java.util.function.Function;
+
+public interface IForm<T> {
+	
+	void addNull();
+	
+	void add(String title, Function<T, String> getValueFun);
+	
+	void addLong(String title, Function<T, String> getValueFun);
+	
+	void addBig(String title, Function<T, String> getValueFun, int height);
+	
+	default void addBig(String title, Function<T, String> getValueFun) {
+		addBig(title, getValueFun, 95);
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.component/src/com/gx/obe/component/grid/FGrid.java b/com.gx.obe.component/src/com/gx/obe/component/grid/FGrid.java
new file mode 100644
index 00000000..ebcde67c
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/grid/FGrid.java
@@ -0,0 +1,92 @@
+package com.gx.obe.component.grid;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+
+import org.eclipse.nebula.widgets.grid.Grid;
+import org.eclipse.nebula.widgets.grid.GridColumn;
+import org.eclipse.nebula.widgets.grid.GridItem;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.bind.view.ChangeListener;
+import com.gx.obe.bind.view.RView;
+
+public class FGrid<T> extends Grid implements RView<T> {
+	
+	private final List<Column<T>> columnList = new ArrayList<>();
+	
+	private final List<ChangeListener> changeListeners = new ArrayList<>();
+	
+	private T t;
+	
+	@SuppressWarnings("unchecked")
+	public FGrid(Composite parent) {
+		super(parent, SWT.H_SCROLL | SWT.V_SCROLL);
+		this.setHeaderVisible(true);
+		this.setItemHeight(30);
+		this.addSelectionListener(org.eclipse.swt.events.SelectionListener.widgetSelectedAdapter(e -> {
+			GridItem gridItem = (GridItem) e.item;
+			t = (T) gridItem.getData();
+			changeListeners.forEach(ChangeListener::change);
+		}));
+	}
+	
+	public GridColumn addIndexColumn(String name) {
+		columnList.add(new IndexColumn<>());
+		GridColumn gridColumn = new GridColumn(this, SWT.CENTER);
+		gridColumn.setText(name);
+		return gridColumn;
+	}
+	
+	public GridColumn addColumn(String name, Function<T, String> function, int style) {
+		columnList.add(new Column<>(function));
+		GridColumn gridColumn = new GridColumn(this, style);
+		gridColumn.setText(name);
+		return gridColumn;
+	}
+	
+	public void refresh(List<T> tList) {
+		this.removeAll();
+		if (tList != null) for (int i = 0; i < tList.size(); i++) {
+			T t = tList.get(i);
+			GridItem gridItem = new GridItem(this, SWT.NONE);
+			gridItem.setData(t);
+			for (int j = 0; j < columnList.size(); j++) {
+				Column<T> column = columnList.get(j);
+				if (column instanceof IndexColumn) {
+					gridItem.setText(j, i + 1 + "");
+				} else {
+					gridItem.setText(j, Optional.ofNullable(column.function.apply(t)).orElse(""));
+				}
+			}
+		}
+	}
+	
+	private static class Column<T> {
+		private Function<T, String> function;
+		
+		private Column(Function<T, String> function) {
+			this.function = function;
+		}
+	}
+	
+	private static class IndexColumn<T> extends Column<T> {
+		private IndexColumn() {
+			super(null);
+		}
+	}
+	
+	@Override
+	public void addChangeListener(ChangeListener changeListener) {
+		this.changeListeners.add(changeListener);
+	}
+	
+	@Override
+	public T get() {
+		return t;
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/handler/ISelection.java b/com.gx.obe.component/src/com/gx/obe/component/handler/ISelection.java
new file mode 100644
index 00000000..31e951ef
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/handler/ISelection.java
@@ -0,0 +1,22 @@
+package com.gx.obe.component.handler;
+
+import org.eclipse.swt.events.MouseListener;
+
+public interface ISelection {
+	
+	ISelection selection = new ISelection() {
+		
+		public void setText(String text) {}
+		
+		public void setSelection(boolean selection) {}
+		
+		public void addMouseListener(MouseListener mouseUpAdapter) {}
+	};
+	
+	void setText(String text);
+	
+	void addMouseListener(MouseListener mouseUpAdapter);
+	
+	void setSelection(boolean selection);
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/handler/RaidoHandler.java b/com.gx.obe.component/src/com/gx/obe/component/handler/RaidoHandler.java
new file mode 100644
index 00000000..560ad310
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/handler/RaidoHandler.java
@@ -0,0 +1,74 @@
+package com.gx.obe.component.handler;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.bind.view.ChangeListener;
+import com.gx.obe.bind.view.MView;
+import com.gx.obe.component.utils.CompositeUtils;
+
+public class RaidoHandler<T extends ISelection, R> implements MView<R> {
+	
+	private ISelection tab = ISelection.selection;
+	
+	private Composite composite;
+	private Function<Composite, T> iSelectionFunction;
+	
+	private Prop<R> prop = new Prop<>();
+	
+	private Map<R, T> map = new HashMap<>();
+	
+	public RaidoHandler(Composite composite, Function<Composite, T> iSelectionFunction) {
+		this.composite = composite;
+		this.iSelectionFunction = iSelectionFunction;
+	}
+	
+	public RaidoHandler<T, R> start() {
+		CompositeUtils.disposeChildren(composite);
+		return this;
+	}
+	
+	public RaidoHandler<T, R> hand(R r, String text) {
+		return hand(r, t -> t.setText(text));
+	}
+	
+	public RaidoHandler<T, R> hand(R r, Consumer<T> setConsumer) {
+		T t = iSelectionFunction.apply(composite);
+		setConsumer.accept(t);
+		t.addMouseListener(MouseListener.mouseUpAdapter($ -> prop.set(r)));
+		map.put(r, t);
+		return this;
+	}
+	
+	public void end() {
+		prop.bind(r -> {
+			tab.setSelection(false);
+			tab = map.get(r);
+			tab.setSelection(true);
+		});
+		composite.layout();
+		composite.getParent().layout();
+	}
+	
+	@Override
+	public void addChangeListener(ChangeListener changeListener) {
+		prop.addChangeListener(changeListener);
+	}
+	
+	@Override
+	public R get() {
+		return prop.get();
+	}
+	
+	@Override
+	public void set(R r) {
+		prop.set(r);
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/handler/TabHandler.java b/com.gx.obe.component/src/com/gx/obe/component/handler/TabHandler.java
new file mode 100644
index 00000000..897e2bc8
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/handler/TabHandler.java
@@ -0,0 +1,74 @@
+package com.gx.obe.component.handler;
+
+import java.util.List;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.bind.call.Callback;
+import com.gx.obe.component.utils.CompositeUtils;
+
+public class TabHandler<T extends ISelection> {
+	
+	private ISelection tab;
+	
+	private final Composite composite;
+	private final Function<Composite, T> iTabFunction;
+	
+	private Callback firstCall;
+	
+	public TabHandler(Composite composite, Function<Composite, T> iTabFunction) {
+		this.composite = composite;
+		this.iTabFunction = iTabFunction;
+	}
+	
+	public TabHandler<T> start() {
+		CompositeUtils.disposeChildren(composite);
+		firstCall = null;
+		return this;
+	}
+	
+	public <R> TabHandler<T> hand(String text, Callback callback) {
+		return hand(null, (t, r) -> t.setText(text), r -> callback.call());
+	}
+	
+	public <R> TabHandler<T> hand(Consumer<T> setConsumer, Callback callback) {
+		return hand(null, (t, r) -> setConsumer.accept(t), r -> callback.call());
+	}
+	
+	public <R> TabHandler<T> hand(R r, BiConsumer<T, R> setBiConsumer, Consumer<R> consumer) {
+		T t = iTabFunction.apply(composite);
+		setBiConsumer.accept(t, r);
+		t.addMouseListener(MouseListener.mouseUpAdapter($ -> {
+			tab.setSelection(false);
+			tab = t;
+			tab.setSelection(true);
+			consumer.accept(r);
+		}));
+		if (firstCall == null) firstCall = () -> consumer.accept(r);
+		return this;
+	}
+	
+	public void end() {
+		composite.layout();
+		composite.getParent().layout();
+		CompositeUtils.getFirst(composite).ifPresent(t -> {
+			tab = (ISelection) t;
+			tab.setSelection(true);
+			firstCall.call();
+		});
+	}
+	
+	public <R> TabHandler<T> listHand(List<R> tList, Function<R, String> getTestFunction, Consumer<R> consumer) {
+		return listHand(tList, (t, r) -> t.setText(getTestFunction.apply(r)), consumer);
+	}
+	
+	public <R> TabHandler<T> listHand(List<R> tList, BiConsumer<T, R> setBiConsumer, Consumer<R> consumer) {
+		if (tList != null) tList.forEach(r -> hand(r, setBiConsumer, consumer));
+		return this;
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/listener/SelectionListener.java b/com.gx.obe.component/src/com/gx/obe/component/listener/SelectionListener.java
new file mode 100644
index 00000000..9b8e1a8b
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/listener/SelectionListener.java
@@ -0,0 +1,7 @@
+package com.gx.obe.component.listener;
+
+public interface SelectionListener<T> {
+	
+	void selection(T t);
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/menu/ListMenu.java b/com.gx.obe.component/src/com/gx/obe/component/menu/ListMenu.java
new file mode 100644
index 00000000..dd5d14ea
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/menu/ListMenu.java
@@ -0,0 +1,90 @@
+package com.gx.obe.component.menu;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+import org.eclipse.nebula.widgets.grid.Grid;
+import org.eclipse.nebula.widgets.grid.GridColumn;
+import org.eclipse.nebula.widgets.grid.GridItem;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Widget;
+
+import com.gx.obe.bind.fun.Fun;
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.util.utils.PredicateUtils;
+
+public class ListMenu<T> extends Composite {
+	
+	protected Consumer<T> consumer = t -> {};
+	
+	private Prop<List<T>> tListProp = new Prop<>(new ArrayList<>());
+	private Prop<Integer> menuWidth = new Prop<>(300);
+	
+	/**
+	 * @author chenxw
+	 * @param parent
+	 * @param style
+	 */
+	public ListMenu(Composite parent, Function<T, String> menuNameFun, Function<Composite, Consumer<T>> function) {
+		super(parent, SWT.NONE);
+		setLayout(new GridLayout(2, false));
+		
+		Composite menuComposite = new Composite(this, SWT.NONE);
+		menuComposite.setLayout(new GridLayout(1, false));
+		menuComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1));
+		
+		Grid grid = new Grid(menuComposite, SWT.V_SCROLL);
+		grid.addSelectionListener(SelectionListener.widgetSelectedAdapter(this::widgetSelected));
+		grid.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		tListProp.bind(l -> {
+			grid.removeAll();
+			l.stream().forEach(t -> {
+				GridItem gridItem = new GridItem(grid, SWT.NONE);
+				gridItem.setText(menuNameFun.apply(t));
+				gridItem.setData(t);
+				gridItem.setHeight(30);
+			});
+			Optional.of(grid).filter(Fun.of(Grid::getItemCount).toTest(PredicateUtils.higher(0))).ifPresent(g -> g.select(0));
+			Optional.of(grid).map(Grid::getSelection).map(Stream::of).flatMap(Stream::findFirst).ifPresent(this::selectItemAction);
+		});
+		
+		GridColumn gridColumn = new GridColumn(grid, SWT.NONE);
+		menuWidth.bind(gridColumn::setWidth);
+		
+		Composite content = new Composite(this, SWT.NONE);
+		content.setLayout(new FillLayout(SWT.HORIZONTAL));
+		content.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		consumer = Optional.ofNullable(function).orElseGet(() -> p -> t -> {}).apply(content);
+	}
+	
+	public void refresh(List<T> tList) {
+		tListProp.set(tList);
+	}
+	
+	public void setMenuWidth(int menuWidth) {
+		this.menuWidth.set(menuWidth);
+	}
+	
+	private void widgetSelected(SelectionEvent e) {
+		selectItemAction(e.item);
+	}
+	
+	private void selectItemAction(Widget item) {
+		@SuppressWarnings("unchecked")
+		T t = (T) item.getData();
+		consumer.accept(t);
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/rx/RxSwt.java b/com.gx.obe.component/src/com/gx/obe/component/rx/RxSwt.java
new file mode 100644
index 00000000..fef7a3e4
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/rx/RxSwt.java
@@ -0,0 +1,58 @@
+package com.gx.obe.component.rx;
+
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Widget;
+
+import com.gx.obe.bind.promise.Promise;
+import com.gx.obe.bind.rx.RxBind;
+import com.gx.obe.bind.rx.Tangent;
+
+public class RxSwt<T> {
+	
+	private final RxBind<T> rxBind;
+	
+	private Tangent tangent = Tangent.TEMP;
+	private Supplier<Boolean> check = () -> false;
+	private Supplier<T> other = () -> null;
+	
+	public static <T> RxSwt<T> run(Supplier<T> run) {
+		return new RxSwt<T>(run);
+	}
+	
+	public RxSwt<T> setTangent(Tangent tangent) {
+		this.tangent = tangent;
+		return this;
+	}
+	
+	private RxSwt(Supplier<T> run) {
+		rxBind = RxBind.run(run);
+	}
+	
+	public RxSwt<T> checkWidget(Widget widget) {
+		if (widget != null) {
+			this.check = widget::isDisposed;
+		}
+		return this;
+	}
+	
+	public RxSwt<T> other(Supplier<T> other) {
+		this.other = other;
+		return this;
+	}
+	
+	public Promise<T> exe() {
+		return new Promise<>((s, f) -> exe(s));
+	}
+	
+	public void exe(Consumer<T> consumer) {
+		rxBind.supplierSync(this::startThead).consumerSync(Display.getDefault()::asyncExec).tangent(tangent).check(check).other(other).exe(consumer);
+	}
+	
+	private void startThead(Runnable runnable) {
+		new Thread(runnable).start();
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/tabfolder/CTabFolder.java b/com.gx.obe.component/src/com/gx/obe/component/tabfolder/CTabFolder.java
new file mode 100644
index 00000000..e71432fb
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/tabfolder/CTabFolder.java
@@ -0,0 +1,182 @@
+package com.gx.obe.component.tabfolder;
+
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.utils.WidgetUtils;
+import org.eclipse.swt.core.widgets.ESepator;
+import org.eclipse.swt.core.widgets.ImageButton;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.ColorConstants;
+import com.gx.obe.bind.call.Callback;
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.component.utils.CompositeUtils;
+import com.swtdesigner.SWTResourceManager;
+
+/**
+ * @Description: 选项卡布局
+ * @author chenxw
+ */
+public abstract class CTabFolder extends Composite {
+	
+	private final StackLayout stackLayout = new StackLayout();
+	
+	private final Composite itemComposite;
+	private final Composite contentComposite;
+	
+	private CTabItem curTabItem;
+	private Composite actionComposite;
+	private int index;
+	
+	/**
+	 * @author chenxw
+	 * @param parent
+	 * @param style
+	 */
+	public CTabFolder(Composite parent, int style) {
+		super(parent, style);
+		GridLayout gridLayout = new GridLayout(1, false);
+		gridLayout.verticalSpacing = 0;
+		gridLayout.marginHeight = 0;
+		gridLayout.marginWidth = 0;
+		setLayout(gridLayout);
+		
+		Prop<Boolean> showItemList = new Prop<Boolean>(false);
+		
+		itemComposite = new Composite(this, SWT.NONE);
+		RowLayout rl_composite = new RowLayout(SWT.HORIZONTAL);
+		rl_composite.marginBottom = 0;
+		rl_composite.marginTop = 0;
+		rl_composite.marginRight = 0;
+		rl_composite.marginLeft = 0;
+		itemComposite.setLayout(rl_composite);
+		itemComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		showItemList.bind(t -> WidgetUtils.setControlVisible(itemComposite, t));
+		
+		ESepator timeSep = new ESepator(this, SWT.HORIZONTAL);
+		timeSep.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		timeSep.setBackground(ColorConstants.SKIN_BG);
+		timeSep.setLineWidth(3);
+		showItemList.bind(t -> WidgetUtils.setControlVisible(timeSep, t));
+		showItemList.bind(t -> layout());
+		
+		contentComposite = new Composite(this, SWT.NONE);
+		contentComposite.setLayout(stackLayout);
+		contentComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		
+		actionComposite = new Composite(contentComposite, SWT.NONE);
+		actionComposite.setLayout(new FillLayout(SWT.HORIZONTAL));
+		
+		init();
+		
+		showItemList.set(itemComposite.getChildren().length > 1);
+	}
+	
+	public void notifyMouseUp() {
+		CompositeUtils.notifyMouseUp(itemComposite);
+	}
+	
+	public void refresh() {
+		if (curTabItem != null) curTabItem.refresh();
+		else CompositeUtils.notifyMouseUp(itemComposite);
+	}
+	
+	/**
+	 * @Description: 初始化
+	 * @author chenxw
+	 */
+	protected abstract void init();
+	
+	/**
+	 * @Description: 选项卡
+	 * @author chenxw
+	 */
+	protected class CTabItem extends ImageButton {
+		
+		private Consumer<Composite> consumer = t -> {};
+		
+		private Callback callback = () -> {};
+		
+		private boolean action;
+		private boolean refresh;
+		
+		private int index = 0;
+		
+		/**
+		 * @author chenxw
+		 * @param text
+		 * @param function
+		 */
+		public CTabItem(String text) {
+			super(itemComposite, SWT.NONE);
+			
+			this.setBorderColor(null);
+			
+			this.setForeground(SWTResourceManager.getColor(127, 127, 127));
+			this.setBackgroundColor(SWTResourceManager.getColor(221, 221, 221));
+			
+			this.setActiveForeground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+			this.setActiveBgColor(SWTResourceManager.getColor(255, 153, 0));
+			
+			this.setSelectionForeground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+			this.setSelectionBgColor(SWTResourceManager.getColor(60, 138, 226));
+			
+			this.setLeftMargin(15);
+			this.setRightMargin(15);
+			this.setTopMargin(6);
+			this.setBottomMargin(6);
+			
+			setText(text);
+			setFont(SWTResourceManager.getFont("微软雅黑", 9, SWT.BOLD));
+			addMouseListener(MouseListener.mouseUpAdapter(this::mouseUpAction));
+		}
+		
+		public void action(Consumer<Composite> consumer) {
+			this.consumer = Objects.requireNonNull(consumer);
+			this.action = true;
+		}
+		
+		public void refresh(Function<Composite, Callback> function) {
+			this.callback = Objects.requireNonNull(function).apply(contentComposite);
+			this.refresh = true;
+			this.index = ++CTabFolder.this.index;
+		}
+		
+		/**
+		 * @Description: 鼠标点击事件
+		 * @author chenxw
+		 * @param e
+		 */
+		private void mouseUpAction(MouseEvent e) {
+			Optional.ofNullable(curTabItem).ifPresent(t -> t.setSelection(false));
+			this.setSelection(true);
+			curTabItem = this;
+			if (action) stackLayout.topControl = actionComposite;
+			if (refresh) stackLayout.topControl = contentComposite.getChildren()[index];
+			contentComposite.layout();
+			refresh();
+		}
+		
+		private void refresh() {
+			if (action) {
+				CompositeUtils.disposeChildren(actionComposite);
+				consumer.accept(actionComposite);
+				actionComposite.layout();
+			}
+			if (refresh) callback.call();
+		}
+		
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/tabfolder/FTabFolder.java b/com.gx.obe.component/src/com/gx/obe/component/tabfolder/FTabFolder.java
new file mode 100644
index 00000000..b5f7bccb
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/tabfolder/FTabFolder.java
@@ -0,0 +1,73 @@
+package com.gx.obe.component.tabfolder;
+
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Function;
+
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.bind.view.ChangeListener;
+import com.gx.obe.bind.view.RView;
+
+/**
+ * @Description: 选项卡布局
+ * @author chenxw
+ * @param <T>
+ */
+public abstract class FTabFolder<T> extends CTabFolder implements RView<T> {
+	
+	private ChangeListener changeListener;
+	
+	private RView<T> rView;
+	
+	/**
+	 * @author chenxw
+	 * @param parent
+	 * @param style
+	 */
+	public FTabFolder(Composite parent, int style) {
+		super(parent, style);
+	}
+	
+	@Override
+	public void addChangeListener(ChangeListener changeListener) {
+		this.changeListener = Objects.requireNonNull(changeListener);
+		notifyMouseUp();
+	}
+	
+	@Override
+	public T get() {
+		return Optional.ofNullable(rView).map(RView::get).orElse(null);
+	}
+	
+	/**
+	 * @Description: 选项卡
+	 * @author chenxw
+	 */
+	protected class FTabItem extends CTabFolder.CTabItem {
+		
+		/**
+		 * @author chenxw
+		 * @param text
+		 * @param function
+		 */
+		public FTabItem(String text) {
+			super(text);
+		}
+		
+		/**
+		 * @Description:
+		 * @author chenxw
+		 * @param function
+		 */
+		public void action(Function<Composite, RView<T>> function) {
+			super.action(t -> {
+				rView = function.apply(t);
+				rView.addChangeListener(changeListener);
+				changeListener.change();
+			});
+		}
+		
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/table/CTable.java b/com.gx.obe.component/src/com/gx/obe/component/table/CTable.java
new file mode 100644
index 00000000..15d8b1da
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/table/CTable.java
@@ -0,0 +1,299 @@
+package com.gx.obe.component.table;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+
+import com.swtdesigner.SWTResourceManager;
+
+import de.kupzog.ktable.KTable;
+import de.kupzog.ktable.KTableCellRenderer;
+import de.kupzog.ktable.SWTX;
+import de.kupzog.ktable.editors.KTableCellEditorLink;
+import de.kupzog.ktable.editors.KTableCellEditorText;
+import de.kupzog.ktable.model.CommonKtableCModel;
+import de.kupzog.ktable.renderers.FixedWrapCellRenderer;
+import de.kupzog.ktable.renderers.LinkCellRenderer;
+import de.kupzog.ktable.renderers.TextWrapCellRenderer;
+
+public class CTable<T> extends KTable {
+	
+	/**
+	 * @Description: 换行文本渲染
+	 */
+	private static final FixedWrapCellRenderer FIXED_RENDERER = new FixedWrapCellRenderer();
+	/**
+	 * @Description: 换行文本渲染
+	 */
+	private static final TextWrapCellRenderer TEXT_RENDERER = new TextWrapCellRenderer();
+	
+	/**
+	 * @Description: 固定行数
+	 */
+	private static final int HEAD_ROW = 1;
+	
+	/**
+	 * @Description: 默认最小列宽
+	 */
+	private static int COLUMN_MIN_WIDTH = -1;
+	/**
+	 * @Description: 默认最小列宽
+	 */
+	private static int COLUMN_WIDTH = -1;
+	/**
+	 * @Description: 默认最大列宽
+	 */
+	private static int COLUMN_MAX_WIDTH = -1;
+	
+	/**
+	 * @Description: 默认列对齐方式
+	 */
+	private static int ALIGN_HORIZONTAL = SWTX.ALIGN_HORIZONTAL_CENTER;
+	
+	/**
+	 * @Description: 固定列
+	 */
+	private final List<Column> headColumnList;
+	/**
+	 * @Description: 内容列
+	 */
+	private final List<Column> contentColumnList;
+	
+	/**
+	 * @Description: 显示数据
+	 */
+	private final List<T> tList;
+	
+	/**
+	 * @Description: 表格模型
+	 */
+	private final CommonKtableCModel commonKtableCModel;
+	
+	public CTable(Composite parent, List<Column> headColumnList, List<Column> contentColumnList, List<T> tList) {
+		super(parent, SWTX.AUTO_SCROLL | SWT.FULL_SELECTION | SWTX.EDIT_ON_KEY | SWTX.FILL_WITH_LASTCOL);
+		this.headColumnList = headColumnList;
+		this.contentColumnList = contentColumnList;
+		this.tList = Optional.ofNullable(tList).orElseGet(ArrayList::new);
+		this.commonKtableCModel = new CommonKtableCModel(this, HEAD_ROW, headColumnList.size(), this.tList.size(), contentColumnList.size());
+		show();
+	}
+	
+	/**
+	 * @Description: 显示
+	 * @author chenxw
+	 */
+	private void show() {
+		for (int col = 0; col < commonKtableCModel.getColCount(); col++) {
+			int minWidth;
+			int width;
+			int maxWidth;
+			if (col < headColumnList.size()) {
+				minWidth = getHeadColumn(col).getMinWidth();
+				width = getHeadColumn(col).getWidth();
+				maxWidth = getHeadColumn(col).getMaxWidth();
+			} else {
+				minWidth = Optional.of(getContentColumn(col)).map(Column::getMinWidth).orElse(COLUMN_MIN_WIDTH);
+				width = Optional.of(getContentColumn(col)).map(Column::getWidth).orElse(COLUMN_WIDTH);
+				maxWidth = Optional.of(getContentColumn(col)).map(Column::getMaxWidth).orElse(COLUMN_MAX_WIDTH);
+			}
+			commonKtableCModel.setColumnMinWidth(col, minWidth);
+			commonKtableCModel.setColumnWidth(col, width);
+			commonKtableCModel.setColumnMaxWidth(col, maxWidth);
+		}
+		
+		commonKtableCModel.setRowHeightRender(row -> 30);
+		commonKtableCModel.setCellBackgroundRender((a, b) -> SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		
+		commonKtableCModel.setCellContentRender(this::receiveContent);
+		commonKtableCModel.setCellRender(this::receiveCellRender);
+		commonKtableCModel.setCellEditorRender(this::receiveCellEditor);
+		commonKtableCModel.setCellImageRender(this::receiveCellImage);
+		commonKtableCModel.setCellAlignmentRender(this::receiveCellAlignment);
+		commonKtableCModel.setCellEditContentRender(this::receiveContent);
+		
+		this.setModel(commonKtableCModel);
+	}
+	
+	/**
+	 * @Description: 加载内容
+	 * @author chenxw
+	 * @param row
+	 * @param col
+	 * @return
+	 */
+	private String receiveContent(int row, int col) {
+		if (row < HEAD_ROW) {
+			if (col < headColumnList.size()) {
+				return getHeadColumn(col).getName();
+			}
+			return getContentColumn(col).getName();
+		}
+		if (col < headColumnList.size()) {
+			return getHeadColumn(col).getFunction().apply(row);
+		}
+		return Optional.ofNullable(getContentColumn(col).getFunction().apply(row)).orElse("");
+	}
+	
+	/**
+	 * @Description: 编辑单元格内容
+	 * @author chenxw
+	 * @param row
+	 * @param col
+	 * @param content
+	 * @return 
+	 */
+	private void receiveContent(int row, int col, Object content) {
+		if (commonKtableCModel.isFixedCell(col, row)) {
+			return;
+		}
+		Column contentColumn = getContentColumn(col);
+		if (!(contentColumn instanceof Text)) {
+			return;
+		}
+		@SuppressWarnings("unchecked")
+		Text<T> textContentColumn = (Text<T>) contentColumn;
+		textContentColumn.action(getT(row), content);
+		redraw();
+	}
+	
+	/**
+	 * @Description: 加载渲染器
+	 * @author chenxw
+	 * @param row
+	 * @param col
+	 * @return
+	 */
+	private KTableCellRenderer receiveCellRender(int row, int col) {
+		if (commonKtableCModel.isFixedCell(col, row)) {
+			return FIXED_RENDERER;
+		}
+		Column contentColumn = getContentColumn(col);
+		if (!(contentColumn instanceof Link)) {
+			return TEXT_RENDERER;
+		}
+		@SuppressWarnings("unchecked")
+		Link<T> linkContentColumn = (Link<T>) contentColumn;
+		LinkCellRenderer linkCellRenderer = new LinkCellRenderer();
+		linkCellRenderer.setEnable(linkContentColumn.enable(getT(row)));
+		return linkCellRenderer;
+	}
+	
+	/**
+	 * @Description: 加载编辑器
+	 * @author chenxw
+	 * @param row
+	 * @param col
+	 * @return
+	 */
+	private Object receiveCellEditor(int row, int col) {
+		if (commonKtableCModel.isFixedCell(col, row)) {
+			return null;
+		}
+		Column contentColumn = getContentColumn(col);
+		if (contentColumn instanceof Link) {
+			return new KTableCellEditorLink(this, this::receiveAction);
+		} else if (contentColumn instanceof Text) {
+			@SuppressWarnings("unchecked")
+			Text<T> textContentColumn = (Text<T>) contentColumn;
+			KTableCellEditorText cellEditorText = new KTableCellEditorText();
+			cellEditorText.setTextLimit(textContentColumn.getTextLimit());
+			return cellEditorText;
+		}
+		return null;
+	}
+	
+	/**
+	 * @Description: 按钮点击事件
+	 * @author chenxw
+	 * @param row
+	 * @param col
+	 */
+	private void receiveAction(int row, int col) {
+		if (commonKtableCModel.isFixedCell(col, row)) {
+			return;
+		}
+		Column contentColumn = getContentColumn(col);
+		if (!(contentColumn instanceof Link)) {
+			return;
+		}
+		@SuppressWarnings("unchecked")
+		Link<T> linkContentColumn = (Link<T>) contentColumn;
+		linkContentColumn.action(getT(row));
+	}
+	
+	/**
+	 * @Description: 加载图片
+	 * @author chenxw
+	 * @param row
+	 * @param col
+	 * @return
+	 */
+	private Image receiveCellImage(int row, int col) {
+		if (row < HEAD_ROW) {
+			return null;
+		}
+		if (col < headColumnList.size()) {
+			return getHeadColumn(col).getImage();
+		}
+		return getContentColumn(col).getImage();
+	}
+	
+	/**
+	 * @Description: 加载单元格对齐方式
+	 * @author chenxw
+	 * @param row
+	 * @param col
+	 * @return
+	 */
+	private int receiveCellAlignment(int row, int col) {
+		if (row < HEAD_ROW) {
+			return SWTX.ALIGN_VERTICAL_CENTER | SWTX.ALIGN_HORIZONTAL_CENTER;
+		}
+		int align;
+		if (col < headColumnList.size()) {
+			align = Optional.of(getHeadColumn(col)).map(Column::getAlign).orElse(ALIGN_HORIZONTAL);
+		} else {
+			align = Optional.of(getContentColumn(col)).map(Column::getAlign).orElse(ALIGN_HORIZONTAL);
+		}
+		return SWTX.ALIGN_VERTICAL_CENTER | align;
+	}
+	
+	/**
+	 * @Description: 获取固定列
+	 * @author chenxw
+	 * @param col
+	 * @return
+	 */
+	private Column getHeadColumn(int col) {
+		return headColumnList.get(col);
+	}
+	
+	/**
+	 * @Description: 获取内容列
+	 * @author chenxw
+	 * @param col
+	 * @return
+	 */
+	private Column getContentColumn(int col) {
+		return contentColumnList.get(col - headColumnList.size());
+	}
+	
+	/**
+	 * @Description: 获取T
+	 * @author chenxw
+	 * @param row
+	 * @return
+	 */
+	public T getT(int row) {
+		row -= HEAD_ROW;
+		if (tList.size() > row) {
+			return tList.get(row);
+		}
+		return null;
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/table/Column.java b/com.gx.obe.component/src/com/gx/obe/component/table/Column.java
new file mode 100644
index 00000000..924916aa
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/table/Column.java
@@ -0,0 +1,111 @@
+package com.gx.obe.component.table;
+
+import java.util.function.Function;
+
+import org.eclipse.swt.graphics.Image;
+
+import de.kupzog.ktable.SWTX;
+
+/**
+ * @Description: 列
+ * @author chenxw
+ */
+public class Column {
+	
+	public static final int ALIGN_LEFT = SWTX.ALIGN_HORIZONTAL_LEFT;
+	public static final int ALIGN_CENTER = SWTX.ALIGN_HORIZONTAL_CENTER;
+	public static final int ALIGN_RIGHT = SWTX.ALIGN_HORIZONTAL_RIGHT;
+	
+	/**
+	 * @Description: 名称
+	 */
+	private String name;
+	/**
+	 * @Description: 根据序号获取展示内容
+	 */
+	private Function<Integer, String> function;
+	/**
+	 * @Description: 图片
+	 */
+	private Image image;
+	/**
+	 * @Description: 对齐方式
+	 */
+	private Integer align;
+	/**
+	 * @Description: 最小列宽
+	 */
+	private Integer minWidth;
+	/**
+	 * @Description: 列宽
+	 */
+	private Integer width;
+	/**
+	 * @Description: 最大列宽
+	 */
+	private Integer maxWidth;
+	
+	/**
+	 * @author chenxw
+	 * @param name
+	 * @param function
+	 */
+	public Column(String name, Function<Integer, String> function) {
+		this.name = name;
+		this.function = function;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public Function<Integer, String> getFunction() {
+		return function;
+	}
+	
+	public Column image(Image image) {
+		this.image = image;
+		return this;
+	}
+	
+	public Image getImage() {
+		return image;
+	}
+	
+	public Column align(int align) {
+		this.align = align;
+		return this;
+	}
+	
+	public Integer getAlign() {
+		return align;
+	}
+	
+	public Column minWidth(int minWidth) {
+		this.minWidth = minWidth;
+		return this;
+	}
+	
+	public Integer getMinWidth() {
+		return minWidth;
+	}
+	
+	public Column width(int width) {
+		this.width = width;
+		return this;
+	}
+	
+	public Integer getWidth() {
+		return width;
+	}
+	
+	public Column maxWidth(int maxWidth) {
+		this.maxWidth = maxWidth;
+		return this;
+	}
+	
+	public Integer getMaxWidth() {
+		return maxWidth;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.component/src/com/gx/obe/component/table/FTable.java b/com.gx.obe.component/src/com/gx/obe/component/table/FTable.java
new file mode 100644
index 00000000..7abef998
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/table/FTable.java
@@ -0,0 +1,203 @@
+package com.gx.obe.component.table;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.component.listener.SelectionListener;
+import com.gx.obe.component.utils.CompositeUtils;
+
+import de.kupzog.ktable.KTableCellSelectionAdapter;
+
+/**
+ * @Description: 函数式表格
+ * @author chenxw
+ * @param <T>
+ */
+public abstract class FTable<T> extends Composite {
+	
+	/**
+	 * @Description:
+	 */
+	private CTable<T> cTable;
+	
+	/**
+	 * @Description: 获取t函数
+	 */
+	private final Function<Integer, T> tFun = this::getT;
+	
+	/**
+	 * @Description: 固定列
+	 */
+	private final List<Column> headColumnList = new ArrayList<>();
+	/**
+	 * @Description: 内容列
+	 */
+	private final List<Column> contentColumnList = new ArrayList<>();
+	
+	private List<SelectionListener<T>> selectionListenerList = new ArrayList<>();
+	
+	/**
+	 * @author chenxw
+	 * @param parent
+	 * @param tList
+	 */
+	public FTable(Composite parent, int style) {
+		super(parent, style);
+		setLayout(new FillLayout(SWT.HORIZONTAL));
+		init();
+	}
+	
+	/**
+	 * @Description: 初始化
+	 * @author chenxw
+	 */
+	protected abstract void init();
+	
+	/**
+	 * @Description: 刷新
+	 * @author chenxw
+	 * @param tList
+	 */
+	public void refresh(List<T> tList) {
+		CompositeUtils.disposeChildren(this);
+		this.cTable = new CTable<>(this, headColumnList, contentColumnList, tList);
+		cTable.addCellSelectionListener(new KTableCellSelectionAdapter() {
+			public void cellSelected(int col, int row, int statemask) {
+				selection(row);
+			}
+		});
+		this.layout();
+		this.getParent().layout();
+		selection(1);
+	}
+	
+	private void selection(int row) {
+		T t = getT(row);
+		if (t != null) selectionListenerList.forEach(l -> l.selection(t));
+	}
+	
+	public void addSelectionListener(SelectionListener<T> selectionListener) {
+		this.selectionListenerList.add(selectionListener);
+	}
+	
+	/**
+	 * @Description: 获取T
+	 * @author chenxw
+	 * @param row
+	 * @return
+	 */
+	private T getT(int row) {
+		return this.cTable.getT(row);
+	}
+	
+	/**
+	 * @Description: 索引列
+	 * @author chenxw
+	 */
+	protected class IndexColumn extends Column {
+		public IndexColumn(String name) {
+			this(name, 50, String::valueOf);
+		}
+		
+		public IndexColumn(String name, int width, Function<Integer, String> function) {
+			super(name, function);
+			headColumnList.add(this);
+			width(width).minWidth(width).maxWidth(width);
+		}
+	}
+	
+	/**
+	 * @Description: 固定列
+	 * @author chenxw
+	 */
+	protected class HeadColumn extends Column {
+		public HeadColumn(String name, int width, Function<T, String> function) {
+			super(name, tFun.andThen(function));
+			headColumnList.add(this);
+			width(width).minWidth(width).maxWidth(width);
+		}
+	}
+	
+	/**
+	 * @Description: 内容列
+	 * @author chenxw
+	 */
+	protected class ContentColumn extends Column {
+		public ContentColumn(String name, Function<T, String> function) {
+			super(name, tFun.andThen(function));
+			contentColumnList.add(this);
+		}
+	}
+	
+	/**
+	 * @Description: 链接内容列
+	 * @author chenxw
+	 */
+	protected class LinkContentColumn extends ContentColumn implements Link<T> {
+		private Consumer<T> consumer;
+		private Predicate<T> predicate = t -> true;
+		
+		public LinkContentColumn(String name, String content, Image image, Consumer<T> consumer) {
+			super(name, t -> content);
+			image(image);
+			this.consumer = consumer;
+		}
+		
+		public void enable(Predicate<T> predicate) {
+			this.predicate = Objects.requireNonNull(predicate);
+		}
+		
+		@Override
+		public boolean enable(T t) {
+			return predicate.test(t);
+		}
+		
+		@Override
+		public void action(T t) {
+			consumer.accept(t);
+		}
+	}
+	
+	/**
+	 * @Description: 文本编辑内容列
+	 * @author chenxw
+	 */
+	protected class TextContentColumn<R> extends ContentColumn implements Text<T> {
+		
+		private Function<Object, R> format;
+		private BiConsumer<T, R> biConsumer;
+		private int textLimit = 1000;
+		
+		public TextContentColumn(String name, Function<T, String> function, Function<Object, R> format, BiConsumer<T, R> biConsumer) {
+			super(name, function);
+			this.format = format;
+			this.biConsumer = biConsumer;
+		}
+		
+		public void limit(int textLimit) {
+			this.textLimit = textLimit;
+		}
+		
+		@Override
+		public void action(T t, Object content) {
+			biConsumer.accept(t, format.apply(content));
+		}
+		
+		@Override
+		public int getTextLimit() {
+			return textLimit;
+		}
+		
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/table/Link.java b/com.gx.obe.component/src/com/gx/obe/component/table/Link.java
new file mode 100644
index 00000000..7b41ca8a
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/table/Link.java
@@ -0,0 +1,14 @@
+package com.gx.obe.component.table;
+
+/**
+ * @Description: 链接
+ * @author chenxw
+ * @param <T>
+ */
+interface Link<T> {
+	
+	boolean enable(T t);
+	
+	void action(T t);
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.component/src/com/gx/obe/component/table/Text.java b/com.gx.obe.component/src/com/gx/obe/component/table/Text.java
new file mode 100644
index 00000000..1fc0cbf6
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/table/Text.java
@@ -0,0 +1,9 @@
+package com.gx.obe.component.table;
+
+public interface Text<T> {
+
+	void action(T t, Object content);
+
+	int getTextLimit();
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/text/CapitalMoneyText.java b/com.gx.obe.component/src/com/gx/obe/component/text/CapitalMoneyText.java
new file mode 100644
index 00000000..dac9f267
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/text/CapitalMoneyText.java
@@ -0,0 +1,146 @@
+package com.gx.obe.component.text;
+
+import java.math.BigDecimal;
+import java.util.Objects;
+import java.util.Optional;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import com.gx.obe.bind.fun.Fun;
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.bind.view.ChangeListener;
+import com.gx.obe.bind.view.MView;
+import com.gx.obe.components.core.util.MoneyUtils;
+import com.swtdesigner.SWTResourceManager;
+
+/**
+ * @Description: 大写金额文本框
+ * @author chenxw
+ */
+public class CapitalMoneyText extends Composite implements MView<BigDecimal> {
+	
+	private final Prop<BigDecimal> moneyProp = new Prop<>(BigDecimal.ZERO);
+	
+	private final Prop<Color> moneyColorProp = new Prop<>(SWTResourceManager.getColor(90, 147, 52));
+	
+	private final Prop<Boolean> editableProp = new Prop<>(true);
+	
+	public CapitalMoneyText(Composite parent, String unit) {
+		super(parent, SWT.NONE);
+		setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		setBackgroundMode(SWT.INHERIT_FORCE);
+		
+		Objects.requireNonNull(unit);
+		
+		GridLayout gridLayout = new GridLayout(1, false);
+		gridLayout.verticalSpacing = 0;
+		gridLayout.marginHeight = 0;
+		gridLayout.marginWidth = 0;
+		setLayout(gridLayout);
+		
+		Composite composite = new Composite(this, SWT.NONE);
+		composite.setBackground(SWTResourceManager.getColor(238, 238, 238));
+		GridLayout gl_composite = new GridLayout(3, false);
+		gl_composite.marginHeight = 6;
+		gl_composite.marginWidth = 20;
+		gl_composite.horizontalSpacing = 20;
+		composite.setLayout(gl_composite);
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		
+		Label lblNewLabel = new Label(composite, SWT.NONE);
+		lblNewLabel.setForeground(SWTResourceManager.getColor(188, 188, 188));
+		lblNewLabel.setFont(SWTResourceManager.getFont("微软雅黑", 11, SWT.NORMAL));
+		lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+		lblNewLabel.setText("小写");
+		
+		MoneyText text = new MoneyText(composite, SWT.RIGHT, unit);
+		text.setFont(SWTResourceManager.getFont("微软雅黑", 18, SWT.NORMAL));
+		text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		moneyProp.bindBidirectional(text);
+		moneyColorProp.bind(text::setForeground);
+		editableProp.bind(text::setEditable);
+		
+		Label lblNewLabel_2 = new Label(composite, SWT.NONE);
+		lblNewLabel_2.setForeground(SWTResourceManager.getColor(160, 160, 160));
+		lblNewLabel_2.setFont(SWTResourceManager.getFont("微软雅黑", 10, SWT.NORMAL));
+		lblNewLabel_2.setText(unit);
+		
+		Composite composite_1 = new Composite(this, SWT.NONE);
+		composite_1.setBackground(SWTResourceManager.getColor(245, 245, 245));
+		GridLayout gl_composite_1 = new GridLayout(2, false);
+		gl_composite_1.marginHeight = 6;
+		gl_composite_1.marginWidth = 20;
+		gl_composite_1.horizontalSpacing = 20;
+		composite_1.setLayout(gl_composite_1);
+		GridData gd_composite_1 = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+		gd_composite_1.heightHint = 41;
+		composite_1.setLayoutData(gd_composite_1);
+		
+		Label lblNewLabel_1 = new Label(composite_1, SWT.NONE);
+		lblNewLabel_1.setForeground(SWTResourceManager.getColor(188, 188, 188));
+		lblNewLabel_1.setFont(SWTResourceManager.getFont("微软雅黑", 11, SWT.NORMAL));
+		lblNewLabel_1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, true, 1, 1));
+		lblNewLabel_1.setText("大写");
+		
+		Text text_1 = new Text(composite_1, SWT.RIGHT);
+		text_1.setFont(SWTResourceManager.getFont("微软雅黑", 14, SWT.NORMAL));
+		text_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));
+		text_1.setEditable(false);
+		moneyProp.bind(Fun.of(this::moneyToCapital).toWrite(text_1::setText));
+		moneyColorProp.bind(text_1::setForeground);
+		
+	}
+	
+	/**
+	 * @Description: 金额转大写
+	 * @author chenxw
+	 * @param money
+	 * @return
+	 */
+	private String moneyToCapital(BigDecimal money) {
+		return Optional.ofNullable(money).map(BigDecimal::doubleValue).map(MoneyUtils::amountToChinese).orElse("");
+	}
+	
+	@Override
+	public void addChangeListener(ChangeListener changeListener) {
+		moneyProp.addChangeListener(changeListener);
+	}
+	
+	@Override
+	public void set(BigDecimal t) {
+		moneyProp.set(t);
+	}
+	
+	/**
+	 * @Description: 设置金额字体颜色
+	 * @author chenxw
+	 * @param moneyColor
+	 */
+	public void setMoneyColor(Color moneyColor) {
+		moneyColorProp.set(moneyColor);
+	}
+	
+	/**
+	 * @Description: 设置是否可编辑
+	 * @author chenxw
+	 * @param editable
+	 */
+	public void setEditable(Boolean editable) {
+		editableProp.set(editable);
+	}
+	
+	@Override
+	public BigDecimal get() {
+		return moneyProp.get();
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.component/src/com/gx/obe/component/text/DocumentText.java b/com.gx.obe.component/src/com/gx/obe/component/text/DocumentText.java
new file mode 100644
index 00000000..26bfb7df
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/text/DocumentText.java
@@ -0,0 +1,122 @@
+package com.gx.obe.component.text;
+
+import java.util.function.Supplier;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+import com.gx.obe.ColorConstants;
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.bind.view.ChangeListener;
+import com.gx.obe.bind.view.MView;
+import com.gx.obe.component.verify.Verify;
+import com.swtdesigner.SWTResourceManager;
+
+/**
+ * @Description:
+ * @author chenxw
+ */
+public class DocumentText extends Composite implements MView<String>, Verify<String> {
+	
+	/**
+	 * @Description: 标题
+	 */
+	private final Prop<String> title = new Prop<>();
+	/**
+	 * @Description: 内容
+	 */
+	private final Prop<String> content = new Prop<>();
+	/**
+	 * @Description: 可编辑
+	 */
+	private final Prop<Boolean> editable = new Prop<>(false);
+	
+	/**
+	 * @Description: 获取内容文本框
+	 */
+	private Supplier<Control> contentTextGet;
+	
+	/**
+	 * @author chenxw
+	 * @param parent
+	 * @param style
+	 */
+	public DocumentText(Composite parent, int style) {
+		super(parent, style);
+		
+		setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		setBackgroundMode(SWT.INHERIT_FORCE);
+		
+		GridLayout gl_composite = new GridLayout(1, false);
+		gl_composite.marginHeight = 0;
+		gl_composite.marginWidth = 50;
+		setLayout(gl_composite);
+		
+		Label titleLabel = new Label(this, SWT.NONE);
+		titleLabel.setFont(SWTResourceManager.getFont("微软雅黑", 12, SWT.NORMAL));
+		titleLabel.setForeground(ColorConstants.TITLE_FONT_COLOR);
+		titleLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		title.bind(titleLabel::setText);
+		
+		StyledText contentText = new StyledText(this, SWT.WRAP | SWT.MULTI);
+		contentText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		contentText.setLineSpacing(10);
+		contentText.setIndent(30);
+		contentText.setFont(SWTResourceManager.getFont("微软雅黑", 12, SWT.NORMAL));
+		contentText.setForeground(ColorConstants.FONT_BLACK_COLOR);
+		editable.bind(contentText::setEditable);
+		content.bindBidirectional(contentText::setText, contentText::getText, t -> contentText.addModifyListener(e -> t.change()));
+		contentTextGet = () -> contentText;
+		
+		Label memoTips = new Label(this, SWT.RIGHT);
+		memoTips.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		content.bind(t -> memoTips.setText("(" + t.length() + "/ " + "500)"));
+	}
+	
+	/**
+	 * @Description: 设置标题
+	 * @author chenxw
+	 * @param title
+	 */
+	public void setTitle(String title) {
+		this.title.set(title);
+	}
+	
+	/**
+	 * @Description: 设置可编辑状态
+	 * @author chenxw
+	 * @param editable 
+	 */
+	public void setEditable(boolean editable) {
+		this.editable.set(editable);
+	}
+	
+	@Override
+	public void addChangeListener(ChangeListener changeListener) {
+		content.addChangeListener(changeListener);
+	}
+	
+	@Override
+	public String get() {
+		return content.get();
+	}
+	
+	@Override
+	public void set(String content) {
+		this.content.set(content);
+	}
+	
+	@Override
+	public Supplier<Control> getVerifyControl() {
+		return contentTextGet;
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/text/FStyledText.java b/com.gx.obe.component/src/com/gx/obe/component/text/FStyledText.java
new file mode 100644
index 00000000..122e7094
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/text/FStyledText.java
@@ -0,0 +1,66 @@
+package com.gx.obe.component.text;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyleRange;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Composite;
+
+import com.swtdesigner.SWTResourceManager;
+
+public class FStyledText extends StyledText {
+	
+	private StringBuilder textBuilder = new StringBuilder();
+	
+	private List<StyleRange> styleRangeList = new ArrayList<>();
+	
+	public FStyledText(Composite parent) {
+		super(parent, SWT.MULTI | SWT.WRAP | SWT.V_SCROLL | SWT.READ_ONLY);
+		this.setFont(SWTResourceManager.getFont("微软雅黑", 10, SWT.NORMAL));
+	}
+	
+	public void clear() {
+		textBuilder.delete(0, textBuilder.length());
+		styleRangeList.clear();
+	}
+	
+	public void refresh() {
+		setText(textBuilder.toString());
+		styleRangeList.forEach(this::setStyleRange);
+	}
+	
+	public void add(String title, String content, Color contentForeground, int contentFontStyle) {
+		if (textBuilder.length() != 0) textBuilder.append("    ");
+		addItem(title, content, contentForeground, contentFontStyle);
+		textBuilder.append(title).append(content);
+	}
+	
+	public void addWrap(String title, String content, Color contentForeground, int contentFontStyle) {
+		textBuilder.append("\r\n");
+		addItem(title, content, contentForeground, contentFontStyle);
+		textBuilder.append(title).append(content);
+	}
+	
+	private void addItem(String title, String content, Color contentForeground, int contentFontStyle) {
+		StyleRange titleStyleRange = new StyleRange();
+		titleStyleRange.start = textBuilder.length();
+		titleStyleRange.length = title.length();
+		titleStyleRange.foreground = SWTResourceManager.getColor(SWT.COLOR_BLUE);
+		titleStyleRange.fontStyle = SWT.BOLD;
+		styleRangeList.add(titleStyleRange);
+		
+		StyleRange contentStyleRange = new StyleRange();
+		contentStyleRange.start = textBuilder.length() + title.length();
+		contentStyleRange.length = content.length();
+		contentStyleRange.foreground = contentForeground;
+		contentStyleRange.fontStyle = contentFontStyle;
+		styleRangeList.add(contentStyleRange);
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/text/IntegerText.java b/com.gx.obe.component/src/com/gx/obe/component/text/IntegerText.java
new file mode 100644
index 00000000..76e3f775
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/text/IntegerText.java
@@ -0,0 +1,32 @@
+package com.gx.obe.component.text;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+
+import com.gx.obe.bind.view.ChangeListener;
+import com.gx.obe.bind.view.RView;
+import com.gx.obe.component.verify.IntegerVerifyListener;
+
+public class IntegerText extends Text implements RView<Integer> {
+	
+	public IntegerText(Composite parent, int style) {
+		super(parent, style);
+		addVerifyListener(new IntegerVerifyListener(false));
+	}
+	
+	@Override
+	public void addChangeListener(ChangeListener changeListener) {
+		addModifyListener(e -> changeListener.change());
+	}
+	
+	@Override
+	public Integer get() {
+		String text = getText();
+		if (text.isEmpty()) return null;
+		return Integer.valueOf(text);
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/text/MoneyText.java b/com.gx.obe.component/src/com/gx/obe/component/text/MoneyText.java
new file mode 100644
index 00000000..f02efe36
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/text/MoneyText.java
@@ -0,0 +1,52 @@
+package com.gx.obe.component.text;
+
+import java.math.BigDecimal;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+
+import com.gx.obe.bind.view.ChangeListener;
+import com.gx.obe.bind.view.MView;
+import com.gx.obe.component.verify.MoneyVerifyListener;
+import com.gx.obe.components.core.enumeration.CommonEnum;
+import com.gx.obe.components.core.util.MoneyUtils;
+
+/**
+ * @Description: 金额输入框
+ * @author chenxw
+ */
+public class MoneyText extends Text implements MView<BigDecimal> {
+	
+	private final String unit;
+	
+	/**
+	 * @author chenxw
+	 * @param parent
+	 * @param style
+	 * @param unit
+	 */
+	public MoneyText(Composite parent, int style, String unit) {
+		super(parent, style);
+		this.unit = unit;
+		addVerifyListener(new MoneyVerifyListener(false, CommonEnum.WAN_YUAN.equals(CommonEnum.getPriceUnitType(unit))));
+	}
+	
+	@Override
+	public void set(BigDecimal t) {
+		setText(MoneyUtils.getMoneyFormatByUnit(t, unit));
+	}
+	
+	@Override
+	public BigDecimal get() {
+		return MoneyUtils.getMoneyFromText(getText(), unit);
+	}
+	
+	@Override
+	public void addChangeListener(ChangeListener changeListener) {
+		addModifyListener(e -> changeListener.change());
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.component/src/com/gx/obe/component/text/OrdinaryMoneyText.java b/com.gx.obe.component/src/com/gx/obe/component/text/OrdinaryMoneyText.java
new file mode 100644
index 00000000..b8e6d241
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/text/OrdinaryMoneyText.java
@@ -0,0 +1,84 @@
+package com.gx.obe.component.text;
+
+import java.math.BigDecimal;
+import java.util.Optional;
+import java.util.function.UnaryOperator;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.widgets.ESepator;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import com.gx.obe.bind.prop.RProp;
+import com.gx.obe.bind.view.ChangeListener;
+import com.gx.obe.bind.view.RView;
+import com.swtdesigner.SWTResourceManager;
+
+/**
+ * @Description: 小写金额文本框
+ * @author chenxw
+ */
+public class OrdinaryMoneyText extends Composite implements RView<UnaryOperator<BigDecimal>> {
+	
+	/**
+	 * @Description: 金额
+	 */
+	private RProp<BigDecimal> moneyProp = new RProp<BigDecimal>();
+	
+	/**
+	 * @author chenxw
+	 * @param parent
+	 * @param unit
+	 */
+	public OrdinaryMoneyText(Composite parent, String unit) {
+		super(parent, SWT.NONE);
+		setBackground(SWTResourceManager.getColor(239, 243, 248));
+		setBackgroundMode(SWT.INHERIT_FORCE);
+		GridLayout gridLayout = new GridLayout(1, false);
+		gridLayout.marginWidth = 35;
+		setLayout(gridLayout);
+		
+		Composite composite = new Composite(this, SWT.NONE);
+		GridLayout gl_composite = new GridLayout(3, false);
+		gl_composite.verticalSpacing = 10;
+		gl_composite.horizontalSpacing = 25;
+		composite.setLayout(gl_composite);
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));
+		
+		Label lblNewLabel = new Label(composite, SWT.NONE);
+		lblNewLabel.setFont(SWTResourceManager.getFont("微软雅黑", 20, SWT.NORMAL));
+		lblNewLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+		lblNewLabel.setText("Â¥");
+		
+		MoneyText text = new MoneyText(composite, SWT.RIGHT, unit);
+		text.setForeground(SWTResourceManager.getColor(204, 204, 204));
+		text.setFont(SWTResourceManager.getFont("微软雅黑", 20, SWT.NORMAL));
+		text.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		moneyProp.reader(text);
+		
+		Label lblNewLabel_1 = new Label(composite, SWT.NONE);
+		lblNewLabel_1.setForeground(SWTResourceManager.getColor(157, 157, 157));
+		lblNewLabel_1.setText("万元");
+		
+		ESepator timeSep = new ESepator(composite, SWT.HORIZONTAL);
+		timeSep.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
+		timeSep.setBackground(SWTResourceManager.getColor(153, 153, 153));
+		timeSep.setLineWidth(3);
+	}
+	
+	@Override
+	public UnaryOperator<BigDecimal> get() {
+		return t -> Optional.ofNullable(moneyProp.get()).orElse(t);
+	}
+	
+	@Override
+	public void addChangeListener(ChangeListener changeListener) {
+		moneyProp.addChangeListener(changeListener);
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/tree/ITree.java b/com.gx.obe.component/src/com/gx/obe/component/tree/ITree.java
new file mode 100644
index 00000000..d9b9175b
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/tree/ITree.java
@@ -0,0 +1,47 @@
+package com.gx.obe.component.tree;
+
+import java.util.List;
+
+/**
+ * @Description: æ ‘
+ * @author chenxw
+ */
+public interface ITree<T extends ITree<T>> {
+	
+	/**
+	 * @Description: 获取树根节点
+	 * @author chenxw
+	 * @return
+	 */
+	ITree<T> getRoot();
+	
+	/**
+	 * @Description: 子树列表
+	 * @author chenxw
+	 * @return
+	 */
+	List<? extends T> getITrees();
+	
+	/**
+	 * @Description: 名称
+	 * @author chenxw
+	 * @return
+	 */
+	String getName();
+	
+	/**
+	 * @Description: é”®
+	 * @author chenxw
+	 * @return
+	 */
+	String getKey();
+	
+	/**
+	 * @Description: 值
+	 * @author chenxw
+	 * @param key
+	 * @return
+	 */
+	String getValue(Object key);
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/tree/ParseTrees.java b/com.gx.obe.component/src/com/gx/obe/component/tree/ParseTrees.java
new file mode 100644
index 00000000..ba161ef3
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/tree/ParseTrees.java
@@ -0,0 +1,214 @@
+package com.gx.obe.component.tree;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.gx.obe.util.utils.CollectionUtils;
+
+/**
+ * @Description: 解析树
+ * @author chenxw
+ */
+public class ParseTrees<T extends ITree<T>> {
+	
+	/**
+	 * @Description: 叶子节点列表
+	 */
+	private List<Tree<T>> leafList = new ArrayList<>();
+	
+	/**
+	 * @Description: 树横向合并列表
+	 */
+	private List<TreeSpan> wideSpanList = new ArrayList<>();
+	/**
+	 * @Description: 树竖向合并列表
+	 */
+	private List<TreeSpan> highSpanList = new ArrayList<>();
+	
+	/**
+	 * @Description: 高度
+	 */
+	private int height;
+	/**
+	 * @Description: 叶子节点个数
+	 */
+	private int leafCount;
+	
+	/**
+	 * @Description: 空树
+	 */
+	private final Tree<T> NULL_TREE = new Tree<>();
+	
+	/**
+	 * @author chenxw
+	 * @param iTreeList
+	 */
+	public ParseTrees(List<? extends T> iTreeList) {
+		if (CollectionUtils.isNull(iTreeList)) {
+			return;
+		}
+		initLeafList(iTreeList, 0, null);
+		initHeight(iTreeList, 1);
+		
+		initHighSpanList();
+		initWideSpanList(iTreeList, 0, 0);
+		
+		initLeafCount();
+	}
+	
+	/**
+	 * @Description: 初始化叶子节点列表
+	 * @author chenxw
+	 * @param iTreeList
+	 * @param level
+	 * @param parent
+	 */
+	private void initLeafList(List<? extends T> iTreeList, int level, Tree<T> parent) {
+		for (T iTree : iTreeList) {
+			Tree<T> tree = new Tree<>();
+			tree.setLevel(level);
+			tree.setParent(parent);
+			tree.setValue(iTree);
+			List<? extends T> iTrees = iTree.getITrees();
+			if (CollectionUtils.isNull(iTrees)) leafList.add(tree);
+			else initLeafList(iTrees, level + 1, tree);
+		}
+	}
+	
+	/**
+	 * @Description: 初始化树横向合并列表
+	 * @author chenxw
+	 * @param iTreeList
+	 * @param level
+	 * @param leafIndex
+	 */
+	private int initWideSpanList(List<? extends ITree<T>> iTreeList, int level, int leafIndex) {
+		for (ITree<T> iTree : iTreeList) {
+			List<? extends ITree<T>> iTrees = iTree.getITrees();
+			if (CollectionUtils.isNull(iTrees)) leafIndex++;
+			else {
+				TreeSpan span = new TreeSpan();
+				span.setLevel(level);
+				span.setLeafIndex(leafIndex);
+				span.setSpanCount(iTrees.size());
+				wideSpanList.add(span);
+				leafIndex = initWideSpanList(iTree.getITrees(), level + 1, leafIndex);
+			}
+		}
+		return leafIndex;
+	}
+	
+	/**
+	 * @Description: 初始化树竖向合并列表
+	 * @author chenxw
+	 */
+	private void initHighSpanList() {
+		for (int i = 0; i < leafList.size(); i++) {
+			Tree<T> tree = leafList.get(i);
+			if (height > tree.getLevel()) {
+				TreeSpan span = new TreeSpan();
+				span.setLevel(tree.getLevel());
+				span.setLeafIndex(i);
+				span.setSpanCount(height - tree.getLevel());
+				highSpanList.add(span);
+			}
+		}
+	}
+	
+	/**
+	 * @Description: 初始化树的高度
+	 * @author chenxw
+	 * @param iTreeList
+	 * @param level
+	 */
+	private void initHeight(List<? extends ITree<T>> iTreeList, int level) {
+		for (ITree<T> iTree : iTreeList) {
+			List<? extends ITree<T>> iTrees = iTree.getITrees();
+			if (CollectionUtils.isNull(iTrees)) height = Math.max(height, level);
+			else initHeight(iTrees, level + 1);
+		}
+	}
+	
+	/**
+	 * @Description: 初始化叶子节点的数量
+	 * @author chenxw
+	 */
+	private void initLeafCount() {
+		leafCount = leafList.size();
+	}
+	
+	/**
+	 * @Description: 根据叶子节点索引获取叶子节点
+	 * @author chenxw
+	 * @param leafIndex
+	 * @return
+	 */
+	public T get(int leafIndex) {
+		return leafList.get(leafIndex).getValue();
+	}
+	
+	/**
+	 * @Description: 根据层数及叶子节点索引获取对应包含这个叶子节点是节点
+	 * @author chenxw
+	 * @param level
+	 * @param leafIndex
+	 * @return
+	 */
+	public ITree<T> getITree(int level, int leafIndex) {
+		return getTree(level, leafList.get(leafIndex)).getValue();
+	}
+	
+	/**
+	 * @Description: 根据层数递归获取节点
+	 * @author chenxw
+	 * @param level
+	 * @param tree
+	 * @return
+	 */
+	private Tree<T> getTree(int level, Tree<T> tree) {
+		if (level > tree.getLevel() || level < 0) {
+			return NULL_TREE;
+		}
+		if (level == tree.getLevel()) {
+			return tree;
+		}
+		return getTree(level, tree.getParent());
+	}
+	
+	/**
+	 * @Description: 获取树横向合并列表
+	 * @author chenxw
+	 * @return
+	 */
+	public List<TreeSpan> getWideSpanList() {
+		return wideSpanList;
+	}
+	
+	/**
+	 * @Description: 获取树竖向合并列表
+	 * @author chenxw
+	 * @return
+	 */
+	public List<TreeSpan> getHighSpanList() {
+		return highSpanList;
+	}
+	
+	/**
+	 * @Description: 获取数的高度
+	 * @author chenxw
+	 * @return
+	 */
+	public int getHeight() {
+		return height;
+	}
+	
+	/**
+	 * @Description: 获取叶子节点数
+	 * @author chenxw
+	 * @return
+	 */
+	public int getLeafCount() {
+		return leafCount;
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/tree/Tree.java b/com.gx.obe.component/src/com/gx/obe/component/tree/Tree.java
new file mode 100644
index 00000000..f3357d00
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/tree/Tree.java
@@ -0,0 +1,46 @@
+package com.gx.obe.component.tree;
+
+/**
+ * @Description: æ ‘
+ * @author chenxw
+ */
+class Tree<T extends ITree<T>> {
+	
+	/**
+	 * @Description: 层数
+	 */
+	private int level;
+	/**
+	 * @Description: 父节点
+	 */
+	private Tree<T> parent;
+	/**
+	 * @Description: 值
+	 */
+	private T value;
+	
+	public int getLevel() {
+		return level;
+	}
+	
+	public void setLevel(int level) {
+		this.level = level;
+	}
+	
+	public Tree<T> getParent() {
+		return parent;
+	}
+	
+	public void setParent(Tree<T> parent) {
+		this.parent = parent;
+	}
+	
+	public T getValue() {
+		return value;
+	}
+	
+	public void setValue(T value) {
+		this.value = value;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.component/src/com/gx/obe/component/tree/TreeSpan.java b/com.gx.obe.component/src/com/gx/obe/component/tree/TreeSpan.java
new file mode 100644
index 00000000..b5402341
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/tree/TreeSpan.java
@@ -0,0 +1,35 @@
+package com.gx.obe.component.tree;
+
+public class TreeSpan {
+	
+	private int level;
+	
+	private int leafIndex;
+	
+	private int spanCount;
+	
+	public int getLevel() {
+		return level;
+	}
+	
+	public void setLevel(int level) {
+		this.level = level;
+	}
+	
+	public int getLeafIndex() {
+		return leafIndex;
+	}
+	
+	public void setLeafIndex(int leafIndex) {
+		this.leafIndex = leafIndex;
+	}
+	
+	public int getSpanCount() {
+		return spanCount;
+	}
+	
+	public void setSpanCount(int spanCount) {
+		this.spanCount = spanCount;
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/utils/CompositeUtils.java b/com.gx.obe.component/src/com/gx/obe/component/utils/CompositeUtils.java
new file mode 100644
index 00000000..b6189c2a
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/utils/CompositeUtils.java
@@ -0,0 +1,24 @@
+package com.gx.obe.component.utils;
+
+import java.util.Arrays;
+import java.util.Optional;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public class CompositeUtils {
+	
+	public static void disposeChildren(Composite composite) {
+		Arrays.stream(composite.getChildren()).forEach(Control::dispose);
+	}
+	
+	public static void notifyMouseUp(Composite composite) {
+		CompositeUtils.getFirst(composite).ifPresent(t -> t.notifyListeners(SWT.MouseUp, null));
+	}
+	
+	public static Optional<Control> getFirst(Composite composite) {
+		return Arrays.stream(composite.getChildren()).findFirst();
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/verify/FormVerify.java b/com.gx.obe.component/src/com/gx/obe/component/verify/FormVerify.java
new file mode 100644
index 00000000..96ee3e8e
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/verify/FormVerify.java
@@ -0,0 +1,57 @@
+package com.gx.obe.component.verify;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
+import org.eclipse.swt.core.MessageDialog;
+import org.eclipse.swt.widgets.Control;
+
+import com.gx.obe.bind.fun.Fun;
+
+public class FormVerify {
+	
+	List<Data> datas = new ArrayList<>();
+	
+	public <T> void verify(Verify<T> verify, Function<T, Boolean> discontentCondition, String message) {
+		datas.add(new Data(verify.getVerifyControl(), Fun.of(discontentCondition).toGet(verify::get), message));
+	}
+	
+	public void verify(Control control, Supplier<Boolean> discontentCondition, String message) {
+		datas.add(new Data(() -> control, discontentCondition, message));
+	}
+	
+	public void add(FormVerify formVerify) {
+		datas.addAll(formVerify.getDatas());
+	}
+	
+	public boolean isFail() {
+		for (Data data : datas) {
+			if (data.discontentCondition.get()) {
+				MessageDialog.openWarning(data.controlGet.get().getShell(), data.message);
+				data.controlGet.get().setFocus();
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	private List<Data> getDatas() {
+		return datas;
+	}
+	
+	class Data {
+		Supplier<Control> controlGet;
+		Supplier<Boolean> discontentCondition;
+		String message;
+		
+		public Data(Supplier<Control> controlGet, Supplier<Boolean> discontentCondition, String message) {
+			this.controlGet = controlGet;
+			this.discontentCondition = discontentCondition;
+			this.message = message;
+		}
+		
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/verify/IntegerVerifyListener.java b/com.gx.obe.component/src/com/gx/obe/component/verify/IntegerVerifyListener.java
new file mode 100644
index 00000000..bdbf52ec
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/verify/IntegerVerifyListener.java
@@ -0,0 +1,50 @@
+package com.gx.obe.component.verify;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @Description: 整数验证监听
+ * @author chenxw
+ */
+public class IntegerVerifyListener implements VerifyListener {
+	
+	private boolean negativeSupport;
+	
+	/**
+	 * @author chenxw
+	 * @param negativeSupport
+	 */
+	public IntegerVerifyListener(boolean negativeSupport) {
+		this.negativeSupport = negativeSupport;
+	}
+	
+	@Override
+	public void verifyText(VerifyEvent event) {
+		if (event.keyCode == SWT.BS || event.keyCode == SWT.DEL) {
+			event.doit = true;
+			return;
+		}
+		event.doit = false;
+		char myChar = event.character;
+		Text text = (Text) event.widget;
+		String textStr = text.getText();
+		if (myChar == '-') {
+			if (negativeSupport) {
+				if (textStr.indexOf("-") == -1) {
+					if (event.start == 0) {
+						event.doit = true;
+					}
+				}
+			}
+		} else {
+			// 其余的只能输入数字
+			if ((myChar >= '0' && myChar <= '9')) {
+				event.doit = true;
+			}
+		}
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/verify/MoneyVerifyListener.java b/com.gx.obe.component/src/com/gx/obe/component/verify/MoneyVerifyListener.java
new file mode 100644
index 00000000..0d90939e
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/verify/MoneyVerifyListener.java
@@ -0,0 +1,89 @@
+package com.gx.obe.component.verify;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.widgets.Text;
+
+/**
+ * @Description: 金额验证接听
+ * @author chenxw
+ */
+public class MoneyVerifyListener implements VerifyListener {
+	
+	private boolean negativeSupport;
+	private boolean tenThousand;
+	
+	/**
+	 * @author chenxw
+	 * @param negativeSupport
+	 * @param tenThousand
+	 */
+	public MoneyVerifyListener(boolean negativeSupport, boolean tenThousand) {
+		this.negativeSupport = negativeSupport;
+		this.tenThousand = tenThousand;
+	}
+	
+	@Override
+	public void verifyText(VerifyEvent event) {
+		if (event.keyCode == SWT.BS || event.keyCode == SWT.DEL) {
+			event.doit = true;
+			return;
+		}
+		event.doit = false;
+		char myChar = event.character;
+		Text text = (Text) event.widget;
+		String textStr = text.getText();
+		
+		// 当通过代码set值时
+		if (myChar == 0) {
+			event.doit = true;
+		}
+		// 当输入负号时
+		else if (myChar == '-') {
+			// 支持负数
+			if (negativeSupport) {
+				// 当前文本中没有负号
+				if (textStr.indexOf("-") == -1) {
+					// 第一次输入
+					if (event.start == 0) {
+						event.doit = true;
+					}
+				}
+			}
+		}
+		// 当输入小数点时
+		else if (myChar == '.') {
+			// 当前文本中没有小数点
+			if (textStr.indexOf(".") == -1) {
+				// 不是第一次输入
+				if (event.start != 0) {
+					event.doit = true;
+				}
+			}
+		}
+		// 当输入数字时
+		else if ((myChar >= '0' && myChar <= '9')) {
+			// 第一次输入
+			if (textStr.isEmpty()) {
+				event.doit = true;
+			} else {
+				String integralPart = textStr;
+				int indexOf = textStr.indexOf('.');
+				// 当前文本中有小数点时截取整数部分
+				if (indexOf != -1) {
+					integralPart = textStr.substring(0, indexOf);
+				}
+				// 当前整数部分是以负号开始时去掉负号
+				if (integralPart.startsWith("-")) {
+					integralPart = integralPart.substring(1);
+				}
+				// 去掉负号后的整数部分长度不能超过金额限定长度
+				if (integralPart.length() < (tenThousand ? 10 : 14)) {
+					event.doit = true;
+				}
+			}
+		}
+	}
+	
+}
diff --git a/com.gx.obe.component/src/com/gx/obe/component/verify/Verify.java b/com.gx.obe.component/src/com/gx/obe/component/verify/Verify.java
new file mode 100644
index 00000000..2eaf6acd
--- /dev/null
+++ b/com.gx.obe.component/src/com/gx/obe/component/verify/Verify.java
@@ -0,0 +1,11 @@
+package com.gx.obe.component.verify;
+
+import java.util.function.Supplier;
+
+import org.eclipse.swt.widgets.Control;
+
+import com.gx.obe.bind.view.Read;
+
+public interface Verify<T> extends Read<T> {
+	Supplier<Control> getVerifyControl();
+}
\ No newline at end of file
diff --git a/com.gx.obe.component/src/org/eclipse/wb/swt/SWTResourceManager.java b/com.gx.obe.component/src/org/eclipse/wb/swt/SWTResourceManager.java
new file mode 100644
index 00000000..d8a28580
--- /dev/null
+++ b/com.gx.obe.component/src/org/eclipse/wb/swt/SWTResourceManager.java
@@ -0,0 +1,447 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Google, Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *    Google, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wb.swt;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Cursor;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Display;
+
+/**
+ * Utility class for managing OS resources associated with SWT controls such as colors, fonts, images, etc.
+ * <p>
+ * !!! IMPORTANT !!! Application code must explicitly invoke the <code>dispose()</code> method to release the
+ * operating system resources managed by cached objects when those objects and OS resources are no longer
+ * needed (e.g. on application shutdown)
+ * <p>
+ * This class may be freely distributed as part of any application or plugin.
+ * <p>
+ * @author scheglov_ke
+ * @author Dan Rubel
+ */
+public class SWTResourceManager {
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Color
+	//
+	////////////////////////////////////////////////////////////////////////////
+	private static Map<RGB, Color> m_colorMap = new HashMap<RGB, Color>();
+	/**
+	 * Returns the system {@link Color} matching the specific ID.
+	 * 
+	 * @param systemColorID
+	 *            the ID value for the color
+	 * @return the system {@link Color} matching the specific ID
+	 */
+	public static Color getColor(int systemColorID) {
+		Display display = Display.getCurrent();
+		return display.getSystemColor(systemColorID);
+	}
+	/**
+	 * Returns a {@link Color} given its red, green and blue component values.
+	 * 
+	 * @param r
+	 *            the red component of the color
+	 * @param g
+	 *            the green component of the color
+	 * @param b
+	 *            the blue component of the color
+	 * @return the {@link Color} matching the given red, green and blue component values
+	 */
+	public static Color getColor(int r, int g, int b) {
+		return getColor(new RGB(r, g, b));
+	}
+	/**
+	 * Returns a {@link Color} given its RGB value.
+	 * 
+	 * @param rgb
+	 *            the {@link RGB} value of the color
+	 * @return the {@link Color} matching the RGB value
+	 */
+	public static Color getColor(RGB rgb) {
+		Color color = m_colorMap.get(rgb);
+		if (color == null) {
+			Display display = Display.getCurrent();
+			color = new Color(display, rgb);
+			m_colorMap.put(rgb, color);
+		}
+		return color;
+	}
+	/**
+	 * Dispose of all the cached {@link Color}'s.
+	 */
+	public static void disposeColors() {
+		for (Color color : m_colorMap.values()) {
+			color.dispose();
+		}
+		m_colorMap.clear();
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Image
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Maps image paths to images.
+	 */
+	private static Map<String, Image> m_imageMap = new HashMap<String, Image>();
+	/**
+	 * Returns an {@link Image} encoded by the specified {@link InputStream}.
+	 * 
+	 * @param stream
+	 *            the {@link InputStream} encoding the image data
+	 * @return the {@link Image} encoded by the specified input stream
+	 */
+	protected static Image getImage(InputStream stream) throws IOException {
+		try {
+			Display display = Display.getCurrent();
+			ImageData data = new ImageData(stream);
+			if (data.transparentPixel > 0) {
+				return new Image(display, data, data.getTransparencyMask());
+			}
+			return new Image(display, data);
+		} finally {
+			stream.close();
+		}
+	}
+	/**
+	 * Returns an {@link Image} stored in the file at the specified path.
+	 * 
+	 * @param path
+	 *            the path to the image file
+	 * @return the {@link Image} stored in the file at the specified path
+	 */
+	public static Image getImage(String path) {
+		Image image = m_imageMap.get(path);
+		if (image == null) {
+			try {
+				image = getImage(new FileInputStream(path));
+				m_imageMap.put(path, image);
+			} catch (Exception e) {
+				image = getMissingImage();
+				m_imageMap.put(path, image);
+			}
+		}
+		return image;
+	}
+	/**
+	 * Returns an {@link Image} stored in the file at the specified path relative to the specified class.
+	 * 
+	 * @param clazz
+	 *            the {@link Class} relative to which to find the image
+	 * @param path
+	 *            the path to the image file, if starts with <code>'/'</code>
+	 * @return the {@link Image} stored in the file at the specified path
+	 */
+	public static Image getImage(Class<?> clazz, String path) {
+		String key = clazz.getName() + '|' + path;
+		Image image = m_imageMap.get(key);
+		if (image == null) {
+			try {
+				image = getImage(clazz.getResourceAsStream(path));
+				m_imageMap.put(key, image);
+			} catch (Exception e) {
+				image = getMissingImage();
+				m_imageMap.put(key, image);
+			}
+		}
+		return image;
+	}
+	private static final int MISSING_IMAGE_SIZE = 10;
+	/**
+	 * @return the small {@link Image} that can be used as placeholder for missing image.
+	 */
+	private static Image getMissingImage() {
+		Image image = new Image(Display.getCurrent(), MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE);
+		//
+		GC gc = new GC(image);
+		gc.setBackground(getColor(SWT.COLOR_RED));
+		gc.fillRectangle(0, 0, MISSING_IMAGE_SIZE, MISSING_IMAGE_SIZE);
+		gc.dispose();
+		//
+		return image;
+	}
+	/**
+	 * Style constant for placing decorator image in top left corner of base image.
+	 */
+	public static final int TOP_LEFT = 1;
+	/**
+	 * Style constant for placing decorator image in top right corner of base image.
+	 */
+	public static final int TOP_RIGHT = 2;
+	/**
+	 * Style constant for placing decorator image in bottom left corner of base image.
+	 */
+	public static final int BOTTOM_LEFT = 3;
+	/**
+	 * Style constant for placing decorator image in bottom right corner of base image.
+	 */
+	public static final int BOTTOM_RIGHT = 4;
+	/**
+	 * Internal value.
+	 */
+	protected static final int LAST_CORNER_KEY = 5;
+	/**
+	 * Maps images to decorated images.
+	 */
+	@SuppressWarnings("unchecked")
+	private static Map<Image, Map<Image, Image>>[] m_decoratedImageMap = new Map[LAST_CORNER_KEY];
+	/**
+	 * Returns an {@link Image} composed of a base image decorated by another image.
+	 * 
+	 * @param baseImage
+	 *            the base {@link Image} that should be decorated
+	 * @param decorator
+	 *            the {@link Image} to decorate the base image
+	 * @return {@link Image} The resulting decorated image
+	 */
+	public static Image decorateImage(Image baseImage, Image decorator) {
+		return decorateImage(baseImage, decorator, BOTTOM_RIGHT);
+	}
+	/**
+	 * Returns an {@link Image} composed of a base image decorated by another image.
+	 * 
+	 * @param baseImage
+	 *            the base {@link Image} that should be decorated
+	 * @param decorator
+	 *            the {@link Image} to decorate the base image
+	 * @param corner
+	 *            the corner to place decorator image
+	 * @return the resulting decorated {@link Image}
+	 */
+	public static Image decorateImage(final Image baseImage, final Image decorator, final int corner) {
+		if (corner <= 0 || corner >= LAST_CORNER_KEY) {
+			throw new IllegalArgumentException("Wrong decorate corner");
+		}
+		Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[corner];
+		if (cornerDecoratedImageMap == null) {
+			cornerDecoratedImageMap = new HashMap<Image, Map<Image, Image>>();
+			m_decoratedImageMap[corner] = cornerDecoratedImageMap;
+		}
+		Map<Image, Image> decoratedMap = cornerDecoratedImageMap.get(baseImage);
+		if (decoratedMap == null) {
+			decoratedMap = new HashMap<Image, Image>();
+			cornerDecoratedImageMap.put(baseImage, decoratedMap);
+		}
+		//
+		Image result = decoratedMap.get(decorator);
+		if (result == null) {
+			Rectangle bib = baseImage.getBounds();
+			Rectangle dib = decorator.getBounds();
+			//
+			result = new Image(Display.getCurrent(), bib.width, bib.height);
+			//
+			GC gc = new GC(result);
+			gc.drawImage(baseImage, 0, 0);
+			if (corner == TOP_LEFT) {
+				gc.drawImage(decorator, 0, 0);
+			} else if (corner == TOP_RIGHT) {
+				gc.drawImage(decorator, bib.width - dib.width, 0);
+			} else if (corner == BOTTOM_LEFT) {
+				gc.drawImage(decorator, 0, bib.height - dib.height);
+			} else if (corner == BOTTOM_RIGHT) {
+				gc.drawImage(decorator, bib.width - dib.width, bib.height - dib.height);
+			}
+			gc.dispose();
+			//
+			decoratedMap.put(decorator, result);
+		}
+		return result;
+	}
+	/**
+	 * Dispose all of the cached {@link Image}'s.
+	 */
+	public static void disposeImages() {
+		// dispose loaded images
+		{
+			for (Image image : m_imageMap.values()) {
+				image.dispose();
+			}
+			m_imageMap.clear();
+		}
+		// dispose decorated images
+		for (int i = 0; i < m_decoratedImageMap.length; i++) {
+			Map<Image, Map<Image, Image>> cornerDecoratedImageMap = m_decoratedImageMap[i];
+			if (cornerDecoratedImageMap != null) {
+				for (Map<Image, Image> decoratedMap : cornerDecoratedImageMap.values()) {
+					for (Image image : decoratedMap.values()) {
+						image.dispose();
+					}
+					decoratedMap.clear();
+				}
+				cornerDecoratedImageMap.clear();
+			}
+		}
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Font
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Maps font names to fonts.
+	 */
+	private static Map<String, Font> m_fontMap = new HashMap<String, Font>();
+	/**
+	 * Maps fonts to their bold versions.
+	 */
+	private static Map<Font, Font> m_fontToBoldFontMap = new HashMap<Font, Font>();
+	/**
+	 * Returns a {@link Font} based on its name, height and style.
+	 * 
+	 * @param name
+	 *            the name of the font
+	 * @param height
+	 *            the height of the font
+	 * @param style
+	 *            the style of the font
+	 * @return {@link Font} The font matching the name, height and style
+	 */
+	public static Font getFont(String name, int height, int style) {
+		return getFont(name, height, style, false, false);
+	}
+	/**
+	 * Returns a {@link Font} based on its name, height and style. Windows-specific strikeout and underline
+	 * flags are also supported.
+	 * 
+	 * @param name
+	 *            the name of the font
+	 * @param size
+	 *            the size of the font
+	 * @param style
+	 *            the style of the font
+	 * @param strikeout
+	 *            the strikeout flag (warning: Windows only)
+	 * @param underline
+	 *            the underline flag (warning: Windows only)
+	 * @return {@link Font} The font matching the name, height, style, strikeout and underline
+	 */
+	public static Font getFont(String name, int size, int style, boolean strikeout, boolean underline) {
+		String fontName = name + '|' + size + '|' + style + '|' + strikeout + '|' + underline;
+		Font font = m_fontMap.get(fontName);
+		if (font == null) {
+			FontData fontData = new FontData(name, size, style);
+			if (strikeout || underline) {
+				try {
+					Class<?> logFontClass = Class.forName("org.eclipse.swt.internal.win32.LOGFONT"); //$NON-NLS-1$
+					Object logFont = FontData.class.getField("data").get(fontData); //$NON-NLS-1$
+					if (logFont != null && logFontClass != null) {
+						if (strikeout) {
+							logFontClass.getField("lfStrikeOut").set(logFont, Byte.valueOf((byte) 1)); //$NON-NLS-1$
+						}
+						if (underline) {
+							logFontClass.getField("lfUnderline").set(logFont, Byte.valueOf((byte) 1)); //$NON-NLS-1$
+						}
+					}
+				} catch (Throwable e) {
+					System.err.println("Unable to set underline or strikeout" + " (probably on a non-Windows platform). " + e); //$NON-NLS-1$ //$NON-NLS-2$
+				}
+			}
+			font = new Font(Display.getCurrent(), fontData);
+			m_fontMap.put(fontName, font);
+		}
+		return font;
+	}
+	/**
+	 * Returns a bold version of the given {@link Font}.
+	 * 
+	 * @param baseFont
+	 *            the {@link Font} for which a bold version is desired
+	 * @return the bold version of the given {@link Font}
+	 */
+	public static Font getBoldFont(Font baseFont) {
+		Font font = m_fontToBoldFontMap.get(baseFont);
+		if (font == null) {
+			FontData fontDatas[] = baseFont.getFontData();
+			FontData data = fontDatas[0];
+			font = new Font(Display.getCurrent(), data.getName(), data.getHeight(), SWT.BOLD);
+			m_fontToBoldFontMap.put(baseFont, font);
+		}
+		return font;
+	}
+	/**
+	 * Dispose all of the cached {@link Font}'s.
+	 */
+	public static void disposeFonts() {
+		// clear fonts
+		for (Font font : m_fontMap.values()) {
+			font.dispose();
+		}
+		m_fontMap.clear();
+		// clear bold fonts
+		for (Font font : m_fontToBoldFontMap.values()) {
+			font.dispose();
+		}
+		m_fontToBoldFontMap.clear();
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// Cursor
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Maps IDs to cursors.
+	 */
+	private static Map<Integer, Cursor> m_idToCursorMap = new HashMap<Integer, Cursor>();
+	/**
+	 * Returns the system cursor matching the specific ID.
+	 * 
+	 * @param id
+	 *            int The ID value for the cursor
+	 * @return Cursor The system cursor matching the specific ID
+	 */
+	public static Cursor getCursor(int id) {
+		Integer key = Integer.valueOf(id);
+		Cursor cursor = m_idToCursorMap.get(key);
+		if (cursor == null) {
+			cursor = new Cursor(Display.getDefault(), id);
+			m_idToCursorMap.put(key, cursor);
+		}
+		return cursor;
+	}
+	/**
+	 * Dispose all of the cached cursors.
+	 */
+	public static void disposeCursors() {
+		for (Cursor cursor : m_idToCursorMap.values()) {
+			cursor.dispose();
+		}
+		m_idToCursorMap.clear();
+	}
+	////////////////////////////////////////////////////////////////////////////
+	//
+	// General
+	//
+	////////////////////////////////////////////////////////////////////////////
+	/**
+	 * Dispose of cached objects and their underlying OS resources. This should only be called when the cached
+	 * objects are no longer needed (e.g. on application shutdown).
+	 */
+	public static void dispose() {
+		disposeColors();
+		disposeImages();
+		disposeFonts();
+		disposeCursors();
+	}
+}
\ No newline at end of file
diff --git a/com.gx.obe.step/.settings/org.eclipse.core.resources.prefs b/com.gx.obe.step/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..99f26c02
--- /dev/null
+++ b/com.gx.obe.step/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/com.gx.obe.step/src/com/gx/obe/step/dialog/EvaluationStepDialog.java b/com.gx.obe.step/src/com/gx/obe/step/dialog/EvaluationStepDialog.java
index af34cff4..96913743 100644
--- a/com.gx.obe.step/src/com/gx/obe/step/dialog/EvaluationStepDialog.java
+++ b/com.gx.obe.step/src/com/gx/obe/step/dialog/EvaluationStepDialog.java
@@ -324,7 +324,9 @@ public abstract class EvaluationStepDialog extends EDialog {
 		}
 		return evaluationStep;
 	}
-	
+	protected void setStepNameText(String text) {
+		stepNameText.setText(text);
+	}
 	/**
 	 * @Description: 是否新增
 	 * @author chenxw
diff --git a/com.gx.obe.struct/.classpath b/com.gx.obe.struct/.classpath
new file mode 100644
index 00000000..ee85e147
--- /dev/null
+++ b/com.gx.obe.struct/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry exported="true" kind="lib" path="lib/Utils-1.0.0.jar"/>
+	<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="output" path="bin"/>
+</classpath>
diff --git a/com.gx.obe.struct/.gitignore b/com.gx.obe.struct/.gitignore
new file mode 100644
index 00000000..ae3c1726
--- /dev/null
+++ b/com.gx.obe.struct/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/com.gx.obe.struct/.project b/com.gx.obe.struct/.project
new file mode 100644
index 00000000..06a7711e
--- /dev/null
+++ b/com.gx.obe.struct/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>com.gx.obe.struct</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>
diff --git a/com.gx.obe.struct/.settings/org.eclipse.core.resources.prefs b/com.gx.obe.struct/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000..99f26c02
--- /dev/null
+++ b/com.gx.obe.struct/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/com.gx.obe.struct/.settings/org.eclipse.jdt.core.prefs b/com.gx.obe.struct/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000..0c68a61d
--- /dev/null
+++ b/com.gx.obe.struct/.settings/org.eclipse.jdt.core.prefs
@@ -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
diff --git a/com.gx.obe.struct/META-INF/MANIFEST.MF b/com.gx.obe.struct/META-INF/MANIFEST.MF
new file mode 100644
index 00000000..ee116365
--- /dev/null
+++ b/com.gx.obe.struct/META-INF/MANIFEST.MF
@@ -0,0 +1,51 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Struct
+Bundle-SymbolicName: com.gx.obe.struct
+Bundle-Version: 1.0.0.qualifier
+Bundle-Vendor: GX
+Automatic-Module-Name: com.gx.obe.struct
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ com.gx.obe.lib;bundle-version="1.0.0",
+ com.gx.obe.utils;bundle-version="1.0.0",
+ com.gx.obe.components.core,
+ com.gx.obe.business;bundle-version="1.0.0",
+ org.eclipse.swt.core,
+ com.gx.obe.common.file;bundle-version="1.0.0",
+ com.gx.obe.common.icons,
+ com.gx.obe.step,
+ com.gx.obe.action,
+ com.gx.obe.bind;bundle-version="1.0.0",
+ com.gx.obe.component;bundle-version="1.0.0",
+ com.gx.obe.common.widget
+Export-Package: com.gx.obe.evaluation.struct.enumeration,
+ com.gx.obe.http,
+ com.gx.obe.http.converter,
+ com.gx.obe.http.core,
+ com.gx.obe.http.entity,
+ com.gx.obe.http.exception,
+ com.gx.obe.http.json,
+ com.gx.obe.http.jsons,
+ com.gx.obe.http.ssl,
+ com.gx.obe.http.test,
+ com.gx.obe.http.util,
+ com.gx.obe.struct,
+ com.gx.obe.struct.beans,
+ com.gx.obe.struct.composite,
+ com.gx.obe.struct.dialog,
+ com.gx.obe.struct.enums,
+ com.gx.obe.struct.factory,
+ com.gx.obe.struct.handler,
+ com.gx.obe.struct.inters,
+ com.gx.obe.struct.listener,
+ com.gx.obe.struct.parse,
+ com.gx.obe.struct.service,
+ com.gx.obe.struct.thread,
+ com.gx.obe.struct.tree,
+ com.gx.obe.struct.utils,
+ com.gx.obe.struct.value_list,
+ com.gx.obe.struct.widget
+Bundle-ClassPath: lib/Utils-1.0.0.jar,
+ .
diff --git a/com.gx.obe.struct/build.properties b/com.gx.obe.struct/build.properties
new file mode 100644
index 00000000..9eee1b05
--- /dev/null
+++ b/com.gx.obe.struct/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               lib/Utils-1.0.0.jar
diff --git a/com.gx.obe.struct/lib/Utils-1.0.0.jar b/com.gx.obe.struct/lib/Utils-1.0.0.jar
new file mode 100644
index 0000000000000000000000000000000000000000..965669f4e629d3d0993b092029a6b38e017fd17d
GIT binary patch
literal 476051
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

literal 0
HcmV?d00001

diff --git a/com.gx.obe.struct/src/com/gx/obe/evaluation/struct/enumeration/StructBusinessTypeEnum.java b/com.gx.obe.struct/src/com/gx/obe/evaluation/struct/enumeration/StructBusinessTypeEnum.java
new file mode 100644
index 00000000..4ae26e57
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/evaluation/struct/enumeration/StructBusinessTypeEnum.java
@@ -0,0 +1,226 @@
+package com.gx.obe.evaluation.struct.enumeration;
+
+import java.util.Arrays;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+import com.gx.obe.util.utils.PredicateUtil;
+
+
+/**
+ * @Description: 结构化商务类型
+ * @author chenxw
+ */
+public enum StructBusinessTypeEnum {
+	
+//	ENTERPRISE_QUALIFICATION("EnterpriseQualification", "企业资质证明文件"),
+	
+//	EQ_ENTERPRISE_INFO("EQ_EnterpriseInfo", ""),
+	
+	/**
+	 * null
+	 */
+	NULL("null", ""),
+	
+	/**
+	 * 营业执照 EQ_BusinessLicense
+	 */
+	EQ_BUSINESS_LICENSE("EQ_BusinessLicense", "营业执照"),
+	
+	/**
+	 * 供货业绩(物资) EQ_Achievements
+	 */
+	EQ_ACHIEVEMENTS("EQ_Achievements", "供货业绩(物资)"),
+	
+	/**
+	 * 已投产业绩 EQ_OperationAchievements
+	 */
+	EQ_OPERATION_ACHIEVEMENTS("EQ_OperationAchievements", "已投产业绩"),
+	
+	/**
+	 * 在建业绩(施工/服务) EQ_OperationPerformance
+	 */
+	EQ_OPERATION_PERFORMANCE("EQ_OperationPerformance", "在建业绩(施工/服务)"),
+	
+	/**
+	 * 合同业绩  EQ_ContractPerformance
+	 */
+	EQ_CONTRACT_PERFORMANCE("EQ_ContractPerformance", "合同业绩"),
+	
+	/**
+	 * 项目负责人  EQ_ProjectLeader
+	 */
+	EQ_PROJECTLEADER("EQ_ProjectLeader", "项目负责人"),
+	
+	/**
+	 * 资产负债率 EQ_AssetLiabilityRatio
+	 */
+	EQ_ASSETLIABILITY_RATIO("EQ_AssetLiabilityRatio", "资产负债率"),
+	
+	/**
+	 * 流动比率 EQ_LiquidityRatio
+	 */
+	EQ_LIQUIDITY_RATIO("EQ_LiquidityRatio", "流动比率"),
+	
+	/**
+	 * 主营业务利润率 EQ_ProfitRatio
+	 */
+	EQ_PROFIT_RATIO("EQ_ProfitRatio", "主营业务利润率"),
+
+	/**
+	 * 安全生产许可证  EQ_Qualification_SCXK
+	 */
+	EQ_QUALIFICATION_SCXK("EQ_Qualification_SCXK", "安全生产许可证"),
+	
+	/**
+	 * 检验报告  EQ_Qualification_SurveyReport
+	 */
+	EQ_QUALIFICATION_SURVEYREPORT("EQ_Qualification_SurveyReport", "检验报告"),
+	
+	/**
+	 *  资信等级 EQ_Qualification_ZXDJ
+	 */
+	EQ_QUALIFICATION_ZXDJ("EQ_Qualification_ZXDJ", "资信等级"),
+	
+	/**
+	 * 施工资质  EQ_Qualification_SGZZ
+	 */
+	EQ_QUALIFICATION_SGZZ("EQ_Qualification_SGZZ", "施工资质"),
+	
+	/**
+	 * 设计资质  EQ_Qualification_SJZZ
+	 */
+	EQ_QUALIFICATION_SJZZ("EQ_Qualification_SJZZ", "设计资质"),
+	
+	/**
+	 * 监理资质  EQ_Qualification_JLZZ
+	 */
+	EQ_QUALIFICATION_JLZZ("EQ_Qualification_JLZZ", "监理资质"),
+	
+	/**
+	 * 其它资质 EQ_Qualification
+	 */
+	EQ_QUALIFICATION("EQ_Qualification", "其它资质"),
+
+//	EQ_QUALIFICATION_ZLJX("EQ_Qualification_ZLJX", "质量奖项"),
+	
+//	EQ_QUALIFICATION_ZLJX_SJ("EQ_Qualification_ZLJX_SJ", "自治区质量奖项"),
+	
+//	EQ_QUALIFICATION_KJYF("EQ_Qualification_KJYF", "科技研发奖项"),
+	
+//	EQ_QUALIFICATION_KJYF_SJ("EQ_Qualification_KJYF_SJ", "自治区科技奖项"),
+	
+//	EQ_QUALIFICATION_HYPM("EQ_Qualification_HYPM", "行业排名"),
+	
+//	EQ_QUALIFICATION_XJS("EQ_Qualification_XJS", "新技术"),
+	
+//	EQ_QUALIFICATION_CPRZ("EQ_Qualification_CPRZ", "产品认证证书"),
+	
+//	EQ_QUALIFICATION_HBTX("EQ_Qualification_HBTX", "环保体系认证证书"),
+	
+	/**
+	 * 投标函   TenderLetter
+	 */
+	TENDER_LETTER("TenderLetter", "投标函"),
+
+	/**
+	 * 法定代表人身份证明  LegalRepresentativeIdCertificate
+	 */
+	LEGAL_REPRESENTATIVE_ID_CERTIFICATE("LegalRepresentativeIdCertificate", "法定代表人身份证明"),
+
+	/**
+	 * 法定代表人授权书  LegalRepresentative
+	 */
+	LEGAL_REPRESENTATIVE("LegalRepresentative", "法定代表人授权书"),
+
+	/**
+	 * 联合体协议书  ConsortiumAgreement
+	 */
+	CONSORTIUM_AGREEMENT("ConsortiumAgreement", "联合体协议书"),
+	
+	/**
+	 * 投标人关于资格的声明函   BidderQualificationStatement
+	 */
+	BIDDER_QUALIFICATION_STATEMENT("BidderQualificationStatement", "投标人关于资格的声明函"),
+	
+	/**
+	 * 不存在禁止投标的情形   BidProhibitionSituation
+	 */
+	BID_PROHIBITION_SITUATION("BidProhibitionSituation", "不存在禁止投标的情形"),
+
+	/**
+	 * 投标保证金 BidBond
+	 */
+	BID_BOND("BidBond", "投标保证金"),
+	
+	/**
+	 * 投标人名称 BidderName
+	 */
+	BIDDER_NAME("BidderName", "投标人名称"),
+	
+	/**
+	 * 工期 Duration
+	 */
+	DURATION("Duration", "工期");
+	
+//	/**
+//	 * 发包人要求  ContractorConditions
+//	 */
+//	CONTRACTOR_CONDITIONS("ContractorConditions", "发包人要求");
+//	
+//	/**
+//	 * 质量标准 QualityStandard
+//	 */
+//	QUALITY_STANDARD("QualityStandard", "质量标准"),
+//
+//	/**
+//	 * 权利与义务 RightAndDuty
+//	 */
+//	RIGHT_AND_DUTY("RightAndDuty", "权利与义务"),
+//
+//	/**
+//	 * 分包资格评审   PackQualification
+//	 */
+//	PACK_QUALIFICATION("PackQualification", "分包资格评审");
+
+	private final String key;
+	private final String value;
+	
+	private StructBusinessTypeEnum(String key, String value) {
+		this.key = key;
+		this.value = value;
+	}
+	
+	public String getKey() {
+		return key;
+	}
+	
+	public String getValue() {
+		return value;
+	}
+	
+	/**
+	 * @Description: 
+	 * @author chenxw
+	 * @param object
+	 * @return 
+	 */
+	public static Optional<StructBusinessTypeEnum> getBykey(String key) {
+		return Arrays.stream(values()).filter(PredicateUtil.get(StructBusinessTypeEnum::getKey, Predicate.isEqual(key))).findAny();
+	}
+
+	private static Set<String> keySet = Arrays.stream(values()).map(StructBusinessTypeEnum::getKey).filter(Predicate.isEqual(NULL.getKey()).negate()).collect(Collectors.toSet());
+	
+	/**
+	 * @Description: 
+	 * @author chenxw
+	 * @param key
+	 * @return 
+	 */
+	public static boolean contains(String key) {
+		return keySet.contains(key);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/evaluation/struct/enumeration/StructEnum.java b/com.gx.obe.struct/src/com/gx/obe/evaluation/struct/enumeration/StructEnum.java
new file mode 100644
index 00000000..e52c4966
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/evaluation/struct/enumeration/StructEnum.java
@@ -0,0 +1,85 @@
+package com.gx.obe.evaluation.struct.enumeration;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/** 
+ * @Description: 
+ * @author chenxw 
+ */
+public class StructEnum {
+	
+	/**
+	 * 企业资质证明文件
+	 */
+	public static final String ENTERPRISE_QUALIFICATION = "EnterpriseQualification";
+	
+	/**
+	 * 财务状况
+	 */
+	public static final String EQ_FINANCIAL_REPORT = "EQ_FinancialReport";
+	
+	private static Map<String, String> structValueMap = new HashMap<>();
+	static {
+		structValueMap.put(EQ_FINANCIAL_REPORT, "财务状况");
+	}
+	
+	public static String getStructValue(String dataType) {
+		return structValueMap.getOrDefault(dataType, "未知类型");
+	}
+	
+	/**
+	 * 未确认
+	 */
+	public static final String STATE_UNCONFIRMED = "00";
+	/**
+	 * 有效
+	 */
+	public static final String STATE_EFFECTIVE = "01";
+	/**
+	 * 无效
+	 */
+	public static final String STATE_INVALID = "02";
+	
+	
+	public static final String FLOAT = "float";
+	public static final String INT = "int";
+	public static final String STRING = "string";
+	public static final String DATE_TIME = "datetime";
+	public static final String UNION = "union";
+	
+	
+	public static final String IMAGE = "image";
+	public static final String ATTACHMENT = "attachment";
+	
+	
+	/**
+	 * 资质文件
+	 */
+	public static final String FICATION = "fication";
+	/**
+	 * 范本文件
+	 */
+	public static final String TEMPLATE = "template";
+	
+	
+	public static final String RESPONSE_ITEM = "responseItem";
+	
+	/**
+	 * 	结构化数据修正
+	 */
+	public static final String  STRUCT_RECORD_TYPE = "00";
+	/**
+	 * 	结构化明细修正
+	 */
+	public static final String STRUCT_RECORD_DETAILS = "01";
+	
+	public static String typeConversion(String dataType) {
+		if (StructBusinessTypeEnum.EQ_ASSETLIABILITY_RATIO.getKey().equals(dataType)) return StructEnum.EQ_FINANCIAL_REPORT;
+		if (StructBusinessTypeEnum.EQ_LIQUIDITY_RATIO.getKey().equals(dataType)) return StructEnum.EQ_FINANCIAL_REPORT;
+		if (StructBusinessTypeEnum.EQ_PROFIT_RATIO.getKey().equals(dataType)) return StructEnum.EQ_FINANCIAL_REPORT;
+		if (StructBusinessTypeEnum.BIDDER_NAME.getKey().equals(dataType)) return StructBusinessTypeEnum.EQ_BUSINESS_LICENSE.getKey();
+		return dataType;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/evaluation/struct/enumeration/StructTechnologyTypeEnum.java b/com.gx.obe.struct/src/com/gx/obe/evaluation/struct/enumeration/StructTechnologyTypeEnum.java
new file mode 100644
index 00000000..e2744ba3
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/evaluation/struct/enumeration/StructTechnologyTypeEnum.java
@@ -0,0 +1,121 @@
+package com.gx.obe.evaluation.struct.enumeration;
+
+import java.util.Arrays;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+import com.gx.obe.util.utils.PredicateUtil;
+
+/**
+ * @Description: 结构化技术类型
+ * @author chenxw
+ */
+public enum StructTechnologyTypeEnum {
+	
+	/**
+	 * null
+	 */
+	NULL("null", ""),
+	
+	/**
+	 * 主要技术参数1
+	 */
+	PARAM_1("Param1", "主要技术参数1"),
+	/**
+	 * 主要技术参数2
+	 */
+	PARAM_2("Param2", "主要技术参数2"),
+	/**
+	 * 主要技术参数3
+	 */
+	PARAM_3("Param3", "主要技术参数3"),
+	/**
+	 * 主要技术参数4
+	 */
+	PARAM_4("Param4", "主要技术参数4"),
+	/**
+	 * 主要技术参数5
+	 */
+	PARAM_5("Param5", "主要技术参数5"),
+	/**
+	 * 主要技术参数6
+	 */
+	PARAM_6("Param6", "主要技术参数6"),
+	/**
+	 * 主要技术参数7
+	 */
+	PARAM_7("Param7", "主要技术参数7"),
+	/**
+	 * 主要技术参数8
+	 */
+	PARAM_8("Param8", "主要技术参数8"),
+	/**
+	 * 主要技术参数9
+	 */
+	PARAM_9("Param9", "主要技术参数9"),
+	/**
+	 * 主要技术参数10
+	 */
+	PARAM_10("Param10", "主要技术参数10"),
+	/**
+	 * 主要技术参数10
+	 */
+	PARAM_11("Param11", "主要技术参数11"),
+	/**
+	 * 主要技术参数10
+	 */
+	PARAM_12("Param12", "主要技术参数12"),
+	/**
+	 * 主要技术参数10
+	 */
+	PARAM_13("Param13", "主要技术参数13"),
+	/**
+	 * 主要技术参数10
+	 */
+	PARAM_14("Param14", "主要技术参数14"),
+	/**
+	 * 主要技术参数10
+	 */
+	PARAM_15("Param15", "主要技术参数15");
+	
+	private final String key;
+	private final String value;
+	
+	private StructTechnologyTypeEnum(String key, String value) {
+		this.key = key;
+		this.value = value;
+	}
+	
+	public String getKey() {
+		return key;
+	}
+	
+	public String getValue() {
+		return value;
+	}
+	
+	private static Set<String> keySet = Arrays.stream(values()).map(StructTechnologyTypeEnum::getKey).filter(Predicate.isEqual(NULL.getKey()).negate()).collect(Collectors.toSet());
+	
+	/**
+	 * @Description:
+	 * @author chenxw
+	 * @param object
+	 * @return
+	 */
+	public static Optional<StructTechnologyTypeEnum> getBykey(String key) {
+		return Arrays.stream(values()).filter(PredicateUtil.get(StructTechnologyTypeEnum::getKey, Predicate.isEqual(key))).findAny();
+	}
+	
+	/**
+	 * @Description:
+	 * @author chenxw
+	 * @param key
+	 * @return
+	 */
+	public static boolean contains(String key) {
+		return keySet.contains(key);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/Activator.java b/com.gx.obe.struct/src/com/gx/obe/struct/Activator.java
new file mode 100644
index 00000000..92058afd
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/Activator.java
@@ -0,0 +1,50 @@
+package com.gx.obe.struct;
+
+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.gx.obe.struct"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	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;
+	}
+
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/AbsoluteDO.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/AbsoluteDO.java
new file mode 100644
index 00000000..b7ef4cb9
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/AbsoluteDO.java
@@ -0,0 +1,49 @@
+package com.gx.obe.struct.beans;
+
+import java.math.BigDecimal;
+
+/**
+ * @author gnauh
+ * 数值区间模型类
+ *
+ */
+public class AbsoluteDO {
+	private int startNumber;
+	private int endNumber;
+	private BigDecimal score;
+	public AbsoluteDO(int startNumber,int  endNumber , BigDecimal score){
+		this.score = score;
+		this.endNumber = endNumber;
+		this.startNumber = startNumber;
+	}
+	public int getStartNumber() {
+		return startNumber;
+	}
+	public void setStartNumber(int startNumber) {
+		this.startNumber = startNumber;
+	}
+	public int getEndNumber() {
+		return endNumber;
+	}
+	public void setEndNumber(int endNumber) {
+		this.endNumber = endNumber;
+	}
+	public BigDecimal getScore() {
+		return score;
+	}
+	public void setScore(BigDecimal score) {
+		this.score = score;
+	}
+	public boolean isInRange(int value) {
+		if (startNumber > 0 && endNumber> 0) {
+			 return value >= startNumber && value < endNumber;
+		}else if(startNumber > 0 &&  endNumber <=0) {
+			 return value >= startNumber;
+		}else if(startNumber ==0 && endNumber> 0) {
+			 return  value < endNumber;
+		}
+		return false;
+		
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/AbsoluteModelDO.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/AbsoluteModelDO.java
new file mode 100644
index 00000000..fdc543ed
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/AbsoluteModelDO.java
@@ -0,0 +1,43 @@
+package com.gx.obe.struct.beans;
+
+/**
+ * 绝对值模型参数初始值模型
+ * @author gnauh
+ *
+ */
+public class AbsoluteModelDO {
+//	<!--起始整数绝对值-->
+	private String initialValue;
+//	 <!--整数绝对值单位-->
+	private String absoluteUnit;
+//	  <!--整数绝对值对应分值-->
+	private String absoluteScore;
+//	  <!--最高得分-->
+	private String maxScore;
+	
+	public String getMaxScore() {
+		return maxScore;
+	}
+	public void setMaxScore(String maxScore) {
+		this.maxScore = maxScore;
+	}
+	public String getInitialValue() {
+		return initialValue;
+	}
+	public void setInitialValue(String initialValue) {
+		this.initialValue = initialValue;
+	}
+	public String getAbsoluteUnit() {
+		return absoluteUnit;
+	}
+	public void setAbsoluteUnit(String absoluteUnit) {
+		this.absoluteUnit = absoluteUnit;
+	}
+	public String getAbsoluteScore() {
+		return absoluteScore;
+	}
+	public void setAbsoluteScore(String absoluteScore) {
+		this.absoluteScore = absoluteScore;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/AttachmentFile.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/AttachmentFile.java
new file mode 100644
index 00000000..aeefcce6
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/AttachmentFile.java
@@ -0,0 +1,120 @@
+package com.gx.obe.struct.beans;
+
+import java.util.Date;
+
+/**
+ * @author mazc
+ * @Description:
+ */
+public class AttachmentFile {
+	
+	/**
+	 * 主键
+	 */
+	private String id;
+	/**
+	 * 父级ID
+	 */
+	private String parentId;
+	/**
+	 * 项目ID
+	 */
+	private String tenderId;
+	/**
+	 * 业务ID
+	 */
+	private String businessId;
+	/**
+	 * 文件地址
+	 */
+	private String fileUrl;
+	/**
+	 * 文件名称
+	 */
+	private String fileName;
+	/**
+	 * 文件大小
+	 */
+	private Integer fileSize;
+	/**
+	 * 文件类型
+	 */
+	private String fileType;
+	/**
+	 * 创建时间
+	 */
+	private Date createTime;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getParentId() {
+		return parentId;
+	}
+	
+	public void setParentId(String parentId) {
+		this.parentId = parentId;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getBusinessId() {
+		return businessId;
+	}
+	
+	public void setBusinessId(String businessId) {
+		this.businessId = businessId;
+	}
+	
+	public String getFileUrl() {
+		return fileUrl;
+	}
+	
+	public void setFileUrl(String fileUrl) {
+		this.fileUrl = fileUrl;
+	}
+	
+	public String getFileName() {
+		return fileName;
+	}
+	
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+	
+	public Integer getFileSize() {
+		return fileSize;
+	}
+	
+	public void setFileSize(Integer fileSize) {
+		this.fileSize = fileSize;
+	}
+	
+	public String getFileType() {
+		return fileType;
+	}
+	
+	public void setFileType(String fileType) {
+		this.fileType = fileType;
+	}
+	
+	public Date getCreateTime() {
+		return createTime;
+	}
+	
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/BalanceSheet.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/BalanceSheet.java
new file mode 100644
index 00000000..3fd3a900
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/BalanceSheet.java
@@ -0,0 +1,156 @@
+package com.gx.obe.struct.beans;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description: 资产负债表
+ * @author chenxw
+ */
+public class BalanceSheet {
+	
+	/**
+	 * 主键
+	 */
+	private String id;
+	/**
+	 * 项目ID
+	 */
+	private String tenderId;
+	/**
+	 * 财务ID
+	 */
+	private String financeId;
+	/**
+	 * 总资产
+	 */
+	private BigDecimal balanceTotal;
+	/**
+	 * 流动资产
+	 */
+	private BigDecimal balanceCecurrentAssets;
+	/**
+	 * 存货
+	 */
+	private BigDecimal inventory;
+	/**
+	 * 应收账款
+	 */
+	private BigDecimal receivables;
+	/**
+	 * 不良资产
+	 */
+	private BigDecimal badAssets;
+	/**
+	 * 总负债
+	 */
+	private BigDecimal balanceTotalliabilities;
+	/**
+	 * 流动负债
+	 */
+	private BigDecimal balanceCurrentLiabilities;
+	/**
+	 * 所有者权益
+	 */
+	private BigDecimal ownershipInterest;
+	/**
+	 * 其中:当年非正常增加
+	 */
+	private BigDecimal abnormalIncrease;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getFinanceId() {
+		return financeId;
+	}
+	
+	public void setFinanceId(String financeId) {
+		this.financeId = financeId;
+	}
+	
+	public BigDecimal getBalanceTotal() {
+		return balanceTotal;
+	}
+	
+	public void setBalanceTotal(BigDecimal balanceTotal) {
+		this.balanceTotal = balanceTotal;
+	}
+	
+	public BigDecimal getBalanceCecurrentAssets() {
+		return balanceCecurrentAssets;
+	}
+	
+	public void setBalanceCecurrentAssets(BigDecimal balanceCecurrentAssets) {
+		this.balanceCecurrentAssets = balanceCecurrentAssets;
+	}
+	
+	public BigDecimal getInventory() {
+		return inventory;
+	}
+	
+	public void setInventory(BigDecimal inventory) {
+		this.inventory = inventory;
+	}
+	
+	public BigDecimal getReceivables() {
+		return receivables;
+	}
+	
+	public void setReceivables(BigDecimal receivables) {
+		this.receivables = receivables;
+	}
+	
+	public BigDecimal getBadAssets() {
+		return badAssets;
+	}
+	
+	public void setBadAssets(BigDecimal badAssets) {
+		this.badAssets = badAssets;
+	}
+	
+	public BigDecimal getBalanceTotalliabilities() {
+		return balanceTotalliabilities;
+	}
+	
+	public void setBalanceTotalliabilities(BigDecimal balanceTotalliabilities) {
+		this.balanceTotalliabilities = balanceTotalliabilities;
+	}
+	
+	public BigDecimal getBalanceCurrentLiabilities() {
+		return balanceCurrentLiabilities;
+	}
+	
+	public void setBalanceCurrentLiabilities(BigDecimal balanceCurrentLiabilities) {
+		this.balanceCurrentLiabilities = balanceCurrentLiabilities;
+	}
+	
+	public BigDecimal getOwnershipInterest() {
+		return ownershipInterest;
+	}
+	
+	public void setOwnershipInterest(BigDecimal ownershipInterest) {
+		this.ownershipInterest = ownershipInterest;
+	}
+	
+	public BigDecimal getAbnormalIncrease() {
+		return abnormalIncrease;
+	}
+	
+	public void setAbnormalIncrease(BigDecimal abnormalIncrease) {
+		this.abnormalIncrease = abnormalIncrease;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/BidderBasicInfo.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/BidderBasicInfo.java
new file mode 100644
index 00000000..7777e92a
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/BidderBasicInfo.java
@@ -0,0 +1,442 @@
+package com.gx.obe.struct.beans;
+
+/**
+ * @author mazc
+ * @Description:
+ */
+public class BidderBasicInfo {
+	
+	/**
+	 * 主键
+	 */
+	private String id;
+	/**
+	 * 项目ID
+	 */
+	private String tenderId;
+	/**
+	 * 模型数据ID
+	 */
+	private String modelDataId;
+	/**
+	 * 投标人名称
+	 */
+	private String companyName;
+	/**
+	 * 注册地址
+	 */
+	private String registerLocation;
+	/**
+	 * 邮政编码
+	 */
+	private String postalCode;
+	/**
+	 * 联系人
+	 */
+	private String linkMan;
+	/**
+	 * 电话
+	 */
+	private String linkManPhone;
+	/**
+	 * 传真
+	 */
+	private String linkManFax;
+	/**
+	 * 网址
+	 */
+	private String linkManWebsite;
+	/**
+	 * 组织结构
+	 */
+	private String orgStructure;
+	/**
+	 * 法定代表人姓名
+	 */
+	private String legalRepresentativeName;
+	/**
+	 * 法定代表人技术职称
+	 */
+	private String legalRepresentativeTitle;
+	/**
+	 * 法定代表人电话
+	 */
+	private String legalRepresentativePhone;
+	/**
+	 * 技术负责人姓名
+	 */
+	private String technicalDirectorName;
+	/**
+	 * 技术负责人职称
+	 */
+	private String technicalDirectorTitle;
+	/**
+	 * 技术负责人电话
+	 */
+	private String technicalDirectorPhone;
+	/**
+	 * 成立时间
+	 */
+	private String setupTime;
+	/**
+	 * 企业资质等级
+	 */
+	private String companyQualificationLevel;
+	/**
+	 * 注册资金
+	 */
+	private String registeredCapital;
+	/**
+	 * 开户银行
+	 */
+	private String depositBank;
+	/**
+	 * 营业执照号
+	 */
+	private String bussinessLicense;
+	/**
+	 * 银行账号
+	 */
+	private String bankAccount;
+	/**
+	 * 员工总人数
+	 */
+	private String employeeNumber;
+	/**
+	 * 项目经理数量
+	 */
+	private String purchaserNumber;
+	/**
+	 * 高级职称人员数量
+	 */
+	private String seniorProfessionalPostNumber;
+	/**
+	 * 中极职称人员数量
+	 */
+	private String mediumProfessionalPostNumber;
+	/**
+	 * 初级职称人员数量
+	 */
+	private String primaryProfessionalPostNumber;
+	/**
+	 * 技工数量
+	 */
+	private String artisanNumber;
+	/**
+	 * 经营范围
+	 */
+	private String businessScope;
+	/**
+	 * 企业性质
+	 */
+	private String enterpriseNature;
+	/**
+	 * 股权结构
+	 */
+	private String equityStructure;
+	/**
+	 * 关联企业情况
+	 */
+	private String relatedCompanyInfo;
+	/**
+	 * 服务能力
+	 */
+	private String serviceAbility;
+	/**
+	 * 拟投入本项目设备
+	 */
+	private String preInputDevice;
+	/**
+	 * 备注
+	 */
+	private String memo;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getModelDataId() {
+		return modelDataId;
+	}
+	
+	public void setModelDataId(String modelDataId) {
+		this.modelDataId = modelDataId;
+	}
+	
+	public String getRegisterLocation() {
+		return registerLocation;
+	}
+	
+	public void setRegisterLocation(String registerLocation) {
+		this.registerLocation = registerLocation;
+	}
+	
+	public String getPostalCode() {
+		return postalCode;
+	}
+	
+	public void setPostalCode(String postalCode) {
+		this.postalCode = postalCode;
+	}
+	
+	public String getLinkMan() {
+		return linkMan;
+	}
+	
+	public void setLinkMan(String linkMan) {
+		this.linkMan = linkMan;
+	}
+	
+	public String getLinkManPhone() {
+		return linkManPhone;
+	}
+	
+	public void setLinkManPhone(String linkManPhone) {
+		this.linkManPhone = linkManPhone;
+	}
+	
+	public String getLinkManFax() {
+		return linkManFax;
+	}
+	
+	public void setLinkManFax(String linkManFax) {
+		this.linkManFax = linkManFax;
+	}
+	
+	public String getLinkManWebsite() {
+		return linkManWebsite;
+	}
+	
+	public void setLinkManWebsite(String linkManWebsite) {
+		this.linkManWebsite = linkManWebsite;
+	}
+	
+	public String getOrgStructure() {
+		return orgStructure;
+	}
+	
+	public void setOrgStructure(String orgStructure) {
+		this.orgStructure = orgStructure;
+	}
+	
+	public String getLegalRepresentativeName() {
+		return legalRepresentativeName;
+	}
+	
+	public void setLegalRepresentativeName(String legalRepresentativeName) {
+		this.legalRepresentativeName = legalRepresentativeName;
+	}
+	
+	public String getLegalRepresentativeTitle() {
+		return legalRepresentativeTitle;
+	}
+	
+	public void setLegalRepresentativeTitle(String legalRepresentativeTitle) {
+		this.legalRepresentativeTitle = legalRepresentativeTitle;
+	}
+	
+	public String getLegalRepresentativePhone() {
+		return legalRepresentativePhone;
+	}
+	
+	public void setLegalRepresentativePhone(String legalRepresentativePhone) {
+		this.legalRepresentativePhone = legalRepresentativePhone;
+	}
+	
+	public String getTechnicalDirectorName() {
+		return technicalDirectorName;
+	}
+	
+	public void setTechnicalDirectorName(String technicalDirectorName) {
+		this.technicalDirectorName = technicalDirectorName;
+	}
+	
+	public String getTechnicalDirectorTitle() {
+		return technicalDirectorTitle;
+	}
+	
+	public void setTechnicalDirectorTitle(String technicalDirectorTitle) {
+		this.technicalDirectorTitle = technicalDirectorTitle;
+	}
+	
+	public String getTechnicalDirectorPhone() {
+		return technicalDirectorPhone;
+	}
+	
+	public void setTechnicalDirectorPhone(String technicalDirectorPhone) {
+		this.technicalDirectorPhone = technicalDirectorPhone;
+	}
+	
+	public String getSetupTime() {
+		return setupTime;
+	}
+	
+	public void setSetupTime(String setupTime) {
+		this.setupTime = setupTime;
+	}
+	
+	public String getCompanyQualificationLevel() {
+		return companyQualificationLevel;
+	}
+	
+	public void setCompanyQualificationLevel(String companyQualificationLevel) {
+		this.companyQualificationLevel = companyQualificationLevel;
+	}
+	
+	public String getRegisteredCapital() {
+		return registeredCapital;
+	}
+	
+	public void setRegisteredCapital(String registeredCapital) {
+		this.registeredCapital = registeredCapital;
+	}
+	
+	public String getDepositBank() {
+		return depositBank;
+	}
+	
+	public void setDepositBank(String depositBank) {
+		this.depositBank = depositBank;
+	}
+	
+	public String getBussinessLicense() {
+		return bussinessLicense;
+	}
+	
+	public void setBussinessLicense(String bussinessLicense) {
+		this.bussinessLicense = bussinessLicense;
+	}
+	
+	public String getBankAccount() {
+		return bankAccount;
+	}
+	
+	public void setBankAccount(String bankAccount) {
+		this.bankAccount = bankAccount;
+	}
+	
+	public String getEmployeeNumber() {
+		return employeeNumber;
+	}
+	
+	public void setEmployeeNumber(String employeeNumber) {
+		this.employeeNumber = employeeNumber;
+	}
+	
+	public String getPurchaserNumber() {
+		return purchaserNumber;
+	}
+	
+	public void setPurchaserNumber(String purchaserNumber) {
+		this.purchaserNumber = purchaserNumber;
+	}
+	
+	public String getSeniorProfessionalPostNumber() {
+		return seniorProfessionalPostNumber;
+	}
+	
+	public void setSeniorProfessionalPostNumber(String seniorProfessionalPostNumber) {
+		this.seniorProfessionalPostNumber = seniorProfessionalPostNumber;
+	}
+	
+	public String getMediumProfessionalPostNumber() {
+		return mediumProfessionalPostNumber;
+	}
+	
+	public void setMediumProfessionalPostNumber(String mediumProfessionalPostNumber) {
+		this.mediumProfessionalPostNumber = mediumProfessionalPostNumber;
+	}
+	
+	public String getPrimaryProfessionalPostNumber() {
+		return primaryProfessionalPostNumber;
+	}
+	
+	public void setPrimaryProfessionalPostNumber(String primaryProfessionalPostNumber) {
+		this.primaryProfessionalPostNumber = primaryProfessionalPostNumber;
+	}
+	
+	public String getArtisanNumber() {
+		return artisanNumber;
+	}
+	
+	public void setArtisanNumber(String artisanNumber) {
+		this.artisanNumber = artisanNumber;
+	}
+	
+	public String getBusinessScope() {
+		return businessScope;
+	}
+	
+	public void setBusinessScope(String businessScope) {
+		this.businessScope = businessScope;
+	}
+	
+	public String getEnterpriseNature() {
+		return enterpriseNature;
+	}
+	
+	public void setEnterpriseNature(String enterpriseNature) {
+		this.enterpriseNature = enterpriseNature;
+	}
+	
+	public String getEquityStructure() {
+		return equityStructure;
+	}
+	
+	public void setEquityStructure(String equityStructure) {
+		this.equityStructure = equityStructure;
+	}
+	
+	public String getRelatedCompanyInfo() {
+		return relatedCompanyInfo;
+	}
+	
+	public void setRelatedCompanyInfo(String relatedCompanyInfo) {
+		this.relatedCompanyInfo = relatedCompanyInfo;
+	}
+	
+	public String getServiceAbility() {
+		return serviceAbility;
+	}
+	
+	public void setServiceAbility(String serviceAbility) {
+		this.serviceAbility = serviceAbility;
+	}
+	
+	public String getPreInputDevice() {
+		return preInputDevice;
+	}
+	
+	public void setPreInputDevice(String preInputDevice) {
+		this.preInputDevice = preInputDevice;
+	}
+	
+	public String getMemo() {
+		return memo;
+	}
+	
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+	
+	public String getCompanyName() {
+		return companyName;
+	}
+	
+	public void setCompanyName(String companyName) {
+		this.companyName = companyName;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/BusinessLicense.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/BusinessLicense.java
new file mode 100644
index 00000000..ce97142f
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/BusinessLicense.java
@@ -0,0 +1,202 @@
+package com.gx.obe.struct.beans;
+
+/**
+ * @author mazc
+ * @Description:
+ */
+public class BusinessLicense {
+	
+	/**
+	 * 主键
+	 */
+	private String id;
+	/**
+	 * 项目ID
+	 */
+	private String tenderId;
+	/**
+	 * 模型数据ID
+	 */
+	private String modelDataId;
+	/**
+	 * 统一社会信用代码
+	 */
+	private String registerNumber;
+	/**
+	 * 企业名称
+	 */
+	private String companyName;
+	/**
+	 * 法定代表人
+	 */
+	private String legalRepresentative;
+	/**
+	 * 注册资本(万元)
+	 */
+	private String registerCapital;
+	/**
+	 * 住所
+	 */
+	private String companyAddress;
+	/**
+	 * 是否区内企业
+	 */
+	private String isInAreaEnterprises;
+	/**
+	 * 登记机关
+	 */
+	private String registerInstitution;
+	/**
+	 * 成立日期
+	 */
+	private String establishDate;
+	/**
+	 * 营业期限起
+	 */
+	private String busnissTermStartDate;
+	/**
+	 * 营业期限止
+	 */
+	private String busnissTermEndtDate;
+	/**
+	 * 营业范围
+	 */
+	private String businessScope;
+	/**
+	 * 类型
+	 */
+	private String companyType;
+	/**
+	 * 是否为永久经营
+	 */
+	private String isPerpetual;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getModelDataId() {
+		return modelDataId;
+	}
+	
+	public void setModelDataId(String modelDataId) {
+		this.modelDataId = modelDataId;
+	}
+	
+	public String getRegisterNumber() {
+		return registerNumber;
+	}
+	
+	public void setRegisterNumber(String registerNumber) {
+		this.registerNumber = registerNumber;
+	}
+	
+	public String getCompanyName() {
+		return companyName;
+	}
+	
+	public void setCompanyName(String companyName) {
+		this.companyName = companyName;
+	}
+	
+	public String getLegalRepresentative() {
+		return legalRepresentative;
+	}
+	
+	public void setLegalRepresentative(String legalRepresentative) {
+		this.legalRepresentative = legalRepresentative;
+	}
+	
+	public String getRegisterCapital() {
+		return registerCapital;
+	}
+	
+	public void setRegisterCapital(String registerCapital) {
+		this.registerCapital = registerCapital;
+	}
+	
+	public String getCompanyAddress() {
+		return companyAddress;
+	}
+	
+	public void setCompanyAddress(String companyAddress) {
+		this.companyAddress = companyAddress;
+	}
+	
+	public String getIsInAreaEnterprises() {
+		return isInAreaEnterprises;
+	}
+	
+	public void setIsInAreaEnterprises(String isInAreaEnterprises) {
+		this.isInAreaEnterprises = isInAreaEnterprises;
+	}
+	
+	public String getRegisterInstitution() {
+		return registerInstitution;
+	}
+	
+	public void setRegisterInstitution(String registerInstitution) {
+		this.registerInstitution = registerInstitution;
+	}
+	
+	public String getEstablishDate() {
+		return establishDate;
+	}
+	
+	public void setEstablishDate(String establishDate) {
+		this.establishDate = establishDate;
+	}
+	
+	public String getBusnissTermStartDate() {
+		return busnissTermStartDate;
+	}
+	
+	public void setBusnissTermStartDate(String busnissTermStartDate) {
+		this.busnissTermStartDate = busnissTermStartDate;
+	}
+	
+	public String getBusnissTermEndtDate() {
+		return busnissTermEndtDate;
+	}
+	
+	public void setBusnissTermEndtDate(String busnissTermEndtDate) {
+		this.busnissTermEndtDate = busnissTermEndtDate;
+	}
+	
+	public String getBusinessScope() {
+		return businessScope;
+	}
+	
+	public void setBusinessScope(String businessScope) {
+		this.businessScope = businessScope;
+	}
+	
+	public String getCompanyType() {
+		return companyType;
+	}
+	
+	public void setCompanyType(String companyType) {
+		this.companyType = companyType;
+	}
+	
+	public String getIsPerpetual() {
+		return isPerpetual;
+	}
+	
+	public void setIsPerpetual(String isPerpetual) {
+		this.isPerpetual = isPerpetual;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/CashSheet.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/CashSheet.java
new file mode 100644
index 00000000..51123a06
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/CashSheet.java
@@ -0,0 +1,60 @@
+package com.gx.obe.struct.beans;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description: 现金流量表
+ * @author chenxw
+ */
+public class CashSheet {
+	
+	/**
+	 * 主键
+	 */
+	private String id;
+	/**
+	 * 项目ID
+	 */
+	private String tenderId;
+	/**
+	 * 财务ID
+	 */
+	private String financeId;
+	/**
+	 * 经营净现金流量
+	 */
+	private BigDecimal operatingNetCashFlow;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getFinanceId() {
+		return financeId;
+	}
+	
+	public void setFinanceId(String financeId) {
+		this.financeId = financeId;
+	}
+	
+	public BigDecimal getOperatingNetCashFlow() {
+		return operatingNetCashFlow;
+	}
+	
+	public void setOperatingNetCashFlow(BigDecimal operatingNetCashFlow) {
+		this.operatingNetCashFlow = operatingNetCashFlow;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/Certificate.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/Certificate.java
new file mode 100644
index 00000000..5c41bd57
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/Certificate.java
@@ -0,0 +1,94 @@
+package com.gx.obe.struct.beans;
+
+/**
+ * @author mazc
+ * @Description:
+ */
+public class Certificate {
+	
+	/**
+	 * 主键
+	 */
+	private String id;
+	/**
+	 * 项目ID
+	 */
+	private String tenderId;
+	/**
+	 * 项目负责人ID
+	 */
+	private String projectLeaderId;
+	/**
+	 * 证书编号
+	 */
+	private String certificateNo;
+	/**
+	 * 证书名称
+	 */
+	private String certificateName;
+	/**
+	 * 证书等级
+	 */
+	private String certificateLevel;
+	/**
+	 * 序号
+	 */
+	private Integer sortNo;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getProjectLeaderId() {
+		return projectLeaderId;
+	}
+	
+	public void setProjectLeaderId(String projectLeaderId) {
+		this.projectLeaderId = projectLeaderId;
+	}
+	
+	public String getCertificateName() {
+		return certificateName;
+	}
+	
+	public void setCertificateName(String certificateName) {
+		this.certificateName = certificateName;
+	}
+	
+	public Integer getSortNo() {
+		return sortNo;
+	}
+	
+	public void setSortNo(Integer sortNo) {
+		this.sortNo = sortNo;
+	}
+	
+	public String getCertificateNo() {
+		return certificateNo;
+	}
+	
+	public void setCertificateNo(String certificateNo) {
+		this.certificateNo = certificateNo;
+	}
+	
+	public String getCertificateLevel() {
+		return certificateLevel;
+	}
+	
+	public void setCertificateLevel(String certificateLevel) {
+		this.certificateLevel = certificateLevel;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/ConditionDO.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/ConditionDO.java
new file mode 100644
index 00000000..87d40423
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/ConditionDO.java
@@ -0,0 +1,101 @@
+package com.gx.obe.struct.beans;
+
+public class ConditionDO {
+	
+	/**
+	 * @Description: 下限
+	 */
+	private String minRate;
+	
+	/**
+	 * @Description: 下限符: 00 小于 01小于等于
+	 */
+	private String minInclude;
+	
+	/**
+	 * @Description: 上限
+	 */
+	private String maxRate;
+	
+	/**
+	 * @Description: 上限符: 00 大于 01大于等于
+	 */
+	private String maxInclude;
+	
+//	<!--大于起始整数绝对值计量单位数量-->
+	private String maxEqRate;
+//	 <!--计量单位得分-->
+	private String value;
+	
+	private String awardLevel;
+	
+	public String getMaxEqRate() {
+		return maxEqRate;
+	}
+
+	public void setMaxEqRate(String maxEqRate) {
+		this.maxEqRate = maxEqRate;
+	}
+
+	public String getValue() {
+		return value;
+	}
+
+	public void setValue(String value) {
+		this.value = value;
+	}
+
+	public String getAwardLevel() {
+		return awardLevel;
+	}
+
+	public void setAwardLevel(String awardLevel) {
+		this.awardLevel = awardLevel;
+	}
+
+	/**
+	 * @Description: 得分
+	 */
+	private String score;
+	
+	public String getMinRate() {
+		return minRate;
+	}
+	
+	public void setMinRate(String minRate) {
+		this.minRate = minRate;
+	}
+	
+	public String getMinInclude() {
+		return minInclude;
+	}
+	
+	public void setMinInclude(String minInclude) {
+		this.minInclude = minInclude;
+	}
+	
+	public String getMaxRate() {
+		return maxRate;
+	}
+	
+	public void setMaxRate(String maxRate) {
+		this.maxRate = maxRate;
+	}
+	
+	public String getMaxInclude() {
+		return maxInclude;
+	}
+	
+	public void setMaxInclude(String maxInclude) {
+		this.maxInclude = maxInclude;
+	}
+	
+	public String getScore() {
+		return score;
+	}
+	
+	public void setScore(String score) {
+		this.score = score;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/CustomModelDo.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/CustomModelDo.java
new file mode 100644
index 00000000..da9f8082
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/CustomModelDo.java
@@ -0,0 +1,54 @@
+package com.gx.obe.struct.beans;
+
+public class CustomModelDo {
+	
+	/**
+	 * @Description: 序号id
+	 */
+	private String id;
+	/**
+	 * @Description: 得分
+	 */
+	private String score;
+	/**
+	 * @Description: 描述
+	 */
+	private String description;
+	/**
+	 * @Description: 备注
+	 */
+	private String remarks;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getScore() {
+		return score;
+	}
+	
+	public void setScore(String score) {
+		this.score = score;
+	}
+	
+	public String getDescription() {
+		return description;
+	}
+	
+	public void setDescription(String description) {
+		this.description = description;
+	}
+	
+	public String getRemarks() {
+		return remarks;
+	}
+	
+	public void setRemarks(String remarks) {
+		this.remarks = remarks;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/Finance.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/Finance.java
new file mode 100644
index 00000000..a9fde9bd
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/Finance.java
@@ -0,0 +1,372 @@
+package com.gx.obe.struct.beans;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description: 财务报表
+ * @author chenxw
+ */
+public class Finance {
+	
+	/**
+	 * 主键
+	 */
+	private String id;
+	/**
+	 * 项目ID
+	 */
+	private String tenderId;
+	/**
+	 * 模型数据ID
+	 */
+	private String modelDataId;
+	/**
+	 * 年度
+	 */
+	private String annual;
+	/**
+	 * 注册资本
+	 */
+//	private BigDecimal registeredCapital;
+	/**
+	 * 总资产(万元)
+	 */
+	private BigDecimal total;
+	/**
+	 * 利润总额(万元)
+	 */
+	private BigDecimal profitLossProfit;
+	/**
+	 * 营业收入(万元)
+	 */
+	private BigDecimal operatingIncome;
+	/**
+	 * 资产负债率(%)
+	 */
+	private BigDecimal liabilitiesRate;
+	/**
+	 * 流动资产(万元)
+	 */
+	private BigDecimal currentAssets;
+	/**
+	 * 流动负债(万元)
+	 */
+	private BigDecimal currentLiabilities;
+	/**
+	 * 流动比率(%)
+	 */
+	private BigDecimal currentRate;
+	/**
+	 * 净利率(%)
+	 */
+	private BigDecimal profitRatio;
+	/**
+	 * 主营业务利润率(%)
+	 */
+	private BigDecimal operatingMargin;
+	/**
+	 * 净利润(万元)
+	 */
+	private BigDecimal retainedProfits;
+	/**
+	 * 企业名称
+	 */
+	private String companyName;
+	/**
+	 * 净资产(万元)
+	 */
+	private BigDecimal netWorth;
+	/**
+	 * 固定资产(万元)
+	 */
+//	private BigDecimal fixedAssets;
+	/**
+	 * 现金流量净额(万元)
+	 */
+//	private BigDecimal netCashFlow;
+	/**
+	 * 净资产收益率(%)
+	 */
+//	private BigDecimal returnOnEquity;
+	/**
+	 * 总资产报酬率(%)
+	 */
+//	private BigDecimal returnOnTotalAsset;
+	/**
+	 * 速动比率(%)
+	 */
+	private BigDecimal quickRatio;
+	/**
+	 * 负债合计(万元)
+	 */
+	private BigDecimal totalliabilities;
+	/**
+	 * 成本费用总额(万元)
+	 */
+	private BigDecimal totalcost;
+	/**
+	 * 速动资产(万元)
+	 */
+	private BigDecimal quickassets;
+	/**
+	 * 主营业务利润(万元)
+	 */
+	private BigDecimal mainIncomeProfits;
+	/**
+	 * 主营业务收入(万元)
+	 */
+	private BigDecimal primeOperatingRevenue;
+	/**
+	 * 资产负债表
+	 */
+//	private BalanceSheet balanceSheet;
+	/**
+	 * 损益表
+	 */
+//	private ProfitlossSheet profitlossSheet;
+	/**
+	 * 现金流量表
+	 */
+//	private CashSheet cashSheet;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getModelDataId() {
+		return modelDataId;
+	}
+	
+	public void setModelDataId(String modelDataId) {
+		this.modelDataId = modelDataId;
+	}
+	
+	public String getAnnual() {
+		return annual;
+	}
+	
+	public void setAnnual(String annual) {
+		this.annual = annual;
+	}
+	
+	public BigDecimal getTotal() {
+		return total;
+	}
+	
+	public void setTotal(BigDecimal total) {
+		this.total = total;
+	}
+	
+	public BigDecimal getOperatingIncome() {
+		return operatingIncome;
+	}
+	
+	public void setOperatingIncome(BigDecimal operatingIncome) {
+		this.operatingIncome = operatingIncome;
+	}
+	
+	public BigDecimal getLiabilitiesRate() {
+		return liabilitiesRate;
+	}
+	
+	public void setLiabilitiesRate(BigDecimal liabilitiesRate) {
+		this.liabilitiesRate = liabilitiesRate;
+	}
+	
+	public BigDecimal getCurrentAssets() {
+		return currentAssets;
+	}
+	
+	public void setCurrentAssets(BigDecimal currentAssets) {
+		this.currentAssets = currentAssets;
+	}
+	
+	public BigDecimal getCurrentLiabilities() {
+		return currentLiabilities;
+	}
+	
+	public void setCurrentLiabilities(BigDecimal currentLiabilities) {
+		this.currentLiabilities = currentLiabilities;
+	}
+	
+	public BigDecimal getCurrentRate() {
+		return currentRate;
+	}
+	
+	public void setCurrentRate(BigDecimal currentRate) {
+		this.currentRate = currentRate;
+	}
+	
+	public BigDecimal getOperatingMargin() {
+		return operatingMargin;
+	}
+	
+	public void setOperatingMargin(BigDecimal operatingMargin) {
+		this.operatingMargin = operatingMargin;
+	}
+	
+	public BigDecimal getRetainedProfits() {
+		return retainedProfits;
+	}
+	
+	public void setRetainedProfits(BigDecimal retainedProfits) {
+		this.retainedProfits = retainedProfits;
+	}
+	
+	public String getCompanyName() {
+		return companyName;
+	}
+	
+	public void setCompanyName(String companyName) {
+		this.companyName = companyName;
+	}
+	
+	public BigDecimal getNetWorth() {
+		return netWorth;
+	}
+	
+	public void setNetWorth(BigDecimal netWorth) {
+		this.netWorth = netWorth;
+	}
+	
+//	public BigDecimal getFixedAssets() {
+//		return fixedAssets;
+//	}
+//	
+//	public void setFixedAssets(BigDecimal fixedAssets) {
+//		this.fixedAssets = fixedAssets;
+//	}
+//	
+//	public BigDecimal getNetCashFlow() {
+//		return netCashFlow;
+//	}
+//	
+//	public void setNetCashFlow(BigDecimal netCashFlow) {
+//		this.netCashFlow = netCashFlow;
+//	}
+//	
+//	public BigDecimal getReturnOnEquity() {
+//		return returnOnEquity;
+//	}
+//	
+//	public void setReturnOnEquity(BigDecimal returnOnEquity) {
+//		this.returnOnEquity = returnOnEquity;
+//	}
+//	
+//	public BigDecimal getReturnOnTotalAsset() {
+//		return returnOnTotalAsset;
+//	}
+//	
+//	public void setReturnOnTotalAsset(BigDecimal returnOnTotalAsset) {
+//		this.returnOnTotalAsset = returnOnTotalAsset;
+//	}
+	
+	public BigDecimal getQuickRatio() {
+		return quickRatio;
+	}
+	
+	public void setQuickRatio(BigDecimal quickRatio) {
+		this.quickRatio = quickRatio;
+	}
+	
+	public BigDecimal getTotalliabilities() {
+		return totalliabilities;
+	}
+	
+	public void setTotalliabilities(BigDecimal totalliabilities) {
+		this.totalliabilities = totalliabilities;
+	}
+	
+//	public BalanceSheet getBalanceSheet() {
+//		return balanceSheet;
+//	}
+//	
+//	public void setBalanceSheet(BalanceSheet balanceSheet) {
+//		this.balanceSheet = balanceSheet;
+//	}
+//	
+//	public ProfitlossSheet getProfitlossSheet() {
+//		return profitlossSheet;
+//	}
+//	
+//	public void setProfitlossSheet(ProfitlossSheet profitlossSheet) {
+//		this.profitlossSheet = profitlossSheet;
+//	}
+//	
+//	public CashSheet getCashSheet() {
+//		return cashSheet;
+//	}
+//	
+//	public void setCashSheet(CashSheet cashSheet) {
+//		this.cashSheet = cashSheet;
+//	}
+	
+//	public BigDecimal getRegisteredCapital() {
+//		return registeredCapital;
+//	}
+//	
+//	public void setRegisteredCapital(BigDecimal registeredCapital) {
+//		this.registeredCapital = registeredCapital;
+//	}
+	
+	public BigDecimal getTotalcost() {
+		return totalcost;
+	}
+	
+	public void setTotalcost(BigDecimal totalcost) {
+		this.totalcost = totalcost;
+	}
+	
+	public BigDecimal getQuickassets() {
+		return quickassets;
+	}
+	
+	public void setQuickassets(BigDecimal quickassets) {
+		this.quickassets = quickassets;
+	}
+	
+	public BigDecimal getMainIncomeProfits() {
+		return mainIncomeProfits;
+	}
+	
+	public void setMainIncomeProfits(BigDecimal mainIncomeProfits) {
+		this.mainIncomeProfits = mainIncomeProfits;
+	}
+
+	public BigDecimal getPrimeOperatingRevenue() {
+		return primeOperatingRevenue;
+	}
+
+	public void setPrimeOperatingRevenue(BigDecimal primeOperatingRevenue) {
+		this.primeOperatingRevenue = primeOperatingRevenue;
+	}
+
+	public BigDecimal getProfitLossProfit() {
+		return profitLossProfit;
+	}
+
+	public void setProfitLossProfit(BigDecimal profitLossProfit) {
+		this.profitLossProfit = profitLossProfit;
+	}
+
+	public BigDecimal getProfitRatio() {
+		return profitRatio;
+	}
+
+	public void setProfitRatio(BigDecimal profitRatio) {
+		this.profitRatio = profitRatio;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/IntelligentEvalDO.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/IntelligentEvalDO.java
new file mode 100644
index 00000000..8e538601
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/IntelligentEvalDO.java
@@ -0,0 +1,244 @@
+package com.gx.obe.struct.beans;
+
+import java.util.List;
+
+import com.gx.obe.http.json.JsonUtil;
+
+/**
+ * 评审指标结构化区域
+ * @author gnauh
+ *
+ */
+public class IntelligentEvalDO {
+	
+	/**
+	 * @Description: 供应商问题描述
+	 */
+//	private String supplierQuestion;
+	/**
+	 * @Description: 是否需要上传附件 00不需要 01 需要
+	 */
+//	private String isMustBoundFile;
+	/**
+	 * @Description: 指标来源 供应商响应:A ,系统采集:B ,供应商响应时:指标内容只能是99无,指标模型可不考虑;系统采集时:指标内容不能是99无,指标模型必选;
+	 */
+//	private String factorSource;
+	/**
+	 * @Description: 指标内容 01 注册资金、02 履约异常、03同业业绩、04 全部业绩、05 合格率、06 供应商等级、07使用质量、08 交付履约绩效、99 其它类型
+	 */
+	private String factorType;
+	/**
+	 * @Description: 区间模型 05 时间模型06 升降率模型 07 否决项模型 08
+	 */
+	private String factorModel;
+	/**
+	 * @Description: 评审指标代码 指标模型+指标来源+指标内容+四位流水码
+	 */
+	private String factorCode;
+	/**
+	 * @Description: 开始日期
+	 */
+//	private String startDate;
+	/**
+	 * @Description: 结束日期
+	 */
+//	private String endDate;
+	/**
+	 * @Description: 单位 万元01,个02
+	 */
+//	private String unit;
+	/**
+	 * @Description: 单位 万元01,个02
+	 */
+//	private String unitCode;
+//	/**
+//	 * @Description: 类型说明是否项:是 01,否 00
+//	 */
+//	private String correctResult;
+	/**
+	 * @Description: 评审模型描述
+	 */
+//	private String intelligentEvalRemark;
+	/**
+	 * @Description: 区间列表
+	 */
+	private List<ConditionDO> conditionList;
+//	/**
+//	 * @Description: 时间模型
+//	 */
+//	private TimeModelDO timeModel;
+	/**
+	 * @Description: 升降率模型
+	 */
+	private LiftRateDO liftRate;
+	
+	private List<ScoreOptionsDO> scoreOptionsDOList;
+//	/**
+//	 * @Description: 否决项模型
+//	 */
+//	private VoteModelDO voteModel;
+//	/**
+//	 * @Description: 自定义模型
+//	 */
+//	private List<CustomModelDo> customModelList;
+	
+	public String toJson() {
+		return JsonUtil.jsonObjectToStr(this);
+	}
+	
+//	public String getSupplierQuestion() {
+//		return supplierQuestion;
+//	}
+//	
+//	public void setSupplierQuestion(String supplierQuestion) {
+//		this.supplierQuestion = supplierQuestion;
+//	}
+	
+//	public String getIsMustBoundFile() {
+//		return isMustBoundFile;
+//	}
+//	
+//	public void setIsMustBoundFile(String isMustBoundFile) {
+//		this.isMustBoundFile = isMustBoundFile;
+//	}
+	
+//	public String getFactorSource() {
+//		return factorSource;
+//	}
+//	
+//	public void setFactorSource(String factorSource) {
+//		this.factorSource = factorSource;
+//	}
+	
+	private AbsoluteModelDO absoluteModelDO;
+	
+	public AbsoluteModelDO getAbsoluteModelDO() {
+		return absoluteModelDO;
+	}
+
+	public void setAbsoluteModelDO(AbsoluteModelDO absoluteModelDO) {
+		this.absoluteModelDO = absoluteModelDO;
+	}
+
+	public String getFactorType() {
+		return factorType;
+	}
+	
+	public void setFactorType(String factorType) {
+		this.factorType = factorType;
+	}
+	
+	public String getFactorModel() {
+		return factorModel;
+	}
+	
+	public void setFactorModel(String factorModel) {
+		this.factorModel = factorModel;
+	}
+	
+	public String getFactorCode() {
+		return factorCode;
+	}
+	
+	public void setFactorCode(String factorCode) {
+		this.factorCode = factorCode;
+	}
+	
+//	public String getStartDate() {
+//		return startDate;
+//	}
+//	
+//	public void setStartDate(String startDate) {
+//		this.startDate = startDate;
+//	}
+	
+//	public String getEndDate() {
+//		return endDate;
+//	}
+//	
+//	public void setEndDate(String endDate) {
+//		this.endDate = endDate;
+//	}
+//	
+//	public String getUnit() {
+//		return unit;
+//	}
+//	
+//	public void setUnit(String unit) {
+//		this.unit = unit;
+//	}
+//	
+//	public String getUnitCode() {
+//		return unitCode;
+//	}
+//	
+//	public void setUnitCode(String unitCode) {
+//		this.unitCode = unitCode;
+//	}
+	
+	public List<ConditionDO> getConditionList() {
+		return conditionList;
+	}
+	
+	public void setConditionList(List<ConditionDO> conditionList) {
+		this.conditionList = conditionList;
+	}
+	
+
+	public List<ScoreOptionsDO> getScoreOptionsDOList() {
+		return scoreOptionsDOList;
+	}
+
+	public void setScoreOptionsDOList(List<ScoreOptionsDO> scoreOptionsDOList) {
+		this.scoreOptionsDOList = scoreOptionsDOList;
+	}
+
+	//	public TimeModelDO getTimeModel() {
+//		return timeModel;
+//	}
+//	
+//	public void setTimeModel(TimeModelDO timeModel) {
+//		this.timeModel = timeModel;
+//	}
+//	
+	public LiftRateDO getLiftRate() {
+		return liftRate;
+	}
+	
+	public void setLiftRate(LiftRateDO liftRate) {
+		this.liftRate = liftRate;
+	}
+	
+//	public VoteModelDO getVoteModel() {
+//		return voteModel;
+//	}
+//	
+//	public void setVoteModel(VoteModelDO voteModel) {
+//		this.voteModel = voteModel;
+//	}
+	
+//	public String getCorrectResult() {
+//		return correctResult;
+//	}
+//	
+//	public void setCorrectResult(String correctResult) {
+//		this.correctResult = correctResult;
+//	}
+	
+//	public String getIntelligentEvalRemark() {
+//		return intelligentEvalRemark;
+//	}
+//	
+//	public void setIntelligentEvalRemark(String intelligentEvalRemark) {
+//		this.intelligentEvalRemark = intelligentEvalRemark;
+//	}
+//	
+//	public List<CustomModelDo> getCustomModelList() {
+//		return customModelList;
+//	}
+//	
+//	public void setCustomModelList(List<CustomModelDo> customModelList) {
+//		this.customModelList = customModelList;
+//	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/LiftRateDO.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/LiftRateDO.java
new file mode 100644
index 00000000..bad418d0
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/LiftRateDO.java
@@ -0,0 +1,159 @@
+package com.gx.obe.struct.beans;
+
+public class LiftRateDO {
+	
+	/**
+	 <liftRate>
+     <_responseType>排名</_responseType>
+     <sort>1</sort>
+     <Score>5</Score>
+     <MinScore>0</MinScore>
+     <MaxScore>5</MaxScore>
+     <responseType>01</responseType>
+     <typeNote>01</typeNote>
+     <_typeNote>高名次</_typeNote>
+     <ranking>1</ranking>
+     <dealType>01</dealType>
+     <_dealType>投标人响应值最高为第一名</_dealType>
+     <dealScore />
+     <unit>%</unit>
+     <decimalDigits>6</decimalDigits>
+    </liftRate>
+    */
+	/**
+	 * @Description: 响应类型: 排名 01、百分比 02、出现次数 03
+	 */
+	private String responseType;
+	/**
+	 * @Description: 类型说明:高名次 01、低名次 02
+	 */
+	private String typeNote;
+	/**
+	 * @Description: 名次:整形
+	 */
+	private String ranking;
+	/**
+	 * @Description: 处理类型:加分01 、扣分 02
+	 */
+	private String dealType;
+	/**
+	 * @Description: 处理分数:可填
+	 */
+	private String dealScore;
+	/**
+	 * @Description: 备注:可填
+	 */
+	private String memo;
+	private String sort;
+	private String Score;
+	private String minScore;
+	private String maxScore;
+	
+	/**
+	 * 单位
+	 */
+	private String unit;
+	/**
+	 * 小数点位数
+	 */
+	private String decimalDigits;
+	
+	public String getResponseType() {
+		return responseType;
+	}
+	
+	public void setResponseType(String responseType) {
+		this.responseType = responseType;
+	}
+	
+	public String getTypeNote() {
+		return typeNote;
+	}
+	
+	public void setTypeNote(String typeNote) {
+		this.typeNote = typeNote;
+	}
+	
+	public String getRanking() {
+		return ranking;
+	}
+	
+	public void setRanking(String ranking) {
+		this.ranking = ranking;
+	}
+	
+	public String getDealType() {
+		return dealType;
+	}
+	
+	public void setDealType(String dealType) {
+		this.dealType = dealType;
+	}
+	
+	public String getDealScore() {
+		return dealScore;
+	}
+	
+	public void setDealScore(String dealScore) {
+		this.dealScore = dealScore;
+	}
+	
+	public String getMemo() {
+		return memo;
+	}
+	
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+
+	public String getSort() {
+		return sort;
+	}
+
+	public void setSort(String sort) {
+		this.sort = sort;
+	}
+
+	public String getScore() {
+		return Score;
+	}
+
+	public void setScore(String score) {
+		Score = score;
+	}
+
+	public String getUnit() {
+		return unit;
+	}
+
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+
+	public String getDecimalDigits() {
+		return decimalDigits;
+	}
+
+	public void setDecimalDigits(String decimalDigits) {
+		this.decimalDigits = decimalDigits;
+	}
+
+	public String getMinScore() {
+		return minScore;
+	}
+
+	public void setMinScore(String minScore) {
+		this.minScore = minScore;
+	}
+
+	public String getMaxScore() {
+		return maxScore;
+	}
+
+	public void setMaxScore(String maxScore) {
+		this.maxScore = maxScore;
+	}
+
+	
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/ModelData.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/ModelData.java
new file mode 100644
index 00000000..66abe545
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/ModelData.java
@@ -0,0 +1,54 @@
+package com.gx.obe.struct.beans;
+
+/** 
+ * @Description: 对象结构化数据
+ * @author chenxw 
+ */
+public class ModelData {
+	
+	private String id;
+	private String tenderId;
+	private String supplierId;
+	private String relChapterType;
+	private String dataCode;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getSupplierId() {
+		return supplierId;
+	}
+	
+	public void setSupplierId(String supplierId) {
+		this.supplierId = supplierId;
+	}
+	
+	public String getRelChapterType() {
+		return relChapterType;
+	}
+	
+	public void setRelChapterType(String relChapterType) {
+		this.relChapterType = relChapterType;
+	}
+	
+	public String getDataCode() {
+		return dataCode;
+	}
+	
+	public void setDataCode(String dataCode) {
+		this.dataCode = dataCode;
+	}
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/ParamValueDO.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/ParamValueDO.java
new file mode 100644
index 00000000..1f1fc468
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/ParamValueDO.java
@@ -0,0 +1,32 @@
+package com.gx.obe.struct.beans;
+
+public class ParamValueDO {
+
+    //<!--数据Code 如财务报告中的主营业务利润等资质证明文件的类型 如:EQ_FinancialReport,也包括后续扩展有具体含义的数据Code -->
+	private String dataCode;
+	//	<!--数据类型 string字符串  number数字 投标管家对于无具体含义填空时使用  -->
+	private String dataType;
+	//	<!--具体的响应值,如果是资质证明文件类型数据这里就是对于资质的数据文件 如:Finance.xml,如果是选项模型的这里保存的是选项的Id,其他的是投标人填写的对应的值。 -->
+	private String dataValue;
+	
+	public String getDataCode() {
+		return dataCode;
+	}
+	public void setDataCode(String dataCode) {
+		this.dataCode = dataCode;
+	}
+	public String getDataType() {
+		return dataType;
+	}
+	public void setDataType(String dataType) {
+		this.dataType = dataType;
+	}
+	public String getDataValue() {
+		return dataValue;
+	}
+	public void setDataValue(String dataValue) {
+		this.dataValue = dataValue;
+	}
+	
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/Performance.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/Performance.java
new file mode 100644
index 00000000..019e310c
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/Performance.java
@@ -0,0 +1,658 @@
+package com.gx.obe.struct.beans;
+
+/**
+ * @author mazc
+ * @Description:
+ */
+public class Performance {
+	
+	/**
+	 * 主键
+	 */
+	private String id;
+	/**
+	 * 项目ID
+	 */
+	private String tenderId;
+	/**
+	 * 模型数据ID
+	 */
+	private String modelDataId;
+	/**
+	 * 采购单位
+	 */
+	private String purchasingUnit;
+	/**
+	 * 供货单位
+	 */
+	private String partner;
+	/**
+	 * 项目名称
+	 */
+	private String projectName;
+	/**
+	 * 签订日期
+	 */
+	private String singningDate;
+	/**
+	 * 结束日期
+	 */
+	private String endTime;
+	/**
+	 * 合同金额(单位:元)
+	 */
+	private String singningTotal;
+	/**
+	 * 项目经理姓名
+	 */
+	private String purchaser;
+	/**
+	 * 代表联系电话
+	 */
+	private String purchaserPhone;
+	/**
+	 * 业绩状态(00:进行中;01:已完成)
+	 */
+	private String status;
+	/**
+	 * 企业名称
+	 */
+	private String supplierName;
+	/**
+	 * 项目所在地
+	 */
+	private String projectAddress;
+	/**
+	 * 发包人名称
+	 */
+	private String buyerName;
+	/**
+	 * 发包人地址
+	 */
+	private String buyerAddress;
+	/**
+	 * 发包人电话
+	 */
+	private String buyerPhoneNumber;
+	/**
+	 * 开工日期
+	 */
+	private String startTime;
+	/**
+	 * 承担的工作
+	 */
+	private String workUndertaken;
+	/**
+	 * 工程质量
+	 */
+	private String projectQuantity;
+	/**
+	 * 项目经理
+	 */
+	private String projectManager;
+	/**
+	 * 技术负责人
+	 */
+	private String technicalDirector;
+	/**
+	 * 总监理工程师
+	 */
+	private String chiefSupervisionEngineer;
+	/**
+	 * 总监理工程师电话
+	 */
+	private String csePhoneNumber;
+	/**
+	 * 项目描述
+	 */
+	private String projectDesc;
+	/**
+	 * 调试范围及内容
+	 */
+	private String projectRangeAndContent;
+	/**
+	 * 调试机构人数高峰
+	 */
+	private String supplierWorkerCountmax;
+	/**
+	 * 调试机构人数平均
+	 */
+	private String supplierWorkerCountave;
+	/**
+	 * 工程评定情况
+	 */
+	private String projectDeviceResult;
+	/**
+	 * 项目单位联系人
+	 */
+	private String buyerLinkman;
+	/**
+	 * 是否附证明文件
+	 */
+	private String isHavrAccessory;
+	/**
+	 * 是否为华能系统的项目
+	 */
+	private String isOurCompanyProject;
+	/**
+	 * 服务范围
+	 */
+	private String serviceScope;
+	/**
+	 * 设备名称
+	 */
+	private String deviceName;
+	/**
+	 * 型号和规格
+	 */
+	private String devicetypeSpecification;
+	/**
+	 * 总容量
+	 */
+	private String totalCapacity;
+	/**
+	 * 台数
+	 */
+	private String number;
+	/**
+	 * 合同时间
+	 */
+	private String contractTime;
+	/**
+	 * 投运时间
+	 */
+	private String commissioningTime;
+	/**
+	 * 备注
+	 */
+	private String memo;
+	/**
+	 * 建设规模
+	 */
+	private String projectScale;
+	/**
+	 * 专业人员人数
+	 */
+	private String professionalNumber;
+	/**
+	 * 专业人员人月数
+	 */
+	private String professionalWorkload;
+	/**
+	 * 合作公司提供人员月数
+	 */
+	private String partnerProfessionalWorkload;
+	/**
+	 * 监理范围及内容
+	 */
+	private String supervisionCcontent;
+	/**
+	 * 监理效果
+	 */
+	private String supervisionResult;
+	/**
+	 * 关键人员姓名专业及职务
+	 */
+	private String keyStaffProfessionalAndDuty;
+	/**
+	 * 实际服务说明
+	 */
+	private String serviceDesc;
+	/**
+	 * 履约日期
+	 */
+	private String executionDate;
+	/**
+	 * 规模类型
+	 */
+	private String projectScaleAndType;
+	/**
+	 * 设计阶段
+	 */
+	private String designStage;
+	/**
+	 * 设计范围
+	 */
+	private String designRange;
+	/**
+	 * 合作方式
+	 */
+	private String cooperationWay;
+	/**
+	 * 合同履行获奖情况/合同履行情况
+	 */
+	private String contractExecuteCondition;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getModelDataId() {
+		return modelDataId;
+	}
+	
+	public void setModelDataId(String modelDataId) {
+		this.modelDataId = modelDataId;
+	}
+	
+	public String getPurchasingUnit() {
+		return purchasingUnit;
+	}
+	
+	public void setPurchasingUnit(String purchasingUnit) {
+		this.purchasingUnit = purchasingUnit;
+	}
+	
+	public String getPartner() {
+		return partner;
+	}
+	
+	public void setPartner(String partner) {
+		this.partner = partner;
+	}
+	
+	public String getProjectName() {
+		return projectName;
+	}
+	
+	public void setProjectName(String projectName) {
+		this.projectName = projectName;
+	}
+	
+	public String getSingningDate() {
+		return singningDate;
+	}
+	
+	public void setSingningDate(String singningDate) {
+		this.singningDate = singningDate;
+	}
+	
+	public String getEndTime() {
+		return endTime;
+	}
+	
+	public void setEndTime(String endTime) {
+		this.endTime = endTime;
+	}
+	
+	public String getSingningTotal() {
+		return singningTotal;
+	}
+	
+	public void setSingningTotal(String singningTotal) {
+		this.singningTotal = singningTotal;
+	}
+	
+	public String getPurchaser() {
+		return purchaser;
+	}
+	
+	public void setPurchaser(String purchaser) {
+		this.purchaser = purchaser;
+	}
+	
+	public String getPurchaserPhone() {
+		return purchaserPhone;
+	}
+	
+	public void setPurchaserPhone(String purchaserPhone) {
+		this.purchaserPhone = purchaserPhone;
+	}
+	
+	public String getStatus() {
+		return status;
+	}
+	
+	public void setStatus(String status) {
+		this.status = status;
+	}
+	
+	public String getSupplierName() {
+		return supplierName;
+	}
+	
+	public void setSupplierName(String supplierName) {
+		this.supplierName = supplierName;
+	}
+	
+	public String getProjectAddress() {
+		return projectAddress;
+	}
+	
+	public void setProjectAddress(String projectAddress) {
+		this.projectAddress = projectAddress;
+	}
+	
+	public String getBuyerName() {
+		return buyerName;
+	}
+	
+	public void setBuyerName(String buyerName) {
+		this.buyerName = buyerName;
+	}
+	
+	public String getBuyerAddress() {
+		return buyerAddress;
+	}
+	
+	public void setBuyerAddress(String buyerAddress) {
+		this.buyerAddress = buyerAddress;
+	}
+	
+	public String getBuyerPhoneNumber() {
+		return buyerPhoneNumber;
+	}
+	
+	public void setBuyerPhoneNumber(String buyerPhoneNumber) {
+		this.buyerPhoneNumber = buyerPhoneNumber;
+	}
+	
+	public String getStartTime() {
+		return startTime;
+	}
+	
+	public void setStartTime(String startTime) {
+		this.startTime = startTime;
+	}
+	
+	public String getWorkUndertaken() {
+		return workUndertaken;
+	}
+	
+	public void setWorkUndertaken(String workUndertaken) {
+		this.workUndertaken = workUndertaken;
+	}
+	
+	public String getProjectQuantity() {
+		return projectQuantity;
+	}
+	
+	public void setProjectQuantity(String projectQuantity) {
+		this.projectQuantity = projectQuantity;
+	}
+	
+	public String getProjectManager() {
+		return projectManager;
+	}
+	
+	public void setProjectManager(String projectManager) {
+		this.projectManager = projectManager;
+	}
+	
+	public String getTechnicalDirector() {
+		return technicalDirector;
+	}
+	
+	public void setTechnicalDirector(String technicalDirector) {
+		this.technicalDirector = technicalDirector;
+	}
+	
+	public String getChiefSupervisionEngineer() {
+		return chiefSupervisionEngineer;
+	}
+	
+	public void setChiefSupervisionEngineer(String chiefSupervisionEngineer) {
+		this.chiefSupervisionEngineer = chiefSupervisionEngineer;
+	}
+	
+	public String getCsePhoneNumber() {
+		return csePhoneNumber;
+	}
+	
+	public void setCsePhoneNumber(String csePhoneNumber) {
+		this.csePhoneNumber = csePhoneNumber;
+	}
+	
+	public String getProjectDesc() {
+		return projectDesc;
+	}
+	
+	public void setProjectDesc(String projectDesc) {
+		this.projectDesc = projectDesc;
+	}
+	
+	public String getProjectRangeAndContent() {
+		return projectRangeAndContent;
+	}
+	
+	public void setProjectRangeAndContent(String projectRangeAndContent) {
+		this.projectRangeAndContent = projectRangeAndContent;
+	}
+	
+	public String getSupplierWorkerCountmax() {
+		return supplierWorkerCountmax;
+	}
+	
+	public void setSupplierWorkerCountmax(String supplierWorkerCountmax) {
+		this.supplierWorkerCountmax = supplierWorkerCountmax;
+	}
+	
+	public String getSupplierWorkerCountave() {
+		return supplierWorkerCountave;
+	}
+	
+	public void setSupplierWorkerCountave(String supplierWorkerCountave) {
+		this.supplierWorkerCountave = supplierWorkerCountave;
+	}
+	
+	public String getProjectDeviceResult() {
+		return projectDeviceResult;
+	}
+	
+	public void setProjectDeviceResult(String projectDeviceResult) {
+		this.projectDeviceResult = projectDeviceResult;
+	}
+	
+	public String getBuyerLinkman() {
+		return buyerLinkman;
+	}
+	
+	public void setBuyerLinkman(String buyerLinkman) {
+		this.buyerLinkman = buyerLinkman;
+	}
+	
+	public String getIsHavrAccessory() {
+		return isHavrAccessory;
+	}
+	
+	public void setIsHavrAccessory(String isHavrAccessory) {
+		this.isHavrAccessory = isHavrAccessory;
+	}
+	
+	public String getIsOurCompanyProject() {
+		return isOurCompanyProject;
+	}
+	
+	public void setIsOurCompanyProject(String isOurCompanyProject) {
+		this.isOurCompanyProject = isOurCompanyProject;
+	}
+	
+	public String getServiceScope() {
+		return serviceScope;
+	}
+	
+	public void setServiceScope(String serviceScope) {
+		this.serviceScope = serviceScope;
+	}
+	
+	public String getDeviceName() {
+		return deviceName;
+	}
+	
+	public void setDeviceName(String deviceName) {
+		this.deviceName = deviceName;
+	}
+	
+	public String getDevicetypeSpecification() {
+		return devicetypeSpecification;
+	}
+	
+	public void setDevicetypeSpecification(String devicetypeSpecification) {
+		this.devicetypeSpecification = devicetypeSpecification;
+	}
+	
+	public String getTotalCapacity() {
+		return totalCapacity;
+	}
+	
+	public void setTotalCapacity(String totalCapacity) {
+		this.totalCapacity = totalCapacity;
+	}
+	
+	public String getNumber() {
+		return number;
+	}
+	
+	public void setNumber(String number) {
+		this.number = number;
+	}
+	
+	public String getContractTime() {
+		return contractTime;
+	}
+	
+	public void setContractTime(String contractTime) {
+		this.contractTime = contractTime;
+	}
+	
+	public String getCommissioningTime() {
+		return commissioningTime;
+	}
+	
+	public void setCommissioningTime(String commissioningTime) {
+		this.commissioningTime = commissioningTime;
+	}
+	
+	public String getMemo() {
+		return memo;
+	}
+	
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+	
+	public String getProjectScale() {
+		return projectScale;
+	}
+	
+	public void setProjectScale(String projectScale) {
+		this.projectScale = projectScale;
+	}
+	
+	public String getProfessionalNumber() {
+		return professionalNumber;
+	}
+	
+	public void setProfessionalNumber(String professionalNumber) {
+		this.professionalNumber = professionalNumber;
+	}
+	
+	public String getProfessionalWorkload() {
+		return professionalWorkload;
+	}
+	
+	public void setProfessionalWorkload(String professionalWorkload) {
+		this.professionalWorkload = professionalWorkload;
+	}
+	
+	public String getPartnerProfessionalWorkload() {
+		return partnerProfessionalWorkload;
+	}
+	
+	public void setPartnerProfessionalWorkload(String partnerProfessionalWorkload) {
+		this.partnerProfessionalWorkload = partnerProfessionalWorkload;
+	}
+	
+	public String getSupervisionCcontent() {
+		return supervisionCcontent;
+	}
+	
+	public void setSupervisionCcontent(String supervisionCcontent) {
+		this.supervisionCcontent = supervisionCcontent;
+	}
+	
+	public String getSupervisionResult() {
+		return supervisionResult;
+	}
+	
+	public void setSupervisionResult(String supervisionResult) {
+		this.supervisionResult = supervisionResult;
+	}
+	
+	public String getKeyStaffProfessionalAndDuty() {
+		return keyStaffProfessionalAndDuty;
+	}
+	
+	public void setKeyStaffProfessionalAndDuty(String keyStaffProfessionalAndDuty) {
+		this.keyStaffProfessionalAndDuty = keyStaffProfessionalAndDuty;
+	}
+	
+	public String getServiceDesc() {
+		return serviceDesc;
+	}
+	
+	public void setServiceDesc(String serviceDesc) {
+		this.serviceDesc = serviceDesc;
+	}
+	
+	public String getExecutionDate() {
+		return executionDate;
+	}
+	
+	public void setExecutionDate(String executionDate) {
+		this.executionDate = executionDate;
+	}
+	
+	public String getProjectScaleAndType() {
+		return projectScaleAndType;
+	}
+	
+	public void setProjectScaleAndType(String projectScaleAndType) {
+		this.projectScaleAndType = projectScaleAndType;
+	}
+	
+	public String getDesignStage() {
+		return designStage;
+	}
+	
+	public void setDesignStage(String designStage) {
+		this.designStage = designStage;
+	}
+	
+	public String getDesignRange() {
+		return designRange;
+	}
+	
+	public void setDesignRange(String designRange) {
+		this.designRange = designRange;
+	}
+	
+	public String getCooperationWay() {
+		return cooperationWay;
+	}
+	
+	public void setCooperationWay(String cooperationWay) {
+		this.cooperationWay = cooperationWay;
+	}
+	
+	public String getContractExecuteCondition() {
+		return contractExecuteCondition;
+	}
+	
+	public void setContractExecuteCondition(String contractExecuteCondition) {
+		this.contractExecuteCondition = contractExecuteCondition;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/ProfitlossSheet.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/ProfitlossSheet.java
new file mode 100644
index 00000000..bef3045f
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/ProfitlossSheet.java
@@ -0,0 +1,132 @@
+package com.gx.obe.struct.beans;
+
+import java.math.BigDecimal;
+
+/**
+ * @Description: 损益表
+ * @author chenxw
+ */
+public class ProfitlossSheet {
+	
+	/**
+	 * 主键
+	 */
+	private String id;
+	/**
+	 * 项目ID
+	 */
+	private String tenderId;
+	/**
+	 * 财务ID
+	 */
+	private String financeId;
+	/**
+	 * 主营业务收入净额
+	 */
+	private BigDecimal mainIncome;
+	/**
+	 * 主营业务成本
+	 */
+	private BigDecimal mainCost;
+	/**
+	 * 财务费用
+	 */
+	private BigDecimal financialCost;
+	/**
+	 * 其他成本费用
+	 */
+	private BigDecimal otherCosts;
+	/**
+	 * 其中:技术开发、转让费用
+	 */
+	private BigDecimal developmentAndTransferCosts;
+	/**
+	 * 利润总额
+	 */
+	private BigDecimal profitLossprofit;
+	/**
+	 * 净利润
+	 */
+	private BigDecimal profitRetainedProfits;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getFinanceId() {
+		return financeId;
+	}
+	
+	public void setFinanceId(String financeId) {
+		this.financeId = financeId;
+	}
+	
+	public BigDecimal getMainIncome() {
+		return mainIncome;
+	}
+	
+	public void setMainIncome(BigDecimal mainIncome) {
+		this.mainIncome = mainIncome;
+	}
+	
+	public BigDecimal getMainCost() {
+		return mainCost;
+	}
+	
+	public void setMainCost(BigDecimal mainCost) {
+		this.mainCost = mainCost;
+	}
+	
+	public BigDecimal getFinancialCost() {
+		return financialCost;
+	}
+	
+	public void setFinancialCost(BigDecimal financialCost) {
+		this.financialCost = financialCost;
+	}
+	
+	public BigDecimal getOtherCosts() {
+		return otherCosts;
+	}
+	
+	public void setOtherCosts(BigDecimal otherCosts) {
+		this.otherCosts = otherCosts;
+	}
+	
+	public BigDecimal getDevelopmentAndTransferCosts() {
+		return developmentAndTransferCosts;
+	}
+	
+	public void setDevelopmentAndTransferCosts(BigDecimal developmentAndTransferCosts) {
+		this.developmentAndTransferCosts = developmentAndTransferCosts;
+	}
+	
+	public BigDecimal getProfitLossprofit() {
+		return profitLossprofit;
+	}
+	
+	public void setProfitLossprofit(BigDecimal profitLossprofit) {
+		this.profitLossprofit = profitLossprofit;
+	}
+	
+	public BigDecimal getProfitRetainedProfits() {
+		return profitRetainedProfits;
+	}
+	
+	public void setProfitRetainedProfits(BigDecimal profitRetainedProfits) {
+		this.profitRetainedProfits = profitRetainedProfits;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/ProjectLeader.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/ProjectLeader.java
new file mode 100644
index 00000000..0c02d4b1
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/ProjectLeader.java
@@ -0,0 +1,216 @@
+package com.gx.obe.struct.beans;
+
+import java.util.List;
+
+/**
+ * @author mazc
+ * @Description:
+ */
+public class ProjectLeader {
+	
+	/**
+	 * 主键
+	 */
+	private String id;
+	/**
+	 * 项目ID
+	 */
+	private String tenderId;
+	/**
+	 * 模型数据ID
+	 */
+	private String modelDataId;
+	/**
+	 * 公司名称
+	 */
+	private String companyName;
+	/**
+	 * 姓名
+	 */
+	private String leaderName;
+	/**
+	 * 身份证号
+	 */
+	private String idnumber;
+	/**
+	 * 年龄
+	 */
+	private String age;
+	/**
+	 * 职务名称
+	 */
+	private String jobTitle;
+	/**
+	 * 工作经验(年)
+	 */
+	private String workExperience;
+	/**
+	 * 当前专业工作年限
+	 */
+	private String currentMajorExperience;
+	/**
+	 * 毕业学校
+	 */
+	private String graduateSchool;
+	/**
+	 * 毕业专业
+	 */
+	private String graduateMajor;
+	/**
+	 * 学历
+	 */
+	private String education;
+	/**
+	 * 职称
+	 */
+	private String professionalTitle;
+	/**
+	 * 是否为项目负责人
+	 */
+	private String isLeaderFlag;
+	/**
+	 * 证书列表
+	 */
+	private List<Certificate> certificateList;
+	/**
+	 * 工作经历
+	 */
+	private List<WorkExperience> workExperienceList;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getModelDataId() {
+		return modelDataId;
+	}
+	
+	public void setModelDataId(String modelDataId) {
+		this.modelDataId = modelDataId;
+	}
+	
+	public String getLeaderName() {
+		return leaderName;
+	}
+	
+	public void setLeaderName(String leaderName) {
+		this.leaderName = leaderName;
+	}
+	
+	public String getIdnumber() {
+		return idnumber;
+	}
+	
+	public void setIdnumber(String idnumber) {
+		this.idnumber = idnumber;
+	}
+	
+	public String getAge() {
+		return age;
+	}
+	
+	public void setAge(String age) {
+		this.age = age;
+	}
+	
+	public String getJobTitle() {
+		return jobTitle;
+	}
+	
+	public void setJobTitle(String jobTitle) {
+		this.jobTitle = jobTitle;
+	}
+	
+	public String getWorkExperience() {
+		return workExperience;
+	}
+	
+	public void setWorkExperience(String workExperience) {
+		this.workExperience = workExperience;
+	}
+	
+	public List<Certificate> getCertificateList() {
+		return certificateList;
+	}
+	
+	public void setCertificateList(List<Certificate> certificateList) {
+		this.certificateList = certificateList;
+	}
+	
+	public String getCompanyName() {
+		return companyName;
+	}
+	
+	public void setCompanyName(String companyName) {
+		this.companyName = companyName;
+	}
+	
+	public String getCurrentMajorExperience() {
+		return currentMajorExperience;
+	}
+	
+	public void setCurrentMajorExperience(String currentMajorExperience) {
+		this.currentMajorExperience = currentMajorExperience;
+	}
+	
+	public String getGraduateSchool() {
+		return graduateSchool;
+	}
+	
+	public void setGraduateSchool(String graduateSchool) {
+		this.graduateSchool = graduateSchool;
+	}
+	
+	public String getGraduateMajor() {
+		return graduateMajor;
+	}
+	
+	public void setGraduateMajor(String graduateMajor) {
+		this.graduateMajor = graduateMajor;
+	}
+	
+	public String getEducation() {
+		return education;
+	}
+	
+	public void setEducation(String education) {
+		this.education = education;
+	}
+	
+	public List<WorkExperience> getWorkExperienceList() {
+		return workExperienceList;
+	}
+	
+	public void setWorkExperienceList(List<WorkExperience> workExperienceList) {
+		this.workExperienceList = workExperienceList;
+	}
+	
+	public String getProfessionalTitle() {
+		return professionalTitle;
+	}
+	
+	public void setProfessionalTitle(String professionalTitle) {
+		this.professionalTitle = professionalTitle;
+	}
+
+	public String getIsLeaderFlag() {
+		return isLeaderFlag;
+	}
+
+	public void setIsLeaderFlag(String isLeaderFlag) {
+		this.isLeaderFlag = isLeaderFlag;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/Qualification.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/Qualification.java
new file mode 100644
index 00000000..45d34844
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/Qualification.java
@@ -0,0 +1,154 @@
+package com.gx.obe.struct.beans;
+
+/**
+ * @author mazc
+ * @Description:
+ */
+public class Qualification {
+	
+	/**
+	 * 主键
+	 */
+	private String id;
+	/**
+	 * 项目ID
+	 */
+	private String tenderId;
+	/**
+	 * 模型数据ID
+	 */
+	private String modelDataId;
+	/**
+	 * 证书名称
+	 */
+	private String certificateName;
+	/**
+	 * 获奖工程名称
+	 */
+	private String awardProjectName;
+	/**
+	 * 单位名称
+	 */
+	private String companyName;
+	/**
+	 * 证书等级
+	 */
+	private String awardLevel;
+	/**
+	 * 证书编号
+	 */
+	private String certificateNumber;
+	/**
+	 * 发证机关(认证单位)
+	 */
+	private String issueAuthority;
+	/**
+	 * 发证日期
+	 */
+	private String issueDate;
+	/**
+	 * 有效期至
+	 */
+	private String periodValidity;
+	/**
+	 * 获奖工程名称
+	 */
+	private String projectName;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getModelDataId() {
+		return modelDataId;
+	}
+	
+	public void setModelDataId(String modelDataId) {
+		this.modelDataId = modelDataId;
+	}
+	
+	public String getCertificateName() {
+		return certificateName;
+	}
+	
+	public void setCertificateName(String certificateName) {
+		this.certificateName = certificateName;
+	}
+	
+	public String getAwardProjectName() {
+		return awardProjectName;
+	}
+	
+	public void setAwardProjectName(String awardProjectName) {
+		this.awardProjectName = awardProjectName;
+	}
+	
+	public String getCompanyName() {
+		return companyName;
+	}
+	
+	public void setCompanyName(String companyName) {
+		this.companyName = companyName;
+	}
+	
+	public String getAwardLevel() {
+		return awardLevel;
+	}
+	
+	public void setAwardLevel(String awardLevel) {
+		this.awardLevel = awardLevel;
+	}
+	
+	public String getCertificateNumber() {
+		return certificateNumber;
+	}
+	
+	public void setCertificateNumber(String certificateNumber) {
+		this.certificateNumber = certificateNumber;
+	}
+	
+	public String getIssueAuthority() {
+		return issueAuthority;
+	}
+	
+	public void setIssueAuthority(String issueAuthority) {
+		this.issueAuthority = issueAuthority;
+	}
+	
+	public String getIssueDate() {
+		return issueDate;
+	}
+	
+	public void setIssueDate(String issueDate) {
+		this.issueDate = issueDate;
+	}
+	
+	public String getPeriodValidity() {
+		return periodValidity;
+	}
+	
+	public void setPeriodValidity(String periodValidity) {
+		this.periodValidity = periodValidity;
+	}
+	
+	public String getProjectName() {
+		return projectName;
+	}
+	
+	public void setProjectName(String projectName) {
+		this.projectName = projectName;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/RespItemDO.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/RespItemDO.java
new file mode 100644
index 00000000..ac07b5d2
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/RespItemDO.java
@@ -0,0 +1,82 @@
+package com.gx.obe.struct.beans;
+/**
+ * 标书定位
+ * @author dell
+ *
+ */
+public class RespItemDO {
+
+//	<RespItem evalFactorId="630d6016d5234dbea9d311e0446b2298" fileId="55961ba60deba50831be7cc254b09201" fileName="商务部分--测试.pdf">
+//	  <id>23a81f9448314bc99127036432262165</id>
+//	  <pageNumber>1</pageNumber>
+//	  <endPageNumber>3</endPageNumber>
+//	  <name>(1-3)商务部分--测试</name>
+//	  <isNewRespItemInEditor>false</isNewRespItemInEditor>
+//	  <IsUserBindInFactor>true</IsUserBindInFactor>
+//	 </RespItem>
+	
+	private String evalFactorId;
+	
+	private String fileId;
+	
+	private String fileName;
+	
+	private String pageNumber;
+	
+	private String endPageNumber;
+	
+	private String name;
+	
+	public String getPage() {
+		return "【P" + pageNumber + "-" + endPageNumber + "页】";
+	}
+
+	public String getEvalFactorId() {
+		return evalFactorId;
+	}
+
+	public void setEvalFactorId(String evalFactorId) {
+		this.evalFactorId = evalFactorId;
+	}
+
+	public String getFileId() {
+		return fileId;
+	}
+
+	public void setFileId(String fileId) {
+		this.fileId = fileId;
+	}
+
+	public String getFileName() {
+		return fileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fileName = fileName;
+	}
+
+	public String getPageNumber() {
+		return pageNumber;
+	}
+
+	public void setPageNumber(String pageNumber) {
+		this.pageNumber = pageNumber;
+	}
+
+	public String getEndPageNumber() {
+		return endPageNumber;
+	}
+
+	public void setEndPageNumber(String endPageNumber) {
+		this.endPageNumber = endPageNumber;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/ScoreOptionsDO.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/ScoreOptionsDO.java
new file mode 100644
index 00000000..10d4cf85
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/ScoreOptionsDO.java
@@ -0,0 +1,35 @@
+package com.gx.obe.struct.beans;
+
+public class ScoreOptionsDO {
+	/**
+	 * @Description: 评审得分项id
+	 */
+	private String scoreItemId;
+	/**
+	 * @Description: 评审项名称
+	 */
+	private String name;
+	/**
+	 * @Description: 得分
+	 */
+	private String score;
+	public String getScoreItemId() {
+		return scoreItemId;
+	}
+	public void setScoreItemId(String scoreItemId) {
+		this.scoreItemId = scoreItemId;
+	}
+	public String getName() {
+		return name;
+	}
+	public void setName(String name) {
+		this.name = name;
+	}
+	public String getScore() {
+		return score;
+	}
+	public void setScore(String score) {
+		this.score = score;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/SelfEvalParamsDO.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/SelfEvalParamsDO.java
new file mode 100644
index 00000000..db9865a1
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/SelfEvalParamsDO.java
@@ -0,0 +1,70 @@
+package com.gx.obe.struct.beans;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.gx.obe.http.json.JsonUtil;
+
+
+/**
+ * 供应商自我评结构化响应内容
+ * @author gnauh
+ *
+ */
+public class SelfEvalParamsDO {
+	
+//	<paramValueList>
+//	   <paramValue>
+//	    <dataType><![CDATA[string]]></dataType>
+//	    <dataValue><![CDATA[4bbd0336c9624562a6b3639d92824ff5]]></dataValue>
+//	   </paramValue>
+//	  </paramValueList>
+	  
+	/**
+	 * 下拉选项内容
+	 */
+	private List<ParamValueDO> paramValueList;
+	
+	public String toJson() {
+		return JsonUtil.jsonObjectToStr(this);
+	}
+
+	public List<ParamValueDO> getParamValueList() {
+		return paramValueList;
+	}
+
+	public void setParamValueList(List<ParamValueDO> paramValueList) {
+		this.paramValueList = paramValueList;
+	}
+	
+	public void clearParamValue() {
+		if(null != paramValueList) {
+			paramValueList.clear();
+		}
+	}
+	public void addParamValue(ParamValueDO paramValueDO) {
+		if(null == paramValueList) {
+			paramValueList = new ArrayList<ParamValueDO>();
+		}
+		paramValueList.add(paramValueDO);
+	}
+	
+	/**
+	 * 获取选项值
+	 */
+	public String getSelectParamValue() {
+		if(null != paramValueList && paramValueList.size() > 0) {
+			return paramValueList.get(paramValueList.size() -1).getDataValue();
+		}
+		return null;
+	}
+	/**
+	 * 获取选项值
+	 */
+	public void setSelectParamValue(String dataValue) {
+		if(null != paramValueList && paramValueList.size() > 0) {
+			paramValueList.get(paramValueList.size() -1).setDataValue(dataValue);;
+		}
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/StructDateInfo.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/StructDateInfo.java
new file mode 100644
index 00000000..2f5770e5
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/StructDateInfo.java
@@ -0,0 +1,59 @@
+package com.gx.obe.struct.beans;
+
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+public class StructDateInfo {
+	
+	private final List<TemplateDataItem> templateDataItemList = new CopyOnWriteArrayList<>();
+	private final List<TemplateTable> templateTableList = new CopyOnWriteArrayList<>();
+	private final List<ModelData> modelDataList = new CopyOnWriteArrayList<>();
+	private final List<BusinessLicense> businessLicenseList = new CopyOnWriteArrayList<>();
+	private final List<Finance> financeList = new CopyOnWriteArrayList<>();
+	private final List<Performance> performanceList = new CopyOnWriteArrayList<>();
+	private final List<BidderBasicInfo> bidderBasicInfoList = new CopyOnWriteArrayList<>();
+	private final List<Qualification> qualificationList = new CopyOnWriteArrayList<>();
+	private final List<ProjectLeader> projectLeaderList = new CopyOnWriteArrayList<>();
+	private final List<AttachmentFile> attachmentFileList = new CopyOnWriteArrayList<>();
+	
+	public List<TemplateTable> getTemplateTableList() {
+		return templateTableList;
+	}
+	
+	public List<ModelData> getModelDataList() {
+		return modelDataList;
+	}
+	
+	public List<BusinessLicense> getBusinessLicenseList() {
+		return businessLicenseList;
+	}
+	
+	public List<Finance> getFinanceList() {
+		return financeList;
+	}
+	
+	public List<Performance> getPerformanceList() {
+		return performanceList;
+	}
+	
+	public List<BidderBasicInfo> getBidderBasicInfoList() {
+		return bidderBasicInfoList;
+	}
+	
+	public List<Qualification> getQualificationList() {
+		return qualificationList;
+	}
+	
+	public List<ProjectLeader> getProjectLeaderList() {
+		return projectLeaderList;
+	}
+	
+	public List<TemplateDataItem> getTemplateDataItemList() {
+		return templateDataItemList;
+	}
+	
+	public List<AttachmentFile> getAttachmentFileList() {
+		return attachmentFileList;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/TemplateDataItem.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/TemplateDataItem.java
new file mode 100644
index 00000000..c72117ec
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/TemplateDataItem.java
@@ -0,0 +1,100 @@
+package com.gx.obe.struct.beans;
+
+/**
+ * @author mazc
+ * @Description:
+ */
+public class TemplateDataItem {
+	
+	private String id;
+	private String tenderId;
+	private String supplierId;
+	private String relChapterType;
+	private String dataCode;
+	private String name;
+	private String value;
+	private String type;
+	private String dataType;
+	private String unit;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getSupplierId() {
+		return supplierId;
+	}
+	
+	public void setSupplierId(String supplierId) {
+		this.supplierId = supplierId;
+	}
+	
+	public String getRelChapterType() {
+		return relChapterType;
+	}
+	
+	public void setRelChapterType(String relChapterType) {
+		this.relChapterType = relChapterType;
+	}
+	
+	public String getDataCode() {
+		return dataCode;
+	}
+	
+	public void setDataCode(String dataCode) {
+		this.dataCode = dataCode;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getValue() {
+		return value;
+	}
+	
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+	public String getType() {
+		return type;
+	}
+	
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+	public String getDataType() {
+		return dataType;
+	}
+	
+	public void setDataType(String dataType) {
+		this.dataType = dataType;
+	}
+	
+	public String getUnit() {
+		return unit;
+	}
+	
+	public void setUnit(String unit) {
+		this.unit = unit;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/TemplateTable.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/TemplateTable.java
new file mode 100644
index 00000000..f54b6e52
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/TemplateTable.java
@@ -0,0 +1,82 @@
+package com.gx.obe.struct.beans;
+
+/**
+ * @Description: 小范本表格
+ * @author chenxw
+ */
+public class TemplateTable {
+	
+	private String id;
+	private String tenderId;
+	private String supplierId;
+	private String relChapterType;
+	private String dataCode;
+	private String xmlPath;
+	private String tableName;
+	private String tableInfo;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getSupplierId() {
+		return supplierId;
+	}
+	
+	public void setSupplierId(String supplierId) {
+		this.supplierId = supplierId;
+	}
+	
+	public String getRelChapterType() {
+		return relChapterType;
+	}
+	
+	public void setRelChapterType(String relChapterType) {
+		this.relChapterType = relChapterType;
+	}
+	
+	public String getDataCode() {
+		return dataCode;
+	}
+	
+	public void setDataCode(String dataCode) {
+		this.dataCode = dataCode;
+	}
+	
+	public String getXmlPath() {
+		return xmlPath;
+	}
+	
+	public void setXmlPath(String xmlPath) {
+		this.xmlPath = xmlPath;
+	}
+	
+	public String getTableName() {
+		return tableName;
+	}
+	
+	public void setTableName(String tableName) {
+		this.tableName = tableName;
+	}
+	
+	public String getTableInfo() {
+		return tableInfo;
+	}
+	
+	public void setTableInfo(String tableInfo) {
+		this.tableInfo = tableInfo;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/TimeModelDO.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/TimeModelDO.java
new file mode 100644
index 00000000..7f872429
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/TimeModelDO.java
@@ -0,0 +1,138 @@
+package com.gx.obe.struct.beans;
+
+public class TimeModelDO {
+	
+	/**
+	 * @Description: 基础分
+	 */
+	private String baseScore;
+	/**
+	 * @Description: 方式:方式1 01,方式2 02 方式1 会用到以下节点 方式2 只会用到交货日期,只能供应商响应是才出现
+	 */
+	private String mode;
+	/**
+	 * @Description: 日期:yyyy-MM-dd HH:mm
+	 */
+	private String deliveryDate;
+	/**
+	 * @Description: 天数1:可填
+	 */
+	private String dayFirst;
+	/**
+	 * @Description: 类型1:扣分01
+	 */
+	private String dealTypeFirst;
+	/**
+	 * @Description: 分值1
+	 */
+	private String dealScoreFirst;
+	/**
+	 * @Description: 天数2:可填
+	 */
+	private String daySecond;
+	/**
+	 * @Description: 类型2:扣分01
+	 */
+	private String dealTypeSecond;
+	/**
+	 * @Description: 分值2
+	 */
+	private String dealScoreSecond;
+	/**
+	 * @Description: 是否项:是 01,否 00
+	 */
+	private String option;
+	/**
+	 * @Description: 备注:可填
+	 */
+	private String memo;
+	
+	public String getBaseScore() {
+		return baseScore;
+	}
+	
+	public void setBaseScore(String baseScore) {
+		this.baseScore = baseScore;
+	}
+	
+	public String getMode() {
+		return mode;
+	}
+	
+	public void setMode(String mode) {
+		this.mode = mode;
+	}
+	
+	public String getDeliveryDate() {
+		return deliveryDate;
+	}
+	
+	public void setDeliveryDate(String deliveryDate) {
+		this.deliveryDate = deliveryDate;
+	}
+	
+	public String getDayFirst() {
+		return dayFirst;
+	}
+	
+	public void setDayFirst(String dayFirst) {
+		this.dayFirst = dayFirst;
+	}
+	
+	public String getDealTypeFirst() {
+		return dealTypeFirst;
+	}
+	
+	public void setDealTypeFirst(String dealTypeFirst) {
+		this.dealTypeFirst = dealTypeFirst;
+	}
+	
+	public String getDealScoreFirst() {
+		return dealScoreFirst;
+	}
+	
+	public void setDealScoreFirst(String dealScoreFirst) {
+		this.dealScoreFirst = dealScoreFirst;
+	}
+	
+	public String getDaySecond() {
+		return daySecond;
+	}
+	
+	public void setDaySecond(String daySecond) {
+		this.daySecond = daySecond;
+	}
+	
+	public String getDealTypeSecond() {
+		return dealTypeSecond;
+	}
+	
+	public void setDealTypeSecond(String dealTypeSecond) {
+		this.dealTypeSecond = dealTypeSecond;
+	}
+	
+	public String getDealScoreSecond() {
+		return dealScoreSecond;
+	}
+	
+	public void setDealScoreSecond(String dealScoreSecond) {
+		this.dealScoreSecond = dealScoreSecond;
+	}
+	
+	public String getOption() {
+		return option;
+	}
+	
+	public void setOption(String option) {
+		this.option = option;
+	}
+	
+	public String getMemo() {
+		return memo;
+	}
+	
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/WorkExperience.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/WorkExperience.java
new file mode 100644
index 00000000..c124ea48
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/WorkExperience.java
@@ -0,0 +1,126 @@
+package com.gx.obe.struct.beans;
+
+public class WorkExperience {
+	
+	/**
+	 * 主键
+	 */
+	private String id;
+	/**
+	 * 项目ID
+	 */
+	private String tenderId;
+	/**
+	 * 项目负责人ID
+	 */
+	private String projectLeaderId;
+	/**
+	 * æ—¶é—´
+	 */
+	private String time;
+	/**
+	 * 参加的类似项目
+	 */
+	private String projectName;
+	/**
+	 * 担任职务
+	 */
+	private String jobTitle;
+	/**
+	 * 发包人及其联系联系电话
+	 */
+	private String contractInfo;
+	/**
+	 * 承担的工作
+	 */
+	private String bearWork;
+	/**
+	 * 容量(MW)
+	 */
+	private String capacity;
+	/**
+	 * 排序
+	 */
+	private int sortNo;
+	
+	public String getId() {
+		return id;
+	}
+	
+	public void setId(String id) {
+		this.id = id;
+	}
+	
+	public String getTenderId() {
+		return tenderId;
+	}
+	
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+	
+	public String getProjectLeaderId() {
+		return projectLeaderId;
+	}
+	
+	public void setProjectLeaderId(String projectLeaderId) {
+		this.projectLeaderId = projectLeaderId;
+	}
+	
+	public String getTime() {
+		return time;
+	}
+	
+	public void setTime(String time) {
+		this.time = time;
+	}
+	
+	public String getProjectName() {
+		return projectName;
+	}
+	
+	public void setProjectName(String projectName) {
+		this.projectName = projectName;
+	}
+	
+	public String getJobTitle() {
+		return jobTitle;
+	}
+	
+	public void setJobTitle(String jobTitle) {
+		this.jobTitle = jobTitle;
+	}
+	
+	public String getContractInfo() {
+		return contractInfo;
+	}
+	
+	public void setContractInfo(String contractInfo) {
+		this.contractInfo = contractInfo;
+	}
+	
+	public int getSortNo() {
+		return sortNo;
+	}
+	
+	public void setSortNo(int sortNo) {
+		this.sortNo = sortNo;
+	}
+	
+	public String getBearWork() {
+		return bearWork;
+	}
+	
+	public void setBearWork(String bearWork) {
+		this.bearWork = bearWork;
+	}
+	
+	public String getCapacity() {
+		return capacity;
+	}
+	
+	public void setCapacity(String capacity) {
+		this.capacity = capacity;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/composite/AttachmentComposite.java b/com.gx.obe.struct/src/com/gx/obe/struct/composite/AttachmentComposite.java
new file mode 100644
index 00000000..4e35993f
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/composite/AttachmentComposite.java
@@ -0,0 +1,56 @@
+package com.gx.obe.struct.composite;
+
+import java.io.File;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.common.file.widget.FileButton;
+import com.gx.obe.component.rx.RxSwt;
+import com.gx.obe.component.utils.CompositeUtils;
+import com.gx.obe.components.core.Constants;
+import com.gx.obe.struct.beans.AttachmentFile;
+import com.gx.obe.struct.service.AttachmentFileService;
+
+public class AttachmentComposite extends Composite {
+	
+	private final AttachmentFileService attachmentFileService = new AttachmentFileService();
+	
+	private final Prop<List<AttachmentFile>> attachmentFileList = new Prop<>();
+	
+	private final String tenderId;
+	
+	private String bidFilePath;
+	
+	public AttachmentComposite(Composite parent, String tenderId) {
+		super(parent, SWT.NONE);
+		this.tenderId = tenderId;
+		
+		RowLayout rowLayout = new RowLayout(SWT.HORIZONTAL);
+		rowLayout.marginRight = 5;
+		rowLayout.marginLeft = 5;
+		rowLayout.marginBottom = 5;
+		rowLayout.marginTop = 5;
+		rowLayout.spacing = 5;
+		setLayout(rowLayout);
+		
+		attachmentFileList.bind(l -> {
+			CompositeUtils.disposeChildren(this);
+			l.forEach(t -> new FileButton(this, new File(bidFilePath + t.getFileUrl()), t.getFileName()));
+			this.layout();
+		});
+		
+	}
+	
+	public void refresh(String supplierId, String businessId) {
+		bidFilePath = Constants.getBidFilePath(tenderId, supplierId);
+		RxSwt.run(() -> attachmentFileService.getAttachmentFileList(businessId)).checkWidget(this).exe(attachmentFileList::set);
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/composite/ClearBidReviewEntryComposite.java b/com.gx.obe.struct/src/com/gx/obe/struct/composite/ClearBidReviewEntryComposite.java
new file mode 100644
index 00000000..17114e51
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/composite/ClearBidReviewEntryComposite.java
@@ -0,0 +1,317 @@
+package com.gx.obe.struct.composite;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.MessageDialog;
+import org.eclipse.swt.core.widgets.ELink;
+import org.eclipse.swt.core.widgets.ESepator;
+import org.eclipse.swt.core.widgets.ImageButton;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import com.gx.obe.ColorConstants;
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.business.entity.SupplierEvaluationFactor;
+import com.gx.obe.common.icons.IconsActivator;
+import com.gx.obe.common.widget.button.EvaluationButton;
+import com.gx.obe.common.widget.text.EvalFactorText;
+import com.gx.obe.struct.dialog.EditOpinionShell;
+import com.gx.obe.struct.enums.EvaluationFactorTypeEnum;
+import com.gx.obe.struct.listener.EditOpinionListener;
+import com.gx.obe.struct.listener.ReturnListener;
+import com.gx.obe.util.utils.ObjectUtils;
+import com.gx.obe.util.utils.StringUtils;
+import com.gx.obe.util.utils.UuidUtils;
+import com.gx.obe.web.entity.evaluation.EvaluationFactor;
+import com.gx.obe.web.service.SupplierEvaluationFactorService;
+import com.swtdesigner.ResourceManager;
+import com.swtdesigner.SWTResourceManager;
+
+public class ClearBidReviewEntryComposite extends Composite {
+	
+	private final SupplierEvaluationFactorService supplierEvaluationFactorService = new SupplierEvaluationFactorService();
+	
+	private final Prop<EvaluationFactor> evaluationFactorProp = new Prop<>();
+	
+	private final Prop<EvaluationContentData> evaluationContentData = new Prop<>();
+	private final List<ReturnListener> returnListenerList = new ArrayList<>();
+	
+	private class EvaluationContentData {
+		private String supplierId;
+		private String factorCode;
+		private EvaluationFactorTypeEnum factorTypeEnum;
+	}
+	private EvaluationFactor curFactor;
+	private SupplierEvaluationFactor supplierEvaluationFactor;
+	private Composite factorOpinionComposite;
+	private Text opinionText;
+	private Text supplierOpinionText;
+	private ImageButton opinionBtn;
+
+	private ImageButton supplierOpinionBtn;
+
+	private EvaluationButton saveBtn;
+
+	private Label wordCountLabel;
+
+	private ELink editOpinionLink;
+
+	private EvaluationButton backBtn;
+	
+	public ClearBidReviewEntryComposite(Composite parent, String tenderId) {
+		super(parent, SWT.NONE);
+		
+		setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		setBackgroundMode(SWT.INHERIT_FORCE);
+		GridLayout gridLayout = new GridLayout(3, false);
+		gridLayout.horizontalSpacing = 0;
+		gridLayout.marginHeight = 0;
+		gridLayout.marginWidth = 0;
+		setLayout(gridLayout);
+		
+		EvaluationContentComposite composite = new EvaluationContentComposite(this, tenderId);
+		GridData gd_composite = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_composite.widthHint = 600;
+		composite.setLayoutData(gd_composite);
+		evaluationContentData.bind(t -> composite.refresh(t.supplierId, t.factorCode, t.factorTypeEnum));
+		
+		ESepator label = new ESepator(this, SWT.VERTICAL);
+		label.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true, 1, 1));
+		label.setBackground(ColorConstants.BORDER_LINE_COLOR);
+		
+		Composite composite_1 = new Composite(this, SWT.NONE);
+		composite_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
+		GridLayout gl_composite_1 = new GridLayout(1, false);
+		gl_composite_1.verticalSpacing = 1;
+		gl_composite_1.marginHeight = 0;
+		gl_composite_1.marginWidth = 0;
+		composite_1.setLayout(gl_composite_1);
+		GridData gd_composite_1 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_composite_1.widthHint = 400;
+		composite_1.setLayoutData(gd_composite_1);
+		
+		Composite composite_2 = new Composite(composite_1, SWT.NONE);
+		composite_2.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		composite_2.setLayout(new GridLayout(1, false));
+		GridData gd_composite_2 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_composite_2.heightHint = 260;
+		composite_2.setLayoutData(gd_composite_2);
+		
+		EvalFactorText text = new EvalFactorText(composite_2);
+		text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		evaluationFactorProp.bind(text::refresh);
+		
+		Composite selfOpinionComposite = new Composite(composite_1, SWT.NONE);
+		selfOpinionComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+		GridLayout gl_selfOpinion = new GridLayout(1, false);
+		gl_selfOpinion.marginWidth = 0;
+		gl_selfOpinion.marginHeight = 0;
+		selfOpinionComposite.setLayout(gl_selfOpinion);
+		selfOpinionComposite.setBackground(SWTResourceManager.getColor(240, 240, 240));
+		selfOpinionComposite.setBackgroundMode(SWT.INHERIT_FORCE);
+		
+		supplierOpinionBtn = new ImageButton(selfOpinionComposite, SWT.NONE);
+		supplierOpinionBtn.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		supplierOpinionBtn.setLeftMargin(20);
+		supplierOpinionBtn.setRightMargin(20);
+		supplierOpinionBtn.setFont(SWTResourceManager.getFont("微软雅黑", 10, SWT.NORMAL));
+		supplierOpinionBtn.setText("自评意见");
+		setanswerBtnCss(supplierOpinionBtn);
+		
+		Composite selfOpinionTextComposite = new Composite(composite_1, SWT.NONE);
+		selfOpinionTextComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		selfOpinionTextComposite.setBackgroundMode(SWT.INHERIT_FORCE);
+		GridData gd_selfOpinionTextComposite = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_selfOpinionTextComposite.heightHint = 150;
+		selfOpinionTextComposite.setLayoutData(gd_selfOpinionTextComposite);
+		selfOpinionTextComposite.setLayout(new GridLayout(1, false));
+		
+		supplierOpinionText = new Text(selfOpinionTextComposite, SWT.WRAP | SWT.V_SCROLL | SWT.H_SCROLL);
+		supplierOpinionText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		supplierOpinionText.setEditable(false);
+		
+		Composite opinionComposite = new Composite(composite_1, SWT.NONE);
+		opinionComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+		GridLayout gl_opinion = new GridLayout(1, false);
+		gl_opinion.marginWidth = 0;
+		gl_opinion.marginHeight = 0;
+		opinionComposite.setLayout(gl_opinion);
+		opinionComposite.setBackground(SWTResourceManager.getColor(240, 240, 240));
+		opinionComposite.setBackgroundMode(SWT.INHERIT_FORCE);
+		
+		opinionBtn = new ImageButton(opinionComposite, SWT.NONE);
+		opinionBtn.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		opinionBtn.setFont(SWTResourceManager.getFont("微软雅黑", 10, SWT.NORMAL));
+		opinionBtn.setText("评议意见");
+		setanswerBtnCss(opinionBtn);
+		
+		factorOpinionComposite = new Composite(composite_1, SWT.NONE);
+		factorOpinionComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		factorOpinionComposite.setBackgroundMode(SWT.INHERIT_FORCE);
+		GridLayout gl_factorOpinionComposite = new GridLayout(2, false);
+		gl_factorOpinionComposite.marginHeight = 0;
+		gl_factorOpinionComposite.marginWidth = 0;
+		factorOpinionComposite.setLayout(gl_factorOpinionComposite);
+		GridData gd_factorOpinionComposite = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_factorOpinionComposite.heightHint = 180;
+		factorOpinionComposite.setLayoutData(gd_factorOpinionComposite);;
+		
+		opinionText = new Text(factorOpinionComposite, SWT.WRAP | SWT.V_SCROLL);
+		opinionText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));;
+		opinionText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent arg0) {
+				wordCountLabel.setText(opinionText.getText().length() +"/2000");
+			}
+		});
+		opinionText.setTextLimit(2000);
+		opinionText.setEditable(false);
+		
+		wordCountLabel = new Label(factorOpinionComposite, SWT.NONE);
+		wordCountLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));;
+		wordCountLabel.setText("0/2000");
+		
+		editOpinionLink = new ELink(factorOpinionComposite, SWT.NONE);
+		editOpinionLink.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));;
+		editOpinionLink.setText("修改");
+		editOpinionLink.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/btn/blue/edit.png"));
+		editOpinionLink.addMouseListener(new MouseAdapter() {
+			public void mouseUp(MouseEvent e) {
+				editOpinionAction();
+			}
+		});
+		
+		Composite buttonComposite = new Composite(composite_1, SWT.NONE);
+		buttonComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		buttonComposite.setLayout(new GridLayout(2, false));
+		buttonComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		
+		saveBtn = new EvaluationButton(buttonComposite, SWT.NONE);
+		saveBtn.addMouseListener(MouseListener.mouseUpAdapter($ -> saveAction()));
+		saveBtn.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
+		saveBtn.setText("保存");
+		
+		backBtn = new EvaluationButton(buttonComposite, SWT.NONE);
+		backBtn.addMouseListener(MouseListener.mouseUpAdapter($ -> returnAction()));
+		backBtn.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1));
+		backBtn.setText("返回");
+	}
+	
+	public void refresh(EvaluationFactor evaluationFactor, SupplierEvaluationFactor supplierEvaluationFactor, EvaluationFactorTypeEnum factorTypeEnum) {
+		this.supplierEvaluationFactor = supplierEvaluationFactor;
+		this.evaluationFactorProp.set(evaluationFactor);
+		this.curFactor = evaluationFactor;
+		EvaluationContentData data = new EvaluationContentData();
+		data.supplierId = supplierEvaluationFactor.getSupplierId();
+		data.factorCode = supplierEvaluationFactor.getFactorCode();
+		data.factorTypeEnum = factorTypeEnum;
+		this.evaluationContentData.set(data);
+		saveBtn.setEnabled(false);
+		opinionText.setText(ObjectUtils.getObjString(supplierEvaluationFactor.getOpinion()));
+		opinionText.setToolTipText(supplierEvaluationFactor.getModifyReason());
+		supplierOpinionText.setText(ObjectUtils.getObjString(supplierEvaluationFactor.getFactorResponse()));
+	}
+	
+	  /**
+     * @Description: 设置指标分类的按钮
+     * @author wangxiang
+     * @param imageBtn
+     */
+    private void setanswerBtnCss(ImageButton imageBtn) {
+        imageBtn.setRightMargin(10);
+        imageBtn.setLeftMargin(10);
+        imageBtn.setTopMargin(5);
+        imageBtn.setBottomMargin(5);
+        imageBtn.setRightMargin(20);
+        imageBtn.setLeftMargin(20);
+        imageBtn.setTopMargin(5);
+        imageBtn.setBottomMargin(5);
+        imageBtn.setRightMargin(10);
+        imageBtn.setFont(SWTResourceManager.getFont("微软雅黑", 10, SWT.NORMAL));
+        imageBtn.setForeground(ColorConstants.SKIN_SELECTOIN_FOREGROUND);
+        imageBtn.setBackgroundColor(ColorConstants.SKIN_BG);
+
+    }
+    
+	public void addReturnListener(ReturnListener returnListener) {
+		this.returnListenerList.add(returnListener);
+	}
+	
+	  /**
+     * 修改评审意见
+     */
+    private void editOpinionAction() {
+    	
+    	if (null != supplierEvaluationFactor) {
+    		opinionText.setText(ObjectUtils.getObjString(supplierEvaluationFactor.getOpinion()));
+    		final boolean saveBtnIsEnabled = saveBtn.getEnabled();
+    		saveBtn.setEnabled(false);
+    		EditOpinionShell editOpinionShell = new EditOpinionShell(getShell(), curFactor, supplierEvaluationFactor, new EditOpinionListener() {
+    			@Override
+    			public void editOpinion(String opinion, String modifyReason) {
+    				saveBtn.setEnabled(true);
+    				opinionText.setText(ObjectUtils.getObjString(opinion));
+    				opinionText.setToolTipText(modifyReason);
+    				supplierEvaluationFactor.setModifyReason(modifyReason);
+    			}
+				@Override
+				public void cancle() {
+					saveBtn.setEnabled(saveBtnIsEnabled);
+				}
+    		});
+    		if (null != editOpinionShell && !editOpinionShell.isDisposed()) {
+    			// 设置界面位置
+    			editOpinionShell.setLocation(factorOpinionComposite.toDisplay(0, 0));
+    			Rectangle rectangle = factorOpinionComposite.getBounds();
+    			// 设置界面大小
+    			editOpinionShell.setSize(rectangle.width, rectangle.height);
+    			editOpinionShell.open();
+    		}
+    	}
+    }
+	
+	private void saveAction() {
+		if(!saveBtn.getEnabled())return;
+		if(opinionText.getText().trim().length() == 0) {
+			MessageDialog.openShortMessage("评议意见不能为空!");
+			return;
+		}
+		saveBtn.setEnabled(false);
+		backBtn.setEnabled(false);
+		supplierEvaluationFactor.setOpinion(opinionText.getText());
+		boolean saveFlag = false;
+		if (StringUtils.isEmpty(supplierEvaluationFactor.getId())) {
+            supplierEvaluationFactor.setId(UuidUtils.getUUID());
+            saveFlag = supplierEvaluationFactorService.insert(supplierEvaluationFactor);
+        } else {
+        	// TODO 这里需要保存修改原因
+        	saveFlag = supplierEvaluationFactorService.updateAssignProperty(supplierEvaluationFactor, new String[] { "opinion", "factorResponse","modifyReason" ,"paramValues"});
+//        	saveFlag = supplierEvaluationFactorService.updateAssignProperty(supplierEvaluationFactor, new String[] { "opinion", "factorResponse" ,"paramValues"});
+        }
+		if(saveFlag) {
+			MessageDialog.openShortMessage("保存成功!");
+			
+		}else {
+			MessageDialog.openWarning(getShell(), "保存失败!");
+			saveBtn.setEnabled(true);
+		}
+		backBtn.setEnabled(true);
+	}
+	
+	private void returnAction() {
+		returnListenerList.forEach(l -> l.returnAction());
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/composite/EvaluationContentComposite.java b/com.gx.obe.struct/src/com/gx/obe/struct/composite/EvaluationContentComposite.java
new file mode 100644
index 00000000..d272a06e
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/composite/EvaluationContentComposite.java
@@ -0,0 +1,242 @@
+package com.gx.obe.struct.composite;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.widgets.ELink;
+import org.eclipse.swt.core.widgets.ESepator;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import com.gx.obe.ColorConstants;
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.common.widget.button.RectangleRadioButton;
+import com.gx.obe.component.handler.TabHandler;
+import com.gx.obe.component.rx.RxSwt;
+import com.gx.obe.components.core.Constants;
+import com.gx.obe.components.core.global.Global;
+import com.gx.obe.components.core.inter.PdfFileView;
+import com.gx.obe.struct.beans.ModelData;
+import com.gx.obe.struct.enums.DataCategoryEnum;
+import com.gx.obe.struct.enums.EvaluationFactorTypeEnum;
+import com.gx.obe.struct.enums.ModelDataTypeEnum;
+import com.gx.obe.struct.handler.RelChapterTypeHandler;
+import com.gx.obe.struct.parse.BidFileIndexTreeXmlParse;
+import com.gx.obe.struct.service.EvaluationContentService;
+import com.gx.obe.struct.service.ModelDataService;
+import com.gx.obe.util.utils.CollectionUtils;
+import com.gx.obe.web.entity.evaluation.EvaluationContent;
+import com.swtdesigner.SWTResourceManager;
+
+public class EvaluationContentComposite extends Composite {
+	
+	private final EvaluationContentService evaluationContentService = new EvaluationContentService();
+	private final ModelDataService modelDataService = new ModelDataService();
+	
+	private final String tenderId;
+	
+	private final Prop<EvaluationContentData> evaluationContentData = new Prop<>();
+	private final Prop<PdfFileData> pdfFileData = new Prop<>();
+	private final Prop<String> tips = new Prop<>();
+	
+	private final Prop<Boolean> showFile = new Prop<>();
+	private final Prop<Boolean> showSwitch = new Prop<>(false);
+	
+	private class RootNodeChapterData {
+		private String name;
+		private String type;
+	}
+	
+	private class EvaluationContentData {
+		private String supplierId;
+		private EvaluationFactorTypeEnum factorTypeEnum;
+		private List<EvaluationContent> evaluationContentList;
+	}
+	
+	private class PdfFileData {
+		private String url;
+		private int pageNum;
+	}
+	
+	public EvaluationContentComposite(Composite parent, String tenderId) {
+		super(parent, SWT.NONE);
+		this.tenderId = tenderId;
+		
+		setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		setBackgroundMode(SWT.INHERIT_FORCE);
+		GridLayout gridLayout = new GridLayout(1, false);
+		gridLayout.verticalSpacing = 0;
+		gridLayout.marginHeight = 0;
+		gridLayout.marginWidth = 0;
+		setLayout(gridLayout);
+		
+		Composite composite_5 = new Composite(this, SWT.NONE);
+		composite_5.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
+		GridLayout gl_composite_5 = new GridLayout(2, false);
+		gl_composite_5.marginHeight = 0;
+		gl_composite_5.marginWidth = 0;
+		composite_5.setLayout(gl_composite_5);
+		
+		Composite composite = new Composite(composite_5, SWT.NONE);
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true, true, 1, 1));
+		RowLayout rl_composite = new RowLayout(SWT.HORIZONTAL);
+		rl_composite.marginBottom = 0;
+		rl_composite.marginTop = 0;
+		composite.setLayout(rl_composite);
+		
+		TabHandler<RectangleRadioButton> handler = new TabHandler<>(composite, t -> new RectangleRadioButton(t, SWT.NONE));
+		
+		Composite composite_6 = new Composite(composite_5, SWT.NONE);
+		GridLayout gl_composite_6 = new GridLayout(1, false);
+		gl_composite_6.marginHeight = 4;
+		composite_6.setLayout(gl_composite_6);
+		
+		ELink link = new ELink(composite_6, SWT.NONE);
+		link.addMouseListener(MouseListener.mouseUpAdapter($ -> showFile.replace(t -> !t)));
+		link.setText("切换视图");
+		showSwitch.bind(link::setVisible);
+		
+		ESepator label_1 = new ESepator(this, SWT.HORIZONTAL);
+		label_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		label_1.setBackground(ColorConstants.SKIN_BG);
+		
+		StackLayout stackLayout = new StackLayout();
+		
+		Composite composite_1 = new Composite(this, SWT.NONE);
+		composite_1.setLayout(stackLayout);
+		composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		
+		Consumer<Composite> topControl = t -> {
+			stackLayout.topControl = t;
+			composite_1.layout();
+		};
+		
+		ModelDataComposite composite_2 = new ModelDataComposite(composite_1, tenderId);
+		
+		Composite composite_3 = new Composite(composite_1, SWT.NONE);
+		composite_3.setLayout(new FillLayout(SWT.HORIZONTAL));
+		
+		PdfFileView load = Global.PDF_FILE_VIEW.load(composite_3, SWT.NONE);
+		load.setFileNotExistMessage("文件不存在,请检查是否已下载投标文件!");
+		pdfFileData.bind(t -> load.openFile(t.url, t.pageNum));
+		
+		Composite composite_4 = new Composite(composite_1, SWT.NONE);
+		composite_4.setLayout(new GridLayout(1, false));
+		
+		Label label = new Label(composite_4, SWT.WRAP);
+		label.setForeground(SWTResourceManager.getColor(200, 200, 200));
+		label.setFont(SWTResourceManager.getFont("宋体", 20, SWT.BOLD));
+		label.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true, 1, 1));
+		
+		tips.bind(t -> {
+			label.setText(t);
+			label.getParent().layout();
+		});
+		
+		showFile.bind(t -> {
+			if (t) topControl.accept(composite_3);
+			else topControl.accept(composite_2);
+		});
+		
+		evaluationContentData.bind(d -> {
+			showSwitch.set(false);
+			handler.start();
+			if (CollectionUtils.isNull(d.evaluationContentList)) {
+				rootNodeChapter(handler, d.factorTypeEnum, t -> {
+					showFile.set(true);
+					RxSwt.run(() -> getFilePath(d.supplierId, t.type)).checkWidget(this).exe(pdfFileData::set);
+				});
+			} else {
+				handler.listHand(d.evaluationContentList, EvaluationContent::getEvalPointName, t -> {
+					showSwitch.set(false);
+					switch (DataCategoryEnum.MAP.getOrDefault(t.getDataCategory(), DataCategoryEnum.NULL)) {
+						case MD:
+							getModelData(t.getRelChapterType(), d.supplierId, md -> {
+								if (md == null) {
+									topControl.accept(composite_4);
+									tips.set("当前供应商未检测到" + t.getEvalPointName() + ",请检查是否已解析结构化数据!");
+								} else {
+									if (ModelDataTypeEnum.EQ_ProjectLeader.getKey().equals(md.getRelChapterType())) {
+										showSwitch.set(true);
+										showFile.set(false);
+										composite_2.refresh(t, md);
+										RxSwt.run(() -> getFilePath(d.supplierId, "EnterpriseQualification_technology")).checkWidget(this).exe(pdfFileData::set);
+									} else {
+										showFile.set(false);
+										composite_2.refresh(t, md);
+									}
+								}
+							});
+							break;
+						case TDI:
+						case TT:
+						case NULL:
+							showFile.set(true);
+							RxSwt.run(() -> getFilePath(d.supplierId, t.getRelChapterType())).checkWidget(this).exe(pdfFileData::set);
+							break;
+					}
+				});
+			}
+			handler.end();
+		});
+	}
+	
+	private void rootNodeChapter(TabHandler<RectangleRadioButton> handler, EvaluationFactorTypeEnum factorTypeEnum, Consumer<RootNodeChapterData> callback) {
+		handler.listHand(initRootNodeChapterList(factorTypeEnum).map(t -> {
+			String[] split = t.split("-", 2);
+			RootNodeChapterData chapterData = new RootNodeChapterData();
+			chapterData.type = split[0];
+			chapterData.name = split[1];
+			return chapterData;
+		}).collect(Collectors.toList()), t -> t.name, callback);
+	}
+	
+	private void getModelData(String _relChapterType, String supplierId, Consumer<ModelData> consumer) {
+		RelChapterTypeHandler typeHandler = new RelChapterTypeHandler(_relChapterType);
+		Optional<ModelDataTypeEnum> modelDataTypeEnum = Optional.of(typeHandler.getRelChapterType()).map(ModelDataTypeEnum.MAP::get);
+		String relChapterType = modelDataTypeEnum.map(ModelDataTypeEnum.EQ_ProjectLeader::equals).orElse(false) ? typeHandler.getRelChapterType() : _relChapterType;
+		RxSwt.run(() -> modelDataService.getModelData(tenderId, supplierId, relChapterType, relChapterType)).checkWidget(this).exe(consumer);
+	}
+	
+	private Stream<String> initRootNodeChapterList(EvaluationFactorTypeEnum factorTypeEnum) {
+		if (EvaluationFactorTypeEnum.BUSINESS == factorTypeEnum) {
+			return Stream.of("Business-商务标");
+		}
+		if (EvaluationFactorTypeEnum.TECHNOLOGY == factorTypeEnum) {
+			return Stream.of("Technology-技术标");
+		}
+		return Stream.of("Business-商务标", "Technology-技术标", "Price-报价");
+	}
+	
+	public void refresh(String supplierId, String factorCode, EvaluationFactorTypeEnum factorTypeEnum) {
+		RxSwt.run(() -> {
+			EvaluationContentData evaluationContentData = new EvaluationContentData();
+			evaluationContentData.supplierId = supplierId;
+			evaluationContentData.factorTypeEnum = factorTypeEnum;
+			evaluationContentData.evaluationContentList = evaluationContentService.getEvaluationContentListByFactorCode(tenderId, factorCode);
+			return evaluationContentData;
+		}).checkWidget(this).exe(evaluationContentData::set);
+	}
+	
+	private PdfFileData getFilePath(String supplierId, String relChapterType) {
+		BidFileIndexTreeXmlParse bidFileIndexTreeXmlParse = new BidFileIndexTreeXmlParse(Constants.getBidFilePath(tenderId, supplierId), relChapterType);
+		PdfFileData pdfFileData = new PdfFileData();
+		pdfFileData.url = bidFileIndexTreeXmlParse.getRootNodeFilePath();
+		pdfFileData.pageNum = bidFileIndexTreeXmlParse.getPageNumInGenerateFile();
+		return pdfFileData;
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/composite/ModelDataComposite.java b/com.gx.obe.struct/src/com/gx/obe/struct/composite/ModelDataComposite.java
new file mode 100644
index 00000000..22cf2745
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/composite/ModelDataComposite.java
@@ -0,0 +1,129 @@
+package com.gx.obe.struct.composite;
+
+import java.util.Optional;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.listener.RoundBorderLineListener;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import com.gx.obe.ColorConstants;
+import com.gx.obe.bind.call.Call;
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.struct.beans.ModelData;
+import com.gx.obe.struct.enums.ModelDataTypeEnum;
+import com.gx.obe.struct.factory.ModelDataFactory;
+import com.gx.obe.struct.handler.RelChapterTypeHandler;
+import com.gx.obe.struct.inters.IModelData;
+import com.gx.obe.struct.inters.IModelDataDetail;
+import com.gx.obe.web.entity.evaluation.EvaluationContent;
+import com.swtdesigner.SWTResourceManager;
+
+public class ModelDataComposite extends Composite {
+	
+	private final Prop<String> title = new Prop<>();
+	private final Prop<Integer> count = new Prop<>();
+	private final Prop<ModelDataTypeEnum> modelDataTypeEnum = new Prop<>();
+	private final Prop<ModelData> modelData = new Prop<>();
+	
+	private final Call call = new Call();
+	
+	public ModelDataComposite(Composite parent, String tenderId) {
+		super(parent, SWT.NONE);
+		
+		setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		setBackgroundMode(SWT.INHERIT_FORCE);
+		GridLayout gridLayout = new GridLayout(1, false);
+		gridLayout.verticalSpacing = 0;
+		gridLayout.marginHeight = 0;
+		gridLayout.marginWidth = 0;
+		setLayout(gridLayout);
+		
+		Composite composite = new Composite(this, SWT.NONE);
+		GridLayout gl_composite = new GridLayout(1, false);
+		gl_composite.marginTop = 5;
+		gl_composite.marginHeight = 0;
+		gl_composite.marginWidth = 0;
+		composite.setLayout(gl_composite);
+		GridData gd_composite = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_composite.heightHint = 400;
+		composite.setLayoutData(gd_composite);
+		
+		Composite composite_2 = new Composite(composite, SWT.NONE);
+		GridLayout gl_composite_2 = new GridLayout(2, false);
+		gl_composite_2.marginWidth = 0;
+		composite_2.setLayout(gl_composite_2);
+		composite_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		
+		Label lblNewLabel = new Label(composite_2, SWT.NONE);
+		lblNewLabel.setFont(SWTResourceManager.getFont("Microsoft YaHei UI", 10, SWT.BOLD));
+		title.bind(t -> {
+			lblNewLabel.setText(t);
+			composite_2.layout();
+		});
+		
+		Composite composite_4 = new Composite(composite_2, SWT.NONE);
+		composite_4.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		GridLayout gl_composite_4 = new GridLayout(3, false);
+		gl_composite_4.marginHeight = 0;
+		composite_4.setLayout(gl_composite_4);
+		
+		Label lblNewLabel_1 = new Label(composite_4, SWT.NONE);
+		lblNewLabel_1.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1));
+		lblNewLabel_1.setText("共有");
+		
+		Label lblNewLabel_2 = new Label(composite_4, SWT.NONE);
+		lblNewLabel_2.setForeground(SWTResourceManager.getColor(255, 93, 0));
+		lblNewLabel_2.setFont(SWTResourceManager.getFont("Microsoft YaHei UI", 10, SWT.BOLD));
+		count.bind(t -> {
+			lblNewLabel_2.setText(String.valueOf(t));
+			composite_4.layout();
+		});
+		
+		Label lblNewLabel_3 = new Label(composite_4, SWT.NONE);
+		lblNewLabel_3.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, false, 1, 1));
+		title.bind(t -> {
+			lblNewLabel_3.setText("条" + t + "信息");
+			composite_4.layout();
+		});
+		
+		Composite composite_3 = new Composite(composite, SWT.NONE);
+		FillLayout fl_composite_3 = new FillLayout(SWT.HORIZONTAL);
+		fl_composite_3.marginHeight = 1;
+		fl_composite_3.marginWidth = 1;
+		composite_3.setLayout(fl_composite_3);
+		composite_3.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		composite_3.addPaintListener(new RoundBorderLineListener(ColorConstants.BORDER_LINE_COLOR));
+		
+		ModelDataDetailComposite composite_1 = new ModelDataDetailComposite(this, tenderId);
+		composite_1.setLayout(new GridLayout(1, false));
+		GridData gd_composite_1 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_composite_1.heightHint = 500;
+		composite_1.setLayoutData(gd_composite_1);
+		
+		IModelDataDetail modelDataDetail = composite_1.getModelDataDetail();
+		call.bind(() -> modelDataDetail.refreshTitle(""));
+		
+		modelDataTypeEnum.bind(t -> {
+			IModelData iModelData = ModelDataFactory.create(composite_3, modelDataDetail, t);
+			iModelData.setCountWrite(count::set);
+			modelData.bind(iModelData::refresh);
+		});
+	}
+	
+	public void refresh(EvaluationContent evaluationContent, ModelData modelData) {
+		Optional.of(evaluationContent).map(EvaluationContent::getEvalPointName).ifPresent(title::set);
+		Optional.of(evaluationContent).map(t -> {
+			return new RelChapterTypeHandler(t.getRelChapterType()).getRelChapterType();
+		}).map(ModelDataTypeEnum.MAP::get).ifPresent(modelDataTypeEnum::set);
+		this.modelData.set(modelData);
+		this.call.exe();
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/composite/ModelDataDetailComposite.java b/com.gx.obe.struct/src/com/gx/obe/struct/composite/ModelDataDetailComposite.java
new file mode 100644
index 00000000..3eaf2bc1
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/composite/ModelDataDetailComposite.java
@@ -0,0 +1,147 @@
+package com.gx.obe.struct.composite;
+
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.widgets.ESepator;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.component.handler.TabHandler;
+import com.gx.obe.struct.inters.IModelDataDetail;
+import com.gx.obe.struct.widget.TabButton;
+import com.swtdesigner.SWTResourceManager;
+
+public class ModelDataDetailComposite extends Composite {
+	
+	private final Prop<String> titleName = new Prop<>();
+	
+	private final IModelDataDetail modelDataDetail;
+	
+	public ModelDataDetailComposite(Composite parent, String tenderId) {
+		super(parent, SWT.NONE);
+		setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		setBackgroundMode(SWT.INHERIT_FORCE);
+		GridLayout gridLayout = new GridLayout(1, false);
+		gridLayout.verticalSpacing = 0;
+		gridLayout.marginHeight = 0;
+		gridLayout.marginWidth = 0;
+		setLayout(gridLayout);
+		
+		Composite composite = new Composite(this, SWT.NONE);
+		GridLayout gl_composite = new GridLayout(1, false);
+		gl_composite.marginHeight = 10;
+		composite.setLayout(gl_composite);
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		
+		Label lblNewLabel = new Label(composite, SWT.NONE);
+		lblNewLabel.setFont(SWTResourceManager.getFont("Microsoft YaHei UI", 10, SWT.BOLD));
+		lblNewLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, false, 1, 1));
+		titleName.bind(t -> {
+			lblNewLabel.setText(t);
+			lblNewLabel.getParent().layout();
+		});
+		
+		ESepator label = new ESepator(this, SWT.HORIZONTAL);
+		label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		label.setBackground(SWTResourceManager.getColor(222, 234, 245));
+		label.setLineWidth(2);
+		
+		Composite composite_1 = new Composite(this, SWT.NONE);
+		GridLayout gl_composite_1 = new GridLayout(1, false);
+		gl_composite_1.verticalSpacing = 0;
+		gl_composite_1.marginHeight = 0;
+		gl_composite_1.marginWidth = 0;
+		composite_1.setLayout(gl_composite_1);
+		composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		
+		Composite composite_2 = new Composite(composite_1, SWT.NONE);
+		RowLayout rl_composite_2 = new RowLayout(SWT.HORIZONTAL);
+		rl_composite_2.marginBottom = 0;
+		rl_composite_2.marginTop = 0;
+		rl_composite_2.marginRight = 0;
+		rl_composite_2.marginLeft = 0;
+		rl_composite_2.spacing = 0;
+		composite_2.setLayout(rl_composite_2);
+		composite_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		
+		TabHandler<TabButton> handler = new TabHandler<>(composite_2, TabButton::new);
+		
+		ESepator label_1 = new ESepator(composite_1, SWT.HORIZONTAL);
+		label_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		label_1.setBackground(SWTResourceManager.getColor(222, 234, 245));
+		
+		ScrolledComposite scrolledComposite = new ScrolledComposite(composite_1, SWT.H_SCROLL | SWT.V_SCROLL);
+		scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		scrolledComposite.setExpandHorizontal(true);
+		scrolledComposite.setExpandVertical(true);
+		
+		Composite composite_3 = new Composite(scrolledComposite, SWT.NONE);
+		GridLayout gl_composite_3 = new GridLayout(1, false);
+		gl_composite_3.marginHeight = 15;
+		gl_composite_3.marginWidth = 0;
+		composite_3.setLayout(gl_composite_3);
+		
+		StackLayout stackLayout = new StackLayout();
+		
+		Composite composite_4 = new Composite(composite_3, SWT.NONE);
+		composite_4.setLayout(stackLayout);
+		GridData gd_composite_4 = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_composite_4.widthHint = 700;
+		composite_4.setLayoutData(gd_composite_4);
+		scrolledComposite.setContent(composite_3);
+		scrolledComposite.setMinSize(composite_3.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+		
+		modelDataDetail = new IModelDataDetail() {
+			
+			@Override
+			public void refreshTitle(String title) {
+				titleName.set(title);
+			}
+			
+			public void addBasicSubpage(Function<Composite, Composite> initSub) {
+				handler.start();
+				addSubpage("基本信息", initSub);
+			}
+			
+			public void addSubpage(String name, Function<Composite, Composite> initSub) {
+				Composite subComposite = initSub.apply(composite_4);
+				handler.hand(name, () -> {
+					stackLayout.topControl = subComposite;
+					composite_4.layout();
+					composite_3.layout();
+					scrolledComposite.setContent(composite_3);
+					scrolledComposite.setMinSize(composite_3.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+				});
+			}
+			
+			public <T> void addAttachmentSubpage(Consumer<BiConsumer<String, String>> supplierIdAndBusinessIdConsumer) {
+				addSubpage("附件列表", p -> {
+					AttachmentComposite attachmentComposite = new AttachmentComposite(p, tenderId);
+					supplierIdAndBusinessIdConsumer.accept((supplierId, businessId) -> {
+						attachmentComposite.refresh(supplierId, businessId);
+					});
+					return attachmentComposite;
+				});
+				handler.end();
+			}
+			
+		};
+		
+	}
+	
+	public IModelDataDetail getModelDataDetail() {
+		return modelDataDetail;
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/composite/TemplateTableComparisonComposite.java b/com.gx.obe.struct/src/com/gx/obe/struct/composite/TemplateTableComparisonComposite.java
new file mode 100644
index 00000000..0d5488fc
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/composite/TemplateTableComparisonComposite.java
@@ -0,0 +1,124 @@
+package com.gx.obe.struct.composite;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.OptionalInt;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.component.comparison.Column;
+import com.gx.obe.component.comparison.ComparisonData;
+import com.gx.obe.component.comparison.ComparisonTable;
+import com.gx.obe.component.rx.RxSwt;
+import com.gx.obe.component.utils.CompositeUtils;
+import com.gx.obe.components.core.Constants;
+import com.gx.obe.components.core.vo.TableXML;
+import com.gx.obe.components.core.vo.TableXML.Tr;
+import com.gx.obe.components.core.vo.TableXML.Tr.Td;
+import com.gx.obe.http.json.JsonUtil;
+import com.gx.obe.struct.beans.TemplateTable;
+import com.gx.obe.struct.service.TemplateTableService;
+import com.gx.obe.util.utils.CollectionUtils;
+import com.gx.obe.util.utils.StringUtils;
+import com.gx.obe.web.entity.Supplier;
+
+public class TemplateTableComparisonComposite extends Composite {
+	
+	private final TemplateTableService templateTableService = new TemplateTableService();
+	
+	private final Prop<ComparisonData> comparisonData = new Prop<>();
+	
+	public TemplateTableComparisonComposite(Composite parent, int style) {
+		super(parent, style);
+		setLayout(new FillLayout(SWT.HORIZONTAL));
+		comparisonData.bind(t -> {
+			CompositeUtils.disposeChildren(this);
+			new ComparisonTable(this, t);
+			this.layout();
+		});
+	}
+	
+	public void refresh(String tenderId, String relChapterType, String dataCode, List<Supplier> supplierList) {
+		RxSwt.run(() -> getComparisonData(tenderId, relChapterType, dataCode, supplierList)).checkWidget(this).exe(comparisonData::set);
+	}
+	
+	private ComparisonData getComparisonData(String tenderId, String relChapterType, String dataCode, List<Supplier> supplierList) {
+		List<TemplateTable> templateTableList = templateTableService.getTemplateTableList(tenderId, relChapterType, dataCode);
+		if (CollectionUtils.isNull(templateTableList)) {
+			return null;
+		}
+		Map<String, TemplateTable> templateTableMap = templateTableList.stream().collect(Collectors.toMap(TemplateTable::getSupplierId, Function.identity()));
+		TemplateTable templateTable = templateTableMap.get(Constants.BIDDING_ID);
+		if (templateTable == null) {
+			return null;
+		}
+		TableXML tableXML = JsonUtil.jsonToBean(templateTable.getTableInfo(), TableXML.class);
+		if (tableXML == null) {
+			return null;
+		}
+		List<Tr> headList = tableXML.getHeadList();
+		if (headList.size() != 1) {
+			return null;
+		}
+		Tr head = headList.get(0);
+		OptionalInt indexCol = IntStream.range(0, head.getTds().length).filter(i -> "序号".equals(head.getTds()[i].getContent())).findAny();
+		if (!indexCol.isPresent()) {
+			return null;
+		}
+		ComparisonData comparisonData = new ComparisonData();
+		tableXML.getBodyList().forEach(body -> Optional.ofNullable(getContent(body, indexCol.getAsInt())).filter(StringUtils::isNotEmpty).ifPresent(comparisonData::addRow));
+		
+		supplierList.forEach(supplier -> {
+			comparisonData.addTitleCol(new Column(supplier.getId(), supplier.getSupplierName()));
+		});
+		
+		IntStream.range(0, head.getTds().length).forEach(i -> {
+			comparisonDataInit(templateTableMap, tableXML, head, indexCol.getAsInt(), i, supplierList, comparisonData);
+		});
+		return comparisonData;
+	}
+	
+	private void comparisonDataInit(Map<String, TemplateTable> templateTableMap, TableXML tableXML, Tr head, int indexCol, int col, List<Supplier> supplierList, ComparisonData comparisonData) {
+		Td td = head.getTds()[col];
+//		if (td.isNeedFill()) {
+//			comparisonData.addItemCol(new Column(col + "", td.getContent()));
+//			supplierList.forEach(supplier -> {
+//				supplierComparisonDataInit(templateTableMap, indexCol, col, supplier, comparisonData);
+//			});
+//		} else {
+//			comparisonData.addHeadCol(new Column(col + "", td.getContent()));
+//			tableXML.getBodyList().forEach(body -> {
+//				comparisonData.putHeadContent(getContent(body, indexCol), col + "", getContent(body, col));
+//			});
+//		}
+	}
+	
+	private void supplierComparisonDataInit(Map<String, TemplateTable> templateTableMap, int indexCol, int col, Supplier supplier, ComparisonData comparisonData) {
+		TemplateTable supplierTemplateTable = templateTableMap.get(supplier.getId());
+		if (supplierTemplateTable == null) {
+			return;
+		}
+		TableXML supplierTableXML = JsonUtil.jsonToBean(supplierTemplateTable.getTableInfo(), TableXML.class);
+		if (supplierTableXML == null) {
+			return;
+		}
+		supplierTableXML.getBodyList().forEach(body -> {
+			comparisonData.putComparisonContent(getContent(body, indexCol), supplier.getId(), col + "", getContent(body, col));
+		});
+	}
+	
+	private String getContent(Tr tr, int col) {
+		return tr.getTds()[col].getContent();
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/composite/TemplateTableListComposite.java b/com.gx.obe.struct/src/com/gx/obe/struct/composite/TemplateTableListComposite.java
new file mode 100644
index 00000000..9f502bd3
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/composite/TemplateTableListComposite.java
@@ -0,0 +1,125 @@
+package com.gx.obe.struct.composite;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.widgets.ESepator;
+import org.eclipse.swt.custom.StackLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+import com.gx.obe.ColorConstants;
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.common.widget.button.RectangleRadioButton;
+import com.gx.obe.component.handler.TabHandler;
+import com.gx.obe.component.rx.RxSwt;
+import com.gx.obe.struct.enums.DataCategoryEnum;
+import com.gx.obe.struct.service.EvaluationContentService;
+import com.gx.obe.web.entity.Supplier;
+import com.gx.obe.web.entity.evaluation.EvaluationContent;
+import com.swtdesigner.SWTResourceManager;
+
+public class TemplateTableListComposite extends Composite {
+	
+	private final EvaluationContentService evaluationContentService = new EvaluationContentService();
+	
+	private final Prop<TemplateTableData> templateTableData = new Prop<>();
+	
+	private class TemplateTableData {
+		private String tenderId;
+		private List<EvaluationContent> evaluationContentList;
+		private List<Supplier> supplierList;
+	}
+	
+	private final Prop<TemplateTableComparisonData> templateTableComparisonData = new Prop<>();
+	
+	private class TemplateTableComparisonData {
+		private String tenderId;
+		private String relChapterType;
+		private String dataCode;
+		private List<Supplier> supplierList;
+	}
+	
+	public TemplateTableListComposite(Composite parent, int style) {
+		super(parent, style);
+		setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		setBackgroundMode(SWT.INHERIT_FORCE);
+		
+		StackLayout stackLayout = new StackLayout();
+		setLayout(stackLayout);
+		Consumer<Control> topControlConsumer = t -> {
+			stackLayout.topControl = t;
+			this.layout();
+		};
+		
+		Composite composite_1 = new Composite(this, SWT.NONE);
+		composite_1.setLayout(new GridLayout(1, false));
+		
+		Label label = new Label(composite_1, SWT.WRAP);
+		label.setForeground(SWTResourceManager.getColor(200, 200, 200));
+		label.setFont(SWTResourceManager.getFont("宋体", 20, SWT.BOLD));
+		label.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, true, true, 1, 1));
+		label.setText("当前指标未绑定小范本表格评审点!");
+		
+		Composite composite = new Composite(this, SWT.NONE);
+		GridLayout gl_composite = new GridLayout(1, false);
+		gl_composite.verticalSpacing = 0;
+		gl_composite.marginHeight = 0;
+		gl_composite.marginWidth = 0;
+		composite.setLayout(gl_composite);
+		
+		Composite tabComposite = new Composite(composite, SWT.NONE);
+		RowLayout rl_tabComposite = new RowLayout(SWT.HORIZONTAL);
+		rl_tabComposite.marginBottom = 0;
+		tabComposite.setLayout(rl_tabComposite);
+		tabComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		
+		TabHandler<RectangleRadioButton> handler = new TabHandler<>(tabComposite, t -> new RectangleRadioButton(t, SWT.NONE));
+		
+		this.templateTableData.bind(d -> {
+			if (d.evaluationContentList.isEmpty()) {
+				topControlConsumer.accept(composite_1);
+			} else {
+				topControlConsumer.accept(composite);
+				handler.start().listHand(d.evaluationContentList, EvaluationContent::getEvalPointName, t -> selectAction(d.tenderId, t, d.supplierList)).end();
+			}
+		});
+		
+		ESepator label_1 = new ESepator(composite, SWT.HORIZONTAL);
+		label_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		label_1.setBackground(ColorConstants.SKIN_BG);
+		
+		TemplateTableComparisonComposite comparisonComposite = new TemplateTableComparisonComposite(composite, SWT.NONE);
+		comparisonComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		this.templateTableComparisonData.bind(d -> comparisonComposite.refresh(d.tenderId, d.relChapterType, d.dataCode, d.supplierList));
+	}
+	
+	private void selectAction(String tenderId, EvaluationContent evaluationContent, List<Supplier> supplierList) {
+		TemplateTableComparisonData data = new TemplateTableComparisonData();
+		data.tenderId = tenderId;
+		data.relChapterType = evaluationContent.getRelChapterType();
+		data.dataCode = evaluationContent.getDataCode();
+		data.supplierList = supplierList;
+		this.templateTableComparisonData.set(data);
+	}
+	
+	public void refresh(String tenderId, String factorCode, List<Supplier> supplierList) {
+		RxSwt.run(() -> evaluationContentService.getEvaluationContentListByFactorCode(tenderId, factorCode)).checkWidget(this).other(ArrayList::new).exe(l -> {
+			TemplateTableData data = new TemplateTableData();
+			data.tenderId = tenderId;
+			data.evaluationContentList = l.stream().filter(t -> DataCategoryEnum.MD.getKey().equals(t.getDataCategory())).collect(Collectors.toList());
+			data.supplierList = supplierList;
+			this.templateTableData.set(data);
+		});
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/dialog/AuxevaluationFullScreenDialog.java b/com.gx.obe.struct/src/com/gx/obe/struct/dialog/AuxevaluationFullScreenDialog.java
new file mode 100644
index 00000000..d4084101
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/dialog/AuxevaluationFullScreenDialog.java
@@ -0,0 +1,49 @@
+package com.gx.obe.struct.dialog;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.core.utils.SwtUtils;
+import org.eclipse.swt.core.widgets.EDialog;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+import com.gx.obe.components.core.Constants;
+
+public class AuxevaluationFullScreenDialog extends EDialog {
+	
+	private String stageId;
+	private String token;
+	
+	public AuxevaluationFullScreenDialog(Shell parentShell, String stageId, String token) {
+		super(parentShell);
+		this.setTitle("辅助评标");
+		this.stageId = stageId;
+		this.token = token;
+	}
+	
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite container = (Composite) super.createDialogArea(parent);
+		container.setLayout(new FillLayout(SWT.HORIZONTAL));
+		
+		Browser browser = new Browser(container, SWT.NONE);
+//		browser.setUrl("http://dtjg.cse-bidding.com/bidweb/#/auxevaluationFullScreen/projectInfo?stageId=" + stageId);
+		browser.setUrl(Constants.getAuxiliaryPlatformUrl("bidweb/#/auxevaluationFullScreen/projectInfo") + "?stageId=" + stageId + "&token=" + token + "&sourceType=dt");
+		return container;
+	}
+	
+	@Override
+	protected Point getInitialSize() {
+		return new Point(1502, 950);
+	}
+	
+	@Override
+	protected void initializeBounds() {
+		super.initializeBounds();
+		SwtUtils.setCenter(getShell());
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/dialog/EditOpinionShell.java b/com.gx.obe.struct/src/com/gx/obe/struct/dialog/EditOpinionShell.java
new file mode 100644
index 00000000..bc634238
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/dialog/EditOpinionShell.java
@@ -0,0 +1,429 @@
+package com.gx.obe.struct.dialog;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.MessageDialog;
+import org.eclipse.swt.core.widgets.ELink;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+import com.gx.obe.ColorConstants;
+import com.gx.obe.business.entity.SupplierEvaluationFactor;
+import com.gx.obe.common.icons.IconsActivator;
+import com.gx.obe.components.core.enumeration.EvaluationFactorEnum;
+import com.gx.obe.http.json.JsonUtil;
+import com.gx.obe.struct.beans.AbsoluteModelDO;
+import com.gx.obe.struct.beans.IntelligentEvalDO;
+import com.gx.obe.struct.beans.LiftRateDO;
+import com.gx.obe.struct.beans.ScoreOptionsDO;
+import com.gx.obe.struct.beans.SelfEvalParamsDO;
+import com.gx.obe.struct.listener.EditOpinionListener;
+import com.gx.obe.util.utils.BigDecimalUtils;
+import com.gx.obe.util.utils.ObjectUtils;
+import com.gx.obe.web.entity.evaluation.EvaluationFactor;
+import com.swtdesigner.ResourceManager;
+import com.swtdesigner.SWTResourceManager;
+
+public class EditOpinionShell extends Shell {
+	private Listener deactivateListener;
+	private EvaluationFactor curFactor;
+	private SupplierEvaluationFactor supplierEvaluationFactor;
+	private IntelligentEvalDO intelligentEvalDO;
+	private EditOpinionListener editOpinionListener;
+	private ELink editOpinionLink;
+	private ELink saveEditOpinionLink;
+	private String editOpinionStr = null;
+	private String editOpinionValueStr = null;
+	private Composite editContentComposite;
+	private Text reasonText;
+	private GridData gd_editContentComposite;
+	private GridLayout gl_editContentComposite;
+
+
+	/**
+	 * Create the shell.
+	 * @param display
+	 */
+	public EditOpinionShell(Shell shell, EvaluationFactor curFactor, SupplierEvaluationFactor supplierEvaluationFactor, EditOpinionListener editOpinionListener) {
+		super(shell, SWT.NO_TRIM);
+		setBackground(ColorConstants.BORDER_LINE_COLOR);
+		GridLayout gridLayout = new GridLayout(1, false);
+		gridLayout.verticalSpacing = 1;
+		gridLayout.marginHeight = 0;
+		gridLayout.marginWidth = 0;
+		setLayout(gridLayout);
+		this.curFactor = curFactor;
+		this.supplierEvaluationFactor = supplierEvaluationFactor;
+		this.editOpinionListener = editOpinionListener;
+		addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				removeListener(SWT.Deactivate, deactivateListener);
+			}
+		});
+		
+		editContentComposite = new Composite(this, SWT.NONE);
+		editContentComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		editContentComposite.setBackgroundMode(SWT.INHERIT_FORCE);
+		
+		gd_editContentComposite = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		editContentComposite.setLayoutData(gd_editContentComposite);
+		gl_editContentComposite = new GridLayout(1, false);
+		gl_editContentComposite.marginHeight = 1;
+		gl_editContentComposite.marginWidth = 1;
+		editContentComposite.setLayout(gl_editContentComposite);;
+		
+		Composite reasonTitleComposite = new Composite(this, SWT.NONE);
+		reasonTitleComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		reasonTitleComposite.setBackgroundMode(SWT.INHERIT_FORCE);
+		reasonTitleComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+		reasonTitleComposite.setLayout(new GridLayout(1, false));
+		
+		Label reasonLabel = new Label(reasonTitleComposite, SWT.NONE);
+		reasonLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
+		reasonLabel.setText("修改原因:");
+		
+		Composite editReasonComposite = new Composite(this, SWT.NONE);
+		editReasonComposite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		editReasonComposite.setBackgroundMode(SWT.INHERIT_FORCE);
+		GridData gd_editReasonComposite = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1);
+		gd_editReasonComposite.heightHint = 40;
+		editReasonComposite.setLayoutData(gd_editReasonComposite);
+		GridLayout gl_editReasonComposite = new GridLayout(3, false);
+		gl_editReasonComposite.horizontalSpacing = 0;
+		gl_editReasonComposite.marginHeight = 0;
+		gl_editReasonComposite.marginWidth = 0;
+		editReasonComposite.setLayout(gl_editReasonComposite);
+		
+		
+		reasonText = new Text(editReasonComposite, SWT.WRAP | SWT.V_SCROLL);
+		reasonText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2));
+		reasonText.setTextLimit(200);
+		reasonText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent arg0) {
+			}
+		});
+		
+		saveEditOpinionLink = new ELink(editReasonComposite, SWT.NONE);
+		saveEditOpinionLink.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, true, 2, 1));
+		saveEditOpinionLink.setText("确认修改");
+		saveEditOpinionLink.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/btn/blue/save.png"));
+		saveEditOpinionLink.addMouseListener(new MouseAdapter() {
+			public void mouseUp(MouseEvent e) {
+				saveEditOpinionAction();
+			}
+		});;
+		
+		editOpinionLink = new ELink(editReasonComposite, SWT.NONE);
+		editOpinionLink.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1));
+		editOpinionLink.setText("取消修改");
+		editOpinionLink.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/btn/blue/back.png"));
+		editOpinionLink.addMouseListener(new MouseAdapter() {
+			public void mouseUp(MouseEvent e) {
+				cancleAction();
+			}
+		});
+		createContents();
+		init();
+	}
+	
+	private void init() {
+		deactivateListener = new Listener(){
+			@Override
+			public void handleEvent(Event arg0) {
+				close();
+			}
+		};
+		
+		addListener(SWT.Deactivate, deactivateListener);
+		editOpinionStr = supplierEvaluationFactor.getOpinion();
+		reasonText.setText(ObjectUtils.getObjString(supplierEvaluationFactor.getModifyReason()));
+		// 如果是智能评审类型
+		if(EvaluationFactorEnum.SCORE_TYPE_AI.equals(curFactor.getScoreType())) {
+			intelligentEvalDO = JsonUtil.jsonToBean(curFactor.getIntelligentEval(), IntelligentEvalDO.class);
+		}
+		if(null != intelligentEvalDO) {
+			if("F".equals(intelligentEvalDO.getFactorModel())) {
+				addComboOpinion();
+			}else  if("B".equals(intelligentEvalDO.getFactorModel())) {
+				addLiftRateOpinion();
+			} else if("G".equals(intelligentEvalDO.getFactorModel())) {
+				addAbsoluteParamOpinion();
+			}else {
+				addStringOpinion();
+			}
+		}
+		else {
+			addStringOpinion();
+		}
+	}
+	
+	/**
+	 * 确认修改
+	 */
+	private void saveEditOpinionAction() {
+		removeListener(SWT.Deactivate, deactivateListener);
+		if(null != intelligentEvalDO) {
+			SelfEvalParamsDO selfEvalParamsDO = JsonUtil.jsonToBean(supplierEvaluationFactor.getParamValues(), SelfEvalParamsDO.class);
+			if("F".equals(intelligentEvalDO.getFactorModel())) {
+				if(null != supplierEvaluationFactor.getParamValues()) {
+					if(null != selfEvalParamsDO) {
+						selfEvalParamsDO.setSelectParamValue(editOpinionValueStr);
+						supplierEvaluationFactor.setParamValues(selfEvalParamsDO.toJson());
+					}
+				}
+			}else if("G".equals(intelligentEvalDO.getFactorModel())) {
+				 Pattern p = Pattern.compile("^\\d*[1-9]\\d*$");   
+				 Matcher m = p.matcher(editOpinionValueStr);   
+				if(!m.matches()){
+					MessageDialog.openShortMessage("请输入正确的整数绝对值!");
+					addListener(SWT.Deactivate, deactivateListener);
+					return ;
+				}
+				if(null != selfEvalParamsDO) {
+					selfEvalParamsDO.setSelectParamValue(editOpinionValueStr);
+					supplierEvaluationFactor.setParamValues(selfEvalParamsDO.toJson());
+				}
+			}else if("B".equals(intelligentEvalDO.getFactorModel())) {
+				
+				BigDecimal value = null;
+				try {
+					value = new BigDecimal(editOpinionValueStr);
+					LiftRateDO liftRateDO = intelligentEvalDO.getLiftRate();
+					if(null != liftRateDO) {
+						editOpinionValueStr = BigDecimalUtils.round(value, ObjectUtils.getIntValue(liftRateDO.getDecimalDigits(), 6)).toString();
+						editOpinionStr = editOpinionValueStr + liftRateDO.getUnit();
+					}
+				} catch (Exception e) {
+					MessageDialog.openShortMessage("请输入正确的数值!");
+					addListener(SWT.Deactivate, deactivateListener);
+					return ;
+				}
+				if(null != selfEvalParamsDO) {
+					selfEvalParamsDO.setSelectParamValue(editOpinionValueStr);
+					supplierEvaluationFactor.setParamValues(selfEvalParamsDO.toJson());
+				}
+			}
+		}
+		if(reasonText.getText().trim().length() == 0) {
+			MessageDialog.openShortMessage("请输入修改原因!");
+			addListener(SWT.Deactivate, deactivateListener);
+			return;
+		}
+		supplierEvaluationFactor.setModifyReason(reasonText.getText());
+		editOpinionListener.editOpinion(editOpinionStr, reasonText.getText());
+		this.close();
+	}
+	
+	/**
+	 * 取消修改
+	 */
+	private void cancleAction() {
+		this.close();
+	}
+	
+	private void addStringOpinion() {
+		gl_editContentComposite.numColumns = 1;
+    	gd_editContentComposite.grabExcessVerticalSpace = true;
+		gd_editContentComposite.heightHint = 60;
+		
+		final Text opinionText = new Text(editContentComposite, SWT.WRAP | SWT.V_SCROLL);
+		opinionText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		opinionText.setText(ObjectUtils.getObjString(supplierEvaluationFactor.getOpinion()));
+		opinionText.setTextLimit(2000);
+		editOpinionStr = opinionText.getText();
+		opinionText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent arg0) {
+				editOpinionStr = opinionText.getText().trim();
+			}
+		});
+		editContentComposite.getParent().layout();
+	}
+
+    /**
+     * 设置下拉选项评议意见
+     */
+    private void addComboOpinion() {
+    	gl_editContentComposite.numColumns = 1;
+    	gd_editContentComposite.grabExcessVerticalSpace = false;
+    	gd_editContentComposite.heightHint = -1;
+    	 final Combo opinionCombo = new Combo(editContentComposite, SWT.READ_ONLY);
+    	 opinionCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+    	 opinionCombo.addSelectionListener(new SelectionAdapter() {
+    		 public void widgetSelected(SelectionEvent e) {
+    			 selectOpinionAction(opinionCombo);
+    		 }
+    	 });
+    	 
+    	 String selectParamValue = null;// 下拉选项的值
+		   if(null != supplierEvaluationFactor.getParamValues()) {
+			   SelfEvalParamsDO selfEvalParamsDO = JsonUtil.jsonToBean(supplierEvaluationFactor.getParamValues(), SelfEvalParamsDO.class);
+			   if(null != selfEvalParamsDO) {
+				   selectParamValue = selfEvalParamsDO.getSelectParamValue();
+				   editOpinionValueStr = selectParamValue;
+			   }
+		   }
+		   
+    	 int index = 0;
+    	 List<ScoreOptionsDO> scoreOptionsDOList = intelligentEvalDO.getScoreOptionsDOList(); 
+    	 if(null != scoreOptionsDOList) {
+    		 for(ScoreOptionsDO scoreOptionsDO : scoreOptionsDOList) {
+    			 opinionCombo.add(scoreOptionsDO.getName(), index);
+    			 opinionCombo.setData(index + "", scoreOptionsDO);
+    			 if(null != selectParamValue) {
+    				 // 如果有下拉选项值,则通过值进行匹配
+    				 if(selectParamValue.equals(scoreOptionsDO.getScoreItemId())){
+    					 opinionCombo.select(index);
+    				 }
+    			 }else {
+    				 if(scoreOptionsDO.getName().equals(supplierEvaluationFactor.getOpinion())){
+    					 opinionCombo.select(index);
+    				 }
+    			 }
+    			 index++;
+    		 }
+    	 }
+    	 
+    }
+    /**
+     * @Description: 修改下拉框评审意见
+     * @author chenxw
+     */
+    private void selectOpinionAction(Combo opinionCombo) {
+    	if(opinionCombo.getSelectionIndex() >= 0 && null != curFactor) {
+    		if(null != supplierEvaluationFactor) {
+    			ScoreOptionsDO scoreOptionsDO = (ScoreOptionsDO)opinionCombo.getData("" + opinionCombo.getSelectionIndex());
+    			if(null != scoreOptionsDO) {
+    				editOpinionStr = scoreOptionsDO.getName();
+    				editOpinionValueStr = scoreOptionsDO.getScoreItemId();
+    			}
+    		}
+    	}
+    }
+    
+    /**
+     * 绝对值模型修改
+     */
+    private void addAbsoluteParamOpinion() {
+    	gl_editContentComposite.numColumns = 3;
+    	gd_editContentComposite.grabExcessVerticalSpace = false;
+		gd_editContentComposite.heightHint = -1;
+		
+		String selectParamValue = null;// 下拉选项的值
+		if(null != supplierEvaluationFactor.getParamValues()) {
+			SelfEvalParamsDO selfEvalParamsDO = JsonUtil.jsonToBean(supplierEvaluationFactor.getParamValues(), SelfEvalParamsDO.class);
+			if(null != selfEvalParamsDO) {
+				selectParamValue = selfEvalParamsDO.getSelectParamValue();
+				editOpinionValueStr = selectParamValue;
+			}
+		}
+		AbsoluteModelDO absoluteModelDO = intelligentEvalDO.getAbsoluteModelDO();
+		
+    	final Text opinionText = new Text(editContentComposite, SWT.CENTER | SWT.BORDER);
+		GridData gd_opinionText = new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1);
+		gd_opinionText.widthHint = 50;
+		opinionText.setLayoutData(gd_opinionText);
+		opinionText.setText(ObjectUtils.getObjString(selectParamValue));
+		opinionText.setTextLimit(2000);
+		Label unitLabel = new Label(editContentComposite, SWT.NONE);
+		unitLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1));
+		if(null != absoluteModelDO) {
+			unitLabel.setText(ObjectUtils.getObjString(absoluteModelDO.getAbsoluteUnit(),"未知单位"));
+		}
+		
+    	Label tipsLabel = new Label(editContentComposite, SWT.NONE);
+    	tipsLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+    	tipsLabel.setForeground(ColorConstants.NOTE_TIPS_COLOR);
+    	//<bidFillMemo><![CDATA[此处只能填写整数绝对值]]></bidFillMemo>
+    	tipsLabel.setText("请填写整数绝对值!");
+    	
+    	opinionText.addModifyListener(new ModifyListener() {
+			public void modifyText(ModifyEvent arg0) {
+				editOpinionStr = opinionText.getText().trim() + unitLabel.getText();
+				editOpinionValueStr = opinionText.getText().trim();
+			}
+		});
+    	
+    }
+    /**
+     * 升降率模型修改
+     */
+    private void addLiftRateOpinion() {
+    	gl_editContentComposite.numColumns = 3;
+    	gd_editContentComposite.grabExcessVerticalSpace = false;
+    	gd_editContentComposite.heightHint = -1;
+    	
+    	String selectParamValue = null;// 下拉选项的值
+    	if(null != supplierEvaluationFactor.getParamValues()) {
+    		SelfEvalParamsDO selfEvalParamsDO = JsonUtil.jsonToBean(supplierEvaluationFactor.getParamValues(), SelfEvalParamsDO.class);
+    		if(null != selfEvalParamsDO) {
+    			selectParamValue = selfEvalParamsDO.getSelectParamValue();
+    			editOpinionValueStr = selectParamValue;
+    		}
+    	}
+    	
+    	LiftRateDO liftRateDO = intelligentEvalDO.getLiftRate();
+    	
+    	final Text opinionText = new Text(editContentComposite, SWT.CENTER | SWT.BORDER);
+    	GridData gd_opinionText = new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1);
+    	gd_opinionText.widthHint = 100;
+    	opinionText.setLayoutData(gd_opinionText);
+//    	<unit>%</unit>
+//        <decimalDigits>6</decimalDigits>
+    	opinionText.setText(ObjectUtils.getObjString(selectParamValue));
+    	opinionText.setTextLimit(2000);
+    	Label unitLabel = new Label(editContentComposite, SWT.NONE);
+    	unitLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1));
+    	if(null != liftRateDO) {
+    		unitLabel.setText(ObjectUtils.getObjString(liftRateDO.getUnit(),"未知单位"));
+    	}
+    	
+    	Label tipsLabel = new Label(editContentComposite, SWT.NONE);
+    	tipsLabel.setForeground(ColorConstants.NOTE_TIPS_COLOR);
+    	tipsLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+    	//<bidFillMemo><![CDATA[此处应填写数值,小数点保留6位]]></bidFillMemo>
+    	tipsLabel.setText("请填写数值(小数点保留"+liftRateDO.getDecimalDigits()+"位)!");
+    	
+    	opinionText.addModifyListener(new ModifyListener() {
+    		public void modifyText(ModifyEvent arg0) {
+    			editOpinionStr = opinionText.getText().trim() + unitLabel.getText();
+    			editOpinionValueStr = opinionText.getText().trim();
+    		}
+    	});
+    	
+    }
+   
+
+	/**
+	 * Create contents of the shell.
+	 */
+	protected void createContents() {
+		setText("SWT Application");
+		setSize(450, 300);
+
+	}
+
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents subclassing of SWT components
+	}
+
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/dialog/FactorClearBidStepDialog.java b/com.gx.obe.struct/src/com/gx/obe/struct/dialog/FactorClearBidStepDialog.java
new file mode 100644
index 00000000..79836536
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/dialog/FactorClearBidStepDialog.java
@@ -0,0 +1,176 @@
+package com.gx.obe.struct.dialog;
+
+import java.text.MessageFormat;
+import java.util.Optional;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.utils.WidgetUtils;
+import org.eclipse.swt.core.widgets.ELink;
+import org.eclipse.swt.core.widgets.ESepator;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+
+import com.gx.obe.ColorConstants;
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.common.icons.IconsActivator;
+import com.gx.obe.common.widget.button.ImageRaido;
+import com.gx.obe.component.handler.RaidoHandler;
+import com.gx.obe.component.rx.RxSwt;
+import com.gx.obe.components.core.enumeration.EvaluationStepEnum;
+import com.gx.obe.step.dialog.EvaluationStepDialog;
+import com.gx.obe.struct.enums.EvaluationFactorTypeEnum;
+import com.gx.obe.util.utils.CollectionUtils;
+import com.gx.obe.web.entity.evaluation.EvaluationStep;
+import com.gx.obe.web.entity.expert.Expert;
+import com.gx.obe.web.entity.tender.TenderProjectEntity;
+import com.gx.obe.web.service.expert.ExpertService;
+import com.swtdesigner.ResourceManager;
+import com.swtdesigner.SWTResourceManager;
+
+public class FactorClearBidStepDialog extends EvaluationStepDialog {
+	
+	private final ExpertService expertService = new ExpertService();
+	
+	private final Prop<EvaluationFactorTypeEnum> evaluationFactorTypeEnum = new Prop<>();
+	
+	private final Prop<Expert> expert = new Prop<>();
+	
+	public FactorClearBidStepDialog(Shell parentShell, TenderProjectEntity tenderProject, EvaluationStep evaluationStep) {
+		super(parentShell, tenderProject, evaluationStep);
+	}
+	
+	@Override
+	protected void createFromArea(Composite fromComposite, Composite gridComposite) {
+		evaluationFactorTypeEnum.bind(t -> {
+			switch (t) {
+				case COMPLIANCE:
+					setStepNameText("符合性指标评议");
+					break;
+				case BUSINESS:
+					setStepNameText("商务指标评议");
+					break;
+				case TECHNOLOGY:
+					setStepNameText("技术指标评议");
+					break;
+			}
+		});
+		evaluationFactorTypeEnum.bind(t -> expert.set(null));
+		
+		CLabel label = new CLabel(fromComposite, SWT.NONE);
+		label.setFont(SWTResourceManager.getFont("微软雅黑", 9, SWT.NORMAL));
+		label.setAlignment(SWT.RIGHT);
+		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
+		label.setText("评议类型:");
+		
+		Composite composite = new Composite(fromComposite, SWT.NONE);
+		composite.setLayout(new GridLayout(2, false));
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+		
+		Composite composite_1 = new Composite(composite, SWT.NONE);
+		composite_1.setLayout(new GridLayout(3, false));
+//		RaidoHandler<ImageRaido, EvaluationFactorTypeEnum> raidoHandler = new RaidoHandler<ImageRaido, EvaluationFactorTypeEnum>(composite_1, p->{
+//			
+//		});
+//		RaidoHandler<ImageRaido, EvaluationFactorTypeEnum> raidoHandler = new RaidoHandler<>(composite_1, p -> {
+//			ImageRaido imageRaido = new ImageRaido(p, SWT.NONE);
+//			imageRaido.setFont(SWTResourceManager.getFont("微软雅黑", 10, SWT.NORMAL));
+//			imageRaido.setImageSize(24);
+//			return imageRaido;
+//		});
+//		raidoHandler.start().hand(EvaluationFactorTypeEnum.COMPLIANCE, "符合性评议").hand(EvaluationFactorTypeEnum.BUSINESS, "商务评议").hand(EvaluationFactorTypeEnum.TECHNOLOGY, "技术评议").end();
+//		evaluationFactorTypeEnum.bindBidirectional(raidoHandler);
+		
+		Composite composite_2 = new Composite(composite, SWT.NONE);
+		GridLayout gl_composite_2 = new GridLayout(2, false);
+		composite_2.setLayout(gl_composite_2);
+		evaluationFactorTypeEnum.bindExe(t -> {
+			WidgetUtils.setControlVisible(composite_2, t != null);
+			composite_2.getParent().layout();
+		});
+		
+		Composite composite_3 = new Composite(composite_2, SWT.NONE);
+		composite_3.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
+		GridLayout gl_composite_3 = new GridLayout(1, false);
+		gl_composite_3.verticalSpacing = 0;
+		gl_composite_3.marginHeight = 0;
+		gl_composite_3.marginWidth = 0;
+		composite_3.setLayout(gl_composite_3);
+		
+		CLabel lblNewLabel = new CLabel(composite_3, SWT.NONE);
+		lblNewLabel.setLayoutData(new GridData(SWT.CENTER, SWT.CENTER, false, false, 1, 1));
+		expert.bind(t -> {
+			lblNewLabel.setText(Optional.ofNullable(t).map(Expert::getUserName).orElse(""));
+			lblNewLabel.getParent().layout();
+		});
+		
+		ESepator label_1 = new ESepator(composite_3, SWT.HORIZONTAL);
+		GridData gd_label_1 = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+		gd_label_1.widthHint = 100;
+		label_1.setLayoutData(gd_label_1);
+		label_1.setBackground(ColorConstants.SEP_LIGHT_COLOR);
+		
+		ELink select_expert = new ELink(composite_2, SWT.NONE);
+		select_expert.addMouseListener(MouseListener.mouseUpAdapter($ -> selectExpert()));
+		select_expert.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/btn/blue/search.png"));
+		select_expert.setLayoutData(new GridData(SWT.LEFT, SWT.BOTTOM, false, true, 1, 1));
+		select_expert.setText(MessageFormat.format("选择{0}", "验证专家"));
+	}
+	
+	private void selectExpert() {
+		SelectStepExpertDialog.selectExpert(getShell(), tenderProject.getId(), evaluationFactorTypeEnum.get()).thenThrow(expert::set);
+	}
+	
+	@Override
+	protected void setFromData(EvaluationStep evaluationStep) {
+		evaluationFactorTypeEnum.set(EvaluationFactorTypeEnum.MAP.get(evaluationStep.getEvaluationParamByKey(EvaluationStepEnum.EVALUATION_FACTOR_TYPE)));
+		RxSwt.run(() -> expertService.getEvaluationStepExpertList(tenderProject.getId(), evaluationStep)).checkWidget(getShell()).exe(t -> {
+			if (CollectionUtils.isNotNull(t)) expert.set(t.get(0));
+		});
+	}
+//	
+//	@Override
+//	protected String valFromData() {
+//		if (evaluationFactorTypeEnum.get() == null) return "请选择评审类型!";
+//		if (expert.get() == null) return "请选择评审专家!";
+////		return super.valFromData();
+//	}
+	
+	@Override
+	protected void getFromData(EvaluationStep evaluationStep) {
+		evaluationStep.setEvaluationParam(EvaluationStepEnum.EVALUATION_FACTOR_TYPE, evaluationFactorTypeEnum.get().getKey());
+		evaluationStep.setRoleType(EvaluationStepEnum.CUSTOM);
+		addStepExpertUserId(expert.get().getUserId());
+	}
+	
+	@Override
+	protected String getTipsText() {
+		return "评审专家通过对供应商标书及结构化数据进行分析后对每一下评审指标录入评审意见!";
+	}
+	
+	@Override
+	protected String getStepNameDef() {
+		return "指标评议";
+	}
+	
+	@Override
+	protected String getStepType() {
+		return EvaluationStepEnum.FACTOR_CLEAR_BID;
+	}
+	
+	@Override
+	protected Point getInitialSize() {
+		return new Point(600, 400);
+	}
+
+	@Override
+	protected String valFromData() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/dialog/SelectStepExpertDialog.java b/com.gx.obe.struct/src/com/gx/obe/struct/dialog/SelectStepExpertDialog.java
new file mode 100644
index 00000000..119055c0
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/dialog/SelectStepExpertDialog.java
@@ -0,0 +1,166 @@
+package com.gx.obe.struct.dialog;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.widgets.EButton;
+import org.eclipse.swt.core.widgets.EDialog;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+import com.gx.obe.ColorConstants;
+import com.gx.obe.bind.promise.Promise;
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.bind.prop.RProp;
+import com.gx.obe.common.icons.IconsActivator;
+import com.gx.obe.component.grid.FGrid;
+import com.gx.obe.component.listener.SelectionListener;
+import com.gx.obe.component.rx.RxSwt;
+import com.gx.obe.components.core.enumeration.ExpertEnum;
+import com.gx.obe.struct.enums.EvaluationFactorTypeEnum;
+import com.gx.obe.web.entity.expert.Expert;
+import com.gx.obe.web.service.expert.ExpertService;
+import com.swtdesigner.ResourceManager;
+import com.swtdesigner.SWTResourceManager;
+
+public class SelectStepExpertDialog extends EDialog {
+	
+	private final List<SelectionListener<Expert>> selectionListeners = new ArrayList<>();
+	
+	private final ExpertService expertService = new ExpertService();
+	
+	private final String tenderId;
+	private final EvaluationFactorTypeEnum evaluationFactorTypeEnum;
+	
+	private Prop<List<Expert>> expertList = new Prop<>();
+	private RProp<Expert> expert = new RProp<>();
+	
+	public SelectStepExpertDialog(Shell parentShell, String tenderId, EvaluationFactorTypeEnum evaluationFactorTypeEnum) {
+		super(parentShell);
+		this.tenderId = tenderId;
+		this.evaluationFactorTypeEnum = evaluationFactorTypeEnum;
+		setTitle("选择评标专家");
+	}
+	
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite container = (Composite) super.createDialogArea(parent);
+		container.setBackground(ColorConstants.BORDER_LINE_COLOR);
+		GridLayout gl_container = new GridLayout(1, false);
+		gl_container.horizontalSpacing = 0;
+		gl_container.verticalSpacing = 1;
+		gl_container.marginHeight = 0;
+		gl_container.marginWidth = 0;
+		container.setLayout(gl_container);
+		
+		Composite composite_1 = new Composite(container, SWT.NONE);
+		composite_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		composite_1.setLayout(new GridLayout(1, false));
+		composite_1.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		composite_1.setBackgroundMode(SWT.INHERIT_FORCE);
+		
+		CLabel label_3 = new CLabel(composite_1, SWT.NONE);
+		label_3.setFont(SWTResourceManager.getFont("宋体", 10, SWT.BOLD));
+		label_3.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/television.png"));
+		label_3.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		label_3.setText("评标专家");
+		
+		Composite composite_2 = new Composite(container, SWT.NONE);
+		composite_2.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		composite_2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		GridLayout gl_composite_2 = new GridLayout(1, false);
+		gl_composite_2.marginHeight = 0;
+		gl_composite_2.marginWidth = 0;
+		composite_2.setLayout(gl_composite_2);
+		
+		FGrid<Expert> composite_3 = new FGrid<>(composite_2);
+		composite_3.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
+		composite_3.addIndexColumn("序号").setWidth(50);
+		composite_3.addColumn("姓名", t -> t.getUser().getUserName(), SWT.CENTER).setWidth(100);
+		composite_3.addColumn("账号", t -> t.getUser().getUserAccount(), SWT.CENTER).setWidth(100);
+		composite_3.addColumn("专家类型", Expert::getExpertTypeAndRole, SWT.CENTER).setWidth(250);
+		expertList.bind(composite_3::refresh);
+		expert.reader(composite_3);
+		
+		Composite composite = new Composite(container, SWT.NONE);
+		composite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		composite.setBackgroundMode(SWT.INHERIT_FORCE);
+		composite.setLayout(new GridLayout(2, false));
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		
+		EButton button_1 = new EButton(composite, SWT.NONE);
+		button_1.addMouseListener(MouseListener.mouseUpAdapter($ -> confirmAction()));
+		button_1.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/btn/blue/yes.png"));
+		button_1.setText("确定");
+		button_1.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
+		
+		EButton button = new EButton(composite, SWT.NONE);
+		button.addMouseListener(MouseListener.mouseUpAdapter($ -> close()));
+		button.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/btn/blue/close.png"));
+		button.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		button.setText("关闭");
+		
+		init();
+		
+		return container;
+	}
+	
+	private void init() {
+		RxSwt.run(this::queryExpertList).checkWidget(getShell()).exe(expertList::set);
+	}
+	
+	public List<Expert> queryExpertList() {
+		List<Expert> experts = expertService.getExpertList(tenderId, ExpertEnum.ALL);
+		if (experts == null) {
+			return null;
+		}
+		return experts.stream().filter(getExpertPredicate()).collect(Collectors.toList());
+	}
+	
+	private Predicate<Expert> getExpertPredicate() {
+		switch (evaluationFactorTypeEnum) {
+			case COMPLIANCE:
+				return t -> true;
+			case BUSINESS:
+				return t -> (t.getEvalBidTypeNotNull() & ExpertEnum.EXPERT_BUS) != 0;
+			case TECHNOLOGY:
+				return t -> (t.getEvalBidTypeNotNull() & ExpertEnum.EXPERT_TEC) != 0;
+			default:
+				return t -> false;
+		}
+	}
+	
+	private void confirmAction() {
+		close();
+		selectionListeners.forEach(l -> l.selection(expert.get()));
+	}
+	
+	public void addSelectionListener(SelectionListener<Expert> listener) {
+		selectionListeners.add(listener);
+	}
+	
+	public static Promise<Expert> selectExpert(Shell parentShell, String tenderId, EvaluationFactorTypeEnum evaluationFactorTypeEnum) {
+		SelectStepExpertDialog dialog = new SelectStepExpertDialog(parentShell, tenderId, evaluationFactorTypeEnum);
+		return new Promise<>((s, f) -> {
+			dialog.addSelectionListener(s::accept);
+			dialog.open();
+		});
+	}
+	
+	/**
+	 * Return the initial size of the dialog.
+	 */
+	@Override
+	protected Point getInitialSize() {
+		return new Point(600, 400);
+	}
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/enums/DataCategoryEnum.java b/com.gx.obe.struct/src/com/gx/obe/struct/enums/DataCategoryEnum.java
new file mode 100644
index 00000000..2a725314
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/enums/DataCategoryEnum.java
@@ -0,0 +1,35 @@
+package com.gx.obe.struct.enums;
+
+import java.util.Map;
+
+import com.gx.obe.util.utils.EnumUtils;
+
+public enum DataCategoryEnum {
+	
+	NULL(""),
+	/**
+	 * 小范本数据表单
+	 */
+	TDI("TDI"),
+	/**
+	 * 小范本表格
+	 */
+	TT("TT"),
+	/**
+	 * 对象结构化数据
+	 */
+	MD("MD");
+	
+	public static Map<String, DataCategoryEnum> MAP = EnumUtils.toMap(values(), DataCategoryEnum::getKey);
+	
+	private String key;
+	
+	private DataCategoryEnum(String key) {
+		this.key = key;
+	}
+	
+	public String getKey() {
+		return key;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/enums/EvaluationFactorTypeEnum.java b/com.gx.obe.struct/src/com/gx/obe/struct/enums/EvaluationFactorTypeEnum.java
new file mode 100644
index 00000000..83a9f806
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/enums/EvaluationFactorTypeEnum.java
@@ -0,0 +1,23 @@
+package com.gx.obe.struct.enums;
+
+import java.util.Map;
+
+import com.gx.obe.util.utils.EnumUtils;
+
+public enum EvaluationFactorTypeEnum {
+	
+	COMPLIANCE("compliance"), BUSINESS("business"), TECHNOLOGY("technology");
+	
+	public static Map<String, EvaluationFactorTypeEnum> MAP = EnumUtils.toMap(values(), EvaluationFactorTypeEnum::getKey);
+	
+	private String key;
+	
+	private EvaluationFactorTypeEnum(String key) {
+		this.key = key;
+	}
+	
+	public String getKey() {
+		return key;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/enums/ModelDataClassEnum.java b/com.gx.obe.struct/src/com/gx/obe/struct/enums/ModelDataClassEnum.java
new file mode 100644
index 00000000..00227a17
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/enums/ModelDataClassEnum.java
@@ -0,0 +1,30 @@
+package com.gx.obe.struct.enums;
+
+public enum ModelDataClassEnum {
+	
+	/**
+	 * 投标人基本情况
+	 */
+	BidderInfo,
+	/**
+	 * 营业执照
+	 */
+	BusinessLicense,
+	/**
+	 * 财务报告
+	 */
+	Finance,
+	/**
+	 * 业绩
+	 */
+	Performance,
+	/**
+	 * 项目负责人
+	 */
+	ProjectLeader,
+	/**
+	 * 企业体系认证证书
+	 */
+	Qualification;
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/enums/ModelDataTypeEnum.java b/com.gx.obe.struct/src/com/gx/obe/struct/enums/ModelDataTypeEnum.java
new file mode 100644
index 00000000..f5bfe2d7
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/enums/ModelDataTypeEnum.java
@@ -0,0 +1,126 @@
+package com.gx.obe.struct.enums;
+
+import java.util.Map;
+
+import com.gx.obe.util.utils.EnumUtils;
+
+public enum ModelDataTypeEnum {
+	
+	/**
+	 * 投标人基本情况
+	 */
+	EQ_BidderBasicInfo("EQ_BidderBasicInfo", ModelDataClassEnum.BidderInfo),
+	/**
+	 * 营业执照
+	 */
+	EQ_BusinessLicense("EQ_BusinessLicense", ModelDataClassEnum.BusinessLicense),
+	/**
+	 * 财务报告
+	 */
+	EQ_FinancialReport("EQ_FinancialReport", ModelDataClassEnum.Finance),
+	/**
+	 * 项目负责人
+	 */
+	EQ_ProjectLeader("EQ_ProjectLeader", ModelDataClassEnum.ProjectLeader),
+	/**
+	 * 施工业绩
+	 */
+	EQ_Construction("EQ_Construction", ModelDataClassEnum.Performance),
+	/**
+	 * 勘察设计
+	 */
+	EQ_SurveyDesign("EQ_SurveyDesign", ModelDataClassEnum.Performance),
+	/**
+	 * 监理业绩
+	 */
+	EQ_Supervision("EQ_Supervision", ModelDataClassEnum.Performance),
+	/**
+	 * 采购业绩
+	 */
+	EQ_Procurement("EQ_Procurement", ModelDataClassEnum.Performance),
+	/**
+	 * 生产业绩
+	 */
+	EQ_Production("EQ_Production", ModelDataClassEnum.Performance),
+	/**
+	 * 安全生产许可证
+	 */
+	EQ_Qualification_SCXK("EQ_Qualification_SCXK", ModelDataClassEnum.Qualification),
+	/**
+	 * 质量体系认证证书
+	 */
+	EQ_Qualification_ZLTX("EQ_Qualification_ZLTX", ModelDataClassEnum.Qualification),
+	/**
+	 * 职业健康安全管理体系
+	 */
+	EQ_Qualification_ZYJK("EQ_Qualification_ZYJK", ModelDataClassEnum.Qualification),
+	/**
+	 * 环境管理体系认证证书
+	 */
+	EQ_Qualification_HBTX("EQ_Qualification_HBTX", ModelDataClassEnum.Qualification),
+	/**
+	 * 全国工业生产许可证
+	 */
+	EQ_Qualification_QGGYSCXK("EQ_Qualification_QGGYSCXK", ModelDataClassEnum.Qualification),
+	/**
+	 * 其他资质证书(华能企业资质证书)
+	 */
+	EQ_Qualification("EQ_Qualification", ModelDataClassEnum.Qualification),
+	/**
+	 * 国家级奖项(华能新增)
+	 */
+	EQ_Qualification_GJ_JX("EQ_Qualification_GJ_JX", ModelDataClassEnum.Qualification),
+	/**
+	 * 省部级奖励(华能新增)
+	 */
+	EQ_Qualification_SJ_JX("EQ_Qualification_SJ_JX", ModelDataClassEnum.Qualification),
+	/**
+	 * 所建工程国家级奖励
+	 */
+	EQ_Qualification_GJ_GCJX("EQ_Qualification_GJ_GCJX", ModelDataClassEnum.Qualification),
+	/**
+	 * 所建工程省部级奖励
+	 */
+	EQ_Qualification_SJ_GCJX("EQ_Qualification_SJ_GCJX", ModelDataClassEnum.Qualification),
+	/**
+	 * 资信等级(需要统一等级)
+	 */
+	EQ_Qualification_ZXDJ("EQ_Qualification_ZXDJ", ModelDataClassEnum.Qualification),
+	/**
+	 * 设计资质
+	 */
+	EQ_Qualification_SJZZ("EQ_Qualification_SJZZ", ModelDataClassEnum.Qualification),
+	/**
+	 * 施工资质
+	 */
+	EQ_Qualification_SGZZ("EQ_Qualification_SGZZ", ModelDataClassEnum.Qualification),
+	/**
+	 * 监理资质
+	 */
+	EQ_Qualification_JLZZ("EQ_Qualification_JLZZ", ModelDataClassEnum.Qualification),
+	/**
+	 * 检验报告
+	 */
+	EQ_Qualification_SurveyReport("EQ_Qualification_SurveyReport", ModelDataClassEnum.Qualification);
+	
+	
+	public static Map<String, ModelDataTypeEnum> MAP = EnumUtils.toMap(values(), ModelDataTypeEnum::getKey);
+	
+	private String key;
+	
+	private ModelDataClassEnum classEnum;
+	
+	private ModelDataTypeEnum(String key, ModelDataClassEnum classEnum) {
+		this.key = key;
+		this.classEnum = classEnum;
+	}
+	
+	public String getKey() {
+		return key;
+	}
+	
+	public ModelDataClassEnum getClassEnum() {
+		return classEnum;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/enums/PerformanceStatus.java b/com.gx.obe.struct/src/com/gx/obe/struct/enums/PerformanceStatus.java
new file mode 100644
index 00000000..cc4f9574
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/enums/PerformanceStatus.java
@@ -0,0 +1,39 @@
+package com.gx.obe.struct.enums;
+
+import java.util.Map;
+import java.util.Optional;
+import java.util.function.Function;
+
+import com.gx.obe.util.utils.EnumUtils;
+
+public enum PerformanceStatus {
+	/**
+	 * 进行中
+	 */
+	PROGRESS("00", "进行中"),
+	/**
+	 * 已完成
+	 */
+	COMPLETED("01", "已投产");
+	
+	public static Map<String, PerformanceStatus> MAP = EnumUtils.toMap(values(), PerformanceStatus::getKey);
+	
+	public static Function<String, String> keyToValueFun = t -> Optional.ofNullable(t).map(MAP::get).map(PerformanceStatus::getName).orElse("未知状态");
+	
+	private String key;
+	private String name;
+	
+	private PerformanceStatus(String key, String name) {
+		this.key = key;
+		this.name = name;
+	}
+	
+	public String getKey() {
+		return key;
+	}
+	
+	public String getName() {
+		return name;
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/factory/ModelDataFactory.java b/com.gx.obe.struct/src/com/gx/obe/struct/factory/ModelDataFactory.java
new file mode 100644
index 00000000..1ac96794
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/factory/ModelDataFactory.java
@@ -0,0 +1,1476 @@
+package com.gx.obe.struct.factory;
+
+import java.io.File;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.MessageDialog;
+import org.eclipse.swt.widgets.Composite;
+
+import com.gx.obe.common.icons.IconsActivator;
+import com.gx.obe.component.form.FForm;
+import com.gx.obe.component.rx.RxSwt;
+import com.gx.obe.component.table.FTable;
+import com.gx.obe.component.utils.CompositeUtils;
+import com.gx.obe.components.core.Constants;
+import com.gx.obe.struct.beans.AttachmentFile;
+import com.gx.obe.struct.beans.BidderBasicInfo;
+import com.gx.obe.struct.beans.BusinessLicense;
+import com.gx.obe.struct.beans.Certificate;
+import com.gx.obe.struct.beans.Finance;
+import com.gx.obe.struct.beans.ModelData;
+import com.gx.obe.struct.beans.Performance;
+import com.gx.obe.struct.beans.ProjectLeader;
+import com.gx.obe.struct.beans.Qualification;
+import com.gx.obe.struct.beans.WorkExperience;
+import com.gx.obe.struct.enums.ModelDataTypeEnum;
+import com.gx.obe.struct.enums.PerformanceStatus;
+import com.gx.obe.struct.inters.IModelData;
+import com.gx.obe.struct.inters.IModelDataDetail;
+import com.gx.obe.struct.service.AttachmentFileService;
+import com.gx.obe.struct.service.BidderInfoService;
+import com.gx.obe.struct.service.BusinessLicenseService;
+import com.gx.obe.struct.service.CertificateService;
+import com.gx.obe.struct.service.FinanceService;
+import com.gx.obe.struct.service.PerformanceService;
+import com.gx.obe.struct.service.ProjectLeaderService;
+import com.gx.obe.struct.service.QualificationService;
+import com.gx.obe.struct.service.WorkExperienceService;
+import com.gx.obe.util.utils.NumberFormatUtils;
+import com.gx.obe.util.utils.RuntimeUtils;
+import com.swtdesigner.ResourceManager;
+
+public class ModelDataFactory {
+	
+	public static IModelData create(Composite tableParent, IModelDataDetail modelDataDetail, ModelDataTypeEnum modelDataTypeEnum) {
+		CompositeUtils.disposeChildren(tableParent);
+		switch (modelDataTypeEnum) {
+			case EQ_BidderBasicInfo:
+				return initBidderBasicInfo(tableParent, modelDataDetail);
+			case EQ_BusinessLicense:
+				return initBusinessLicense(tableParent, modelDataDetail);
+			case EQ_Construction:
+				return initConstruction(tableParent, modelDataDetail);
+			case EQ_FinancialReport:
+				return initFinancialReport(tableParent, modelDataDetail);
+			case EQ_Procurement:
+				return initProcurement(tableParent, modelDataDetail);
+			case EQ_Production:
+				return initProduction(tableParent, modelDataDetail);
+			case EQ_ProjectLeader:
+				return initProjectLeader(tableParent, modelDataDetail);
+			case EQ_Qualification:
+				return initQualification(tableParent, modelDataDetail);
+			case EQ_Qualification_GJ_GCJX:
+				return initQualification_GJ_GCJX(tableParent, modelDataDetail);
+			case EQ_Qualification_GJ_JX:
+				return initQualification_GJ_JX(tableParent, modelDataDetail);
+			case EQ_Qualification_HBTX:
+				return initQualification_HBTX(tableParent, modelDataDetail);
+			case EQ_Qualification_JLZZ:
+				return initQualification_JLZZ(tableParent, modelDataDetail);
+			case EQ_Qualification_QGGYSCXK:
+				return initQualification_QGGYSCXK(tableParent, modelDataDetail);
+			case EQ_Qualification_SCXK:
+				return initQualification_SCXK(tableParent, modelDataDetail);
+			case EQ_Qualification_SGZZ:
+				return initQualification_SGZZ(tableParent, modelDataDetail);
+			case EQ_Qualification_SJZZ:
+				return initQualification_SJZZ(tableParent, modelDataDetail);
+			case EQ_Qualification_SJ_GCJX:
+				return initQualification_SJ_GCJX(tableParent, modelDataDetail);
+			case EQ_Qualification_SJ_JX:
+				return initQualification_SJ_JX(tableParent, modelDataDetail);
+			case EQ_Qualification_SurveyReport:
+				return initQualification_SurveyReport(tableParent, modelDataDetail);
+			case EQ_Qualification_ZLTX:
+				return initQualification_ZLTX(tableParent, modelDataDetail);
+			case EQ_Qualification_ZXDJ:
+				return initQualification_ZXDJ(tableParent, modelDataDetail);
+			case EQ_Qualification_ZYJK:
+				return initQualification_ZYJK(tableParent, modelDataDetail);
+			case EQ_Supervision:
+				return initSupervision(tableParent, modelDataDetail);
+			case EQ_SurveyDesign:
+				return initSurveyDesign(tableParent, modelDataDetail);
+		}
+		
+		return null;
+	}
+	
+	/**
+	 * @Description: 投标人基本情况
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initBidderBasicInfo(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final BidderInfoService bidderInfoService = new BidderInfoService();
+			
+			private FTable<BidderBasicInfo> fTable;
+			
+			protected void init() {
+				fTable = new FTable<BidderBasicInfo>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("投标人名称", BidderBasicInfo::getCompanyName);
+						new ContentColumn("注册地址", BidderBasicInfo::getRegisterLocation);
+						new ContentColumn("联系人", BidderBasicInfo::getLinkMan);
+						new ContentColumn("组织结构", BidderBasicInfo::getOrgStructure);
+						new ContentColumn("法人姓名", BidderBasicInfo::getLegalRepresentativeName);
+						new ContentColumn("技术负责人姓名", BidderBasicInfo::getTechnicalDirectorName);
+						new ContentColumn("成立时间", BidderBasicInfo::getSetupTime);
+						new ContentColumn("企业资质等级", BidderBasicInfo::getCompanyQualificationLevel);
+						new ContentColumn("注册资金(万元)", BidderBasicInfo::getRegisteredCapital);
+						new ContentColumn("营业执照号", BidderBasicInfo::getBussinessLicense);
+						new ContentColumn("开户银行", BidderBasicInfo::getDepositBank);
+						new ContentColumn("银行账号", BidderBasicInfo::getBankAccount);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCompanyName() + "基本情况表"));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<BidderBasicInfo> fform = new FForm<>(p, 2);
+					fform.init(t -> {
+						t.add("投标人名称", BidderBasicInfo::getCompanyName); t.add("注册地址", BidderBasicInfo::getRegisterLocation);
+						t.add("联系人", BidderBasicInfo::getLinkMan); t.add("电话", BidderBasicInfo::getLinkManPhone);
+						t.add("邮政编码", BidderBasicInfo::getPostalCode); t.add("传真", BidderBasicInfo::getLinkManFax);
+						t.add("网址", BidderBasicInfo::getLinkManWebsite); t.add("组织结构", BidderBasicInfo::getOrgStructure);
+						t.add("法人姓名", BidderBasicInfo::getLegalRepresentativeName); t.add("技术负责人姓名", BidderBasicInfo::getTechnicalDirectorName);
+						t.add("法人技术职称", BidderBasicInfo::getLegalRepresentativeTitle); t.add("技术负责人职称", BidderBasicInfo::getTechnicalDirectorTitle);
+						t.add("法人电话", BidderBasicInfo::getLegalRepresentativePhone); t.add("技术负责人电话", BidderBasicInfo::getTechnicalDirectorPhone);
+						t.add("成立时间", BidderBasicInfo::getSetupTime); t.add("企业资质等级", BidderBasicInfo::getCompanyQualificationLevel);
+						t.add("注册资金(万元)", BidderBasicInfo::getRegisteredCapital); t.add("营业执照号", BidderBasicInfo::getBussinessLicense);
+						t.add("开户银行", BidderBasicInfo::getDepositBank); t.add("银行账号", BidderBasicInfo::getBankAccount);
+						t.add("高级职称人数", BidderBasicInfo::getSeniorProfessionalPostNumber); t.add("项目经理人数", BidderBasicInfo::getPurchaserNumber);
+						t.add("中级职称人数", BidderBasicInfo::getMediumProfessionalPostNumber); t.add("技工人数", BidderBasicInfo::getArtisanNumber);
+						t.add("初级职称人数", BidderBasicInfo::getPrimaryProfessionalPostNumber); t.add("员工总人数", BidderBasicInfo::getEmployeeNumber);
+						t.addLong("企业性质", BidderBasicInfo::getEnterpriseNature);
+						t.addLong("经营范围", BidderBasicInfo::getBusinessScope);
+						t.addLong("股权结构", BidderBasicInfo::getEquityStructure);
+						t.addBig("拟投入项目设备", BidderBasicInfo::getPreInputDevice);
+						t.addBig("关联企业情况", BidderBasicInfo::getRelatedCompanyInfo);
+						t.addBig("服务能力", BidderBasicInfo::getServiceAbility);
+						t.addBig("备注", BidderBasicInfo::getMemo);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> bidderInfoService.getBidderBasicInfoList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 营业执照
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initBusinessLicense(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final BusinessLicenseService businessLicenseService = new BusinessLicenseService();
+			
+			private FTable<BusinessLicense> fTable;
+			
+			protected void init() {
+				fTable = new FTable<BusinessLicense>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("统一社会信用代码", BusinessLicense::getRegisterNumber);
+						new ContentColumn("公司名称", BusinessLicense::getCompanyName);
+						new ContentColumn("住所", BusinessLicense::getCompanyAddress);
+						new ContentColumn("法定代表人", BusinessLicense::getLegalRepresentative);
+						new ContentColumn("注册资本(万元)", BusinessLicense::getRegisterCapital);
+						new ContentColumn("成立日期", BusinessLicense::getEstablishDate);
+						new ContentColumn("营业期限", d -> d.getBusnissTermStartDate() + "至" + d.getBusnissTermEndtDate());
+						new ContentColumn("登记机关", BusinessLicense::getRegisterInstitution);
+						new ContentColumn("企业类型", BusinessLicense::getCompanyType);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCompanyName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<BusinessLicense> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("统一社会信用代码", BusinessLicense::getRegisterNumber);
+						t.add("公司名称", BusinessLicense::getCompanyName);
+						t.add("住所", BusinessLicense::getCompanyAddress);
+						t.add("法定代表人", BusinessLicense::getLegalRepresentative);
+						t.add("注册资本(万元)", BusinessLicense::getRegisterCapital);
+						t.add("成立日期", BusinessLicense::getEstablishDate);
+						t.add("营业期限", d -> d.getBusnissTermStartDate() + "至" + d.getBusnissTermEndtDate());
+						t.add("登记机关", BusinessLicense::getRegisterInstitution);
+						t.add("企业类型", BusinessLicense::getCompanyType);
+						t.addBig("经营范围", BusinessLicense::getBusinessScope);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> businessLicenseService.getBusinessLicenseList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 施工业绩
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initConstruction(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final PerformanceService performanceService = new PerformanceService();
+			
+			private FTable<Performance> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Performance>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("企业名称", Performance::getSupplierName);
+						new ContentColumn("业绩状态", PerformanceStatus.keyToValueFun.compose(Performance::getStatus));
+						new ContentColumn("项目名称", Performance::getProjectName);
+						new ContentColumn("项目所在地", Performance::getProjectAddress);
+						new ContentColumn("发包人名称", Performance::getBuyerName);
+						new ContentColumn("合同金额(万元)", Performance::getSingningTotal);
+						new ContentColumn("开工日期", Performance::getStartTime);
+						new ContentColumn("竣工/计划竣工日期", Performance::getEndTime);
+						new ContentColumn("项目经理", Performance::getProjectManager);
+						new ContentColumn("技术负责人", Performance::getTechnicalDirector);
+						new ContentColumn("总监理工程师", Performance::getChiefSupervisionEngineer);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getProjectName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Performance> fform = new FForm<>(p, 2);
+					fform.init(t -> {
+						t.add("企业名称", Performance::getSupplierName); t.add("业绩状态", PerformanceStatus.keyToValueFun.compose(Performance::getStatus));
+						t.add("项目名称", Performance::getProjectName); t.add("项目所在地", Performance::getProjectAddress);
+						t.add("发包人名称", Performance::getBuyerName); t.add("发包人地址", Performance::getBuyerAddress);
+						t.add("发包人电话", Performance::getBuyerPhoneNumber); t.add("合同金额(万元)", Performance::getSingningTotal);
+						t.add("开工日期", Performance::getStartTime); t.add("竣工/计划竣工日期", Performance::getEndTime);
+						t.addLong("承担的工作", Performance::getWorkUndertaken);
+						t.addLong("项目质量", Performance::getProjectQuantity);
+						t.add("项目经理", Performance::getProjectManager); t.add("技术负责人", Performance::getTechnicalDirector);
+						t.add("总监理工程师", Performance::getChiefSupervisionEngineer); t.add("总监理工程师电话", Performance::getCsePhoneNumber);
+						t.addBig("项目描述", Performance::getProjectDesc);
+						t.addLong("备注", Performance::getMemo);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> performanceService.getPerformanceList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 财务报告
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initFinancialReport(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final FinanceService financeService = new FinanceService();
+			
+			private FTable<Finance> fTable;
+			
+			protected void init() {
+				
+				final Function<BigDecimal, String> toString = t -> Optional.ofNullable(t).map(NumberFormatUtils::format).orElse(null);
+				
+				fTable = new FTable<Finance>(tableParent, SWT.NONE) {
+					
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("企业名称", Finance::getCompanyName);
+						new ContentColumn("财务报告年度", Finance::getAnnual);
+						new ContentColumn("资产总额(万元)", toString.compose(Finance::getTotal));
+						new ContentColumn("负债总额(万元)", toString.compose(Finance::getTotalliabilities));
+						new ContentColumn("资产负债率(%)", toString.compose(Finance::getLiabilitiesRate));
+						new ContentColumn("主营业务收入(万元)", toString.compose(Finance::getPrimeOperatingRevenue));
+						new ContentColumn("净利润(万元)", toString.compose(Finance::getRetainedProfits));
+						new ContentColumn("净利率(%)", toString.compose(Finance::getProfitRatio));
+					}
+				};
+				
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getAnnual() + "年度财务报告"));
+				
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Finance> fform = new FForm<>(p, 2);
+					fform.init(t -> {
+						t.add("企业名称", Finance::getCompanyName);
+						t.add("财务报告年度", Finance::getAnnual);
+						t.add("资产总额(万元)", toString.compose(Finance::getTotal));
+						t.add("主营业务收入(万元)", toString.compose(Finance::getPrimeOperatingRevenue));
+						t.add("负债总额(万元)", toString.compose(Finance::getTotalliabilities));
+						t.add("净利润(万元)", toString.compose(Finance::getRetainedProfits));
+						t.add("资产负债率(%)", toString.compose(Finance::getLiabilitiesRate));
+						t.add("净利率(%)", toString.compose(Finance::getProfitRatio));
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> financeService.getFinanceList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 采购业绩
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initProcurement(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final PerformanceService performanceService = new PerformanceService();
+			
+			private FTable<Performance> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Performance>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("企业名称", Performance::getSupplierName);
+						new ContentColumn("业绩状态", PerformanceStatus.keyToValueFun.compose(Performance::getStatus));
+						new ContentColumn("设备名称", Performance::getDeviceName);
+						new ContentColumn("规格和型号", Performance::getDevicetypeSpecification);
+						new ContentColumn("项目名称", Performance::getProjectName);
+						new ContentColumn("总容量", Performance::getTotalCapacity);
+						new ContentColumn("台数", Performance::getNumber);
+						new ContentColumn("买方名称", Performance::getBuyerName);
+						new ContentColumn("联系人", Performance::getBuyerLinkman);
+						new ContentColumn("联系方式", Performance::getBuyerPhoneNumber);
+						new ContentColumn("合同时间", Performance::getContractTime);
+						new ContentColumn("签约合同价(万元)", Performance::getSingningTotal);
+						new ContentColumn("投运/计划投运日期", Performance::getCommissioningTime);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getSupplierName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Performance> fform = new FForm<>(p, 2);
+					fform.init(t -> {
+						t.add("企业名称", Performance::getSupplierName); t.add("业绩状态", PerformanceStatus.keyToValueFun.compose(Performance::getStatus));
+						t.add("设备名称", Performance::getDeviceName); t.add("规格和型号", Performance::getDevicetypeSpecification);
+						t.add("项目名称", Performance::getProjectName); t.add("总容量", Performance::getTotalCapacity);
+						t.add("台数", Performance::getNumber); t.add("买方名称", Performance::getBuyerName);
+						t.add("联系人", Performance::getBuyerLinkman); t.add("联系方式", Performance::getBuyerPhoneNumber);
+						t.add("合同时间", Performance::getContractTime); t.add("签约合同价(万元)", Performance::getSingningTotal);
+						t.add("投运/计划投运日期", Performance::getCommissioningTime); t.addNull();
+						t.addBig("备注", Performance::getMemo);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> performanceService.getPerformanceList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 生产业绩
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initProduction(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final PerformanceService performanceService = new PerformanceService();
+			
+			private FTable<Performance> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Performance>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("企业名称", Performance::getSupplierName);
+						new ContentColumn("业绩状态", PerformanceStatus.keyToValueFun.compose(Performance::getStatus));
+						new ContentColumn("项目名称", Performance::getProjectName);
+						new ContentColumn("项目所在地", Performance::getProjectAddress);
+						new ContentColumn("发包人名称", Performance::getBuyerName);
+						new ContentColumn("签约价格(万元)", Performance::getSingningTotal);
+						new ContentColumn("开工日期", Performance::getStartTime);
+						new ContentColumn("竣工/计划竣工日期", Performance::getEndTime);
+						new ContentColumn("项目经理", Performance::getProjectManager);
+						new ContentColumn("技术负责人", Performance::getTechnicalDirector);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getProjectName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Performance> fform = new FForm<>(p, 2);
+					fform.init(t -> {
+						t.add("企业名称", Performance::getSupplierName); t.add("业绩状态", PerformanceStatus.keyToValueFun.compose(Performance::getStatus));
+						t.add("项目名称", Performance::getProjectName); t.add("项目所在地", Performance::getProjectAddress);
+						t.add("发包人名称", Performance::getBuyerName); t.add("发包人地址", Performance::getBuyerAddress);
+						t.add("发包人电话", Performance::getBuyerPhoneNumber); t.add("签约价格(万元)", Performance::getSingningTotal);
+						t.add("开工日期", Performance::getStartTime); t.add("竣工/计划竣工日期", Performance::getEndTime);
+						t.addLong("承担的工作", Performance::getWorkUndertaken);
+						t.addLong("项目质量", Performance::getProjectQuantity);
+						t.add("项目经理", Performance::getProjectManager); t.add("技术负责人", Performance::getTechnicalDirector);
+						t.addBig("项目描述", Performance::getProjectDesc);
+						t.addLong("备注", Performance::getMemo);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> performanceService.getPerformanceList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 项目负责人
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initProjectLeader(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final ProjectLeaderService projectLeaderService = new ProjectLeaderService();
+			private final CertificateService certificateService = new CertificateService();
+			private final WorkExperienceService workExperienceService = new WorkExperienceService();
+			
+			private FTable<ProjectLeader> fTable;
+			
+			protected void init() {
+				fTable = new FTable<ProjectLeader>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("姓名", ProjectLeader::getLeaderName);
+						new ContentColumn("身份证号", ProjectLeader::getIdnumber);
+						new ContentColumn("年龄", ProjectLeader::getAge);
+						new ContentColumn("职务", ProjectLeader::getJobTitle);
+						new ContentColumn("职称", ProjectLeader::getProfessionalTitle);
+						new ContentColumn("学历", ProjectLeader::getEducation);
+						new ContentColumn("毕业学校", ProjectLeader::getGraduateSchool);
+						new ContentColumn("专业", ProjectLeader::getGraduateMajor);
+						new ContentColumn("工作经验(年)", ProjectLeader::getWorkExperience);
+						new ContentColumn("公司名称", ProjectLeader::getCompanyName);
+						new ContentColumn("本专业工作经验(年)", ProjectLeader::getCurrentMajorExperience);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCompanyName() + "基本情况表"));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<ProjectLeader> fform = new FForm<>(p, 2);
+					fform.init(t -> {
+						t.add("姓名", ProjectLeader::getLeaderName); t.add("身份证号", ProjectLeader::getIdnumber);
+						t.add("年龄", ProjectLeader::getAge); t.add("职务", ProjectLeader::getJobTitle);
+						t.add("职称", ProjectLeader::getProfessionalTitle); t.add("学历", ProjectLeader::getEducation);
+						t.add("毕业学校", ProjectLeader::getGraduateSchool); t.add("专业", ProjectLeader::getGraduateMajor);
+						t.add("工作经验(年)", ProjectLeader::getWorkExperience); t.add("公司名称", ProjectLeader::getCompanyName);
+						t.add("本专业工作经验(年)", ProjectLeader::getCurrentMajorExperience); t.addNull();
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addSubpage("证书列表", p -> {
+					FTable<Certificate> table = new FTable<Certificate>(p, SWT.NONE) {
+
+						private final AttachmentFileService attachmentFileService = new AttachmentFileService();
+						
+						protected void init() {
+							new IndexColumn("序号");
+							new ContentColumn("证书编号", Certificate::getCertificateNo);
+							new ContentColumn("证书名称", Certificate::getCertificateName);
+							new ContentColumn("证书等级", Certificate::getCertificateLevel);
+							new LinkContentColumn("查看", "查看", ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/btn/blue/view.png"), t -> {
+								String bidFilePath = Constants.getBidFilePath(t.getTenderId(), supplierId.get());
+								RxSwt.run(() -> attachmentFileService.getAttachmentFileList(t.getId())).checkWidget(this).exe(attachmentFileList -> {
+									Optional<File> fileOptional = Optional.ofNullable(attachmentFileList).map(List::stream).flatMap(Stream::findFirst).map(AttachmentFile::getFileUrl).map(bidFilePath::concat).map(File::new).filter(File::exists);
+									if (fileOptional.isPresent()) {
+										RuntimeUtils.openFIle(fileOptional.get());
+									} else {
+										MessageDialog.openShortMessage("文件不存在!");
+									}
+								});
+							});
+						}
+					};
+					fTable.addSelectionListener(t -> RxSwt.run(() -> certificateService.getCertificateList(t.getId())).checkWidget(table).exe(table::refresh));
+					return table;
+				});
+				modelDataDetail.addSubpage("个人经历", p -> {
+					FTable<WorkExperience> table = new FTable<WorkExperience>(p, SWT.NONE) {
+						protected void init() {
+							new IndexColumn("序号");
+							new ContentColumn("投运时间/竣工时间", WorkExperience::getTime);
+							new ContentColumn("项目名称", WorkExperience::getProjectName);
+							new ContentColumn("容量(MW)", WorkExperience::getCapacity);
+							new ContentColumn("担任职务", WorkExperience::getJobTitle);
+							new ContentColumn("承担的工作(简述)", WorkExperience::getBearWork);
+							new ContentColumn("发包人及联系电话", WorkExperience::getContractInfo);
+						}
+					};
+					fTable.addSelectionListener(t -> RxSwt.run(() -> workExperienceService.getWorkExperienceList(t.getId())).checkWidget(table).exe(table::refresh));
+					return table;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> projectLeaderService.getProjectLeaderList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 企业资质
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("证书编号", Qualification::getCertificateNumber);
+						new ContentColumn("证书等级", Qualification::getAwardLevel);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("发证单位", Qualification::getIssueAuthority);
+						new ContentColumn("发证日期", Qualification::getIssueDate);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("证书编号", Qualification::getCertificateNumber);
+						t.add("证书等级", Qualification::getAwardLevel);
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发证单位", Qualification::getIssueAuthority);
+						t.add("发证日期", Qualification::getIssueDate);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 所建工程国家级奖励
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_GJ_GCJX(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("发奖单位", Qualification::getIssueAuthority);
+						new ContentColumn("获奖工程名称", Qualification::getAwardProjectName);
+						new ContentColumn("获奖年份", Qualification::getIssueDate);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发奖单位", Qualification::getIssueAuthority);
+						t.add("获奖工程名称", Qualification::getAwardProjectName);
+						t.add("获奖年份", Qualification::getIssueDate);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 国家级奖项
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_GJ_JX(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("发奖单位", Qualification::getIssueAuthority);
+						new ContentColumn("获奖年份", Qualification::getIssueDate);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发奖单位", Qualification::getIssueAuthority);
+						t.add("获奖年份", Qualification::getIssueDate);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 环境管理体系认证证书
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_HBTX(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("证书编号", Qualification::getCertificateNumber);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("认证单位", Qualification::getIssueAuthority);
+						new ContentColumn("发证日期", Qualification::getIssueDate);
+						new ContentColumn("有效期至", Qualification::getPeriodValidity);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("证书编号", Qualification::getCertificateNumber);
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发证单位", Qualification::getIssueAuthority);
+						t.add("发证日期", Qualification::getIssueDate);
+						t.add("有效期至", Qualification::getPeriodValidity);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 监理资质
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_JLZZ(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("证书编号", Qualification::getCertificateNumber);
+						new ContentColumn("证书等级", Qualification::getAwardLevel);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("发证单位", Qualification::getIssueAuthority);
+						new ContentColumn("发证日期", Qualification::getIssueDate);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("证书编号", Qualification::getCertificateNumber);
+						t.add("证书等级", Qualification::getAwardLevel);
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发证单位", Qualification::getIssueAuthority);
+						t.add("发证日期", Qualification::getIssueDate);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 全国工业生产许可证
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_QGGYSCXK(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("证书编号", Qualification::getCertificateNumber);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("认证单位", Qualification::getIssueAuthority);
+						new ContentColumn("发证日期", Qualification::getIssueDate);
+						new ContentColumn("有效期至", Qualification::getPeriodValidity);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("证书编号", Qualification::getCertificateNumber);
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("认证单位", Qualification::getIssueAuthority);
+						t.add("发证日期", Qualification::getIssueDate);
+						t.add("有效期至", Qualification::getPeriodValidity);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 施工资质
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_SGZZ(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("证书编号", Qualification::getCertificateNumber);
+						new ContentColumn("证书等级", Qualification::getAwardLevel);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("发证单位", Qualification::getIssueAuthority);
+						new ContentColumn("发证日期", Qualification::getIssueDate);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("证书编号", Qualification::getCertificateNumber);
+						t.add("证书等级", Qualification::getAwardLevel);
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发证单位", Qualification::getIssueAuthority);
+						t.add("发证日期", Qualification::getIssueDate);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 设计资质
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_SJZZ(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("证书编号", Qualification::getCertificateNumber);
+						new ContentColumn("证书等级", Qualification::getAwardLevel);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("发证单位", Qualification::getIssueAuthority);
+						new ContentColumn("发证日期", Qualification::getIssueDate);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("证书编号", Qualification::getCertificateNumber);
+						t.add("证书等级", Qualification::getAwardLevel);
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发证单位", Qualification::getIssueAuthority);
+						t.add("发证日期", Qualification::getIssueDate);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 安全生产许可证
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_SCXK(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("证书编号", Qualification::getCertificateNumber);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("认证单位", Qualification::getIssueAuthority);
+						new ContentColumn("发证日期", Qualification::getIssueDate);
+						new ContentColumn("有效期至", Qualification::getPeriodValidity);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("证书编号", Qualification::getCertificateNumber);
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("认证单位", Qualification::getIssueAuthority);
+						t.add("发证日期", Qualification::getIssueDate);
+						t.add("有效期至", Qualification::getPeriodValidity);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 所建工程省部级级奖励
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_SJ_GCJX(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("发奖单位", Qualification::getIssueAuthority);
+						new ContentColumn("获奖工程名称", Qualification::getAwardProjectName);
+						new ContentColumn("获奖年份", Qualification::getIssueDate);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发奖单位", Qualification::getIssueAuthority);
+						t.add("获奖工程名称", Qualification::getAwardProjectName);
+						t.add("获奖年份", Qualification::getIssueDate);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 省部级奖励
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_SJ_JX(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("发奖单位", Qualification::getIssueAuthority);
+						new ContentColumn("获奖年份", Qualification::getIssueDate);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发奖单位", Qualification::getIssueAuthority);
+						t.add("获奖年份", Qualification::getIssueDate);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 检验报告
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_SurveyReport(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("证书编号", Qualification::getCertificateNumber);
+						new ContentColumn("证书等级", Qualification::getAwardLevel);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("发证单位", Qualification::getIssueAuthority);
+						new ContentColumn("发证日期", Qualification::getIssueDate);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("证书编号", Qualification::getCertificateNumber);
+						t.add("证书等级", Qualification::getAwardLevel);
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发证单位", Qualification::getIssueAuthority);
+						t.add("发证日期", Qualification::getIssueDate);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 质量体系认证证书
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_ZLTX(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("证书编号", Qualification::getCertificateNumber);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("认证单位", Qualification::getIssueAuthority);
+						new ContentColumn("发证日期", Qualification::getIssueDate);
+						new ContentColumn("有效期至", Qualification::getPeriodValidity);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("证书编号", Qualification::getCertificateNumber);
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发证单位", Qualification::getIssueAuthority);
+						t.add("发证日期", Qualification::getIssueDate);
+						t.add("有效期至", Qualification::getPeriodValidity);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 资信等级
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_ZXDJ(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("证书编号", Qualification::getCertificateNumber);
+						new ContentColumn("证书等级", Qualification::getAwardLevel);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("发证单位", Qualification::getIssueAuthority);
+						new ContentColumn("发证日期", Qualification::getIssueDate);
+						new ContentColumn("有效期至", Qualification::getPeriodValidity);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("证书编号", Qualification::getCertificateNumber);
+						t.add("证书等级", Qualification::getAwardLevel);
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发证单位", Qualification::getIssueAuthority);
+						t.add("发证日期", Qualification::getIssueDate);
+						t.add("有效期至", Qualification::getPeriodValidity);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 职业健康安全管理体系
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initQualification_ZYJK(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final QualificationService qualificationService = new QualificationService();
+			
+			private FTable<Qualification> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Qualification>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("证书名称", Qualification::getCertificateName);
+						new ContentColumn("证书编号", Qualification::getCertificateNumber);
+						new ContentColumn("企业名称", Qualification::getCompanyName);
+						new ContentColumn("发证单位", Qualification::getIssueAuthority);
+						new ContentColumn("发证日期", Qualification::getIssueDate);
+						new ContentColumn("有效期至", Qualification::getPeriodValidity);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getCertificateName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Qualification> fform = new FForm<>(p, 1);
+					fform.init(t -> {
+						t.add("证书编号", Qualification::getCertificateNumber);
+						t.add("企业名称", Qualification::getCompanyName);
+						t.add("发证单位", Qualification::getIssueAuthority);
+						t.add("发证日期", Qualification::getIssueDate);
+						t.add("有效期至", Qualification::getPeriodValidity);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> qualificationService.getQualificationList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 监理业绩
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initSupervision(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final PerformanceService performanceService = new PerformanceService();
+			
+			private FTable<Performance> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Performance>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("企业名称", Performance::getSupplierName);
+						new ContentColumn("业绩状态", PerformanceStatus.keyToValueFun.compose(Performance::getStatus));
+						new ContentColumn("项目名称", Performance::getProjectName);
+						new ContentColumn("项目所在地", Performance::getProjectAddress);
+						new ContentColumn("签约合同价(万元)", Performance::getSingningTotal);
+						new ContentColumn("委托人名称", Performance::getBuyerName);
+						new ContentColumn("委托人地址", Performance::getBuyerAddress);
+						new ContentColumn("委托人电话", Performance::getBuyerPhoneNumber);
+						new ContentColumn("总监理工程师", Performance::getChiefSupervisionEngineer);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getProjectName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Performance> fform = new FForm<>(p, 2);
+					fform.init(t -> {
+						t.add("企业名称", Performance::getSupplierName); t.add("业绩状态", PerformanceStatus.keyToValueFun.compose(Performance::getStatus));
+						t.add("项目名称", Performance::getProjectName); t.add("项目所在地", Performance::getProjectAddress);
+						t.add("委托人名称", Performance::getBuyerName); t.add("委托人地址", Performance::getBuyerAddress);
+						t.add("签约合同价(万元)", Performance::getSingningTotal); t.add("委托人电话", Performance::getBuyerPhoneNumber);
+						t.add("总监理工程师", Performance::getChiefSupervisionEngineer); t.addNull();
+						t.addLong("监理服务期限", Performance::getServiceDesc);
+						t.addLong("监理内容", Performance::getSupervisionCcontent);
+						t.addBig("项目描述", Performance::getProjectDesc);
+						t.addBig("备注", Performance::getMemo);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> performanceService.getPerformanceList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+	/**
+	 * @Description: 勘察设计
+	 * @author chenxw
+	 * @param tableParent
+	 * @param modelDataDetail
+	 * @return 
+	 */
+	private static IModelData initSurveyDesign(Composite tableParent, IModelDataDetail modelDataDetail) {
+		return new IModelData() {
+			
+			private final PerformanceService performanceService = new PerformanceService();
+			
+			private FTable<Performance> fTable;
+			
+			protected void init() {
+				fTable = new FTable<Performance>(tableParent, SWT.NONE) {
+					protected void init() {
+						new IndexColumn("序号");
+						new ContentColumn("企业名称", Performance::getSupplierName);
+						new ContentColumn("业绩状态", PerformanceStatus.keyToValueFun.compose(Performance::getStatus));
+						new ContentColumn("项目名称", Performance::getProjectName);
+						new ContentColumn("项目所在地", Performance::getProjectAddress);
+						new ContentColumn("发包人名称", Performance::getBuyerName);
+						new ContentColumn("合同价格(万元)", Performance::getSingningTotal);
+						new ContentColumn("勘察设计服务期限", Performance::getServiceDesc);
+						new ContentColumn("勘察设计内容", Performance::getDesignRange);
+						new ContentColumn("负责人/总工程师", Performance::getChiefSupervisionEngineer);
+					}
+				};
+				fTable.addSelectionListener(t -> modelDataDetail.refreshTitle(t.getProjectName()));
+				modelDataDetail.addBasicSubpage(p -> {
+					FForm<Performance> fform = new FForm<>(p, 2);
+					fform.init(t -> {
+						t.add("企业名称", Performance::getSupplierName); t.add("业绩状态", PerformanceStatus.keyToValueFun.compose(Performance::getStatus));
+						t.add("项目名称", Performance::getProjectName); t.add("项目所在地", Performance::getProjectAddress);
+						t.add("发包人名称", Performance::getBuyerName); t.add("发包人地址", Performance::getBuyerAddress);
+						t.add("发包人电话", Performance::getBuyerPhoneNumber); t.add("合同价格(万元)", Performance::getSingningTotal);
+						t.add("勘察设计服务期限", Performance::getServiceDesc); t.add("勘察设计内容", Performance::getDesignRange);
+						t.add("负责人/总工程师", Performance::getChiefSupervisionEngineer); t.addNull();
+						t.addBig("项目描述", Performance::getProjectDesc);
+						t.addBig("备注", Performance::getMemo);
+					});
+					fTable.addSelectionListener(fform::refresh);
+					return fform;
+				});
+				modelDataDetail.addAttachmentSubpage(c -> fTable.addSelectionListener(t -> c.accept(supplierId.get(), t.getId())));
+			}
+			
+			public void refresh(ModelData modelData) {
+				supplierId.set(modelData.getSupplierId());
+				RxSwt.run(() -> performanceService.getPerformanceList(modelData.getTenderId(), modelData.getId())).checkWidget(fTable).exe(l -> {
+					count.set(l.size());
+					fTable.refresh(l);
+				});
+			}
+		};
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidContentFactory.java b/com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidContentFactory.java
new file mode 100644
index 00000000..68e92d02
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidContentFactory.java
@@ -0,0 +1,73 @@
+package com.gx.obe.struct.handler;
+
+import java.util.List;
+
+import com.gx.obe.business.entity.SupplierEvaluationFactor;
+import com.gx.obe.components.core.enumeration.EvaluationFactorEnum;
+import com.gx.obe.struct.inters.IFactorClearBidContent;
+import com.gx.obe.web.entity.Supplier;
+import com.gx.obe.web.entity.evaluation.EvaluationFactor;
+import com.gx.obe.web.service.SupplierEvaluationFactorService;
+import com.gx.obe.web.service.SupplierService;
+import com.gx.obe.web.service.evaluation.EvaluationFactorService;
+
+public class FactorClearBidContentFactory {
+	
+	private SupplierService supplierService = new SupplierService();
+	private EvaluationFactorService evaluationFactorService = new EvaluationFactorService();
+	private SupplierEvaluationFactorService supplierEvaluationFactorService = new SupplierEvaluationFactorService();
+	
+	private String tenderId;
+	private List<Supplier> supplierList;
+	private List<SupplierEvaluationFactor> supplierEvaluationFactorList;
+	
+	public FactorClearBidContentFactory(String tenderId) {
+		this.tenderId = tenderId;
+		this.supplierList = supplierService.getOpenBidSuccessSupplier(tenderId);
+		this.supplierEvaluationFactorList = supplierEvaluationFactorService.getEntityListByTenderId(tenderId);
+	}
+	
+	public IFactorClearBidContent create(String audit) {
+		List<EvaluationFactor> factorList = evaluationFactorService.getAllEvaluationFactorList(tenderId, audit);
+		return new IFactorClearBidContent() {
+			
+			@Override
+			public String getTableName() {
+				if (EvaluationFactorEnum.AUDIT_COMPLIANCE.equals(audit)) {
+					return "符合性指标清标表";
+				}
+				if (EvaluationFactorEnum.AUDIT_SCORE.equals(audit)) {
+					return "打分指标清标表";
+				}
+				return null;
+			}
+			
+			public String getFileName() {
+				if (EvaluationFactorEnum.AUDIT_COMPLIANCE.equals(audit)) {
+					return "指标清标意见-符合性.xlsx";
+				}
+				if (EvaluationFactorEnum.AUDIT_SCORE.equals(audit)) {
+					return "指标清标意见-打分.xlsx";
+				}
+				return null;
+			}
+			
+			public List<Supplier> getSupplierList() {
+				return supplierList;
+			}
+			
+			public List<EvaluationFactor> getFactorList() {
+				return factorList;
+			}
+			
+			public List<SupplierEvaluationFactor> getSupplierEvaluationFactorList() {
+				return supplierEvaluationFactorList;
+			}
+
+			public String getContent(SupplierEvaluationFactor supplierEvaluationFactor) {
+				return supplierEvaluationFactor.getFactorResponse();
+			}
+		};
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidContentHandler.java b/com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidContentHandler.java
new file mode 100644
index 00000000..d52074f2
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidContentHandler.java
@@ -0,0 +1,58 @@
+package com.gx.obe.struct.handler;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import com.gx.obe.business.entity.SupplierEvaluationFactor;
+import com.gx.obe.struct.inters.IFactorClearBidContent;
+import com.gx.obe.web.entity.Supplier;
+import com.gx.obe.web.entity.evaluation.EvaluationFactor;
+import com.gx.obe.web.entity.tender.TenderProjectEntity;
+import com.gx.obe.web.service.SupplierEvaluationFactorService;
+import com.gx.obe.web.vo.FactorClearBidContent;
+
+public class FactorClearBidContentHandler implements IFactorClearBidContent {
+	
+	private final SupplierEvaluationFactorService supplierEvaluationFactorService = new SupplierEvaluationFactorService();
+	
+	private final Optional<TenderProjectEntity> tenderProject;
+	
+	private final Optional<FactorClearBidContent> factorClearBidContent;
+	
+	public FactorClearBidContentHandler(TenderProjectEntity tenderProject) {
+		this.tenderProject = Optional.ofNullable(tenderProject);
+		this.factorClearBidContent = this.tenderProject.map(TenderProjectEntity::getId).map(supplierEvaluationFactorService::getScoreFactorClearBidContent);
+	}
+	
+	@Override
+	public String getTableName() {
+		return null;
+	}
+	
+	@Override
+	public String getFileName() {
+		return "商务技术评审因素汇总表.xlsx";
+	}
+	
+	@Override
+	public List<Supplier> getSupplierList() {
+		return factorClearBidContent.map(FactorClearBidContent::getSupplierList).orElseGet(ArrayList::new);
+	}
+	
+	@Override
+	public List<EvaluationFactor> getFactorList() {
+		return factorClearBidContent.map(FactorClearBidContent::getFactorList).orElseGet(ArrayList::new);
+	}
+	
+	@Override
+	public List<SupplierEvaluationFactor> getSupplierEvaluationFactorList() {
+		return factorClearBidContent.map(FactorClearBidContent::getSupplierEvaluationFactorList).orElseGet(ArrayList::new);
+	}
+
+	@Override
+	public String getContent(SupplierEvaluationFactor supplierEvaluationFactor) {
+		return supplierEvaluationFactor.getOpinion();
+	}
+	
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidContentStepHandler.java b/com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidContentStepHandler.java
new file mode 100644
index 00000000..b20dd016
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidContentStepHandler.java
@@ -0,0 +1,86 @@
+package com.gx.obe.struct.handler;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import com.gx.obe.business.entity.SupplierEvaluationFactor;
+import com.gx.obe.components.core.enumeration.EvaluationStepEnum;
+import com.gx.obe.struct.enums.EvaluationFactorTypeEnum;
+import com.gx.obe.struct.inters.IFactorClearBidContent;
+import com.gx.obe.web.entity.Supplier;
+import com.gx.obe.web.entity.evaluation.EvaluationFactor;
+import com.gx.obe.web.entity.evaluation.EvaluationStep;
+import com.gx.obe.web.service.SupplierEvaluationFactorService;
+import com.gx.obe.web.vo.FactorClearBidContent;
+
+public class FactorClearBidContentStepHandler implements IFactorClearBidContent {
+	
+	private final SupplierEvaluationFactorService supplierEvaluationFactorService = new SupplierEvaluationFactorService();
+	
+	private final Optional<EvaluationStep> evaluationStep;
+	
+	private final Optional<FactorClearBidContent> factorClearBidContent;
+	
+	public FactorClearBidContentStepHandler(EvaluationStep evaluationStep) {
+		this.evaluationStep = Optional.ofNullable(evaluationStep);
+		this.factorClearBidContent = this.evaluationStep.map(EvaluationStep::getId).map(supplierEvaluationFactorService::getFactorClearBidContent);
+	}
+	
+	@Override
+	public String getTableName() {
+		Optional<EvaluationFactorTypeEnum> evaluationFactorTypeEnum = evaluationStep.map(t -> t.getEvaluationParamByKey(EvaluationStepEnum.EVALUATION_FACTOR_TYPE)).map(EvaluationFactorTypeEnum.MAP::get);
+		if (!evaluationFactorTypeEnum.isPresent()) {
+			return null;
+		}
+		switch (evaluationFactorTypeEnum.get()) {
+			case COMPLIANCE:
+				return "符合性指标评议表";
+			case BUSINESS:
+				return "商务指标评议表";
+			case TECHNOLOGY:
+				return "技术指标评议表";
+			default:
+				return null;
+		}
+	}
+	
+	@Override
+	public String getFileName() {
+		Optional<EvaluationFactorTypeEnum> evaluationFactorTypeEnum = evaluationStep.map(t -> t.getEvaluationParamByKey(EvaluationStepEnum.EVALUATION_FACTOR_TYPE)).map(EvaluationFactorTypeEnum.MAP::get);
+		if (!evaluationFactorTypeEnum.isPresent()) {
+			return null;
+		}
+		switch (evaluationFactorTypeEnum.get()) {
+			case COMPLIANCE:
+				return "评议意见-" + "符合性" + ".xlsx";
+			case BUSINESS:
+				return "评议意见-商务" + ".xlsx";
+			case TECHNOLOGY:
+				return"评议意见-技术" + ".xlsx";
+			default:
+				return null;
+		}
+	}
+	
+	@Override
+	public List<Supplier> getSupplierList() {
+		return factorClearBidContent.map(FactorClearBidContent::getSupplierList).orElseGet(ArrayList::new);
+	}
+	
+	@Override
+	public List<EvaluationFactor> getFactorList() {
+		return factorClearBidContent.map(FactorClearBidContent::getFactorList).orElseGet(ArrayList::new);
+	}
+	
+	@Override
+	public List<SupplierEvaluationFactor> getSupplierEvaluationFactorList() {
+		return factorClearBidContent.map(FactorClearBidContent::getSupplierEvaluationFactorList).orElseGet(ArrayList::new);
+	}
+
+	@Override
+	public String getContent(SupplierEvaluationFactor supplierEvaluationFactor) {
+		return supplierEvaluationFactor.getOpinion();
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidFileHandler.java b/com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidFileHandler.java
new file mode 100644
index 00000000..e215b937
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/handler/FactorClearBidFileHandler.java
@@ -0,0 +1,84 @@
+package com.gx.obe.struct.handler;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+
+import org.eclipse.swt.core.MessageDialog;
+import org.eclipse.swt.core.utils.FileDialogUtils;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+
+import com.gx.obe.common.file.utils.FileUtils;
+import com.gx.obe.common.widget.shell.ProgressMessageDialog;
+import com.gx.obe.components.core.enumeration.EvaluationFactorEnum;
+import com.gx.obe.components.core.global.Global;
+import com.gx.obe.util.utils.RuntimeUtils;
+import com.gx.obe.util.utils.StringUtils;
+import com.gx.obe.web.entity.tender.TenderProjectEntity;
+
+public class FactorClearBidFileHandler {
+	
+	private Shell parentShell;
+	private TenderProjectEntity tenderProject;
+	
+	public FactorClearBidFileHandler(Shell parentShell, TenderProjectEntity tenderProject) {
+		this.parentShell = parentShell;
+		this.tenderProject = tenderProject;
+	}
+	
+	public void export() {
+		String directorySavePath = FileDialogUtils.getDirectorySavePath("请选择导出目录", "[" + tenderProject.getTenderNo() + "]" + tenderProject.getTenderName());
+		if (StringUtils.isEmpty(directorySavePath)) {
+			return;
+		}
+		
+		String saveDir = directorySavePath + "[" + FileUtils.filterFileName(tenderProject.getTenderNo()) + "]" + "指标清标文件";
+		
+		ProgressMessageDialog messageDialog = new ProgressMessageDialog(parentShell, false, -1, null);
+		messageDialog.setTitle("导出指标清标文件");
+		
+		BiConsumer<String, Integer> message = (msg, flag) -> Display.getDefault().syncExec(() -> messageDialog.message(msg, flag));
+		Consumer<Boolean> finish = t -> Display.getDefault().syncExec(() -> messageDialog.finish(t));
+		
+		new Thread(() -> {
+			message.accept("开始导出指标清标文件!", 0);
+			
+			try {
+				Map<String, Object> scoreDateMap = new HashMap<>();
+				scoreDateMap.put("factorClearBidContent", new FactorClearBidContentFactory(tenderProject.getId()).create(EvaluationFactorEnum.AUDIT_SCORE));
+				Global.EXCEL_REPORT.generate(tenderProject, "FactorClearBidContent.xlsx", saveDir, scoreDateMap).waitOrGet();
+			} catch (Exception e1) {
+				message.accept("打分清标意见表生成失败!", -1);
+			}
+//			try {
+//				Global.EXCEL_REPORT.generate(tenderProject, "ProjectManagerPerformanceDataSet.xlsx", saveDir, null).waitOrGet();
+//			} catch (Exception e1) {
+//				message.accept("项目经理业绩表生成失败!", -1);
+//			}
+//			try {
+//				Global.EXCEL_REPORT.generate(tenderProject, "EnterprisePerformanceDataSet.xlsx", saveDir, null).waitOrGet();
+//			} catch (Exception e1) {
+//				message.accept("企业业绩表生成失败!", -1);
+//			}
+			
+			message.accept("完成导出指标清标文件!", 0);
+			
+			if (messageDialog.getErrorMessagesSize() != 0) {
+				finish.accept(false);
+				return;
+			}
+			
+			finish.accept(true);
+			Display.getDefault().syncExec(() -> {
+				if (MessageDialog.openConfirm(parentShell, "打开目录", "导出成功,是否打开目录!", new String[] { "打开", "关闭" })) {
+					System.out.println(saveDir);
+					RuntimeUtils.openDirector(saveDir);
+				}
+			});
+		}).start();
+		messageDialog.open();
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/handler/RelChapterTypeHandler.java b/com.gx.obe.struct/src/com/gx/obe/struct/handler/RelChapterTypeHandler.java
new file mode 100644
index 00000000..357ec701
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/handler/RelChapterTypeHandler.java
@@ -0,0 +1,42 @@
+package com.gx.obe.struct.handler;
+
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class RelChapterTypeHandler {
+	
+	private final String relChapterType;
+	
+	private final String mark;
+	
+	private final boolean hasMark;
+	
+	private static final Set<String> SET = Stream.of("00", "01", "02").collect(Collectors.toSet());
+	
+	public RelChapterTypeHandler(String relChapterType) {
+		Optional<String> mark = SET.stream().map("_"::concat).filter(relChapterType::endsWith).findAny();
+		this.hasMark = mark.isPresent();
+		if (this.hasMark) {
+			this.mark = mark.get().substring(1);
+			this.relChapterType = relChapterType.substring(0, relChapterType.length() - mark.get().length());
+		} else {
+			this.mark = null;
+			this.relChapterType = relChapterType;
+		}
+	}
+	
+	public String getRelChapterType() {
+		return relChapterType;
+	}
+	
+	public String getMark() {
+		return mark;
+	}
+	
+	public boolean isHasMark() {
+		return hasMark;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/inters/IFactorClearBidContent.java b/com.gx.obe.struct/src/com/gx/obe/struct/inters/IFactorClearBidContent.java
new file mode 100644
index 00000000..e7ca422e
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/inters/IFactorClearBidContent.java
@@ -0,0 +1,23 @@
+package com.gx.obe.struct.inters;
+
+import java.util.List;
+
+import com.gx.obe.business.entity.SupplierEvaluationFactor;
+import com.gx.obe.web.entity.Supplier;
+import com.gx.obe.web.entity.evaluation.EvaluationFactor;
+
+public interface IFactorClearBidContent {
+	
+	String getTableName();
+	
+	String getFileName();
+	
+	List<Supplier> getSupplierList();
+	
+	List<EvaluationFactor> getFactorList();
+	
+	List<SupplierEvaluationFactor> getSupplierEvaluationFactorList();
+	
+	String getContent(SupplierEvaluationFactor supplierEvaluationFactor);
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/inters/IModelData.java b/com.gx.obe.struct/src/com/gx/obe/struct/inters/IModelData.java
new file mode 100644
index 00000000..6a228063
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/inters/IModelData.java
@@ -0,0 +1,25 @@
+package com.gx.obe.struct.inters;
+
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.bind.view.Write;
+import com.gx.obe.struct.beans.ModelData;
+
+public abstract class IModelData {
+	
+	protected final Prop<String> supplierId = new Prop<>();
+	
+	protected final Prop<Integer> count = new Prop<>();
+	
+	public IModelData() {
+		init();
+	}
+	
+	protected abstract void init();
+	
+	public abstract void refresh(ModelData modelData);
+
+	public void setCountWrite(Write<Integer> countConsumer) {
+		count.bind(countConsumer);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/inters/IModelDataDetail.java b/com.gx.obe.struct/src/com/gx/obe/struct/inters/IModelDataDetail.java
new file mode 100644
index 00000000..2414b193
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/inters/IModelDataDetail.java
@@ -0,0 +1,19 @@
+package com.gx.obe.struct.inters;
+
+import java.util.function.BiConsumer;
+import java.util.function.Consumer;
+import java.util.function.Function;
+
+import org.eclipse.swt.widgets.Composite;
+
+public interface IModelDataDetail {
+	
+	void refreshTitle(String string);
+	
+	void addBasicSubpage(Function<Composite, Composite> initSub);
+	
+	void addSubpage(String name, Function<Composite, Composite> initSub);
+	
+	<T> void addAttachmentSubpage(Consumer<BiConsumer<String, String>> supplierIdAndBusinessIdConsumer);
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/listener/CellDoubleClickListener.java b/com.gx.obe.struct/src/com/gx/obe/struct/listener/CellDoubleClickListener.java
new file mode 100644
index 00000000..c67dbec5
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/listener/CellDoubleClickListener.java
@@ -0,0 +1,8 @@
+package com.gx.obe.struct.listener;
+
+import com.gx.obe.business.entity.SupplierEvaluationFactor;
+import com.gx.obe.web.entity.evaluation.EvaluationFactor;
+
+public interface CellDoubleClickListener {
+	void cellDoubleClicked(EvaluationFactor evaluationFactor, SupplierEvaluationFactor supplierEvaluationFactor);
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/listener/EditOpinionListener.java b/com.gx.obe.struct/src/com/gx/obe/struct/listener/EditOpinionListener.java
new file mode 100644
index 00000000..1db83351
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/listener/EditOpinionListener.java
@@ -0,0 +1,6 @@
+package com.gx.obe.struct.listener;
+
+public interface EditOpinionListener {
+	public void editOpinion(String opinion, String modifyReason);
+	public void cancle();
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/listener/GoBackListener.java b/com.gx.obe.struct/src/com/gx/obe/struct/listener/GoBackListener.java
new file mode 100644
index 00000000..48e45a58
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/listener/GoBackListener.java
@@ -0,0 +1,5 @@
+package com.gx.obe.struct.listener;
+
+public interface GoBackListener {
+	void goBackAction();
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/listener/ReturnListener.java b/com.gx.obe.struct/src/com/gx/obe/struct/listener/ReturnListener.java
new file mode 100644
index 00000000..ca65233c
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/listener/ReturnListener.java
@@ -0,0 +1,5 @@
+package com.gx.obe.struct.listener;
+
+public interface ReturnListener {
+	void returnAction();
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/parse/BidFileIndexTreeXmlParse.java b/com.gx.obe.struct/src/com/gx/obe/struct/parse/BidFileIndexTreeXmlParse.java
new file mode 100644
index 00000000..c9ebff21
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/parse/BidFileIndexTreeXmlParse.java
@@ -0,0 +1,69 @@
+package com.gx.obe.struct.parse;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+import org.dom4j.Document;
+import org.dom4j.Element;
+
+import com.gx.obe.util.utils.ObjectUtils;
+import com.gx.obe.util.utils.XmlUtils;
+
+public class BidFileIndexTreeXmlParse {
+	
+	private static final String BID_FILE_INDEX_TREE = "BidFileIndexTree.xml";
+	
+	private String rootNodeFileName;
+	private int pageNumInGenerateFile;
+	
+	private String bidFilePath;
+	private String relChapterType;
+	
+	public BidFileIndexTreeXmlParse(String bidFilePath, String relChapterType) {
+		this.bidFilePath = bidFilePath;
+		this.relChapterType = relChapterType;
+		init();
+	}
+	
+	private void init() {
+		if (bidFilePath == null) {
+			return;
+		}
+		Document document = XmlUtils.getXmlDocument(bidFilePath + BID_FILE_INDEX_TREE);
+		if (document == null) {
+			return;
+		}
+		recursion(streamElement(document.getRootElement()));
+	}
+	
+	private boolean recursion(Stream<Element> stream) {
+		if (stream == null) return false;
+		return stream.anyMatch(e -> {
+			if (e.elementTextTrim("chapterType").equals(relChapterType)) {
+				pageNumInGenerateFile = ObjectUtils.getIntValue(e.elementTextTrim("pageNumInGenerateFile"), 0);
+//				if (e.elementTextTrim("isRootNode").equals("true")) rootNodeFileName = e.elementTextTrim("fileName");
+				pageNumInGenerateFile = 1;
+				rootNodeFileName = e.elementTextTrim("fileName");
+				return true;
+			}
+			boolean recursion = recursion(streamElement(e));
+			if (recursion && e.elementTextTrim("isRootNode").equals("true")) rootNodeFileName = e.elementTextTrim("fileName");
+			return recursion;
+		});
+	}
+	
+	private Stream<Element> streamElement(Element element) {
+		List<?> list = element.elements("fileItem");
+		if (list == null) return null;
+		return list.stream().map(t -> (Element) t);
+	}
+	
+	public String getRootNodeFilePath() {
+		return bidFilePath + rootNodeFileName;
+	}
+	
+	public int getPageNumInGenerateFile() {
+		return pageNumInGenerateFile;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/parse/SelfEvaluatesXmlParse.java b/com.gx.obe.struct/src/com/gx/obe/struct/parse/SelfEvaluatesXmlParse.java
new file mode 100644
index 00000000..4e7c424f
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/parse/SelfEvaluatesXmlParse.java
@@ -0,0 +1,138 @@
+package com.gx.obe.struct.parse;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.dom4j.Element;
+
+import com.gx.obe.business.entity.SupplierEvaluationFactor;
+import com.gx.obe.evaluation.struct.enumeration.StructBusinessTypeEnum;
+import com.gx.obe.http.json.JsonUtil;
+import com.gx.obe.struct.beans.ParamValueDO;
+import com.gx.obe.struct.beans.SelfEvalParamsDO;
+import com.gx.obe.struct.value_list.CreditGrade;
+import com.gx.obe.struct.value_list.Finance;
+import com.gx.obe.struct.value_list.ParamValues;
+import com.gx.obe.struct.value_list.Performance;
+import com.gx.obe.util.element.ElementClass;
+import com.gx.obe.util.utils.CollectionUtils;
+import com.gx.obe.web.service.SupplierEvaluationFactorService;
+
+/**
+ * @Description: SelfEvaluates.xml文件解析
+ * @author chenxw
+ */
+public class SelfEvaluatesXmlParse {
+	
+	private final SupplierEvaluationFactorService supplierEvaluationFactorService = new SupplierEvaluationFactorService();
+	
+	private final String tenderId;
+	/**
+	 * 
+	 * 
+	 */
+	private final Map<String, Map<String, SupplierEvaluationFactor>> mapByFactorCodeBySupplierId;
+	
+	/**
+	 * @author chenxw
+	 * @param tenderId
+	 */
+	public SelfEvaluatesXmlParse(String tenderId) {
+		this.tenderId = tenderId;
+		this.mapByFactorCodeBySupplierId = initMapByFactorCodeBySupplierId();
+	}
+	
+	/**
+	 * @Description: 初始化
+	 * @author chenxw
+	 * @return
+	 */
+	private Map<String, Map<String, SupplierEvaluationFactor>> initMapByFactorCodeBySupplierId() {
+		List<SupplierEvaluationFactor> supplierEvaluationFactorList = supplierEvaluationFactorService.getEntityListByTenderId(tenderId);
+		if (CollectionUtils.isNull(supplierEvaluationFactorList)) return new HashMap<>();
+		return supplierEvaluationFactorList.stream().collect(Collectors.groupingBy(SupplierEvaluationFactor::getSupplierId, Collectors.toMap(SupplierEvaluationFactor::getFactorCode, t -> t, (a, b) -> a)));
+	}
+	
+	/**
+	 * @Description: 解析
+	 * @author chenxw
+	 * @param supplierId
+	 * @param element
+	 */
+	public void parse(String supplierId, Element element) {
+		Map<String, SupplierEvaluationFactor> mapByFactorCode = mapByFactorCodeBySupplierId.computeIfAbsent(supplierId, $ -> new HashMap<>());
+		List<?> elements = element.elements();
+		elements.stream().map(t -> (Element) t).forEach(t -> {
+			SupplierEvaluationFactor supplierEvaluationFactor = mapByFactorCode.computeIfAbsent(t.elementTextTrim("evalFactorId"), evalFactorCode -> {
+				SupplierEvaluationFactor factor = new SupplierEvaluationFactor();
+				factor.setTenderId(tenderId);
+				factor.setSupplierId(supplierId);
+				factor.setFactorCode(evalFactorCode);
+				getSelfItemData(factor, t);
+				return factor;
+			});
+			String value = t.elementTextTrim("selfEvaluateValue");
+			supplierEvaluationFactor.setOpinion(value);
+			supplierEvaluationFactor.setFactorResponse(value);
+			
+			Element paramValueListElement = t.element("paramValueList");
+			if(null != paramValueListElement && paramValueListElement.elements().size() > 0) {
+				List<Element> paramValueElementList = paramValueListElement.elements();
+				if(null != paramValueElementList && paramValueElementList.size() > 0) {
+					SelfEvalParamsDO selfEvalParamsDO = new SelfEvalParamsDO();
+					
+					for(Element paramValueElement : paramValueElementList) {
+						ParamValueDO paramValueDO = new ParamValueDO();
+						paramValueDO.setDataCode(paramValueElement.elementTextTrim("dataCode"));
+						paramValueDO.setDataType(paramValueElement.elementTextTrim("dataType"));
+						paramValueDO.setDataValue(paramValueElement.elementTextTrim("dataValue"));
+						selfEvalParamsDO.addParamValue(paramValueDO);
+					}
+					supplierEvaluationFactor.setParamValues(selfEvalParamsDO.toJson());
+				}
+			}
+			
+		});
+	}
+	private void getSelfItemData(SupplierEvaluationFactor factor, Element t) {
+		String relChapterType = t.elementTextTrim("relChapterType");
+		Element valueList = t.element("valueList");
+		if(null != valueList) {
+			// 主营利润率
+			if(StructBusinessTypeEnum.EQ_PROFIT_RATIO.getKey().equals(relChapterType)) {
+				List<Finance> financeList= ElementClass.of(Finance.class).createList(valueList);
+				String financeListJsonStr = JsonUtil.jacksonObjectToStr(financeList);
+				factor.setFinance(financeListJsonStr);
+//				供货业绩(物资)
+			}else if(StructBusinessTypeEnum.EQ_ACHIEVEMENTS.getKey().equals(relChapterType)) {
+				List<Performance> performanceList= ElementClass.of(Performance.class).createList(valueList);
+				String performanceListJsonStr = JsonUtil.jacksonObjectToStr(performanceList);
+				factor.setPerformance(performanceListJsonStr);
+//				资信等级 EQ_Qualification_ZXDJ
+			}else if(StructBusinessTypeEnum.EQ_QUALIFICATION_ZXDJ.getKey().equals(relChapterType)) {
+				List<CreditGrade> creditGradeList= ElementClass.of(CreditGrade.class).createList(valueList);
+				String creditGradeListJsonStr = JsonUtil.jacksonObjectToStr(creditGradeList);
+				factor.setCreditGrade(creditGradeListJsonStr);
+			}else {
+				List<ParamValues> paramValuesList= ElementClass.of(ParamValues.class).createList(valueList);
+				String paramValuesListJsonStr = JsonUtil.jacksonObjectToStr(paramValuesList);
+				factor.setParamValues(paramValuesListJsonStr);
+			}
+		}
+	}
+
+	/**
+	 * @Description: 保存
+	 * @author chenxw
+	 * @return
+	 */
+	public boolean save() {
+		List<SupplierEvaluationFactor> supplierEvaluationFactorList = mapByFactorCodeBySupplierId.values().stream().map(Map::values).flatMap(Collection::stream).collect(Collectors.toList());
+		if (supplierEvaluationFactorList.isEmpty()) return true;
+		return supplierEvaluationFactorService.batchSaveOrUpdate(supplierEvaluationFactorList, new String[] { "opinion", "factorResponse", "paramValues" }) > 0;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/service/AttachmentFileService.java b/com.gx.obe.struct/src/com/gx/obe/struct/service/AttachmentFileService.java
new file mode 100644
index 00000000..1ad81b50
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/service/AttachmentFileService.java
@@ -0,0 +1,30 @@
+package com.gx.obe.struct.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gx.obe.struct.beans.AttachmentFile;
+import com.gx.obe.web.utils.ObeHttpUtils;
+
+/**
+ * @Description:
+ * @author chenxw
+ */
+public class AttachmentFileService {
+	
+	private static final String URL = "obeAttachmentFile";
+	
+	/**
+	 * @Description: 获取附件列表
+	 * @author chenxw
+	 * @param businessId
+	 * @return
+	 */
+	public List<AttachmentFile> getAttachmentFileList(String businessId) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("businessId", businessId);
+		return ObeHttpUtils.getList(URL.concat("/getAttachmentFileList"), param, AttachmentFile.class);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/service/BidderInfoService.java b/com.gx.obe.struct/src/com/gx/obe/struct/service/BidderInfoService.java
new file mode 100644
index 00000000..bc6ad9b8
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/service/BidderInfoService.java
@@ -0,0 +1,32 @@
+package com.gx.obe.struct.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gx.obe.struct.beans.BidderBasicInfo;
+import com.gx.obe.web.utils.ObeHttpUtils;
+
+/**
+ * @Description:
+ * @author chenxw
+ */
+public class BidderInfoService {
+	
+	private static final String URL = "obeBidderBasicInfo";
+	
+	/**
+	 * @Description: 获取投标人基本情况列表
+	 * @author chenxw
+	 * @param tenderId
+	 * @param modelDataId
+	 * @return 
+	 */
+	public List<BidderBasicInfo> getBidderBasicInfoList(String tenderId, String modelDataId) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("tenderId", tenderId);
+		param.put("modelDataId", modelDataId);
+		return ObeHttpUtils.getList(URL.concat("/getBidderBasicInfoList"), param, BidderBasicInfo.class);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/service/BusinessLicenseService.java b/com.gx.obe.struct/src/com/gx/obe/struct/service/BusinessLicenseService.java
new file mode 100644
index 00000000..d3cc2035
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/service/BusinessLicenseService.java
@@ -0,0 +1,28 @@
+package com.gx.obe.struct.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gx.obe.struct.beans.BusinessLicense;
+import com.gx.obe.web.utils.ObeHttpUtils;
+
+public class BusinessLicenseService {
+	
+	private static final String URL = "obeBusinessLicense";
+	
+	/**
+	 * @Description: 获取营业执照列表
+	 * @author chenxw
+	 * @param tenderId
+	 * @param modelDataId
+	 * @return
+	 */
+	public List<BusinessLicense> getBusinessLicenseList(String tenderId, String modelDataId) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("tenderId", tenderId);
+		param.put("modelDataId", modelDataId);
+		return ObeHttpUtils.getList(URL.concat("/getBusinessLicenseList"), param, BusinessLicense.class);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/service/CertificateService.java b/com.gx.obe.struct/src/com/gx/obe/struct/service/CertificateService.java
new file mode 100644
index 00000000..cd73a6ab
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/service/CertificateService.java
@@ -0,0 +1,30 @@
+package com.gx.obe.struct.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gx.obe.struct.beans.Certificate;
+import com.gx.obe.web.utils.ObeHttpUtils;
+
+/**
+ * @Description:
+ * @author chenxw
+ */
+public class CertificateService {
+	
+	private static final String URL = "obeCertificate";
+	
+	/**
+	 * @Description: 获取证书列表
+	 * @author chenxw
+	 * @param projectLeaderId
+	 * @return 
+	 */
+	public List<Certificate> getCertificateList(String projectLeaderId) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("projectLeaderId", projectLeaderId);
+		return ObeHttpUtils.getList(URL.concat("/getCertificateList"), param, Certificate.class);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/service/EvaluationContentService.java b/com.gx.obe.struct/src/com/gx/obe/struct/service/EvaluationContentService.java
new file mode 100644
index 00000000..e7a6adea
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/service/EvaluationContentService.java
@@ -0,0 +1,76 @@
+package com.gx.obe.struct.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gx.obe.struct.beans.StructDateInfo;
+import com.gx.obe.web.entity.Result.RequestBody;
+import com.gx.obe.web.entity.evaluation.EvaluationContent;
+import com.gx.obe.web.utils.ObeHttpUtils;
+
+public class EvaluationContentService {
+	
+	private static final String URL = "obeEvaluationContent";
+	
+	/**
+	 * @Description: 获取评审内容列表
+	 * @author chenxw
+	 * @param tenderId
+	 * @return
+	 */
+	public List<EvaluationContent> getEvaluationContentList(String tenderId) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("tenderId", tenderId);
+		return ObeHttpUtils.getList(URL.concat("/getEvaluationContentList"), param, EvaluationContent.class);
+	}
+	
+	/**
+	 * @Description: 根据指标编号获取评审内容列表
+	 * @author chenxw
+	 * @param tenderId
+	 * @param factorCode
+	 * @return
+	 */
+	public List<EvaluationContent> getEvaluationContentListByFactorCode(String tenderId, String factorCode) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("tenderId", tenderId);
+		param.put("factorCode", factorCode);
+		return ObeHttpUtils.getList(URL.concat("/getEvaluationContentListByFactorCode"), param, EvaluationContent.class);
+	}
+	
+	/**
+	 * @Description: 清空结构化信息数据
+	 * @author chenxw
+	 * @param tenderId
+	 * @return
+	 */
+	public boolean deleteStructDateInfo(String tenderId) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("tenderId", tenderId);
+		return ObeHttpUtils.getBoolean(URL.concat("/deleteStructDateInfo"), param);
+	}
+	
+	/**
+	 * @Description: 保存结构化信息数据
+	 * @author chenxw
+	 * @param structDateInfo
+	 */
+	public boolean saveStructDateInfo(StructDateInfo structDateInfo) {
+		return ObeHttpUtils.post(URL.concat("/saveStructDateInfo"), structDateInfo);
+	}
+	
+	/**
+	 * @Description: 清空并保存结构化信息数据
+	 * @author chenxw
+	 * @param tenderId
+	 * @param structDateInfo
+	 * @return
+	 */
+	public boolean deleteOrSaveStructDateInfo(String tenderId, StructDateInfo structDateInfo) {
+		RequestBody<StructDateInfo> requestBody = new RequestBody<StructDateInfo>(structDateInfo);
+		requestBody.setParam("tenderId", tenderId);
+		return ObeHttpUtils.post(URL.concat("/deleteOrSaveStructDateInfo"), requestBody);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/service/FinanceService.java b/com.gx.obe.struct/src/com/gx/obe/struct/service/FinanceService.java
new file mode 100644
index 00000000..1193a3c0
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/service/FinanceService.java
@@ -0,0 +1,28 @@
+package com.gx.obe.struct.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gx.obe.struct.beans.Finance;
+import com.gx.obe.web.utils.ObeHttpUtils;
+
+public class FinanceService {
+	
+	private static final String URL = "obeFinance";
+	
+	/**
+	 * @Description: 获取财务状况列表
+	 * @author chenxw
+	 * @param tenderId
+	 * @param modelDataId
+	 * @return
+	 */
+	public List<Finance> getFinanceList(String tenderId, String modelDataId) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("tenderId", tenderId);
+		param.put("modelDataId", modelDataId);
+		return ObeHttpUtils.getList(URL.concat("/getFinanceList"), param, Finance.class);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/service/ModelDataService.java b/com.gx.obe.struct/src/com/gx/obe/struct/service/ModelDataService.java
new file mode 100644
index 00000000..eed44b05
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/service/ModelDataService.java
@@ -0,0 +1,31 @@
+package com.gx.obe.struct.service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.gx.obe.struct.beans.ModelData;
+import com.gx.obe.web.utils.ObeHttpUtils;
+
+public class ModelDataService {
+	
+	private static final String URL = "obeModelData";
+	
+	/**
+	 * @Description: 获取对象结构化数据
+	 * @author chenxw
+	 * @param tenderId
+	 * @param supplierId
+	 * @param relChapterType
+	 * @param dataCode
+	 * @return
+	 */
+	public ModelData getModelData(String tenderId, String supplierId, String relChapterType, String dataCode) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("tenderId", tenderId);
+		param.put("supplierId", supplierId);
+		param.put("relChapterType", relChapterType);
+		param.put("dataCode", dataCode);
+		return ObeHttpUtils.getOne(URL.concat("/getModelData"), param, ModelData.class);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/service/PerformanceService.java b/com.gx.obe.struct/src/com/gx/obe/struct/service/PerformanceService.java
new file mode 100644
index 00000000..c703388b
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/service/PerformanceService.java
@@ -0,0 +1,28 @@
+package com.gx.obe.struct.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gx.obe.struct.beans.Performance;
+import com.gx.obe.web.utils.ObeHttpUtils;
+
+public class PerformanceService {
+	
+	private static final String URL = "obePerformance";
+	
+	/**
+	 * @Description: 获取业绩列表
+	 * @author chenxw
+	 * @param tenderId
+	 * @param modelDataId
+	 * @return
+	 */
+	public List<Performance> getPerformanceList(String tenderId, String modelDataId) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("tenderId", tenderId);
+		param.put("modelDataId", modelDataId);
+		return ObeHttpUtils.getList(URL.concat("/getPerformanceList"), param, Performance.class);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/service/ProjectLeaderService.java b/com.gx.obe.struct/src/com/gx/obe/struct/service/ProjectLeaderService.java
new file mode 100644
index 00000000..b46bca07
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/service/ProjectLeaderService.java
@@ -0,0 +1,32 @@
+package com.gx.obe.struct.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gx.obe.struct.beans.ProjectLeader;
+import com.gx.obe.web.utils.ObeHttpUtils;
+
+/**
+ * @Description:
+ * @author chenxw
+ */
+public class ProjectLeaderService {
+	
+	private static final String URL = "obeProjectLeader";
+	
+	/**
+	 * @Description: 获取项目负责人列表
+	 * @author chenxw
+	 * @param tenderId
+	 * @param modelDataId
+	 * @return
+	 */
+	public List<ProjectLeader> getProjectLeaderList(String tenderId, String modelDataId) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("tenderId", tenderId);
+		param.put("modelDataId", modelDataId);
+		return ObeHttpUtils.getList(URL.concat("/getProjectLeaderList"), param, ProjectLeader.class);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/service/QualificationService.java b/com.gx.obe.struct/src/com/gx/obe/struct/service/QualificationService.java
new file mode 100644
index 00000000..59c74e19
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/service/QualificationService.java
@@ -0,0 +1,28 @@
+package com.gx.obe.struct.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gx.obe.struct.beans.Qualification;
+import com.gx.obe.web.utils.ObeHttpUtils;
+
+public class QualificationService {
+	
+	private static final String URL = "obeQualification";
+	
+	/**
+	 * @Description: 获取证书列表
+	 * @author chenxw
+	 * @param tenderId
+	 * @param modelDataId
+	 * @return
+	 */
+	public List<Qualification> getQualificationList(String tenderId, String modelDataId) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("tenderId", tenderId);
+		param.put("modelDataId", modelDataId);
+		return ObeHttpUtils.getList(URL.concat("/getQualificationList"), param, Qualification.class);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/service/TemplateTableService.java b/com.gx.obe.struct/src/com/gx/obe/struct/service/TemplateTableService.java
new file mode 100644
index 00000000..c20df27b
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/service/TemplateTableService.java
@@ -0,0 +1,29 @@
+package com.gx.obe.struct.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gx.obe.struct.beans.TemplateTable;
+import com.gx.obe.web.utils.ObeHttpUtils;
+
+public class TemplateTableService {
+	
+	private static final String URL = "obeTemplateTable";
+	
+	/**
+	 * @Description: 获取小范本表格列表
+	 * @author chenxw
+	 * @param tenderId
+	 * @param factorId
+	 * @return
+	 */
+	public List<TemplateTable> getTemplateTableList(String tenderId, String relChapterType, String dataCode) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("tenderId", tenderId);
+		param.put("relChapterType", relChapterType);
+		param.put("dataCode", dataCode);
+		return ObeHttpUtils.getList(URL.concat("/getTemplateTableList"), param, TemplateTable.class);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/service/WorkExperienceService.java b/com.gx.obe.struct/src/com/gx/obe/struct/service/WorkExperienceService.java
new file mode 100644
index 00000000..a7c3679c
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/service/WorkExperienceService.java
@@ -0,0 +1,30 @@
+package com.gx.obe.struct.service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.gx.obe.struct.beans.WorkExperience;
+import com.gx.obe.web.utils.ObeHttpUtils;
+
+/**
+ * @Description:
+ * @author chenxw
+ */
+public class WorkExperienceService {
+	
+	private static final String URL = "obeWorkExperience";
+	
+	/**
+	 * @Description: 获取工作经历列表
+	 * @author chenxw
+	 * @param projectLeaderId
+	 * @return 
+	 */
+	public List<WorkExperience> getWorkExperienceList(String projectLeaderId) {
+		Map<String, Object> param = new HashMap<>();
+		param.put("projectLeaderId", projectLeaderId);
+		return ObeHttpUtils.getList(URL.concat("/getWorkExperienceList"), param, WorkExperience.class);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/thread/MyThread.java b/com.gx.obe.struct/src/com/gx/obe/struct/thread/MyThread.java
new file mode 100644
index 00000000..f5b3d60e
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/thread/MyThread.java
@@ -0,0 +1,58 @@
+package com.gx.obe.struct.thread;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class MyThread implements Runnable{
+	public String message;
+	public Thread thread;
+	
+	private boolean isStop = false;
+//	public MyThread(){
+//		
+//	}
+//	public MyThread(Runnable runnable){
+//		
+//	}
+	private List<MyThread> joinThread;
+	public void start(){
+		thread = new Thread(this);
+		thread.start();
+	}
+	
+	public void stop(){
+		isStop = true;
+		thread = null;
+	}
+	
+	public void join(){
+		if(null != thread){
+			try {
+				thread.join();
+			} catch (InterruptedException e) {
+			}
+		}
+	}
+	
+	public void addJoinThread(MyThread thread){
+		if(null == joinThread){
+			joinThread = new ArrayList<MyThread>();
+		}
+		joinThread.add(thread);
+	}
+	
+	public void joinOtherThread(){
+		if(null != joinThread){
+			for(MyThread myRunnable : joinThread){
+				myRunnable.join();
+			}
+		}
+	}
+	public void setMessage(String message) {
+		this.message = message;
+	}
+	
+//	public static abstract class Runnable {
+//		public abstract void run();
+//	}
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/thread/ParsingStructThread.java b/com.gx.obe.struct/src/com/gx/obe/struct/thread/ParsingStructThread.java
new file mode 100644
index 00000000..aba867c3
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/thread/ParsingStructThread.java
@@ -0,0 +1,303 @@
+package com.gx.obe.struct.thread;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.stream.Collectors;
+
+import org.dom4j.Element;
+
+import com.gx.obe.common.file.utils.BidFileUtils;
+import com.gx.obe.common.widget.listener.ProgressMessageAdapter;
+import com.gx.obe.common.widget.listener.ProgressMessageListener;
+import com.gx.obe.components.core.Constants;
+import com.gx.obe.components.core.enumeration.CommonEnum;
+import com.gx.obe.struct.beans.ModelData;
+import com.gx.obe.struct.beans.StructDateInfo;
+import com.gx.obe.struct.enums.DataCategoryEnum;
+import com.gx.obe.struct.enums.ModelDataClassEnum;
+import com.gx.obe.struct.enums.ModelDataTypeEnum;
+import com.gx.obe.struct.handler.RelChapterTypeHandler;
+import com.gx.obe.struct.service.EvaluationContentService;
+import com.gx.obe.struct.utils.ParsingStructXmlUtils;
+import com.gx.obe.util.utils.UuidUtils;
+import com.gx.obe.web.entity.Supplier;
+import com.gx.obe.web.entity.evaluation.EvaluationContent;
+import com.gx.obe.web.entity.tender.TenderProjectEntity;
+import com.gx.obe.web.service.SupplierService;
+
+/**
+ * @Description: 解析结构化数据线程
+ * @author chenxw
+ */
+public class ParsingStructThread implements Runnable {
+	
+	private final EvaluationContentService evaluationContentService = new EvaluationContentService();
+	private final SupplierService supplierService = new SupplierService();
+	private final StructDateInfo structDateInfo = new StructDateInfo();
+	private String tenderId;
+	private TenderProjectEntity tenderproject;
+	private ProgressMessageListener messageProgress;
+	/**
+	 * @author chenxw
+	 * @param tenderproject.getId()
+	 * @param callBack
+	 */
+	public ParsingStructThread(TenderProjectEntity tenderproject, ProgressMessageListener messageProgress) {
+		this.tenderproject = tenderproject;
+		this.messageProgress = messageProgress;
+	}
+	
+	@Override
+	public void run() {
+		this.tenderId = tenderproject.getId();
+		parsingStruct();
+		messageProgress.finish(messageProgress.getErrorMessagesSize() == 0);
+	}
+	
+	/**
+	 * @Description: 解析结构化数据
+	 * @author chenxw 
+	 */
+	private void parsingStruct() {
+		//--------------------------------获取供应商列表--------------------------------------------------
+		
+		messageProgress.message("开始获取获取供应商列表...", 0);
+		Optional<List<Supplier>> supplierListQptional = Optional.ofNullable(supplierService.getOpenBidSuccessSupplier(tenderId)).filter(t -> !t.isEmpty());
+		if (!supplierListQptional.isPresent()) {
+			messageProgress.message("供应商列表获取失败!", -1);
+			return;
+		}
+		messageProgress.message("供应商列表获取成功!", 1);
+		
+		//--------------------------------解析供应商评议表数据--------------------------------------------------
+		
+		ParsingSupplierSelfOpinionThread parsingSupplierSelfOpinionThread = new ParsingSupplierSelfOpinionThread(tenderproject, supplierListQptional.get(),new ProgressMessageAdapter () {
+			@Override
+			public void message(String message, int flag) {
+				messageProgress.message(message, flag);
+			}
+
+			@Override
+			public void finish(boolean flag) {
+			}
+		}) ;
+		parsingSupplierSelfOpinionThread.start();
+		parsingSupplierSelfOpinionThread.join();
+		
+		//--------------------------------解析供应商标书定位数据--------------------------------------------------
+//		String isIntelligentScore = tenderproject.getEvaluationParamByKey("isIntelligentScore");
+//		if(null != isIntelligentScore && CommonEnum.YES.equals(isIntelligentScore)) {		
+//		}
+		ParsingSupplierRespItemThread parsingSupplierRespItemThread = new ParsingSupplierRespItemThread(tenderproject, supplierListQptional.get(),new ProgressMessageAdapter () {
+			@Override
+			public void message(String message, int flag) {
+				messageProgress.message(message, flag);
+			}
+			
+			@Override
+			public void finish(boolean flag) {
+			}
+		}) ;
+		parsingSupplierRespItemThread.start();
+		parsingSupplierRespItemThread.join();
+
+		//--------------------------------获取评审内容列表--------------------------------------------------
+		
+//		messageProgress.message("开始获取评审内容...", 0);
+		Optional<Map<String, Set<String>>> relChapterTypeListMapOptional = Optional.ofNullable(evaluationContentService.getEvaluationContentList(tenderId)).filter(t -> !t.isEmpty()).map(l -> {
+			return l.stream().collect(Collectors.groupingBy(EvaluationContent::getDataCategory, Collectors.mapping(EvaluationContent::getRelChapterType, Collectors.toSet())));
+		});
+		
+		Consumer<Set<String>> consumer = t -> {
+			t.add("CompletedAchievements");
+			t.add("OngoingAchievements");
+		};
+		relChapterTypeListMapOptional.map(t -> t.get(DataCategoryEnum.TDI.getKey())).ifPresent(consumer);
+		relChapterTypeListMapOptional.map(t -> t.get(DataCategoryEnum.TT.getKey())).ifPresent(consumer);
+		if (!relChapterTypeListMapOptional.isPresent()) {
+//			messageProgress.message("未获取到已绑定指标结构化内容!", -1);
+			return;
+		}
+//		messageCallBack.callBackMsg("开始获取评审内容!");
+//		messageCallBack.callBackMsg(true, "获取评审内容成功!");
+		
+		//--------------------------------解析投标结构化数据--------------------------------------------------
+		
+		messageProgress.message("开始解析结构化标书结构...", 0);
+		try {
+			relChapterTypeListMapOptional.map(m -> m.get(DataCategoryEnum.TT.getKey())).map(Set::parallelStream).ifPresent(s -> {
+				s.forEach(t -> {
+					ParsingStructXmlUtils.resolverTemplateTable(tenderId, t).ifPresent(structDateInfo.getTemplateTableList()::addAll);
+				});
+			});
+		} catch (Exception e) {
+			messageProgress.message("解析招标结构化数据失败,请检查是否下载招标文件!", -1);
+			System.out.println(e.getMessage());
+			return;
+		}
+		messageProgress.message("结构化标书结构解析成功!", 1);
+		
+		//--------------------------------解析投标结构化数据--------------------------------------------------
+		
+		messageProgress.message("开始解析投标结构化数据!", 1);
+		try {
+//			supplierListQptional.get().parallelStream().forEach(t -> parsingSupplierBidFileStruct(t, relChapterTypeListMapOptional.get(), Constants.getBidFilePath(tenderId, t.getId())));
+			supplierListQptional.get().stream().forEach(t -> {
+				messageProgress.message("正在解析[" + t.getSupplierName() +"]结构化数据...", 0);
+				parsingSupplierBidFileStruct(t, relChapterTypeListMapOptional.get(), Constants.getBidFilePath(tenderId, t.getId()));
+			});
+		} catch (Exception e) {
+			messageProgress.message("解析投标结构化数据失败!", -1);
+			System.out.println(e.getStackTrace());
+			return;
+		}
+		messageProgress.message("解析投标结构化数据成功!", 1);
+		
+		//--------------------------------保存结构化数据--------------------------------------------------
+		
+		messageProgress.message("开始保存结构化数据!", 0);
+		if (!evaluationContentService.deleteOrSaveStructDateInfo(tenderId, structDateInfo)) {
+			messageProgress.message("保存结构化数据失败!", -1);
+			return;
+		}
+		messageProgress.message("保存结构化数据成功!", 1);
+		
+		//--------------------------------end--------------------------------------------------
+		
+		messageProgress.message( "解析结构化数据结束!", 0);
+		messageProgress.message("---------------------------------", 0);
+	}
+	
+	/**
+	 * @Description: 解析对应供应商结构化数据
+	 * @author chenxw
+	 * @param supplier
+	 * @param relChapterTypeSetMap
+	 * @param bidFilePath
+	 */
+	private void parsingSupplierBidFileStruct(Supplier supplier, Map<String, Set<String>> relChapterTypeSetMap, String bidFilePath) {
+		//获取BidFileIndexTree.xml中fileItem列表
+		System.out.println(supplier.getSupplierName());
+		System.out.println(relChapterTypeSetMap);
+		ParsingStructXmlUtils.resolverBidFileIndexTree(bidFilePath).filter(t -> !t.isEmpty()).ifPresent(el -> {
+			//解析小范本表单数据
+			Optional.ofNullable(relChapterTypeSetMap.get(DataCategoryEnum.TDI.getKey())).ifPresent(l -> structDateInfo.getTemplateDataItemList().addAll(l.stream().map(t -> {
+				System.out.println("resolverObeTemplateDataItem");
+				return ParsingStructXmlUtils.resolverObeTemplateDataItem(tenderId, supplier.getId(), t, el, bidFilePath);
+			}).filter(Optional::isPresent).map(Optional::get).flatMap(List::stream).collect(Collectors.toList())));
+			//解析小范本表格数据
+			System.out.println("resolverTemplateTable");
+			Optional.ofNullable(relChapterTypeSetMap.get(DataCategoryEnum.TT.getKey())).ifPresent(l -> structDateInfo.getTemplateTableList().addAll(l.stream().map(t -> {
+				return ParsingStructXmlUtils.resolverTemplateTable(tenderId, supplier.getId(), t, el, bidFilePath);
+			}).filter(Optional::isPresent).map(Optional::get).flatMap(List::stream).collect(Collectors.toList())));
+			//解析对象结构化数据
+			System.out.println("parsingModelData");
+			Optional.ofNullable(relChapterTypeSetMap.get(DataCategoryEnum.MD.getKey())).ifPresent(l -> l.stream().forEach(t -> parsingModelData(t, supplier, el, bidFilePath)));
+		});
+	}
+	
+	/**
+	 * @Description: 解析对应评审内容结构化数据
+	 * @author chenxw
+	 * @param evaluationContent
+	 * @param supplier
+	 * @param fileItemElementList
+	 * @param bidFilePath
+	 */
+	private void parsingModelData(String relChapterType, Supplier supplier, List<Element> fileItemElementList, String bidFilePath) {
+		//获取结构化数据xml文件地址
+		RelChapterTypeHandler handler = new RelChapterTypeHandler(relChapterType);
+		System.out.println(relChapterType);
+		Optional<ModelDataTypeEnum> modelDataTypeEnum = Optional.of(handler.getRelChapterType()).map(ModelDataTypeEnum.MAP::get);
+		
+		fileItemElementList.stream().filter(t -> {
+			return handler.getRelChapterType().equals(t.elementTextTrim("chapterType"));
+		}).findAny().map(this::getBidFileName).filter(Optional::isPresent).map(Optional::get).map(bidFilePath::concat).ifPresent(xmlFilePath -> {
+		
+			ModelData modelData = initModelData(supplier.getId(), modelDataTypeEnum.map(ModelDataTypeEnum.EQ_ProjectLeader::equals).orElse(false) ? handler.getRelChapterType() : relChapterType);
+			structDateInfo.getModelDataList().add(modelData);
+			System.out.println(handler.getMark());
+			System.out.println(relChapterType);
+			modelDataTypeEnum.map(ModelDataTypeEnum::getClassEnum).ifPresent(t -> parsingModelDataDetail(t, modelData.getId(), xmlFilePath, handler.getMark()));
+		});
+	}
+	
+	/**
+	 * @Description: 获得投标文件文件名
+	 * @author chenxw
+	 * @param fileItem
+	 * @param isEnc
+	 * @return
+	 */
+	public Optional<String> getBidFileName(Element fileItemElement) {
+		Optional<Element> fileItem = Optional.ofNullable(fileItemElement);
+		return BidFileUtils.getBidFileName(fileItem.map(t -> {
+			return t.elementText("fileName");
+		}).orElse(null), fileItem.map(t -> {
+			return t.elementText("fileId");
+		}).orElse(null));
+	}
+	
+	/**
+	 * @Description: 解析对象结构化数据明细
+	 * @author chenxw
+	 * @param modelDataEnum
+	 * @param modelDataId
+	 * @param xmlFilePath
+	 * @param string 
+	 */
+	private void parsingModelDataDetail(ModelDataClassEnum modelDataEnum, String modelDataId, String xmlFilePath, String mark) {
+		System.out.println("parsingModelDataDetail");
+		Consumer<ParsingStructXmlUtils.AttachmentFileOperation> consumer = t -> ParsingStructXmlUtils.resolverAttachmentFile(t).ifPresent(structDateInfo.getAttachmentFileList()::addAll);
+		switch (modelDataEnum) {
+			case BusinessLicense:
+				System.out.println("BusinessLicense");
+				ParsingStructXmlUtils.resolverBusinessLicense(tenderId, modelDataId, xmlFilePath, consumer).ifPresent(structDateInfo.getBusinessLicenseList()::addAll);
+				break;
+			case BidderInfo:
+				System.out.println("BidderInfo");
+				ParsingStructXmlUtils.resolverBidderBasicInfo(tenderId, modelDataId, xmlFilePath, consumer).ifPresent(structDateInfo.getBidderBasicInfoList()::addAll);
+				break;
+			case Finance:
+				System.out.println("Finance");
+				ParsingStructXmlUtils.resolverFinance(tenderId, modelDataId, xmlFilePath, consumer).ifPresent(structDateInfo.getFinanceList()::addAll);
+				break;
+			case Performance:
+				System.out.println("Performance");
+				ParsingStructXmlUtils.resolverPerformance(tenderId, modelDataId, xmlFilePath, consumer, mark).ifPresent(structDateInfo.getPerformanceList()::addAll);
+				break;
+			case ProjectLeader:
+				System.out.println("ProjectLeader");
+				ParsingStructXmlUtils.resolverProjectLeader(tenderId, modelDataId, xmlFilePath, consumer).ifPresent(structDateInfo.getProjectLeaderList()::addAll);
+				break;
+			case Qualification:
+				System.out.println("Qualification");
+				ParsingStructXmlUtils.resolverQualification(tenderId, modelDataId, xmlFilePath, consumer).ifPresent(structDateInfo.getQualificationList()::addAll);
+				break;
+			default:
+				break;
+		}
+	}
+	
+	/**
+	 * @Description: 初始化对象结构化数据
+	 * @author chenxw
+	 * @param supplierId
+	 * @param evaluationContent
+	 * @return
+	 */
+	private ModelData initModelData(String supplierId, String relChapterType) {
+		System.out.println("initModelData");
+		ModelData modelData = new ModelData();
+		modelData.setId(UuidUtils.getUUID());
+		modelData.setTenderId(tenderId);
+		modelData.setSupplierId(supplierId);
+		modelData.setRelChapterType(relChapterType);
+		modelData.setDataCode(relChapterType);
+		return modelData;
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/thread/ParsingSupplierRespItemThread.java b/com.gx.obe.struct/src/com/gx/obe/struct/thread/ParsingSupplierRespItemThread.java
new file mode 100644
index 00000000..61ccf173
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/thread/ParsingSupplierRespItemThread.java
@@ -0,0 +1,129 @@
+package com.gx.obe.struct.thread;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collector;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang.StringUtils;
+import org.dom4j.Element;
+
+import com.gx.obe.business.entity.SupplierEvaluationFactor;
+import com.gx.obe.common.widget.listener.ProgressMessageListener;
+import com.gx.obe.components.core.Constants;
+import com.gx.obe.http.json.JsonUtil;
+import com.gx.obe.struct.beans.RespItemDO;
+import com.gx.obe.util.utils.CollectionUtils;
+import com.gx.obe.util.utils.XmlUtils;
+import com.gx.obe.web.entity.Supplier;
+import com.gx.obe.web.entity.tender.TenderProjectEntity;
+import com.gx.obe.web.service.SupplierEvaluationFactorService;
+
+public class ParsingSupplierRespItemThread extends MyThread{
+
+	
+	
+	private TenderProjectEntity tenderproject;
+	private List<Supplier> supplierList;
+	private SupplierEvaluationFactorService supplierEvaluationFactorService = new SupplierEvaluationFactorService();
+	private Map<String, Map<String, SupplierEvaluationFactor>> mapByFactorCodeBySupplierId;
+	private ProgressMessageListener messageProgress;
+	
+	public ParsingSupplierRespItemThread(TenderProjectEntity tenderproject, List<Supplier> supplierList, ProgressMessageListener messageProgress) {
+		this.tenderproject = tenderproject;
+		this.supplierList = supplierList;
+		this.messageProgress = messageProgress;
+	}
+	
+	public void run() {
+		messageProgress.message("正在解析标书定位...", 0);
+		this.mapByFactorCodeBySupplierId = initMapByFactorCodeBySupplierId();
+		int count = 0;
+		if(null != supplierList && supplierList.size() > 0) {
+			for(Supplier supplier : supplierList) {
+				if(parsingSupplierRespItem(supplier)) {
+					count ++;
+				}
+			}
+		}
+		messageProgress.message("标书定位解析结束!", count > 0 ? 1 : -1);
+		messageProgress.finish(count > 0);
+	
+	}
+	
+	/**
+	 * @Description: 初始化
+	 * @author chenxw
+	 * @return
+	 */
+	private Map<String, Map<String, SupplierEvaluationFactor>> initMapByFactorCodeBySupplierId() {
+		List<SupplierEvaluationFactor> supplierEvaluationFactorList = supplierEvaluationFactorService.getEntityListByTenderId(tenderproject.getId());
+		if (CollectionUtils.isNull(supplierEvaluationFactorList)) return new HashMap<>();
+		return supplierEvaluationFactorList.stream().collect(Collectors.groupingBy(SupplierEvaluationFactor::getSupplierId, Collectors.toMap(SupplierEvaluationFactor::getFactorCode, t -> t, (a, b) -> a)));
+	}
+	
+	/**
+	 * @Description: 解析
+	 * @author chenxw
+	 * @param supplierId
+	 * @param element
+	 */
+	public boolean parsingSupplierRespItem(Supplier supplier) {
+		messageProgress.message("正在解析"+supplier.getSupplierName()+"标书定位...", 0);
+		File respItemFile = new File(Constants.getBidFilePath(tenderproject.getId(), supplier.getId()) + "RespItem.xml");
+		if(respItemFile.exists()) {
+			Element element = XmlUtils.getXmlDocument(respItemFile.getAbsolutePath()).getRootElement();
+			//TODO
+			List<?> elements = element.elements();
+			List<RespItemDO> respItemDOList = new ArrayList<>();
+			if(null != elements && elements.size() > 0) {
+				elements.stream().map(t -> (Element) t).forEach(t -> {
+					RespItemDO respItemDO = new RespItemDO();
+					respItemDO.setEvalFactorId(t.attributeValue("evalFactorId"));
+					respItemDO.setFileId(t.attributeValue("fileId"));
+					respItemDO.setFileName(t.attributeValue("fileName"));
+					respItemDO.setPageNumber(t.elementTextTrim("pageNumber"));
+					respItemDO.setEndPageNumber(t.elementTextTrim("endPageNumber"));
+					respItemDO.setName(t.elementTextTrim("name"));
+					respItemDOList.add(respItemDO);
+				});
+			}
+			Map<String, SupplierEvaluationFactor> mapByFactorCode = mapByFactorCodeBySupplierId.get(supplier.getId());
+			Map<String, List<RespItemDO>> respItemMap = respItemDOList.stream().collect(Collectors.groupingBy(RespItemDO::getEvalFactorId));
+			if(null != mapByFactorCode && null != respItemMap) {
+				for(String evalFactorId : respItemMap.keySet()) {
+					SupplierEvaluationFactor supplierEvaluationFactor = mapByFactorCode.get(evalFactorId);
+					if(null != supplierEvaluationFactor) {
+						supplierEvaluationFactor.setRespItemList(JsonUtil.jsonObjectToStr(respItemMap.get(evalFactorId)));
+						//页码拼接
+						List<String> pageList = respItemMap.get(evalFactorId).stream().map(RespItemDO::getPage).collect(Collectors.toList());
+						String pageNumber = StringUtils.join(pageList, "、");
+						supplierEvaluationFactor.setParam("pageNumber", pageNumber);
+					}
+				}
+			}
+		}else {
+			messageProgress.message("未找到"+supplier.getSupplierName()+"标书定位,请先下载标书或检查标书中是否提供了标书定位!", -1);
+			return false;
+		}
+		
+		if(null != mapByFactorCodeBySupplierId.get(supplier.getId()) && mapByFactorCodeBySupplierId.get(supplier.getId()).values().size() > 0) {
+			
+			List<SupplierEvaluationFactor> supplierEvaluationFactorList = mapByFactorCodeBySupplierId.get(supplier.getId()).values().stream().collect(Collectors.toList());
+			int count = supplierEvaluationFactorService.batchSaveOrUpdate(supplierEvaluationFactorList, new String[] { "respItemList", "computerParams"});
+			if(count > 0) {
+				messageProgress.message(supplier.getSupplierName()+"标书定位解析成功!", 1);
+				return true;
+			}
+		}
+		messageProgress.message(supplier.getSupplierName()+"标书定位解析失败!", -1);
+		return false;
+	}
+	
+
+	
+
+}
\ No newline at end of file
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/thread/ParsingSupplierSelfOpinionThread.java b/com.gx.obe.struct/src/com/gx/obe/struct/thread/ParsingSupplierSelfOpinionThread.java
new file mode 100644
index 00000000..16d6733e
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/thread/ParsingSupplierSelfOpinionThread.java
@@ -0,0 +1,170 @@
+package com.gx.obe.struct.thread;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.dom4j.Element;
+
+import com.gx.obe.business.entity.SupplierEvaluationFactor;
+import com.gx.obe.common.widget.listener.ProgressMessageListener;
+import com.gx.obe.components.core.Constants;
+import com.gx.obe.evaluation.struct.enumeration.StructBusinessTypeEnum;
+import com.gx.obe.http.json.JsonUtil;
+import com.gx.obe.struct.beans.ParamValueDO;
+import com.gx.obe.struct.beans.SelfEvalParamsDO;
+import com.gx.obe.struct.value_list.CreditGrade;
+import com.gx.obe.struct.value_list.Finance;
+import com.gx.obe.struct.value_list.ParamValues;
+import com.gx.obe.struct.value_list.Performance;
+import com.gx.obe.util.element.ElementClass;
+import com.gx.obe.util.utils.CollectionUtils;
+import com.gx.obe.util.utils.XmlUtils;
+import com.gx.obe.web.entity.Supplier;
+import com.gx.obe.web.entity.tender.TenderProjectEntity;
+import com.gx.obe.web.service.SupplierEvaluationFactorService;
+
+public class ParsingSupplierSelfOpinionThread extends MyThread{
+
+	
+	
+	private TenderProjectEntity tenderproject;
+	private List<Supplier> supplierList;
+	private SupplierEvaluationFactorService supplierEvaluationFactorService = new SupplierEvaluationFactorService();
+	private Map<String, Map<String, SupplierEvaluationFactor>> mapByFactorCodeBySupplierId;
+	private ProgressMessageListener messageProgress;
+	
+	public ParsingSupplierSelfOpinionThread(TenderProjectEntity tenderproject, List<Supplier> supplierList, ProgressMessageListener messageProgress) {
+		this.tenderproject = tenderproject;
+		this.supplierList = supplierList;
+		this.messageProgress = messageProgress;
+	}
+	
+	public void run() {
+		messageProgress.message("正在解析自我评议...", 0);
+		this.mapByFactorCodeBySupplierId = initMapByFactorCodeBySupplierId();
+		int count = 0;
+		if(null != supplierList && supplierList.size() > 0) {
+			for(Supplier supplier : supplierList) {
+				if(parsingSupplierSelfOpinion(supplier)) {
+					count ++;
+				}
+			}
+		}
+		messageProgress.message("自我评议解析结束!", count > 0 ? 1 : -1);
+		messageProgress.finish(count > 0);
+	
+	}
+	
+	/**
+	 * @Description: 初始化
+	 * @author chenxw
+	 * @return
+	 */
+	private Map<String, Map<String, SupplierEvaluationFactor>> initMapByFactorCodeBySupplierId() {
+		List<SupplierEvaluationFactor> supplierEvaluationFactorList = supplierEvaluationFactorService.getEntityListByTenderId(tenderproject.getId());
+		if (CollectionUtils.isNull(supplierEvaluationFactorList)) return new HashMap<>();
+		return supplierEvaluationFactorList.stream().collect(Collectors.groupingBy(SupplierEvaluationFactor::getSupplierId, Collectors.toMap(SupplierEvaluationFactor::getFactorCode, t -> t, (a, b) -> a)));
+	}
+	
+	/**
+	 * @Description: 解析
+	 * @author chenxw
+	 * @param supplierId
+	 * @param element
+	 */
+	public boolean parsingSupplierSelfOpinion(Supplier supplier) {
+		messageProgress.message("正在解析"+supplier.getSupplierName()+"自评意见...", 0);
+		File selfEvaluatesFile = new File(Constants.getBidFilePath(tenderproject.getId(), supplier.getId()) + "SelfEvaluates.xml");
+		if(selfEvaluatesFile.exists()) {
+			Element element = XmlUtils.getXmlDocument(selfEvaluatesFile.getAbsolutePath()).getRootElement();
+			Map<String, SupplierEvaluationFactor> mapByFactorCode = mapByFactorCodeBySupplierId.computeIfAbsent(supplier.getId(), $ -> new HashMap<>());
+			List<?> elements = element.elements();
+			elements.stream().map(t -> (Element) t).forEach(t -> {
+				SupplierEvaluationFactor supplierEvaluationFactor = mapByFactorCode.computeIfAbsent(t.elementTextTrim("evalFactorId"), evalFactorCode -> {
+					SupplierEvaluationFactor factor = new SupplierEvaluationFactor();
+					factor.setTenderId(tenderproject.getId());
+					factor.setSupplierId(supplier.getId());
+					factor.setFactorCode(evalFactorCode);
+					getSelfItemData(factor, t);
+					return factor;
+				});
+				String value = t.elementTextTrim("selfEvaluateValue");
+				supplierEvaluationFactor.setOpinion(value);
+				supplierEvaluationFactor.setFactorResponse(value);
+				Element paramValueListElement = t.element("paramValueList");
+				if(null != paramValueListElement && paramValueListElement.elements().size() > 0) {
+					List<Element> paramValueElementList = paramValueListElement.elements();
+					if(null != paramValueElementList && paramValueElementList.size() > 0) {
+						SelfEvalParamsDO selfEvalParamsDO = new SelfEvalParamsDO();
+						
+						for(Element paramValueElement : paramValueElementList) {
+							ParamValueDO paramValueDO = new ParamValueDO();
+							paramValueDO.setDataCode(paramValueElement.elementTextTrim("dataCode"));
+							paramValueDO.setDataType(paramValueElement.elementTextTrim("dataType"));
+							paramValueDO.setDataValue(paramValueElement.elementTextTrim("dataValue"));
+							selfEvalParamsDO.addParamValue(paramValueDO);
+						}
+						supplierEvaluationFactor.setParamValues(selfEvalParamsDO.toJson());
+					}
+				}
+			});
+		}else {
+			messageProgress.message("未找到"+supplier.getSupplierName()+"自评意见,请先下载标书或检查标书中是否提供了自评意见!", -1);
+			return false;
+		}
+		
+		if(null != mapByFactorCodeBySupplierId.get(supplier.getId()) && mapByFactorCodeBySupplierId.get(supplier.getId()).values().size() > 0) {
+			
+			List<SupplierEvaluationFactor> supplierEvaluationFactorList = mapByFactorCodeBySupplierId.get(supplier.getId()).values().stream().collect(Collectors.toList());
+			int count = supplierEvaluationFactorService.batchSaveOrUpdate(supplierEvaluationFactorList, new String[] { "opinion", "factorResponse", "paramValues" });
+			if(count > 0) {
+				messageProgress.message(supplier.getSupplierName()+"自评意见解析成功!", 1);
+				return true;
+			}
+		}
+		messageProgress.message(supplier.getSupplierName()+"自评意见解析失败!", -1);
+		return false;
+	}
+	private void getSelfItemData(SupplierEvaluationFactor factor, Element t) {
+		String relChapterType = t.elementTextTrim("relChapterType");
+		Element valueList = t.element("valueList");
+		if(null != valueList) {
+			// 主营利润率
+			if(StructBusinessTypeEnum.EQ_PROFIT_RATIO.getKey().equals(relChapterType)) {
+				List<Finance> financeList= ElementClass.of(Finance.class).createList(valueList);
+				String financeListJsonStr = JsonUtil.jacksonObjectToStr(financeList);
+				factor.setFinance(financeListJsonStr);
+//				供货业绩(物资)
+			}else if(StructBusinessTypeEnum.EQ_ACHIEVEMENTS.getKey().equals(relChapterType)) {
+				List<Performance> performanceList= ElementClass.of(Performance.class).createList(valueList);
+				String performanceListJsonStr = JsonUtil.jacksonObjectToStr(performanceList);
+				factor.setPerformance(performanceListJsonStr);
+//				资信等级 EQ_Qualification_ZXDJ
+			}else if(StructBusinessTypeEnum.EQ_QUALIFICATION_ZXDJ.getKey().equals(relChapterType)) {
+				List<CreditGrade> creditGradeList= ElementClass.of(CreditGrade.class).createList(valueList);
+				String creditGradeListJsonStr = JsonUtil.jacksonObjectToStr(creditGradeList);
+				factor.setCreditGrade(creditGradeListJsonStr);
+			}else {
+				List<ParamValues> paramValuesList= ElementClass.of(ParamValues.class).createList(valueList);
+				String paramValuesListJsonStr = JsonUtil.jacksonObjectToStr(paramValuesList);
+				factor.setParamValues(paramValuesListJsonStr);
+			}
+		}
+	}
+
+	/**
+	 * @Description: 保存
+	 * @author chenxw
+	 * @return
+	 */
+	public boolean save() {
+		List<SupplierEvaluationFactor> supplierEvaluationFactorList = mapByFactorCodeBySupplierId.values().stream().map(Map::values).flatMap(Collection::stream).collect(Collectors.toList());
+		if (supplierEvaluationFactorList.isEmpty()) return true;
+		return supplierEvaluationFactorService.batchSaveOrUpdate(supplierEvaluationFactorList, new String[] { "opinion", "factorResponse" }) > 0;
+	}
+
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/tree/EvaluationFactorTree.java b/com.gx.obe.struct/src/com/gx/obe/struct/tree/EvaluationFactorTree.java
new file mode 100644
index 00000000..f1548e87
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/tree/EvaluationFactorTree.java
@@ -0,0 +1,71 @@
+package com.gx.obe.struct.tree;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import com.gx.obe.business.entity.SupplierEvaluationFactor;
+import com.gx.obe.component.tree.ITree;
+import com.gx.obe.util.utils.CollectionUtils;
+import com.gx.obe.web.entity.evaluation.EvaluationFactor;
+
+public class EvaluationFactorTree implements ITree<EvaluationFactorTree> {
+	
+	private EvaluationFactor evaluationFactor;
+	private Map<String, SupplierEvaluationFactor> mapBySupplierId;
+	private Map<String, Map<String, SupplierEvaluationFactor>> mapBySupplierIdByFactorCode;
+	private Function<SupplierEvaluationFactor, String> mapper;
+	
+	public EvaluationFactorTree(EvaluationFactor evaluationFactor, Map<String, Map<String, SupplierEvaluationFactor>> mapBySupplierIdByFactorCode, Function<SupplierEvaluationFactor, String> mapper) {
+		this.evaluationFactor = Objects.requireNonNull(evaluationFactor);
+		this.mapBySupplierId = mapBySupplierIdByFactorCode.get(evaluationFactor.getFactorCode());
+		this.mapBySupplierIdByFactorCode = mapBySupplierIdByFactorCode;
+		if("对应页码".equals(evaluationFactor.getFactorName())) {
+			mapper = SupplierEvaluationFactor::getPageNumber;
+		}
+		this.mapper = mapper;
+	}
+	
+	@Override
+	public ITree<EvaluationFactorTree> getRoot() {
+		if (evaluationFactor.getParentFactor() == null) {
+			return null;
+		}
+		return new EvaluationFactorTree(evaluationFactor.getParentFactor(), mapBySupplierIdByFactorCode, mapper);
+	}
+	
+	@Override
+	public List<EvaluationFactorTree> getITrees() {
+		if (CollectionUtils.isNull(evaluationFactor.getChildFactorList())) {
+			return null;
+		}
+		return evaluationFactor.getChildFactorList().stream().map(t -> new EvaluationFactorTree(t, mapBySupplierIdByFactorCode, mapper)).collect(Collectors.toList());
+	}
+	
+	@Override
+	public String getName() {
+		return evaluationFactor.getFactorName();
+	}
+	
+	@Override
+	public String getKey() {
+		return evaluationFactor.getId();
+	}
+	
+	@Override
+	public String getValue(Object key) {
+		return Optional.ofNullable(mapBySupplierId).map(m -> m.get(key)).map(mapper).orElse("");
+	}
+	
+	public EvaluationFactor getEvaluationFactor() {
+		return evaluationFactor;
+	}
+	
+	public SupplierEvaluationFactor getSupplierEvaluationFactorByKey(Object key) {
+		return mapBySupplierId.get(key);
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/utils/ElementUtils.java b/com.gx.obe.struct/src/com/gx/obe/struct/utils/ElementUtils.java
new file mode 100644
index 00000000..caaed6f9
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/utils/ElementUtils.java
@@ -0,0 +1,20 @@
+package com.gx.obe.struct.utils;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+import org.dom4j.Element;
+
+public class ElementUtils {
+	
+	public static Function<Element, Stream<Element>> toStreamFun(String listName, String itemName) {
+		return e -> {
+			List<?> elements = Optional.ofNullable(e).map(t -> t.element(listName)).map(t -> t.elements(itemName)).orElse(null);
+			if (elements == null) return null;
+			return elements.stream().map(t -> (Element) t);
+		};
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/utils/ParsingStructXmlUtils.java b/com.gx.obe.struct/src/com/gx/obe/struct/utils/ParsingStructXmlUtils.java
new file mode 100644
index 00000000..f2a22263
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/utils/ParsingStructXmlUtils.java
@@ -0,0 +1,813 @@
+package com.gx.obe.struct.utils;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.function.Consumer;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+
+import org.dom4j.Document;
+import org.dom4j.Element;
+
+import com.gx.obe.bind.recursion.Recursions;
+import com.gx.obe.common.file.utils.ParsingXmlUtils;
+import com.gx.obe.components.core.Constants;
+import com.gx.obe.http.json.JsonUtil;
+import com.gx.obe.struct.beans.AttachmentFile;
+import com.gx.obe.struct.beans.BidderBasicInfo;
+import com.gx.obe.struct.beans.BusinessLicense;
+import com.gx.obe.struct.beans.Certificate;
+import com.gx.obe.struct.beans.Finance;
+import com.gx.obe.struct.beans.Performance;
+import com.gx.obe.struct.beans.ProjectLeader;
+import com.gx.obe.struct.beans.Qualification;
+import com.gx.obe.struct.beans.TemplateDataItem;
+import com.gx.obe.struct.beans.TemplateTable;
+import com.gx.obe.struct.beans.WorkExperience;
+import com.gx.obe.util.utils.CollectionUtils;
+import com.gx.obe.util.utils.ObjectUtils;
+import com.gx.obe.util.utils.StringUtils;
+import com.gx.obe.util.utils.UuidUtils;
+import com.gx.obe.util.utils.XmlUtils;
+import com.gx.obe.web.entity.evaluation.EvaluationContent;
+import com.gx.utils.BusinessNowTimeUtils;
+
+/**
+ * @Description: 解析结构化xml文件工具类
+ * @author chenxw
+ */
+public class ParsingStructXmlUtils {
+	
+	private static final String BID_FILE_INDEX_TREE = "BidFileIndexTree.xml";
+	
+	private static final String TENDER_STRUCT = "TenderStruct.xml";
+	
+	private ParsingStructXmlUtils() {}
+	
+	private static Stream<Element> streamElement(List<?> list) {
+		return list.stream().map(t -> (Element) t);
+	}
+	
+	/**
+	 * @Description: 解析评审内容
+	 * @author chenxw
+	 * @param tenderId
+	 * @param factorCode
+	 * @param evaluationContentListElement
+	 * @return
+	 */
+	public static Optional<List<EvaluationContent>> resolverEvaluationContent(String tenderId, String factorCode, Element evaluationContentListElement) {
+		return Optional.ofNullable(evaluationContentListElement).map(t -> t.elements("evaluationContent")).map(l -> {
+			return streamElement(l).map(ParsingStructXmlUtils::initEvaluationContent).peek(t -> {
+				t.setTenderId(tenderId);
+				t.setFactorCode(factorCode);
+			}).collect(Collectors.toList());
+		});
+	}
+	
+	/**
+	 * @Description: 初始化评审内容
+	 * @author chenxw
+	 * @param evaluationContentElement
+	 * @return
+	 */
+	private static EvaluationContent initEvaluationContent(Element evaluationContentElement) {
+		EvaluationContent evaluationContent = new EvaluationContent();
+		evaluationContent.setId(UuidUtils.getUUID());
+		evaluationContent.setRelChapterType(evaluationContentElement.elementTextTrim("relChapterType"));
+		evaluationContent.setDataCategory(evaluationContentElement.elementTextTrim("dataCategory"));
+		evaluationContent.setDataCode(evaluationContentElement.elementTextTrim("dataCode"));
+		evaluationContent.setEvalRule(evaluationContentElement.elementTextTrim("evalRule"));
+		evaluationContent.setTenderStructName(evaluationContentElement.elementTextTrim("tenderStructName"));
+		evaluationContent.setEvalPointName(evaluationContentElement.elementTextTrim("evalPointName"));
+		try {
+			evaluationContent.setSortNo(Integer.valueOf(evaluationContentElement.elementTextTrim("Order")));
+		} catch (Exception e) {}
+		return evaluationContent;
+	}
+	
+	/**
+	 * @Description: 解析投标树形索引文件
+	 * @author chenxw
+	 * @param tenderId
+	 * @param supplierId
+	 * @return
+	 */
+	public static Optional<List<Element>> resolverBidFileIndexTree(String bidFilePath) {
+		return Optional.ofNullable(bidFilePath).map(t -> {
+			return t.concat(BID_FILE_INDEX_TREE);
+		}).map(XmlUtils::getXmlDocument).map(Document::getRootElement).map(Element::elements).map(l -> {
+			return streamElement(l).map(t -> {
+				List<Element> list = streamElement(t.elements()).collect(Collectors.toList());
+				resolverBidFileIndexTree(list);
+				return list;
+			}).flatMap(List::stream).collect(Collectors.toList());
+		});
+	}
+	
+	/**
+	 * @Description: 递归解析投标树形索引文件
+	 * @author chenxw
+	 * @param fileItemElementList
+	 * @return
+	 */
+	private static void resolverBidFileIndexTree(List<Element> fileItemElementList) {
+		List<Element> childfileItemList = streamElement(fileItemElementList).flatMap(t -> streamElement(t.elements("fileItem"))).collect(Collectors.toList());
+		if (childfileItemList.isEmpty()) {
+			return;
+		}
+		resolverBidFileIndexTree(childfileItemList);
+		childfileItemList.stream().forEach(t -> fileItemElementList.add((Element) t.clone()));
+	}
+	
+	/**
+	 * @Description: 解析小范本表格
+	 * @author chenxw
+	 * @param tenderId
+	 * @param supplierId
+	 * @param relChapterType
+	 * @param fileItemElementList
+	 * @param bidFilePath
+	 * @return
+	 */
+	public static Optional<List<TemplateTable>> resolverTemplateTable(String tenderId, String supplierId, String relChapterType, List<Element> fileItemElementList, String bidFilePath) {
+		if (StringUtils.isEmpty(tenderId) || StringUtils.isEmpty(supplierId) || StringUtils.isEmpty(relChapterType) || CollectionUtils.isNull(fileItemElementList)) {
+			return Optional.empty();
+		}
+		return fileItemElementList.stream().filter(t -> {
+//			System.out.println(t.elementTextTrim("chapterType"));
+			return relChapterType.equals(t.elementTextTrim("chapterType"));
+		}).findAny().map(t -> t.element("tableList")).map(t -> t.elements("tableInfo")).map(l -> {
+			return streamElement(l).map(ParsingStructXmlUtils::initTemplateTable).peek(t -> {
+				t.setTenderId(tenderId);
+				t.setSupplierId(supplierId);
+				t.setRelChapterType(relChapterType);
+				if (Stream.of("CompletedAchievements", "OngoingAchievements").anyMatch(Predicate.isEqual(relChapterType))) {
+					t.setDataCode(relChapterType);
+				}
+				Optional.ofNullable(bidFilePath).map(p -> p.concat(t.getXmlPath())).map(ParsingXmlUtils::parsingTableXML).map(JsonUtil::jsonObjectToStr).ifPresent(t::setTableInfo);
+			}).collect(Collectors.toList());
+		});
+	}
+	
+	public static Optional<List<TemplateTable>> resolverTemplateTable(String tenderId, String relChapterType) {
+		String biddingFilePath = Constants.getBiddingFilePath(tenderId);
+		Document document = XmlUtils.getXmlDocument(biddingFilePath + TENDER_STRUCT);
+		System.out.println();
+		if (document == null) {
+			throw new RuntimeException();
+		}
+		List<?> elements = document.getRootElement().elements("chapter");
+		if (elements == null) {
+			return Optional.empty();
+		}
+		return Recursions.stream(ElementUtils.toStreamFun("chapterList", "chapter")).toStream(elements.stream().map(t -> (Element) t))
+				.findAny(t -> t.elementText("relChapterType").equals(relChapterType)).map(ElementUtils.toStreamFun("tableList", "tableInfo"))
+				.map(s -> {
+					return s.map(ParsingStructXmlUtils::initTemplateTable).peek(t -> {
+						t.setTenderId(tenderId);
+						t.setSupplierId(Constants.BIDDING_ID);
+						t.setRelChapterType(relChapterType);
+						Optional.of(t).map(TemplateTable::getXmlPath).map(biddingFilePath::concat).map(ParsingXmlUtils::parsingTableXML).map(JsonUtil::jsonObjectToStr).ifPresent(t::setTableInfo);
+					}).collect(Collectors.toList());
+				});
+	}
+	
+	/**
+	 * @Description: 初始化小范本表格
+	 * @author chenxw
+	 * @param templateTableElement
+	 * @return
+	 */
+	private static TemplateTable initTemplateTable(Element templateTableElement) {
+		TemplateTable templateTable = new TemplateTable();
+		String tableId = templateTableElement.elementTextTrim("tableId");
+		templateTable.setId(StringUtils.isEmpty(tableId) ? UuidUtils.getUUID() : tableId);
+		templateTable.setDataCode(templateTableElement.elementTextTrim("bookMarkName"));
+		templateTable.setXmlPath(templateTableElement.elementTextTrim("xmlPath"));
+		templateTable.setTableName(templateTableElement.elementTextTrim("tableName"));
+		return templateTable;
+	}
+	
+	/**
+	 * @Description: 解析小范本表单数据
+	 * @author chenxw
+	 * @param tenderId
+	 * @param supplierId
+	 * @param relChapterType
+	 * @param fileItemElementList
+	 * @return
+	 */
+	public static Optional<List<TemplateDataItem>> resolverObeTemplateDataItem(String tenderId, String supplierId, String relChapterType, List<Element> fileItemElementList, String bidFilePath) {
+		if (StringUtils.isEmpty(tenderId) || StringUtils.isEmpty(supplierId) || StringUtils.isEmpty(relChapterType) || CollectionUtils.isNull(fileItemElementList)) {
+			return Optional.empty();
+		}
+		return fileItemElementList.stream().filter(t -> {
+			return relChapterType.equals(t.elementTextTrim("chapterType"));
+		}).findAny().map(t -> {
+			return t.elementTextTrim("fileId");
+		}).map(t -> {
+			return t.concat(Constants.XML);
+		}).map(t -> {
+			return bidFilePath.concat(t);
+		}).map(XmlUtils::getXmlDocument).map(Document::getRootElement).map(t -> t.elements("dataItem")).map(l -> {
+			return streamElement(l).map(ParsingStructXmlUtils::initTemplateDataItem).peek(t -> {
+				t.setTenderId(tenderId);
+				t.setSupplierId(supplierId);
+				t.setRelChapterType(relChapterType);
+			}).collect(Collectors.toList());
+		});
+	}
+	
+	/**
+	 * @Description: 初始化小范本表格
+	 * @author chenxw
+	 * @param templateTableElement
+	 * @return
+	 */
+	private static TemplateDataItem initTemplateDataItem(Element templateDataItemElement) {
+		TemplateDataItem templateDataItem = new TemplateDataItem();
+		templateDataItem.setId(UuidUtils.getUUID());
+		templateDataItem.setDataCode(templateDataItemElement.elementTextTrim("id"));
+		templateDataItem.setName(templateDataItemElement.elementTextTrim("name"));
+		templateDataItem.setValue(templateDataItemElement.elementTextTrim("value"));
+		templateDataItem.setType(templateDataItemElement.elementTextTrim("type"));
+		templateDataItem.setDataType(templateDataItemElement.elementTextTrim("dataType"));
+		templateDataItem.setUnit(templateDataItemElement.elementTextTrim("unit"));
+		return templateDataItem;
+	}
+	
+	/**
+	 * @Description: 解析营业执照
+	 * @author chenxw
+	 * @param tenderId
+	 * @param modelDataId
+	 * @param xmlFilePath
+	 * @param consumer
+	 * @return
+	 */
+	public static Optional<List<BusinessLicense>> resolverBusinessLicense(String tenderId, String modelDataId, String xmlFilePath, Consumer<AttachmentFileOperation> consumer) {
+		return Optional.ofNullable(XmlUtils.getXmlDocument(xmlFilePath)).map(t -> t.getRootElement().elements("BusinessLicense")).map(l -> {
+			return streamElement(l).map(t -> {
+				BusinessLicense businessLicense = initBusinessLicense(t);
+				consumer.accept(new AttachmentFileOperation(tenderId, businessLicense.getId(), t.element("scanCertificate")));
+				return businessLicense;
+			}).peek(t -> {
+				t.setTenderId(tenderId);
+				t.setModelDataId(modelDataId);
+			}).collect(Collectors.toList());
+		});
+	}
+	
+	/**
+	 * @Description: 初始化营业执照
+	 * @author chenxw
+	 * @param businessLicenseElement
+	 * @return
+	 */
+	private static BusinessLicense initBusinessLicense(Element businessLicenseElement) {
+		BusinessLicense businessLicense = new BusinessLicense();
+		businessLicense.setId(UuidUtils.getUUID());
+		businessLicense.setRegisterNumber(businessLicenseElement.elementTextTrim("registerNumber"));
+		businessLicense.setCompanyName(businessLicenseElement.elementTextTrim("companyName"));
+		businessLicense.setCompanyType(businessLicenseElement.elementTextTrim("companyType"));
+		businessLicense.setCompanyAddress(businessLicenseElement.elementTextTrim("companyAddress"));
+		businessLicense.setLegalRepresentative(businessLicenseElement.elementTextTrim("legalRepresentative"));
+		businessLicense.setRegisterCapital(businessLicenseElement.elementTextTrim("registerCapital"));
+		businessLicense.setEstablishDate(businessLicenseElement.elementTextTrim("establishDate"));
+		businessLicense.setBusnissTermStartDate(businessLicenseElement.elementTextTrim("busnissTermStartDate"));
+		businessLicense.setBusnissTermEndtDate(businessLicenseElement.elementTextTrim("busnissTermEndDate"));
+		businessLicense.setBusinessScope(businessLicenseElement.elementTextTrim("businessScope"));
+		businessLicense.setRegisterInstitution(businessLicenseElement.elementTextTrim("registerInstitution"));
+		businessLicense.setIsPerpetual(businessLicenseElement.elementTextTrim("isPerpetual"));
+		businessLicense.setIsInAreaEnterprises(businessLicenseElement.elementTextTrim("isInAreaEnterprises"));
+		return businessLicense;
+	}
+	
+	/**
+	 * @Description: 解析财务报表
+	 * @author chenxw
+	 * @param tenderId
+	 * @param modelDataId
+	 * @param xmlFilePath
+	 * @param consumer
+	 * @return
+	 */
+	public static Optional<List<Finance>> resolverFinance(String tenderId, String modelDataId, String xmlFilePath, Consumer<AttachmentFileOperation> consumer) {
+		return Optional.ofNullable(XmlUtils.getXmlDocument(xmlFilePath)).map(t -> t.getRootElement().elements("Finance")).map(l -> {
+			return streamElement(l).map(t -> {
+				Finance finance = initFinance(t);
+				consumer.accept(new AttachmentFileOperation(tenderId, finance.getId(), t.element("scanFinance")));
+				return finance;
+			}).peek(t -> {
+				t.setTenderId(tenderId);
+				t.setModelDataId(modelDataId);
+//				t.getBalanceSheet().setTenderId(tenderId);
+//				t.getBalanceSheet().setFinanceId(t.getId());
+//				t.getProfitlossSheet().setTenderId(tenderId);
+//				t.getProfitlossSheet().setFinanceId(t.getId());
+//				t.getCashSheet().setTenderId(tenderId);
+//				t.getCashSheet().setFinanceId(t.getId());
+			}).collect(Collectors.toList());
+		});
+	}
+	
+	/**
+	 * @Description: 初始化财务报表
+	 * @author chenxw
+	 * @param financeElement
+	 * @return
+	 */
+	private static Finance initFinance(Element financeElement) {
+		Finance finance = new Finance();
+		finance.setId(UuidUtils.getUUID());
+		finance.setAnnual(financeElement.elementTextTrim("annual"));
+//		finance.setRegisteredCapital(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("registeredCapital")));
+		finance.setTotal(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("total")));
+		finance.setProfitLossProfit(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("profitLossprofit")));
+		finance.setOperatingIncome(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("operatingIncome")));
+		finance.setLiabilitiesRate(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("liabilitiesRate")));
+		finance.setCurrentAssets(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("currentAssets")));
+		finance.setCurrentLiabilities(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("currentLiabilities")));
+		finance.setCurrentRate(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("currentRate")));
+		finance.setProfitRatio(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("profitRatio")));
+		finance.setOperatingMargin(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("operatingMargin")));
+		finance.setRetainedProfits(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("retainedProfits")));
+		finance.setCompanyName(financeElement.elementTextTrim("companyName"));
+		finance.setNetWorth(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("netWorth")));
+//		finance.setFixedAssets(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("fixedAssets")));
+//		finance.setNetCashFlow(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("netCashFlow")));
+//		finance.setReturnOnEquity(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("returnOnEquity")));
+//		finance.setReturnOnTotalAsset(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("returnOnTotalAsset")));
+		finance.setQuickRatio(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("quickRatio")));
+		finance.setTotalliabilities(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("totalliabilities")));
+		finance.setTotalcost(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("totalcost")));
+		finance.setQuickassets(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("quickassets")));
+		finance.setMainIncomeProfits(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("mainIncomeProfits")));
+		finance.setPrimeOperatingRevenue(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("primeOperatingRevenue")));
+//		finance.setBalanceSheet(initBalanceSheet(financeElement.element("BalanceSheet")));
+//		finance.setProfitlossSheet(initProfitlossSheet(financeElement.element("ProfitLossSheet")));
+//		finance.setCashSheet(initCashSheet(financeElement.element("CashSheet")));
+		return finance;
+	}
+	
+	/**
+	 * @Description: 初始化资产负债表
+	 * @author chenxw
+	 * @param balanceSheetElement
+	 * @return
+	 */
+//	private static BalanceSheet initBalanceSheet(Element balanceSheetElement) {
+//		BalanceSheet balanceSheet = new BalanceSheet();
+//		balanceSheet.setId(UuidUtils.getUUID());
+//		balanceSheet.setBalanceTotal(ObjectUtils.getObjBigDecimal(balanceSheetElement.elementTextTrim("balanceTotal")));
+//		balanceSheet.setBalanceCecurrentAssets(ObjectUtils.getObjBigDecimal(balanceSheetElement.elementTextTrim("balanceCecurrentAssets")));
+//		balanceSheet.setInventory(ObjectUtils.getObjBigDecimal(balanceSheetElement.elementTextTrim("inventory")));
+//		balanceSheet.setReceivables(ObjectUtils.getObjBigDecimal(balanceSheetElement.elementTextTrim("receivables")));
+//		balanceSheet.setBadAssets(ObjectUtils.getObjBigDecimal(balanceSheetElement.elementTextTrim("badAssets")));
+//		balanceSheet.setBalanceTotalliabilities(ObjectUtils.getObjBigDecimal(balanceSheetElement.elementTextTrim("balanceTotalliabilities")));
+//		balanceSheet.setBalanceCurrentLiabilities(ObjectUtils.getObjBigDecimal(balanceSheetElement.elementTextTrim("balanceCurrentLiabilities")));
+//		balanceSheet.setOwnershipInterest(ObjectUtils.getObjBigDecimal(balanceSheetElement.elementTextTrim("ownershipInterest")));
+//		balanceSheet.setAbnormalIncrease(ObjectUtils.getObjBigDecimal(balanceSheetElement.elementTextTrim("abnormalIncrease")));
+//		return balanceSheet;
+//	}
+	
+	/**
+	 * @Description: 初始化损益表
+	 * @author chenxw
+	 * @param profitlossSheetElement
+	 * @return
+	 */
+//	private static ProfitlossSheet initProfitlossSheet(Element profitlossSheetElement) {
+//		ProfitlossSheet profitlossSheet = new ProfitlossSheet();
+//		profitlossSheet.setId(UuidUtils.getUUID());
+//		profitlossSheet.setMainIncome(ObjectUtils.getObjBigDecimal(profitlossSheetElement.elementTextTrim("mainIncome")));
+//		profitlossSheet.setMainCost(ObjectUtils.getObjBigDecimal(profitlossSheetElement.elementTextTrim("mainCost")));
+//		profitlossSheet.setFinancialCost(ObjectUtils.getObjBigDecimal(profitlossSheetElement.elementTextTrim("financialCost")));
+//		profitlossSheet.setOtherCosts(ObjectUtils.getObjBigDecimal(profitlossSheetElement.elementTextTrim("otherCosts")));
+//		profitlossSheet.setDevelopmentAndTransferCosts(ObjectUtils.getObjBigDecimal(profitlossSheetElement.elementTextTrim("developmentAndTransferCosts")));
+//		profitlossSheet.setProfitLossprofit(ObjectUtils.getObjBigDecimal(profitlossSheetElement.elementTextTrim("profitLossprofit")));
+//		profitlossSheet.setProfitRetainedProfits(ObjectUtils.getObjBigDecimal(profitlossSheetElement.elementTextTrim("profitRetainedProfits")));
+//		return profitlossSheet;
+//	}
+	
+	/**
+	 * @Description: 初始化现金流量表
+	 * @author chenxw
+	 * @param cashSheetElement
+	 * @return
+	 */
+//	private static CashSheet initCashSheet(Element cashSheetElement) {
+//		CashSheet cashSheet = new CashSheet();
+//		cashSheet.setId(UuidUtils.getUUID());
+//		cashSheet.setOperatingNetCashFlow(ObjectUtils.getObjBigDecimal(cashSheetElement.elementTextTrim("operatingNetCashFlow")));
+//		return cashSheet;
+//	}
+	
+	/**
+	 * @Description: 解析业绩
+	 * @author chenxw
+	 * @param tenderId
+	 * @param modelDataId
+	 * @param xmlFilePath
+	 * @param consumer
+	 * @param mark 
+	 * @return
+	 */
+	public static Optional<List<Performance>> resolverPerformance(String tenderId, String modelDataId, String xmlFilePath, Consumer<AttachmentFileOperation> consumer, String mark) {
+		return Optional.ofNullable(XmlUtils.getXmlDocument(xmlFilePath)).map(t -> t.getRootElement().elements("Performance")).map(l -> {
+			return streamElement(l).filter(t -> {
+				if(null != mark ) {
+					return mark.equals(t.elementTextTrim("status"));
+				}else {
+					return false;
+				}
+			}).map(t -> {
+				Performance performance = initPerformance(t);
+				consumer.accept(new AttachmentFileOperation(tenderId, performance.getId(), t.element("scanSingning")));
+				return performance;
+			}).peek(t -> {
+				t.setTenderId(tenderId);
+				t.setModelDataId(modelDataId);
+			}).collect(Collectors.toList());
+		});
+	}
+	
+	/**
+	 * @Description: 初始化业绩
+	 * @author chenxw
+	 * @param performanceElement
+	 * @return
+	 */
+	private static Performance initPerformance(Element performanceElement) {
+		Performance performance = new Performance();
+		performance.setId(UuidUtils.getUUID());
+		performance.setPurchasingUnit(performanceElement.elementTextTrim("purchasingUnit"));
+		performance.setPartner(performanceElement.elementTextTrim("partner"));
+		performance.setProjectName(performanceElement.elementTextTrim("projectName"));
+		performance.setSingningDate(performanceElement.elementTextTrim("singningDate"));
+		performance.setEndTime(performanceElement.elementTextTrim("endTime"));
+		performance.setSingningTotal(performanceElement.elementTextTrim("singningTotal"));
+		performance.setPurchaser(performanceElement.elementTextTrim("purchaser"));
+		performance.setPurchaserPhone(performanceElement.elementTextTrim("purchaserPhone"));
+		performance.setStatus(performanceElement.elementTextTrim("status"));
+		performance.setSupplierName(performanceElement.elementTextTrim("supplierName"));
+		performance.setProjectAddress(performanceElement.elementTextTrim("projectAddress"));
+		performance.setBuyerName(performanceElement.elementTextTrim("buyerName"));
+		performance.setBuyerAddress(performanceElement.elementTextTrim("buyerAddress"));
+		performance.setBuyerPhoneNumber(performanceElement.elementTextTrim("buyerPhoneNumber"));
+		performance.setStartTime(performanceElement.elementTextTrim("startTime"));
+		performance.setWorkUndertaken(performanceElement.elementTextTrim("workUndertaken"));
+		performance.setProjectQuantity(performanceElement.elementTextTrim("projectQuantity"));
+		performance.setProjectManager(performanceElement.elementTextTrim("projectManager"));
+		performance.setTechnicalDirector(performanceElement.elementTextTrim("technicalDirector"));
+		performance.setChiefSupervisionEngineer(performanceElement.elementTextTrim("chiefSupervisionEngineer"));
+		performance.setCsePhoneNumber(performanceElement.elementTextTrim("CSEPhoneNumber"));
+		performance.setProjectDesc(performanceElement.elementTextTrim("projectDesc"));
+		performance.setProjectRangeAndContent(performanceElement.elementTextTrim("projectRangeAndContent"));
+		performance.setSupplierWorkerCountmax(performanceElement.elementTextTrim("supplierWorkerCountMax"));
+		performance.setSupplierWorkerCountave(performanceElement.elementTextTrim("supplierWorkerCountAve"));
+		performance.setProjectDeviceResult(performanceElement.elementTextTrim("projectDeviceResult"));
+		performance.setBuyerLinkman(performanceElement.elementTextTrim("buyerLinkman"));
+		performance.setIsHavrAccessory(performanceElement.elementTextTrim("isHavrAccessory"));
+		performance.setIsOurCompanyProject(performanceElement.elementTextTrim("isOurCompanyProject"));
+		performance.setServiceScope(performanceElement.elementTextTrim("serviceScope"));
+		performance.setDeviceName(performanceElement.elementTextTrim("deviceName"));
+		performance.setDevicetypeSpecification(performanceElement.elementTextTrim("devicetypeSpecification"));
+		performance.setTotalCapacity(performanceElement.elementTextTrim("totalCapacity"));
+		performance.setNumber(performanceElement.elementTextTrim("number"));
+		performance.setContractTime(performanceElement.elementTextTrim("contractTime"));
+		performance.setCommissioningTime(performanceElement.elementTextTrim("commissioningTime"));
+		performance.setMemo(performanceElement.elementTextTrim("memo"));
+		performance.setProjectScale(performanceElement.elementTextTrim("projectScale"));
+		performance.setProfessionalNumber(performanceElement.elementTextTrim("professionalNumber"));
+		performance.setProfessionalWorkload(performanceElement.elementTextTrim("professionalWorkload"));
+		performance.setPartnerProfessionalWorkload(performanceElement.elementTextTrim("partnerProfessionalWorkload"));
+		performance.setSupervisionCcontent(performanceElement.elementTextTrim("supervisionCcontent"));
+		performance.setSupervisionResult(performanceElement.elementTextTrim("supervisionResult"));
+		performance.setKeyStaffProfessionalAndDuty(performanceElement.elementTextTrim("keyStaffProfessionalAndDuty"));
+		performance.setServiceDesc(performanceElement.elementTextTrim("serviceDesc"));
+		performance.setExecutionDate(performanceElement.elementTextTrim("serviceDesc"));
+		performance.setProjectScaleAndType(performanceElement.elementTextTrim("projectScaleAndType"));
+		performance.setDesignStage(performanceElement.elementTextTrim("designStage"));
+		performance.setDesignRange(performanceElement.elementTextTrim("designRange"));
+		performance.setCooperationWay(performanceElement.elementTextTrim("cooperationWay"));
+		performance.setContractExecuteCondition(performanceElement.elementTextTrim("contractExecuteCondition"));
+		return performance;
+	}
+	
+	/**
+	 * @Description: 解析投标人基本情况
+	 * @author chenxw
+	 * @param tenderId
+	 * @param modelDataId
+	 * @param xmlFilePath
+	 * @return
+	 */
+	public static Optional<List<BidderBasicInfo>> resolverBidderBasicInfo(String tenderId, String modelDataId, String xmlFilePath, Consumer<AttachmentFileOperation> consumer) {
+		return Optional.ofNullable(XmlUtils.getXmlDocument(xmlFilePath)).map(t -> t.getRootElement().elements("bidderBasicInfo")).map(l -> {
+			return streamElement(l).map(t -> {
+				BidderBasicInfo bidderBasicInfo = initBidderBasicInfo(t);
+				consumer.accept(new AttachmentFileOperation(tenderId, bidderBasicInfo.getId(), t.element("scanCertificate")));
+				return bidderBasicInfo;
+			}).peek(t -> {
+				t.setTenderId(tenderId);
+				t.setModelDataId(modelDataId);
+			}).collect(Collectors.toList());
+		});
+	}
+	
+	/**
+	 * @Description: 初始化投标人基本情况
+	 * @author chenxw
+	 * @param bidderBasicInfoElement
+	 * @return
+	 */
+	private static BidderBasicInfo initBidderBasicInfo(Element bidderBasicInfoElement) {
+		BidderBasicInfo bidderBasicInfo = new BidderBasicInfo();
+		bidderBasicInfo.setId(UuidUtils.getUUID());
+		bidderBasicInfo.setCompanyName(bidderBasicInfoElement.elementTextTrim("companyName"));
+		bidderBasicInfo.setRegisterLocation(bidderBasicInfoElement.elementTextTrim("registerLocation"));
+		bidderBasicInfo.setPostalCode(bidderBasicInfoElement.elementTextTrim("postalCode"));
+		bidderBasicInfo.setLinkMan(bidderBasicInfoElement.elementTextTrim("linkMan"));
+		bidderBasicInfo.setLinkManPhone(bidderBasicInfoElement.elementTextTrim("linkManPhone"));
+		bidderBasicInfo.setLinkManFax(bidderBasicInfoElement.elementTextTrim("linkManFax"));
+		bidderBasicInfo.setLinkManWebsite(bidderBasicInfoElement.elementTextTrim("linkManWebSite"));
+		bidderBasicInfo.setOrgStructure(bidderBasicInfoElement.elementTextTrim("orgStructure"));
+		bidderBasicInfo.setLegalRepresentativeName(bidderBasicInfoElement.elementTextTrim("legalRepresentativeName"));
+		bidderBasicInfo.setLegalRepresentativeTitle(bidderBasicInfoElement.elementTextTrim("legalRepresentativeTitle"));
+		bidderBasicInfo.setLegalRepresentativePhone(bidderBasicInfoElement.elementTextTrim("legalRepresentativePhone"));
+		bidderBasicInfo.setTechnicalDirectorName(bidderBasicInfoElement.elementTextTrim("technicalDirectorName"));
+		bidderBasicInfo.setTechnicalDirectorTitle(bidderBasicInfoElement.elementTextTrim("technicalDirectorTitle"));
+		bidderBasicInfo.setTechnicalDirectorPhone(bidderBasicInfoElement.elementTextTrim("technicalDirectorPhone"));
+		bidderBasicInfo.setSetupTime(bidderBasicInfoElement.elementTextTrim("setupTime"));
+		bidderBasicInfo.setCompanyQualificationLevel(bidderBasicInfoElement.elementTextTrim("companyQualificationLevel"));
+		bidderBasicInfo.setRegisteredCapital(bidderBasicInfoElement.elementTextTrim("registeredCapital"));
+		bidderBasicInfo.setDepositBank(bidderBasicInfoElement.elementTextTrim("depositBank"));
+		bidderBasicInfo.setBussinessLicense(bidderBasicInfoElement.elementTextTrim("bussinessLicense"));
+		bidderBasicInfo.setBankAccount(bidderBasicInfoElement.elementTextTrim("bankAccount"));
+		bidderBasicInfo.setEmployeeNumber(bidderBasicInfoElement.elementTextTrim("employeeNumber"));
+		bidderBasicInfo.setPurchaserNumber(bidderBasicInfoElement.elementTextTrim("purchaserNumber"));
+		bidderBasicInfo.setSeniorProfessionalPostNumber(bidderBasicInfoElement.elementTextTrim("seniorProfessionalPostNumber"));
+		bidderBasicInfo.setMediumProfessionalPostNumber(bidderBasicInfoElement.elementTextTrim("mediumProfessionalPostNumber"));
+		bidderBasicInfo.setPrimaryProfessionalPostNumber(bidderBasicInfoElement.elementTextTrim("primaryProfessionalPostNumber"));
+		bidderBasicInfo.setArtisanNumber(bidderBasicInfoElement.elementTextTrim("artisanNumber"));
+		bidderBasicInfo.setBusinessScope(bidderBasicInfoElement.elementTextTrim("businessScope"));
+		bidderBasicInfo.setEnterpriseNature(bidderBasicInfoElement.elementTextTrim("enterpriseNature"));
+		bidderBasicInfo.setEquityStructure(bidderBasicInfoElement.elementTextTrim("equityStructure"));
+		bidderBasicInfo.setRelatedCompanyInfo(bidderBasicInfoElement.elementTextTrim("relatedCompanyInfo"));
+		bidderBasicInfo.setServiceAbility(bidderBasicInfoElement.elementTextTrim("serviceAbility"));
+		bidderBasicInfo.setPreInputDevice(bidderBasicInfoElement.elementTextTrim("preInputDevice"));
+		bidderBasicInfo.setMemo(bidderBasicInfoElement.elementTextTrim("memo"));
+		return bidderBasicInfo;
+	}
+	
+	/**
+	 * @Description: 解析认证证书
+	 * @author chenxw
+	 * @param tenderId
+	 * @param modelDataId
+	 * @param xmlFilePath
+	 * @param consumer
+	 * @return
+	 */
+	public static Optional<List<Qualification>> resolverQualification(String tenderId, String modelDataId, String xmlFilePath, Consumer<AttachmentFileOperation> consumer) {
+		return Optional.ofNullable(XmlUtils.getXmlDocument(xmlFilePath)).map(t -> t.getRootElement().elements("Qualification")).map(l -> {
+			return streamElement(l).map(t -> {
+				Qualification qualification = initQualification(t);
+				consumer.accept(new AttachmentFileOperation(tenderId, qualification.getId(), t.element("scanCertificate")));
+				return qualification;
+			}).peek(t -> {
+				t.setTenderId(tenderId);
+				t.setModelDataId(modelDataId);
+			}).collect(Collectors.toList());
+		});
+	}
+	
+	/**
+	 * @Description: 初始化认证证书
+	 * @author chenxw
+	 * @param qualificationElement
+	 * @return
+	 */
+	private static Qualification initQualification(Element qualificationElement) {
+		Qualification qualification = new Qualification();
+		qualification.setId(UuidUtils.getUUID());
+		qualification.setCertificateName(qualificationElement.elementTextTrim("certificateName"));
+		qualification.setAwardProjectName(qualificationElement.elementTextTrim("awardProjectName"));
+		qualification.setCompanyName(qualificationElement.elementTextTrim("companyName"));
+		qualification.setAwardLevel(qualificationElement.elementTextTrim("awardLevel"));
+		qualification.setCertificateNumber(qualificationElement.elementTextTrim("certificateNumber"));
+		qualification.setIssueAuthority(qualificationElement.elementTextTrim("issueAuthority"));
+		qualification.setIssueDate(qualificationElement.elementTextTrim("issueDate"));
+		qualification.setPeriodValidity(qualificationElement.elementTextTrim("periodValidity"));
+		qualification.setProjectName(qualificationElement.elementTextTrim("projectName"));
+		return qualification;
+	}
+	
+	/**
+	 * @Description: 解析项目负责人
+	 * @author chenxw
+	 * @param tenderId
+	 * @param modelDataId
+	 * @param xmlFilePath
+	 * @param consumer
+	 * @return
+	 */
+	public static Optional<List<ProjectLeader>> resolverProjectLeader(String tenderId, String modelDataId, String xmlFilePath, Consumer<AttachmentFileOperation> consumer) {
+		return Optional.ofNullable(XmlUtils.getXmlDocument(xmlFilePath)).map(t -> t.getRootElement().elements("projectLeader")).map(l -> {
+			return streamElement(l).map(t -> {
+				ProjectLeader projectLeader = initProjectLeader(t);
+				consumer.accept(new AttachmentFileOperation(tenderId, projectLeader.getId(), t.element("scanSingningList")));
+				projectLeader.setCertificateList(resolverCertificate(tenderId, projectLeader.getId(), t.element("certificateList"), consumer));
+				projectLeader.setWorkExperienceList(resolverWorkExperience(t.element("workExperienceList"), tenderId, projectLeader.getId()));
+				return projectLeader;
+			}).peek(t -> {
+				t.setTenderId(tenderId);
+				t.setModelDataId(modelDataId);
+			}).collect(Collectors.toList());
+		});
+	}
+	
+	/**
+	 * @Description: 初始化项目负责人
+	 * @author chenxw
+	 * @param qualificationElement
+	 * @return
+	 */
+	private static ProjectLeader initProjectLeader(Element projectLeaderElement) {
+		ProjectLeader projectLeader = new ProjectLeader();
+		projectLeader.setId(UuidUtils.getUUID());
+		projectLeader.setCompanyName(projectLeaderElement.elementTextTrim("companyName"));
+		projectLeader.setLeaderName(projectLeaderElement.elementTextTrim("leaderName"));
+		projectLeader.setIdnumber(projectLeaderElement.elementTextTrim("idnumber"));
+		projectLeader.setAge(projectLeaderElement.elementTextTrim("age"));
+		projectLeader.setJobTitle(projectLeaderElement.elementTextTrim("jobTitle"));
+		projectLeader.setWorkExperience(projectLeaderElement.elementTextTrim("workExperience"));
+		projectLeader.setCurrentMajorExperience(projectLeaderElement.elementTextTrim("currentMajorExperience"));
+		projectLeader.setGraduateSchool(projectLeaderElement.elementTextTrim("graduateSchool"));
+		projectLeader.setGraduateMajor(projectLeaderElement.elementTextTrim("graduateMajor"));
+		projectLeader.setEducation(projectLeaderElement.elementTextTrim("education"));
+		projectLeader.setProfessionalTitle(projectLeaderElement.elementTextTrim("professionalTitle"));
+		projectLeader.setIsLeaderFlag(projectLeaderElement.elementTextTrim("isLeaderFlag"));
+		return projectLeader;
+	}
+	
+	/**
+	 * @Description: 解析证书信息
+	 * @author chenxw
+	 * @param tenderId
+	 * @param projectLeaderId
+	 * @param certificateListElement
+	 * @param consumer
+	 * @return
+	 */
+	private static List<Certificate> resolverCertificate(String tenderId, String projectLeaderId, Element certificateListElement, Consumer<AttachmentFileOperation> consumer) {
+		return Optional.ofNullable(certificateListElement).map(t -> t.elements("projectLeaderCertificate")).map(l -> {
+			return streamElement(l).map(t -> {
+				Certificate certificate = initCertificate(t);
+				consumer.accept(new AttachmentFileOperation(tenderId, certificate.getId(), t.element("scanCertificate"), true));
+				return certificate;
+			}).peek(t -> {
+				t.setTenderId(tenderId);
+				t.setProjectLeaderId(projectLeaderId);
+			}).collect(Collectors.toList());
+		}).orElse(null);
+	}
+	
+	/**
+	 * @Description: 初始化证书信息
+	 * @author chenxw
+	 * @param projectLeaderCertificateElement
+	 * @return
+	 */
+	private static Certificate initCertificate(Element projectLeaderCertificateElement) {
+		Certificate certificate = new Certificate();
+		certificate.setId(UuidUtils.getUUID());
+		certificate.setCertificateNo(projectLeaderCertificateElement.elementTextTrim("certificateNo"));
+		certificate.setCertificateName(projectLeaderCertificateElement.elementTextTrim("certificateName"));
+		certificate.setCertificateLevel(projectLeaderCertificateElement.elementTextTrim("certificateLevel"));
+		certificate.setSortNo(Optional.ofNullable(projectLeaderCertificateElement.elementTextTrim("SortNo")).map(Integer::valueOf).orElse(Integer.MAX_VALUE));
+		return certificate;
+	}
+	
+	/**
+	 * @Description: 解析工作经历列表
+	 * @author chenxw
+	 * @param workExperienceListElement
+	 * @param tenderId
+	 * @param projectLeaderId
+	 * @return 
+	 */
+	private static List<WorkExperience> resolverWorkExperience(
+			Element workExperienceListElement, 
+			String tenderId, 
+			String projectLeaderId) {
+		return Optional.ofNullable(workExperienceListElement)
+				.map(Element::elements)
+				.map(l -> IntStream.range(0, l.size())
+						.mapToObj(i -> initWorkExperience((Element) l.get(i), i))
+						.peek(t -> {
+							t.setTenderId(tenderId);
+							t.setProjectLeaderId(projectLeaderId);
+						})
+						.collect(Collectors.toList()))
+				.orElse(null);
+	}
+	
+	/**
+	 * @Description: 初始化工作经历
+	 * @author chenxw
+	 * @param workExperienceElement
+	 * @param
+	 * @return
+	 */
+	private static WorkExperience initWorkExperience(Element workExperienceElement, int sortNo) {
+		return Optional.of(workExperienceElement).map(e -> {
+			WorkExperience workExperience = new WorkExperience();
+			workExperience.setId(UuidUtils.getUUID());
+			workExperience.setTime(e.elementTextTrim("time"));
+			workExperience.setProjectName(e.elementTextTrim("projectName"));
+			workExperience.setJobTitle(e.elementTextTrim("jobTitle"));
+			workExperience.setContractInfo(e.elementTextTrim("contractInfo"));
+			workExperience.setCapacity(e.elementTextTrim("capacity"));
+			workExperience.setBearWork(e.elementTextTrim("bearWork"));
+			workExperience.setSortNo(sortNo);
+			return workExperience;
+		}).get();
+	}
+	
+	/**
+	 * @Description: 解析附件信息
+	 * @author chenxw
+	 * @param attachmentFileOperation
+	 * @return
+	 */
+	public static Optional<List<AttachmentFile>> resolverAttachmentFile(AttachmentFileOperation attachmentFileOperation) {
+		System.out.println("resolverAttachmentFile");
+		Optional<AttachmentFileOperation> attachmentFileOperationOptional = Optional.ofNullable(attachmentFileOperation);
+		Consumer<AttachmentFile> action = a -> {
+			attachmentFileOperationOptional.map(t -> t.tenderId).ifPresent(t -> a.setTenderId(t));
+			attachmentFileOperationOptional.map(t -> t.businessId).ifPresent(t -> a.setBusinessId(t));
+		};
+		if (attachmentFileOperation.single) return attachmentFileOperationOptional.map(t -> t.element)
+				.map(e -> Stream.of(e).map(ParsingStructXmlUtils::initAttachmentFile).peek(action).collect(Collectors.toList()));
+		return attachmentFileOperationOptional.map(t -> t.element).map(t -> t.elements("attachmentFileWithSign"))
+				.map(l -> streamElement(l).map(ParsingStructXmlUtils::initAttachmentFile).peek(action).collect(Collectors.toList()));
+	}
+	
+	/**
+	 * @Description: 初始化附件信息
+	 * @author chenxw
+	 * @param attachmentFileWithSignElement
+	 * @return
+	 */
+	private static AttachmentFile initAttachmentFile(Element attachmentFileWithSignElement) {
+		AttachmentFile attachmentFile = new AttachmentFile();
+		attachmentFile.setId(UuidUtils.getUUID());
+		attachmentFile.setCreateTime(BusinessNowTimeUtils.getNowDate());
+		attachmentFile.setFileUrl(attachmentFileWithSignElement.elementTextTrim("DownloadUrl"));
+		attachmentFile.setFileName(attachmentFileWithSignElement.elementTextTrim("FileName"));
+		return attachmentFile;
+	}
+	
+	/**
+	 * @Description: 附件信息操作类
+	 * @author chenxw
+	 */
+	public static class AttachmentFileOperation {
+		
+		private final String tenderId;
+		private final String businessId;
+		private final Element element;
+		private final boolean single;
+		
+		/** 
+		 * @author chenxw
+		 * @param tenderId
+		 * @param businessId
+		 * @param element 
+		 */
+		public AttachmentFileOperation(String tenderId, String businessId, Element element) {
+			this(tenderId, businessId, element, false);
+		}
+		
+		/** 
+		 * @author chenxw
+		 * @param tenderId
+		 * @param businessId
+		 * @param element
+		 * @param single 
+		 */
+		public AttachmentFileOperation(String tenderId, String businessId, Element element, boolean single) {
+			this.tenderId = tenderId;
+			this.businessId = businessId;
+			this.element = element;
+			this.single = single;
+		}
+		
+	}
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/value_list/CreditGrade.java b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/CreditGrade.java
new file mode 100644
index 00000000..1eca7130
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/CreditGrade.java
@@ -0,0 +1,43 @@
+package com.gx.obe.struct.value_list;
+
+import java.math.BigDecimal;
+
+/** 
+ * @Description: EQ_Qualification_ZXDJ
+ * @author wangxiang 
+ */
+public class CreditGrade {
+	
+	private String orgName;
+	
+	private String issueOrgName;
+	
+	private String grade;
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public String getIssueOrgName() {
+		return issueOrgName;
+	}
+
+	public void setIssueOrgName(String issueOrgName) {
+		this.issueOrgName = issueOrgName;
+	}
+
+	public String getGrade() {
+		return grade;
+	}
+
+	public void setGrade(String grade) {
+		this.grade = grade;
+	}
+
+	
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/value_list/Finance.java b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/Finance.java
new file mode 100644
index 00000000..ae8b7f01
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/Finance.java
@@ -0,0 +1,42 @@
+package com.gx.obe.struct.value_list;
+
+import java.math.BigDecimal;
+
+/** 
+ * @Description: EQ_ProfitRatio
+ * @author wangxiang 
+ */
+public class Finance {
+	
+	private String orgName;
+	
+	private int annual;
+	
+	private BigDecimal value;
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public int getAnnual() {
+		return annual;
+	}
+
+	public void setAnnual(int annual) {
+		this.annual = annual;
+	}
+
+	public BigDecimal getValue() {
+		return value;
+	}
+
+	public void setValue(BigDecimal value) {
+		this.value = value;
+	}
+	
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/value_list/Goods.java b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/Goods.java
new file mode 100644
index 00000000..0adb2d3e
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/Goods.java
@@ -0,0 +1,41 @@
+package com.gx.obe.struct.value_list;
+
+/** 
+ * @Description: EQ_ProfitRatio
+ * @author wangxiang 
+ */
+public class Goods {
+	
+	private String goodsName;
+	
+	private String goodsUnit;
+	
+	private int goodsQuantity;
+
+	public String getGoodsName() {
+		return goodsName;
+	}
+
+	public void setGoodsName(String goodsName) {
+		this.goodsName = goodsName;
+	}
+
+	public String getGoodsUnit() {
+		return goodsUnit;
+	}
+
+	public void setGoodsUnit(String goodsUnit) {
+		this.goodsUnit = goodsUnit;
+	}
+
+	public int getGoodsQuantity() {
+		return goodsQuantity;
+	}
+
+	public void setGoodsQuantity(int goodsQuantity) {
+		this.goodsQuantity = goodsQuantity;
+	}
+	
+	
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/value_list/ParamValue.java b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/ParamValue.java
new file mode 100644
index 00000000..51c2b233
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/ParamValue.java
@@ -0,0 +1,31 @@
+package com.gx.obe.struct.value_list;
+
+/** 
+ * @Description: 
+ * @author wangxiang 
+ */
+public class ParamValue {
+	
+	private String dataType;
+	
+	private String dataValue;
+
+	public String getDataType() {
+		return dataType;
+	}
+
+	public void setDataType(String dataType) {
+		this.dataType = dataType;
+	}
+
+	public String getDataValue() {
+		return dataValue;
+	}
+
+	public void setDataValue(String dataValue) {
+		this.dataValue = dataValue;
+	}
+	
+
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/value_list/ParamValues.java b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/ParamValues.java
new file mode 100644
index 00000000..e8eb17ce
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/ParamValues.java
@@ -0,0 +1,23 @@
+package com.gx.obe.struct.value_list;
+
+import java.util.List;
+
+/** 
+ * @Description: 
+ * @author wangxiang 
+ */
+public class ParamValues {
+	
+	private List<ParamValue> paramValueList;
+
+	public List<ParamValue> getParamValueList() {
+		return paramValueList;
+	}
+
+	public void setParamValueList(List<ParamValue> paramValueList) {
+		this.paramValueList = paramValueList;
+	}
+	
+
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/value_list/Performance.java b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/Performance.java
new file mode 100644
index 00000000..8fe56725
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/Performance.java
@@ -0,0 +1,43 @@
+package com.gx.obe.struct.value_list;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/** 
+ * @Description: EQ_Achievements
+ * @author wangxiang 
+ */
+public class Performance {
+	
+	private String orgName;
+	
+	private int performanceCount;
+	
+	private List<SimilarProduct> similarProductList;
+
+	public String getOrgName() {
+		return orgName;
+	}
+
+	public void setOrgName(String orgName) {
+		this.orgName = orgName;
+	}
+
+	public int getPerformanceCount() {
+		return performanceCount;
+	}
+
+	public void setPerformanceCount(int performanceCount) {
+		this.performanceCount = performanceCount;
+	}
+
+	public List<SimilarProduct> getSimilarProductList() {
+		return similarProductList;
+	}
+
+	public void setSimilarProductList(List<SimilarProduct> similarProductList) {
+		this.similarProductList = similarProductList;
+	}
+
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/value_list/SimilarProduct.java b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/SimilarProduct.java
new file mode 100644
index 00000000..58215492
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/value_list/SimilarProduct.java
@@ -0,0 +1,64 @@
+package com.gx.obe.struct.value_list;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/** 
+ * @Description: EQ_ProfitRatio
+ * @author wangxiang 
+ */
+public class SimilarProduct {
+	
+	private String id;
+	
+	private String productName;
+	
+	private String productUnit;
+	
+	private int baseCount;
+	
+	private List<Goods> goodList;
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getProductName() {
+		return productName;
+	}
+
+	public void setProductName(String productName) {
+		this.productName = productName;
+	}
+
+	public String getProductUnit() {
+		return productUnit;
+	}
+
+	public void setProductUnit(String productUnit) {
+		this.productUnit = productUnit;
+	}
+
+	public int getBaseCount() {
+		return baseCount;
+	}
+
+	public void setBaseCount(int baseCount) {
+		this.baseCount = baseCount;
+	}
+
+	public List<Goods> getGoodList() {
+		return goodList;
+	}
+
+	public void setGoodList(List<Goods> goodList) {
+		this.goodList = goodList;
+	}
+	
+
+	
+}
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/widget/TabButton.java b/com.gx.obe.struct/src/com/gx/obe/struct/widget/TabButton.java
new file mode 100644
index 00000000..bc812c94
--- /dev/null
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/widget/TabButton.java
@@ -0,0 +1,68 @@
+package com.gx.obe.struct.widget;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+import com.gx.obe.bind.prop.Prop;
+import com.gx.obe.bind.recursion.Recursions;
+import com.gx.obe.component.handler.ISelection;
+import com.swtdesigner.SWTResourceManager;
+
+public class TabButton extends Composite implements ISelection {
+	
+	private Prop<Boolean> selection = new Prop<>(false);
+	
+	private Prop<String> text = new Prop<>();
+	
+	public TabButton(Composite parent) {
+		super(parent, SWT.NONE);
+		GridLayout gridLayout = new GridLayout(1, false);
+		gridLayout.marginTop = 5;
+		gridLayout.marginHeight = 0;
+		gridLayout.marginWidth = 0;
+		setLayout(gridLayout);
+		
+		Composite composite = new Composite(this, SWT.NONE);
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		GridLayout gl_composite = new GridLayout(1, false);
+		gl_composite.marginWidth = 30;
+		gl_composite.marginHeight = 0;
+		composite.setLayout(gl_composite);
+		
+		Label lblNewLabel = new Label(composite, SWT.NONE);
+		lblNewLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		lblNewLabel.setFont(SWTResourceManager.getFont("Microsoft YaHei UI", 10, SWT.BOLD));
+		text.bind(lblNewLabel::setText);
+		selection.bindExe(t -> lblNewLabel.setForeground(t ? SWTResourceManager.getColor(2, 71, 191) : SWTResourceManager.getColor(0, 0, 0)));
+		
+		Label label = new Label(this, SWT.NONE);
+		GridData gd_label = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
+		gd_label.heightHint = 2;
+		label.setLayoutData(gd_label);
+		selection.bindExe(t -> label.setBackground(t ? SWTResourceManager.getColor(2, 71, 191) : SWTResourceManager.getColor(SWT.COLOR_WHITE)));
+	}
+	
+	@Override
+	public void setText(String text) {
+		this.text.set(text);
+	}
+	
+	@Override
+	public void setSelection(boolean selection) {
+		this.selection.set(selection);
+	}
+	
+	@Override
+	public void addMouseListener(MouseListener mouseListener) {
+		Recursions.array((Control c) -> c instanceof Composite ? ((Composite) c).getChildren() : null).toStream(this.getChildren()).forEach(c -> c.addMouseListener(mouseListener));
+	}
+	
+	@Override
+	protected void checkSubclass() {}
+
+}
-- 
2.24.1