diff --git a/cat2bug-platform-admin/src/main/resources/application-mysql.yml b/cat2bug-platform-admin/src/main/resources/application-mysql.yml index b1dbf3cc701f3dd327673ef2ffd8b7e9074f04eb..a480c5c865ba05558805838e96d1e01ce5276d2f 100644 --- a/cat2bug-platform-admin/src/main/resources/application-mysql.yml +++ b/cat2bug-platform-admin/src/main/resources/application-mysql.yml @@ -30,7 +30,7 @@ spring: druid: # 主库数据源 master: - url: jdbc:mysql://localhost:3306/cat2bug_platform?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + url: jdbc:mysql://localhost:3306/cat2bug_platform?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&allowMultiQueries=true username: root password: cat2bug_password # 从库数据源 diff --git a/cat2bug-platform-admin/src/main/resources/i18n/messages.properties b/cat2bug-platform-admin/src/main/resources/i18n/messages.properties index 42254b43efe946c950faab14a213104cbbc00c8a..f40a790ab7dc71618de5ab29c88b5ef524c39d4b 100644 --- a/cat2bug-platform-admin/src/main/resources/i18n/messages.properties +++ b/cat2bug-platform-admin/src/main/resources/i18n/messages.properties @@ -73,6 +73,7 @@ project.member_role_not_empty=成员角色不能为空! module=交付物 module.required=交付物(必填) module.insert-fail=新建交付物失败! +module.update_parent_module_fail=不能将父交付物设置为自身的子交付物 defect=缺陷 defect.assign_fail=指派操作失败 diff --git a/cat2bug-platform-admin/src/main/resources/i18n/messages_en_US.properties b/cat2bug-platform-admin/src/main/resources/i18n/messages_en_US.properties index d08f70dad3afc32d498d0da6148d2a4fac92b50c..33f35f66d61261c90d22846e4cd5a463f965847b 100644 --- a/cat2bug-platform-admin/src/main/resources/i18n/messages_en_US.properties +++ b/cat2bug-platform-admin/src/main/resources/i18n/messages_en_US.properties @@ -74,6 +74,7 @@ project.member_role_not_empty=Member roles cannot be empty! module=Deliverable module.required=Deliverable(Required) module.insert-fail=Create deliverable failed! +module.update_parent_module_fail=Cannot set the parent deliverable to be its own child defect=Defect defect.assign_fail=Assign operation failed! diff --git a/cat2bug-platform-system/src/main/java/com/cat2bug/system/mapper/SysModuleMapper.java b/cat2bug-platform-system/src/main/java/com/cat2bug/system/mapper/SysModuleMapper.java index c3da8bede5c23ced34d846f403f807fc8b058ac0..5cc009091dce7c63af4e0b1e350a53f71f20192f 100644 --- a/cat2bug-platform-system/src/main/java/com/cat2bug/system/mapper/SysModuleMapper.java +++ b/cat2bug-platform-system/src/main/java/com/cat2bug/system/mapper/SysModuleMapper.java @@ -42,6 +42,14 @@ public interface SysModuleMapper */ public List selectSysModulePathList(Long projectId); + /** + * 查询moduleIds为pid的交付物列表 + * + * @param pids 父id列表 + * @return 交付物列表 + */ + public List selectSysModuleByPids(Long[] pids); + /** * 新增模块 * @@ -58,6 +66,14 @@ public interface SysModuleMapper */ public int updateSysModule(SysModule sysModule); + /** + * 批量修改模块 + * + * @param sysModules + * @return 受影响行数 + */ + public int updateSysModules(List sysModules); + /** * 删除模块 * diff --git a/cat2bug-platform-system/src/main/java/com/cat2bug/system/service/impl/SysModuleServiceImpl.java b/cat2bug-platform-system/src/main/java/com/cat2bug/system/service/impl/SysModuleServiceImpl.java index c2279f928e82c8e31437a1000fd28d274bb7bd16..239771b57f737b665a0523c1ac936fcbd1819d64 100644 --- a/cat2bug-platform-system/src/main/java/com/cat2bug/system/service/impl/SysModuleServiceImpl.java +++ b/cat2bug-platform-system/src/main/java/com/cat2bug/system/service/impl/SysModuleServiceImpl.java @@ -1,27 +1,26 @@ package com.cat2bug.system.service.impl; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - import com.cat2bug.common.utils.MessageUtils; +import com.cat2bug.system.domain.SysModule; +import com.cat2bug.system.mapper.SysModuleMapper; +import com.cat2bug.system.service.ISysModuleService; import com.google.common.base.Preconditions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.cat2bug.system.mapper.SysModuleMapper; -import com.cat2bug.system.domain.SysModule; -import com.cat2bug.system.service.ISysModuleService; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; + +import java.util.*; +import java.util.stream.Collectors; /** * 模块Service业务层处理 - * + * * @author yuzhantao * @date 2023-11-26 */ @Service -public class SysModuleServiceImpl implements ISysModuleService -{ +public class SysModuleServiceImpl implements ISysModuleService { @Autowired private SysModuleMapper sysModuleMapper; @@ -32,25 +31,23 @@ public class SysModuleServiceImpl implements ISysModuleService /** * 查询模块 - * + * * @param moduleId 模块主键 * @return 模块 */ @Override - public SysModule selectSysModuleByModuleId(Long moduleId) - { + public SysModule selectSysModuleByModuleId(Long moduleId) { return sysModuleMapper.selectSysModuleByModuleId(moduleId); } /** * 查询模块列表 - * + * * @param sysModule 模块 * @return 模块 */ @Override - public List selectSysModuleList(SysModule sysModule) - { + public List selectSysModuleList(SysModule sysModule) { return sysModuleMapper.selectSysModuleList(sysModule); } @@ -61,28 +58,27 @@ public class SysModuleServiceImpl implements ISysModuleService /** * 新增模块 - * + * * @param sysModule 模块 * @return 结果 */ @Override @Transactional - public List insertSysModule(SysModule sysModule) - { + public List insertSysModule(SysModule sysModule) { List ret = new ArrayList<>(); - if(sysModule.getBatchModuleNames()!=null && sysModule.getBatchModuleNames().size()>0) { - sysModule.getBatchModuleNames().forEach(m->{ + if (sysModule.getBatchModuleNames() != null && sysModule.getBatchModuleNames().size() > 0) { + sysModule.getBatchModuleNames().forEach(m -> { SysModule module = new SysModule(); module.setModuleName(m); module.setModulePid(sysModule.getModulePid()); module.setProjectId(sysModule.getProjectId()); int count = sysModuleMapper.insertSysModule(module); - Preconditions.checkState(count>0, MessageUtils.message("module.insert-fail")); + Preconditions.checkState(count > 0, MessageUtils.message("module.insert-fail")); ret.add(module); }); } else { - int count = sysModuleMapper.insertSysModule(sysModule); - Preconditions.checkState(count>0, MessageUtils.message("module.insert-fail")); + int count = sysModuleMapper.insertSysModule(sysModule); + Preconditions.checkState(count > 0, MessageUtils.message("module.insert-fail")); ret.add(sysModule); } return ret; @@ -90,25 +86,83 @@ public class SysModuleServiceImpl implements ISysModuleService /** * 修改模块 - * + * * @param sysModule 模块 * @return 结果 */ @Override - public int updateSysModule(SysModule sysModule) - { + public int updateSysModule(SysModule sysModule) { + // 根据ProjectId获取到所要交付物 + SysModule byProject = new SysModule(); + byProject.setProjectId(sysModule.getProjectId()); + List sysModules = sysModuleMapper.selectSysModuleList(byProject); + + // key是pid,即根据SysModule的pid进行分组 + Map> map = sysModules.stream().collect(Collectors + .groupingBy(SysModule::getModulePid)); + + // 当前交付物的id + Long currModuleId = sysModule.getModuleId(); + // 所要设置的新的父节点 + Long newModulePid = sysModule.getModulePid(); + + Preconditions.checkState(!isChildOfCurr(map, currModuleId, newModulePid), + MessageUtils.message("module.update_parent_module_fail")); return sysModuleMapper.updateSysModule(sysModule); } + private boolean isChildOfCurr(Map> map, Long currModuleId, Long newModulePid) { + // 新的父交付物id 不能为 自身 + if (currModuleId.equals(newModulePid)) { + return true; + } + LinkedList stack = new LinkedList<>(); + stack.push(currModuleId); + boolean isChild = false; + loop: + while (!stack.isEmpty()) { + Long pid = stack.pop(); + List list = map.get(pid); + + if (ObjectUtils.isEmpty(list)) { + continue; + } + + for (SysModule module : list) { + if (module.getModuleId().equals(newModulePid)) { + isChild = true; + break loop; + } + stack.push(module.getModuleId()); + } + } + return isChild; + } + /** * 批量删除模块 - * + * * @param moduleIds 需要删除的模块主键 * @return 结果 */ @Override - public int deleteSysModuleByModuleIds(Long[] moduleIds) - { + @Transactional(rollbackFor = Exception.class) + public int deleteSysModuleByModuleIds(Long[] moduleIds) { + // 找到所有以moduleIds为pid的交付物 + List children = sysModuleMapper.selectSysModuleByPids(moduleIds); + if (!ObjectUtils.isEmpty(children)) { + // 删除moduleId后,将以该moduleId为父id的交付物的父id置为0 + Long root = 0L; + List list = new ArrayList<>(); + for (SysModule child : children) { + SysModule module = new SysModule(); + module.setModuleId(child.getModuleId()); + module.setModulePid(root); + list.add(module); + } + // 批量更新 + sysModuleMapper.updateSysModules(list); + } return sysModuleMapper.deleteSysModuleByModuleIds(moduleIds); } diff --git a/cat2bug-platform-system/src/main/resources/mapper/system/SysModuleMapper.xml b/cat2bug-platform-system/src/main/resources/mapper/system/SysModuleMapper.xml index f7819f7063ff2c3448e67bf1fcc17475441bcafe..53953a7ccd0c417c3c2ca54cef010d9941e9cbf5 100644 --- a/cat2bug-platform-system/src/main/resources/mapper/system/SysModuleMapper.xml +++ b/cat2bug-platform-system/src/main/resources/mapper/system/SysModuleMapper.xml @@ -18,6 +18,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select m.module_id, m.module_pid, m.module_name, m.remark, m.project_id, mg.children_count from sys_module m + + select m.module_id, m.module_pid, m.module_name, m.remark, m.project_id + from sys_module m + + - + + + insert into sys_module @@ -87,6 +100,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where module_id = #{moduleId} + + + update sys_module + + module_pid = #{item.modulePid}, + module_name = #{item.moduleName}, + remark = #{item.remark}, + project_id = #{item.projectId}, + + WHERE module_id = #{item.moduleId} + + + delete from sys_module where module_id = #{moduleId}