From d45e3f29e1b28eac1fcf8c787c3cd9a01ab4084c Mon Sep 17 00:00:00 2001
From: huangzhong <568134056@qq.com>
Date: Wed, 12 Jun 2024 10:14:28 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=BB=93=E6=9E=84=E8=AF=9D?=
 =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../step/composite/AiEvalLeftButton.java      |  165 ++
 .../composite/FactorEvaluationComposite.java  |  100 +-
 .../step/dialog/ShowViewAiProcessDialog.java  |  103 ++
 .../ScoreEvaluationTableComposite.java        |    2 +-
 .../step/shell/ShowAiProcessShell.java        |  198 +++
 BID-EVALUATION/splash.bmp                     |  Bin 403614 -> 403614 bytes
 BID-OPENING/splash.bmp                        |  Bin 403614 -> 403614 bytes
 .../thread/RemoteDecryptStatusThread.java     |    1 +
 OBE-COMMON-ICONS/icons/login/logo.png         |  Bin 9967 -> 14121 bytes
 OBE-COMPONENTS-CORE/resource/bidder.xml       |   52 +-
 .../gx/obe/components/core/vo/Finance.java    |   85 +
 .../gx/obe/components/core/vo/TableXML.java   |   16 +-
 .../com/gx/obe/message/messages.properties    |   34 +-
 .../src/com/gx/obe/message/Messages.java      |   58 +-
 .../com/gx/obe/message/messages.properties    |   34 +-
 .../com/gx/obe/management/text/ExcelTest.java |  197 +++
 .../com/gx/obe/management/text/PoiModel.java  |   54 +
 OBE-REPORT/META-INF/MANIFEST.MF               |    2 +
 .../dataset/excel/ScoreDetailedDateSet.java   |    2 +
 .../excel/TechnicalComparisonDateSet.java     |  198 +++
 .../common/file/utils/ParsingXmlUtils.java    |   14 +-
 .../component/comparison/ComparisonData.java  |   10 +-
 .../component/comparison/ComparisonTable.java |   95 +-
 com.gx.obe.struct/META-INF/MANIFEST.MF        |    3 +-
 com.gx.obe.struct/build.properties            |    1 +
 .../src/com/gx/obe/struct/beans/Finance.java  |  372 -----
 .../gx/obe/struct/beans/StructDateInfo.java   |    2 +
 .../src/com/gx/obe/struct/beans/Td.java       |    8 +-
 .../ClearBidReviewEntryComposite.java         |  317 ----
 .../composite/EvaluationContentComposite.java |  242 ---
 .../struct/composite/ModelDataComposite.java  |  129 --
 .../TemplateTableComparisonComposite.java     |  139 +-
 .../composite/TemplateTableListComposite.java |    2 +-
 .../obe/struct/factory/ModelDataFactory.java  | 1481 -----------------
 .../gx/obe/struct/service/FinanceService.java |    2 +-
 .../struct/thread/ParsingStructThread.java    |    8 -
 .../struct/utils/ParsingStructXmlUtils.java   |   36 +-
 37 files changed, 1397 insertions(+), 2765 deletions(-)
 create mode 100644 BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/composite/AiEvalLeftButton.java
 create mode 100644 BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/dialog/ShowViewAiProcessDialog.java
 create mode 100644 BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/shell/ShowAiProcessShell.java
 create mode 100644 OBE-MANAGEMENT/src/com/gx/obe/management/text/ExcelTest.java
 create mode 100644 OBE-MANAGEMENT/src/com/gx/obe/management/text/PoiModel.java
 create mode 100644 OBE-REPORT/src/com/gx/obe/report/dataset/excel/TechnicalComparisonDateSet.java
 delete mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/beans/Finance.java
 delete mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/composite/ClearBidReviewEntryComposite.java
 delete mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/composite/EvaluationContentComposite.java
 delete mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/composite/ModelDataComposite.java
 delete mode 100644 com.gx.obe.struct/src/com/gx/obe/struct/factory/ModelDataFactory.java

diff --git a/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/composite/AiEvalLeftButton.java b/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/composite/AiEvalLeftButton.java
new file mode 100644
index 00000000..7eeb1f08
--- /dev/null
+++ b/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/composite/AiEvalLeftButton.java
@@ -0,0 +1,165 @@
+package com.gx.obe.evaluation.step.composite;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.CallBack;
+import org.eclipse.swt.core.widgets.ImageButton;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.MouseTrackAdapter;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+
+import com.gx.obe.ColorConstants;
+import com.gx.obe.WebserviceConstants;
+import com.gx.obe.business.http.HttpResponse;
+import com.gx.obe.business.http.HttpUrl;
+import com.gx.obe.business.http.HttpUtils;
+import com.gx.obe.common.file.enumeration.FileConstants;
+import com.gx.obe.common.file.http.HttpURLDown;
+import com.gx.obe.common.icons.IconsActivator;
+import com.gx.obe.components.core.enumeration.CommonEnum;
+import com.gx.obe.config.utils.PropertiesUtils;
+import com.gx.obe.evaluation.step.shell.ShowAiProcessShell;
+import com.gx.obe.evaluation.step.widgets.EvalLeftGroupButton;
+import com.gx.obe.evaluation.step.widgets.LeftMenuMouseAdapter;
+import com.gx.obe.message.Messages;
+import com.gx.obe.util.utils.ObjectUtils;
+import com.gx.obe.util.utils.RuntimeUtils;
+import com.gx.obe.util.utils.StringUtils;
+import com.gx.obe.web.entity.tender.TenderProjectEntity;
+import com.swtdesigner.ResourceManager;
+import com.swtdesigner.SWTResourceManager;
+
+
+public class AiEvalLeftButton extends ImageButton{
+	private TenderProjectEntity curTender;
+//	private ShowAiProcessShell menuTipShell;
+	private MouseListener listener;
+	private ShowAiProcessShell showAiProcessShell;
+	public static Color BG = ColorConstants.SKIN_BG;
+	public AiEvalLeftButton(Composite parent, int style,TenderProjectEntity curTender) {
+		super(parent, SWT.CENTER|SWT.NONE);
+		this.setTopMargin(3);
+		this.setBottomMargin(3);
+		this.setLeftMargin(5);
+		this.setRightMargin(5);
+		this.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/evaluaton_step/default.png"));
+		this.curTender = curTender;
+//		button.setCursor(SWTResourceManager.getCursor(SWT.CURSOR_HAND));
+//		button.setSurroundColor(SWTResourceManager.getColor(60, 138, 226));
+		this.setFont(SWTResourceManager.getFont("微软雅黑", 10, SWT.NORMAL));
+		this.setForeground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+//		this.setBorderColor(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		this.setActiveBgColor(BG);
+		this.setActiveBgColor(SWTResourceManager.getColor(255, 153, 0));
+//		this.setActiveSurroundColor(SWTResourceManager.getColor(255, 153, 0));
+		
+		this.setActiveForeground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+//		this.setActiveSurroundColor(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		this.setSelectionBgColor(ColorConstants.SKIN_SELECTION_BG);
+//		this.setSelectionBorderColor(SWTResourceManager.getColor(255, 153, 0));
+		this.setArcWidth(6);
+//		button.setText(Messages.Button_reduce);
+//		button.setSurroundMargin(2);
+//		button.setFillSurround(false);
+		init();
+	}
+
+	public void init(){
+		
+		addMouseTrackListener(new MouseTrackAdapter() {
+			
+
+			@Override
+			public void mouseEnter(MouseEvent e) {
+				HttpUrl httpUrl = HttpUtils.getProjectHttpUrl(curTender, PropertiesUtils.getWebserviceProperty(WebserviceConstants.GET_AI_RESULT_METHOD, "bidOpeningHS.do?downloadOpenBidSupplierAiResult"));
+				HttpResponse httpResponse = HttpUtils.doPost(httpUrl);
+				downloadBiddingFile(httpResponse);
+//				showAiProcessShell = new ShowAiProcessShell(getShell(), EvalLeftButton1.this, 0, "");
+//				if(null != showAiProcessShell && !showAiProcessShell.isDisposed()){
+//					showAiProcessShell.open();
+////					showAiProcessShell.setVisible(true);
+//				}
+			}
+//
+//			@Override
+//			public void mouseExit(MouseEvent e) {
+//				if(null != menuTipShell && !menuTipShell.isDisposed()){
+//					menuTipShell.close();
+//				}
+//				super.mouseExit(e);
+//			}
+			
+		});
+	}
+	private void downloadBiddingFile(HttpResponse httpResponse){
+		
+		String  downUrl = ""; 
+		if(null == httpResponse.getContent() || "".equals(httpResponse.getContent())){
+//			LOG.debug("服务器返回数据为空!");
+//			callBackMsg(false, "服务器返回数据为空!");
+//			callBackMsg(false, "未获取到下载地址!");
+			return ;
+		}
+		String packageAiType = httpResponse.getDataParam("packageAiType");
+		downUrl = httpResponse.getDataParam("downUrl");
+		if(StringUtils.isNotEmpty(packageAiType) && packageAiType.equals(CommonEnum.YES) && StringUtils.isNotEmpty(downUrl) ){
+//			LOG.debug("下载地址获取成功"+downUrl);
+//			callBackMsg(true, "下载地址获取成功,开始解析下载地址...");
+			
+			
+			String downLoadPath = new File(FileConstants.getBiddingFilePath(curTender.getId()) + "ai.pdf").getAbsolutePath();
+			downLoadFile(downUrl, downLoadPath);
+		}else {
+			
+			
+			String progress = httpResponse.getDataParam("progress");
+			String waitTime = httpResponse.getDataParam("waitTime");
+			showAiProcessShell = new ShowAiProcessShell(getShell(), AiEvalLeftButton.this,  ObjectUtils.getIntValue(progress, 0), waitTime);
+			showAiProcessShell.open();
+//			ShowViewAiProcessDialog showViewAiProcessDialog = new ShowViewAiProcessDialog(getShell(), ObjectUtils.getIntValue(progress, 0), waitTime);
+//			showViewAiProcessDialog.open();
+//			callBackMsg(false, "获取下载地址失败!");
+		}
+	}
+
+	private void downLoadFile(String downLoadUrl, String savePath){
+//		callBackMsg("开始下载招标文件...");
+		HttpURLDown httpURLDown = new HttpURLDown(downLoadUrl, savePath, new CallBack() {
+		});
+		try {
+			boolean downFlag = httpURLDown.downLoad("标书比对相似度分析");
+//			callBackMsg("招标文件下载结束!");
+			// 下载成功并且是.zip文件才进行解压操作
+			if(downFlag){
+				final AiEvalLeftButton groupButton = AiEvalLeftButton.this;
+				groupButton.setToolTipText("标书比对相似度分析");
+				if(null == listener) {
+					listener = new MouseAdapter() {
+						public void mouseUp(MouseEvent e) {
+							if(!groupButton.getEnabled()) return;
+							RuntimeUtils.openFIle(new File(savePath));
+						}
+					};
+					groupButton.addMouseListener(listener);
+				}
+				
+//				unZipFile(savePath, FileConstants.getBiddingFilePath(curTender.getId()));
+			}
+		} catch (IOException e) {
+//			LOG.error("招标文件下载失败", e);
+//			callBackMsg("招标文件下载文件出现错误");
+//			callBackMsg("错误信息为:"+e.getMessage());
+			return;
+			
+		}
+	}
+//	HttpUrl httpUrl = HttpUtils.getProjectHttpUrl(curTender, PropertiesUtils.getWebserviceProperty(WebserviceConstants.GET_AI_RESULT_METHOD, "bidOpeningHS.do?downloadOpenBidSupplierAiResult"));
+//	HttpResponse httpResponse = HttpUtils.doPost(httpUrl);
+//	downloadBiddingFile(httpResponse);
+}
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 8348745d..f0ffa741 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
@@ -50,7 +50,6 @@ import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Text;
 
 import com.gx.obe.ColorConstants;
-import com.gx.obe.WebserviceConstants;
 import com.gx.obe.answer.dialog.ImportAnswerQuestionDialog;
 import com.gx.obe.answer.dialog.InquireEnvelopListDialog;
 import com.gx.obe.bidata.action.BidDataAction;
@@ -60,8 +59,6 @@ import com.gx.obe.bidata.vo.SupplierDTO;
 import com.gx.obe.business.entity.MenuFunction;
 import com.gx.obe.business.enumeration.MenuFunctionEnum;
 import com.gx.obe.business.http.HttpResponse;
-import com.gx.obe.business.http.HttpUrl;
-import com.gx.obe.business.http.HttpUtils;
 import com.gx.obe.common.file.dialog.BidFileLocalBorwseDialog;
 import com.gx.obe.common.file.entity.BidFile;
 import com.gx.obe.common.file.entity.BiddingFile;
@@ -95,7 +92,7 @@ import com.gx.obe.evaluation.step.listener.EvaluationSupplierFactorListener;
 import com.gx.obe.evaluation.step.review.composite.ComplianceEvaluationTableComposite;
 import com.gx.obe.evaluation.step.review.composite.ScoreEvaluationTableComposite;
 import com.gx.obe.evaluation.step.shell.ListEvaluationItemShell;
-import com.gx.obe.evaluation.step.shell.MeetingRoomOpenShell;
+import com.gx.obe.evaluation.step.shell.ShowAiProcessShell;
 import com.gx.obe.evaluation.step.shell.ShowCompareSupplierListShell;
 import com.gx.obe.evaluation.step.widgets.EvalLeftGroupButton;
 import com.gx.obe.evaluation.step.widgets.LeftMenuEnum;
@@ -243,7 +240,8 @@ public class FactorEvaluationComposite extends EvaluationView {
 	private Map<String,String> supplierNameMap = new HashMap<String,String>();
 	private Composite buttonComposite;
 	private TemplateTableListComposite templateTableListComposite;
-	private EvalLeftButton viewAI_btn;
+	private AiEvalLeftButton viewAI_btn;
+	private ShowAiProcessShell showAiProcessShell;
 	
 	{
 		LogUtils.logClass(FactorEvaluationComposite.class);
@@ -390,8 +388,32 @@ public class FactorEvaluationComposite extends EvaluationView {
 		menuFunctionUtils.addFunction(moreTools, "EVALUATION_VIEW_MORE");
 		
 		
-		viewAI_btn = new EvalLeftButton(left_tool_composite, SWT.NONE);
-		
+		viewAI_btn = new AiEvalLeftButton(left_tool_composite, SWT.NONE,curTender);
+//		viewAI_btn.addFocusListener(new FocusAdapter() {
+//			@Override
+//			public void focusLost(FocusEvent e) {
+////				TODO
+//				if(null != showAiProcessShell && !showAiProcessShell.isDisposed()) {
+//					showAiProcessShell.close();
+//				}
+//				
+//			}
+//		});
+//		viewAI_btn.addMouseTrackListener(new MouseTrackAdapter() {
+//			@Override
+//			public void mouseEnter(MouseEvent e) {
+//				viewAiAction();
+//			}
+////
+////			@Override
+////			public void mouseExit(MouseEvent e) {
+////				if(null != showAiProcessShell && !showAiProcessShell.isDisposed()) {
+////					showAiProcessShell.close();
+//////					showAiProcessShell.dispose();
+////				}
+////			}
+//			
+//		});
 		viewAI_btn.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/btn/white/view.png"));
 		viewAI_btn.setText("");
 		viewAI_btn.setToolTipText("标书查重");
@@ -400,7 +422,7 @@ public class FactorEvaluationComposite extends EvaluationView {
 				viewAiAction();
 			}
 		});
-		viewAI_btn.setVisible(false);
+//		viewAI_btn.setVisible(false);
 //		menuFunctionUtils.addFunction(viewAI_btn, "EVALUATION_VIEW_AI");
 		
 		ESepator toolv_sepator = new ESepator(this, SWT.VERTICAL);
@@ -501,6 +523,8 @@ public class FactorEvaluationComposite extends EvaluationView {
         localFile_link.setImage(ResourceManager.getPluginImage(IconsActivator.PLUGIN_ID, "icons/btn/blue/location.png"));
         localFile_link.setText(Messages.Button_viewLocalFiles);
         menuFunctionUtils.addFunction(localFile_link, "VIEW_LOCAL_FILE");
+        new Label(supplier_composite, SWT.NONE);
+        new Label(supplier_composite, SWT.NONE);
 		
 		ESepator supllerSep = new ESepator(right_composite, SWT.HORIZONTAL);
 		supllerSep.setBackground(ColorConstants.SEP_LIGHT_COLOR);
@@ -993,7 +1017,7 @@ public class FactorEvaluationComposite extends EvaluationView {
 	 */
 	private void init() {
 		
-		viewAI_btn.setEnabled(false);
+//		viewAI_btn.setEnabled(false);
 		menuFunctionUtils.initFunctionAuthority(menu);
 		initShowButton();
 	    initLayoutPanelGroup();
@@ -1118,13 +1142,11 @@ public class FactorEvaluationComposite extends EvaluationView {
 				evaluationTable = new ScoreEvaluationTableComposite(evaluation_talbe_composite, SWT.NONE);
 			}
 		}
-		new Thread(new Runnable() {
-			public void run() {
-				HttpUrl httpUrl = HttpUtils.getProjectHttpUrl(curTender, PropertiesUtils.getWebserviceProperty(WebserviceConstants.GET_AI_RESULT_METHOD, "tBOpenBidSupplierAiController.do?downloadOpenBidSupplierAiResult"));
-				HttpResponse httpResponse = HttpUtils.doPost(httpUrl);
-				downloadBiddingFile(httpResponse);
-			}
-		}).start();
+//		new Thread(new Runnable() {
+//			public void run() {
+//				
+//			}
+//		}).start();
 		// 刷新评标界面
 		refreshAction();
 	}
@@ -2677,14 +2699,24 @@ public class FactorEvaluationComposite extends EvaluationView {
 //			callBackMsg(false, "未获取到下载地址!");
 			return ;
 		}
-		
+		String packageAiType = httpResponse.getDataParam("packageAiType");
 		downUrl = httpResponse.getDataParam("downUrl");
-		if(StringUtils.isNotEmpty(downUrl)){
+		if(StringUtils.isNotEmpty(packageAiType) && packageAiType.equals(CommonEnum.YES) && StringUtils.isNotEmpty(downUrl) ){
 //			LOG.debug("下载地址获取成功"+downUrl);
 //			callBackMsg(true, "下载地址获取成功,开始解析下载地址...");
+			
+			
 			String downLoadPath = new File(FileConstants.getBiddingFilePath(curTender.getId()) + "ai.pdf").getAbsolutePath();
 			downLoadFile(downUrl, downLoadPath);
 		}else {
+			
+			
+			String progress = httpResponse.getDataParam("progress");
+			String waitTime = httpResponse.getDataParam("waitTime");
+			showAiProcessShell = new ShowAiProcessShell(getShell(), viewAI_btn,  ObjectUtils.getIntValue(progress, 0), waitTime);
+			showAiProcessShell.open();
+//			ShowViewAiProcessDialog showViewAiProcessDialog = new ShowViewAiProcessDialog(getShell(), ObjectUtils.getIntValue(progress, 0), waitTime);
+//			showViewAiProcessDialog.open();
 //			callBackMsg(false, "获取下载地址失败!");
 		}
 	}
@@ -2703,7 +2735,7 @@ public class FactorEvaluationComposite extends EvaluationView {
 					public void run() {
 						viewAI_btn.setVisible(true);
 						viewAI_btn.getParent().layout();
-						viewAI_btn.setEnabled(true);
+//						viewAI_btn.setEnabled(true);
 					}
 				});
 			}
@@ -2719,19 +2751,23 @@ public class FactorEvaluationComposite extends EvaluationView {
 	 * 标书查重功能
 	 */
 	private void viewAiAction() {
-		if(viewAI_btn.getEnabled()) {
-//			MeetingRoomOpenShell myEvaluationShell = new MeetingRoomOpenShell(getShell(), curTender);
-//			Composite parent = myEvaluationShell.getParentComposite();
-//			parent.setData("tenderProjectEntity", curTender);
-//			parent.setData("menu", menu);
-//			new AiFileComposite(parent, SWT.NONE);
-//			myEvaluationShell.open();
-			String downLoadPath = new File(FileConstants.getBiddingFilePath(curTender.getId()) + "ai.pdf").getAbsolutePath();
-			File file = new File(downLoadPath);
-			if(file.exists()) {
-				RuntimeUtils.openFIle(file);
-			}
-		}
+//		HttpUrl httpUrl = HttpUtils.getProjectHttpUrl(curTender, PropertiesUtils.getWebserviceProperty(WebserviceConstants.GET_AI_RESULT_METHOD, "bidOpeningHS.do?downloadOpenBidSupplierAiResult"));
+//		HttpResponse httpResponse = HttpUtils.doPost(httpUrl);
+//		downloadBiddingFile(httpResponse);
+		
+//		if(viewAI_btn.getEnabled()) {
+////			MeetingRoomOpenShell myEvaluationShell = new MeetingRoomOpenShell(getShell(), curTender);
+////			Composite parent = myEvaluationShell.getParentComposite();
+////			parent.setData("tenderProjectEntity", curTender);
+////			parent.setData("menu", menu);
+////			new AiFileComposite(parent, SWT.NONE);
+////			myEvaluationShell.open();
+//			String downLoadPath = new File(FileConstants.getBiddingFilePath(curTender.getId()) + "ai.pdf").getAbsolutePath();
+//			File file = new File(downLoadPath);
+//			if(file.exists()) {
+//				RuntimeUtils.openFIle(file);
+//			}
+//		}
 	}
 	
 	protected void checkSubclass() {}
diff --git a/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/dialog/ShowViewAiProcessDialog.java b/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/dialog/ShowViewAiProcessDialog.java
new file mode 100644
index 00000000..e1776f63
--- /dev/null
+++ b/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/dialog/ShowViewAiProcessDialog.java
@@ -0,0 +1,103 @@
+package com.gx.obe.evaluation.step.dialog;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.widgets.EDialog;
+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.Label;
+import org.eclipse.swt.widgets.ProgressBar;
+import org.eclipse.swt.widgets.Shell;
+
+import com.gx.obe.message.Messages;
+import org.eclipse.wb.swt.SWTResourceManager;
+
+/** 
+ * @Description: 审核
+ * @author chenxw 
+ */
+public class ShowViewAiProcessDialog extends EDialog {
+	private Composite messageComposite;
+	private int pointY = 120;
+	private boolean isAdopt = true;
+	private AuditListener listener;
+	private Label lblNewLabel_1;
+	private int process;
+	private String needTime;
+	
+	/**
+	 * Create the dialog.
+	 * 
+	 * @param parentShell
+	 * @param callBack 
+	 */
+	public ShowViewAiProcessDialog(Shell parentShell, int process, String needTime) {
+		super(parentShell);
+		setTitle("标书相似度分析进度...");
+		this.process = process;
+		this.needTime = needTime;
+	}
+	
+	/**
+	 * Create contents of the dialog.
+	 * 
+	 * @param parent
+	 */
+	@Override
+	protected Control createDialogArea(Composite parent) {
+		Composite container = (Composite) super.createDialogArea(parent);
+		container.setLayout(new GridLayout(1, false));
+		
+		messageComposite = new Composite(container, SWT.NONE);
+		messageComposite.setLayout(new GridLayout(4, false));
+		messageComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+//		messageComposite.setVisible(false);
+		
+		Label lblNewLabel = new Label(messageComposite, SWT.NONE);
+		lblNewLabel.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));
+		lblNewLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		lblNewLabel.setText(Messages.ShowViewAiProcessDialog_lblNewLabel_text);
+		
+		lblNewLabel_1 = new Label(messageComposite, SWT.NONE);
+		lblNewLabel_1.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));
+		GridData gd_lblNewLabel_1 = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+		gd_lblNewLabel_1.widthHint = 40;
+		lblNewLabel_1.setLayoutData(gd_lblNewLabel_1);
+		lblNewLabel_1.setText(process + "%");
+		
+		Label lblNewLabel_2 = new Label(messageComposite, SWT.NONE);
+		lblNewLabel_2.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));
+		lblNewLabel_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		lblNewLabel_2.setText("   预计还需要:");
+		
+		Label lblNewLabel_3 = new Label(messageComposite, SWT.NONE);
+		lblNewLabel_3.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));
+		lblNewLabel_3.setText(needTime);
+		
+		ProgressBar progressBar = new ProgressBar(container, SWT.NONE);
+		progressBar.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
+		progressBar.setSelection(process);
+		
+		return container;
+	}
+	
+	public interface AuditListener {
+		void audit(boolean isAdopt, String message);
+		boolean isSuccess();
+	}
+	
+	public void addAuditListener(AuditListener listener) {
+		this.listener = listener;
+	}
+	
+	/**
+	 * Return the initial size of the dialog.
+	 */
+	@Override
+	protected Point getInitialSize() {
+		return new Point(667, 110);
+	}
+	
+}
diff --git a/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/review/composite/ScoreEvaluationTableComposite.java b/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/review/composite/ScoreEvaluationTableComposite.java
index 1c8abfc1..daabed1f 100644
--- a/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/review/composite/ScoreEvaluationTableComposite.java
+++ b/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/review/composite/ScoreEvaluationTableComposite.java
@@ -1838,7 +1838,7 @@ public class ScoreEvaluationTableComposite extends Composite implements IEvaluat
 	 */
 	private void showFactorEvaluationOpinion(EvaluationFactorResult evalFactorResult){
 		if(null != evalFactorResult){
-			System.out.println("第一处"+ObjectUtils.getObjString(evalFactorResult.getEvaluationOpinion()));
+//			System.out.println("第一处"+ObjectUtils.getObjString(evalFactorResult.getEvaluationOpinion()));
 			factor_evaluation_opinion.setText(ObjectUtils.getObjString(evalFactorResult.getEvaluationOpinion()));
 			factor_evaluation_opinion.setToolTipText(ObjectUtils.getObjString(factor_evaluation_opinion.getText()));
 			factor_evaluation_opinion.setData("evalFactorResult", evalFactorResult);
diff --git a/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/shell/ShowAiProcessShell.java b/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/shell/ShowAiProcessShell.java
new file mode 100644
index 00000000..f9f4e638
--- /dev/null
+++ b/BID-EVALUATION-STEP/src/com/gx/obe/evaluation/step/shell/ShowAiProcessShell.java
@@ -0,0 +1,198 @@
+package com.gx.obe.evaluation.step.shell;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.core.utils.SwtUtils;
+import org.eclipse.swt.core.widgets.ImageButton;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseTrackAdapter;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.graphics.Region;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ProgressBar;
+import org.eclipse.swt.widgets.Shell;
+
+import com.gx.obe.evaluation.step.composite.AiEvalLeftButton;
+import com.gx.obe.message.Messages;
+import com.swtdesigner.SWTResourceManager;
+
+/**
+ * @Description: 
+ * @author guoyr
+ */
+public class ShowAiProcessShell extends Shell {
+
+//	private Composite composite;
+	private AiEvalLeftButton groupMenuBtn;
+	private ImageButton curBtn;
+	private Composite curComposite;
+	private Composite composite;
+	private Composite messageComposite;
+	private Label lblNewLabel_1;
+	private Listener deactivateListener;
+//	private  int process;
+//	private String needTime;
+
+	/**
+	 * Create the shell.
+	 * @param display
+	 */
+	public ShowAiProcessShell(final Shell shell, AiEvalLeftButton shortMenu, int process, String needTime) {
+		super(shell, SWT.NO_TRIM | SWT.TOP);
+		this.groupMenuBtn = shortMenu;
+//		this.process = process;
+//		this.needTime = needTime;
+//		super(parent.getShell(), SWT.NO_TRIM | SWT.ON_TOP | SWT.TOOL);
+//		addDisposeListener(new DisposeListener() {
+//			public void widgetDisposed(DisposeEvent e) {
+//				removeListener(SWT.Deactivate, deactivateListener);
+//			}
+//		});
+		
+		GridLayout gridLayout = new GridLayout(2, false);
+		gridLayout.horizontalSpacing = 0;
+		gridLayout.verticalSpacing = 0;
+		gridLayout.marginHeight = 1;
+		gridLayout.marginWidth = 1;
+		setLayout(gridLayout);
+		setBackground(shortMenu.getActiveBackgroundColor());
+//		setBackground(shortMenu.getBackground());
+		setBackgroundMode(SWT.INHERIT_FORCE);
+		
+		curComposite = new Composite(this, SWT.NONE);
+		curComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 1, 2));
+		GridLayout gl_curComposite = new GridLayout(1, false);
+		gl_curComposite.marginHeight = 0;
+		gl_curComposite.marginWidth = 0;
+		gl_curComposite.marginRight = 5;
+		curComposite.setLayout(gl_curComposite);
+		curComposite.setBackground(shortMenu.getActiveBackgroundColor());
+//		curComposite.setBackground(SWTResourceManager.getColor(123, 13, 15));
+		
+		curBtn = new ImageButton(curComposite, SWT.NONE);
+		curBtn.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, true, 1, 1));
+		curBtn.setImage(shortMenu.getImage());
+//		curBtn.setTopMargin(3);
+//		curBtn.setBottomMargin(3);
+		curBtn.setLeftMargin(5);
+		curBtn.setRightMargin(5);
+		
+		
+		composite = new Composite(this, SWT.NONE);
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 2));
+		GridLayout gl_composite = new GridLayout(1, false);
+		gl_composite.marginWidth = 0;
+		gl_composite.horizontalSpacing = 0;
+		gl_composite.marginHeight = 0;
+		gl_composite.verticalSpacing = 0;
+		composite.setLayout(gl_composite);
+		composite.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE));
+		Label labe = new Label(composite, SWT.None);
+		labe.setText("标书相似度分析进度");
+		messageComposite = new Composite(composite, SWT.NONE);
+		messageComposite.setLayout(new GridLayout(4, false));
+		messageComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
+//		messageComposite.setVisible(false);
+		
+		Label lblNewLabel = new Label(messageComposite, SWT.NONE);
+		lblNewLabel.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));
+		lblNewLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		lblNewLabel.setText(Messages.ShowViewAiProcessDialog_lblNewLabel_text);
+		
+		lblNewLabel_1 = new Label(messageComposite, SWT.NONE);
+		lblNewLabel_1.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));
+		GridData gd_lblNewLabel_1 = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
+		gd_lblNewLabel_1.widthHint = 40;
+		lblNewLabel_1.setLayoutData(gd_lblNewLabel_1);
+		lblNewLabel_1.setText(process + "%");
+		
+		Label lblNewLabel_2 = new Label(messageComposite, SWT.NONE);
+		lblNewLabel_2.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));
+		lblNewLabel_2.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+		lblNewLabel_2.setText("   预计还需要:");
+		
+		Label lblNewLabel_3 = new Label(messageComposite, SWT.NONE);
+		lblNewLabel_3.setForeground(SWTResourceManager.getColor(SWT.COLOR_RED));
+		lblNewLabel_3.setText(needTime);
+		
+		ProgressBar progressBar = new ProgressBar(composite, SWT.NONE);
+		progressBar.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, true, 1, 1));
+		progressBar.setSelection(process);
+		init();
+		createContents();
+	}
+	private void init(){
+		
+		deactivateListener = new Listener(){
+			public void handleEvent(Event arg0) {
+				close();
+			}
+		};
+		addListener(SWT.Deactivate, deactivateListener);
+		MouseTrackAdapter mouseExit = new MouseTrackAdapter() {
+			public void mouseExit(MouseEvent e) {
+				super.mouseExit(e);
+				Point mousePoint = SwtUtils.getMouseLoaction();
+				Point p = Display. getDefault ().map(composite, null , 0,0);
+				Point p2 = Display. getDefault ().map(curComposite, null , 0,0);
+				
+				Rectangle rectangle1 = new Rectangle(p2.x + 1, p2.y + 0, curComposite.getBounds().width, curComposite.getBounds().height -0);
+				Rectangle rectangle2 = new Rectangle(p.x + 1, p.y + 0, composite.getBounds().width -0, composite.getBounds().height -2);
+//				System.out.println(rectangle1 +"\t"+rectangle2 +"\t"+ mousePoint +"\t"+ rectangle1.contains(mousePoint) +"\t"+rectangle2.contains(mousePoint));
+				if(rectangle1.contains(mousePoint) || rectangle2.contains(mousePoint)) {
+				}else {
+					close();
+				}
+			}
+		};
+		
+//		addMouseTrackListener(mouseExit);
+		curBtn.addMouseTrackListener(mouseExit);
+		curComposite.addMouseTrackListener(mouseExit);
+		composite.addMouseTrackListener(mouseExit);
+		composite.addMouseTrackListener(mouseExit);
+//		SwtUtils.setCircleRegion(this, 3);
+		
+		
+	}
+
+	@Override
+	public void open() {
+		this.setMinimumSize(250, 80);
+		this.setAlpha(250);
+		this.pack();
+		Point point = groupMenuBtn.toDisplay(new Point(0,0));
+		Region region = new Region();
+		region.add(0, 0,curComposite.getBounds().width, curComposite.getBounds().height + 2);
+		region.add(curComposite.getBounds().width + 0, 0, this.getBounds().width, this.getBounds().height);
+		this.setRegion(region);
+		region.dispose();
+		setLocation(point.x , point.y);
+		super.open();
+	}
+
+	
+//	@Override
+//	public void close() {
+//		super.close();
+//	}
+	/**
+	 * Create contents of the shell.
+	 */
+	protected void createContents() {
+		setText("");
+		setSize(480, 68);
+
+	}
+	
+	@Override
+	protected void checkSubclass() {
+		// Disable the check that prevents subclassing of SWT components
+	}
+}
diff --git a/BID-EVALUATION/splash.bmp b/BID-EVALUATION/splash.bmp
index 4e2f29117e70bc2c06d515b3f3f905acf3e6d32f..e79a26b64f336770d8623e2a83e06a4407bc31af 100644
GIT binary patch
delta 17706
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
V*w!nF7W*bhZv>@Yn(Uh`{|||0?N$H)

delta 17479
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
Cx3Xsd

diff --git a/BID-OPENING/splash.bmp b/BID-OPENING/splash.bmp
index 4e2f29117e70bc2c06d515b3f3f905acf3e6d32f..e79a26b64f336770d8623e2a83e06a4407bc31af 100644
GIT binary patch
delta 17706
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
V*w!nF7W*bhZv>@Yn(Uh`{|||0?N$H)

delta 17479
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
Cx3Xsd

diff --git a/BID-OPENING/src/com/gx/obe/opening/thread/RemoteDecryptStatusThread.java b/BID-OPENING/src/com/gx/obe/opening/thread/RemoteDecryptStatusThread.java
index f1b493ba..78f8ee61 100644
--- a/BID-OPENING/src/com/gx/obe/opening/thread/RemoteDecryptStatusThread.java
+++ b/BID-OPENING/src/com/gx/obe/opening/thread/RemoteDecryptStatusThread.java
@@ -386,6 +386,7 @@ public class RemoteDecryptStatusThread extends MyRunnable{
 							try {
 								updateSupplierOpeningResultList.add(future.get());
 							} catch (InterruptedException e) {
+								
 							} catch (ExecutionException e) {
 							}
 						}
diff --git a/OBE-COMMON-ICONS/icons/login/logo.png b/OBE-COMMON-ICONS/icons/login/logo.png
index 102b5cf77a074ac10301f0b9e9a93053e94fae87..f8acfc31d7a98b75fc3abfa88a65bc5cc171e4de 100644
GIT binary patch
delta 13620
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
R-xHxAq{S7)Dn*O}{ud>aGPnQ$

literal 9967
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
E56gi+^Z)<=

diff --git a/OBE-COMPONENTS-CORE/resource/bidder.xml b/OBE-COMPONENTS-CORE/resource/bidder.xml
index 29806d89..a386006c 100644
--- a/OBE-COMPONENTS-CORE/resource/bidder.xml
+++ b/OBE-COMPONENTS-CORE/resource/bidder.xml
@@ -774,27 +774,27 @@
      
       <userMassage>
         <name>投标人名称</name>
-        <code>companyname</code>
+        <code>companyName</code>
       </userMassage>
       <userMassage>
         <name>注册地址</name>
-        <code>registerlocation</code>
+        <code>registerLocation</code>
       </userMassage>
       <userMassage>
         <name>邮政编码</name>
-        <code>postalcode</code>
+        <code>postalCode</code>
       </userMassage>
       <userMassage>
         <name>联系人</name>
-        <code>linkman</code>
+        <code>linkMan</code>
       </userMassage>
       <userMassage>
         <name>电话</name>
-        <code>linkmanphone</code>
+        <code>linkManPhone</code>
       </userMassage>
       <userMassage>
         <name>传真</name>
-        <code>linkmanfax</code>
+        <code>linkManFax</code>
       </userMassage>
       <userMassage>
         <name>网址</name>
@@ -802,83 +802,83 @@
       </userMassage>
       <userMassage>
         <name>法人姓名(单位负责人)</name>
-        <code>legalrepresentativename</code>
+        <code>legalRepresentativeName</code>
       </userMassage>
       <userMassage>
         <name>法人技术职称</name>
-        <code>legalrepresentativetitle</code>
+        <code>legalRepresentativeTitle</code>
       </userMassage>
       <userMassage>
         <name>法人电话</name>
-        <code>legalrepresentativephone</code>
+        <code>legalRepresentativePhone</code>
       </userMassage>
       <userMassage>
         <name>技术负责人姓名</name>
-        <code>technicaldirectorname</code>
+        <code>technicalDirectorName</code>
       </userMassage>
       <userMassage>
         <name>技术负责人技术职称</name>
-        <code>technicaldirectortitle</code>
+        <code>technicalDirectorTitle</code>
       </userMassage>
       <userMassage>
         <name>技术负责人电话</name>
-        <code>technicaldirectorphone</code>
+        <code>technicalDirectorPhone</code>
       </userMassage>
       <userMassage>
         <name>成立时间</name>
-        <code>setuptime</code>
+        <code>setupTime</code>
       </userMassage>
       <userMassage>
         <name>企业资质等级</name>
-        <code>companyqualificationlevel</code>
+        <code>companyQualificationLevel</code>
       </userMassage>
       <userMassage>
         <name>营业执照号</name>
-        <code>bussinesslicense</code>
+        <code>bussinessLicense</code>
       </userMassage>
       <userMassage>
         <name>注册资金(万元)</name>
-        <code>registeredcapital</code>
+        <code>registeredCapital</code>
       </userMassage>
       <userMassage>
         <name>开户银行</name>
-        <code>depositbank</code>
+        <code>depositBank</code>
       </userMassage>
       <userMassage>
         <name>开户银行账号</name>
-        <code>bankaccount</code>
+        <code>bankAccount</code>
       </userMassage>
       <userMassage>
         <name>员工总人数</name>
-        <code>employeenumber</code>
+        <code>employeeNumber</code>
       </userMassage>
       <userMassage>
         <name>项目经理数</name>
-        <code>purchasernumber</code>
+        <code>purchaserNumber</code>
       </userMassage>
       <userMassage>
         <name>高级职称人员数</name>
-        <code>seniorprofessionalpostnumber</code>
+        <code>seniorProfessionalPostNumber</code>
       </userMassage>
       <userMassage>
         <name>中级职称人员数</name>
-        <code>mediumprofessionalpostnumber</code>
+        <code>mediumProfessionalPostNumber</code>
       </userMassage>
       <userMassage>
         <name>初级职称人员数</name>
-        <code>primaryprofessionalpostnumber</code>
+        <code>primaryProfessionalPostNumber</code>
       </userMassage>
       <userMassage>
         <name>技工数</name>
-        <code>artisannumber</code>
+        <code>artisanNumber</code>
       </userMassage>
       <userMassage>
         <name>组织结构</name>
-        <code>orgstructure</code>
+        <code>orgStructure</code>
       </userMassage>
       <userMassage>
         <name>经营范围</name>
-        <code>businessscope</code>
+        <code>businessScope</code>
       </userMassage>
       <userMassage>
         <name>备注</name>
diff --git a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/Finance.java b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/Finance.java
index 4475c8cf..552ca59e 100644
--- a/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/Finance.java
+++ b/OBE-COMPONENTS-CORE/src/com/gx/obe/components/core/vo/Finance.java
@@ -76,10 +76,87 @@ public class Finance implements Serializable {
 	 */
 	private BigDecimal mainIncomeProfits;
 	
+//	private BigDecimal 企业名称
+	private BigDecimal companyName;
+//	private BigDecimal 年度
+//	private BigDecimal annual;
+//	private BigDecimal 营业收入(万元)
+	private BigDecimal operatingIncome;
+//	private BigDecimal 流动资产(万元)
+//	private BigDecimal currentAssets;
+//	private BigDecimal 流动负债(万元)
+//	private BigDecimal currentLiabilities;
+//	private BigDecimal 流动比率(%)
+//	private BigDecimal currentRate;
+//	private BigDecimal 净利润(万元)
+//	private BigDecimal retainedProfits;
+//	private BigDecimal 股东权益(万元)
+	private BigDecimal stockholdersEquity;
+//	private BigDecimal 净资产收益率(%)
+	private BigDecimal returnOnEquity;
+//	private BigDecimal 负债总额(万元)
+	private BigDecimal totalliabilities;
+//	private BigDecimal 资产总额(万元)
+//	private BigDecimal total;
+//	private BigDecimal 资产负债率(%)
+//	private BigDecimal liabilitiesRate;
+	/**
+	 * 模型数据ID
+	 */
+	private String modelDataId;
+	private String tenderId;
+	public String getTenderId() {
+		return tenderId;
+	}
+
+	public void setTenderId(String tenderId) {
+		this.tenderId = tenderId;
+	}
+
 	public String getId() {
 		return id;
 	}
 	
+	public BigDecimal getCompanyName() {
+		return companyName;
+	}
+
+	public void setCompanyName(BigDecimal companyName) {
+		this.companyName = companyName;
+	}
+
+	public BigDecimal getOperatingIncome() {
+		return operatingIncome;
+	}
+
+	public void setOperatingIncome(BigDecimal operatingIncome) {
+		this.operatingIncome = operatingIncome;
+	}
+
+	public BigDecimal getStockholdersEquity() {
+		return stockholdersEquity;
+	}
+
+	public void setStockholdersEquity(BigDecimal stockholdersEquity) {
+		this.stockholdersEquity = stockholdersEquity;
+	}
+
+	public BigDecimal getReturnOnEquity() {
+		return returnOnEquity;
+	}
+
+	public void setReturnOnEquity(BigDecimal returnOnEquity) {
+		this.returnOnEquity = returnOnEquity;
+	}
+
+	public BigDecimal getTotalliabilities() {
+		return totalliabilities;
+	}
+
+	public void setTotalliabilities(BigDecimal totalliabilities) {
+		this.totalliabilities = totalliabilities;
+	}
+
 	public void setId(String id) {
 		this.id = id;
 	}
@@ -195,5 +272,13 @@ public class Finance implements Serializable {
 	public BigDecimal getMainIncomeProfits() {
 		return mainIncomeProfits;
 	}
+
+	public String getModelDataId() {
+		return modelDataId;
+	}
+
+	public void setModelDataId(String modelDataId) {
+		this.modelDataId = modelDataId;
+	}
 	
 }
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 2d7f435e..f9803fda 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
@@ -65,6 +65,7 @@ public class TableXML {
 		tr.setTitle("true".equalsIgnoreCase(trElement.attributeValue("isTitle")));
 		tr.setCount("true".equalsIgnoreCase(trElement.attributeValue("isCount")));
 		tr.setSubjectTableID(trElement.attributeValue("subjectTableID"));
+	
 		return tr;
 	}
 	
@@ -92,7 +93,7 @@ public class TableXML {
 						width = tdElement.attributeValue("width").replaceAll("%", "");
 					}
 					
-					Td td = new Td(tdElement.attributeValue("colType"), tdElement.getTextTrim(), ObjectUtils.getIntValue(width, 100));
+					Td td = new Td(tdElement.attributeValue("colType"), tdElement.getTextTrim(), ObjectUtils.getIntValue(width, 100),"true".equals(tdElement.attributeValue("isNeedFill")));
 					try {
 						tds[Integer.valueOf(tdElement.attributeValue("realCol").trim())] = td;
 					} catch (Exception e) {
@@ -108,11 +109,13 @@ public class TableXML {
 			private String colType;
 			private String content;
 			private int width;
+			private boolean isNeedFill;
 			
-			public Td(String colType, String content, int width) {
+			public Td(String colType, String content, int width, boolean isNeedFill ) {
 				this.colType = colType;
 				this.content = content;
 				this.width = width;
+				this.isNeedFill = isNeedFill;
 			}
 			
 			public String getColType() {
@@ -126,6 +129,15 @@ public class TableXML {
 			public int getWidth() {
 				return width;
 			}
+
+			public boolean isNeedFill() {
+				return isNeedFill;
+			}
+
+			public void setNeedFill(boolean isNeedFill) {
+				this.isNeedFill = isNeedFill;
+			}
+			
 		}
 		
 		public void setTds(Td[] tds) {
diff --git a/OBE-COMPONENTS-MESSAGES/bin/com/gx/obe/message/messages.properties b/OBE-COMPONENTS-MESSAGES/bin/com/gx/obe/message/messages.properties
index f46b0716..40ddb458 100644
--- a/OBE-COMPONENTS-MESSAGES/bin/com/gx/obe/message/messages.properties
+++ b/OBE-COMPONENTS-MESSAGES/bin/com/gx/obe/message/messages.properties
@@ -1,5 +1,5 @@
 #Eclipse modern messages class
-#Tue Jan 23 11:29:02 CST 2024
+#Tue Apr 16 13:51:53 CST 2024
 About=\u5173\u4E8E
 AboutAttachment=\u76F8\u5173\u9644\u4EF6
 AboveDifferenceCondition=\u9AD8\u4E8E\u5DEE\u989D\u6761\u4EF6
@@ -118,7 +118,7 @@ Button_appllyForBack=\u7533\u8BF7\u9000\u56DE
 Button_appllyForBackFormat=\u7533\u8BF7\u9000\u56DE{0}
 Button_applySignature=\u7533\u8BF7\u7B7E\u540D
 Button_applyToOthers=\u590D\u5236\u5230\u5176\u4ED6{0}
-Button_approval=\u5BA1\u6838
+Button_approval=\u5BA1\u67E5
 Button_approvalFormat=\u5BA1\u6838{0}
 Button_assignEvalGroup=\u5206\u914D\u8BC4\u5BA1\u8981\u7D20\u5355\u5143
 Button_assignWorker=\u5206\u914D\u6E05\u6807\u4EBA\u5458
@@ -786,34 +786,6 @@ LoginDialog_connectionFail=\u670D\u52A1\u5668\u8FDE\u63A5\u5931\u8D25\uFF01
 LoginDialog_editConfig=\u4FEE\u6539\u914D\u7F6E
 LoginDialog_environment=\u73AF\u5883\u68C0\u6D4B
 LoginDialog_installCaDriverTips=\u82E5\u60A8\u7684\u7535\u8111\u5C1A\u672A\u5B89\u88C5USBKey\u9A71\u52A8\u7A0B\u5E8F\uFF0C\u8BF7\u5148\u5B89\u88C5\u3002
-LoginDialog_label_10_text=\u4F01\u4E1A\u8D44\u8D28\u7B49\u7EA7
-LoginDialog_label_11_text=\u6CE8\u518C\u8D44\u91D1(\u4E07\u5143 )
-LoginDialog_label_12_text=\u8425\u4E1A\u6267\u7167\u53F7
-LoginDialog_label_13_text=\u5F00\u6237\u94F6\u884C
-LoginDialog_label_14_text=\u94F6\u884C\u8D26\u53F7
-LoginDialog_label_15_text=\u8D22\u52A1\u5E74\u5EA6\u62A5\u544A
-LoginDialog_label_16_text=\u8D44\u4EA7\u603B\u989D(\u4E07\u5143)
-LoginDialog_label_17_text=\u8D1F\u503A\u989D(\u4E07\u5143)
-LoginDialog_label_18_text=\u8D44\u4EA7\u8D1F\u503A\u7387(%)
-LoginDialog_label_19_text=\u4E3B\u8425\u4E1A\u52A1\u6536\u5165(\u4E07\u5143)
-LoginDialog_label_1_text=\u4F9B\u5E94\u5546\u540D\u79F0
-LoginDialog_label_20_text=\u51C0\u5229\u6DA6(\u4E07\u5143)
-LoginDialog_label_21_text=\u51C0\u5229\u7387(%)
-LoginDialog_label_22_text=\u9879\u76EE\u540D\u79F0
-LoginDialog_label_23_text=\u9879\u76EE\u6240\u5728\u5730
-LoginDialog_label_24_text=\u53D1\u5305\u4EBA\u540D\u79F0
-LoginDialog_label_25_text=\u53D1\u5305\u4EBA\u5730\u5740
-LoginDialog_label_26_text=\u53D1\u5305\u4EBA\u7535\u8BDD
-LoginDialog_label_27_text=\u5408\u540C\u4EF7\u683C(\u4E07\u5143)
-LoginDialog_label_28_text=\u5F00\u5DE5\u65E5\u671F
-LoginDialog_label_29_text=\u8BA1\u5212\u7AE3\u5DE5\u65E5\u671F
-LoginDialog_label_2_text=\u6CE8\u518C\u5730\u5740
-LoginDialog_label_30_text=\u5F53\u524D\u6307\u6807\u672A\u7ED1\u5B9A\u8BC4\u5BA1\u70B9
-LoginDialog_label_3_text=\u8054\u7CFB\u4EBA
-LoginDialog_label_5_text=\u7EC4\u7EC7\u673A\u6784
-LoginDialog_label_6_text=\u6CD5\u4EBA\u540D\u79F0
-LoginDialog_label_7_text=\u6280\u672F\u8D1F\u8D23\u4EBA\u540D\u79F0
-LoginDialog_label_8_text=\u6210\u7ACB\u65F6\u95F4
 LoginDialog_login=\u767B     \u5F55
 LoginDialog_logoIco=icons/login/logo.png
 LoginDialog_machineCode=\u673A\u4F4D\u6807\u8BC6\u7801
@@ -1068,8 +1040,10 @@ Setup_noFormat=\u672A\u8BBE\u7F6E{0}
 Setup_yes=\u5DF2\u8BBE\u7F6E
 Setup_yesFormat=\u5DF2\u8BBE\u7F6E{0}
 ShortlistedRules=\u5165\u56F4\u89C4\u5219
+ShowAiProcessShell_lblNewLabel_4_text=New Label
 ShowBidPrice=\u663E\u793A\u6295\u6807\u62A5\u4EF7
 ShowLimitPrice=\u663E\u793A\u9650\u4EF7
+ShowViewAiProcessDialog_lblNewLabel_text=\u5F53\u524D\u8FDB\u5EA6\uFF1A
 SignFile=\u7B7E\u5230\u6587\u4EF6
 SignInStatus_avoid=\u5DF2\u56DE\u907F
 SignInStatus_no=\u672A\u7B7E\u5230
diff --git a/OBE-COMPONENTS-MESSAGES/src/com/gx/obe/message/Messages.java b/OBE-COMPONENTS-MESSAGES/src/com/gx/obe/message/Messages.java
index a83f01e5..022ff13b 100644
--- a/OBE-COMPONENTS-MESSAGES/src/com/gx/obe/message/Messages.java
+++ b/OBE-COMPONENTS-MESSAGES/src/com/gx/obe/message/Messages.java
@@ -1887,34 +1887,34 @@ public class Messages extends NLS {
 	public static String ips_noOpenLiveing;
 	public static String RecommonedEvaluationComposite_text_text;
 	public static String RecommonedEvaluationTableComposite_text_text;
-	public static String LoginDialog_label_1_text;
-	public static String LoginDialog_label_2_text;
-	public static String LoginDialog_label_3_text;
-	public static String LoginDialog_label_5_text;
-	public static String LoginDialog_label_6_text;
-	public static String LoginDialog_label_7_text;
-	public static String LoginDialog_label_8_text;
-	public static String LoginDialog_label_10_text;
-	public static String LoginDialog_label_11_text;
-	public static String LoginDialog_label_12_text;
-	public static String LoginDialog_label_13_text;
-	public static String LoginDialog_label_14_text;
-	public static String LoginDialog_label_15_text;
-	public static String LoginDialog_label_16_text;
-	public static String LoginDialog_label_17_text;
-	public static String LoginDialog_label_18_text;
-	public static String LoginDialog_label_19_text;
-	public static String LoginDialog_label_20_text;
-	public static String LoginDialog_label_21_text;
-	public static String LoginDialog_label_22_text;
-	public static String LoginDialog_label_23_text;
-	public static String LoginDialog_label_24_text;
-	public static String LoginDialog_label_25_text;
-	public static String LoginDialog_label_26_text;
-	public static String LoginDialog_label_27_text;
-	public static String LoginDialog_label_28_text;
-	public static String LoginDialog_label_29_text;
-	public static String LoginDialog_label_30_text;
+//	public static String LoginDialog_label_1_text;
+//	public static String LoginDialog_label_2_text;
+//	public static String LoginDialog_label_3_text;
+//	public static String LoginDialog_label_5_text;
+//	public static String LoginDialog_label_6_text;
+//	public static String LoginDialog_label_7_text;
+//	public static String LoginDialog_label_8_text;
+//	public static String LoginDialog_label_10_text;
+//	public static String LoginDialog_label_11_text;
+//	public static String LoginDialog_label_12_text;
+//	public static String LoginDialog_label_13_text;
+//	public static String LoginDialog_label_14_text;
+//	public static String LoginDialog_label_15_text;
+//	public static String LoginDialog_label_16_text;
+//	public static String LoginDialog_label_17_text;
+//	public static String LoginDialog_label_18_text;
+//	public static String LoginDialog_label_19_text;
+//	public static String LoginDialog_label_20_text;
+//	public static String LoginDialog_label_21_text;
+//	public static String LoginDialog_label_22_text;
+//	public static String LoginDialog_label_23_text;
+//	public static String LoginDialog_label_24_text;
+//	public static String LoginDialog_label_25_text;
+//	public static String LoginDialog_label_26_text;
+//	public static String LoginDialog_label_27_text;
+//	public static String LoginDialog_label_28_text;
+//	public static String LoginDialog_label_29_text;
+//	public static String LoginDialog_label_30_text;
 	public static String FileDownloadShell2_label_1_text;
 	public static String FileDownloadShell2_label_2_text;
 	public static String FileDownloadShell2_label_3_text;
@@ -1931,6 +1931,8 @@ public class Messages extends NLS {
 	public static String FileDownloadShell2_label_13_text;
 	public static String FileDownloadShell2_label_14_text;
 	public static String FileDownloadShell2_label_15_text;
+	public static String ShowViewAiProcessDialog_lblNewLabel_text;
+	public static String ShowAiProcessShell_lblNewLabel_4_text;
 	
 	
 	static {
diff --git a/OBE-COMPONENTS-MESSAGES/src/com/gx/obe/message/messages.properties b/OBE-COMPONENTS-MESSAGES/src/com/gx/obe/message/messages.properties
index f46b0716..40ddb458 100644
--- a/OBE-COMPONENTS-MESSAGES/src/com/gx/obe/message/messages.properties
+++ b/OBE-COMPONENTS-MESSAGES/src/com/gx/obe/message/messages.properties
@@ -1,5 +1,5 @@
 #Eclipse modern messages class
-#Tue Jan 23 11:29:02 CST 2024
+#Tue Apr 16 13:51:53 CST 2024
 About=\u5173\u4E8E
 AboutAttachment=\u76F8\u5173\u9644\u4EF6
 AboveDifferenceCondition=\u9AD8\u4E8E\u5DEE\u989D\u6761\u4EF6
@@ -118,7 +118,7 @@ Button_appllyForBack=\u7533\u8BF7\u9000\u56DE
 Button_appllyForBackFormat=\u7533\u8BF7\u9000\u56DE{0}
 Button_applySignature=\u7533\u8BF7\u7B7E\u540D
 Button_applyToOthers=\u590D\u5236\u5230\u5176\u4ED6{0}
-Button_approval=\u5BA1\u6838
+Button_approval=\u5BA1\u67E5
 Button_approvalFormat=\u5BA1\u6838{0}
 Button_assignEvalGroup=\u5206\u914D\u8BC4\u5BA1\u8981\u7D20\u5355\u5143
 Button_assignWorker=\u5206\u914D\u6E05\u6807\u4EBA\u5458
@@ -786,34 +786,6 @@ LoginDialog_connectionFail=\u670D\u52A1\u5668\u8FDE\u63A5\u5931\u8D25\uFF01
 LoginDialog_editConfig=\u4FEE\u6539\u914D\u7F6E
 LoginDialog_environment=\u73AF\u5883\u68C0\u6D4B
 LoginDialog_installCaDriverTips=\u82E5\u60A8\u7684\u7535\u8111\u5C1A\u672A\u5B89\u88C5USBKey\u9A71\u52A8\u7A0B\u5E8F\uFF0C\u8BF7\u5148\u5B89\u88C5\u3002
-LoginDialog_label_10_text=\u4F01\u4E1A\u8D44\u8D28\u7B49\u7EA7
-LoginDialog_label_11_text=\u6CE8\u518C\u8D44\u91D1(\u4E07\u5143 )
-LoginDialog_label_12_text=\u8425\u4E1A\u6267\u7167\u53F7
-LoginDialog_label_13_text=\u5F00\u6237\u94F6\u884C
-LoginDialog_label_14_text=\u94F6\u884C\u8D26\u53F7
-LoginDialog_label_15_text=\u8D22\u52A1\u5E74\u5EA6\u62A5\u544A
-LoginDialog_label_16_text=\u8D44\u4EA7\u603B\u989D(\u4E07\u5143)
-LoginDialog_label_17_text=\u8D1F\u503A\u989D(\u4E07\u5143)
-LoginDialog_label_18_text=\u8D44\u4EA7\u8D1F\u503A\u7387(%)
-LoginDialog_label_19_text=\u4E3B\u8425\u4E1A\u52A1\u6536\u5165(\u4E07\u5143)
-LoginDialog_label_1_text=\u4F9B\u5E94\u5546\u540D\u79F0
-LoginDialog_label_20_text=\u51C0\u5229\u6DA6(\u4E07\u5143)
-LoginDialog_label_21_text=\u51C0\u5229\u7387(%)
-LoginDialog_label_22_text=\u9879\u76EE\u540D\u79F0
-LoginDialog_label_23_text=\u9879\u76EE\u6240\u5728\u5730
-LoginDialog_label_24_text=\u53D1\u5305\u4EBA\u540D\u79F0
-LoginDialog_label_25_text=\u53D1\u5305\u4EBA\u5730\u5740
-LoginDialog_label_26_text=\u53D1\u5305\u4EBA\u7535\u8BDD
-LoginDialog_label_27_text=\u5408\u540C\u4EF7\u683C(\u4E07\u5143)
-LoginDialog_label_28_text=\u5F00\u5DE5\u65E5\u671F
-LoginDialog_label_29_text=\u8BA1\u5212\u7AE3\u5DE5\u65E5\u671F
-LoginDialog_label_2_text=\u6CE8\u518C\u5730\u5740
-LoginDialog_label_30_text=\u5F53\u524D\u6307\u6807\u672A\u7ED1\u5B9A\u8BC4\u5BA1\u70B9
-LoginDialog_label_3_text=\u8054\u7CFB\u4EBA
-LoginDialog_label_5_text=\u7EC4\u7EC7\u673A\u6784
-LoginDialog_label_6_text=\u6CD5\u4EBA\u540D\u79F0
-LoginDialog_label_7_text=\u6280\u672F\u8D1F\u8D23\u4EBA\u540D\u79F0
-LoginDialog_label_8_text=\u6210\u7ACB\u65F6\u95F4
 LoginDialog_login=\u767B     \u5F55
 LoginDialog_logoIco=icons/login/logo.png
 LoginDialog_machineCode=\u673A\u4F4D\u6807\u8BC6\u7801
@@ -1068,8 +1040,10 @@ Setup_noFormat=\u672A\u8BBE\u7F6E{0}
 Setup_yes=\u5DF2\u8BBE\u7F6E
 Setup_yesFormat=\u5DF2\u8BBE\u7F6E{0}
 ShortlistedRules=\u5165\u56F4\u89C4\u5219
+ShowAiProcessShell_lblNewLabel_4_text=New Label
 ShowBidPrice=\u663E\u793A\u6295\u6807\u62A5\u4EF7
 ShowLimitPrice=\u663E\u793A\u9650\u4EF7
+ShowViewAiProcessDialog_lblNewLabel_text=\u5F53\u524D\u8FDB\u5EA6\uFF1A
 SignFile=\u7B7E\u5230\u6587\u4EF6
 SignInStatus_avoid=\u5DF2\u56DE\u907F
 SignInStatus_no=\u672A\u7B7E\u5230
diff --git a/OBE-MANAGEMENT/src/com/gx/obe/management/text/ExcelTest.java b/OBE-MANAGEMENT/src/com/gx/obe/management/text/ExcelTest.java
new file mode 100644
index 00000000..30466ead
--- /dev/null
+++ b/OBE-MANAGEMENT/src/com/gx/obe/management/text/ExcelTest.java
@@ -0,0 +1,197 @@
+package com.gx.obe.management.text;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+public class ExcelTest {
+	
+	 public static String createExcel(String[] field, String[] title, List<List<Map<String, String>>> listList, int[] mergeIndex) {
+	        long startTime = System.currentTimeMillis();
+	        if (title.length == 0) {
+	            return null;
+	        }
+	        // 初始化excel模板
+	        Workbook workbook = new XSSFWorkbook();
+	        Sheet sheet = null;
+	 
+	        int n = 0;
+	        //循环sheet页 实例化sheet对象并且设置sheet名称,book对象
+	        try {
+	            sheet = workbook.createSheet();
+	            workbook.setSheetName(n, "sheet1");
+	            workbook.setSelectedTab(0);
+	        } catch (Exception e) {
+	            e.printStackTrace();
+	        }
+	        // 数据总数
+	        int size = listList.stream().mapToInt(List::size).sum();
+	        assert sheet != null;
+	        Row row0 = sheet.createRow(0);
+	        for (int i = 0; i < title.length; i++) {
+	            Cell cell_1 = row0.createCell(i);
+	            cell_1.setCellValue(title[i]);
+	        }
+	 
+	        List<PoiModel> poiModels = new ArrayList();
+	        for (List<Map<String, String>> list : listList) {
+	            for (Map<String, String> map : list) {
+	                int index = sheet.getLastRowNum() + 1;
+	                Row row = sheet.createRow(index);
+	                for (int i = 0; i < title.length; i++) {
+	                    String titleField = field[i];
+	                    String old = null;
+	                    if (index > 1) {
+	                        old = poiModels.get(i) == null ? null : poiModels.get(i).getContent();
+	                    }
+	                    for (int k : mergeIndex) {
+	                        if (index == 1) {
+//	                            PoiModel poiModel = PoiModel.builder().oldContent(map.get(titleField)).content(map.get(titleField)).rowIndex(1).cellIndex(i).build();
+	                        	PoiModel poiModel = new PoiModel();
+	                        	poiModel.setContent(map.get(titleField));
+	                        	poiModel.setRowIndex(1);
+	                        	poiModel.setOldContent(map.get(titleField));
+	                        	poiModel.setCellIndex(i);
+//	                        	map.get(titleField)
+	                            poiModels.add(poiModel);
+	                            break;
+	                        }
+	                        PoiModel poiModel = poiModels.get(i);
+	                        String content = map.get(titleField);
+	                        // 当前行的当前列与上一行的当前列的内容不一致时,则把当前行以上的合并
+	                        if (i > 0 && k == i) {
+	                            // 如果不需要考虑当前行与上一行内容相同,但是它们的前一列内容不一样则不合并的情况,把或条件删除
+	                            if (!poiModel.getContent().equals(content) || poiModel.getContent().equals(content) && !poiModels.get(i - 1).getOldContent().equals(map.get(field[i - 1]))) {
+	                                get(poiModel, content, index, i, sheet);
+	                            }
+	                        }
+	                        // 处理第一列的情况
+	                        if (k == i && i == 0 && !poiModel.getContent().equals(content)) {
+	                            get(poiModel, content, index, i, sheet);
+	                        }
+	                        // 最后一行没有后续的行与之比较,所有当到最后一行时则直接合并对应列的相同内容
+	                        if (k == i && index == size && poiModels.get(i).getRowIndex() != index) {
+	                            CellRangeAddress cra = new CellRangeAddress(poiModels.get(i).getRowIndex(), index, poiModels.get(i).getCellIndex(), poiModels.get(i).getCellIndex());
+	                            sheet.addMergedRegion(cra);
+	                        }
+	                    }
+	                    Cell cell = row.createCell(i);
+	                    cell.setCellValue(map.get(titleField));
+	                    poiModels.get(i).setOldContent(old);
+	                }
+	            }
+	        }
+	 
+	        File file = new File("E:/demo.xlsx");
+	        FileOutputStream fout;
+			try {
+				fout = new FileOutputStream(file);
+				 workbook.write(fout);
+			        fout.close();
+			} catch (Exception e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+	       
+	 
+	        long endTime = System.currentTimeMillis();    //获取结束时间
+	        System.out.println("程序运行时间:" + (endTime - startTime) + "ms");    //输出程序运行时间
+	        return file.getAbsolutePath();
+	    }
+	 
+	    /**
+	     * 合并单元格
+	     *
+	     * @param poiModel
+	     * @param content
+	     * @param index
+	     * @param i
+	     * @param sheet
+	     */
+	    private static void get(PoiModel poiModel, String content, int index, int i, Sheet sheet) {
+	        if (poiModel.getRowIndex() != index - 1) {
+	            CellRangeAddress cra = new CellRangeAddress(poiModel.getRowIndex(), index - 1, poiModel.getCellIndex(), poiModel.getCellIndex());
+	            //在sheet里增加合并单元格
+	            sheet.addMergedRegion(cra);
+	        }
+	        /*重新记录该列的内容为当前内容,行标记改为当前行标记,列标记则为当前列*/
+	        poiModel.setContent(content);
+	        poiModel.setRowIndex(index);
+	        poiModel.setCellIndex(i);
+	    }
+	 
+	    public static void main(String[] args) throws IOException {
+	        // 此处标题的数组则对应excel的标题
+	        String[] title = {"id", "标题", "描述", "负责人", "开始时间", "名字", "年龄", "性别", "班级"};
+	        String[] field = {"id", "title", "dec", "manager", "beginTime", "name", "age", "sex", "clazz"};
+	        List<Map<String, String>> list = new ArrayList();
+	        // 这边是制造一些数据,注意每个list中map的key要和标题数组中的元素一致
+	        for (int i = 0; i < 100; i++) {
+	            HashMap<String, String> map = new HashMap();
+	            if (i > 40) {
+	                if (i < 45) {
+	                    map.put("id", "333");
+	                    map.put("title", "美女");
+	                } else if (i > 50 && i < 55) {
+	                    map.put("id", "444");
+	                    map.put("title", "美男");
+	                } else {
+	                    map.put("id", "444");
+	                    map.put("title", "å°‘ç”·");
+	                }
+	            } else if (i > 25) {
+	                map.put("id", "222");
+	                map.put("title", "少女");
+	            } else if (i == 5 || i == 8) {
+	                map.put("id", "222");
+	                map.put("title", "å°‘å¹´");
+	            } else {
+	                map.put("id", "222");
+	                map.put("title", "青年");
+	            }
+	            map.put("dec", "都是有用的人");
+	            map.put("manager", "管理员");
+	            map.put("beginTime", "2017-02-27 11:20:26");
+	            map.put("name", "tsy");
+	            map.put("age", "28");
+	            map.put("sex", "ç”·");
+	            if (i > 80) {
+	                if (i < 82) {
+	                    map.put("clazz", "er版");
+	                } else {
+	                    map.put("clazz", "");
+	                }
+	            } else {
+	                map.put("clazz", "一版");
+	            }
+	            list.add(map);
+	        }
+	 
+	        Map<String, List<Map<String, String>>> map =new HashMap();
+	        map.put("测试合并数据", list);
+	 
+	        // 模拟大数据量情况下,任务中心可分页查询接口,分批返回数据
+	        List<List<Map<String, String>>> groups = pageByNum(list, 5);
+	        // 此处数组为需要合并的列,可能有的需求是只需要某些列里面相同内容合并
+	        System.out.println(createExcel(field, title, groups, new int[]{0, 1, 2, 8}));
+	    }
+	 
+	    public static <T> List<List<T>> pageByNum(List<T> list, int pageSize) {
+	        return IntStream.range(0, list.size()).boxed().filter(t -> t % pageSize == 0).map(t -> list.stream().skip(t).limit(pageSize).collect(Collectors.toList())).collect(Collectors.toList());
+	    }
+	 
+}
diff --git a/OBE-MANAGEMENT/src/com/gx/obe/management/text/PoiModel.java b/OBE-MANAGEMENT/src/com/gx/obe/management/text/PoiModel.java
new file mode 100644
index 00000000..ab17422a
--- /dev/null
+++ b/OBE-MANAGEMENT/src/com/gx/obe/management/text/PoiModel.java
@@ -0,0 +1,54 @@
+package com.gx.obe.management.text;
+
+public class PoiModel {
+	private String content;
+	 
+    private String oldContent;
+ 
+    private String primaryKey;
+ 
+    private int rowIndex;
+ 
+    private int cellIndex;
+
+	public String getContent() {
+		return content;
+	}
+
+	public void setContent(String content) {
+		this.content = content;
+	}
+
+	public String getOldContent() {
+		return oldContent;
+	}
+
+	public void setOldContent(String oldContent) {
+		this.oldContent = oldContent;
+	}
+
+	public String getPrimaryKey() {
+		return primaryKey;
+	}
+
+	public void setPrimaryKey(String primaryKey) {
+		this.primaryKey = primaryKey;
+	}
+
+	public int getRowIndex() {
+		return rowIndex;
+	}
+
+	public void setRowIndex(int rowIndex) {
+		this.rowIndex = rowIndex;
+	}
+
+	public int getCellIndex() {
+		return cellIndex;
+	}
+
+	public void setCellIndex(int cellIndex) {
+		this.cellIndex = cellIndex;
+	}
+    
+}
diff --git a/OBE-REPORT/META-INF/MANIFEST.MF b/OBE-REPORT/META-INF/MANIFEST.MF
index 620837ab..5779de55 100644
--- a/OBE-REPORT/META-INF/MANIFEST.MF
+++ b/OBE-REPORT/META-INF/MANIFEST.MF
@@ -46,3 +46,5 @@ Export-Package: com.gx.obe.report,
  com.report.util,
  com.report.word,
  com.report.word.demo
+Import-Package: com.gx.obe.struct.beans,
+ com.gx.obe.struct.service
diff --git a/OBE-REPORT/src/com/gx/obe/report/dataset/excel/ScoreDetailedDateSet.java b/OBE-REPORT/src/com/gx/obe/report/dataset/excel/ScoreDetailedDateSet.java
index c2be0e9d..4dbaf25c 100644
--- a/OBE-REPORT/src/com/gx/obe/report/dataset/excel/ScoreDetailedDateSet.java
+++ b/OBE-REPORT/src/com/gx/obe/report/dataset/excel/ScoreDetailedDateSet.java
@@ -366,6 +366,7 @@ public class ScoreDetailedDateSet extends BaseDateSet{
 				for(Supplier supplier : supplierList){
 					Map<String, Object> supplierMap = Bean2MapUtils.createMap(supplier);
 					supplierMap.put("supplierId", supplier.getId());
+					supplierMap.put("supplierName1", supplier.getSupplierName());
 					BigDecimal supplierSumScore = null;
 					BigDecimal supplierSumFinalScore = null;
 					if(null != evaluationFactorResultList && evaluationFactorResultList.size() > 0){
@@ -474,6 +475,7 @@ public class ScoreDetailedDateSet extends BaseDateSet{
 				}
 				
 				reportDataSet.putDimension("supplierList", supplierMapList);
+				reportDataSet.putDimension("supplierList1", supplierMapList);
 				reportDataSet.putDimension("factorList", evalFactorList);
 				reportDataSet.putCrossData(crossData);
 				reportDataList.add(reportDataSet);
diff --git a/OBE-REPORT/src/com/gx/obe/report/dataset/excel/TechnicalComparisonDateSet.java b/OBE-REPORT/src/com/gx/obe/report/dataset/excel/TechnicalComparisonDateSet.java
new file mode 100644
index 00000000..3dadba13
--- /dev/null
+++ b/OBE-REPORT/src/com/gx/obe/report/dataset/excel/TechnicalComparisonDateSet.java
@@ -0,0 +1,198 @@
+package com.gx.obe.report.dataset.excel;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import com.gx.obe.components.core.Constants;
+import com.gx.obe.http.json.JsonUtil;
+import com.gx.obe.struct.beans.TableXML2;
+import com.gx.obe.struct.beans.Td;
+import com.gx.obe.struct.beans.TemplateTable;
+import com.gx.obe.struct.beans.Tr;
+import com.gx.obe.struct.service.EvaluationContentService;
+import com.gx.obe.struct.service.TemplateTableService;
+import com.gx.obe.util.utils.CollectionUtils;
+import com.gx.obe.util.utils.ObjectUtils;
+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.evaluation.EvaluationFactor;
+import com.report.excel.ReportDataSet;
+
+/**
+ * @Description: 打分明细表
+ * @author guoyr
+ */
+public class TechnicalComparisonDateSet extends BaseDateSet{
+	Set<String> fineName = new HashSet<String>();
+	boolean crossObj = false;
+	TemplateTableService templateTableService = new TemplateTableService();
+
+	public List<ReportDataSet> getDateSetList(Map<String, String> paramsMap, Map<String, String> enumsMap) {
+		List<ReportDataSet> reportDataList = new ArrayList<ReportDataSet>();
+		// 获得打分评标步骤
+		try {
+			EvaluationContentService evaluationContentService = new EvaluationContentService();
+			
+			List<EvaluationContent> evaluationContentList = evaluationContentService.getEvaluationContentList(tenderProjectEntity.getId());
+			String templateFileName = (String)paramsMap.get("TEMPLATEFILENAME");
+			if(null != templateFileName && templateFileName.indexOf(".") > 0){
+				templateFileName = templateFileName.substring(0, templateFileName.lastIndexOf("."));
+			}
+			System.out.println();
+			List<Supplier> supplierList = supplierService.getAllSupplierList(tenderProjectEntity.getId());//(detailEvalNode, true);
+			for(EvaluationContent evaluationContent : evaluationContentList){
+				List<EvaluationFactor> factorList = new ArrayList<EvaluationFactor>();
+				if(evaluationContent.getDataCategory().equals("TT") && (evaluationContent.getRelChapterType().contains("TechnicalParameter"))) {
+					
+					ReportDataSet reportDataSet = new ReportDataSet();
+					String tenderName = ObjectUtils.getObjString(tenderProjectEntity.getTenderName());
+					String tenderNo = ObjectUtils.getObjString(tenderProjectEntity.getTenderNo());
+					if(!fineName.add(evaluationContent.getTenderStructName()+ ".xlsx")) {
+						continue;
+					}
+					reportDataSet.setFileName(evaluationContent.getTenderStructName()+ ".xlsx");
+					if(null != tenderProjectEntity.getParentId()){
+						reportDataSet.putParam("projectName", ObjectUtils.getObjString(parentProject.getTenderName()));// 项目名称
+						reportDataSet.putParam("projectCode", ObjectUtils.getObjString(parentProject.getTenderNo()));// 项目编号
+						reportDataSet.putParam("packageCodeAndName", "\r\n"+tenderNo+":"+tenderName);// 分包编号和名称
+						reportDataSet.putParam("packageNameAndCode", "\r\n"+tenderName+":"+tenderNo);// 分包名称和编号
+						reportDataSet.putParam("packageName", tenderName);// 包件名称
+						reportDataSet.putParam("packageCode", tenderNo);// 包件编号
+					}else {
+						reportDataSet.putParam("projectName", tenderName);// 项目名称
+						reportDataSet.putParam("projectCode", tenderNo);// 项目编号
+						reportDataSet.putParam("packageCodeAndName", "");
+						reportDataSet.putParam("packageNameAndCode", "");
+						reportDataSet.putParam("packageName", "");// 包件名称
+						reportDataSet.putParam("packageCode", "");// 包件编号
+					}
+					List<TemplateTable> templateTableList = templateTableService.getTemplateTableList(tenderProjectEntity.getId(), evaluationContent.getRelChapterType(), evaluationContent.getDataCode());
+					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;
+					}
+					//表头解析
+					TableXML2 tableXML = JsonUtil.jsonToBean(templateTable.getTableInfo(), TableXML2.class);
+					if (tableXML == null) {
+						return null;
+					}
+					List<Tr> headList = tableXML.getHeadList();
+					if (headList.size() != 1) {
+						return null;
+					}
+					Tr head = headList.get(0);
+					//表头列
+					List<Map<String, String>> supplierMapList = new ArrayList<Map<String, String>>();
+					List<Tr> bodyList1 = tableXML.getBodyList();
+					for(int bodyRowIndex = 0; bodyRowIndex < bodyList1.size(); bodyRowIndex ++ ) {
+						Map<String, String> supplier = new HashMap<String, String>();
+						String id = UuidUtils.getUUID();
+						supplier.put("supplierId", id);
+						supplier.put("id", id);
+						supplier.put("supplierName", "供应商名称" + bodyRowIndex);
+						supplierMapList.add(supplier);
+					}
+					List<Td> tdList = new ArrayList<Td>();
+					List<Integer> indexList = new ArrayList<Integer>();
+					Map<String, Object> crossData = new HashMap<String, Object>();
+					if(null != head && null != head.getTds() && head.getTds().length > 0) {
+						for(int index = 0; index <head.getTds().length; index ++   ) {
+							Td td = head.getTds()[index];
+							
+							if (!td.isNeedFill()) {
+								EvaluationFactor evaluationFactor = new EvaluationFactor();
+								evaluationFactor.setId(UuidUtils.getUUID());
+								evaluationFactor.setFactorName(td.getContent());
+								evaluationFactor.setLevel(2);
+								factorList.add(evaluationFactor);
+								List<Tr> bodyList = tableXML.getBodyList();
+								for(int bodyRowIndex = 0; bodyRowIndex < bodyList.size(); bodyRowIndex ++ ) {
+									Map<String, String> supplier = supplierMapList.get(bodyRowIndex);
+									Tr bodyTr = bodyList.get(bodyRowIndex);
+									Td bodyTd = bodyTr.getTds()[index];
+									crossData.put(evaluationFactor.getId() + supplier.get("supplierId") ,  ObjectUtils.getObjString(bodyTd.getContent()));
+								}
+								
+							}else {
+								indexList.add(index);
+								tdList.add(td);
+							}
+						}
+					}
+					for(Supplier supplier : supplierList) {
+						TemplateTable supplierTemplateTable = templateTableMap.get(supplier.getId());
+						EvaluationFactor evaluationFactor = new EvaluationFactor();
+						evaluationFactor.setFactorName(supplier.getSupplierName());
+						evaluationFactor.setId(UuidUtils.getUUID());
+						evaluationFactor.setId(supplier.getId());
+						evaluationFactor.setLevel(1);
+						for(int a = 0; a< indexList.size();a ++) {
+							int tdIndex = indexList.get(a);
+							Td td = tdList.get(a);
+							EvaluationFactor childEvaluationFactor = new EvaluationFactor();
+							childEvaluationFactor.setFactorName( ObjectUtils.getObjString(td.getContent()));
+							childEvaluationFactor.setId(UuidUtils.getUUID());
+							childEvaluationFactor.setParentFactor(evaluationFactor);
+							childEvaluationFactor.setLevel(2);
+							childEvaluationFactor.setParentId(evaluationFactor.getId());
+							evaluationFactor.addChild(childEvaluationFactor);
+							if (supplierTemplateTable == null) {
+								continue;
+							}
+							TableXML2 supplierTableXML = JsonUtil.jsonToBean(supplierTemplateTable.getTableInfo(), TableXML2.class);
+							if (supplierTableXML == null) {
+								continue;
+							}
+							
+							int trIndex = 0;
+							for(Tr  tr: supplierTableXML.getBodyList()) {
+								if(trIndex >= supplierMapList.size()) {
+									continue;
+								}
+								Map<String, String> supplierMap = supplierMapList.get(trIndex);
+								if(tdIndex >= tr.getTds().length) {
+									continue;
+								}
+								Td bodyTd = tr.getTds()[tdIndex];//获取供应商相应表格数据索引位置
+								crossData.put(childEvaluationFactor.getId() + supplierMap.get("supplierId")  , ObjectUtils.getObjString(bodyTd.getContent()));
+								trIndex++;
+							}
+							factorList.add(childEvaluationFactor);
+							
+						}
+						factorList.add(evaluationFactor);
+					}
+					
+					
+					reportDataSet.putParam("expert", evaluationContent.getTenderStructName());
+					reportDataSet.putDimension("supplierList", supplierMapList);
+					reportDataSet.putDimension("factorList", factorList);
+					reportDataSet.putCrossData(crossData);
+					reportDataList.add(reportDataSet);
+				}
+				
+			}
+		} catch (Exception e) {
+			System.out.println(e.getMessage());
+		}
+		return reportDataList;
+	}
+	
+	
+
+
+	
+}
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 f8eedfe7..228296f3 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
@@ -33,6 +33,7 @@ import com.gx.obe.formula.DeviateRateItem;
 import com.gx.obe.formula.FilterCountConditionItem;
 import com.gx.obe.formula.PriceParam;
 import com.gx.obe.formula.SpecimenFilterConditionItem;
+import com.gx.obe.http.json.JsonUtil;
 import com.gx.obe.util.utils.BigDecimalUtils;
 import com.gx.obe.util.utils.CollectionUtils;
 import com.gx.obe.util.utils.DateUtils;
@@ -73,10 +74,6 @@ public class ParsingXmlUtils {
 	 */
 	public static TableXML parsingTableXML(String tableXMLPath) {
 		File xmlFile = new File(tableXMLPath);
-		if(tableXMLPath.contains("4fbf7eab25f645d8b5937d7e022d2f1a.xml")) {
-			System.out.println(tableXMLPath);
-			
-		}
 		if (!xmlFile.isFile() || !xmlFile.exists()) {
 			return null;
 		}
@@ -257,6 +254,7 @@ public class ParsingXmlUtils {
 		Finance finance = new Finance();
 		finance.setAnnual(element.elementTextTrim("annual"));
 		finance.setTotal(ObjectUtils.getObjBigDecimal(element.elementTextTrim("total")));
+		
 		finance.setLiabilities(ObjectUtils.getObjBigDecimal(element.elementTextTrim("liabilities")));
 		finance.setIncome(ObjectUtils.getObjBigDecimal(element.elementTextTrim("income")));
 		finance.setMainIncome(ObjectUtils.getObjBigDecimal(element.elementTextTrim("mainIncome")));
@@ -269,6 +267,14 @@ public class ParsingXmlUtils {
 		finance.setPaidUpCapital(ObjectUtils.getObjBigDecimal(element.elementTextTrim("paidUpCapital")));
 		finance.setRetainedProfits(ObjectUtils.getObjBigDecimal(element.elementTextTrim("retainedProfits")));
 		finance.setMainIncomeProfits(ObjectUtils.getObjBigDecimal(element.elementTextTrim("mainIncomeProfits")));
+		
+		finance.setOperatingIncome(ObjectUtils.getObjBigDecimal(element.elementTextTrim("operatingIncome")));
+		finance.setCompanyName(ObjectUtils.getObjBigDecimal(element.elementTextTrim("companyName")));
+		finance.setStockholdersEquity(ObjectUtils.getObjBigDecimal(element.elementTextTrim("stockholdersEquity")));
+		finance.setReturnOnEquity(ObjectUtils.getObjBigDecimal(element.elementTextTrim("returnOnEquity")));
+		finance.setTotalliabilities(ObjectUtils.getObjBigDecimal(element.elementTextTrim("totalliabilities")));
+//		finance.setOperatingIncome(ObjectUtils.getObjBigDecimal(element.elementTextTrim("total")));
+//		finance.setOperatingIncome(ObjectUtils.getObjBigDecimal(element.elementTextTrim("total")));
 		return finance;
 	}
 	
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
index 6f0742a4..80b6fec8 100644
--- 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
@@ -16,7 +16,7 @@ public class ComparisonData {
 	
 	private Map<Keys, String> headContentMap = new HashMap<>();
 	private Map<Keys, String> comparisonContentMap = new HashMap<>();
-	
+	private Map<String, Object> dataMap = new HashMap<>();
 	public boolean addHeadCol(Column col) {
 		return headColList.add(col);
 	}
@@ -65,5 +65,13 @@ public class ComparisonData {
 	public Map<Keys, String> getComparisonContentMap() {
 		return comparisonContentMap;
 	}
+
+	public Map<String, Object> getDataMap() {
+		return dataMap;
+	}
+
+	public void setDataMap(String key, Object value) {
+		dataMap.put(key, value);
+	}
 	
 }
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
index 37570367..ef905bee 100644
--- 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
@@ -3,6 +3,7 @@ package com.gx.obe.component.comparison;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
+import java.util.Set;
 import java.util.stream.IntStream;
 
 import org.eclipse.swt.SWT;
@@ -39,9 +40,11 @@ public class ComparisonTable extends KTable {
 	private final List<Column> titleColList;
 	private final List<Column> itemColList;
 	private final List<String> rowList;
+	private final Map<String, Object> dataMap;
 	
 	private final Map<Keys, String> headContentMap;
 	private final Map<Keys, String> comparisonContentMap;
+	private final Set set;
 	
 	public ComparisonTable(Composite parent, ComparisonData comparisonData) {
 		super(parent, SWTX.AUTO_SCROLL | SWT.FULL_SELECTION | SWTX.EDIT_ON_KEY | SWTX.FILL_WITH_LASTCOL);
@@ -52,16 +55,40 @@ public class ComparisonTable extends KTable {
 		this.titleColList = comparisonData.getTitleColList();
 		this.itemColList = comparisonData.getItemColList();
 		this.rowList = comparisonData.getRowList();
-		
+		this.dataMap = comparisonData.getDataMap();
 		this.headContentMap = comparisonData.getHeadContentMap();
 		this.comparisonContentMap = comparisonData.getComparisonContentMap();
+		this.set = (Set)dataMap.get("hasFixTableRow");
 		
-		this.model = new CommonKtableCModel(this, HEAD_ROW, headColList.size(), this.rowList.size(), titleColList.size() * itemColList.size());
-		this.setModel(model);
 //		this.model.setColumnWidth(sortCol, 40);
 //		this.model.setColumnMaxWidth(sortCol, 80);
-		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()));
+	
+		if(null != set && set.size() > 0) {
+			this.model = new CommonKtableCModel(this, HEAD_ROW, headColList.size(), this.rowList.size(),(titleColList.size() -set.size())  * itemColList.size() + set.size());
+			this.setModel(model);
+			IntStream.range(0, set.size()).forEach(i -> model.addRowSpan(0, i, HEAD_ROW));
+//			for(int index = set.size() ; index < titleColList.size(); index ++) {
+			int colIndex = 0;
+			for(Column Column : titleColList) {
+				if(colIndex >= set.size()) {
+//					System.out.println("合并列数据:" + colIndex  + "  :  " +  itemColList.size());
+					model.addColSpan(0, colIndex, itemColList.size());
+				}
+				colIndex+= itemColList.size();
+			}
+////				
+//			
+////				index += itemColList.size();
+//			}
+//			IntStream.range(set.size(), titleColList.size()).map(i -> i * itemColList.size()).map(i -> i + headColList.size()).forEach(i -> model.addColSpan(0, i, itemColList.size()));
+		}else {
+			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);
@@ -84,23 +111,49 @@ public class ComparisonTable extends KTable {
 	 * @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 {
-//			System.out.println( "get  keys:" +rowList.get(row - 2) +","+ titleColList.get(col / itemSize).getId()+","+itemColList.get(col % itemSize).getId()  + "   value :" + comparisonContentMap.get(Keys.of(rowList.get(row - 2), titleColList.get(col / itemSize).getId(), itemColList.get(col % itemSize).getId())) + "\r\n");
-//			System.out.println(Keys.of(rowList.get(row - 2), titleColList.get(col / itemSize).getId(), itemColList.get(col % itemSize).getId()));
-//			System.out.println(comparisonContentMap.get(Keys.of(rowList.get(row - 2), titleColList.get(col / itemSize).getId(), itemColList.get(col % itemSize).getId())));
-			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 "";
+		if(null != set && set.size() > 0) {
+			if (col < set.size()) {
+				if (row == 0) {
+					
+					return Optional.of(titleColList.get(col)).map(Column::getName).orElse("");
+				}
+				if (row == 1) return "";
+//				System.out.println( Keys.of(rowList.get(row - 2), "",titleColList.get(col).getId()));
+				return Optional.of(Keys.of(rowList.get(row - 2),"", titleColList.get(col).getId())).map(comparisonContentMap::get).orElse("");
+			}else {
+//				System.out.println("col:" + col);
+				col -= set.size();
+				int itemSize = itemColList.size();
+				if (row == 0) {
+//					System.out.println("列数据输出"+ col );
+					return Optional.of(titleColList.get(col / itemSize + set.size())).map(Column::getName).orElse("");
+				}
+				if (row == 1) return Optional.of(itemColList.get(col % itemSize)).map(Column::getName).orElse("");
+				try {
+//					System.out.println( "get  keys:" +rowList.get(row - 2) +","+ titleColList.get(col / itemSize).getId()+","+itemColList.get(col % itemSize).getId()  + "   value :" + comparisonContentMap.get(Keys.of(rowList.get(row - 2), titleColList.get(col / itemSize).getId(), itemColList.get(col % itemSize).getId())) + "\r\n");
+//					System.out.println(Keys.of(rowList.get(row - 2), titleColList.get(col / itemSize).getId(), itemColList.get(col % itemSize).getId()));
+//					System.ou	t.println(comparisonContentMap.get(Keys.of(rowList.get(row - 2), titleColList.get(col / itemSize).getId(), itemColList.get(col % itemSize).getId())));
+					return Optional.of(Keys.of(rowList.get(row - 2), titleColList.get(col / itemSize  + set.size()).getId(), itemColList.get(col % itemSize).getId())).map(comparisonContentMap::get).orElse("");
+				} catch (Exception e) {
+					return "";
+				}
+			}
+		}else {
+			
+			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 {
+//				System.out.println( "get  keys:" +rowList.get(row - 2) +","+ titleColList.get(col / itemSize).getId()+","+itemColList.get(col % itemSize).getId()  + "   value :" + comparisonContentMap.get(Keys.of(rowList.get(row - 2), titleColList.get(col / itemSize).getId(), itemColList.get(col % itemSize).getId())) + "\r\n");
+//				System.out.println(Keys.of(rowList.get(row - 2), titleColList.get(col / itemSize).getId(), itemColList.get(col % itemSize).getId()));
+//				System.out.println(comparisonContentMap.get(Keys.of(rowList.get(row - 2), titleColList.get(col / itemSize).getId(), itemColList.get(col % itemSize).getId())));
+				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 "";
+			}
 		}
+// 		return "";
 	}
 	
 	/**
diff --git a/com.gx.obe.struct/META-INF/MANIFEST.MF b/com.gx.obe.struct/META-INF/MANIFEST.MF
index c8ebbeb4..6f0e75b3 100644
--- a/com.gx.obe.struct/META-INF/MANIFEST.MF
+++ b/com.gx.obe.struct/META-INF/MANIFEST.MF
@@ -21,14 +21,13 @@ Require-Bundle: org.eclipse.ui,
  com.gx.obe.component;bundle-version="1.0.0",
  com.gx.obe.common.widget,
  com.gx.obe.httputil;bundle-version="1.0.0",
- com.gx.obe.components.messages
+ com.gx.obe.components.messages;bundle-version="1.0.0"
 Export-Package: com.gx.obe.evaluation.struct.enumeration,
  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,
diff --git a/com.gx.obe.struct/build.properties b/com.gx.obe.struct/build.properties
index 34d2e4d2..018ec844 100644
--- a/com.gx.obe.struct/build.properties
+++ b/com.gx.obe.struct/build.properties
@@ -2,3 +2,4 @@ source.. = src/
 output.. = bin/
 bin.includes = META-INF/,\
                .
+javacDefaultEncoding.. = UTF-8
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
deleted file mode 100644
index a9fde9bd..00000000
--- a/com.gx.obe.struct/src/com/gx/obe/struct/beans/Finance.java
+++ /dev/null
@@ -1,372 +0,0 @@
-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/StructDateInfo.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/StructDateInfo.java
index 173d150b..998e4779 100644
--- 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
@@ -3,6 +3,8 @@ package com.gx.obe.struct.beans;
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
+import com.gx.obe.components.core.vo.Finance;
+
 public class StructDateInfo {
 	
 	private final List<TemplateDataItem> templateDataItemList = new CopyOnWriteArrayList<>();
diff --git a/com.gx.obe.struct/src/com/gx/obe/struct/beans/Td.java b/com.gx.obe.struct/src/com/gx/obe/struct/beans/Td.java
index 4f5d5d2f..fdefecb5 100644
--- a/com.gx.obe.struct/src/com/gx/obe/struct/beans/Td.java
+++ b/com.gx.obe.struct/src/com/gx/obe/struct/beans/Td.java
@@ -5,7 +5,7 @@ public class Td {
 	private String colType;
 	private String content;
 	private int width;
-	private boolean needFill;
+	private boolean isNeedFill;
 	
 	public String getColType() {
 		return colType;
@@ -32,11 +32,11 @@ public class Td {
 	}
 
 	public boolean isNeedFill() {
-		return needFill;
+		return isNeedFill;
 	}
 
-	public void setNeedFill(boolean needFill) {
-		this.needFill = needFill;
+	public void setIsNeedFill(boolean isNeedFill) {
+		this.isNeedFill = isNeedFill;
 	}
 
 }
\ No newline at end of file
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
deleted file mode 100644
index 17114e51..00000000
--- a/com.gx.obe.struct/src/com/gx/obe/struct/composite/ClearBidReviewEntryComposite.java
+++ /dev/null
@@ -1,317 +0,0 @@
-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
deleted file mode 100644
index d272a06e..00000000
--- a/com.gx.obe.struct/src/com/gx/obe/struct/composite/EvaluationContentComposite.java
+++ /dev/null
@@ -1,242 +0,0 @@
-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
deleted file mode 100644
index 22cf2745..00000000
--- a/com.gx.obe.struct/src/com/gx/obe/struct/composite/ModelDataComposite.java
+++ /dev/null
@@ -1,129 +0,0 @@
-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/TemplateTableComparisonComposite.java b/com.gx.obe.struct/src/com/gx/obe/struct/composite/TemplateTableComparisonComposite.java
index bccb8911..42e2edf4 100644
--- 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
@@ -3,8 +3,10 @@ package com.gx.obe.struct.composite;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -24,13 +26,13 @@ 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.enumeration.CommonEnum;
+import com.gx.obe.components.core.vo.Finance;
 //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.message.Messages;
 import com.gx.obe.struct.beans.BidderBasicInfo;
-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.TableXML2;
@@ -62,7 +64,7 @@ public class TemplateTableComparisonComposite extends Composite {
 	private final Prop<ComparisonData> comparisonData = new Prop<>();
 	private KTableDataSource  kTableDataSource = null;
 	private List<Map<String, String>> rowList;
-	
+//	private Set<Integer> indexSet = new HashSet<Integer>();// 判断索引是否为固定列,如果固定列在供应商列表不展示该列,作为公共列
 	public TemplateTableComparisonComposite(Composite parent, int style) {
 		super(parent, style);
 		setLayout(new FillLayout(SWT.HORIZONTAL));
@@ -127,6 +129,7 @@ public class TemplateTableComparisonComposite extends Composite {
 		//获取供应商行数最多作为展示表格的行数
 		Map<String, TemplateTable> templateTableMap = templateTableList.stream().collect(Collectors.toMap(TemplateTable::getSupplierId, Function.identity()));
 		for(TemplateTable templateTable : templateTableList) {
+//			System.out.println(templateTable.getTableInfo());
 			TableXML2 tableXML = JsonUtil.jsonToBean(templateTable.getTableInfo(), TableXML2.class);
 			if(rowCount < tableXML.getBodyList().size()) {
 				rowCount = tableXML.getBodyList().size();
@@ -153,25 +156,58 @@ public class TemplateTableComparisonComposite extends Composite {
 //			comparisonData.addRow(getContent(tr, indexCol.getAsInt()));
 //		}
 		for(int index = 0; index < rowCount; index++) {
-			comparisonData.addRow((index + 1) + "");
+			comparisonData.addRow(index + "");
 		}
 		//表头列
+		int colIndex = 0;
+		Set<Integer> indexSet = new HashSet<Integer>();
+		if(null != head && null != head.getTds() && head.getTds().length > 0) {
+			
+			for(int index = 0; index <head.getTds().length; index ++   ) {
+				 Td td = head.getTds()[index];
+				 
+				if (!td.isNeedFill()) {
+					comparisonData.addTitleCol(new Column(colIndex + "", td.getContent()));
+					List<Tr> bodyList = tableXML.getBodyList();
+					for(int bodyRowIndex = 0; bodyRowIndex < bodyList.size(); bodyRowIndex ++ ) {
+						Tr bodyTr = bodyList.get(bodyRowIndex);
+						Td bodyTd = bodyTr.getTds()[index];
+						comparisonData.putComparisonContent(bodyRowIndex + "", "", index + "", bodyTd.getContent());
+					}
+					
+					
+					indexSet.add(index);
+					colIndex++;
+				}
+			}
+		}
+		comparisonData.setDataMap("hasFixTableRow",indexSet);
 		for(Supplier supplier : supplierList) {
 			comparisonData.addTitleCol(new Column(supplier.getId(), supplier.getSupplierName()));
 		}
+		
+	
 		//供应商数据插入
 		for(int index = 0;index < head.getTds().length; index++) {
-			comparisonDataInit(templateTableMap, tableXML, head,  index, supplierList, comparisonData);
+			// 固定列数据在公共区域展示,供应商处忽略
+			if(indexSet.add(index)) {
+				indexSet.remove(index);
+				comparisonDataInit(templateTableMap, tableXML, head,  index, supplierList, comparisonData, indexSet);
+			}
 		}
 		return comparisonData;
 	}
 	
-	private void comparisonDataInit(Map<String, TemplateTable> templateTableMap, TableXML2 tableXML, Tr head,  int col, List<Supplier> supplierList, ComparisonData comparisonData) {
+	private void comparisonDataInit(Map<String, TemplateTable> templateTableMap, TableXML2 tableXML, Tr head,  int col, List<Supplier> supplierList, ComparisonData comparisonData, Set<Integer> indexSet) {
 		Td td = head.getTds()[col];
 		for(Supplier supplier : supplierList) {
 			supplierComparisonDataInit(templateTableMap, col, supplier, comparisonData);
 		}
-		comparisonData.addItemCol(new Column(col + "", td.getContent()));
+		if(indexSet.add(col)) {
+			indexSet.remove(col);
+			comparisonData.addItemCol(new Column(col + "", td.getContent()));
+		}
+		
 
 	}
 	
@@ -186,7 +222,7 @@ public class TemplateTableComparisonComposite extends Composite {
 			return;
 		}
 //		
-		int trIndex = 1;
+		int trIndex = 0;
 		for(Tr  tr: supplierTableXML.getBodyList()) {
 			int tdIndex = 0;
 			for(Td td : tr.getTds()) {
@@ -223,28 +259,60 @@ public class TemplateTableComparisonComposite extends Composite {
 			Map<String, List<Map<String, String>>> typeMap = GetTypeUtils.resolverPerformance(tenderId, templateFile.getAbsolutePath());
 			rowList = typeMap.get(tenderProjectRuleEntity.getParamByKey("professionalCode"));
 //			titleList.add(Messages.LoginDialog_label_2_text);
+			if(null == rowList) {
+				System.out.println();
+			}
 			for(Map<String, String> map : rowList) {
 				titleList.add(map.get("name"));
 			}
 		}else if(relChapterType.equals("EQ_FinancialReport")) {
 			//财务指标
-			
-			titleList.add(Messages.LoginDialog_label_15_text);
-			titleList.add(Messages.LoginDialog_label_16_text);
-			titleList.add(Messages.LoginDialog_label_17_text);
-			titleList.add(Messages.LoginDialog_label_18_text);
-			titleList.add(Messages.LoginDialog_label_19_text);
-			titleList.add(Messages.LoginDialog_label_20_text);
-			titleList.add(Messages.LoginDialog_label_21_text);
+			titleList.add("企业名称");
+			titleList.add("年度");
+			titleList.add("营业收入(万元)");
+			titleList.add("流动资产(万元)");
+			titleList.add("流动负债(万元)");
+			titleList.add("流动比率(%)");
+			titleList.add("净利润(万元)");
+			titleList.add("股东权益(万元)");
+			titleList.add("净资产收益率(%)");
+			titleList.add("负债总额(万元)");
+			titleList.add("资产总额(万元)");
+			titleList.add("资产负债率(%)");
+//			titleList.add(Messages.LoginDialog_label_15_text);
+//			titleList.add(Messages.LoginDialog_label_16_text);
+//			titleList.add(Messages.LoginDialog_label_17_text);
+//			titleList.add(Messages.LoginDialog_label_18_text);
+//			titleList.add(Messages.LoginDialog_label_19_text);
+//			titleList.add(Messages.LoginDialog_label_20_text);
+//			titleList.add(Messages.LoginDialog_label_21_text);
 			
 		}else if(relChapterType.contains("EQ_Performance_")) {
-			
 			File templateFile = FileConstants.getResourceFile(Constants.TYPE_YEJI);
 			Map<String, List<Map<String, String>>> typeMap = GetTypeUtils.resolverPerformance(tenderId, templateFile.getAbsolutePath());
-			rowList = typeMap.get(tenderProjectRuleEntity.getParamByKey("professionalCode"));
+			String statue = relChapterType.substring(relChapterType.length() -2, relChapterType.length());
+			String professionalCode = tenderProjectRuleEntity.getParamByKey("professionalCode");
+			rowList = typeMap.get(professionalCode);
 //			titleList.add(Messages.LoginDialog_label_2_text);
 			for(Map<String, String> map : rowList) {
-			
+				
+				if(statue.equals(CommonEnum.NO)) {
+					if(professionalCode.contains("C")) {
+						if(map.get("code").equals("endTime") ) {
+							continue;
+						}
+					}else if(professionalCode.contains("B")) {
+						if(map.get("code").equals("startTime") ) {
+							continue;
+						}
+					}
+				}
+//				if(map.get("code").equals("startTime") ) {
+//					if(statue.equals("01")) {
+//						titleList.add(map.get("name"));
+//					}
+//				}else {
+//				}
 				titleList.add(map.get("name"));
 			}
 		}
@@ -261,7 +329,7 @@ public class TemplateTableComparisonComposite extends Composite {
 //						supplierMessage.add(supplier.getSupplierName());
 						Map<String, String> bidderBasicInfoMap = Bean2MapUtils.createMap(bidderBasicInfo);
 						for(Map<String, String> map : rowList) {
-							
+							System.out.println("" + map.get("code") + "" + bidderBasicInfoMap.get(map.get("code")));
 							supplierMessage.add(ObjectUtils.getObjString(bidderBasicInfoMap.get(map.get("code"))));
 						}
 						kTableDataSource.addRowList(supplierMessage);
@@ -277,12 +345,18 @@ public class TemplateTableComparisonComposite extends Composite {
 						supplierMessage.add(rowIndex);
 						supplierMessage.add(supplier.getSupplierName());
 						supplierMessage.add(finance.getAnnual());
-						supplierMessage.add(finance.getTotal());
+						supplierMessage.add(finance.getOperatingIncome());
+						supplierMessage.add(finance.getCurrentAssets());
+						
+						supplierMessage.add(finance.getCurrentLiabilities());
+						supplierMessage.add(finance.getCurrentRate());
+						supplierMessage.add(finance.getRetainedProfits());
+						
+						supplierMessage.add(finance.getStockholdersEquity());
+						supplierMessage.add(finance.getReturnOnEquity());
 						supplierMessage.add(finance.getTotalliabilities());
+						supplierMessage.add(finance.getTotal());
 						supplierMessage.add(finance.getLiabilitiesRate());
-						supplierMessage.add(finance.getPrimeOperatingRevenue());
-						supplierMessage.add(finance.getRetainedProfits());
-						supplierMessage.add(finance.getProfitRatio());
 						kTableDataSource.addRowList(supplierMessage);
 						rowIndex ++;
 					}
@@ -294,8 +368,26 @@ public class TemplateTableComparisonComposite extends Composite {
 						supplierMessage.add(rowIndex);
 //						supplierMessage.add(supplier.getSupplierName());
 						Map<String, String> bidderBasicInfoMap = Bean2MapUtils.createMap(performance);
+						String yejiStatue = relChapterType.substring(relChapterType.length() -2, relChapterType.length());
+						String professionalCode = tenderProjectRuleEntity.getParamByKey("professionalCode");
+//				
+						
 						for(Map<String, String> map : rowList) {
 							String code = map.get("code");
+							
+							if(yejiStatue.equals(CommonEnum.NO)) {
+								if(professionalCode.contains("C")) {
+									if(map.get("code").equals("endTime") ) {
+										continue;
+									}
+								}else if(professionalCode.contains("B")) {
+									if(map.get("code").equals("startTime") ) {
+										continue;
+									}
+								}
+							}
+							
+							
 							if(null != code && code.equals("status") ) {
 								if(null != performance.getStatus() && CommonEnum.YES.equals(performance.getStatus())) {
 									supplierMessage.add("已完成");
@@ -303,7 +395,6 @@ public class TemplateTableComparisonComposite extends Composite {
 									supplierMessage.add("未完成");
 								}
 							}else {
-//								supplierMessage.add(bidderBasicInfoMap.get(map.get("code")));
 								supplierMessage.add(ObjectUtils.getObjString(bidderBasicInfoMap.get(map.get("code"))));
 							}
 						}
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
index 9993a58b..3c0a867f 100644
--- 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
@@ -68,7 +68,7 @@ public class TemplateTableListComposite extends Composite {
 		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(Messages.LoginDialog_label_30_text);
+		label.setText("当前指标未绑定评审点");
 		
 		Composite composite = new Composite(this, SWT.NONE);
 		GridLayout gl_composite = new GridLayout(1, false);
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
deleted file mode 100644
index 7ddbaea8..00000000
--- a/com.gx.obe.struct/src/com/gx/obe/struct/factory/ModelDataFactory.java
+++ /dev/null
@@ -1,1481 +0,0 @@
-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());
-				String statue = modelData.getDataCode().substring(modelData.getDataCode().length() -2, modelData.getDataCode().length());
-				RxSwt.run(() -> performanceService.getPerformanceList(modelData.getTenderId(), modelData.getId(), statue)).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());
-				String statue = modelData.getDataCode().substring(modelData.getDataCode().length() -2, modelData.getDataCode().length());
-				RxSwt.run(() -> performanceService.getPerformanceList(modelData.getTenderId(), modelData.getId(), statue)).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());
-				String statue = modelData.getDataCode().substring(modelData.getDataCode().length() -2, modelData.getDataCode().length());
-				RxSwt.run(() -> performanceService.getPerformanceList(modelData.getTenderId(), modelData.getId(), statue)).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());
-				String statue = modelData.getDataCode().substring(modelData.getDataCode().length() -2, modelData.getDataCode().length());
-				RxSwt.run(() -> performanceService.getPerformanceList(modelData.getTenderId(), modelData.getId(), statue)).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());
-				String statue = modelData.getDataCode().substring(modelData.getDataCode().length() -2, modelData.getDataCode().length());
-				RxSwt.run(() -> performanceService.getPerformanceList(modelData.getTenderId(), modelData.getId(), statue)).checkWidget(fTable).exe(l -> {
-					count.set(l.size());
-					fTable.refresh(l);
-				});
-			}
-		};
-	}
-	
-}
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
index 1193a3c0..56a450ba 100644
--- 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
@@ -4,7 +4,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import com.gx.obe.struct.beans.Finance;
+import com.gx.obe.components.core.vo.Finance;
 import com.gx.obe.web.utils.ObeHttpUtils;
 
 public class FinanceService {
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
index 966e5236..1659f50a 100644
--- 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
@@ -1,7 +1,5 @@
 package com.gx.obe.struct.thread;
 
-import java.io.File;
-import java.nio.charset.Charset;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -14,9 +12,7 @@ import org.dom4j.Document;
 import org.dom4j.Element;
 
 import com.gx.obe.common.file.enumeration.FileConstants;
-import com.gx.obe.common.file.thread.NewDownloadBiddingFileThread;
 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.message.Messages;
@@ -169,7 +165,6 @@ public class ParsingStructThread implements Runnable {
 		} catch (Exception e) {
 			messageProgress.message(Messages.FileDownloadShell2_label_6_text, -1);
 			LOG.error(Messages.FileDownloadShell2_label_6_text);
-//			System.out.println(e.getMessage());
 			return;
 		}
 		messageProgress.message(Messages.FileDownloadShell2_label_7_text, 1);
@@ -216,7 +211,6 @@ public class ParsingStructThread implements Runnable {
 	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 -> {
@@ -244,7 +238,6 @@ public class ParsingStructThread implements Runnable {
 	private void parsingModelData(String relChapterType, Supplier supplier, List<Element> fileItemElementList, String bidFilePath) {
 		//获取结构化数据xml文件地址
 		RelChapterTypeHandler handler = new RelChapterTypeHandler(relChapterType);
-		System.out.println("relChapterType   :"+  relChapterType );
 		Optional<ModelDataTypeEnum> modelDataTypeEnum ;
 		if(relChapterType.contains("EQ_Performance")) {
 			modelDataTypeEnum = Optional.of(ModelDataTypeEnum.MAP.get(relChapterType));
@@ -293,7 +286,6 @@ public class ParsingStructThread implements Runnable {
 	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);
-		System.out.println();
 		switch (modelDataEnum) {
 //			case BusinessLicense://经营许可证
 ////				System.out.println("BusinessLicense");
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
index b3affa6d..e3fd8950 100644
--- 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
@@ -13,12 +13,12 @@ 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.components.core.vo.Finance;
 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;
@@ -324,27 +324,45 @@ public class ParsingStructXmlUtils {
 		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.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.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.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.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.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.setLiabilities(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("liabilities")));
+		finance.setIncome(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("income")));
+		finance.setMainIncome(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("mainIncome")));
+		finance.setProfit(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("profit")));
+		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.setOperatingMargin(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("operatingMargin")));
+		finance.setPaidUpCapital(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("paidUpCapital")));
+		finance.setRetainedProfits(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("retainedProfits")));
+		finance.setMainIncomeProfits(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("mainIncomeProfits")));
+		
+		finance.setOperatingIncome(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("operatingIncome")));
+		finance.setCompanyName(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("companyName")));
+		finance.setStockholdersEquity(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("stockholdersEquity")));
+		finance.setReturnOnEquity(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("returnOnEquity")));
+		finance.setTotalliabilities(ObjectUtils.getObjBigDecimal(financeElement.elementTextTrim("totalliabilities")));
+//		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")));
-- 
2.24.1