From 6a70b64dfa83d84ab64b312fc0504fd9a366b5ee Mon Sep 17 00:00:00 2001 From: cjw Date: Fri, 7 Jun 2024 11:05:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AD=A6=E7=94=9F=E4=BF=A1=E6=81=AF=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E4=BC=98=E5=8C=96=EF=BC=8C=E6=B7=BB=E5=8A=A0=E7=8F=AD?= =?UTF-8?q?=E7=BA=A7=E4=BF=A1=E6=81=AF=EF=BC=9B=E4=B8=AA=E6=B5=8B=E5=AF=BC?= =?UTF-8?q?=E5=87=BAbug=E4=BC=98=E5=8C=96=EF=BC=9B=E5=9B=A2=E4=BD=93?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E6=B7=BB=E5=8A=A0=E5=88=A4=E6=96=AD=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=9B=E5=B9=B2=E9=A2=84/=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=B7=BB=E5=8A=A0=E6=95=B0=E6=8D=AE=E6=9D=83?= =?UTF-8?q?=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/constant/CacheNames.java | 5 +++ .../common/core/service/DeptService.java | 10 +++++ .../common/excel/core/ExcelDownHandler.java | 18 ++++++--- .../controller/ScalePublishController.java | 19 +++++++-- .../scale/mapper/SysWarnRecordMapper.java | 7 +++- .../service/ISysScalePublishService.java | 2 + .../impl/SysEvaluationRecordServiceImpl.java | 21 ++++++---- .../impl/SysScalePublishServiceImpl.java | 6 +++ .../mapper/scale/SysWarnRecordMapper.xml | 5 ++- .../main/resources/word/personalTemplate.docx | Bin 230442 -> 230472 bytes .../main/resources/word/~$rsonalTemplate.docx | Bin 0 -> 162 bytes .../system/domain/vo/SysStudentImportVo.java | 1 + .../listener/SysStudentImportListener.java | 33 ++++++---------- .../dromara/system/mapper/SysDeptMapper.java | 2 + .../system/service/ISysDeptService.java | 9 ++++- .../service/impl/SysDeptServiceImpl.java | 37 +++++++++++++----- .../resources/mapper/system/SysDeptMapper.xml | 7 ++++ 17 files changed, 133 insertions(+), 49 deletions(-) create mode 100644 ruoyi-modules/rouyi-scale/src/main/resources/word/~$rsonalTemplate.docx diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java index 6436516..540bc77 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheNames.java @@ -45,6 +45,11 @@ public interface CacheNames { */ String SYS_DEPT = "sys_dept#30d"; + /** + * 部门 + */ + String SYS_DEPT_CHILD = "sys_dept_child#20m"; + /** * OSS内容 */ diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/DeptService.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/DeptService.java index db9463e..166b892 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/DeptService.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/service/DeptService.java @@ -1,5 +1,7 @@ package org.dromara.common.core.service; +import java.util.Map; + /** * 通用 部门服务 * @@ -15,4 +17,12 @@ public interface DeptService { */ String selectDeptNameByIds(String deptIds); + + /** + * 获取所有的叶子部门 + * + * @return dictValue为key,dictLabel为值组成的Map + */ + Map getChildrenDept(); + } diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java index 0aca5d5..f8f3e51 100644 --- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java +++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/core/ExcelDownHandler.java @@ -104,11 +104,19 @@ public class ExcelDownHandler implements SheetWriteHandler { String dictType = format.dictType(); String converterExp = format.readConverterExp(); if (StrUtil.isNotBlank(dictType)) { - // 如果传递了字典名,则依据字典建立下拉 - Collection values = Optional.ofNullable(dictService.getAllDictByDictType(dictType)) - .orElseThrow(() -> new ServiceException(String.format("字典 %s 不存在", dictType))) - .values(); - options = new ArrayList<>(values); + //判断是类型还是部门 + if("dept".equals(dictType)){ + Collection values = Optional.ofNullable(deptService.getChildrenDept()) + .orElseThrow(() -> new ServiceException("不存在班级,请确认后再试")) + .values(); + options = new ArrayList<>(values); + }else { + // 如果传递了字典名,则依据字典建立下拉 + Collection values = Optional.ofNullable(dictService.getAllDictByDictType(dictType)) + .orElseThrow(() -> new ServiceException(String.format("字典 %s 不存在", dictType))) + .values(); + options = new ArrayList<>(values); + } } else if (StrUtil.isNotBlank(converterExp)) { // 如果指定了确切的值,则直接解析确切的值 options = StrUtil.split(converterExp, format.separator(), true, true); diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/controller/ScalePublishController.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/controller/ScalePublishController.java index 1280d40..7c70e9d 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/controller/ScalePublishController.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/controller/ScalePublishController.java @@ -100,7 +100,6 @@ public class ScalePublishController extends BaseController { /** * 中止记录 - * */ @SaCheckPermission("scale:publish:edit") @Log(title = "中止量表发布", businessType = BusinessType.UPDATE) @@ -111,7 +110,6 @@ public class ScalePublishController extends BaseController { /** * 开始记录 - * */ @SaCheckPermission("scale:publish:edit") @Log(title = "中止量表发布", businessType = BusinessType.UPDATE) @@ -130,6 +128,7 @@ public class ScalePublishController extends BaseController { public R delete(@NotNull(message = "主键不能为空") @PathVariable Long batchNo) { return toAjax(sysScalePublishService.deleteById(batchNo)); } + /** * 导出量测记录列表 */ @@ -142,7 +141,7 @@ public class ScalePublishController extends BaseController { String pdfPath = pdf.getPath(); File pdfFile = new File(pdfPath); AsposeUtil.wordToPdf(filePath, pdfFile); - FileUtils.setAttachmentResponseHeader(response, bo.getSessionName() + "的报告"); + FileUtils.setAttachmentResponseHeader(response, bo.getSessionName() + "的报告"); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8"); try (InputStream inputStream = new FileInputStream(pdfFile)) { int available = inputStream.available(); @@ -155,4 +154,18 @@ public class ScalePublishController extends BaseController { FileUtil.del(pdfPath); } } + + /** + * 导出量测记录列表 + */ + @SaCheckPermission("scale:publish:export") + @GetMapping("/export/check") + public R exportCheck(BaseQueryBo bo) throws IOException { + int num = sysScalePublishService.checkWord(bo); + if (num == 0) { + return R.fail("本场次暂无完成的量测记录,请测评后再导出"); + } else { + return R.ok(); + } + } } diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/mapper/SysWarnRecordMapper.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/mapper/SysWarnRecordMapper.java index b193076..3f55847 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/mapper/SysWarnRecordMapper.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/mapper/SysWarnRecordMapper.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.dromara.common.mybatis.annotation.DataColumn; +import org.dromara.common.mybatis.annotation.DataPermission; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.scale.domain.SysWarnRecord; import org.dromara.scale.domain.bo.BaseQueryBo; @@ -22,7 +24,10 @@ import java.util.List; */ @Mapper public interface SysWarnRecordMapper extends BaseMapperPlus { - + @DataPermission({ + @DataColumn(key = "deptName", value = "d.dept_id"), + @DataColumn(key = "userName", value = "u.user_id") + }) Page selectPageWarnList(@Param("page") Page page, @Param(Constants.ENTITY) BaseQueryBo query); List selectEvaluationRecordListByWarnId(Long warnId); diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/ISysScalePublishService.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/ISysScalePublishService.java index 6b845b7..881d380 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/ISysScalePublishService.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/ISysScalePublishService.java @@ -53,5 +53,7 @@ public interface ISysScalePublishService { String getWordTemplate(BaseQueryBo bo) throws IOException; + int checkWord(BaseQueryBo bo); + } diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysEvaluationRecordServiceImpl.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysEvaluationRecordServiceImpl.java index b98b148..4bf745d 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysEvaluationRecordServiceImpl.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysEvaluationRecordServiceImpl.java @@ -12,6 +12,7 @@ import com.deepoove.poi.data.style.BorderStyle; import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy; import lombok.RequiredArgsConstructor; import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.dromara.common.core.service.DeptService; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -37,6 +38,7 @@ import java.io.File; import java.io.IOException; import java.math.BigDecimal; import java.rmi.ServerException; +import java.util.ArrayList; import java.util.Date; import java.util.LinkedList; import java.util.List; @@ -59,6 +61,8 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi private final ISysConfigService configService; + private final DeptService deptService; + /** * 查询量测记录 */ @@ -123,7 +127,8 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi SysUserVo user = userMapper.selectVoById(userId); wordData.setNickName(user.getNickName()); - wordData.setDeptName(user.getDept().getDeptName()); + String s = deptService.selectDeptNameByIds(Long.toString(user.getDeptId())); + wordData.setDeptName(s); wordData.setSex("0".equals(user.getSex()) ? "男" : "女"); SysScaleVo scale = scaleMapper.selectVoById(scaleId); @@ -142,8 +147,8 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi //一并处理数据 int size = answerVos.size(); LinkedList factors = new LinkedList<>(); - String[] strings = new String[size]; - Double[] doubles = new Double[size]; + List strings = new ArrayList<>(); + List doubles = new ArrayList<>(); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < size; i++) { WordEvaluationFactor answerVo = answerVos.get(i); @@ -193,18 +198,18 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi } if (!"总分".equals(answerVo.getFactorName())) { //雷达图使用 - strings[i] = answerVo.getFactorName(); - doubles[i] = score; + strings.add(answerVo.getFactorName()); + doubles.add(score); } } wordData.setFactor(factorTable); wordData.setFactors(factors); //处理雷达图 - if (strings.length >1) { + if (strings.size() > 1) { ChartMultiSeriesRenderData chart = Charts - .ofMultiSeries(scale.getScaleName(), strings) - .addSeries("因子项", doubles) + .ofMultiSeries(scale.getScaleName(), strings.toArray(String[]::new)) + .addSeries("因子项", doubles.toArray(Double[]::new)) .create(); WordRadar radar = new WordRadar(); radar.setRadarChart(chart); diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScalePublishServiceImpl.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScalePublishServiceImpl.java index c73ba33..fdf163d 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScalePublishServiceImpl.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScalePublishServiceImpl.java @@ -453,6 +453,12 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService { return wordPath; } + @Override + public int checkWord(BaseQueryBo bo) { + //查询前置,用来判断 + return recordMapper.selectCompleteNumByBatchNo(bo.getBatchNo()); + } + private int processHalfUpPercent(int num, int total) { if (total == 0) { return 0; diff --git a/ruoyi-modules/rouyi-scale/src/main/resources/mapper/scale/SysWarnRecordMapper.xml b/ruoyi-modules/rouyi-scale/src/main/resources/mapper/scale/SysWarnRecordMapper.xml index 275afac..8ff7fd3 100644 --- a/ruoyi-modules/rouyi-scale/src/main/resources/mapper/scale/SysWarnRecordMapper.xml +++ b/ruoyi-modules/rouyi-scale/src/main/resources/mapper/scale/SysWarnRecordMapper.xml @@ -8,6 +8,7 @@ from sys_warn_record wr left join sys_scale_publish sp on sp.batch_no = wr.batch_no left join sys_user u on u.user_id = wr.user_id + left join sys_dept d on d.dept_id = u.dept_id u.nick_name like CONCAT('%', #{et.nickName}, '%') @@ -19,10 +20,10 @@ and u.intervene_status = #{et.interveneStatus} - and DATE_FORMAT(wr.warn_time, '%Y-%m-%d') >= #{et.startTime} + and DATE_FORMAT(wr.warn_time, '%Y-%m-%d') >= #{et.startTime} - and DATE_FORMAT(wr.warn_time, '%Y-%m-%d') <= #{et.endTime} + and DATE_FORMAT(wr.warn_time, '%Y-%m-%d') <= #{et.endTime} order by wr.warn_time desc diff --git a/ruoyi-modules/rouyi-scale/src/main/resources/word/personalTemplate.docx b/ruoyi-modules/rouyi-scale/src/main/resources/word/personalTemplate.docx index 45e07210f56af05acbb1a3894448bea38e8d898d..06af6b6929c97ee775cd7d5e981ede778fdd4fb2 100644 GIT binary patch delta 23017 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 delta 22969 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 Y4>Y3!O@&4v`zHonh7Oo;9}@!u05O~lr2qf` literal 0 HcmV?d00001 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysStudentImportVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysStudentImportVo.java index 0673bd1..feca495 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysStudentImportVo.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysStudentImportVo.java @@ -27,6 +27,7 @@ public class SysStudentImportVo implements Serializable { * 部门ID */ @ExcelProperty(value = "部门名称") + @ExcelDictFormat(dictType = "dept") private String deptName; /** diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysStudentImportListener.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysStudentImportListener.java index 5eec510..5c81cce 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysStudentImportListener.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/SysStudentImportListener.java @@ -8,6 +8,7 @@ import com.alibaba.excel.event.AnalysisEventListener; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.SpringUtils; +import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.excel.core.ExcelListener; import org.dromara.common.excel.core.ExcelResult; @@ -16,7 +17,6 @@ import org.dromara.system.domain.bo.SysUserBo; import org.dromara.system.domain.vo.SysStudentImportVo; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysConfigService; -import org.dromara.system.service.ISysDeptService; import org.dromara.system.service.ISysUserService; import java.util.List; @@ -31,8 +31,6 @@ public class SysStudentImportListener extends AnalysisEventListener").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功"); - } else { - failureNum++; - failureMsg.append("
").append(failureNum).append("、账号 ").append(userVo.getUserName()).append(" 已存在"); + // 验证是否存在这个用户 + if (ObjectUtil.isNull(sysUser)) { + SysUserBo user = BeanUtil.toBean(userVo, SysUserBo.class); + ValidatorUtils.validate(user); + user.setPassword(password); + if (StringUtils.isNotEmpty(userVo.getDeptName())) { + user.setDeptId(Long.parseLong(userVo.getDeptName())); } + user.setCreateBy(operUserId); + userService.insertUser(user); + successNum++; + successMsg.append("
").append(successNum).append("、账号 ").append(user.getUserName()).append(" 导入成功"); } else { failureNum++; - failureMsg.append("
").append(failureNum).append("、账号 ").append(userVo.getUserName()).append(" 查询不到部门"); + failureMsg.append("
").append(failureNum).append("、账号 ").append(userVo.getUserName()).append(" 已存在"); } } catch (Exception e) { failureNum++; diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java index 76bee72..e9d23c2 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java @@ -51,4 +51,6 @@ public interface SysDeptMapper extends BaseMapperPlus { List findDeptNameByUserIds(String userIds); + + } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java index 82adb90..8dda22f 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java @@ -1,6 +1,7 @@ package org.dromara.system.service; import cn.hutool.core.lang.tree.Tree; +import org.dromara.system.domain.SysDept; import org.dromara.system.domain.bo.SysDeptBo; import org.dromara.system.domain.vo.SysDeptVo; @@ -115,6 +116,12 @@ public interface ISysDeptService { */ int deleteDeptById(Long deptId); - Long selectIdByName(String deptName); + /** + * 根据角色ID查询部门树信息 + * + * @param parentId 角色ID + * @return 选中部门列表 + */ + List selectChildDeptListByParentId(Long parentId); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java index 93f71de..404806b 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java @@ -32,9 +32,7 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; /** * 部门管理 服务实现 @@ -138,6 +136,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { return dept; } + /** * 通过部门ID查询部门名称 * @@ -326,13 +325,33 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { return baseMapper.deleteById(deptId); } + @Override - public Long selectIdByName(String deptName) { - SysDept sysDept = baseMapper.selectOne(new LambdaQueryWrapper().select(SysDept::getDeptId).eq(SysDept::getDeptName, deptName)); - if (ObjectUtil.isNotNull(sysDept)) { - return sysDept.getDeptId(); - } else { - return 0L; + public Map getChildrenDept() { + List deptList = SpringUtils.getAopProxy(this).selectChildDeptListByParentId(100L); + if (ObjectUtil.isEmpty(deptList)) { + return null; } + LinkedHashMap map = new LinkedHashMap<>(); + for (SysDept sysDept : deptList) { + List depts = SpringUtils.getAopProxy(this).selectChildDeptListByParentId(sysDept.getDeptId()); + if (ObjectUtil.isNotEmpty(depts)) { + for (SysDept dept : depts) { + map.put(Long.toString(dept.getDeptId()), dept.getDeptName()); + } + } + } + return map; + } + + @CacheEvict(cacheNames = CacheNames.SYS_DEPT_CHILD, key = "#parentId") + @Override + public List selectChildDeptListByParentId(Long parentId) { + return baseMapper.selectList(new LambdaQueryWrapper() + .select(SysDept::getDeptId, SysDept::getDeptName) + .eq(SysDept::getParentId, parentId) + .orderByAsc(SysDept::getParentId) + .orderByAsc(SysDept::getOrderNum) + .orderByAsc(SysDept::getDeptId)); } } diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml index e1b495e..74bb91c 100644 --- a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -43,4 +43,11 @@ where find_in_set(user_id, #{userIds}) group by d.dept_id + +