ecology_maven/com/api/aiyh_pcn/patentWall/service/PatentWallService.java

292 lines
9.6 KiB
Java
Raw Normal View History

2021-11-25 21:46:05 +08:00
package com.api.aiyh_pcn.patentWall.service;
import aiyh.utils.Util;
import aiyh.utils.zwl.common.ToolUtil;
import com.alibaba.fastjson.JSON;
2021-11-25 21:46:05 +08:00
import com.api.aiyh_pcn.patentWall.dao.PatentWallMapping;
import com.api.aiyh_pcn.patentWall.dto.FilterWhere;
2021-11-25 21:46:05 +08:00
import com.api.aiyh_pcn.patentWall.vo.PatentVO;
import com.api.aiyh_pcn.patentWall.vo.SearchInputVO;
import com.api.aiyh_pcn.patentWall.vo.SelectOptionsVo;
2021-11-25 21:46:05 +08:00
import weaver.conn.RecordSet;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author EBU7-dev1-ayh
* @create 2021/11/25 0025 15:23
*/
public class PatentWallService {
private final PatentWallMapping patentWallMapping = new PatentWallMapping();
private final ToolUtil toolUtil = new ToolUtil();
private Map<String, Object> patentWallConf;
private Map<String, Object> patentWallSearchConf;
private final RecordSet rs = new RecordSet();
2021-11-25 21:46:05 +08:00
/**
*
*
* @param prefix
* @return
*/
public List<SearchInputVO> getSearchList(String prefix,int languageId) {
Map<String, Object> patentWallSearchConf = getPatentWallSearchConf(prefix + ".search");
String dataResource = String.valueOf(patentWallSearchConf.get("dataResource"));
List<Map<String, Object>> inputs = (List<Map<String, Object>>) patentWallSearchConf.get("inputs");
List<SearchInputVO> searchInputList = new ArrayList<>();
for (Map<String, Object> input : inputs) {
SearchInputVO searchInputVO = new SearchInputVO();
int type = Integer.parseInt(Util.null2DefaultStr(input.get("type"), "0"));
String dbFieldName = Util.null2String(input.get("dbFieldName"));
String value = Util.null2String(input.get("value"));
String labelName = Util.null2String(input.get("labelName"));
Integer labelIndex = Integer.valueOf(Util.null2DefaultStr(input.get("labelIndex"),"0"));
Integer searchType = Integer.valueOf(Util.null2DefaultStr(input.get("searchType"),"0"));
Boolean multiple = Boolean.valueOf(Util.null2DefaultStr(input.get("multiple"),"false"));
searchInputVO.setType(type);
searchInputVO.setLabelName(labelName);
searchInputVO.setSearchType(searchType);
searchInputVO.setDbFieldName(dbFieldName);
searchInputVO.setLabelIndex(labelIndex);
searchInputVO.setLabelIndex(labelIndex);
searchInputVO.setMultiple(multiple);
searchInputVO.setValue(value);
searchInputList.add(searchInputVO);
switch (type) {
case 1:
// 下拉框 查询options
List<SelectOptionsVo> optionsVos = getSelectOptions(dataResource, dbFieldName,languageId);
searchInputVO.setSelectOptions(optionsVos);
case 2:
// 单行文本
break;
case 3:
// 日期
case 4:
// 单人力资源
break;
case 5:
// 多人力资源
break;
case 6:
// 流程路径
break;
case 7:
// 多流程路径
break;
default:
toolUtil.writeDebuggerLog("未匹配输入框类型!请检查配置文件是否正确!");
break;
}
}
return searchInputList;
}
private List<SelectOptionsVo> getSelectOptions(String dataResource, String dbFieldName, int languageId) {
List<Map<String, Object>> selectOptions = patentWallMapping.getSelectOptions(dataResource, dbFieldName);
List<SelectOptionsVo> optionsVos = new ArrayList<>();
SelectOptionsVo optionsDefault = new SelectOptionsVo();
optionsDefault.setSelected(true);
optionsDefault.setKey("");
optionsDefault.setShowname("");
optionsVos.add(optionsDefault);
for (Map<String, Object> selectOption : selectOptions) {
SelectOptionsVo optionsVo = new SelectOptionsVo();
optionsVo.setSelected(false);
optionsVo.setKey(Util.null2DefaultStr(selectOption.get("selectvalue"),""));
String selectName = Util.null2DefaultStr(selectOption.get("selectname"), "");
String showName = selectName;
if (selectName.startsWith("~`~`") && selectName.endsWith("`~`~")) {
String pattern = "(`~`" + languageId + " )(?<label>(\\w*|\\W*|[\\u4e00-\\u9fa5]*))(`~`)";
Pattern compile = Pattern.compile(pattern);
Matcher matcher = compile.matcher(selectName);
if (matcher.find()) {
showName = matcher.group("label");
}
}
optionsVo.setShowname(showName);
optionsVos.add(optionsVo);
}
return optionsVos;
}
/**
*
*
* @param filterWheres
* @param prefix
* @return
*/
public List<PatentVO> getList(List<FilterWhere> filterWheres, String prefix) {
Map<String, Object> patentWallConf = getPatentWallConf(prefix + ".voMapping");
List<Map<String, Object>> dataList;
toolUtil.writeDebuggerLog(String.format("查询数据,接收到的过滤信息为: %s", JSON.toJSONString(filterWheres)));
if (filterWheres == null || filterWheres.isEmpty()) {
// 查询全部
dataList = patentWallMapping.getAllList(Util.null2String(patentWallConf.get("dataResource")));
} else {
// 筛选查询
dataList = handleFilterWhere(filterWheres
, Util.null2String(patentWallConf.get("dataResource")));
}
2021-11-25 21:46:05 +08:00
List<PatentVO> list = new ArrayList<>();
List<String> args = new ArrayList<>();
RecordSet rs = new RecordSet();
for (Map<String, Object> data : dataList) {
Map<String, Object> config = new HashMap<>(patentWallConf);
for (Map.Entry<String, Object> entry : patentWallConf.entrySet()) {
2021-11-25 21:46:05 +08:00
String patentVoField = entry.getKey();
String parsing = String.valueOf(entry.getValue());
// TODO 值解析
// 解析 ${}类型的参数,直接替换
String pattern = "\\$\\{(?<field>(\\s|\\S)+?)}";
2021-11-25 21:46:05 +08:00
Pattern compile = Pattern.compile(pattern);
Matcher matcher = compile.matcher(parsing);
while (matcher.find()) {
parsing = parsing.replaceFirst(pattern, Util.null2String(data.get(matcher.group("field"))));
2021-11-25 21:46:05 +08:00
}
// 解析#{}类型的参数,替换为?并按照顺序收集args
pattern = "#\\{(?<field>(\\s|\\S)+?)}";
2021-11-25 21:46:05 +08:00
compile = Pattern.compile(pattern);
matcher = compile.matcher(parsing);
while (matcher.find()) {
parsing = parsing.replaceFirst(pattern, "?");
args.add(Util.null2String(data.get(matcher.group("field"))));
2021-11-25 21:46:05 +08:00
}
// 解析#sql{}类型的参数并执行SQL获取到SQL的值
pattern = "#sql\\{(?<sqlStr>([\\s\\S])+?)}";
compile = Pattern.compile(pattern);
matcher = compile.matcher(parsing);
while (matcher.find()) {
2021-11-25 21:46:05 +08:00
String sqlStr = matcher.group("sqlStr");
toolUtil.writeDebuggerLog(String.format("执行SQL {%s} ---> 参数: {%s}", sqlStr, args));
rs.executeQuery(sqlStr, args);
2021-11-25 21:46:05 +08:00
rs.next();
parsing = Util.null2String(rs.getString(1));
}
// 清除参数信息
args.clear();
// 修改数据
config.replace(patentVoField, parsing);
2021-11-25 21:46:05 +08:00
}
PatentVO patentVO = null;
try {
patentVO = Util.mapToObject(config, PatentVO.class);
2021-11-25 21:46:05 +08:00
} catch (Exception e) {
e.printStackTrace();
toolUtil.writeErrorLog("map转为PatentVO失败");
}
list.add(patentVO);
}
return list;
}
public List<Map<String, Object>> handleFilterWhere(List<FilterWhere> filterWheres, String tableName) {
StringBuilder whereBuilder = new StringBuilder(" where ");
List<String> args = new ArrayList<>();
for (FilterWhere filterWhere : filterWheres) {
whereBuilder.append(" add ");
if (filterWhere.getSearchType() == 1) {
// 等于
whereBuilder.append(filterWhere.getDbField())
.append(" = ? ");
args.add(filterWhere.getValue());
continue;
}
if (filterWhere.getSearchType() == 2) {
// 大于
whereBuilder.append(filterWhere.getDbField())
.append(" > ?");
args.add(filterWhere.getValue());
continue;
}
if (filterWhere.getSearchType() == 3) {
// 小于
whereBuilder.append(filterWhere.getDbField())
.append(" < ?");
args.add(filterWhere.getValue());
continue;
}
if (filterWhere.getSearchType() == 4) {
// in
whereBuilder.append(filterWhere.getDbField())
.append(" in ( ")
.append(filterWhere.getValue())
.append(") ");
continue;
}
if (filterWhere.getSearchType() == 5) {
// 日期大于
whereBuilder.append(" DATE_FORMAT(")
.append(filterWhere.getDbField())
.append(",'%y-%m-%d') > ")
.append("DATE_FORMAT(?,'%y-%m-%d')");
args.add(filterWhere.getValue());
continue;
}
if (filterWhere.getSearchType() == 6) {
// 日期小于
whereBuilder.append(" DATE_FORMAT(")
.append(filterWhere.getDbField())
.append(",'%y-%m-%d') < ")
.append("DATE_FORMAT(?,'%y-%m-%d')");
args.add(filterWhere.getValue());
continue;
}
}
return patentWallMapping.getListByFilterWhere(whereBuilder, args, tableName);
}
2021-11-25 21:46:05 +08:00
/**
*
*
2021-11-25 21:46:05 +08:00
* @return
*/
private Map<String, Object> getPatentWallConf(String prefix) {
synchronized (this) {
if (this.patentWallConf == null) {
this.patentWallConf = Util.readProperties2Map("PatentWall", "aiyh." + prefix);
2021-11-25 21:46:05 +08:00
}
if (this.patentWallConf == null) {
2021-11-25 21:46:05 +08:00
return new HashMap<>(0);
}
return new HashMap<>(this.patentWallConf);
}
}
public void clearPatentWallConf() {
2021-11-25 21:46:05 +08:00
this.patentWallConf = null;
}
/**
*
*
* @return
*/
private Map<String, Object> getPatentWallSearchConf(String prefix) {
synchronized (this) {
if (this.patentWallSearchConf == null) {
this.patentWallSearchConf = Util.readProperties2Map("PatentWall", "aiyh." + prefix);
}
if (this.patentWallSearchConf == null) {
return new HashMap<>(0);
}
return new HashMap<>(this.patentWallSearchConf);
}
}
public void clearPatentWallSerachConf() {
this.patentWallSearchConf = null;
}
2021-11-25 21:46:05 +08:00
}