REQ-2299 【开发】 编辑
This commit is contained in:
parent
75c84441cc
commit
a44c4092c2
@ -22,6 +22,7 @@ public class EditDataObjectReq {
|
||||
/**
|
||||
* 数据对象id
|
||||
*/
|
||||
@NotNull(message = "请选择要修改的数据对象")
|
||||
private Long dataObjectId;
|
||||
/**
|
||||
* 数据对象名 全局唯一
|
||||
@ -43,12 +44,12 @@ public class EditDataObjectReq {
|
||||
/**
|
||||
* 默认规则
|
||||
*/
|
||||
private DefaultDataObjectRuleBO defaultDataObjectRuleBO;
|
||||
private List<DefaultDataObjectRuleBO> defaultDataObjectRuleBOList;
|
||||
/**
|
||||
* 自定义规则
|
||||
*/
|
||||
@Valid
|
||||
private List<DataObjectRuleBO> z;
|
||||
private List<DataObjectRuleBO> dataObjectRuleBOList;
|
||||
|
||||
/**
|
||||
* 排序 (从小到大)
|
||||
|
||||
@ -2,11 +2,14 @@ package cn.axzo.tyr.server.repository.entity;
|
||||
|
||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||
import cn.axzo.tyr.server.utils.BaseOperatorEntity;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@ -14,6 +17,7 @@ import java.io.Serializable;
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
@TableName(value = "data_object", autoResultMap = true)
|
||||
public class DataObject extends BaseOperatorEntity<DataObject> implements Serializable {
|
||||
/**
|
||||
@ -30,8 +34,6 @@ public class DataObject extends BaseOperatorEntity<DataObject> implements Serial
|
||||
private String memo;
|
||||
|
||||
private Integer tenantScope;
|
||||
/**
|
||||
* 排序 (从小到大)
|
||||
*/
|
||||
|
||||
private Integer sort;
|
||||
}
|
||||
|
||||
@ -34,12 +34,14 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@ -61,7 +63,7 @@ public class DataObjectServiceImpl implements DataObjectService {
|
||||
public Long createDataObject(CreateDataObjectReq req) {
|
||||
// 校验
|
||||
// objectName、objectCode不能重复
|
||||
checkObjectNameOrCodeUnique(req);
|
||||
checkObjectNameOrCodeUnique(req.getDataObjectCode(), req.getDataObjectName());
|
||||
// // 对象属性名和code不能重复
|
||||
// checkObjectAttrNameOrCodeUnique(req);
|
||||
// // 规则名 不能重复
|
||||
@ -87,76 +89,118 @@ public class DataObjectServiceImpl implements DataObjectService {
|
||||
// 数据对象
|
||||
dataObjectDao.save(dataObject);
|
||||
|
||||
// 数据对象字段
|
||||
Map<String, Long> attrMap;
|
||||
if (CollUtil.isNotEmpty(objectAttrList)) {
|
||||
objectAttrList.forEach(e -> e.setDataObjectId(dataObject.getId())
|
||||
.setDataObjectCode(dataObject.getDataObjectCode())
|
||||
.setCreateBy(req.getCreateBy()));
|
||||
dataObjectAttrDao.saveBatch(objectAttrList);
|
||||
attrMap = objectAttrList.stream().collect(Collectors.toMap(DataObjectAttr::getAttrCode, DataObjectAttr::getId, (a, b) -> a));
|
||||
} else {
|
||||
attrMap = null;
|
||||
}
|
||||
|
||||
// 数据对象规则
|
||||
if (CollUtil.isNotEmpty(defaultDataObjectRules)) {
|
||||
defaultDataObjectRules.forEach(e -> e.setDataObjectId(dataObject.getId())
|
||||
.setDataObjectCode(dataObject.getDataObjectCode())
|
||||
.setIsDefault(YesNoEnum.YES.getValue())
|
||||
.setCreateBy(req.getCreateBy()));
|
||||
;
|
||||
generalObjectRuleList.addAll(defaultDataObjectRules);
|
||||
}
|
||||
if (CollUtil.isNotEmpty(dataObjectRules)) {
|
||||
dataObjectRules.forEach(e -> e.setDataObjectId(dataObject.getId())
|
||||
.setDataObjectCode(dataObject.getDataObjectCode())
|
||||
.setIsDefault(YesNoEnum.NO.getValue())
|
||||
.setCreateBy(req.getCreateBy()));
|
||||
;
|
||||
generalObjectRuleList.addAll(dataObjectRules);
|
||||
}
|
||||
buildRuleList(defaultDataObjectRules, dataObject, req.getCreateBy(), generalObjectRuleList, dataObjectRules);
|
||||
|
||||
|
||||
if (CollUtil.isNotEmpty(generalObjectRuleList)) {
|
||||
dataObjectRuleDao.saveBatch(generalObjectRuleList);
|
||||
|
||||
// 数据对象规则字段&范围
|
||||
List<DataObjectRuleAttr> ruleAttrList = new ArrayList<>(CollUtil.isNotEmpty(attrMap) ? attrMap.size() : 0);
|
||||
int sum = generalObjectRuleList.stream().map(e -> e.getDataObjectRuleScopeList().size()).mapToInt(Integer::intValue).sum();
|
||||
List<DataObjectRuleScope> scopeList = new ArrayList<>(sum);
|
||||
generalObjectRuleList.forEach(rule -> {
|
||||
if (CollUtil.isNotEmpty(attrMap) && CollUtil.isNotEmpty(rule.getDataObjectRuleAttrList())) {
|
||||
rule.getDataObjectRuleAttrList().forEach(ruleAttr -> {
|
||||
ruleAttr.setDataObjectAttrId(attrMap.get(ruleAttr.getAttrCode()));
|
||||
ruleAttr.setDataObjectId(dataObject.getId());
|
||||
ruleAttr.setDataObjectCode(dataObject.getDataObjectCode());
|
||||
ruleAttr.setDataObjectRuleId(rule.getId());
|
||||
ruleAttr.setCreateBy(req.getCreateBy());
|
||||
ruleAttrList.add(ruleAttr);
|
||||
});
|
||||
rule.getDataObjectRuleScopeList().forEach(scope -> {
|
||||
scope.setRuleScopeType(rule.getRuleScopeType());
|
||||
scope.setCreateBy(req.getCreateBy());
|
||||
scope.setDataObjectRuleId(rule.getId());
|
||||
scope.setDataObjectId(rule.getDataObjectId());
|
||||
scope.setDataObjectCode(rule.getDataObjectCode());
|
||||
scopeList.add(scope);
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
dataObjectRuleAttrDao.saveBatch(ruleAttrList);
|
||||
dataObjectRuleScopeDao.saveBatch(scopeList);
|
||||
}
|
||||
createSubordinate(req.getCreateBy(), dataObject, objectAttrList, generalObjectRuleList);
|
||||
});
|
||||
return dataObject.getId();
|
||||
}
|
||||
|
||||
private void createSubordinate(Long createBy,
|
||||
DataObject dataObject,
|
||||
List<DataObjectAttr> objectAttrList,
|
||||
List<DataObjectRule> generalObjectRuleList) {
|
||||
// 数据对象字段
|
||||
Map<String, Long> attrMap;
|
||||
if (CollUtil.isNotEmpty(objectAttrList)) {
|
||||
objectAttrList.forEach(e -> e.setDataObjectId(dataObject.getId())
|
||||
.setDataObjectCode(dataObject.getDataObjectCode())
|
||||
.setCreateBy(createBy));
|
||||
dataObjectAttrDao.saveBatch(objectAttrList);
|
||||
attrMap = objectAttrList.stream().collect(Collectors.toMap(DataObjectAttr::getAttrCode, DataObjectAttr::getId, (a, b) -> a));
|
||||
} else {
|
||||
attrMap = null;
|
||||
}
|
||||
|
||||
if (CollUtil.isNotEmpty(generalObjectRuleList)) {
|
||||
dataObjectRuleDao.saveBatch(generalObjectRuleList);
|
||||
|
||||
// 数据对象规则字段&范围
|
||||
List<DataObjectRuleAttr> ruleAttrList = new ArrayList<>(CollUtil.isNotEmpty(attrMap) ? attrMap.size() : 0);
|
||||
int sum = generalObjectRuleList.stream().map(e -> e.getDataObjectRuleScopeList().size()).mapToInt(Integer::intValue).sum();
|
||||
List<DataObjectRuleScope> scopeList = new ArrayList<>(sum);
|
||||
generalObjectRuleList.forEach(rule -> {
|
||||
if (CollUtil.isNotEmpty(attrMap) && CollUtil.isNotEmpty(rule.getDataObjectRuleAttrList())) {
|
||||
rule.getDataObjectRuleAttrList().forEach(ruleAttr -> {
|
||||
ruleAttr.setDataObjectAttrId(attrMap.get(ruleAttr.getAttrCode()));
|
||||
ruleAttr.setDataObjectId(dataObject.getId());
|
||||
ruleAttr.setDataObjectCode(dataObject.getDataObjectCode());
|
||||
ruleAttr.setDataObjectRuleId(rule.getId());
|
||||
ruleAttr.setCreateBy(createBy);
|
||||
ruleAttrList.add(ruleAttr);
|
||||
});
|
||||
rule.getDataObjectRuleScopeList().forEach(scope -> {
|
||||
scope.setRuleScopeType(rule.getRuleScopeType());
|
||||
scope.setCreateBy(createBy);
|
||||
scope.setDataObjectRuleId(rule.getId());
|
||||
scope.setDataObjectId(rule.getDataObjectId());
|
||||
scope.setDataObjectCode(rule.getDataObjectCode());
|
||||
scopeList.add(scope);
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
dataObjectRuleAttrDao.saveBatch(ruleAttrList);
|
||||
dataObjectRuleScopeDao.saveBatch(scopeList);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void editDataObject(EditDataObjectReq req) {
|
||||
DataObject dataObject = dataObjectDao.getById(req.getDataObjectId());
|
||||
if (Objects.isNull(dataObject)) {
|
||||
throw new cn.axzo.framework.domain.ServiceException(ReturnCodeEnum.DATA_NOT_EXIST.getMessage());
|
||||
}
|
||||
if (!StringUtils.equals(req.getDataObjectName(), dataObject.getDataObjectName())) {
|
||||
checkObjectNameOrCodeUnique(null, req.getDataObjectName());
|
||||
dataObject.setDataObjectName(req.getDataObjectName());
|
||||
}
|
||||
dataObject.setMemo(req.getMemo());
|
||||
dataObject.setTenantScope(req.getTenantScope());
|
||||
dataObject.setSort(req.getSort());
|
||||
dataObject.setUpdateBy(req.getUpdateBy());
|
||||
|
||||
|
||||
List<DataObjectAttr> objectAttrList = DataObjectMapper.INSTANCE.attributeBOs2DataObjectAttrs(req.getAttrs());
|
||||
List<DataObjectRule> defaultDataObjectRules = DataObjectMapper.INSTANCE.defaultRuleBOs2Rules(req.getDefaultDataObjectRuleBOList());
|
||||
List<DataObjectRule> dataObjectRules = DataObjectMapper.INSTANCE.ruleBOs2Rules(req.getDataObjectRuleBOList());
|
||||
int size = (CollUtil.isNotEmpty(defaultDataObjectRules) ? defaultDataObjectRules.size() : 0)
|
||||
+ (CollUtil.isNotEmpty(dataObjectRules) ? dataObjectRules.size() : 0);
|
||||
List<DataObjectRule> generalObjectRuleList = new ArrayList<>(size);
|
||||
|
||||
|
||||
buildRuleList(defaultDataObjectRules, dataObject, req.getUpdateBy(), generalObjectRuleList, dataObjectRules);
|
||||
|
||||
transactionTemplate.executeWithoutResult(status -> {
|
||||
dataObjectDao.updateById(dataObject);
|
||||
deleteSubordinat(req.getUpdateBy(), Collections.singletonList(req.getDataObjectId()));
|
||||
|
||||
createSubordinate(req.getUpdateBy(), dataObject, objectAttrList, generalObjectRuleList);
|
||||
});
|
||||
}
|
||||
|
||||
private static void buildRuleList(List<DataObjectRule> defaultDataObjectRules,
|
||||
DataObject dataObject,
|
||||
Long createBy,
|
||||
List<DataObjectRule> generalObjectRuleList, List<DataObjectRule> dataObjectRules) {
|
||||
// 数据对象规则
|
||||
if (CollUtil.isNotEmpty(defaultDataObjectRules)) {
|
||||
defaultDataObjectRules.forEach(e -> e.setDataObjectId(dataObject.getId())
|
||||
.setDataObjectCode(dataObject.getDataObjectCode())
|
||||
.setIsDefault(YesNoEnum.YES.getValue())
|
||||
.setCreateBy(createBy));
|
||||
|
||||
generalObjectRuleList.addAll(defaultDataObjectRules);
|
||||
}
|
||||
if (CollUtil.isNotEmpty(dataObjectRules)) {
|
||||
dataObjectRules.forEach(e -> e.setDataObjectId(dataObject.getId())
|
||||
.setDataObjectCode(dataObject.getDataObjectCode())
|
||||
.setIsDefault(YesNoEnum.NO.getValue())
|
||||
.setCreateBy(createBy));
|
||||
|
||||
generalObjectRuleList.addAll(dataObjectRules);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -164,13 +208,17 @@ public class DataObjectServiceImpl implements DataObjectService {
|
||||
List<Long> idList = Collections.singletonList(dataObjectId);
|
||||
transactionTemplate.executeWithoutResult(status -> {
|
||||
dataObjectDao.deleteByIdList(idList, updateBy);
|
||||
dataObjectRuleDao.deleteByDataObjectIdList(idList, updateBy);
|
||||
dataObjectAttrDao.deleteByDataObjectIdList(idList, updateBy);
|
||||
dataObjectRuleAttrDao.deleteByDataObjectIdList(idList, updateBy);
|
||||
dataObjectRuleScopeDao.deleteByDataObjectIdList(idList, updateBy);
|
||||
deleteSubordinat(updateBy, idList);
|
||||
});
|
||||
}
|
||||
|
||||
private void deleteSubordinat(Long updateBy, List<Long> idList) {
|
||||
dataObjectRuleDao.deleteByDataObjectIdList(idList, updateBy);
|
||||
dataObjectAttrDao.deleteByDataObjectIdList(idList, updateBy);
|
||||
dataObjectRuleAttrDao.deleteByDataObjectIdList(idList, updateBy);
|
||||
dataObjectRuleScopeDao.deleteByDataObjectIdList(idList, updateBy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<SimpleDataObjectRes> pageDataObject(PageDataObjectReq req) {
|
||||
DataObjectQueryBO bo = DataObjectQueryBO.builder().dataObjectName(req.getKeyword()).build();
|
||||
@ -203,8 +251,9 @@ public class DataObjectServiceImpl implements DataObjectService {
|
||||
Map<String, String> attrMap;
|
||||
if (CollUtil.isNotEmpty(objectAttrList)) {
|
||||
List<AttributeBO> attributeBOS = DataObjectMapper.INSTANCE.dataObjectAttrs2AttributeBOs(objectAttrList);
|
||||
res.setAttrs(attributeBOS);
|
||||
attrMap = attributeBOS.stream().collect(Collectors.toMap(AttributeBO::getAttrCode, AttributeBO::getAttrName, (a, b) -> a));
|
||||
List<AttributeBO> attributeBOList = attributeBOS.stream().sorted(Comparator.comparing(AttributeBO::getSort)).collect(Collectors.toList());
|
||||
res.setAttrs(attributeBOList);
|
||||
attrMap = attributeBOList.stream().collect(Collectors.toMap(AttributeBO::getAttrCode, AttributeBO::getAttrName, (a, b) -> a));
|
||||
} else {
|
||||
attrMap = null;
|
||||
}
|
||||
@ -223,8 +272,13 @@ public class DataObjectServiceImpl implements DataObjectService {
|
||||
res.getDataObjectRuleBOList().add(ruleBO);
|
||||
}
|
||||
});
|
||||
if (CollUtil.isNotEmpty(res.getDataObjectRuleBOList())) {
|
||||
List<DataObjectRuleBO> sortedRuleList = res.getDataObjectRuleBOList().stream().sorted(Comparator.comparing(DataObjectRuleBO::getSort)).collect(Collectors.toList());
|
||||
res.setDataObjectRuleBOList(sortedRuleList);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 获取数据对象规则字段
|
||||
RuleAttrQueryBO bo3 = RuleAttrQueryBO.builder().dataObjectId(dataObjectId).build();
|
||||
List<DataObjectRuleAttr> ruleAttrList = dataObjectRuleAttrDao.listByBO(bo3);
|
||||
@ -235,7 +289,8 @@ public class DataObjectServiceImpl implements DataObjectService {
|
||||
if (CollUtil.isNotEmpty(ruleAttrList1)) {
|
||||
List<AttributePermissionBO> permissionBOs = DataObjectMapper.INSTANCE.ruleAttrs2AttrPermissionBOs(ruleAttrList1);
|
||||
permissionBOs.forEach(e -> e.setAttrName(attrMap.get(e.getAttrCode())));
|
||||
res.getDefaultDataObjectRuleBO().setAttributePermissionBOList(permissionBOs);
|
||||
List<AttributePermissionBO> permissionBOList = permissionBOs.stream().sorted(Comparator.comparing(AttributePermissionBO::getSort)).collect(Collectors.toList());
|
||||
res.getDefaultDataObjectRuleBO().setAttributePermissionBOList(permissionBOList);
|
||||
}
|
||||
|
||||
//自定义
|
||||
@ -276,7 +331,8 @@ public class DataObjectServiceImpl implements DataObjectService {
|
||||
if (CollUtil.isNotEmpty(ruleAttrList2)) {
|
||||
List<AttributePermissionBO> permissionBOs = DataObjectMapper.INSTANCE.ruleAttrs2AttrPermissionBOs(ruleAttrList2);
|
||||
permissionBOs.forEach(bo -> bo.setAttrName(attrMap.get(bo.getAttrCode())));
|
||||
e.setAttributePermissionBOList(permissionBOs);
|
||||
List<AttributePermissionBO> permissionBOList = permissionBOs.stream().sorted(Comparator.comparing(AttributePermissionBO::getSort)).collect(Collectors.toList());
|
||||
e.setAttributePermissionBOList(permissionBOList);
|
||||
}
|
||||
}
|
||||
|
||||
@ -299,20 +355,20 @@ public class DataObjectServiceImpl implements DataObjectService {
|
||||
}
|
||||
}
|
||||
|
||||
private void checkObjectNameOrCodeUnique(CreateDataObjectReq req) {
|
||||
private void checkObjectNameOrCodeUnique(String dataObjectCode, String dataObjectName) {
|
||||
DataObjectQueryBO bo = DataObjectQueryBO.builder()
|
||||
.dataObjectName(req.getDataObjectName())
|
||||
.dataObjectCode(req.getDataObjectCode())
|
||||
.dataObjectName(dataObjectCode)
|
||||
.dataObjectCode(dataObjectName)
|
||||
.build();
|
||||
List<DataObject> dataObjects = dataObjectDao.duplicateListByBO(bo);
|
||||
if (CollUtil.isNotEmpty(dataObjects)) {
|
||||
boolean nameDuplicate = false;
|
||||
boolean codeDuplicate = false;
|
||||
for (DataObject dataObject : dataObjects) {
|
||||
if (dataObject.getDataObjectName().equals(req.getDataObjectName())) {
|
||||
if (dataObject.getDataObjectName().equals(dataObjectCode)) {
|
||||
nameDuplicate = true;
|
||||
}
|
||||
if (dataObject.getDataObjectCode().equals(req.getDataObjectCode())) {
|
||||
if (dataObject.getDataObjectCode().equals(dataObjectName)) {
|
||||
codeDuplicate = true;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.extension.activerecord.Model;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
|
||||
@ -5,6 +5,7 @@ import cn.axzo.tyr.client.model.data.object.AttributePermissionBO;
|
||||
import cn.axzo.tyr.client.model.data.object.DataObjectRuleBO;
|
||||
import cn.axzo.tyr.client.model.data.object.DefaultDataObjectRuleBO;
|
||||
import cn.axzo.tyr.client.model.req.CreateDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.req.EditDataObjectReq;
|
||||
import cn.axzo.tyr.client.model.res.DataObjectRes;
|
||||
import cn.axzo.tyr.server.repository.entity.DataObject;
|
||||
import cn.axzo.tyr.server.repository.entity.DataObjectAttr;
|
||||
@ -28,6 +29,9 @@ public interface DataObjectMapper {
|
||||
|
||||
DataObject createReq2DataObject(CreateDataObjectReq req);
|
||||
|
||||
|
||||
DataObject editReq2DataObject(EditDataObjectReq req);
|
||||
|
||||
DataObjectRes dataObject2DataObjectRes(DataObject req);
|
||||
|
||||
DataObjectAttr attributeBO2DataObjectAttr(AttributeBO bo);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user