Browse Source

解决sql查询不支持某些不规范字段的问题

master
liwenxuan 1 year ago
parent
commit
4bef00b6fe
  1. 27
      src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java
  2. 28
      src/main/java/com/hxgk/lowcode/model/entity/AsfTableFillResult.java
  3. 3
      src/main/java/com/hxgk/lowcode/service/CustomerFormService.java
  4. 121
      src/main/java/com/hxgk/lowcode/service/impl/CustomerFormServiceImpl.java
  5. 2
      src/main/resources/mapper/FieldRecordMapper.xml

27
src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java

@ -1,6 +1,8 @@
package com.hxgk.lowcode.controller;
import com.alibaba.fastjson2.JSON;
import com.hxgk.lowcode.mapper.CustomerFormViewMapper;
import com.hxgk.lowcode.model.entity.AsfTableFillResult;
import com.hxgk.lowcode.model.entity.CustomerFormTableSingleFieldValue;
import com.hxgk.lowcode.model.entity.Option;
import com.hxgk.lowcode.model.entity.Tree;
@ -30,6 +32,8 @@ public class AssociatedFormsController {
private AsfDataTitlesByIdsQueryParam asfDataTitlesByIdsQueryParam;
@Autowired
private HrService hrService;
@Autowired
private CustomerFormViewMapper customerFormViewMapper;
public AssociatedFormsController() {
}
@ -202,4 +206,27 @@ public class AssociatedFormsController {
}
/*获取关联表单当前选择值的子表填充数据*/
@RequestMapping(value = "AssociatedForms/getAsfTableFill")
public JsonData getAsfTableFill(@RequestHeader(value = "User-Key") String key,
@RequestHeader(value = "User-Token") String token,
@RequestBody Map<String,String> requestBody) {
if(StringUtils.isBlank(key)||StringUtils.isBlank(token)){
return JsonData.buildError("非法请求");
}
String asfFormId = requestBody.get("asfFormId");
String glbbddbd = requestBody.get("glbbddbd");
String currentVal = requestBody.get("currentVal");
String fillFieldsChild = requestBody.get("fillFieldsChild");
//System.out.println(fillFieldsChild);
//根据formId(cfid)查询关联表单表名
String asfFormName = customerFormViewMapper.getTableNameByCfid(asfFormId).getTablekey();
com.alibaba.fastjson2.JSONArray fillFieldsChildJsonObject = JSON.parseArray(fillFieldsChild);
ArrayList<AsfTableFillResult> results = customerFormService.getAsfTableFill(key,token,asfFormName,glbbddbd,currentVal,fillFieldsChildJsonObject);
return JsonData.buildSuccess("1");
}
}

28
src/main/java/com/hxgk/lowcode/model/entity/AsfTableFillResult.java

@ -0,0 +1,28 @@
package com.hxgk.lowcode.model.entity;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.HashMap;
@Repository
public class AsfTableFillResult {
private String tableName;
private ArrayList<HashMap<String,Object>> tableDetail;
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public ArrayList<HashMap<String, Object>> getTableDetail() {
return tableDetail;
}
public void setTableDetail(ArrayList<HashMap<String, Object>> tableDetail) {
this.tableDetail = tableDetail;
}
}

3
src/main/java/com/hxgk/lowcode/service/CustomerFormService.java

@ -2,6 +2,7 @@ package com.hxgk.lowcode.service;
import com.alibaba.fastjson2.JSONArray;
import com.hxgk.lowcode.model.entity.AsfTableFillResult;
import com.hxgk.lowcode.model.entity.CustomerFormTableSingleFieldValue;
import com.hxgk.lowcode.model.entity.Tree;
@ -23,4 +24,6 @@ public interface CustomerFormService {
Boolean queryIfOrgOrPersonContainsCurrentUser(String key, String token, String targetOrgOrPerson, String condition, String currentUser);
Boolean queryHideRoleCondition(String key, String token, String targetOrgOrPerson, String condition, String currentUser);
ArrayList<AsfTableFillResult> getAsfTableFill(String key, String token, String asfFormName, String glbbddbd, String currentVal,JSONArray fillFieldsChildJsonObject);
}

121
src/main/java/com/hxgk/lowcode/service/impl/CustomerFormServiceImpl.java

@ -697,14 +697,6 @@ public class CustomerFormServiceImpl implements CustomerFormService {
dataTitleMapList = getDataTitles(asfFormName,toSelectDataTitles);
//System.out.println(dataTitleMapList);
}else{
/*数据填充start*/
/*数据填充end*/
HashMap<String,String> leftOperatorsAndRight = splitString(rangeFormula);
if(null!=leftOperatorsAndRight){
String left = leftOperatorsAndRight.get("left");
@ -1570,37 +1562,8 @@ public class CustomerFormServiceImpl implements CustomerFormService {
//数据填充规则数据字段准备 start
System.out.println(fillFieldsChild);
if(fillFieldsChild.size()>0){
for(int i = 0; i<fillFieldsChild.size();i++){
System.out.println(fillFieldsChild.get(i));
com.alibaba.fastjson2.JSONObject singleAsfChildTableFillRoleObject = (com.alibaba.fastjson2.JSONObject)fillFieldsChild.get(i);
com.alibaba.fastjson2.JSONObject filterCondition = (com.alibaba.fastjson2.JSONObject)singleAsfChildTableFillRoleObject.get("filterCondition");
System.out.println(1);
String singleAsfChildTableConditionHtml = filterCondition.get("conditionHtml").toString();
if(!StringUtils.isBlank(singleAsfChildTableConditionHtml)){
if(containsDangerousWords(filterCondition.get("conditionHtml").toString())){//子表条件带有非法字符
logger.error("子表条件带有非法字符");
}else{
String singleAsfChildTableFormulaHtml = ((com.alibaba.fastjson2.JSONObject) filterCondition.get("gongShi")).get("formulaHtml").toString();
String singleAsfChildTableMathsFormula = ((com.alibaba.fastjson2.JSONObject) filterCondition.get("gongShi")).get("mathsFormula").toString();
String singleAsfChildTableMathsString = ((com.alibaba.fastjson2.JSONObject) filterCondition.get("gongShi")).get("mathsString").toString();
System.out.println(1);
}
}
}
}
ArrayList<String> masterFillRoleFields = new ArrayList<>();
ArrayList<String> masterFillRoleFields1 = new ArrayList<>();
if(fillFieldsMaster.length()>0){
fillFieldsMaster = fillFieldsMaster.substring(0, fillFieldsMaster.length() - 1);
String[] masterFillRoleFieldsArray = fillFieldsMaster.split(";");
@ -1623,7 +1586,10 @@ public class CustomerFormServiceImpl implements CustomerFormService {
//asfFormName 关联表单的表名
//关联表单子表名数组
if(masterIds.size()>0){
List<HashMap<String, Object>> asfDetailList = fieldRecordMapper.getAsfDetail(asfFormName, masterFillRoleFields, masterIds);
for (int i = 0; i < masterFillRoleFields.size(); i++) {
masterFillRoleFields1.add(i, "`" + masterFillRoleFields.get(i) + "`");
}
List<HashMap<String, Object>> asfDetailList = fieldRecordMapper.getAsfDetail(asfFormName, masterFillRoleFields1, masterIds);
System.out.println(asfDetailList);
for(TreeMap<String,Object> toSortTreeMap : dataTitleMapList){
for(HashMap<String, Object> map :asfDetailList){
@ -1721,6 +1687,7 @@ public class CustomerFormServiceImpl implements CustomerFormService {
return false;
}
public static HashMap<String, String> splitString(String str) {
List<String> operators = Arrays.asList("==", ">", ">=", "<", "<=", "!=", "不包含", "包含");
for (String operator : operators) {
@ -1740,7 +1707,14 @@ public class CustomerFormServiceImpl implements CustomerFormService {
private List<TreeMap<String, Object>> getDataTitles(String asfFormName,ArrayList<String> toSelectDataTitles){
List<TreeMap<String, Object>> newDataTitles = new ArrayList<>();
List<TreeMap<String, Object>> dataTitles = fieldRecordMapper.getDataTitles(asfFormName, toSelectDataTitles);
/*for(String item :toSelectDataTitles){
item = "`"+item+"`";
}*/
ArrayList<String> toSelectDataTitles1 = new ArrayList<>();
for (int i = 0; i < toSelectDataTitles.size(); i++) {
toSelectDataTitles1.add(i, "`" + toSelectDataTitles.get(i) + "`");
}
List<TreeMap<String, Object>> dataTitles = fieldRecordMapper.getDataTitles(asfFormName, toSelectDataTitles1);
//没有owner的,creater的key改为owner,有owner但owner为空的,creater的value给owner
//没有org的
processDataTitles(dataTitles);
@ -1748,7 +1722,17 @@ public class CustomerFormServiceImpl implements CustomerFormService {
}
private List<TreeMap<String, Object>> getDataTitlesWithWhere_Asf_NotTable(String asfFormName,ArrayList<String> toSelectDataTitles,String operator,String whereCondition,String leftValue){
List<TreeMap<String, Object>> newDataTitles = new ArrayList<>();
List<TreeMap<String, Object>> dataTitles = fieldRecordMapper.getDataTitlesWithWhere_Asf_NotTable(asfFormName, toSelectDataTitles,operator,whereCondition,leftValue);
/*for(String item :toSelectDataTitles){
item = "`"+item+"`";
}*/
ArrayList<String> toSelectDataTitles1 = new ArrayList<>();
for (int i = 0; i < toSelectDataTitles.size(); i++) {
toSelectDataTitles1.add(i, "`" + toSelectDataTitles.get(i) + "`");
}
if(!StringUtils.isBlank(leftValue)) {
leftValue = "`" + leftValue + "`";
}
List<TreeMap<String, Object>> dataTitles = fieldRecordMapper.getDataTitlesWithWhere_Asf_NotTable(asfFormName, toSelectDataTitles1,operator,whereCondition,leftValue);
//没有owner的,creater的key改为owner,有owner但owner为空的,creater的value给owner
//没有org的
processDataTitles(dataTitles);
@ -1757,10 +1741,14 @@ public class CustomerFormServiceImpl implements CustomerFormService {
private List<TreeMap<String, Object>> getDataTitlesWithWhere_Master_NotTable(String asfFormName,ArrayList<String> toSelectDataTitles, String masterFormName, String masterOnField, String whereConditionField, String operator, String whereConditionValue) {
ArrayList<String> toSelectDataTitles1 = new ArrayList<>();
for(String item : toSelectDataTitles){
String a = "asf."+item;
String a = "asf.`"+item+"`";
toSelectDataTitles1.add(a);
}
List<TreeMap<String, Object>> newDataTitles = new ArrayList<>();
if(!StringUtils.isBlank(whereConditionField)){
whereConditionField = "asf.`"+whereConditionField+"`";
}
List<TreeMap<String, Object>> dataTitles = fieldRecordMapper.getDataTitlesWithWhere_Master_NotTable(asfFormName, toSelectDataTitles1,masterFormName,masterOnField,whereConditionField,operator,whereConditionValue);
//没有owner的,creater的key改为owner,有owner但owner为空的,creater的value给owner
//没有org的
@ -1772,9 +1760,12 @@ public class CustomerFormServiceImpl implements CustomerFormService {
private List<TreeMap<String, Object>> getDataTitlesWithWhere_Master_IsTable(String parent,ArrayList<String> toSelectDataTitles, String child, String whereConditionField, String operator, String whereConditionValue) {
ArrayList<String> toSelectDataTitles1 = new ArrayList<>();
for(String item : toSelectDataTitles){
String a = "parent."+item;
String a = "parent.`"+item+"`";
toSelectDataTitles1.add(a);
}
if(!StringUtils.isBlank(whereConditionField)){
whereConditionField = "`"+whereConditionField+"`";
}
List<TreeMap<String, Object>> newDataTitles = new ArrayList<>();
List<TreeMap<String, Object>> dataTitles = fieldRecordMapper.getDataTitlesWithWhere_Master_IsTable(parent, toSelectDataTitles1,child,whereConditionField,operator,whereConditionValue);
//没有owner的,creater的key改为owner,有owner但owner为空的,creater的value给owner
@ -1840,6 +1831,7 @@ public class CustomerFormServiceImpl implements CustomerFormService {
//关联表单的数据标题list
ArrayList<String> toSelectDataTitles = new ArrayList<>();
ArrayList<String> toSelectDataTitles1 = new ArrayList<>();
for(String title : dataTitleArray){
String[] titleArr = title.split(":");
toSelectDataTitles.add(titleArr[2]);
@ -1849,8 +1841,14 @@ public class CustomerFormServiceImpl implements CustomerFormService {
if(toSelectDataTitles.size()==0){
toSelectDataTitles.add("id");
}
/*for(String item : toSelectDataTitles){
item = "`"+item+"`";
}*/
List<TreeMap<String, Object>> dataTitleMapList = fieldRecordMapper.getDataTitlesByIds(asfFormName,toSelectDataTitles,asfIds);
for (int i = 0; i < toSelectDataTitles.size(); i++) {
toSelectDataTitles1.add(i, "`" + toSelectDataTitles.get(i) + "`");
}
List<TreeMap<String, Object>> dataTitleMapList = fieldRecordMapper.getDataTitlesByIds(asfFormName,toSelectDataTitles1,asfIds);
// 自定义比较器用以排序dataTitleMapList
Comparator<String> customComparator = new Comparator<String>() {
@ -2078,5 +2076,40 @@ public class CustomerFormServiceImpl implements CustomerFormService {
}
@Override
public ArrayList<AsfTableFillResult> getAsfTableFill(String key, String token, String asfFormName, String glbbddbd, String currentVal,JSONArray fillFieldsChild) {
//获取当前用户信息 从redis中根据userkey和usertoken拿到userdetail
Map<String,String> keytokenmap = new HashMap<>();
keytokenmap.put("userkey",key);
keytokenmap.put("usertoken",token);
UserDetail userDetail = userService.getUserDetailFromRedis(keytokenmap);
if(userDetail==null){
return null;
}else{
//System.out.println(fillFieldsChild);
if(fillFieldsChild.size()>0){
for(int i = 0; i<fillFieldsChild.size();i++){
com.alibaba.fastjson2.JSONObject singleAsfChildTableFillRoleObject = (com.alibaba.fastjson2.JSONObject)fillFieldsChild.get(i);
com.alibaba.fastjson2.JSONObject filterCondition = (com.alibaba.fastjson2.JSONObject)singleAsfChildTableFillRoleObject.get("filterCondition");
String singleAsfChildTableConditionHtml = filterCondition.get("conditionHtml").toString();
if(!StringUtils.isBlank(singleAsfChildTableConditionHtml)){//设置了筛选条件
String singleAsfChildTableFormulaHtml = ((com.alibaba.fastjson2.JSONObject) filterCondition.get("gongShi")).get("formulaHtml").toString();
String singleAsfChildTableMathsFormula = ((com.alibaba.fastjson2.JSONObject) filterCondition.get("gongShi")).get("mathsFormula").toString();
String singleAsfChildTableMathsString = ((com.alibaba.fastjson2.JSONObject) filterCondition.get("gongShi")).get("mathsString").toString();
}else{//没有设置筛选条件
//fieldRecordMapper.getDataTitlesByIds(asfFormName,currentVal,);
System.out.println(fillFieldsChild.get(i));
System.out.println(asfFormName);
}
}
}else{
return null;
}
return null;
}
}
}

2
src/main/resources/mapper/FieldRecordMapper.xml

@ -5,7 +5,7 @@
<select id="getFieldRecord" resultType="com.hxgk.lowcode.model.entity.CustomerFormTableSingleFieldValue" parameterType="java.lang.String" statementType="STATEMENT">
select id as value,${fieldKey} as label from ${formIdOrTableKey} where states = 1
select id as value,`${fieldKey}` as label from ${formIdOrTableKey} where states = 1
</select>

Loading…
Cancel
Save