This commit is contained in:
Jerry
2020-05-24 22:59:25 +08:00
parent be7395cf82
commit 5d8aca463c
184 changed files with 4126 additions and 3508 deletions

Binary file not shown.

View File

@@ -3,4 +3,3 @@
在当前工程业务应用服务或Job服务启动前需按如下顺序依次启动下列中间件。 在当前工程业务应用服务或Job服务启动前需按如下顺序依次启动下列中间件。
- XXL-Job (可选仅当启动Job服务时使用) - XXL-Job (可选仅当启动Job服务时使用)
>细节请参考文档:[http://101.200.178.51/development-doc/environment/#xxl-job](http://101.200.178.51/development-doc/environment/#xxl-job)

Binary file not shown.

View File

@@ -3,6 +3,12 @@ package com.orange.admin;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* 应用服务启动类。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@SpringBootApplication @SpringBootApplication
public class MyApplication { public class MyApplication {

View File

@@ -17,7 +17,7 @@ import java.util.*;
* 行政区划数据访问接口类。 * 行政区划数据访问接口类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@RestController @RestController
@RequestMapping("/admin/app/areaCode") @RequestMapping("/admin/app/areaCode")
@@ -32,7 +32,7 @@ public class AreaCodeController {
* @return 字典形式的行政区划列表。 * @return 字典形式的行政区划列表。
*/ */
@GetMapping("/listDictAreaCode") @GetMapping("/listDictAreaCode")
public ResponseResult<?> listDictAreaCode() { public ResponseResult<List<Map<String, Object>>> listDictAreaCode() {
List<AreaCode> resultList = areaCodeService.getAllList(); List<AreaCode> resultList = areaCodeService.getAllList();
return ResponseResult.success(BeanQuery.select( return ResponseResult.success(BeanQuery.select(
"parentId as parentId", "areaId as id", "areaName as name").executeFrom(resultList)); "parentId as parentId", "areaId as id", "areaName as name").executeFrom(resultList));
@@ -45,7 +45,7 @@ public class AreaCodeController {
* @return 按照字典的形式返回下级行政区划列表。 * @return 按照字典的形式返回下级行政区划列表。
*/ */
@GetMapping("/listDictAreaCodeByParentId") @GetMapping("/listDictAreaCodeByParentId")
public ResponseResult<?> listDictAreaCodeByParentId(@RequestParam(required = false) Long parentId) { public ResponseResult<List<Map<String, Object>>> listDictAreaCodeByParentId(@RequestParam(required = false) Long parentId) {
Collection<AreaCode> resultList = areaCodeService.getListByParentId(parentId); Collection<AreaCode> resultList = areaCodeService.getListByParentId(parentId);
if (CollectionUtils.isEmpty(resultList)) { if (CollectionUtils.isEmpty(resultList)) {
return ResponseResult.success(new LinkedList<>()); return ResponseResult.success(new LinkedList<>());

View File

@@ -1,7 +1,7 @@
package com.orange.admin.app.controller; package com.orange.admin.app.controller;
import cn.jimmyshi.beanquery.BeanQuery; import cn.jimmyshi.beanquery.BeanQuery;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.page.PageMethod;
import com.orange.admin.app.model.*; import com.orange.admin.app.model.*;
import com.orange.admin.app.service.*; import com.orange.admin.app.service.*;
import com.orange.admin.upms.model.*; import com.orange.admin.upms.model.*;
@@ -22,7 +22,7 @@ import javax.validation.groups.Default;
* 老师数据源操作控制器类。 * 老师数据源操作控制器类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
@RestController @RestController
@@ -39,28 +39,21 @@ public class TeacherController {
* @return 应答结果对象包含新增对象主键Id。 * @return 应答结果对象包含新增对象主键Id。
*/ */
@PostMapping("/add") @PostMapping("/add")
public ResponseResult<?> add(@MyRequestBody Teacher teacher) { public ResponseResult<JSONObject> add(@MyRequestBody Teacher teacher) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(teacher);
String errorMessage; if (errorMessage != null) {
JSONObject responseData = null; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
do { }
errorMessage = MyCommonUtil.getModelValidationError(teacher); // 验证关联Id的数据合法性
if (errorMessage != null) { CallResult callResult = teacherService.verifyRelatedData(teacher, null);
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; if (!callResult.isSuccess()) {
break; errorMessage = callResult.getErrorMessage();
} return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
// 验证关联Id的数据合法性 }
VerifyResult verifyResult = teacherService.verifyRelatedData(teacher, null); teacher = teacherService.saveNew(teacher);
if (!verifyResult.isSuccess()) { JSONObject responseData = new JSONObject();
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; responseData.put("teacherId", teacher.getTeacherId());
errorMessage = verifyResult.getErrorMessage(); return ResponseResult.success(responseData);
break;
}
teacher = teacherService.saveNew(teacher);
responseData = new JSONObject();
responseData.put("teacherId", teacher.getTeacherId());
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -70,36 +63,28 @@ public class TeacherController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/update") @PostMapping("/update")
public ResponseResult<?> update(@MyRequestBody Teacher teacher) { public ResponseResult<Void> update(@MyRequestBody Teacher teacher) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(teacher, Default.class, UpdateGroup.class);
String errorMessage; if (errorMessage != null) {
do { return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
errorMessage = MyCommonUtil.getModelValidationError(teacher, Default.class, UpdateGroup.class); }
if (errorMessage != null) { // 验证关联Id的数据合法性
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; Teacher originalTeacher = teacherService.getById(teacher.getTeacherId());
break; if (originalTeacher == null) {
} //NOTE: 修改下面方括号中的话述
// 验证关联Id的数据合法性 errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
Teacher originalTeacher = teacherService.getById(teacher.getTeacherId()); return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
if (originalTeacher == null) { }
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; // 验证关联Id的数据合法性
//TODO 修改下面方括号中的话述 CallResult callResult = teacherService.verifyRelatedData(teacher, originalTeacher);
errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!"; if (!callResult.isSuccess()) {
break; errorMessage = callResult.getErrorMessage();
} return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
// 验证关联Id的数据合法性 }
VerifyResult verifyResult = teacherService.verifyRelatedData(teacher, originalTeacher); if (!teacherService.update(teacher, originalTeacher)) {
if (!verifyResult.isSuccess()) { return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; }
errorMessage = verifyResult.getErrorMessage(); return ResponseResult.success();
break;
}
if (!teacherService.update(teacher, originalTeacher)) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -109,29 +94,23 @@ public class TeacherController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/delete") @PostMapping("/delete")
public ResponseResult<?> delete(@MyRequestBody Long teacherId) { public ResponseResult<Void> delete(@MyRequestBody Long teacherId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage;
String errorMessage = null; if (MyCommonUtil.existBlankArgument(teacherId)) {
do { return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
if (MyCommonUtil.existBlankArgument(teacherId)) { }
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; // 验证关联Id的数据合法性
break; Teacher originalTeacher = teacherService.getById(teacherId);
} if (originalTeacher == null) {
// 验证关联Id的数据合法性 // NOTE: 修改下面方括号中的话述
Teacher originalTeacher = teacherService.getById(teacherId); errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
if (originalTeacher == null) { return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; }
//TODO 修改下面方括号中的话述 if (!teacherService.remove(teacherId)) {
errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
if (!teacherService.remove(teacherId)) { return ResponseResult.success();
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -144,13 +123,13 @@ public class TeacherController {
* @return 应答结果对象,包含查询结果集。 * @return 应答结果对象,包含查询结果集。
*/ */
@PostMapping("/list") @PostMapping("/list")
public ResponseResult<?> list( public ResponseResult<JSONObject> list(
@MyRequestBody Teacher teacherFilter, @MyRequestBody Teacher teacherFilter,
@MyRequestBody SysDept sysDeptFilter, @MyRequestBody SysDept sysDeptFilter,
@MyRequestBody MyOrderParam orderParam, @MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
if (pageParam != null) { if (pageParam != null) {
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
} }
String orderBy = MyOrderParam.buildOrderBy(orderParam, Teacher.class); String orderBy = MyOrderParam.buildOrderBy(orderParam, Teacher.class);
List<Teacher> resultList = List<Teacher> resultList =
@@ -166,21 +145,14 @@ public class TeacherController {
*/ */
@GetMapping("/view") @GetMapping("/view")
public ResponseResult<Teacher> view(@RequestParam Long teacherId) { public ResponseResult<Teacher> view(@RequestParam Long teacherId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(teacherId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
Teacher teacher = null; }
do { Teacher teacher = teacherService.getByIdWithRelation(teacherId, MyRelationParam.full());
if (MyCommonUtil.existBlankArgument(teacherId)) { if (teacher == null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
break; }
} return ResponseResult.success(teacher);
teacher = teacherService.getByIdWithRelation(teacherId);
if (teacher == null) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, teacher);
} }
/** /**
@@ -191,8 +163,8 @@ public class TeacherController {
* @return 应答结果对象,包含的数据为 List<Map<String, String>>map中包含两条记录key的值分别是id和namevalue对应具体数据。 * @return 应答结果对象,包含的数据为 List<Map<String, String>>map中包含两条记录key的值分别是id和namevalue对应具体数据。
*/ */
@GetMapping("/listDictTeacher") @GetMapping("/listDictTeacher")
public ResponseResult<?> listDictTeacher(Teacher filter) { public ResponseResult<List<Map<String, Object>>> listDictTeacher(Teacher filter) {
List<Teacher> resultList = teacherService.getListByFilter(filter); List<Teacher> resultList = teacherService.getListByFilter(filter, null);
return ResponseResult.success(BeanQuery.select( return ResponseResult.success(BeanQuery.select(
"teacherId as id", "teacherName as name").executeFrom(resultList)); "teacherId as id", "teacherName as name").executeFrom(resultList));
} }

View File

@@ -1,6 +1,6 @@
package com.orange.admin.app.controller; package com.orange.admin.app.controller;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.page.PageMethod;
import com.orange.admin.app.model.*; import com.orange.admin.app.model.*;
import com.orange.admin.app.service.*; import com.orange.admin.app.service.*;
import com.orange.admin.common.core.object.*; import com.orange.admin.common.core.object.*;
@@ -8,6 +8,7 @@ import com.orange.admin.common.core.util.*;
import com.orange.admin.common.core.constant.ErrorCodeEnum; import com.orange.admin.common.core.constant.ErrorCodeEnum;
import com.orange.admin.common.core.annotation.MyRequestBody; import com.orange.admin.common.core.annotation.MyRequestBody;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -17,7 +18,7 @@ import java.util.*;
* 老师流水统计操作控制器类。 * 老师流水统计操作控制器类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
@RestController @RestController
@@ -36,12 +37,12 @@ public class TeacherTransStatsController {
* @return 应答结果对象,包含查询结果集。 * @return 应答结果对象,包含查询结果集。
*/ */
@PostMapping("/list") @PostMapping("/list")
public ResponseResult<?> list( public ResponseResult<JSONObject> list(
@MyRequestBody TeacherTransStats teacherTransStatsFilter, @MyRequestBody TeacherTransStats teacherTransStatsFilter,
@MyRequestBody MyOrderParam orderParam, @MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
if (pageParam != null) { if (pageParam != null) {
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
} }
String orderBy = MyOrderParam.buildOrderBy(orderParam, TeacherTransStats.class); String orderBy = MyOrderParam.buildOrderBy(orderParam, TeacherTransStats.class);
List<TeacherTransStats> resultList = teacherTransStatsService.getTeacherTransStatsListWithRelation(teacherTransStatsFilter, orderBy); List<TeacherTransStats> resultList = teacherTransStatsService.getTeacherTransStatsListWithRelation(teacherTransStatsFilter, orderBy);
@@ -58,7 +59,7 @@ public class TeacherTransStatsController {
* @return 应答结果对象,包含查询结果集。 * @return 应答结果对象,包含查询结果集。
*/ */
@PostMapping("/listWithGroup") @PostMapping("/listWithGroup")
public ResponseResult<?> listWithGroup( public ResponseResult<JSONObject> listWithGroup(
@MyRequestBody TeacherTransStats teacherTransStatsFilter, @MyRequestBody TeacherTransStats teacherTransStatsFilter,
@MyRequestBody MyGroupParam groupParam, @MyRequestBody MyGroupParam groupParam,
@MyRequestBody MyOrderParam orderParam, @MyRequestBody MyOrderParam orderParam,
@@ -70,7 +71,7 @@ public class TeacherTransStatsController {
ErrorCodeEnum.INVALID_ARGUMENT_FORMAT, "数据参数错误,分组参数不能为空!"); ErrorCodeEnum.INVALID_ARGUMENT_FORMAT, "数据参数错误,分组参数不能为空!");
} }
if (pageParam != null) { if (pageParam != null) {
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
} }
MyGroupCriteria criteria = groupParam.getGroupCriteria(); MyGroupCriteria criteria = groupParam.getGroupCriteria();
List<TeacherTransStats> resultList = teacherTransStatsService.getGroupedTeacherTransStatsListWithRelation( List<TeacherTransStats> resultList = teacherTransStatsService.getGroupedTeacherTransStatsListWithRelation(
@@ -86,20 +87,13 @@ public class TeacherTransStatsController {
*/ */
@GetMapping("/view") @GetMapping("/view")
public ResponseResult<TeacherTransStats> view(@RequestParam Long statsId) { public ResponseResult<TeacherTransStats> view(@RequestParam Long statsId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(statsId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
TeacherTransStats teacherTransStats = null; }
do { TeacherTransStats teacherTransStats = teacherTransStatsService.getByIdWithRelation(statsId, MyRelationParam.full());
if (MyCommonUtil.existBlankArgument(statsId)) { if (teacherTransStats == null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
break; }
} return ResponseResult.success(teacherTransStats);
teacherTransStats = teacherTransStatsService.getByIdWithRelation(statsId);
if (teacherTransStats == null) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, teacherTransStats);
} }
} }

View File

@@ -7,7 +7,7 @@ import com.orange.admin.app.model.AreaCode;
* 行政区划数据操作访问接口。 * 行政区划数据操作访问接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface AreaCodeMapper extends BaseDaoMapper<AreaCode> { public interface AreaCodeMapper extends BaseDaoMapper<AreaCode> {
} }

View File

@@ -12,7 +12,7 @@ import java.util.*;
* 老师数据源数据操作访问接口。 * 老师数据源数据操作访问接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@EnableDataPerm @EnableDataPerm
public interface TeacherMapper extends BaseDaoMapper<Teacher> { public interface TeacherMapper extends BaseDaoMapper<Teacher> {

View File

@@ -11,7 +11,7 @@ import java.util.*;
* 老师流水统计数据操作访问接口。 * 老师流水统计数据操作访问接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@EnableDataPerm @EnableDataPerm
public interface TeacherTransStatsMapper extends BaseDaoMapper<TeacherTransStats> { public interface TeacherTransStatsMapper extends BaseDaoMapper<TeacherTransStats> {

View File

@@ -4,6 +4,12 @@ import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
/**
* 行政区划实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_area_code") @Table(name = "zz_area_code")
public class AreaCode { public class AreaCode {

View File

@@ -20,6 +20,12 @@ import javax.validation.constraints.*;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
/**
* Teacher实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_teacher") @Table(name = "zz_teacher")
public class Teacher { public class Teacher {

View File

@@ -13,6 +13,12 @@ import javax.validation.constraints.*;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
/**
* TeacherTransStats实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_teacher_trans_stats") @Table(name = "zz_teacher_trans_stats")
public class TeacherTransStats { public class TeacherTransStats {

View File

@@ -3,6 +3,12 @@ package com.orange.admin.app.model.constant;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/**
* 性别常量字典对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
public final class Gender { public final class Gender {
/** /**
@@ -14,7 +20,7 @@ public final class Gender {
*/ */
public static final int FEMALE = 0; public static final int FEMALE = 0;
public static final Map<Object, String> DICT_MAP = new HashMap<>(2); private static final Map<Object, String> DICT_MAP = new HashMap<>(2);
static { static {
DICT_MAP.put(MALE, ""); DICT_MAP.put(MALE, "");
DICT_MAP.put(FEMALE, ""); DICT_MAP.put(FEMALE, "");
@@ -26,8 +32,8 @@ public final class Gender {
* @param value 待验证的参数值。 * @param value 待验证的参数值。
* @return 合法返回true否则false。 * @return 合法返回true否则false。
*/ */
public static boolean isValid(int value) { public static boolean isValid(Integer value) {
return DICT_MAP.containsKey(value); return value != null && DICT_MAP.containsKey(value);
} }
/** /**

View File

@@ -3,6 +3,12 @@ package com.orange.admin.app.model.constant;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/**
* 教师职级常量字典对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
public final class TeacherLevelType { public final class TeacherLevelType {
/** /**
@@ -18,7 +24,7 @@ public final class TeacherLevelType {
*/ */
public static final int HIGH = 2; public static final int HIGH = 2;
public static final Map<Object, String> DICT_MAP = new HashMap<>(3); private static final Map<Object, String> DICT_MAP = new HashMap<>(3);
static { static {
DICT_MAP.put(LOWER, "初级"); DICT_MAP.put(LOWER, "初级");
DICT_MAP.put(NORMAL, "中级"); DICT_MAP.put(NORMAL, "中级");
@@ -31,8 +37,8 @@ public final class TeacherLevelType {
* @param value 待验证的参数值。 * @param value 待验证的参数值。
* @return 合法返回true否则false。 * @return 合法返回true否则false。
*/ */
public static boolean isValid(int value) { public static boolean isValid(Integer value) {
return DICT_MAP.containsKey(value); return value != null && DICT_MAP.containsKey(value);
} }
/** /**

View File

@@ -16,7 +16,7 @@ import java.util.List;
* 行政区划的Service类。 * 行政区划的Service类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Service @Service
public class AreaCodeService extends BaseDictService<AreaCode, Long> { public class AreaCodeService extends BaseDictService<AreaCode, Long> {

View File

@@ -5,15 +5,15 @@ import com.orange.admin.app.model.*;
import com.orange.admin.upms.model.*; import com.orange.admin.upms.model.*;
import com.orange.admin.upms.service.SysUserService; import com.orange.admin.upms.service.SysUserService;
import com.orange.admin.upms.service.SysDeptService; import com.orange.admin.upms.service.SysDeptService;
import com.orange.admin.common.core.base.service.BaseService;
import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.base.dao.BaseDaoMapper;
import com.orange.admin.common.core.object.MyWhereCriteria; import com.orange.admin.common.core.object.MyWhereCriteria;
import com.orange.admin.common.core.object.VerifyResult; import com.orange.admin.common.core.object.MyRelationParam;
import com.orange.admin.common.core.object.CallResult;
import com.orange.admin.common.biz.base.service.BaseBizService;
import com.orange.admin.common.biz.util.BasicIdGenerator; import com.orange.admin.common.biz.util.BasicIdGenerator;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import java.util.*; import java.util.*;
@@ -21,10 +21,10 @@ import java.util.*;
* 老师数据源数据操作服务类。 * 老师数据源数据操作服务类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Service @Service
public class TeacherService extends BaseService<Teacher, Long> { public class TeacherService extends BaseBizService<Teacher, Long> {
@Autowired @Autowired
private TeacherMapper teacherMapper; private TeacherMapper teacherMapper;
@@ -51,7 +51,7 @@ public class TeacherService extends BaseService<Teacher, Long> {
* @param teacher 新增对象。 * @param teacher 新增对象。
* @return 返回新增对象。 * @return 返回新增对象。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public Teacher saveNew(Teacher teacher) { public Teacher saveNew(Teacher teacher) {
teacher.setTeacherId(idGenerator.nextLongId()); teacher.setTeacherId(idGenerator.nextLongId());
teacher.setRegisterDate(new Date()); teacher.setRegisterDate(new Date());
@@ -62,11 +62,11 @@ public class TeacherService extends BaseService<Teacher, Long> {
/** /**
* 更新数据对象。 * 更新数据对象。
* *
* @param teacher 更新的对象。 * @param teacher 更新的对象。
* @param originalTeacher 原有数据对象。 * @param originalTeacher 原有数据对象。
* @return 成功返回true否则false。 * @return 成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean update(Teacher teacher, Teacher originalTeacher) { public boolean update(Teacher teacher, Teacher originalTeacher) {
teacher.setRegisterDate(originalTeacher.getRegisterDate()); teacher.setRegisterDate(originalTeacher.getRegisterDate());
return teacherMapper.updateByPrimaryKey(teacher) == 1; return teacherMapper.updateByPrimaryKey(teacher) == 1;
@@ -78,25 +78,17 @@ public class TeacherService extends BaseService<Teacher, Long> {
* @param teacherId 主键Id。 * @param teacherId 主键Id。
* @return 成功返回true否则false。 * @return 成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean remove(Long teacherId) { public boolean remove(Long teacherId) {
Teacher teacher = teacherMapper.selectByPrimaryKey(teacherId); return teacherMapper.deleteByPrimaryKey(teacherId) != 0;
if (teacher == null) {
return false;
}
// 这里先删除主数据
if (teacherMapper.deleteByPrimaryKey(teacherId) == 0) {
return false;
}
// 这里可继续删除关联数据。 // 这里可继续删除关联数据。
return true;
} }
/** /**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getTeacherListWithRelation)方法。 * 如果需要同时获取关联数据,请移步(getTeacherListWithRelation)方法。
* *
* @param filter 过滤对象。 * @param filter 过滤对象。
* @param orderBy 排序参数。 * @param orderBy 排序参数。
* @return 查询结果集。 * @return 查询结果集。
*/ */
@@ -117,7 +109,7 @@ public class TeacherService extends BaseService<Teacher, Long> {
List<Teacher> resultList = List<Teacher> resultList =
teacherMapper.getTeacherListEx(filter, sysDeptFilter, orderBy); teacherMapper.getTeacherListEx(filter, sysDeptFilter, orderBy);
Map<String, List<MyWhereCriteria>> criteriaMap = buildAggregationAdditionalWhereCriteria(); Map<String, List<MyWhereCriteria>> criteriaMap = buildAggregationAdditionalWhereCriteria();
this.buildAllRelationForDataList(resultList, false, criteriaMap); this.buildRelationForDataList(resultList, MyRelationParam.normal(), criteriaMap);
return resultList; return resultList;
} }
@@ -128,24 +120,18 @@ public class TeacherService extends BaseService<Teacher, Long> {
* @param originalTeacher 原有数据对象。 * @param originalTeacher 原有数据对象。
* @return 数据全部正确返回true否则false。 * @return 数据全部正确返回true否则false。
*/ */
public VerifyResult verifyRelatedData(Teacher teacher, Teacher originalTeacher) { public CallResult verifyRelatedData(Teacher teacher, Teacher originalTeacher) {
String errorMessage = null; String errorMessageFormat = "数据验证失败,关联的%s并不存在请刷新后重试";
do { //这里是基于字典的验证。
//这里是基于字典的验证。 if (this.needToVerify(teacher, originalTeacher, Teacher::getSchoolId)
if (this.needToVerify(teacher, originalTeacher, Teacher::getSchoolId)) { && !sysDeptService.existId(teacher.getSchoolId())) {
if (!sysDeptService.existId(teacher.getSchoolId())) { return CallResult.error(String.format(errorMessageFormat, "所属校区"));
errorMessage = "数据验证失败,关联的所属校区并不存在,请刷新后重试!"; }
break; //这里是基于字典的验证。
} if (this.needToVerify(teacher, originalTeacher, Teacher::getUserId)
} && !sysUserService.existId(teacher.getUserId())) {
//这里是基于字典的验证。 return CallResult.error(String.format(errorMessageFormat, "绑定用户"));
if (this.needToVerify(teacher, originalTeacher, Teacher::getUserId)) { }
if (!sysUserService.existId(teacher.getUserId())) { return CallResult.ok();
errorMessage = "数据验证失败,关联的绑定用户并不存在,请刷新后重试!";
break;
}
}
} while (false);
return VerifyResult.create(errorMessage);
} }
} }

View File

@@ -3,9 +3,10 @@ package com.orange.admin.app.service;
import com.orange.admin.app.dao.*; import com.orange.admin.app.dao.*;
import com.orange.admin.app.model.*; import com.orange.admin.app.model.*;
import com.orange.admin.upms.service.SysDeptService; import com.orange.admin.upms.service.SysDeptService;
import com.orange.admin.common.core.base.service.BaseService;
import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.base.dao.BaseDaoMapper;
import com.orange.admin.common.core.object.MyWhereCriteria; import com.orange.admin.common.core.object.MyWhereCriteria;
import com.orange.admin.common.core.object.MyRelationParam;
import com.orange.admin.common.biz.base.service.BaseBizService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -15,10 +16,10 @@ import java.util.*;
* 老师流水统计数据操作服务类。 * 老师流水统计数据操作服务类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Service @Service
public class TeacherTransStatsService extends BaseService<TeacherTransStats, Long> { public class TeacherTransStatsService extends BaseBizService<TeacherTransStats, Long> {
@Autowired @Autowired
private TeacherTransStatsMapper teacherTransStatsMapper; private TeacherTransStatsMapper teacherTransStatsMapper;
@@ -43,7 +44,7 @@ public class TeacherTransStatsService extends BaseService<TeacherTransStats, Lon
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getTeacherTransStatsListWithRelation)方法。 * 如果需要同时获取关联数据,请移步(getTeacherTransStatsListWithRelation)方法。
* *
* @param filter 过滤对象。 * @param filter 过滤对象。
* @param orderBy 排序参数。 * @param orderBy 排序参数。
* @return 查询结果集。 * @return 查询结果集。
*/ */
@@ -62,7 +63,7 @@ public class TeacherTransStatsService extends BaseService<TeacherTransStats, Lon
public List<TeacherTransStats> getTeacherTransStatsListWithRelation(TeacherTransStats filter, String orderBy) { public List<TeacherTransStats> getTeacherTransStatsListWithRelation(TeacherTransStats filter, String orderBy) {
List<TeacherTransStats> resultList = teacherTransStatsMapper.getTeacherTransStatsList(filter, orderBy); List<TeacherTransStats> resultList = teacherTransStatsMapper.getTeacherTransStatsList(filter, orderBy);
Map<String, List<MyWhereCriteria>> criteriaMap = buildAggregationAdditionalWhereCriteria(); Map<String, List<MyWhereCriteria>> criteriaMap = buildAggregationAdditionalWhereCriteria();
this.buildAllRelationForDataList(resultList, false, criteriaMap); this.buildRelationForDataList(resultList, MyRelationParam.normal(), criteriaMap);
return resultList; return resultList;
} }
@@ -81,7 +82,7 @@ public class TeacherTransStatsService extends BaseService<TeacherTransStats, Lon
teacherTransStatsMapper.getGroupedTeacherTransStatsList(filter, groupSelect, groupBy, orderBy); teacherTransStatsMapper.getGroupedTeacherTransStatsList(filter, groupSelect, groupBy, orderBy);
// NOTE: 这里只是包含了关联数据,聚合计算数据没有包含。 // NOTE: 这里只是包含了关联数据,聚合计算数据没有包含。
// 主要原因是由于聚合字段通常被视为普通字段使用不会在group by的从句中出现语义上也不会在此关联。 // 主要原因是由于聚合字段通常被视为普通字段使用不会在group by的从句中出现语义上也不会在此关联。
this.buildRelationForDataList(resultList, false); this.buildRelationForDataList(resultList, MyRelationParam.normal(), null);
return resultList; return resultList;
} }
} }

View File

@@ -8,7 +8,7 @@ import org.springframework.context.annotation.Configuration;
* 应用程序自定义的程序属性配置文件。 * 应用程序自定义的程序属性配置文件。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Data @Data
@Configuration @Configuration

View File

@@ -15,7 +15,7 @@ import java.util.concurrent.TimeUnit;
* 使用Caffeine作为本地缓存库 * 使用Caffeine作为本地缓存库
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Configuration @Configuration
@EnableCaching @EnableCaching
@@ -32,23 +32,19 @@ public class CacheConfig {
/** /**
* 专门存储用户权限的缓存。 * 专门存储用户权限的缓存。
*/ */
UserPermissionCache(1800), USER_PERMISSION_CACHE(1800, 10000),
/** /**
* 专门存储用户数据权限的缓存。 * 专门存储用户数据权限的缓存。
*/ */
DataPermissionCache(7200), DATA_PERMISSION_CACHE(7200, 10000),
/** /**
* 缺省全局缓存(时间是24小时)。 * 缺省全局缓存(时间是24小时)。
*/ */
GlobalCache(86400,20000); GLOBAL_CACHE(86400,20000);
CacheEnum() { CacheEnum() {
} }
CacheEnum(int ttl) {
this.ttl = ttl;
}
CacheEnum(int ttl, int maxSize) { CacheEnum(int ttl, int maxSize) {
this.ttl = ttl; this.ttl = ttl;
this.maxSize = maxSize; this.maxSize = maxSize;
@@ -67,17 +63,9 @@ public class CacheConfig {
return maxSize; return maxSize;
} }
public void setMaxSize(int maxSize) {
this.maxSize = maxSize;
}
public int getTtl() { public int getTtl() {
return ttl; return ttl;
} }
public void setTtl(int ttl) {
this.ttl = ttl;
}
} }
/** /**

View File

@@ -14,7 +14,7 @@ import javax.sql.DataSource;
* 数据源配置Bean对象。 * 数据源配置Bean对象。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Configuration @Configuration
@EnableTransactionManagement @EnableTransactionManagement

View File

@@ -1,7 +1,6 @@
package com.orange.admin.config; package com.orange.admin.config;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -16,26 +15,21 @@ import java.nio.charset.StandardCharsets;
* 这里主要配置Web的各种过滤器和监听器等Servlet容器组件。 * 这里主要配置Web的各种过滤器和监听器等Servlet容器组件。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Configuration @Configuration
public class FilterConfig { public class FilterConfig {
@Autowired
private ApplicationConfig applicationConfig;
/** /**
* 配置Ajax跨域过滤器 * 配置Ajax跨域过滤器
*/ */
@Bean @Bean
public CorsFilter corsFilterRegistration() { public CorsFilter corsFilterRegistration(ApplicationConfig applicationConfig) {
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource(); UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration(); CorsConfiguration corsConfiguration = new CorsConfiguration();
if (StringUtils.isNotBlank(applicationConfig.getCredentialIpList())) { if (StringUtils.isNotBlank(applicationConfig.getCredentialIpList())) {
String[] credentialIpList = StringUtils.split(applicationConfig.getCredentialIpList(), ","); String[] credentialIpList = StringUtils.split(applicationConfig.getCredentialIpList(), ",");
if (credentialIpList.length == 0) { if (credentialIpList.length > 0) {
corsConfiguration.addAllowedOrigin("*");
} else {
for (String ip : credentialIpList) { for (String ip : credentialIpList) {
corsConfiguration.addAllowedOrigin(ip); corsConfiguration.addAllowedOrigin(ip);
} }

View File

@@ -16,10 +16,10 @@ import java.nio.charset.StandardCharsets;
import java.util.List; import java.util.List;
/** /**
* 所有的项目拦截器都在这里集中配置 * 所有的项目拦截器都在这里集中配置
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Configuration @Configuration
public class InterceptorConfig implements WebMvcConfigurer { public class InterceptorConfig implements WebMvcConfigurer {

View File

@@ -33,7 +33,7 @@ import java.util.stream.Collectors;
* 登录用户Token验证、生成和权限验证的拦截器。 * 登录用户Token验证、生成和权限验证的拦截器。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
public class AuthenticationInterceptor implements HandlerInterceptor { public class AuthenticationInterceptor implements HandlerInterceptor {
@@ -82,7 +82,7 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
return false; return false;
} }
String sessionId = (String) c.get("sessionId"); String sessionId = (String) c.get("sessionId");
Cache cache = cacheManager.getCache(CacheConfig.CacheEnum.GlobalCache.name()); Cache cache = cacheManager.getCache(CacheConfig.CacheEnum.GLOBAL_CACHE.name());
TokenData tokenData = cache.get(sessionId, TokenData.class); TokenData tokenData = cache.get(sessionId, TokenData.class);
if (tokenData == null) { if (tokenData == null) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
@@ -91,17 +91,15 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
return false; return false;
} }
TokenData.addToRequest(tokenData); TokenData.addToRequest(tokenData);
if (!tokenData.getIsAdmin()) { // 如果url在权限资源白名单中则不需要进行鉴权操作
// 如果url在权限资源白名单中则不需要进行鉴权操作 if (!tokenData.getIsAdmin() && !whitelistPermSet.contains(url)) {
if (!whitelistPermSet.contains(url)) { Set<String> urlSet = sysPermService.getCacheableSysPermSetByUserId(
Set<String> urlSet = sysPermService.getCacheableSysPermSetByUserId( tokenData.getSessionId(), tokenData.getUserId());
tokenData.getSessionId(), tokenData.getUserId()); if (!urlSet.contains(url)) {
if (!urlSet.contains(url)) { response.setStatus(HttpServletResponse.SC_FORBIDDEN);
response.setStatus(HttpServletResponse.SC_FORBIDDEN); this.outputResponseMessage(response,
this.outputResponseMessage(response, ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION));
ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION)); return false;
return false;
}
} }
} }
if (JwtUtil.needToRefresh(c)) { if (JwtUtil.needToRefresh(c)) {
@@ -114,11 +112,13 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
@Override @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception { ModelAndView modelAndView) throws Exception {
// 这里需要空注解否则sonar会不happy。
} }
@Override @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception { throws Exception {
// 这里需要空注解否则sonar会不happy。
} }
private void outputResponseMessage(HttpServletResponse response, ResponseResult<Object> respObj) { private void outputResponseMessage(HttpServletResponse response, ResponseResult<Object> respObj) {

View File

@@ -1,24 +1,29 @@
package com.orange.admin.interceptor; package com.orange.admin.interceptor;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.ReflectUtil;
import com.orange.admin.common.core.constant.DataPermRuleType; import com.orange.admin.common.core.constant.DataPermRuleType;
import com.orange.admin.common.core.annotation.DeptFilterColumn; import com.orange.admin.common.core.annotation.DeptFilterColumn;
import com.orange.admin.common.core.annotation.UserFilterColumn; import com.orange.admin.common.core.annotation.UserFilterColumn;
import com.orange.admin.common.core.annotation.EnableDataPerm; import com.orange.admin.common.core.annotation.EnableDataPerm;
import com.orange.admin.common.core.exception.NoDataPermException;
import com.orange.admin.common.core.object.GlobalThreadLocal; import com.orange.admin.common.core.object.GlobalThreadLocal;
import com.orange.admin.common.core.object.TokenData; import com.orange.admin.common.core.object.TokenData;
import com.orange.admin.common.core.util.ApplicationContextHolder; import com.orange.admin.common.core.util.ApplicationContextHolder;
import com.orange.admin.common.core.util.ContextUtil; import com.orange.admin.common.core.util.ContextUtil;
import com.orange.admin.common.core.util.MyModelUtil; import com.orange.admin.common.core.util.MyModelUtil;
import com.orange.admin.config.CacheConfig; import com.orange.admin.config.CacheConfig;
import com.orange.admin.upms.dao.SysDataPermMapper;
import lombok.Data; import lombok.Data;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.operators.conditional.AndExpression; import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.select.FromItem; import net.sf.jsqlparser.statement.select.FromItem;
import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.PlainSelect;
import net.sf.jsqlparser.statement.select.Select; import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.select.SubSelect; import net.sf.jsqlparser.statement.select.SubSelect;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.executor.statement.RoutingStatementHandler; import org.apache.ibatis.executor.statement.RoutingStatementHandler;
@@ -30,7 +35,6 @@ import org.apache.ibatis.plugin.*;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.Cache; import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager; import org.springframework.cache.CacheManager;
import org.springframework.dao.PermissionDeniedDataAccessException;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
@@ -43,7 +47,7 @@ import java.util.*;
* Mybatis拦截器。目前用于数据权限的统一拦截和注入处理。 * Mybatis拦截器。目前用于数据权限的统一拦截和注入处理。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})})
@Slf4j @Slf4j
@@ -56,7 +60,7 @@ public class MybatisDataPermInterceptor implements Interceptor {
/** /**
* HTTP Head或HTTP Request Parameter中菜单Id数据的KEY名称。 * HTTP Head或HTTP Request Parameter中菜单Id数据的KEY名称。
*/ */
private final static String MENU_ID_HEADER_KEY = "MenuId"; private static final String MENU_ID_HEADER_KEY = "MenuId";
/** /**
* 对象缓存。由于Set是排序后的因为在查找排除方法名称时效率更高。 * 对象缓存。由于Set是排序后的因为在查找排除方法名称时效率更高。
* 在应用服务启动的监听器中(LoadDataPermMapperListener),会调用当前对象的(loadMappersWithDataPerm)方法,加载缓存。 * 在应用服务启动的监听器中(LoadDataPermMapperListener),会调用当前对象的(loadMappersWithDataPerm)方法,加载缓存。
@@ -67,6 +71,7 @@ public class MybatisDataPermInterceptor implements Interceptor {
* 预先加载需要数据权限过滤的Mapper到缓存该函数会在(LoadDataPermMapperListener)监听器中调用。 * 预先加载需要数据权限过滤的Mapper到缓存该函数会在(LoadDataPermMapperListener)监听器中调用。
*/ */
public void loadMappersWithDataPerm() { public void loadMappersWithDataPerm() {
@SuppressWarnings("all")
Map<String, Mapper> mapperMap = Map<String, Mapper> mapperMap =
ApplicationContextHolder.getApplicationContext().getBeansOfType(Mapper.class); ApplicationContextHolder.getApplicationContext().getBeansOfType(Mapper.class);
for (Mapper<?> mapperProxy : mapperMap.values()) { for (Mapper<?> mapperProxy : mapperMap.values()) {
@@ -80,55 +85,59 @@ public class MybatisDataPermInterceptor implements Interceptor {
(Class<?>) ReflectUtil.getFieldValue(proxy, "mapperInterface"); (Class<?>) ReflectUtil.getFieldValue(proxy, "mapperInterface");
EnableDataPerm rule = mapperClass.getAnnotation(EnableDataPerm.class); EnableDataPerm rule = mapperClass.getAnnotation(EnableDataPerm.class);
if (rule != null) { if (rule != null) {
// 由于给数据权限Mapper添加@EnableDataPerm将会导致无限递归因此这里检测到之后 loadRules(mapperClass, rule);
// 会在系统启动加载监听器的时候,及时抛出异常。
if ("SysDataPermMapper".equals(mapperClass.getSimpleName())) {
throw new IllegalStateException("Add @EnableDataPerm annotation to SysDataPermMapper is ILLEGAL!");
}
// 这里开始获取当前Mapper已经声明的的SqlId中有哪些是需要排除在外的。
// 排除在外的将不进行数据过滤。
Set<String> excludeMethodNameSet = null;
String[] excludes = rule.excluseMethodName();
if (excludes.length > 0) {
excludeMethodNameSet = new HashSet<>();
for (String excludeName : excludes) {
excludeMethodNameSet.add(excludeName);
// 这里是给tk.mapper和pagehelper中分页查询先获取数据总量的查询。
excludeMethodNameSet.add(excludeName + "_COUNT");
}
}
// 获取Mapper关联的主表信息包括表名user过滤字段名和dept过滤字段名。
Class<?> modelClazz = (Class<?>)
((ParameterizedType) mapperClass.getGenericInterfaces()[0]).getActualTypeArguments()[0];
Field[] fields = ReflectUtil.getFields(modelClazz);
Field userFilterField = null, deptFilterField = null;
for (Field field : fields) {
if (null != field.getAnnotation(UserFilterColumn.class)) {
userFilterField = field;
}
if (null != field.getAnnotation(DeptFilterColumn.class)) {
deptFilterField = field;
}
if (userFilterField != null && deptFilterField != null) {
break;
}
}
// 通过注解解析与Mapper关联的Model并获取与数据权限关联的信息并将结果缓存。
ModelDataPermInfo info = new ModelDataPermInfo();
info.setMainTableName(MyModelUtil.mapToTableName(modelClazz));
info.setExcludeMethodNameSet(excludeMethodNameSet);
if (userFilterField != null) {
info.setUserFilterColumn(MyModelUtil.mapToColumnName(userFilterField, modelClazz));
}
if (deptFilterField != null) {
info.setDeptFilterColumn(MyModelUtil.mapToColumnName(deptFilterField, modelClazz));
}
String className = mapperClass.getName();
cacheMap.put(mapperClass.getName(), info);
} }
} }
} }
private void loadRules(Class<?> mapperClass, EnableDataPerm rule) {
// 由于给数据权限Mapper添加@EnableDataPerm将会导致无限递归因此这里检测到之后
// 会在系统启动加载监听器的时候,及时抛出异常。
if (mapperClass.equals(SysDataPermMapper.class)) {
throw new IllegalStateException("Add @EnableDataPerm annotation to SysDataPermMapper is ILLEGAL!");
}
// 这里开始获取当前Mapper已经声明的的SqlId中有哪些是需要排除在外的。
// 排除在外的将不进行数据过滤。
Set<String> excludeMethodNameSet = null;
String[] excludes = rule.excluseMethodName();
if (excludes.length > 0) {
excludeMethodNameSet = new HashSet<>();
for (String excludeName : excludes) {
excludeMethodNameSet.add(excludeName);
// 这里是给tk.mapper和pagehelper中分页查询先获取数据总量的查询。
excludeMethodNameSet.add(excludeName + "_COUNT");
}
}
// 获取Mapper关联的主表信息包括表名user过滤字段名和dept过滤字段名。
Class<?> modelClazz = (Class<?>)
((ParameterizedType) mapperClass.getGenericInterfaces()[0]).getActualTypeArguments()[0];
Field[] fields = ReflectUtil.getFields(modelClazz);
Field userFilterField = null;
Field deptFilterField = null;
for (Field field : fields) {
if (null != field.getAnnotation(UserFilterColumn.class)) {
userFilterField = field;
}
if (null != field.getAnnotation(DeptFilterColumn.class)) {
deptFilterField = field;
}
if (userFilterField != null && deptFilterField != null) {
break;
}
}
// 通过注解解析与Mapper关联的Model并获取与数据权限关联的信息并将结果缓存。
ModelDataPermInfo info = new ModelDataPermInfo();
info.setMainTableName(MyModelUtil.mapToTableName(modelClazz));
info.setExcludeMethodNameSet(excludeMethodNameSet);
if (userFilterField != null) {
info.setUserFilterColumn(MyModelUtil.mapToColumnName(userFilterField, modelClazz));
}
if (deptFilterField != null) {
info.setDeptFilterColumn(MyModelUtil.mapToColumnName(deptFilterField, modelClazz));
}
cacheMap.put(mapperClass.getName(), info);
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
public Object intercept(Invocation invocation) throws Throwable { public Object intercept(Invocation invocation) throws Throwable {
@@ -149,7 +158,7 @@ public class MybatisDataPermInterceptor implements Interceptor {
SqlCommandType commandType = mappedStatement.getSqlCommandType(); SqlCommandType commandType = mappedStatement.getSqlCommandType();
TokenData tokenData = TokenData.takeFromRequest(); TokenData tokenData = TokenData.takeFromRequest();
// 数据过滤权限中只是过滤SELECT语句。如果是管理员则不参与数据权限的数据过滤显示全部数据。 // 数据过滤权限中只是过滤SELECT语句。如果是管理员则不参与数据权限的数据过滤显示全部数据。
if (commandType != SqlCommandType.SELECT || tokenData == null || tokenData.getIsAdmin()) { if (commandType != SqlCommandType.SELECT || tokenData == null || Boolean.TRUE.equals(tokenData.getIsAdmin())) {
return invocation.proceed(); return invocation.proceed();
} }
String sqlId = mappedStatement.getId(); String sqlId = mappedStatement.getId();
@@ -158,107 +167,111 @@ public class MybatisDataPermInterceptor implements Interceptor {
String methodName = StringUtils.substring(sqlId, pos + 1); String methodName = StringUtils.substring(sqlId, pos + 1);
// 先从缓存中查找当前Mapper是否存在。 // 先从缓存中查找当前Mapper是否存在。
ModelDataPermInfo info = cacheMap.get(className); ModelDataPermInfo info = cacheMap.get(className);
if (info != null) { // 再次查找当前方法是否为排除方法,如果不是,就参与数据权限注入过滤。
// 再次查找当前方法是否为排除方法,如果不是,就参与数据权限注入过滤。 if (info != null && !CollUtil.contains(info.getExcludeMethodNameSet(), methodName)) {
if (info.getExcludeMethodNameSet() == null String menuId = ContextUtil.getHttpRequest().getHeader(MENU_ID_HEADER_KEY);
|| !info.getExcludeMethodNameSet().contains(methodName)) { if (StringUtils.isBlank(menuId)) {
String menuId = ContextUtil.getHttpRequest().getHeader(MENU_ID_HEADER_KEY); menuId = ContextUtil.getHttpRequest().getParameter(MENU_ID_HEADER_KEY);
if (StringUtils.isBlank(menuId)) { if (StringUtils.isBlank(menuId)) {
menuId = ContextUtil.getHttpRequest().getParameter(MENU_ID_HEADER_KEY); throw new IllegalStateException(
if (StringUtils.isBlank(menuId)) { "No [ MENU_ID ] key found in Http Header for SQL_ID [ " + sqlId + " ].");
throw new IllegalStateException(
"No [ MENU_ID ] key found in Http Header for SQL_ID [ " + sqlId + " ].");
}
} }
Cache cache = cacheManager.getCache(CacheConfig.CacheEnum.DataPermissionCache.name());
Map<Object, Map<Integer, String>> menuIdAndDataPermMap =
(Map<Object, Map<Integer, String>>) cache.get(tokenData.getSessionId(), Map.class);
if (menuIdAndDataPermMap == null) {
throw new PermissionDeniedDataAccessException(
"No Related DataPerm found with SESSION_ID [ " + tokenData.getSessionId() + " ].", null);
}
Map<Integer, String> dataPermMap = menuIdAndDataPermMap.get(Long.valueOf(menuId));
if (MapUtils.isEmpty(dataPermMap)) {
throw new PermissionDeniedDataAccessException(
"No Related DataPerm found with MENU_ID [ " + menuId + " ] for SQL_ID [ " + sqlId + " ].", null);
}
if (dataPermMap.containsKey(DataPermRuleType.TYPE_ALL)) {
return invocation.proceed();
}
BoundSql boundSql = delegate.getBoundSql();
String sql = boundSql.getSql();
Select select = (Select) CCJSqlParserUtil.parse(sql);
PlainSelect selectBody = (PlainSelect) select.getSelectBody();
FromItem fromItem = selectBody.getFromItem();
PlainSelect subSelect = null;
if (fromItem instanceof SubSelect) {
subSelect = (PlainSelect) ((SubSelect) fromItem).getSelectBody();
}
List<String> criteriaList = new LinkedList<>();
for (Map.Entry<Integer, String> entry : dataPermMap.entrySet()) {
Integer ruleType = entry.getKey();
if (ruleType == DataPermRuleType.TYPE_USER_ONLY) {
if (StringUtils.isNotBlank(info.getUserFilterColumn())) {
StringBuilder filter = new StringBuilder(64);
filter.append(info.getMainTableName())
.append(".")
.append(info.getUserFilterColumn())
.append(" = ")
.append(tokenData.getUserId());
criteriaList.add(filter.toString());
}
} else {
if (StringUtils.isNotBlank(info.getDeptFilterColumn())) {
StringBuilder filter = new StringBuilder(128);
if (ruleType == DataPermRuleType.TYPE_DEPT_ONLY) {
filter.append(info.getMainTableName())
.append(".")
.append(info.getDeptFilterColumn())
.append(" = ")
.append(tokenData.getDeptId());
} else if (ruleType == DataPermRuleType.TYPE_CUSTOM_DETP_LIST) {
filter.append(info.getMainTableName())
.append(".")
.append(info.getDeptFilterColumn())
.append(" IN (")
.append(entry.getValue())
.append(") ");
}
criteriaList.add(filter.toString());
}
}
}
if (criteriaList.size() > 0) {
StringBuilder filterBuilder = new StringBuilder(128);
filterBuilder.append("(");
filterBuilder.append(StringUtils.join(criteriaList, " OR "));
filterBuilder.append(")");
String dataFilter = filterBuilder.toString();
if (subSelect != null) {
if (subSelect.getWhere() == null) {
subSelect.setWhere(CCJSqlParserUtil.parseCondExpression(dataFilter));
} else {
AndExpression and = new AndExpression(
CCJSqlParserUtil.parseCondExpression(dataFilter), subSelect.getWhere());
subSelect.setWhere(and);
}
} else {
if (selectBody.getWhere() == null) {
selectBody.setWhere(CCJSqlParserUtil.parseCondExpression(dataFilter));
} else {
AndExpression and = new AndExpression(
CCJSqlParserUtil.parseCondExpression(dataFilter), selectBody.getWhere());
selectBody.setWhere(and);
}
}
}
sql = select.toString();
ReflectUtil.setFieldValue(boundSql, "sql", sql);
} }
Cache cache = cacheManager.getCache(CacheConfig.CacheEnum.DATA_PERMISSION_CACHE.name());
Map<Object, Map<Integer, String>> menuIdAndDataPermMap =
(Map<Object, Map<Integer, String>>) cache.get(tokenData.getSessionId(), Map.class);
if (menuIdAndDataPermMap == null) {
throw new NoDataPermException(
"No Related DataPerm found with SESSION_ID [ " + tokenData.getSessionId() + " ].");
}
Map<Integer, String> dataPermMap = menuIdAndDataPermMap.get(Long.valueOf(menuId));
if (MapUtils.isEmpty(dataPermMap)) {
throw new NoDataPermException(
"No Related DataPerm found with MENU_ID [ " + menuId + " ] for SQL_ID [ " + sqlId + " ].");
}
processDataPerm(info, dataPermMap, delegate.getBoundSql());
} }
return invocation.proceed(); return invocation.proceed();
} }
private void processDataPerm(ModelDataPermInfo info, Map<Integer, String> dataPermMap, BoundSql boundSql)
throws JSQLParserException {
if (dataPermMap.containsKey(DataPermRuleType.TYPE_ALL)) {
return;
}
String sql = boundSql.getSql();
Select select = (Select) CCJSqlParserUtil.parse(sql);
PlainSelect selectBody = (PlainSelect) select.getSelectBody();
FromItem fromItem = selectBody.getFromItem();
PlainSelect subSelect = null;
if (fromItem instanceof SubSelect) {
subSelect = (PlainSelect) ((SubSelect) fromItem).getSelectBody();
}
List<String> criteriaList = new LinkedList<>();
for (Map.Entry<Integer, String> entry : dataPermMap.entrySet()) {
String filterClause = processDataPermRule(info, entry.getKey(), entry.getValue());
if (StringUtils.isNotBlank(filterClause)) {
criteriaList.add(filterClause);
}
}
if (CollectionUtils.isNotEmpty(criteriaList)) {
StringBuilder filterBuilder = new StringBuilder(128);
filterBuilder.append("(");
filterBuilder.append(StringUtils.join(criteriaList, " OR "));
filterBuilder.append(")");
String dataFilter = filterBuilder.toString();
if (subSelect != null) {
buildWhereClause(subSelect, dataFilter);
} else {
buildWhereClause(selectBody, dataFilter);
}
}
sql = select.toString();
ReflectUtil.setFieldValue(boundSql, "sql", sql);
}
private String processDataPermRule(ModelDataPermInfo info, Integer ruleType, String deptIds) {
TokenData tokenData = TokenData.takeFromRequest();
StringBuilder filter = new StringBuilder(128);
if (ruleType == DataPermRuleType.TYPE_USER_ONLY) {
if (StringUtils.isNotBlank(info.getUserFilterColumn())) {
filter.append(info.getMainTableName())
.append(".")
.append(info.getUserFilterColumn())
.append(" = ")
.append(tokenData.getUserId());
}
} else {
if (StringUtils.isNotBlank(info.getDeptFilterColumn())) {
if (ruleType == DataPermRuleType.TYPE_DEPT_ONLY) {
filter.append(info.getMainTableName())
.append(".")
.append(info.getDeptFilterColumn())
.append(" = ")
.append(tokenData.getDeptId());
} else if (ruleType == DataPermRuleType.TYPE_CUSTOM_DETP_LIST) {
filter.append(info.getMainTableName())
.append(".")
.append(info.getDeptFilterColumn())
.append(" IN (")
.append(deptIds)
.append(") ");
}
}
}
return filter.toString();
}
private void buildWhereClause(PlainSelect select, String dataFilter) throws JSQLParserException {
if (select.getWhere() == null) {
select.setWhere(CCJSqlParserUtil.parseCondExpression(dataFilter));
} else {
AndExpression and = new AndExpression(
CCJSqlParserUtil.parseCondExpression(dataFilter), select.getWhere());
select.setWhere(and);
}
}
@Override @Override
public Object plugin(Object target) { public Object plugin(Object target) {
return Plugin.wrap(target, this); return Plugin.wrap(target, this);
@@ -266,7 +279,7 @@ public class MybatisDataPermInterceptor implements Interceptor {
@Override @Override
public void setProperties(Properties properties) { public void setProperties(Properties properties) {
// 这里需要空注解否则sonar会不happy。
} }
@Data @Data

View File

@@ -11,7 +11,7 @@ import org.springframework.stereotype.Component;
* 将标记有数据权限规则注解的Mapper对象加载到缓存以提升系统运行时效率。 * 将标记有数据权限规则注解的Mapper对象加载到缓存以提升系统运行时效率。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Component @Component
public class LoadDataPermMapperListener implements ApplicationListener<ApplicationReadyEvent> { public class LoadDataPermMapperListener implements ApplicationListener<ApplicationReadyEvent> {

View File

@@ -15,20 +15,21 @@ import com.orange.admin.common.core.object.ResponseResult;
import com.orange.admin.common.core.object.TokenData; import com.orange.admin.common.core.object.TokenData;
import com.orange.admin.common.core.util.JwtUtil; import com.orange.admin.common.core.util.JwtUtil;
import com.orange.admin.common.core.util.MyCommonUtil; import com.orange.admin.common.core.util.MyCommonUtil;
import com.orange.admin.common.core.util.RsaUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.cache.Cache; import org.springframework.cache.Cache;
import org.springframework.cache.CacheManager; import org.springframework.cache.CacheManager;
import java.util.HashMap; import java.net.URLDecoder;
import java.util.List; import java.nio.charset.StandardCharsets;
import java.util.Map; import java.util.*;
/** /**
* 登录接口控制器类。 * 登录接口控制器类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
@RestController @RestController
@@ -59,58 +60,58 @@ public class LoginController {
*/ */
@NoAuthInterface @NoAuthInterface
@GetMapping("/doLogin") @GetMapping("/doLogin")
public ResponseResult<?> doLogin(@RequestParam String loginName, @RequestParam String password) { public ResponseResult<JSONObject> doLogin(
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; @RequestParam String loginName, @RequestParam String password) throws Exception {
String errorMessage = null; if (MyCommonUtil.existBlankArgument(loginName, password)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
//NOTE: 执行RsaUtil工具类中的main函数可以生成新的公钥和私钥。
String privateKey =
"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKkLhAydtOtA4WuIkkIIUVaGWu4ElOEAQF9GTulHHWOwCHI1UvcKolvS1G+mdsKcmGtEAQ92AUde/kDRGu8Wn7kLDtCgUfo72soHz7Qfv5pVB4ohMxQd/9cxeKjKbDoirhB9Z3xGF20zUozp4ZPLxpTtI7azr0xzUtd5+D/HfLDrAgMBAAECgYEApESZhDz4YyeAJiPnpJ06lS8oS2VOWzsIUs0av5uoloeoHXtt7Lx7u2kroHeNrl3Hy2yg7ypH4dgQkGHin3VHrVAgjG3TxhgBXIqqntzzk2AGJKBeIIkRX86uTvtKZyp3flUgcwcGmpepAHS1V1DPY3aVYvbcqAmoL6DX6VYN0NECQQDQUitMdC76lEtAr5/ywS0nrZJDo6U7eQ7ywx/eiJ+YmrSye8oorlAj1VBWG+Cl6jdHOHtTQyYv/tu71fjzQiJTAkEAz7wb47/vcSUpNWQxItFpXz0o6rbJh71xmShn1AKP7XptOVZGlW9QRYEzHabV9m/DHqI00cMGhHrWZAhCiTkUCQJAFsJjaJ7o4weAkTieyO7B+CvGZw1h5/V55Jvcx3s1tH5yb22G0Jr6tm9/r2isSnQkReutzZLwgR3e886UvD7lcQJAAUcD2OOuQkDbPwPNtYwaHMbQgJj9JkOI9kskUE5vuiMdltOr/XFAyhygRtdmy2wmhAK1VnDfkmL6/IR8fEGImQJABOB0KCalb0M8CPnqqHzozrD8gPObnIIr4aVvLIPATN2g7MM2N6F7JbI4RZFiKa92LV6bhQCY8OvHi5K2cgFpbw==";
SysUser user = sysUserService.getSysUserByLoginName(loginName);
password = URLDecoder.decode(password, StandardCharsets.UTF_8.name());
password = RsaUtil.decrypt(password, privateKey);
if (user == null
|| !user.getPassword().equals(MyCommonUtil.encrptedPassword(password, appConfig.getPasswordSalt()))) {
return ResponseResult.error(ErrorCodeEnum.INVALID_USERNAME_PASSWORD);
}
String errorMessage;
if (user.getUserStatus() == SysUserStatus.STATUS_LOCKED) {
errorMessage = "登录失败,用户账号被锁定!";
return ResponseResult.error(ErrorCodeEnum.INVALID_USER_STATUS, errorMessage);
}
boolean isAdmin = user.getUserType() == SysUserType.TYPE_ADMIN;
Map<String, Object> claims = new HashMap<>(3);
String sessionId = MyCommonUtil.generateUuid();
claims.put("sessionId", sessionId);
String token = JwtUtil.generateToken(claims, appConfig.getTokenSigningKey());
JSONObject jsonData = new JSONObject(); JSONObject jsonData = new JSONObject();
do { jsonData.put(TokenData.REQUEST_ATTRIBUTE_NAME, token);
if (MyCommonUtil.existBlankArgument(loginName, password)) { jsonData.put("showName", user.getShowName());
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; jsonData.put("isAdmin", isAdmin);
break; TokenData tokenData = new TokenData();
} tokenData.setSessionId(sessionId);
SysUser user = sysUserService.getSysUserByLoginName(loginName); tokenData.setUserId(user.getUserId());
if (user == null tokenData.setDeptId(user.getDeptId());
|| !user.getPassword().equals(MyCommonUtil.encrptedPassword(password, appConfig.getPasswordSalt()))) { tokenData.setShowName(user.getShowName());
errorCodeEnum = ErrorCodeEnum.INVALID_USERNAME_PASSWORD; tokenData.setIsAdmin(isAdmin);
break; Cache sessionCache = cacheManager.getCache(CacheConfig.CacheEnum.GLOBAL_CACHE.name());
} sessionCache.put(sessionId, tokenData);
if (user.getUserStatus() == SysUserStatus.STATUS_LOCKED) { List<SysMenu> menuList;
errorCodeEnum = ErrorCodeEnum.INVALID_USER_STATUS; if (isAdmin) {
errorMessage = "登录失败,用户账号被锁定!"; menuList = sysMenuService.getAllMenuList();
break; } else {
} menuList = sysMenuService.getMenuListByUserId(user.getUserId());
boolean isAdmin = user.getUserType() == SysUserType.TYPE_ADMIN; List<String> permCodeList = sysPermCodeService.getPermCodeListByUserId(user.getUserId());
Map<String, Object> claims = new HashMap<>(3); jsonData.put("permCodeList", permCodeList);
String sessionId = MyCommonUtil.generateUuid(); }
claims.put("sessionId", sessionId); jsonData.put("menuList", menuList);
String token = JwtUtil.generateToken(claims, appConfig.getTokenSigningKey()); if (user.getUserType() != SysUserType.TYPE_ADMIN) {
jsonData.put(TokenData.REQUEST_ATTRIBUTE_NAME, token); // 缓存用户的权限资源
jsonData.put("showName", user.getShowName()); sysPermService.putUserSysPermCache(sessionId, user.getUserId(), isAdmin);
jsonData.put("isAdmin", isAdmin); sysDataPermService.putDataPermCache(sessionId, user.getUserId(), user.getDeptId(), isAdmin);
TokenData tokenData = new TokenData(); }
tokenData.setSessionId(sessionId); return ResponseResult.success(jsonData);
tokenData.setUserId(user.getUserId());
tokenData.setDeptId(user.getDeptId());
tokenData.setShowName(user.getShowName());
tokenData.setIsAdmin(isAdmin);
Cache sessionCache = cacheManager.getCache(CacheConfig.CacheEnum.GlobalCache.name());
sessionCache.put(sessionId, tokenData);
List<SysMenu> menuList;
if (isAdmin) {
menuList = sysMenuService.getAllMenuList();
} else {
menuList = sysMenuService.getMenuListByUserId(user.getUserId());
List<String> permCodeList = sysPermCodeService.getPermCodeListByUserId(user.getUserId());
jsonData.put("permCodeList", permCodeList);
}
jsonData.put("menuList", menuList);
if (user.getUserType() != SysUserType.TYPE_ADMIN) {
// 缓存用户的权限资源
sysPermService.putUserSysPermCache(sessionId, user.getUserId(), isAdmin);
sysDataPermService.putDataPermCache(sessionId, user.getUserId(), user.getDeptId(), isAdmin);
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, jsonData);
} }
/** /**
@@ -119,7 +120,7 @@ public class LoginController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/doLogout") @PostMapping("/doLogout")
public ResponseResult<?> doLogout() { public ResponseResult<Void> doLogout() {
TokenData tokenData = TokenData.takeFromRequest(); TokenData tokenData = TokenData.takeFromRequest();
sysPermService.removeUserSysPermCache(tokenData.getSessionId()); sysPermService.removeUserSysPermCache(tokenData.getSessionId());
sysDataPermService.removeDataPermCache(tokenData.getSessionId()); sysDataPermService.removeDataPermCache(tokenData.getSessionId());

View File

@@ -1,7 +1,7 @@
package com.orange.admin.upms.controller; package com.orange.admin.upms.controller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.page.PageMethod;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import com.orange.admin.upms.model.SysDataPermMenu; import com.orange.admin.upms.model.SysDataPermMenu;
import com.orange.admin.upms.model.SysDataPerm; import com.orange.admin.upms.model.SysDataPerm;
@@ -10,10 +10,11 @@ import com.orange.admin.upms.service.SysDataPermService;
import com.orange.admin.upms.service.SysUserService; import com.orange.admin.upms.service.SysUserService;
import com.orange.admin.common.core.validator.UpdateGroup; import com.orange.admin.common.core.validator.UpdateGroup;
import com.orange.admin.common.core.constant.ErrorCodeEnum; import com.orange.admin.common.core.constant.ErrorCodeEnum;
import com.orange.admin.common.core.object.VerifyResult; import com.orange.admin.common.core.object.CallResult;
import com.orange.admin.common.core.object.MyOrderParam; import com.orange.admin.common.core.object.MyOrderParam;
import com.orange.admin.common.core.object.MyPageParam; import com.orange.admin.common.core.object.MyPageParam;
import com.orange.admin.common.core.object.ResponseResult; import com.orange.admin.common.core.object.ResponseResult;
import com.orange.admin.common.core.object.MyRelationParam;
import com.orange.admin.common.core.util.MyCommonUtil; import com.orange.admin.common.core.util.MyCommonUtil;
import com.orange.admin.common.core.util.MyPageUtil; import com.orange.admin.common.core.util.MyPageUtil;
import com.orange.admin.common.core.annotation.MyRequestBody; import com.orange.admin.common.core.annotation.MyRequestBody;
@@ -28,7 +29,7 @@ import java.util.stream.Collectors;
* 数据权限接口控制器对象。 * 数据权限接口控制器对象。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
@RestController @RestController
@@ -50,38 +51,31 @@ public class SysDataPermController {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@PostMapping("/add") @PostMapping("/add")
public ResponseResult<?> add( public ResponseResult<JSONObject> add(
@MyRequestBody SysDataPerm sysDataPerm, @MyRequestBody SysDataPerm sysDataPerm,
@MyRequestBody String deptIdListString, @MyRequestBody String deptIdListString,
@MyRequestBody String menuIdListString) { @MyRequestBody String menuIdListString) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(menuIdListString)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
JSONObject responseData = null; }
do { String errorMessage = MyCommonUtil.getModelValidationError(sysDataPerm);
if (MyCommonUtil.existBlankArgument(menuIdListString)) { if (errorMessage != null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
break; }
} CallResult result = sysDataPermService.verifyRelatedData(sysDataPerm, deptIdListString, menuIdListString);
errorMessage = MyCommonUtil.getModelValidationError(sysDataPerm); if (!result.isSuccess()) {
if (errorMessage != null) { return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; }
break; List<SysDataPermMenu> dataPermMenuList = null;
} Set<Long> deptIdSet = null;
VerifyResult result = sysDataPermService.verifyRelatedData(sysDataPerm, deptIdListString, menuIdListString); if (result.getData() != null) {
if (!result.isSuccess()) { dataPermMenuList = (List<SysDataPermMenu>) result.getData().get("dataPermMenuList");
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); deptIdSet = (Set<Long>) result.getData().get("deptIdSet");
} }
List<SysDataPermMenu> dataPermMenuList = null; sysDataPermService.saveNew(sysDataPerm, deptIdSet, dataPermMenuList);
Set<Long> deptIdSet = null; JSONObject responseData = new JSONObject();
if (result.getData() != null) { responseData.put("dataPermId", sysDataPerm.getDataPermId());
dataPermMenuList = (List<SysDataPermMenu>) result.getData().get("dataPermMenuList"); return ResponseResult.success(responseData);
deptIdSet = (Set<Long>) result.getData().get("deptIdSet");
}
sysDataPermService.saveNew(sysDataPerm, deptIdSet, dataPermMenuList);
responseData = new JSONObject();
responseData.put("dataPermId", sysDataPerm.getDataPermId());
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -94,45 +88,37 @@ public class SysDataPermController {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@PostMapping("/update") @PostMapping("/update")
public ResponseResult<?> update( public ResponseResult<Void> update(
@MyRequestBody SysDataPerm sysDataPerm, @MyRequestBody SysDataPerm sysDataPerm,
@MyRequestBody String deptIdListString, @MyRequestBody String deptIdListString,
@MyRequestBody String menuIdListString) { @MyRequestBody String menuIdListString) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(menuIdListString)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
do { }
if (MyCommonUtil.existBlankArgument(menuIdListString)) { String errorMessage = MyCommonUtil.getModelValidationError(sysDataPerm, Default.class, UpdateGroup.class);
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; if (errorMessage != null) {
break; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
} }
errorMessage = MyCommonUtil.getModelValidationError(sysDataPerm, Default.class, UpdateGroup.class); SysDataPerm originalSysDataPerm = sysDataPermService.getById(sysDataPerm.getDataPermId());
if (errorMessage != null) { if (originalSysDataPerm == null) {
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; errorMessage = "数据验证失败,当前数据权限并不存在,请刷新后重试!";
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
SysDataPerm originalSysDataPerm = sysDataPermService.getById(sysDataPerm.getDataPermId()); CallResult result = sysDataPermService.verifyRelatedData(sysDataPerm, deptIdListString, menuIdListString);
if (originalSysDataPerm == null) { if (!result.isSuccess()) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
errorMessage = "数据验证失败,当前数据权限并不存在,请刷新后重试!"; }
break; List<SysDataPermMenu> dataPermMenuList = null;
} Set<Long> deptIdSet = null;
VerifyResult result = sysDataPermService.verifyRelatedData(sysDataPerm, deptIdListString, menuIdListString); if (result.getData() != null) {
if (!result.isSuccess()) { dataPermMenuList = (List<SysDataPermMenu>) result.getData().get("dataPermMenuList");
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); deptIdSet = (Set<Long>) result.getData().get("deptIdSet");
} }
List<SysDataPermMenu> dataPermMenuList = null; if (!sysDataPermService.update(sysDataPerm, originalSysDataPerm, deptIdSet, dataPermMenuList)) {
Set<Long> deptIdSet = null; errorMessage = "更新失败,数据不存在,请刷新后重试!";
if (result.getData() != null) { return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
dataPermMenuList = (List<SysDataPermMenu>) result.getData().get("dataPermMenuList"); }
deptIdSet = (Set<Long>) result.getData().get("deptIdSet"); return ResponseResult.success();
}
if (!sysDataPermService.update(sysDataPerm, originalSysDataPerm, deptIdSet, dataPermMenuList)) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "更新失败,数据不存在,请刷新后重试!";
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -142,21 +128,15 @@ public class SysDataPermController {
* @return 应答数据结果。 * @return 应答数据结果。
*/ */
@PostMapping("/delete") @PostMapping("/delete")
public ResponseResult<?> delete(@MyRequestBody Long dataPermId) { public ResponseResult<Void> delete(@MyRequestBody Long dataPermId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(dataPermId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
do { }
if (MyCommonUtil.existBlankArgument(dataPermId)) { if (!sysDataPermService.remove(dataPermId)) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; String errorMessage = "数据操作失败,数据权限不存在,请刷新后重试!";
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
if (!sysDataPermService.remove(dataPermId)) { return ResponseResult.success();
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "数据操作失败,数据权限不存在,请刷新后重试!";
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -168,12 +148,12 @@ public class SysDataPermController {
* @return 应答结果对象。包含数据权限列表。 * @return 应答结果对象。包含数据权限列表。
*/ */
@PostMapping("/list") @PostMapping("/list")
public ResponseResult<?> list( public ResponseResult<JSONObject> list(
@MyRequestBody SysDataPerm sysDataPermFilter, @MyRequestBody SysDataPerm sysDataPermFilter,
@MyRequestBody MyOrderParam orderParam, @MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
if (pageParam != null) { if (pageParam != null) {
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
} }
String orderBy = MyOrderParam.buildOrderBy(orderParam, SysDataPerm.class); String orderBy = MyOrderParam.buildOrderBy(orderParam, SysDataPerm.class);
List<SysDataPerm> resultList = sysDataPermService.getSysDataPermList(sysDataPermFilter, orderBy); List<SysDataPerm> resultList = sysDataPermService.getSysDataPermList(sysDataPermFilter, orderBy);
@@ -188,21 +168,14 @@ public class SysDataPermController {
*/ */
@GetMapping("/view") @GetMapping("/view")
public ResponseResult<SysDataPerm> view(@RequestParam Long dataPermId) { public ResponseResult<SysDataPerm> view(@RequestParam Long dataPermId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(dataPermId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
SysDataPerm dataPerm = null; }
do { SysDataPerm dataPerm = sysDataPermService.getByIdWithRelation(dataPermId, MyRelationParam.full());
if (MyCommonUtil.existBlankArgument(dataPermId)) { if (dataPerm == null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
break; }
} return ResponseResult.success(dataPerm);
dataPerm = sysDataPermService.getSysDataPermWithRelation(dataPermId);
if (dataPerm == null) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, dataPerm);
} }
/** /**
@@ -216,32 +189,23 @@ public class SysDataPermController {
* @return 应答结果对象,包含用户列表数据。 * @return 应答结果对象,包含用户列表数据。
*/ */
@PostMapping("/listNotInDataPermUser") @PostMapping("/listNotInDataPermUser")
public ResponseResult<?> listNotInDataPermUser( public ResponseResult<JSONObject> listNotInDataPermUser(
@MyRequestBody Long dataPermId, @MyRequestBody Long dataPermId,
@MyRequestBody SysUser sysUserFilter, @MyRequestBody SysUser sysUserFilter,
@MyRequestBody MyOrderParam orderParam, @MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; ResponseResult<Void> verifyResult = this.doDataPermUserVerify(dataPermId);
String errorMessage = null; if (!verifyResult.isSuccess()) {
JSONObject responseData = null; return ResponseResult.errorFrom(verifyResult);
do { }
if (MyCommonUtil.existBlankArgument(dataPermId)) { if (pageParam != null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
break; }
} String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class);
if (!sysDataPermService.existId(dataPermId)) { List<SysUser> resultList =
errorCodeEnum = ErrorCodeEnum.INVALID_RELATED_RECORD_ID; sysUserService.getNotInSysUserListByDataPermId(dataPermId, sysUserFilter, orderBy);
break; JSONObject responseData = MyPageUtil.makeResponseData(resultList);
} return ResponseResult.success(responseData);
if (pageParam != null) {
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class);
List<SysUser> resultList =
sysUserService.getNotInSysUserListByDataPermId(dataPermId, sysUserFilter, orderBy);
responseData = MyPageUtil.makeResponseData(resultList);
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -254,32 +218,33 @@ public class SysDataPermController {
* @return 应答结果对象,包含用户列表数据。 * @return 应答结果对象,包含用户列表数据。
*/ */
@PostMapping("/listDataPermUser") @PostMapping("/listDataPermUser")
public ResponseResult<?> listDataPermUser( public ResponseResult<JSONObject> listDataPermUser(
@MyRequestBody Long dataPermId, @MyRequestBody Long dataPermId,
@MyRequestBody SysUser sysUserFilter, @MyRequestBody SysUser sysUserFilter,
@MyRequestBody MyOrderParam orderParam, @MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; ResponseResult<Void> verifyResult = this.doDataPermUserVerify(dataPermId);
String errorMessage = null; if (!verifyResult.isSuccess()) {
JSONObject responseData = null; return ResponseResult.errorFrom(verifyResult);
do { }
if (MyCommonUtil.existBlankArgument(dataPermId)) { if (pageParam != null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
break; }
} String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class);
if (!sysDataPermService.existId(dataPermId)) { List<SysUser> resultList =
errorCodeEnum = ErrorCodeEnum.INVALID_RELATED_RECORD_ID; sysUserService.getSysUserListByDataPermId(dataPermId, sysUserFilter, orderBy);
break; JSONObject responseData = MyPageUtil.makeResponseData(resultList);
} return ResponseResult.success(responseData);
if (pageParam != null) { }
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize());
} private ResponseResult<Void> doDataPermUserVerify(Long dataPermId) {
String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); if (MyCommonUtil.existBlankArgument(dataPermId)) {
List<SysUser> resultList = return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
sysUserService.getSysUserListByDataPermId(dataPermId, sysUserFilter, orderBy); }
responseData = MyPageUtil.makeResponseData(resultList); if (!sysDataPermService.existId(dataPermId)) {
} while (false); return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData); }
return ResponseResult.success();
} }
/** /**
@@ -290,25 +255,19 @@ public class SysDataPermController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/addDataPermUser") @PostMapping("/addDataPermUser")
public ResponseResult<?> addDataPermUser( public ResponseResult<Void> addDataPermUser(
@MyRequestBody Long dataPermId, @MyRequestBody String userIdListString) { @MyRequestBody Long dataPermId, @MyRequestBody String userIdListString) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(dataPermId, userIdListString)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
do { }
if (MyCommonUtil.existBlankArgument(dataPermId, userIdListString)) { Set<Long> userIdSet =
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; Arrays.stream(userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
break; if (!sysDataPermService.existId(dataPermId)
} || !sysUserService.existUniqueKeyList("userId", userIdSet)) {
Set<Long> userIdSet = return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID);
Arrays.stream(userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); }
if (!sysDataPermService.existId(dataPermId) sysDataPermService.addDataPermUserList(dataPermId, userIdSet);
|| !sysUserService.existUniqueKeyList("userId", userIdSet)) { return ResponseResult.success();
errorCodeEnum = ErrorCodeEnum.INVALID_RELATED_RECORD_ID;
break;
}
sysDataPermService.addDataPermUserList(dataPermId, userIdSet);
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -319,20 +278,14 @@ public class SysDataPermController {
* @return 应答数据结果。 * @return 应答数据结果。
*/ */
@PostMapping("/deleteDataPermUser") @PostMapping("/deleteDataPermUser")
public ResponseResult<?> deleteDataPermUser( public ResponseResult<Void> deleteDataPermUser(
@MyRequestBody Long dataPermId, @MyRequestBody Long userId) { @MyRequestBody Long dataPermId, @MyRequestBody Long userId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(dataPermId, userId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
do { }
if (MyCommonUtil.existBlankArgument(dataPermId, userId)) { if (!sysDataPermService.removeDataPermUser(dataPermId, userId)) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
break; }
} return ResponseResult.success();
if (!sysDataPermService.removeDataPermUser(dataPermId, userId)) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
} }

View File

@@ -1,7 +1,7 @@
package com.orange.admin.upms.controller; package com.orange.admin.upms.controller;
import cn.jimmyshi.beanquery.BeanQuery; import cn.jimmyshi.beanquery.BeanQuery;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.page.PageMethod;
import com.orange.admin.upms.model.*; import com.orange.admin.upms.model.*;
import com.orange.admin.upms.service.*; import com.orange.admin.upms.service.*;
import com.orange.admin.common.core.object.*; import com.orange.admin.common.core.object.*;
@@ -21,7 +21,7 @@ import javax.validation.groups.Default;
* 部门管理操作控制器类。 * 部门管理操作控制器类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
@RestController @RestController
@@ -38,21 +38,15 @@ public class SysDeptController {
* @return 应答结果对象包含新增对象主键Id。 * @return 应答结果对象包含新增对象主键Id。
*/ */
@PostMapping("/add") @PostMapping("/add")
public ResponseResult<?> add(@MyRequestBody SysDept sysDept) { public ResponseResult<JSONObject> add(@MyRequestBody SysDept sysDept) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysDept);
String errorMessage; if (errorMessage != null) {
JSONObject responseData = null; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
do { }
errorMessage = MyCommonUtil.getModelValidationError(sysDept); sysDept = sysDeptService.saveNew(sysDept);
if (errorMessage != null) { JSONObject responseData = new JSONObject();
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; responseData.put("deptId", sysDept.getDeptId());
break; return ResponseResult.success(responseData);
}
sysDept = sysDeptService.saveNew(sysDept);
responseData = new JSONObject();
responseData.put("deptId", sysDept.getDeptId());
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -62,29 +56,22 @@ public class SysDeptController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/update") @PostMapping("/update")
public ResponseResult<?> update(@MyRequestBody SysDept sysDept) { public ResponseResult<Void> update(@MyRequestBody SysDept sysDept) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysDept, Default.class, UpdateGroup.class);
String errorMessage; if (errorMessage != null) {
do { return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
errorMessage = MyCommonUtil.getModelValidationError(sysDept, Default.class, UpdateGroup.class); }
if (errorMessage != null) { // 验证关联Id的数据合法性
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; SysDept originalSysDept = sysDeptService.getById(sysDept.getDeptId());
break; if (originalSysDept == null) {
} //NOTE: 修改下面方括号中的话述
// 验证关联Id的数据合法性 errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
SysDept originalSysDept = sysDeptService.getById(sysDept.getDeptId()); return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
if (originalSysDept == null) { }
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; if (!sysDeptService.update(sysDept, originalSysDept)) {
//TODO 修改下面方括号中的话述 return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!"; }
break; return ResponseResult.success();
}
if (!sysDeptService.update(sysDept, originalSysDept)) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -94,29 +81,23 @@ public class SysDeptController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/delete") @PostMapping("/delete")
public ResponseResult<?> delete(@MyRequestBody Long deptId) { public ResponseResult<Void> delete(@MyRequestBody Long deptId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage;
String errorMessage = null; if (MyCommonUtil.existBlankArgument(deptId)) {
do { return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
if (MyCommonUtil.existBlankArgument(deptId)) { }
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; // 验证关联Id的数据合法性
break; SysDept originalSysDept = sysDeptService.getById(deptId);
} if (originalSysDept == null) {
// 验证关联Id的数据合法性 // NOTE: 修改下面方括号中的话述
SysDept originalSysDept = sysDeptService.getById(deptId); errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
if (originalSysDept == null) { return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; }
//TODO 修改下面方括号中的话述 if (!sysDeptService.remove(deptId)) {
errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
if (!sysDeptService.remove(deptId)) { return ResponseResult.success();
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -128,12 +109,12 @@ public class SysDeptController {
* @return 应答结果对象,包含查询结果集。 * @return 应答结果对象,包含查询结果集。
*/ */
@PostMapping("/list") @PostMapping("/list")
public ResponseResult<?> list( public ResponseResult<JSONObject> list(
@MyRequestBody SysDept sysDeptFilter, @MyRequestBody SysDept sysDeptFilter,
@MyRequestBody MyOrderParam orderParam, @MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
if (pageParam != null) { if (pageParam != null) {
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
} }
String orderBy = MyOrderParam.buildOrderBy(orderParam, SysDept.class); String orderBy = MyOrderParam.buildOrderBy(orderParam, SysDept.class);
List<SysDept> resultList = sysDeptService.getSysDeptListWithRelation(sysDeptFilter, orderBy); List<SysDept> resultList = sysDeptService.getSysDeptListWithRelation(sysDeptFilter, orderBy);
@@ -148,21 +129,14 @@ public class SysDeptController {
*/ */
@GetMapping("/view") @GetMapping("/view")
public ResponseResult<SysDept> view(@RequestParam Long deptId) { public ResponseResult<SysDept> view(@RequestParam Long deptId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(deptId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
SysDept sysDept = null; }
do { SysDept sysDept = sysDeptService.getByIdWithRelation(deptId, MyRelationParam.full());
if (MyCommonUtil.existBlankArgument(deptId)) { if (sysDept == null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
break; }
} return ResponseResult.success(sysDept);
sysDept = sysDeptService.getByIdWithRelation(deptId);
if (sysDept == null) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, sysDept);
} }
/** /**
@@ -173,8 +147,8 @@ public class SysDeptController {
* @return 应答结果对象,包含的数据为 List<Map<String, String>>map中包含两条记录key的值分别是id和namevalue对应具体数据。 * @return 应答结果对象,包含的数据为 List<Map<String, String>>map中包含两条记录key的值分别是id和namevalue对应具体数据。
*/ */
@GetMapping("/listDictSysDept") @GetMapping("/listDictSysDept")
public ResponseResult<?> listDictSysDept(SysDept filter) { public ResponseResult<List<Map<String, Object>>> listDictSysDept(SysDept filter) {
List<SysDept> resultList = sysDeptService.getListByFilter(filter); List<SysDept> resultList = sysDeptService.getListByFilter(filter, null);
return ResponseResult.success(BeanQuery.select( return ResponseResult.success(BeanQuery.select(
"deptId as id", "deptName as name").executeFrom(resultList)); "deptId as id", "deptName as name").executeFrom(resultList));
} }

View File

@@ -6,8 +6,9 @@ import com.orange.admin.upms.model.SysMenu;
import com.orange.admin.upms.service.SysMenuService; import com.orange.admin.upms.service.SysMenuService;
import com.orange.admin.upms.service.SysPermCodeService; import com.orange.admin.upms.service.SysPermCodeService;
import com.orange.admin.common.core.constant.ErrorCodeEnum; import com.orange.admin.common.core.constant.ErrorCodeEnum;
import com.orange.admin.common.core.object.VerifyResult; import com.orange.admin.common.core.object.CallResult;
import com.orange.admin.common.core.object.ResponseResult; import com.orange.admin.common.core.object.ResponseResult;
import com.orange.admin.common.core.object.MyRelationParam;
import com.orange.admin.common.core.util.MyCommonUtil; import com.orange.admin.common.core.util.MyCommonUtil;
import com.orange.admin.common.core.validator.UpdateGroup; import com.orange.admin.common.core.validator.UpdateGroup;
import com.orange.admin.common.core.annotation.MyRequestBody; import com.orange.admin.common.core.annotation.MyRequestBody;
@@ -21,7 +22,7 @@ import java.util.*;
* 菜单管理接口控制器类。 * 菜单管理接口控制器类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
@RestController @RestController
@@ -42,29 +43,23 @@ public class SysMenuController {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@PostMapping("/add") @PostMapping("/add")
public ResponseResult<?> add(@MyRequestBody SysMenu sysMenu, @MyRequestBody String permCodeIdListString) { public ResponseResult<JSONObject> add(@MyRequestBody SysMenu sysMenu, @MyRequestBody String permCodeIdListString) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysMenu);
String errorMessage; if (errorMessage != null) {
JSONObject responseData = null; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
do { }
errorMessage = MyCommonUtil.getModelValidationError(sysMenu); CallResult result = sysMenuService.verifyRelatedData(sysMenu, null, permCodeIdListString);
if (errorMessage != null) { if (!result.isSuccess()) {
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
break; }
} Set<Long> permCodeIdSet = null;
VerifyResult result = sysMenuService.verifyRelatedData(sysMenu, null, permCodeIdListString); if (result.getData() != null) {
if (!result.isSuccess()) { permCodeIdSet = (Set<Long>) result.getData().get("permCodeIdSet");
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); }
} sysMenuService.saveNew(sysMenu, permCodeIdSet);
Set<Long> permCodeIdSet = null; JSONObject responseData = new JSONObject();
if (result.getData() != null) { responseData.put("sysMenuId", sysMenu.getMenuId());
permCodeIdSet = (Set<Long>) result.getData().get("permCodeIdSet"); return ResponseResult.success(responseData);
}
sysMenuService.saveNew(sysMenu, permCodeIdSet);
responseData = new JSONObject();
responseData.put("sysMenuId", sysMenu.getMenuId());
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -76,35 +71,29 @@ public class SysMenuController {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@PostMapping("/update") @PostMapping("/update")
public ResponseResult<?> update(@MyRequestBody SysMenu sysMenu, @MyRequestBody String permCodeIdListString) { public ResponseResult<Void> update(@MyRequestBody SysMenu sysMenu, @MyRequestBody String permCodeIdListString) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysMenu, Default.class, UpdateGroup.class);
String errorMessage; if (errorMessage != null) {
do { return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
errorMessage = MyCommonUtil.getModelValidationError(sysMenu, Default.class, UpdateGroup.class); }
if (errorMessage != null) { SysMenu originalSysMenu = sysMenuService.getById(sysMenu.getMenuId());
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; if (originalSysMenu == null) {
break; errorMessage = "数据验证失败,当前菜单并不存在,请刷新后重试!";
} return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
SysMenu originalSysMenu = sysMenuService.getById(sysMenu.getMenuId()); }
if (originalSysMenu == null) { CallResult result = sysMenuService.verifyRelatedData(sysMenu, originalSysMenu, permCodeIdListString);
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; if (!result.isSuccess()) {
errorMessage = "数据验证失败,当前菜单并不存在,请刷新后重试!"; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
break; }
} Set<Long> permCodeIdSet = null;
VerifyResult result = sysMenuService.verifyRelatedData(sysMenu, originalSysMenu, permCodeIdListString); if (result.getData() != null) {
if (!result.isSuccess()) { permCodeIdSet = (Set<Long>) result.getData().get("permCodeIdSet");
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); }
} if (!sysMenuService.update(sysMenu, originalSysMenu, permCodeIdSet)) {
Set<Long> permCodeIdSet = null; errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!";
if (result.getData() != null) { return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
permCodeIdSet = (Set<Long>) result.getData().get("permCodeIdSet"); }
} return ResponseResult.success();
if (!sysMenuService.update(sysMenu, originalSysMenu, permCodeIdSet)) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!";
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -114,26 +103,20 @@ public class SysMenuController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/delete") @PostMapping("/delete")
public ResponseResult<?> delete(@MyRequestBody Long menuId) { public ResponseResult<Void> delete(@MyRequestBody Long menuId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(menuId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
do { }
if (MyCommonUtil.existBlankArgument(menuId)) { String errorMessage;
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; if (sysMenuService.hasChildren(menuId)) {
break; errorMessage = "数据验证失败,当前菜单存在下级菜单!";
} return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage);
if (sysMenuService.hasChildren(menuId)) { }
errorCodeEnum = ErrorCodeEnum.HAS_CHILDREN_DATA; if (!sysMenuService.remove(menuId)) {
errorMessage = "数据验证失败,当前菜单存在下级菜单"; errorMessage = "数据操作失败,菜单存在,请刷新后重试";
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
if (!sysMenuService.remove(menuId)) { return ResponseResult.success();
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "数据操作失败,菜单不存在,请刷新后重试!";
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -154,21 +137,14 @@ public class SysMenuController {
*/ */
@GetMapping("/view") @GetMapping("/view")
public ResponseResult<SysMenu> view(@RequestParam Long menuId) { public ResponseResult<SysMenu> view(@RequestParam Long menuId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(menuId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
SysMenu sysMenu = null; }
do { SysMenu sysMenu = sysMenuService.getByIdWithRelation(menuId, MyRelationParam.full());
if (MyCommonUtil.existBlankArgument(menuId)) { if (sysMenu == null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
break; }
} return ResponseResult.success(sysMenu);
sysMenu = sysMenuService.getSysMenuWithRelation(menuId);
if (sysMenu == null) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, sysMenu);
} }
/** /**

View File

@@ -1,14 +1,15 @@
package com.orange.admin.upms.controller; package com.orange.admin.upms.controller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.page.PageMethod;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import com.orange.admin.upms.model.SysPermCode; import com.orange.admin.upms.model.SysPermCode;
import com.orange.admin.upms.service.SysPermCodeService; import com.orange.admin.upms.service.SysPermCodeService;
import com.orange.admin.common.core.constant.ErrorCodeEnum; import com.orange.admin.common.core.constant.ErrorCodeEnum;
import com.orange.admin.common.core.object.ResponseResult; import com.orange.admin.common.core.object.ResponseResult;
import com.orange.admin.common.core.object.VerifyResult; import com.orange.admin.common.core.object.CallResult;
import com.orange.admin.common.core.object.MyPageParam; import com.orange.admin.common.core.object.MyPageParam;
import com.orange.admin.common.core.object.MyRelationParam;
import com.orange.admin.common.core.util.MyCommonUtil; import com.orange.admin.common.core.util.MyCommonUtil;
import com.orange.admin.common.core.util.MyPageUtil; import com.orange.admin.common.core.util.MyPageUtil;
import com.orange.admin.common.core.validator.UpdateGroup; import com.orange.admin.common.core.validator.UpdateGroup;
@@ -24,7 +25,7 @@ import java.util.*;
* 权限字管理接口控制器类。 * 权限字管理接口控制器类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
@RestController @RestController
@@ -43,29 +44,23 @@ public class SysPermCodeController {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@PostMapping("/add") @PostMapping("/add")
public ResponseResult<?> add(@MyRequestBody SysPermCode sysPermCode, @MyRequestBody String permIdListString) { public ResponseResult<JSONObject> add(@MyRequestBody SysPermCode sysPermCode, @MyRequestBody String permIdListString) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysPermCode);
String errorMessage; if (errorMessage != null) {
JSONObject responseData = null; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED);
do { }
errorMessage = MyCommonUtil.getModelValidationError(sysPermCode); CallResult result = sysPermCodeService.verifyRelatedData(sysPermCode, null, permIdListString);
if (errorMessage != null) { if (!result.isSuccess()) {
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
break; }
} Set<Long> permIdSet = null;
VerifyResult result = sysPermCodeService.verifyRelatedData(sysPermCode, null, permIdListString); if (result.getData() != null) {
if (!result.isSuccess()) { permIdSet = (Set<Long>) result.getData().get("permIdSet");
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); }
} sysPermCode = sysPermCodeService.saveNew(sysPermCode, permIdSet);
Set<Long> permIdSet = null; JSONObject responseData = new JSONObject();
if (result.getData() != null) { responseData.put("sysPermCodeId", sysPermCode.getPermCodeId());
permIdSet = (Set<Long>) result.getData().get("permIdSet"); return ResponseResult.success(responseData);
}
sysPermCode = sysPermCodeService.saveNew(sysPermCode, permIdSet);
responseData = new JSONObject();
responseData.put("sysPermCodeId", sysPermCode.getPermCodeId());
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -77,40 +72,34 @@ public class SysPermCodeController {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@PostMapping("/update") @PostMapping("/update")
public ResponseResult<?> update(@MyRequestBody SysPermCode sysPermCode, @MyRequestBody String permIdListString) { public ResponseResult<Void> update(@MyRequestBody SysPermCode sysPermCode, @MyRequestBody String permIdListString) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysPermCode, Default.class, UpdateGroup.class);
String errorMessage; if (errorMessage != null) {
do { return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
errorMessage = MyCommonUtil.getModelValidationError(sysPermCode, Default.class, UpdateGroup.class); }
if (errorMessage != null) { SysPermCode originalSysPermCode = sysPermCodeService.getById(sysPermCode.getPermCodeId());
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; if (originalSysPermCode == null) {
break; errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!";
} return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
SysPermCode originalSysPermCode = sysPermCodeService.getById(sysPermCode.getPermCodeId()); }
if (originalSysPermCode == null) { CallResult result = sysPermCodeService.verifyRelatedData(sysPermCode, originalSysPermCode, permIdListString);
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
}
Set<Long> permIdSet = null;
if (result.getData() != null) {
permIdSet = (Set<Long>) result.getData().get("permIdSet");
}
try {
if (!sysPermCodeService.update(sysPermCode, originalSysPermCode, permIdSet)) {
errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!"; errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!";
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
VerifyResult result = sysPermCodeService.verifyRelatedData(sysPermCode, originalSysPermCode, permIdListString); } catch (DuplicateKeyException e) {
if (!result.isSuccess()) { errorMessage = "数据操作失败,权限字编码已经存在!";
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); return ResponseResult.error(ErrorCodeEnum.DUPLICATED_UNIQUE_KEY, errorMessage);
} }
Set<Long> permIdSet = null; return ResponseResult.success();
if (result.getData() != null) {
permIdSet = (Set<Long>) result.getData().get("permIdSet");
}
try {
if (!sysPermCodeService.update(sysPermCode, originalSysPermCode, permIdSet)) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!";
}
} catch (DuplicateKeyException e) {
errorCodeEnum = ErrorCodeEnum.DUPLICATED_UNIQUE_KEY;
errorMessage = "数据操作失败,权限字编码已经存在!";
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -120,25 +109,20 @@ public class SysPermCodeController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/delete") @PostMapping("/delete")
public ResponseResult<?> delete(@MyRequestBody Long permCodeId) { public ResponseResult<Void> delete(@MyRequestBody Long permCodeId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(permCodeId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
do { }
if (MyCommonUtil.existBlankArgument(permCodeId)) { String errorMessage;
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; if (sysPermCodeService.hasChildren(permCodeId)) {
break; errorMessage = "数据验证失败,当前权限字存在下级权限字!";
} return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage);
if (sysPermCodeService.hasChildren(permCodeId)) { }
errorCodeEnum = ErrorCodeEnum.HAS_CHILDREN_DATA; if (!sysPermCodeService.remove(permCodeId)) {
errorMessage = "数据验证失败,当前权限字存在下级权限字"; errorMessage = "数据操作失败,权限字存在,请刷新后重试";
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
if (!sysPermCodeService.remove(permCodeId)) { return ResponseResult.success();
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "数据操作失败,权限字不存在,请刷新后重试!";
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -147,7 +131,7 @@ public class SysPermCodeController {
* @return 应答结果对象,包含权限字列表。 * @return 应答结果对象,包含权限字列表。
*/ */
@PostMapping("/list") @PostMapping("/list")
public ResponseResult<?> list() { public ResponseResult<List<SysPermCode>> list() {
return ResponseResult.success(sysPermCodeService.getAllListByOrder("permCodeType", "showOrder")); return ResponseResult.success(sysPermCodeService.getAllListByOrder("permCodeType", "showOrder"));
} }
@@ -159,21 +143,14 @@ public class SysPermCodeController {
*/ */
@GetMapping("/view") @GetMapping("/view")
public ResponseResult<SysPermCode> view(@RequestParam Long permCodeId) { public ResponseResult<SysPermCode> view(@RequestParam Long permCodeId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(permCodeId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
SysPermCode sysPermCode = null; }
do { SysPermCode sysPermCode = sysPermCodeService.getByIdWithRelation(permCodeId, MyRelationParam.full());
if (MyCommonUtil.existBlankArgument(permCodeId)) { if (sysPermCode == null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
break; }
} return ResponseResult.success(sysPermCode);
sysPermCode = sysPermCodeService.getSysPermCodeWithRelation(permCodeId);
if (sysPermCode == null) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, sysPermCode);
} }
/** /**
@@ -185,25 +162,19 @@ public class SysPermCodeController {
* @return 应答结果对象,包含该用户的全部权限资源列表。 * @return 应答结果对象,包含该用户的全部权限资源列表。
*/ */
@PostMapping("/listAllPermCodesByUserFilter") @PostMapping("/listAllPermCodesByUserFilter")
public ResponseResult<?> listAllPermCodesByUserFilter( public ResponseResult<JSONObject> listAllPermCodesByUserFilter(
@MyRequestBody String loginName, @MyRequestBody String loginName,
@MyRequestBody String permCode, @MyRequestBody String permCode,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(loginName)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
JSONObject responseData = null; }
do { if (pageParam != null) {
if (MyCommonUtil.existBlankArgument(loginName)) { PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; }
break; List<SysPermCode> permCodeList =
} sysPermCodeService.getUserPermCodeListByFilter(loginName, permCode);
if (pageParam != null) { JSONObject responseData = MyPageUtil.makeResponseData(permCodeList);
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); return ResponseResult.success(responseData);
}
List<SysPermCode> permCodeList =
sysPermCodeService.getUserPermCodeListByFilter(loginName, permCode);
responseData = MyPageUtil.makeResponseData(permCodeList);
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
} }

View File

@@ -1,14 +1,14 @@
package com.orange.admin.upms.controller; package com.orange.admin.upms.controller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.page.PageMethod;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import com.orange.admin.upms.model.SysPerm; import com.orange.admin.upms.model.SysPerm;
import com.orange.admin.upms.model.SysPermModule; import com.orange.admin.upms.model.SysPermModule;
import com.orange.admin.upms.service.SysPermService; import com.orange.admin.upms.service.SysPermService;
import com.orange.admin.common.core.constant.ErrorCodeEnum; import com.orange.admin.common.core.constant.ErrorCodeEnum;
import com.orange.admin.common.core.object.ResponseResult; import com.orange.admin.common.core.object.ResponseResult;
import com.orange.admin.common.core.object.VerifyResult; import com.orange.admin.common.core.object.CallResult;
import com.orange.admin.common.core.object.MyPageParam; import com.orange.admin.common.core.object.MyPageParam;
import com.orange.admin.common.core.util.MyCommonUtil; import com.orange.admin.common.core.util.MyCommonUtil;
import com.orange.admin.common.core.util.MyPageUtil; import com.orange.admin.common.core.util.MyPageUtil;
@@ -25,7 +25,7 @@ import java.util.Map;
* 权限资源管理接口控制器类。 * 权限资源管理接口控制器类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
@RestController @RestController
@@ -42,25 +42,19 @@ public class SysPermController {
* @return 应答结果对象包含新增权限资源的主键Id。 * @return 应答结果对象包含新增权限资源的主键Id。
*/ */
@PostMapping("/add") @PostMapping("/add")
public ResponseResult<?> add(@MyRequestBody SysPerm sysPerm) { public ResponseResult<JSONObject> add(@MyRequestBody SysPerm sysPerm) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysPerm);
String errorMessage; if (errorMessage != null) {
JSONObject responseData = null; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
do { }
errorMessage = MyCommonUtil.getModelValidationError(sysPerm); CallResult result = sysPermService.verifyRelatedData(sysPerm, null);
if (errorMessage != null) { if (!result.isSuccess()) {
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
break; }
} sysPerm = sysPermService.saveNew(sysPerm);
VerifyResult result = sysPermService.verifyRelatedData(sysPerm, null); JSONObject responseData = new JSONObject();
if (!result.isSuccess()) { responseData.put("permId", sysPerm.getPermId());
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); return ResponseResult.success(responseData);
}
sysPerm = sysPermService.saveNew(sysPerm);
responseData = new JSONObject();
responseData.put("permId", sysPerm.getPermId());
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -70,32 +64,26 @@ public class SysPermController {
* @return 应答结果对象包含更新权限资源的主键Id。 * @return 应答结果对象包含更新权限资源的主键Id。
*/ */
@PostMapping("/update") @PostMapping("/update")
public ResponseResult<?> update(@MyRequestBody SysPerm sysPerm) { public ResponseResult<Void> update(@MyRequestBody SysPerm sysPerm) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysPerm, Default.class, UpdateGroup.class);
String errorMessage; if (errorMessage != null) {
do { return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
errorMessage = MyCommonUtil.getModelValidationError(sysPerm, Default.class, UpdateGroup.class); }
if (errorMessage != null) { SysPerm originalPerm = sysPermService.getById(sysPerm.getPermId());
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; if (originalPerm == null) {
break; errorMessage = "数据验证失败,当前权限资源并不存在,请刷新后重试!";
} return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
SysPerm originalPerm = sysPermService.getById(sysPerm.getPermId()); }
if (originalPerm == null) { CallResult result = sysPermService.verifyRelatedData(sysPerm, originalPerm);
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; if (!result.isSuccess()) {
errorMessage = "数据验证失败,当前权限资源并不存在,请刷新后重试!"; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
break; }
} if (result.getData() != null) {
VerifyResult result = sysPermService.verifyRelatedData(sysPerm, originalPerm); SysPermModule permModule = (SysPermModule) result.getData().get("permModule");
if (!result.isSuccess()) { sysPerm.setModuleId(permModule.getModuleId());
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); }
} sysPermService.update(sysPerm, originalPerm);
if (result.getData() != null) { return ResponseResult.success();
SysPermModule permModule = (SysPermModule) result.getData().get("permModule");
sysPerm.setModuleId(permModule.getModuleId());
}
sysPermService.update(sysPerm, originalPerm);
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -105,21 +93,15 @@ public class SysPermController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/delete") @PostMapping("/delete")
public ResponseResult<?> delete(@MyRequestBody Long permId) { public ResponseResult<Void> delete(@MyRequestBody Long permId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(permId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
do { }
if (MyCommonUtil.existBlankArgument(permId)) { if (!sysPermService.remove(permId)) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; String errorMessage = "数据操作失败,权限不存在,请刷新后重试!";
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
if (!sysPermService.remove(permId)) { return ResponseResult.success();
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "数据操作失败,权限不存在,请刷新后重试!";
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -130,21 +112,14 @@ public class SysPermController {
*/ */
@GetMapping("/view") @GetMapping("/view")
public ResponseResult<SysPerm> view(@RequestParam Long permId) { public ResponseResult<SysPerm> view(@RequestParam Long permId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(permId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
SysPerm perm = null; }
do { SysPerm perm = sysPermService.getById(permId);
if (MyCommonUtil.existBlankArgument(permId)) { if (perm == null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
break; }
} return ResponseResult.success(perm);
perm = sysPermService.getById(permId);
if (perm == null) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, perm);
} }
/** /**
@@ -155,9 +130,9 @@ public class SysPermController {
* @return 应答结果对象,包含权限资源列表。 * @return 应答结果对象,包含权限资源列表。
*/ */
@PostMapping("/list") @PostMapping("/list")
public ResponseResult<?> list(@MyRequestBody SysPerm sysPermFilter, @MyRequestBody MyPageParam pageParam) { public ResponseResult<JSONObject> list(@MyRequestBody SysPerm sysPermFilter, @MyRequestBody MyPageParam pageParam) {
if (pageParam != null) { if (pageParam != null) {
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
} }
List<SysPerm> resultList = sysPermService.getPermListWithRelation(sysPermFilter); List<SysPerm> resultList = sysPermService.getPermListWithRelation(sysPermFilter);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList)); return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
@@ -173,27 +148,21 @@ public class SysPermController {
* @return 应答结果对象,包含该用户的全部权限资源列表。 * @return 应答结果对象,包含该用户的全部权限资源列表。
*/ */
@PostMapping("/listAllPermsByUserFilter") @PostMapping("/listAllPermsByUserFilter")
public ResponseResult<?> listAllPermsByUserFilter( public ResponseResult<JSONObject> listAllPermsByUserFilter(
@MyRequestBody String loginName, @MyRequestBody String loginName,
@MyRequestBody Long moduleId, @MyRequestBody Long moduleId,
@MyRequestBody String url, @MyRequestBody String url,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(loginName)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
JSONObject responseData = null; }
do { if (pageParam != null) {
if (MyCommonUtil.existBlankArgument(loginName)) { PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; }
break; List<Map<String, Object>> userPermMapList =
} sysPermService.getUserPermListByFilter(loginName, moduleId, url);
if (pageParam != null) { JSONObject responseData = MyPageUtil.makeResponseData(userPermMapList);
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); return ResponseResult.success(responseData);
}
List<Map<String, Object>> userPermMapList =
sysPermService.getUserPermListByFilter(loginName, moduleId, url);
responseData = MyPageUtil.makeResponseData(userPermMapList);
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -203,18 +172,12 @@ public class SysPermController {
* @return 应答结果对象,包含用户数据列表。 * @return 应答结果对象,包含用户数据列表。
*/ */
@PostMapping("/listAllUsers") @PostMapping("/listAllUsers")
public ResponseResult<?> listAllUsers(@MyRequestBody Long permId) { public ResponseResult<List<Map<String, Object>>> listAllUsers(@MyRequestBody Long permId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(permId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
List<Map<String, Object>> permUserMapList = null; }
do { List<Map<String, Object>> permUserMapList = sysPermService.getPermUserListById(permId);
if (MyCommonUtil.existBlankArgument(permId)) { return ResponseResult.success(permUserMapList);
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST;
break;
}
permUserMapList = sysPermService.getPermUserListById(permId);
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, permUserMapList);
} }
/** /**
@@ -224,17 +187,11 @@ public class SysPermController {
* @return 应答结果对象,包含角色数据列表。 * @return 应答结果对象,包含角色数据列表。
*/ */
@PostMapping("/listAllRoles") @PostMapping("/listAllRoles")
public ResponseResult<?> listAllRoles(@MyRequestBody Long permId) { public ResponseResult<List<Map<String, Object>>> listAllRoles(@MyRequestBody Long permId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(permId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
List<Map<String, Object>> permRoleMapList = null; }
do { List<Map<String, Object>> permRoleMapList = sysPermService.getPermRoleListById(permId);
if (MyCommonUtil.existBlankArgument(permId)) { return ResponseResult.success(permRoleMapList);
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST;
break;
}
permRoleMapList = sysPermService.getPermRoleListById(permId);
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, permRoleMapList);
} }
} }

View File

@@ -24,7 +24,7 @@ import java.util.Map;
* 权限资源模块管理接口控制器类。 * 权限资源模块管理接口控制器类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
@RestController @RestController
@@ -41,28 +41,20 @@ public class SysPermModuleController {
* @return 应答结果对象包含新增权限资源模块的主键Id。 * @return 应答结果对象包含新增权限资源模块的主键Id。
*/ */
@PostMapping("/add") @PostMapping("/add")
public ResponseResult<?> add(@MyRequestBody SysPermModule sysPermModule) { public ResponseResult<JSONObject> add(@MyRequestBody SysPermModule sysPermModule) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysPermModule);
String errorMessage; if (errorMessage != null) {
JSONObject responseData = null; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
do { }
errorMessage = MyCommonUtil.getModelValidationError(sysPermModule); if (sysPermModule.getParentId() != null
if (errorMessage != null) { && sysPermModuleService.getById(sysPermModule.getParentId()) == null) {
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; errorMessage = "数据验证失败,关联的上级权限模块并不存在,请刷新后重试!";
break; return ResponseResult.error(ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST, errorMessage);
} }
if (sysPermModule.getParentId() != null) { sysPermModuleService.saveNew(sysPermModule);
if (sysPermModuleService.getById(sysPermModule.getParentId()) == null) { JSONObject responseData = new JSONObject();
errorCodeEnum = ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST; responseData.put("permModuleId", sysPermModule.getModuleId());
errorMessage = "数据验证失败,关联的上级权限模块并不存在,请刷新后重试!"; return ResponseResult.success(responseData);
break;
}
}
sysPermModuleService.saveNew(sysPermModule);
responseData = new JSONObject();
responseData.put("permModuleId", sysPermModule.getModuleId());
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -72,34 +64,27 @@ public class SysPermModuleController {
* @return 应答结果对象包含新增权限资源模块的主键Id。 * @return 应答结果对象包含新增权限资源模块的主键Id。
*/ */
@PostMapping("/update") @PostMapping("/update")
public ResponseResult<?> update(@MyRequestBody SysPermModule sysPermModule) { public ResponseResult<Void> update(@MyRequestBody SysPermModule sysPermModule) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysPermModule, Default.class, UpdateGroup.class);
String errorMessage; if (errorMessage != null) {
do { return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
errorMessage = MyCommonUtil.getModelValidationError(sysPermModule, Default.class, UpdateGroup.class); }
if (errorMessage != null) { SysPermModule originalPermModule = sysPermModuleService.getById(sysPermModule.getModuleId());
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; if (originalPermModule == null) {
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
if (sysPermModule.getParentId() != null
&& !sysPermModule.getParentId().equals(originalPermModule.getParentId())) {
if (sysPermModuleService.getById(sysPermModule.getParentId()) == null) {
errorMessage = "数据验证失败,关联的上级权限模块并不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST, errorMessage);
} }
SysPermModule originalPermModule = sysPermModuleService.getById(sysPermModule.getModuleId()); }
if (originalPermModule == null) { if (!sysPermModuleService.update(sysPermModule, originalPermModule)) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; errorMessage = "数据验证失败,当前模块并不存在,请刷新后重试!";
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
if (sysPermModule.getParentId() != null return ResponseResult.success();
&& !sysPermModule.getParentId().equals(originalPermModule.getParentId())) {
if (sysPermModuleService.getById(sysPermModule.getParentId()) == null) {
errorCodeEnum = ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST;
errorMessage = "数据验证失败,关联的上级权限模块并不存在,请刷新后重试!";
break;
}
}
if (!sysPermModuleService.update(sysPermModule, originalPermModule)) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "数据验证失败,当前模块并不存在,请刷新后重试!";
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -109,26 +94,21 @@ public class SysPermModuleController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/delete") @PostMapping("/delete")
public ResponseResult<?> delete(@MyRequestBody Long moduleId) { public ResponseResult<Void> delete(@MyRequestBody Long moduleId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(moduleId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
do { }
if (MyCommonUtil.existBlankArgument(moduleId)) { String errorMessage;
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; if (sysPermModuleService.hasChildren(moduleId)
break; || sysPermModuleService.hasModulePerms(moduleId)) {
} errorMessage = "数据验证失败,当前权限模块存在子模块或权限资源,请先删除关联数据!";
if (sysPermModuleService.hasChildren(moduleId) return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage);
|| sysPermModuleService.hasModulePerms(moduleId)) { }
errorCodeEnum = ErrorCodeEnum.HAS_CHILDREN_DATA; if (!sysPermModuleService.remove(moduleId)) {
errorMessage = "数据验证失败,当前权限模块存在子模块或权限资源,请先删除关联数据"; errorMessage = "数据操作失败,权限模块存在,请刷新后重试";
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
if (!sysPermModuleService.remove(moduleId)) { return ResponseResult.success();
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "数据操作失败,权限模块不存在,请刷新后重试!";
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -147,7 +127,7 @@ public class SysPermModuleController {
* @return 应答结果对象,包含树状列表,结构为权限资源模块和权限资源之间的树状关系。 * @return 应答结果对象,包含树状列表,结构为权限资源模块和权限资源之间的树状关系。
*/ */
@GetMapping("/listAll") @GetMapping("/listAll")
public ResponseResult<?> listAll() { public ResponseResult<List<Map<String, Object>>> listAll() {
List<SysPermModule> sysPermModuleList = sysPermModuleService.getPermModuleAndPermList(); List<SysPermModule> sysPermModuleList = sysPermModuleService.getPermModuleAndPermList();
List<Map<String, Object>> resultList = new LinkedList<>(); List<Map<String, Object>> resultList = new LinkedList<>();
for (SysPermModule sysPermModule : sysPermModuleList) { for (SysPermModule sysPermModule : sysPermModuleList) {

View File

@@ -1,7 +1,7 @@
package com.orange.admin.upms.controller; package com.orange.admin.upms.controller;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.page.PageMethod;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import com.orange.admin.upms.model.SysRole; import com.orange.admin.upms.model.SysRole;
import com.orange.admin.upms.model.SysUser; import com.orange.admin.upms.model.SysUser;
@@ -14,7 +14,8 @@ import com.orange.admin.common.core.constant.ErrorCodeEnum;
import com.orange.admin.common.core.object.MyOrderParam; import com.orange.admin.common.core.object.MyOrderParam;
import com.orange.admin.common.core.object.MyPageParam; import com.orange.admin.common.core.object.MyPageParam;
import com.orange.admin.common.core.object.ResponseResult; import com.orange.admin.common.core.object.ResponseResult;
import com.orange.admin.common.core.object.VerifyResult; import com.orange.admin.common.core.object.CallResult;
import com.orange.admin.common.core.object.MyRelationParam;
import com.orange.admin.common.core.util.MyPageUtil; import com.orange.admin.common.core.util.MyPageUtil;
import com.orange.admin.common.core.annotation.MyRequestBody; import com.orange.admin.common.core.annotation.MyRequestBody;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -28,7 +29,7 @@ import java.util.stream.Collectors;
* 角色管理接口控制器类。 * 角色管理接口控制器类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
@RestController @RestController
@@ -49,29 +50,23 @@ public class SysRoleController {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@PostMapping("/add") @PostMapping("/add")
public ResponseResult<?> add(@MyRequestBody SysRole sysRole, @MyRequestBody String menuIdListString) { public ResponseResult<JSONObject> add(@MyRequestBody SysRole sysRole, @MyRequestBody String menuIdListString) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysRole);
String errorMessage; if (errorMessage != null) {
JSONObject responseData = null; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
do { }
errorMessage = MyCommonUtil.getModelValidationError(sysRole); CallResult result = sysRoleService.verifyRelatedData(sysRole, null, menuIdListString);
if (errorMessage != null) { if (!result.isSuccess()) {
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
break; }
} Set<Long> menuIdSet = null;
VerifyResult result = sysRoleService.verifyRelatedData(sysRole, null, menuIdListString); if (result.getData() != null) {
if (!result.isSuccess()) { menuIdSet = (Set<Long>) result.getData().get("menuIdSet");
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); }
} sysRoleService.saveNew(sysRole, menuIdSet);
Set<Long> menuIdSet = null; JSONObject responseData = new JSONObject();
if (result.getData() != null) { responseData.put("roleId", sysRole.getRoleId());
menuIdSet = (Set<Long>) result.getData().get("menuIdSet"); return ResponseResult.success(responseData);
}
sysRoleService.saveNew(sysRole, menuIdSet);
responseData = new JSONObject();
responseData.put("roleId", sysRole.getRoleId());
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -83,36 +78,29 @@ public class SysRoleController {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@PostMapping("/update") @PostMapping("/update")
public ResponseResult<?> update(@MyRequestBody SysRole sysRole, @MyRequestBody String menuIdListString) { public ResponseResult<Void> update(@MyRequestBody SysRole sysRole, @MyRequestBody String menuIdListString) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysRole, Default.class, UpdateGroup.class);
String errorMessage; if (errorMessage != null) {
do { return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
errorMessage = MyCommonUtil.getModelValidationError(sysRole, Default.class, UpdateGroup.class); }
if (errorMessage != null) { SysRole originalSysRole = sysRoleService.getById(sysRole.getRoleId());
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; if (originalSysRole == null) {
break; errorMessage = "数据验证失败,当前角色并不存在,请刷新后重试!";
} return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
SysRole originalSysRole = sysRoleService.getById(sysRole.getRoleId()); }
if (originalSysRole == null) { CallResult result = sysRoleService.verifyRelatedData(sysRole, originalSysRole, menuIdListString);
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; if (!result.isSuccess()) {
errorMessage = "数据验证失败,当前角色并不存在,请刷新后重试!"; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
break; }
} Set<Long> menuIdSet = null;
VerifyResult result = sysRoleService.verifyRelatedData(sysRole, originalSysRole, menuIdListString); if (result.getData() != null) {
if (!result.isSuccess()) { menuIdSet = (Set<Long>) result.getData().get("menuIdSet");
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); }
} if (!sysRoleService.update(sysRole, originalSysRole, menuIdSet)) {
Set<Long> menuIdSet = null; errorMessage = "更新失败,数据不存在,请刷新后重试!";
if (result.getData() != null) { return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
menuIdSet = (Set<Long>) result.getData().get("menuIdSet"); }
} return ResponseResult.success();
if (!sysRoleService.update(sysRole, originalSysRole, menuIdSet)) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "更新失败,数据不存在,请刷新后重试!";
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -122,21 +110,15 @@ public class SysRoleController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/delete") @PostMapping("/delete")
public ResponseResult<?> delete(@MyRequestBody Long roleId) { public ResponseResult<Void> delete(@MyRequestBody Long roleId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(roleId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
do { }
if (MyCommonUtil.existBlankArgument(roleId)) { if (!sysRoleService.remove(roleId)) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; String errorMessage = "数据操作失败,角色不存在,请刷新后重试!";
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
if (!sysRoleService.remove(roleId)) { return ResponseResult.success();
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "数据操作失败,角色不存在,请刷新后重试!";
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -148,12 +130,12 @@ public class SysRoleController {
* @return 应答结果对象,包含角色列表。 * @return 应答结果对象,包含角色列表。
*/ */
@PostMapping("/list") @PostMapping("/list")
public ResponseResult<?> list( public ResponseResult<JSONObject> list(
@MyRequestBody SysRole sysRoleFilter, @MyRequestBody SysRole sysRoleFilter,
@MyRequestBody MyOrderParam orderParam, @MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
if (pageParam != null) { if (pageParam != null) {
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
} }
List<SysRole> roleList = sysRoleService.getSysRoleList( List<SysRole> roleList = sysRoleService.getSysRoleList(
sysRoleFilter, MyOrderParam.buildOrderBy(orderParam, SysRole.class)); sysRoleFilter, MyOrderParam.buildOrderBy(orderParam, SysRole.class));
@@ -168,21 +150,14 @@ public class SysRoleController {
*/ */
@GetMapping("/view") @GetMapping("/view")
public ResponseResult<SysRole> view(@RequestParam Long roleId) { public ResponseResult<SysRole> view(@RequestParam Long roleId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(roleId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
SysRole sysRole = null; }
do { SysRole sysRole = sysRoleService.getByIdWithRelation(roleId, MyRelationParam.full());
if (MyCommonUtil.existBlankArgument(roleId)) { if (sysRole == null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
break; }
} return ResponseResult.success(sysRole);
sysRole = sysRoleService.getSysRoleWithRelation(roleId);
if (sysRole == null) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, sysRole);
} }
/** /**
@@ -196,32 +171,23 @@ public class SysRoleController {
* @return 应答结果对象,包含用户列表数据。 * @return 应答结果对象,包含用户列表数据。
*/ */
@PostMapping("/listNotInUserRole") @PostMapping("/listNotInUserRole")
public ResponseResult<?> listNotInUserRole( public ResponseResult<JSONObject> listNotInUserRole(
@MyRequestBody Long roleId, @MyRequestBody Long roleId,
@MyRequestBody SysUser sysUserFilter, @MyRequestBody SysUser sysUserFilter,
@MyRequestBody MyOrderParam orderParam, @MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; ResponseResult<Void> verifyResult = this.doRoleUserVerify(roleId);
String errorMessage = null; if (!verifyResult.isSuccess()) {
JSONObject responseData = null; return ResponseResult.errorFrom(verifyResult);
do { }
if (MyCommonUtil.existBlankArgument(roleId)) { if (pageParam != null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
break; }
} String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class);
if (!sysRoleService.existId(roleId)) { List<SysUser> resultList =
errorCodeEnum = ErrorCodeEnum.INVALID_RELATED_RECORD_ID; sysUserService.getNotInSysUserListByRoleId(roleId, sysUserFilter, orderBy);
break; JSONObject responseData = MyPageUtil.makeResponseData(resultList);
} return ResponseResult.success(responseData);
if (pageParam != null) {
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class);
List<SysUser> resultList =
sysUserService.getNotInSysUserListByRoleId(roleId, sysUserFilter, orderBy);
responseData = MyPageUtil.makeResponseData(resultList);
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -234,31 +200,32 @@ public class SysRoleController {
* @return 应答结果对象,包含用户列表数据。 * @return 应答结果对象,包含用户列表数据。
*/ */
@PostMapping("/listUserRole") @PostMapping("/listUserRole")
public ResponseResult<?> listUserRole( public ResponseResult<JSONObject> listUserRole(
@MyRequestBody Long roleId, @MyRequestBody Long roleId,
@MyRequestBody SysUser sysUserFilter, @MyRequestBody SysUser sysUserFilter,
@MyRequestBody MyOrderParam orderParam, @MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; ResponseResult<Void> verifyResult = this.doRoleUserVerify(roleId);
String errorMessage = null; if (!verifyResult.isSuccess()) {
JSONObject responseData = null; return ResponseResult.errorFrom(verifyResult);
do { }
if (MyCommonUtil.existBlankArgument(roleId)) { if (pageParam != null) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
break; }
} String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class);
if (!sysRoleService.existId(roleId)) { List<SysUser> resultList = sysUserService.getSysUserListByRoleId(roleId, sysUserFilter, orderBy);
errorCodeEnum = ErrorCodeEnum.INVALID_RELATED_RECORD_ID; JSONObject responseData = MyPageUtil.makeResponseData(resultList);
break; return ResponseResult.success(responseData);
} }
if (pageParam != null) {
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); private ResponseResult<Void> doRoleUserVerify(Long roleId) {
} if (MyCommonUtil.existBlankArgument(roleId)) {
String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
List<SysUser> resultList = sysUserService.getSysUserListByRoleId(roleId, sysUserFilter, orderBy); }
responseData = MyPageUtil.makeResponseData(resultList); if (!sysRoleService.existId(roleId)) {
} while (false); return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData); }
return ResponseResult.success();
} }
/** /**
@@ -269,32 +236,26 @@ public class SysRoleController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/addUserRole") @PostMapping("/addUserRole")
public ResponseResult<?> addUserRole( public ResponseResult<Void> addUserRole(
@MyRequestBody Long roleId, @MyRequestBody String userIdListString) { @MyRequestBody Long roleId, @MyRequestBody String userIdListString) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(roleId, userIdListString)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
do { }
if (MyCommonUtil.existBlankArgument(roleId, userIdListString)) { Set<Long> userIdSet = Arrays.stream(
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
break; if (!sysRoleService.existId(roleId)
} || !sysUserService.existUniqueKeyList("userId", userIdSet)) {
Set<Long> userIdSet = Arrays.stream( return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID);
userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); }
if (!sysRoleService.existId(roleId) List<SysUserRole> userRoleList = new LinkedList<>();
|| !sysUserService.existUniqueKeyList("userId", userIdSet)) { for (Long userId : userIdSet) {
errorCodeEnum = ErrorCodeEnum.INVALID_RELATED_RECORD_ID; SysUserRole userRole = new SysUserRole();
break; userRole.setRoleId(roleId);
} userRole.setUserId(userId);
List<SysUserRole> userRoleList = new LinkedList<>(); userRoleList.add(userRole);
for (Long userId : userIdSet) { }
SysUserRole userRole = new SysUserRole(); sysRoleService.addUserRoleList(userRoleList);
userRole.setRoleId(roleId); return ResponseResult.success();
userRole.setUserId(userId);
userRoleList.add(userRole);
}
sysRoleService.addUserRoleList(userRoleList);
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -305,21 +266,15 @@ public class SysRoleController {
* @return 应答数据结果。 * @return 应答数据结果。
*/ */
@PostMapping("/deleteUserRole") @PostMapping("/deleteUserRole")
public ResponseResult<?> deleteUserRole( public ResponseResult<Void> deleteUserRole(
@MyRequestBody Long roleId, @MyRequestBody Long userId) { @MyRequestBody Long roleId, @MyRequestBody Long userId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(roleId, userId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
do { }
if (MyCommonUtil.existBlankArgument(roleId, userId)) { if (!sysRoleService.removeUserRole(roleId, userId)) {
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
break; }
} return ResponseResult.success();
if (!sysRoleService.removeUserRole(roleId, userId)) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -331,23 +286,17 @@ public class SysRoleController {
* @return 符合条件的角色列表。 * @return 符合条件的角色列表。
*/ */
@PostMapping("/listAllRolesByPermCode") @PostMapping("/listAllRolesByPermCode")
public ResponseResult<?> listAllRolesByPermCode( public ResponseResult<JSONObject> listAllRolesByPermCode(
@MyRequestBody Long permCodeId, @MyRequestBody MyPageParam pageParam) { @MyRequestBody Long permCodeId, @MyRequestBody MyPageParam pageParam) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(permCodeId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
JSONObject responseData = null; }
do { if (pageParam != null) {
if (MyCommonUtil.existBlankArgument(permCodeId)) { PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; }
break; List<SysRole> roleList = sysRoleService.getSysRoleListByPermCodeId(permCodeId);
} JSONObject responseData = MyPageUtil.makeResponseData(roleList);
if (pageParam != null) { return ResponseResult.success(responseData);
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
List<SysRole> roleList = sysRoleService.getSysRoleListByPermCodeId(permCodeId);
responseData = MyPageUtil.makeResponseData(roleList);
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -359,22 +308,16 @@ public class SysRoleController {
* @return 符合条件的角色列表。 * @return 符合条件的角色列表。
*/ */
@PostMapping("/listAllRolesByPerm") @PostMapping("/listAllRolesByPerm")
public ResponseResult<?> listAllRolesByPerm( public ResponseResult<JSONObject> listAllRolesByPerm(
@MyRequestBody String url, @MyRequestBody MyPageParam pageParam) { @MyRequestBody String url, @MyRequestBody MyPageParam pageParam) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(url)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
JSONObject responseData = null; }
do { if (pageParam != null) {
if (MyCommonUtil.existBlankArgument(url)) { PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; }
break; List<SysRole> roleList = sysRoleService.getSysRoleListByPerm(url);
} JSONObject responseData = MyPageUtil.makeResponseData(roleList);
if (pageParam != null) { return ResponseResult.success(responseData);
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
List<SysRole> roleList = sysRoleService.getSysRoleListByPerm(url);
responseData = MyPageUtil.makeResponseData(roleList);
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
} }

View File

@@ -1,7 +1,7 @@
package com.orange.admin.upms.controller; package com.orange.admin.upms.controller;
import cn.jimmyshi.beanquery.BeanQuery; import cn.jimmyshi.beanquery.BeanQuery;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.page.PageMethod;
import com.orange.admin.upms.model.*; import com.orange.admin.upms.model.*;
import com.orange.admin.upms.service.*; import com.orange.admin.upms.service.*;
import com.orange.admin.common.core.object.*; import com.orange.admin.common.core.object.*;
@@ -22,7 +22,7 @@ import javax.validation.groups.Default;
* 用户管理操作控制器类。 * 用户管理操作控制器类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
@RestController @RestController
@@ -44,33 +44,25 @@ public class SysUserController {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@PostMapping("/add") @PostMapping("/add")
public ResponseResult<?> add( public ResponseResult<JSONObject> add(
@MyRequestBody SysUser sysUser, @MyRequestBody SysUser sysUser,
@MyRequestBody String roleIdListString, @MyRequestBody String roleIdListString,
@MyRequestBody String dataPermIdListString) { @MyRequestBody String dataPermIdListString) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysUser);
String errorMessage; if (errorMessage != null) {
JSONObject responseData = null; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
do { }
errorMessage = MyCommonUtil.getModelValidationError(sysUser); CallResult result = sysUserService.verifyRelatedData(
if (errorMessage != null) { sysUser, null, roleIdListString, dataPermIdListString);
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; if (!result.isSuccess()) {
break; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
} }
VerifyResult result = sysUserService.verifyRelatedData( Set<Long> roleIdSet = (Set<Long>) result.getData().get("roleIdSet");
sysUser, null, roleIdListString, dataPermIdListString); Set<Long> dataPermIdSet = (Set<Long>) result.getData().get("dataPermIdSet");
if (!result.isSuccess()) { sysUserService.saveNew(sysUser, roleIdSet, dataPermIdSet, applicationConfig.getPasswordSalt());
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; JSONObject responseData = new JSONObject();
errorMessage = result.getErrorMessage(); responseData.put("userId", sysUser.getUserId());
break; return ResponseResult.success(responseData);
}
Set<Long> roleIdSet = (Set<Long>) result.getData().get("roleIdSet");
Set<Long> dataPermIdSet = (Set<Long>) result.getData().get("dataPermIdSet");
sysUserService.saveNew(sysUser, roleIdSet, dataPermIdSet, applicationConfig.getPasswordSalt());
responseData = new JSONObject();
responseData.put("userId", sysUser.getUserId());
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, responseData);
} }
/** /**
@@ -83,39 +75,29 @@ public class SysUserController {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@PostMapping("/update") @PostMapping("/update")
public ResponseResult<?> update( public ResponseResult<Void> update(
@MyRequestBody SysUser sysUser, @MyRequestBody SysUser sysUser,
@MyRequestBody String roleIdListString, @MyRequestBody String roleIdListString,
@MyRequestBody String dataPermIdListString) { @MyRequestBody String dataPermIdListString) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage = MyCommonUtil.getModelValidationError(sysUser, Default.class, UpdateGroup.class);
String errorMessage; if (errorMessage != null) {
do { return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage);
errorMessage = MyCommonUtil.getModelValidationError(sysUser, Default.class, UpdateGroup.class); }
if (errorMessage != null) { SysUser originalUser = sysUserService.getById(sysUser.getUserId());
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; if (originalUser == null) {
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
} }
SysUser originalUser = sysUserService.getById(sysUser.getUserId()); CallResult result = sysUserService.verifyRelatedData(
if (originalUser == null) { sysUser, originalUser, roleIdListString, dataPermIdListString);
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; if (!result.isSuccess()) {
break; return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage());
} }
VerifyResult result = sysUserService.verifyRelatedData( Set<Long> roleIdSet = (Set<Long>) result.getData().get("roleIdSet");
sysUser, originalUser, roleIdListString, dataPermIdListString); Set<Long> dataPermIdSet = (Set<Long>) result.getData().get("dataPermIdSet");
if (!result.isSuccess()) { if (!sysUserService.update(sysUser, originalUser, roleIdSet, dataPermIdSet)) {
errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
errorMessage = result.getErrorMessage(); }
break; return ResponseResult.success();
}
Set<Long> roleIdSet = (Set<Long>) result.getData().get("roleIdSet");
Set<Long> dataPermIdSet = (Set<Long>) result.getData().get("dataPermIdSet");
if (!sysUserService.update(sysUser, originalUser, roleIdSet, dataPermIdSet)) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "更新失败,数据不存在,请刷新后重试!";
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -125,21 +107,15 @@ public class SysUserController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/resetPassword") @PostMapping("/resetPassword")
public ResponseResult<?> resetPassword(@MyRequestBody Long userId) { public ResponseResult<Void> resetPassword(@MyRequestBody Long userId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(userId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
do { }
if (MyCommonUtil.existBlankArgument(userId)) { if (!sysUserService.resetPassword(
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; userId, applicationConfig.getDefaultUserPassword(), applicationConfig.getPasswordSalt())) {
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
} }
if (!sysUserService.resetPassword( return ResponseResult.success();
userId, applicationConfig.getDefaultUserPassword(), applicationConfig.getPasswordSalt())) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -149,29 +125,23 @@ public class SysUserController {
* @return 应答结果对象。 * @return 应答结果对象。
*/ */
@PostMapping("/delete") @PostMapping("/delete")
public ResponseResult<?> delete(@MyRequestBody Long userId) { public ResponseResult<Void> delete(@MyRequestBody Long userId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; String errorMessage;
String errorMessage = null; if (MyCommonUtil.existBlankArgument(userId)) {
do { return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
if (MyCommonUtil.existBlankArgument(userId)) { }
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; // 验证关联Id的数据合法性
break; SysUser originalSysUser = sysUserService.getById(userId);
} if (originalSysUser == null) {
// 验证关联Id的数据合法性 // NOTE: 修改下面方括号中的话述
SysUser originalSysUser = sysUserService.getById(userId); errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
if (originalSysUser == null) { return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; }
//TODO 修改下面方括号中的话述 if (!sysUserService.remove(userId)) {
errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
} }
if (!sysUserService.remove(userId)) { return ResponseResult.success();
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage);
} }
/** /**
@@ -183,12 +153,12 @@ public class SysUserController {
* @return 应答结果对象,包含查询结果集。 * @return 应答结果对象,包含查询结果集。
*/ */
@PostMapping("/list") @PostMapping("/list")
public ResponseResult<?> list( public ResponseResult<JSONObject> list(
@MyRequestBody SysUser sysUserFilter, @MyRequestBody SysUser sysUserFilter,
@MyRequestBody MyOrderParam orderParam, @MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) { @MyRequestBody MyPageParam pageParam) {
if (pageParam != null) { if (pageParam != null) {
PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
} }
String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class);
List<SysUser> resultList = sysUserService.getSysUserListWithRelation(sysUserFilter, orderBy); List<SysUser> resultList = sysUserService.getSysUserListWithRelation(sysUserFilter, orderBy);
@@ -203,21 +173,15 @@ public class SysUserController {
*/ */
@GetMapping("/view") @GetMapping("/view")
public ResponseResult<SysUser> view(@RequestParam Long userId) { public ResponseResult<SysUser> view(@RequestParam Long userId) {
ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; if (MyCommonUtil.existBlankArgument(userId)) {
String errorMessage = null; return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
SysUser sysUser = null; }
do { // 这里查看用户数据时候需要把用户多对多关联的角色和数据权限Id一并查出。
if (MyCommonUtil.existBlankArgument(userId)) { SysUser sysUser = sysUserService.getByIdWithRelation(userId, MyRelationParam.full());
errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; if (sysUser == null) {
break; return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
} }
sysUser = sysUserService.getByIdWithRelation(userId); return ResponseResult.success(sysUser);
if (sysUser == null) {
errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST;
break;
}
} while (false);
return ResponseResult.create(errorCodeEnum, errorMessage, sysUser);
} }
/** /**
@@ -228,8 +192,8 @@ public class SysUserController {
* @return 应答结果对象,包含的数据为 List<Map<String, String>>map中包含两条记录key的值分别是id和namevalue对应具体数据。 * @return 应答结果对象,包含的数据为 List<Map<String, String>>map中包含两条记录key的值分别是id和namevalue对应具体数据。
*/ */
@GetMapping("/listDictSysUser") @GetMapping("/listDictSysUser")
public ResponseResult<?> listDictSysUser(SysUser filter) { public ResponseResult<List<Map<String, Object>>> listDictSysUser(SysUser filter) {
List<SysUser> resultList = sysUserService.getListByFilter(filter); List<SysUser> resultList = sysUserService.getListByFilter(filter, null);
return ResponseResult.success(BeanQuery.select( return ResponseResult.success(BeanQuery.select(
"userId as id", "loginName as name").executeFrom(resultList)); "userId as id", "loginName as name").executeFrom(resultList));
} }

View File

@@ -7,7 +7,7 @@ import com.orange.admin.upms.model.SysDataPermDept;
* 数据权限与部门关系数据访问操作接口。 * 数据权限与部门关系数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysDataPermDeptMapper extends BaseDaoMapper<SysDataPermDept> { public interface SysDataPermDeptMapper extends BaseDaoMapper<SysDataPermDept> {
} }

View File

@@ -11,7 +11,7 @@ import java.util.List;
* NOTE: 该对象一定不能被 @EnableDataPerm 注解标注,否则会导致无限递归。 * NOTE: 该对象一定不能被 @EnableDataPerm 注解标注,否则会导致无限递归。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysDataPermMapper extends BaseDaoMapper<SysDataPerm> { public interface SysDataPermMapper extends BaseDaoMapper<SysDataPerm> {
@@ -19,7 +19,7 @@ public interface SysDataPermMapper extends BaseDaoMapper<SysDataPerm> {
* 获取数据权限列表。 * 获取数据权限列表。
* *
* @param sysDataPermFilter 过滤对象。 * @param sysDataPermFilter 过滤对象。
* @param orderBy 排序字符串。 * @param orderBy 排序字符串。
* @return 过滤后的数据权限列表。 * @return 过滤后的数据权限列表。
*/ */
List<SysDataPerm> getSysDataPermList( List<SysDataPerm> getSysDataPermList(

View File

@@ -10,7 +10,7 @@ import java.util.List;
* 数据权限与菜单关系数据访问操作接口。 * 数据权限与菜单关系数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysDataPermMenuMapper extends BaseDaoMapper<SysDataPermMenu> { public interface SysDataPermMenuMapper extends BaseDaoMapper<SysDataPermMenu> {

View File

@@ -9,18 +9,10 @@ import java.util.List;
* 数据权限与用户关系数据访问操作接口。 * 数据权限与用户关系数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysDataPermUserMapper extends BaseDaoMapper<SysDataPermUser> { public interface SysDataPermUserMapper extends BaseDaoMapper<SysDataPermUser> {
/**
* 获取用户的数据权限Id列表。
*
* @param userId 用户Id。
* @return 数据权限Id列表。
*/
List<Long> getDataPermIdListByUserId(Long userId);
/** /**
* 批量添加数据权限和用户关系的列表。 * 批量添加数据权限和用户关系的列表。
* *

View File

@@ -10,7 +10,7 @@ import java.util.*;
* 部门管理数据操作访问接口。 * 部门管理数据操作访问接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysDeptMapper extends BaseDaoMapper<SysDept> { public interface SysDeptMapper extends BaseDaoMapper<SysDept> {

View File

@@ -9,7 +9,7 @@ import java.util.List;
* 菜单数据访问操作接口。 * 菜单数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysMenuMapper extends BaseDaoMapper<SysMenu> { public interface SysMenuMapper extends BaseDaoMapper<SysMenu> {

View File

@@ -7,7 +7,7 @@ import com.orange.admin.upms.model.SysMenuPermCode;
* 菜单与权限字关系数据访问操作接口。 * 菜单与权限字关系数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysMenuPermCodeMapper extends BaseDaoMapper<SysMenuPermCode> { public interface SysMenuPermCodeMapper extends BaseDaoMapper<SysMenuPermCode> {
} }

View File

@@ -11,7 +11,7 @@ import java.util.Map;
* 权限字数据访问操作接口。 * 权限字数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysPermCodeMapper extends BaseDaoMapper<SysPermCode> { public interface SysPermCodeMapper extends BaseDaoMapper<SysPermCode> {
@@ -35,7 +35,7 @@ public interface SysPermCodeMapper extends BaseDaoMapper<SysPermCode> {
* 获取指定用户的权限字列表。 * 获取指定用户的权限字列表。
* *
* @param loginName 精确匹配用户登录名。 * @param loginName 精确匹配用户登录名。
* @param permCode 模糊匹配的权限字名LIKE %permCode%。 * @param permCode 模糊匹配的权限字名LIKE %permCode%。
* @return 权限字列表。 * @return 权限字列表。
*/ */
List<SysPermCode> getUserPermCodeListByFilter( List<SysPermCode> getUserPermCodeListByFilter(

View File

@@ -7,7 +7,7 @@ import com.orange.admin.upms.model.SysPermCodePerm;
* 权限字与权限资源关系数据访问操作接口。 * 权限字与权限资源关系数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysPermCodePermMapper extends BaseDaoMapper<SysPermCodePerm> { public interface SysPermCodePermMapper extends BaseDaoMapper<SysPermCodePerm> {
} }

View File

@@ -11,7 +11,7 @@ import java.util.Map;
* 权限资源数据访问操作接口。 * 权限资源数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysPermMapper extends BaseDaoMapper<SysPerm> { public interface SysPermMapper extends BaseDaoMapper<SysPerm> {
@@ -28,7 +28,7 @@ public interface SysPermMapper extends BaseDaoMapper<SysPerm> {
* *
* @param loginName 精确匹配用户登录名。 * @param loginName 精确匹配用户登录名。
* @param moduleId 精确匹配权限模块Id。 * @param moduleId 精确匹配权限模块Id。
* @param url 权限的url过滤条件LIKE %url%。 * @param url 权限的url过滤条件LIKE %url%。
* @return 权限列表。 * @return 权限列表。
*/ */
List<Map<String, Object>> getUserPermListByFilter( List<Map<String, Object>> getUserPermListByFilter(

View File

@@ -9,7 +9,7 @@ import java.util.List;
* 权限资源模块数据访问操作接口。 * 权限资源模块数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysPermModuleMapper extends BaseDaoMapper<SysPermModule> { public interface SysPermModuleMapper extends BaseDaoMapper<SysPermModule> {

View File

@@ -7,7 +7,7 @@ import com.orange.admin.upms.model.SysPermWhitelist;
* 权限资源白名单数据访问操作接口。 * 权限资源白名单数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysPermWhitelistMapper extends BaseDaoMapper<SysPermWhitelist> { public interface SysPermWhitelistMapper extends BaseDaoMapper<SysPermWhitelist> {
} }

View File

@@ -10,7 +10,7 @@ import java.util.List;
* 角色数据访问操作接口。 * 角色数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysRoleMapper extends BaseDaoMapper<SysRole> { public interface SysRoleMapper extends BaseDaoMapper<SysRole> {

View File

@@ -7,7 +7,7 @@ import com.orange.admin.upms.model.SysRoleMenu;
* 角色与菜单操作关联关系数据访问操作接口。 * 角色与菜单操作关联关系数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysRoleMenuMapper extends BaseDaoMapper<SysRoleMenu> { public interface SysRoleMenuMapper extends BaseDaoMapper<SysRoleMenu> {
} }

View File

@@ -10,7 +10,7 @@ import java.util.*;
* 用户管理数据操作访问接口。 * 用户管理数据操作访问接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysUserMapper extends BaseDaoMapper<SysUser> { public interface SysUserMapper extends BaseDaoMapper<SysUser> {
@@ -27,9 +27,9 @@ public interface SysUserMapper extends BaseDaoMapper<SysUser> {
/** /**
* 根据角色Id获取关联的用户Id列表。 * 根据角色Id获取关联的用户Id列表。
* *
* @param roleId 关联的角色Id。 * @param roleId 关联的角色Id。
* @param sysUserFilter 用户过滤条件对象。 * @param sysUserFilter 用户过滤条件对象。
* @param orderBy order by从句的参数。 * @param orderBy order by从句的参数。
* @return 和RoleId关联的用户列表。 * @return 和RoleId关联的用户列表。
*/ */
List<SysUser> getSysUserListByRoleId( List<SysUser> getSysUserListByRoleId(
@@ -40,7 +40,7 @@ public interface SysUserMapper extends BaseDaoMapper<SysUser> {
/** /**
* 根据角色Id获取和当前角色Id没有建立多对多关联关系的用户Id列表。 * 根据角色Id获取和当前角色Id没有建立多对多关联关系的用户Id列表。
* *
* @param roleId 关联的角色Id。 * @param roleId 关联的角色Id。
* @param sysUserFilter 用户过滤条件对象。 * @param sysUserFilter 用户过滤条件对象。
* @param orderBy order by从句的参数。 * @param orderBy order by从句的参数。
* @return 和RoleId没有建立关联关系的用户列表。 * @return 和RoleId没有建立关联关系的用户列表。
@@ -53,7 +53,7 @@ public interface SysUserMapper extends BaseDaoMapper<SysUser> {
/** /**
* 根据数据权限Id获取关联的用户Id列表。 * 根据数据权限Id获取关联的用户Id列表。
* *
* @param dataPermId 关联的数据权限Id。 * @param dataPermId 关联的数据权限Id。
* @param sysUserFilter 用户过滤条件对象。 * @param sysUserFilter 用户过滤条件对象。
* @param orderBy order by从句的参数。 * @param orderBy order by从句的参数。
* @return 和DataPermId关联的用户列表。 * @return 和DataPermId关联的用户列表。
@@ -66,7 +66,7 @@ public interface SysUserMapper extends BaseDaoMapper<SysUser> {
/** /**
* 根据数据权限Id获取和当前数据权限Id没有建立多对多关联关系的用户Id列表。 * 根据数据权限Id获取和当前数据权限Id没有建立多对多关联关系的用户Id列表。
* *
* @param dataPermId 关联的数据权限Id。 * @param dataPermId 关联的数据权限Id。
* @param sysUserFilter 用户过滤条件对象。 * @param sysUserFilter 用户过滤条件对象。
* @param orderBy order by从句的参数。 * @param orderBy order by从句的参数。
* @return 和DataPermId没有建立关联关系的用户列表。 * @return 和DataPermId没有建立关联关系的用户列表。

View File

@@ -2,7 +2,6 @@ package com.orange.admin.upms.dao;
import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.base.dao.BaseDaoMapper;
import com.orange.admin.upms.model.SysUserRole; import com.orange.admin.upms.model.SysUserRole;
import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@@ -10,18 +9,10 @@ import java.util.List;
* 用户与角色关联关系数据访问操作接口。 * 用户与角色关联关系数据访问操作接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public interface SysUserRoleMapper extends BaseDaoMapper<SysUserRole> { public interface SysUserRoleMapper extends BaseDaoMapper<SysUserRole> {
/**
* 获取用户的角色Id列表。
*
* @param userId 用户Id。
* @return 角色Id列表。
*/
List<Long> getRoleIdListByUserId(@Param("userId") Long userId);
/** /**
* 批量插入用户角色信息,如果用户角色已经存在,则不会重复插入。 * 批量插入用户角色信息,如果用户角色已经存在,则不会重复插入。
* *

View File

@@ -6,10 +6,6 @@
<result column="user_id" jdbcType="BIGINT" property="userId"/> <result column="user_id" jdbcType="BIGINT" property="userId"/>
</resultMap> </resultMap>
<select id="getDataPermIdListByUserId" resultType="java.lang.Long">
SELECT data_perm_id FROM zz_sys_data_perm_user WHERE user_id = #{userId}
</select>
<insert id="addDataPermUserList"> <insert id="addDataPermUserList">
REPLACE INTO zz_sys_data_perm_user(data_perm_id, user_id) VALUES REPLACE INTO zz_sys_data_perm_user(data_perm_id, user_id) VALUES
<foreach collection="list" index="index" item="item" separator=","> <foreach collection="list" index="index" item="item" separator=",">

View File

@@ -6,10 +6,6 @@
<id column="role_id" jdbcType="BIGINT" property="roleId"/> <id column="role_id" jdbcType="BIGINT" property="roleId"/>
</resultMap> </resultMap>
<select id="getRoleIdListByUserId" resultType="java.lang.Long">
SELECT role_id FROM zz_sys_user_role WHERE user_id = #{userId}
</select>
<insert id="addUserRoleList"> <insert id="addUserRoleList">
REPLACE INTO zz_sys_user_role(user_id, role_id) VALUES REPLACE INTO zz_sys_user_role(user_id, role_id) VALUES
<foreach collection="list" index="index" item="item" separator=","> <foreach collection="list" index="index" item="item" separator=",">

View File

@@ -2,16 +2,23 @@ package com.orange.admin.upms.model;
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONField;
import com.orange.admin.common.core.annotation.DeletedFlagColumn; import com.orange.admin.common.core.annotation.DeletedFlagColumn;
import com.orange.admin.common.core.annotation.JobUpdateTimeColumn;
import com.orange.admin.common.core.annotation.RelationManyToMany;
import com.orange.admin.common.core.validator.ConstDictRef; import com.orange.admin.common.core.validator.ConstDictRef;
import com.orange.admin.common.core.validator.UpdateGroup; import com.orange.admin.common.core.validator.UpdateGroup;
import com.orange.admin.common.core.constant.DataPermRuleType; import com.orange.admin.common.core.constant.DataPermRuleType;
import com.orange.admin.common.core.annotation.JobUpdateTimeColumn;
import lombok.Data; import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
import javax.validation.constraints.*; import javax.validation.constraints.*;
import java.util.*; import java.util.*;
/**
* 数据权限实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_data_perm") @Table(name = "zz_sys_data_perm")
public class SysDataPerm { public class SysDataPerm {
@@ -72,9 +79,17 @@ public class SysDataPerm {
@Column(name = "deleted_flag") @Column(name = "deleted_flag")
private Integer deletedFlag; private Integer deletedFlag;
@RelationManyToMany(
relationMapperName = "sysDataPermDeptMapper",
relationMasterIdField = "dataPermId",
relationModelClass = SysDataPermDept.class)
@Transient @Transient
private List<SysDataPermDept> dataPermDeptList; private List<SysDataPermDept> dataPermDeptList;
@RelationManyToMany(
relationMapperName = "sysDataPermMenuMapper",
relationMasterIdField = "dataPermId",
relationModelClass = SysDataPermMenu.class)
@Transient @Transient
private List<SysDataPermMenu> dataPermMenuList; private List<SysDataPermMenu> dataPermMenuList;

View File

@@ -7,6 +7,12 @@ import javax.persistence.Column;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.Table; import javax.persistence.Table;
/**
* 数据权限与部门关联实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@ToString(of = {"deptId"}) @ToString(of = {"deptId"})
@Table(name = "zz_sys_data_perm_dept") @Table(name = "zz_sys_data_perm_dept")

View File

@@ -4,6 +4,12 @@ import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
/**
* 数据权限与菜单关联实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_data_perm_menu") @Table(name = "zz_sys_data_perm_menu")
public class SysDataPermMenu { public class SysDataPermMenu {

View File

@@ -4,6 +4,12 @@ import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
/**
* 数据权限与用户关联实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_data_perm_user") @Table(name = "zz_sys_data_perm_user")
public class SysDataPermUser { public class SysDataPermUser {

View File

@@ -10,6 +10,12 @@ import javax.validation.constraints.*;
import java.util.Date; import java.util.Date;
/**
* SysDept实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_dept") @Table(name = "zz_sys_dept")
public class SysDept { public class SysDept {

View File

@@ -2,6 +2,7 @@ package com.orange.admin.upms.model;
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONField;
import com.orange.admin.common.core.annotation.DeletedFlagColumn; import com.orange.admin.common.core.annotation.DeletedFlagColumn;
import com.orange.admin.common.core.annotation.RelationManyToMany;
import com.orange.admin.common.core.validator.ConstDictRef; import com.orange.admin.common.core.validator.ConstDictRef;
import com.orange.admin.common.core.validator.UpdateGroup; import com.orange.admin.common.core.validator.UpdateGroup;
import com.orange.admin.upms.model.constant.SysMenuType; import com.orange.admin.upms.model.constant.SysMenuType;
@@ -12,6 +13,12 @@ import javax.validation.constraints.*;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
/**
* 菜单实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_menu") @Table(name = "zz_sys_menu")
public class SysMenu { public class SysMenu {
@@ -77,6 +84,10 @@ public class SysMenu {
@Column(name = "deleted_flag") @Column(name = "deleted_flag")
private Integer deletedFlag; private Integer deletedFlag;
@RelationManyToMany(
relationMapperName = "sysMenuPermCodeMapper",
relationMasterIdField = "menuId",
relationModelClass = SysMenuPermCode.class)
@Transient @Transient
private List<Long> permCodeIdList; private List<SysMenuPermCode> sysMenuPermCodeList;
} }

View File

@@ -4,6 +4,12 @@ import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
/**
* 菜单与权限字关联实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_menu_perm_code") @Table(name = "zz_sys_menu_perm_code")
public class SysMenuPermCode { public class SysMenuPermCode {

View File

@@ -11,6 +11,12 @@ import javax.validation.constraints.*;
import java.util.Date; import java.util.Date;
import java.util.Map; import java.util.Map;
/**
* 权限资源实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_perm") @Table(name = "zz_sys_perm")
public class SysPerm { public class SysPerm {

View File

@@ -2,6 +2,7 @@ package com.orange.admin.upms.model;
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONField;
import com.orange.admin.common.core.annotation.DeletedFlagColumn; import com.orange.admin.common.core.annotation.DeletedFlagColumn;
import com.orange.admin.common.core.annotation.RelationManyToMany;
import com.orange.admin.common.core.validator.ConstDictRef; import com.orange.admin.common.core.validator.ConstDictRef;
import com.orange.admin.common.core.validator.UpdateGroup; import com.orange.admin.common.core.validator.UpdateGroup;
import com.orange.admin.upms.model.constant.SysPermCodeType; import com.orange.admin.upms.model.constant.SysPermCodeType;
@@ -12,6 +13,12 @@ import javax.validation.constraints.*;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
/**
* 权限字实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_perm_code") @Table(name = "zz_sys_perm_code")
public class SysPermCode { public class SysPermCode {
@@ -73,6 +80,10 @@ public class SysPermCode {
@Column(name = "deleted_flag") @Column(name = "deleted_flag")
private Integer deletedFlag; private Integer deletedFlag;
@RelationManyToMany(
relationMapperName = "sysPermCodePermMapper",
relationMasterIdField = "permCodeId",
relationModelClass = SysPermCodePerm.class)
@Transient @Transient
private List<Long> permIdList; private List<SysPermCodePerm> sysPermCodePermList;
} }

View File

@@ -4,6 +4,12 @@ import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
/**
* 权限字与权限资源关联实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_perm_code_perm") @Table(name = "zz_sys_perm_code_perm")
public class SysPermCodePerm { public class SysPermCodePerm {

View File

@@ -12,6 +12,12 @@ import javax.validation.constraints.*;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
/**
* 权限模块实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_perm_module") @Table(name = "zz_sys_perm_module")
public class SysPermModule { public class SysPermModule {

View File

@@ -4,6 +4,12 @@ import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
/**
* 白名单实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_perm_whitelist") @Table(name = "zz_sys_perm_whitelist")
public class SysPermWhitelist { public class SysPermWhitelist {

View File

@@ -2,8 +2,9 @@ package com.orange.admin.upms.model;
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONField;
import com.orange.admin.common.core.annotation.DeletedFlagColumn; import com.orange.admin.common.core.annotation.DeletedFlagColumn;
import com.orange.admin.common.core.validator.UpdateGroup;
import com.orange.admin.common.core.annotation.JobUpdateTimeColumn; import com.orange.admin.common.core.annotation.JobUpdateTimeColumn;
import com.orange.admin.common.core.annotation.RelationManyToMany;
import com.orange.admin.common.core.validator.UpdateGroup;
import lombok.Data; import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
@@ -11,6 +12,12 @@ import javax.validation.constraints.*;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
/**
* 角色实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_role") @Table(name = "zz_sys_role")
public class SysRole { public class SysRole {
@@ -63,8 +70,12 @@ public class SysRole {
@Column(name = "deleted_flag") @Column(name = "deleted_flag")
private Integer deletedFlag; private Integer deletedFlag;
@RelationManyToMany(
relationMapperName = "sysRoleMenuMapper",
relationMasterIdField = "roleId",
relationModelClass = SysRoleMenu.class)
@Transient @Transient
private List<Long> menuIdList; private List<SysRoleMenu> sysRoleMenuList;
@Transient @Transient
private String createTimeStart; private String createTimeStart;

View File

@@ -4,6 +4,12 @@ import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
/**
* 角色菜单实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_role_menu") @Table(name = "zz_sys_role_menu")
public class SysRoleMenu { public class SysRoleMenu {

View File

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.annotation.JSONField;
import com.orange.admin.upms.model.constant.SysUserType; import com.orange.admin.upms.model.constant.SysUserType;
import com.orange.admin.upms.model.constant.SysUserStatus; import com.orange.admin.upms.model.constant.SysUserStatus;
import com.orange.admin.common.core.annotation.RelationConstDict; import com.orange.admin.common.core.annotation.RelationConstDict;
import com.orange.admin.common.core.annotation.RelationManyToMany;
import com.orange.admin.common.core.annotation.DeletedFlagColumn; import com.orange.admin.common.core.annotation.DeletedFlagColumn;
import com.orange.admin.common.core.annotation.JobUpdateTimeColumn; import com.orange.admin.common.core.annotation.JobUpdateTimeColumn;
import com.orange.admin.common.core.validator.UpdateGroup; import com.orange.admin.common.core.validator.UpdateGroup;
@@ -16,6 +17,12 @@ import java.util.Date;
import java.util.Map; import java.util.Map;
import java.util.List; import java.util.List;
/**
* SysUser实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_user") @Table(name = "zz_sys_user")
public class SysUser { public class SysUser {
@@ -123,16 +130,24 @@ public class SysUser {
private String createTimeEnd; private String createTimeEnd;
/** /**
* 与当前用户关联的角色Id集合。 * 多对多用户角色数据集合。
*/ */
@RelationManyToMany(
relationMapperName = "sysUserRoleMapper",
relationMasterIdField = "userId",
relationModelClass = SysUserRole.class)
@Transient @Transient
private List<Long> roleIdList; private List<SysUserRole> sysUserRoleList;
/** /**
* 与当前用户关联的数据权限Id集合。 * 多对多用户数据权限数据集合。
*/ */
@RelationManyToMany(
relationMapperName = "sysDataPermUserMapper",
relationMasterIdField = "userId",
relationModelClass = SysDataPermUser.class)
@Transient @Transient
private List<Long> dataPermIdList; private List<SysDataPermUser> sysDataPermUserList;
@RelationConstDict( @RelationConstDict(
masterIdField = "userType", masterIdField = "userType",

View File

@@ -4,6 +4,12 @@ import lombok.Data;
import javax.persistence.*; import javax.persistence.*;
/**
* 用户角色实体对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Data @Data
@Table(name = "zz_sys_user_role") @Table(name = "zz_sys_user_role")
public class SysUserRole { public class SysUserRole {

View File

@@ -7,7 +7,7 @@ import java.util.Map;
* 菜单类型常量对象。 * 菜单类型常量对象。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public final class SysMenuType { public final class SysMenuType {
@@ -28,7 +28,7 @@ public final class SysMenuType {
*/ */
public static final int TYPE_BUTTON = 3; public static final int TYPE_BUTTON = 3;
public static final Map<Object, String> DICT_MAP = new HashMap<>(4); private static final Map<Object, String> DICT_MAP = new HashMap<>(4);
static { static {
DICT_MAP.put(0, "目录菜单"); DICT_MAP.put(0, "目录菜单");
DICT_MAP.put(1, "普通菜单"); DICT_MAP.put(1, "普通菜单");
@@ -42,8 +42,8 @@ public final class SysMenuType {
* @param value 待验证的参数值。 * @param value 待验证的参数值。
* @return 合法返回true否则false。 * @return 合法返回true否则false。
*/ */
public static boolean isValid(int value) { public static boolean isValid(Integer value) {
return DICT_MAP.containsKey(value); return value != null && DICT_MAP.containsKey(value);
} }
/** /**

View File

@@ -7,7 +7,7 @@ import java.util.Map;
* 权限字类型常量对象。 * 权限字类型常量对象。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public final class SysPermCodeType { public final class SysPermCodeType {
@@ -24,7 +24,7 @@ public final class SysPermCodeType {
*/ */
public static final int TYPE_OPERATION = 2; public static final int TYPE_OPERATION = 2;
public static final Map<Object, String> DICT_MAP = new HashMap<>(3); private static final Map<Object, String> DICT_MAP = new HashMap<>(3);
static { static {
DICT_MAP.put(0, "表单权限字"); DICT_MAP.put(0, "表单权限字");
DICT_MAP.put(1, "表单片段布局权限字"); DICT_MAP.put(1, "表单片段布局权限字");
@@ -37,8 +37,8 @@ public final class SysPermCodeType {
* @param value 待验证的参数值。 * @param value 待验证的参数值。
* @return 合法返回true否则false。 * @return 合法返回true否则false。
*/ */
public static boolean isValid(int value) { public static boolean isValid(Integer value) {
return DICT_MAP.containsKey(value); return value != null && DICT_MAP.containsKey(value);
} }
/** /**

View File

@@ -7,7 +7,7 @@ import java.util.Map;
* 权限资源模块类型常量对象。 * 权限资源模块类型常量对象。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public final class SysPermModuleType { public final class SysPermModuleType {
@@ -20,7 +20,7 @@ public final class SysPermModuleType {
*/ */
public static final int TYPE_CONTROLLER = 1; public static final int TYPE_CONTROLLER = 1;
public static final Map<Object, String> DICT_MAP = new HashMap<>(2); private static final Map<Object, String> DICT_MAP = new HashMap<>(2);
static { static {
DICT_MAP.put(0, "普通模块"); DICT_MAP.put(0, "普通模块");
DICT_MAP.put(1, "controller接口模块"); DICT_MAP.put(1, "controller接口模块");
@@ -32,8 +32,8 @@ public final class SysPermModuleType {
* @param value 待验证的参数值。 * @param value 待验证的参数值。
* @return 合法返回true否则false。 * @return 合法返回true否则false。
*/ */
public static boolean isValid(int value) { public static boolean isValid(Integer value) {
return DICT_MAP.containsKey(value); return value != null && DICT_MAP.containsKey(value);
} }
/** /**

View File

@@ -3,6 +3,12 @@ package com.orange.admin.upms.model.constant;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/**
* 用户状态常量字典对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
public final class SysUserStatus { public final class SysUserStatus {
/** /**
@@ -14,7 +20,7 @@ public final class SysUserStatus {
*/ */
public static final int STATUS_LOCKED = 1; public static final int STATUS_LOCKED = 1;
public static final Map<Object, String> DICT_MAP = new HashMap<>(2); private static final Map<Object, String> DICT_MAP = new HashMap<>(2);
static { static {
DICT_MAP.put(STATUS_NORMAL, "正常状态"); DICT_MAP.put(STATUS_NORMAL, "正常状态");
DICT_MAP.put(STATUS_LOCKED, "锁定状态"); DICT_MAP.put(STATUS_LOCKED, "锁定状态");
@@ -26,8 +32,8 @@ public final class SysUserStatus {
* @param value 待验证的参数值。 * @param value 待验证的参数值。
* @return 合法返回true否则false。 * @return 合法返回true否则false。
*/ */
public static boolean isValid(int value) { public static boolean isValid(Integer value) {
return DICT_MAP.containsKey(value); return value != null && DICT_MAP.containsKey(value);
} }
/** /**

View File

@@ -3,6 +3,12 @@ package com.orange.admin.upms.model.constant;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/**
* 用户类型常量字典对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
public final class SysUserType { public final class SysUserType {
/** /**
@@ -18,7 +24,7 @@ public final class SysUserType {
*/ */
public static final int TYPE_OPERATOR = 2; public static final int TYPE_OPERATOR = 2;
public static final Map<Object, String> DICT_MAP = new HashMap<>(3); private static final Map<Object, String> DICT_MAP = new HashMap<>(3);
static { static {
DICT_MAP.put(TYPE_ADMIN, "管理员"); DICT_MAP.put(TYPE_ADMIN, "管理员");
DICT_MAP.put(TYPE_SYSTEM, "系统操作员"); DICT_MAP.put(TYPE_SYSTEM, "系统操作员");
@@ -31,8 +37,8 @@ public final class SysUserType {
* @param value 待验证的参数值。 * @param value 待验证的参数值。
* @return 合法返回true否则false。 * @return 合法返回true否则false。
*/ */
public static boolean isValid(int value) { public static boolean isValid(Integer value) {
return DICT_MAP.containsKey(value); return value != null && DICT_MAP.containsKey(value);
} }
/** /**

View File

@@ -1,13 +1,13 @@
package com.orange.admin.upms.service; package com.orange.admin.upms.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.orange.admin.common.biz.base.service.BaseBizService;
import com.orange.admin.common.biz.util.BasicIdGenerator; import com.orange.admin.common.biz.util.BasicIdGenerator;
import com.orange.admin.common.core.constant.DataPermRuleType; import com.orange.admin.common.core.constant.DataPermRuleType;
import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.base.dao.BaseDaoMapper;
import com.orange.admin.common.core.base.service.BaseService;
import com.orange.admin.common.core.constant.GlobalDeletedFlag; import com.orange.admin.common.core.constant.GlobalDeletedFlag;
import com.orange.admin.common.core.object.TokenData; import com.orange.admin.common.core.object.TokenData;
import com.orange.admin.common.core.object.VerifyResult; import com.orange.admin.common.core.object.CallResult;
import com.orange.admin.upms.dao.SysDataPermDeptMapper; import com.orange.admin.upms.dao.SysDataPermDeptMapper;
import com.orange.admin.upms.dao.SysDataPermMapper; import com.orange.admin.upms.dao.SysDataPermMapper;
import com.orange.admin.upms.dao.SysDataPermUserMapper; import com.orange.admin.upms.dao.SysDataPermUserMapper;
@@ -29,10 +29,10 @@ import java.util.stream.Collectors;
* 数据权限数据服务类。 * 数据权限数据服务类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Service @Service
public class SysDataPermService extends BaseService<SysDataPerm, Long> { public class SysDataPermService extends BaseBizService<SysDataPerm, Long> {
@Autowired @Autowired
private SysDataPermMapper sysDataPermMapper; private SysDataPermMapper sysDataPermMapper;
@@ -67,7 +67,7 @@ public class SysDataPermService extends BaseService<SysDataPerm, Long> {
* @param dataPermMenuList 关联的菜单对象列表。 * @param dataPermMenuList 关联的菜单对象列表。
* @return 新增后的数据权限对象。 * @return 新增后的数据权限对象。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public SysDataPerm saveNew(SysDataPerm dataPerm, Set<Long> deptIdSet, List<SysDataPermMenu> dataPermMenuList) { public SysDataPerm saveNew(SysDataPerm dataPerm, Set<Long> deptIdSet, List<SysDataPermMenu> dataPermMenuList) {
dataPerm.setDataPermId(idGenerator.nextLongId()); dataPerm.setDataPermId(idGenerator.nextLongId());
TokenData tokenData = TokenData.takeFromRequest(); TokenData tokenData = TokenData.takeFromRequest();
@@ -91,7 +91,7 @@ public class SysDataPermService extends BaseService<SysDataPerm, Long> {
* @param dataPermMenuList 关联的菜单对象列表。 * @param dataPermMenuList 关联的菜单对象列表。
* @return 更新成功返回true否则false。 * @return 更新成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean update( public boolean update(
SysDataPerm dataPerm, SysDataPerm dataPerm,
SysDataPerm originalDataPerm, SysDataPerm originalDataPerm,
@@ -121,7 +121,7 @@ public class SysDataPermService extends BaseService<SysDataPerm, Long> {
* @param dataPermId 数据权限主键Id。 * @param dataPermId 数据权限主键Id。
* @return 删除成功返回true否则false。 * @return 删除成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean remove(Long dataPermId) { public boolean remove(Long dataPermId) {
SysDataPerm dataPerm = new SysDataPerm(); SysDataPerm dataPerm = new SysDataPerm();
dataPerm.setDataPermId(dataPermId); dataPerm.setDataPermId(dataPermId);
@@ -152,27 +152,6 @@ public class SysDataPermService extends BaseService<SysDataPerm, Long> {
return sysDataPermMapper.getSysDataPermList(filter, orderBy); return sysDataPermMapper.getSysDataPermList(filter, orderBy);
} }
/**
* 获取指定数据权限,同时包含其关联数据。
*
* @param dataPermId 数据权限主键Id。
* @return 数据权限对象。
*/
public SysDataPerm getSysDataPermWithRelation(Long dataPermId) {
SysDataPerm dataPerm = this.getById(dataPermId);
if (dataPerm != null) {
SysDataPermDept dataPermDept = new SysDataPermDept();
dataPermDept.setDataPermId(dataPermId);
List<SysDataPermDept> dataPermDeptList = sysDataPermDeptMapper.select(dataPermDept);
dataPerm.setDataPermDeptList(dataPermDeptList);
SysDataPermMenu dataPermMenu = new SysDataPermMenu();
dataPermMenu.setDataPermId(dataPermId);
List<SysDataPermMenu> dataPermMenuList = sysDataPermMenuMapper.select(dataPermMenu);
dataPerm.setDataPermMenuList(dataPermMenuList);
}
return dataPerm;
}
/** /**
* 将指定用户的指定会话的数据权限集合存入缓存。 * 将指定用户的指定会话的数据权限集合存入缓存。
* *
@@ -182,7 +161,7 @@ public class SysDataPermService extends BaseService<SysDataPerm, Long> {
* @param isAdmin 是否是管理员。 * @param isAdmin 是否是管理员。
* @return 查询并缓存后的数据权限集合。返回格式为Map<MenuId, Map<RuleType, DeptIdString>>。 * @return 查询并缓存后的数据权限集合。返回格式为Map<MenuId, Map<RuleType, DeptIdString>>。
*/ */
@CachePut(value = "DataPermissionCache", key = "#sessionId") @CachePut(value = "DATA_PERMISSION_CACHE", key = "#sessionId")
public Map<Object, Map<Integer, String>> putDataPermCache( public Map<Object, Map<Integer, String>> putDataPermCache(
String sessionId, Long userId, Long deptId, boolean isAdmin) { String sessionId, Long userId, Long deptId, boolean isAdmin) {
// 管理员账户返回空对象,便于缓存的统一处理。 // 管理员账户返回空对象,便于缓存的统一处理。
@@ -194,7 +173,7 @@ public class SysDataPermService extends BaseService<SysDataPerm, Long> {
* *
* @param sessionId 会话Id。 * @param sessionId 会话Id。
*/ */
@CacheEvict(value = "DataPermissionCache", key = "#sessionId") @CacheEvict(value = "DATA_PERMISSION_CACHE", key = "#sessionId")
public void removeDataPermCache(String sessionId) { public void removeDataPermCache(String sessionId) {
// 空实现即可只是通过注解将当前sessionId从cache中删除。 // 空实现即可只是通过注解将当前sessionId从cache中删除。
} }
@@ -208,7 +187,7 @@ public class SysDataPermService extends BaseService<SysDataPerm, Long> {
*/ */
public Map<Object, Map<Integer, String>> getSysDataPermMenuListByUserId(Long userId, Long deptId) { public Map<Object, Map<Integer, String>> getSysDataPermMenuListByUserId(Long userId, Long deptId) {
List<SysDataPermMenu> dataPermMenuList = sysDataPermMenuMapper.getSysDataPermMenuListByUserId(userId); List<SysDataPermMenu> dataPermMenuList = sysDataPermMenuMapper.getSysDataPermMenuListByUserId(userId);
if (dataPermMenuList.size() == 0) { if (dataPermMenuList.isEmpty()) {
return new HashMap<>(1); return new HashMap<>(1);
} }
// 这里用代码的方式把deptId组装到SysDataPermMenu中。 // 这里用代码的方式把deptId组装到SysDataPermMenu中。
@@ -226,7 +205,12 @@ public class SysDataPermService extends BaseService<SysDataPerm, Long> {
dataPermMenu.setDeptIdListString(StringUtils.join(deptIdSet, ",")); dataPermMenu.setDeptIdListString(StringUtils.join(deptIdSet, ","));
} }
} }
// 由于同一用户可能属于多个数据权限,所以需要进行基于menuId的权限合并。 // 由于同一用户可能属于多个数据权限所以需要进行基于menuId的权限合并。
return mergeDataPermMenuList(dataPermMenuList, deptId);
}
private Map<Object, Map<Integer, String>> mergeDataPermMenuList(
List<SysDataPermMenu> dataPermMenuList, Long deptId) {
Map<Object, List<SysDataPermMenu>> menuMap = Map<Object, List<SysDataPermMenu>> menuMap =
dataPermMenuList.stream().collect(Collectors.groupingBy(SysDataPermMenu::getMenuId)); dataPermMenuList.stream().collect(Collectors.groupingBy(SysDataPermMenu::getMenuId));
Map<Object, Map<Integer, String>> resultMap = new HashMap<>(menuMap.size()); Map<Object, Map<Integer, String>> resultMap = new HashMap<>(menuMap.size());
@@ -244,18 +228,9 @@ public class SysDataPermService extends BaseService<SysDataPerm, Long> {
continue; continue;
} }
// 合并自定义部门了。 // 合并自定义部门了。
List<SysDataPermMenu> customDeptList = ruleMap.get(DataPermRuleType.TYPE_CUSTOM_DETP_LIST); String deptIds = processMultiDept(ruleMap, deptId);
if (customDeptList != null) { if (deptIds != null) {
Set<Long> deptIdSet = new HashSet<>(); m.put(DataPermRuleType.TYPE_CUSTOM_DETP_LIST, deptIds);
for (SysDataPermMenu customDept : customDeptList) {
deptIdSet.addAll(Arrays.stream(StringUtils.split(
customDept.getDeptIdListString(), ",")).map(Long::valueOf).collect(Collectors.toSet()));
}
if (ruleMap.containsKey(DataPermRuleType.TYPE_DEPT_ONLY)) {
deptIdSet.add(deptId);
ruleMap.remove(DataPermRuleType.TYPE_DEPT_ONLY);
}
m.put(DataPermRuleType.TYPE_CUSTOM_DETP_LIST, StringUtils.join(deptIdSet, ','));
} }
// 最后处理当前部门和当前用户。 // 最后处理当前部门和当前用户。
if (ruleMap.get(DataPermRuleType.TYPE_DEPT_ONLY) != null) { if (ruleMap.get(DataPermRuleType.TYPE_DEPT_ONLY) != null) {
@@ -269,13 +244,30 @@ public class SysDataPermService extends BaseService<SysDataPerm, Long> {
return resultMap; return resultMap;
} }
private String processMultiDept(Map<Integer, List<SysDataPermMenu>> ruleMap, Long deptId) {
List<SysDataPermMenu> customDeptList = ruleMap.get(DataPermRuleType.TYPE_CUSTOM_DETP_LIST);
if (customDeptList == null) {
return null;
}
Set<Long> deptIdSet = new HashSet<>();
for (SysDataPermMenu customDept : customDeptList) {
deptIdSet.addAll(Arrays.stream(StringUtils.split(
customDept.getDeptIdListString(), ",")).map(Long::valueOf).collect(Collectors.toSet()));
}
if (ruleMap.containsKey(DataPermRuleType.TYPE_DEPT_ONLY)) {
deptIdSet.add(deptId);
ruleMap.remove(DataPermRuleType.TYPE_DEPT_ONLY);
}
return StringUtils.join(deptIdSet, ',');
}
/** /**
* 添加用户和数据权限之间的多对多关联关系。 * 添加用户和数据权限之间的多对多关联关系。
* *
* @param dataPermId 数据权限Id。 * @param dataPermId 数据权限Id。
* @param userIdSet 关联的用户Id列表。 * @param userIdSet 关联的用户Id列表。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public void addDataPermUserList(Long dataPermId, Set<Long> userIdSet) { public void addDataPermUserList(Long dataPermId, Set<Long> userIdSet) {
List<SysDataPermUser> dataPermUserList = new LinkedList<>(); List<SysDataPermUser> dataPermUserList = new LinkedList<>();
for (Long userId : userIdSet) { for (Long userId : userIdSet) {
@@ -293,7 +285,7 @@ public class SysDataPermService extends BaseService<SysDataPerm, Long> {
* @param dataPermId 数据权限主键Id。 * @param dataPermId 数据权限主键Id。
* @param userId 用户主键Id。 * @param userId 用户主键Id。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean removeDataPermUser(Long dataPermId, Long userId) { public boolean removeDataPermUser(Long dataPermId, Long userId) {
SysDataPermUser dataPermUser = new SysDataPermUser(); SysDataPermUser dataPermUser = new SysDataPermUser();
dataPermUser.setDataPermId(dataPermId); dataPermUser.setDataPermId(dataPermId);
@@ -304,44 +296,38 @@ public class SysDataPermService extends BaseService<SysDataPerm, Long> {
/** /**
* 验证数据权限对象关联菜单数据是否都合法。 * 验证数据权限对象关联菜单数据是否都合法。
* *
* @param dataPerm 数据权限关对象。 * @param dataPerm 数据权限关对象。
* @param deptIdListString 与数据权限关联的部门Id列表。 * @param deptIdListString 与数据权限关联的部门Id列表。
* @param menuIdListString 与数据权限关联的菜单Id列表。 * @param menuIdListString 与数据权限关联的菜单Id列表。
* @return 验证结果。 * @return 验证结果。
*/ */
public VerifyResult verifyRelatedData(SysDataPerm dataPerm, String deptIdListString, String menuIdListString) { public CallResult verifyRelatedData(SysDataPerm dataPerm, String deptIdListString, String menuIdListString) {
String errorMessage = null;
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
do { if (dataPerm.getRuleType() == DataPermRuleType.TYPE_CUSTOM_DETP_LIST) {
if (dataPerm.getRuleType() == DataPermRuleType.TYPE_CUSTOM_DETP_LIST) { if (StringUtils.isBlank(deptIdListString)) {
if (StringUtils.isBlank(deptIdListString)) { return CallResult.error("数据验证失败,部门列表不能为空!");
errorMessage = "数据验证失败,部门列表不能为空!";
break;
}
Set<Long> deptIdSet = Arrays.stream(StringUtils.split(
deptIdListString, ",")).map(Long::valueOf).collect(Collectors.toSet());
if (!sysDeptService.existUniqueKeyList("deptId", deptIdSet)) {
errorMessage = "数据验证失败,存在不合法的部门数据,请刷新后重试!";
break;
}
jsonObject.put("deptIdSet", deptIdSet);
} }
String[] menuIdArray = StringUtils.split(menuIdListString, ","); Set<Long> deptIdSet = Arrays.stream(StringUtils.split(
Set<Long> menuIdSet = Arrays.stream(menuIdArray).map(Long::valueOf).collect(Collectors.toSet()); deptIdListString, ",")).map(Long::valueOf).collect(Collectors.toSet());
// 验证菜单Id的合法性 if (!sysDeptService.existAllPrimaryKeys(deptIdSet)) {
if (!sysMenuService.existUniqueKeyList("menuId", menuIdSet)) { return CallResult.error("数据验证失败,存在不合法的部门数据,请刷新后重试!");
errorMessage = "数据验证失败,存在不合法的菜单,请刷新后重试!";
break;
} }
List<SysDataPermMenu> dataPermMenuList = new LinkedList<>(); jsonObject.put("deptIdSet", deptIdSet);
for (Long menuId : menuIdSet) { }
SysDataPermMenu dataPermMenu = new SysDataPermMenu(); String[] menuIdArray = StringUtils.split(menuIdListString, ",");
dataPermMenu.setMenuId(menuId); Set<Long> menuIdSet = Arrays.stream(menuIdArray).map(Long::valueOf).collect(Collectors.toSet());
dataPermMenuList.add(dataPermMenu); // 验证菜单Id的合法性
} if (!sysMenuService.existAllPrimaryKeys(menuIdSet)) {
jsonObject.put("dataPermMenuList", dataPermMenuList); return CallResult.error("数据验证失败,存在不合法的菜单,请刷新后重试!");
} while (false); }
return VerifyResult.create(errorMessage, jsonObject); List<SysDataPermMenu> dataPermMenuList = new LinkedList<>();
for (Long menuId : menuIdSet) {
SysDataPermMenu dataPermMenu = new SysDataPermMenu();
dataPermMenu.setMenuId(menuId);
dataPermMenuList.add(dataPermMenu);
}
jsonObject.put("dataPermMenuList", dataPermMenuList);
return CallResult.ok(jsonObject);
} }
private void insertRelationData( private void insertRelationData(

View File

@@ -2,11 +2,12 @@ package com.orange.admin.upms.service;
import com.orange.admin.upms.dao.*; import com.orange.admin.upms.dao.*;
import com.orange.admin.upms.model.*; import com.orange.admin.upms.model.*;
import com.orange.admin.common.core.base.service.BaseService;
import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.base.dao.BaseDaoMapper;
import com.orange.admin.common.core.constant.GlobalDeletedFlag; import com.orange.admin.common.core.constant.GlobalDeletedFlag;
import com.orange.admin.common.core.object.TokenData; import com.orange.admin.common.core.object.TokenData;
import com.orange.admin.common.core.object.MyWhereCriteria; import com.orange.admin.common.core.object.MyWhereCriteria;
import com.orange.admin.common.core.object.MyRelationParam;
import com.orange.admin.common.biz.base.service.BaseBizService;
import com.orange.admin.common.biz.util.BasicIdGenerator; import com.orange.admin.common.biz.util.BasicIdGenerator;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -19,10 +20,10 @@ import java.util.*;
* 部门管理数据操作服务类。 * 部门管理数据操作服务类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Service @Service
public class SysDeptService extends BaseService<SysDept, Long> { public class SysDeptService extends BaseBizService<SysDept, Long> {
@Autowired @Autowired
private SysDeptMapper sysDeptMapper; private SysDeptMapper sysDeptMapper;
@@ -47,7 +48,7 @@ public class SysDeptService extends BaseService<SysDept, Long> {
* @param sysDept 新增的部门对象。 * @param sysDept 新增的部门对象。
* @return 新增后的部门对象。 * @return 新增后的部门对象。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public SysDept saveNew(SysDept sysDept) { public SysDept saveNew(SysDept sysDept) {
sysDept.setDeptId(idGenerator.nextLongId()); sysDept.setDeptId(idGenerator.nextLongId());
sysDept.setDeletedFlag(GlobalDeletedFlag.NORMAL); sysDept.setDeletedFlag(GlobalDeletedFlag.NORMAL);
@@ -64,11 +65,11 @@ public class SysDeptService extends BaseService<SysDept, Long> {
/** /**
* 更新部门对象。 * 更新部门对象。
* *
* @param sysDept 更新的部门对象。 * @param sysDept 更新的部门对象。
* @param originalSysDept 原有的部门对象。 * @param originalSysDept 原有的部门对象。
* @return 更新成功返回true否则false。 * @return 更新成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean update(SysDept sysDept, SysDept originalSysDept) { public boolean update(SysDept sysDept, SysDept originalSysDept) {
sysDept.setCreateUserId(originalSysDept.getCreateUserId()); sysDept.setCreateUserId(originalSysDept.getCreateUserId());
sysDept.setCreateUsername(originalSysDept.getCreateUsername()); sysDept.setCreateUsername(originalSysDept.getCreateUsername());
@@ -84,12 +85,12 @@ public class SysDeptService extends BaseService<SysDept, Long> {
* @param deptId 主键Id。 * @param deptId 主键Id。
* @return 成功返回true否则false。 * @return 成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean remove(Long deptId) { public boolean remove(Long deptId) {
Example sysDeptExample = new Example(SysDept.class); Example sysDeptExample = new Example(SysDept.class);
Example.Criteria c = sysDeptExample.createCriteria(); Example.Criteria c = sysDeptExample.createCriteria();
c.andEqualTo("deptId", deptId); c.andEqualTo(super.idFieldName, deptId);
c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL); c.andEqualTo(super.deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
// 这里先删除主数据 // 这里先删除主数据
SysDept deletedObject = new SysDept(); SysDept deletedObject = new SysDept();
deletedObject.setDeletedFlag(GlobalDeletedFlag.DELETED); deletedObject.setDeletedFlag(GlobalDeletedFlag.DELETED);
@@ -97,9 +98,9 @@ public class SysDeptService extends BaseService<SysDept, Long> {
return false; return false;
} }
// 这里可继续删除关联数据。 // 这里可继续删除关联数据。
Example dataPermDeptExample = new Example(SysDataPermDept.class); SysDataPermDept dataPermDept = new SysDataPermDept();
dataPermDeptExample.createCriteria().andEqualTo("deptId", deptId); dataPermDept.setDeptId(deptId);
sysDataPermDeptMapper.deleteByExample(dataPermDeptExample); sysDataPermDeptMapper.delete(dataPermDept);
return true; return true;
} }
@@ -107,7 +108,7 @@ public class SysDeptService extends BaseService<SysDept, Long> {
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getSysDeptListWithRelation)方法。 * 如果需要同时获取关联数据,请移步(getSysDeptListWithRelation)方法。
* *
* @param filter 过滤对象。 * @param filter 过滤对象。
* @param orderBy 排序参数。 * @param orderBy 排序参数。
* @return 查询结果集。 * @return 查询结果集。
*/ */
@@ -126,7 +127,7 @@ public class SysDeptService extends BaseService<SysDept, Long> {
public List<SysDept> getSysDeptListWithRelation(SysDept filter, String orderBy) { public List<SysDept> getSysDeptListWithRelation(SysDept filter, String orderBy) {
List<SysDept> resultList = sysDeptMapper.getSysDeptList(filter, orderBy); List<SysDept> resultList = sysDeptMapper.getSysDeptList(filter, orderBy);
Map<String, List<MyWhereCriteria>> criteriaMap = buildAggregationAdditionalWhereCriteria(); Map<String, List<MyWhereCriteria>> criteriaMap = buildAggregationAdditionalWhereCriteria();
this.buildAllRelationForDataList(resultList, false, criteriaMap); this.buildRelationForDataList(resultList, MyRelationParam.normal(), criteriaMap);
return resultList; return resultList;
} }
} }

View File

@@ -1,11 +1,11 @@
package com.orange.admin.upms.service; package com.orange.admin.upms.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.orange.admin.common.biz.base.service.BaseBizService;
import com.orange.admin.common.biz.util.BasicIdGenerator; import com.orange.admin.common.biz.util.BasicIdGenerator;
import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.base.dao.BaseDaoMapper;
import com.orange.admin.common.core.base.service.BaseService;
import com.orange.admin.common.core.constant.GlobalDeletedFlag; import com.orange.admin.common.core.constant.GlobalDeletedFlag;
import com.orange.admin.common.core.object.VerifyResult; import com.orange.admin.common.core.object.CallResult;
import com.orange.admin.upms.dao.SysMenuMapper; import com.orange.admin.upms.dao.SysMenuMapper;
import com.orange.admin.upms.dao.SysMenuPermCodeMapper; import com.orange.admin.upms.dao.SysMenuPermCodeMapper;
import com.orange.admin.upms.dao.SysRoleMenuMapper; import com.orange.admin.upms.dao.SysRoleMenuMapper;
@@ -28,10 +28,10 @@ import java.util.stream.Collectors;
* 菜单数据服务类。 * 菜单数据服务类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Service @Service
public class SysMenuService extends BaseService<SysMenu, Long> { public class SysMenuService extends BaseBizService<SysMenu, Long> {
@Autowired @Autowired
private SysMenuMapper sysMenuMapper; private SysMenuMapper sysMenuMapper;
@@ -59,11 +59,11 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
/** /**
* 保存新增的菜单对象。 * 保存新增的菜单对象。
* *
* @param sysMenu 新增的菜单对象。 * @param sysMenu 新增的菜单对象。
* @param permCodeIdSet 权限字Id列表。 * @param permCodeIdSet 权限字Id列表。
* @return 新增后的菜单对象。 * @return 新增后的菜单对象。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public SysMenu saveNew(SysMenu sysMenu, Set<Long> permCodeIdSet) { public SysMenu saveNew(SysMenu sysMenu, Set<Long> permCodeIdSet) {
sysMenu.setMenuId(idGenerator.nextLongId()); sysMenu.setMenuId(idGenerator.nextLongId());
sysMenu.setCreateTime(new Date()); sysMenu.setCreateTime(new Date());
@@ -85,12 +85,12 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
/** /**
* 更新菜单对象。 * 更新菜单对象。
* *
* @param sysMenu 更新的菜单对象。 * @param sysMenu 更新的菜单对象。
* @param originalSysMenu 原有的菜单对象。 * @param originalSysMenu 原有的菜单对象。
* @param permCodeIdSet 权限字Id列表。 * @param permCodeIdSet 权限字Id列表。
* @return 更新成功返回true否则false。 * @return 更新成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean update(SysMenu sysMenu, SysMenu originalSysMenu, Set<Long> permCodeIdSet) { public boolean update(SysMenu sysMenu, SysMenu originalSysMenu, Set<Long> permCodeIdSet) {
sysMenu.setCreateTime(originalSysMenu.getCreateTime()); sysMenu.setCreateTime(originalSysMenu.getCreateTime());
sysMenu.setMenuType(originalSysMenu.getMenuType()); sysMenu.setMenuType(originalSysMenu.getMenuType());
@@ -98,9 +98,9 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
if (sysMenuMapper.updateByPrimaryKey(sysMenu) != 1) { if (sysMenuMapper.updateByPrimaryKey(sysMenu) != 1) {
return false; return false;
} }
Example e = new Example(SysMenuPermCode.class); SysMenuPermCode deletedMenuPermCode = new SysMenuPermCode();
e.createCriteria().andEqualTo("menuId", sysMenu.getMenuId()); deletedMenuPermCode.setMenuId(sysMenu.getMenuId());
sysMenuPermCodeMapper.deleteByExample(e); sysMenuPermCodeMapper.delete(deletedMenuPermCode);
if (permCodeIdSet != null) { if (permCodeIdSet != null) {
List<SysMenuPermCode> sysMenuPermCodeList = new LinkedList<>(); List<SysMenuPermCode> sysMenuPermCodeList = new LinkedList<>();
for (Long permCodeId : permCodeIdSet) { for (Long permCodeId : permCodeIdSet) {
@@ -120,7 +120,7 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
* @param menuId 菜单主键Id。 * @param menuId 菜单主键Id。
* @return 删除成功返回true否则false。 * @return 删除成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean remove(Long menuId) { public boolean remove(Long menuId) {
SysMenu menu = new SysMenu(); SysMenu menu = new SysMenu();
menu.setMenuId(menuId); menu.setMenuId(menuId);
@@ -128,15 +128,15 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
if (sysMenuMapper.updateByPrimaryKeySelective(menu) != 1) { if (sysMenuMapper.updateByPrimaryKeySelective(menu) != 1) {
return false; return false;
} }
Example roleMenuExample = new Example(SysRoleMenu.class); SysRoleMenu roleMenu = new SysRoleMenu();
roleMenuExample.createCriteria().andEqualTo("menuId", menuId); roleMenu.setMenuId(menuId);
sysRoleMenuMapper.deleteByExample(roleMenuExample); sysRoleMenuMapper.delete(roleMenu);
Example menuPermCodeExample = new Example(SysMenuPermCode.class); SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCodeExample.createCriteria().andEqualTo("menuId", menuId); menuPermCode.setMenuId(menuId);
sysMenuPermCodeMapper.deleteByExample(menuPermCodeExample); sysMenuPermCodeMapper.delete(menuPermCode);
Example dataPermMenuExample = new Example(SysDataPermMenu.class); SysDataPermMenu dataPermMenu = new SysDataPermMenu();
dataPermMenuExample.createCriteria().andEqualTo("menuId", menuId); dataPermMenu.setMenuId(menuId);
sysDataPermMenuMapper.deleteByExample(dataPermMenuExample); sysDataPermMenuMapper.delete(dataPermMenu);
return true; return true;
} }
@@ -164,27 +164,6 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
return sysMenuMapper.getMenuListByUserId(userId); return sysMenuMapper.getMenuListByUserId(userId);
} }
/**
* 获取指定菜单的详情对象。
*
* @param menuId 菜单主键Id。
* @return 菜单对象。
*/
public SysMenu getSysMenuWithRelation(Long menuId) {
SysMenu sysMenu = this.getById(menuId);
if (sysMenu != null) {
Example e = new Example(SysMenuPermCode.class);
e.createCriteria().andEqualTo("menuId", menuId);
List<SysMenuPermCode> sysMenuPermCodeList = sysMenuPermCodeMapper.selectByExample(e);
if (sysMenuPermCodeList.size() > 0) {
List<Long> permCodeIdList =
sysMenuPermCodeList.stream().map(SysMenuPermCode::getPermCodeId).collect(Collectors.toList());
sysMenu.setPermCodeIdList(permCodeIdList);
}
}
return sysMenu;
}
/** /**
* 判断当前菜单是否存在子菜单。 * 判断当前菜单是否存在子菜单。
* *
@@ -200,64 +179,63 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
/** /**
* 验证菜单对象关联的数据是否都合法。 * 验证菜单对象关联的数据是否都合法。
* *
* @param sysMenu 当前操作的对象。 * @param sysMenu 当前操作的对象。
* @param originalSysMenu 原有对象。 * @param originalSysMenu 原有对象。
* @param permCodeIdListString 逗号分隔的权限Id列表。 * @param permCodeIdListString 逗号分隔的权限Id列表。
* @return 验证结果。 * @return 验证结果。
*/ */
public VerifyResult verifyRelatedData(SysMenu sysMenu, SysMenu originalSysMenu, String permCodeIdListString) { public CallResult verifyRelatedData(SysMenu sysMenu, SysMenu originalSysMenu, String permCodeIdListString) {
String errorMessage = null;
JSONObject jsonObject = null; JSONObject jsonObject = null;
do { if (this.needToVerify(sysMenu, originalSysMenu, SysMenu::getParentId)) {
if (this.needToVerify(sysMenu, originalSysMenu, SysMenu::getParentId)) { // menu、ui fragment和button类型的menu不能没有parentId
// 1. menu、ui fragment和button类型的menu不能没有parentId if (sysMenu.getParentId() == null) {
if (sysMenu.getParentId() == null) { if (sysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) {
if (sysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) { return CallResult.error("数据验证失败,当前类型菜单项的上级菜单不能为空!");
errorMessage = "数据验证失败,当前类型菜单项的上级菜单不能为空!"; }
break; } else {
} String errorMessage = checkErrorOfNonDirectoryMenu(sysMenu);
} else { if (errorMessage != null) {
// 2. 判断父节点是否存在 return CallResult.error(errorMessage);
SysMenu parentSysMenu = getById(sysMenu.getParentId());
if (parentSysMenu == null) {
errorMessage = "数据验证失败,关联的上级菜单并不存在,请刷新后重试!";
break;
}
// 3. 逐个判断每种类型的菜单,他的父菜单的合法性,先从目录类型和菜单类型开始
if (sysMenu.getMenuType() == SysMenuType.TYPE_DIRECTORY
|| sysMenu.getMenuType() == SysMenuType.TYPE_MENU) {
// 他们的上级只能是目录
if (parentSysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) {
errorMessage = "数据验证失败,当前类型菜单项的上级菜单只能是目录类型!";
break;
}
} else if (sysMenu.getMenuType() == SysMenuType.TYPE_UI_FRAGMENT) {
// ui fragment的上级只能是menu类型
if (parentSysMenu.getMenuType() != SysMenuType.TYPE_MENU) {
errorMessage = "数据验证失败,当前类型菜单项的上级菜单只能是菜单类型和按钮类型!";
break;
}
} else if (sysMenu.getMenuType() == SysMenuType.TYPE_BUTTON) {
// button的上级只能是menu和ui fragment
if (parentSysMenu.getMenuType() != SysMenuType.TYPE_MENU
&& parentSysMenu.getMenuType() != SysMenuType.TYPE_UI_FRAGMENT) {
errorMessage = "数据验证失败当前类型菜单项的上级菜单只能是菜单类型和UI片段类型";
break;
}
}
} }
} }
if (StringUtils.isNotBlank(permCodeIdListString)) { }
Set<Long> permCodeIdSet = Arrays.stream( if (StringUtils.isNotBlank(permCodeIdListString)) {
permCodeIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); Set<Long> permCodeIdSet = Arrays.stream(
if (!sysPermCodeService.existUniqueKeyList("permCodeId", permCodeIdSet)) { permCodeIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
errorMessage = "数据验证失败,存在不合法的权限字,请刷新后重试!"; if (!sysPermCodeService.existAllPrimaryKeys(permCodeIdSet)) {
break; return CallResult.error("数据验证失败,存在不合法的权限字,请刷新后重试!");
}
jsonObject = new JSONObject();
jsonObject.put("permCodeIdSet", permCodeIdSet);
} }
} while (false); jsonObject = new JSONObject();
return VerifyResult.create(errorMessage, jsonObject); jsonObject.put("permCodeIdSet", permCodeIdSet);
}
return CallResult.ok(jsonObject);
}
private String checkErrorOfNonDirectoryMenu(SysMenu sysMenu) {
// 判断父节点是否存在
SysMenu parentSysMenu = getById(sysMenu.getParentId());
if (parentSysMenu == null) {
return "数据验证失败,关联的上级菜单并不存在,请刷新后重试!";
}
// 逐个判断每种类型的菜单,他的父菜单的合法性,先从目录类型和菜单类型开始
if (sysMenu.getMenuType() == SysMenuType.TYPE_DIRECTORY
|| sysMenu.getMenuType() == SysMenuType.TYPE_MENU) {
// 他们的上级只能是目录
if (parentSysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) {
return "数据验证失败,当前类型菜单项的上级菜单只能是目录类型!";
}
} else if (sysMenu.getMenuType() == SysMenuType.TYPE_UI_FRAGMENT) {
// ui fragment的上级只能是menu类型
if (parentSysMenu.getMenuType() != SysMenuType.TYPE_MENU) {
return "数据验证失败,当前类型菜单项的上级菜单只能是菜单类型和按钮类型!";
}
} else if (sysMenu.getMenuType() == SysMenuType.TYPE_BUTTON) {
// button的上级只能是menu和ui fragment
if (parentSysMenu.getMenuType() != SysMenuType.TYPE_MENU
&& parentSysMenu.getMenuType() != SysMenuType.TYPE_UI_FRAGMENT) {
return "数据验证失败当前类型菜单项的上级菜单只能是菜单类型和UI片段类型";
}
}
return null;
} }
} }

View File

@@ -1,11 +1,11 @@
package com.orange.admin.upms.service; package com.orange.admin.upms.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.orange.admin.common.biz.base.service.BaseBizService;
import com.orange.admin.common.biz.util.BasicIdGenerator; import com.orange.admin.common.biz.util.BasicIdGenerator;
import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.base.dao.BaseDaoMapper;
import com.orange.admin.common.core.base.service.BaseService;
import com.orange.admin.common.core.constant.GlobalDeletedFlag; import com.orange.admin.common.core.constant.GlobalDeletedFlag;
import com.orange.admin.common.core.object.VerifyResult; import com.orange.admin.common.core.object.CallResult;
import com.orange.admin.upms.dao.SysMenuPermCodeMapper; import com.orange.admin.upms.dao.SysMenuPermCodeMapper;
import com.orange.admin.upms.dao.SysPermCodeMapper; import com.orange.admin.upms.dao.SysPermCodeMapper;
import com.orange.admin.upms.dao.SysPermCodePermMapper; import com.orange.admin.upms.dao.SysPermCodePermMapper;
@@ -16,7 +16,6 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -25,10 +24,10 @@ import java.util.stream.Collectors;
* 权限字数据服务类。 * 权限字数据服务类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Service @Service
public class SysPermCodeService extends BaseService<SysPermCode, Long> { public class SysPermCodeService extends BaseBizService<SysPermCode, Long> {
@Autowired @Autowired
private SysPermCodeMapper sysPermCodeMapper; private SysPermCodeMapper sysPermCodeMapper;
@@ -65,10 +64,10 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
* 保存新增的权限字对象。 * 保存新增的权限字对象。
* *
* @param sysPermCode 新增的权限字对象。 * @param sysPermCode 新增的权限字对象。
* @param permIdSet 权限资源Id列表。 * @param permIdSet 权限资源Id列表。
* @return 新增后的权限字对象。 * @return 新增后的权限字对象。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public SysPermCode saveNew(SysPermCode sysPermCode, Set<Long> permIdSet) { public SysPermCode saveNew(SysPermCode sysPermCode, Set<Long> permIdSet) {
sysPermCode.setPermCodeId(idGenerator.nextLongId()); sysPermCode.setPermCodeId(idGenerator.nextLongId());
sysPermCode.setCreateTime(new Date()); sysPermCode.setCreateTime(new Date());
@@ -90,12 +89,12 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
/** /**
* 更新权限字对象。 * 更新权限字对象。
* *
* @param sysPermCode 更新的权限字对象。 * @param sysPermCode 更新的权限字对象。
* @param originalSysPermCode 原有的权限字对象。 * @param originalSysPermCode 原有的权限字对象。
* @param permIdSet 权限资源Id列表。 * @param permIdSet 权限资源Id列表。
* @return 更新成功返回true否则false。 * @return 更新成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean update(SysPermCode sysPermCode, SysPermCode originalSysPermCode, Set<Long> permIdSet) { public boolean update(SysPermCode sysPermCode, SysPermCode originalSysPermCode, Set<Long> permIdSet) {
sysPermCode.setCreateTime(originalSysPermCode.getCreateTime()); sysPermCode.setCreateTime(originalSysPermCode.getCreateTime());
sysPermCode.setParentId(originalSysPermCode.getParentId()); sysPermCode.setParentId(originalSysPermCode.getParentId());
@@ -103,9 +102,9 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
if (sysPermCodeMapper.updateByPrimaryKey(sysPermCode) != 1) { if (sysPermCodeMapper.updateByPrimaryKey(sysPermCode) != 1) {
return false; return false;
} }
Example e = new Example(SysPermCodePerm.class); SysPermCodePerm deletedPermCodePerm = new SysPermCodePerm();
e.createCriteria().andEqualTo("permCodeId", sysPermCode.getPermCodeId()); deletedPermCodePerm.setPermCodeId(sysPermCode.getPermCodeId());
sysPermCodePermMapper.deleteByExample(e); sysPermCodePermMapper.delete(deletedPermCodePerm);
if (permIdSet != null) { if (permIdSet != null) {
List<SysPermCodePerm> sysPermCodePermList = new LinkedList<>(); List<SysPermCodePerm> sysPermCodePermList = new LinkedList<>();
for (Long permId : permIdSet) { for (Long permId : permIdSet) {
@@ -125,7 +124,7 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
* @param permCodeId 权限字主键Id。 * @param permCodeId 权限字主键Id。
* @return 删除成功返回true否则false。 * @return 删除成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean remove(Long permCodeId) { public boolean remove(Long permCodeId) {
SysPermCode permCode = new SysPermCode(); SysPermCode permCode = new SysPermCode();
permCode.setPermCodeId(permCodeId); permCode.setPermCodeId(permCodeId);
@@ -133,41 +132,20 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
if (sysPermCodeMapper.updateByPrimaryKeySelective(permCode) != 1) { if (sysPermCodeMapper.updateByPrimaryKeySelective(permCode) != 1) {
return false; return false;
} }
Example menuPermCodeExample = new Example(SysMenuPermCode.class); SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCodeExample.createCriteria().andEqualTo("permCodeId", permCodeId); menuPermCode.setPermCodeId(permCodeId);
sysMenuPermCodeMapper.deleteByExample(menuPermCodeExample); sysMenuPermCodeMapper.delete(menuPermCode);
Example permCodePermExample = new Example(SysPermCodePerm.class); SysPermCodePerm permCodePerm = new SysPermCodePerm();
permCodePermExample.createCriteria().andEqualTo("permCodeId", permCodeId); permCodePerm.setPermCodeId(permCodeId);
sysPermCodePermMapper.deleteByExample(permCodePermExample); sysPermCodePermMapper.delete(permCodePerm);
return true; return true;
} }
/**
* 获取指定权限字对象数据,该对象将包含其关联数据。
*
* @param permCodeId 权限字主键Id。
* @return 权限字对象。
*/
public SysPermCode getSysPermCodeWithRelation(Long permCodeId) {
SysPermCode sysPermCode = this.getById(permCodeId);
if (sysPermCode != null) {
Example e = new Example(SysPermCodePerm.class);
e.createCriteria().andEqualTo("permCodeId", permCodeId);
List<SysPermCodePerm> sysPermCodePermList = sysPermCodePermMapper.selectByExample(e);
if (sysPermCodePermList.size() > 0) {
List<Long> permIdList =
sysPermCodePermList.stream().map(SysPermCodePerm::getPermId).collect(Collectors.toList());
sysPermCode.setPermIdList(permIdList);
}
}
return sysPermCode;
}
/** /**
* 获取指定用户的权限字列表。 * 获取指定用户的权限字列表。
* *
* @param loginName 精确匹配用户登录名。 * @param loginName 精确匹配用户登录名。
* @param permCode 模糊匹配的权限字名LIKE %permCode%。 * @param permCode 模糊匹配的权限字名LIKE %permCode%。
* @return 权限字列表。 * @return 权限字列表。
*/ */
public List<SysPermCode> getUserPermCodeListByFilter(String loginName, String permCode) { public List<SysPermCode> getUserPermCodeListByFilter(String loginName, String permCode) {
@@ -199,34 +177,28 @@ public class SysPermCodeService extends BaseService<SysPermCode, Long> {
/** /**
* 验证权限字对象关联的数据是否都合法。 * 验证权限字对象关联的数据是否都合法。
* *
* @param sysPermCode 当前操作的对象。 * @param sysPermCode 当前操作的对象。
* @param originalSysPermCode 原有对象。 * @param originalSysPermCode 原有对象。
* @param permIdListString 逗号分隔的权限资源Id列表。 * @param permIdListString 逗号分隔的权限资源Id列表。
* @return 验证结果。 * @return 验证结果。
*/ */
public VerifyResult verifyRelatedData( public CallResult verifyRelatedData(
SysPermCode sysPermCode, SysPermCode originalSysPermCode, String permIdListString) { SysPermCode sysPermCode, SysPermCode originalSysPermCode, String permIdListString) {
String errorMessage = null; if (this.needToVerify(sysPermCode, originalSysPermCode, SysPermCode::getParentId)) {
if (getById(sysPermCode.getParentId()) == null) {
return CallResult.error("数据验证失败,关联的上级权限字并不存在,请刷新后重试!");
}
}
JSONObject jsonObject = null; JSONObject jsonObject = null;
Map<String, Object> resultMap = new HashMap<>(2); if (StringUtils.isNotBlank(permIdListString)) {
do { Set<Long> permIdSet = Arrays.stream(
if (this.needToVerify(sysPermCode, originalSysPermCode, SysPermCode::getParentId)) { permIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
if (getById(sysPermCode.getParentId()) == null) { if (!sysPermService.existAllPrimaryKeys(permIdSet)) {
errorMessage = "数据验证失败,关联的上级权限字并不存在,请刷新后重试!"; return CallResult.error("数据验证失败,存在不合法的权限资源,请刷新后重试!");
break;
}
} }
if (StringUtils.isNotBlank(permIdListString)) { jsonObject = new JSONObject();
Set<Long> permIdSet = Arrays.stream( jsonObject.put("permIdSet", permIdSet);
permIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); }
if (!sysPermService.existUniqueKeyList("permId", permIdSet)) { return CallResult.ok(jsonObject);
errorMessage = "数据验证失败,存在不合法的权限资源,请刷新后重试!";
break;
}
jsonObject = new JSONObject();
jsonObject.put("permIdSet", permIdSet);
}
} while (false);
return VerifyResult.create(errorMessage, jsonObject);
} }
} }

View File

@@ -1,8 +1,8 @@
package com.orange.admin.upms.service; package com.orange.admin.upms.service;
import com.orange.admin.common.biz.base.service.BaseBizService;
import com.orange.admin.common.biz.util.BasicIdGenerator; import com.orange.admin.common.biz.util.BasicIdGenerator;
import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.base.dao.BaseDaoMapper;
import com.orange.admin.common.core.base.service.BaseService;
import com.orange.admin.common.core.constant.GlobalDeletedFlag; import com.orange.admin.common.core.constant.GlobalDeletedFlag;
import com.orange.admin.upms.dao.SysPermModuleMapper; import com.orange.admin.upms.dao.SysPermModuleMapper;
import com.orange.admin.upms.model.SysPerm; import com.orange.admin.upms.model.SysPerm;
@@ -18,10 +18,10 @@ import java.util.List;
* 权限资源模块数据服务类。 * 权限资源模块数据服务类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Service @Service
public class SysPermModuleService extends BaseService<SysPermModule, Long> { public class SysPermModuleService extends BaseBizService<SysPermModule, Long> {
@Autowired @Autowired
private SysPermModuleMapper sysPermModuleMapper; private SysPermModuleMapper sysPermModuleMapper;
@@ -46,7 +46,7 @@ public class SysPermModuleService extends BaseService<SysPermModule, Long> {
* @param sysPermModule 新增的权限资源模块对象。 * @param sysPermModule 新增的权限资源模块对象。
* @return 新增后的权限资源模块对象。 * @return 新增后的权限资源模块对象。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public SysPermModule saveNew(SysPermModule sysPermModule) { public SysPermModule saveNew(SysPermModule sysPermModule) {
sysPermModule.setModuleId(idGenerator.nextLongId()); sysPermModule.setModuleId(idGenerator.nextLongId());
sysPermModule.setCreateTime(new Date()); sysPermModule.setCreateTime(new Date());
@@ -58,11 +58,11 @@ public class SysPermModuleService extends BaseService<SysPermModule, Long> {
/** /**
* 更新权限资源模块对象。 * 更新权限资源模块对象。
* *
* @param sysPermModule 更新的权限资源模块对象。 * @param sysPermModule 更新的权限资源模块对象。
* @param originalSysPermModule 原有的权限资源模块对象。 * @param originalSysPermModule 原有的权限资源模块对象。
* @return 更新成功返回true否则false * @return 更新成功返回true否则false
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean update(SysPermModule sysPermModule, SysPermModule originalSysPermModule) { public boolean update(SysPermModule sysPermModule, SysPermModule originalSysPermModule) {
sysPermModule.setCreateTime(originalSysPermModule.getCreateTime()); sysPermModule.setCreateTime(originalSysPermModule.getCreateTime());
sysPermModule.setDeletedFlag(GlobalDeletedFlag.NORMAL); sysPermModule.setDeletedFlag(GlobalDeletedFlag.NORMAL);
@@ -75,7 +75,7 @@ public class SysPermModuleService extends BaseService<SysPermModule, Long> {
* @param moduleId 权限资源模块主键Id。 * @param moduleId 权限资源模块主键Id。
* @return 删除成功返回true否则false。 * @return 删除成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean remove(Long moduleId) { public boolean remove(Long moduleId) {
SysPermModule permModule = new SysPermModule(); SysPermModule permModule = new SysPermModule();
permModule.setModuleId(moduleId); permModule.setModuleId(moduleId);

View File

@@ -2,11 +2,12 @@ package com.orange.admin.upms.service;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.orange.admin.common.biz.base.service.BaseBizService;
import com.orange.admin.common.biz.util.BasicIdGenerator; import com.orange.admin.common.biz.util.BasicIdGenerator;
import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.base.dao.BaseDaoMapper;
import com.orange.admin.common.core.base.service.BaseService; import com.orange.admin.common.core.object.MyRelationParam;
import com.orange.admin.common.core.constant.GlobalDeletedFlag; import com.orange.admin.common.core.constant.GlobalDeletedFlag;
import com.orange.admin.common.core.object.VerifyResult; import com.orange.admin.common.core.object.CallResult;
import com.orange.admin.upms.dao.SysPermCodePermMapper; import com.orange.admin.upms.dao.SysPermCodePermMapper;
import com.orange.admin.upms.dao.SysPermMapper; import com.orange.admin.upms.dao.SysPermMapper;
import com.orange.admin.upms.model.SysPerm; import com.orange.admin.upms.model.SysPerm;
@@ -29,10 +30,10 @@ import java.util.stream.Collectors;
* 权限资源数据服务类。 * 权限资源数据服务类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Service @Service
public class SysPermService extends BaseService<SysPerm, Long> { public class SysPermService extends BaseBizService<SysPerm, Long> {
@Autowired @Autowired
private SysPermMapper sysPermMapper; private SysPermMapper sysPermMapper;
@@ -61,7 +62,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* @param perm 新增的权限资源对象。 * @param perm 新增的权限资源对象。
* @return 新增后的权限资源对象。 * @return 新增后的权限资源对象。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public SysPerm saveNew(SysPerm perm) { public SysPerm saveNew(SysPerm perm) {
perm.setPermId(idGenerator.nextLongId()); perm.setPermId(idGenerator.nextLongId());
perm.setCreateTime(new Date()); perm.setCreateTime(new Date());
@@ -73,11 +74,11 @@ public class SysPermService extends BaseService<SysPerm, Long> {
/** /**
* 更新权限资源对象。 * 更新权限资源对象。
* *
* @param perm 更新的权限资源对象。 * @param perm 更新的权限资源对象。
* @param originalPerm 更新的权限资源对象。 * @param originalPerm 原有的权限资源对象。
* @return 更新成功返回true否则false。 * @return 更新成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean update(SysPerm perm, SysPerm originalPerm) { public boolean update(SysPerm perm, SysPerm originalPerm) {
perm.setCreateTime(originalPerm.getCreateTime()); perm.setCreateTime(originalPerm.getCreateTime());
perm.setDeletedFlag(GlobalDeletedFlag.NORMAL); perm.setDeletedFlag(GlobalDeletedFlag.NORMAL);
@@ -90,7 +91,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* @param permId 权限资源主键Id。 * @param permId 权限资源主键Id。
* @return 删除成功返回true否则false。 * @return 删除成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean remove(Long permId) { public boolean remove(Long permId) {
SysPerm perm = new SysPerm(); SysPerm perm = new SysPerm();
perm.setPermId(permId); perm.setPermId(permId);
@@ -112,7 +113,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
*/ */
public List<SysPerm> getPermListWithRelation(SysPerm sysPermFilter) { public List<SysPerm> getPermListWithRelation(SysPerm sysPermFilter) {
Example e = new Example(SysPerm.class); Example e = new Example(SysPerm.class);
e.orderBy("permId"); e.orderBy("showOrder");
Example.Criteria c = e.createCriteria(); Example.Criteria c = e.createCriteria();
if (ObjectUtil.isNotNull(sysPermFilter.getModuleId())) { if (ObjectUtil.isNotNull(sysPermFilter.getModuleId())) {
c.andEqualTo("moduleId", sysPermFilter.getModuleId()); c.andEqualTo("moduleId", sysPermFilter.getModuleId());
@@ -123,7 +124,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL); c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL);
List<SysPerm> permList = sysPermMapper.selectByExample(e); List<SysPerm> permList = sysPermMapper.selectByExample(e);
// 这里因为权限只有字典数据,所以仅仅做字典关联。 // 这里因为权限只有字典数据,所以仅仅做字典关联。
this.buildRelationForDataList(permList, true); this.buildRelationForDataList(permList, MyRelationParam.dictOnly(), null);
return permList; return permList;
} }
@@ -131,15 +132,15 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* 获取指定用户的权限资源集合,并存储于缓存,从而提升后续读取效率。 * 获取指定用户的权限资源集合,并存储于缓存,从而提升后续读取效率。
* *
* @param sessionId 用户会话Id。 * @param sessionId 用户会话Id。
* @param userId 用户主键Id。 * @param userId 用户主键Id。
* @return 当前用户权限集合。 * @return 当前用户权限集合。
*/ */
@Cacheable(value = "UserPermissionCache", key = "#sessionId", unless = "#result == null") @Cacheable(value = "USER_PERMISSION_CACHE", key = "#sessionId", unless = "#result == null")
public Set<String> getCacheableSysPermSetByUserId(String sessionId, Long userId) { public Set<String> getCacheableSysPermSetByUserId(String sessionId, Long userId) {
// 这里可以防止非法的userId直接访问权限受限的url // 这里可以防止非法的userId直接访问权限受限的url
SysUser user = sysUserService.getById(userId); SysUser user = sysUserService.getById(userId);
if (user == null) { if (user == null) {
return null; return new HashSet<>(1);
} }
// 管理员账户返回空对象,便于缓存的统一处理。 // 管理员账户返回空对象,便于缓存的统一处理。
return user.getUserType() == SysUserType.TYPE_ADMIN return user.getUserType() == SysUserType.TYPE_ADMIN
@@ -150,11 +151,11 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* 将指定用户的指定会话的权限集合存入缓存。 * 将指定用户的指定会话的权限集合存入缓存。
* *
* @param sessionId 会话Id。 * @param sessionId 会话Id。
* @param userId 用户主键Id。 * @param userId 用户主键Id。
* @param isAdmin 是否是管理员。 * @param isAdmin 是否是管理员。
* @return 查询并缓存后的权限集合。 * @return 查询并缓存后的权限集合。
*/ */
@CachePut(value = "UserPermissionCache", key = "#sessionId") @CachePut(value = "USER_PERMISSION_CACHE", key = "#sessionId")
public Set<String> putUserSysPermCache(String sessionId, Long userId, boolean isAdmin) { public Set<String> putUserSysPermCache(String sessionId, Long userId, boolean isAdmin) {
// 管理员账户返回空对象,便于缓存的统一处理。 // 管理员账户返回空对象,便于缓存的统一处理。
return isAdmin ? new HashSet<>(1) : this.getSysPermSetByUserId(userId); return isAdmin ? new HashSet<>(1) : this.getSysPermSetByUserId(userId);
@@ -165,7 +166,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* *
* @param sessionId 会话Id。 * @param sessionId 会话Id。
*/ */
@CacheEvict(value = "UserPermissionCache", key = "#sessionId") @CacheEvict(value = "USER_PERMISSION_CACHE", key = "#sessionId")
public void removeUserSysPermCache(String sessionId) { public void removeUserSysPermCache(String sessionId) {
// 空实现即可只是通过注解将当前sessionId从cache中删除。 // 空实现即可只是通过注解将当前sessionId从cache中删除。
} }
@@ -185,7 +186,7 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* 获取与指定权限字关联的权限资源列表。 * 获取与指定权限字关联的权限资源列表。
* *
* @param permCodeId 关联的权限字主键Id。 * @param permCodeId 关联的权限字主键Id。
* @param orderBy 排序参数。 * @param orderBy 排序参数。
* @return 与指定权限字Id关联的权限资源列表。 * @return 与指定权限字Id关联的权限资源列表。
*/ */
public List<SysPerm> getPermListByPermCodeId(Long permCodeId, String orderBy) { public List<SysPerm> getPermListByPermCodeId(Long permCodeId, String orderBy) {
@@ -206,8 +207,8 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* 获取指定用户的用户权限关联列表。 * 获取指定用户的用户权限关联列表。
* *
* @param loginName 精确匹配用户登录名。 * @param loginName 精确匹配用户登录名。
* @param moduleId 精确匹配权限模块Id。 * @param moduleId 精确匹配权限模块Id。
* @param url 模糊匹配的url过滤条件。 * @param url 模糊匹配的url过滤条件。
* @return 用户权限关联列表。 * @return 用户权限关联列表。
*/ */
public List<Map<String, Object>> getUserPermListByFilter(String loginName, Long moduleId, String url) { public List<Map<String, Object>> getUserPermListByFilter(String loginName, Long moduleId, String url) {
@@ -237,24 +238,20 @@ public class SysPermService extends BaseService<SysPerm, Long> {
/** /**
* 验证权限资源对象关联的数据是否都合法。 * 验证权限资源对象关联的数据是否都合法。
* *
* @param sysPerm 当前操作的对象。 * @param sysPerm 当前操作的对象。
* @param originalSysPerm 原有对象。 * @param originalSysPerm 原有对象。
* @return 验证结果。 * @return 验证结果。
*/ */
public VerifyResult verifyRelatedData(SysPerm sysPerm, SysPerm originalSysPerm) { public CallResult verifyRelatedData(SysPerm sysPerm, SysPerm originalSysPerm) {
String errorMessage = null;
JSONObject jsonObject = null; JSONObject jsonObject = null;
do { if (this.needToVerify(sysPerm, originalSysPerm, SysPerm::getModuleId)) {
if (this.needToVerify(sysPerm, originalSysPerm, SysPerm::getModuleId)) { SysPermModule permModule = sysPermModuleService.getById(sysPerm.getModuleId());
SysPermModule permModule = sysPermModuleService.getById(sysPerm.getModuleId()); if (permModule == null) {
if (permModule == null) { return CallResult.error("数据验证失败关联的权限模块Id并不存在请刷新后重试");
errorMessage = "数据验证失败关联的权限模块Id并不存在请刷新后重试";
break;
}
jsonObject = new JSONObject();
jsonObject.put("permModule", permModule);
} }
} while (false); jsonObject = new JSONObject();
return VerifyResult.create(errorMessage, jsonObject); jsonObject.put("permModule", permModule);
}
return CallResult.ok(jsonObject);
} }
} }

View File

@@ -1,7 +1,7 @@
package com.orange.admin.upms.service; package com.orange.admin.upms.service;
import com.orange.admin.common.biz.base.service.BaseBizService;
import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.base.dao.BaseDaoMapper;
import com.orange.admin.common.core.base.service.BaseService;
import com.orange.admin.upms.dao.SysPermWhitelistMapper; import com.orange.admin.upms.dao.SysPermWhitelistMapper;
import com.orange.admin.upms.model.SysPermWhitelist; import com.orange.admin.upms.model.SysPermWhitelist;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -12,10 +12,10 @@ import org.springframework.stereotype.Service;
* 白名单中的权限资源,可以不受权限控制,任何用户皆可访问,一般用于常用的字典数据列表接口。 * 白名单中的权限资源,可以不受权限控制,任何用户皆可访问,一般用于常用的字典数据列表接口。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Service @Service
public class SysPermWhitelistService extends BaseService<SysPermWhitelist, String> { public class SysPermWhitelistService extends BaseBizService<SysPermWhitelist, String> {
@Autowired @Autowired
private SysPermWhitelistMapper sysPermWhitelistMapper; private SysPermWhitelistMapper sysPermWhitelistMapper;
@@ -29,5 +29,4 @@ public class SysPermWhitelistService extends BaseService<SysPermWhitelist, Strin
protected BaseDaoMapper<SysPermWhitelist> mapper() { protected BaseDaoMapper<SysPermWhitelist> mapper() {
return sysPermWhitelistMapper; return sysPermWhitelistMapper;
} }
} }

View File

@@ -1,12 +1,12 @@
package com.orange.admin.upms.service; package com.orange.admin.upms.service;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.orange.admin.common.biz.base.service.BaseBizService;
import com.orange.admin.common.biz.util.BasicIdGenerator; import com.orange.admin.common.biz.util.BasicIdGenerator;
import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.base.dao.BaseDaoMapper;
import com.orange.admin.common.core.base.service.BaseService;
import com.orange.admin.common.core.constant.GlobalDeletedFlag; import com.orange.admin.common.core.constant.GlobalDeletedFlag;
import com.orange.admin.common.core.object.TokenData; import com.orange.admin.common.core.object.TokenData;
import com.orange.admin.common.core.object.VerifyResult; import com.orange.admin.common.core.object.CallResult;
import com.orange.admin.upms.dao.SysRoleMapper; import com.orange.admin.upms.dao.SysRoleMapper;
import com.orange.admin.upms.dao.SysRoleMenuMapper; import com.orange.admin.upms.dao.SysRoleMenuMapper;
import com.orange.admin.upms.dao.SysUserRoleMapper; import com.orange.admin.upms.dao.SysUserRoleMapper;
@@ -18,7 +18,6 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -27,10 +26,10 @@ import java.util.stream.Collectors;
* 角色数据服务类。 * 角色数据服务类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Service @Service
public class SysRoleService extends BaseService<SysRole, Long> { public class SysRoleService extends BaseBizService<SysRole, Long> {
@Autowired @Autowired
private SysRoleMapper sysRoleMapper; private SysRoleMapper sysRoleMapper;
@@ -56,11 +55,11 @@ public class SysRoleService extends BaseService<SysRole, Long> {
/** /**
* 保存新增的角色对象。 * 保存新增的角色对象。
* *
* @param role 新增的角色对象。 * @param role 新增的角色对象。
* @param menuIdSet 菜单Id列表。 * @param menuIdSet 菜单Id列表。
* @return 新增后的角色对象。 * @return 新增后的角色对象。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public SysRole saveNew(SysRole role, Set<Long> menuIdSet) { public SysRole saveNew(SysRole role, Set<Long> menuIdSet) {
role.setRoleId(idGenerator.nextLongId()); role.setRoleId(idGenerator.nextLongId());
TokenData tokenData = TokenData.takeFromRequest(); TokenData tokenData = TokenData.takeFromRequest();
@@ -87,12 +86,12 @@ public class SysRoleService extends BaseService<SysRole, Long> {
/** /**
* 更新角色对象。 * 更新角色对象。
* *
* @param role 更新的角色对象。 * @param role 更新的角色对象。
* @param originalRole 原有的角色对象。 * @param originalRole 原有的角色对象。
* @param menuIdSet 菜单Id列表。 * @param menuIdSet 菜单Id列表。
* @return 更新成功返回true否则false。 * @return 更新成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean update(SysRole role, SysRole originalRole, Set<Long> menuIdSet) { public boolean update(SysRole role, SysRole originalRole, Set<Long> menuIdSet) {
SysRole updateRole = new SysRole(); SysRole updateRole = new SysRole();
BeanUtils.copyProperties(role, updateRole, "createUserId", "createUsername", "createTime"); BeanUtils.copyProperties(role, updateRole, "createUserId", "createUsername", "createTime");
@@ -101,9 +100,9 @@ public class SysRoleService extends BaseService<SysRole, Long> {
if (sysRoleMapper.updateByPrimaryKeySelective(updateRole) != 1) { if (sysRoleMapper.updateByPrimaryKeySelective(updateRole) != 1) {
return false; return false;
} }
Example e = new Example(SysRoleMenu.class); SysRoleMenu deletedRoleMenu = new SysRoleMenu();
e.createCriteria().andEqualTo("roleId", role.getRoleId()); deletedRoleMenu.setRoleId(role.getRoleId());
sysRoleMenuMapper.deleteByExample(e); sysRoleMenuMapper.delete(deletedRoleMenu);
if (menuIdSet != null) { if (menuIdSet != null) {
List<SysRoleMenu> roleMenuList = new LinkedList<>(); List<SysRoleMenu> roleMenuList = new LinkedList<>();
for (Long menuId : menuIdSet) { for (Long menuId : menuIdSet) {
@@ -123,7 +122,7 @@ public class SysRoleService extends BaseService<SysRole, Long> {
* @param roleId 角色主键Id。 * @param roleId 角色主键Id。
* @return 删除成功返回true否则false。 * @return 删除成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean remove(Long roleId) { public boolean remove(Long roleId) {
SysRole role = new SysRole(); SysRole role = new SysRole();
role.setRoleId(roleId); role.setRoleId(roleId);
@@ -131,19 +130,19 @@ public class SysRoleService extends BaseService<SysRole, Long> {
if (sysRoleMapper.updateByPrimaryKeySelective(role) != 1) { if (sysRoleMapper.updateByPrimaryKeySelective(role) != 1) {
return false; return false;
} }
Example sysRoleMenuExample = new Example(SysRoleMenu.class); SysRoleMenu roleMenu = new SysRoleMenu();
sysRoleMenuExample.createCriteria().andEqualTo("roleId", roleId); roleMenu.setRoleId(roleId);
sysRoleMenuMapper.deleteByExample(sysRoleMenuExample); sysRoleMenuMapper.delete(roleMenu);
Example sysUserRoleExample = new Example(SysUserRole.class); SysUserRole userRole = new SysUserRole();
sysUserRoleExample.createCriteria().andEqualTo("roleId", roleId); userRole.setRoleId(roleId);
sysUserRoleMapper.deleteByExample(sysUserRoleExample); sysUserRoleMapper.delete(userRole);
return true; return true;
} }
/** /**
* 获取角色列表。 * 获取角色列表。
* *
* @param filter 角色过滤对象。 * @param filter 角色过滤对象。
* @param orderBy 排序参数。 * @param orderBy 排序参数。
* @return 角色列表。 * @return 角色列表。
*/ */
@@ -151,27 +150,6 @@ public class SysRoleService extends BaseService<SysRole, Long> {
return sysRoleMapper.getSysRoleList(filter, orderBy); return sysRoleMapper.getSysRoleList(filter, orderBy);
} }
/**
* 获取指定角色对象。
*
* @param roleId 角色主键Id。
* @return 查询后的角色对象。
*/
public SysRole getSysRoleWithRelation(Long roleId) {
SysRole sysRole = this.getById(roleId);
if (sysRole != null) {
Example e = new Example(SysRoleMenu.class);
e.createCriteria().andEqualTo("roleId", roleId);
List<SysRoleMenu> sysRoleMenuList = sysRoleMenuMapper.selectByExample(e);
if (sysRoleMenuList.size() > 0) {
List<Long> menuIdList =
sysRoleMenuList.stream().map(SysRoleMenu::getMenuId).collect(Collectors.toList());
sysRole.setMenuIdList(menuIdList);
}
}
return sysRole;
}
/** /**
* 通过权限字Id获取拥有改权限的所有角色。 * 通过权限字Id获取拥有改权限的所有角色。
* 开发人员调试用接口。 * 开发人员调试用接口。
@@ -199,7 +177,7 @@ public class SysRoleService extends BaseService<SysRole, Long> {
* *
* @param userRoleList 用户角色关系数据列表。 * @param userRoleList 用户角色关系数据列表。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public void addUserRoleList(List<SysUserRole> userRoleList) { public void addUserRoleList(List<SysUserRole> userRoleList) {
sysUserRoleMapper.addUserRoleList(userRoleList); sysUserRoleMapper.addUserRoleList(userRoleList);
} }
@@ -211,7 +189,7 @@ public class SysRoleService extends BaseService<SysRole, Long> {
* @param userId 用户主键Id。 * @param userId 用户主键Id。
* @return 移除成功返回true否则false。 * @return 移除成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean removeUserRole(Long roleId, Long userId) { public boolean removeUserRole(Long roleId, Long userId) {
SysUserRole userRole = new SysUserRole(); SysUserRole userRole = new SysUserRole();
userRole.setRoleId(roleId); userRole.setRoleId(roleId);
@@ -222,26 +200,22 @@ public class SysRoleService extends BaseService<SysRole, Long> {
/** /**
* 验证角色对象关联的数据是否都合法。 * 验证角色对象关联的数据是否都合法。
* *
* @param sysRole 当前操作的对象。 * @param sysRole 当前操作的对象。
* @param originalSysRole 原有对象。 * @param originalSysRole 原有对象。
* @param menuIdListString 逗号分隔的menuId列表。 * @param menuIdListString 逗号分隔的menuId列表。
* @return 验证结果。 * @return 验证结果。
*/ */
public VerifyResult verifyRelatedData(SysRole sysRole, SysRole originalSysRole, String menuIdListString) { public CallResult verifyRelatedData(SysRole sysRole, SysRole originalSysRole, String menuIdListString) {
String errorMessage = null;
JSONObject jsonObject = null; JSONObject jsonObject = null;
do { if (StringUtils.isNotBlank(menuIdListString)) {
if (StringUtils.isNotBlank(menuIdListString)) { Set<Long> menuIdSet = Arrays.stream(
Set<Long> menuIdSet = Arrays.stream( menuIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
menuIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); if (!sysMenuService.existAllPrimaryKeys(menuIdSet)) {
if (!sysMenuService.existUniqueKeyList("menuId", menuIdSet)) { return CallResult.error("数据验证失败,存在不合法的菜单权限,请刷新后重试!");
errorMessage = "数据验证失败,存在不合法的菜单权限,请刷新后重试!";
break;
}
jsonObject = new JSONObject();
jsonObject.put("menuIdSet", menuIdSet);
} }
} while (false); jsonObject = new JSONObject();
return VerifyResult.create(errorMessage, jsonObject); jsonObject.put("menuIdSet", menuIdSet);
}
return CallResult.ok(jsonObject);
} }
} }

View File

@@ -4,13 +4,14 @@ import com.alibaba.fastjson.JSONObject;
import com.orange.admin.upms.dao.*; import com.orange.admin.upms.dao.*;
import com.orange.admin.upms.model.*; import com.orange.admin.upms.model.*;
import com.orange.admin.upms.model.constant.SysUserStatus; import com.orange.admin.upms.model.constant.SysUserStatus;
import com.orange.admin.common.core.base.service.BaseService;
import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.base.dao.BaseDaoMapper;
import com.orange.admin.common.core.constant.GlobalDeletedFlag; import com.orange.admin.common.core.constant.GlobalDeletedFlag;
import com.orange.admin.common.core.object.TokenData; import com.orange.admin.common.core.object.TokenData;
import com.orange.admin.common.core.object.MyWhereCriteria; import com.orange.admin.common.core.object.MyWhereCriteria;
import com.orange.admin.common.core.object.VerifyResult; import com.orange.admin.common.core.object.MyRelationParam;
import com.orange.admin.common.core.object.CallResult;
import com.orange.admin.common.core.util.MyCommonUtil; import com.orange.admin.common.core.util.MyCommonUtil;
import com.orange.admin.common.biz.base.service.BaseBizService;
import com.orange.admin.common.biz.util.BasicIdGenerator; import com.orange.admin.common.biz.util.BasicIdGenerator;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -26,10 +27,10 @@ import java.util.stream.Collectors;
* 用户管理数据操作服务类。 * 用户管理数据操作服务类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Service @Service
public class SysUserService extends BaseService<SysUser, Long> { public class SysUserService extends BaseBizService<SysUser, Long> {
@Autowired @Autowired
private SysUserMapper sysUserMapper; private SysUserMapper sysUserMapper;
@@ -77,7 +78,7 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param passwdSalt 密码的盐。 * @param passwdSalt 密码的盐。
* @return 新增后的用户对象。 * @return 新增后的用户对象。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public SysUser saveNew(SysUser user, Set<Long> roleIdSet, Set<Long> dataPermIdSet, String passwdSalt) { public SysUser saveNew(SysUser user, Set<Long> roleIdSet, Set<Long> dataPermIdSet, String passwdSalt) {
user.setUserId(idGenerator.nextLongId()); user.setUserId(idGenerator.nextLongId());
user.setPassword(MyCommonUtil.encrptedPassword(user.getPassword(), passwdSalt)); user.setPassword(MyCommonUtil.encrptedPassword(user.getPassword(), passwdSalt));
@@ -116,13 +117,13 @@ public class SysUserService extends BaseService<SysUser, Long> {
/** /**
* 更新用户对象。 * 更新用户对象。
* *
* @param user 更新的用户对象。 * @param user 更新的用户对象。
* @param originalUser 原有的用户对象。 * @param originalUser 原有的用户对象。
* @param roleIdSet 用户角色Id列表。 * @param roleIdSet 用户角色Id列表。
* @param dataPermIdSet 数据权限Id集合。 * @param dataPermIdSet 数据权限Id集合。
* @return 更新成功返回true否则false。 * @return 更新成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean update(SysUser user, SysUser originalUser, Set<Long> roleIdSet, Set<Long> dataPermIdSet) { public boolean update(SysUser user, SysUser originalUser, Set<Long> roleIdSet, Set<Long> dataPermIdSet) {
user.setLoginName(originalUser.getLoginName()); user.setLoginName(originalUser.getLoginName());
user.setPassword(originalUser.getPassword()); user.setPassword(originalUser.getPassword());
@@ -134,9 +135,9 @@ public class SysUserService extends BaseService<SysUser, Long> {
return false; return false;
} }
// 先删除原有的User-Role关联关系再重新插入新的关联关系 // 先删除原有的User-Role关联关系再重新插入新的关联关系
Example e = new Example(SysUserRole.class); SysUserRole deletedUserRole = new SysUserRole();
e.createCriteria().andEqualTo("userId", user.getUserId()); deletedUserRole.setUserId(user.getUserId());
sysUserRoleMapper.deleteByExample(e); sysUserRoleMapper.delete(deletedUserRole);
if (CollectionUtils.isNotEmpty(roleIdSet)) { if (CollectionUtils.isNotEmpty(roleIdSet)) {
List<SysUserRole> userRoleList = new LinkedList<>(); List<SysUserRole> userRoleList = new LinkedList<>();
for (Long roleId : roleIdSet) { for (Long roleId : roleIdSet) {
@@ -148,9 +149,9 @@ public class SysUserService extends BaseService<SysUser, Long> {
sysUserRoleMapper.insertList(userRoleList); sysUserRoleMapper.insertList(userRoleList);
} }
// 先删除原有的DataPerm-User关联关系在重新插入新的关联关系 // 先删除原有的DataPerm-User关联关系在重新插入新的关联关系
Example e2 = new Example(SysDataPermUser.class); SysDataPermUser deletedDataPermUser = new SysDataPermUser();
e2.createCriteria().andEqualTo("userId", user.getUserId()); deletedDataPermUser.setUserId(user.getUserId());
sysDataPermUserMapper.deleteByExample(e2); sysDataPermUserMapper.delete(deletedDataPermUser);
if (CollectionUtils.isNotEmpty(dataPermIdSet)) { if (CollectionUtils.isNotEmpty(dataPermIdSet)) {
List<SysDataPermUser> dataPermUserList = new LinkedList<>(); List<SysDataPermUser> dataPermUserList = new LinkedList<>();
for (Long dataPermId : dataPermIdSet) { for (Long dataPermId : dataPermIdSet) {
@@ -166,16 +167,16 @@ public class SysUserService extends BaseService<SysUser, Long> {
/** /**
* 重置用户密码。 * 重置用户密码。
* @param userId 用户主键Id。 * @param userId 用户主键Id。
* @param defaultPasswd 缺省密码。 * @param defaultPasswd 缺省密码。
* @param passwdSalt 密码的盐。 * @param passwdSalt 密码的盐。
* @return 成功返回true否则false。 * @return 成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean resetPassword(Long userId, String defaultPasswd, String passwdSalt) { public boolean resetPassword(Long userId, String defaultPasswd, String passwdSalt) {
Example e = new Example(SysUser.class); Example e = new Example(SysUser.class);
e.createCriteria().andEqualTo("userId", userId); e.createCriteria().andEqualTo(super.idFieldName, userId);
e.createCriteria().andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL); e.createCriteria().andEqualTo(super.deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
SysUser updatedUser = new SysUser(); SysUser updatedUser = new SysUser();
updatedUser.setPassword(MyCommonUtil.encrptedPassword(defaultPasswd, passwdSalt)); updatedUser.setPassword(MyCommonUtil.encrptedPassword(defaultPasswd, passwdSalt));
return sysUserMapper.updateByExampleSelective(updatedUser, e) == 1; return sysUserMapper.updateByExampleSelective(updatedUser, e) == 1;
@@ -187,12 +188,12 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param userId 主键Id。 * @param userId 主键Id。
* @return 成功返回true否则false。 * @return 成功返回true否则false。
*/ */
@Transactional @Transactional(rollbackFor = Exception.class)
public boolean remove(Long userId) { public boolean remove(Long userId) {
Example sysUserExample = new Example(SysUser.class); Example sysUserExample = new Example(SysUser.class);
Example.Criteria c = sysUserExample.createCriteria(); Example.Criteria c = sysUserExample.createCriteria();
c.andEqualTo("userId", userId); c.andEqualTo(super.idFieldName, userId);
c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL); c.andEqualTo(super.deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
// 这里先删除主数据 // 这里先删除主数据
SysUser deletedObject = new SysUser(); SysUser deletedObject = new SysUser();
deletedObject.setDeletedFlag(GlobalDeletedFlag.DELETED); deletedObject.setDeletedFlag(GlobalDeletedFlag.DELETED);
@@ -200,36 +201,20 @@ public class SysUserService extends BaseService<SysUser, Long> {
return false; return false;
} }
// 这里可继续删除关联数据。 // 这里可继续删除关联数据。
Example userRoleExample = new Example(SysUserRole.class); SysUserRole userRole = new SysUserRole();
userRoleExample.createCriteria().andEqualTo("userId", userId); userRole.setUserId(userId);
sysUserRoleMapper.deleteByExample(userRoleExample); sysUserRoleMapper.delete(userRole);
Example dataPermUserExample = new Example(SysDataPermUser.class); SysDataPermUser dataPermUser = new SysDataPermUser();
dataPermUserExample.createCriteria().andEqualTo("userId", userId); dataPermUser.setUserId(userId);
sysDataPermUserMapper.deleteByExample(dataPermUserExample); sysDataPermUserMapper.delete(dataPermUser);
return true; return true;
} }
/**
* 获取指定用户的详情数据。
*
* @param userId 用户主键Id。
* @return 用户详情数据。
*/
@Override
public SysUser getByIdWithRelation(Long userId) {
SysUser user = super.getByIdWithRelation(userId);
if (user != null) {
user.setRoleIdList(sysUserRoleMapper.getRoleIdListByUserId(userId));
user.setDataPermIdList(sysDataPermUserMapper.getDataPermIdListByUserId(userId));
}
return user;
}
/** /**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
* 如果需要同时获取关联数据,请移步(getSysUserListWithRelation)方法。 * 如果需要同时获取关联数据,请移步(getSysUserListWithRelation)方法。
* *
* @param filter 过滤对象。 * @param filter 过滤对象。
* @param orderBy 排序参数。 * @param orderBy 排序参数。
* @return 查询结果集。 * @return 查询结果集。
*/ */
@@ -248,15 +233,15 @@ public class SysUserService extends BaseService<SysUser, Long> {
public List<SysUser> getSysUserListWithRelation(SysUser filter, String orderBy) { public List<SysUser> getSysUserListWithRelation(SysUser filter, String orderBy) {
List<SysUser> resultList = sysUserMapper.getSysUserList(filter, orderBy); List<SysUser> resultList = sysUserMapper.getSysUserList(filter, orderBy);
Map<String, List<MyWhereCriteria>> criteriaMap = buildAggregationAdditionalWhereCriteria(); Map<String, List<MyWhereCriteria>> criteriaMap = buildAggregationAdditionalWhereCriteria();
this.buildAllRelationForDataList(resultList, false, criteriaMap); this.buildRelationForDataList(resultList, MyRelationParam.normal(), criteriaMap);
return resultList; return resultList;
} }
/** /**
* 获取指定角色的用户列表。 * 获取指定角色的用户列表。
* *
* @param roleId 角色主键Id。 * @param roleId 角色主键Id。
* @param filter 用户过滤对象。 * @param filter 用户过滤对象。
* @param orderBy 排序参数。 * @param orderBy 排序参数。
* @return 用户列表。 * @return 用户列表。
*/ */
@@ -267,8 +252,8 @@ public class SysUserService extends BaseService<SysUser, Long> {
/** /**
* 获取不属于指定角色的用户列表。 * 获取不属于指定角色的用户列表。
* *
* @param roleId 角色主键Id。 * @param roleId 角色主键Id。
* @param filter 用户过滤对象。 * @param filter 用户过滤对象。
* @param orderBy 排序参数。 * @param orderBy 排序参数。
* @return 用户列表。 * @return 用户列表。
*/ */
@@ -280,8 +265,8 @@ public class SysUserService extends BaseService<SysUser, Long> {
* 获取指定数据权限的用户列表。 * 获取指定数据权限的用户列表。
* *
* @param dataPermId 数据权限主键Id。 * @param dataPermId 数据权限主键Id。
* @param filter 用户过滤对象。 * @param filter 用户过滤对象。
* @param orderBy 排序参数。 * @param orderBy 排序参数。
* @return 用户列表。 * @return 用户列表。
*/ */
public List<SysUser> getSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy) { public List<SysUser> getSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy) {
@@ -292,8 +277,8 @@ public class SysUserService extends BaseService<SysUser, Long> {
* 获取不属于指定数据权限的用户列表。 * 获取不属于指定数据权限的用户列表。
* *
* @param dataPermId 数据权限主键Id。 * @param dataPermId 数据权限主键Id。
* @param filter 用户过滤对象。 * @param filter 用户过滤对象。
* @param orderBy 排序参数。 * @param orderBy 排序参数。
* @return 用户列表。 * @return 用户列表。
*/ */
public List<SysUser> getNotInSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy) { public List<SysUser> getNotInSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy) {
@@ -309,34 +294,27 @@ public class SysUserService extends BaseService<SysUser, Long> {
* @param dataPermIdListString 逗号分隔的数据权限Id列表字符串。 * @param dataPermIdListString 逗号分隔的数据权限Id列表字符串。
* @return 验证结果。 * @return 验证结果。
*/ */
public VerifyResult verifyRelatedData( public CallResult verifyRelatedData(
SysUser sysUser, SysUser originalSysUser, String roleIdListString, String dataPermIdListString) { SysUser sysUser, SysUser originalSysUser, String roleIdListString, String dataPermIdListString) {
String errorMessage = null;
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
do { if (StringUtils.isBlank(roleIdListString)) {
if (StringUtils.isBlank(roleIdListString)) { return CallResult.error("数据验证失败,用户的角色数据不能为空!");
errorMessage = "数据验证失败,用户的角色数据不能为空!"; }
break; Set<Long> roleIdSet = Arrays.stream(
} roleIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
Set<Long> roleIdSet = Arrays.stream( if (!sysRoleService.existAllPrimaryKeys(roleIdSet)) {
roleIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); return CallResult.error("数据验证失败,存在不合法的用户角色,请刷新后重试!");
if (!sysRoleService.existUniqueKeyList("roleId", roleIdSet)) { }
errorMessage = "数据验证失败,存在不合法的用户角色,请刷新后重试!"; jsonObject.put("roleIdSet", roleIdSet);
break; if (StringUtils.isBlank(dataPermIdListString)) {
} return CallResult.error("数据验证失败,用户的数据权限不能为空!");
jsonObject.put("roleIdSet", roleIdSet); }
if (StringUtils.isBlank(dataPermIdListString)) { Set<Long> dataPermIdSet = Arrays.stream(
errorMessage = "数据验证失败,用户的数据权限不能为空!"; dataPermIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
break; if (!sysDataPermService.existAllPrimaryKeys(dataPermIdSet)) {
} return CallResult.error("数据验证失败,存在不合法的数据权限,请刷新后重试!");
Set<Long> dataPermIdSet = Arrays.stream( }
dataPermIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); jsonObject.put("dataPermIdSet", dataPermIdSet);
if (!sysDataPermService.existUniqueKeyList("dataPermId", dataPermIdSet)) { return CallResult.ok(jsonObject);
errorMessage = "数据验证失败,存在不合法的数据权限,请刷新后重试!";
break;
}
jsonObject.put("dataPermIdSet", dataPermIdSet);
} while (false);
return VerifyResult.create(errorMessage, jsonObject);
} }
} }

View File

@@ -13,7 +13,7 @@ server:
# spring相关配置 # spring相关配置
spring: spring:
application: application:
name: application name: app
profiles: profiles:
active: dev active: dev
servlet: servlet:
@@ -62,7 +62,11 @@ management:
web: web:
exposure: exposure:
include: '*' include: '*'
jmx:
exposure:
include: '*'
endpoint: endpoint:
# 与中间件相关的健康详情也会被展示
health: health:
show-details: always show-details: always
configprops: configprops:
@@ -85,7 +89,7 @@ spring:
username: root username: root
password: 123456 password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
name: application name: app
initialSize: 10 initialSize: 10
minIdle: 10 minIdle: 10
maxActive: 50 maxActive: 50
@@ -105,7 +109,7 @@ spring:
web-stat-filter: web-stat-filter:
enabled: true enabled: true
url-pattern: /* url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*,/actuator/*"
stat-view-servlet: stat-view-servlet:
enabled: true enabled: true
urlPattern: /druid/* urlPattern: /druid/*
@@ -142,7 +146,7 @@ spring:
username: root username: root
password: 123456 password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver driver-class-name: com.mysql.cj.jdbc.Driver
name: application name: app
initialSize: 10 initialSize: 10
minIdle: 10 minIdle: 10
maxActive: 50 maxActive: 50
@@ -162,7 +166,7 @@ spring:
web-stat-filter: web-stat-filter:
enabled: true enabled: true
url-pattern: /* url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*,/actuator/*"
stat-view-servlet: stat-view-servlet:
enabled: true enabled: true
urlPattern: /druid/* urlPattern: /druid/*

View File

@@ -14,7 +14,7 @@
</plugin> </plugin>
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/zz-orangle-admin?useSSL=true&serverTimezone=Asia/Shanghai" connectionURL="jdbc:mysql://localhost:3306/zz-orange-admin?useSSL=true&serverTimezone=Asia/Shanghai"
userId="root" userId="root"
password="123456"> password="123456">
</jdbcConnection> </jdbcConnection>

View File

@@ -1,16 +0,0 @@
package com.orange.admin;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyApplicationTests {
@Test
public void contextLoads() {
}
}

View File

@@ -3,7 +3,7 @@ SET FOREIGN_KEY_CHECKS = 0;
-- ---------------------------- -- ----------------------------
-- 行政区划表,在以下数据库中执行该脚本。 -- 行政区划表,在以下数据库中执行该脚本。
-- 主数据源 [localhost:3306/zz-orangle-admin] -- 主数据源 [localhost:3306/zz-orange-admin]
-- ---------------------------- -- ----------------------------
DROP TABLE IF EXISTS `zz_area_code`; DROP TABLE IF EXISTS `zz_area_code`;
CREATE TABLE `zz_area_code` ( CREATE TABLE `zz_area_code` (

View File

@@ -12,7 +12,7 @@ import java.util.Date;
* Controller的环绕拦截类。 * Controller的环绕拦截类。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@ControllerAdvice @ControllerAdvice
public class MyControllerAdvice { public class MyControllerAdvice {

View File

@@ -1,9 +1,12 @@
package com.orange.admin.common.biz.advice; package com.orange.admin.common.biz.advice;
import lombok.extern.slf4j.Slf4j; import com.orange.admin.common.core.exception.InvalidClassFieldException;
import com.orange.admin.common.core.exception.InvalidDataFieldException;
import com.orange.admin.common.core.exception.InvalidDataModelException;
import com.orange.admin.common.core.constant.ErrorCodeEnum; import com.orange.admin.common.core.constant.ErrorCodeEnum;
import com.orange.admin.common.core.exception.RedisCacheAccessException; import com.orange.admin.common.core.exception.RedisCacheAccessException;
import com.orange.admin.common.core.object.ResponseResult; import com.orange.admin.common.core.object.ResponseResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.exceptions.PersistenceException; import org.apache.ibatis.exceptions.PersistenceException;
import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessException;
import org.springframework.dao.DuplicateKeyException; import org.springframework.dao.DuplicateKeyException;
@@ -19,26 +22,86 @@ import java.util.concurrent.TimeoutException;
* 用不同的函数,处理不同类型的异常。 * 用不同的函数,处理不同类型的异常。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
@RestControllerAdvice @RestControllerAdvice
public class MyExceptionHandler { public class MyExceptionHandler {
/**
* 通用异常处理方法。
*
* @param ex 异常对象。
* @param request http请求。
* @return 应答对象。
*/
@ExceptionHandler(value = Exception.class) @ExceptionHandler(value = Exception.class)
public ResponseResult<?> exceptionHandle(Exception ex, HttpServletRequest request) { public ResponseResult<Void> exceptionHandle(Exception ex, HttpServletRequest request) {
log.error("Unhandled exception from URL [" + request.getRequestURI() + "]", ex); log.error("Unhandled exception from URL [" + request.getRequestURI() + "]", ex);
return ResponseResult.error(ErrorCodeEnum.UNHANDLED_EXCEPTION); return ResponseResult.error(ErrorCodeEnum.UNHANDLED_EXCEPTION);
} }
/**
* 无效的实体对象异常。
*
* @param ex 异常对象。
* @param request http请求。
* @return 应答对象。
*/
@ExceptionHandler(value = InvalidDataModelException.class)
public ResponseResult<Void> invalidDataModelExceptionHandle(Exception ex, HttpServletRequest request) {
log.error("InvalidDataModelException exception from URL [" + request.getRequestURI() + "]", ex);
return ResponseResult.error(ErrorCodeEnum.INVALID_DATA_MODEL);
}
/**
* 无效的实体对象字段异常。
*
* @param ex 异常对象。
* @param request http请求。
* @return 应答对象。
*/
@ExceptionHandler(value = InvalidDataFieldException.class)
public ResponseResult<Void> invalidDataFieldExceptionHandle(Exception ex, HttpServletRequest request) {
log.error("InvalidDataFieldException exception from URL [" + request.getRequestURI() + "]", ex);
return ResponseResult.error(ErrorCodeEnum.INVALID_DATA_FIELD);
}
/**
* 无效类字段异常。
*
* @param ex 异常对象。
* @param request http请求。
* @return 应答对象。
*/
@ExceptionHandler(value = InvalidClassFieldException.class)
public ResponseResult<Void> invalidClassFieldExceptionHandle(Exception ex, HttpServletRequest request) {
log.error("InvalidClassFieldException exception from URL [" + request.getRequestURI() + "]", ex);
return ResponseResult.error(ErrorCodeEnum.INVALID_CLASS_FIELD);
}
/**
* 重复键异常处理方法。
*
* @param ex 异常对象。
* @param request http请求。
* @return 应答对象。
*/
@ExceptionHandler(value = DuplicateKeyException.class) @ExceptionHandler(value = DuplicateKeyException.class)
public ResponseResult<?> duplicateKeyExceptionHandle(Exception ex, HttpServletRequest request) { public ResponseResult<Void> duplicateKeyExceptionHandle(Exception ex, HttpServletRequest request) {
log.error("DuplicateKeyException exception from URL [" + request.getRequestURI() + "]", ex); log.error("DuplicateKeyException exception from URL [" + request.getRequestURI() + "]", ex);
return ResponseResult.error(ErrorCodeEnum.DUPLICATED_UNIQUE_KEY); return ResponseResult.error(ErrorCodeEnum.DUPLICATED_UNIQUE_KEY);
} }
/**
* 数据访问失败异常处理方法。
*
* @param ex 异常对象。
* @param request http请求。
* @return 应答对象。
*/
@ExceptionHandler(value = DataAccessException.class) @ExceptionHandler(value = DataAccessException.class)
public ResponseResult<?> dataAccessExceptionHandle(Exception ex, HttpServletRequest request) { public ResponseResult<Void> dataAccessExceptionHandle(Exception ex, HttpServletRequest request) {
log.error("DataAccessException exception from URL [" + request.getRequestURI() + "]", ex); log.error("DataAccessException exception from URL [" + request.getRequestURI() + "]", ex);
if (ex.getCause() instanceof PersistenceException if (ex.getCause() instanceof PersistenceException
&& ex.getCause().getCause() instanceof PermissionDeniedDataAccessException) { && ex.getCause().getCause() instanceof PermissionDeniedDataAccessException) {
@@ -47,8 +110,15 @@ public class MyExceptionHandler {
return ResponseResult.error(ErrorCodeEnum.DATA_ACCESS_FAILED); return ResponseResult.error(ErrorCodeEnum.DATA_ACCESS_FAILED);
} }
/**
* Redis缓存访问异常处理方法。
*
* @param ex 异常对象。
* @param request http请求。
* @return 应答对象。
*/
@ExceptionHandler(value = RedisCacheAccessException.class) @ExceptionHandler(value = RedisCacheAccessException.class)
public ResponseResult<?> redisCacheAccessExceptionHandle(Exception ex, HttpServletRequest request) { public ResponseResult<Void> redisCacheAccessExceptionHandle(Exception ex, HttpServletRequest request) {
log.error("RedisCacheAccessException exception from URL [" + request.getRequestURI() + "]", ex); log.error("RedisCacheAccessException exception from URL [" + request.getRequestURI() + "]", ex);
if (ex.getCause() instanceof TimeoutException) { if (ex.getCause() instanceof TimeoutException) {
return ResponseResult.error(ErrorCodeEnum.REDIS_CACHE_ACCESS_TIMEOUT); return ResponseResult.error(ErrorCodeEnum.REDIS_CACHE_ACCESS_TIMEOUT);

View File

@@ -0,0 +1,41 @@
package com.orange.admin.common.biz.aop;
import com.orange.admin.common.core.object.GlobalThreadLocal;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
* 禁用数据权限过滤的AOP处理类。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
@Aspect
@Component
@Order(1)
@Slf4j
public class DisableDataPermAspect {
/**
* 所有标记了DisableDataPerm注解的方法。
*/
@Pointcut("@annotation(com.orange.admin.common.core.annotation.DisableDataPerm)")
public void disableDataPermPointCut() {
// 空注释避免sonar警告
}
@Around("disableDataPermPointCut()")
public Object around(ProceedingJoinPoint point) throws Throwable {
boolean dataPermEnabled = GlobalThreadLocal.setDataPerm(false);
try {
return point.proceed();
} finally {
GlobalThreadLocal.setDataPerm(dataPermEnabled);
}
}
}

View File

@@ -0,0 +1,19 @@
package com.orange.admin.common.biz.base.service;
import com.orange.admin.common.core.base.service.BaseService;
import lombok.extern.slf4j.Slf4j;
/**
* 所有业务Service的共同基类。由于BaseService位于common-core模块内该模块很少涉及spring bean的集成
* 因此该类位于业务服务类和BaseService之间主要提供一些通用方法特别是与spring bean相关的业务代码。
* NOTE: 目前该类实现为空,主要是为了便于用户自行扩展,同时也能方便今后向微服务的升级,
*
* @param <M> Model对象的类型。
* @param <K> Model对象主键的类型。
* @author Stephen.Liu
* @date 2020-05-24
*/
@Slf4j
public abstract class BaseBizService<M, K> extends BaseService<M, K> {
}

View File

@@ -8,7 +8,7 @@ import org.springframework.context.annotation.Configuration;
* 应用程序自定义的通用属性配置文件。 * 应用程序自定义的通用属性配置文件。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Data @Data
@Configuration @Configuration

View File

@@ -6,12 +6,16 @@ import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import java.util.ArrayList;
import java.util.List;
/** /**
* DTA 对象数据格式转换器这里集成了alibaba的fastjson作为消息格式转换工具 * 对象数据格式转换器这里集成了alibaba的fastjson作为消息格式转换工具
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Configuration @Configuration
public class FastjsonConfig { public class FastjsonConfig {
@@ -19,9 +23,15 @@ public class FastjsonConfig {
@Bean @Bean
public HttpMessageConverters fastJsonHttpMessageConverters() { public HttpMessageConverters fastJsonHttpMessageConverters() {
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
List<MediaType> supportedMediaTypes = new ArrayList<>();
supportedMediaTypes.add(MediaType.APPLICATION_JSON);
supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
fastConverter.setSupportedMediaTypes(supportedMediaTypes);
FastJsonConfig fastJsonConfig = new FastJsonConfig(); FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures( fastJsonConfig.setSerializerFeatures(
SerializerFeature.PrettyFormat, SerializerFeature.DisableCircularReferenceDetect); SerializerFeature.PrettyFormat,
SerializerFeature.DisableCircularReferenceDetect,
SerializerFeature.IgnoreNonFieldGetter);
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
fastConverter.setFastJsonConfig(fastJsonConfig); fastConverter.setFastJsonConfig(fastJsonConfig);
return new HttpMessageConverters(fastConverter); return new HttpMessageConverters(fastConverter);

View File

@@ -10,7 +10,7 @@ import org.springframework.context.annotation.Configuration;
* tomcat配置对象。当前配置禁用了PUT和DELETE方法防止渗透攻击。 * tomcat配置对象。当前配置禁用了PUT和DELETE方法防止渗透攻击。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Configuration @Configuration
public class TomcatConfig { public class TomcatConfig {

View File

@@ -3,6 +3,12 @@ package com.orange.admin.common.biz.constant;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/**
* 科目常量字典对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
public final class Subject { public final class Subject {
/** /**
@@ -18,7 +24,7 @@ public final class Subject {
*/ */
public static final int ENGLISH = 2; public static final int ENGLISH = 2;
public static final Map<Object, String> DICT_MAP = new HashMap<>(3); private static final Map<Object, String> DICT_MAP = new HashMap<>(3);
static { static {
DICT_MAP.put(CHINESE, "语文"); DICT_MAP.put(CHINESE, "语文");
DICT_MAP.put(MATH, "数学"); DICT_MAP.put(MATH, "数学");
@@ -31,8 +37,8 @@ public final class Subject {
* @param value 待验证的参数值。 * @param value 待验证的参数值。
* @return 合法返回true否则false。 * @return 合法返回true否则false。
*/ */
public static boolean isValid(int value) { public static boolean isValid(Integer value) {
return DICT_MAP.containsKey(value); return value != null && DICT_MAP.containsKey(value);
} }
/** /**

View File

@@ -3,6 +3,12 @@ package com.orange.admin.common.biz.constant;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/**
* 是否常量字典对象。
*
* @author Stephen.Liu
* @date 2020-05-24
*/
public final class YesNo { public final class YesNo {
/** /**
@@ -14,7 +20,7 @@ public final class YesNo {
*/ */
public static final int NO = 0; public static final int NO = 0;
public static final Map<Object, String> DICT_MAP = new HashMap<>(2); private static final Map<Object, String> DICT_MAP = new HashMap<>(2);
static { static {
DICT_MAP.put(YES, ""); DICT_MAP.put(YES, "");
DICT_MAP.put(NO, ""); DICT_MAP.put(NO, "");
@@ -26,8 +32,8 @@ public final class YesNo {
* @param value 待验证的参数值。 * @param value 待验证的参数值。
* @return 合法返回true否则false。 * @return 合法返回true否则false。
*/ */
public static boolean isValid(int value) { public static boolean isValid(Integer value) {
return DICT_MAP.containsKey(value); return value != null && DICT_MAP.containsKey(value);
} }
/** /**

View File

@@ -13,7 +13,7 @@ import javax.servlet.http.HttpServletResponse;
* 服务访问日志的拦截器,主要完成记录接口调用时长。 * 服务访问日志的拦截器,主要完成记录接口调用时长。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Slf4j @Slf4j
public class AccessInterceptor implements HandlerInterceptor { public class AccessInterceptor implements HandlerInterceptor {
@@ -33,6 +33,7 @@ public class AccessInterceptor implements HandlerInterceptor {
@Override @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception { ModelAndView modelAndView) throws Exception {
// 这里需要加注释否则sonar不happy。
} }
@Override @Override

View File

@@ -9,9 +9,11 @@ import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.lang.NonNull; import org.springframework.lang.NonNull;
import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer; import org.springframework.web.method.support.ModelAndViewContainer;
@@ -27,7 +29,7 @@ import java.util.*;
* 2、多个对象需要封装到一个对象里才可以用@RequestBody接收。 * 2、多个对象需要封装到一个对象里才可以用@RequestBody接收。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver { public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver {
@@ -47,10 +49,10 @@ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver
} }
/** /**
* 设置支持的方法参数类型 * 设置支持的方法参数类型
* *
* @param parameter 方法参数 * @param parameter 方法参数
* @return 支持的类型 * @return 支持的类型
*/ */
@Override @Override
public boolean supportsParameter(@NonNull MethodParameter parameter) { public boolean supportsParameter(@NonNull MethodParameter parameter) {
@@ -58,10 +60,9 @@ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver
} }
/** /**
* 参数解析利用fastjson * 参数解析利用fastjson
* 注意非基本类型返回null会报空指针异常要通过反射或者JSON工具类创建一个空对象 * 注意非基本类型返回null会报空指针异常要通过反射或者JSON工具类创建一个空对象
*/ */
@SuppressWarnings("unchecked")
@Override @Override
public Object resolveArgument( public Object resolveArgument(
@NonNull MethodParameter parameter, @NonNull MethodParameter parameter,
@@ -73,7 +74,7 @@ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver
if (!HttpMethod.POST.name().equals(servletRequest.getMethod())) { if (!HttpMethod.POST.name().equals(servletRequest.getMethod())) {
throw new IllegalArgumentException("Only POST method can be applied @MyRequestBody annotation"); throw new IllegalArgumentException("Only POST method can be applied @MyRequestBody annotation");
} }
if (!StringUtils.containsIgnoreCase(contentType, "application/json")) { if (!StringUtils.containsIgnoreCase(contentType, MediaType.APPLICATION_JSON_VALUE)) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Only application/json Content-Type can be applied @MyRequestBody annotation"); "Only application/json Content-Type can be applied @MyRequestBody annotation");
} }
@@ -106,37 +107,41 @@ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver
// 基本类型包装类 // 基本类型包装类
if (isBasicDataTypes(parameterType)) { if (isBasicDataTypes(parameterType)) {
return parseBasicTypeWrapper(parameterType, value); return parseBasicTypeWrapper(parameterType, value);
// 字符串类型
} else if (parameterType == String.class) { } else if (parameterType == String.class) {
// 字符串类型
return value.toString(); return value.toString();
} }
// 数组类型
if (value instanceof JSONArray) { if (value instanceof JSONArray) {
Object o; return parseArray(parameterType, parameterAnnotation.elementType(), key, value);
if (!parameterType.equals(List.class)) {
o = parameterType.newInstance();
parameterType = (Class<?>) ((ParameterizedType)
parameterType.getGenericSuperclass()).getActualTypeArguments()[0];
} else {
parameterType = parameterAnnotation.elementType();
if (parameterType.equals(Class.class)) {
throw new IllegalArgumentException(
String.format("List Type parameter %s MUST have elementType!", key));
}
o = new LinkedList<>();
}
if (!(o instanceof List)) {
throw new IllegalArgumentException(String.format("Required parameter %s is List!", key));
}
((List<Object>) o).addAll(((JSONArray) value).toJavaList(parameterType));
return o;
} }
// 其他复杂对象 // 其他复杂对象
return JSONObject.toJavaObject((JSONObject) value, parameterType); return JSON.toJavaObject((JSONObject) value, parameterType);
}
@SuppressWarnings("unchecked")
private Object parseArray(Class<?> parameterType, Class<?> elementType, String key, Object value)
throws IllegalAccessException, InstantiationException {
Object o;
if (!parameterType.equals(List.class)) {
o = parameterType.newInstance();
parameterType = (Class<?>) ((ParameterizedType)
parameterType.getGenericSuperclass()).getActualTypeArguments()[0];
} else {
parameterType = elementType;
if (parameterType.equals(Class.class)) {
throw new IllegalArgumentException(
String.format("List Type parameter %s MUST have elementType!", key));
}
o = new LinkedList<>();
}
if (!(o instanceof List)) {
throw new IllegalArgumentException(String.format("Required parameter %s is List!", key));
}
((List<Object>) o).addAll(((JSONArray) value).toJavaList(parameterType));
return o;
} }
/**
* 基本类型解析
*/
private Object parsePrimitive(String parameterTypeName, Object value) { private Object parsePrimitive(String parameterTypeName, Object value) {
final String booleanTypeName = "boolean"; final String booleanTypeName = "boolean";
if (booleanTypeName.equals(parameterTypeName)) { if (booleanTypeName.equals(parameterTypeName)) {
@@ -173,9 +178,6 @@ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver
return null; return null;
} }
/**
* 基本类型包装类解析
*/
private Object parseBasicTypeWrapper(Class<?> parameterType, Object value) { private Object parseBasicTypeWrapper(Class<?> parameterType, Object value) {
if (Number.class.isAssignableFrom(parameterType)) { if (Number.class.isAssignableFrom(parameterType)) {
if (value instanceof String) { if (value instanceof String) {
@@ -203,30 +205,20 @@ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver
return null; return null;
} }
/**
* 判断是否为基本数据类型包装类
*/
private boolean isBasicDataTypes(Class<?> clazz) { private boolean isBasicDataTypes(Class<?> clazz) {
return classSet.contains(clazz); return classSet.contains(clazz);
} }
/** private JSONObject getRequestBody(NativeWebRequest webRequest) throws IOException {
* 获取请求体JSON字符串
*/
private JSONObject getRequestBody(NativeWebRequest webRequest) {
HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class); HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class);
// 有就直接获取 // 有就直接获取
JSONObject jsonObject = (JSONObject) webRequest.getAttribute(JSONBODY_ATTRIBUTE, NativeWebRequest.SCOPE_REQUEST); JSONObject jsonObject = (JSONObject) webRequest.getAttribute(JSONBODY_ATTRIBUTE, RequestAttributes.SCOPE_REQUEST);
// 没有就从请求中读取 // 没有就从请求中读取
if (jsonObject == null) { if (jsonObject == null) {
try { String jsonBody = IOUtils.toString(servletRequest.getReader());
String jsonBody = IOUtils.toString(servletRequest.getReader()); jsonObject = JSON.parseObject(jsonBody);
jsonObject = JSON.parseObject(jsonBody); if (jsonObject != null) {
if (jsonObject != null) { webRequest.setAttribute(JSONBODY_ATTRIBUTE, jsonObject, RequestAttributes.SCOPE_REQUEST);
webRequest.setAttribute(JSONBODY_ATTRIBUTE, jsonObject, NativeWebRequest.SCOPE_REQUEST);
}
} catch (IOException e) {
throw new RuntimeException(e);
} }
} }
return jsonObject; return jsonObject;

View File

@@ -11,11 +11,12 @@ import java.util.Map;
* 应用程序启动后的事件监听对象。主要负责加载Model之间的字典关联和一对一关联所对应的Service结构关系。 * 应用程序启动后的事件监听对象。主要负责加载Model之间的字典关联和一对一关联所对应的Service结构关系。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Component @Component
public class LoadCachedDataListener implements ApplicationListener<ApplicationReadyEvent> { public class LoadCachedDataListener implements ApplicationListener<ApplicationReadyEvent> {
@SuppressWarnings("all")
@Override @Override
public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
Map<String, BaseDictService> serviceMap = Map<String, BaseDictService> serviceMap =

View File

@@ -11,11 +11,12 @@ import java.util.Map;
* 应用程序启动后的事件监听对象。主要负责加载Model之间的字典关联和一对一关联所对应的Service结构关系。 * 应用程序启动后的事件监听对象。主要负责加载Model之间的字典关联和一对一关联所对应的Service结构关系。
* *
* @author Stephen.Liu * @author Stephen.Liu
* @date 2020-04-11 * @date 2020-05-24
*/ */
@Component @Component
public class LoadServiceRelationListener implements ApplicationListener<ApplicationReadyEvent> { public class LoadServiceRelationListener implements ApplicationListener<ApplicationReadyEvent> {
@SuppressWarnings("all")
@Override @Override
public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
Map<String, BaseService> serviceMap = Map<String, BaseService> serviceMap =

Some files were not shown because too many files have changed in this diff Show More