菜单组件的保存
This commit is contained in:
parent
6fc00f0b1d
commit
e25a6b9095
@ -32,4 +32,7 @@ public class BaseFeatureResourceDO {
|
||||
|
||||
/** 图标 **/
|
||||
private String icon;
|
||||
|
||||
/** 端类型 **/
|
||||
private String terminal;
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@ -21,5 +22,5 @@ public class FeatureComponentSaveReq extends BaseFeatureResourceDO {
|
||||
private String linkUrl;
|
||||
|
||||
/** 子级组件 **/
|
||||
private List<FeatureComponentSaveReq> children;
|
||||
private List<FeatureComponentSaveReq> children = new ArrayList<>();
|
||||
}
|
||||
|
||||
@ -7,6 +7,7 @@ import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.SuperBuilder;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@ -39,6 +40,9 @@ public class FeatureResourceTreeSaveReq extends BaseFeatureResourceDO {
|
||||
/** 页面及组件权限对象 **/
|
||||
private List<RolePermissionSaveReq> permissions;
|
||||
|
||||
@NotNull(message = "操作人ID不能为空")
|
||||
private Long operatorId;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
|
||||
@ -16,8 +16,11 @@ import org.springframework.scheduling.annotation.EnableAsync;
|
||||
@SpringBootApplication(scanBasePackages = "cn.axzo")
|
||||
public class TyrApplication {
|
||||
public static void main(String[] args) {
|
||||
System.setProperty("spring.redis.port","31270");
|
||||
System.setProperty("spring.redis.host","123.249.44.111");
|
||||
ConfigurableApplicationContext run = SpringApplication.run(TyrApplication.class, args);
|
||||
Environment env = run.getEnvironment();
|
||||
|
||||
log.info(
|
||||
"--------------------------------------------------------------------------------------------------------------------\n" +
|
||||
"Application 【{}】 is running on 【{}】 environment!\n" +
|
||||
|
||||
@ -49,6 +49,9 @@ public class FeatureResourceController implements FeatureResourceApi {
|
||||
@Override
|
||||
public ApiResult<Void> saveMenu(FeatureResourceTreeSaveReq req) {
|
||||
log.info("save feature resouce req : " + req.toString());
|
||||
|
||||
featureResourceService.saveOrUpdateMenu(req);
|
||||
|
||||
return ApiResult.ok();
|
||||
}
|
||||
}
|
||||
|
||||
@ -120,6 +120,7 @@ public class RoleUserController implements TyrSaasRoleUserApi {
|
||||
* 根据id删除用户角色关联关系
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ApiResult removeRoleUserRelation(@RequestBody @Valid List<Long> ids){
|
||||
AssertUtil.isTrue(!CollectionUtils.isEmpty(ids),"用户角色关联id不能为空");
|
||||
List<SaasRoleUserRelation> relations = saasRoleUserRelationDao.listByIds(ids);
|
||||
@ -141,6 +142,7 @@ public class RoleUserController implements TyrSaasRoleUserApi {
|
||||
* 获取分包负责人等特殊角色
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<List<Long>> getSpecialRole() {
|
||||
return ApiResult.ok(saasRoleUserService.getSpecialRole());
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package cn.axzo.tyr.server.service;
|
||||
|
||||
import cn.axzo.tyr.client.model.req.FeatureResourceTreeSaveReq;
|
||||
import cn.axzo.tyr.client.model.req.ResourceSyncReq;
|
||||
import cn.axzo.tyr.client.model.res.FeatureResourceDTO;
|
||||
import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
|
||||
@ -18,4 +19,6 @@ public interface SaasFeatureResourceService {
|
||||
List<FeatureResourceTreeNode> getSyncTreeById(Long id);
|
||||
|
||||
void syncFromBase(ResourceSyncReq req);
|
||||
|
||||
void saveOrUpdateMenu(FeatureResourceTreeSaveReq req);
|
||||
}
|
||||
|
||||
@ -3,7 +3,10 @@ package cn.axzo.tyr.server.service.impl;
|
||||
import cn.axzo.basics.common.BeanMapper;
|
||||
import cn.axzo.basics.common.util.TreeUtil;
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||
import cn.axzo.tyr.client.common.enums.FeatureResourceType;
|
||||
import cn.axzo.tyr.client.model.req.FeatureComponentSaveReq;
|
||||
import cn.axzo.tyr.client.model.req.FeatureResourceTreeSaveReq;
|
||||
import cn.axzo.tyr.client.model.req.ResourceSyncReq;
|
||||
import cn.axzo.tyr.client.model.res.FeatureResourceDTO;
|
||||
import cn.axzo.tyr.client.model.res.FeatureResourceTreeNode;
|
||||
@ -13,16 +16,20 @@ import cn.axzo.tyr.server.repository.entity.SaasFeatureResource;
|
||||
import cn.axzo.tyr.server.service.SaasFeatureResourceService;
|
||||
import cn.axzo.tyr.server.util.RpcInternalUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -152,4 +159,75 @@ public class SaasFeatureResourceServiceImpl implements SaasFeatureResourceServic
|
||||
featureResourceDao.updateById(resource);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveOrUpdateMenu(FeatureResourceTreeSaveReq req) {
|
||||
SaasFeatureResource baseResource = BeanMapper.copyBean(req, SaasFeatureResource.class);
|
||||
baseResource.setUpdateBy(req.getOperatorId());
|
||||
// 新增时候
|
||||
if (req.getId() == null) {
|
||||
baseResource.setCreateBy(req.getOperatorId());
|
||||
newResource(baseResource);
|
||||
} else {
|
||||
featureResourceDao.updateById(baseResource);
|
||||
}
|
||||
|
||||
if (CollectionUtil.isNotEmpty(req.getComponentSaveReqList())) {
|
||||
for (FeatureComponentSaveReq componentSaveReq : req.getComponentSaveReqList()) {
|
||||
saveOrUpdateFeatureComponent(componentSaveReq, baseResource.getPath(), req.getOperatorId());
|
||||
}
|
||||
} else {
|
||||
deleteComponentRecursionById(baseResource.getId(), null, req.getOperatorId());
|
||||
}
|
||||
}
|
||||
|
||||
private void saveOrUpdateFeatureComponent(FeatureComponentSaveReq featureComponentSaveReq, String parentPath, Long operatorId) {
|
||||
// 批量保存path
|
||||
SaasFeatureResource saasFeatureResource = BeanMapper.copyBean(featureComponentSaveReq, SaasFeatureResource.class);
|
||||
saasFeatureResource.setUpdateBy(operatorId);
|
||||
if (saasFeatureResource.getId() != null) {
|
||||
featureResourceDao.updateById(saasFeatureResource);
|
||||
} else {
|
||||
saasFeatureResource.setCreateBy(operatorId);
|
||||
featureResourceDao.save(saasFeatureResource);
|
||||
saasFeatureResource.setPath(parentPath + "," + saasFeatureResource.getId());
|
||||
featureResourceDao.updateById(saasFeatureResource);
|
||||
}
|
||||
|
||||
List<FeatureComponentSaveReq> children = featureComponentSaveReq.getChildren();
|
||||
// 删除前端没带但数据库中有的组件。
|
||||
deleteComponentRecursionById(saasFeatureResource.getId(), children, operatorId);
|
||||
|
||||
// 更新前端提交的数据;
|
||||
if (!CollectionUtil.isEmpty(children)) {
|
||||
for (FeatureComponentSaveReq childComponent : children) {
|
||||
if (childComponent.getParentId() != null) {
|
||||
childComponent.setParentId(saasFeatureResource.getId());
|
||||
}
|
||||
// 递归新增修改删除子节点
|
||||
saveOrUpdateFeatureComponent(childComponent, saasFeatureResource.getPath(), operatorId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 删除自己和自己的子集
|
||||
private void deleteComponentRecursionById(Long resourceId, List<FeatureComponentSaveReq> submitChildren, Long operatorId) {
|
||||
if (submitChildren == null) {
|
||||
submitChildren = Collections.emptyList();
|
||||
}
|
||||
// 删除前端没带过来的
|
||||
List<SaasFeatureResource> existChild = featureResourceDao.lambdaQuery().eq(SaasFeatureResource::getParentId, resourceId).list();
|
||||
List<Long> updateChildIds = submitChildren.stream().map(FeatureComponentSaveReq::getId).filter(Objects::nonNull).collect(Collectors.toList());
|
||||
List<SaasFeatureResource> deleteChildren = existChild.stream().filter(item -> !updateChildIds.contains(item.getId())).collect(Collectors.toList());
|
||||
// 前端没传但是数据库中有的,需要删除
|
||||
if (!CollectionUtil.isEmpty(deleteChildren)) {
|
||||
for (SaasFeatureResource deleteChild : deleteChildren) {
|
||||
// 删除自己及自己的子集
|
||||
featureResourceDao.lambdaUpdate()
|
||||
.apply("FIND_IN_SET('" + deleteChild.getId() + "', path)")
|
||||
.set(SaasFeatureResource::getUpdateBy, operatorId)
|
||||
.set(BaseEntity::getIsDelete,1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user