| | |
| | | import com.java110.common.constant.CommonConstant; |
| | | import com.java110.common.constant.ResponseConstant; |
| | | import com.java110.common.exception.BusinessException; |
| | | import com.java110.common.factory.DataTransactionFactory; |
| | | 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.entity.service.ServiceSql; |
| | | import com.java110.service.dao.IQueryServiceDAO; |
| | | import com.java110.service.smo.IQueryServiceSMO; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.http.ResponseEntity; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | |
| | | @Override |
| | | public void commonQueryService(DataQuery dataQuery) throws BusinessException { |
| | | //查询缓存查询 对应处理的ServiceSql |
| | | ResponseEntity<String> responseEntity = null; |
| | | try { |
| | | ServiceSql currentServiceSql = ServiceSqlCache.getServiceSql(dataQuery.getServiceCode()); |
| | | if (currentServiceSql == null) { |
| | |
| | | if ("".equals(currentServiceSql.getQueryModel())) { |
| | | throw new BusinessException(ResponseConstant.RESULT_CODE_INNER_ERROR,"配置服务 serviceCode = " + dataQuery.getServiceCode() + " 错误,未配置QueryModel,请联系管理员"); |
| | | } |
| | | //请求参数校验 |
| | | List<String> sysParams = currentServiceSql.getParamList(); |
| | | for(String param : sysParams) { |
| | | if(!dataQuery.getRequestParams().containsKey(param)){ |
| | | throw new BusinessException(ResponseConstant.RESULT_PARAM_ERROR,"请求参数错误,请求报文中未包含参数 " + param + " 信息"); |
| | | } |
| | | } |
| | | dataQuery.setServiceSql(currentServiceSql); |
| | | if (CommonConstant.QUERY_MODEL_SQL.equals(currentServiceSql.getQueryModel())) { |
| | | doExecuteSql(dataQuery); |
| | | return; |
| | | }else if(CommonConstant.QUERY_MODE_JAVA.equals(currentServiceSql.getQueryModel())){ |
| | | doExecuteJava(dataQuery); |
| | | return ; |
| | | }else { |
| | | doExecuteProc(dataQuery); |
| | | } |
| | | doExecuteProc(dataQuery); |
| | | responseEntity = new ResponseEntity<String>(dataQuery.getResponseInfo().toJSONString(), HttpStatus.OK); |
| | | }catch (BusinessException e){ |
| | | logger.error("公用查询异常:",e); |
| | | dataQuery.setResponseInfo(DataTransactionFactory.createBusinessResponseJson(ResponseConstant.RESULT_PARAM_ERROR, |
| | | e.getMessage())); |
| | | /*dataQuery.setResponseInfo(DataTransactionFactory.createBusinessResponseJson(ResponseConstant.RESULT_PARAM_ERROR, |
| | | e.getMessage()));*/ |
| | | responseEntity = new ResponseEntity<String>("请求发生异常,"+e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); |
| | | }finally { |
| | | dataQuery.setResponseEntity(responseEntity); |
| | | } |
| | | |
| | | |
| | | } |
| | | @Override |
| | |
| | | * @param dataQuery |
| | | */ |
| | | private void doExecuteUpdateSql(DataQuery dataQuery) throws BusinessException{ |
| | | |
| | | JSONObject business = null; |
| | | try { |
| | | JSONObject params = dataQuery.getRequestParams(); |
| | | JSONObject sqlObj = JSONObject.parseObject(dataQuery.getServiceSql().getSql()); |
| | | JSONObject templateObj = JSONObject.parseObject(dataQuery.getServiceSql().getTemplate()); |
| | | business = JSONObject.parseObject(templateObj.getString("TEMPLATE")); |
| | | List<Object> currentParams = new ArrayList<Object>(); |
| | | String currentSql = ""; |
| | | for(String key : sqlObj.keySet()) { |
| | |
| | | continue; |
| | | } |
| | | currentSqlNew += "?"; |
| | | currentParams.add(params.get(sqls[sqlIndex]) instanceof Integer ? params.getInteger(sqls[sqlIndex]) : "'" + params.getString(sqls[sqlIndex]) + "'"); |
| | | currentParams.add(params.get(sqls[sqlIndex]) instanceof Integer ? params.getInteger(sqls[sqlIndex]) : "" + params.getString(sqls[sqlIndex]) + ""); |
| | | //currentSqlNew += params.get(sqls[sqlIndex]) instanceof Integer ? params.getInteger(sqls[sqlIndex]) : "'" + params.getString(sqls[sqlIndex]) + "'"; |
| | | } |
| | | |
| | |
| | | logger.error("数据交互异常:",e); |
| | | throw new BusinessException(ResponseConstant.RESULT_CODE_INNER_ERROR,"数据交互异常。。。"); |
| | | } |
| | | |
| | | dataQuery.setResponseInfo(DataTransactionFactory.createBusinessResponseJson(ResponseConstant.RESULT_CODE_SUCCESS, |
| | | "成功",business)); |
| | | } |
| | | |
| | | /** |
| | |
| | | JSONArray currentJsonArr = null; |
| | | for(String key:templateParams.keySet()){ |
| | | template = templateParams.getString(key); |
| | | if(!template.startsWith("$.")){ |
| | | throw new BusinessException(ResponseConstant.RESULT_CODE_INNER_ERROR,"template 配置 不正确,value 必须以$.开头"); |
| | | } |
| | | values = template.split("#"); |
| | | |
| | | if(values == null || values.length != 3){ |
| | | throw new BusinessException(ResponseConstant.RESULT_CODE_INNER_ERROR,"template 配置 不正确,value 必须有两个#号"); |
| | | } |
| | | Object o = JSONPath.eval(business,values[0]); |
| | | values = judgeResponseTemplate(template); |
| | | |
| | | Object o = JSONPath.eval(business, values[0]); |
| | | |
| | | dataQuery.setTemplateKey(key); |
| | | if(o instanceof JSONObject){ |
| | | currentJsonObj = (JSONObject)o; |
| | |
| | | } |
| | | } else { |
| | | currentSqlNew += "?"; |
| | | currentParams.add(params.get(sqls[sqlIndex]) instanceof Integer ? params.getInteger(sqls[sqlIndex]) : "" + params.getString(sqls[sqlIndex]) + ""); |
| | | 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".contains(sqls[sqlIndex])){ |
| | | param = Integer.parseInt(param.toString()); |
| | | } |
| | | currentParams.add(param); |
| | | //currentSqlNew += params.get(sqls[sqlIndex]) instanceof Integer ? params.getInteger(sqls[sqlIndex]) : "'" + params.getString(sqls[sqlIndex]) + "'"; |
| | | } |
| | | } |
| | |
| | | List<Map<String,Object>> results = queryServiceDAOImpl.executeSql(currentSqlNew, currentParams.toArray()); |
| | | |
| | | if (results == null || results.size() == 0) { |
| | | obj.put(values[1], new JSONObject()); |
| | | if(StringUtil.isNullOrNone(values[1])){ |
| | | return ; |
| | | } |
| | | obj.put(values[1], values[2].equals("Object")?new JSONObject():new JSONArray()); |
| | | return; |
| | | } |
| | | if (values[2].equals("Object")) { |
| | | if(StringUtil.isNullOrNone(values[1])){ |
| | | obj.putAll(JSONObject.parseObject(JSONObject.toJSONString(results.get(0)))); |
| | | return ; |
| | | } |
| | | obj.put(values[1], JSONObject.parseObject(JSONObject.toJSONString(results.get(0)))); |
| | | } else if (values[2].equals("Array")) { |
| | | if(StringUtil.isNullOrNone(values[1])){ |
| | | JSONArray datas = JSONArray.parseArray(JSONArray.toJSONString(results)); |
| | | for(int dataIndex = 0;dataIndex < datas.size();dataIndex ++){ |
| | | obj.putAll(datas.getJSONObject(dataIndex)); |
| | | } |
| | | return ; |
| | | } |
| | | obj.put(values[1], JSONArray.parseArray(JSONArray.toJSONString(results))); |
| | | } |
| | | }catch (Exception e){ |
| | |
| | | |
| | | |
| | | /** |
| | | * 校验 返回模板 |
| | | * @param template |
| | | * @return |
| | | * @throws BusinessException |
| | | */ |
| | | private String[] judgeResponseTemplate(String template) throws BusinessException{ |
| | | |
| | | |
| | | if(!template.startsWith("$.")){ |
| | | throw new BusinessException(ResponseConstant.RESULT_CODE_INNER_ERROR,"template 配置 不正确,value 必须以$.开头"); |
| | | } |
| | | |
| | | String[] values = template.split("#"); |
| | | |
| | | if(values == null || values.length != 3){ |
| | | throw new BusinessException(ResponseConstant.RESULT_CODE_INNER_ERROR,"template 配置 不正确,value 必须有两个#号"); |
| | | } |
| | | |
| | | if(StringUtil.isNullOrNone(values[1]) && !"$.##Object".equals(template) && !"$.##Array".equals(template)){ |
| | | throw new BusinessException(ResponseConstant.RESULT_CODE_INNER_ERROR,"template 配置 不正确,目前只支持 $.##Object 和 $.##Array "); |
| | | } |
| | | |
| | | return values; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 执行存储 |
| | | * @param dataQuery |
| | | */ |