|  | @ -0,0 +1,189 @@
 | 
	
		
			
				|  |  | package com.yihu.ehr.service.standard;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.yihu.ehr.common.constants.Constants;
 | 
	
		
			
				|  |  | import com.yihu.ehr.dbhelper.jdbc.DBConfig;
 | 
	
		
			
				|  |  | import com.yihu.ehr.dbhelper.jdbc.DBHelper;
 | 
	
		
			
				|  |  | import com.yihu.ehr.util.log.LogUtil;
 | 
	
		
			
				|  |  | import com.yihu.ehr.util.operator.CollectionUtil;
 | 
	
		
			
				|  |  | import com.yihu.ehr.util.operator.SqlCreate;
 | 
	
		
			
				|  |  | import com.yihu.ehr.util.operator.StringUtil;
 | 
	
		
			
				|  |  | import org.dom4j.Document;
 | 
	
		
			
				|  |  | import org.dom4j.Element;
 | 
	
		
			
				|  |  | import org.dom4j.io.SAXReader;
 | 
	
		
			
				|  |  | import org.json.JSONObject;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import java.io.File;
 | 
	
		
			
				|  |  | import java.sql.Connection;
 | 
	
		
			
				|  |  | import java.util.*;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  * 线程取数据,不走连接池
 | 
	
		
			
				|  |  |  */
 | 
	
		
			
				|  |  | public class StandardService {
 | 
	
		
			
				|  |  |     private DBHelper db = new DBHelper();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 获取当前自版本号
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public synchronized String getCurrentVersion() {
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             String localVersion = "";
 | 
	
		
			
				|  |  |             List<JSONObject> list = db.query("select code from std_inner_version order by code desc");
 | 
	
		
			
				|  |  |             if (!CollectionUtil.isEmpty(list)) {
 | 
	
		
			
				|  |  |                 localVersion = list.get(0).getString("code");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             return localVersion;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         catch (Exception e)
 | 
	
		
			
				|  |  |         {
 | 
	
		
			
				|  |  |             LogUtil.error(e);
 | 
	
		
			
				|  |  |             return "";
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 读取标准数据
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public synchronized boolean genData(File[] zipFiles) {
 | 
	
		
			
				|  |  |         List<String> sqlList = new ArrayList<>();
 | 
	
		
			
				|  |  |         List<String> fileNameList = new ArrayList<>();
 | 
	
		
			
				|  |  |         List<String> deleteDataList = new ArrayList<>();
 | 
	
		
			
				|  |  |         for (File file : zipFiles) {
 | 
	
		
			
				|  |  |             if (!file.getName().contains("_cda")) {
 | 
	
		
			
				|  |  |                 if (file.getName().contains("org_")||file.getName().contains("adapter_")
 | 
	
		
			
				|  |  |                         ||file.getName().contains("std_")) {
 | 
	
		
			
				|  |  |                     fileNameList.add(StringUtil.substring(file.getName(), 0, file.getName().indexOf(Constants.DOT)));
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |                 if (!file.getParentFile().getName().equals(Constants.CDA_FILE)) {
 | 
	
		
			
				|  |  |                     createData(file, sqlList);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         SqlCreate sqlCreate = new SqlCreate();
 | 
	
		
			
				|  |  |         for (String fileName : fileNameList) {
 | 
	
		
			
				|  |  |             sqlCreate.setTableName(fileName);
 | 
	
		
			
				|  |  |             deleteDataList.add(sqlCreate.deleteData());
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         String[] deleteArray = new String[deleteDataList.size()];
 | 
	
		
			
				|  |  |         deleteDataList.toArray(deleteArray);
 | 
	
		
			
				|  |  |         String[] sqlArray = new String[sqlList.size()];
 | 
	
		
			
				|  |  |         sqlList.toArray(sqlArray);
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             db.executeBatch(deleteArray);
 | 
	
		
			
				|  |  |             db = new DBHelper();
 | 
	
		
			
				|  |  |             db.executeBatch(sqlArray);
 | 
	
		
			
				|  |  |         } catch (Exception e) {
 | 
	
		
			
				|  |  |             e.printStackTrace();
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return true;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private void createData(File file, List<String> sqlList) {
 | 
	
		
			
				|  |  |         try {
 | 
	
		
			
				|  |  |             SAXReader reader = new SAXReader();
 | 
	
		
			
				|  |  |             Document doc = reader.read(file);
 | 
	
		
			
				|  |  |             Element root = doc.getRootElement();
 | 
	
		
			
				|  |  |             String tableName = root.attributeValue("name");
 | 
	
		
			
				|  |  |             if (tableName == null) {
 | 
	
		
			
				|  |  |                 throw new Exception("错误的标准格式,无表名信息.");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             Element metadata = root.element("metadata");
 | 
	
		
			
				|  |  |             if (metadata == null) {
 | 
	
		
			
				|  |  |                 throw new Exception("错误的标准格式,无表字段信息.");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             HashMap<String, String> colMap = getColMetaData(metadata);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             for (Iterator rowIterator = root.elementIterator("row"); rowIterator.hasNext();) {
 | 
	
		
			
				|  |  |                 SqlCreate sqlCreate = new SqlCreate();
 | 
	
		
			
				|  |  |                 sqlCreate.setTableName(tableName);
 | 
	
		
			
				|  |  |                 Element rowElement = (Element) rowIterator.next();
 | 
	
		
			
				|  |  |                 createDataSql(rowElement, colMap, sqlList, sqlCreate);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         } catch (Exception e) {
 | 
	
		
			
				|  |  |             LogUtil.fatal("生成标准表异常:");
 | 
	
		
			
				|  |  |             LogUtil.error(e);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private HashMap<String, String> getColMetaData(Element rowElem) {
 | 
	
		
			
				|  |  |         HashMap<String, String> hashMap = new HashMap<>();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         for (Iterator colIterator = rowElem.elementIterator(); colIterator.hasNext(); ) {
 | 
	
		
			
				|  |  |             Element colElement = (Element) colIterator.next();
 | 
	
		
			
				|  |  |             String name = colElement.attributeValue("name");
 | 
	
		
			
				|  |  |             String type = colElement.attributeValue("type");
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             hashMap.put(name, type);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         return hashMap;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     private void createDataSql(Element rowElement, HashMap<String, String> colMap, List<String> sqlList, SqlCreate sqlCreate) {
 | 
	
		
			
				|  |  |         if (rowElement == null) {
 | 
	
		
			
				|  |  |             return;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         Map<String, String> keyValueMap = new HashMap<>();
 | 
	
		
			
				|  |  |         List<String> itemList = new ArrayList<>();
 | 
	
		
			
				|  |  |         List<String> itemValueList = new ArrayList<>();
 | 
	
		
			
				|  |  |         for (Iterator colIterator = rowElement.elementIterator(); colIterator.hasNext(); ) {
 | 
	
		
			
				|  |  |             Element colElement = (Element) colIterator.next();
 | 
	
		
			
				|  |  |             if (colElement.getText().equals("")) {
 | 
	
		
			
				|  |  |                 continue;
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             String key = colElement.getName();
 | 
	
		
			
				|  |  |             itemList.add(key);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |             String type = colMap.get(key);
 | 
	
		
			
				|  |  |             if (type == null) {
 | 
	
		
			
				|  |  |                 LogUtil.fatal("createDataSql无效的类型.");
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             String value;
 | 
	
		
			
				|  |  |             switch (type) {
 | 
	
		
			
				|  |  |                 case "N":
 | 
	
		
			
				|  |  |                     value = colElement.getText();
 | 
	
		
			
				|  |  |                     break;
 | 
	
		
			
				|  |  |                 case "S":
 | 
	
		
			
				|  |  |                     value = "'" + colElement.getText().replace("'","''") + "'";
 | 
	
		
			
				|  |  |                     break;
 | 
	
		
			
				|  |  |                 case "D":
 | 
	
		
			
				|  |  |                     value = "'" + colElement.getText() + "'";
 | 
	
		
			
				|  |  |                     break;
 | 
	
		
			
				|  |  |                 default:
 | 
	
		
			
				|  |  |                     value = colElement.getText();
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             itemValueList.add(value);
 | 
	
		
			
				|  |  |             keyValueMap.put(key, value);
 | 
	
		
			
				|  |  |             if (key.equals(Constants.TABLE_KEY)) {
 | 
	
		
			
				|  |  |                 sqlCreate.setTableKey(value);
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         sqlCreate.setItemList(itemList);
 | 
	
		
			
				|  |  |         sqlCreate.setItemValueList(itemValueList);
 | 
	
		
			
				|  |  |         sqlCreate.setKeyValueMap(keyValueMap);
 | 
	
		
			
				|  |  |         if (Constants.ADD_TYPE.equals(rowElement.attributeValue("type"))) {
 | 
	
		
			
				|  |  |             sqlList.add(sqlCreate.insertData());
 | 
	
		
			
				|  |  |         } else if (Constants.UPDATE_TYPE.equals(rowElement.attributeValue("type"))) {
 | 
	
		
			
				|  |  |             sqlList.add(sqlCreate.updateDataByTableKey());
 | 
	
		
			
				|  |  |             if (sqlCreate.isToAdapter() && sqlCreate.isCodeOrValue()) {
 | 
	
		
			
				|  |  |                 sqlList.add(sqlCreate.updateAdapterData());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         } else if (Constants.DELETE_TYPE.equals(rowElement.attributeValue("type"))) {
 | 
	
		
			
				|  |  |             sqlList.add(sqlCreate.deleteDataByTableKey());
 | 
	
		
			
				|  |  |             if (sqlCreate.isToAdapter()) {
 | 
	
		
			
				|  |  |                 sqlList.add(sqlCreate.deleteAdapterData());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |             if (sqlCreate.isToAdapterDataset()) {
 | 
	
		
			
				|  |  |                 sqlList.add(sqlCreate.deleteAdapterOriginData());
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | }
 |