Merge branch 'master-jdk17' of https://gitee.com/zhijiantianya/ruoyi-vue-pro
# Conflicts: # yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileConfigController.java # yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/file/FileController.java # yudao-module-infra/src/main/java/cn/iocoder/yudao/module/infra/service/file/FileServiceImpl.java # yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.java # yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dept/PostServiceImpl.java # yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/dict/DictTypeServiceImpl.java # yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/permission/RoleService.java
This commit is contained in:
@@ -91,7 +91,7 @@ public class PostController {
|
||||
return success(BeanUtils.toBean(pageResult, PostRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export")
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "岗位管理")
|
||||
@PreAuthorize("@ss.hasPermission('system:post:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
|
@@ -58,11 +58,20 @@ public class DictDataController {
|
||||
@Operation(summary = "删除字典数据")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('system:dict:delete')")
|
||||
public CommonResult<Boolean> deleteDictData(Long id) {
|
||||
public CommonResult<Boolean> deleteDictData(@RequestParam("id") Long id) {
|
||||
dictDataService.deleteDictData(id);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete-list")
|
||||
@Operation(summary = "批量删除字典数据")
|
||||
@Parameter(name = "ids", description = "编号列表", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('system:dict:delete')")
|
||||
public CommonResult<Boolean> deleteDictDataList(@RequestParam("ids") List<Long> ids) {
|
||||
dictDataService.deleteDictDataList(ids);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping(value = {"/list-all-simple", "simple-list"})
|
||||
@Operation(summary = "获得全部字典数据列表", description = "一般用于管理后台缓存字典数据在本地")
|
||||
// 无需添加权限认证,因为前端全局都需要
|
||||
@@ -73,7 +82,7 @@ public class DictDataController {
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "/获得字典类型的分页列表")
|
||||
@Operation(summary = "获得字典类型的分页")
|
||||
@PreAuthorize("@ss.hasPermission('system:dict:query')")
|
||||
public CommonResult<PageResult<DictDataRespVO>> getDictTypePage(@Valid DictDataPageReqVO pageReqVO) {
|
||||
PageResult<DictDataDO> pageResult = dictDataService.getDictDataPage(pageReqVO);
|
||||
@@ -89,7 +98,7 @@ public class DictDataController {
|
||||
return success(BeanUtils.toBean(dictData, DictDataRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export")
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出字典数据")
|
||||
@PreAuthorize("@ss.hasPermission('system:dict:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
|
@@ -62,6 +62,15 @@ public class DictTypeController {
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete-list")
|
||||
@Operation(summary = "批量删除字典类型")
|
||||
@Parameter(name = "ids", description = "编号列表", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('system:dict:delete')")
|
||||
public CommonResult<Boolean> deleteDictTypeList(@RequestParam("ids") List<Long> ids) {
|
||||
dictTypeService.deleteDictTypeList(ids);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得字典类型的分页列表")
|
||||
@PreAuthorize("@ss.hasPermission('system:dict:query')")
|
||||
@@ -88,7 +97,7 @@ public class DictTypeController {
|
||||
}
|
||||
|
||||
@Operation(summary = "导出数据类型")
|
||||
@GetMapping("/export")
|
||||
@GetMapping("/export-excel")
|
||||
@PreAuthorize("@ss.hasPermission('system:dict:query')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void export(HttpServletResponse response, @Valid DictTypePageReqVO exportReqVO) throws IOException {
|
||||
|
@@ -44,7 +44,7 @@ public class LoginLogController {
|
||||
return success(BeanUtils.toBean(pageResult, LoginLogRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/export")
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出登录日志 Excel")
|
||||
@PreAuthorize("@ss.hasPermission('system:login-log:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
|
@@ -46,7 +46,7 @@ public class OperateLogController {
|
||||
}
|
||||
|
||||
@Operation(summary = "导出操作日志")
|
||||
@GetMapping("/export")
|
||||
@GetMapping("/export-excel")
|
||||
@PreAuthorize("@ss.hasPermission('system:operate-log:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
public void exportOperateLog(HttpServletResponse response, @Valid OperateLogPageReqVO exportReqVO) throws IOException {
|
||||
|
@@ -12,12 +12,12 @@ import cn.iocoder.yudao.module.system.service.permission.MenuService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
@@ -57,6 +57,15 @@ public class MenuController {
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete-list")
|
||||
@Operation(summary = "批量删除菜单")
|
||||
@Parameter(name = "ids", description = "编号列表", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('system:menu:delete')")
|
||||
public CommonResult<Boolean> deleteMenuList(@RequestParam("ids") List<Long> ids) {
|
||||
menuService.deleteMenuList(ids);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/list")
|
||||
@Operation(summary = "获取菜单列表", description = "用于【菜单管理】界面")
|
||||
@PreAuthorize("@ss.hasPermission('system:menu:query')")
|
||||
|
@@ -7,7 +7,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.*;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleRespVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
|
||||
import cn.iocoder.yudao.module.system.service.permission.RoleService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
@@ -61,6 +63,15 @@ public class RoleController {
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@DeleteMapping("/delete-list")
|
||||
@Operation(summary = "批量删除角色")
|
||||
@Parameter(name = "ids", description = "编号列表", required = true)
|
||||
@PreAuthorize("@ss.hasPermission('system:role:delete')")
|
||||
public CommonResult<Boolean> deleteRoleList(@RequestParam("ids") List<Long> ids) {
|
||||
roleService.deleteRoleList(ids);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得角色信息")
|
||||
@PreAuthorize("@ss.hasPermission('system:role:query')")
|
||||
|
@@ -136,7 +136,7 @@ public class UserController {
|
||||
return success(UserConvert.INSTANCE.convert(user, dept));
|
||||
}
|
||||
|
||||
@GetMapping("/export")
|
||||
@GetMapping("/export-excel")
|
||||
@Operation(summary = "导出用户")
|
||||
@PreAuthorize("@ss.hasPermission('system:user:export')")
|
||||
@ApiAccessLog(operateType = EXPORT)
|
||||
|
@@ -38,6 +38,13 @@ public interface PostService {
|
||||
*/
|
||||
void deletePost(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除岗位信息
|
||||
*
|
||||
* @param ids 岗位编号数组
|
||||
*/
|
||||
void deletePostList(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 获得岗位列表
|
||||
*
|
||||
|
@@ -8,10 +8,10 @@ import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostPageReqV
|
||||
import cn.iocoder.yudao.module.system.controller.admin.dept.vo.post.PostSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.dept.PostDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.dept.PostMapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@@ -58,10 +58,15 @@ public class PostServiceImpl implements PostService {
|
||||
public void deletePost(Long id) {
|
||||
// 校验是否存在
|
||||
validatePostExists(id);
|
||||
// 删除部门
|
||||
// 删除岗位
|
||||
postMapper.deleteById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deletePostList(List<Long> ids) {
|
||||
postMapper.deleteByIds(ids);
|
||||
}
|
||||
|
||||
private void validatePostForCreateOrUpdate(Long id, String name, String code) {
|
||||
// 校验自己存在
|
||||
validatePostExists(id);
|
||||
|
@@ -38,6 +38,13 @@ public interface DictDataService {
|
||||
*/
|
||||
void deleteDictData(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除字典数据
|
||||
*
|
||||
* @param ids 字典数据编号列表
|
||||
*/
|
||||
void deleteDictDataList(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 获得字典数据列表
|
||||
*
|
||||
|
@@ -98,6 +98,11 @@ public class DictDataServiceImpl implements DictDataService {
|
||||
dictDataMapper.deleteById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteDictDataList(List<Long> ids) {
|
||||
dictDataMapper.deleteByIds(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long getDictDataCountByDictType(String dictType) {
|
||||
return dictDataMapper.selectCountByDictType(dictType);
|
||||
|
@@ -36,6 +36,13 @@ public interface DictTypeService {
|
||||
*/
|
||||
void deleteDictType(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除字典类型
|
||||
*
|
||||
* @param ids 字典类型编号列表
|
||||
*/
|
||||
void deleteDictTypeList(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 获得字典类型分页列表
|
||||
*
|
||||
|
@@ -9,9 +9,9 @@ import cn.iocoder.yudao.module.system.controller.admin.dict.vo.type.DictTypeSave
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictTypeDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.dict.DictTypeMapper;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
@@ -87,6 +87,21 @@ public class DictTypeServiceImpl implements DictTypeService {
|
||||
dictTypeMapper.updateToDelete(id, LocalDateTime.now());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteDictTypeList(List<Long> ids) {
|
||||
// 1. 校验是否有字典数据
|
||||
List<DictTypeDO> dictTypes = dictTypeMapper.selectByIds(ids);
|
||||
dictTypes.forEach(dictType -> {
|
||||
if (dictDataService.getDictDataCountByDictType(dictType.getType()) > 0) {
|
||||
throw exception(DICT_TYPE_HAS_CHILDREN);
|
||||
}
|
||||
});
|
||||
|
||||
// 2. 批量删除字典类型
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
ids.forEach(id -> dictTypeMapper.updateToDelete(id, now));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DictTypeDO> getDictTypeList() {
|
||||
return dictTypeMapper.selectList();
|
||||
|
@@ -1,7 +1,7 @@
|
||||
package cn.iocoder.yudao.module.system.service.permission;
|
||||
|
||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuListReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSaveVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -36,6 +36,13 @@ public interface MenuService {
|
||||
*/
|
||||
void deleteMenu(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除菜单
|
||||
*
|
||||
* @param ids 菜单编号数组
|
||||
*/
|
||||
void deleteMenuList(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 获得所有菜单列表
|
||||
*
|
||||
|
@@ -104,6 +104,24 @@ public class MenuServiceImpl implements MenuService {
|
||||
permissionService.processMenuDeleted(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@CacheEvict(value = RedisKeyConstants.PERMISSION_MENU_ID_LIST,
|
||||
allEntries = true) // allEntries 清空所有缓存,因为 Spring Cache 不支持按照 ids 批量删除
|
||||
public void deleteMenuList(List<Long> ids) {
|
||||
// 校验是否还有子菜单
|
||||
ids.forEach(id -> {
|
||||
if (menuMapper.selectCountByParentId(id) > 0) {
|
||||
throw exception(MENU_EXISTS_CHILDREN);
|
||||
}
|
||||
});
|
||||
|
||||
// 标记删除
|
||||
menuMapper.deleteByIds(ids);
|
||||
// 删除授予给角色的权限
|
||||
ids.forEach(id -> permissionService.processMenuDeleted(id));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MenuDO> getMenuList() {
|
||||
return menuMapper.selectList();
|
||||
|
@@ -4,8 +4,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RolePageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.permission.vo.role.RoleSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
|
||||
import jakarta.validation.Valid;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@@ -40,6 +40,13 @@ public interface RoleService {
|
||||
*/
|
||||
void deleteRole(Long id);
|
||||
|
||||
/**
|
||||
* 批量删除角色
|
||||
*
|
||||
* @param ids 角色编号数组
|
||||
*/
|
||||
void deleteRoleList(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 设置角色的数据权限
|
||||
*
|
||||
|
@@ -122,6 +122,18 @@ public class RoleServiceImpl implements RoleService {
|
||||
LogRecordContext.putVariable("role", role);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteRoleList(List<Long> ids) {
|
||||
// 1. 校验是否可以删除
|
||||
ids.forEach(this::validateRoleForUpdate);
|
||||
|
||||
// 2.1 标记删除
|
||||
roleMapper.deleteByIds(ids);
|
||||
// 2.2 删除相关数据
|
||||
ids.forEach(id -> permissionService.processRoleDeleted(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验角色的唯一字段是否重复
|
||||
*
|
||||
|
@@ -69,6 +69,7 @@ import java.util.Objects;
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.MapUtils.findAndThen;
|
||||
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.UTC_MS_WITH_XXX_OFFSET_FORMATTER;
|
||||
import static cn.iocoder.yudao.framework.common.util.date.LocalDateTimeUtils.toEpochSecond;
|
||||
import static cn.iocoder.yudao.framework.common.util.json.JsonUtils.toJsonString;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*;
|
||||
import static java.util.Collections.singletonList;
|
||||
@@ -381,7 +382,7 @@ public class SocialClientServiceImpl implements SocialClientService {
|
||||
WxMaService service = getWxMaService(userType);
|
||||
WxMaOrderShippingInfoNotifyConfirmRequest request = WxMaOrderShippingInfoNotifyConfirmRequest.builder()
|
||||
.transactionId(reqDTO.getTransactionId())
|
||||
.receivedTime(LocalDateTimeUtil.toEpochMilli(reqDTO.getReceivedTime()))
|
||||
.receivedTime(toEpochSecond(reqDTO.getReceivedTime()))
|
||||
.build();
|
||||
try {
|
||||
WxMaOrderShippingInfoBaseResponse response = service.getWxMaOrderShippingService().notifyConfirmReceive(request);
|
||||
|
Reference in New Issue
Block a user