|
@@ -0,0 +1,127 @@
|
|
|
+package com.persagy.dmp.rwd.edit.service;
|
|
|
+
|
|
|
+import com.fasterxml.jackson.databind.JsonNode;
|
|
|
+import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
+import com.persagy.common.criteria.CriteriaUtils;
|
|
|
+import com.persagy.common.criteria.JacksonCriteria;
|
|
|
+import com.persagy.common.json.JacksonMapper;
|
|
|
+import com.persagy.common.web.ListResponse;
|
|
|
+import com.persagy.common.web.PagedResponse;
|
|
|
+import com.persagy.dmp.rwd.edit.entity.FuncidDef;
|
|
|
+import com.persagy.dmp.rwd.edit.entity.QFuncidDef;
|
|
|
+import com.persagy.dmp.rwd.edit.util.ClassCodeUtils;
|
|
|
+import com.persagy.dmp.rwd.enums.FuncidCategory;
|
|
|
+import com.persagy.dmp.rwd.enums.FuncidDataType;
|
|
|
+import com.persagy.dmp.rwd.model.ClassDefModel;
|
|
|
+import com.persagy.dmp.rwd.model.FuncidDefModel;
|
|
|
+import com.querydsl.core.types.dsl.BooleanExpression;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class FuncidDefService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ClassDefService classDefService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ClassCodeUtils classCodeUtils;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private CriteriaUtils criteriaUtils;
|
|
|
+
|
|
|
+
|
|
|
+ public ListResponse<FuncidDefModel> queryFuncid(String groupCode, String schemaId, String projectId, String appId, JacksonCriteria request) {
|
|
|
+ ListResponse<FuncidDefModel> resp = new ListResponse<>();
|
|
|
+ log.info("queryFuncid: {} {} {} {} {}", groupCode, schemaId, projectId, appId, JacksonMapper.toSimpleJson(request));
|
|
|
+
|
|
|
+ List<FuncidDefModel> list = null;
|
|
|
+ boolean hasClassCode = request.getCriteria().has("classCode");
|
|
|
+ if (hasClassCode) {
|
|
|
+ list = queryWithClassCode(request);
|
|
|
+ }
|
|
|
+
|
|
|
+ resp.setData(list);
|
|
|
+ return resp;
|
|
|
+ }
|
|
|
+
|
|
|
+ public PagedResponse<FuncidDefModel> query(JacksonCriteria criteria) {
|
|
|
+ // 预处理criteria
|
|
|
+ classCodeUtils.prepareCriteriaForFuncid(criteria, "classCode");
|
|
|
+
|
|
|
+ PagedResponse<FuncidDef> resp = criteriaUtils.query(QFuncidDef.funcidDef, this::parse, criteria);
|
|
|
+ PagedResponse<FuncidDefModel> result = new PagedResponse<>();
|
|
|
+ result.setCount(resp.getCount());
|
|
|
+ List<FuncidDef> dataList = resp.getData();
|
|
|
+ if (dataList != null && dataList.size() > 0) {
|
|
|
+ List<FuncidDefModel> collect = dataList.stream().map(entity -> {
|
|
|
+ FuncidDefModel model = entity.toModel();
|
|
|
+ return model;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ result.setData(collect);
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<BooleanExpression> parse(ObjectNode object) {
|
|
|
+ // TODO
|
|
|
+ List<BooleanExpression> list = new LinkedList<>();
|
|
|
+ QFuncidDef qt = QFuncidDef.funcidDef;
|
|
|
+ list.addAll(criteriaUtils.parse(qt.category, object.get("category"), FuncidCategory.class));
|
|
|
+ list.addAll(criteriaUtils.parse(qt.dataType, object.get("dataType"), FuncidDataType.class));
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<FuncidDefModel> queryWithClassCode(JacksonCriteria request) {
|
|
|
+ JsonNode classCode = request.getCriteria().get("classCode");
|
|
|
+ JacksonCriteria criteria = JacksonCriteria.newInstance();
|
|
|
+ criteria.getCriteria().set("code", classCode);
|
|
|
+ criteria.setWithoutCount(true);
|
|
|
+ ListResponse<ClassDefModel> classDefModelListResponse = classDefService.queryClass(criteria);
|
|
|
+ List<ClassDefModel> classDefModelList = classDefModelListResponse.getData();
|
|
|
+ List<FuncidDefModel> list = new LinkedList<>();
|
|
|
+ if (classDefModelList.size() > 0) {
|
|
|
+ for (ClassDefModel classDefModel : classDefModelList) {
|
|
|
+ JacksonCriteria funcidCriteria = JacksonCriteria.newInstance();
|
|
|
+ funcidCriteria.getCriteria().setAll(request.getCriteria());
|
|
|
+ if (classDefModel.getParentCode() != null) {
|
|
|
+ funcidCriteria.add("classCode").in(Arrays.asList(classDefModel.getCode(), classDefModel.getParentCode()));
|
|
|
+ } else {
|
|
|
+ funcidCriteria.add("classCode", classDefModel.getCode());
|
|
|
+ }
|
|
|
+ List<FuncidDefModel> funcidDefModels = queryWithoutClassCode(funcidCriteria);
|
|
|
+ funcidDefModels.forEach(model -> model.setClassCode(classDefModel.getCode()));
|
|
|
+ list.addAll(funcidDefModels);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<FuncidDefModel> queryWithoutClassCode(JacksonCriteria request) {
|
|
|
+ Map<String, FuncidDefModel> cache = new HashMap<>();
|
|
|
+ // 预处理criteria
|
|
|
+ classCodeUtils.prepareCriteriaForFuncid(request, "classCode");
|
|
|
+
|
|
|
+ ObjectNode requestCriteria = request.getCriteria();
|
|
|
+ // 查询平台级
|
|
|
+ JacksonCriteria criteria = JacksonCriteria.newInstance();
|
|
|
+ criteria.getCriteria().setAll(requestCriteria);
|
|
|
+ criteria.add("type", "common");
|
|
|
+ criteria.add("groupCode", "0");
|
|
|
+ criteria.setWithoutCount(true);
|
|
|
+ PagedResponse<FuncidDefModel> queryResp = query(criteria);
|
|
|
+
|
|
|
+ queryResp.getData().forEach(model -> cache.put(model.getClassCode() + "-" + model.getCode(), model));
|
|
|
+
|
|
|
+ // 继承父级信息点
|
|
|
+ List<FuncidDefModel> list = new LinkedList<>();
|
|
|
+ list.addAll(cache.values());
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|