package com.gx.obe.thread; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.List; import java.util.Optional; import org.apache.log4j.Logger; 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.widget.thread.MyThread; import com.gx.obe.components.core.Constants; import com.gx.obe.components.core.enumeration.CommonEnum; import com.gx.obe.components.core.enumeration.TenderProjectEnum; import com.gx.obe.config.utils.PropertiesUtils; import com.gx.obe.listener.ProgressMessageAdapter; import com.gx.obe.util.utils.StringUtils; import com.gx.obe.web.entity.TransactionServer; import com.gx.obe.web.entity.auth.AuthUser; import com.gx.obe.web.entity.tender.TenderProjectEntity; import com.gx.obe.web.entity.tender.TenderProjectRuleEntity; import com.gx.obe.web.service.TenderProjectService; import com.gx.obe.web.service.evaluation.EvaluationFactorService; import net.sf.json.JSONObject; /** * @Description: 下载项目信息线程 * @author guoyr */ public class NewDownloadProjectInfoThread extends MyThread{ private TenderProjectService tenderProjectService = new TenderProjectService() ; private EvaluationFactorService evaluationFactorService; // private TransactionServerService transactionServerService = ServiceFactory.getInstance("transactionServerService", TransactionServerService.class); private ProgressMessageAdapter callBack; private Logger LOG = Logger.getLogger(NewDownloadProjectInfoThread.class); private boolean isOpeningUser; private String userName; private String passWord; private TransactionServer transactionServer; private TenderProjectEntity downloadProject; private boolean downloadEvaluationFactor = false; private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public NewDownloadProjectInfoThread(TransactionServer transactionServer, boolean isOpeningUser, String userName, String passWord, TenderProjectEntity downloadProject, boolean downloadEvaluationFactor, ProgressMessageAdapter callBack){ this.isOpeningUser = isOpeningUser; this.callBack = callBack; this.downloadProject = downloadProject; this.userName = userName; this.passWord = passWord; this.transactionServer = transactionServer; this.downloadEvaluationFactor = downloadEvaluationFactor; } @Override public void run() { List<TenderProjectEntity> tenderPackList = downloadProject.getChildList(); if(null != downloadProject.getId() && downloadProject.getId().length() > 0){ downloadProject = tenderProjectService.getById(downloadProject.getId()); }else { // 在库中再查询一次 TenderProjectEntity queryParentProject = tenderProjectService.getTenderProjectByPhaseTypeTenderNumber(downloadProject.getTenderNo(),downloadProject.getPhaseType(),downloadProject.getTenderNumber()); if(null != queryParentProject){ downloadProject = queryParentProject; } } boolean downloadFlag = false; if(null != tenderPackList && tenderPackList.size() > 0){ if(null != downloadProject){ callBack.message("开始同步 [" + downloadProject.getTenderName()+"]项目信息...", 0); } for(TenderProjectEntity tenderPack : tenderPackList){ boolean downPackFlag = downloadProjectDetail(tenderPack, downloadProject); if(downPackFlag) { if(null == downloadProject.getId()) { TenderProjectEntity queryParentProject = tenderProjectService.getTenderProjectByPhaseTypeTenderNumber(downloadProject.getTenderNo(),downloadProject.getPhaseType(),downloadProject.getTenderNumber()); if(null != queryParentProject){ downloadProject = queryParentProject; } } if(!downloadFlag) { downloadFlag = true; } }else { downloadFlag = false; } } }else if(null == downloadProject.getId()){ downloadFlag = downloadProjectDetail(downloadProject, null); } if(null != callBack){ callBack.finish(downloadFlag); } } /** * @Description: * * @author guoyr * @param webAddress * @param invokeMethod * @param prjCodeCode 项目编号 * @param packCode 包件编号 * @param phaseType 阶段类型[00表示资格预审阶段 01表示招标文件阶段 默认01] * @param userName * @param password * @return */ public boolean downloadProjectDetail(TenderProjectEntity tenderProject, TenderProjectEntity parentTenderProject){ boolean downloadFlag = false; HttpUrl httpUrl = HttpUtils.getProjectHttpUrl(tenderProject, parentTenderProject, transactionServer, PropertiesUtils.getWebserviceProperty(WebserviceConstants.GET_PROJECT_INFO_METHOD, "tenderProjectInfoHS.do?getProjectInfoByPackCode")); httpUrl.setAttributeEncode("userName", userName); httpUrl.setAttribute("password", passWord); callBack.message("正在同步 [" + tenderProject.getTenderName()+"]信息...", 0); HttpResponse httpResponse = HttpUtils.doPost(httpUrl); downloadFlag = resolveXml(tenderProject, parentTenderProject, httpResponse); StringBuilder msg = new StringBuilder(); msg.append("[").append(tenderProject.getTenderNo()).append("]").append(tenderProject.getTenderName()); if(downloadFlag){ callBack.message(msg.toString()+" 信息同步成功!", 1); }else { callBack.message(msg.toString()+" 信息同步失败!", -1); } return downloadFlag; } /** * @Description: 解析返回的xml * @author guoyr * @param tenderProjectNote * @param xmlStr * @return */ private boolean resolveXml(TenderProjectEntity tenderProject, TenderProjectEntity parentProject, HttpResponse httpResponse){ if(!httpResponse.getStatus()){ callBack.message("消息:"+httpResponse.getMsg(), -1); return false; } try { JSONObject tenderProjectJSON = (JSONObject)httpResponse.getDataJSONObject("tenderProjectList"); AuthUser user = Constants.USER; TenderProjectRuleEntity parentRule = null; TenderProjectRuleEntity childRule = null; // 如唱歌是不分包项目 if(null == parentProject){ childRule = new TenderProjectRuleEntity(); resloverJsonObject(tenderProjectJSON, tenderProject, childRule, false, user); tenderProject.setIsPack(CommonEnum.NO); }else { parentRule = new TenderProjectRuleEntity(); childRule = new TenderProjectRuleEntity(); JSONObject childtenderProjectJSON = (JSONObject)httpResponse.getDataJSONObject("packInfoList"); resloverJsonObject(tenderProjectJSON, parentProject, parentRule, false, user); resloverJsonObject(childtenderProjectJSON, tenderProject, parentProject, childRule, true, user); parentProject.setIsPack(CommonEnum.YES); tenderProject.setParentProjectEntity(parentProject); } tenderProject = tenderProjectService.saveDownLoadProject(parentProject, tenderProject, parentRule, childRule); if(StringUtils.isNotEmpty(tenderProject.getId())){ //下载项目指标信息与供应商信息\ downTenderProjectOtherInfo(tenderProject); return true; } } catch (Exception e1) { LOG.error("========下载项目信息返回XML========="+httpResponse.getContent(), e1); } return false; } private void resloverJsonObject(JSONObject tenderProjectJSON, TenderProjectEntity tenderProjectEntity, TenderProjectRuleEntity tenderProjectRuleEntity, boolean isPackage, AuthUser user){ resloverJsonObject(tenderProjectJSON, tenderProjectEntity, null, tenderProjectRuleEntity, isPackage, user); } private void resloverJsonObject(JSONObject tenderProjectJSON, TenderProjectEntity tenderProjectEntity, TenderProjectEntity parentProject, TenderProjectRuleEntity tenderProjectRuleEntity, boolean isPackage, AuthUser user){ if(isPackage){ tenderProjectEntity.setTenderNo((String)tenderProjectJSON.get("packCode")); tenderProjectEntity.setTenderName((String)tenderProjectJSON.get("packName")); }else { tenderProjectEntity.setTenderNo((String)tenderProjectJSON.get("tenderNo")); tenderProjectEntity.setTenderName((String)tenderProjectJSON.get("tenderName")); } tenderProjectEntity.setPurcategoryNames((String)tenderProjectJSON.get("purcategoryNames"));//采购品目 tenderProjectEntity.setPurchaserName((String)tenderProjectJSON.get("buyersName"));//招标人 tenderProjectEntity.setTenderMethod((String)tenderProjectJSON.get("tenderMethod")); String agentName = (String)tenderProjectJSON.get("agentName"); if(StringUtils.isEmpty(agentName) && null != parentProject) { agentName = parentProject.getAgentName(); } tenderProjectEntity.setAgentName(agentName); tenderProjectEntity.setTenderType((String)tenderProjectJSON.get("tenderType")); tenderProjectEntity.setTenderNumber((String)tenderProjectJSON.get("tenderNoNumber")); if(null != tenderProjectJSON.get("orderlevel")){ tenderProjectEntity.setSortNo((Integer)tenderProjectJSON.get("orderlevel")); } String enterType = (String)tenderProjectJSON.get("enterType"); if(null == enterType || enterType.length() == 0){ enterType = null == parentProject ? TenderProjectEnum.ENTRY_TYPE_RECOMMON : parentProject.getEnterType(); } tenderProjectEntity.setEnterType(enterType); tenderProjectEntity.setManagerName(user.getUserName()); tenderProjectEntity.setCreateUser(user.getId()); tenderProjectEntity.setStageId((String)tenderProjectJSON.get("stageId")); if(isOpeningUser) { tenderProjectEntity.setOpeningUserId(user.getId()); }else { tenderProjectEntity.setUserId(user.getId()); } tenderProjectEntity.setPhaseType((String)tenderProjectJSON.get("stageType")); tenderProjectEntity.setServerAccount(userName); tenderProjectEntity.setServerPassword(passWord); tenderProjectEntity.setUseStatus(user.getUseStatus()); tenderProjectEntity.setTransactionServerId(transactionServer.getId()); String remoteStatus = TenderProjectEnum.REMOTE; if("03".equals((String)tenderProjectJSON.get("itemType"))){ // 平台中的属性 itemType 项目立项类型 00:平台全流程项目 03:平台半流程项目@马到成功 remoteStatus = TenderProjectEnum.HALF_PROCESS; } tenderProjectEntity.setRemoteStatus(remoteStatus); tenderProjectEntity.setIsPack((String)tenderProjectJSON.get("isPack")); String createTimeStr = (String)tenderProjectJSON.get("createTime"); String signUpStartTimeStr = (String)tenderProjectJSON.get("signUpStartTime");//公告发布时间 String docSaleStartTimeStr = (String)tenderProjectJSON.get("docSaleStartTime");//文件售卖开始时间 String docSaleEndTimeStr = (String)tenderProjectJSON.get("docSaleEndTime"); String appraiseStartTimeStr = (String)tenderProjectJSON.get("appraiseStartTime"); tenderProjectRuleEntity.setParam("appraiseStartTime", appraiseStartTimeStr); if(null != signUpStartTimeStr && !"".equals(signUpStartTimeStr)){ try { tenderProjectRuleEntity.setSignupStartTime(format.parse(signUpStartTimeStr)); } catch (ParseException e) { LOG.error("格式化时间错误:"+createTimeStr +e.getMessage()); } } if(null != docSaleStartTimeStr && !"".equals(docSaleStartTimeStr)){ try { tenderProjectRuleEntity.setDocSaleStartTime(format.parse(docSaleStartTimeStr)); } catch (ParseException e) { LOG.error("格式化时间错误:"+createTimeStr +e.getMessage()); } } if(null != docSaleEndTimeStr && !"".equals(docSaleEndTimeStr)){ try { tenderProjectRuleEntity.setDocSaleEndTime(format.parse(docSaleEndTimeStr)); } catch (ParseException e) { LOG.error("格式化时间错误:"+createTimeStr +e.getMessage()); } } String buyBidFileCount = (String)tenderProjectJSON.get("docSaleCount"); if(StringUtils.isEmpty(buyBidFileCount) && null != parentProject) { buyBidFileCount = parentProject.getEvaluationParamByKey("buyBidFileCount"); } tenderProjectEntity.setEvaluationParam("buyBidFileCount", buyBidFileCount); // tenderProjectEntity.setPurchaserName((String)tenderProjectJSON.get("purcategoryNames")); // String SIGNUPSTARTTIMESTR = (String)tenderProjectJSON.get("signUpStartTime");//公告发布时间 // String docSaleStartTimeStr = (String)tenderProjectJSON.get("DOCSALESTARTTIME");//文件售卖开始时间 // String docSaleEndTimeStr = (String)tenderProjectJSON.get("docSaleEndTime"); // String PURCATEGORY_NAMES = (String)tenderProjectJSON.get("purcategoryNames"); String limitPriceString = (String)tenderProjectJSON.get("limitPrice"); if(StringUtils.isNotEmpty(limitPriceString)){ BigDecimal limitPrice = new BigDecimal(limitPriceString); tenderProjectEntity.setBidPriceLimit(limitPrice); } if(null != createTimeStr && !"".equals(createTimeStr)){ try { tenderProjectEntity.setCreateTime(format.parse(createTimeStr)); } catch (ParseException e) { LOG.error("格式化时间错误:"+createTimeStr +e.getMessage()); } } String isRemoteOpening = (String)tenderProjectJSON.get("isRemoteOpening"); // 默认辅助开标 tenderProjectRuleEntity.setBidOpeningType(TenderProjectEnum.BIDOPENING_ASSIST); //两步开标 String bidOpenStage = (String)tenderProjectJSON.get("isTwoBidOpening"); if(null != bidOpenStage && bidOpenStage.trim().equals(TenderProjectEnum.BID_OPENING_TWO_STAGE)){ tenderProjectRuleEntity.setBidOpeningStage(TenderProjectEnum.BID_OPENING_TWO_STAGE); String bidOpeningStartTimeString = (String)tenderProjectJSON.get("openBidUnPriceStartTime"); if(null != bidOpeningStartTimeString && !"".equals(bidOpeningStartTimeString)){ try { tenderProjectRuleEntity.setBidOpeningStartTime(format.parse(bidOpeningStartTimeString)); } catch (ParseException e) { } } String openBidStartTimeStr = (String)tenderProjectJSON.get("openBidStartTime"); if(null != openBidStartTimeStr && !"".equals(openBidStartTimeStr)){ try { tenderProjectRuleEntity.setPriceBidOpeningTime(format.parse(openBidStartTimeStr)); } catch (ParseException e) { } } }else { tenderProjectRuleEntity.setBidOpeningStage(TenderProjectEnum.BID_OPENING_ONE_STAGE); String openBidStartTimeStr = (String)tenderProjectJSON.get("openBidStartTime"); if(null != openBidStartTimeStr && !"".equals(openBidStartTimeStr)){ try { tenderProjectRuleEntity.setBidOpeningStartTime(format.parse(openBidStartTimeStr)); } catch (ParseException e) { } } } String decodeType = (String)tenderProjectJSON.get("decodeType"); if(null != decodeType) { if("01".equals(decodeType)) { tenderProjectRuleEntity.setDecodeType(Constants.DECRYPT_REMOTE); }else if("02".equals(decodeType)) { tenderProjectRuleEntity.setDecodeType(Constants.DECRYPT_FOCUS); } } if(null != isRemoteOpening && isRemoteOpening.equals(TenderProjectEnum.BIDOPENING_REMOTE)){ // 远程开标 tenderProjectRuleEntity.setBidOpeningType(TenderProjectEnum.BIDOPENING_REMOTE); } } /** * @Description: 下载项目的其他信息 * @author guoyr * @param tenderProjectEntity * @param tenderProjectElement */ private void downTenderProjectOtherInfo(TenderProjectEntity tenderProjectEntity){ ProgressMessageAdapter otherInfoLoadingListener = new ProgressMessageAdapter() { public void message(String msg, int flag) { callBack.message(msg, flag); } @Override public int getErrorMessagesSize() { // TODO Auto-generated method stub return 0; } }; //下载投标人 // NewDownloadSupplierThread downloadSupplierListThread = new NewDownloadSupplierThread(tenderProjectEntity, otherInfoLoadingListener); if(!CommonEnum.COMPLETE.equals(tenderProjectEntity.getBidOpeningStatus())) { RefreshProjectSupplierTenderInfoThread downloadSupplierListThread = new RefreshProjectSupplierTenderInfoThread(tenderProjectEntity, otherInfoLoadingListener); downloadSupplierListThread.start(); downloadSupplierListThread.join(); } if(downloadEvaluationFactor){ if(null == evaluationFactorService) { evaluationFactorService = new EvaluationFactorService(); } if(evaluationFactorService.getEvaluationFactorCount(tenderProjectEntity.getId(), null) < 1) { // 下载评审指标 NewDownloadEvaluationFactorThread downloadEvaluationFactorThread = new NewDownloadEvaluationFactorThread(tenderProjectEntity, transactionServer, otherInfoLoadingListener); downloadEvaluationFactorThread.start(); downloadEvaluationFactorThread.join(); } } //下载工作人员 // DownloadWorkersThread downloadWorkerThread = new DownloadWorkersThread(tenderProjectEntity,callBack); // downloadWorkerThread.start(); // // //下载监督人员 // DownloadMonitorsThread downloadMonitorThread = new DownloadMonitorsThread(tenderProjectEntity,callBack); // downloadMonitorThread.start(); // // //下载专家 // new DownloadExpertThread(tenderProjectEntity, transactionServer.getServerAddress(), callBack).start(); } }