Browse Source

虚拟单位重组功能开发

dev-V1.0.1
庄锐波 6 months ago
parent
commit
0f1d029dd6
  1. 2
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeVirtualUnitMapper.java
  2. 2
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/SrzDeptMapper.java
  3. 48
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeVirtualUnitServiceImpl.java
  4. 2
      zdxt-modules/zdxt-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java
  5. 11
      zdxt-web-client/zdxt-admin-plus-ui/src/views/efcode/virtualUnit/unitBuilder.vue
  6. 12
      zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml

2
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/EfcodeVirtualUnitMapper.java

@ -2,6 +2,7 @@ package com.zdxt.enforcementcode.mapper;
import com.zdxt.enforcementcode.domain.EfcodeVirtualUnit; import com.zdxt.enforcementcode.domain.EfcodeVirtualUnit;
import com.zdxt.enforcementcode.domain.vo.EfcodeVirtualUnitVo; import com.zdxt.enforcementcode.domain.vo.EfcodeVirtualUnitVo;
import org.apache.ibatis.annotations.Mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/** /**
@ -10,6 +11,7 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
* @author Lion Li * @author Lion Li
* @date 2026-05-07 * @date 2026-05-07
*/ */
@Mapper
public interface EfcodeVirtualUnitMapper extends BaseMapperPlus<EfcodeVirtualUnit, EfcodeVirtualUnitVo> { public interface EfcodeVirtualUnitMapper extends BaseMapperPlus<EfcodeVirtualUnit, EfcodeVirtualUnitVo> {
} }

2
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/mapper/SrzDeptMapper.java

@ -2,6 +2,7 @@ package com.zdxt.enforcementcode.mapper;
import com.zdxt.enforcementcode.domain.SrzDept; import com.zdxt.enforcementcode.domain.SrzDept;
import com.zdxt.enforcementcode.domain.vo.SrzDeptVo; import com.zdxt.enforcementcode.domain.vo.SrzDeptVo;
import org.apache.ibatis.annotations.Mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/** /**
@ -10,6 +11,7 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
* @author Lion Li * @author Lion Li
* @date 2026-05-06 * @date 2026-05-06
*/ */
@Mapper
public interface SrzDeptMapper extends BaseMapperPlus<SrzDept, SrzDeptVo> { public interface SrzDeptMapper extends BaseMapperPlus<SrzDept, SrzDeptVo> {
} }

48
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeVirtualUnitServiceImpl.java

@ -1,11 +1,14 @@
package com.zdxt.enforcementcode.service.impl; package com.zdxt.enforcementcode.service.impl;
import com.zdxt.enforcementcode.mapper.SrzDeptMapper;
import com.zdxt.enforcementcode.service.ISrzDeptService;
import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -15,11 +18,15 @@ import com.zdxt.enforcementcode.domain.vo.EfcodeVirtualUnitVo;
import com.zdxt.enforcementcode.domain.EfcodeVirtualUnit; import com.zdxt.enforcementcode.domain.EfcodeVirtualUnit;
import com.zdxt.enforcementcode.mapper.EfcodeVirtualUnitMapper; import com.zdxt.enforcementcode.mapper.EfcodeVirtualUnitMapper;
import com.zdxt.enforcementcode.service.IEfcodeVirtualUnitService; import com.zdxt.enforcementcode.service.IEfcodeVirtualUnitService;
import org.dromara.system.domain.SysDept;
import org.dromara.system.mapper.SysDeptMapper;
import com.zdxt.enforcementcode.domain.vo.SrzDeptVo;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
import java.util.UUID; import java.util.UUID;
import java.util.stream.Collectors;
/** /**
* 虚拟单位树Service业务层处理 * 虚拟单位树Service业务层处理
@ -33,6 +40,8 @@ import java.util.UUID;
public class EfcodeVirtualUnitServiceImpl implements IEfcodeVirtualUnitService { public class EfcodeVirtualUnitServiceImpl implements IEfcodeVirtualUnitService {
private final EfcodeVirtualUnitMapper baseMapper; private final EfcodeVirtualUnitMapper baseMapper;
private final SysDeptMapper sysDeptMapper;
private final SrzDeptMapper srzDeptMapper;
/** /**
* 查询虚拟单位树 * 查询虚拟单位树
@ -106,6 +115,10 @@ public class EfcodeVirtualUnitServiceImpl implements IEfcodeVirtualUnitService {
if (StringUtils.isBlank(add.getVirId())) { if (StringUtils.isBlank(add.getVirId())) {
add.setVirId(UUID.randomUUID().toString().replace("-", "")); add.setVirId(UUID.randomUUID().toString().replace("-", ""));
} }
SrzDeptVo srzDept = srzDeptMapper.selectVoById(bo.getSrzOrganizationId());
add.setSysDeptId(bo.getSrzOrganizationId());
add.setOrderNum(Long.valueOf(srzDept.getSequence()));
// 构建ancestors: 父节点ancestors + 自身virId // 构建ancestors: 父节点ancestors + 自身virId
if (StringUtils.isNotBlank(add.getVirParentId())) { if (StringUtils.isNotBlank(add.getVirParentId())) {
EfcodeVirtualUnitVo parent = baseMapper.selectVoById(add.getVirParentId()); EfcodeVirtualUnitVo parent = baseMapper.selectVoById(add.getVirParentId());
@ -121,6 +134,8 @@ public class EfcodeVirtualUnitServiceImpl implements IEfcodeVirtualUnitService {
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
bo.setVirId(add.getVirId()); bo.setVirId(add.getVirId());
// 同步更新 sys_dept 的 zone 值
syncDeptZone(add.getSysDeptId(), add.getVirZone());
} }
return flag; return flag;
} }
@ -157,7 +172,38 @@ public class EfcodeVirtualUnitServiceImpl implements IEfcodeVirtualUnitService {
if(isValid){ if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验 //TODO 做一些业务上的校验,判断是否需要校验
} }
return baseMapper.deleteByIds(ids) > 0; // 删除前查询记录,获取 srzOrganizationId 用于清除 sys_dept.zone
List<EfcodeVirtualUnit> units = baseMapper.selectBatchIds(ids);
boolean flag = baseMapper.deleteByIds(ids) > 0;
if (flag) {
// 同步清除 sys_dept 的 zone 值
List<String> deptIds = units.stream()
.map(EfcodeVirtualUnit::getSysDeptId)
.filter(StringUtils::isNotBlank)
.distinct()
.collect(Collectors.toList());
for (String deptId : deptIds) {
syncDeptZone(deptId, null);
}
}
return flag;
}
/**
* 同步更新 sys_dept 的 zone 值
*
* @param deptId 部门ID
* @param zone zone值,null表示清除
*/
private void syncDeptZone(String deptId, Long zone) {
if (StringUtils.isBlank(deptId)) {
return;
}
Integer zoneValue = zone != null ? zone.intValue() : null;
sysDeptMapper.update(null, new LambdaUpdateWrapper<SysDept>()
.set(SysDept::getZone, zoneValue)
.eq(SysDept::getDeptId, deptId)
);
} }
/** /**

2
zdxt-modules/zdxt-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java

@ -3,6 +3,7 @@ package org.dromara.system.mapper;
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.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.mybatis.annotation.DataColumn; import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.annotation.DataPermission;
@ -18,6 +19,7 @@ import java.util.List;
* *
* @author Lion Li * @author Lion Li
*/ */
@Mapper
public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> { public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
/** /**

11
zdxt-web-client/zdxt-admin-plus-ui/src/views/efcode/virtualUnit/unitBuilder.vue

@ -252,6 +252,11 @@ const flattenTree = (nodes: TreeTableRow[]): TreeTableRow[] => {
const handleConfirmAdd = async () => { const handleConfirmAdd = async () => {
if (!selectedVirNode.value || !selectedSrzNode.value) return; if (!selectedVirNode.value || !selectedSrzNode.value) return;
if (settingForm.value.virZone === null) {
ElMessage.warning('请选择Zone');
return;
}
const parentNode = selectedVirNode.value; const parentNode = selectedVirNode.value;
const srzNode = selectedSrzNode.value; const srzNode = selectedSrzNode.value;
@ -279,7 +284,7 @@ const handleConfirmAdd = async () => {
virIsVirtual: '否', virIsVirtual: '否',
virParentId: parentNode.virId, virParentId: parentNode.virId,
virName: srzNode.label, virName: srzNode.label,
virZone: null, virZone: settingForm.value.virZone,
virAncestors: parentAncestors, // 后端可重新计算 virAncestors: parentAncestors, // 后端可重新计算
virDisplayPath: newDisplayPath, virDisplayPath: newDisplayPath,
virIncludeStatistics: settingForm.value.virIncludeStatistics, virIncludeStatistics: settingForm.value.virIncludeStatistics,
@ -468,7 +473,7 @@ onMounted(() => {
<el-radio value="否">否</el-radio> <el-radio value="否">否</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="Zone"> <el-form-item label="Zone" required>
<el-radio-group v-model="settingForm.virZone"> <el-radio-group v-model="settingForm.virZone">
<el-radio v-for="opt in zoneOptions" :key="opt.value" :value="opt.value">{{ opt.label }}</el-radio> <el-radio v-for="opt in zoneOptions" :key="opt.value" :value="opt.value">{{ opt.label }}</el-radio>
</el-radio-group> </el-radio-group>
@ -512,7 +517,7 @@ onMounted(() => {
} }
.right-panel { .right-panel {
width: 560px; width: 500px;
flex-shrink: 0; flex-shrink: 0;
overflow: hidden; overflow: hidden;
} }

12
zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml

@ -225,6 +225,18 @@ springdoc:
api-docs: api-docs:
# 是否开启接口文档 # 是否开启接口文档
enabled: true enabled: true
components:
securitySchemes:
Authorization:
type: apiKey
in: header
name: Authorization
description: "Bearer Token,格式: Bearer {token}"
clientid:
type: apiKey
in: header
name: clientid
description: "客户端ID"
info: info:
# 标题 # 标题
title: '标题:zdxt-Vue-Plus多租户管理系统_接口文档' title: '标题:zdxt-Vue-Plus多租户管理系统_接口文档'

Loading…
Cancel
Save