package com.norteksoft.mms.base.data; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.Arrays; import java.util.List; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.xwork.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.norteksoft.acs.entity.authorization.BusinessSystem; import com.norteksoft.acs.entity.organization.Company; import com.norteksoft.acs.service.authorization.BusinessSystemManager; import com.norteksoft.acs.service.organization.CompanyManager; import com.norteksoft.mms.form.entity.FormView; import com.norteksoft.mms.form.service.FormViewManager; import com.norteksoft.mms.module.entity.Menu; import com.norteksoft.mms.module.service.MenuManager; import com.norteksoft.product.util.ParameterUtils; import com.norteksoft.product.util.PropUtils; import com.norteksoft.product.util.ThreadParameters; import com.norteksoft.wf.engine.entity.WorkflowDefinition; import com.norteksoft.wf.engine.entity.WorkflowDefinitionFile; import com.norteksoft.wf.engine.service.WorkflowDefinitionManager; @Service @Transactional public class ExportImportData implements DataTransfer { private Log log = LogFactory.getLog(ExportImportData.class); @Autowired private BusinessSystemManager businessSystemManager; @Autowired private WorkflowDefinitionManager workflowDefinitionManager; @Autowired private FormViewManager formViewManager; @Autowired private MenuManager menuManager; @Autowired private DataHandle dataHandle; @Autowired private CompanyManager companyManager; /** * 导出 * @param systemIds 导出的系统id集合,以逗号隔开 * @param companyId 数据所在的公司id * @param fileConfig 文件配置 */ public void backup(String systemIds, Long companyId, FileConfigModel fileConfig) { try { ThreadParameters parameters=new ThreadParameters(companyId, null); ParameterUtils.setParameters(parameters); File file =null; OutputStream out=null; if(StringUtils.isNotEmpty(fileConfig.getFilename())){ file=new File(fileConfig.getExportRootPath()+"/"+fileConfig.getExportPath()+"/"+fileConfig.getFilename()+".xls"); out=new FileOutputStream(file); } if("ACS_SYSTEM".equals(fileConfig.getData())){ dataHandle.exportSystem(out, systemIds); }else if("ACS_PRODUCT".equals(fileConfig.getData())){ dataHandle.exportProductBySystem(out, systemIds); }else if("WF_TYPE".equals(fileConfig.getData())){ dataHandle.exportDefinitionType(out,companyId); }else if("WF_DEFINATION".equals(fileConfig.getData())){ dataHandle.exportDefinition(out,companyId,systemIds); }else if("JOB_INFO".equals(fileConfig.getData())){ dataHandle.exportJobInfo(out,companyId,systemIds); }else if("MMS_MENU".equals(fileConfig.getData())){ dataHandle.exportMenuBySystem(out,systemIds,companyId); }else if("OPTION_GROUP".equals(fileConfig.getData())){ dataHandle.exportOption(out,systemIds,companyId); }else if("PORTAL_INFO".equals(fileConfig.getData())){ dataHandle.exportPortal(out,systemIds,companyId); }else if("RANK".equals(fileConfig.getData())){ dataHandle.exportRank(out,companyId); }else if("DATA_DICT".equals(fileConfig.getData())){ dataHandle.exportDataDictionary(out,companyId); }else if("INTERNATION".equals(fileConfig.getData())){ dataHandle.exportInternation(out,companyId); }else if("OPERATION".equals(fileConfig.getData())){ dataHandle.exportOperation(out,systemIds,companyId); }else if("ACS_GROUP".equals(fileConfig.getData())|| "ACS_ROLE".equals(fileConfig.getData())|| "MMS_DATA_TABLE".equals(fileConfig.getData())|| "MMS_LIST_VIEW".equals(fileConfig.getData())|| "MMS_FORM_VIEW".equals(fileConfig.getData())){ if(StringUtils.isNotEmpty(systemIds)){ String[] sysIds=systemIds.split(","); for(String systemId:sysIds){ if(StringUtils.isNotEmpty(systemId)){ exportDatas(fileConfig,Long.parseLong(systemId),companyId); } } }else{ List<BusinessSystem> systems=businessSystemManager.getAllSystems(); for(BusinessSystem system:systems){ exportDatas(fileConfig,system.getId(),companyId); } } } } catch (Exception e) { log.debug(PropUtils.getExceptionInfo(e)); } } private void exportDatas(FileConfigModel fileConfig,Long systemId,Long companyId){ try { String fileName=fileConfig.getFilenameStartwith(); BusinessSystem system=null; if(systemId!=null){ system=businessSystemManager.getBusiness(systemId); fileName=fileName+"-"+system.getCode(); } File file = null; OutputStream out=null; if("ACS_GROUP".equals(fileConfig.getData())){ file = new File(fileConfig.getExportRootPath()+"/"+fileConfig.getExportPath()+"/"+fileName+".xls"); out=new FileOutputStream(file); dataHandle.exportFunGroup(out, systemId,null); }else if("ACS_ROLE".equals(fileConfig.getData())){ //导出系统公共角色 file = new File(fileConfig.getExportRootPath()+"/"+fileConfig.getExportPath()+"/"+fileName+".xls"); out=new FileOutputStream(file); dataHandle.exportRole(out, systemId,null,companyId); //导出公司角色 FileConfigModel config=dataHandle.getFileConfigByData("ACS_ROLE_COMPANY"); //创建导出文件夹,导出的文件暂存的位置 File folder = new File(config.getExportRootPath()+"/"+config.getExportPath()); if(!folder.exists()){ folder.mkdirs(); } fileName=config.getFilenameStartwith(); if(system!=null){ fileName=fileName+"-"+system.getCode(); } file = new File(config.getExportRootPath()+"/"+config.getExportPath()+"/"+fileName+".xls"); out=new FileOutputStream(file); dataHandle.exportCompanyRole(out, systemId,null,companyId); }else{ exportMmsData(fileConfig,system,companyId); } }catch (Exception e) { log.debug(PropUtils.getExceptionInfo(e)); } } private void exportMmsData(FileConfigModel fileConfig,BusinessSystem system,Long companyId){ try { if("MMS_DATA_TABLE".equals(fileConfig.getData())|| "MMS_LIST_VIEW".equals(fileConfig.getData())|| "MMS_FORM_VIEW".equals(fileConfig.getData())){ if(system!=null){ Menu menu=menuManager.getMenuByCode(system.getCode(),companyId); if(menu!=null){ File file = new File(fileConfig.getExportRootPath()+"/"+fileConfig.getExportPath()+"/"+fileConfig.getFilenameStartwith()+"-"+menu.getCode()+".xls"); OutputStream out=null; out=new FileOutputStream(file); if("MMS_DATA_TABLE".equals(fileConfig.getData())){ dataHandle.exportDataTable(out,null,menu.getId()); }else if("MMS_LIST_VIEW".equals(fileConfig.getData())){ dataHandle.exportListView(out,null,menu.getId()); }else if("MMS_FORM_VIEW".equals(fileConfig.getData())){ dataHandle.exportFormView(out,null,menu.getId()); } } } } }catch (Exception e) { log.debug(PropUtils.getExceptionInfo(e)); } } /** * 导入 * @param companyId 要导入数据的公司id * @param fileConfig 文件配置 * @param imatrixInfo 导入基础数据时,底层平台的ip、端口、服务名称 */ public void restore(Long companyId, FileConfigModel fileConfig,String... imatrixInfo) { File file =null; if(StringUtils.isNotEmpty(fileConfig.getFilename())){ file=new File(fileConfig.getImportRootPath()+"/"+fileConfig.getImportPath()+"/"+fileConfig.getFilename()+".xls"); if(file.exists()){ if("ACS_SYSTEM".equals(fileConfig.getData())){ String imatrixIp=null; String imatrixPort=null; String imatrixName=null; if(imatrixInfo!=null){ List<String> imatrixInfoList=Arrays.asList(imatrixInfo); imatrixIp=imatrixInfoList.size()>0?imatrixInfoList.get(0):null; imatrixPort=imatrixInfoList.size()>1?imatrixInfoList.get(1):null; imatrixName=imatrixInfoList.size()>2?imatrixInfoList.get(2):null; } dataHandle.importSystem(file, imatrixIp, imatrixPort, imatrixName); }else if("ACS_PRODUCT".equals(fileConfig.getData())){ dataHandle.importProduct(file); }else if("WF_TYPE".equals(fileConfig.getData())){ dataHandle.importDefinitionType(file, companyId); }else if("WF_DEFINATION".equals(fileConfig.getData())){ dataHandle.importDefinition(file, companyId); //读取流程定义内容 File dir=new File(fileConfig.getImportRootPath()+"/flowChar"); if(dir.exists()){ File[] files=dir.listFiles(); if(files!=null){ for(int i=0;i<files.length;i++){ File filei=files[i]; String fileName=filei.getName().split("\\.")[0]; String defCode=fileName.substring(0,fileName.indexOf("#")); String defVersion=fileName.substring(fileName.indexOf("#")+1,fileName.lastIndexOf("#")); String systemCode=fileName.substring(fileName.lastIndexOf("#")+1); BusinessSystem system=businessSystemManager.getSystemBySystemCode(systemCode); if(system != null){ if(companyId==null){ List<Company> companys=companyManager.getCompanys(); for(Company company:companys){ definitionFile(company.getId(),defCode,filei,Integer.parseInt(StringUtils.trim(defVersion)),system.getId()); } }else{ definitionFile(companyId,defCode,filei,Integer.parseInt(StringUtils.trim(defVersion)),system.getId()); } } } } } }else if("JOB_INFO".equals(fileConfig.getData())){ dataHandle.importJobInfo(file, companyId); }else if("MMS_MENU".equals(fileConfig.getData())){ dataHandle.importMenu(file, companyId); }else if("OPTION_GROUP".equals(fileConfig.getData())){ dataHandle.importOption(file, companyId); }else if("PORTAL_INFO".equals(fileConfig.getData())){ dataHandle.importPortal(file, companyId); }else if("RANK".equals(fileConfig.getData())){ dataHandle.importRank(file, companyId); }else if("DATA_DICT".equals(fileConfig.getData())){ dataHandle.importDataDict(file, companyId); }else if("INTERNATION".equals(fileConfig.getData())){ dataHandle.importInternation(file, companyId); }else if("OPERATION".equals(fileConfig.getData())){ dataHandle.importOperation(file, companyId); } } }else if(StringUtils.isNotEmpty(fileConfig.getFilenameStartwith())){ List<BusinessSystem> systems=businessSystemManager.getAllSystems(); for(BusinessSystem system:systems){ file=new File(fileConfig.getImportRootPath()+"/"+fileConfig.getImportPath()+"/"+fileConfig.getFilenameStartwith()+"-"+system.getCode()+".xls"); if(file.exists()){ if("ACS_GROUP".equals(fileConfig.getData())){ dataHandle.importFunGroup(file, system.getId()); }else if("ACS_ROLE".equals(fileConfig.getData())){ dataHandle.importRole(file, system.getId(),companyId); }else if("ACS_ROLE_COMPANY".equals(fileConfig.getData())){ dataHandle.importRole(file, system.getId(),companyId); }else if("MMS_DATA_TABLE".equals(fileConfig.getData())){ dataHandle.importDataTable(file, companyId); }else if("MMS_LIST_VIEW".equals(fileConfig.getData())){ dataHandle.importListView(file, companyId); }else if("MMS_FORM_VIEW".equals(fileConfig.getData())){ dataHandle.importFormView(file, companyId); } } } if("MMS_FORM_VIEW".equals(fileConfig.getData())){ //读取表单内容 File dir=new File(fileConfig.getImportRootPath()+"/formview"); if(dir.exists()){ File[]files=dir.listFiles(); ThreadParameters parameters=new ThreadParameters(companyId, null); ParameterUtils.setParameters(parameters); for(int i=0;i<files.length;i++){ File filei=files[i]; String fileName=filei.getName().split("\\.")[0]; String formCode=fileName.substring(0,fileName.lastIndexOf("#")); String formVersion=fileName.substring(fileName.lastIndexOf("#")+1); FormView formview=formViewManager.getCurrentFormViewByCodeAndVersion(formCode, Integer.parseInt(formVersion)); try { String html=FileUtils.readFileToString(filei, "UTF-8"); if(StringUtils.isNotEmpty(html.toString())){ formview.setHtml(html.toString()); } formViewManager.save(formview); } catch (Exception e) { log.debug(PropUtils.getExceptionInfo(e)); } } } } } } private void definitionFile(Long companyId,String defCode,File filei,Integer defVersion,Long systemId){//Integer.parseInt(StringUtils.trim(defVersion) WorkflowDefinition def=workflowDefinitionManager.getWorkflowDefinitionByCodeAndVersion(defCode, defVersion, companyId, systemId); if(def!=null){ WorkflowDefinitionFile defFile=workflowDefinitionManager.getWfDefinitionFileByWfdId(def.getId(), companyId); try { String document=FileUtils.readFileToString(filei, "UTF-8"); if(StringUtils.isNotEmpty(document.toString())){ defFile.setDocument(document); } workflowDefinitionManager.saveWorkflowDefinitionFile(defFile); } catch (Exception e) { log.debug(PropUtils.getExceptionInfo(e)); } } } }