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