|
@@ -1,11 +1,8 @@
|
|
|
package com.persagy.dmp.rwd.digital.controller;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
-import cn.hutool.core.util.ReflectUtil;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
-import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
|
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
import com.persagy.dmp.basic.model.QueryCriteria;
|
|
@@ -14,13 +11,13 @@ import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
|
|
|
import com.persagy.dmp.common.constant.CommonConstant;
|
|
|
import com.persagy.dmp.common.constant.ResponseCode;
|
|
|
import com.persagy.dmp.common.exception.BusinessException;
|
|
|
-import com.persagy.dmp.common.model.entity.BaseEntity;
|
|
|
import com.persagy.dmp.common.model.response.CommonResult;
|
|
|
import com.persagy.dmp.common.utils.ParamCheckUtil;
|
|
|
import com.persagy.dmp.common.utils.ResultHelper;
|
|
|
import com.persagy.dmp.mybatis.utils.ConditionUtil;
|
|
|
import com.persagy.dmp.rwd.digital.entity.ObjectDigital;
|
|
|
import com.persagy.dmp.rwd.digital.service.IObjectDigitalService;
|
|
|
+import com.persagy.dmp.rwd.digital.utils.ObjectDigitalCriteriaHelper;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.web.bind.annotation.PostMapping;
|
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
@@ -28,9 +25,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
|
|
|
import javax.validation.Valid;
|
|
|
-import java.util.Iterator;
|
|
|
import java.util.List;
|
|
|
-import java.util.Set;
|
|
|
|
|
|
/**
|
|
|
* 对象数据 Controller
|
|
@@ -56,145 +51,21 @@ public class ObjectDigitalController{
|
|
|
// 添加所属项目条件
|
|
|
ConditionUtil.ensureProjectCriteria(wrapper);
|
|
|
// 处理扩展条件
|
|
|
- ensureExtraCond(wrapper, criteria.getCriteria());
|
|
|
+ ObjectDigitalCriteriaHelper.ensureExtraCond(criteria.getCriteria());
|
|
|
// 转换查询条件
|
|
|
QueryCriteriaHelper.toWrapper(wrapper, criteria);
|
|
|
Page page = service.queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
|
|
|
// 处理扩展属性
|
|
|
- List<ObjectNode> records = JsonNodeUtils.toListNode(page.getRecords(), "infos", criteria.getWithColumns());
|
|
|
+ List<ObjectNode> records = JsonNodeUtils.toListNode(page.getRecords(), ObjectDigital.EXTRA_COLUMN, criteria.getWithColumns());
|
|
|
return ResultHelper.multi(records, page.getTotal());
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 拼接扩展条件
|
|
|
- * @param wrapper
|
|
|
- * @param criteria
|
|
|
- */
|
|
|
- private void ensureExtraCond(QueryWrapper<ObjectDigital> wrapper, ObjectNode criteria) {
|
|
|
- ensureSearchCond(wrapper, criteria);
|
|
|
- ensureRelationCond(wrapper, criteria);
|
|
|
- ensureJsonCond(wrapper, criteria);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 拼接json条件
|
|
|
- * @param wrapper
|
|
|
- * @param criteria
|
|
|
- */
|
|
|
- private void ensureJsonCond(QueryWrapper<ObjectDigital> wrapper, ObjectNode criteria) {
|
|
|
- Set<String> fieldSet = ReflectUtil.getFieldMap(ObjectDigital.class).keySet();
|
|
|
- Iterator<String> fieldNames = criteria.fieldNames();
|
|
|
- while (fieldNames.hasNext()) {
|
|
|
- String infoCode = fieldNames.next();
|
|
|
- // 基础属性不用处理
|
|
|
- if(fieldSet.contains(infoCode)) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- JsonNode value = criteria.get(infoCode);
|
|
|
- if(value == null || value.isNull()) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- // 如果值是对象
|
|
|
- if(value.isObject()) {
|
|
|
- // 包含
|
|
|
- if (value.has("$contains")) {
|
|
|
- JsonNode valueNode = value.get("$contains");
|
|
|
- String valueStr = valueNode.isTextual() ? value.asText():value.toString();
|
|
|
- wrapper.eq(StrUtil.format("json_contains({}, {}, '$.{}')", "infos", valueStr, infoCode), 1);
|
|
|
- } else if (value.has("$notcontains")) {
|
|
|
- // 不包含
|
|
|
- JsonNode valueNode = value.get("$notcontains");
|
|
|
- String valueStr = valueNode.isTextual() ? value.asText():value.toString();
|
|
|
- wrapper.eq(StrUtil.format("json_contains({}, {}, '$.{}')", "infos", valueStr, infoCode), 0);
|
|
|
- }
|
|
|
- } else if(value.isTextual()) {
|
|
|
- wrapper.eq(StrUtil.format("json_unquote(json_extract({}, '$.{}'))", "infos", infoCode), value.asText());
|
|
|
- } else if(value.isInt()) {
|
|
|
- wrapper.eq(StrUtil.format("ifnull(json_extract({}, '$.{}'), -9999)", "infos", infoCode), value.asInt());
|
|
|
- } else if(value.isDouble()) {
|
|
|
- wrapper.eq(StrUtil.format("ifnull(json_extract({}, '$.{}'), -9999.99)", "infos", infoCode), value.asDouble());
|
|
|
- }
|
|
|
- // 处理完成后删除
|
|
|
- fieldNames.remove();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 拼接$search条件
|
|
|
- * @param wrapper
|
|
|
- * @param criteria
|
|
|
- */
|
|
|
- private void ensureSearchCond(QueryWrapper<ObjectDigital> wrapper, ObjectNode criteria) {
|
|
|
- if(criteria == null || criteria.isNull()) {
|
|
|
- return;
|
|
|
- }
|
|
|
- // 处理relationFrom
|
|
|
- JsonNode search = criteria.get("$search");
|
|
|
- if(search != null && search.isTextual()) {
|
|
|
- String searchValue = search.asText();
|
|
|
- wrapper.isNotNull(StrUtil.format("json_search({0}, 'one', {1})", "infos", searchValue));
|
|
|
- // 处理完成后删除
|
|
|
- criteria.remove("$search");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 处理关系条件
|
|
|
- * @param wrapper
|
|
|
- * @param criteria
|
|
|
- */
|
|
|
- private void ensureRelationCond(QueryWrapper<ObjectDigital> wrapper, ObjectNode criteria) {
|
|
|
- if(criteria == null || criteria.isNull()) {
|
|
|
- return;
|
|
|
- }
|
|
|
- // 处理relationFrom
|
|
|
- JsonNode relationFrom = criteria.get("relationFrom");
|
|
|
- if(relationFrom != null && relationFrom.isObject() && relationFrom.size() > 0) {
|
|
|
- StringBuilder inSql = new StringBuilder("(select obj_from from dt_relation where 1=1 ");
|
|
|
- addWhereCond(relationFrom, inSql, "graphId");
|
|
|
- addWhereCond(relationFrom, inSql, "graphCode");
|
|
|
- addWhereCond(relationFrom, inSql, "relCode");
|
|
|
- addWhereCond(relationFrom, inSql, "objTo");
|
|
|
- inSql.append(")");
|
|
|
- wrapper.inSql(BaseEntity.PROP_ID, inSql.toString());
|
|
|
- // 处理完成后删除
|
|
|
- criteria.remove("relationFrom");
|
|
|
- }
|
|
|
- // 处理relationTo
|
|
|
- JsonNode relationTo = criteria.get("relationTo");
|
|
|
- if(relationTo != null && relationTo.isObject() && relationTo.size() > 0) {
|
|
|
- StringBuilder inSql = new StringBuilder("(select obj_to from dt_relation where 1=1 ");
|
|
|
- addWhereCond(relationTo, inSql, "graphId");
|
|
|
- addWhereCond(relationTo, inSql, "graphCode");
|
|
|
- addWhereCond(relationTo, inSql, "relCode");
|
|
|
- addWhereCond(relationTo, inSql, "objFrom");
|
|
|
- inSql.append(")");
|
|
|
- wrapper.inSql(BaseEntity.PROP_ID, inSql.toString());
|
|
|
- // 处理完成后删除
|
|
|
- criteria.remove("relationTo");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 添加where条件
|
|
|
- * @param node json对象
|
|
|
- * @param inSql in条件
|
|
|
- * @param field 属性名
|
|
|
- */
|
|
|
- private void addWhereCond(JsonNode node, StringBuilder inSql, String field) {
|
|
|
- String value = (String) JsonNodeUtils.getNodeValue(node.get(field));
|
|
|
- if(StrUtil.isNotEmpty(value)) {
|
|
|
- String column = StrUtil.toUnderlineCase(field);
|
|
|
- inSql.append("and " + column + " = '" + value + "' ");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
@PostMapping("/createOne")
|
|
|
public CommonResult<ObjectDigital> create(@Valid @RequestBody ObjectNode node){
|
|
|
//基础参数校验
|
|
|
ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
|
|
|
|
|
|
- ObjectDigital vo = JsonNodeUtils.toEntity(node, ObjectDigital.class, "infos");
|
|
|
+ ObjectDigital vo = JsonNodeUtils.toEntity(node, ObjectDigital.class, ObjectDigital.EXTRA_COLUMN);
|
|
|
List<ObjectDigital> voList = CollUtil.newArrayList(vo);
|
|
|
service.insert(voList);
|
|
|
return ResultHelper.single(vo);
|
|
@@ -205,7 +76,7 @@ public class ObjectDigitalController{
|
|
|
//基础参数校验
|
|
|
ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
|
|
|
|
|
|
- List<ObjectDigital> voList = JsonNodeUtils.toEntity(array, ObjectDigital.class, "infos");
|
|
|
+ List<ObjectDigital> voList = JsonNodeUtils.toEntity(array, ObjectDigital.class, ObjectDigital.EXTRA_COLUMN);
|
|
|
voList = service.insert(voList);
|
|
|
return ResultHelper.multi(voList);
|
|
|
}
|
|
@@ -215,7 +86,7 @@ public class ObjectDigitalController{
|
|
|
//基础参数校验
|
|
|
ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
|
|
|
|
|
|
- ObjectDigital vo = JsonNodeUtils.toEntity(node, ObjectDigital.class, "infos");
|
|
|
+ ObjectDigital vo = JsonNodeUtils.toEntity(node, ObjectDigital.class, ObjectDigital.EXTRA_COLUMN);
|
|
|
List<ObjectDigital> voList = CollUtil.newArrayList(vo);
|
|
|
service.update(voList);
|
|
|
return ResultHelper.single(vo);
|
|
@@ -226,7 +97,7 @@ public class ObjectDigitalController{
|
|
|
//基础参数校验
|
|
|
ParamCheckUtil.checkParam(CommonConstant.QUERY_GROUPCODE,CommonConstant.QUERY_PROJECTID);
|
|
|
|
|
|
- List<ObjectDigital> voList = JsonNodeUtils.toEntity(array, ObjectDigital.class, "infos");
|
|
|
+ List<ObjectDigital> voList = JsonNodeUtils.toEntity(array, ObjectDigital.class, ObjectDigital.EXTRA_COLUMN);
|
|
|
voList = service.update(voList);
|
|
|
return ResultHelper.multi(voList);
|
|
|
}
|