| 
					
				 | 
			
			
				@ -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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |