|
@@ -4,24 +4,40 @@ import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
import cn.hutool.core.map.MapUtil;
|
|
import cn.hutool.core.map.MapUtil;
|
|
import cn.hutool.core.text.StrFormatter;
|
|
import cn.hutool.core.text.StrFormatter;
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
+import com.fasterxml.jackson.databind.JsonNode;
|
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
|
+import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
|
|
+import com.persagy.dmp.basic.model.QueryCriteria;
|
|
|
|
+import com.persagy.dmp.basic.utils.QueryCriteriaHelper;
|
|
|
|
+import com.persagy.dmp.common.constant.CommonConstant;
|
|
import com.persagy.dmp.common.constant.ValidEnum;
|
|
import com.persagy.dmp.common.constant.ValidEnum;
|
|
import com.persagy.dmp.common.exception.BusinessException;
|
|
import com.persagy.dmp.common.exception.BusinessException;
|
|
|
|
+import com.persagy.dmp.common.helper.SpringHelper;
|
|
import com.persagy.dmp.common.model.entity.BaseEntity;
|
|
import com.persagy.dmp.common.model.entity.BaseEntity;
|
|
import com.persagy.dmp.define.entity.GraphDefine;
|
|
import com.persagy.dmp.define.entity.GraphDefine;
|
|
import com.persagy.dmp.define.entity.ObjectInfoDefine;
|
|
import com.persagy.dmp.define.entity.ObjectInfoDefine;
|
|
|
|
+import com.persagy.dmp.define.entity.ObjectTypeDefine;
|
|
|
|
+import com.persagy.dmp.digital.entity.ObjectDigital;
|
|
|
|
+import com.persagy.dmp.mybatis.utils.ConditionUtil;
|
|
import com.persagy.dmp.rwd.basic.constant.DigitalMessageConstant;
|
|
import com.persagy.dmp.rwd.basic.constant.DigitalMessageConstant;
|
|
import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
|
|
import com.persagy.dmp.rwd.basic.utils.DigitalMessageHelper;
|
|
import com.persagy.dmp.rwd.define.dao.ObjectInfoMapper;
|
|
import com.persagy.dmp.rwd.define.dao.ObjectInfoMapper;
|
|
import com.persagy.dmp.rwd.define.service.IObjectInfoService;
|
|
import com.persagy.dmp.rwd.define.service.IObjectInfoService;
|
|
|
|
+import com.persagy.dmp.rwd.define.service.IObjectTypeService;
|
|
import com.persagy.dmp.rwd.parser.service.InfoDataFactory;
|
|
import com.persagy.dmp.rwd.parser.service.InfoDataFactory;
|
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
|
+import org.hibernate.validator.constraints.Length;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
+import javax.validation.constraints.NotNull;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -32,12 +48,12 @@ import java.util.stream.Collectors;
|
|
*/
|
|
*/
|
|
@Service
|
|
@Service
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
+@RequiredArgsConstructor
|
|
public class ObjectInfoServiceImpl implements IObjectInfoService {
|
|
public class ObjectInfoServiceImpl implements IObjectInfoService {
|
|
|
|
|
|
- @Resource
|
|
|
|
- private ObjectInfoMapper dao;
|
|
|
|
- @Autowired
|
|
|
|
- private DigitalMessageHelper messageSender;
|
|
|
|
|
|
+ private final ObjectInfoMapper dao;
|
|
|
|
+ private final DigitalMessageHelper messageSender;
|
|
|
|
+ private final IObjectTypeService objectTypeService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public ObjectInfoDefine load(String id) {
|
|
public ObjectInfoDefine load(String id) {
|
|
@@ -85,6 +101,106 @@ public class ObjectInfoServiceImpl implements IObjectInfoService {
|
|
public Page<ObjectInfoDefine> queryByCondition(Page<ObjectInfoDefine> page, Wrapper<ObjectInfoDefine> queryWrapper) {
|
|
public Page<ObjectInfoDefine> queryByCondition(Page<ObjectInfoDefine> page, Wrapper<ObjectInfoDefine> queryWrapper) {
|
|
return dao.selectPage(page, queryWrapper);
|
|
return dao.selectPage(page, queryWrapper);
|
|
}
|
|
}
|
|
|
|
+ /***
|
|
|
|
+ * Description: 按条件查询
|
|
|
|
+ * @param criteria : 查询条件
|
|
|
|
+ * @return : com.baomidou.mybatisplus.extension.plugins.pagination.Page<com.persagy.dmp.define.entity.ObjectInfoDefine>
|
|
|
|
+ * @author : lijie
|
|
|
|
+ * @date :2021/10/20 11:01
|
|
|
|
+ * Update By lijie 2021/10/20 11:01
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public Page<ObjectInfoDefine> queryByCondition(QueryCriteria criteria) {
|
|
|
|
+ List<ObjectTypeDefine> objectTypeDefines = queryClassCodes(criteria);
|
|
|
|
+ // 1.如果传的参数不包含classCode走公共逻辑
|
|
|
|
+ if (CollUtil.isEmpty(objectTypeDefines)){
|
|
|
|
+ QueryWrapper<ObjectInfoDefine> wrapper = new QueryWrapper<>();
|
|
|
|
+ // 添加所属项目条件
|
|
|
|
+ ConditionUtil.ensureProjectCriteria(wrapper);
|
|
|
|
+ // 转换查询条件
|
|
|
|
+ QueryCriteriaHelper.toWrapper(wrapper, criteria, ObjectInfoDefine.class);
|
|
|
|
+ Page<ObjectInfoDefine> page = QueryCriteriaHelper.toPage(criteria);
|
|
|
|
+ // 没有排序条件时,按默认条件排序
|
|
|
|
+ if(CollUtil.isEmpty(page.getOrders())) {
|
|
|
|
+ wrapper.orderByAsc("show_order");
|
|
|
|
+ }
|
|
|
|
+ if(criteria.isOnlyCount()) {
|
|
|
|
+ return page.setTotal(queryCount(wrapper));
|
|
|
|
+ }
|
|
|
|
+ /// 20210819 临时处理,优化执行计划,解决Mysql:Out of sort memory问题
|
|
|
|
+ // wrapper.select("/*+ SET_VAR(sort_buffer_size = 2M) */*");
|
|
|
|
+ return queryByCondition(QueryCriteriaHelper.toPage(criteria), wrapper);
|
|
|
|
+ }
|
|
|
|
+ // 2.包含classCode则不进行分页并且获取数据集合
|
|
|
|
+ // 2.1 如果为基础类型、且为平台级,优先级100
|
|
|
|
+ // 2.2 如果为基础类型、且为集团级,优先级200
|
|
|
|
+ // 2.3 如果为基础类型、且为项目级,优先级300
|
|
|
|
+ // 2.4 如果为非基础类型、且为平台级,优先级400
|
|
|
|
+ // 2.5 如果为非基础类型、且为集团级,优先级500
|
|
|
|
+ // 2.6 如果为非基础类型、且为项目级,优先级600
|
|
|
|
+ criteria.getCriteria().remove(ObjectDigital.CLASS_CODE_HUM);
|
|
|
|
+ List<ObjectInfoDefine> result = new ArrayList<>();
|
|
|
|
+ for (ObjectTypeDefine objectTypeDefine : objectTypeDefines) {
|
|
|
|
+ // 获取classCode集合
|
|
|
|
+ Set<String> classCodes = CollUtil.newHashSet(objectTypeDefine.getCode());
|
|
|
|
+ if (StrUtil.isNotBlank(objectTypeDefine.getParentCode())){
|
|
|
|
+ classCodes.add(objectTypeDefine.getParentCode());
|
|
|
|
+ }
|
|
|
|
+ if (CollUtil.isEmpty(classCodes)){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ QueryWrapper<ObjectInfoDefine> wrapper = new QueryWrapper<>();
|
|
|
|
+ // 添加所属项目条件
|
|
|
|
+ ConditionUtil.ensureProjectCriteria(wrapper);
|
|
|
|
+ // 转换查询条件
|
|
|
|
+ QueryCriteriaHelper.toWrapper(wrapper, criteria, ObjectInfoDefine.class);
|
|
|
|
+ wrapper.orderByAsc("show_order");
|
|
|
|
+ wrapper.in(ObjectDigital.CLASS_CODE,classCodes);
|
|
|
|
+ List<ObjectInfoDefine> objectInfoDefines = dao.queryByClassCodes(wrapper,classCodes);
|
|
|
|
+ if (CollUtil.isEmpty(objectInfoDefines)){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ objectInfoDefines.forEach(objectInfoDefine -> objectInfoDefine.setClassCode(objectInfoDefine.getCode()));
|
|
|
|
+ result.addAll(objectInfoDefines);
|
|
|
|
+ }
|
|
|
|
+ Page<ObjectInfoDefine> pageResult = new Page<>();
|
|
|
|
+ pageResult.setRecords(result);
|
|
|
|
+ pageResult.setSize(result.size());
|
|
|
|
+ pageResult.setTotal(result.size());
|
|
|
|
+ pageResult.setCurrent(1L);
|
|
|
|
+ return pageResult;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /***
|
|
|
|
+ * Description: 处理对象类型,如果父级id存在则加上父级id
|
|
|
|
+ * @param criteria : 查询参数
|
|
|
|
+ * @return : void
|
|
|
|
+ * @author : lijie
|
|
|
|
+ * @date :2021/9/9 18:25
|
|
|
|
+ * Update By lijie 2021/9/9 18:25
|
|
|
|
+ */
|
|
|
|
+ private List<ObjectTypeDefine> queryClassCodes(QueryCriteria criteria) {
|
|
|
|
+ ObjectNode objectNode = criteria.getCriteria();
|
|
|
|
+ if (!objectNode.has(ObjectDigital.CLASS_CODE_HUM)){
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ JsonNode jsonNode = objectNode.get(ObjectDigital.CLASS_CODE_HUM);
|
|
|
|
+ QueryCriteria typeCriteria = new QueryCriteria();
|
|
|
|
+ typeCriteria.setCriteria(SpringHelper.getBean(ObjectMapper.class).createObjectNode());
|
|
|
|
+ typeCriteria.getCriteria().set("code",jsonNode);
|
|
|
|
+ typeCriteria.getCriteria().put("valid",true);
|
|
|
|
+ QueryWrapper<ObjectTypeDefine> wrapper = new QueryWrapper<>();
|
|
|
|
+ // 添加所属项目条件
|
|
|
|
+ ConditionUtil.ensureProjectCriteria(wrapper);
|
|
|
|
+ // 转换查询条件
|
|
|
|
+ QueryCriteriaHelper.toWrapper(wrapper, typeCriteria, ObjectTypeDefine.class);
|
|
|
|
+ List<ObjectTypeDefine> objectTypeDefines = objectTypeService.queryByCondition(wrapper);
|
|
|
|
+ if (CollUtil.isEmpty(objectTypeDefines)){
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ return objectTypeDefines;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public List<ObjectInfoDefine> insert(List<ObjectInfoDefine> voList) {
|
|
public List<ObjectInfoDefine> insert(List<ObjectInfoDefine> voList) {
|