xml文件导入、读取

package com.finstone.app.common.controller;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import com.fins.html.view.data.OutData;
import com.finstone.app.common.service.DatabaseInitService;
import com.finstone.app.common.service.SystemInitService;
import com.finstone.app.common.support.SystemInitLogEntity;
import com.finstone.app.common.support.User;




@Controller
public class SystemInitCon    {
	@Resource
	SystemInitService systemInitService;
	@Resource
	DatabaseInitService databaseInitService;
	
	private MultipartFile file;
	boolean pd=true;  

	public MultipartFile getFile() {
		return file;
	}

	public void setFile(MultipartFile file) {
		this.file = file;
	}

	@SuppressWarnings("finally")
	@RequestMapping("doUpgrade")
	public void doAutoUpgradeImp(HttpServletRequest request, HttpServletResponse response) {
		Subject subject = SecurityUtils.getSubject();
		User user = 	(User)subject.getPrincipal();
		FileOutputStream fos = null;
		BufferedInputStream bfis = null;
		BufferedOutputStream bfos = null;
		String keyval = request.getParameter("keyval");
		String de022 = user.getSjzonecode();
		SystemInitLogEntity log = new SystemInitLogEntity();
		String returnStr = "";
		PrintWriter out = null;
		try {
			//titanCoreService.checkLoadDataUser(request);
			response.setHeader("Cache-Control", "no-cache");  
		   response.setContentType("text/html; charset=utf-8");
			out = response.getWriter();
			systemInitService.checkKeyVal(keyval, user);
		} catch (Exception e) {
			returnStr = "<script>parent.setTSValue('口令错误,数据上传失败,请输入正确的口令!', 'red');</script>";
			//renderHtml(response, returnStr);
			
			out.println(returnStr);
			out.flush();
			out.close();
			return ;
		}
		try {
			// 转型为MultipartHttpRequest	
			MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
			// 获得文件
			Map map = multipartRequest.getFileMap();
			CommonsMultipartFile cfile = null;
			for (Iterator i = map.keySet().iterator(); i.hasNext();) {
				cfile = (CommonsMultipartFile) map.get(i.next());
			}
			String webroot= request.getSession().getServletContext().getRealPath("/") ;
			File file_ = new File(webroot+"/systemInit/"+"autoUpgradeImp.zip");
			file_.createNewFile();
			fos = new FileOutputStream(file_);
			bfis = new BufferedInputStream(cfile.getInputStream());
			bfos = new BufferedOutputStream(fos);
			FileCopyUtils.copy(bfis, bfos);
			String  filePath=webroot+"systemInit/autoUpgradeImp.zip";
			ServletContext servletContext=request.getSession().getServletContext();
			//判断版本号
			systemInitService.doAutoUpgradeImport_BBH(filePath, de022, log);
			//页面程序升级			
			Map rmap=systemInitService.doAutoUpgradeImport_YM(filePath, de022, log);
			//map.get("code");
			//数据库升级
			systemInitService.doAutoUpgradeImport(filePath, de022, log);
			if(log.getBS().startsWith("0")){//处理有异常
			 
				//model.addAttribute("code", "-1");
				//model.addAttribute("text", "升级失败.明细信息查看日志");
				returnStr = "<script>parent.setTSValue('数据库升级失败.明细信息查看日志','red');</script>";
				out.println(returnStr);
				out.flush();
				out.close();
				return ;
			}else{
				//model.addAttribute("code", "1");
				//model.addAttribute("text", "自动升级完成,请查看升级日志,核对升级内容是否完全正确!");
				returnStr = "<script>parent.setTSValue('数据库自动升级完成,请查看升级日志,核对升级内容是否完全正确!', 'blue');</script>";
				out.println(returnStr);
				out.flush();
				systemInitService.excuteProcedure(log);
			}
			file_.delete();
		} catch (Exception e) {
			e.printStackTrace();
			log.setFunname("系统升级");
			log.setBS("0");
			log.setLx(3);
		
			log.setDE022(de022);
			if(e.getMessage().length()>=1000){
				log.setSM(e.getMessage().substring(0, 1000));
			}else{
				log.setSM(e.getMessage());
			}

			log.setTimedata( new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
			//model.addAttribute("code", "-1");
			//model.addAttribute("text", "升级失败请查看日志");
			returnStr = "<script>parent.setTSValue('升级失败请查看日志', 'red');</script>";
			out.println(returnStr);
			out.flush();
		 
		} finally {
			if (file != null) {
				try {
					fos.close();
					bfos.close();
					bfis.close();
				} catch (Exception e) {
					bfis = null;
					bfos = null;
					fos = null;
				}
			}
			this.systemInitService.insertLog(log);
			returnStr += "<script>parent.refreshParent();</script>";
			//renderHtml(response, returnStr);
			out.println(returnStr);
			out.flush();
			out.close();
			return ;
		}
	}

	
	

	
	
	@RequestMapping("/initXmlCreate")
	public void initXmlCreate(HttpServletRequest request, 	HttpServletResponse response) {
		try {
			databaseInitService.initXmlCreate(request, response);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	 
	   
	}
	
	
	
	@SuppressWarnings("finally")
	@RequestMapping("doDatabaseInit")
	public void doDatabaseImp(HttpServletRequest request, HttpServletResponse response) {
		Subject subject = SecurityUtils.getSubject();
		User user = 	(User)subject.getPrincipal();
		FileOutputStream fos = null;
		BufferedInputStream bfis = null;
		BufferedOutputStream bfos = null;
		String keyval = request.getParameter("keyval");
		//String de022 = user.getSjzonecode();
		SystemInitLogEntity log = new SystemInitLogEntity();
		String returnStr = "";
		PrintWriter out = null;
		try {
 			response.setHeader("Cache-Control", "no-cache");  
		   response.setContentType("text/html; charset=utf-8");
			out = response.getWriter();
			systemInitService.checkKeyVal(keyval, user);
		} catch (Exception e) {
			returnStr = "<script>parent.setTSValue('口令错误,数据上传失败,请输入正确的口令!', 'red');</script>";
 			out.println(returnStr);
			out.flush();
			out.close();
			return ;
		}
		try {
			// 转型为MultipartHttpRequest	
			MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
			// 获得文件
			Map map = multipartRequest.getFileMap();
			CommonsMultipartFile cfile = null;
			for (Iterator i = map.keySet().iterator(); i.hasNext();) {
				cfile = (CommonsMultipartFile) map.get(i.next());
			}
			String webroot= request.getSession().getServletContext().getRealPath("/") ;
			File file_ = new File(webroot+"/systemInit/"+"initXml.xml");
			file_.createNewFile();
			fos = new FileOutputStream(file_);
			bfis = new BufferedInputStream(cfile.getInputStream());
			bfos = new BufferedOutputStream(fos);
			FileCopyUtils.copy(bfis, bfos);
			String filePath = webroot + "systemInit/initXml.xml";
			// servletContext=request.getSession().getServletContext();
			Map<String, String> paramMap = new HashMap<String, String>();
			String xzqh = request.getParameter("XZQH");
			paramMap.put("XZQH", xzqh);// 操作的行政区划
			paramMap.put("PATH", filePath);
			//编辑日志
			log.setLx(1);
			log.setDE022(xzqh);
			log.setFCILITYPRSONNEL(user.getId());
			log.setBS("1");
			log.setFunname("初始化文件导入");
			log.setSM("操作成功");
			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			log.setTimedata(dateFormat.format(new Date()));
			//执行导入操作
			databaseInitService.doDatabaseInitImp(paramMap, user, log);
			if (log.getBS().startsWith("0")) {// 处理有异常
				returnStr = "<script>parent.setTSValue('初始化失败,明细信息查看日志','red');</script>";
				out.println(returnStr);
				out.flush();
				out.close();
				return ;
			}else{
				returnStr = "<script>parent.setTSValue('初始化完成,请查看升级日志,核对初始化内容是否完全正确!', 'blue');</script>";
				out.println(returnStr);
				out.flush();
			}
			file_.delete();
		} catch (Exception e) {
			e.printStackTrace();
			if(e.getMessage().length()>=1000){
				log.setSM(e.getMessage().substring(0, 1000));
			}else{
				log.setSM(e.getMessage());
			} 
			returnStr = "<script>parent.setTSValue('初始化失败,请查看日志', 'red');</script>";
			out.println(returnStr);
			out.flush();
		 
		} finally {
			if (file != null) {
				try {
					fos.close();
					bfos.close();
					bfis.close();
				} catch (Exception e) {
					bfis = null;
					bfos = null;
					fos = null;
				}
			}
			 this.systemInitService.insertLog(log);
			returnStr += "<script>parent.refreshParent();</script>";
 			out.println(returnStr);
			out.flush();
			out.close();
			return ;
		}
	}

 	
}
package com.finstone.app.common.service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.json.JSONObject;
import org.springframework.stereotype.Service;

import com.fins.common.exception.BusException;
import com.fins.html.view.data.OutData;
import com.fins.modules.dao.DataBaseHelper;
import com.finstone.app.common.support.SystemInitLogEntity;
import com.finstone.app.common.support.User;
import com.finstone.framework.support.IUser;
import com.finstone.zxt.common.service.GkbCommGetSqlDataService;
import com.finstone.zxt.common.support.LogErrorModel;
import com.finstone.zxt.common.tool.FinString;



@Service
public class DatabaseInitService  {


	static Logger logger = LogManager.getLogger(DatabaseInitService.class.getName());
	private LogErrorModel logdto;
	@Resource(name = "gkbCommGetSqlDataService")
	private GkbCommGetSqlDataService gkbCommGetSqlDataService;
	@Resource
	SystemInitService systemInitService;
	@SuppressWarnings({ "rawtypes" })
	public void doDatabaseInitImp(Map p,IUser user,SystemInitLogEntity log ) {
		User userinfo = (User) user;
 		List tablesList=new ArrayList();//存储tables类别列表
		List tableList=new ArrayList();//存储具体某一类中的待处理表
        Element tables=null;
        Element table=null;
        Attribute tablesattr=null;
        Attribute tableattr=null;
        String tablename;
		
        List list=new ArrayList();//特殊处理sql
        String temp_Sql="";
		try {
		
		if(!userinfo.getLoginName().equalsIgnoreCase("admin")){
			log.setBS("0");
			log.setSM("只有超级管理员才能执行此操作");
			throw  new BusException("只有超级管理员才能执行此操作");
		}
		if(p.get("XZQH")==null||p.get("XZQH").equals("")){
			log.setBS("0");
			log.setSM("请选择行政区划!");
			throw  new BusException("请选择行政区划!");
		}
		
		if(p.get("XZQH").toString().replaceAll("0000", "").length()!=2){
			log.setBS("0");
			log.setSM("请选择省级区划!");
			throw  new BusException("请选择省级区划!");
		}
	
		//特殊修改,admin用户
	     String sql="delete pt_user where username <> 'admin'";
		DataBaseHelper.execute(sql);
		sql="update pt_user set de022='"+p.get("XZQH").toString()+"'";
		DataBaseHelper.execute(sql);
	 
	//	String path = URLDecoder.decode(this.getClass().getClassLoader().getResource("/").getPath(), "UTF-8");
 		String path  =  p.get("PATH").toString() ; 
		Document document = load(path);
		tablesList=document.selectNodes("//tables");
			for (int i = 0; i < tablesList.size(); i++) {
				tables = (Element) tablesList.get(i);
				tablesattr = tables.attribute("type");// 类型
				if (tablesattr.getValue().equalsIgnoreCase("1")) {
					tableList = tables.elements("tableName");
					for (int j = 0; j < tableList.size(); j++) {
						table = (Element) tableList.get(j);
						tableattr = table.attribute("mc");// 表名称
						tablename = table.getTextTrim();
						try {
							truncateTable(tablename);
						} catch (Exception e) {
							e.printStackTrace();
							log.setBS("0");
							if (e.getMessage().length() >= 900) {
								log.setSM(e.getMessage().substring(0, 900));
							} else {
								log.setSM(e.getMessage());
							}
							throw new BusException("表数据清空操作执行错误:"
									+ e.getMessage());
						}

					}
				} else if (tablesattr.getValue().equalsIgnoreCase("2")) {
					tableList = tables.elements("tableName");

					for (int j = 0; j < tableList.size(); j++) {
						table = (Element) tableList.get(j);
						tableattr = table.attribute("mc");// 表名称
						Attribute guid = table.attribute("guid");// guid
						tablename = table.getTextTrim();
						String g = "";
						if (guid != null) {
							g = guid.getValue();
						}
						try {
							copyStandInfo(tablename, p.get("XZQH").toString());
						} catch (Exception e) {
							e.printStackTrace();
							log.setBS("0");
							if (e.getMessage().length() >= 900) {
								log.setSM(e.getMessage().substring(0, 900));
							} else {
								log.setSM(e.getMessage());
							}
							throw new BusException("根据标准版复制数据操作执行错误:"
									+ e.getMessage());
						}

					}
				} else if (tablesattr.getValue().equalsIgnoreCase("3")) {
					tableList = tables.elements("tableName");
					for (int j = 0; j < tableList.size(); j++) {
						table = (Element) tableList.get(j);
						tableattr = table.attribute("mc");// 表名称
						tablename = table.getTextTrim();
						try {
							handleStandInfo(tablename, p.get("XZQH").toString());
						} catch (Exception e) {
							e.printStackTrace();
							log.setBS("0");
							if (e.getMessage().length() >= 900) {
								log.setSM(e.getMessage().substring(0, 900));
							} else {
								log.setSM(e.getMessage());
							}
							throw new BusException("自动生成数据操作执行错误:"
									+ e.getMessage());
						}
					}
				} else {
					log.setBS("0");
					log.setSM("类型配置不正确,不存在此类型");
	                throw new BusException("类型配置不正确,不存在此类型");
				}
			}

			// 执行特殊业务sql
			list = document.selectNodes("//sqls/sql");
			if (list != null && list.size() > 0) {

				int len = list.size();
				for (int i = 0; i < len; i++) {
					Element element = (Element) list.get(i);
					temp_Sql = element.getText();
					try {
						DataBaseHelper.update(temp_Sql);
					} catch (Exception e) {
						e.printStackTrace();
						log.setBS("0");
						if(e.getMessage().length()>=900){
							log.setSM(e.getMessage().substring(0, 900));
						}else{
							log.setSM(e.getMessage());
						} 
						throw new BusException("配置菜单sql执行错误:"+e.getMessage());
					}
				}
			}

		} catch (Exception e) {
		    throw new BusException(e.getMessage());
		}
		 
	}
	
	
	   /** 
	    * load 
	    * 载入一个xml文档 
	    * @return 成功返回Document对象,失败返回null 
	    * @param uri 文件路径 
	    */ 
	   public static Document load(String filename) 
	   { 
	      Document document = null; 
	      try  
	      {  
	          SAXReader saxReader = new SAXReader(); 
	          document = saxReader.read(new File(filename)); 
	      } 
	      catch (Exception ex){ 
	          ex.printStackTrace(); 
	      }   
	      return document; 
	   }
	/*
	 * 
	 */
	public  void truncateTable(String tablename ){
		SystemInitLogEntity log = new SystemInitLogEntity();
		log.setLx(1);
		log.setFunname("初始化操作执行truncateTable");
		log.setSM("清空表" + tablename + "成功");
		log.setBS("1");
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			int istable = gkbCommGetSqlDataService.isTable(tablename);
			if (istable == 0) {
				log.setSM("清空表" + tablename + "失败:指定的表名称无效,请重新指定");
				throw new BusException("指定的表名称无效,请重新指定");
			} else {

				log.setUpdata(dateFormat.format(new Date()));// 开始时间
				logger.info("清空表" + tablename + "开始");
				String sql = "truncate table " + tablename;
				DataBaseHelper.execute(sql);
				log.setTimedata(dateFormat.format(new Date()));// 结束时间
			    logger.info("清空表" + tablename + "完成");

			}
		} catch (Exception e) {
		    log.setBS("0");
		    log.setSM("清空表" + tablename + "失败");
			logger.info("清空表" + tablename + "失败");
			throw new BusException(e.getMessage());
		} finally {
		   systemInitService.insertOptionLog(log);
		}
	}
	public void copyStandInfo(String tablename,String xzqh){
		SystemInitLogEntity log = new SystemInitLogEntity();
		log.setLx(1);
		log.setFunname("初始化操作执行copyStandInfo");
		log.setSM("根据标准版复制数据操作" + tablename + "成功");
		log.setBS("1");
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try{

		int istable=gkbCommGetSqlDataService.isTable(tablename);

		if(istable==0){
			log.setSM("根据标准版复制数据操作" + tablename + "失败:指定的表名称无效,请重新指定");
			throw  new BusException("指定的表名称无效,请重新指定");
		}else{
			logger.info("初始化表"+tablename+"开始");
			List<Map<String, Object>> Columns= gkbCommGetSqlDataService.getTableInfo(tablename);
			for(int i=0;i<Columns.size();i++){
				if(Columns.get(i).get("COLUMN_NAME").toString().equalsIgnoreCase("DE022"))break;
				if(i==Columns.size()-1&&!Columns.get(i).get("COLUMN_NAME").toString().equalsIgnoreCase("DE022")){//判断主键字段是否是表中字段,如果不是抛出异常
					throw  new BusException("表不存在DE022地区字段,请查验");
				}
			}
			log.setUpdata(dateFormat.format(new Date()));// 开始时间
			String sql="update "+tablename+" set de022='"+xzqh+"'";
			DataBaseHelper.update(sql);
			log.setTimedata(dateFormat.format(new Date()));// 结束时间
/*			List<Map<String, Object>> Columns= gkbCommGetSqlDataService.getTableInfo(tablename);
			String _g="";
			if(guid!=""){
			for(int i=0;i<Columns.size();i++){
				if(Columns.get(i).get("COLUMN_NAME").toString().equalsIgnoreCase(guid))break;
				if(i==Columns.size()-1&&!Columns.get(i).get("COLUMN_NAME").toString().equalsIgnoreCase(guid)){//判断主键字段是否是表中字段,如果不是抛出异常
					throw  new BusException("主键字段设置不正确,请重新指定");
				}
			}
			_g=guid+",";
			}
			else{
				_g="";
			}
			String sql="delete from  "+tablename+" where de022 not like '990000'";
			DataBaseHelper.update(sql);

			Map zdxxMap = gkbCommGetSqlDataService.getTableColumnSqlInfo(
					tablename, "a", _g+"de022,", "");
			int codeInt = Integer.parseInt(FinString.ts(zdxxMap.get("code")));
			if (codeInt < 0) {
				throw new BusException(FinString.ts(zdxxMap.get("text")));
			}
			String zdxxStr = FinString.ts(zdxxMap.get("text"));
			List<Map<String,Object>> list=DataBaseHelper.queryForList("select "+zdxxStr+" from "+tablename+" a where de022  like '990000'");
			for(int i=0;i<list.size();i++){
				Map<String,Object> m=list.get(i);
				m.put("DE022", xzqh);
				if(guid!=""){
				m.put(guid.toUpperCase(), GkbCommTools.getUuid());
				}
				Map sqlMap = gkbCommGetSqlDataService.getAddSqlInfo(tablename,
						m);
				codeInt = Integer.parseInt(FinString.ts(sqlMap.get("code")));
				if (codeInt < 0) {
					throw new BusException(FinString.ts(sqlMap.get("text")));
				}
				DataBaseHelper.update(FinString.ts(sqlMap.get("text")), m);
			}
*/
			logger.info("初始化表"+tablename+"完成");
		}
		}catch(Exception e){
			logger.info("初始化表"+tablename+"失败");
			e.printStackTrace();
			log.setBS("0");
			log.setSM("根据标准版复制数据操作" + tablename + "失败");
			// data.setCode(-1);
			// data.setMsg("初始化失败");
			throw new BusException(e.getMessage());
		} finally {
			systemInitService.insertOptionLog(log);
		}

	}
	/*
	 * xzqh为类似于320000的代码
	 */
	public void handleStandInfo(String tablename,String xzqh)  throws Exception{
		SystemInitLogEntity log = new SystemInitLogEntity();
		log.setLx(1);
		log.setFunname("初始化操作执行handleStandInfo");
		log.setSM("配置菜单sql执行" + tablename + "成功");
		log.setBS("1");
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try{
		int istable=gkbCommGetSqlDataService.isTable(tablename);
		if(istable==0){
			log.setSM("配置菜单sql执行" + tablename + "失败:指定的表名称无效,请重新指定");
			log.setBS("0");
			throw  new BusException("指定的表名称无效,请重新指定");
		}else{
			logger.info("初始化表"+tablename+"开始");
			String sql="delete from  "+tablename+" where de022 not like '99%'";
			DataBaseHelper.update(sql);
            List<Map<String, Object>> columns= gkbCommGetSqlDataService.getTableInfo(tablename);
			List<Map<String, Object>> cs021Columns= gkbCommGetSqlDataService.getTableInfo("cs021");
			List<Map<String,Object>> list=DataBaseHelper.queryForList("select * from "+tablename+" a where de022 like '99%'");
			
			for(int i=0;i<list.size();i++){
				Map<String,Object> m=list.get(i);
				String de022_bzb=m.get("DE022").toString();
				int xzqhlength=0;
				if(de022_bzb.equalsIgnoreCase("990000")){//省级数据
					xzqhlength=2;
				}
				else if(de022_bzb.equalsIgnoreCase("990900")){//市级数据
					xzqhlength=4;
				}
                else if(de022_bzb.equalsIgnoreCase("990909")){//显级数据
                	xzqhlength=6;
                }else{
                	log.setSM("配置菜单sql执行" + tablename + "失败:需要先清空非标准版数据");
        			log.setBS("0");
					throw new BusException("需要先清空非标准版数据");
				}
				
					List<Map<String,Object>> province=DataBaseHelper.queryForList("select * from cs021 where isqy=1 and length(de0221)="+xzqhlength+" and de022 like  (regexp_replace('"+xzqh+"','00$|0000$|000000$',''))||'%'");
					for(int rownum=0;rownum<province.size();rownum++){
						Map<String, Object> mapinfo = new HashMap<String, Object>();
						Map<String,Object> provinceRow=province.get(rownum);
					for(int columnnum=0;columnnum<columns.size();columnnum++){//针对每列,判断是否有#内容
						String columnName=columns.get(columnnum).get("COLUMN_NAME").toString();
						String columnType=columns.get(columnnum).get("DATA_TYPE").toString();
						if(!columnName.equals("DE022")){
							if(!columnType.equals("CLOB")){   
							//非区域代码字段,非clob字段
						    if(m.get(columnName)==null){
						    	//处理为空字段
						    }
						    else if(m.get(columnName).toString().indexOf("#")<0){
						    	//处理直接文本字段
								mapinfo.put(columnName, m.get(columnName).toString());
							}else{
								//判断是否两个#之间的字段是否在cs021中,如果不在那张表中,跑出异常
								String param=m.get(columnName).toString().substring(m.get(columnName).toString().indexOf("#")+1, m.get(columnName).toString().lastIndexOf("#"));
								for(int c=0;c<cs021Columns.size();c++){
									if(c==cs021Columns.size()-1&&(cs021Columns.get(c).get("COLUMN_NAME").toString().equalsIgnoreCase(param))){
									 	log.setSM("配置菜单sql执行" + tablename + "失败:参数设置不正确");
					        			log.setBS("0");
										throw new BusException("参数设置不正确,请查验");
									}
								}
								
								mapinfo.put(columnName,m.get(columnName).toString().replace("#"+param+"#", provinceRow.get(param).toString()));
							}
			
						}
					}
					}
					//插入数据行
						mapinfo.put("DE022", provinceRow.get("DE022")
								.toString());
						Map sqlMap = gkbCommGetSqlDataService.getAddSqlInfo(
								tablename, mapinfo);
						int codeInt = Integer.parseInt(FinString.ts(sqlMap
								.get("code")));
						if (codeInt < 0) {
							throw new BusException(FinString.ts(sqlMap
									.get("text")));
						}
						log.setUpdata(dateFormat.format(new Date()));// 开始时间
						DataBaseHelper.update(FinString.ts(sqlMap.get("text")),
								mapinfo);
						log.setTimedata(dateFormat.format(new Date()));// 结束时间
					}

				}

				logger.info("配置菜单sql执行" + tablename + "完成");
			}
		} catch (Exception e) {
			e.printStackTrace();
			log.setBS("0");
			log.setSM("配置菜单sql执行" + tablename + "失败");
			throw new BusException(e.getMessage());
		} finally {
			systemInitService.insertOptionLog(log);
		}
	}

	public OutData getInitXzqhList(Map<String,Object>  p, IUser arg1) {
		User user = (User)arg1;
		String sql = "";
		List<Map<String, Object>> list = null;
		
		
		try {
			
		if(!user.getLoginName().equalsIgnoreCase("admin")){
			throw  new BusException("初始化只有管理员才能够进行");
		}

			sql = " select de022 id,de021 text from cs021  where  length(de0221) = 2 AND  DE022 NOT LIKE '99%'";
			list = DataBaseHelper.queryForList(sql);

			 
		
			OutData data = new OutData();
			data.setCode(0);
			data.setMsg("-");
			data.setData(list);
			return data;
		} 
		catch (Exception e) {
			throw new BusException(e.getMessage());
		}
	}
	
	/**
	 * 
	 * @param
	 * @param arg1
	 * @return
	 */
	public OutData getInitTables(Map<String,Object>  p, IUser arg1) {
		User user = (User)arg1;
		String sql = "";
		List<Map<String, Object>> list = null;

		sql = "select  '0' pid,tb_type id,tb_typenote text from meta_tabletype where  tb_type in ( select tb_type from meta_tableinfo  where czlb is not null ) union all select  tb_type  pid, tb_name id,tb_note text from meta_tableinfo where czlb is not null";
		list = DataBaseHelper.queryForList(sql);
		
		try {
			OutData data = new OutData();
			data.setCode(0);
			data.setMsg("-");
			data.setData(list);
			return data;
		} 
		catch (Exception e) {
			throw new BusException(e.getMessage());
		}
	}
	
	
	/**
	 * 
	 * @param
	 * @param arg1
	 * @return
	 */
	public OutData getInitMenuList(Map<String,Object>  p, IUser arg1) {
		User user = (User)arg1;
		String sql = "";
		List<Map<String, Object>> list = null;

		sql = "select parentid pid,id ,name text from pt_menu t where status=1";
		list = DataBaseHelper.queryForList(sql);
		
			 
		try {
			OutData data = new OutData();
			data.setCode(0);
			data.setMsg("-");
			data.setData(list);
			return data;
		} 
		catch (Exception e) {
			throw new BusException(e.getMessage());
		}
	}
/*	public String doSystemInitExp(Map<String,Object>  p, IUser arg1) {
		StringBuffer msg = new StringBuffer("");
		try {
			String enter = "\r\n";
			Document maindoc = getDocument(this.getClass().getClassLoader().getResourceAsStream("config/systemInit.xml"));

			maindoc.selectSingleNode("//finersion").setText(vserion);// msgno字段暂时存放表名
			maindoc.selectSingleNode("//fin/isAll").setText("1");
			maindoc.selectSingleNode("//fin/de011").setText(de011);
			maindoc.selectSingleNode("//fin/dataBaseType").setText(dataType);
			maindoc.selectSingleNode("//fin/ildingUpTime").setText(new SimpleDateFormat("yyyy-MM-dd").format(new Date()).replaceAll("-", ""));
			maindoc.selectSingleNode("//fin//financialSector").setText("");
			String mainStr = maindoc.asXML();

			msg = new StringBuffer(mainStr.substring(0,
					mainStr.indexOf("<functionalMenus>")));
			String[] menuid_arr = menuid.split(",");
			String m_t = "";
			if (menuid_arr.length > 0) {
				for (int k = 0; k < menuid_arr.length; k++) {
					m_t += "'" + menuid_arr[k] + "',";
				}
			} else {
				m_t = "'0',";
			}
			m_t = m_t.substring(0, m_t.length() - 1);
			String sellectSsmenu = "select * from ssmenu  where  menuid in("+ m_t + ")order by menuid";
			List<Map<String, Object>> list_menu = this.getSimpleJdbcTemplate().queryForList(sellectSsmenu);
			if (list_menu != null && list_menu.size() > 0) {
				for (int i = 0, len = list_menu.size(); i < len; i++) {
					msg.append("<menu menuid=\""+ (list_menu.get(i).get("menuid") == null ? "": list_menu.get(i).get("menuid")) + "\" ");
					msg.append(" menuname=\""+ (list_menu.get(i).get("menuname") == null ? "": list_menu.get(i).get("menuname")) + "\" ");
					msg.append(" menustatus=\""+ (list_menu.get(i).get("menustatus") == null ? "": list_menu.get(i).get("menustatus"))+ "\" ");
					msg.append(" menuaction=\""+ (list_menu.get(i).get("menuaction") == null ? "": list_menu.get(i).get("menuaction"))+ "\" ");
					msg.append(" parentid=\""+ (list_menu.get(i).get("parentid") == null ? "": list_menu.get(i).get("parentid")) + "\" ");
					msg.append(" displayorder=\""+ (list_menu.get(i).get("displayorder") == null ? "": list_menu.get(i).get("displayorder"))+ "\" ");
					msg.append(" menuicon=\""+ (list_menu.get(i).get("menuicon") == null ? "": list_menu.get(i).get("menuicon")) + "\" ");
					msg.append(" xtbz=\""+ (list_menu.get(i).get("xtbz") == null ? "": list_menu.get(i).get("xtbz")) + "\" ");
					msg.append(" ischeck=\""+ (list_menu.get(i).get("ischeck") == null ? "0": list_menu.get(i).get("ischeck"))+ "\" isFlag=\"\" ></menu> " + enter);
				}
			}
			msg.append(mainStr.substring(mainStr.indexOf("</functionalMenus>"),
					mainStr.length()));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return msg.toString();
	}*/
	
	
	/**
	 * 
	 * 生成XML文件
	 * 
	 * @param request
	 * @param response
	 * @throws IOException
	 */
 	public void initXmlCreate(HttpServletRequest request, HttpServletResponse response) throws IOException {
		// param 对象来自页面隐藏input元素,内存JSON格式对象
		String param = request.getParameter("param");
 		StringBuffer sb = new StringBuffer();
        String path=request.getSession().getServletContext().getRealPath("/");
		JSONObject expObj = null;
	 
 		if (param != null) {
 			try {
 				// 获取总体param JSON
				JSONObject pobj = new JSONObject(param);
				expObj = pobj.getJSONObject("expObj");
				String[] tablelist=expObj.get("TABLELIST").toString().split(",");//选取的表
				String[] menulist=expObj.get("MENULIST").toString().split(",");//选取的菜单id
				String version=  FinString.ts( expObj.get("VERSION") );
				//String sjqh=  FinString.ts( expObj.get("SJQH") );
			   //创建xml doc
			    Document document = DocumentHelper.createDocument();  
				Element rootElement = document.addElement("fin");
 				rootElement.addElement("version").addText(version);
 				String sql = "";
				Map tabMap = null;
				//四大类别
				Element type1 = rootElement.addElement("tables");
				type1.addAttribute("type", "1");
				type1.addAttribute("sm", "清空数据");
				Element type2 = rootElement.addElement("tables");
				type2.addAttribute("type", "2");
				type2.addAttribute("sm", "根据标准版复制数据");
				Element type3 = rootElement.addElement("tables");
				type3.addAttribute("type", "3");
				type3.addAttribute("sm", "根据标准版配置信息生成数据");
				Element type4 = rootElement.addElement("sqls");
 				type4.addAttribute("sm", "通过Sql处理的菜单配置");
		 
		    /**tablelist处理开始,拼装xml元素**/
		   sql = " select nvl(czlb,0)czlb ,nvl(tb_name,'-')tb_name ,nvl(tb_note,'-')tb_note,nvl(xzqh_col,'-')xzqh_col   from  meta_tableinfo where  tb_name=?  ";
			 for(int i=0;i<tablelist.length;i++){
			        if("".equals( tablelist[i]) )continue;
			        //获取表初始化配置信息
			        tabMap=DataBaseHelper.queryForMap(sql, new Object[]{tablelist[i]});
			        String czlb=FinString.ts(tabMap.get("CZLB"));
	                if("1".equals(czlb)){
	                	Element    entity = type1.addElement("tableName");  
	   			        entity.addAttribute("mc",tabMap.get("TB_NOTE").toString() );  
 	   			        entity.addText(tabMap.get("TB_NAME").toString() );  
			     	}else if("2".equals(czlb)){
			     		Element   entity = type2.addElement("tableName");  
	   			        entity.addAttribute("mc",tabMap.get("TB_NOTE").toString() );  
	   			        entity.addAttribute("xzqh_col", tabMap.get("XZQH_COL").toString() ); 
	   			        entity.addText(tabMap.get("TB_NAME").toString() ); 
			     	}else if("3".equals(czlb)){
			     		Element   entity = type3.addElement("tableName");  
	   			        entity.addAttribute("mc",tabMap.get("TB_NOTE").toString() );  
	   			        entity.addAttribute("xzqh_col", tabMap.get("XZQH_COL").toString() ); 
	   			        entity.addText(tabMap.get("TB_NAME").toString() ); 
		     	    }else{
		     	    	continue;
		     	    }
				} 
			 /**tablelist处理结束**/
 		  /**menulist处理开始,拼装xml元素**/
	        sql = " select * from pt_menu where id =?  ";
	        Map<?, ?> sqlMap =null;
 			 for(int i=0;i<menulist.length;i++){
  				 String sql_col="";
 				 String sql_val="";
				 if("".equals( menulist[i]) )continue;
				   //获取菜单信息
			      tabMap=DataBaseHelper.queryForMap(sql, new Object[]{menulist[i]});
			      //获取insert语句 
			       Iterator<Map.Entry<String, Object>> iterator = tabMap.entrySet().iterator();  
			        while (iterator.hasNext()) {  
			            Entry<String, Object> entry = iterator.next();  
			            sql_col =sql_col+","+entry.getKey() ; 
			            sql_val =sql_val+",'"+FinString.ts(entry.getValue())+"'" ;
			        } 
			        sql_col=sql_col.substring(1, sql_col.length());
			        sql_val=sql_val.substring(1, sql_val.length());
			  
			     Element   entity = type4.addElement("sql");  
			     entity.addText("insert into pt_menu ("+sql_col+") values ("+sql_val+")"); 
			        
			 }
				/** menulist处理结束 **/
				// 文件生成--服务器
				OutputFormat format = OutputFormat.createPrettyPrint();// 缩减型格式
				format.setEncoding("UTF-8");// 设置文件内部文字的编码
				String filepath = path + "initXml.xml";
			    FileWriter fw = new FileWriter(new File(filepath));
				OutputStreamWriter outstream = new OutputStreamWriter(
						new FileOutputStream(filepath),"UTF-8");//设置文件的编码!
			 XMLWriter writer = new XMLWriter(outstream, format);
				 writer.write(document);
			 	fw.close();
			 	writer.close();
			 	document = null;
		 
 			  // 文件生成--客户端
		     response.setContentType("text/html; charset=UTF-8");
				String filename = "initXml.xml" ; 
 	 		    response.setHeader("Content-Disposition",
			            "attachment;  filename=" + new String(filename.getBytes("gb2312"),"ISO8859-1"));   
			        InputStream in = null;
			        OutputStream out = null;
			        try {
			            in = new FileInputStream(filepath);
			            out = response.getOutputStream();
			            int len = 0;
			            byte[] buffer = new byte[1024];
			            response.setCharacterEncoding("UTF-8");
			           
			            while ((len = in.read(buffer)) > 0) {
 			                out.write(buffer, 0, len);
			            }
			        } catch (FileNotFoundException e) {
			         
			        } finally {
			            if (in != null) {
			                try {
			                    in.close();
			                } catch (Exception e) {
			                    throw new RuntimeException(e);
			                }
			            }
			            if (out != null) {
			                try {
			                	out.close();
			                } catch (Exception e) {
			                    throw new RuntimeException(e);
			                }
			            }
			        } 
			 
			 	
			} catch (Exception e) {
				e.printStackTrace();
			}   
		} else {
	 		PrintWriter Pout = null;
			try {
				response.setContentType("text/html; charset=UTF-8");
				Pout = response.getWriter();
				Pout.println("<script>alert('参数传入失败!');</script>");
				Pout.flush();
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				Pout.close();
			}
		}
	}
 
}
package com.finstone.app.common.service;


import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Method;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.SimpleDateFormat;

import javax.annotation.Resource;

import oracle.jdbc.OracleTypes;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.CallableStatementCallback;
import org.springframework.jdbc.support.lob.LobHandler;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;
import org.springframework.util.ClassUtils;

import com.fins.common.exception.BusException;
import com.fins.html.view.data.OutData;
import com.fins.modules.dao.DataBaseHelper;
import com.finstone.app.common.support.SystemInitLogEntity;
import com.finstone.app.common.support.User;
import com.finstone.app.core.BaseDaoSupport;
import com.finstone.app.core.support.IUser;
import com.finstone.app.core.support.ResultStatus;
import com.finstone.zxt.common.service.GkbCommGetSqlDataService;
import com.finstone.zxt.common.tool.EncryptForNet;
import com.finstone.zxt.common.tool.FinString;
import com.finstone.zxt.common.tool.UnzipResource;


@SuppressWarnings("unchecked")
@Service
public class SystemInitService extends BaseDaoSupport {
	@Resource(name = "gkbCommGetSqlDataService")
	private GkbCommGetSqlDataService gkbCommGetSqlDataService;
	@Resource
	private LobHandler lobHandler;
	/*
	 * author:正在改变 系统初始化 导入xml文件初始化
	 */
	public SystemInitLogEntity doSystemInitImp(byte[] file , String yde022) {

		String temp_Sql = "";
		String sm = "";
		SAXReader saxReader = null;// xml解析器
		InputStream in_xml = null;
		String developer = "";
		String fcilityPrsonnel = "";
		SystemInitLogEntity log = new SystemInitLogEntity();
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try{
			saxReader = new SAXReader();
			in_xml = new ByteArrayInputStream(file);
			Document document = saxReader.read(in_xml);
			String path = URLDecoder.decode(this.getClass().getClassLoader().getResource("/").getPath(), "UTF-8");

			Document document_init = saxReader.read(new File(path+ "com\\finstone\\fap\\logic\\systemInit\\service\\systemInitSqls.xml"));
			String isAll = document.selectSingleNode("//fin/isAll").getText().trim();
			String xml_de011 = document.selectSingleNode("//fin/de011").getText().trim();
			String dataBaseType = document.selectSingleNode("//fin/dataBaseType").getText().trim();
			String admdiv_source = "";
			String admdiv_target = "";
			// 处理行政区划
			List list = document.selectNodes("//admdivs/admdiv");
			Iterator iter = list.iterator();
			while (iter.hasNext()) {
				Element n = (Element) iter.next();
				admdiv_source = n.attributeValue("source");
				admdiv_target = n.attributeValue("target");
			}

			list = document.selectNodes("//developers/developer");
			iter = list.iterator();
			while (iter.hasNext()) {
				Element n = (Element) iter.next();
				developer += n.getText() + ",";
			}
			list = document.selectNodes("//fcilityPrsonnels/fcilityPrsonnel");
			iter = list.iterator();
			while (iter.hasNext()) {
				Element n = (Element) iter.next();
				fcilityPrsonnel += n.getText() + ",";
			}
			log.setDE011(xml_de011);
			log.setDE022(admdiv_target);
			log.setDEVELOPERS(developer);
			log.setFCILITYPRSONNEL(fcilityPrsonnel);
			log.setSOURCEDE022(admdiv_source);
			log.setUpdata(dateFormat.format(new Date()));
			log.setBS("1");
			log.setLx(1);
		 
			if (!yde022.equals(admdiv_source)) {
				sm = "初始化文档初始化源财政地区与选择财政地区不一致,请检查后再初始化.文档中:" + admdiv_source+ ",选择的为:" + yde022;
				log.setBS("0");
				log.setSM(sm);
				return log;
			}
			if (admdiv_source.trim().equals("") || admdiv_target.trim().equals("")) {
				sm = "<admdivs>子节点元素必需填写,请检查xml初始化文档";
				log.setBS("0");
				log.setSM(sm);
				return log;
			}
			if (admdiv_source.equals(admdiv_target)) {
				sm = "财政地区源和目标不可以相同";
				log.setBS("0");
				log.setSM(sm);
				return log;
			}
			// 初始化 处理菜单
			list = document.selectNodes("//functionalMenus/menu");
			if (list != null && list.size() > 0) {
				int len = list.size();
				String[] sql_arr = new String[len];
				for (int i = 0; i < len; i++) {
					String insert_ssmenu = "insert into ssmenu(";
					StringBuffer sb_n = new StringBuffer();
					StringBuffer sb_v = new StringBuffer();
					Element element = (Element) list.get(i);
					sb_n.append("menuid" + ",");
					sb_v.append("'" + element.attributeValue("menuid") + "',");
					sb_n.append("menuname" + ",");
					sb_v.append("'" + element.attributeValue("menuname") + "',");
					sb_n.append("menustatus" + ",");
					sb_v.append("'" + element.attributeValue("menustatus") + "',");
					sb_n.append("menuaction" + ",");
					sb_v.append("'" + element.attributeValue("menuaction") + "',");
					sb_n.append("parentid" + ",");
					sb_v.append("'" + element.attributeValue("parentid") + "',");
					sb_n.append("displayorder" + ",");
					sb_v.append("'" + element.attributeValue("displayorder") + "',");
					sb_n.append("menuicon" + ",");
					sb_v.append("'" + element.attributeValue("menuicon") + "',");
					sb_n.append("xtbz" + ",");
					sb_v.append("'" + element.attributeValue("xtbz") + "',");
					sb_n.append("ischeck" + "");
					sb_v.append("'" + element.attributeValue("ischeck") + "'");
					insert_ssmenu = insert_ssmenu + sb_n.toString() + ")values("+ sb_v.toString() + ")";
					sql_arr[i] = insert_ssmenu;
					temp_Sql=insert_ssmenu;
				}
				// 批量执行
				if (isAll.trim().equals("0")) {// 全量 先删除后插入
					this.getJdbcTemplate().update("delete from ssmenu");
				}
				// 执行批量执行 sql_arr
				this.getJdbcTemplate().batchUpdate(sql_arr);
			}
			list = document_init.selectNodes("//tables/tableName");

			if (list != null && list.size() > 0) {// 主要是处理 源
				sm += ".表配置初始化涉及表:";
				int len = list.size();
				for (int i = 0; i < len; i++) {
					Element element = (Element) list.get(i); // isDe011="1"    isDe022="1"
					String isDe011 = element.attributeValue("isDe011");
					if (dataBaseType.equals("1")||dataBaseType.equals("2")) {// 公司统一开发库 稳定区数据库
						String table_name = element.getText().replaceAll("\n", "").replaceAll("\t", "").trim();
						System.out.println("执行表拷贝"+table_name);
						sm += table_name + ",";
						if (isDe011.trim().equals("1")) {// 包含年份
							this.copyTableData(table_name, admdiv_source,admdiv_target, xml_de011.trim());
						} else {// 不包含年份 表
							this.copyTableData(table_name, admdiv_source,admdiv_target, null);
						}
					}
				}
			}
			// 执行特殊业务sql
			list = document_init.selectNodes("//sqls/sql");
			// iter = list.iterator();
			if (list != null && list.size() > 0) {
				sm += ".执行sql节点:";
				int len = list.size();
				for (int i = 0; i < len; i++) {
					Element element = (Element) list.get(i);// isDe011="1"  isDe022="1"
					if (dataBaseType.equals("1") ) {// 公司统一开发库   稳定区数据库
						// --第一步 :业务数据库全部删除
						temp_Sql = element.getText();
						System.out.println("执行表删除:"+temp_Sql);
						try{
							this.getJdbcTemplate().update(temp_Sql);
						}catch(Exception e){
							e.printStackTrace();
						}
					}
				}
			}
			// 处理 财政内部机构 01
			temp_Sql = "delete  Cs061  where  de022 not like '"+ admdiv_target.substring(0, 4) + "%'  or  de022="+ admdiv_target;
			this.getJdbcTemplate().update(temp_Sql);
			temp_Sql = "insert into Cs061(de011,de062,de061,de022,Jsde017,Ptbz) values(?,'01','财政局',?,0,0)";

			this.getJdbcTemplate().update(temp_Sql,new Object[] { xml_de011, admdiv_target });
			// 初始化用户 //保留 fin 0
			temp_Sql = "delete  jscs007 where  de022 not like '"+ admdiv_target.substring(0, 4) + "%'  or de022="+ admdiv_target;

			this.getJdbcTemplate().update(temp_Sql);

			int jsde909 = this.getJdbcTemplate().queryForInt("select nvl(max(jsde909),-1)+1 from jscs007");

			temp_Sql = "insert into jscs007(jsde909,jsde908,jsde910,jsde911,jsde901,jsde001,de001,de022,jsde039,de042)values(?,'系统管理员','FIN','2bb56fc8eb1029a1a6090fdfafc896dd','909090','0',sysdate,?,'21','000')";
			this.getJdbcTemplate().update(temp_Sql,new Object[] { jsde909, admdiv_target });
			// 用户属于内部机构 0- 01
			this.getJdbcTemplate().update("insert  into cfg018(de011,de062,jsde909,de022)values(?,'01','0',?)",new Object[] { xml_de011, admdiv_target });

			temp_Sql = "delete  jscs013 where (de022 not like '"+ admdiv_target.substring(0, 4) + "%'  or de022="+ admdiv_target + ") and de011=" + xml_de011;
			this.getJdbcTemplate().update(temp_Sql);

			temp_Sql = "insert into jscs013(de011,jsde023,de022,ischeck,checknote) values(?,1,?,'0','合法性未检查')";
			this.getJdbcTemplate().update(temp_Sql,new Object[] { xml_de011, admdiv_target });
			// 处理 财政地区
			temp_Sql = "delete  Cs021  where  de022=" + admdiv_target+ " and de011=" + xml_de011;
			this.getJdbcTemplate().update(temp_Sql);

			String de022Mc = (String) this.getJdbcTemplate().queryForObject("select de021  from cs021  where de011=1900  and de022="+ admdiv_target, String.class);
			temp_Sql = "insert into Cs021(de022,de021,jsde901,de011,Ptbz) values(?,?,null,?,2)";
			this.getJdbcTemplate().update(temp_Sql,new Object[] { admdiv_target, de022Mc, xml_de011 });

			list = document.selectNodes("//sqls/sql");
			// iter = list.iterator();
			if (list != null && list.size() > 0) {
				sm += ".执行sql节点:";
				int len = list.size();
				for (int i = 0; i < len; i++) {
					Element element = (Element) list.get(i);// isDe011="1"  isDe022="1"
					if (dataBaseType.equals("1") ) {// 公司统一开发库   稳定区数据库
						// --第一步 :业务数据库全部删除
						temp_Sql = element.getText();
						System.out.println("执行表删除:"+temp_Sql);
						try{
							this.getJdbcTemplate().update(temp_Sql);
						}catch(Exception e){
							e.printStackTrace();
						}
					}
				}

			}

			
		}catch(Exception e){
			e.printStackTrace();
//			throw new Exception(e.getMessage()+"sql:"+temp_Sql);
		} finally {
			if(in_xml != null) {
				try {
					in_xml.close();
				} catch (IOException e) {
					in_xml = null;
				}
			}
		}
		return log;
	}

	

	public static void main(String[] args)  {
//		LinkedHashMap<String, String> test = new LinkedHashMap<String, String>();
//		test.put("1", "w");test.put("2", "e");test.put("3", "r");test.put("4", "t");

//		for(Iterator<String> it = test.keySet().iterator(); it.hasNext();) {
//		String key = it.next();
//		System.out.println(key + "-" + test.get(key));
//		}
//		System.out.println(test.values().toArray());
//		Object [] arrays = test.entrySet().toArray();
//		for(Object o : arrays){
//		System.out.print(o);
//		}

//		Object [] arrays = test.values().toArray();
//		for(Object o : arrays){
//		System.out.print(o);
//		}
//		String str = "~1~2~3~4~5~6~7~8~9~";
//		String [] s = str.split("~");
//		for (String sq1 : s) {
//			System.out.println(sq1);
//		}
		ArrayList<String> list = new ArrayList<String>();
		Method[] m = list.getClass().getMethods();
		
		for (Method ms : m) {
			System.out.println(ms.getName());
		}
		try {
			System.out.println(list.getClass().getMethod("get").getReturnType());
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		}
	}
	/*
	 * 自动升级处理 
	 * author:转接于财政1.0平台 胡晶2013426进行部分优化修改
	 * 
	 */
	public void doAutoUpgradeImport(String file,String de022, SystemInitLogEntity log)  {
		InputStream in = null;
		ZipInputStream zin = null;
		ZipEntry ze = null;
		BufferedReader br = null;
		ZipFile zf = null;
		try{
			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String sm = "";
			log.setLx(3);
	 
			log.setBS("1");
			log.setFunname("系统自动升级处理");
			log.setTimedata(dateFormat.format(new Date()));
			zf = new ZipFile(file);
			List<String> dml_gxh = new ArrayList<String>();
			List<String> dml = new ArrayList<String>();
			List<String> version = new ArrayList<String>();
			List<String> ddl = new ArrayList<String>();
			List<String> vw_list = new ArrayList<String>();//视图
			List<String> seq_list = new ArrayList<String>();//序列
			List<String> syn_list = new ArrayList<String>();//同义词
			List<String> fnc_list = new ArrayList<String>();//函数

			List<String> prc_list = new ArrayList<String>();//存储过程
			List<String> spc_list = new ArrayList<String>();//包头
			List<String> bdy_list = new ArrayList<String>();//包体
			List<String> trg_list = new ArrayList<String>();// 触发器
			List<Map<String,Object>> list_de022=DataBaseHelper.queryForList("select distinct de022 from cs061  where de022  like rtrim('"+de022+"','0')||'%'");
			in = new BufferedInputStream(new FileInputStream(file));
			zin = new ZipInputStream(in);
			while ((ze = zin.getNextEntry()) != null) {
				if (ze.isDirectory()) {
					continue;
				}
				if (ze.getName().toLowerCase().endsWith(".sql") || ze.getName().toLowerCase().endsWith(".~sql")) {
					continue;
				}
				if (ze.getSize() <= 0) {
					continue;
				}
				String sql = "";
				br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze),"gb2312"));
				if (ze.getName().endsWith("configVer.xml")) {// 获取版本信息
					br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze),"utf-8"));
					String line;
					while ((line = br.readLine()) != null) {
						line = line.trim();
						version.add(line.replaceAll(";", ""));
					}
				}

				String file_name="personal/"+de022.trim()+"/";
				if (ze.getName().startsWith(file_name)) {// 处理个性化  sql 
					String line;
					sql = "";
					while ((line = br.readLine()) != null) {
						if(line.contains("--")) {
							line = line.trim().startsWith("--") ? "" : line.substring(0, line.indexOf("--"));
						}
						if(line.trim().equals(""))
							continue;
						sql += line + "\n";
						if (line.contains(";")) {
							sql=sql.trim();
							String ss=sql.toLowerCase();//小写处理,方便语句判断
						 	 
			/*		  	if (ss.startsWith("insert")|| ss.startsWith("delete")|| ss.startsWith("update")|| ss.startsWith("selete")) {
								if(sql.contains("999999")) 
									for(int ii=0,len=list_de022.size();ii<len;ii++){
										dml_gxh.add(sql.trim().replaceAll(";", "").replaceAll("999999", String.valueOf(list_de022.get(ii).get("de022"))));
									}
								else  dml_gxh.add(sql.trim().replaceAll(";", ""));
							} */ 
			    if (ss.startsWith("insert") ) {
		 		         //更新语句的表名
                       	String tab_name = ss.substring( ss.indexOf("into")+4, ss.indexOf("(")).trim();
								//更新表 初始化 信息(是否需要特殊处理)   
                              Map tabMap =DataBaseHelper.queryForMap (" select * from META_TABLEINFO   where lower(tb_name) =? and (czlb between 2 and 3)  and rownum=1 ",  new Object[]{tab_name});
                            if( tabMap.isEmpty() ){
                            	dml_gxh.add(sql.replaceAll(";", ""));
                            }else{
                             	String xzqh_col=tabMap.get("XZQH_COL").toString().trim();
                                String czlb=  tabMap.get("CZLB").toString().toLowerCase();;//2:复制数据  3:扩展区划
                                //ss与sql区别于大小写,使用sql保留原语句大小写之分
                                String colAry[]=  sql.substring(ss.indexOf("(")+1 , ss.indexOf(")") ).split(",") ;
							    String valAry[]=  sql.substring(ss.lastIndexOf("(")+1 , ss.lastIndexOf(")") ).split(",") ;
						         /**操作判断,处理开始*/
									  if("2".equals(czlb) ){
												 //复制数据  
										         String colStr="";
										           String valStr="";
										           //将values()中的行政区划值作标志,方便替换
							         	    for(int i=0;i<colAry.length;i++ ){
												     if( colAry[i].trim().equalsIgnoreCase(xzqh_col)){
												    	 valAry[i]="'#DE022#'";
												     } 
												     colStr=colStr+ colAry[i]+",";
												     valStr=valStr+ valAry[i]+",";
											      }  
							         	      colStr=colStr.substring(0, colStr.length()-1);
							         	      valStr=valStr.substring(0, valStr.length()-1);
							          	      ss= "insert into "+tab_name +"("+colStr+")"+"values  ("+valStr+")";
							          	     dml_gxh.add(ss.trim().replaceAll(";", "").replaceAll("#DE022#",de022));
									 	}else{
												   //扩展当前省级下的区划
											     for(int ii=0,len=list_de022.size();  ii<len ;ii++){
							              	           String colStr="";
											           String valStr="";
											           //将values()中的行政区划值作标志,方便替换
							               	    for(int i=0;i<colAry.length;i++ ){
													     if( colAry[i].trim().equalsIgnoreCase(xzqh_col)){
													    	 valAry[i]="'#DE022#'";
													     } 
													     colStr=colStr+ colAry[i]+",";
													     valStr=valStr+ valAry[i]+",";
												      }  
							               	    colStr=colStr.substring(0, colStr.length()-1);
							               	    valStr=valStr.substring(0, valStr.length()-1);
							                	   ss= "insert into "+tab_name +"("+colStr+")"+"values  ("+valStr+")";
												  dml_gxh.add(ss.trim().replaceAll(";", "").replaceAll("#DE022#", String.valueOf(list_de022.get(ii).get("de022"))));
												} 
											}		    
									 
					   } 
                   }else if( ss.startsWith("update")){
                	   //更新语句的表名        
                      	String tab_name = ss.substring( ss.indexOf("update")+6, ss.indexOf("set")).trim();
								//更新表 初始化 信息(是否需要特殊处理)   
                             Map tabMap =DataBaseHelper.queryForMap (" select * from META_TABLEINFO   where lower(tb_name) =? and (czlb between 2 and 3)  and rownum=1 ",  new Object[]{tab_name});
                           if( tabMap.isEmpty() ){
                           	dml_gxh.add(sql.trim().replaceAll(";", ""));
                           }else{
                            	String xzqh_col=tabMap.get("XZQH_COL").toString().trim().toLowerCase();
                               String czlb=  tabMap.get("CZLB").toString().toLowerCase();;//2:复制数据  3:扩展区划
                               String whereAry[]=  sql.substring(ss.indexOf("where")+5 , ss.length() ).split("and") ;
 						         /**操作判断,处理开始*/
									  if("2".equals(czlb) ){
												 //复制数据  
										          String whereStr=" ";
										         //分隔where后的条件语句
							         	    for(int i=0;i<whereAry.length;i++ ){
											     if( whereAry[i].toLowerCase().indexOf(xzqh_col) >0  ){
											    	 whereAry[i]= xzqh_col+ "='#DE022#' ";
											     } 
											     whereStr =whereStr+ whereAry[i]+" and ";
											 }  
							         	   whereStr=whereStr.substring(0, whereStr.lastIndexOf("and"));
							          	      ss= ss.substring(0, ss.indexOf("where"))+" where "+whereStr;
							          	      ss=ss.trim().replaceAll(";", "").replaceAll("#DE022#",de022);
							          	     dml_gxh.add(ss);
									 	}else{
									 		 sql= sql.substring(0,ss.indexOf("where"));//避免ss在循环中改变
												   //扩展当前省级下的区划
										   for(int ii=0,len=list_de022.size();  ii<len ;ii++){
											      //复制数据  
										            String whereStr=" ";
											       //分隔where后的条件语句
							               	    for(int i=0;i<whereAry.length;i++ ){
								               	       if( whereAry[i].toLowerCase().indexOf(xzqh_col) >0  ){
												    	 whereAry[i]= xzqh_col+ "='#DE022#' ";
												       }  
								               	    whereStr =whereStr+ whereAry[i]+" and ";
												  }  
							               	  whereStr=whereStr.substring(0, whereStr.lastIndexOf("and"));
							               	  ss= sql+" where "+whereStr;
							          	      ss=ss.trim().replaceAll(";", "").replaceAll("#DE022#",String.valueOf(list_de022.get(ii).get("de022") ));
											  dml_gxh.add(ss );
												} 
											}		    
									 
					   } 
                   }else if( ss.startsWith("delete")){
                	   //删除语句的表名      
                     	String tab_name = ss.substring( ss.indexOf("from")+4, ss.indexOf("where")).trim();
								//更新表 初始化 信息(是否需要特殊处理)   
                            Map tabMap =DataBaseHelper.queryForMap (" select * from META_TABLEINFO   where lower(tb_name) =? and (czlb between 2 and 3)  and rownum=1 ",  new Object[]{tab_name});
                          if( tabMap.isEmpty() ){
                          	dml_gxh.add(sql.trim().replaceAll(";", ""));
                          }else{
                           	String xzqh_col=tabMap.get("XZQH_COL").toString().trim().toLowerCase();
                              String czlb=  tabMap.get("CZLB").toString().toLowerCase();;//2:复制数据  3:扩展区划
                              String whereAry[]=  sql.substring(ss.indexOf("where")+5 , ss.length() ).split("and") ;
						         /**操作判断,处理开始*/
									  if("2".equals(czlb) ){
												 //复制数据  
										          String whereStr=" ";
										         //分隔where后的条件语句
							         	    for(int i=0;i<whereAry.length;i++ ){
											     if( whereAry[i].toLowerCase().indexOf(xzqh_col) >0   ){
											    	 whereAry[i]= xzqh_col+ "='#DE022#' ";
											     } 
											     whereStr =whereStr+ whereAry[i]+" and ";
											 }  
							         	   whereStr=whereStr.substring(0, whereStr.lastIndexOf("and"));
							          	      ss= ss.substring(0, ss.indexOf("where"))+" where "+whereStr;
							          	      ss=ss.trim().replaceAll(";", "").replaceAll("#DE022#",de022);
							          	     dml_gxh.add(ss);
									 	}else{
									 		 sql= sql.substring(0,ss.indexOf("where"));//避免ss在循环中改变
												   //扩展当前省级下的区划
										   for(int ii=0,len=list_de022.size();  ii<len ;ii++){
											      //复制数据  
										            String whereStr=" ";
											       //分隔where后的条件语句
							               	    for(int i=0;i<whereAry.length;i++ ){
								               	       if( whereAry[i].toLowerCase().indexOf(xzqh_col) >0  ){
												    	 whereAry[i]= xzqh_col+ "='#DE022#' ";
												       }  
								               	    whereStr =whereStr+ whereAry[i]+" and ";
												  }  
							               	  whereStr=whereStr.substring(0, whereStr.lastIndexOf("and"));
							               	  ss= sql+" where "+whereStr;
							          	      ss=ss.trim().replaceAll(";", "").replaceAll("#DE022#",String.valueOf(list_de022.get(ii).get("de022") ));
											  dml_gxh.add(ss );
												} 
											}		    
									 
					   } 
                   }  else {
                	     dml_gxh.add(sql.trim().replaceAll(";", ""));
                   }
					   sql = "";
						}
					}
				}
				 
				if (ze.getName().startsWith("Upgrade/dml/")) {// 处理  数据库操作语言
					String line;
					sql = "";
					while ((line = br.readLine()) != null) {
						if(line.contains("--")) {
							line = line.trim().startsWith("--") ? "" : line.substring(0, line.indexOf("--"));
						}
						if(line.trim().equals(""))
							continue;
						sql += line + "\n";
						if (line.contains(";")) {
							sql=sql.trim();
							String ss=sql.trim().toLowerCase();//小写处理,方便语句判断
						 	 
			     if (ss.startsWith("insert") ) {
		 		         //更新语句的表名
                       	String tab_name = ss.substring( ss.indexOf("into")+4, ss.indexOf("(")).trim();
								//更新表 初始化 信息(是否需要特殊处理)   
                              Map tabMap =DataBaseHelper.queryForMap (" select * from META_TABLEINFO   where lower(tb_name) =? and (czlb between 2 and 3)  and rownum=1 ",  new Object[]{tab_name});
                            if( tabMap.isEmpty() ){
                            	dml_gxh.add(sql.trim().replaceAll(";", ""));
                            }else{
                             	String xzqh_col=tabMap.get("XZQH_COL").toString().trim();
                                String czlb=  tabMap.get("CZLB").toString().toLowerCase();;//2:复制数据  3:扩展区划
                                //ss与sql区别于大小写,使用sql保留原语句大小写之分
                                String colAry[]=  sql.substring(ss.indexOf("(")+1 , ss.indexOf(")") ).split(",") ;
							    String valAry[]=  sql.substring(ss.lastIndexOf("(")+1 , ss.lastIndexOf(")") ).split(",") ;
						         /**操作判断,处理开始*/
									  if("2".equals(czlb) ){
												 //复制数据  
										         String colStr="";
										           String valStr="";
										           //将values()中的行政区划值作标志,方便替换
							         	    for(int i=0;i<colAry.length;i++ ){
												     if( colAry[i].trim().equalsIgnoreCase(xzqh_col)){
												    	 valAry[i]="'#DE022#'";
												     } 
												     colStr=colStr+ colAry[i]+",";
												     valStr=valStr+ valAry[i]+",";
											      }  
							         	      colStr=colStr.substring(0, colStr.length()-1);
							         	      valStr=valStr.substring(0, valStr.length()-1);
							          	      ss= "insert into "+tab_name +"("+colStr+")"+"values  ("+valStr+")";
							          	     dml_gxh.add(ss.trim().replaceAll(";", "").replaceAll("#DE022#",de022));
									 	}else{
												   //扩展当前省级下的区划
											     for(int ii=0,len=list_de022.size();  ii<len ;ii++){
							              	           String colStr="";
											           String valStr="";
											           //将values()中的行政区划值作标志,方便替换
							               	    for(int i=0;i<colAry.length;i++ ){
													     if( colAry[i].trim().equalsIgnoreCase(xzqh_col)){
													    	 valAry[i]="'#DE022#'";
													     } 
													     colStr=colStr+ colAry[i]+",";
													     valStr=valStr+ valAry[i]+",";
												      }  
							               	    colStr=colStr.substring(0, colStr.length()-1);
							               	    valStr=valStr.substring(0, valStr.length()-1);
							                	   ss= "insert into "+tab_name +"("+colStr+")"+"values  ("+valStr+")";
												  dml_gxh.add(ss.trim().replaceAll(";", "").replaceAll("#DE022#", String.valueOf(list_de022.get(ii).get("de022"))));
												} 
											}		    
									 
					   } 
                   }else if( ss.startsWith("update")){
                	   //更新语句的表名         
                      	String tab_name = ss.substring( ss.indexOf("update")+6, ss.indexOf("set")).trim();
								//更新表 初始化 信息(是否需要特殊处理)   
                             Map tabMap =DataBaseHelper.queryForMap (" select * from META_TABLEINFO   where lower(tb_name) =? and (czlb between 2 and 3)  and rownum=1 ",  new Object[]{tab_name});
                           if( tabMap.isEmpty() ){
                           	dml_gxh.add(sql.trim().replaceAll(";", ""));
                           }else{
                            	String xzqh_col=tabMap.get("XZQH_COL").toString().trim().toLowerCase();
                               String czlb=  tabMap.get("CZLB").toString().toLowerCase();;//2:复制数据  3:扩展区划
                               //ss与sql区别于大小写,使用sql保留原语句大小写之分
                               String whereAry[]=  sql.substring(ss.indexOf("where")+5 , ss.length() ).split("and") ;
 						         /**操作判断,处理开始*/
									  if("2".equals(czlb) ){
												 //复制数据  
										          String whereStr=" ";
										         //分隔where后的条件语句
							         	    for(int i=0;i<whereAry.length;i++ ){
											     if( whereAry[i].toLowerCase().indexOf(xzqh_col) >0   ){
											    	 whereAry[i]= xzqh_col+ "='#DE022#' ";
											     } 
											     whereStr =whereStr+ whereAry[i]+" and ";
											 }  
							         	   whereStr=whereStr.substring(0, whereStr.lastIndexOf("and"));
							          	      ss= sql.substring(0, ss.indexOf("where"))+" where "+whereStr;
							          	      ss=ss.trim().replaceAll(";", "").replaceAll("#DE022#",de022);
							          	     dml_gxh.add(ss);
									 	}else{
									 		 sql= sql.substring(0,ss.indexOf("where"));//避免ss在循环中改变
												   //扩展当前省级下的区划
										   for(int ii=0,len=list_de022.size();  ii<len ;ii++){
											      //复制数据  
										            String whereStr=" ";
											       //分隔where后的条件语句
							               	    for(int i=0;i<whereAry.length;i++ ){
								               	       if( whereAry[i].toLowerCase().indexOf(xzqh_col) >0  ){
												    	 whereAry[i]= xzqh_col+ "='#DE022#' ";
												       }  
								               	    whereStr =whereStr+ whereAry[i]+" and ";
												  }  
							               	  whereStr=whereStr.substring(0, whereStr.lastIndexOf("and"));
							               	  ss= sql+" where "+whereStr;
							          	      ss=ss.trim().replaceAll(";", "").replaceAll("#DE022#",String.valueOf(list_de022.get(ii).get("de022") ));
											  dml_gxh.add(ss );
												} 
											}		    
									 
					   } 
                   }else if( ss.startsWith("delete")){
                	   //删除语句的表名       
                     	String tab_name = ss.substring( ss.indexOf("from")+4, ss.indexOf("where")).trim();
								//更新表 初始化 信息(是否需要特殊处理)   
                            Map tabMap =DataBaseHelper.queryForMap (" select * from META_TABLEINFO   where lower(tb_name) =? and (czlb between 2 and 3)  and rownum=1 ",  new Object[]{tab_name});
                          if( tabMap.isEmpty() ){
                          	dml_gxh.add(sql.trim().replaceAll(";", ""));
                          }else{
                           	String xzqh_col=tabMap.get("XZQH_COL").toString().trim().toLowerCase();
                              String czlb=  tabMap.get("CZLB").toString().toLowerCase();;//2:复制数据  3:扩展区划
                              //ss与sql区别于大小写,使用sql保留原语句大小写之分
                              String whereAry[]=  sql.substring(ss.indexOf("where")+5 , ss.length() ).split("and") ;
						         /**操作判断,处理开始*/
									  if("2".equals(czlb) ){
												 //复制数据  
										          String whereStr=" ";
										         //分隔where后的条件语句
							         	    for(int i=0;i<whereAry.length;i++ ){
											     if( whereAry[i].toLowerCase().indexOf(xzqh_col) >0   ){
											    	 whereAry[i]= xzqh_col+ "='#DE022#' ";
											     } 
											     whereStr =whereStr+ whereAry[i]+" and ";
											 }  
							         	   whereStr=whereStr.substring(0, whereStr.lastIndexOf("and"));
							          	      ss= ss.substring(0, ss.indexOf("where"))+" where "+whereStr;
							          	      ss=ss.trim().replaceAll(";", "").replaceAll("#DE022#",de022);
							          	     dml_gxh.add(ss);
									 	}else{
									 		 sql= sql.substring(0,ss.indexOf("where"));//避免ss在循环中改变
												   //扩展当前省级下的区划
										   for(int ii=0,len=list_de022.size();  ii<len ;ii++){
											      //复制数据  
										            String whereStr=" ";
											       //分隔where后的条件语句
							               	    for(int i=0;i<whereAry.length;i++ ){
								               	       if( whereAry[i].toLowerCase().indexOf(xzqh_col) >0  ){
												    	 whereAry[i]= xzqh_col+ "='#DE022#' ";
												       }  
								               	    whereStr =whereStr+ whereAry[i]+" and ";
												  }  
							               	  whereStr=whereStr.substring(0, whereStr.lastIndexOf("and"));
							               	  ss= sql+" where "+whereStr;
							          	      ss=ss.trim().replaceAll(";", "").replaceAll("#DE022#",String.valueOf(list_de022.get(ii).get("de022") ));
											  dml_gxh.add(ss );
												} 
											}		    
									 
					   } 
                   }  else {
                	     dml_gxh.add(sql.trim().replaceAll(";", ""));
                   }
					   sql = "";
						}
					}
				}
				 
				 
				if (ze.getName().startsWith("Upgrade/ddl/")) {// 处理  数据库定义语言
					String line;
					sql = "";
					while ((line = br.readLine()) != null) {
						if(line.contains("--")) {
							line = line.trim().startsWith("--") ? "" : line.substring(0, line.indexOf("--"));
						}
						if(line.trim().equals(""))
							continue;
						sql += line + "\n";
						if (line.contains(";")) {
							String ss=sql.trim().toLowerCase();
							if(ss.startsWith("drop")||ss.startsWith("create")||ss.startsWith("alter")){
								ddl.add(sql.trim().replaceAll(";", ""));
							}
							sql = "";
						}
					}
				}
				if (ze.getName().startsWith("proBody/vw/")) {// 处理视图
					String line;
					StringBuffer sb=new StringBuffer();
					while ((line = br.readLine()) != null) {
						sb.append(line + "\n");
					}
					sql=sb.toString();
					if (sql.trim().endsWith(";")) {// 截取最后一个/
						sql = sql.substring(0, sql.lastIndexOf(";"));
					}
					vw_list.add(sql);
				}
				if (ze.getName().startsWith("proBody/seq/")) {// 处理序列
					String line;
					StringBuffer sb=new StringBuffer();
					while ((line = br.readLine()) != null) {
						sb.append(line + "\n");
					}
					sql=sb.toString();
					if (sql.trim().endsWith(";")) {// 截取最后一个/
						sql = sql.substring(0, sql.lastIndexOf(";"));
					}
					seq_list.add(sql);
				}
				if (ze.getName().startsWith("proBody/syn/")) {// 处理视图
					String line;
					StringBuffer sb=new StringBuffer();
					while ((line = br.readLine()) != null) {
						sb.append(line + "\n");
					}
					sql=sb.toString();
					if (sql.trim().endsWith(";")) {// 截取最后一个/
						sql = sql.substring(0, sql.lastIndexOf(";"));
					}
					syn_list.add(sql);
				}
				if (ze.getName().startsWith("proBody/fnc/")) {// 处理函数
					String line;
					StringBuffer sb=new StringBuffer();
					while ((line = br.readLine()) != null) {
						sb.append(line + "\n");
					}
					sql=sb.toString();
					if (sql.trim().endsWith("/")) {// 截取最后一个/
						sql = sql.substring(0, sql.lastIndexOf("/"));
					}
					fnc_list.add(sql);
				}
				if (ze.getName().startsWith("proBody/prc/")) {// 处理存储过程
					String line;
					StringBuffer sb=new StringBuffer();
					while ((line = br.readLine()) != null) {
						sb.append(line + "\n");
					}
					sql=sb.toString();
					if (sql.trim().endsWith("/")) {// 截取最后一个/
						sql = sql.substring(0, sql.lastIndexOf("/"));
					}
					prc_list.add(sql);
				}
				if (ze.getName().startsWith("proBody/spc/")) {// 处理包头
					String line;
					StringBuffer sb=new StringBuffer();
					while ((line = br.readLine()) != null) {
						sb.append(line + "\n");
					}
					sql=sb.toString();
					if (sql.trim().endsWith("/")) {// 截取最后一个/
						sql = sql.substring(0, sql.lastIndexOf("/"));
					}
					spc_list.add(sql);
				}
				if (ze.getName().startsWith("proBody/bdy/")) {// 处理包体
					String line;
					StringBuffer sb=new StringBuffer();
					while ((line = br.readLine()) != null) {
						sb.append(line + "\n");
					}
					sql=sb.toString();
					if (sql.trim().endsWith("/")) {// 截取最后一个/
						sql = sql.substring(0, sql.lastIndexOf("/"));
					}
					bdy_list.add(sql);
				}
				if (ze.getName().startsWith("proBody/trg/")) {// 处理触发器
					String line;
					StringBuffer sb=new StringBuffer();
					while ((line = br.readLine()) != null) {
						sb.append(line + "\n");
					}
					sql=sb.toString();
					if (sql.trim().endsWith("/")) {// 截取最后一个/
						sql = sql.substring(0, sql.lastIndexOf("/"));
					}
					trg_list.add(sql);
				}
				zin.closeEntry();
			}

			if (ddl.size() > 0) {
				sm+="共处理ddl"+ddl.size()+"条;";
				String stemp="";
				for(int kk=0;kk < ddl.size();kk++){
					try{
						DataBaseHelper.update(ddl.get(kk));
					}catch(Exception e){
						if(ddl.get(kk).length()>30){
							stemp+=ddl.get(kk).substring(0, 20)+"...|";
						}else{
							stemp+=ddl.get(kk)+"|";
						}

						e.printStackTrace();
					}

				}
				if(!stemp.equals("")){
					sm+="(其中出错语句:"+stemp+")";}
			}


			if (dml_gxh.size() > 0) {
				String stemp="";
				sm+="共处理个性化dml"+dml_gxh.size()+"条;";
				for(int kk=0,len=dml_gxh.size();kk<len;kk++){
					try{
						DataBaseHelper.update(dml_gxh.get(kk));
					}catch(Exception e){
						stemp+=dml_gxh.get(kk)+"|";
						e.printStackTrace();
					}

				}
				if(!stemp.equals("")){
					sm+="(其中出错语句:"+stemp+")";}
			}
			if (dml.size() > 0) {

				sm+="共处理dml:"+dml.size()+"条,";  
				String stemp="";
				for(int kk=0,len=dml.size();kk<len;kk++){
					try{
						DataBaseHelper.update(dml.get(kk));
					}catch(Exception e){
						stemp+=dml.get(kk)+"|";
						e.printStackTrace();
					}
				}
				if(!stemp.equals("")){
					sm+="(出错:"+stemp+")";}
			}

			if (vw_list.size() > 0) {
				sm+="共处理(vm)"+vw_list.size()+"条;";
				try{
					DataBaseHelper.batchUpdate((String[])ListToArray(vw_list));
				}catch(Exception e){
					e.printStackTrace();
				}
			}
			if (seq_list.size() > 0) {
				sm+="共处理(seq)"+seq_list.size()+"条;";
				for(int kk=0,len=seq_list.size();kk<len;kk++){
					try{
						DataBaseHelper.update(seq_list.get(kk));
					}catch(Exception e){
						e.printStackTrace();
					}

				}
			}
			try{
				if (syn_list.size() > 0) {
					sm+="共处理(syn)"+syn_list.size()+"条;";
					DataBaseHelper.batchUpdate((String[])ListToArray(syn_list));
				}
				if (fnc_list.size() > 0) {
					sm+="共处理(fnc)"+fnc_list.size()+"条;";
					DataBaseHelper.batchUpdate((String[])ListToArray(fnc_list));
				}
				if (prc_list.size() > 0) {
					sm+="共处理(prc)"+prc_list.size()+"条;";
					DataBaseHelper.batchUpdate(prc_list.toArray(new String[fnc_list.size()]));
				}
				if (spc_list.size() > 0) {
					sm+="共处理(spc)"+spc_list.size()+"条;";
					DataBaseHelper.batchUpdate(spc_list.toArray(new String[spc_list.size()]));
				}
				if (bdy_list.size() > 0) {
					sm+="共处理(bdy)"+bdy_list.size()+"条;";
					DataBaseHelper.batchUpdate(bdy_list.toArray(new String[bdy_list.size()]));
				}
				if (trg_list.size() > 0) {
					sm+="共处理(trg)"+trg_list.size()+"条;";
					DataBaseHelper.batchUpdate(trg_list.toArray(new String[trg_list.size()]));
				}
			}catch(Exception e){
				e.printStackTrace();//这里屏蔽掉异常
			}
			log.setBS("1");
			if(sm.length()>=1000){
				sm=sm.substring(0,1000);
			}
			log.setSM(sm);
		}catch(Exception e){
			e.printStackTrace();
			log.setBS("0");
			throw new RuntimeException("升级出错:"+e.getMessage());
		} finally {
			//关闭流 2014-5-23 hujing
			if(in != null) {
				try {
					in.close();
				} catch (IOException e) {
					in = null;
				}
			}
			if(zin != null) {
				try {
					zin.close();
				} catch (IOException e) {
					zin = null;
				}
			}
			if(br != null) {
				try {
					br.close();
				} catch (IOException e) {
					br = null;
				}
			}
			if(zf != null) {
				try {
					zf.close();
				} catch (IOException e) {
					zf = null;
				}
			}
		}
	}
	
//	版本号判断
	public void doAutoUpgradeImport_BBH(String file,String de022 ,SystemInitLogEntity log)  {
		InputStream in = null;
		ZipInputStream zin = null;
		BufferedReader br = null;
		ZipFile zf = null;
		try{
			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			log.setLx(3);
			log.setDE022(de022);
			log.setBS("1");
			log.setFunname("系统自动升级处理");
			log.setTimedata(dateFormat.format(new Date()));
			zf = new ZipFile(file);
			in = new BufferedInputStream(new FileInputStream(file));
			zin = new ZipInputStream(in);
			ZipEntry ze;
			List<String> version = new ArrayList<String>();
			while ((ze = zin.getNextEntry()) != null) {
				if (ze.isDirectory()) {

				} else {

					long size = ze.getSize();
					if (ze.getName().endsWith(".bak")||ze.getName().endsWith(".sql")) {
						continue;
					}			

					if (size > 0) {
						br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze),"gbk"));
						if (ze.getName().endsWith("configVer.xml")) {// 获取版本信息
							br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze),"utf-8"));
							String line;
							while ((line = br.readLine()) != null) {
								line = line.trim();
								version.add(line.replaceAll(";", ""));
							}
							br.close();
						}

					}

				}
				zin.closeEntry();
			}
			if (version.size() > 0) {
				String cur_version =  DataBaseHelper.queryForScalar("select nvl(max(version),0) version  from systemversion ",String.class);
				String ver_ = "";
				String ver_new = "";
				String kfr = "";
				String fbr = "";
				String kfsj = "";
				String sjsm = "";
				for (int i = 0, len = version.size(); i < len; i++) {
					String temp =version.get(i);// new String(version.get(i).getBytes("gbk"),"utf-8");
					//上次版本号
					if (temp.indexOf("sysversion") > 0) {
						ver_ = (temp.substring(temp.indexOf(">") + 1,temp.lastIndexOf("<"))).trim();
					}
					//当前版本号
					if (temp.indexOf("newversion") > 0) {
						ver_new = (temp.substring(temp.indexOf(">") + 1,temp.lastIndexOf("<"))).trim();
					}
					if (temp.indexOf("kfr") > 0) {
						kfr = temp.substring(temp.indexOf(">") + 1,temp.lastIndexOf("<"));
					}
					if (temp.indexOf("kfsj") > 0) {
						kfsj = temp.substring(temp.indexOf(">") + 1,temp.lastIndexOf("<"));
					}
					if (temp.indexOf("fbr") > 0) {
						fbr = temp.substring(temp.indexOf(">") + 1,temp.lastIndexOf("<"));
					}
					if (temp.indexOf("sjsm") > 0) {
						sjsm = temp.substring(temp.indexOf(">") + 1,temp.lastIndexOf("<"));
					}
				}
//				if (!cur_version.trim().endsWith("0000")) {
				//int cur_v1 = Integer.valueOf(cur_version.substring(cur_version.lastIndexOf(".") + 1,cur_version.length()));
				//int cur_v2 = Integer.valueOf(ver_.substring(ver_.lastIndexOf(".") + 1, ver_.length()));
				//int cur_v1 = Integer.parseInt(cur_version);//数据库最大版本号
				//int cur_v2 = Integer.parseInt(ver_);  //发布包里记录的上次版本号	 
				if (!cur_version.equals(ver_)) {
					log.setBS("0");
					log.setSM("升级版本不匹配  请联系管理员!(当前系统版本:" + cur_version+ ",升级包版本:" + ver_ + ")");
					throw new Exception("升级版本不匹配  请联系管理员!(当前系统版本:" + cur_version+ ",升级包版本:" + ver_ + ")");
				}
//				}
				// 插入最新版本号
				String update_systemv = "insert into systemversion(version,updatedate,kfdate,fbr,sm,kfr)values(?,sysdate,?,?,?,?)";
				DataBaseHelper.update(update_systemv,new Object[] { ver_new, kfsj, fbr, sjsm, kfr });

			} else {
				log.setBS("0");
				log.setSM("升级版本不匹配  请联系管理员!");
				throw new Exception("升级版本不匹配  请联系管理员!");
			}

		} catch (Exception e){
			e.printStackTrace();
			throw new RuntimeException("升级出错:"+e.getMessage());
		} finally {
			//关闭流 2014-5-23 hujing
			if(in != null) {
				try {
					in.close();
				} catch (IOException e) {
					in = null;
				}
			}
			if(zin != null) {
				try {
					zin.close();
				} catch (IOException e) {
					zin = null;
				}
			}
			if(br != null) {
				try {
					br.close();
				} catch (IOException e) {
					br = null;
				}
			}
			if(zf != null) {
				try {
					zf.close();
				} catch (IOException e) {
					zf = null;
				}
			}
		}


	}	
	//页面升级
	public Map doAutoUpgradeImport_YM(String file, String de022,SystemInitLogEntity log) throws Exception  {
		Map map = new HashMap();
		InputStream in = null;
		ZipInputStream zin = null;
		try{
			SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			log.setLx(3);
			log.setDE022(de022);
			log.setBS("1");
			log.setFunname("系统自动升级处理");
			log.setTimedata(dateFormat.format(new Date()));
			in = new BufferedInputStream(new FileInputStream(file));
			zin = new ZipInputStream(in);
			ZipEntry ze;

			while ((ze = zin.getNextEntry()) != null) {
				if (ze.isDirectory()) {

				} else {
					if (ze.getName().endsWith(".tt")) {
						String  prpath = ClassUtils.getDefaultClassLoader().getResource("").getPath().replaceAll("%20", " ");
						map=UnzipResource.CopyFileByZip(prpath, zin);break;
					}

				}
				//zin.closeEntry();
			} 
		}catch(Exception e){
			e.printStackTrace();
			throw new Exception("升级出错:"+e.getMessage());
		} finally {
			//关闭流 2014-5-23 hujing
			if(in != null) {
				try {
					in.close();
				} catch (IOException e) {
					in = null;
				}
			}
			if(zin != null) {
				try {
					zin.close();
				} catch (IOException e) {
					zin = null;
				}
			}
		}
		return map;


	}	
	private ResultStatus callProcedureProcess(final String trancode, final String xml) {
		return (ResultStatus) DataBaseHelper.getJdbcTemplate().execute("{call P_YSZX_PROCESS(?,?,?,?)}", new CallableStatementCallback() {
			public ResultStatus doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
				Map<String, Object> resultsMap = new HashMap<String, Object>();
				ResultStatus resultStatus = new ResultStatus();
				cs.setString(1, trancode);
				lobHandler.getLobCreator().setClobAsString(cs, 2, xml);
				cs.registerOutParameter(3, OracleTypes.INTEGER);
				cs.registerOutParameter(4, OracleTypes.VARCHAR);
				cs.execute();
				int retCode = cs.getInt(3);
				String retValue = cs.getString(4);
				resultsMap.put("retCode", retCode);
				resultsMap.put("retValue", retValue == null? "" : retValue);
				resultStatus.setResultsMap(resultsMap);
				return resultStatus;
			}
		});
	}

	public void excuteProcedure(SystemInitLogEntity log) {
		ResultStatus rs = this.callProcedureProcess("ZZ0105", "");
		Map resultMap = rs.getResultsMap();
		SystemInitLogEntity logC = (SystemInitLogEntity) log.clone();
		if(resultMap.get("retCode").toString().equals("0")){ 
			return;
			}
		logC.setSM(resultMap.get("retValue").toString() );
		log.addLog(logC);

	}

	
	public void inserSystemLog(int lx, String de022, String de011, String sm,String mkmc) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String insert_log = "insert into SYSTEMINITLOG (xh,FUNNAME, LX, TIMEDATA, UPDATA,  SM,  DE022, DE011,bs)values (SEQ_SYSTEMINIT.NEXTVAL, '" + mkmc + "', '" + lx + "', '" +
		dateFormat.format(new Date()) + "', (select max(t.TIMEDATA) from systeminitlog t where t.lx=2 and sm like '" + sm.substring(0, sm.indexOf("#")) + "%'),'" + sm + "', '" + de022 + "', '" + de011 + "', 1)";
		this.getJdbcTemplate().update(insert_log);
	}
	/**
	 * 已弃用(YSYY胡晶20130426)
	 * String类型List转换成String类型数组
	 * (转接于财政1.0)
	 * @param list
	 * @return
	 * @see common.service.SystemInitService.ListToArray
	 */
	@Deprecated
	public String[] changeListToStringArray(List<String> list) {
		if (list == null || list.size() < 1) {
			return null;
		}
		String[] arr = new String[list.size()];
		for (int i = 0, len = list.size(); i < len; i++) {
			arr[i] = list.get(i);
		}
		return arr;
	}
	/**
	 * list转数组
	 * @param list
	 * @return Object[]
	 * @author YSYY
	 */
	public Object[] ListToArray(List<?> list) {
		if (list == null || list.size() == 0) {
			return null;
		}
		
		return list.toArray();
	}
	public static Document getDocument(InputStream is) {
		SAXReader reader = new SAXReader();
		Document doc = null;
		try {
			doc = reader.read(is);
			return doc;
		} catch (Exception es) {
			System.err.println(es.toString());
		}
		return null;
	}

	public void copyTableData(String tableName, String yDe022, String tDe022,String de011) throws Exception {
		String selectSql = "";
		String deleteSql = "";
		String deleteAll = "";
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		if (de011 == null) {
			deleteSql = "delete from " + tableName + " where de022=" + tDe022;
			deleteAll = "delete from " + tableName + " where 1=1 ";
			selectSql = "select * from " + tableName + "  where de022="
			+ yDe022;
		} else {
			deleteSql = "delete from " + tableName + " where de022=" + tDe022+ "  and de011=" + de011;
			deleteAll = "delete from " + tableName + " where 1=1 ";
			selectSql = "select * from " + tableName + "  where de022="+ yDe022 + "  and de011=" + de011;
		}
		try {
			// 首先删除目标表数据
			Map<String,Object> map_cloum=new HashMap<String,Object>();
			this.getJdbcTemplate().update(deleteSql);
			String sql_column="SELECT DISTINCT COLUMN_NAME,DATA_TYPE  FROM all_tab_columns  where   table_name =   '"+tableName.toUpperCase()+"' ";
			List<Map<String,Object>>  list_column=this.getJdbcTemplate().queryForList(sql_column);
			if(list_column!=null&&list_column.size()>0){
				int len=list_column.size();

				for(int ii=0;ii<len;ii++){
					map_cloum.put(list_column.get(ii).get("COLUMN_NAME").toString().toLowerCase(), list_column.get(ii).get("DATA_TYPE"));
				}
			}

			list = this.getJdbcTemplate().queryForList(selectSql);
			if (list != null && list.size() > 0) {
				for (int i = 0, len = list.size(); i < len; i++) {
					String inserSql = "insert into " + tableName + " (";
					String fileds = "";
					String values = "";
					String zwf = "";
					Map map = list.get(i);
					Set set = map.entrySet();
					Object[] obj = new Object[set.size()];
					int k = 0;
					for (Iterator iterator = set.iterator(); iterator.hasNext();) {
						Map.Entry string = (Map.Entry) iterator.next();
						String key = ((Map.Entry<String, String>) string).getKey().toLowerCase();// 次方法获取键值对的名称
						String value = String.valueOf(((Map.Entry<String, Object>) string).getValue());// 次方法获取键值对的值
						if ("de022".equals(key)) {
							fileds += key + ",";
							values += "'" + tDe022 + "',";
							obj[k] = tDe022;
							zwf += "?" + ",";
						} else {
							fileds += key + ",";
							if (value.equals("null")) {
								obj[k] = null;
								values += null + ",";
								zwf += "?" + ",";
							} else {
								if(map_cloum.get(key).equals("DATE")){
									if(value==null||"".equals(value)){
										obj[k] =null;
										values +=  null + ",";
										zwf += "?,";
									}else{
										obj[k] =value.substring(0,10);
										values += "to_date('" + value.replaceAll("/", "-").substring(0,10) + "','yyyy-mm-dd'),";
										zwf += "to_date(?,'yyyy-mm-dd')" + ",";
									}

								}else{
									obj[k] = value;
									values += "'" + value + "',";
									zwf += "?" + ",";
								}

							}
						}
						k++;
					}
					inserSql = inserSql+ fileds.substring(0, fileds.length() - 1)+ ")values(" + zwf.substring(0, zwf.length() - 1)+ ")";
					values = values.substring(0, values.length() - 1);
					this.getJdbcTemplate().update(inserSql, obj);
				}
			}
			deleteAll = deleteAll + " and de022 not like '"+ tDe022.substring(0, 4) + "%'";// 删除 不属于该行政区划下面 数据
			this.getJdbcTemplate().update(deleteAll);

		} catch (Exception e) {
			e.printStackTrace();
			throw new Exception("系统初始化失败:"+e.getMessage());
		}

	}

	public String getDe022Mc(String dm, String de011) {
		String sql = "select distinct de021  cs021  where de022= " + dm;

		return (String) (this.getSimpleJdbcTemplate().queryForObject(sql,
				String.class));

	}

	
	
	
	//执行单步骤操作日志
	public void insertOptionLog(SystemInitLogEntity log){
		
		String insert_log = "insert into SYSTEMINITLOG (   FUNNAME,LX,UPDATA,TIMEDATA,SM)"
				+ "values ('" + log.getFunname() + "'," + log.getLx() + ",'" + log.getUpdata() + "','" + log.getTimedata() + "','" + log.getSM() + "')";
		DataBaseHelper.update(insert_log);
		 
	}
	
	 
	
	public void insertLog(SystemInitLogEntity log){
		String insert_log = "insert into SYSTEMINITLOG (xh,p_xh,FUNNAME,LX,UPDATA,TIMEDATA,UPFCILITYPRSONNEL,FCILITYPRSONNEL,SM,DEVELOPERS,SOURCEDE022,DE022,XTUSER,DE011,bs) " +
		"values ((select nvl(max(xh), 0) + 1 from SYSTEMINITLOG where lx = '" + log.getLx() + "'),(select nvl(max(xh), 0)   from SYSTEMINITLOG where lx = '" + log.getLx() + "'),'" + log.getFunname() + "','" + log.getLx() 
		+ "',(select nvl(max(updata), '') from SYSTEMINITLOG where xh = p_xh and lx='" + log.getLx() + "'),'" + log.getTimedata() + "','" + log.getUPFCILITYPRSONNEL() + "','" + log.getFCILITYPRSONNEL() + 
		"','" + log.getSM() + "','" + log.getDEVELOPERS() + "','" + log.getSOURCEDE022() + "','" + log.getDE022() + "','" 
		+ log.getXTUSER() + "','" + log.getDE011() + "', '" + log.getBS() + "')";
		DataBaseHelper.update(insert_log);
		if(log.getLogChildren().size() > 0) {
			int maxXH = DataBaseHelper.queryForScalar("select max(xh) as maxxh from SYSTEMINITLOG where lx=" + log.getLx(),Integer.class);
			for(SystemInitLogEntity logC : log.getLogChildren()) {
				String con = "";
				if(log.getSM().contains("#")) {
					con = " sm like '" + logC.getSM().substring(0, logC.getSM().indexOf("#")) + "%' ";
				} else {
					con = " xh = p_xh ";
				}
				String insert_logC = "insert into SYSTEMINITLOG (xh,p_xh,FUNNAME,LX,UPDATA,TIMEDATA,UPFCILITYPRSONNEL,FCILITYPRSONNEL,SM,DEVELOPERS,SOURCEDE022,DE022,XTUSER,DE011,bs) " +
				"values ((select nvl(max(xh), 0) + 1 from SYSTEMINITLOG where lx = 2), '" + maxXH + "','" + logC.getFunname() + "','" + logC.getLx() 
				+ "',(select max(t.TIMEDATA) from systeminitlog t where t.lx='" + log.getLx() + "' and " + con + "),'" + logC.getTimedata() + "','" + logC.getUPFCILITYPRSONNEL() + "','" + logC.getFCILITYPRSONNEL() + 
				"','" + logC.getSM() + "','" + logC.getDEVELOPERS() + "','" + logC.getSOURCEDE022() + "','" + logC.getDE022() + "','" 
				+ logC.getXTUSER() + "','" + logC.getDE011() + "', '" + logC.getBS() + "')";
				DataBaseHelper.update(insert_logC);
			}
		}
	}

	public Connection getConn() throws SQLException {

		Connection con = null;
		try {
			// 加载JDBC驱动
			Class.forName("oracle.jdbc.driver.OracleDriver");
			// 创建数据库连接 hayszx2010
			con = DriverManager.getConnection("jdbc:oracle:thin:@172.16.5.88:1521:orcl",
					"inte_qx", "123456");

			return con;
		} catch (ClassNotFoundException cnf) {
			System.out.println("driver not find:" + cnf);
			return null;
		} catch (SQLException sqle) {
			System.out.println("can't connection db:" + sqle);
			return null;
		} catch (Exception e) {
			System.out.println("Failed to load JDBC/ODBC driver.");
			return null;
		}
	}

	@SuppressWarnings("unused")
	private List<String> getSqlList(int lx,String path,InputStream in,String temp ) {
		BufferedReader br=null;
		List<String> list = new ArrayList<String>();
		try {
		
		if(lx==1){//读取版本控制   xml   
			br= new BufferedReader(new InputStreamReader(in,"utf-8"));
			String line;
			while ((line = br.readLine()) != null) {
				line = line.trim().toLowerCase();
				list.add(line.replaceAll(";", ""));
			}
		}else if(lx==2){// 读取dml   主要是处理按照行
			String line;
			br= new BufferedReader(new InputStreamReader(in,"gbk"));
			while ((line = br.readLine()) != null) {
				line = line.trim().toLowerCase();
				if (line.startsWith("insert")|| line.startsWith("delete")|| line.startsWith("update")|| line.startsWith("selete")) {
					list.add(line.replaceAll(";", ""));
				}
			}
		}else if(lx==3){//读取    处理  按照块读取    主要包含 视图  序列之类  结尾  “;”
			String line;
			br= new BufferedReader(new InputStreamReader(in,"gbk"));
			StringBuffer sb=new StringBuffer();
			while ((line = br.readLine()) != null) {
				sb.append(line + "\n");
			}
			String sql=sb.toString();
			if (sql.trim().endsWith(";")) {// 截取最后一个
				sql = sql.substring(0, sql.lastIndexOf(";"));
			}
			list.add(sql);
		}else if(lx==3){//存储过程  包体 包头    结尾是  “/”
			String line;
			br= new BufferedReader(new InputStreamReader(in,"gbk"));
			StringBuffer sb=new StringBuffer();
			while ((line = br.readLine()) != null) {
				sb.append(line + "\n");
			}
			String sql=sb.toString();
			if (sql.trim().endsWith("/")) {// 截取最后一个
				sql = sql.substring(0, sql.lastIndexOf("/"));
			}
			list.add(sql);
		}
		} catch (IOException e) {
			
		} finally {
			//关闭流2014-5-23hujing
			if(br != null) {
				try {
					br.close();
				} catch (IOException e) {
					br = null;
				}
			}
		}
		return list;
	}

	public String getSysMaxVersion(){
		return this.getJdbcTemplate().queryForObject("select nvl(max(version),0) version  from systemversion ",String.class);
	}
 
	/**
	 * 校验用户输入口令的正确性
	 */
	public void checkKeyVal(String keyval,User user) throws Exception{
		String sqlStr = "";
		sqlStr = " select count(1)   from jscs001 where  dataelement = ?  and devalue=?  and de022 = ? ";
		int countInt=DataBaseHelper.queryForScalar(sqlStr, Integer.class, new Object[]{"PASSKEY","1",user.getSjzonecode()});
		sqlStr = " select jsde902   from jscs001 where  dataelement = ?  and devalue=? and de022 = ? ";
		Map<String,Object> map = null;
		if(countInt==0){
			map = DataBaseHelper.queryForMap(sqlStr, new Object[]{"PASSKEY","1","990000"});
		}else{
			map = DataBaseHelper.queryForMap(sqlStr, new Object[]{"PASSKEY","1",user.getSjzonecode()});
		} 
		if(!map.get("JSDE902").equals(EncryptForNet.encrypt(keyval, "finstone.gkb"))){
			throw new Exception("口令错误,数据上传失败,请输入正确的口令");
		}
	}
	
	public  void truncateTable(String tablename,OutData data){
		
		try{
		int istable=gkbCommGetSqlDataService.isTable(tablename);
		if(istable==0){
			throw  new BusException("指定的表名称无效,请重新指定");
		}
		else{
			logger.info("清空表"+tablename+"开始");
			String sql="truncate table "+tablename;
			DataBaseHelper.execute(sql);
			logger.info("清空表"+tablename+"完成");
		}
		}catch(Exception e){
			logger.info("清空表"+tablename+"失败");
			data.setCode(-1);
			data.setMsg("初始化失败");
			throw new BusException(e.getMessage());
		}
	}
	public void copyStandInfo(String tablename,String xzqh){
		try{

		int istable=gkbCommGetSqlDataService.isTable(tablename);

		if(istable==0){
			throw  new BusException("指定的表名称无效,请重新指定");
		}else{
			logger.info("初始化表"+tablename+"开始");
			String sql="delete from  "+tablename+" where de022 not like '990000'";
			DataBaseHelper.update(sql);

			Map zdxxMap = gkbCommGetSqlDataService.getTableColumnSqlInfo(
					tablename, "a", " de022,", "");
			int codeInt = Integer.parseInt(FinString.ts(zdxxMap.get("code")));
			if (codeInt < 0) {
				throw new BusException(FinString.ts(zdxxMap.get("text")));
			}
			String zdxxStr = FinString.ts(zdxxMap.get("text"));
			List<Map<String,Object>> list=DataBaseHelper.queryForList("select "+zdxxStr+" from "+tablename+" where de022  like '990000'");
			for(int i=0;i<list.size();i++){
				Map<String,Object> m=list.get(i);
				m.put("DE022", xzqh);
				Map sqlMap = gkbCommGetSqlDataService.getAddSqlInfo(tablename,
						m);
				codeInt = Integer.parseInt(FinString.ts(sqlMap.get("code")));
				if (codeInt < 0) {
					throw new BusException(FinString.ts(sqlMap.get("text")));
				}
				DataBaseHelper.update(FinString.ts(sqlMap.get("text")), m);
			}

			logger.info("初始化表"+tablename+"完成");
		}
		}catch(Exception e){
			logger.info("初始化表"+tablename+"失败");
			e.printStackTrace();
			//data.setCode(-1);
			//data.setMsg("初始化失败");
			throw new BusException(e.getMessage());
		}
		
	}
	/*
	 * xzqh为类似于320000的代码
	 */
	public void handleStandInfo(String tablename,String xzqh){
		try{
		int istable=gkbCommGetSqlDataService.isTable(tablename);
		if(istable==0){
			throw  new BusException("指定的表名称无效,请重新指定");
		}else{
			logger.info("初始化表"+tablename+"开始");
			String sql="delete from  "+tablename+" where de022 not like '99%'";
			DataBaseHelper.update(sql);

/*			Map zdxxMap = gkbCommGetSqlDataService.getTableColumnSqlInfo(
					tablename, "a", "", "");
			int codeInt = Integer.parseInt(FinString.ts(zdxxMap.get("code")));
			if (codeInt < 0) {
				throw new BusException(FinString.ts(zdxxMap.get("text")));
			}
			String zdxxStr = FinString.ts(zdxxMap.get("text"));*/
			List<Map<String, Object>> columns= gkbCommGetSqlDataService.getTableInfo(tablename);
			List<Map<String, Object>> cs021Columns= gkbCommGetSqlDataService.getTableInfo("cs021");
			List<Map<String,Object>> list=DataBaseHelper.queryForList("select * from "+tablename+" where de022 like '99%'");
			
			for(int i=0;i<list.size();i++){
				Map<String,Object> m=list.get(i);
				String de022_bzb=m.get("DE022").toString();
				int xzqhlength=0;
				if(de022_bzb=="990000"){//省级数据
					xzqhlength=2;
				}
				else if(de022_bzb=="990900"){//市级数据
					xzqhlength=4;
				}
                else if(de022_bzb=="990909"){//显级数据
                	xzqhlength=6;
                }else{
					throw new BusException("需要先清空非标准版数据");
				}
				
					List<Map<String,Object>> province=DataBaseHelper.queryForList("select * from cs021 where isqy=1 and length(de0221)="+xzqhlength+" and de022 like  (regexp_replace('"+xzqh+"','00$|0000$|000000$',''))||'%'");
					for(int rownum=0;rownum<province.size();rownum++){
						Map<String, Object> mapinfo = new HashMap<String, Object>();
						Map<String,Object> provinceRow=province.get(rownum);
					for(int columnnum=0;columnnum<columns.size();columnnum++){//针对每列,判断是否有#内容
						String columnName=columns.get(columnnum).get("COLUMN_NAME").toString();
						String columnType=columns.get(columnnum).get("DATA_TYPE").toString();
						if((!columnName.equals("DE022"))&&(!columnType.equals("CLOB"))){//非区域代码字段,非clob字段
							if(m.get(columnName).toString().indexOf("#")<0){//模板行字段为空或者是直接文本,无番薯  此时数据直接复制
								mapinfo.put(columnName, m.get(columnName).toString());
							}else{
								//判断是否两个#之间的字段是否在cs021中,如果不在那张表中,跑出异常
								String param=m.get(columnName).toString().substring(m.get(columnName).toString().indexOf("#"), m.get(columnName).toString().lastIndexOf("#"));
								for(int c=0;c<cs021Columns.size();c++){
									if(c==cs021Columns.size()-1&&(!cs021Columns.get(c).get("COLUMN_NAME").toString().equalsIgnoreCase(param))){
										throw new BusException("参数设置不正确,请查验");
									}
								}
								
								mapinfo.put(columnName,m.get(columnName).toString().replace("#"+param+"#", provinceRow.get(param).toString()));
							}
			
						}
					}
					//插入数据航
					mapinfo.put("DE022", provinceRow.get("DE022").toString());
					Map sqlMap = gkbCommGetSqlDataService.getAddSqlInfo(tablename,
							mapinfo);
					int codeInt = Integer.parseInt(FinString.ts(sqlMap.get("code")));
					if (codeInt < 0) {
						throw new BusException(FinString.ts(sqlMap.get("text")));
					}
					DataBaseHelper.update(FinString.ts(sqlMap.get("text")), mapinfo);
					}

			

			}

			logger.info("初始化表"+tablename+"完成");
		}
		}catch(Exception e){
			//data.setCode(-1);
			//data.setMsg("初始化失败");
			e.printStackTrace();
			throw new BusException(e.getMessage());
		}
	}
	public OutData doDatabaseInitImp(Map p,IUser user) throws Exception {
		User userinfo = (User) user;
		if(!userinfo.getLoginName().equalsIgnoreCase("admin")){
			throw  new BusException("只有超级管理员才能执行此操作");
		}
		if(p.get("XZQH").toString().replaceAll("0000", "").length()!=2){
			throw  new BusException("请选择省级区划!");
		}
		try{
			copyStandInfo("g_fjjbcs_bzb","320000");
			handleStandInfo("cs061_bzb","320000");
			
		OutData data = new OutData();
		data.setCode(0);
		data.setMsg("-");


		return data;
	}catch(Exception e){
		e.printStackTrace();
		throw new Exception(e.getMessage());
	}
	}
}

猜你喜欢

转载自b090023.iteye.com/blog/2308605