Browse Source

优化关联表单列表查询

lwx_v1
liwenxuan 1 year ago
parent
commit
5f8ccebc85
  1. 45
      src/main/java/com/hxgk/lowcode/controller/AssociatedFormsController.java
  2. 2
      src/main/java/com/hxgk/lowcode/mapper/FieldRecordMapper.java
  3. 13
      src/main/java/com/hxgk/lowcode/model/entity/CustomerFormTableSingleFieldValue.java
  4. 37
      src/main/java/com/hxgk/lowcode/model/entity/requestParam/AsfDataTitlesByIdsQueryParam.java
  5. 31
      src/main/java/com/hxgk/lowcode/model/entity/response/AsfDataTitlesByIdsResponseEntity.java
  6. 2
      src/main/java/com/hxgk/lowcode/service/CustomerFormService.java
  7. 92
      src/main/java/com/hxgk/lowcode/service/impl/CustomerFormServiceImpl.java
  8. 15
      src/main/resources/mapper/FieldRecordMapper.xml

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

@ -2,8 +2,9 @@ package com.hxgk.lowcode.controller;
import com.hxgk.lowcode.model.entity.CustomerFormTableSingleFieldValue; import com.hxgk.lowcode.model.entity.CustomerFormTableSingleFieldValue;
import com.hxgk.lowcode.model.entity.Option; import com.hxgk.lowcode.model.entity.Option;
import com.hxgk.lowcode.model.entity.SystemRole;
import com.hxgk.lowcode.model.entity.Tree; import com.hxgk.lowcode.model.entity.Tree;
import com.hxgk.lowcode.model.entity.requestParam.AsfDataTitlesByIdsQueryParam;
import com.hxgk.lowcode.model.entity.response.AsfDataTitlesByIdsResponseEntity;
import com.hxgk.lowcode.service.CustomerFormService; import com.hxgk.lowcode.service.CustomerFormService;
import com.hxgk.lowcode.service.HrService; import com.hxgk.lowcode.service.HrService;
import com.hxgk.lowcode.utils.JsonData; import com.hxgk.lowcode.utils.JsonData;
@ -12,7 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.List;
import java.util.Map; import java.util.Map;
/* /*
@ -25,8 +26,13 @@ public class AssociatedFormsController {
@Autowired @Autowired
private CustomerFormService customerFormService; private CustomerFormService customerFormService;
@Autowired @Autowired
private AsfDataTitlesByIdsQueryParam asfDataTitlesByIdsQueryParam;
@Autowired
private HrService hrService; private HrService hrService;
public AssociatedFormsController() {
}
/*获取用户有权限的启用状态的表单列表树形结构*/ /*获取用户有权限的启用状态的表单列表树形结构*/
@RequestMapping(value = "/AssociatedForms/getCustomerFormList") @RequestMapping(value = "/AssociatedForms/getCustomerFormList")
public JsonData getCustomerFormList(@RequestHeader(value = "User-Key") String key, public JsonData getCustomerFormList(@RequestHeader(value = "User-Key") String key,
@ -116,18 +122,35 @@ public class AssociatedFormsController {
String hideFormula = requestBody.get("hideFormula"); String hideFormula = requestBody.get("hideFormula");
String hideString = requestBody.get("hideString"); String hideString = requestBody.get("hideString");
/*System.out.println(formId);
System.out.println(dataTitle);
System.out.println(rangeFormula);
System.out.println(rangeString);
System.out.println(hideFormula);
System.out.println(hideString);*/
ArrayList<CustomerFormTableSingleFieldValue> dataTitles = customerFormService.getAsfDataTitles(formId,dataTitle,rangeFormula,rangeString,hideFormula,hideString); ArrayList<CustomerFormTableSingleFieldValue> dataTitles = customerFormService.getAsfDataTitles(formId,dataTitle,rangeFormula,rangeString,hideFormula,hideString);
/*if(null==fieldList){
return JsonData.buildError("非法请求");
}*/
return JsonData.buildSuccess(dataTitles); return JsonData.buildSuccess(dataTitles);
} }
/*列表页获取关联表单数据标题*/
@RequestMapping(value = "AssociatedForms/getAsfDataTitlesByIds")
public JsonData getAsfDataTitlesByIds(@RequestHeader(value = "User-Key") String key,
@RequestHeader(value = "User-Token") String token,
@RequestBody List<AsfDataTitlesByIdsQueryParam> param) {
if(StringUtils.isBlank(key)||StringUtils.isBlank(token)){
return JsonData.buildError("非法请求");
}
ArrayList<AsfDataTitlesByIdsResponseEntity> list = new ArrayList<>();
for(AsfDataTitlesByIdsQueryParam a: param){
ArrayList<CustomerFormTableSingleFieldValue> dataTitles = customerFormService.getAsfDataTitlesByIds(a.getFormId(),a.getAsfToSelectIds());
AsfDataTitlesByIdsResponseEntity asfDataTitlesByIdsResponseEntity = new AsfDataTitlesByIdsResponseEntity();
asfDataTitlesByIdsResponseEntity.setField(a.getField());
asfDataTitlesByIdsResponseEntity.setList(dataTitles);
list.add(asfDataTitlesByIdsResponseEntity);
}
return JsonData.buildSuccess(list);
}
} }

2
src/main/java/com/hxgk/lowcode/mapper/FieldRecordMapper.java

@ -17,4 +17,6 @@ public interface FieldRecordMapper {
ArrayList<CustomerFormTableSingleFieldValue> getFieldRecord(@Param("formIdOrTableKey") String formIdOrTableKey, @Param("fieldKey")String fieldKey); ArrayList<CustomerFormTableSingleFieldValue> getFieldRecord(@Param("formIdOrTableKey") String formIdOrTableKey, @Param("fieldKey")String fieldKey);
List<TreeMap<String, Object>> getDataTitles(@Param("asfFormName") String asfFormName, @Param("fields") List<String> toSelectDataTitles); List<TreeMap<String, Object>> getDataTitles(@Param("asfFormName") String asfFormName, @Param("fields") List<String> toSelectDataTitles);
List<TreeMap<String, Object>> getDataTitlesByIds(@Param("asfFormName") String asfFormName, @Param("fields") List<String> toSelectDataTitles,@Param("ids") ArrayList<String> ids);
} }

13
src/main/java/com/hxgk/lowcode/model/entity/CustomerFormTableSingleFieldValue.java

@ -9,6 +9,8 @@ public class CustomerFormTableSingleFieldValue {
private String label; private String label;
private String asfMasterId;
public String getValue() { public String getValue() {
return value; return value;
} }
@ -25,9 +27,18 @@ public class CustomerFormTableSingleFieldValue {
this.label = label; this.label = label;
} }
public CustomerFormTableSingleFieldValue(String value, String label) { public String getAsfMasterId() {
return asfMasterId;
}
public void setAsfMasterId(String asfMasterId) {
this.asfMasterId = asfMasterId;
}
public CustomerFormTableSingleFieldValue(String value, String label, String asfMasterId) {
this.value = value; this.value = value;
this.label = label; this.label = label;
this.asfMasterId = asfMasterId;
} }
public CustomerFormTableSingleFieldValue() { public CustomerFormTableSingleFieldValue() {

37
src/main/java/com/hxgk/lowcode/model/entity/requestParam/AsfDataTitlesByIdsQueryParam.java

@ -0,0 +1,37 @@
package com.hxgk.lowcode.model.entity.requestParam;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.HashMap;
@Repository
public class AsfDataTitlesByIdsQueryParam {
private String formId;
private String field;
private ArrayList<HashMap<String,String>> asfToSelectIds;
public String getFormId() {
return formId;
}
public void setFormId(String formId) {
this.formId = formId;
}
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
public ArrayList<HashMap<String, String>> getAsfToSelectIds() {
return asfToSelectIds;
}
public void setAsfToSelectIds(ArrayList<HashMap<String, String>> asfToSelectIds) {
this.asfToSelectIds = asfToSelectIds;
}
}

31
src/main/java/com/hxgk/lowcode/model/entity/response/AsfDataTitlesByIdsResponseEntity.java

@ -0,0 +1,31 @@
package com.hxgk.lowcode.model.entity.response;
import com.hxgk.lowcode.model.entity.CustomerFormTableSingleFieldValue;
import com.hxgk.lowcode.model.entity.requestParam.AsfDataTitlesByIdsQueryParam;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
@Repository
public class AsfDataTitlesByIdsResponseEntity {
private String field;
private ArrayList<CustomerFormTableSingleFieldValue> list;
public String getField() {
return field;
}
public void setField(String field) {
this.field = field;
}
public ArrayList<CustomerFormTableSingleFieldValue> getList() {
return list;
}
public void setList(ArrayList<CustomerFormTableSingleFieldValue> list) {
this.list = list;
}
}

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

@ -5,6 +5,7 @@ import com.hxgk.lowcode.model.entity.CustomerFormTableSingleFieldValue;
import com.hxgk.lowcode.model.entity.Tree; import com.hxgk.lowcode.model.entity.Tree;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
public interface CustomerFormService { public interface CustomerFormService {
Tree getCustomerFormList(String key, String token); Tree getCustomerFormList(String key, String token);
@ -16,4 +17,5 @@ public interface CustomerFormService {
ArrayList<CustomerFormTableSingleFieldValue> getFieldRecord(String key, String token, String[] optionsValue3FieldArray); ArrayList<CustomerFormTableSingleFieldValue> getFieldRecord(String key, String token, String[] optionsValue3FieldArray);
ArrayList<CustomerFormTableSingleFieldValue> getAsfDataTitles(String formId, String dataTitle,String rangeFormula, String rangeString, String hideFormula, String hideString); ArrayList<CustomerFormTableSingleFieldValue> getAsfDataTitles(String formId, String dataTitle,String rangeFormula, String rangeString, String hideFormula, String hideString);
ArrayList<CustomerFormTableSingleFieldValue> getAsfDataTitlesByIds(String AsfFormId,ArrayList<HashMap<String,String>> ids);
} }

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

@ -576,7 +576,7 @@ public class CustomerFormServiceImpl implements CustomerFormService {
labelBuilder.append(value.toString()).append(" "); labelBuilder.append(value.toString()).append(" ");
} }
String label = labelBuilder.toString().substring(0, labelBuilder.length() - 1); String label = labelBuilder.toString().substring(0, labelBuilder.length() - 1);
return new CustomerFormTableSingleFieldValue(lastValue, label); return new CustomerFormTableSingleFieldValue(lastValue, label,"");
} }
//数据标题截取最后一个空格 //数据标题截取最后一个空格
public static String removeAfterLastSpace(String str) { public static String removeAfterLastSpace(String str) {
@ -587,7 +587,7 @@ public class CustomerFormServiceImpl implements CustomerFormService {
return str; return str;
} }
/* /*
form 关联表单组件下拉数据标题选项获取(所有)
*/ */
@Override @Override
public ArrayList<CustomerFormTableSingleFieldValue> getAsfDataTitles(String formId, String dataTitle,String rangeFormula, String rangeString, String hideFormula, String hideString) { public ArrayList<CustomerFormTableSingleFieldValue> getAsfDataTitles(String formId, String dataTitle,String rangeFormula, String rangeString, String hideFormula, String hideString) {
@ -665,4 +665,92 @@ public class CustomerFormServiceImpl implements CustomerFormService {
} }
/*
关联表单组件列表显示,根据关联表单id数组获取相应的数据标题
*/
@Override
public ArrayList<CustomerFormTableSingleFieldValue> getAsfDataTitlesByIds(String AsfFormId,ArrayList<HashMap<String,String>> ids) {
ArrayList<String> asfIds = getAsfIds(ids);
//根据formId(cfid)查询关联表单表名
String asfFormName = customerFormViewMapper.getTableNameByCfid(AsfFormId).getTablekey();
//查询关联表单的数据标题
String mastesformjson = customerFormViewMapper.getTableNameByCfid(AsfFormId).getMastesformjson();
com.alibaba.fastjson2.JSONObject jsonObject = JSON.parseObject(mastesformjson);
JSONArray dataTitleJsonArray = jsonObject.getJSONObject("form").getJSONArray("dataTitle");
List<String> dataTitleArray = new ArrayList<>();
if(jsonObject.getJSONObject("form").getJSONArray("dataTitle")==null){
dataTitleArray.add("aaa:aaa:id");
}else{
dataTitleArray = dataTitleJsonArray.toJavaList(String.class);
}
//关联表单的数据标题list
ArrayList<String> toSelectDataTitles = new ArrayList<>();
for(String title : dataTitleArray){
String[] titleArr = title.split(":");
toSelectDataTitles.add(titleArr[2]);
}
//如果被关联的表单暂未配置dataTitle,则默认id
if(toSelectDataTitles.size()==0){
toSelectDataTitles.add("id");
}
List<TreeMap<String, Object>> dataTitleMapList = fieldRecordMapper.getDataTitlesByIds(asfFormName,toSelectDataTitles,asfIds);
// 自定义比较器用以排序dataTitleMapList
Comparator<String> customComparator = new Comparator<String>() {
@Override
public int compare(String key1, String key2) {
if (toSelectDataTitles.contains(key1) && toSelectDataTitles.contains(key2)) {
int index1 = toSelectDataTitles.indexOf(key1);
int index2 = toSelectDataTitles.indexOf(key2);
return Integer.compare(index1, index2);
} else if (key1.equals("value")) {
return 1;
} else if (key2.equals("value")) {
return -1;
}
return 0;
}
};
ArrayList<TreeMap<String, Object>> sortedDataTitleMapList = new ArrayList<>();
for(TreeMap<String,Object> toSortTreeMap : dataTitleMapList){
// 对 TreeMap 进行排序
TreeMap<String, Object> sortedTreeMap = new TreeMap<>(customComparator);
sortedTreeMap.putAll(toSortTreeMap);
sortedDataTitleMapList.add(sortedTreeMap);
}
//转为CustomerFormTableSingleFieldValue对象list
ArrayList<CustomerFormTableSingleFieldValue> toReturnSortedDataTitleList = new ArrayList<>();
for(TreeMap<String,Object> sortedDataTitleMap : sortedDataTitleMapList){
CustomerFormTableSingleFieldValue customerFormTableSingleFieldValue = generateCustomerFormTableSingleFieldValue(sortedDataTitleMap);
customerFormTableSingleFieldValue.setLabel(removeAfterLastSpace(customerFormTableSingleFieldValue.getLabel()));
toReturnSortedDataTitleList.add(customerFormTableSingleFieldValue);
}
matchAndUpdate(toReturnSortedDataTitleList,ids);
return toReturnSortedDataTitleList;
}
public static ArrayList<String> getAsfIds(ArrayList<HashMap<String, String>> list) {
ArrayList<String> asfIdList = new ArrayList<>();
for (HashMap<String, String> map : list) {
asfIdList.add(map.get("asfId"));
}
return asfIdList;
}
public static void matchAndUpdate(ArrayList<CustomerFormTableSingleFieldValue> list, ArrayList<HashMap<String, String>> ids) {
for (CustomerFormTableSingleFieldValue item : list) {
for (HashMap<String, String> map : ids) {
if (map.get("asfId").equals(item.getValue())) {
item.setAsfMasterId(map.get("asfMasterId"));
break;
}
}
}
}
} }

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

@ -20,5 +20,20 @@
from ${asfFormName} where states = 1 from ${asfFormName} where states = 1
</select> </select>
<select id="getDataTitlesByIds" resultType="java.util.TreeMap" statementType="STATEMENT">
select id as value,
<foreach collection="fields" index="index" item="item" separator="," >
${item}
</foreach>
from ${asfFormName} where states = 1 and
id in
<foreach collection="ids" index="index" item="item" open="(" separator="," close=")" >
${item}
</foreach>
</select>
</mapper> </mapper>
Loading…
Cancel
Save