mirror of
https://gitee.com/xiaonuobase/snowy.git
synced 2026-03-22 10:47:16 +08:00
【新增】机构过多后一个个添加麻烦,新增批量复制一批到另一个机构下的功能
This commit is contained in:
@@ -143,6 +143,22 @@ public class BizOrgController {
|
||||
return CommonResult.data(bizOrgService.detail(bizOrgIdParam));
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制机构
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @date 2025/12/24 01:30
|
||||
*/
|
||||
@ApiOperationSupport(order = 7)
|
||||
@Operation(summary = "复制机构")
|
||||
@CommonLog("复制机构")
|
||||
@SaCheckPermission("/biz/org/copy")
|
||||
@PostMapping("/biz/org/copy")
|
||||
public CommonResult<String> copy(@RequestBody @Valid BizOrgCopyParam bizOrgCopyParam) {
|
||||
bizOrgService.copy(bizOrgCopyParam);
|
||||
return CommonResult.ok();
|
||||
}
|
||||
|
||||
/* ====机构部分所需要用到的选择器==== */
|
||||
|
||||
/**
|
||||
@@ -151,7 +167,7 @@ public class BizOrgController {
|
||||
* @author xuyuxiang
|
||||
* @date 2022/4/24 20:00
|
||||
*/
|
||||
@ApiOperationSupport(order = 7)
|
||||
@ApiOperationSupport(order = 8)
|
||||
@Operation(summary = "获取机构树选择器")
|
||||
@SaCheckPermission("/biz/org/orgTreeSelector")
|
||||
@GetMapping("/biz/org/orgTreeSelector")
|
||||
@@ -165,7 +181,7 @@ public class BizOrgController {
|
||||
* @author xuyuxiang
|
||||
* @date 2022/4/24 20:00
|
||||
*/
|
||||
@ApiOperationSupport(order = 8)
|
||||
@ApiOperationSupport(order = 9)
|
||||
@Operation(summary = "获取人员选择器")
|
||||
@SaCheckPermission("/biz/org/userSelector")
|
||||
@GetMapping("/biz/org/userSelector")
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright [2022] [https://www.xiaonuo.vip]
|
||||
*
|
||||
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||
*
|
||||
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||
* 2.请不要删除和修改Snowy源码头部的版权声明。
|
||||
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
|
||||
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
|
||||
* 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
|
||||
* 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
|
||||
*/
|
||||
package vip.xiaonuo.biz.modular.org.param;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 机构复制参数
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @date 2025/12/24 01:30
|
||||
**/
|
||||
@Getter
|
||||
@Setter
|
||||
public class BizOrgCopyParam {
|
||||
|
||||
/** 目标父id */
|
||||
@Schema(description = "目标父id")
|
||||
@NotBlank(message = "targetParentId不能为空")
|
||||
private String targetParentId;
|
||||
|
||||
/** 机构id集合 */
|
||||
@Schema(description = "机构id集合")
|
||||
@NotEmpty(message = "ids不能为空")
|
||||
private List<String> ids;
|
||||
}
|
||||
@@ -172,4 +172,12 @@ public interface BizOrgService extends IService<BizOrg> {
|
||||
* @date 2022/4/24 20:08
|
||||
*/
|
||||
Page<BizUser> userSelector(BizOrgSelectorUserParam bizOrgSelectorUserParam);
|
||||
|
||||
/**
|
||||
* 复制机构
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @date 2025/12/24 01:30
|
||||
*/
|
||||
void copy(BizOrgCopyParam bizOrgCopyParam);
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
|
||||
import vip.xiaonuo.biz.core.enums.BizDataTypeEnum;
|
||||
import vip.xiaonuo.biz.modular.org.entity.BizOrg;
|
||||
import vip.xiaonuo.biz.modular.org.enums.BizOrgCategoryEnum;
|
||||
import vip.xiaonuo.biz.modular.org.enums.BizOrgSourceFromTypeEnum;
|
||||
import vip.xiaonuo.biz.modular.org.mapper.BizOrgMapper;
|
||||
import vip.xiaonuo.biz.modular.org.param.*;
|
||||
import vip.xiaonuo.biz.modular.org.service.BizOrgExtService;
|
||||
@@ -395,6 +396,63 @@ public class BizOrgServiceImpl extends ServiceImpl<BizOrgMapper, BizOrg> impleme
|
||||
return bizUserService.page(CommonPageRequest.defaultPage(), queryWrapper.lambda());
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public void copy(BizOrgCopyParam bizOrgCopyParam) {
|
||||
// 获取目标父id
|
||||
String targetParentId = bizOrgCopyParam.getTargetParentId();
|
||||
// 获取机构id集合
|
||||
List<String> orgIdList = bizOrgCopyParam.getIds();
|
||||
if(ObjectUtil.isNotEmpty(orgIdList)) {
|
||||
// 校验数据范围
|
||||
List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
|
||||
if(ObjectUtil.isNotEmpty(loginUserDataScope)) {
|
||||
// 如果有数据范围限制,则校验目标父id是否有权限
|
||||
if(!loginUserDataScope.contains(targetParentId)) {
|
||||
throw new CommonException("您没有权限在该机构下增加机构,机构id:{}", targetParentId);
|
||||
}
|
||||
// 再校验源ID权限
|
||||
if(!new HashSet<>(loginUserDataScope).containsAll(orgIdList)) {
|
||||
throw new CommonException("您没有权限复制这些机构,机构id:{}", orgIdList);
|
||||
}
|
||||
} else {
|
||||
throw new CommonException("您没有权限复制机构");
|
||||
}
|
||||
|
||||
// 遍历复制
|
||||
orgIdList.forEach(orgId -> {
|
||||
BizOrg bizOrg = this.getById(orgId);
|
||||
if(ObjectUtil.isNotEmpty(bizOrg)) {
|
||||
// 查询是否有重复名称
|
||||
boolean repeatName = this.count(new LambdaQueryWrapper<BizOrg>()
|
||||
.eq(BizOrg::getParentId, targetParentId)
|
||||
.eq(BizOrg::getName, bizOrg.getName())) > 0;
|
||||
// 如果有重复名称则跳过
|
||||
if(!repeatName) {
|
||||
BizOrg copyBizOrg = new BizOrg();
|
||||
// 复制部分字段
|
||||
copyBizOrg.setName(bizOrg.getName());
|
||||
copyBizOrg.setCategory(bizOrg.getCategory());
|
||||
copyBizOrg.setSortCode(bizOrg.getSortCode());
|
||||
copyBizOrg.setExtJson(bizOrg.getExtJson());
|
||||
// 设置父id
|
||||
copyBizOrg.setParentId(targetParentId);
|
||||
// 重新生成code
|
||||
copyBizOrg.setCode(RandomUtil.randomString(10));
|
||||
// 主管置空
|
||||
copyBizOrg.setDirectorId(null);
|
||||
// 保存
|
||||
this.save(copyBizOrg);
|
||||
// 插入扩展信息
|
||||
bizOrgExtService.createExtInfo(copyBizOrg.getId(), BizOrgSourceFromTypeEnum.SYSTEM_ADD.getValue());
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(BizDataTypeEnum.ORG.getValue(), JSONUtil.createArray().put(copyBizOrg));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* ====以下为各种递归方法==== */
|
||||
|
||||
@Override
|
||||
|
||||
@@ -136,6 +136,21 @@ public class SysOrgController {
|
||||
return CommonResult.data(sysOrgService.detail(sysOrgIdParam));
|
||||
}
|
||||
|
||||
/**
|
||||
* 复制组织
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @date 2025/12/24 01:10
|
||||
*/
|
||||
@ApiOperationSupport(order = 7)
|
||||
@Operation(summary = "复制组织")
|
||||
@CommonLog("复制组织")
|
||||
@PostMapping("/sys/org/copy")
|
||||
public CommonResult<String> copy(@RequestBody @Valid SysOrgCopyParam sysOrgCopyParam) {
|
||||
sysOrgService.copy(sysOrgCopyParam);
|
||||
return CommonResult.ok();
|
||||
}
|
||||
|
||||
/* ====组织部分所需要用到的选择器==== */
|
||||
|
||||
/**
|
||||
@@ -144,7 +159,7 @@ public class SysOrgController {
|
||||
* @author xuyuxiang
|
||||
* @date 2022/4/24 20:00
|
||||
*/
|
||||
@ApiOperationSupport(order = 7)
|
||||
@ApiOperationSupport(order = 8)
|
||||
@Operation(summary = "获取组织树选择器")
|
||||
@GetMapping("/sys/org/orgTreeSelector")
|
||||
public CommonResult<List<Tree<String>>> orgTreeSelector() {
|
||||
@@ -157,7 +172,7 @@ public class SysOrgController {
|
||||
* @author xuyuxiang
|
||||
* @date 2022/4/24 20:00
|
||||
*/
|
||||
@ApiOperationSupport(order = 8)
|
||||
@ApiOperationSupport(order = 9)
|
||||
@Operation(summary = "获取用户选择器")
|
||||
@GetMapping("/sys/org/userSelector")
|
||||
public CommonResult<Page<SysUser>> userSelector(SysOrgSelectorUserParam sysOrgSelectorUserParam) {
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Copyright [2022] [https://www.xiaonuo.vip]
|
||||
*
|
||||
* Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||
*
|
||||
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||
* 2.请不要删除和修改Snowy源码头部的版权声明。
|
||||
* 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
|
||||
* 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
|
||||
* 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
|
||||
* 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
|
||||
*/
|
||||
package vip.xiaonuo.sys.modular.org.param;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 组织复制参数
|
||||
*
|
||||
* @author xuyuxiang
|
||||
* @date 2022/8/15 14:32
|
||||
**/
|
||||
@Getter
|
||||
@Setter
|
||||
public class SysOrgCopyParam {
|
||||
|
||||
/** 目标父id */
|
||||
@Schema(description = "目标父id")
|
||||
@NotBlank(message = "targetParentId不能为空")
|
||||
private String targetParentId;
|
||||
|
||||
/** 组织id集合 */
|
||||
@Schema(description = "组织id集合")
|
||||
@NotEmpty(message = "ids不能为空")
|
||||
private List<String> ids;
|
||||
}
|
||||
@@ -77,6 +77,14 @@ public interface SysOrgService extends IService<SysOrg> {
|
||||
*/
|
||||
SysOrg detail(SysOrgIdParam sysOrgIdParam);
|
||||
|
||||
/**
|
||||
* 复制组织
|
||||
*
|
||||
* @author yubaoshan
|
||||
* @date 2025/12/24 01:10
|
||||
*/
|
||||
void copy(SysOrgCopyParam sysOrgCopyParam);
|
||||
|
||||
/**
|
||||
* 获取组织详情
|
||||
*
|
||||
|
||||
@@ -205,6 +205,49 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
|
||||
return this.queryEntity(sysOrgIdParam.getId());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void copy(SysOrgCopyParam sysOrgCopyParam) {
|
||||
// 获取目标父id
|
||||
String targetParentId = sysOrgCopyParam.getTargetParentId();
|
||||
// 获取组织id集合
|
||||
List<String> orgIdList = sysOrgCopyParam.getIds();
|
||||
if(ObjectUtil.isNotEmpty(orgIdList)) {
|
||||
// 遍历复制
|
||||
orgIdList.forEach(orgId -> {
|
||||
SysOrg sysOrg = this.getById(orgId);
|
||||
if(ObjectUtil.isNotEmpty(sysOrg)) {
|
||||
// 查询是否有重复名称
|
||||
boolean repeatName = this.count(new LambdaQueryWrapper<SysOrg>()
|
||||
.eq(SysOrg::getParentId, targetParentId)
|
||||
.eq(SysOrg::getName, sysOrg.getName())) > 0;
|
||||
// 如果有重复名称则跳过
|
||||
if(!repeatName) {
|
||||
SysOrg copySysOrg = new SysOrg();
|
||||
// 复制部分字段
|
||||
copySysOrg.setName(sysOrg.getName());
|
||||
copySysOrg.setCategory(sysOrg.getCategory());
|
||||
copySysOrg.setSortCode(sysOrg.getSortCode());
|
||||
copySysOrg.setExtJson(sysOrg.getExtJson());
|
||||
// 设置父id
|
||||
copySysOrg.setParentId(targetParentId);
|
||||
// 重新生成code
|
||||
copySysOrg.setCode(RandomUtil.randomString(10));
|
||||
// 主管置空
|
||||
copySysOrg.setDirectorId(null);
|
||||
// 保存
|
||||
this.save(copySysOrg);
|
||||
// 插入扩展信息
|
||||
sysOrgExtService.createExtInfo(copySysOrg.getId(), SysOrgSourceFromTypeEnum.SYSTEM_ADD.getValue());
|
||||
// 发布增加事件
|
||||
CommonDataChangeEventCenter.doAddWithData(SysDataTypeEnum.ORG.getValue(), JSONUtil.createArray().put(copySysOrg));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysOrg queryEntity(String id) {
|
||||
SysOrg sysOrg = this.getById(id);
|
||||
|
||||
Reference in New Issue
Block a user