From 6a259fd0c1559aab8813b805d67c72111e20476e Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期三, 15 六月 2022 14:29:32 +0800
Subject: [PATCH] 优化疫情上报功能
---
java110-service/src/main/java/com/java110/service/smo/impl/QueryServiceSMOImpl.java | 168 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 140 insertions(+), 28 deletions(-)
diff --git a/java110-service/src/main/java/com/java110/service/smo/impl/QueryServiceSMOImpl.java b/java110-service/src/main/java/com/java110/service/smo/impl/QueryServiceSMOImpl.java
old mode 100644
new mode 100755
index 0d13cd5..c7f7d91
--- a/java110-service/src/main/java/com/java110/service/smo/impl/QueryServiceSMOImpl.java
+++ b/java110-service/src/main/java/com/java110/service/smo/impl/QueryServiceSMOImpl.java
@@ -4,27 +4,28 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath;
-import com.java110.common.cache.ServiceSqlCache;
-import com.java110.common.constant.CommonConstant;
-import com.java110.common.constant.ResponseConstant;
-import com.java110.common.exception.BusinessException;
+import com.alibaba.fastjson.parser.Feature;
import com.java110.core.factory.DataTransactionFactory;
-import com.java110.common.log.LoggerEngine;
-import com.java110.common.util.Assert;
-import com.java110.common.util.StringUtil;
-import com.java110.entity.service.DataQuery;
+import com.java110.db.dao.IQueryServiceDAO;
import com.java110.entity.service.ServiceSql;
-import com.java110.service.dao.IQueryServiceDAO;
+import com.java110.service.context.DataQuery;
import com.java110.service.smo.IQueryServiceSMO;
-import javassist.ClassPool;
+import com.java110.utils.cache.ServiceSqlCache;
+import com.java110.utils.constant.CommonConstant;
+import com.java110.utils.constant.ResponseConstant;
+import com.java110.utils.exception.BusinessException;
+import com.java110.utils.log.LoggerEngine;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.StringUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.ognl.Ognl;
+import org.apache.ibatis.ognl.OgnlContext;
import org.apache.ibatis.ognl.OgnlException;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.java110.core.log.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -120,6 +121,24 @@
}
+ @Override
+ public ResponseEntity<String> fallBack(String fallBackInfo) throws BusinessException {
+
+ JSONArray params = JSONArray.parseArray(fallBackInfo);
+ for (int paramIndex = 0; paramIndex < params.size(); paramIndex++) {
+ JSONObject param = params.getJSONObject(paramIndex);
+ String sql = param.getString("fallBackSql");
+ if (StringUtil.isEmpty(sql)) {
+ return new ResponseEntity<String>("鏈寘鍚玸ql淇℃伅", HttpStatus.BAD_REQUEST);
+ }
+ int flag = queryServiceDAOImpl.updateSql(sql, null);
+
+ }
+ return new ResponseEntity<String>("鍥為��鎴愬姛", HttpStatus.OK);
+
+ }
+
+
/**
* {"PARAM:"{
* "param1": "$.a.#A#Object",
@@ -183,20 +202,9 @@
Interpreter interpreter = new Interpreter();
interpreter.eval(javaCode);
- /* String param = "";
- for (String key : params.keySet()) {
- param += (params.getString(key) + ",");
- }
-
- if (param.endsWith(",")) {
- param = param.substring(0, param.length() - 1);
- }*/
-
-
-
-
+ interpreter.set("dataQuery", dataQuery);
dataQuery.setResponseInfo(DataTransactionFactory.createBusinessResponseJson(ResponseConstant.RESULT_CODE_SUCCESS,
- "鎴愬姛", JSONObject.parseObject(interpreter.eval("execute(" + dataQuery + ")").toString())));
+ "鎴愬姛", JSONObject.parseObject(interpreter.eval("execute(dataQuery)").toString())));
} catch (Exception e) {
logger.error("鏁版嵁浜や簰寮傚父锛�", e);
throw new BusinessException(ResponseConstant.RESULT_CODE_INNER_ERROR, "鏁版嵁浜や簰寮傚父," + e.getMessage());
@@ -261,7 +269,10 @@
String currentSql = sqlObj.getString(dataQuery.getTemplateKey());
//澶勭悊 if 鍒ゆ柇
+ logger.debug("dealSqlIf寮�濮嬪鐞唖ql涓殑<if>鑺傜偣 " + currentSql + " 鍏ュ弬:" + params.toJSONString());
currentSql = dealSqlIf(currentSql, params);
+ logger.debug("dealSqlIf澶勭悊瀹屾垚sql涓殑<if>鑺傜偣 " + currentSql + " 鍏ュ弬:" + params.toJSONString());
+
String[] sqls = currentSql.split("#");
String currentSqlNew = "";
@@ -293,7 +304,7 @@
param = params.getInteger(sqls[sqlIndex]);
}
//杩欓噷瀵� page 鍜� rows 鐗规畩澶勭悊 锛岀洰鍓嶆病鏈夋兂鍒板叾浠栫殑鍔炴硶
- if (StringUtils.isNumeric(param.toString()) && "page,rows".contains(sqls[sqlIndex])) {
+ if (StringUtils.isNumeric(param.toString()) && "page,rows,row".contains(sqls[sqlIndex])) {
param = Integer.parseInt(param.toString());
}
currentParams.add(param);
@@ -333,6 +344,100 @@
}
/**
+ * 鎵цjava鑴氭湰
+ *
+ * @param javaCode
+ * @throws BusinessException
+ */
+ public JSONObject execJava(JSONObject params, String javaCode) throws BusinessException {
+ try {
+ //JSONObject params = dataQuery.getRequestParams();
+ List<String> columns = new ArrayList<>();
+ Interpreter interpreter = new Interpreter();
+ interpreter.eval(javaCode);
+ interpreter.set("params", params);
+ interpreter.set("queryServiceDAOImpl",queryServiceDAOImpl);
+ JSONObject results = JSONObject.parseObject(interpreter.eval("execute(params,queryServiceDAOImpl)").toString(), Feature.OrderedField);
+
+ JSONArray data = null;
+ if (results == null || results.size() < 1) {
+ data = new JSONArray();
+ } else {
+ data = results.getJSONArray("data");
+ }
+
+ JSONArray th = new JSONArray();
+ if(data.size()>0) {
+ for (String key : data.getJSONObject(0).keySet()) {
+ th.add(key);
+ }
+ }
+ JSONObject paramOut = new JSONObject();
+ paramOut.put("th", th);
+ paramOut.put("td", data);
+ paramOut.put("total",results.getString("total"));
+
+ return paramOut;
+ } catch (Exception e) {
+ logger.error("鏁版嵁浜や簰寮傚父锛�", e);
+ throw new BusinessException(ResponseConstant.RESULT_CODE_INNER_ERROR, "鏁版嵁浜や簰寮傚父," + e.getMessage());
+ }
+ }
+
+ @Override
+ public JSONObject execQuerySql(JSONObject params, String currentSql) throws BusinessException {
+ List<Map<String, Object>> results = null;
+ List<String> columns = new ArrayList<>();
+ try {
+ List<Object> currentParams = new ArrayList<Object>();
+ //澶勭悊 if 鍒ゆ柇
+ logger.debug("dealSqlIf寮�濮嬪鐞唖ql涓殑<if>鑺傜偣 " + currentSql + " 鍏ュ弬:" + params.toJSONString());
+ currentSql = dealSqlIf(currentSql, params);
+ logger.debug("dealSqlIf澶勭悊瀹屾垚sql涓殑<if>鑺傜偣 " + currentSql + " 鍏ュ弬:" + params.toJSONString());
+ String[] sqls = currentSql.split("#");
+ String currentSqlNew = "";
+ for (int sqlIndex = 0; sqlIndex < sqls.length; sqlIndex++) {
+ if (sqlIndex % 2 == 0) {
+ currentSqlNew += sqls[sqlIndex];
+ continue;
+ }
+ currentSqlNew += "?";
+ Object param = params.getString(sqls[sqlIndex]);
+ if (params.get(sqls[sqlIndex]) instanceof Integer) {
+ param = params.getInteger(sqls[sqlIndex]);
+ }
+ //杩欓噷瀵� page 鍜� rows 鐗规畩澶勭悊 锛岀洰鍓嶆病鏈夋兂鍒板叾浠栫殑鍔炴硶
+ if (StringUtils.isNumeric(param.toString()) && "page,rows,row".contains(sqls[sqlIndex])) {
+ param = Integer.parseInt(param.toString());
+ }
+ currentParams.add(param);
+ }
+ results = queryServiceDAOImpl.executeSql(currentSqlNew, currentParams.toArray(), columns);
+ } catch (Exception e) {
+ logger.error("瑙f瀽sql 寮傚父", e);
+ throw new BusinessException("1999", e.getLocalizedMessage());
+ }
+ JSONArray data = null;
+ if (results == null || results.size() < 1) {
+ data = new JSONArray();
+ } else {
+ data = JSONArray.parseArray(JSONArray.toJSONString(results));
+ }
+ JSONArray th = null;
+ if (columns.size() < 1) {
+ th = new JSONArray();
+ } else {
+ th = JSONArray.parseArray(JSONArray.toJSONString(columns));
+ }
+
+
+ JSONObject paramOut = new JSONObject();
+ paramOut.put("th", th);
+ paramOut.put("td", data);
+ return paramOut;
+ }
+
+ /**
* 澶勭悊SQL璇彞
*
* @param oldSql select * from s_a a
@@ -349,9 +454,13 @@
if (!oldSql.contains("<if")) {
return oldSql;
}
-
String[] oSqls = oldSql.split("</if>");
for (String oSql : oSqls) {
+ logger.debug("澶勭悊if 鑺傜偣锛屽綋鍓嶅鐞嗙殑oSql=" + oSql + "鎬荤殑oSqls = " + oSqls);
+ if (StringUtil.isNullOrNone(oSql) || !oSql.contains("<if")) {
+ newSql.append(oSql);
+ continue;
+ }
if (!oSql.startsWith("<if")) {
newSql.append(oSql.substring(0, oSql.indexOf("<if")));
}
@@ -364,7 +473,9 @@
Object condObj = Ognl.parseExpression(condition);
- Object value = Ognl.getValue(condObj, requestParams);
+ OgnlContext context = new OgnlContext(null,null,new DefaultMemberAccess(true));
+
+ Object value = Ognl.getValue(condObj,context, requestParams);
if (value instanceof Boolean) {
conditionResult = (Boolean) value;
@@ -376,10 +487,11 @@
newSql.append(root.getText());
}
+
}
- return newSql.toString();
+ return newSql.toString().replace(">", ">").replace("<", "<");
}
--
Gitblit v1.8.0