diff --git a/orange-admin-service/.DS_Store b/orange-admin-service/.DS_Store deleted file mode 100644 index f88965e1..00000000 Binary files a/orange-admin-service/.DS_Store and /dev/null differ diff --git a/orange-admin-service/README.md b/orange-admin-service/README.md index 255facf9..6a1d5465 100644 --- a/orange-admin-service/README.md +++ b/orange-admin-service/README.md @@ -3,4 +3,3 @@ 在当前工程业务应用服务或Job服务启动前,需按如下顺序依次启动下列中间件。 - XXL-Job (可选,仅当启动Job服务时使用) ->细节请参考文档:[http://101.200.178.51/development-doc/environment/#xxl-job](http://101.200.178.51/development-doc/environment/#xxl-job) diff --git a/orange-admin-service/application/.DS_Store b/orange-admin-service/application/.DS_Store index ee771938..b62a48f6 100644 Binary files a/orange-admin-service/application/.DS_Store and b/orange-admin-service/application/.DS_Store differ diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/MyApplication.java b/orange-admin-service/application/src/main/java/com/orange/admin/MyApplication.java index 0df246aa..cdb6e21c 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/MyApplication.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/MyApplication.java @@ -3,6 +3,12 @@ package com.orange.admin; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +/** + * 应用服务启动类。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @SpringBootApplication public class MyApplication { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/controller/AreaCodeController.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/controller/AreaCodeController.java index da7f958f..8c3ef0aa 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/controller/AreaCodeController.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/controller/AreaCodeController.java @@ -17,7 +17,7 @@ import java.util.*; * 行政区划数据访问接口类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @RestController @RequestMapping("/admin/app/areaCode") @@ -32,7 +32,7 @@ public class AreaCodeController { * @return 字典形式的行政区划列表。 */ @GetMapping("/listDictAreaCode") - public ResponseResult listDictAreaCode() { + public ResponseResult>> listDictAreaCode() { List resultList = areaCodeService.getAllList(); return ResponseResult.success(BeanQuery.select( "parentId as parentId", "areaId as id", "areaName as name").executeFrom(resultList)); @@ -45,7 +45,7 @@ public class AreaCodeController { * @return 按照字典的形式返回下级行政区划列表。 */ @GetMapping("/listDictAreaCodeByParentId") - public ResponseResult listDictAreaCodeByParentId(@RequestParam(required = false) Long parentId) { + public ResponseResult>> listDictAreaCodeByParentId(@RequestParam(required = false) Long parentId) { Collection resultList = areaCodeService.getListByParentId(parentId); if (CollectionUtils.isEmpty(resultList)) { return ResponseResult.success(new LinkedList<>()); diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/controller/TeacherController.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/controller/TeacherController.java index d86779c7..2ad392e7 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/controller/TeacherController.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/controller/TeacherController.java @@ -1,7 +1,7 @@ package com.orange.admin.app.controller; 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.service.*; import com.orange.admin.upms.model.*; @@ -22,7 +22,7 @@ import javax.validation.groups.Default; * 老师数据源操作控制器类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @RestController @@ -39,28 +39,21 @@ public class TeacherController { * @return 应答结果对象,包含新增对象主键Id。 */ @PostMapping("/add") - public ResponseResult add(@MyRequestBody Teacher teacher) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - JSONObject responseData = null; - do { - errorMessage = MyCommonUtil.getModelValidationError(teacher); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - // 验证关联Id的数据合法性 - VerifyResult verifyResult = teacherService.verifyRelatedData(teacher, null); - if (!verifyResult.isSuccess()) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - errorMessage = verifyResult.getErrorMessage(); - break; - } - teacher = teacherService.saveNew(teacher); - responseData = new JSONObject(); - responseData.put("teacherId", teacher.getTeacherId()); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + public ResponseResult add(@MyRequestBody Teacher teacher) { + String errorMessage = MyCommonUtil.getModelValidationError(teacher); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + // 验证关联Id的数据合法性 + CallResult callResult = teacherService.verifyRelatedData(teacher, null); + if (!callResult.isSuccess()) { + errorMessage = callResult.getErrorMessage(); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + teacher = teacherService.saveNew(teacher); + JSONObject responseData = new JSONObject(); + responseData.put("teacherId", teacher.getTeacherId()); + return ResponseResult.success(responseData); } /** @@ -70,36 +63,28 @@ public class TeacherController { * @return 应答结果对象。 */ @PostMapping("/update") - public ResponseResult update(@MyRequestBody Teacher teacher) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - do { - errorMessage = MyCommonUtil.getModelValidationError(teacher, Default.class, UpdateGroup.class); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - // 验证关联Id的数据合法性 - Teacher originalTeacher = teacherService.getById(teacher.getTeacherId()); - if (originalTeacher == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - //TODO 修改下面方括号中的话述 - errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!"; - break; - } - // 验证关联Id的数据合法性 - VerifyResult verifyResult = teacherService.verifyRelatedData(teacher, originalTeacher); - if (!verifyResult.isSuccess()) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - errorMessage = verifyResult.getErrorMessage(); - break; - } - if (!teacherService.update(teacher, originalTeacher)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult update(@MyRequestBody Teacher teacher) { + String errorMessage = MyCommonUtil.getModelValidationError(teacher, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + // 验证关联Id的数据合法性 + Teacher originalTeacher = teacherService.getById(teacher.getTeacherId()); + if (originalTeacher == null) { + //NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + // 验证关联Id的数据合法性 + CallResult callResult = teacherService.verifyRelatedData(teacher, originalTeacher); + if (!callResult.isSuccess()) { + errorMessage = callResult.getErrorMessage(); + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + if (!teacherService.update(teacher, originalTeacher)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); } /** @@ -109,29 +94,23 @@ public class TeacherController { * @return 应答结果对象。 */ @PostMapping("/delete") - public ResponseResult delete(@MyRequestBody Long teacherId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(teacherId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - // 验证关联Id的数据合法性 - Teacher originalTeacher = teacherService.getById(teacherId); - if (originalTeacher == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - //TODO 修改下面方括号中的话述 - errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; - break; - } - if (!teacherService.remove(teacherId)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult delete(@MyRequestBody Long teacherId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(teacherId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + Teacher originalTeacher = teacherService.getById(teacherId); + if (originalTeacher == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!teacherService.remove(teacherId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -144,13 +123,13 @@ public class TeacherController { * @return 应答结果对象,包含查询结果集。 */ @PostMapping("/list") - public ResponseResult list( + public ResponseResult list( @MyRequestBody Teacher teacherFilter, @MyRequestBody SysDept sysDeptFilter, @MyRequestBody MyOrderParam orderParam, @MyRequestBody MyPageParam pageParam) { if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); } String orderBy = MyOrderParam.buildOrderBy(orderParam, Teacher.class); List resultList = @@ -166,21 +145,14 @@ public class TeacherController { */ @GetMapping("/view") public ResponseResult view(@RequestParam Long teacherId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - Teacher teacher = null; - do { - if (MyCommonUtil.existBlankArgument(teacherId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - teacher = teacherService.getByIdWithRelation(teacherId); - if (teacher == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, teacher); + if (MyCommonUtil.existBlankArgument(teacherId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + Teacher teacher = teacherService.getByIdWithRelation(teacherId, MyRelationParam.full()); + if (teacher == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(teacher); } /** @@ -191,8 +163,8 @@ public class TeacherController { * @return 应答结果对象,包含的数据为 List>,map中包含两条记录,key的值分别是id和name,value对应具体数据。 */ @GetMapping("/listDictTeacher") - public ResponseResult listDictTeacher(Teacher filter) { - List resultList = teacherService.getListByFilter(filter); + public ResponseResult>> listDictTeacher(Teacher filter) { + List resultList = teacherService.getListByFilter(filter, null); return ResponseResult.success(BeanQuery.select( "teacherId as id", "teacherName as name").executeFrom(resultList)); } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/controller/TeacherTransStatsController.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/controller/TeacherTransStatsController.java index 1786ffdb..0ed38b3e 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/controller/TeacherTransStatsController.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/controller/TeacherTransStatsController.java @@ -1,6 +1,6 @@ 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.service.*; 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.annotation.MyRequestBody; import lombok.extern.slf4j.Slf4j; +import com.alibaba.fastjson.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -17,7 +18,7 @@ import java.util.*; * 老师流水统计操作控制器类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @RestController @@ -36,12 +37,12 @@ public class TeacherTransStatsController { * @return 应答结果对象,包含查询结果集。 */ @PostMapping("/list") - public ResponseResult list( + public ResponseResult list( @MyRequestBody TeacherTransStats teacherTransStatsFilter, @MyRequestBody MyOrderParam orderParam, @MyRequestBody MyPageParam pageParam) { if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); } String orderBy = MyOrderParam.buildOrderBy(orderParam, TeacherTransStats.class); List resultList = teacherTransStatsService.getTeacherTransStatsListWithRelation(teacherTransStatsFilter, orderBy); @@ -58,7 +59,7 @@ public class TeacherTransStatsController { * @return 应答结果对象,包含查询结果集。 */ @PostMapping("/listWithGroup") - public ResponseResult listWithGroup( + public ResponseResult listWithGroup( @MyRequestBody TeacherTransStats teacherTransStatsFilter, @MyRequestBody MyGroupParam groupParam, @MyRequestBody MyOrderParam orderParam, @@ -70,7 +71,7 @@ public class TeacherTransStatsController { ErrorCodeEnum.INVALID_ARGUMENT_FORMAT, "数据参数错误,分组参数不能为空!"); } if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); } MyGroupCriteria criteria = groupParam.getGroupCriteria(); List resultList = teacherTransStatsService.getGroupedTeacherTransStatsListWithRelation( @@ -86,20 +87,13 @@ public class TeacherTransStatsController { */ @GetMapping("/view") public ResponseResult view(@RequestParam Long statsId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - TeacherTransStats teacherTransStats = null; - do { - if (MyCommonUtil.existBlankArgument(statsId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - teacherTransStats = teacherTransStatsService.getByIdWithRelation(statsId); - if (teacherTransStats == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, teacherTransStats); + if (MyCommonUtil.existBlankArgument(statsId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + TeacherTransStats teacherTransStats = teacherTransStatsService.getByIdWithRelation(statsId, MyRelationParam.full()); + if (teacherTransStats == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(teacherTransStats); } } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/dao/AreaCodeMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/dao/AreaCodeMapper.java index f57475ca..64923cc0 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/dao/AreaCodeMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/dao/AreaCodeMapper.java @@ -7,7 +7,7 @@ import com.orange.admin.app.model.AreaCode; * 行政区划数据操作访问接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface AreaCodeMapper extends BaseDaoMapper { } \ No newline at end of file diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/dao/TeacherMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/dao/TeacherMapper.java index bc906658..afc12d23 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/dao/TeacherMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/dao/TeacherMapper.java @@ -12,7 +12,7 @@ import java.util.*; * 老师数据源数据操作访问接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @EnableDataPerm public interface TeacherMapper extends BaseDaoMapper { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/dao/TeacherTransStatsMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/dao/TeacherTransStatsMapper.java index 2d836de0..b0776168 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/dao/TeacherTransStatsMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/dao/TeacherTransStatsMapper.java @@ -11,7 +11,7 @@ import java.util.*; * 老师流水统计数据操作访问接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @EnableDataPerm public interface TeacherTransStatsMapper extends BaseDaoMapper { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/model/AreaCode.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/model/AreaCode.java index 738c16ef..d94ddf70 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/model/AreaCode.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/model/AreaCode.java @@ -4,6 +4,12 @@ import lombok.Data; import javax.persistence.*; +/** + * 行政区划实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_area_code") public class AreaCode { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/model/Teacher.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/model/Teacher.java index 0cc8d9b6..b4e2a953 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/model/Teacher.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/model/Teacher.java @@ -20,6 +20,12 @@ import javax.validation.constraints.*; import java.util.Date; import java.util.Map; +/** + * Teacher实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_teacher") public class Teacher { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/model/TeacherTransStats.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/model/TeacherTransStats.java index e67f551f..6540e17d 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/model/TeacherTransStats.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/model/TeacherTransStats.java @@ -13,6 +13,12 @@ import javax.validation.constraints.*; import java.util.Date; import java.util.Map; +/** + * TeacherTransStats实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_teacher_trans_stats") public class TeacherTransStats { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/model/constant/Gender.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/model/constant/Gender.java index 1e9ac202..8166281b 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/model/constant/Gender.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/model/constant/Gender.java @@ -3,6 +3,12 @@ package com.orange.admin.app.model.constant; import java.util.HashMap; import java.util.Map; +/** + * 性别常量字典对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ public final class Gender { /** @@ -14,7 +20,7 @@ public final class Gender { */ public static final int FEMALE = 0; - public static final Map DICT_MAP = new HashMap<>(2); + private static final Map DICT_MAP = new HashMap<>(2); static { DICT_MAP.put(MALE, "男"); DICT_MAP.put(FEMALE, "女"); @@ -26,8 +32,8 @@ public final class Gender { * @param value 待验证的参数值。 * @return 合法返回true,否则false。 */ - public static boolean isValid(int value) { - return DICT_MAP.containsKey(value); + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); } /** diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/model/constant/TeacherLevelType.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/model/constant/TeacherLevelType.java index cdccf1c7..248880c6 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/model/constant/TeacherLevelType.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/model/constant/TeacherLevelType.java @@ -3,6 +3,12 @@ package com.orange.admin.app.model.constant; import java.util.HashMap; import java.util.Map; +/** + * 教师职级常量字典对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ public final class TeacherLevelType { /** @@ -18,7 +24,7 @@ public final class TeacherLevelType { */ public static final int HIGH = 2; - public static final Map DICT_MAP = new HashMap<>(3); + private static final Map DICT_MAP = new HashMap<>(3); static { DICT_MAP.put(LOWER, "初级"); DICT_MAP.put(NORMAL, "中级"); @@ -31,8 +37,8 @@ public final class TeacherLevelType { * @param value 待验证的参数值。 * @return 合法返回true,否则false。 */ - public static boolean isValid(int value) { - return DICT_MAP.containsKey(value); + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); } /** diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/service/AreaCodeService.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/service/AreaCodeService.java index 3a2ebe6f..50642538 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/service/AreaCodeService.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/service/AreaCodeService.java @@ -16,7 +16,7 @@ import java.util.List; * 行政区划的Service类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Service public class AreaCodeService extends BaseDictService { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/service/TeacherService.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/service/TeacherService.java index ba6cc49b..2a2bbac1 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/service/TeacherService.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/service/TeacherService.java @@ -5,15 +5,15 @@ import com.orange.admin.app.model.*; import com.orange.admin.upms.model.*; import com.orange.admin.upms.service.SysUserService; 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.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 org.springframework.transaction.annotation.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import tk.mybatis.mapper.entity.Example; import java.util.*; @@ -21,10 +21,10 @@ import java.util.*; * 老师数据源数据操作服务类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Service -public class TeacherService extends BaseService { +public class TeacherService extends BaseBizService { @Autowired private TeacherMapper teacherMapper; @@ -51,7 +51,7 @@ public class TeacherService extends BaseService { * @param teacher 新增对象。 * @return 返回新增对象。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public Teacher saveNew(Teacher teacher) { teacher.setTeacherId(idGenerator.nextLongId()); teacher.setRegisterDate(new Date()); @@ -62,11 +62,11 @@ public class TeacherService extends BaseService { /** * 更新数据对象。 * - * @param teacher 更新的对象。 + * @param teacher 更新的对象。 * @param originalTeacher 原有数据对象。 * @return 成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean update(Teacher teacher, Teacher originalTeacher) { teacher.setRegisterDate(originalTeacher.getRegisterDate()); return teacherMapper.updateByPrimaryKey(teacher) == 1; @@ -78,25 +78,17 @@ public class TeacherService extends BaseService { * @param teacherId 主键Id。 * @return 成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean remove(Long teacherId) { - Teacher teacher = teacherMapper.selectByPrimaryKey(teacherId); - if (teacher == null) { - return false; - } - // 这里先删除主数据 - if (teacherMapper.deleteByPrimaryKey(teacherId) == 0) { - return false; - } + return teacherMapper.deleteByPrimaryKey(teacherId) != 0; // 这里可继续删除关联数据。 - return true; } /** * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 * 如果需要同时获取关联数据,请移步(getTeacherListWithRelation)方法。 * - * @param filter 过滤对象。 + * @param filter 过滤对象。 * @param orderBy 排序参数。 * @return 查询结果集。 */ @@ -117,7 +109,7 @@ public class TeacherService extends BaseService { List resultList = teacherMapper.getTeacherListEx(filter, sysDeptFilter, orderBy); Map> criteriaMap = buildAggregationAdditionalWhereCriteria(); - this.buildAllRelationForDataList(resultList, false, criteriaMap); + this.buildRelationForDataList(resultList, MyRelationParam.normal(), criteriaMap); return resultList; } @@ -128,24 +120,18 @@ public class TeacherService extends BaseService { * @param originalTeacher 原有数据对象。 * @return 数据全部正确返回true,否则false。 */ - public VerifyResult verifyRelatedData(Teacher teacher, Teacher originalTeacher) { - String errorMessage = null; - do { - //这里是基于字典的验证。 - if (this.needToVerify(teacher, originalTeacher, Teacher::getSchoolId)) { - if (!sysDeptService.existId(teacher.getSchoolId())) { - errorMessage = "数据验证失败,关联的所属校区并不存在,请刷新后重试!"; - break; - } - } - //这里是基于字典的验证。 - if (this.needToVerify(teacher, originalTeacher, Teacher::getUserId)) { - if (!sysUserService.existId(teacher.getUserId())) { - errorMessage = "数据验证失败,关联的绑定用户并不存在,请刷新后重试!"; - break; - } - } - } while (false); - return VerifyResult.create(errorMessage); + public CallResult verifyRelatedData(Teacher teacher, Teacher originalTeacher) { + String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!"; + //这里是基于字典的验证。 + if (this.needToVerify(teacher, originalTeacher, Teacher::getSchoolId) + && !sysDeptService.existId(teacher.getSchoolId())) { + return CallResult.error(String.format(errorMessageFormat, "所属校区")); + } + //这里是基于字典的验证。 + if (this.needToVerify(teacher, originalTeacher, Teacher::getUserId) + && !sysUserService.existId(teacher.getUserId())) { + return CallResult.error(String.format(errorMessageFormat, "绑定用户")); + } + return CallResult.ok(); } } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/app/service/TeacherTransStatsService.java b/orange-admin-service/application/src/main/java/com/orange/admin/app/service/TeacherTransStatsService.java index 9b97d29b..bc5ad93f 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/app/service/TeacherTransStatsService.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/app/service/TeacherTransStatsService.java @@ -3,9 +3,10 @@ package com.orange.admin.app.service; import com.orange.admin.app.dao.*; import com.orange.admin.app.model.*; 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.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.stereotype.Service; @@ -15,10 +16,10 @@ import java.util.*; * 老师流水统计数据操作服务类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Service -public class TeacherTransStatsService extends BaseService { +public class TeacherTransStatsService extends BaseBizService { @Autowired private TeacherTransStatsMapper teacherTransStatsMapper; @@ -43,7 +44,7 @@ public class TeacherTransStatsService extends BaseService getTeacherTransStatsListWithRelation(TeacherTransStats filter, String orderBy) { List resultList = teacherTransStatsMapper.getTeacherTransStatsList(filter, orderBy); Map> criteriaMap = buildAggregationAdditionalWhereCriteria(); - this.buildAllRelationForDataList(resultList, false, criteriaMap); + this.buildRelationForDataList(resultList, MyRelationParam.normal(), criteriaMap); return resultList; } @@ -81,7 +82,7 @@ public class TeacherTransStatsService extends BaseService 0) { for (String ip : credentialIpList) { corsConfiguration.addAllowedOrigin(ip); } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/config/InterceptorConfig.java b/orange-admin-service/application/src/main/java/com/orange/admin/config/InterceptorConfig.java index 3753886b..12fffe33 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/config/InterceptorConfig.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/config/InterceptorConfig.java @@ -16,10 +16,10 @@ import java.nio.charset.StandardCharsets; import java.util.List; /** - * 所有的项目拦截器都在这里集中配置 + * 所有的项目拦截器都在这里集中配置。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Configuration public class InterceptorConfig implements WebMvcConfigurer { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/interceptor/AuthenticationInterceptor.java b/orange-admin-service/application/src/main/java/com/orange/admin/interceptor/AuthenticationInterceptor.java index 4b7a4083..37abee99 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/interceptor/AuthenticationInterceptor.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/interceptor/AuthenticationInterceptor.java @@ -33,7 +33,7 @@ import java.util.stream.Collectors; * 登录用户Token验证、生成和权限验证的拦截器。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j public class AuthenticationInterceptor implements HandlerInterceptor { @@ -82,7 +82,7 @@ public class AuthenticationInterceptor implements HandlerInterceptor { return false; } 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); if (tokenData == null) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); @@ -91,17 +91,15 @@ public class AuthenticationInterceptor implements HandlerInterceptor { return false; } TokenData.addToRequest(tokenData); - if (!tokenData.getIsAdmin()) { - // 如果url在权限资源白名单中,则不需要进行鉴权操作 - if (!whitelistPermSet.contains(url)) { - Set urlSet = sysPermService.getCacheableSysPermSetByUserId( - tokenData.getSessionId(), tokenData.getUserId()); - if (!urlSet.contains(url)) { - response.setStatus(HttpServletResponse.SC_FORBIDDEN); - this.outputResponseMessage(response, - ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION)); - return false; - } + // 如果url在权限资源白名单中,则不需要进行鉴权操作 + if (!tokenData.getIsAdmin() && !whitelistPermSet.contains(url)) { + Set urlSet = sysPermService.getCacheableSysPermSetByUserId( + tokenData.getSessionId(), tokenData.getUserId()); + if (!urlSet.contains(url)) { + response.setStatus(HttpServletResponse.SC_FORBIDDEN); + this.outputResponseMessage(response, + ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION)); + return false; } } if (JwtUtil.needToRefresh(c)) { @@ -114,11 +112,13 @@ public class AuthenticationInterceptor implements HandlerInterceptor { @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + // 这里需要空注解,否则sonar会不happy。 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + // 这里需要空注解,否则sonar会不happy。 } private void outputResponseMessage(HttpServletResponse response, ResponseResult respObj) { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/interceptor/MybatisDataPermInterceptor.java b/orange-admin-service/application/src/main/java/com/orange/admin/interceptor/MybatisDataPermInterceptor.java index 8eb8ad08..f83aa69f 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/interceptor/MybatisDataPermInterceptor.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/interceptor/MybatisDataPermInterceptor.java @@ -1,24 +1,29 @@ package com.orange.admin.interceptor; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ReflectUtil; import com.orange.admin.common.core.constant.DataPermRuleType; import com.orange.admin.common.core.annotation.DeptFilterColumn; import com.orange.admin.common.core.annotation.UserFilterColumn; 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.TokenData; import com.orange.admin.common.core.util.ApplicationContextHolder; import com.orange.admin.common.core.util.ContextUtil; import com.orange.admin.common.core.util.MyModelUtil; import com.orange.admin.config.CacheConfig; +import com.orange.admin.upms.dao.SysDataPermMapper; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.expression.operators.conditional.AndExpression; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.statement.select.FromItem; import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.Select; import net.sf.jsqlparser.statement.select.SubSelect; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; 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.cache.Cache; import org.springframework.cache.CacheManager; -import org.springframework.dao.PermissionDeniedDataAccessException; import org.springframework.stereotype.Component; import tk.mybatis.mapper.common.Mapper; @@ -43,7 +47,7 @@ import java.util.*; * Mybatis拦截器。目前用于数据权限的统一拦截和注入处理。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Intercepts({@Signature(type = StatementHandler.class, method = "prepare", args = {Connection.class, Integer.class})}) @Slf4j @@ -56,7 +60,7 @@ public class MybatisDataPermInterceptor implements Interceptor { /** * 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是排序后的,因为在查找排除方法名称时效率更高。 * 在应用服务启动的监听器中(LoadDataPermMapperListener),会调用当前对象的(loadMappersWithDataPerm)方法,加载缓存。 @@ -67,6 +71,7 @@ public class MybatisDataPermInterceptor implements Interceptor { * 预先加载需要数据权限过滤的Mapper到缓存,该函数会在(LoadDataPermMapperListener)监听器中调用。 */ public void loadMappersWithDataPerm() { + @SuppressWarnings("all") Map mapperMap = ApplicationContextHolder.getApplicationContext().getBeansOfType(Mapper.class); for (Mapper mapperProxy : mapperMap.values()) { @@ -80,55 +85,59 @@ public class MybatisDataPermInterceptor implements Interceptor { (Class) ReflectUtil.getFieldValue(proxy, "mapperInterface"); EnableDataPerm rule = mapperClass.getAnnotation(EnableDataPerm.class); if (rule != null) { - // 由于给数据权限Mapper添加@EnableDataPerm,将会导致无限递归,因此这里检测到之后, - // 会在系统启动加载监听器的时候,及时抛出异常。 - if ("SysDataPermMapper".equals(mapperClass.getSimpleName())) { - throw new IllegalStateException("Add @EnableDataPerm annotation to SysDataPermMapper is ILLEGAL!"); - } - // 这里开始获取当前Mapper已经声明的的SqlId中,有哪些是需要排除在外的。 - // 排除在外的将不进行数据过滤。 - Set 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); + loadRules(mapperClass, rule); } } } + 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 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") @Override public Object intercept(Invocation invocation) throws Throwable { @@ -149,7 +158,7 @@ public class MybatisDataPermInterceptor implements Interceptor { SqlCommandType commandType = mappedStatement.getSqlCommandType(); TokenData tokenData = TokenData.takeFromRequest(); // 数据过滤权限中,只是过滤SELECT语句。如果是管理员则不参与数据权限的数据过滤,显示全部数据。 - if (commandType != SqlCommandType.SELECT || tokenData == null || tokenData.getIsAdmin()) { + if (commandType != SqlCommandType.SELECT || tokenData == null || Boolean.TRUE.equals(tokenData.getIsAdmin())) { return invocation.proceed(); } String sqlId = mappedStatement.getId(); @@ -158,107 +167,111 @@ public class MybatisDataPermInterceptor implements Interceptor { String methodName = StringUtils.substring(sqlId, pos + 1); // 先从缓存中查找当前Mapper是否存在。 ModelDataPermInfo info = cacheMap.get(className); - if (info != null) { - // 再次查找当前方法是否为排除方法,如果不是,就参与数据权限注入过滤。 - if (info.getExcludeMethodNameSet() == null - || !info.getExcludeMethodNameSet().contains(methodName)) { - String menuId = ContextUtil.getHttpRequest().getHeader(MENU_ID_HEADER_KEY); + // 再次查找当前方法是否为排除方法,如果不是,就参与数据权限注入过滤。 + if (info != null && !CollUtil.contains(info.getExcludeMethodNameSet(), methodName)) { + String menuId = ContextUtil.getHttpRequest().getHeader(MENU_ID_HEADER_KEY); + if (StringUtils.isBlank(menuId)) { + menuId = ContextUtil.getHttpRequest().getParameter(MENU_ID_HEADER_KEY); if (StringUtils.isBlank(menuId)) { - menuId = ContextUtil.getHttpRequest().getParameter(MENU_ID_HEADER_KEY); - if (StringUtils.isBlank(menuId)) { - throw new IllegalStateException( - "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> menuIdAndDataPermMap = - (Map>) cache.get(tokenData.getSessionId(), Map.class); - if (menuIdAndDataPermMap == null) { - throw new PermissionDeniedDataAccessException( - "No Related DataPerm found with SESSION_ID [ " + tokenData.getSessionId() + " ].", null); - } - Map 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 criteriaList = new LinkedList<>(); - for (Map.Entry 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> menuIdAndDataPermMap = + (Map>) cache.get(tokenData.getSessionId(), Map.class); + if (menuIdAndDataPermMap == null) { + throw new NoDataPermException( + "No Related DataPerm found with SESSION_ID [ " + tokenData.getSessionId() + " ]."); + } + Map 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(); } + private void processDataPerm(ModelDataPermInfo info, Map 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 criteriaList = new LinkedList<>(); + for (Map.Entry 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 public Object plugin(Object target) { return Plugin.wrap(target, this); @@ -266,7 +279,7 @@ public class MybatisDataPermInterceptor implements Interceptor { @Override public void setProperties(Properties properties) { - + // 这里需要空注解,否则sonar会不happy。 } @Data diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/listener/LoadDataPermMapperListener.java b/orange-admin-service/application/src/main/java/com/orange/admin/listener/LoadDataPermMapperListener.java index 91686225..6fe1811f 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/listener/LoadDataPermMapperListener.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/listener/LoadDataPermMapperListener.java @@ -11,7 +11,7 @@ import org.springframework.stereotype.Component; * 将标记有数据权限规则注解的Mapper对象,加载到缓存,以提升系统运行时效率。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Component public class LoadDataPermMapperListener implements ApplicationListener { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/LoginController.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/LoginController.java index 7e1fcba8..fbfb82e6 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/LoginController.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/LoginController.java @@ -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.util.JwtUtil; 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.web.bind.annotation.*; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.*; /** * 登录接口控制器类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @RestController @@ -59,58 +60,58 @@ public class LoginController { */ @NoAuthInterface @GetMapping("/doLogin") - public ResponseResult doLogin(@RequestParam String loginName, @RequestParam String password) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; + public ResponseResult doLogin( + @RequestParam String loginName, @RequestParam String password) throws Exception { + 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 claims = new HashMap<>(3); + String sessionId = MyCommonUtil.generateUuid(); + claims.put("sessionId", sessionId); + String token = JwtUtil.generateToken(claims, appConfig.getTokenSigningKey()); JSONObject jsonData = new JSONObject(); - do { - if (MyCommonUtil.existBlankArgument(loginName, password)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - SysUser user = sysUserService.getSysUserByLoginName(loginName); - if (user == null - || !user.getPassword().equals(MyCommonUtil.encrptedPassword(password, appConfig.getPasswordSalt()))) { - errorCodeEnum = ErrorCodeEnum.INVALID_USERNAME_PASSWORD; - break; - } - if (user.getUserStatus() == SysUserStatus.STATUS_LOCKED) { - errorCodeEnum = ErrorCodeEnum.INVALID_USER_STATUS; - errorMessage = "登录失败,用户账号被锁定!"; - break; - } - boolean isAdmin = user.getUserType() == SysUserType.TYPE_ADMIN; - Map claims = new HashMap<>(3); - String sessionId = MyCommonUtil.generateUuid(); - claims.put("sessionId", sessionId); - String token = JwtUtil.generateToken(claims, appConfig.getTokenSigningKey()); - jsonData.put(TokenData.REQUEST_ATTRIBUTE_NAME, token); - jsonData.put("showName", user.getShowName()); - jsonData.put("isAdmin", isAdmin); - TokenData tokenData = new TokenData(); - tokenData.setSessionId(sessionId); - 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 menuList; - if (isAdmin) { - menuList = sysMenuService.getAllMenuList(); - } else { - menuList = sysMenuService.getMenuListByUserId(user.getUserId()); - List 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); + jsonData.put(TokenData.REQUEST_ATTRIBUTE_NAME, token); + jsonData.put("showName", user.getShowName()); + jsonData.put("isAdmin", isAdmin); + TokenData tokenData = new TokenData(); + tokenData.setSessionId(sessionId); + tokenData.setUserId(user.getUserId()); + tokenData.setDeptId(user.getDeptId()); + tokenData.setShowName(user.getShowName()); + tokenData.setIsAdmin(isAdmin); + Cache sessionCache = cacheManager.getCache(CacheConfig.CacheEnum.GLOBAL_CACHE.name()); + sessionCache.put(sessionId, tokenData); + List menuList; + if (isAdmin) { + menuList = sysMenuService.getAllMenuList(); + } else { + menuList = sysMenuService.getMenuListByUserId(user.getUserId()); + List 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); + } + return ResponseResult.success(jsonData); } /** @@ -119,7 +120,7 @@ public class LoginController { * @return 应答结果对象。 */ @PostMapping("/doLogout") - public ResponseResult doLogout() { + public ResponseResult doLogout() { TokenData tokenData = TokenData.takeFromRequest(); sysPermService.removeUserSysPermCache(tokenData.getSessionId()); sysDataPermService.removeDataPermCache(tokenData.getSessionId()); diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysDataPermController.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysDataPermController.java index e50d8ba1..4ae52a0d 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysDataPermController.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysDataPermController.java @@ -1,7 +1,7 @@ package com.orange.admin.upms.controller; import com.alibaba.fastjson.JSONObject; -import com.github.pagehelper.PageHelper; +import com.github.pagehelper.page.PageMethod; import lombok.extern.slf4j.Slf4j; import com.orange.admin.upms.model.SysDataPermMenu; 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.common.core.validator.UpdateGroup; 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.MyPageParam; 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.MyPageUtil; import com.orange.admin.common.core.annotation.MyRequestBody; @@ -28,7 +29,7 @@ import java.util.stream.Collectors; * 数据权限接口控制器对象。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @RestController @@ -50,38 +51,31 @@ public class SysDataPermController { */ @SuppressWarnings("unchecked") @PostMapping("/add") - public ResponseResult add( + public ResponseResult add( @MyRequestBody SysDataPerm sysDataPerm, @MyRequestBody String deptIdListString, @MyRequestBody String menuIdListString) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - JSONObject responseData = null; - do { - if (MyCommonUtil.existBlankArgument(menuIdListString)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - errorMessage = MyCommonUtil.getModelValidationError(sysDataPerm); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - VerifyResult result = sysDataPermService.verifyRelatedData(sysDataPerm, deptIdListString, menuIdListString); - if (!result.isSuccess()) { - return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); - } - List dataPermMenuList = null; - Set deptIdSet = null; - if (result.getData() != null) { - dataPermMenuList = (List) result.getData().get("dataPermMenuList"); - deptIdSet = (Set) 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); + if (MyCommonUtil.existBlankArgument(menuIdListString)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + String errorMessage = MyCommonUtil.getModelValidationError(sysDataPerm); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + CallResult result = sysDataPermService.verifyRelatedData(sysDataPerm, deptIdListString, menuIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); + } + List dataPermMenuList = null; + Set deptIdSet = null; + if (result.getData() != null) { + dataPermMenuList = (List) result.getData().get("dataPermMenuList"); + deptIdSet = (Set) result.getData().get("deptIdSet"); + } + sysDataPermService.saveNew(sysDataPerm, deptIdSet, dataPermMenuList); + JSONObject responseData = new JSONObject(); + responseData.put("dataPermId", sysDataPerm.getDataPermId()); + return ResponseResult.success(responseData); } /** @@ -94,45 +88,37 @@ public class SysDataPermController { */ @SuppressWarnings("unchecked") @PostMapping("/update") - public ResponseResult update( + public ResponseResult update( @MyRequestBody SysDataPerm sysDataPerm, @MyRequestBody String deptIdListString, @MyRequestBody String menuIdListString) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(menuIdListString)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - errorMessage = MyCommonUtil.getModelValidationError(sysDataPerm, Default.class, UpdateGroup.class); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - SysDataPerm originalSysDataPerm = sysDataPermService.getById(sysDataPerm.getDataPermId()); - if (originalSysDataPerm == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据验证失败,当前数据权限并不存在,请刷新后重试!"; - break; - } - VerifyResult result = sysDataPermService.verifyRelatedData(sysDataPerm, deptIdListString, menuIdListString); - if (!result.isSuccess()) { - return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); - } - List dataPermMenuList = null; - Set deptIdSet = null; - if (result.getData() != null) { - dataPermMenuList = (List) result.getData().get("dataPermMenuList"); - deptIdSet = (Set) result.getData().get("deptIdSet"); - } - if (!sysDataPermService.update(sysDataPerm, originalSysDataPerm, deptIdSet, dataPermMenuList)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "更新失败,数据不存在,请刷新后重试!"; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + if (MyCommonUtil.existBlankArgument(menuIdListString)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + String errorMessage = MyCommonUtil.getModelValidationError(sysDataPerm, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + SysDataPerm originalSysDataPerm = sysDataPermService.getById(sysDataPerm.getDataPermId()); + if (originalSysDataPerm == null) { + errorMessage = "数据验证失败,当前数据权限并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + CallResult result = sysDataPermService.verifyRelatedData(sysDataPerm, deptIdListString, menuIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); + } + List dataPermMenuList = null; + Set deptIdSet = null; + if (result.getData() != null) { + dataPermMenuList = (List) result.getData().get("dataPermMenuList"); + deptIdSet = (Set) result.getData().get("deptIdSet"); + } + if (!sysDataPermService.update(sysDataPerm, originalSysDataPerm, deptIdSet, dataPermMenuList)) { + errorMessage = "更新失败,数据不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -142,21 +128,15 @@ public class SysDataPermController { * @return 应答数据结果。 */ @PostMapping("/delete") - public ResponseResult delete(@MyRequestBody Long dataPermId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(dataPermId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (!sysDataPermService.remove(dataPermId)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据操作失败,数据权限不存在,请刷新后重试!"; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult delete(@MyRequestBody Long dataPermId) { + if (MyCommonUtil.existBlankArgument(dataPermId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysDataPermService.remove(dataPermId)) { + String errorMessage = "数据操作失败,数据权限不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -168,12 +148,12 @@ public class SysDataPermController { * @return 应答结果对象。包含数据权限列表。 */ @PostMapping("/list") - public ResponseResult list( + public ResponseResult list( @MyRequestBody SysDataPerm sysDataPermFilter, @MyRequestBody MyOrderParam orderParam, @MyRequestBody MyPageParam pageParam) { if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); } String orderBy = MyOrderParam.buildOrderBy(orderParam, SysDataPerm.class); List resultList = sysDataPermService.getSysDataPermList(sysDataPermFilter, orderBy); @@ -188,21 +168,14 @@ public class SysDataPermController { */ @GetMapping("/view") public ResponseResult view(@RequestParam Long dataPermId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - SysDataPerm dataPerm = null; - do { - if (MyCommonUtil.existBlankArgument(dataPermId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - dataPerm = sysDataPermService.getSysDataPermWithRelation(dataPermId); - if (dataPerm == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, dataPerm); + if (MyCommonUtil.existBlankArgument(dataPermId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysDataPerm dataPerm = sysDataPermService.getByIdWithRelation(dataPermId, MyRelationParam.full()); + if (dataPerm == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(dataPerm); } /** @@ -216,32 +189,23 @@ public class SysDataPermController { * @return 应答结果对象,包含用户列表数据。 */ @PostMapping("/listNotInDataPermUser") - public ResponseResult listNotInDataPermUser( + public ResponseResult listNotInDataPermUser( @MyRequestBody Long dataPermId, @MyRequestBody SysUser sysUserFilter, @MyRequestBody MyOrderParam orderParam, @MyRequestBody MyPageParam pageParam) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - JSONObject responseData = null; - do { - if (MyCommonUtil.existBlankArgument(dataPermId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (!sysDataPermService.existId(dataPermId)) { - errorCodeEnum = ErrorCodeEnum.INVALID_RELATED_RECORD_ID; - break; - } - if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); - } - String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); - List resultList = - sysUserService.getNotInSysUserListByDataPermId(dataPermId, sysUserFilter, orderBy); - responseData = MyPageUtil.makeResponseData(resultList); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + ResponseResult verifyResult = this.doDataPermUserVerify(dataPermId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List resultList = + sysUserService.getNotInSysUserListByDataPermId(dataPermId, sysUserFilter, orderBy); + JSONObject responseData = MyPageUtil.makeResponseData(resultList); + return ResponseResult.success(responseData); } /** @@ -254,32 +218,33 @@ public class SysDataPermController { * @return 应答结果对象,包含用户列表数据。 */ @PostMapping("/listDataPermUser") - public ResponseResult listDataPermUser( + public ResponseResult listDataPermUser( @MyRequestBody Long dataPermId, @MyRequestBody SysUser sysUserFilter, @MyRequestBody MyOrderParam orderParam, @MyRequestBody MyPageParam pageParam) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - JSONObject responseData = null; - do { - if (MyCommonUtil.existBlankArgument(dataPermId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (!sysDataPermService.existId(dataPermId)) { - errorCodeEnum = ErrorCodeEnum.INVALID_RELATED_RECORD_ID; - break; - } - if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); - } - String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); - List resultList = - sysUserService.getSysUserListByDataPermId(dataPermId, sysUserFilter, orderBy); - responseData = MyPageUtil.makeResponseData(resultList); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + ResponseResult verifyResult = this.doDataPermUserVerify(dataPermId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List resultList = + sysUserService.getSysUserListByDataPermId(dataPermId, sysUserFilter, orderBy); + JSONObject responseData = MyPageUtil.makeResponseData(resultList); + return ResponseResult.success(responseData); + } + + private ResponseResult doDataPermUserVerify(Long dataPermId) { + if (MyCommonUtil.existBlankArgument(dataPermId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysDataPermService.existId(dataPermId)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + return ResponseResult.success(); } /** @@ -290,25 +255,19 @@ public class SysDataPermController { * @return 应答结果对象。 */ @PostMapping("/addDataPermUser") - public ResponseResult addDataPermUser( + public ResponseResult addDataPermUser( @MyRequestBody Long dataPermId, @MyRequestBody String userIdListString) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(dataPermId, userIdListString)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - Set userIdSet = - Arrays.stream(userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); - if (!sysDataPermService.existId(dataPermId) - || !sysUserService.existUniqueKeyList("userId", userIdSet)) { - errorCodeEnum = ErrorCodeEnum.INVALID_RELATED_RECORD_ID; - break; - } - sysDataPermService.addDataPermUserList(dataPermId, userIdSet); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + if (MyCommonUtil.existBlankArgument(dataPermId, userIdListString)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + Set userIdSet = + Arrays.stream(userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysDataPermService.existId(dataPermId) + || !sysUserService.existUniqueKeyList("userId", userIdSet)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + sysDataPermService.addDataPermUserList(dataPermId, userIdSet); + return ResponseResult.success(); } /** @@ -319,20 +278,14 @@ public class SysDataPermController { * @return 应答数据结果。 */ @PostMapping("/deleteDataPermUser") - public ResponseResult deleteDataPermUser( + public ResponseResult deleteDataPermUser( @MyRequestBody Long dataPermId, @MyRequestBody Long userId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(dataPermId, userId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (!sysDataPermService.removeDataPermUser(dataPermId, userId)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + if (MyCommonUtil.existBlankArgument(dataPermId, userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysDataPermService.removeDataPermUser(dataPermId, userId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); } } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysDeptController.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysDeptController.java index cb9095f2..0fdc9b38 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysDeptController.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysDeptController.java @@ -1,7 +1,7 @@ package com.orange.admin.upms.controller; 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.service.*; import com.orange.admin.common.core.object.*; @@ -21,7 +21,7 @@ import javax.validation.groups.Default; * 部门管理操作控制器类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @RestController @@ -38,21 +38,15 @@ public class SysDeptController { * @return 应答结果对象,包含新增对象主键Id。 */ @PostMapping("/add") - public ResponseResult add(@MyRequestBody SysDept sysDept) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - JSONObject responseData = null; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysDept); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - sysDept = sysDeptService.saveNew(sysDept); - responseData = new JSONObject(); - responseData.put("deptId", sysDept.getDeptId()); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + public ResponseResult add(@MyRequestBody SysDept sysDept) { + String errorMessage = MyCommonUtil.getModelValidationError(sysDept); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + sysDept = sysDeptService.saveNew(sysDept); + JSONObject responseData = new JSONObject(); + responseData.put("deptId", sysDept.getDeptId()); + return ResponseResult.success(responseData); } /** @@ -62,29 +56,22 @@ public class SysDeptController { * @return 应答结果对象。 */ @PostMapping("/update") - public ResponseResult update(@MyRequestBody SysDept sysDept) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysDept, Default.class, UpdateGroup.class); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - // 验证关联Id的数据合法性 - SysDept originalSysDept = sysDeptService.getById(sysDept.getDeptId()); - if (originalSysDept == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - //TODO 修改下面方括号中的话述 - errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!"; - break; - } - if (!sysDeptService.update(sysDept, originalSysDept)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult update(@MyRequestBody SysDept sysDept) { + String errorMessage = MyCommonUtil.getModelValidationError(sysDept, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + // 验证关联Id的数据合法性 + SysDept originalSysDept = sysDeptService.getById(sysDept.getDeptId()); + if (originalSysDept == null) { + //NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!sysDeptService.update(sysDept, originalSysDept)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); } /** @@ -94,29 +81,23 @@ public class SysDeptController { * @return 应答结果对象。 */ @PostMapping("/delete") - public ResponseResult delete(@MyRequestBody Long deptId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(deptId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - // 验证关联Id的数据合法性 - SysDept originalSysDept = sysDeptService.getById(deptId); - if (originalSysDept == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - //TODO 修改下面方括号中的话述 - errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; - break; - } - if (!sysDeptService.remove(deptId)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult delete(@MyRequestBody Long deptId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(deptId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + SysDept originalSysDept = sysDeptService.getById(deptId); + if (originalSysDept == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!sysDeptService.remove(deptId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -128,12 +109,12 @@ public class SysDeptController { * @return 应答结果对象,包含查询结果集。 */ @PostMapping("/list") - public ResponseResult list( + public ResponseResult list( @MyRequestBody SysDept sysDeptFilter, @MyRequestBody MyOrderParam orderParam, @MyRequestBody MyPageParam pageParam) { if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); } String orderBy = MyOrderParam.buildOrderBy(orderParam, SysDept.class); List resultList = sysDeptService.getSysDeptListWithRelation(sysDeptFilter, orderBy); @@ -148,21 +129,14 @@ public class SysDeptController { */ @GetMapping("/view") public ResponseResult view(@RequestParam Long deptId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - SysDept sysDept = null; - do { - if (MyCommonUtil.existBlankArgument(deptId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - sysDept = sysDeptService.getByIdWithRelation(deptId); - if (sysDept == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, sysDept); + if (MyCommonUtil.existBlankArgument(deptId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysDept sysDept = sysDeptService.getByIdWithRelation(deptId, MyRelationParam.full()); + if (sysDept == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(sysDept); } /** @@ -173,8 +147,8 @@ public class SysDeptController { * @return 应答结果对象,包含的数据为 List>,map中包含两条记录,key的值分别是id和name,value对应具体数据。 */ @GetMapping("/listDictSysDept") - public ResponseResult listDictSysDept(SysDept filter) { - List resultList = sysDeptService.getListByFilter(filter); + public ResponseResult>> listDictSysDept(SysDept filter) { + List resultList = sysDeptService.getListByFilter(filter, null); return ResponseResult.success(BeanQuery.select( "deptId as id", "deptName as name").executeFrom(resultList)); } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysMenuController.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysMenuController.java index d4d5fbdf..a1435802 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysMenuController.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysMenuController.java @@ -6,8 +6,9 @@ import com.orange.admin.upms.model.SysMenu; import com.orange.admin.upms.service.SysMenuService; import com.orange.admin.upms.service.SysPermCodeService; 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.MyRelationParam; import com.orange.admin.common.core.util.MyCommonUtil; import com.orange.admin.common.core.validator.UpdateGroup; import com.orange.admin.common.core.annotation.MyRequestBody; @@ -21,7 +22,7 @@ import java.util.*; * 菜单管理接口控制器类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @RestController @@ -42,29 +43,23 @@ public class SysMenuController { */ @SuppressWarnings("unchecked") @PostMapping("/add") - public ResponseResult add(@MyRequestBody SysMenu sysMenu, @MyRequestBody String permCodeIdListString) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - JSONObject responseData = null; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysMenu); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - VerifyResult result = sysMenuService.verifyRelatedData(sysMenu, null, permCodeIdListString); - if (!result.isSuccess()) { - return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); - } - Set permCodeIdSet = null; - if (result.getData() != null) { - permCodeIdSet = (Set) result.getData().get("permCodeIdSet"); - } - sysMenuService.saveNew(sysMenu, permCodeIdSet); - responseData = new JSONObject(); - responseData.put("sysMenuId", sysMenu.getMenuId()); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + public ResponseResult add(@MyRequestBody SysMenu sysMenu, @MyRequestBody String permCodeIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysMenu); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + CallResult result = sysMenuService.verifyRelatedData(sysMenu, null, permCodeIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); + } + Set permCodeIdSet = null; + if (result.getData() != null) { + permCodeIdSet = (Set) result.getData().get("permCodeIdSet"); + } + sysMenuService.saveNew(sysMenu, permCodeIdSet); + JSONObject responseData = new JSONObject(); + responseData.put("sysMenuId", sysMenu.getMenuId()); + return ResponseResult.success(responseData); } /** @@ -76,35 +71,29 @@ public class SysMenuController { */ @SuppressWarnings("unchecked") @PostMapping("/update") - public ResponseResult update(@MyRequestBody SysMenu sysMenu, @MyRequestBody String permCodeIdListString) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysMenu, Default.class, UpdateGroup.class); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - SysMenu originalSysMenu = sysMenuService.getById(sysMenu.getMenuId()); - if (originalSysMenu == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据验证失败,当前菜单并不存在,请刷新后重试!"; - break; - } - VerifyResult result = sysMenuService.verifyRelatedData(sysMenu, originalSysMenu, permCodeIdListString); - if (!result.isSuccess()) { - return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); - } - Set permCodeIdSet = null; - if (result.getData() != null) { - permCodeIdSet = (Set) result.getData().get("permCodeIdSet"); - } - if (!sysMenuService.update(sysMenu, originalSysMenu, permCodeIdSet)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!"; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult update(@MyRequestBody SysMenu sysMenu, @MyRequestBody String permCodeIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysMenu, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + SysMenu originalSysMenu = sysMenuService.getById(sysMenu.getMenuId()); + if (originalSysMenu == null) { + errorMessage = "数据验证失败,当前菜单并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + CallResult result = sysMenuService.verifyRelatedData(sysMenu, originalSysMenu, permCodeIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); + } + Set permCodeIdSet = null; + if (result.getData() != null) { + permCodeIdSet = (Set) result.getData().get("permCodeIdSet"); + } + if (!sysMenuService.update(sysMenu, originalSysMenu, permCodeIdSet)) { + errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -114,26 +103,20 @@ public class SysMenuController { * @return 应答结果对象。 */ @PostMapping("/delete") - public ResponseResult delete(@MyRequestBody Long menuId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(menuId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (sysMenuService.hasChildren(menuId)) { - errorCodeEnum = ErrorCodeEnum.HAS_CHILDREN_DATA; - errorMessage = "数据验证失败,当前菜单存在下级菜单!"; - break; - } - if (!sysMenuService.remove(menuId)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据操作失败,菜单不存在,请刷新后重试!"; - } - - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult delete(@MyRequestBody Long menuId) { + if (MyCommonUtil.existBlankArgument(menuId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + String errorMessage; + if (sysMenuService.hasChildren(menuId)) { + errorMessage = "数据验证失败,当前菜单存在下级菜单!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (!sysMenuService.remove(menuId)) { + errorMessage = "数据操作失败,菜单不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -154,21 +137,14 @@ public class SysMenuController { */ @GetMapping("/view") public ResponseResult view(@RequestParam Long menuId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - SysMenu sysMenu = null; - do { - if (MyCommonUtil.existBlankArgument(menuId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - sysMenu = sysMenuService.getSysMenuWithRelation(menuId); - if (sysMenu == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, sysMenu); + if (MyCommonUtil.existBlankArgument(menuId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysMenu sysMenu = sysMenuService.getByIdWithRelation(menuId, MyRelationParam.full()); + if (sysMenu == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(sysMenu); } /** diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysPermCodeController.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysPermCodeController.java index 96c79e57..f837755b 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysPermCodeController.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysPermCodeController.java @@ -1,14 +1,15 @@ package com.orange.admin.upms.controller; import com.alibaba.fastjson.JSONObject; -import com.github.pagehelper.PageHelper; +import com.github.pagehelper.page.PageMethod; import lombok.extern.slf4j.Slf4j; import com.orange.admin.upms.model.SysPermCode; import com.orange.admin.upms.service.SysPermCodeService; import com.orange.admin.common.core.constant.ErrorCodeEnum; 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.MyRelationParam; import com.orange.admin.common.core.util.MyCommonUtil; import com.orange.admin.common.core.util.MyPageUtil; import com.orange.admin.common.core.validator.UpdateGroup; @@ -24,7 +25,7 @@ import java.util.*; * 权限字管理接口控制器类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @RestController @@ -43,29 +44,23 @@ public class SysPermCodeController { */ @SuppressWarnings("unchecked") @PostMapping("/add") - public ResponseResult add(@MyRequestBody SysPermCode sysPermCode, @MyRequestBody String permIdListString) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - JSONObject responseData = null; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysPermCode); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - VerifyResult result = sysPermCodeService.verifyRelatedData(sysPermCode, null, permIdListString); - if (!result.isSuccess()) { - return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); - } - Set permIdSet = null; - if (result.getData() != null) { - permIdSet = (Set) result.getData().get("permIdSet"); - } - sysPermCode = sysPermCodeService.saveNew(sysPermCode, permIdSet); - responseData = new JSONObject(); - responseData.put("sysPermCodeId", sysPermCode.getPermCodeId()); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + public ResponseResult add(@MyRequestBody SysPermCode sysPermCode, @MyRequestBody String permIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermCode); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED); + } + CallResult result = sysPermCodeService.verifyRelatedData(sysPermCode, null, permIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); + } + Set permIdSet = null; + if (result.getData() != null) { + permIdSet = (Set) result.getData().get("permIdSet"); + } + sysPermCode = sysPermCodeService.saveNew(sysPermCode, permIdSet); + JSONObject responseData = new JSONObject(); + responseData.put("sysPermCodeId", sysPermCode.getPermCodeId()); + return ResponseResult.success(responseData); } /** @@ -77,40 +72,34 @@ public class SysPermCodeController { */ @SuppressWarnings("unchecked") @PostMapping("/update") - public ResponseResult update(@MyRequestBody SysPermCode sysPermCode, @MyRequestBody String permIdListString) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysPermCode, Default.class, UpdateGroup.class); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - SysPermCode originalSysPermCode = sysPermCodeService.getById(sysPermCode.getPermCodeId()); - if (originalSysPermCode == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; + public ResponseResult update(@MyRequestBody SysPermCode sysPermCode, @MyRequestBody String permIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermCode, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + SysPermCode originalSysPermCode = sysPermCodeService.getById(sysPermCode.getPermCodeId()); + if (originalSysPermCode == null) { + errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + CallResult result = sysPermCodeService.verifyRelatedData(sysPermCode, originalSysPermCode, permIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); + } + Set permIdSet = null; + if (result.getData() != null) { + permIdSet = (Set) result.getData().get("permIdSet"); + } + try { + if (!sysPermCodeService.update(sysPermCode, originalSysPermCode, permIdSet)) { errorMessage = "数据验证失败,当前权限字并不存在,请刷新后重试!"; - break; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); } - VerifyResult result = sysPermCodeService.verifyRelatedData(sysPermCode, originalSysPermCode, permIdListString); - if (!result.isSuccess()) { - return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); - } - Set permIdSet = null; - if (result.getData() != null) { - permIdSet = (Set) 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); + } catch (DuplicateKeyException e) { + errorMessage = "数据操作失败,权限字编码已经存在!"; + return ResponseResult.error(ErrorCodeEnum.DUPLICATED_UNIQUE_KEY, errorMessage); + } + return ResponseResult.success(); } /** @@ -120,25 +109,20 @@ public class SysPermCodeController { * @return 应答结果对象。 */ @PostMapping("/delete") - public ResponseResult delete(@MyRequestBody Long permCodeId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(permCodeId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (sysPermCodeService.hasChildren(permCodeId)) { - errorCodeEnum = ErrorCodeEnum.HAS_CHILDREN_DATA; - errorMessage = "数据验证失败,当前权限字存在下级权限字!"; - break; - } - if (!sysPermCodeService.remove(permCodeId)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据操作失败,权限字不存在,请刷新后重试!"; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult delete(@MyRequestBody Long permCodeId) { + if (MyCommonUtil.existBlankArgument(permCodeId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + String errorMessage; + if (sysPermCodeService.hasChildren(permCodeId)) { + errorMessage = "数据验证失败,当前权限字存在下级权限字!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (!sysPermCodeService.remove(permCodeId)) { + errorMessage = "数据操作失败,权限字不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -147,7 +131,7 @@ public class SysPermCodeController { * @return 应答结果对象,包含权限字列表。 */ @PostMapping("/list") - public ResponseResult list() { + public ResponseResult> list() { return ResponseResult.success(sysPermCodeService.getAllListByOrder("permCodeType", "showOrder")); } @@ -159,21 +143,14 @@ public class SysPermCodeController { */ @GetMapping("/view") public ResponseResult view(@RequestParam Long permCodeId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - SysPermCode sysPermCode = null; - do { - if (MyCommonUtil.existBlankArgument(permCodeId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - sysPermCode = sysPermCodeService.getSysPermCodeWithRelation(permCodeId); - if (sysPermCode == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, sysPermCode); + if (MyCommonUtil.existBlankArgument(permCodeId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysPermCode sysPermCode = sysPermCodeService.getByIdWithRelation(permCodeId, MyRelationParam.full()); + if (sysPermCode == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(sysPermCode); } /** @@ -185,25 +162,19 @@ public class SysPermCodeController { * @return 应答结果对象,包含该用户的全部权限资源列表。 */ @PostMapping("/listAllPermCodesByUserFilter") - public ResponseResult listAllPermCodesByUserFilter( + public ResponseResult listAllPermCodesByUserFilter( @MyRequestBody String loginName, @MyRequestBody String permCode, @MyRequestBody MyPageParam pageParam) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - JSONObject responseData = null; - do { - if (MyCommonUtil.existBlankArgument(loginName)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); - } - List permCodeList = - sysPermCodeService.getUserPermCodeListByFilter(loginName, permCode); - responseData = MyPageUtil.makeResponseData(permCodeList); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + if (MyCommonUtil.existBlankArgument(loginName)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + List permCodeList = + sysPermCodeService.getUserPermCodeListByFilter(loginName, permCode); + JSONObject responseData = MyPageUtil.makeResponseData(permCodeList); + return ResponseResult.success(responseData); } } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysPermController.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysPermController.java index 802ce657..00998a94 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysPermController.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysPermController.java @@ -1,14 +1,14 @@ package com.orange.admin.upms.controller; import com.alibaba.fastjson.JSONObject; -import com.github.pagehelper.PageHelper; +import com.github.pagehelper.page.PageMethod; import lombok.extern.slf4j.Slf4j; import com.orange.admin.upms.model.SysPerm; import com.orange.admin.upms.model.SysPermModule; import com.orange.admin.upms.service.SysPermService; import com.orange.admin.common.core.constant.ErrorCodeEnum; 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.util.MyCommonUtil; import com.orange.admin.common.core.util.MyPageUtil; @@ -25,7 +25,7 @@ import java.util.Map; * 权限资源管理接口控制器类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @RestController @@ -42,25 +42,19 @@ public class SysPermController { * @return 应答结果对象,包含新增权限资源的主键Id。 */ @PostMapping("/add") - public ResponseResult add(@MyRequestBody SysPerm sysPerm) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - JSONObject responseData = null; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysPerm); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - VerifyResult result = sysPermService.verifyRelatedData(sysPerm, null); - if (!result.isSuccess()) { - return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); - } - sysPerm = sysPermService.saveNew(sysPerm); - responseData = new JSONObject(); - responseData.put("permId", sysPerm.getPermId()); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + public ResponseResult add(@MyRequestBody SysPerm sysPerm) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPerm); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + CallResult result = sysPermService.verifyRelatedData(sysPerm, null); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); + } + sysPerm = sysPermService.saveNew(sysPerm); + JSONObject responseData = new JSONObject(); + responseData.put("permId", sysPerm.getPermId()); + return ResponseResult.success(responseData); } /** @@ -70,32 +64,26 @@ public class SysPermController { * @return 应答结果对象,包含更新权限资源的主键Id。 */ @PostMapping("/update") - public ResponseResult update(@MyRequestBody SysPerm sysPerm) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysPerm, Default.class, UpdateGroup.class); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - SysPerm originalPerm = sysPermService.getById(sysPerm.getPermId()); - if (originalPerm == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据验证失败,当前权限资源并不存在,请刷新后重试!"; - break; - } - VerifyResult result = sysPermService.verifyRelatedData(sysPerm, originalPerm); - if (!result.isSuccess()) { - return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); - } - if (result.getData() != null) { - SysPermModule permModule = (SysPermModule) result.getData().get("permModule"); - sysPerm.setModuleId(permModule.getModuleId()); - } - sysPermService.update(sysPerm, originalPerm); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult update(@MyRequestBody SysPerm sysPerm) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPerm, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + SysPerm originalPerm = sysPermService.getById(sysPerm.getPermId()); + if (originalPerm == null) { + errorMessage = "数据验证失败,当前权限资源并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + CallResult result = sysPermService.verifyRelatedData(sysPerm, originalPerm); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); + } + if (result.getData() != null) { + SysPermModule permModule = (SysPermModule) result.getData().get("permModule"); + sysPerm.setModuleId(permModule.getModuleId()); + } + sysPermService.update(sysPerm, originalPerm); + return ResponseResult.success(); } /** @@ -105,21 +93,15 @@ public class SysPermController { * @return 应答结果对象。 */ @PostMapping("/delete") - public ResponseResult delete(@MyRequestBody Long permId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(permId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (!sysPermService.remove(permId)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据操作失败,权限不存在,请刷新后重试!"; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult delete(@MyRequestBody Long permId) { + if (MyCommonUtil.existBlankArgument(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysPermService.remove(permId)) { + String errorMessage = "数据操作失败,权限不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -130,21 +112,14 @@ public class SysPermController { */ @GetMapping("/view") public ResponseResult view(@RequestParam Long permId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - SysPerm perm = null; - do { - if (MyCommonUtil.existBlankArgument(permId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - perm = sysPermService.getById(permId); - if (perm == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, perm); + if (MyCommonUtil.existBlankArgument(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysPerm perm = sysPermService.getById(permId); + if (perm == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(perm); } /** @@ -155,9 +130,9 @@ public class SysPermController { * @return 应答结果对象,包含权限资源列表。 */ @PostMapping("/list") - public ResponseResult list(@MyRequestBody SysPerm sysPermFilter, @MyRequestBody MyPageParam pageParam) { + public ResponseResult list(@MyRequestBody SysPerm sysPermFilter, @MyRequestBody MyPageParam pageParam) { if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); } List resultList = sysPermService.getPermListWithRelation(sysPermFilter); return ResponseResult.success(MyPageUtil.makeResponseData(resultList)); @@ -173,27 +148,21 @@ public class SysPermController { * @return 应答结果对象,包含该用户的全部权限资源列表。 */ @PostMapping("/listAllPermsByUserFilter") - public ResponseResult listAllPermsByUserFilter( + public ResponseResult listAllPermsByUserFilter( @MyRequestBody String loginName, @MyRequestBody Long moduleId, @MyRequestBody String url, @MyRequestBody MyPageParam pageParam) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - JSONObject responseData = null; - do { - if (MyCommonUtil.existBlankArgument(loginName)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); - } - List> userPermMapList = - sysPermService.getUserPermListByFilter(loginName, moduleId, url); - responseData = MyPageUtil.makeResponseData(userPermMapList); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + if (MyCommonUtil.existBlankArgument(loginName)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + List> userPermMapList = + sysPermService.getUserPermListByFilter(loginName, moduleId, url); + JSONObject responseData = MyPageUtil.makeResponseData(userPermMapList); + return ResponseResult.success(responseData); } /** @@ -203,18 +172,12 @@ public class SysPermController { * @return 应答结果对象,包含用户数据列表。 */ @PostMapping("/listAllUsers") - public ResponseResult listAllUsers(@MyRequestBody Long permId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - List> permUserMapList = null; - do { - if (MyCommonUtil.existBlankArgument(permId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - permUserMapList = sysPermService.getPermUserListById(permId); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, permUserMapList); + public ResponseResult>> listAllUsers(@MyRequestBody Long permId) { + if (MyCommonUtil.existBlankArgument(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + List> permUserMapList = sysPermService.getPermUserListById(permId); + return ResponseResult.success(permUserMapList); } /** @@ -224,17 +187,11 @@ public class SysPermController { * @return 应答结果对象,包含角色数据列表。 */ @PostMapping("/listAllRoles") - public ResponseResult listAllRoles(@MyRequestBody Long permId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - List> permRoleMapList = null; - do { - if (MyCommonUtil.existBlankArgument(permId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - permRoleMapList = sysPermService.getPermRoleListById(permId); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, permRoleMapList); + public ResponseResult>> listAllRoles(@MyRequestBody Long permId) { + if (MyCommonUtil.existBlankArgument(permId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + List> permRoleMapList = sysPermService.getPermRoleListById(permId); + return ResponseResult.success(permRoleMapList); } } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysPermModuleController.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysPermModuleController.java index f257d109..be5475be 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysPermModuleController.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysPermModuleController.java @@ -24,7 +24,7 @@ import java.util.Map; * 权限资源模块管理接口控制器类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @RestController @@ -41,28 +41,20 @@ public class SysPermModuleController { * @return 应答结果对象,包含新增权限资源模块的主键Id。 */ @PostMapping("/add") - public ResponseResult add(@MyRequestBody SysPermModule sysPermModule) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - JSONObject responseData = null; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysPermModule); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - if (sysPermModule.getParentId() != null) { - if (sysPermModuleService.getById(sysPermModule.getParentId()) == null) { - errorCodeEnum = ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST; - errorMessage = "数据验证失败,关联的上级权限模块并不存在,请刷新后重试!"; - break; - } - } - sysPermModuleService.saveNew(sysPermModule); - responseData = new JSONObject(); - responseData.put("permModuleId", sysPermModule.getModuleId()); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + public ResponseResult add(@MyRequestBody SysPermModule sysPermModule) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermModule); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + if (sysPermModule.getParentId() != null + && sysPermModuleService.getById(sysPermModule.getParentId()) == null) { + errorMessage = "数据验证失败,关联的上级权限模块并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_PARENT_ID_NOT_EXIST, errorMessage); + } + sysPermModuleService.saveNew(sysPermModule); + JSONObject responseData = new JSONObject(); + responseData.put("permModuleId", sysPermModule.getModuleId()); + return ResponseResult.success(responseData); } /** @@ -72,34 +64,27 @@ public class SysPermModuleController { * @return 应答结果对象,包含新增权限资源模块的主键Id。 */ @PostMapping("/update") - public ResponseResult update(@MyRequestBody SysPermModule sysPermModule) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysPermModule, Default.class, UpdateGroup.class); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; + public ResponseResult update(@MyRequestBody SysPermModule sysPermModule) { + String errorMessage = MyCommonUtil.getModelValidationError(sysPermModule, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + SysPermModule originalPermModule = sysPermModuleService.getById(sysPermModule.getModuleId()); + if (originalPermModule == null) { + 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) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - if (sysPermModule.getParentId() != null - && !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); + } + if (!sysPermModuleService.update(sysPermModule, originalPermModule)) { + errorMessage = "数据验证失败,当前模块并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -109,26 +94,21 @@ public class SysPermModuleController { * @return 应答结果对象。 */ @PostMapping("/delete") - public ResponseResult delete(@MyRequestBody Long moduleId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(moduleId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (sysPermModuleService.hasChildren(moduleId) - || sysPermModuleService.hasModulePerms(moduleId)) { - errorCodeEnum = ErrorCodeEnum.HAS_CHILDREN_DATA; - errorMessage = "数据验证失败,当前权限模块存在子模块或权限资源,请先删除关联数据!"; - break; - } - if (!sysPermModuleService.remove(moduleId)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据操作失败,权限模块不存在,请刷新后重试!"; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult delete(@MyRequestBody Long moduleId) { + if (MyCommonUtil.existBlankArgument(moduleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + String errorMessage; + if (sysPermModuleService.hasChildren(moduleId) + || sysPermModuleService.hasModulePerms(moduleId)) { + errorMessage = "数据验证失败,当前权限模块存在子模块或权限资源,请先删除关联数据!"; + return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage); + } + if (!sysPermModuleService.remove(moduleId)) { + errorMessage = "数据操作失败,权限模块不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -147,7 +127,7 @@ public class SysPermModuleController { * @return 应答结果对象,包含树状列表,结构为权限资源模块和权限资源之间的树状关系。 */ @GetMapping("/listAll") - public ResponseResult listAll() { + public ResponseResult>> listAll() { List sysPermModuleList = sysPermModuleService.getPermModuleAndPermList(); List> resultList = new LinkedList<>(); for (SysPermModule sysPermModule : sysPermModuleList) { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysRoleController.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysRoleController.java index 0667f1ee..be3ec6ef 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysRoleController.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysRoleController.java @@ -1,7 +1,7 @@ package com.orange.admin.upms.controller; import com.alibaba.fastjson.JSONObject; -import com.github.pagehelper.PageHelper; +import com.github.pagehelper.page.PageMethod; import lombok.extern.slf4j.Slf4j; import com.orange.admin.upms.model.SysRole; 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.MyPageParam; 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.annotation.MyRequestBody; import org.springframework.beans.factory.annotation.Autowired; @@ -28,7 +29,7 @@ import java.util.stream.Collectors; * 角色管理接口控制器类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @RestController @@ -49,29 +50,23 @@ public class SysRoleController { */ @SuppressWarnings("unchecked") @PostMapping("/add") - public ResponseResult add(@MyRequestBody SysRole sysRole, @MyRequestBody String menuIdListString) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - JSONObject responseData = null; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysRole); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - VerifyResult result = sysRoleService.verifyRelatedData(sysRole, null, menuIdListString); - if (!result.isSuccess()) { - return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); - } - Set menuIdSet = null; - if (result.getData() != null) { - menuIdSet = (Set) result.getData().get("menuIdSet"); - } - sysRoleService.saveNew(sysRole, menuIdSet); - responseData = new JSONObject(); - responseData.put("roleId", sysRole.getRoleId()); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + public ResponseResult add(@MyRequestBody SysRole sysRole, @MyRequestBody String menuIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysRole); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + CallResult result = sysRoleService.verifyRelatedData(sysRole, null, menuIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); + } + Set menuIdSet = null; + if (result.getData() != null) { + menuIdSet = (Set) result.getData().get("menuIdSet"); + } + sysRoleService.saveNew(sysRole, menuIdSet); + JSONObject responseData = new JSONObject(); + responseData.put("roleId", sysRole.getRoleId()); + return ResponseResult.success(responseData); } /** @@ -83,36 +78,29 @@ public class SysRoleController { */ @SuppressWarnings("unchecked") @PostMapping("/update") - public ResponseResult update(@MyRequestBody SysRole sysRole, @MyRequestBody String menuIdListString) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysRole, Default.class, UpdateGroup.class); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - SysRole originalSysRole = sysRoleService.getById(sysRole.getRoleId()); - if (originalSysRole == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据验证失败,当前角色并不存在,请刷新后重试!"; - break; - } - VerifyResult result = sysRoleService.verifyRelatedData(sysRole, originalSysRole, menuIdListString); - if (!result.isSuccess()) { - return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); - } - Set menuIdSet = null; - if (result.getData() != null) { - menuIdSet = (Set) result.getData().get("menuIdSet"); - } - if (!sysRoleService.update(sysRole, originalSysRole, menuIdSet)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "更新失败,数据不存在,请刷新后重试!"; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult update(@MyRequestBody SysRole sysRole, @MyRequestBody String menuIdListString) { + String errorMessage = MyCommonUtil.getModelValidationError(sysRole, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + SysRole originalSysRole = sysRoleService.getById(sysRole.getRoleId()); + if (originalSysRole == null) { + errorMessage = "数据验证失败,当前角色并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + CallResult result = sysRoleService.verifyRelatedData(sysRole, originalSysRole, menuIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); + } + Set menuIdSet = null; + if (result.getData() != null) { + menuIdSet = (Set) result.getData().get("menuIdSet"); + } + if (!sysRoleService.update(sysRole, originalSysRole, menuIdSet)) { + errorMessage = "更新失败,数据不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -122,21 +110,15 @@ public class SysRoleController { * @return 应答结果对象。 */ @PostMapping("/delete") - public ResponseResult delete(@MyRequestBody Long roleId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(roleId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (!sysRoleService.remove(roleId)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据操作失败,角色不存在,请刷新后重试!"; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult delete(@MyRequestBody Long roleId) { + if (MyCommonUtil.existBlankArgument(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysRoleService.remove(roleId)) { + String errorMessage = "数据操作失败,角色不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -148,12 +130,12 @@ public class SysRoleController { * @return 应答结果对象,包含角色列表。 */ @PostMapping("/list") - public ResponseResult list( + public ResponseResult list( @MyRequestBody SysRole sysRoleFilter, @MyRequestBody MyOrderParam orderParam, @MyRequestBody MyPageParam pageParam) { if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); } List roleList = sysRoleService.getSysRoleList( sysRoleFilter, MyOrderParam.buildOrderBy(orderParam, SysRole.class)); @@ -168,21 +150,14 @@ public class SysRoleController { */ @GetMapping("/view") public ResponseResult view(@RequestParam Long roleId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - SysRole sysRole = null; - do { - if (MyCommonUtil.existBlankArgument(roleId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - sysRole = sysRoleService.getSysRoleWithRelation(roleId); - if (sysRole == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, sysRole); + if (MyCommonUtil.existBlankArgument(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + SysRole sysRole = sysRoleService.getByIdWithRelation(roleId, MyRelationParam.full()); + if (sysRole == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(sysRole); } /** @@ -196,32 +171,23 @@ public class SysRoleController { * @return 应答结果对象,包含用户列表数据。 */ @PostMapping("/listNotInUserRole") - public ResponseResult listNotInUserRole( + public ResponseResult listNotInUserRole( @MyRequestBody Long roleId, @MyRequestBody SysUser sysUserFilter, @MyRequestBody MyOrderParam orderParam, @MyRequestBody MyPageParam pageParam) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - JSONObject responseData = null; - do { - if (MyCommonUtil.existBlankArgument(roleId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (!sysRoleService.existId(roleId)) { - errorCodeEnum = ErrorCodeEnum.INVALID_RELATED_RECORD_ID; - break; - } - if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); - } - String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); - List resultList = - sysUserService.getNotInSysUserListByRoleId(roleId, sysUserFilter, orderBy); - responseData = MyPageUtil.makeResponseData(resultList); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + ResponseResult verifyResult = this.doRoleUserVerify(roleId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List resultList = + sysUserService.getNotInSysUserListByRoleId(roleId, sysUserFilter, orderBy); + JSONObject responseData = MyPageUtil.makeResponseData(resultList); + return ResponseResult.success(responseData); } /** @@ -234,31 +200,32 @@ public class SysRoleController { * @return 应答结果对象,包含用户列表数据。 */ @PostMapping("/listUserRole") - public ResponseResult listUserRole( + public ResponseResult listUserRole( @MyRequestBody Long roleId, @MyRequestBody SysUser sysUserFilter, @MyRequestBody MyOrderParam orderParam, @MyRequestBody MyPageParam pageParam) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - JSONObject responseData = null; - do { - if (MyCommonUtil.existBlankArgument(roleId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (!sysRoleService.existId(roleId)) { - errorCodeEnum = ErrorCodeEnum.INVALID_RELATED_RECORD_ID; - break; - } - if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); - } - String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); - List resultList = sysUserService.getSysUserListByRoleId(roleId, sysUserFilter, orderBy); - responseData = MyPageUtil.makeResponseData(resultList); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + ResponseResult verifyResult = this.doRoleUserVerify(roleId); + if (!verifyResult.isSuccess()) { + return ResponseResult.errorFrom(verifyResult); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); + List resultList = sysUserService.getSysUserListByRoleId(roleId, sysUserFilter, orderBy); + JSONObject responseData = MyPageUtil.makeResponseData(resultList); + return ResponseResult.success(responseData); + } + + private ResponseResult doRoleUserVerify(Long roleId) { + if (MyCommonUtil.existBlankArgument(roleId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysRoleService.existId(roleId)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + return ResponseResult.success(); } /** @@ -269,32 +236,26 @@ public class SysRoleController { * @return 应答结果对象。 */ @PostMapping("/addUserRole") - public ResponseResult addUserRole( + public ResponseResult addUserRole( @MyRequestBody Long roleId, @MyRequestBody String userIdListString) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(roleId, userIdListString)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - Set userIdSet = Arrays.stream( - userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); - if (!sysRoleService.existId(roleId) - || !sysUserService.existUniqueKeyList("userId", userIdSet)) { - errorCodeEnum = ErrorCodeEnum.INVALID_RELATED_RECORD_ID; - break; - } - List userRoleList = new LinkedList<>(); - for (Long userId : userIdSet) { - SysUserRole userRole = new SysUserRole(); - userRole.setRoleId(roleId); - userRole.setUserId(userId); - userRoleList.add(userRole); - } - sysRoleService.addUserRoleList(userRoleList); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + if (MyCommonUtil.existBlankArgument(roleId, userIdListString)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + Set userIdSet = Arrays.stream( + userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysRoleService.existId(roleId) + || !sysUserService.existUniqueKeyList("userId", userIdSet)) { + return ResponseResult.error(ErrorCodeEnum.INVALID_RELATED_RECORD_ID); + } + List userRoleList = new LinkedList<>(); + for (Long userId : userIdSet) { + SysUserRole userRole = new SysUserRole(); + userRole.setRoleId(roleId); + userRole.setUserId(userId); + userRoleList.add(userRole); + } + sysRoleService.addUserRoleList(userRoleList); + return ResponseResult.success(); } /** @@ -305,21 +266,15 @@ public class SysRoleController { * @return 应答数据结果。 */ @PostMapping("/deleteUserRole") - public ResponseResult deleteUserRole( + public ResponseResult deleteUserRole( @MyRequestBody Long roleId, @MyRequestBody Long userId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(roleId, userId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (!sysRoleService.removeUserRole(roleId, userId)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + if (MyCommonUtil.existBlankArgument(roleId, userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysRoleService.removeUserRole(roleId, userId)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); } /** @@ -331,23 +286,17 @@ public class SysRoleController { * @return 符合条件的角色列表。 */ @PostMapping("/listAllRolesByPermCode") - public ResponseResult listAllRolesByPermCode( + public ResponseResult listAllRolesByPermCode( @MyRequestBody Long permCodeId, @MyRequestBody MyPageParam pageParam) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - JSONObject responseData = null; - do { - if (MyCommonUtil.existBlankArgument(permCodeId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); - } - List roleList = sysRoleService.getSysRoleListByPermCodeId(permCodeId); - responseData = MyPageUtil.makeResponseData(roleList); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + if (MyCommonUtil.existBlankArgument(permCodeId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + List roleList = sysRoleService.getSysRoleListByPermCodeId(permCodeId); + JSONObject responseData = MyPageUtil.makeResponseData(roleList); + return ResponseResult.success(responseData); } /** @@ -359,22 +308,16 @@ public class SysRoleController { * @return 符合条件的角色列表。 */ @PostMapping("/listAllRolesByPerm") - public ResponseResult listAllRolesByPerm( + public ResponseResult listAllRolesByPerm( @MyRequestBody String url, @MyRequestBody MyPageParam pageParam) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - JSONObject responseData = null; - do { - if (MyCommonUtil.existBlankArgument(url)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); - } - List roleList = sysRoleService.getSysRoleListByPerm(url); - responseData = MyPageUtil.makeResponseData(roleList); - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, responseData); + if (MyCommonUtil.existBlankArgument(url)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (pageParam != null) { + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + } + List roleList = sysRoleService.getSysRoleListByPerm(url); + JSONObject responseData = MyPageUtil.makeResponseData(roleList); + return ResponseResult.success(responseData); } } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysUserController.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysUserController.java index cee041ad..1f02415e 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysUserController.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/controller/SysUserController.java @@ -1,7 +1,7 @@ package com.orange.admin.upms.controller; 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.service.*; import com.orange.admin.common.core.object.*; @@ -22,7 +22,7 @@ import javax.validation.groups.Default; * 用户管理操作控制器类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @RestController @@ -44,33 +44,25 @@ public class SysUserController { */ @SuppressWarnings("unchecked") @PostMapping("/add") - public ResponseResult add( + public ResponseResult add( @MyRequestBody SysUser sysUser, @MyRequestBody String roleIdListString, @MyRequestBody String dataPermIdListString) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - JSONObject responseData = null; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysUser); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - VerifyResult result = sysUserService.verifyRelatedData( - sysUser, null, roleIdListString, dataPermIdListString); - if (!result.isSuccess()) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - errorMessage = result.getErrorMessage(); - break; - } - Set roleIdSet = (Set) result.getData().get("roleIdSet"); - Set dataPermIdSet = (Set) 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); + String errorMessage = MyCommonUtil.getModelValidationError(sysUser); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + CallResult result = sysUserService.verifyRelatedData( + sysUser, null, roleIdListString, dataPermIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); + } + Set roleIdSet = (Set) result.getData().get("roleIdSet"); + Set dataPermIdSet = (Set) result.getData().get("dataPermIdSet"); + sysUserService.saveNew(sysUser, roleIdSet, dataPermIdSet, applicationConfig.getPasswordSalt()); + JSONObject responseData = new JSONObject(); + responseData.put("userId", sysUser.getUserId()); + return ResponseResult.success(responseData); } /** @@ -83,39 +75,29 @@ public class SysUserController { */ @SuppressWarnings("unchecked") @PostMapping("/update") - public ResponseResult update( + public ResponseResult update( @MyRequestBody SysUser sysUser, @MyRequestBody String roleIdListString, @MyRequestBody String dataPermIdListString) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage; - do { - errorMessage = MyCommonUtil.getModelValidationError(sysUser, Default.class, UpdateGroup.class); - if (errorMessage != null) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - break; - } - SysUser originalUser = sysUserService.getById(sysUser.getUserId()); - if (originalUser == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - VerifyResult result = sysUserService.verifyRelatedData( - sysUser, originalUser, roleIdListString, dataPermIdListString); - if (!result.isSuccess()) { - errorCodeEnum = ErrorCodeEnum.DATA_VALIDATAED_FAILED; - errorMessage = result.getErrorMessage(); - break; - } - Set roleIdSet = (Set) result.getData().get("roleIdSet"); - Set dataPermIdSet = (Set) 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); + String errorMessage = MyCommonUtil.getModelValidationError(sysUser, Default.class, UpdateGroup.class); + if (errorMessage != null) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, errorMessage); + } + SysUser originalUser = sysUserService.getById(sysUser.getUserId()); + if (originalUser == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + CallResult result = sysUserService.verifyRelatedData( + sysUser, originalUser, roleIdListString, dataPermIdListString); + if (!result.isSuccess()) { + return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATAED_FAILED, result.getErrorMessage()); + } + Set roleIdSet = (Set) result.getData().get("roleIdSet"); + Set dataPermIdSet = (Set) result.getData().get("dataPermIdSet"); + if (!sysUserService.update(sysUser, originalUser, roleIdSet, dataPermIdSet)) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); } /** @@ -125,21 +107,15 @@ public class SysUserController { * @return 应答结果对象。 */ @PostMapping("/resetPassword") - public ResponseResult resetPassword(@MyRequestBody Long userId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(userId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - if (!sysUserService.resetPassword( - userId, applicationConfig.getDefaultUserPassword(), applicationConfig.getPasswordSalt())) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult resetPassword(@MyRequestBody Long userId) { + if (MyCommonUtil.existBlankArgument(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + if (!sysUserService.resetPassword( + userId, applicationConfig.getDefaultUserPassword(), applicationConfig.getPasswordSalt())) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(); } /** @@ -149,29 +125,23 @@ public class SysUserController { * @return 应答结果对象。 */ @PostMapping("/delete") - public ResponseResult delete(@MyRequestBody Long userId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - do { - if (MyCommonUtil.existBlankArgument(userId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - // 验证关联Id的数据合法性 - SysUser originalSysUser = sysUserService.getById(userId); - if (originalSysUser == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - //TODO 修改下面方括号中的话述 - errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; - break; - } - if (!sysUserService.remove(userId)) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage); + public ResponseResult delete(@MyRequestBody Long userId) { + String errorMessage; + if (MyCommonUtil.existBlankArgument(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 验证关联Id的数据合法性 + SysUser originalSysUser = sysUserService.getById(userId); + if (originalSysUser == null) { + // NOTE: 修改下面方括号中的话述 + errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + if (!sysUserService.remove(userId)) { + errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!"; + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage); + } + return ResponseResult.success(); } /** @@ -183,12 +153,12 @@ public class SysUserController { * @return 应答结果对象,包含查询结果集。 */ @PostMapping("/list") - public ResponseResult list( + public ResponseResult list( @MyRequestBody SysUser sysUserFilter, @MyRequestBody MyOrderParam orderParam, @MyRequestBody MyPageParam pageParam) { if (pageParam != null) { - PageHelper.startPage(pageParam.getPageNum(), pageParam.getPageSize()); + PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize()); } String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class); List resultList = sysUserService.getSysUserListWithRelation(sysUserFilter, orderBy); @@ -203,21 +173,15 @@ public class SysUserController { */ @GetMapping("/view") public ResponseResult view(@RequestParam Long userId) { - ErrorCodeEnum errorCodeEnum = ErrorCodeEnum.NO_ERROR; - String errorMessage = null; - SysUser sysUser = null; - do { - if (MyCommonUtil.existBlankArgument(userId)) { - errorCodeEnum = ErrorCodeEnum.ARGUMENT_NULL_EXIST; - break; - } - sysUser = sysUserService.getByIdWithRelation(userId); - if (sysUser == null) { - errorCodeEnum = ErrorCodeEnum.DATA_NOT_EXIST; - break; - } - } while (false); - return ResponseResult.create(errorCodeEnum, errorMessage, sysUser); + if (MyCommonUtil.existBlankArgument(userId)) { + return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST); + } + // 这里查看用户数据时候,需要把用户多对多关联的角色和数据权限Id一并查出。 + SysUser sysUser = sysUserService.getByIdWithRelation(userId, MyRelationParam.full()); + if (sysUser == null) { + return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST); + } + return ResponseResult.success(sysUser); } /** @@ -228,8 +192,8 @@ public class SysUserController { * @return 应答结果对象,包含的数据为 List>,map中包含两条记录,key的值分别是id和name,value对应具体数据。 */ @GetMapping("/listDictSysUser") - public ResponseResult listDictSysUser(SysUser filter) { - List resultList = sysUserService.getListByFilter(filter); + public ResponseResult>> listDictSysUser(SysUser filter) { + List resultList = sysUserService.getListByFilter(filter, null); return ResponseResult.success(BeanQuery.select( "userId as id", "loginName as name").executeFrom(resultList)); } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermDeptMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermDeptMapper.java index 30e543d8..b61cac7c 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermDeptMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermDeptMapper.java @@ -7,7 +7,7 @@ import com.orange.admin.upms.model.SysDataPermDept; * 数据权限与部门关系数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysDataPermDeptMapper extends BaseDaoMapper { } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermMapper.java index e0b7d73f..857b3ca4 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermMapper.java @@ -11,7 +11,7 @@ import java.util.List; * NOTE: 该对象一定不能被 @EnableDataPerm 注解标注,否则会导致无限递归。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysDataPermMapper extends BaseDaoMapper { @@ -19,7 +19,7 @@ public interface SysDataPermMapper extends BaseDaoMapper { * 获取数据权限列表。 * * @param sysDataPermFilter 过滤对象。 - * @param orderBy 排序字符串。 + * @param orderBy 排序字符串。 * @return 过滤后的数据权限列表。 */ List getSysDataPermList( diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermMenuMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermMenuMapper.java index 17b10fe5..72770355 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermMenuMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermMenuMapper.java @@ -10,7 +10,7 @@ import java.util.List; * 数据权限与菜单关系数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysDataPermMenuMapper extends BaseDaoMapper { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermUserMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermUserMapper.java index 18fa583f..e7f03440 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermUserMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDataPermUserMapper.java @@ -9,18 +9,10 @@ import java.util.List; * 数据权限与用户关系数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysDataPermUserMapper extends BaseDaoMapper { - /** - * 获取用户的数据权限Id列表。 - * - * @param userId 用户Id。 - * @return 数据权限Id列表。 - */ - List getDataPermIdListByUserId(Long userId); - /** * 批量添加数据权限和用户关系的列表。 * diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDeptMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDeptMapper.java index dd6578ba..5f067ac2 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDeptMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysDeptMapper.java @@ -10,7 +10,7 @@ import java.util.*; * 部门管理数据操作访问接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysDeptMapper extends BaseDaoMapper { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysMenuMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysMenuMapper.java index e20cb684..fe072282 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysMenuMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysMenuMapper.java @@ -9,7 +9,7 @@ import java.util.List; * 菜单数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysMenuMapper extends BaseDaoMapper { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysMenuPermCodeMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysMenuPermCodeMapper.java index 579baf76..38831112 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysMenuPermCodeMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysMenuPermCodeMapper.java @@ -7,7 +7,7 @@ import com.orange.admin.upms.model.SysMenuPermCode; * 菜单与权限字关系数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysMenuPermCodeMapper extends BaseDaoMapper { } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermCodeMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermCodeMapper.java index 6bfddf16..6c7a0139 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermCodeMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermCodeMapper.java @@ -11,7 +11,7 @@ import java.util.Map; * 权限字数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysPermCodeMapper extends BaseDaoMapper { @@ -35,7 +35,7 @@ public interface SysPermCodeMapper extends BaseDaoMapper { * 获取指定用户的权限字列表。 * * @param loginName 精确匹配用户登录名。 - * @param permCode 模糊匹配的权限字名,LIKE %permCode%。 + * @param permCode 模糊匹配的权限字名,LIKE %permCode%。 * @return 权限字列表。 */ List getUserPermCodeListByFilter( diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermCodePermMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermCodePermMapper.java index c2d79a5b..7d2aef00 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermCodePermMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermCodePermMapper.java @@ -7,7 +7,7 @@ import com.orange.admin.upms.model.SysPermCodePerm; * 权限字与权限资源关系数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysPermCodePermMapper extends BaseDaoMapper { } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermMapper.java index 36548789..05920b06 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermMapper.java @@ -11,7 +11,7 @@ import java.util.Map; * 权限资源数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysPermMapper extends BaseDaoMapper { @@ -28,7 +28,7 @@ public interface SysPermMapper extends BaseDaoMapper { * * @param loginName 精确匹配用户登录名。 * @param moduleId 精确匹配权限模块Id。 - * @param url 权限的url过滤条件,LIKE %url%。 + * @param url 权限的url过滤条件,LIKE %url%。 * @return 权限列表。 */ List> getUserPermListByFilter( diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermModuleMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermModuleMapper.java index 7e81b0e6..8ad5e83f 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermModuleMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermModuleMapper.java @@ -9,7 +9,7 @@ import java.util.List; * 权限资源模块数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysPermModuleMapper extends BaseDaoMapper { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermWhitelistMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermWhitelistMapper.java index 04705b9f..9a9b4aa9 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermWhitelistMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysPermWhitelistMapper.java @@ -7,7 +7,7 @@ import com.orange.admin.upms.model.SysPermWhitelist; * 权限资源白名单数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysPermWhitelistMapper extends BaseDaoMapper { } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysRoleMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysRoleMapper.java index 0830495b..ea5abb42 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysRoleMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysRoleMapper.java @@ -10,7 +10,7 @@ import java.util.List; * 角色数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysRoleMapper extends BaseDaoMapper { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysRoleMenuMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysRoleMenuMapper.java index 2cbec9cd..2d27e413 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysRoleMenuMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysRoleMenuMapper.java @@ -7,7 +7,7 @@ import com.orange.admin.upms.model.SysRoleMenu; * 角色与菜单操作关联关系数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysRoleMenuMapper extends BaseDaoMapper { } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysUserMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysUserMapper.java index d9669490..d3a9a2f1 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysUserMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysUserMapper.java @@ -10,7 +10,7 @@ import java.util.*; * 用户管理数据操作访问接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysUserMapper extends BaseDaoMapper { @@ -27,9 +27,9 @@ public interface SysUserMapper extends BaseDaoMapper { /** * 根据角色Id,获取关联的用户Id列表。 * - * @param roleId 关联的角色Id。 + * @param roleId 关联的角色Id。 * @param sysUserFilter 用户过滤条件对象。 - * @param orderBy order by从句的参数。 + * @param orderBy order by从句的参数。 * @return 和RoleId关联的用户列表。 */ List getSysUserListByRoleId( @@ -40,7 +40,7 @@ public interface SysUserMapper extends BaseDaoMapper { /** * 根据角色Id,获取和当前角色Id没有建立多对多关联关系的用户Id列表。 * - * @param roleId 关联的角色Id。 + * @param roleId 关联的角色Id。 * @param sysUserFilter 用户过滤条件对象。 * @param orderBy order by从句的参数。 * @return 和RoleId没有建立关联关系的用户列表。 @@ -53,7 +53,7 @@ public interface SysUserMapper extends BaseDaoMapper { /** * 根据数据权限Id,获取关联的用户Id列表。 * - * @param dataPermId 关联的数据权限Id。 + * @param dataPermId 关联的数据权限Id。 * @param sysUserFilter 用户过滤条件对象。 * @param orderBy order by从句的参数。 * @return 和DataPermId关联的用户列表。 @@ -66,7 +66,7 @@ public interface SysUserMapper extends BaseDaoMapper { /** * 根据数据权限Id,获取和当前数据权限Id没有建立多对多关联关系的用户Id列表。 * - * @param dataPermId 关联的数据权限Id。 + * @param dataPermId 关联的数据权限Id。 * @param sysUserFilter 用户过滤条件对象。 * @param orderBy order by从句的参数。 * @return 和DataPermId没有建立关联关系的用户列表。 diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysUserRoleMapper.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysUserRoleMapper.java index f0444e26..bfb4f4c0 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysUserRoleMapper.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/SysUserRoleMapper.java @@ -2,7 +2,6 @@ package com.orange.admin.upms.dao; import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.upms.model.SysUserRole; -import org.apache.ibatis.annotations.Param; import java.util.List; @@ -10,18 +9,10 @@ import java.util.List; * 用户与角色关联关系数据访问操作接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface SysUserRoleMapper extends BaseDaoMapper { - /** - * 获取用户的角色Id列表。 - * - * @param userId 用户Id。 - * @return 角色Id列表。 - */ - List getRoleIdListByUserId(@Param("userId") Long userId); - /** * 批量插入用户角色信息,如果用户角色已经存在,则不会重复插入。 * diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/mapper/SysDataPermUserMapper.xml b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/mapper/SysDataPermUserMapper.xml index b807724b..18425586 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/mapper/SysDataPermUserMapper.xml +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/mapper/SysDataPermUserMapper.xml @@ -6,10 +6,6 @@ - - REPLACE INTO zz_sys_data_perm_user(data_perm_id, user_id) VALUES diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/mapper/SysUserRoleMapper.xml b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/mapper/SysUserRoleMapper.xml index 4f8439fa..40c7ced7 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/mapper/SysUserRoleMapper.xml +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/dao/mapper/SysUserRoleMapper.xml @@ -6,10 +6,6 @@ - - REPLACE INTO zz_sys_user_role(user_id, role_id) VALUES diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPerm.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPerm.java index 0e7a1677..3f85584a 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPerm.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPerm.java @@ -2,16 +2,23 @@ package com.orange.admin.upms.model; import com.alibaba.fastjson.annotation.JSONField; 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.UpdateGroup; import com.orange.admin.common.core.constant.DataPermRuleType; -import com.orange.admin.common.core.annotation.JobUpdateTimeColumn; import lombok.Data; import javax.persistence.*; import javax.validation.constraints.*; import java.util.*; +/** + * 数据权限实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_data_perm") public class SysDataPerm { @@ -72,9 +79,17 @@ public class SysDataPerm { @Column(name = "deleted_flag") private Integer deletedFlag; + @RelationManyToMany( + relationMapperName = "sysDataPermDeptMapper", + relationMasterIdField = "dataPermId", + relationModelClass = SysDataPermDept.class) @Transient private List dataPermDeptList; + @RelationManyToMany( + relationMapperName = "sysDataPermMenuMapper", + relationMasterIdField = "dataPermId", + relationModelClass = SysDataPermMenu.class) @Transient private List dataPermMenuList; diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPermDept.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPermDept.java index ebea03ab..2b8d3dfa 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPermDept.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPermDept.java @@ -7,6 +7,12 @@ import javax.persistence.Column; import javax.persistence.Id; import javax.persistence.Table; +/** + * 数据权限与部门关联实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @ToString(of = {"deptId"}) @Table(name = "zz_sys_data_perm_dept") diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPermMenu.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPermMenu.java index a2b67ecd..7bfadfab 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPermMenu.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPermMenu.java @@ -4,6 +4,12 @@ import lombok.Data; import javax.persistence.*; +/** + * 数据权限与菜单关联实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_data_perm_menu") public class SysDataPermMenu { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPermUser.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPermUser.java index a8676cd0..4781c2ec 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPermUser.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDataPermUser.java @@ -4,6 +4,12 @@ import lombok.Data; import javax.persistence.*; +/** + * 数据权限与用户关联实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_data_perm_user") public class SysDataPermUser { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDept.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDept.java index c2175bbb..8397a88e 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDept.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysDept.java @@ -10,6 +10,12 @@ import javax.validation.constraints.*; import java.util.Date; +/** + * SysDept实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_dept") public class SysDept { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysMenu.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysMenu.java index 9afaa3a2..c6c3a130 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysMenu.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysMenu.java @@ -2,6 +2,7 @@ package com.orange.admin.upms.model; import com.alibaba.fastjson.annotation.JSONField; 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.UpdateGroup; import com.orange.admin.upms.model.constant.SysMenuType; @@ -12,6 +13,12 @@ import javax.validation.constraints.*; import java.util.Date; import java.util.List; +/** + * 菜单实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_menu") public class SysMenu { @@ -77,6 +84,10 @@ public class SysMenu { @Column(name = "deleted_flag") private Integer deletedFlag; + @RelationManyToMany( + relationMapperName = "sysMenuPermCodeMapper", + relationMasterIdField = "menuId", + relationModelClass = SysMenuPermCode.class) @Transient - private List permCodeIdList; + private List sysMenuPermCodeList; } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysMenuPermCode.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysMenuPermCode.java index 6a0108de..ac1ddf35 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysMenuPermCode.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysMenuPermCode.java @@ -4,6 +4,12 @@ import lombok.Data; import javax.persistence.*; +/** + * 菜单与权限字关联实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_menu_perm_code") public class SysMenuPermCode { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPerm.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPerm.java index 414a8b73..4e141db0 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPerm.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPerm.java @@ -11,6 +11,12 @@ import javax.validation.constraints.*; import java.util.Date; import java.util.Map; +/** + * 权限资源实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_perm") public class SysPerm { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermCode.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermCode.java index d3cce520..12ffca63 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermCode.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermCode.java @@ -2,6 +2,7 @@ package com.orange.admin.upms.model; import com.alibaba.fastjson.annotation.JSONField; 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.UpdateGroup; import com.orange.admin.upms.model.constant.SysPermCodeType; @@ -12,6 +13,12 @@ import javax.validation.constraints.*; import java.util.Date; import java.util.List; +/** + * 权限字实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_perm_code") public class SysPermCode { @@ -73,6 +80,10 @@ public class SysPermCode { @Column(name = "deleted_flag") private Integer deletedFlag; + @RelationManyToMany( + relationMapperName = "sysPermCodePermMapper", + relationMasterIdField = "permCodeId", + relationModelClass = SysPermCodePerm.class) @Transient - private List permIdList; + private List sysPermCodePermList; } \ No newline at end of file diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermCodePerm.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermCodePerm.java index 73536c62..18074087 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermCodePerm.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermCodePerm.java @@ -4,6 +4,12 @@ import lombok.Data; import javax.persistence.*; +/** + * 权限字与权限资源关联实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_perm_code_perm") public class SysPermCodePerm { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermModule.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermModule.java index 88cf3162..27e2ee37 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermModule.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermModule.java @@ -12,6 +12,12 @@ import javax.validation.constraints.*; import java.util.Date; import java.util.List; +/** + * 权限模块实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_perm_module") public class SysPermModule { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermWhitelist.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermWhitelist.java index e38f7fa1..c34ef9b4 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermWhitelist.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysPermWhitelist.java @@ -4,6 +4,12 @@ import lombok.Data; import javax.persistence.*; +/** + * 白名单实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_perm_whitelist") public class SysPermWhitelist { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysRole.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysRole.java index 28238c5a..9e54fce1 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysRole.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysRole.java @@ -2,8 +2,9 @@ package com.orange.admin.upms.model; import com.alibaba.fastjson.annotation.JSONField; 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.RelationManyToMany; +import com.orange.admin.common.core.validator.UpdateGroup; import lombok.Data; import javax.persistence.*; @@ -11,6 +12,12 @@ import javax.validation.constraints.*; import java.util.Date; import java.util.List; +/** + * 角色实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_role") public class SysRole { @@ -63,8 +70,12 @@ public class SysRole { @Column(name = "deleted_flag") private Integer deletedFlag; + @RelationManyToMany( + relationMapperName = "sysRoleMenuMapper", + relationMasterIdField = "roleId", + relationModelClass = SysRoleMenu.class) @Transient - private List menuIdList; + private List sysRoleMenuList; @Transient private String createTimeStart; diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysRoleMenu.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysRoleMenu.java index 318cfcad..26c1f7b3 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysRoleMenu.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysRoleMenu.java @@ -4,6 +4,12 @@ import lombok.Data; import javax.persistence.*; +/** + * 角色菜单实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_role_menu") public class SysRoleMenu { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysUser.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysUser.java index 3e91e79b..863b5d2a 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysUser.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysUser.java @@ -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.SysUserStatus; 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.JobUpdateTimeColumn; import com.orange.admin.common.core.validator.UpdateGroup; @@ -16,6 +17,12 @@ import java.util.Date; import java.util.Map; import java.util.List; +/** + * SysUser实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_user") public class SysUser { @@ -123,16 +130,24 @@ public class SysUser { private String createTimeEnd; /** - * 与当前用户关联的角色Id集合。 + * 多对多用户角色数据集合。 */ + @RelationManyToMany( + relationMapperName = "sysUserRoleMapper", + relationMasterIdField = "userId", + relationModelClass = SysUserRole.class) @Transient - private List roleIdList; + private List sysUserRoleList; /** - * 与当前用户关联的数据权限Id集合。 + * 多对多用户数据权限数据集合。 */ + @RelationManyToMany( + relationMapperName = "sysDataPermUserMapper", + relationMasterIdField = "userId", + relationModelClass = SysDataPermUser.class) @Transient - private List dataPermIdList; + private List sysDataPermUserList; @RelationConstDict( masterIdField = "userType", diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysUserRole.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysUserRole.java index 375be9c6..11ccfa39 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysUserRole.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/SysUserRole.java @@ -4,6 +4,12 @@ import lombok.Data; import javax.persistence.*; +/** + * 用户角色实体对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ @Data @Table(name = "zz_sys_user_role") public class SysUserRole { diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysMenuType.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysMenuType.java index 4721c326..234dcc33 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysMenuType.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysMenuType.java @@ -7,7 +7,7 @@ import java.util.Map; * 菜单类型常量对象。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public final class SysMenuType { @@ -28,7 +28,7 @@ public final class SysMenuType { */ public static final int TYPE_BUTTON = 3; - public static final Map DICT_MAP = new HashMap<>(4); + private static final Map DICT_MAP = new HashMap<>(4); static { DICT_MAP.put(0, "目录菜单"); DICT_MAP.put(1, "普通菜单"); @@ -42,8 +42,8 @@ public final class SysMenuType { * @param value 待验证的参数值。 * @return 合法返回true,否则false。 */ - public static boolean isValid(int value) { - return DICT_MAP.containsKey(value); + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); } /** diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysPermCodeType.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysPermCodeType.java index e67b05cf..89e2bd40 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysPermCodeType.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysPermCodeType.java @@ -7,7 +7,7 @@ import java.util.Map; * 权限字类型常量对象。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public final class SysPermCodeType { @@ -24,7 +24,7 @@ public final class SysPermCodeType { */ public static final int TYPE_OPERATION = 2; - public static final Map DICT_MAP = new HashMap<>(3); + private static final Map DICT_MAP = new HashMap<>(3); static { DICT_MAP.put(0, "表单权限字"); DICT_MAP.put(1, "表单片段布局权限字"); @@ -37,8 +37,8 @@ public final class SysPermCodeType { * @param value 待验证的参数值。 * @return 合法返回true,否则false。 */ - public static boolean isValid(int value) { - return DICT_MAP.containsKey(value); + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); } /** diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysPermModuleType.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysPermModuleType.java index ddc48c54..7bd98c7c 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysPermModuleType.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysPermModuleType.java @@ -7,7 +7,7 @@ import java.util.Map; * 权限资源模块类型常量对象。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public final class SysPermModuleType { @@ -20,7 +20,7 @@ public final class SysPermModuleType { */ public static final int TYPE_CONTROLLER = 1; - public static final Map DICT_MAP = new HashMap<>(2); + private static final Map DICT_MAP = new HashMap<>(2); static { DICT_MAP.put(0, "普通模块"); DICT_MAP.put(1, "controller接口模块"); @@ -32,8 +32,8 @@ public final class SysPermModuleType { * @param value 待验证的参数值。 * @return 合法返回true,否则false。 */ - public static boolean isValid(int value) { - return DICT_MAP.containsKey(value); + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); } /** diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysUserStatus.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysUserStatus.java index 447d4f2e..b7af87ae 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysUserStatus.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysUserStatus.java @@ -3,6 +3,12 @@ package com.orange.admin.upms.model.constant; import java.util.HashMap; import java.util.Map; +/** + * 用户状态常量字典对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ public final class SysUserStatus { /** @@ -14,7 +20,7 @@ public final class SysUserStatus { */ public static final int STATUS_LOCKED = 1; - public static final Map DICT_MAP = new HashMap<>(2); + private static final Map DICT_MAP = new HashMap<>(2); static { DICT_MAP.put(STATUS_NORMAL, "正常状态"); DICT_MAP.put(STATUS_LOCKED, "锁定状态"); @@ -26,8 +32,8 @@ public final class SysUserStatus { * @param value 待验证的参数值。 * @return 合法返回true,否则false。 */ - public static boolean isValid(int value) { - return DICT_MAP.containsKey(value); + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); } /** diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysUserType.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysUserType.java index e0b3a844..110bf2d5 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysUserType.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/model/constant/SysUserType.java @@ -3,6 +3,12 @@ package com.orange.admin.upms.model.constant; import java.util.HashMap; import java.util.Map; +/** + * 用户类型常量字典对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ public final class SysUserType { /** @@ -18,7 +24,7 @@ public final class SysUserType { */ public static final int TYPE_OPERATOR = 2; - public static final Map DICT_MAP = new HashMap<>(3); + private static final Map DICT_MAP = new HashMap<>(3); static { DICT_MAP.put(TYPE_ADMIN, "管理员"); DICT_MAP.put(TYPE_SYSTEM, "系统操作员"); @@ -31,8 +37,8 @@ public final class SysUserType { * @param value 待验证的参数值。 * @return 合法返回true,否则false。 */ - public static boolean isValid(int value) { - return DICT_MAP.containsKey(value); + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); } /** diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysDataPermService.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysDataPermService.java index 5d98e204..2f415158 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysDataPermService.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysDataPermService.java @@ -1,13 +1,13 @@ package com.orange.admin.upms.service; 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.core.constant.DataPermRuleType; 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.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.SysDataPermMapper; import com.orange.admin.upms.dao.SysDataPermUserMapper; @@ -29,10 +29,10 @@ import java.util.stream.Collectors; * 数据权限数据服务类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Service -public class SysDataPermService extends BaseService { +public class SysDataPermService extends BaseBizService { @Autowired private SysDataPermMapper sysDataPermMapper; @@ -67,7 +67,7 @@ public class SysDataPermService extends BaseService { * @param dataPermMenuList 关联的菜单对象列表。 * @return 新增后的数据权限对象。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public SysDataPerm saveNew(SysDataPerm dataPerm, Set deptIdSet, List dataPermMenuList) { dataPerm.setDataPermId(idGenerator.nextLongId()); TokenData tokenData = TokenData.takeFromRequest(); @@ -91,7 +91,7 @@ public class SysDataPermService extends BaseService { * @param dataPermMenuList 关联的菜单对象列表。 * @return 更新成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean update( SysDataPerm dataPerm, SysDataPerm originalDataPerm, @@ -121,7 +121,7 @@ public class SysDataPermService extends BaseService { * @param dataPermId 数据权限主键Id。 * @return 删除成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean remove(Long dataPermId) { SysDataPerm dataPerm = new SysDataPerm(); dataPerm.setDataPermId(dataPermId); @@ -152,27 +152,6 @@ public class SysDataPermService extends BaseService { 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 dataPermDeptList = sysDataPermDeptMapper.select(dataPermDept); - dataPerm.setDataPermDeptList(dataPermDeptList); - SysDataPermMenu dataPermMenu = new SysDataPermMenu(); - dataPermMenu.setDataPermId(dataPermId); - List dataPermMenuList = sysDataPermMenuMapper.select(dataPermMenu); - dataPerm.setDataPermMenuList(dataPermMenuList); - } - return dataPerm; - } - /** * 将指定用户的指定会话的数据权限集合存入缓存。 * @@ -182,7 +161,7 @@ public class SysDataPermService extends BaseService { * @param isAdmin 是否是管理员。 * @return 查询并缓存后的数据权限集合。返回格式为,Map>。 */ - @CachePut(value = "DataPermissionCache", key = "#sessionId") + @CachePut(value = "DATA_PERMISSION_CACHE", key = "#sessionId") public Map> putDataPermCache( String sessionId, Long userId, Long deptId, boolean isAdmin) { // 管理员账户返回空对象,便于缓存的统一处理。 @@ -194,7 +173,7 @@ public class SysDataPermService extends BaseService { * * @param sessionId 会话Id。 */ - @CacheEvict(value = "DataPermissionCache", key = "#sessionId") + @CacheEvict(value = "DATA_PERMISSION_CACHE", key = "#sessionId") public void removeDataPermCache(String sessionId) { // 空实现即可,只是通过注解将当前sessionId从cache中删除。 } @@ -208,7 +187,7 @@ public class SysDataPermService extends BaseService { */ public Map> getSysDataPermMenuListByUserId(Long userId, Long deptId) { List dataPermMenuList = sysDataPermMenuMapper.getSysDataPermMenuListByUserId(userId); - if (dataPermMenuList.size() == 0) { + if (dataPermMenuList.isEmpty()) { return new HashMap<>(1); } // 这里用代码的方式把deptId组装到SysDataPermMenu中。 @@ -226,7 +205,12 @@ public class SysDataPermService extends BaseService { dataPermMenu.setDeptIdListString(StringUtils.join(deptIdSet, ",")); } } - // 由于同一用户可能属于多个数据权限,所以需要先进行基于menuId的权限合并。 + // 由于同一用户可能属于多个数据权限,所以需要进行基于menuId的权限合并。 + return mergeDataPermMenuList(dataPermMenuList, deptId); + } + + private Map> mergeDataPermMenuList( + List dataPermMenuList, Long deptId) { Map> menuMap = dataPermMenuList.stream().collect(Collectors.groupingBy(SysDataPermMenu::getMenuId)); Map> resultMap = new HashMap<>(menuMap.size()); @@ -244,18 +228,9 @@ public class SysDataPermService extends BaseService { continue; } // 合并自定义部门了。 - List customDeptList = ruleMap.get(DataPermRuleType.TYPE_CUSTOM_DETP_LIST); - if (customDeptList != null) { - Set 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); - } - m.put(DataPermRuleType.TYPE_CUSTOM_DETP_LIST, StringUtils.join(deptIdSet, ',')); + String deptIds = processMultiDept(ruleMap, deptId); + if (deptIds != null) { + m.put(DataPermRuleType.TYPE_CUSTOM_DETP_LIST, deptIds); } // 最后处理当前部门和当前用户。 if (ruleMap.get(DataPermRuleType.TYPE_DEPT_ONLY) != null) { @@ -269,13 +244,30 @@ public class SysDataPermService extends BaseService { return resultMap; } + private String processMultiDept(Map> ruleMap, Long deptId) { + List customDeptList = ruleMap.get(DataPermRuleType.TYPE_CUSTOM_DETP_LIST); + if (customDeptList == null) { + return null; + } + Set 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 userIdSet 关联的用户Id列表。 + * @param userIdSet 关联的用户Id列表。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public void addDataPermUserList(Long dataPermId, Set userIdSet) { List dataPermUserList = new LinkedList<>(); for (Long userId : userIdSet) { @@ -293,7 +285,7 @@ public class SysDataPermService extends BaseService { * @param dataPermId 数据权限主键Id。 * @param userId 用户主键Id。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean removeDataPermUser(Long dataPermId, Long userId) { SysDataPermUser dataPermUser = new SysDataPermUser(); dataPermUser.setDataPermId(dataPermId); @@ -304,44 +296,38 @@ public class SysDataPermService extends BaseService { /** * 验证数据权限对象关联菜单数据是否都合法。 * - * @param dataPerm 数据权限关对象。 + * @param dataPerm 数据权限关对象。 * @param deptIdListString 与数据权限关联的部门Id列表。 * @param menuIdListString 与数据权限关联的菜单Id列表。 * @return 验证结果。 */ - public VerifyResult verifyRelatedData(SysDataPerm dataPerm, String deptIdListString, String menuIdListString) { - String errorMessage = null; + public CallResult verifyRelatedData(SysDataPerm dataPerm, String deptIdListString, String menuIdListString) { JSONObject jsonObject = new JSONObject(); - do { - if (dataPerm.getRuleType() == DataPermRuleType.TYPE_CUSTOM_DETP_LIST) { - if (StringUtils.isBlank(deptIdListString)) { - errorMessage = "数据验证失败,部门列表不能为空!"; - break; - } - Set deptIdSet = Arrays.stream(StringUtils.split( - deptIdListString, ",")).map(Long::valueOf).collect(Collectors.toSet()); - if (!sysDeptService.existUniqueKeyList("deptId", deptIdSet)) { - errorMessage = "数据验证失败,存在不合法的部门数据,请刷新后重试!"; - break; - } - jsonObject.put("deptIdSet", deptIdSet); + if (dataPerm.getRuleType() == DataPermRuleType.TYPE_CUSTOM_DETP_LIST) { + if (StringUtils.isBlank(deptIdListString)) { + return CallResult.error("数据验证失败,部门列表不能为空!"); } - String[] menuIdArray = StringUtils.split(menuIdListString, ","); - Set menuIdSet = Arrays.stream(menuIdArray).map(Long::valueOf).collect(Collectors.toSet()); - // 验证菜单Id的合法性 - if (!sysMenuService.existUniqueKeyList("menuId", menuIdSet)) { - errorMessage = "数据验证失败,存在不合法的菜单,请刷新后重试!"; - break; + Set deptIdSet = Arrays.stream(StringUtils.split( + deptIdListString, ",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysDeptService.existAllPrimaryKeys(deptIdSet)) { + return CallResult.error("数据验证失败,存在不合法的部门数据,请刷新后重试!"); } - List dataPermMenuList = new LinkedList<>(); - for (Long menuId : menuIdSet) { - SysDataPermMenu dataPermMenu = new SysDataPermMenu(); - dataPermMenu.setMenuId(menuId); - dataPermMenuList.add(dataPermMenu); - } - jsonObject.put("dataPermMenuList", dataPermMenuList); - } while (false); - return VerifyResult.create(errorMessage, jsonObject); + jsonObject.put("deptIdSet", deptIdSet); + } + String[] menuIdArray = StringUtils.split(menuIdListString, ","); + Set menuIdSet = Arrays.stream(menuIdArray).map(Long::valueOf).collect(Collectors.toSet()); + // 验证菜单Id的合法性 + if (!sysMenuService.existAllPrimaryKeys(menuIdSet)) { + return CallResult.error("数据验证失败,存在不合法的菜单,请刷新后重试!"); + } + List 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( diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysDeptService.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysDeptService.java index 3971e5fb..ebea4ab3 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysDeptService.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysDeptService.java @@ -2,11 +2,12 @@ package com.orange.admin.upms.service; import com.orange.admin.upms.dao.*; 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.constant.GlobalDeletedFlag; import com.orange.admin.common.core.object.TokenData; 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 org.springframework.transaction.annotation.Transactional; import org.springframework.beans.factory.annotation.Autowired; @@ -19,10 +20,10 @@ import java.util.*; * 部门管理数据操作服务类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Service -public class SysDeptService extends BaseService { +public class SysDeptService extends BaseBizService { @Autowired private SysDeptMapper sysDeptMapper; @@ -47,7 +48,7 @@ public class SysDeptService extends BaseService { * @param sysDept 新增的部门对象。 * @return 新增后的部门对象。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public SysDept saveNew(SysDept sysDept) { sysDept.setDeptId(idGenerator.nextLongId()); sysDept.setDeletedFlag(GlobalDeletedFlag.NORMAL); @@ -64,11 +65,11 @@ public class SysDeptService extends BaseService { /** * 更新部门对象。 * - * @param sysDept 更新的部门对象。 + * @param sysDept 更新的部门对象。 * @param originalSysDept 原有的部门对象。 * @return 更新成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean update(SysDept sysDept, SysDept originalSysDept) { sysDept.setCreateUserId(originalSysDept.getCreateUserId()); sysDept.setCreateUsername(originalSysDept.getCreateUsername()); @@ -84,12 +85,12 @@ public class SysDeptService extends BaseService { * @param deptId 主键Id。 * @return 成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean remove(Long deptId) { Example sysDeptExample = new Example(SysDept.class); Example.Criteria c = sysDeptExample.createCriteria(); - c.andEqualTo("deptId", deptId); - c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL); + c.andEqualTo(super.idFieldName, deptId); + c.andEqualTo(super.deletedFlagFieldName, GlobalDeletedFlag.NORMAL); // 这里先删除主数据 SysDept deletedObject = new SysDept(); deletedObject.setDeletedFlag(GlobalDeletedFlag.DELETED); @@ -97,9 +98,9 @@ public class SysDeptService extends BaseService { return false; } // 这里可继续删除关联数据。 - Example dataPermDeptExample = new Example(SysDataPermDept.class); - dataPermDeptExample.createCriteria().andEqualTo("deptId", deptId); - sysDataPermDeptMapper.deleteByExample(dataPermDeptExample); + SysDataPermDept dataPermDept = new SysDataPermDept(); + dataPermDept.setDeptId(deptId); + sysDataPermDeptMapper.delete(dataPermDept); return true; } @@ -107,7 +108,7 @@ public class SysDeptService extends BaseService { * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。 * 如果需要同时获取关联数据,请移步(getSysDeptListWithRelation)方法。 * - * @param filter 过滤对象。 + * @param filter 过滤对象。 * @param orderBy 排序参数。 * @return 查询结果集。 */ @@ -126,7 +127,7 @@ public class SysDeptService extends BaseService { public List getSysDeptListWithRelation(SysDept filter, String orderBy) { List resultList = sysDeptMapper.getSysDeptList(filter, orderBy); Map> criteriaMap = buildAggregationAdditionalWhereCriteria(); - this.buildAllRelationForDataList(resultList, false, criteriaMap); + this.buildRelationForDataList(resultList, MyRelationParam.normal(), criteriaMap); return resultList; } } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysMenuService.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysMenuService.java index 4d10f0b9..2383475a 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysMenuService.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysMenuService.java @@ -1,11 +1,11 @@ package com.orange.admin.upms.service; 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.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.object.VerifyResult; +import com.orange.admin.common.core.object.CallResult; import com.orange.admin.upms.dao.SysMenuMapper; import com.orange.admin.upms.dao.SysMenuPermCodeMapper; import com.orange.admin.upms.dao.SysRoleMenuMapper; @@ -28,10 +28,10 @@ import java.util.stream.Collectors; * 菜单数据服务类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Service -public class SysMenuService extends BaseService { +public class SysMenuService extends BaseBizService { @Autowired private SysMenuMapper sysMenuMapper; @@ -59,11 +59,11 @@ public class SysMenuService extends BaseService { /** * 保存新增的菜单对象。 * - * @param sysMenu 新增的菜单对象。 + * @param sysMenu 新增的菜单对象。 * @param permCodeIdSet 权限字Id列表。 * @return 新增后的菜单对象。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public SysMenu saveNew(SysMenu sysMenu, Set permCodeIdSet) { sysMenu.setMenuId(idGenerator.nextLongId()); sysMenu.setCreateTime(new Date()); @@ -85,12 +85,12 @@ public class SysMenuService extends BaseService { /** * 更新菜单对象。 * - * @param sysMenu 更新的菜单对象。 + * @param sysMenu 更新的菜单对象。 * @param originalSysMenu 原有的菜单对象。 - * @param permCodeIdSet 权限字Id列表。 + * @param permCodeIdSet 权限字Id列表。 * @return 更新成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean update(SysMenu sysMenu, SysMenu originalSysMenu, Set permCodeIdSet) { sysMenu.setCreateTime(originalSysMenu.getCreateTime()); sysMenu.setMenuType(originalSysMenu.getMenuType()); @@ -98,9 +98,9 @@ public class SysMenuService extends BaseService { if (sysMenuMapper.updateByPrimaryKey(sysMenu) != 1) { return false; } - Example e = new Example(SysMenuPermCode.class); - e.createCriteria().andEqualTo("menuId", sysMenu.getMenuId()); - sysMenuPermCodeMapper.deleteByExample(e); + SysMenuPermCode deletedMenuPermCode = new SysMenuPermCode(); + deletedMenuPermCode.setMenuId(sysMenu.getMenuId()); + sysMenuPermCodeMapper.delete(deletedMenuPermCode); if (permCodeIdSet != null) { List sysMenuPermCodeList = new LinkedList<>(); for (Long permCodeId : permCodeIdSet) { @@ -120,7 +120,7 @@ public class SysMenuService extends BaseService { * @param menuId 菜单主键Id。 * @return 删除成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean remove(Long menuId) { SysMenu menu = new SysMenu(); menu.setMenuId(menuId); @@ -128,15 +128,15 @@ public class SysMenuService extends BaseService { if (sysMenuMapper.updateByPrimaryKeySelective(menu) != 1) { return false; } - Example roleMenuExample = new Example(SysRoleMenu.class); - roleMenuExample.createCriteria().andEqualTo("menuId", menuId); - sysRoleMenuMapper.deleteByExample(roleMenuExample); - Example menuPermCodeExample = new Example(SysMenuPermCode.class); - menuPermCodeExample.createCriteria().andEqualTo("menuId", menuId); - sysMenuPermCodeMapper.deleteByExample(menuPermCodeExample); - Example dataPermMenuExample = new Example(SysDataPermMenu.class); - dataPermMenuExample.createCriteria().andEqualTo("menuId", menuId); - sysDataPermMenuMapper.deleteByExample(dataPermMenuExample); + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setMenuId(menuId); + sysRoleMenuMapper.delete(roleMenu); + SysMenuPermCode menuPermCode = new SysMenuPermCode(); + menuPermCode.setMenuId(menuId); + sysMenuPermCodeMapper.delete(menuPermCode); + SysDataPermMenu dataPermMenu = new SysDataPermMenu(); + dataPermMenu.setMenuId(menuId); + sysDataPermMenuMapper.delete(dataPermMenu); return true; } @@ -164,27 +164,6 @@ public class SysMenuService extends BaseService { 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 sysMenuPermCodeList = sysMenuPermCodeMapper.selectByExample(e); - if (sysMenuPermCodeList.size() > 0) { - List permCodeIdList = - sysMenuPermCodeList.stream().map(SysMenuPermCode::getPermCodeId).collect(Collectors.toList()); - sysMenu.setPermCodeIdList(permCodeIdList); - } - } - return sysMenu; - } - /** * 判断当前菜单是否存在子菜单。 * @@ -200,64 +179,63 @@ public class SysMenuService extends BaseService { /** * 验证菜单对象关联的数据是否都合法。 * - * @param sysMenu 当前操作的对象。 - * @param originalSysMenu 原有对象。 + * @param sysMenu 当前操作的对象。 + * @param originalSysMenu 原有对象。 * @param permCodeIdListString 逗号分隔的权限Id列表。 * @return 验证结果。 */ - public VerifyResult verifyRelatedData(SysMenu sysMenu, SysMenu originalSysMenu, String permCodeIdListString) { - String errorMessage = null; + public CallResult verifyRelatedData(SysMenu sysMenu, SysMenu originalSysMenu, String permCodeIdListString) { JSONObject jsonObject = null; - do { - if (this.needToVerify(sysMenu, originalSysMenu, SysMenu::getParentId)) { - // 1. menu、ui fragment和button类型的menu不能没有parentId - if (sysMenu.getParentId() == null) { - if (sysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) { - errorMessage = "数据验证失败,当前类型菜单项的上级菜单不能为空!"; - break; - } - } else { - // 2. 判断父节点是否存在 - 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 (this.needToVerify(sysMenu, originalSysMenu, SysMenu::getParentId)) { + // menu、ui fragment和button类型的menu不能没有parentId + if (sysMenu.getParentId() == null) { + if (sysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) { + return CallResult.error("数据验证失败,当前类型菜单项的上级菜单不能为空!"); + } + } else { + String errorMessage = checkErrorOfNonDirectoryMenu(sysMenu); + if (errorMessage != null) { + return CallResult.error(errorMessage); } } - if (StringUtils.isNotBlank(permCodeIdListString)) { - Set permCodeIdSet = Arrays.stream( - permCodeIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); - if (!sysPermCodeService.existUniqueKeyList("permCodeId", permCodeIdSet)) { - errorMessage = "数据验证失败,存在不合法的权限字,请刷新后重试!"; - break; - } - jsonObject = new JSONObject(); - jsonObject.put("permCodeIdSet", permCodeIdSet); + } + if (StringUtils.isNotBlank(permCodeIdListString)) { + Set permCodeIdSet = Arrays.stream( + permCodeIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysPermCodeService.existAllPrimaryKeys(permCodeIdSet)) { + return CallResult.error("数据验证失败,存在不合法的权限字,请刷新后重试!"); } - } while (false); - return VerifyResult.create(errorMessage, jsonObject); + jsonObject = new 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; + } } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermCodeService.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermCodeService.java index 0f9279d6..11076595 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermCodeService.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermCodeService.java @@ -1,11 +1,11 @@ package com.orange.admin.upms.service; 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.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.object.VerifyResult; +import com.orange.admin.common.core.object.CallResult; import com.orange.admin.upms.dao.SysMenuPermCodeMapper; import com.orange.admin.upms.dao.SysPermCodeMapper; 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.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import tk.mybatis.mapper.entity.Example; import java.util.*; import java.util.stream.Collectors; @@ -25,10 +24,10 @@ import java.util.stream.Collectors; * 权限字数据服务类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Service -public class SysPermCodeService extends BaseService { +public class SysPermCodeService extends BaseBizService { @Autowired private SysPermCodeMapper sysPermCodeMapper; @@ -65,10 +64,10 @@ public class SysPermCodeService extends BaseService { * 保存新增的权限字对象。 * * @param sysPermCode 新增的权限字对象。 - * @param permIdSet 权限资源Id列表。 + * @param permIdSet 权限资源Id列表。 * @return 新增后的权限字对象。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public SysPermCode saveNew(SysPermCode sysPermCode, Set permIdSet) { sysPermCode.setPermCodeId(idGenerator.nextLongId()); sysPermCode.setCreateTime(new Date()); @@ -90,12 +89,12 @@ public class SysPermCodeService extends BaseService { /** * 更新权限字对象。 * - * @param sysPermCode 更新的权限字对象。 + * @param sysPermCode 更新的权限字对象。 * @param originalSysPermCode 原有的权限字对象。 - * @param permIdSet 权限资源Id列表。 + * @param permIdSet 权限资源Id列表。 * @return 更新成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean update(SysPermCode sysPermCode, SysPermCode originalSysPermCode, Set permIdSet) { sysPermCode.setCreateTime(originalSysPermCode.getCreateTime()); sysPermCode.setParentId(originalSysPermCode.getParentId()); @@ -103,9 +102,9 @@ public class SysPermCodeService extends BaseService { if (sysPermCodeMapper.updateByPrimaryKey(sysPermCode) != 1) { return false; } - Example e = new Example(SysPermCodePerm.class); - e.createCriteria().andEqualTo("permCodeId", sysPermCode.getPermCodeId()); - sysPermCodePermMapper.deleteByExample(e); + SysPermCodePerm deletedPermCodePerm = new SysPermCodePerm(); + deletedPermCodePerm.setPermCodeId(sysPermCode.getPermCodeId()); + sysPermCodePermMapper.delete(deletedPermCodePerm); if (permIdSet != null) { List sysPermCodePermList = new LinkedList<>(); for (Long permId : permIdSet) { @@ -125,7 +124,7 @@ public class SysPermCodeService extends BaseService { * @param permCodeId 权限字主键Id。 * @return 删除成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean remove(Long permCodeId) { SysPermCode permCode = new SysPermCode(); permCode.setPermCodeId(permCodeId); @@ -133,41 +132,20 @@ public class SysPermCodeService extends BaseService { if (sysPermCodeMapper.updateByPrimaryKeySelective(permCode) != 1) { return false; } - Example menuPermCodeExample = new Example(SysMenuPermCode.class); - menuPermCodeExample.createCriteria().andEqualTo("permCodeId", permCodeId); - sysMenuPermCodeMapper.deleteByExample(menuPermCodeExample); - Example permCodePermExample = new Example(SysPermCodePerm.class); - permCodePermExample.createCriteria().andEqualTo("permCodeId", permCodeId); - sysPermCodePermMapper.deleteByExample(permCodePermExample); + SysMenuPermCode menuPermCode = new SysMenuPermCode(); + menuPermCode.setPermCodeId(permCodeId); + sysMenuPermCodeMapper.delete(menuPermCode); + SysPermCodePerm permCodePerm = new SysPermCodePerm(); + permCodePerm.setPermCodeId(permCodeId); + sysPermCodePermMapper.delete(permCodePerm); 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 sysPermCodePermList = sysPermCodePermMapper.selectByExample(e); - if (sysPermCodePermList.size() > 0) { - List permIdList = - sysPermCodePermList.stream().map(SysPermCodePerm::getPermId).collect(Collectors.toList()); - sysPermCode.setPermIdList(permIdList); - } - } - return sysPermCode; - } - /** * 获取指定用户的权限字列表。 * * @param loginName 精确匹配用户登录名。 - * @param permCode 模糊匹配的权限字名,LIKE %permCode%。 + * @param permCode 模糊匹配的权限字名,LIKE %permCode%。 * @return 权限字列表。 */ public List getUserPermCodeListByFilter(String loginName, String permCode) { @@ -199,34 +177,28 @@ public class SysPermCodeService extends BaseService { /** * 验证权限字对象关联的数据是否都合法。 * - * @param sysPermCode 当前操作的对象。 + * @param sysPermCode 当前操作的对象。 * @param originalSysPermCode 原有对象。 - * @param permIdListString 逗号分隔的权限资源Id列表。 + * @param permIdListString 逗号分隔的权限资源Id列表。 * @return 验证结果。 */ - public VerifyResult verifyRelatedData( + public CallResult verifyRelatedData( 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; - Map resultMap = new HashMap<>(2); - do { - if (this.needToVerify(sysPermCode, originalSysPermCode, SysPermCode::getParentId)) { - if (getById(sysPermCode.getParentId()) == null) { - errorMessage = "数据验证失败,关联的上级权限字并不存在,请刷新后重试!"; - break; - } + if (StringUtils.isNotBlank(permIdListString)) { + Set permIdSet = Arrays.stream( + permIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysPermService.existAllPrimaryKeys(permIdSet)) { + return CallResult.error("数据验证失败,存在不合法的权限资源,请刷新后重试!"); } - if (StringUtils.isNotBlank(permIdListString)) { - Set permIdSet = Arrays.stream( - permIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); - if (!sysPermService.existUniqueKeyList("permId", permIdSet)) { - errorMessage = "数据验证失败,存在不合法的权限资源,请刷新后重试!"; - break; - } - jsonObject = new JSONObject(); - jsonObject.put("permIdSet", permIdSet); - } - } while (false); - return VerifyResult.create(errorMessage, jsonObject); + jsonObject = new JSONObject(); + jsonObject.put("permIdSet", permIdSet); + } + return CallResult.ok(jsonObject); } } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermModuleService.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermModuleService.java index d9b21632..23680c5c 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermModuleService.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermModuleService.java @@ -1,8 +1,8 @@ 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.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.upms.dao.SysPermModuleMapper; import com.orange.admin.upms.model.SysPerm; @@ -18,10 +18,10 @@ import java.util.List; * 权限资源模块数据服务类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Service -public class SysPermModuleService extends BaseService { +public class SysPermModuleService extends BaseBizService { @Autowired private SysPermModuleMapper sysPermModuleMapper; @@ -46,7 +46,7 @@ public class SysPermModuleService extends BaseService { * @param sysPermModule 新增的权限资源模块对象。 * @return 新增后的权限资源模块对象。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public SysPermModule saveNew(SysPermModule sysPermModule) { sysPermModule.setModuleId(idGenerator.nextLongId()); sysPermModule.setCreateTime(new Date()); @@ -58,11 +58,11 @@ public class SysPermModuleService extends BaseService { /** * 更新权限资源模块对象。 * - * @param sysPermModule 更新的权限资源模块对象。 + * @param sysPermModule 更新的权限资源模块对象。 * @param originalSysPermModule 原有的权限资源模块对象。 * @return 更新成功返回true,否则false */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean update(SysPermModule sysPermModule, SysPermModule originalSysPermModule) { sysPermModule.setCreateTime(originalSysPermModule.getCreateTime()); sysPermModule.setDeletedFlag(GlobalDeletedFlag.NORMAL); @@ -75,7 +75,7 @@ public class SysPermModuleService extends BaseService { * @param moduleId 权限资源模块主键Id。 * @return 删除成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean remove(Long moduleId) { SysPermModule permModule = new SysPermModule(); permModule.setModuleId(moduleId); diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermService.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermService.java index 99fc7d75..5950960c 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermService.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermService.java @@ -2,11 +2,12 @@ package com.orange.admin.upms.service; import cn.hutool.core.util.ObjectUtil; 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.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.object.VerifyResult; +import com.orange.admin.common.core.object.CallResult; import com.orange.admin.upms.dao.SysPermCodePermMapper; import com.orange.admin.upms.dao.SysPermMapper; import com.orange.admin.upms.model.SysPerm; @@ -29,10 +30,10 @@ import java.util.stream.Collectors; * 权限资源数据服务类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Service -public class SysPermService extends BaseService { +public class SysPermService extends BaseBizService { @Autowired private SysPermMapper sysPermMapper; @@ -61,7 +62,7 @@ public class SysPermService extends BaseService { * @param perm 新增的权限资源对象。 * @return 新增后的权限资源对象。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public SysPerm saveNew(SysPerm perm) { perm.setPermId(idGenerator.nextLongId()); perm.setCreateTime(new Date()); @@ -73,11 +74,11 @@ public class SysPermService extends BaseService { /** * 更新权限资源对象。 * - * @param perm 更新的权限资源对象。 - * @param originalPerm 更新的权限资源对象。 + * @param perm 更新的权限资源对象。 + * @param originalPerm 原有的权限资源对象。 * @return 更新成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean update(SysPerm perm, SysPerm originalPerm) { perm.setCreateTime(originalPerm.getCreateTime()); perm.setDeletedFlag(GlobalDeletedFlag.NORMAL); @@ -90,7 +91,7 @@ public class SysPermService extends BaseService { * @param permId 权限资源主键Id。 * @return 删除成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean remove(Long permId) { SysPerm perm = new SysPerm(); perm.setPermId(permId); @@ -112,7 +113,7 @@ public class SysPermService extends BaseService { */ public List getPermListWithRelation(SysPerm sysPermFilter) { Example e = new Example(SysPerm.class); - e.orderBy("permId"); + e.orderBy("showOrder"); Example.Criteria c = e.createCriteria(); if (ObjectUtil.isNotNull(sysPermFilter.getModuleId())) { c.andEqualTo("moduleId", sysPermFilter.getModuleId()); @@ -123,7 +124,7 @@ public class SysPermService extends BaseService { c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL); List permList = sysPermMapper.selectByExample(e); // 这里因为权限只有字典数据,所以仅仅做字典关联。 - this.buildRelationForDataList(permList, true); + this.buildRelationForDataList(permList, MyRelationParam.dictOnly(), null); return permList; } @@ -131,15 +132,15 @@ public class SysPermService extends BaseService { * 获取指定用户的权限资源集合,并存储于缓存,从而提升后续读取效率。 * * @param sessionId 用户会话Id。 - * @param userId 用户主键Id。 + * @param userId 用户主键Id。 * @return 当前用户权限集合。 */ - @Cacheable(value = "UserPermissionCache", key = "#sessionId", unless = "#result == null") + @Cacheable(value = "USER_PERMISSION_CACHE", key = "#sessionId", unless = "#result == null") public Set getCacheableSysPermSetByUserId(String sessionId, Long userId) { // 这里可以防止非法的userId直接访问权限受限的url SysUser user = sysUserService.getById(userId); if (user == null) { - return null; + return new HashSet<>(1); } // 管理员账户返回空对象,便于缓存的统一处理。 return user.getUserType() == SysUserType.TYPE_ADMIN @@ -150,11 +151,11 @@ public class SysPermService extends BaseService { * 将指定用户的指定会话的权限集合存入缓存。 * * @param sessionId 会话Id。 - * @param userId 用户主键Id。 - * @param isAdmin 是否是管理员。 + * @param userId 用户主键Id。 + * @param isAdmin 是否是管理员。 * @return 查询并缓存后的权限集合。 */ - @CachePut(value = "UserPermissionCache", key = "#sessionId") + @CachePut(value = "USER_PERMISSION_CACHE", key = "#sessionId") public Set putUserSysPermCache(String sessionId, Long userId, boolean isAdmin) { // 管理员账户返回空对象,便于缓存的统一处理。 return isAdmin ? new HashSet<>(1) : this.getSysPermSetByUserId(userId); @@ -165,7 +166,7 @@ public class SysPermService extends BaseService { * * @param sessionId 会话Id。 */ - @CacheEvict(value = "UserPermissionCache", key = "#sessionId") + @CacheEvict(value = "USER_PERMISSION_CACHE", key = "#sessionId") public void removeUserSysPermCache(String sessionId) { // 空实现即可,只是通过注解将当前sessionId从cache中删除。 } @@ -185,7 +186,7 @@ public class SysPermService extends BaseService { * 获取与指定权限字关联的权限资源列表。 * * @param permCodeId 关联的权限字主键Id。 - * @param orderBy 排序参数。 + * @param orderBy 排序参数。 * @return 与指定权限字Id关联的权限资源列表。 */ public List getPermListByPermCodeId(Long permCodeId, String orderBy) { @@ -206,8 +207,8 @@ public class SysPermService extends BaseService { * 获取指定用户的用户权限关联列表。 * * @param loginName 精确匹配用户登录名。 - * @param moduleId 精确匹配权限模块Id。 - * @param url 模糊匹配的url过滤条件。 + * @param moduleId 精确匹配权限模块Id。 + * @param url 模糊匹配的url过滤条件。 * @return 用户权限关联列表。 */ public List> getUserPermListByFilter(String loginName, Long moduleId, String url) { @@ -237,24 +238,20 @@ public class SysPermService extends BaseService { /** * 验证权限资源对象关联的数据是否都合法。 * - * @param sysPerm 当前操作的对象。 + * @param sysPerm 当前操作的对象。 * @param originalSysPerm 原有对象。 * @return 验证结果。 */ - public VerifyResult verifyRelatedData(SysPerm sysPerm, SysPerm originalSysPerm) { - String errorMessage = null; + public CallResult verifyRelatedData(SysPerm sysPerm, SysPerm originalSysPerm) { JSONObject jsonObject = null; - do { - if (this.needToVerify(sysPerm, originalSysPerm, SysPerm::getModuleId)) { - SysPermModule permModule = sysPermModuleService.getById(sysPerm.getModuleId()); - if (permModule == null) { - errorMessage = "数据验证失败,关联的权限模块Id并不存在,请刷新后重试!"; - break; - } - jsonObject = new JSONObject(); - jsonObject.put("permModule", permModule); + if (this.needToVerify(sysPerm, originalSysPerm, SysPerm::getModuleId)) { + SysPermModule permModule = sysPermModuleService.getById(sysPerm.getModuleId()); + if (permModule == null) { + return CallResult.error("数据验证失败,关联的权限模块Id并不存在,请刷新后重试!"); } - } while (false); - return VerifyResult.create(errorMessage, jsonObject); + jsonObject = new JSONObject(); + jsonObject.put("permModule", permModule); + } + return CallResult.ok(jsonObject); } } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermWhitelistService.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermWhitelistService.java index d5e8063a..3197e539 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermWhitelistService.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysPermWhitelistService.java @@ -1,7 +1,7 @@ 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.service.BaseService; import com.orange.admin.upms.dao.SysPermWhitelistMapper; import com.orange.admin.upms.model.SysPermWhitelist; import org.springframework.beans.factory.annotation.Autowired; @@ -12,10 +12,10 @@ import org.springframework.stereotype.Service; * 白名单中的权限资源,可以不受权限控制,任何用户皆可访问,一般用于常用的字典数据列表接口。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Service -public class SysPermWhitelistService extends BaseService { +public class SysPermWhitelistService extends BaseBizService { @Autowired private SysPermWhitelistMapper sysPermWhitelistMapper; @@ -29,5 +29,4 @@ public class SysPermWhitelistService extends BaseService mapper() { return sysPermWhitelistMapper; } - } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysRoleService.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysRoleService.java index 11d55a31..696e91eb 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysRoleService.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysRoleService.java @@ -1,12 +1,12 @@ package com.orange.admin.upms.service; 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.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.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.SysRoleMenuMapper; 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.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import tk.mybatis.mapper.entity.Example; import java.util.*; import java.util.stream.Collectors; @@ -27,10 +26,10 @@ import java.util.stream.Collectors; * 角色数据服务类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Service -public class SysRoleService extends BaseService { +public class SysRoleService extends BaseBizService { @Autowired private SysRoleMapper sysRoleMapper; @@ -56,11 +55,11 @@ public class SysRoleService extends BaseService { /** * 保存新增的角色对象。 * - * @param role 新增的角色对象。 + * @param role 新增的角色对象。 * @param menuIdSet 菜单Id列表。 * @return 新增后的角色对象。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public SysRole saveNew(SysRole role, Set menuIdSet) { role.setRoleId(idGenerator.nextLongId()); TokenData tokenData = TokenData.takeFromRequest(); @@ -87,12 +86,12 @@ public class SysRoleService extends BaseService { /** * 更新角色对象。 * - * @param role 更新的角色对象。 + * @param role 更新的角色对象。 * @param originalRole 原有的角色对象。 - * @param menuIdSet 菜单Id列表。 + * @param menuIdSet 菜单Id列表。 * @return 更新成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean update(SysRole role, SysRole originalRole, Set menuIdSet) { SysRole updateRole = new SysRole(); BeanUtils.copyProperties(role, updateRole, "createUserId", "createUsername", "createTime"); @@ -101,9 +100,9 @@ public class SysRoleService extends BaseService { if (sysRoleMapper.updateByPrimaryKeySelective(updateRole) != 1) { return false; } - Example e = new Example(SysRoleMenu.class); - e.createCriteria().andEqualTo("roleId", role.getRoleId()); - sysRoleMenuMapper.deleteByExample(e); + SysRoleMenu deletedRoleMenu = new SysRoleMenu(); + deletedRoleMenu.setRoleId(role.getRoleId()); + sysRoleMenuMapper.delete(deletedRoleMenu); if (menuIdSet != null) { List roleMenuList = new LinkedList<>(); for (Long menuId : menuIdSet) { @@ -123,7 +122,7 @@ public class SysRoleService extends BaseService { * @param roleId 角色主键Id。 * @return 删除成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean remove(Long roleId) { SysRole role = new SysRole(); role.setRoleId(roleId); @@ -131,19 +130,19 @@ public class SysRoleService extends BaseService { if (sysRoleMapper.updateByPrimaryKeySelective(role) != 1) { return false; } - Example sysRoleMenuExample = new Example(SysRoleMenu.class); - sysRoleMenuExample.createCriteria().andEqualTo("roleId", roleId); - sysRoleMenuMapper.deleteByExample(sysRoleMenuExample); - Example sysUserRoleExample = new Example(SysUserRole.class); - sysUserRoleExample.createCriteria().andEqualTo("roleId", roleId); - sysUserRoleMapper.deleteByExample(sysUserRoleExample); + SysRoleMenu roleMenu = new SysRoleMenu(); + roleMenu.setRoleId(roleId); + sysRoleMenuMapper.delete(roleMenu); + SysUserRole userRole = new SysUserRole(); + userRole.setRoleId(roleId); + sysUserRoleMapper.delete(userRole); return true; } /** * 获取角色列表。 * - * @param filter 角色过滤对象。 + * @param filter 角色过滤对象。 * @param orderBy 排序参数。 * @return 角色列表。 */ @@ -151,27 +150,6 @@ public class SysRoleService extends BaseService { 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 sysRoleMenuList = sysRoleMenuMapper.selectByExample(e); - if (sysRoleMenuList.size() > 0) { - List menuIdList = - sysRoleMenuList.stream().map(SysRoleMenu::getMenuId).collect(Collectors.toList()); - sysRole.setMenuIdList(menuIdList); - } - } - return sysRole; - } - /** * 通过权限字Id获取拥有改权限的所有角色。 * 开发人员调试用接口。 @@ -199,7 +177,7 @@ public class SysRoleService extends BaseService { * * @param userRoleList 用户角色关系数据列表。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public void addUserRoleList(List userRoleList) { sysUserRoleMapper.addUserRoleList(userRoleList); } @@ -211,7 +189,7 @@ public class SysRoleService extends BaseService { * @param userId 用户主键Id。 * @return 移除成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean removeUserRole(Long roleId, Long userId) { SysUserRole userRole = new SysUserRole(); userRole.setRoleId(roleId); @@ -222,26 +200,22 @@ public class SysRoleService extends BaseService { /** * 验证角色对象关联的数据是否都合法。 * - * @param sysRole 当前操作的对象。 - * @param originalSysRole 原有对象。 + * @param sysRole 当前操作的对象。 + * @param originalSysRole 原有对象。 * @param menuIdListString 逗号分隔的menuId列表。 * @return 验证结果。 */ - public VerifyResult verifyRelatedData(SysRole sysRole, SysRole originalSysRole, String menuIdListString) { - String errorMessage = null; + public CallResult verifyRelatedData(SysRole sysRole, SysRole originalSysRole, String menuIdListString) { JSONObject jsonObject = null; - do { - if (StringUtils.isNotBlank(menuIdListString)) { - Set menuIdSet = Arrays.stream( - menuIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); - if (!sysMenuService.existUniqueKeyList("menuId", menuIdSet)) { - errorMessage = "数据验证失败,存在不合法的菜单权限,请刷新后重试!"; - break; - } - jsonObject = new JSONObject(); - jsonObject.put("menuIdSet", menuIdSet); + if (StringUtils.isNotBlank(menuIdListString)) { + Set menuIdSet = Arrays.stream( + menuIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysMenuService.existAllPrimaryKeys(menuIdSet)) { + return CallResult.error("数据验证失败,存在不合法的菜单权限,请刷新后重试!"); } - } while (false); - return VerifyResult.create(errorMessage, jsonObject); + jsonObject = new JSONObject(); + jsonObject.put("menuIdSet", menuIdSet); + } + return CallResult.ok(jsonObject); } } diff --git a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysUserService.java b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysUserService.java index bc702cc0..ba5be8df 100644 --- a/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysUserService.java +++ b/orange-admin-service/application/src/main/java/com/orange/admin/upms/service/SysUserService.java @@ -4,13 +4,14 @@ import com.alibaba.fastjson.JSONObject; import com.orange.admin.upms.dao.*; import com.orange.admin.upms.model.*; 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.constant.GlobalDeletedFlag; import com.orange.admin.common.core.object.TokenData; 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.biz.base.service.BaseBizService; import com.orange.admin.common.biz.util.BasicIdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -26,10 +27,10 @@ import java.util.stream.Collectors; * 用户管理数据操作服务类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Service -public class SysUserService extends BaseService { +public class SysUserService extends BaseBizService { @Autowired private SysUserMapper sysUserMapper; @@ -77,7 +78,7 @@ public class SysUserService extends BaseService { * @param passwdSalt 密码的盐。 * @return 新增后的用户对象。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public SysUser saveNew(SysUser user, Set roleIdSet, Set dataPermIdSet, String passwdSalt) { user.setUserId(idGenerator.nextLongId()); user.setPassword(MyCommonUtil.encrptedPassword(user.getPassword(), passwdSalt)); @@ -116,13 +117,13 @@ public class SysUserService extends BaseService { /** * 更新用户对象。 * - * @param user 更新的用户对象。 - * @param originalUser 原有的用户对象。 - * @param roleIdSet 用户角色Id列表。 - * @param dataPermIdSet 数据权限Id集合。 + * @param user 更新的用户对象。 + * @param originalUser 原有的用户对象。 + * @param roleIdSet 用户角色Id列表。 + * @param dataPermIdSet 数据权限Id集合。 * @return 更新成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean update(SysUser user, SysUser originalUser, Set roleIdSet, Set dataPermIdSet) { user.setLoginName(originalUser.getLoginName()); user.setPassword(originalUser.getPassword()); @@ -134,9 +135,9 @@ public class SysUserService extends BaseService { return false; } // 先删除原有的User-Role关联关系,再重新插入新的关联关系 - Example e = new Example(SysUserRole.class); - e.createCriteria().andEqualTo("userId", user.getUserId()); - sysUserRoleMapper.deleteByExample(e); + SysUserRole deletedUserRole = new SysUserRole(); + deletedUserRole.setUserId(user.getUserId()); + sysUserRoleMapper.delete(deletedUserRole); if (CollectionUtils.isNotEmpty(roleIdSet)) { List userRoleList = new LinkedList<>(); for (Long roleId : roleIdSet) { @@ -148,9 +149,9 @@ public class SysUserService extends BaseService { sysUserRoleMapper.insertList(userRoleList); } // 先删除原有的DataPerm-User关联关系,在重新插入新的关联关系 - Example e2 = new Example(SysDataPermUser.class); - e2.createCriteria().andEqualTo("userId", user.getUserId()); - sysDataPermUserMapper.deleteByExample(e2); + SysDataPermUser deletedDataPermUser = new SysDataPermUser(); + deletedDataPermUser.setUserId(user.getUserId()); + sysDataPermUserMapper.delete(deletedDataPermUser); if (CollectionUtils.isNotEmpty(dataPermIdSet)) { List dataPermUserList = new LinkedList<>(); for (Long dataPermId : dataPermIdSet) { @@ -166,16 +167,16 @@ public class SysUserService extends BaseService { /** * 重置用户密码。 - * @param userId 用户主键Id。 + * @param userId 用户主键Id。 * @param defaultPasswd 缺省密码。 - * @param passwdSalt 密码的盐。 + * @param passwdSalt 密码的盐。 * @return 成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean resetPassword(Long userId, String defaultPasswd, String passwdSalt) { Example e = new Example(SysUser.class); - e.createCriteria().andEqualTo("userId", userId); - e.createCriteria().andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL); + e.createCriteria().andEqualTo(super.idFieldName, userId); + e.createCriteria().andEqualTo(super.deletedFlagFieldName, GlobalDeletedFlag.NORMAL); SysUser updatedUser = new SysUser(); updatedUser.setPassword(MyCommonUtil.encrptedPassword(defaultPasswd, passwdSalt)); return sysUserMapper.updateByExampleSelective(updatedUser, e) == 1; @@ -187,12 +188,12 @@ public class SysUserService extends BaseService { * @param userId 主键Id。 * @return 成功返回true,否则false。 */ - @Transactional + @Transactional(rollbackFor = Exception.class) public boolean remove(Long userId) { Example sysUserExample = new Example(SysUser.class); Example.Criteria c = sysUserExample.createCriteria(); - c.andEqualTo("userId", userId); - c.andEqualTo("deletedFlag", GlobalDeletedFlag.NORMAL); + c.andEqualTo(super.idFieldName, userId); + c.andEqualTo(super.deletedFlagFieldName, GlobalDeletedFlag.NORMAL); // 这里先删除主数据 SysUser deletedObject = new SysUser(); deletedObject.setDeletedFlag(GlobalDeletedFlag.DELETED); @@ -200,36 +201,20 @@ public class SysUserService extends BaseService { return false; } // 这里可继续删除关联数据。 - Example userRoleExample = new Example(SysUserRole.class); - userRoleExample.createCriteria().andEqualTo("userId", userId); - sysUserRoleMapper.deleteByExample(userRoleExample); - Example dataPermUserExample = new Example(SysDataPermUser.class); - dataPermUserExample.createCriteria().andEqualTo("userId", userId); - sysDataPermUserMapper.deleteByExample(dataPermUserExample); + SysUserRole userRole = new SysUserRole(); + userRole.setUserId(userId); + sysUserRoleMapper.delete(userRole); + SysDataPermUser dataPermUser = new SysDataPermUser(); + dataPermUser.setUserId(userId); + sysDataPermUserMapper.delete(dataPermUser); 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)方法。 * - * @param filter 过滤对象。 + * @param filter 过滤对象。 * @param orderBy 排序参数。 * @return 查询结果集。 */ @@ -248,15 +233,15 @@ public class SysUserService extends BaseService { public List getSysUserListWithRelation(SysUser filter, String orderBy) { List resultList = sysUserMapper.getSysUserList(filter, orderBy); Map> criteriaMap = buildAggregationAdditionalWhereCriteria(); - this.buildAllRelationForDataList(resultList, false, criteriaMap); + this.buildRelationForDataList(resultList, MyRelationParam.normal(), criteriaMap); return resultList; } /** * 获取指定角色的用户列表。 * - * @param roleId 角色主键Id。 - * @param filter 用户过滤对象。 + * @param roleId 角色主键Id。 + * @param filter 用户过滤对象。 * @param orderBy 排序参数。 * @return 用户列表。 */ @@ -267,8 +252,8 @@ public class SysUserService extends BaseService { /** * 获取不属于指定角色的用户列表。 * - * @param roleId 角色主键Id。 - * @param filter 用户过滤对象。 + * @param roleId 角色主键Id。 + * @param filter 用户过滤对象。 * @param orderBy 排序参数。 * @return 用户列表。 */ @@ -280,8 +265,8 @@ public class SysUserService extends BaseService { * 获取指定数据权限的用户列表。 * * @param dataPermId 数据权限主键Id。 - * @param filter 用户过滤对象。 - * @param orderBy 排序参数。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 * @return 用户列表。 */ public List getSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy) { @@ -292,8 +277,8 @@ public class SysUserService extends BaseService { * 获取不属于指定数据权限的用户列表。 * * @param dataPermId 数据权限主键Id。 - * @param filter 用户过滤对象。 - * @param orderBy 排序参数。 + * @param filter 用户过滤对象。 + * @param orderBy 排序参数。 * @return 用户列表。 */ public List getNotInSysUserListByDataPermId(Long dataPermId, SysUser filter, String orderBy) { @@ -309,34 +294,27 @@ public class SysUserService extends BaseService { * @param dataPermIdListString 逗号分隔的数据权限Id列表字符串。 * @return 验证结果。 */ - public VerifyResult verifyRelatedData( + public CallResult verifyRelatedData( SysUser sysUser, SysUser originalSysUser, String roleIdListString, String dataPermIdListString) { - String errorMessage = null; JSONObject jsonObject = new JSONObject(); - do { - if (StringUtils.isBlank(roleIdListString)) { - errorMessage = "数据验证失败,用户的角色数据不能为空!"; - break; - } - Set roleIdSet = Arrays.stream( - roleIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); - if (!sysRoleService.existUniqueKeyList("roleId", roleIdSet)) { - errorMessage = "数据验证失败,存在不合法的用户角色,请刷新后重试!"; - break; - } - jsonObject.put("roleIdSet", roleIdSet); - if (StringUtils.isBlank(dataPermIdListString)) { - errorMessage = "数据验证失败,用户的数据权限不能为空!"; - break; - } - Set dataPermIdSet = Arrays.stream( - dataPermIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); - if (!sysDataPermService.existUniqueKeyList("dataPermId", dataPermIdSet)) { - errorMessage = "数据验证失败,存在不合法的数据权限,请刷新后重试!"; - break; - } - jsonObject.put("dataPermIdSet", dataPermIdSet); - } while (false); - return VerifyResult.create(errorMessage, jsonObject); + if (StringUtils.isBlank(roleIdListString)) { + return CallResult.error("数据验证失败,用户的角色数据不能为空!"); + } + Set roleIdSet = Arrays.stream( + roleIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysRoleService.existAllPrimaryKeys(roleIdSet)) { + return CallResult.error("数据验证失败,存在不合法的用户角色,请刷新后重试!"); + } + jsonObject.put("roleIdSet", roleIdSet); + if (StringUtils.isBlank(dataPermIdListString)) { + return CallResult.error("数据验证失败,用户的数据权限不能为空!"); + } + Set dataPermIdSet = Arrays.stream( + dataPermIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet()); + if (!sysDataPermService.existAllPrimaryKeys(dataPermIdSet)) { + return CallResult.error("数据验证失败,存在不合法的数据权限,请刷新后重试!"); + } + jsonObject.put("dataPermIdSet", dataPermIdSet); + return CallResult.ok(jsonObject); } } diff --git a/orange-admin-service/application/src/main/resources/application.yml b/orange-admin-service/application/src/main/resources/application.yml index bcea20fb..4a6b612b 100644 --- a/orange-admin-service/application/src/main/resources/application.yml +++ b/orange-admin-service/application/src/main/resources/application.yml @@ -13,7 +13,7 @@ server: # spring相关配置 spring: application: - name: application + name: app profiles: active: dev servlet: @@ -62,7 +62,11 @@ management: web: exposure: include: '*' + jmx: + exposure: + include: '*' endpoint: + # 与中间件相关的健康详情也会被展示 health: show-details: always configprops: @@ -85,7 +89,7 @@ spring: username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver - name: application + name: app initialSize: 10 minIdle: 10 maxActive: 50 @@ -105,7 +109,7 @@ spring: web-stat-filter: enabled: true url-pattern: /* - exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" + exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*,/actuator/*" stat-view-servlet: enabled: true urlPattern: /druid/* @@ -142,7 +146,7 @@ spring: username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver - name: application + name: app initialSize: 10 minIdle: 10 maxActive: 50 @@ -162,7 +166,7 @@ spring: web-stat-filter: enabled: true url-pattern: /* - exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" + exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*,/actuator/*" stat-view-servlet: enabled: true urlPattern: /druid/* diff --git a/orange-admin-service/application/src/main/resources/generator/generatorConfig.xml b/orange-admin-service/application/src/main/resources/generator/generatorConfig.xml index 5ca2e428..c34aba16 100644 --- a/orange-admin-service/application/src/main/resources/generator/generatorConfig.xml +++ b/orange-admin-service/application/src/main/resources/generator/generatorConfig.xml @@ -14,7 +14,7 @@ diff --git a/orange-admin-service/application/src/test/java/com/orange/admin/MyApplicationTests.java b/orange-admin-service/application/src/test/java/com/orange/admin/MyApplicationTests.java deleted file mode 100644 index cbe1bf5c..00000000 --- a/orange-admin-service/application/src/test/java/com/orange/admin/MyApplicationTests.java +++ /dev/null @@ -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() { - } - -} diff --git a/orange-admin-service/areacode.sql b/orange-admin-service/areacode.sql index 3f07e698..12f25394 100644 --- a/orange-admin-service/areacode.sql +++ b/orange-admin-service/areacode.sql @@ -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`; CREATE TABLE `zz_area_code` ( diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/advice/MyControllerAdvice.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/advice/MyControllerAdvice.java index 743382be..b8d65c66 100644 --- a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/advice/MyControllerAdvice.java +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/advice/MyControllerAdvice.java @@ -12,7 +12,7 @@ import java.util.Date; * Controller的环绕拦截类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @ControllerAdvice public class MyControllerAdvice { diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/advice/MyExceptionHandler.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/advice/MyExceptionHandler.java index 2726fc7d..b032ca57 100644 --- a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/advice/MyExceptionHandler.java +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/advice/MyExceptionHandler.java @@ -1,9 +1,12 @@ 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.exception.RedisCacheAccessException; import com.orange.admin.common.core.object.ResponseResult; +import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.exceptions.PersistenceException; import org.springframework.dao.DataAccessException; import org.springframework.dao.DuplicateKeyException; @@ -19,26 +22,86 @@ import java.util.concurrent.TimeoutException; * 用不同的函数,处理不同类型的异常。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @RestControllerAdvice public class MyExceptionHandler { + /** + * 通用异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ @ExceptionHandler(value = Exception.class) - public ResponseResult exceptionHandle(Exception ex, HttpServletRequest request) { + public ResponseResult exceptionHandle(Exception ex, HttpServletRequest request) { log.error("Unhandled exception from URL [" + request.getRequestURI() + "]", ex); return ResponseResult.error(ErrorCodeEnum.UNHANDLED_EXCEPTION); } + /** + * 无效的实体对象异常。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ + @ExceptionHandler(value = InvalidDataModelException.class) + public ResponseResult 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 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 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) - public ResponseResult duplicateKeyExceptionHandle(Exception ex, HttpServletRequest request) { + public ResponseResult duplicateKeyExceptionHandle(Exception ex, HttpServletRequest request) { log.error("DuplicateKeyException exception from URL [" + request.getRequestURI() + "]", ex); return ResponseResult.error(ErrorCodeEnum.DUPLICATED_UNIQUE_KEY); } + /** + * 数据访问失败异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ @ExceptionHandler(value = DataAccessException.class) - public ResponseResult dataAccessExceptionHandle(Exception ex, HttpServletRequest request) { + public ResponseResult dataAccessExceptionHandle(Exception ex, HttpServletRequest request) { log.error("DataAccessException exception from URL [" + request.getRequestURI() + "]", ex); if (ex.getCause() instanceof PersistenceException && ex.getCause().getCause() instanceof PermissionDeniedDataAccessException) { @@ -47,8 +110,15 @@ public class MyExceptionHandler { return ResponseResult.error(ErrorCodeEnum.DATA_ACCESS_FAILED); } + /** + * Redis缓存访问异常处理方法。 + * + * @param ex 异常对象。 + * @param request http请求。 + * @return 应答对象。 + */ @ExceptionHandler(value = RedisCacheAccessException.class) - public ResponseResult redisCacheAccessExceptionHandle(Exception ex, HttpServletRequest request) { + public ResponseResult redisCacheAccessExceptionHandle(Exception ex, HttpServletRequest request) { log.error("RedisCacheAccessException exception from URL [" + request.getRequestURI() + "]", ex); if (ex.getCause() instanceof TimeoutException) { return ResponseResult.error(ErrorCodeEnum.REDIS_CACHE_ACCESS_TIMEOUT); diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/aop/DisableDataPermAspect.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/aop/DisableDataPermAspect.java new file mode 100644 index 00000000..730dce63 --- /dev/null +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/aop/DisableDataPermAspect.java @@ -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); + } + } +} diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/base/service/BaseBizService.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/base/service/BaseBizService.java new file mode 100644 index 00000000..987b74b1 --- /dev/null +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/base/service/BaseBizService.java @@ -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 Model对象的类型。 + * @param Model对象主键的类型。 + * @author Stephen.Liu + * @date 2020-05-24 + */ +@Slf4j +public abstract class BaseBizService extends BaseService { + +} diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/config/CommonBizConfig.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/config/CommonBizConfig.java index 124f2db7..ab317cfd 100644 --- a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/config/CommonBizConfig.java +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/config/CommonBizConfig.java @@ -8,7 +8,7 @@ import org.springframework.context.annotation.Configuration; * 应用程序自定义的通用属性配置文件。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Data @Configuration diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/config/FastjsonConfig.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/config/FastjsonConfig.java index dc632d1d..8760b43f 100644 --- a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/config/FastjsonConfig.java +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/config/FastjsonConfig.java @@ -6,12 +6,16 @@ import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import org.springframework.boot.autoconfigure.http.HttpMessageConverters; import org.springframework.context.annotation.Bean; 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 - * @date 2020-04-11 + * @date 2020-05-24 */ @Configuration public class FastjsonConfig { @@ -19,9 +23,15 @@ public class FastjsonConfig { @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); + List supportedMediaTypes = new ArrayList<>(); + supportedMediaTypes.add(MediaType.APPLICATION_JSON); + supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED); + fastConverter.setSupportedMediaTypes(supportedMediaTypes); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures( - SerializerFeature.PrettyFormat, SerializerFeature.DisableCircularReferenceDetect); + SerializerFeature.PrettyFormat, + SerializerFeature.DisableCircularReferenceDetect, + SerializerFeature.IgnoreNonFieldGetter); fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss"); fastConverter.setFastJsonConfig(fastJsonConfig); return new HttpMessageConverters(fastConverter); diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/config/TomcatConfig.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/config/TomcatConfig.java index 26c55368..bed9c2d0 100644 --- a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/config/TomcatConfig.java +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/config/TomcatConfig.java @@ -10,7 +10,7 @@ import org.springframework.context.annotation.Configuration; * tomcat配置对象。当前配置禁用了PUT和DELETE方法,防止渗透攻击。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Configuration public class TomcatConfig { diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/constant/Subject.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/constant/Subject.java index 1e57c95c..5b947a60 100644 --- a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/constant/Subject.java +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/constant/Subject.java @@ -3,6 +3,12 @@ package com.orange.admin.common.biz.constant; import java.util.HashMap; import java.util.Map; +/** + * 科目常量字典对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ public final class Subject { /** @@ -18,7 +24,7 @@ public final class Subject { */ public static final int ENGLISH = 2; - public static final Map DICT_MAP = new HashMap<>(3); + private static final Map DICT_MAP = new HashMap<>(3); static { DICT_MAP.put(CHINESE, "语文"); DICT_MAP.put(MATH, "数学"); @@ -31,8 +37,8 @@ public final class Subject { * @param value 待验证的参数值。 * @return 合法返回true,否则false。 */ - public static boolean isValid(int value) { - return DICT_MAP.containsKey(value); + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); } /** diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/constant/YesNo.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/constant/YesNo.java index b9eb41e6..8a35e282 100644 --- a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/constant/YesNo.java +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/constant/YesNo.java @@ -3,6 +3,12 @@ package com.orange.admin.common.biz.constant; import java.util.HashMap; import java.util.Map; +/** + * 是否常量字典对象。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ public final class YesNo { /** @@ -14,7 +20,7 @@ public final class YesNo { */ public static final int NO = 0; - public static final Map DICT_MAP = new HashMap<>(2); + private static final Map DICT_MAP = new HashMap<>(2); static { DICT_MAP.put(YES, "是"); DICT_MAP.put(NO, "否"); @@ -26,8 +32,8 @@ public final class YesNo { * @param value 待验证的参数值。 * @return 合法返回true,否则false。 */ - public static boolean isValid(int value) { - return DICT_MAP.containsKey(value); + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); } /** diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/interceptor/AccessInterceptor.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/interceptor/AccessInterceptor.java index e72ec47c..8cc7a470 100644 --- a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/interceptor/AccessInterceptor.java +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/interceptor/AccessInterceptor.java @@ -13,7 +13,7 @@ import javax.servlet.http.HttpServletResponse; * 服务访问日志的拦截器,主要完成记录接口调用时长。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j public class AccessInterceptor implements HandlerInterceptor { @@ -33,6 +33,7 @@ public class AccessInterceptor implements HandlerInterceptor { @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + // 这里需要加注释,否则sonar不happy。 } @Override diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/interceptor/MyRequestArgumentResolver.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/interceptor/MyRequestArgumentResolver.java index 6ba18e50..b05518ee 100644 --- a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/interceptor/MyRequestArgumentResolver.java +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/interceptor/MyRequestArgumentResolver.java @@ -9,9 +9,11 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.core.MethodParameter; import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; import org.springframework.lang.NonNull; import org.springframework.web.bind.support.WebDataBinderFactory; 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.ModelAndViewContainer; @@ -27,7 +29,7 @@ import java.util.*; * 2、多个对象需要封装到一个对象里才可以用@RequestBody接收。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver { @@ -47,10 +49,10 @@ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver } /** - * 设置支持的方法参数类型 + * 设置支持的方法参数类型。 * - * @param parameter 方法参数 - * @return 支持的类型 + * @param parameter 方法参数。 + * @return 支持的类型。 */ @Override public boolean supportsParameter(@NonNull MethodParameter parameter) { @@ -58,10 +60,9 @@ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver } /** - * 参数解析,利用fastjson - * 注意:非基本类型返回null会报空指针异常,要通过反射或者JSON工具类创建一个空对象 + * 参数解析,利用fastjson。 + * 注意:非基本类型返回null会报空指针异常,要通过反射或者JSON工具类创建一个空对象。 */ - @SuppressWarnings("unchecked") @Override public Object resolveArgument( @NonNull MethodParameter parameter, @@ -73,7 +74,7 @@ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver if (!HttpMethod.POST.name().equals(servletRequest.getMethod())) { 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( "Only application/json Content-Type can be applied @MyRequestBody annotation!"); } @@ -106,37 +107,41 @@ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver // 基本类型包装类 if (isBasicDataTypes(parameterType)) { return parseBasicTypeWrapper(parameterType, value); - // 字符串类型 } else if (parameterType == String.class) { + // 字符串类型 return value.toString(); } + // 数组类型 if (value instanceof JSONArray) { - Object o; - 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) o).addAll(((JSONArray) value).toJavaList(parameterType)); - return o; + return parseArray(parameterType, parameterAnnotation.elementType(), key, value); } // 其他复杂对象 - 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) o).addAll(((JSONArray) value).toJavaList(parameterType)); + return o; } - /** - * 基本类型解析 - */ private Object parsePrimitive(String parameterTypeName, Object value) { final String booleanTypeName = "boolean"; if (booleanTypeName.equals(parameterTypeName)) { @@ -173,9 +178,6 @@ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver return null; } - /** - * 基本类型包装类解析 - */ private Object parseBasicTypeWrapper(Class parameterType, Object value) { if (Number.class.isAssignableFrom(parameterType)) { if (value instanceof String) { @@ -203,30 +205,20 @@ public class MyRequestArgumentResolver implements HandlerMethodArgumentResolver return null; } - /** - * 判断是否为基本数据类型包装类 - */ private boolean isBasicDataTypes(Class clazz) { return classSet.contains(clazz); } - /** - * 获取请求体JSON字符串 - */ - private JSONObject getRequestBody(NativeWebRequest webRequest) { + private JSONObject getRequestBody(NativeWebRequest webRequest) throws IOException { 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) { - try { - String jsonBody = IOUtils.toString(servletRequest.getReader()); - jsonObject = JSON.parseObject(jsonBody); - if (jsonObject != null) { - webRequest.setAttribute(JSONBODY_ATTRIBUTE, jsonObject, NativeWebRequest.SCOPE_REQUEST); - } - } catch (IOException e) { - throw new RuntimeException(e); + String jsonBody = IOUtils.toString(servletRequest.getReader()); + jsonObject = JSON.parseObject(jsonBody); + if (jsonObject != null) { + webRequest.setAttribute(JSONBODY_ATTRIBUTE, jsonObject, RequestAttributes.SCOPE_REQUEST); } } return jsonObject; diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/listener/LoadCachedDataListener.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/listener/LoadCachedDataListener.java index de6b4419..d3391a75 100644 --- a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/listener/LoadCachedDataListener.java +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/listener/LoadCachedDataListener.java @@ -11,11 +11,12 @@ import java.util.Map; * 应用程序启动后的事件监听对象。主要负责加载Model之间的字典关联和一对一关联所对应的Service结构关系。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Component public class LoadCachedDataListener implements ApplicationListener { + @SuppressWarnings("all") @Override public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { Map serviceMap = diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/listener/LoadServiceRelationListener.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/listener/LoadServiceRelationListener.java index d67500c5..612db2de 100644 --- a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/listener/LoadServiceRelationListener.java +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/listener/LoadServiceRelationListener.java @@ -11,11 +11,12 @@ import java.util.Map; * 应用程序启动后的事件监听对象。主要负责加载Model之间的字典关联和一对一关联所对应的Service结构关系。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Component public class LoadServiceRelationListener implements ApplicationListener { + @SuppressWarnings("all") @Override public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) { Map serviceMap = diff --git a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/util/BasicIdGenerator.java b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/util/BasicIdGenerator.java index 3945890b..0690127f 100644 --- a/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/util/BasicIdGenerator.java +++ b/orange-admin-service/common/common-biz/src/main/java/com/orange/admin/common/biz/util/BasicIdGenerator.java @@ -14,7 +14,7 @@ import javax.annotation.PostConstruct; * 升级为基于分布式Id生成服务的实现时,仅需修改内部实现,外部业务方法不会受到任何影响。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Component public class BasicIdGenerator { diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/DeletedFlagColumn.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/DeletedFlagColumn.java index 899409fc..cf45589b 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/DeletedFlagColumn.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/DeletedFlagColumn.java @@ -6,7 +6,7 @@ import java.lang.annotation.*; * 主要用于标记逻辑删除字段。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/DeptFilterColumn.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/DeptFilterColumn.java index 451d4203..1b6b1425 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/DeptFilterColumn.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/DeptFilterColumn.java @@ -6,7 +6,7 @@ import java.lang.annotation.*; * 主要用于标记数据权限中基于DeptId进行过滤的字段。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/DisableDataPerm.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/DisableDataPerm.java new file mode 100644 index 00000000..853b2c2b --- /dev/null +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/DisableDataPerm.java @@ -0,0 +1,17 @@ +package com.orange.admin.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 作为DisableDataPermAspect的切点。 + * 该注解仅能标记在方法上,方法内所有的查询语句,均不会被数据权限过滤。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ +@Target({ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DisableDataPerm { + +} diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/EnableDataPerm.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/EnableDataPerm.java index a792b1b1..fb3a5d61 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/EnableDataPerm.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/EnableDataPerm.java @@ -11,7 +11,7 @@ import java.lang.annotation.*; * 将其中一个方法重新定义一个具体的接口方法,并重新设定其是否参与数据过滤。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/JobUpdateTimeColumn.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/JobUpdateTimeColumn.java index f4cfbb54..b546ce0e 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/JobUpdateTimeColumn.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/JobUpdateTimeColumn.java @@ -6,7 +6,7 @@ import java.lang.annotation.*; * 主要用于标记更新字段。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/MyDataSource.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/MyDataSource.java index 72d82e03..2c86b479 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/MyDataSource.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/MyDataSource.java @@ -6,7 +6,7 @@ import java.lang.annotation.*; * 主要用于标记Service所依赖的数据源类型。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/MyRequestBody.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/MyRequestBody.java index b306859e..e98965b3 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/MyRequestBody.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/MyRequestBody.java @@ -9,7 +9,7 @@ import java.lang.annotation.Target; * 标记Controller中的方法参数,参数解析器会根据该注解将请求中的JSON数据,映射到参数中的绑定字段。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/NoAuthInterface.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/NoAuthInterface.java index 4311aa48..015abcc3 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/NoAuthInterface.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/NoAuthInterface.java @@ -6,7 +6,7 @@ import java.lang.annotation.*; * 主要用于标记无需Token验证的接口 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationConstDict.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationConstDict.java index 6c2e6f27..3fa4d795 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationConstDict.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationConstDict.java @@ -6,7 +6,7 @@ import java.lang.annotation.*; * 标识Model和常量字典之间的关联关系。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.FIELD, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationDict.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationDict.java index e383877c..277428b1 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationDict.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationDict.java @@ -6,7 +6,7 @@ import java.lang.annotation.*; * 标识Model之间的字典关联关系。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.FIELD, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationManyToMany.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationManyToMany.java new file mode 100644 index 00000000..f432b3a6 --- /dev/null +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationManyToMany.java @@ -0,0 +1,36 @@ +package com.orange.admin.common.core.annotation; + +import java.lang.annotation.*; + +/** + * 标注多对多的Model关系。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ +@Target({ElementType.FIELD, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RelationManyToMany { + + /** + * 多对多中间表的Mapper对象名称。 + * + * @return 被关联的本地Service对象名称。 + */ + String relationMapperName(); + + /** + * 多对多关联表Model对象的Class对象。 + * + * @return 被关联Model对象的Class对象。 + */ + Class relationModelClass(); + + /** + * 多对多关联表Model对象中与主表关联的Id字段名称。 + * + * @return 被关联Model对象的关联Id字段名称。 + */ + String relationMasterIdField(); +} diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationManyToManyAggregation.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationManyToManyAggregation.java index 8e0857d6..3b01494a 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationManyToManyAggregation.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationManyToManyAggregation.java @@ -3,10 +3,10 @@ package com.orange.admin.common.core.annotation; import java.lang.annotation.*; /** - * 主要用于多对多的Model关系。标注通过从表关联字段或者关联表关联字段计算主表虚拟字段的规则。 + * 主要用于多对多的Model关系。标注通过从表关联字段或者关联表关联字段计算主表聚合计算字段的规则。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.FIELD, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationOneToManyAggregation.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationOneToManyAggregation.java index 12516c93..7caa033d 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationOneToManyAggregation.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationOneToManyAggregation.java @@ -3,10 +3,10 @@ package com.orange.admin.common.core.annotation; import java.lang.annotation.*; /** - * 主要用于一对多的Model关系。标注通过从表关联字段计算主表虚拟字段的规则。 + * 主要用于一对多的Model关系。标注通过从表关联字段计算主表聚合计算字段的规则。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.FIELD, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationOneToOne.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationOneToOne.java index 1834645e..6bbe28fc 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationOneToOne.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/RelationOneToOne.java @@ -6,7 +6,7 @@ import java.lang.annotation.*; * 标识Model之间的一对一关联关系。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.FIELD, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/UserFilterColumn.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/UserFilterColumn.java index 82269325..8d8a0bfa 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/UserFilterColumn.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/annotation/UserFilterColumn.java @@ -6,7 +6,7 @@ import java.lang.annotation.*; * 主要用于标记数据权限中基于UserId进行过滤的字段。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/dao/BaseDaoMapper.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/dao/BaseDaoMapper.java index e8740732..bbd4bcc9 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/dao/BaseDaoMapper.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/dao/BaseDaoMapper.java @@ -14,7 +14,7 @@ import java.util.Map; * * @param 主Model实体对象。 * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @RegisterMapper public interface BaseDaoMapper extends Mapper, InsertListMapper { @@ -39,7 +39,7 @@ public interface BaseDaoMapper extends Mapper, InsertListMapper { + " GROUP BY ${groupBy}" + "" + "") - List> getGroupedListByCondition( + List> getGroupedListByCondition( @Param("selectTable") String selectTable, @Param("selectFields") String selectFields, @Param("whereClause") String whereClause, @@ -65,7 +65,7 @@ public interface BaseDaoMapper extends Mapper, InsertListMapper { + " ORDER BY ${orderBy}" + "" + "") - List> getListByCondition( + List> getListByCondition( @Param("selectTable") String selectTable, @Param("selectFields") String selectFields, @Param("whereClause") String whereClause, diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/mapper/BaseModelMapper.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/mapper/BaseModelMapper.java index ce46df24..42c7e520 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/mapper/BaseModelMapper.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/mapper/BaseModelMapper.java @@ -1,9 +1,10 @@ package com.orange.admin.common.core.base.mapper; import cn.hutool.core.bean.BeanUtil; +import org.apache.commons.collections4.CollectionUtils; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** * Model对象到Domain类型对象的相互转换。实现类通常声明在Model实体类中。 @@ -11,7 +12,7 @@ import java.util.Map; * @param Domain域对象类型。 * @param Model实体对象类型。 * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface BaseModelMapper { @@ -50,35 +51,69 @@ public interface BaseModelMapper { /** * 转换bean到map * - * @param bean bean对象。 + * @param bean bean对象。 * @param ignoreNullValue 值为null的字段是否转换到Map。 - * @param bean类型。 + * @param bean类型。 * @return 转换后的map对象。 */ default Map beanToMap(T bean, boolean ignoreNullValue) { - return BeanUtil.beanToMap(bean); + return BeanUtil.beanToMap(bean, false, ignoreNullValue); + } + + /** + * 转换bean集合到map集合 + * + * @param dataList bean对象集合。 + * @param ignoreNullValue 值为null的字段是否转换到Map。 + * @param bean类型。 + * @return 转换后的map对象集合。 + */ + default List> beanToMap(List dataList, boolean ignoreNullValue) { + if (CollectionUtils.isEmpty(dataList)) { + return new LinkedList<>(); + } + return dataList.stream() + .map(o -> BeanUtil.beanToMap(o, false, ignoreNullValue)) + .collect(Collectors.toList()); } /** * 转换map到bean。 * - * @param map map对象。 + * @param map map对象。 * @param beanClazz bean的Class对象。 - * @param bean类型。 + * @param bean类型。 * @return 转换后的bean对象。 */ default T mapToBean(Map map, Class beanClazz) { return BeanUtil.mapToBean(map, beanClazz, true); } + /** + * 转换map集合到bean集合。 + * + * @param mapList map对象集合。 + * @param beanClazz bean的Class对象。 + * @param bean类型。 + * @return 转换后的bean对象集合。 + */ + default List mapToBean(List> mapList, Class beanClazz) { + if (CollectionUtils.isEmpty(mapList)) { + return new LinkedList<>(); + } + return mapList.stream() + .map(m -> BeanUtil.mapToBean(m, beanClazz, true)) + .collect(Collectors.toList()); + } + /** * 对于Map字段到Map字段的映射场景,MapStruct会根据方法签名自动选择该函数 * 作为对象copy的函数。由于该函数是直接返回的,因此没有对象copy,效率更高。 * 如果没有该函数,MapStruct会生成如下代码: - * Map map = courseDto.getTeacherIdDictMap(); - * if ( map != null ) { - * course.setTeacherIdDictMap( new HashMap( map ) ); - * } + * Map map = courseDto.getTeacherIdDictMap(); + * if ( map != null ) { + * course.setTeacherIdDictMap( new HashMap( map ) ); + * } * * @param map map对象。 * @return 直接返回的map。 diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/mapper/DummyModelMapper.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/mapper/DummyModelMapper.java index d1fda13a..9f95e835 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/mapper/DummyModelMapper.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/mapper/DummyModelMapper.java @@ -8,7 +8,7 @@ import java.util.List; * * @param 数据类型。 * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class DummyModelMapper implements BaseModelMapper { diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/service/BaseDictService.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/service/BaseDictService.java index 5a222bd2..57f2c0a4 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/service/BaseDictService.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/service/BaseDictService.java @@ -16,7 +16,7 @@ import java.util.List; * @param Model实体对象的类型。 * @param Model对象主键的类型。 * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j public abstract class BaseDictService extends BaseService { @@ -47,16 +47,23 @@ public abstract class BaseDictService extends BaseService { */ public void loadCachedData() { if (loadOnStartup()) { - reloadCachedData(); + reloadCachedData(false); } } /** * 重新加载数据库中所有当前表数据到系统内存。 + * + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 */ - public void reloadCachedData() { + public void reloadCachedData(boolean force) { + // 在非强制刷新情况下。 + // 先行判断缓存中是否存在数据,如果有就不加载了。 + if (!force && dictionaryCache.getCount() > 0) { + return; + } List allList = super.getAllList(); - dictionaryCache.reload(allList); + dictionaryCache.reload(allList, force); } /** @@ -94,7 +101,7 @@ public abstract class BaseDictService extends BaseService { /** * 返回符合 inFilterField in (inFilterValues) 条件的所有数据。蜀国property是主键,则从缓存中读取。 * - * @param inFilterField 参与(In-list)过滤的Java字段。 + * @param inFilterField 参与(In-list)过滤的Java字段。 * @param inFilterValues 参与(In-list)过滤的Java字段值集合。 * @return 检索后的数据列表。 */ @@ -110,7 +117,7 @@ public abstract class BaseDictService extends BaseService { /** * 判断参数值列表中的所有数据,是否全部存在。另外,keyName字段在数据表中必须是唯一键值,否则返回结果会出现误判。 * - * @param inFilterField 待校验的数据字段,这里使用Java对象中的属性,如courseId,而不是数据字段名course_id。 + * @param inFilterField 待校验的数据字段,这里使用Java对象中的属性,如courseId,而不是数据字段名course_id。 * @param inFilterValues 数据值集合。 * @return 全部存在返回true,否则false。 */ diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/service/BaseService.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/service/BaseService.java index 708903f5..d818503c 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/service/BaseService.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/base/service/BaseService.java @@ -4,9 +4,8 @@ import com.orange.admin.common.core.annotation.*; import com.orange.admin.common.core.base.dao.BaseDaoMapper; import com.orange.admin.common.core.constant.AggregationType; import com.orange.admin.common.core.constant.GlobalDeletedFlag; -import com.orange.admin.common.core.object.GlobalThreadLocal; -import com.orange.admin.common.core.object.MyWhereCriteria; -import com.orange.admin.common.core.object.Tuple2; +import com.orange.admin.common.core.exception.MyRuntimeException; +import com.orange.admin.common.core.object.*; import com.orange.admin.common.core.util.ApplicationContextHolder; import com.orange.admin.common.core.util.MyModelUtil; import lombok.extern.slf4j.Slf4j; @@ -34,7 +33,7 @@ import static java.util.stream.Collectors.*; * @param Model对象的类型。 * @param Model对象主键的类型。 * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j public abstract class BaseService { @@ -86,26 +85,31 @@ public abstract class BaseService { /** * 当前Service关联的主Model对象的所有字典关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 */ - private List relationDictStructList; + private List relationDictStructList = new LinkedList<>(); /** * 当前Service关联的主Model对象的所有常量字典关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 */ - private List relationConstDictStructList; + private List relationConstDictStructList = new LinkedList<>(); /** * 当前Service关联的主Model对象的所有一对一关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 */ - private List relationOneToOneStructList; + private List relationOneToOneStructList = new LinkedList<>(); + /** + * 当前Service关联的主Model对象的所有多对多关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 + */ + private List relationManyToManyStructList = new LinkedList<>(); /** * 当前Service关联的主Model对象的所有一对多聚合关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 */ - private List relationOneToManyAggrStructList; + private List relationOneToManyAggrStructList = new LinkedList<>(); /** * 当前Service关联的主Model对象的所有多对多聚合关联的结构列表,该字段在系统启动阶段一次性预加载,提升运行时效率。 */ - private List relationManyToManyAggrStructList; + private List relationManyToManyAggrStructList = new LinkedList<>(); private static final String GROUPED_KEY = "groupedKey"; private static final String AGGREGATED_VALUE = "aggregatedValue"; + private static final String AND_OP = " AND "; /** * 构造函数,在实例化的时候,一次性完成所有有关主Model对象信息的加载。 @@ -116,31 +120,29 @@ public abstract class BaseService { this.tableName = modelClass.getAnnotation(Table.class).name(); Field[] fields = ReflectUtil.getFields(modelClass); for (Field field : fields) { - if (idFieldName == null) { - if (null != field.getAnnotation(Id.class)) { - idFieldName = field.getName(); - idField = field; - Column c = field.getAnnotation(Column.class); - idColumnName = c == null ? idFieldName : c.name(); - } - } - if (updateTimeFieldName == null) { - if (null != field.getAnnotation(JobUpdateTimeColumn.class)) { - updateTimeFieldName = field.getName(); - Column c = field.getAnnotation(Column.class); - updateTimeColumnName = c == null ? updateTimeFieldName : c.name(); - } - } - if (deletedFlagFieldName == null) { - if (null != field.getAnnotation(DeletedFlagColumn.class)) { - deletedFlagFieldName = field.getName(); - Column c = field.getAnnotation(Column.class); - deletedFlagColumnName = c == null ? deletedFlagFieldName : c.name(); - deletedFlagField = field; - setDeletedFlagMethod = ReflectUtil.getMethod( - modelClass, "set" + StringUtils.capitalize(deletedFlagFieldName), Integer.class); - } - } + initializeField(field); + } + } + + private void initializeField(Field field) { + if (idFieldName == null && null != field.getAnnotation(Id.class)) { + idFieldName = field.getName(); + idField = field; + Column c = field.getAnnotation(Column.class); + idColumnName = c == null ? idFieldName : c.name(); + } + if (updateTimeFieldName == null && null != field.getAnnotation(JobUpdateTimeColumn.class)) { + updateTimeFieldName = field.getName(); + Column c = field.getAnnotation(Column.class); + updateTimeColumnName = c == null ? updateTimeFieldName : c.name(); + } + if (deletedFlagFieldName == null && null != field.getAnnotation(DeletedFlagColumn.class)) { + deletedFlagFieldName = field.getName(); + Column c = field.getAnnotation(Column.class); + deletedFlagColumnName = c == null ? deletedFlagFieldName : c.name(); + deletedFlagField = field; + setDeletedFlagMethod = ReflectUtil.getMethod( + modelClass, "set" + StringUtils.capitalize(deletedFlagFieldName), Integer.class); } } @@ -199,12 +201,14 @@ public abstract class BaseService { /** * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。 * - * @param id 主表主键Id。 + * @param id 主表主键Id。 + * @param relationParam 实体对象数据组装的参数构建器。 * @return 查询结果对象。 */ - public M getByIdWithRelation(K id) { - return this.buildAllRelationForData( - this.getById(id), false, buildAggregationAdditionalWhereCriteria()); + public M getByIdWithRelation(K id, MyRelationParam relationParam) { + M dataObject = this.getById(id); + this.buildRelationForData(dataObject, relationParam, buildAggregationAdditionalWhereCriteria()); + return dataObject; } /** @@ -224,12 +228,12 @@ public abstract class BaseService { /** * 获取所有主数据,及其关联数据。 * - * @param dictOnly true 将只是关联字典数据,false将同时关联字典数据和一对一关联数据。 + * @param relationParam 实体对象数据组装的参数构建器。 * @return 返回所有主数据,及其关联数据。 */ - public List getAllListWithRelation(boolean dictOnly) { + public List getAllListWithRelation(MyRelationParam relationParam) { List resultList = getAllList(); - this.buildRelationForDataList(resultList, dictOnly); + this.buildRelationForDataList(resultList, relationParam, null); return resultList; } @@ -250,6 +254,19 @@ public abstract class BaseService { return mapper().selectByExample(e); } + /** + * 判断参数值主键集合中的所有数据,是否全部存在 + * + * @param idSet 待校验的主键集合。 + * @return 全部存在返回true,否则false。 + */ + public boolean existAllPrimaryKeys(Set idSet) { + if (CollectionUtils.isEmpty(idSet)) { + return false; + } + return this.existUniqueKeyList(idFieldName, idSet); + } + /** * 判断参数值列表中的所有数据,是否全部存在。另外,keyName字段在数据表中必须是唯一键值,否则返回结果会出现误判。 * @@ -364,8 +381,8 @@ public abstract class BaseService { setDeletedFlagMethod.invoke(filter, GlobalDeletedFlag.NORMAL); return mapper().selectCount(filter); } catch (Exception e) { - log.error("Failed to call reflection code.", e); - throw new RuntimeException(e); + log.error("Failed to call reflection code of BaseService.getCountByFilter.", e); + throw new MyRuntimeException(e); } } @@ -385,7 +402,7 @@ public abstract class BaseService { * @param filter 该方法基于mybatis的通用mapper。如果参数为null,则返回全部数据。 * @return 返回过滤后的数据。 */ - public List getListByFilter(M filter) { + private List getListByFilter(M filter) { if (filter == null) { return this.getAllList(); } @@ -396,8 +413,8 @@ public abstract class BaseService { setDeletedFlagMethod.invoke(filter, GlobalDeletedFlag.NORMAL); return mapper().select(filter); } catch (Exception ex) { - log.error("Failed to call reflection code.", ex); - throw new RuntimeException(ex); + log.error("Failed to call reflection code of BaseService.getListByFilter.", ex); + throw new MyRuntimeException(ex); } } @@ -409,6 +426,9 @@ public abstract class BaseService { * @return 返回过滤后的数据。 */ public List getListByFilter(M filter, String orderBy) { + if (StringUtils.isBlank(orderBy)) { + return this.getListByFilter(filter); + } Example e = new Example(modelClass); if (StringUtils.isNotBlank(orderBy)) { e.setOrderByClause(orderBy); @@ -417,56 +437,48 @@ public abstract class BaseService { Example.Criteria c = e.createCriteria(); Field[] fields = ReflectUtil.getFields(modelClass); for (Field field : fields) { - if (field.getAnnotation(Transient.class) != null) { - continue; - } - int modifiers = field.getModifiers(); - // transient类型的字段不能作为查询条件 - if ((modifiers & 128) == 0) { - if (field.getName().equals(deletedFlagFieldName)) { - c.andEqualTo(deletedFlagFieldName, GlobalDeletedFlag.NORMAL); - } else { - field.setAccessible(true); - try { - Object o = field.get(filter); - if (o != null) { - c.andEqualTo(field.getName(), field.get(filter)); - } - } catch (IllegalAccessException ex) { - log.error("Failed to call reflection code.", ex); - throw new RuntimeException(ex); - } - } + if (field.getAnnotation(Transient.class) == null) { + assembleCriteriaByFilter(filter, field, c); } } } return mapper().selectByExample(e); } - /** - * 用参数对象作为过滤条件,获取查询结果。同时组装实体对象中基于RelationXXXX注解关联的数据。 - * - * @param filter 该方法基于mybatis的通用mapper。如果参数为null,则返回全部数据。 - * @return 返回过滤后的数据。 - */ - public List getListWithRelationByFilter(M filter) { - List resultList = this.getListByFilter(filter); - Map> criteriaMap = buildAggregationAdditionalWhereCriteria(); - this.buildAllRelationForDataList(resultList, false, criteriaMap); - return resultList; + private void assembleCriteriaByFilter(M filter, Field field, Example.Criteria c) { + int modifiers = field.getModifiers(); + // transient类型的字段不能作为查询条件 + int transientMask = 128; + if ((modifiers & transientMask) == 0) { + if (field.getName().equals(deletedFlagFieldName)) { + c.andEqualTo(deletedFlagFieldName, GlobalDeletedFlag.NORMAL); + } else { + ReflectUtil.setAccessible(field); + try { + Object o = field.get(filter); + if (o != null) { + c.andEqualTo(field.getName(), field.get(filter)); + } + } catch (IllegalAccessException ex) { + log.error("Failed to call reflection code of BaseService.getListByFilter.", ex); + throw new MyRuntimeException(ex); + } + } + } } /** * 用参数对象作为过滤条件,获取查询结果。同时组装实体对象中基于RelationXXXX注解关联的数据。 * - * @param filter 该方法基于mybatis的通用mapper。如果参数为null,则返回全部数据。 - * @param orderBy SQL中ORDER BY从句。 + * @param filter 该方法基于mybatis的通用mapper。如果参数为null,则返回全部数据。 + * @param orderBy SQL中ORDER BY从句。 + * @param relationParam 实体对象数据组装的参数构建器。 * @return 返回过滤后的数据。 */ - public List getListWithRelationByFilter(M filter, String orderBy) { + public List getListWithRelationByFilter(M filter, String orderBy, MyRelationParam relationParam) { List resultList = this.getListByFilter(filter, orderBy); Map> criteriaMap = buildAggregationAdditionalWhereCriteria(); - this.buildAllRelationForDataList(resultList, false, criteriaMap); + this.buildRelationForDataList(resultList, relationParam, criteriaMap); return resultList; } @@ -505,9 +517,9 @@ public abstract class BaseService { /** * 根据指定的显示字段列表、过滤条件字符串和排序字符串,返回查询结果。(基本是内部框架使用,不建议外部接口直接使用)。 * - * @param selectList 选择的Java字段列表。如果为空表示返回全部字段。 - * @param whereClause SQL常量形式的条件从句。 - * @param orderBy SQL常量形式排序字段列表,逗号分隔。 + * @param selectList 选择的Java字段列表。如果为空表示返回全部字段。 + * @param whereClause SQL常量形式的条件从句。 + * @param orderBy SQL常量形式排序字段列表,逗号分隔。 * @return 查询结果。 */ public List getListByCondition(List selectList, String whereClause, String orderBy) { @@ -542,16 +554,37 @@ public abstract class BaseService { * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 * * @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。 - * @param dictOnly 是否只是集成字典,包括注解RelationDict和RelationConstDict标注的字段。 + * @param relationParam 实体对象数据组装的参数构建器。 * @param criteriaListMap 仅仅用于一对多和多对多聚合计算的附加过滤条件。如果没有可以为NULL。 */ - public void buildAllRelationForDataList( - List resultList, boolean dictOnly, Map> criteriaListMap) { - // 集成本地一对一和字段级别的数据关联。 - this.buildRelationForDataList(resultList, dictOnly); - if (!dictOnly) { + public void buildRelationForDataList( + List resultList, MyRelationParam relationParam, Map> criteriaListMap) { + if (relationParam == null || CollectionUtils.isEmpty(resultList)) { + return; + } + boolean dataPermValue = GlobalThreadLocal.setDataPerm(false); + try { + // 集成本地一对一和字段级别的数据关联。 + boolean buildOneToOne = relationParam.isBuildOneToOne() || relationParam.isBuildOneToOneWithDict(); + // 这里集成一对一关联。 + if (buildOneToOne) { + this.buildOneToOneForDataList(resultList, relationParam.isBuildOneToOneWithDict()); + } + // 这里集成字典关联 + if (relationParam.isBuildDict()) { + // 构建常量字典关联关系 + this.buildConstDictForDataList(resultList); + this.buildDictForDataList(resultList, buildOneToOne); + } // 组装本地聚合计算关联数据 - this.buildAggregationRelationForDataList(resultList, criteriaListMap); + if (relationParam.isBuildRelationAggregation()) { + // 处理多对多场景下,根据主表的结果,进行从表聚合数据的计算。 + this.buildManyToManyAggregationForDataList(resultList, criteriaListMap); + // 处理多一多场景下,根据主表的结果,进行从表聚合数据的计算。 + this.buildOneToManyAggregationForDataList(resultList, criteriaListMap); + } + } finally { + GlobalThreadLocal.setDataPerm(dataPermValue); } } @@ -561,54 +594,73 @@ public abstract class BaseService { * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 * * @param dataObject 主表实体对象。数据集成将直接作用于该对象。 - * @param dictOnly 是否只是集成字典,包括注解RelationDict和RelationConstDict标注的字段。 + * @param relationParam 实体对象数据组装的参数构建器。 * @param criteriaListMap 仅仅用于一对多和多对多聚合计算的附加过滤条件。如果没有可以为NULL。 * @param 实体对象类型。 - * @return 集成后的原实体对象。 */ - public T buildAllRelationForData( - T dataObject, boolean dictOnly, Map> criteriaListMap) { - // 集成本地一对一和字段级别的数据关联。 - this.buildRelationForData(dataObject, dictOnly); - if (!dictOnly) { - // 组装本地聚合计算关联数据 - this.buildAggregationRelationForData(dataObject, criteriaListMap); + public void buildRelationForData( + T dataObject, MyRelationParam relationParam, Map> criteriaListMap) { + if (dataObject == null || relationParam == null) { + return; + } + boolean dataPermValue = GlobalThreadLocal.setDataPerm(false); + try { + // 集成本地一对一和字段级别的数据关联。 + boolean buildOneToOne = relationParam.isBuildOneToOne() || relationParam.isBuildOneToOneWithDict(); + if (buildOneToOne) { + this.buildOneToOneForData(dataObject, relationParam.isBuildOneToOneWithDict()); + } + if (relationParam.isBuildDict()) { + // 构建常量字典关联关系 + this.buildConstDictForData(dataObject); + // 构建本地数据字典关联关系。 + this.buildDictForData(dataObject, buildOneToOne); + } + // 组装本地聚合计算关联数据 + if (relationParam.isBuildRelationAggregation()) { + // 开始处理多对多场景。 + buildManyToManyAggregationForData(dataObject, criteriaListMap); + // 构建一对多场景 + buildOneToManyAggregationForData(dataObject, criteriaListMap); + } + if (relationParam.isBuildRelationManyToMany()) { + this.buildManyToManyRelation(dataObject); + } + } finally { + GlobalThreadLocal.setDataPerm(dataPermValue); } - return dataObject; } /** - * 为参数列表数据集成本地静态字典关联数据。 + * 集成主表和多对多中间表之间的关联关系。 + * + * @param dataObject 关联后的主表数据对象。 + */ + private void buildManyToManyRelation(T dataObject) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationManyToManyStructList)) { + return; + } + for (RelationStruct relationStruct : this.relationManyToManyStructList) { + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + Example e = new Example(relationStruct.relationManyToMany.relationModelClass()); + e.createCriteria().andEqualTo(relationStruct.masterIdField.getName(), masterIdValue); + List manyToManyList = relationStruct.manyToManyMapper.selectByExample(e); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, manyToManyList); + } + } + + /** + * 为实体对象参数列表数据集成本地静态字典关联数据。 * * @param resultList 主表数据列表。 */ - public void buildConstDictForDataList(List resultList) { - if (CollectionUtils.isNotEmpty(this.relationConstDictStructList)) { - for (RelationStruct relationStruct : this.relationConstDictStructList) { - for (M dataObject : resultList) { - Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); - if (id != null) { - String name = relationStruct.dictMap.get(id); - if (name != null) { - Map dictMap = new HashMap<>(2); - dictMap.put("id", id); - dictMap.put("name", name); - ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, dictMap); - } - } - } - } + private void buildConstDictForDataList(List resultList) { + if (CollectionUtils.isEmpty(this.relationConstDictStructList) + || CollectionUtils.isEmpty(resultList)) { + return; } - } - - /** - * 为参数实体对象数据集成本地静态字典关联数据。 - * - * @param dataObject 实体对象。 - */ - public void buildConstDictForData(T dataObject) { - if (CollectionUtils.isNotEmpty(this.relationConstDictStructList)) { - for (RelationStruct relationStruct : this.relationConstDictStructList) { + for (RelationStruct relationStruct : this.relationConstDictStructList) { + for (M dataObject : resultList) { Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); if (id != null) { String name = relationStruct.dictMap.get(id); @@ -624,507 +676,373 @@ public abstract class BaseService { } /** - * 集成字典关联数据列表和一对一从表关联数据列表。 - * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * 为参数实体对象数据集成本地静态字典关联数据。 * - * @param resultList 主表数据列表。数据集成将直接作用于该对象列表。 - * @param dictOnly 是否只是关联字典数据。 + * @param dataObject 实体对象。 */ - public void buildRelationForDataList(List resultList, boolean dictOnly) { - if (CollectionUtils.isEmpty(resultList)) { + private void buildConstDictForData(T dataObject) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationConstDictStructList)) { return; } - boolean dataPermEnabled = GlobalThreadLocal.setDataPerm(false); - if (!dictOnly) { - if (CollectionUtils.isNotEmpty(this.relationOneToOneStructList)) { - for (RelationStruct relationStruct : this.relationOneToOneStructList) { - Set masterIdSet = resultList.stream() - .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) - .filter(Objects::nonNull) - .collect(toSet()); - if (CollectionUtils.isNotEmpty(masterIdSet)) { - BaseService relationService = relationStruct.service; - List relationList = - relationService.getInList(relationStruct.relationOneToOne.slaveIdField(), masterIdSet); - // 仅仅当需要加载从表字典关联时,才去加载。 - if (relationStruct.relationOneToOne.loadSlaveDict() && CollectionUtils.isNotEmpty(relationList)) { - relationService.buildRelationForDataList(relationList, true); - MyModelUtil.makeOneToOneRelation( - modelClass, resultList, relationList, relationStruct.relationField.getName()); - } - } + for (RelationStruct relationStruct : this.relationConstDictStructList) { + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + String name = relationStruct.dictMap.get(id); + if (name != null) { + Map dictMap = new HashMap<>(2); + dictMap.put("id", id); + dictMap.put("name", name); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, dictMap); } } } - // 构建常量字典关联关系 - this.buildConstDictForDataList(resultList); - if (CollectionUtils.isNotEmpty(this.relationDictStructList)) { - for (RelationStruct relationStruct : this.relationDictStructList) { - List relationList = null; - if (!dictOnly && relationStruct.equalOneToOneRelationField != null) { - relationList = resultList.stream() - .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.equalOneToOneRelationField)) - .filter(Objects::nonNull) - .collect(toList()); - } else { - String slaveId = relationStruct.relationDict.slaveIdField(); - Set masterIdSet = resultList.stream() - .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) - .filter(Objects::nonNull) - .collect(toSet()); - if (CollectionUtils.isNotEmpty(masterIdSet)) { - relationList = relationStruct.service.getInList(slaveId, masterIdSet); - } + } + + /** + * 为实体对象参数列表数据集成本地字典关联数据。 + * + * @param resultList 实体对象数据列表。 + * @param hasBuiltOneToOne 性能优化参数。如果该值为true,同时注解参数RelationDict.equalOneToOneRelationField + * 不为空,则直接从已经完成一对一数据关联的从表对象中获取数据,减少一次数据库交互。 + */ + private void buildDictForDataList(List resultList, boolean hasBuiltOneToOne) { + if (CollectionUtils.isEmpty(this.relationDictStructList) + || CollectionUtils.isEmpty(resultList)) { + return; + } + for (RelationStruct relationStruct : this.relationDictStructList) { + List relationList = null; + if (hasBuiltOneToOne && relationStruct.equalOneToOneRelationField != null) { + relationList = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.equalOneToOneRelationField)) + .filter(Objects::nonNull) + .collect(toList()); + } else { + String slaveId = relationStruct.relationDict.slaveIdField(); + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isNotEmpty(masterIdSet)) { + relationList = relationStruct.service.getInList(slaveId, masterIdSet); } - MyModelUtil.makeDictRelation( + } + MyModelUtil.makeDictRelation( + modelClass, resultList, relationList, relationStruct.relationField.getName()); + } + } + + /** + * 为实体对象数据集成本地数据字典关联数据。 + * + * @param dataObject 实体对象。 + * @param hasBuiltOneToOne 性能优化参数。如果该值为true,同时注解参数RelationDict.equalOneToOneRelationField + * 不为空,则直接从已经完成一对一数据关联的从表对象中获取数据,减少一次数据库交互。 + */ + private void buildDictForData(T dataObject, boolean hasBuiltOneToOne) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationDictStructList)) { + return; + } + for (RelationStruct relationStruct : this.relationDictStructList) { + Object relationObject = null; + if (hasBuiltOneToOne && relationStruct.equalOneToOneRelationField != null) { + relationObject = ReflectUtil.getFieldValue(dataObject, relationStruct.equalOneToOneRelationField); + } else { + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + relationObject = relationStruct.service.getById(id); + } + } + MyModelUtil.makeDictRelation( + modelClass, dataObject, relationObject, relationStruct.relationField.getName()); + } + } + + /** + * 为实体对象参数列表数据集成本地一对一关联数据。 + * + * @param resultList 实体对象数据列表。 + * @param withDict 关联从表数据后,是否把从表的字典数据也一起关联了。。 + */ + private void buildOneToOneForDataList(List resultList, boolean withDict) { + if (CollectionUtils.isEmpty(this.relationOneToOneStructList) + || CollectionUtils.isEmpty(resultList)) { + return; + } + for (RelationStruct relationStruct : this.relationOneToOneStructList) { + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + // 从主表集合中,抽取主表关联字段的集合,再以in list形式去从表中查询。 + if (CollectionUtils.isNotEmpty(masterIdSet)) { + BaseService relationService = relationStruct.service; + List relationList = + relationService.getInList(relationStruct.relationOneToOne.slaveIdField(), masterIdSet); + MyModelUtil.makeOneToOneRelation( modelClass, resultList, relationList, relationStruct.relationField.getName()); - } - } - GlobalThreadLocal.setDataPerm(dataPermEnabled); - } - - /** - * 集成字典关联数据和一对一从表关联数据。 - * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 - * - * @param dataObject 主表数据对象。数据集成将直接作用于该对象。 - * @param dictOnly 是否只是关联字典数据。 - * @return 关联后的主表数据对象。 - */ - public T buildRelationForData(T dataObject, boolean dictOnly) { - if (dataObject == null) { - return dataObject; - } - boolean dataPermEnabled = GlobalThreadLocal.setDataPerm(false); - if (!dictOnly) { - if (CollectionUtils.isNotEmpty(this.relationOneToOneStructList)) { - for (RelationStruct relationStruct : this.relationOneToOneStructList) { - Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); - if (id != null) { - BaseService relationService = relationStruct.service; - Object relationObject = relationService.getById(id); - // 仅仅当需要加载从表字典关联时,才去加载。 - if (relationStruct.relationOneToOne.loadSlaveDict() && relationObject != null) { - relationService.buildRelationForData(relationObject, true); - ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, relationObject); - } - } + // 仅仅当需要加载从表字典关联时,才去加载。 + if (withDict && relationStruct.relationOneToOne.loadSlaveDict() + && CollectionUtils.isNotEmpty(relationList)) { + // 关联本地字典。 + relationService.buildDictForDataList(relationList, false); + // 关联常量字典 + relationService.buildConstDictForDataList(relationList); } } } - // 构建常量字典关联关系 - this.buildConstDictForData(dataObject); - if (CollectionUtils.isNotEmpty(this.relationDictStructList)) { - for (RelationStruct relationStruct : this.relationDictStructList) { - Object relationObject = null; - if (!dictOnly && relationStruct.equalOneToOneRelationField != null) { - relationObject = ReflectUtil.getFieldValue(dataObject, relationStruct.equalOneToOneRelationField); - } else { - Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); - if (id != null) { - relationObject = relationStruct.service.getById(id); - } - } - MyModelUtil.makeDictRelation( - modelClass, dataObject, relationObject, relationStruct.relationField.getName()); - } - } - GlobalThreadLocal.setDataPerm(dataPermEnabled); - return dataObject; } /** - * 集成本地服务中,多个表之间的聚合计算关系,主要覆盖一对多和多对多两种场景。 - * 其中一对多关系,比如课程表的章节统计字段sectionCount,可能依赖于课程章节表中关联章节的数量。 - * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * 为实体对象数据集成本地一对一关联数据。 * - * @param resultList 主数据表结果集。数据集成将直接作用于该对象列表。 - * @param criteriaListMap 自定义的过滤条件列表。每个key对应不同的聚合关联字段名称,既注解应用的Java字段,如courseSectionCount。 + * @param dataObject 实体对象。 + * @param withDict 关联从表数据后,是否把从表的字典数据也一起关联了。。 */ - public void buildAggregationRelationForDataList( - List resultList, Map> criteriaListMap) { - if (CollectionUtils.isEmpty(resultList)) { + private void buildOneToOneForData(M dataObject, boolean withDict) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationOneToOneStructList)) { return; } - boolean dataPermEnabled = GlobalThreadLocal.setDataPerm(false); - // 处理多对多场景下,根据主表的结果,进行从表聚合数据的计算。 - if (CollectionUtils.isNotEmpty(this.relationManyToManyAggrStructList)) { - if (criteriaListMap == null) { - criteriaListMap = new HashMap<>(this.relationManyToManyAggrStructList.size()); - } - for (RelationStruct relationStruct : this.relationManyToManyAggrStructList) { - Set masterIdSet = resultList.stream() - .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) - .filter(Objects::nonNull) - .collect(toSet()); - if (CollectionUtils.isNotEmpty(masterIdSet)) { - RelationManyToManyAggregation relation = relationStruct.relationManyToManyAggregation; - // 提取关联中用到的各种字段和表数据。 - String slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); - String relationTable = MyModelUtil.mapToTableName(relation.relationModelClass()); - String relationMasterColumn = - MyModelUtil.mapToColumnName(relation.relationMasterIdField(), relation.relationModelClass()); - String relationSlaveColumn = - MyModelUtil.mapToColumnName(relation.relationSlaveIdField(), relation.relationModelClass()); - String slaveColumn = - MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass()); - // 判断是否只需要关联中间表即可,从而提升查询统计的效率。 - // 1. 统计字段为中间表字段。2. 自定义过滤条件中没有基于从表字段的过滤条件。 - boolean onlySelectRelationTable = - relation.aggregationModelClass().equals(relation.relationModelClass()); - if (onlySelectRelationTable && MapUtils.isNotEmpty(criteriaListMap)) { - List criteriaList = - criteriaListMap.get(relationStruct.relationField.getName()); - if (CollectionUtils.isNotEmpty(criteriaList)) { - for (MyWhereCriteria whereCriteria : criteriaList) { - if (whereCriteria.getModelClazz().equals(relation.slaveModelClass())) { - onlySelectRelationTable = false; - break; - } - } - } - } - String aggregationTable = - relation.aggregationModelClass().equals(relation.relationModelClass()) ? relationTable : slaveTable; - Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( - relationTable, relationMasterColumn, relation.aggregationModelClass(), - aggregationTable, relation.aggregationField(), relation.aggregationType()); - String selectList = selectAndGroupByTuple.getFirst(); - String groupBy = selectAndGroupByTuple.getSecond(); - // 构建多表关联的where语句 - StringBuilder whereClause = new StringBuilder(256); - // 如果需要从表聚合计算或参与过滤,则需要把中间表和从表之间的关联条件加上。 - if (!onlySelectRelationTable) { - whereClause.append(relationTable) - .append(".") - .append(relationSlaveColumn) - .append(" = ") - .append(slaveTable) - .append(".") - .append(slaveColumn); - } else { - whereClause.append("1 = 1"); - } - List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); - if (criteriaList == null) { - criteriaList = new LinkedList<>(); - } - MyWhereCriteria inlistFilter = new MyWhereCriteria(); - inlistFilter.setCriteria(relation.relationModelClass(), - relation.relationMasterIdField(), MyWhereCriteria.OPERATOR_IN, masterIdSet); - criteriaList.add(inlistFilter); - if (StringUtils.isNotBlank(relationStruct.service.deletedFlagFieldName)) { - MyWhereCriteria deleteFilter = new MyWhereCriteria(); - deleteFilter.setCriteria( - relation.slaveModelClass(), - relationStruct.service.deletedFlagFieldName, - MyWhereCriteria.OPERATOR_EQUAL, - GlobalDeletedFlag.NORMAL); - criteriaList.add(deleteFilter); - } - String criteriaString = MyWhereCriteria.getCriteriaString(criteriaList); - whereClause.append(" AND ").append(criteriaString); - StringBuilder tableNames = new StringBuilder(64); - tableNames.append(relationTable); - if (!onlySelectRelationTable) { - tableNames.append(", ").append(slaveTable); - } - List> aggregationMapList = mapper().getGroupedListByCondition( - tableNames.toString(), selectList, whereClause.toString(), groupBy); - doMakeLocalAggregationData(aggregationMapList, resultList, relationStruct); + for (RelationStruct relationStruct : this.relationOneToOneStructList) { + Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (id != null) { + BaseService relationService = relationStruct.service; + Object relationObject = relationService.getById(id); + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, relationObject); + // 仅仅当需要加载从表字典关联时,才去加载。 + if (withDict && relationStruct.relationOneToOne.loadSlaveDict() && relationObject != null) { + // 关联本地字典 + relationService.buildDictForData(relationObject, false); + // 关联常量字典 + relationService.buildConstDictForData(relationObject); } } } - // 处理多一多场景下,根据主表的结果,进行从表聚合数据的计算。 - if (CollectionUtils.isNotEmpty(this.relationOneToManyAggrStructList)) { - if (criteriaListMap == null) { - criteriaListMap = new HashMap<>(relationOneToManyAggrStructList.size()); - } - for (RelationStruct relationStruct : this.relationOneToManyAggrStructList) { - Set masterIdSet = resultList.stream() - .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) - .filter(Objects::nonNull) - .collect(toSet()); - if (CollectionUtils.isNotEmpty(masterIdSet)) { - RelationOneToManyAggregation relation = relationStruct.relationOneToManyAggregation; - // 开始获取后面所需的各种关联数据。此部分今后可以移植到缓存中,无需每次计算。 - String slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); - String slaveColumnName = - MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass()); - Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( - slaveTable, slaveColumnName, relation.slaveModelClass(), - slaveTable, relation.aggregationField(), relation.aggregationType()); - String selectList = selectAndGroupByTuple.getFirst(); - String groupBy = selectAndGroupByTuple.getSecond(); - List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); - if (criteriaList == null) { - criteriaList = new LinkedList<>(); - } - MyWhereCriteria inlistFilter = new MyWhereCriteria(); - inlistFilter.setCriteria(relation.slaveModelClass(), - relation.slaveIdField(), MyWhereCriteria.OPERATOR_IN, masterIdSet); - criteriaList.add(inlistFilter); - if (StringUtils.isNotBlank(relationStruct.service.deletedFlagFieldName)) { - MyWhereCriteria deleteFilter = new MyWhereCriteria(); - deleteFilter.setCriteria( - relation.slaveModelClass(), - relationStruct.service.deletedFlagFieldName, - MyWhereCriteria.OPERATOR_EQUAL, - GlobalDeletedFlag.NORMAL); - criteriaList.add(deleteFilter); - } - String criteriaString = MyWhereCriteria.getCriteriaString(criteriaList); - List> aggregationMapList = - mapper().getGroupedListByCondition(slaveTable, selectList, criteriaString, groupBy); - doMakeLocalAggregationData(aggregationMapList, resultList, relationStruct); - } - } - } - GlobalThreadLocal.setDataPerm(dataPermEnabled); } /** - * 集成本地服务中,多个表之间的聚合计算关系,主要覆盖一对多和多对多两种场景。 - * 其中一对多关系,比如课程表的章节统计字段sectionCount,可能依赖于课程章节表中关联章节的数量。 - * NOTE: 该方法内执行的SQL将禁用数据权限过滤。 + * 根据实体对象参数列表和过滤条件,集成本地多对多关联聚合计算数据。 * - * @param dataObject 主表对象。数据集成将直接作用于该对象。 - * @param criteriaListMap 自定义的过滤条件列表。每个key对应不同的聚合关联字段名称,既注解应用的Java字段,如courseSectionCount。 - * @param 参数类型。 - * @return 集成后的主表对象。 + * @param resultList 实体对象数据列表。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 */ - public T buildAggregationRelationForData(T dataObject, Map> criteriaListMap) { - if (dataObject == null) { - return null; + private void buildManyToManyAggregationForDataList( + List resultList, Map> criteriaListMap) { + if (CollectionUtils.isEmpty(this.relationManyToManyAggrStructList) + || CollectionUtils.isEmpty(resultList)) { + return; } - boolean dataPermEnabled = GlobalThreadLocal.setDataPerm(false); - // 开始处理多对多场景。 - if (CollectionUtils.isNotEmpty(this.relationManyToManyAggrStructList)) { - if (criteriaListMap == null) { - criteriaListMap = new HashMap<>(relationOneToManyAggrStructList.size()); + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(this.relationManyToManyAggrStructList.size()); + } + for (RelationStruct relationStruct : this.relationManyToManyAggrStructList) { + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isEmpty(masterIdSet)) { + continue; } - for (RelationStruct relationStruct : this.relationManyToManyAggrStructList) { - Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); - if (masterIdValue != null) { - RelationManyToManyAggregation relation = relationStruct.relationManyToManyAggregation; - String slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); - String relationTable = MyModelUtil.mapToTableName(relation.relationModelClass()); - String relationMasterColumn = - MyModelUtil.mapToColumnName(relation.relationMasterIdField(), relation.relationModelClass()); - String relationSlaveColumn = - MyModelUtil.mapToColumnName(relation.relationSlaveIdField(), relation.relationModelClass()); - String slaveColumn = MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass()); - // 判断是否只需要关联中间表即可,从而提升查询统计的效率。 - // 1. 统计字段为中间表字段。2. 自定义过滤条件中没有基于从表字段的过滤条件。 - boolean onlySelectRelationTable = relation.aggregationModelClass().equals(relation.relationModelClass()); - if (onlySelectRelationTable && MapUtils.isNotEmpty(criteriaListMap)) { - List criteriaList = - criteriaListMap.get(relationStruct.relationField.getName()); - if (CollectionUtils.isNotEmpty(criteriaList)) { - for (MyWhereCriteria whereCriteria : criteriaList) { - if (whereCriteria.getModelClazz().equals(relation.slaveModelClass())) { - onlySelectRelationTable = false; - break; - } - } - } - } - String aggregationTable = - relation.aggregationModelClass().equals(relation.relationModelClass()) ? relationTable : slaveTable; - Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( - relationTable, relationMasterColumn, relation.aggregationModelClass(), - aggregationTable, relation.aggregationField(), relation.aggregationType()); - String selectList = selectAndGroupByTuple.getFirst(); - String groupBy = selectAndGroupByTuple.getSecond(); - // 组装过滤条件 - StringBuilder whereClause = new StringBuilder(256); - whereClause.append(relationTable).append(".").append(relationMasterColumn); - if (masterIdValue instanceof Number) { - whereClause.append(" = ").append(masterIdValue); - } else { - whereClause.append(" = '").append(masterIdValue).append("'"); - } - // 如果需要从表聚合计算或参与过滤,则需要把中间表和从表之间的关联条件加上。 - if (!onlySelectRelationTable) { - whereClause.append(" AND ") - .append(relationTable) - .append(".") - .append(relationSlaveColumn) - .append(" = ") - .append(slaveTable) - .append(".") - .append(slaveColumn); - } - List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); - if (criteriaList == null) { - criteriaList = new LinkedList<>(); - } - if (StringUtils.isNotBlank(relationStruct.service.deletedFlagFieldName)) { - MyWhereCriteria deleteFilter = new MyWhereCriteria(); - deleteFilter.setCriteria( - relation.slaveModelClass(), - relationStruct.service.deletedFlagFieldName, - MyWhereCriteria.OPERATOR_EQUAL, - GlobalDeletedFlag.NORMAL); - criteriaList.add(deleteFilter); - } - if (CollectionUtils.isNotEmpty(criteriaList)) { - String criteriaString = MyWhereCriteria.getCriteriaString(criteriaList); - whereClause.append(" AND ").append(criteriaString); - } - StringBuilder tableNames = new StringBuilder(64); - tableNames.append(relationTable); - if (!onlySelectRelationTable) { - tableNames.append(", ").append(slaveTable); - } - List> aggregationMapList = mapper().getGroupedListByCondition( - tableNames.toString(), selectList, whereClause.toString(), groupBy); - // 将查询后的结果回填到主表数据中。 - if (CollectionUtils.isNotEmpty(aggregationMapList)) { - Object value = aggregationMapList.get(0).get(AGGREGATED_VALUE); - if (value != null) { - ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value); - } - } + RelationManyToManyAggregation relation = relationStruct.relationManyToManyAggregation; + // 提取关联中用到的各种字段和表数据。 + BasicAggregationRelationInfo basicRelationInfo = + this.parseBasicAggregationRelationInfo(relationStruct, criteriaListMap); + // 构建多表关联的where语句 + StringBuilder whereClause = new StringBuilder(256); + // 如果需要从表聚合计算或参与过滤,则需要把中间表和从表之间的关联条件加上。 + if (!basicRelationInfo.onlySelectRelationTable) { + whereClause.append(basicRelationInfo.relationTable) + .append(".") + .append(basicRelationInfo.relationSlaveColumn) + .append(" = ") + .append(basicRelationInfo.slaveTable) + .append(".") + .append(basicRelationInfo.slaveColumn); + } else { + whereClause.append("1 = 1"); + } + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + MyWhereCriteria inlistFilter = new MyWhereCriteria(); + inlistFilter.setCriteria(relation.relationModelClass(), + relation.relationMasterIdField(), MyWhereCriteria.OPERATOR_IN, masterIdSet); + criteriaList.add(inlistFilter); + if (StringUtils.isNotBlank(relationStruct.service.deletedFlagFieldName)) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + relation.slaveModelClass(), + relationStruct.service.deletedFlagFieldName, + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + String criteriaString = MyWhereCriteria.getCriteriaString(criteriaList); + whereClause.append(AND_OP).append(criteriaString); + StringBuilder tableNames = new StringBuilder(64); + tableNames.append(basicRelationInfo.relationTable); + if (!basicRelationInfo.onlySelectRelationTable) { + tableNames.append(", ").append(basicRelationInfo.slaveTable); + } + List> aggregationMapList = + mapper().getGroupedListByCondition(tableNames.toString(), + basicRelationInfo.selectList, whereClause.toString(), basicRelationInfo.groupBy); + doMakeLocalAggregationData(aggregationMapList, resultList, relationStruct); + } + } + + /** + * 根据实体对象和过滤条件,集成本地多对多关联聚合计算数据。 + * + * @param dataObject 实体对象。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + */ + private void buildManyToManyAggregationForData( + T dataObject, Map> criteriaListMap) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationManyToManyAggrStructList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(relationManyToManyAggrStructList.size()); + } + for (RelationStruct relationStruct : this.relationManyToManyAggrStructList) { + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (masterIdValue == null) { + continue; + } + BasicAggregationRelationInfo basicRelationInfo = + this.parseBasicAggregationRelationInfo(relationStruct, criteriaListMap); + // 组装过滤条件 + String whereClause = this.makeManyToManyWhereClause( + relationStruct, masterIdValue, basicRelationInfo, criteriaListMap); + StringBuilder tableNames = new StringBuilder(64); + tableNames.append(basicRelationInfo.relationTable); + if (!basicRelationInfo.onlySelectRelationTable) { + tableNames.append(", ").append(basicRelationInfo.slaveTable); + } + List> aggregationMapList = + mapper().getGroupedListByCondition(tableNames.toString(), + basicRelationInfo.selectList, whereClause, basicRelationInfo.groupBy); + // 将查询后的结果回填到主表数据中。 + if (CollectionUtils.isNotEmpty(aggregationMapList)) { + Object value = aggregationMapList.get(0).get(AGGREGATED_VALUE); + if (value != null) { + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value); } } } - // 构建一对多场景 - if (CollectionUtils.isNotEmpty(this.relationOneToManyAggrStructList)) { - if (criteriaListMap == null) { - criteriaListMap = new HashMap<>(relationOneToManyAggrStructList.size()); + } + + /** + * 根据实体对象参数列表和过滤条件,集成本地一对多关联聚合计算数据。 + * + * @param resultList 实体对象数据列表。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + */ + private void buildOneToManyAggregationForDataList( + List resultList, Map> criteriaListMap) { + // 处理多一多场景下,根据主表的结果,进行从表聚合数据的计算。 + if (CollectionUtils.isEmpty(this.relationOneToManyAggrStructList) + || CollectionUtils.isEmpty(resultList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(relationOneToManyAggrStructList.size()); + } + for (RelationStruct relationStruct : this.relationOneToManyAggrStructList) { + Set masterIdSet = resultList.stream() + .map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField)) + .filter(Objects::nonNull) + .collect(toSet()); + if (CollectionUtils.isEmpty(masterIdSet)) { + continue; } - for (RelationStruct relationStruct : this.relationOneToManyAggrStructList) { - Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); - if (masterIdValue != null) { - RelationOneToManyAggregation relation = relationStruct.relationOneToManyAggregation; - String slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); - String slaveColumnName = - MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass()); - Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( - slaveTable, slaveColumnName, relation.slaveModelClass(), - slaveTable, relation.aggregationField(), relation.aggregationType()); - String selectList = selectAndGroupByTuple.getFirst(); - String groupBy = selectAndGroupByTuple.getSecond(); - StringBuilder whereClause = new StringBuilder(64); - if (masterIdValue instanceof Number) { - whereClause.append(slaveColumnName).append(" = ").append(masterIdValue); - } else { - whereClause.append(slaveColumnName).append(" = '").append(masterIdValue).append("'"); - } - List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); - if (criteriaList == null) { - criteriaList = new LinkedList<>(); - } - if (StringUtils.isNotBlank(relationStruct.service.deletedFlagFieldName)) { - MyWhereCriteria deleteFilter = new MyWhereCriteria(); - deleteFilter.setCriteria( - relation.slaveModelClass(), - relationStruct.service.deletedFlagFieldName, - MyWhereCriteria.OPERATOR_EQUAL, - GlobalDeletedFlag.NORMAL); - criteriaList.add(deleteFilter); - } - if (CollectionUtils.isNotEmpty(criteriaList)) { - String criteriaString = MyWhereCriteria.getCriteriaString(criteriaList); - whereClause.append(" AND ").append(criteriaString); - } - // 获取分组聚合计算结果 - List> aggregationMapList = mapper().getGroupedListByCondition( - slaveTable, selectList, whereClause.toString(), groupBy); - // 将计算结果回填到主表关联字段 - if (CollectionUtils.isNotEmpty(aggregationMapList)) { - Object value = aggregationMapList.get(0).get(AGGREGATED_VALUE); - if (value != null) { - ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value); - } - } + RelationOneToManyAggregation relation = relationStruct.relationOneToManyAggregation; + // 开始获取后面所需的各种关联数据。此部分今后可以移植到缓存中,无需每次计算。 + String slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); + String slaveColumnName = MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass()); + Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( + slaveTable, slaveColumnName, relation.slaveModelClass(), + slaveTable, relation.aggregationField(), relation.aggregationType()); + String selectList = selectAndGroupByTuple.getFirst(); + String groupBy = selectAndGroupByTuple.getSecond(); + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + MyWhereCriteria inlistFilter = new MyWhereCriteria(); + inlistFilter.setCriteria(relation.slaveModelClass(), + relation.slaveIdField(), MyWhereCriteria.OPERATOR_IN, masterIdSet); + criteriaList.add(inlistFilter); + if (StringUtils.isNotBlank(relationStruct.service.deletedFlagFieldName)) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + relation.slaveModelClass(), + relationStruct.service.deletedFlagFieldName, + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + String criteriaString = MyWhereCriteria.getCriteriaString(criteriaList); + List> aggregationMapList = + mapper().getGroupedListByCondition(slaveTable, selectList, criteriaString, groupBy); + doMakeLocalAggregationData(aggregationMapList, resultList, relationStruct); + } + } + + /** + * 根据实体对象和过滤条件,集成本地一对多关联聚合计算数据。 + * + * @param dataObject 实体对象。 + * @param criteriaListMap 过滤参数。key为主表字段名称,value是过滤条件列表。 + */ + private void buildOneToManyAggregationForData( + T dataObject, Map> criteriaListMap) { + if (dataObject == null || CollectionUtils.isEmpty(this.relationOneToManyAggrStructList)) { + return; + } + if (criteriaListMap == null) { + criteriaListMap = new HashMap<>(relationOneToManyAggrStructList.size()); + } + for (RelationStruct relationStruct : this.relationOneToManyAggrStructList) { + Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField); + if (masterIdValue == null) { + continue; + } + RelationOneToManyAggregation relation = relationStruct.relationOneToManyAggregation; + String slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); + String slaveColumnName = + MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass()); + Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( + slaveTable, slaveColumnName, relation.slaveModelClass(), + slaveTable, relation.aggregationField(), relation.aggregationType()); + String selectList = selectAndGroupByTuple.getFirst(); + String groupBy = selectAndGroupByTuple.getSecond(); + String whereClause = this.makeOneToManyWhereClause( + relationStruct, masterIdValue, slaveColumnName, criteriaListMap); + // 获取分组聚合计算结果 + List> aggregationMapList = + mapper().getGroupedListByCondition(slaveTable, selectList, whereClause, groupBy); + // 将计算结果回填到主表关联字段 + if (CollectionUtils.isNotEmpty(aggregationMapList)) { + Object value = aggregationMapList.get(0).get(AGGREGATED_VALUE); + if (value != null) { + ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value); } } } - GlobalThreadLocal.setDataPerm(dataPermEnabled); - return dataObject; } /** * 仅仅在spring boot 启动后的监听器事件中调用,缓存所有service的关联关系,加速后续的数据绑定效率。 */ - @SuppressWarnings("unchecked") public void loadRelationStruct() { Field[] fields = ReflectUtil.getFields(modelClass); for (Field f : fields) { - RelationConstDict relationConstDict = f.getAnnotation(RelationConstDict.class); - if (relationConstDict != null) { - if (relationConstDictStructList == null) { - relationConstDictStructList = new LinkedList<>(); - } - RelationStruct relationStruct = new RelationStruct(); - relationStruct.relationField = f; - relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationConstDict.masterIdField()); - Field dictMapField = ReflectUtil.getField(relationConstDict.constantDictClass(), "DICT_MAP"); - relationStruct.dictMap = (Map) ReflectUtil.getFieldValue(modelClass, dictMapField); - relationConstDictStructList.add(relationStruct); - continue; - } - RelationDict relationDict = f.getAnnotation(RelationDict.class); - if (relationDict != null) { - if (relationDictStructList == null) { - relationDictStructList = new LinkedList<>(); - } - RelationStruct relationStruct = new RelationStruct(); - relationStruct.relationField = f; - relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationDict.masterIdField()); - relationStruct.relationDict = relationDict; - if (StringUtils.isNotBlank(relationDict.equalOneToOneRelationField())) { - relationStruct.equalOneToOneRelationField = - ReflectUtil.getField(modelClass, relationDict.equalOneToOneRelationField()); - } - relationStruct.service = ApplicationContextHolder.getBean( - StringUtils.uncapitalize(relationDict.slaveServiceName())); - relationDictStructList.add(relationStruct); - continue; - } - RelationOneToOne relationOneToOne = f.getAnnotation(RelationOneToOne.class); - if (relationOneToOne != null) { - if (relationOneToOneStructList == null) { - relationOneToOneStructList = new LinkedList<>(); - } - RelationStruct relationStruct = new RelationStruct(); - relationStruct.relationField = f; - relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationOneToOne.masterIdField()); - relationStruct.relationOneToOne = relationOneToOne; - relationStruct.service = ApplicationContextHolder.getBean( - StringUtils.uncapitalize(relationOneToOne.slaveServiceName())); - relationOneToOneStructList.add(relationStruct); - continue; - } - RelationOneToManyAggregation relationOneToManyAggregation = f.getAnnotation(RelationOneToManyAggregation.class); - if (relationOneToManyAggregation != null) { - if (relationOneToManyAggrStructList == null) { - relationOneToManyAggrStructList = new LinkedList<>(); - } - RelationStruct relationStruct = new RelationStruct(); - relationStruct.relationField = f; - relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationOneToManyAggregation.masterIdField()); - relationStruct.relationOneToManyAggregation = relationOneToManyAggregation; - relationStruct.service = ApplicationContextHolder.getBean( - StringUtils.uncapitalize(relationOneToManyAggregation.slaveServiceName())); - relationOneToManyAggrStructList.add(relationStruct); - continue; - } - RelationManyToManyAggregation relationManyToManyAggregation = f.getAnnotation(RelationManyToManyAggregation.class); - if (relationManyToManyAggregation != null) { - if (relationManyToManyAggrStructList == null) { - relationManyToManyAggrStructList = new LinkedList<>(); - } - RelationStruct relationStruct = new RelationStruct(); - relationStruct.relationField = f; - relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationManyToManyAggregation.masterIdField()); - relationStruct.relationManyToManyAggregation = relationManyToManyAggregation; - relationStruct.service = ApplicationContextHolder.getBean( - StringUtils.uncapitalize(relationManyToManyAggregation.slaveServiceName())); - relationManyToManyAggrStructList.add(relationStruct); - } + initializeRelationDictStruct(f); + initializeRelationStruct(f); + initializeRelationAggregationStruct(f); } } @@ -1189,10 +1107,208 @@ public abstract class BaseService { return e; } + private void initializeRelationStruct(Field f) { + RelationOneToOne relationOneToOne = f.getAnnotation(RelationOneToOne.class); + if (relationOneToOne != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationOneToOne.masterIdField()); + relationStruct.relationOneToOne = relationOneToOne; + relationStruct.service = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationOneToOne.slaveServiceName())); + relationOneToOneStructList.add(relationStruct); + return; + } + RelationManyToMany relationManyToMany = f.getAnnotation(RelationManyToMany.class); + if (relationManyToMany != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationManyToMany.relationMasterIdField()); + relationStruct.relationManyToMany = relationManyToMany; + relationStruct.manyToManyMapper = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationManyToMany.relationMapperName())); + relationManyToManyStructList.add(relationStruct); + } + } + + private void initializeRelationAggregationStruct(Field f) { + RelationOneToManyAggregation relationOneToManyAggregation = f.getAnnotation(RelationOneToManyAggregation.class); + if (relationOneToManyAggregation != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationOneToManyAggregation.masterIdField()); + relationStruct.relationOneToManyAggregation = relationOneToManyAggregation; + relationStruct.service = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationOneToManyAggregation.slaveServiceName())); + relationOneToManyAggrStructList.add(relationStruct); + return; + } + RelationManyToManyAggregation relationManyToManyAggregation = f.getAnnotation(RelationManyToManyAggregation.class); + if (relationManyToManyAggregation != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationManyToManyAggregation.masterIdField()); + relationStruct.relationManyToManyAggregation = relationManyToManyAggregation; + relationStruct.service = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationManyToManyAggregation.slaveServiceName())); + relationManyToManyAggrStructList.add(relationStruct); + } + } + + @SuppressWarnings("unchecked") + private void initializeRelationDictStruct(Field f) { + RelationConstDict relationConstDict = f.getAnnotation(RelationConstDict.class); + if (relationConstDict != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationConstDict.masterIdField()); + Field dictMapField = ReflectUtil.getField(relationConstDict.constantDictClass(), "DICT_MAP"); + relationStruct.dictMap = (Map) ReflectUtil.getFieldValue(modelClass, dictMapField); + relationConstDictStructList.add(relationStruct); + return; + } + RelationDict relationDict = f.getAnnotation(RelationDict.class); + if (relationDict != null) { + RelationStruct relationStruct = new RelationStruct(); + relationStruct.relationField = f; + relationStruct.masterIdField = ReflectUtil.getField(modelClass, relationDict.masterIdField()); + relationStruct.relationDict = relationDict; + if (StringUtils.isNotBlank(relationDict.equalOneToOneRelationField())) { + relationStruct.equalOneToOneRelationField = + ReflectUtil.getField(modelClass, relationDict.equalOneToOneRelationField()); + } + relationStruct.service = ApplicationContextHolder.getBean( + StringUtils.uncapitalize(relationDict.slaveServiceName())); + relationDictStructList.add(relationStruct); + } + } + + private BasicAggregationRelationInfo parseBasicAggregationRelationInfo( + RelationStruct relationStruct, Map> criteriaListMap) { + RelationManyToManyAggregation relation = relationStruct.relationManyToManyAggregation; + BasicAggregationRelationInfo relationInfo = new BasicAggregationRelationInfo(); + // 提取关联中用到的各种字段和表数据。 + relationInfo.slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass()); + relationInfo.relationTable = MyModelUtil.mapToTableName(relation.relationModelClass()); + relationInfo.relationMasterColumn = + MyModelUtil.mapToColumnName(relation.relationMasterIdField(), relation.relationModelClass()); + relationInfo.relationSlaveColumn = + MyModelUtil.mapToColumnName(relation.relationSlaveIdField(), relation.relationModelClass()); + relationInfo.slaveColumn = MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass()); + // 判断是否只需要关联中间表即可,从而提升查询统计的效率。 + // 1. 统计字段为中间表字段。2. 自定义过滤条件中没有基于从表字段的过滤条件。 + relationInfo.onlySelectRelationTable = + relation.aggregationModelClass().equals(relation.relationModelClass()); + if (relationInfo.onlySelectRelationTable && MapUtils.isNotEmpty(criteriaListMap)) { + List criteriaList = + criteriaListMap.get(relationStruct.relationField.getName()); + if (CollectionUtils.isNotEmpty(criteriaList)) { + for (MyWhereCriteria whereCriteria : criteriaList) { + if (whereCriteria.getModelClazz().equals(relation.slaveModelClass())) { + relationInfo.onlySelectRelationTable = false; + break; + } + } + } + } + String aggregationTable = relation.aggregationModelClass().equals(relation.relationModelClass()) + ? relationInfo.relationTable : relationInfo.slaveTable; + Tuple2 selectAndGroupByTuple = makeSelectListAndGroupByClause( + relationInfo.relationTable, relationInfo.relationMasterColumn, relation.aggregationModelClass(), + aggregationTable, relation.aggregationField(), relation.aggregationType()); + relationInfo.selectList = selectAndGroupByTuple.getFirst(); + relationInfo.groupBy = selectAndGroupByTuple.getSecond(); + return relationInfo; + } + + private String makeManyToManyWhereClause( + RelationStruct relationStruct, + Object masterIdValue, + BasicAggregationRelationInfo basicRelationInfo, + Map> criteriaListMap) { + StringBuilder whereClause = new StringBuilder(256); + whereClause.append(basicRelationInfo.relationTable) + .append(".").append(basicRelationInfo.relationMasterColumn); + if (masterIdValue instanceof Number) { + whereClause.append(" = ").append(masterIdValue); + } else { + whereClause.append(" = '").append(masterIdValue).append("'"); + } + // 如果需要从表聚合计算或参与过滤,则需要把中间表和从表之间的关联条件加上。 + if (!basicRelationInfo.onlySelectRelationTable) { + whereClause.append(AND_OP) + .append(basicRelationInfo.relationTable) + .append(".") + .append(basicRelationInfo.relationSlaveColumn) + .append(" = ") + .append(basicRelationInfo.slaveTable) + .append(".") + .append(basicRelationInfo.slaveColumn); + } + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + if (StringUtils.isNotBlank(relationStruct.service.deletedFlagFieldName)) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + relationStruct.relationManyToManyAggregation.slaveModelClass(), + relationStruct.service.deletedFlagFieldName, + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + if (CollectionUtils.isNotEmpty(criteriaList)) { + String criteriaString = MyWhereCriteria.getCriteriaString(criteriaList); + whereClause.append(AND_OP).append(criteriaString); + } + return whereClause.toString(); + } + + private String makeOneToManyWhereClause( + RelationStruct relationStruct, + Object masterIdValue, + String slaveColumnName, + Map> criteriaListMap) { + StringBuilder whereClause = new StringBuilder(64); + if (masterIdValue instanceof Number) { + whereClause.append(slaveColumnName).append(" = ").append(masterIdValue); + } else { + whereClause.append(slaveColumnName).append(" = '").append(masterIdValue).append("'"); + } + List criteriaList = criteriaListMap.get(relationStruct.relationField.getName()); + if (criteriaList == null) { + criteriaList = new LinkedList<>(); + } + if (StringUtils.isNotBlank(relationStruct.service.deletedFlagFieldName)) { + MyWhereCriteria deleteFilter = new MyWhereCriteria(); + deleteFilter.setCriteria( + relationStruct.relationOneToManyAggregation.slaveModelClass(), + relationStruct.service.deletedFlagFieldName, + MyWhereCriteria.OPERATOR_EQUAL, + GlobalDeletedFlag.NORMAL); + criteriaList.add(deleteFilter); + } + if (CollectionUtils.isNotEmpty(criteriaList)) { + String criteriaString = MyWhereCriteria.getCriteriaString(criteriaList); + whereClause.append(AND_OP).append(criteriaString); + } + return whereClause.toString(); + } + + private static class BasicAggregationRelationInfo { + private String slaveTable; + private String slaveColumn; + private String relationTable; + private String relationMasterColumn; + private String relationSlaveColumn; + private String selectList; + private String groupBy; + private boolean onlySelectRelationTable; + } + private void doMakeLocalAggregationData( - List> aggregationMapList, - List resultList, - RelationStruct relationStruct) { + List> aggregationMapList, List resultList, RelationStruct relationStruct) { if (CollectionUtils.isEmpty(resultList)) { return; } @@ -1254,15 +1370,16 @@ public abstract class BaseService { } static class RelationStruct { - public Field relationField; - public Field masterIdField; - public Field equalOneToOneRelationField; - public BaseService service; - public Map dictMap; - public RelationDict relationDict; - public RelationOneToOne relationOneToOne; - public RelationConstDict relationConstDict; - public RelationOneToManyAggregation relationOneToManyAggregation; - public RelationManyToManyAggregation relationManyToManyAggregation; + private Field relationField; + private Field masterIdField; + private Field equalOneToOneRelationField; + private BaseService service; + private BaseDaoMapper manyToManyMapper; + private Map dictMap; + private RelationDict relationDict; + private RelationOneToOne relationOneToOne; + private RelationManyToMany relationManyToMany; + private RelationOneToManyAggregation relationOneToManyAggregation; + private RelationManyToManyAggregation relationManyToManyAggregation; } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/cache/DictionaryCache.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/cache/DictionaryCache.java index cafdbdd8..0a0bff86 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/cache/DictionaryCache.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/cache/DictionaryCache.java @@ -9,7 +9,7 @@ import java.util.Set; * @param 字典表主键类型。 * @param 字典表对象类型。 * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface DictionaryCache { @@ -39,8 +39,9 @@ public interface DictionaryCache { * 重新加载,先清空原有数据,在执行putAll的操作。 * * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 */ - void reload(List dataList); + void reload(List dataList, boolean force); /** * 从缓存中获取指定的数据。 @@ -53,7 +54,7 @@ public interface DictionaryCache { /** * 将数据存入缓存。 * - * @param key 通常为字典数据的主键。 + * @param key 通常为字典数据的主键。 * @param object 字典数据对象。 */ void put(K key, V object); @@ -81,7 +82,7 @@ public interface DictionaryCache { void invalidateSet(Set keys); /** - * 清空缓存 + * 清空缓存。 */ void invalidateAll(); } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/cache/MapDictionaryCache.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/cache/MapDictionaryCache.java index 766289fa..f1a99c9d 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/cache/MapDictionaryCache.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/cache/MapDictionaryCache.java @@ -9,7 +9,7 @@ import java.util.function.Function; * @param 字典表主键类型。 * @param 字典表对象类型。 * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class MapDictionaryCache implements DictionaryCache { @@ -26,8 +26,8 @@ public class MapDictionaryCache implements DictionaryCache { * 当前对象的构造器函数。 * * @param idGetter 获取当前类主键字段值的函数对象。 - * @param 字典主键类型。 - * @param 字典对象类型 + * @param 字典主键类型。 + * @param 字典对象类型 * @return 实例化后的字典内存缓存对象。 */ public static MapDictionaryCache create(Function idGetter) { @@ -37,10 +37,20 @@ public class MapDictionaryCache implements DictionaryCache { return new MapDictionaryCache<>(idGetter); } + /** + * 构造函数。 + * + * @param idGetter 主键Id的获取函数对象。 + */ public MapDictionaryCache(Function idGetter) { this.idGetter = idGetter; } + /** + * 按照数据插入的顺序返回全部字典对象的列表。 + * + * @return 全部字段数据列表。 + */ @Override public synchronized List getAll() { List resultList = new LinkedList<>(); @@ -50,6 +60,12 @@ public class MapDictionaryCache implements DictionaryCache { return resultList; } + /** + * 获取缓存中与键列表对应的对象列表。 + * + * @param keys 主键集合。 + * @return 对象列表。 + */ @Override public synchronized List getInList(Set keys) { List resultList = new LinkedList<>(); @@ -62,6 +78,11 @@ public class MapDictionaryCache implements DictionaryCache { return resultList; } + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ @Override public synchronized void putAll(List dataList) { if (dataList == null) { @@ -73,32 +94,69 @@ public class MapDictionaryCache implements DictionaryCache { }); } + /** + * 重新加载,先清空原有数据,在执行putAll的操作。 + * + * @param dataList 待缓存的数据列表。 + * @param force true则强制刷新,如果false,当缓存中存在数据时不刷新。 + */ @Override - public synchronized void reload(List dataList) { + public synchronized void reload(List dataList, boolean force) { + if (!force && this.getCount() > 0) { + return; + } this.invalidateAll(); this.putAll(dataList); } + /** + * 从缓存中获取指定的数据。 + * + * @param id 数据的key。 + * @return 获取到的数据,如果没有返回null。 + */ @Override public synchronized V get(K id) { return id == null ? null : dataMap.get(id); } + /** + * 将数据存入缓存。 + * + * @param id 通常为字典数据的主键。 + * @param object 字典数据对象。 + */ @Override public synchronized void put(K id, V object) { dataMap.put(id, object); } + /** + * 获取缓存中数据条目的数量。 + * + * @return 返回缓存的数据数量。 + */ @Override public synchronized int getCount() { return dataMap.size(); } + /** + * 删除缓存中指定的键。 + * + * @param id 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ @Override public synchronized V invalidate(K id) { return id == null ? null : dataMap.remove(id); } + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ @Override public synchronized void invalidateSet(Set keys) { keys.forEach(id -> { @@ -108,6 +166,9 @@ public class MapDictionaryCache implements DictionaryCache { }); } + /** + * 清空缓存。 + */ @Override public synchronized void invalidateAll() { dataMap.clear(); diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/cache/MapTreeDictionaryCache.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/cache/MapTreeDictionaryCache.java index 3587a7f3..6bb5bb47 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/cache/MapTreeDictionaryCache.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/cache/MapTreeDictionaryCache.java @@ -12,10 +12,13 @@ import java.util.function.Function; * @param 字典表主键类型。 * @param 字典表对象类型。 * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class MapTreeDictionaryCache extends MapDictionaryCache { + /** + * 树形数据存储对象。 + */ private final Multimap allTreeMap = LinkedHashMultimap.create(); /** * 获取字典父主键数据的函数对象。 @@ -25,10 +28,10 @@ public class MapTreeDictionaryCache extends MapDictionaryCache { /** * 当前对象的构造器函数。 * - * @param idGetter 获取当前类主键字段值的函数对象。 + * @param idGetter 获取当前类主键字段值的函数对象。 * @param parentIdGetter 获取当前类父主键字段值的函数对象。 - * @param 字典主键类型。 - * @param 字典对象类型 + * @param 字典主键类型。 + * @param 字典对象类型 * @return 实例化后的树形字典内存缓存对象。 */ public static MapTreeDictionaryCache create(Function idGetter, Function parentIdGetter) { @@ -41,6 +44,12 @@ public class MapTreeDictionaryCache extends MapDictionaryCache { return new MapTreeDictionaryCache<>(idGetter, parentIdGetter); } + /** + * 构造函数。 + * + * @param idGetter 获取当前类主键字段值的函数对象。 + * @param parentIdGetter 获取当前类父主键字段值的函数对象。 + */ public MapTreeDictionaryCache(Function idGetter, Function parentIdGetter) { super(idGetter); this.parentIdGetter = parentIdGetter; @@ -56,6 +65,11 @@ public class MapTreeDictionaryCache extends MapDictionaryCache { return new LinkedList<>(allTreeMap.get(parentId)); } + /** + * 将参数List中的数据保存到缓存中,同时保证getAll返回的数据列表,与参数列表中数据项的顺序保持一致。 + * + * @param dataList 待缓存的数据列表。 + */ @Override public synchronized void putAll(List dataList) { if (dataList == null) { @@ -69,6 +83,12 @@ public class MapTreeDictionaryCache extends MapDictionaryCache { }); } + /** + * 将数据存入缓存。 + * + * @param id 通常为字典数据的主键。 + * @param data 字典数据对象。 + */ @Override public synchronized void put(K id, V data) { super.put(id, data); @@ -77,6 +97,12 @@ public class MapTreeDictionaryCache extends MapDictionaryCache { allTreeMap.put(parentId, data); } + /** + * 删除缓存中指定的键。 + * + * @param id 待删除数据的主键。 + * @return 返回被删除的对象,如果主键不存在,返回null。 + */ @Override public synchronized V invalidate(K id) { V v = super.invalidate(id); @@ -87,6 +113,11 @@ public class MapTreeDictionaryCache extends MapDictionaryCache { return v; } + /** + * 删除缓存中,参数列表中包含的键。 + * + * @param keys 待删除数据的主键集合。 + */ @Override public synchronized void invalidateSet(Set keys) { keys.forEach(id -> { @@ -100,6 +131,9 @@ public class MapTreeDictionaryCache extends MapDictionaryCache { }); } + /** + * 清空缓存。 + */ @Override public synchronized void invalidateAll() { super.invalidateAll(); diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/AggregationType.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/AggregationType.java index 35acef63..158b4142 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/AggregationType.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/AggregationType.java @@ -7,32 +7,32 @@ import java.util.Map; * 聚合计算的常量类型对象。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public final class AggregationType { /** * sum 计数 */ - public final static int SUM = 0; + public static final int SUM = 0; /** * count 汇总 */ - public final static int COUNT = 1; + public static final int COUNT = 1; /** * average 平均值 */ - public final static int AVG = 2; + public static final int AVG = 2; /** * min 最小值 */ - public final static int MIN = 3; + public static final int MIN = 3; /** * max 最大值 */ - public final static int MAX = 4; + public static final int MAX = 4; - public static final Map DICT_MAP = new HashMap<>(5); + private static final Map DICT_MAP = new HashMap<>(5); static { DICT_MAP.put(0, "累计总和"); DICT_MAP.put(1, "数量总和"); @@ -48,7 +48,7 @@ public final class AggregationType { * @return 合法返回true,否则false。 */ public static boolean isValid(Integer value) { - return DICT_MAP.containsKey(value); + return value != null && DICT_MAP.containsKey(value); } /** @@ -72,4 +72,10 @@ public final class AggregationType { throw new IllegalArgumentException("无效的聚合类型!"); } } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private AggregationType() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/ApplicationConstant.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/ApplicationConstant.java index 58638a43..eda91fce 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/ApplicationConstant.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/ApplicationConstant.java @@ -4,16 +4,41 @@ package com.orange.admin.common.core.constant; * 应用程序的常量声明对象。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ -public interface ApplicationConstant { +public final class ApplicationConstant { /** * 图片文件上传的父目录。 */ - String UPLOAD_IMAGE_PARENT_PATH = "/image"; + public static final String UPLOAD_IMAGE_PARENT_PATH = "image"; /** * 附件文件上传的父目录。 */ - String UPLOAD_ATTACHMENT_PARENT_PATH = "/attachment"; + public static final String UPLOAD_ATTACHMENT_PARENT_PATH = "attachment"; + /** + * CSV文件扩展名。 + */ + public static final String CSV_EXT = "csv"; + /** + * XLSX文件扩展名。 + */ + public static final String XLSX_EXT = "xlsx"; + /** + * 统计分类计算时,按天聚合计算的常量值。(前端在MyOrderParam和MyGroupParam中传给后台) + */ + public static final String DAY_AGGREGATION = "day"; + /** + * 统计分类计算时,按月聚合计算的常量值。(前端在MyOrderParam和MyGroupParam中传给后台) + */ + public static final String MONTH_AGGREGATION = "month"; + /** + * 统计分类计算时,按年聚合计算的常量值。(前端在MyOrderParam和MyGroupParam中传给后台) + */ + public static final String YEAR_AGGREGATION = "year"; + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private ApplicationConstant() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/DataPermRuleType.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/DataPermRuleType.java index 59f67b63..820ca35b 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/DataPermRuleType.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/DataPermRuleType.java @@ -7,7 +7,7 @@ import java.util.Map; * 数据权限规则类型常量类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public final class DataPermRuleType { @@ -31,7 +31,7 @@ public final class DataPermRuleType { */ public static final int TYPE_CUSTOM_DETP_LIST = 5; - public static final Map DICT_MAP = new HashMap<>(4); + private static final Map DICT_MAP = new HashMap<>(4); static { DICT_MAP.put(0, "查看全部"); DICT_MAP.put(1, "仅查看当前用户"); @@ -45,8 +45,8 @@ public final class DataPermRuleType { * @param value 待验证的参数值。 * @return 合法返回true,否则false。 */ - public static boolean isValid(int value) { - return DICT_MAP.containsKey(value); + public static boolean isValid(Integer value) { + return value != null && DICT_MAP.containsKey(value); } /** diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/ErrorCodeEnum.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/ErrorCodeEnum.java index b8d9ac08..3954b468 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/ErrorCodeEnum.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/ErrorCodeEnum.java @@ -4,11 +4,17 @@ package com.orange.admin.common.core.constant; * 返回应答中的错误代码和错误信息。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public enum ErrorCodeEnum { + /** + * 没有错误 + */ NO_ERROR("没有错误"), + /** + * 未处理的异常! + */ UNHANDLED_EXCEPTION("未处理的异常!"), ARGUMENT_NULL_EXIST("数据验证失败,接口调用参数存在空值,请核对!"), @@ -37,24 +43,35 @@ public enum ErrorCodeEnum { DATA_PARENT_LEVEL_ID_NOT_EXIST("数据验证失败,父级别关联Id不存在,请刷新后重试!"), DATA_PARENT_ID_NOT_EXIST("数据验证失败,ParentId不存在,请核对!"), INVALID_RELATED_RECORD_ID("数据验证失败,关联数据并不存在,请刷新后重试!"), - INVALID_DATA_FIELD("数据验证失败,无效的数据字段!"), + INVALID_DATA_MODEL("数据验证失败,无效的数据实体对象!"), + INVALID_DATA_FIELD("数据验证失败,无效的数据实体对象字段!"), + INVALID_CLASS_FIELD("数据验证失败,无效的类对象字段!"), SERVER_INTERNAL_ERROR("服务器内部错误,请联系管理员!"), REDIS_CACHE_ACCESS_TIMEOUT("Redis缓存数据访问超时,请刷新后重试!"), REDIS_CACHE_ACCESS_STATE_ERROR("Redis缓存数据访问状态错误,请刷新后重试!"); // 下面的枚举值为特定枚举值,即开发者可以根据自己的项目需求定义更多的非通用枚举值 + /** + * 构造函数。 + * + * @param errorMessage 错误消息。 + */ ErrorCodeEnum(String errorMessage) { this.errorMessage = errorMessage; } + /** + * 错误信息。 + */ private String errorMessage; + /** + * 获取错误信息。 + * + * @return 错误信息。 + */ public String getErrorMessage() { return errorMessage; } - - public void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/GlobalDeletedFlag.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/GlobalDeletedFlag.java index 1f7f273f..c20458ff 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/GlobalDeletedFlag.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/constant/GlobalDeletedFlag.java @@ -4,16 +4,22 @@ package com.orange.admin.common.core.constant; * 数据记录逻辑删除标记常量。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ -public interface GlobalDeletedFlag { +public final class GlobalDeletedFlag { /** * 表示数据表记录已经删除 */ - int DELETED = -1; + public static final int DELETED = -1; /** * 数据记录正常 */ - int NORMAL = 1; + public static final int NORMAL = 1; + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private GlobalDeletedFlag() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/DataValidationException.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/DataValidationException.java index e7717e81..ca88bb96 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/DataValidationException.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/DataValidationException.java @@ -4,14 +4,22 @@ package com.orange.admin.common.core.exception; * 数据验证失败的自定义异常。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class DataValidationException extends RuntimeException { + /** + * 构造函数。 + */ public DataValidationException() { } + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ public DataValidationException(String msg) { super(msg); } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/InvalidClassFieldException.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/InvalidClassFieldException.java new file mode 100644 index 00000000..6df6d478 --- /dev/null +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/InvalidClassFieldException.java @@ -0,0 +1,30 @@ +package com.orange.admin.common.core.exception; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 无效的类对象字段的自定义异常。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class InvalidClassFieldException extends RuntimeException { + + private final String className; + private final String fieldName; + + /** + * 构造函数。 + * + * @param className 对象名。 + * @param fieldName 字段名。 + */ + public InvalidClassFieldException(String className, String fieldName) { + super("Invalid FieldName [" + fieldName + "] in Class [" + className + "]."); + this.className = className; + this.fieldName = fieldName; + } +} diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/InvalidDataFieldException.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/InvalidDataFieldException.java index dd9c387b..338b4676 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/InvalidDataFieldException.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/InvalidDataFieldException.java @@ -7,15 +7,21 @@ import lombok.EqualsAndHashCode; * 无效的实体对象字段的自定义异常。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Data @EqualsAndHashCode(callSuper = true) public class InvalidDataFieldException extends RuntimeException { - private String modelName; - private String fieldName; + private final String modelName; + private final String fieldName; + /** + * 构造函数。 + * + * @param modelName 实体对象名。 + * @param fieldName 字段名。 + */ public InvalidDataFieldException(String modelName, String fieldName) { super("Invalid FieldName [" + fieldName + "] in Model Class [" + modelName + "]."); this.modelName = modelName; diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/InvalidDataModelException.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/InvalidDataModelException.java index 7599a08b..ab933c43 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/InvalidDataModelException.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/InvalidDataModelException.java @@ -7,14 +7,19 @@ import lombok.EqualsAndHashCode; * 无效的实体对象的自定义异常。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Data @EqualsAndHashCode(callSuper = true) public class InvalidDataModelException extends RuntimeException { - private String modelName; + private final String modelName; + /** + * 构造函数。 + * + * @param modelName 实体对象名。 + */ public InvalidDataModelException(String modelName) { super("Invalid Model Class [" + modelName + "]."); this.modelName = modelName; diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/MyRuntimeException.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/MyRuntimeException.java new file mode 100644 index 00000000..ac138399 --- /dev/null +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/MyRuntimeException.java @@ -0,0 +1,36 @@ +package com.orange.admin.common.core.exception; + +/** + * 自定义的运行时异常,在需要抛出运行时异常时,可使用该异常。 + * NOTE:主要是为了避免SonarQube进行代码质量扫描时,给出警告。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ +public class MyRuntimeException extends RuntimeException { + + /** + * 构造函数。 + */ + public MyRuntimeException() { + + } + + /** + * 构造函数。 + * + * @param throwable 引发异常对象。 + */ + public MyRuntimeException(Throwable throwable) { + super(throwable); + } + + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ + public MyRuntimeException(String msg) { + super(msg); + } +} diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/NoDataAffectException.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/NoDataAffectException.java index 000ec7ea..f4f853d9 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/NoDataAffectException.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/NoDataAffectException.java @@ -4,14 +4,22 @@ package com.orange.admin.common.core.exception; * 没有数据被修改的自定义异常。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class NoDataAffectException extends RuntimeException { + /** + * 构造函数。 + */ public NoDataAffectException() { } + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ public NoDataAffectException(String msg) { super(msg); } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/NoDataPermException.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/NoDataPermException.java index 56ba42cc..82a5a406 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/NoDataPermException.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/NoDataPermException.java @@ -4,14 +4,22 @@ package com.orange.admin.common.core.exception; * 没有数据访问权限的自定义异常。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class NoDataPermException extends RuntimeException { + /** + * 构造函数。 + */ public NoDataPermException() { } + /** + * 构造函数。 + * + * @param msg 错误信息。 + */ public NoDataPermException(String msg) { super(msg); } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/RedisCacheAccessException.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/RedisCacheAccessException.java index fee4ba7f..60b5fe21 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/RedisCacheAccessException.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/exception/RedisCacheAccessException.java @@ -4,10 +4,16 @@ package com.orange.admin.common.core.exception; * Redis缓存访问失败。比如:获取分布式数据锁超时、等待线程中断等。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class RedisCacheAccessException extends RuntimeException { + /** + * 构造函数。 + * + * @param msg 错误信息。 + * @param cause 原始异常。 + */ public RedisCacheAccessException(String msg, Throwable cause) { super(msg, cause); } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/VerifyResult.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/CallResult.java similarity index 69% rename from orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/VerifyResult.java rename to orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/CallResult.java index 384c140b..8b9c3f39 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/VerifyResult.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/CallResult.java @@ -8,11 +8,15 @@ import lombok.Data; * 同时为了提升效率,减少查询次数,可以根据具体的需求,将部分验证关联对象存入data字段,以供Controller使用。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Data -public class VerifyResult { +public class CallResult { + /** + * 为了优化性能,所有没有携带数据的正确结果,均可用该对象表示。 + */ + private static final CallResult OK = new CallResult(); /** * 是否成功标记。 */ @@ -32,7 +36,7 @@ public class VerifyResult { * @param errorMessage 错误描述信息。 * @return 如果参数为空,表示成功,否则返回代码错误信息的错误对象实例。 */ - public static VerifyResult create(String errorMessage) { + public static CallResult create(String errorMessage) { return errorMessage == null ? ok() : error(errorMessage); } @@ -40,10 +44,10 @@ public class VerifyResult { * 创建验证结果对象。 * * @param errorMessage 错误描述信息。 - * @param data 附带的数据对象。 + * @param data 附带的数据对象。 * @return 如果参数为空,表示成功,否则返回代码错误信息的错误对象实例。 */ - public static VerifyResult create(String errorMessage, JSONObject data) { + public static CallResult create(String errorMessage, JSONObject data) { return errorMessage == null ? ok(data) : error(errorMessage); } @@ -52,8 +56,8 @@ public class VerifyResult { * * @return 验证成功对象实例。 */ - public static VerifyResult ok() { - return new VerifyResult(); + public static CallResult ok() { + return OK; } /** @@ -62,8 +66,8 @@ public class VerifyResult { * @param data 附带的数据对象。 * @return 验证成功对象实例。 */ - public static VerifyResult ok(JSONObject data) { - VerifyResult result = new VerifyResult(); + public static CallResult ok(JSONObject data) { + CallResult result = new CallResult(); result.data = data; return result; } @@ -74,11 +78,10 @@ public class VerifyResult { * @param errorMessage 错误描述。 * @return 验证失败对象实例。 */ - public static VerifyResult error(String errorMessage) { - VerifyResult verifyResult = new VerifyResult(); - verifyResult.success = false; - verifyResult.errorMessage = errorMessage; - return verifyResult; + public static CallResult error(String errorMessage) { + CallResult result = new CallResult(); + result.success = false; + result.errorMessage = errorMessage; + return result; } - } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/GlobalThreadLocal.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/GlobalThreadLocal.java index c34f7b95..98b2850c 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/GlobalThreadLocal.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/GlobalThreadLocal.java @@ -6,7 +6,7 @@ import cn.hutool.core.util.BooleanUtil; * 线程本地化数据管理的工具类。可根据需求自行添加更多的线程本地化变量及其操作方法。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class GlobalThreadLocal { @@ -42,4 +42,10 @@ public class GlobalThreadLocal { public static void clearDataPerm() { DATA_PERM_ENABLE.remove(); } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private GlobalThreadLocal() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyGroupCriteria.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyGroupCriteria.java index 25fb8d90..fe302317 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyGroupCriteria.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyGroupCriteria.java @@ -7,7 +7,7 @@ import lombok.Data; * Mybatis Mapper.xml中所需的分组条件对象。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Data @AllArgsConstructor diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyGroupParam.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyGroupParam.java index ac7073cb..b58f068c 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyGroupParam.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyGroupParam.java @@ -1,6 +1,10 @@ package com.orange.admin.common.core.object; import cn.hutool.core.util.ReflectUtil; +import com.orange.admin.common.core.constant.ApplicationConstant; +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.util.MyModelUtil; import lombok.Data; import lombok.EqualsAndHashCode; @@ -16,7 +20,7 @@ import java.util.List; * 查询分组参数请求对象。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @EqualsAndHashCode(callSuper = true) @Slf4j @@ -51,62 +55,15 @@ public class MyGroupParam extends ArrayList { StringBuilder groupSelectBuilder = new StringBuilder(128); int i = 0; for (GroupInfo groupInfo : groupParam) { - String modelName, fieldName, tableName, columnName; - String[] stringArray = StringUtils.split(groupInfo.fieldName,'.'); - if (stringArray.length == 1) { - modelName = modelClazz.getSimpleName(); - fieldName = groupInfo.fieldName; - tableName = MyModelUtil.mapToTableName(modelClazz); - columnName = MyModelUtil.mapToColumnName(fieldName, modelClazz); - } else { - Field field = ReflectUtil.getField(modelClazz, stringArray[0]); - if (field == null) { - log.error("Relation Field [{}] doesn't exist in Class [{}]!", - stringArray[0], modelClazz.getSimpleName()); - return null; - } - Class fieldClazz = field.getType(); - modelName = fieldClazz.getSimpleName(); - fieldName = stringArray[1]; - tableName = MyModelUtil.mapToTableName(fieldClazz); - columnName = MyModelUtil.mapToColumnName(fieldName, fieldClazz); + GroupBaseData groupBaseData = parseGroupBaseData(groupInfo, modelClazz); + if (StringUtils.isBlank(groupBaseData.tableName)) { + throw new InvalidDataModelException(groupBaseData.modelName); } - if (StringUtils.isBlank(tableName)) { - log.error("ModelName [{}] can't be mapped to Table!", modelName); - return null; + if (StringUtils.isBlank(groupBaseData.columnName)) { + throw new InvalidDataFieldException(groupBaseData.modelName, groupBaseData.fieldName); } - if (StringUtils.isBlank(columnName)) { - log.error("FieldName [{}] in Class [{}`] can't be mapped to Column!", fieldName, modelName); - return null; - } - if (StringUtils.isNotBlank(groupInfo.dateAggregateBy)) { - groupByBuilder.append("DATE_FORMAT(").append(tableName).append(".").append(columnName); - groupSelectBuilder.append("DATE_FORMAT(").append(tableName).append(".").append(columnName); - if ("day".equals(groupInfo.dateAggregateBy)) { - groupByBuilder.append(", '%Y-%m-%d')"); - groupSelectBuilder.append(", '%Y-%m-%d')"); - } else if ("month".equals(groupInfo.dateAggregateBy)) { - groupByBuilder.append(", '%Y-%m-01')"); - groupSelectBuilder.append(", '%Y-%m-01')"); - } else if ("year".equals(groupInfo.dateAggregateBy)) { - groupByBuilder.append(", '%Y-01-01')"); - groupSelectBuilder.append(", '%Y-01-01')"); - } else { - throw new IllegalArgumentException("Illegal DATE_FORMAT for GROUP ID list."); - } - if (StringUtils.isNotBlank(groupInfo.aliasName)) { - groupSelectBuilder.append(" ").append(groupInfo.aliasName); - } else { - groupSelectBuilder.append(" ").append(columnName); - } - } else { - groupByBuilder.append(tableName).append(".").append(columnName); - groupSelectBuilder.append(tableName).append(".").append(columnName); - if (StringUtils.isNotBlank(groupInfo.aliasName)) { - groupSelectBuilder.append(" ").append(groupInfo.aliasName); - } - } - String aliasName = StringUtils.isBlank(groupInfo.aliasName) ? fieldName : groupInfo.aliasName; + processGroupInfo(groupInfo, groupBaseData, groupByBuilder, groupSelectBuilder); + String aliasName = StringUtils.isBlank(groupInfo.aliasName) ? groupInfo.fieldName : groupInfo.aliasName; // selectGroupFieldList中的元素,目前只是被export操作使用。会根据集合中的元素名称匹配导出表头。 groupParam.selectGroupFieldList.add(aliasName); if (++i < groupParam.size()) { @@ -118,6 +75,67 @@ public class MyGroupParam extends ArrayList { return groupParam; } + private static GroupBaseData parseGroupBaseData(GroupInfo groupInfo, Class modelClazz) { + GroupBaseData baseData = new GroupBaseData(); + String[] stringArray = StringUtils.split(groupInfo.fieldName,'.'); + if (stringArray.length == 1) { + baseData.modelName = modelClazz.getSimpleName(); + baseData.fieldName = groupInfo.fieldName; + baseData.tableName = MyModelUtil.mapToTableName(modelClazz); + baseData.columnName = MyModelUtil.mapToColumnName(groupInfo.fieldName, modelClazz); + } else { + Field field = ReflectUtil.getField(modelClazz, stringArray[0]); + if (field == null) { + throw new InvalidClassFieldException(modelClazz.getSimpleName(), stringArray[0]); + } + Class fieldClazz = field.getType(); + baseData.modelName = fieldClazz.getSimpleName(); + baseData.fieldName = stringArray[1]; + baseData.tableName = MyModelUtil.mapToTableName(fieldClazz); + baseData.columnName = MyModelUtil.mapToColumnName(baseData.fieldName, fieldClazz); + } + return baseData; + } + + private static void processGroupInfo( + GroupInfo groupInfo, + GroupBaseData baseData, + StringBuilder groupByBuilder, + StringBuilder groupSelectBuilder) { + String tableName = baseData.tableName; + String columnName = baseData.columnName; + if (StringUtils.isNotBlank(groupInfo.dateAggregateBy)) { + groupByBuilder.append("DATE_FORMAT(").append(tableName).append(".").append(columnName); + groupSelectBuilder.append("DATE_FORMAT(").append(tableName).append(".").append(columnName); + if (ApplicationConstant.DAY_AGGREGATION.equals(groupInfo.dateAggregateBy)) { + groupByBuilder.append(", '%Y-%m-%d')"); + groupSelectBuilder.append(", '%Y-%m-%d')"); + } else if (ApplicationConstant.MONTH_AGGREGATION.equals(groupInfo.dateAggregateBy)) { + groupByBuilder.append(", '%Y-%m-01')"); + groupSelectBuilder.append(", '%Y-%m-01')"); + } else if (ApplicationConstant.YEAR_AGGREGATION.equals(groupInfo.dateAggregateBy)) { + groupByBuilder.append(", '%Y-01-01')"); + groupSelectBuilder.append(", '%Y-01-01')"); + } else { + throw new IllegalArgumentException("Illegal DATE_FORMAT for GROUP ID list."); + } + if (StringUtils.isNotBlank(groupInfo.aliasName)) { + groupSelectBuilder.append(" ").append(groupInfo.aliasName); + } else { + groupSelectBuilder.append(" ").append(columnName); + } + } else { + groupByBuilder.append(tableName).append(".").append(columnName); + groupSelectBuilder.append(tableName).append(".").append(columnName); + if (StringUtils.isNotBlank(groupInfo.aliasName)) { + groupSelectBuilder.append(" ").append(groupInfo.aliasName); + } + } + } + + /** + * 分组信息对象。 + */ @Data public static class GroupInfo { /** @@ -140,4 +158,11 @@ public class MyGroupParam extends ArrayList { */ private String dateAggregateBy; } + + private static class GroupBaseData { + private String modelName; + private String fieldName; + private String tableName; + private String columnName; + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyOrderParam.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyOrderParam.java index f06bd230..029186c8 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyOrderParam.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyOrderParam.java @@ -1,6 +1,10 @@ package com.orange.admin.common.core.object; import cn.hutool.core.util.ReflectUtil; +import com.orange.admin.common.core.constant.ApplicationConstant; +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.util.MyModelUtil; import lombok.Data; import lombok.EqualsAndHashCode; @@ -14,13 +18,14 @@ import java.util.*; * Controller参数中的排序请求对象。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @EqualsAndHashCode(callSuper = true) @Slf4j @Data public class MyOrderParam extends ArrayList { + private static final String DICT_MAP = "DictMap."; /** * 基于排序对象中的JSON数据,构建SQL中order by从句可以直接使用的排序字符串。 * @@ -32,65 +37,21 @@ public class MyOrderParam extends ArrayList { if (orderParam == null) { return null; } - String exceptionMessage; if (modelClazz == null) { - throw new IllegalArgumentException("modelClazz Argument can't be NULL"); + throw new IllegalArgumentException( + "modelClazz Argument in MyOrderParam.buildOrderBy can't be NULL"); } int i = 0; StringBuilder orderBy = new StringBuilder(128); for (OrderInfo orderInfo : orderParam) { - String modelName, fieldName = orderInfo.fieldName, tableName, columnName; - int pos = fieldName.indexOf("DictMap."); - if (pos != -1) { - fieldName = fieldName.substring(0, pos); + OrderBaseData orderBaseData = parseOrderBaseData(orderInfo, modelClazz); + if (StringUtils.isBlank(orderBaseData.tableName)) { + throw new InvalidDataModelException(orderBaseData.modelName); } - String[] stringArray = StringUtils.split(fieldName, '.'); - if (stringArray.length == 1) { - modelName = modelClazz.getSimpleName(); - tableName = MyModelUtil.mapToTableName(modelClazz); - columnName = MyModelUtil.mapToColumnName(fieldName, modelClazz); - } else { - Field field = ReflectUtil.getField(modelClazz, stringArray[0]); - if (field == null) { - exceptionMessage = String.format( - "Relation Field [%s] doesn't exist in Class [%s]!", stringArray[0], modelClazz.getSimpleName()); - log.error(exceptionMessage); - throw new IllegalArgumentException(exceptionMessage); - } - Class fieldClazz = field.getType(); - modelName = fieldClazz.getSimpleName(); - fieldName = stringArray[1]; - tableName = MyModelUtil.mapToTableName(fieldClazz); - columnName = MyModelUtil.mapToColumnName(fieldName, fieldClazz); - } - if (StringUtils.isBlank(tableName)) { - exceptionMessage = String.format("ModelName [%s] can't be mapped to Table!", modelName); - log.error(exceptionMessage); - throw new IllegalArgumentException(exceptionMessage); - } - if (StringUtils.isBlank(columnName)) { - exceptionMessage = String.format( - "FieldName [%s] in Class [%s] can't be mapped to Column!", fieldName, modelName); - log.error(exceptionMessage); - throw new IllegalArgumentException(exceptionMessage); - } - if (StringUtils.isNotBlank(orderInfo.dateAggregateBy)) { - orderBy.append("DATE_FORMAT(").append(tableName).append(".").append(columnName); - if ("day".equals(orderInfo.dateAggregateBy)) { - orderBy.append(", '%Y-%m-%d')"); - } else if ("month".equals(orderInfo.dateAggregateBy)) { - orderBy.append(", '%Y-%m-01')"); - } else if ("year".equals(orderInfo.dateAggregateBy)) { - orderBy.append(", '%Y-01-01')"); - } else { - throw new IllegalArgumentException("Illegal DATE_FORMAT for GROUP ID list."); - } - } else { - orderBy.append(tableName).append(".").append(columnName); - } - if (orderInfo.asc != null && !orderInfo.asc) { - orderBy.append(" DESC"); + if (StringUtils.isBlank(orderBaseData.columnName)) { + throw new InvalidDataFieldException(orderBaseData.modelName, orderBaseData.fieldName); } + processOrderInfo(orderInfo, orderBaseData, orderBy); if (++i < orderParam.size()) { orderBy.append(", "); } @@ -98,12 +59,56 @@ public class MyOrderParam extends ArrayList { return orderBy.toString(); } + private static void processOrderInfo( + OrderInfo orderInfo, OrderBaseData orderBaseData, StringBuilder orderByBuilder) { + if (StringUtils.isNotBlank(orderInfo.dateAggregateBy)) { + orderByBuilder.append("DATE_FORMAT(") + .append(orderBaseData.tableName).append(".").append(orderBaseData.columnName); + if (ApplicationConstant.DAY_AGGREGATION.equals(orderInfo.dateAggregateBy)) { + orderByBuilder.append(", '%Y-%m-%d')"); + } else if (ApplicationConstant.MONTH_AGGREGATION.equals(orderInfo.dateAggregateBy)) { + orderByBuilder.append(", '%Y-%m-01')"); + } else if (ApplicationConstant.YEAR_AGGREGATION.equals(orderInfo.dateAggregateBy)) { + orderByBuilder.append(", '%Y-01-01')"); + } else { + throw new IllegalArgumentException("Illegal DATE_FORMAT for GROUP ID list."); + } + } else { + orderByBuilder.append(orderBaseData.tableName).append(".").append(orderBaseData.columnName); + } + if (orderInfo.asc != null && !orderInfo.asc) { + orderByBuilder.append(" DESC"); + } + } + + private static OrderBaseData parseOrderBaseData(OrderInfo orderInfo, Class modelClazz) { + OrderBaseData orderBaseData = new OrderBaseData(); + orderBaseData.fieldName = StringUtils.substringBefore(orderInfo.fieldName, DICT_MAP); + String[] stringArray = StringUtils.split(orderBaseData.fieldName, '.'); + if (stringArray.length == 1) { + orderBaseData.modelName = modelClazz.getSimpleName(); + orderBaseData.tableName = MyModelUtil.mapToTableName(modelClazz); + orderBaseData.columnName = MyModelUtil.mapToColumnName(orderBaseData.fieldName, modelClazz); + } else { + Field field = ReflectUtil.getField(modelClazz, stringArray[0]); + if (field == null) { + throw new InvalidClassFieldException(modelClazz.getSimpleName(), stringArray[0]); + } + Class fieldClazz = field.getType(); + orderBaseData.modelName = fieldClazz.getSimpleName(); + orderBaseData.fieldName = stringArray[1]; + orderBaseData.tableName = MyModelUtil.mapToTableName(fieldClazz); + orderBaseData.columnName = MyModelUtil.mapToColumnName(orderBaseData.fieldName, fieldClazz); + } + return orderBaseData; + } + /** * 在排序列表中,可能存在基于指定表字段的排序,该函数将获取指定表的所有排序字段。 - * 返回有的字符串,可直接用于SQL中的ORDER BY从句。 + * 返回的字符串,可直接用于SQL中的ORDER BY从句。 * - * @param orderParam 排序参数对象。 - * @param modelClazz 查询主表对应的主对象的Class。 + * @param orderParam 排序参数对象。 + * @param modelClazz 查询主表对应的主对象的Class。 * @param relationModelName 与关联表对应的Model的名称,如my_course_paper表应对的Java对象CoursePaper。 * 如果该值为null或空字符串,则获取所有主表的排序字段。 * @return 返回的是表字段,而非Java对象的属性,多个字段之间逗号分隔。 @@ -114,73 +119,72 @@ public class MyOrderParam extends ArrayList { return null; } if (modelClazz == null) { - throw new IllegalArgumentException("modelClazz Argument can't be NULL"); + throw new IllegalArgumentException( + "modelClazz Argument in MyOrderParam.getOrderClauseByModelName can't be NULL"); } - String exceptionMessage; List fieldNameList = new LinkedList<>(); String prefix = null; if (StringUtils.isNotBlank(relationModelName)) { prefix = relationModelName + "."; } for (OrderInfo orderInfo : orderParam) { - boolean found = false; - String modelName = null, fieldName = orderInfo.fieldName, tableName = null, columnName = null; - int pos = fieldName.indexOf("DictMap."); - if (pos != -1) { - fieldName = fieldName.substring(0, pos); - } - if (prefix != null) { - if (fieldName.startsWith(prefix)) { - Field field = ReflectUtil.getField(modelClazz, relationModelName); - if (field == null) { - exceptionMessage = String.format( - "Relation Field [%s] doesn't exist in Class [%s]!", relationModelName, modelClazz.getSimpleName()); - log.error(exceptionMessage); - throw new IllegalArgumentException(exceptionMessage); - } - Class fieldClazz = field.getType(); - modelName = fieldClazz.getSimpleName(); - fieldName = StringUtils.removeStart(fieldName, prefix); - tableName = MyModelUtil.mapToTableName(fieldClazz); - columnName = MyModelUtil.mapToColumnName(fieldName, fieldClazz); - found = true; - } - } else { - if (!fieldName.contains(".")) { - modelName = modelClazz.getSimpleName(); - tableName = MyModelUtil.mapToTableName(modelClazz); - columnName = MyModelUtil.mapToColumnName(fieldName, modelClazz); - found = true; - } - } - if (found) { - if (StringUtils.isBlank(tableName)) { - exceptionMessage = String.format("ModelName [%s] can't be mapped to Table!", modelName); - log.error(exceptionMessage); - throw new IllegalArgumentException(exceptionMessage); - } - if (StringUtils.isBlank(columnName)) { - exceptionMessage = String.format( - "FieldName [%s] in Class [%s] can't be mapped to Column!", fieldName, modelName); - log.error(exceptionMessage); - throw new IllegalArgumentException(exceptionMessage); - } - StringBuilder orderBy = new StringBuilder(128); - orderBy.append(tableName).append(".").append(columnName); - if (orderInfo.asc != null && !orderInfo.asc) { - orderBy.append(" DESC"); - } - fieldNameList.add(orderBy.toString()); + OrderBaseData baseData = parseOrderBaseData(orderInfo, modelClazz, prefix, relationModelName); + if (baseData != null) { + fieldNameList.add(makeOrderBy(baseData, orderInfo.asc)); } } return StringUtils.join(fieldNameList, ", "); } + private static OrderBaseData parseOrderBaseData( + OrderInfo orderInfo, Class modelClazz, String prefix, String relationModelName) { + OrderBaseData baseData = null; + String fieldName = StringUtils.substringBefore(orderInfo.fieldName, DICT_MAP); + if (prefix != null) { + if (fieldName.startsWith(prefix)) { + baseData = new OrderBaseData(); + Field field = ReflectUtil.getField(modelClazz, relationModelName); + if (field == null) { + throw new InvalidClassFieldException(modelClazz.getSimpleName(), relationModelName); + } + Class fieldClazz = field.getType(); + baseData.modelName = fieldClazz.getSimpleName(); + baseData.fieldName = StringUtils.removeStart(fieldName, prefix); + baseData.tableName = MyModelUtil.mapToTableName(fieldClazz); + baseData.columnName = MyModelUtil.mapToColumnName(fieldName, fieldClazz); + } + } else { + String dotLimitor = "."; + if (!fieldName.contains(dotLimitor)) { + baseData = new OrderBaseData(); + baseData.modelName = modelClazz.getSimpleName(); + baseData.tableName = MyModelUtil.mapToTableName(modelClazz); + baseData.columnName = MyModelUtil.mapToColumnName(fieldName, modelClazz); + } + } + return baseData; + } + + private static String makeOrderBy(OrderBaseData baseData, Boolean asc) { + if (StringUtils.isBlank(baseData.tableName)) { + throw new InvalidDataModelException(baseData.modelName); + } + if (StringUtils.isBlank(baseData.columnName)) { + throw new InvalidDataFieldException(baseData.modelName, baseData.fieldName); + } + StringBuilder orderBy = new StringBuilder(128); + orderBy.append(baseData.tableName).append(".").append(baseData.columnName); + if (asc != null && !asc) { + orderBy.append(" DESC"); + } + return orderBy.toString(); + } + /** * 在排序列表中,可能存在基于指定表字段的排序,该函数将删除指定表的所有排序字段。 * - * @param orderParam 排序参数对象。 - * @param modelClazz 查询主表对应的主对象的Class。 + * @param orderParam 排序参数对象。 + * @param modelClazz 查询主表对应的主对象的Class。 * @param relationModelName 与关联表对应的Model的名称,如my_course_paper表应对的Java对象CoursePaper。 * 如果该值为null或空字符串,则获取所有主表的排序字段。 */ @@ -190,7 +194,8 @@ public class MyOrderParam extends ArrayList { return; } if (modelClazz == null) { - throw new IllegalArgumentException("modelClazz Argument can't be NULL"); + throw new IllegalArgumentException( + "modelClazz Argument in MyOrderParam.removeOrderClauseByModelName can't be NULL"); } List fieldIndexList = new LinkedList<>(); String prefix = null; @@ -199,11 +204,7 @@ public class MyOrderParam extends ArrayList { } int i = 0; for (OrderInfo orderInfo : orderParam) { - String fieldName = orderInfo.fieldName; - int pos = fieldName.indexOf("DictMap."); - if (pos != -1) { - fieldName = fieldName.substring(0, pos); - } + String fieldName = StringUtils.substringBefore(orderInfo.fieldName, DICT_MAP); if (prefix != null) { if (fieldName.startsWith(prefix)) { fieldIndexList.add(i); @@ -220,6 +221,9 @@ public class MyOrderParam extends ArrayList { } } + /** + * 排序信息对象。 + */ @Data public static class OrderInfo { /** @@ -244,4 +248,11 @@ public class MyOrderParam extends ArrayList { */ private String dateAggregateBy; } + + private static class OrderBaseData { + private String modelName; + private String fieldName; + private String tableName; + private String columnName; + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyPageParam.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyPageParam.java index f9e8a4cd..6cf529f3 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyPageParam.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyPageParam.java @@ -6,13 +6,14 @@ import lombok.Getter; * Controller参数中的分页请求对象 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Getter public class MyPageParam { public static final int DEFAULT_PAGE_NUM = 1; public static final int DEFAULT_PAGE_SIZE = 10; + public static final int DEFAULT_MAX_SIZE = 100; /** * 分页号码,从1开始计数。 @@ -48,7 +49,7 @@ public class MyPageParam { if (pageSize == null) { return; } - if (pageSize <= 0 || pageSize > 100) { + if (pageSize <= 0 || pageSize > DEFAULT_MAX_SIZE) { pageSize = DEFAULT_PAGE_SIZE; } this.pageSize = pageSize; diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyRelationParam.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyRelationParam.java new file mode 100644 index 00000000..af0ddcb3 --- /dev/null +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyRelationParam.java @@ -0,0 +1,84 @@ +package com.orange.admin.common.core.object; + +import lombok.Builder; +import lombok.Data; + +/** + * 实体对象数据组装参数构建器。 + * BaseService中的实体对象数据组装函数,会根据该参数对象进行数据组装。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ +@Data +@Builder +public class MyRelationParam { + + /** + * 是否组装字典关联的标记。 + * 组装RelationDict和RelationConstDict注解标记的字段。 + */ + private boolean buildDict; + + /** + * 是否组装一对一关联的标记。 + * 组装RelationOneToOne注解标记的字段。 + */ + private boolean buildOneToOne; + + /** + * 在组装一对一关联的同时,是否继续关联从表中的字典。 + * 从表中RelationDict和RelationConstDict注解标记的字段。 + * 该字段为true时,无需设置buildOneToOne了。 + */ + private boolean buildOneToOneWithDict; + + /** + * 是否组装主表对多对多中间表关联的标记。 + * 组装RelationManyToMany注解标记的字段。 + */ + private boolean buildRelationManyToMany; + + /** + * 是否组装聚合计算关联的标记。 + * 组装RelationOneToManyAggregation和RelationManyToManyAggregation注解标记的字段。 + */ + private boolean buildRelationAggregation; + + /** + * 便捷方法,返回仅做字典关联的参数对象。 + * + * @return 返回仅做字典关联的参数对象。 + */ + public static MyRelationParam dictOnly() { + return MyRelationParam.builder().buildDict(true).build(); + } + + /** + * 便捷方法,返回仅做字典关联、一对一从表及其字典和聚合计算的参数对象。 + * NOTE: 对于一对多和多对多,这种从表数据是列表结果的关联,均不返回。 + * + * @return 返回仅做字典关联、一对一从表及其字典和聚合计算的参数对象。 + */ + public static MyRelationParam normal() { + return MyRelationParam.builder() + .buildDict(true) + .buildOneToOneWithDict(true) + .buildRelationAggregation(true) + .build(); + } + + /** + * 便捷方法,返回全部关联的参数对象。 + * + * @return 返回全部关联的参数对象。 + */ + public static MyRelationParam full() { + return MyRelationParam.builder() + .buildDict(true) + .buildOneToOneWithDict(true) + .buildRelationAggregation(true) + .buildRelationManyToMany(true) + .build(); + } +} diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyWhereCriteria.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyWhereCriteria.java index 4ab102cd..bab5215e 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyWhereCriteria.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/MyWhereCriteria.java @@ -16,7 +16,7 @@ import java.util.List; * Where中的条件语句。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j @Data @@ -103,7 +103,7 @@ public class MyWhereCriteria { * @param value 条件过滤值。 * @return 验证结果对象,如果有错误将会返回具体的错误信息。 */ - public VerifyResult setCriteria(String fieldName, Integer operatorType, Object value) { + public CallResult setCriteria(String fieldName, Integer operatorType, Object value) { this.operatorType = operatorType; this.fieldName = fieldName; this.value = value; @@ -119,7 +119,7 @@ public class MyWhereCriteria { * @param value 条件过滤值。 * @return 验证结果对象,如果有错误将会返回具体的错误信息。 */ - public VerifyResult setCriteria(Class modelClazz, String fieldName, Integer operatorType, Object value) { + public CallResult setCriteria(Class modelClazz, String fieldName, Integer operatorType, Object value) { this.modelClazz = modelClazz; this.operatorType = operatorType; this.fieldName = fieldName; @@ -133,35 +133,31 @@ public class MyWhereCriteria { * * @return 验证结果对象,如果有错误将会返回具体的错误信息。 */ - public VerifyResult doVerify() { + public CallResult doVerify() { if (fieldName == null) { - return VerifyResult.error("过滤字段名称 [fieldName] 不能为空!"); + return CallResult.error("过滤字段名称 [fieldName] 不能为空!"); } - if (modelClazz != null) { - if (ReflectUtil.getField(modelClazz, fieldName) == null) { - return VerifyResult.error( - "过滤字段 [" + fieldName + "] 在实体对象 [" + modelClazz.getSimpleName() + "] 中并不存在!"); - } + if (modelClazz != null && ReflectUtil.getField(modelClazz, fieldName) == null) { + return CallResult.error( + "过滤字段 [" + fieldName + "] 在实体对象 [" + modelClazz.getSimpleName() + "] 中并不存在!"); } if (!checkOperatorType()) { - return VerifyResult.error("无效的操作符类型 [" + operatorType + "]!"); + return CallResult.error("无效的操作符类型 [" + operatorType + "]!"); } // 其他操作符必须包含value值 - if (operatorType != OPERATOR_IS_NULL && operatorType != OPERATOR_NOT_NULL) { - if (value == null) { - String operatorString = this.getOperatorString(); - return VerifyResult.error("操作符 [" + operatorString + "] 的条件值不能为空!"); - } + if (operatorType != OPERATOR_IS_NULL && operatorType != OPERATOR_NOT_NULL && value == null) { + String operatorString = this.getOperatorString(); + return CallResult.error("操作符 [" + operatorString + "] 的条件值不能为空!"); } if (this.operatorType == OPERATOR_IN) { if (!(value instanceof Collection)) { - return VerifyResult.error("操作符 [IN] 的条件值必须为集合对象!"); + return CallResult.error("操作符 [IN] 的条件值必须为集合对象!"); } if (CollectionUtils.isEmpty((Collection) value)) { - return VerifyResult.error("操作符 [IN] 的条件值不能为空!"); + return CallResult.error("操作符 [IN] 的条件值不能为空!"); } } - return VerifyResult.ok(); + return CallResult.ok(); } /** @@ -237,33 +233,7 @@ public class MyWhereCriteria { if (tableName == null) { throw new InvalidDataModelException(modelClazz.getSimpleName()); } - StringBuilder sb = new StringBuilder(64); - sb.append(tableName).append(".").append(fieldInfo.getFirst()).append(getOperatorString()); - if (operatorType == OPERATOR_IN) { - Collection filterValues = (Collection) value; - sb.append("("); - int i = 0; - for (Object filterValue : filterValues) { - if (fieldInfo.getSecond().equals(MyModelUtil.NUMERIC_FIELD_TYPE)) { - sb.append(filterValue); - } else { - sb.append("'").append(filterValue).append("'"); - } - if (i++ != filterValues.size() - 1) { - sb.append(", "); - } - } - sb.append(")"); - } else { - if (value != null) { - if (fieldInfo.getSecond().equals(MyModelUtil.NUMERIC_FIELD_TYPE)) { - sb.append(value); - } else { - sb.append("'").append(value).append("'"); - } - } - } - return sb.toString(); + return this.buildClauseString(tableName, fieldInfo.getFirst(), fieldInfo.getSecond()); } /** @@ -305,4 +275,34 @@ public class MyWhereCriteria { } return sb.length() == 0 ? null : sb.toString(); } + + private String buildClauseString(String tableName, String columnName, Integer columnType) { + StringBuilder sb = new StringBuilder(64); + sb.append(tableName).append(".").append(columnName).append(getOperatorString()); + if (operatorType == OPERATOR_IN) { + Collection filterValues = (Collection) value; + sb.append("("); + int i = 0; + for (Object filterValue : filterValues) { + if (columnType.equals(MyModelUtil.NUMERIC_FIELD_TYPE)) { + sb.append(filterValue); + } else { + sb.append("'").append(filterValue).append("'"); + } + if (i++ != filterValues.size() - 1) { + sb.append(", "); + } + } + sb.append(")"); + return sb.toString(); + } + if (value != null) { + if (columnType.equals(MyModelUtil.NUMERIC_FIELD_TYPE)) { + sb.append(value); + } else { + sb.append("'").append(value).append("'"); + } + } + return sb.toString(); + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/ResponseResult.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/ResponseResult.java index 5110f475..4890f25e 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/ResponseResult.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/ResponseResult.java @@ -4,14 +4,18 @@ import com.orange.admin.common.core.constant.ErrorCodeEnum; import lombok.Data; /** - * 接口返回对象。 + * 接口返回对象 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Data public class ResponseResult { + /** + * 为了优化性能,所有没有携带数据的正确结果,均可用该对象表示。 + */ + private static final ResponseResult OK = new ResponseResult<>(); /** * 是否成功标记。 */ @@ -33,10 +37,10 @@ public class ResponseResult { * 根据参数errorCodeEnum的枚举值,判断创建成功对象还是错误对象。 * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和 getErrorMessage()。 * - * @param errorCodeEnum - 错误码枚举 + * @param errorCodeEnum 错误码枚举 * @return 返回创建的ResponseResult实例对象 */ - public static ResponseResult create(ErrorCodeEnum errorCodeEnum) { + public static ResponseResult create(ErrorCodeEnum errorCodeEnum) { return create(errorCodeEnum, errorCodeEnum.getErrorMessage()); } @@ -44,38 +48,24 @@ public class ResponseResult { * 根据参数errorCodeEnum的枚举值,判断创建成功对象还是错误对象。 * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和参数 errorMessage。 * - * @param errorCodeEnum - 错误码枚举。 - * @param errorMessage - 如果该参数为null,错误信息取自errorCodeEnum参数内置的errorMessage,否则使用当前参数。 + * @param errorCodeEnum 错误码枚举。 + * @param errorMessage 如果该参数为null,错误信息取自errorCodeEnum参数内置的errorMessage,否则使用当前参数。 * @return 返回创建的ResponseResult实例对象 */ - public static ResponseResult create(ErrorCodeEnum errorCodeEnum, String errorMessage) { - return errorCodeEnum == ErrorCodeEnum.NO_ERROR ? success() - : error(errorCodeEnum.name(), errorMessage != null ? errorMessage : errorCodeEnum.getErrorMessage()); - } - - /** - * 根据参数errorCodeEnum的枚举值,判断创建成功对象还是错误对象。 - * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和参数 errorMessage。 - * 如果返回的是成功对象,dataObject数据对象将被连同返回。 - * - * @param errorCodeEnum - 错误码枚举。 - * @param errorMessage - 如果该参数为null,错误信息取自errorCodeEnum参数内置的errorMessage,否则使用当前参数。 - * @param data - 返回的数据对象。 - * @return 返回创建的ResponseResult实例对象 - */ - public static ResponseResult create(ErrorCodeEnum errorCodeEnum, String errorMessage, T data) { - return errorCodeEnum == ErrorCodeEnum.NO_ERROR ? success(data) : create(errorCodeEnum, errorMessage); + public static ResponseResult create(ErrorCodeEnum errorCodeEnum, String errorMessage) { + errorMessage = errorMessage != null ? errorMessage : errorCodeEnum.getErrorMessage(); + return errorCodeEnum == ErrorCodeEnum.NO_ERROR ? success() : error(errorCodeEnum.name(), errorMessage); } /** * 根据参数errorCode是否为空,判断创建成功对象还是错误对象。 * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCode 和参数 errorMessage。 * - * @param errorCode - 自定义的错误码 - * @param errorMessage - 自定义的错误信息 + * @param errorCode 自定义的错误码 + * @param errorMessage 自定义的错误信息 * @return 返回创建的ResponseResult实例对象 */ - public static ResponseResult create(String errorCode, String errorMessage) { + public static ResponseResult create(String errorCode, String errorMessage) { return errorCode == null ? success() : error(errorCode, errorMessage); } @@ -85,14 +75,14 @@ public class ResponseResult { * * @return 返回创建的ResponseResult实例对象 */ - public static ResponseResult success() { - return success(null); + public static ResponseResult success() { + return OK; } /** * 创建带有返回数据的成功对象。 * - * @param data - 返回的数据对象 + * @param data 返回的数据对象 * @return 返回创建的ResponseResult实例对象 */ public static ResponseResult success(T data) { @@ -105,7 +95,7 @@ public class ResponseResult { * 创建错误对象。 * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和 getErrorMessage()。 * - * @param errorCodeEnum - 错误码枚举 + * @param errorCodeEnum 错误码枚举 * @return 返回创建的ResponseResult实例对象 */ public static ResponseResult error(ErrorCodeEnum errorCodeEnum) { @@ -116,8 +106,8 @@ public class ResponseResult { * 创建错误对象。 * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCodeEnum 的 name() 和参数 errorMessage。 * - * @param errorCodeEnum - 错误码枚举 - * @param errorMessage - 自定义的错误信息 + * @param errorCodeEnum 错误码枚举 + * @param errorMessage 自定义的错误信息 * @return 返回创建的ResponseResult实例对象 */ public static ResponseResult error(ErrorCodeEnum errorCodeEnum, String errorMessage) { @@ -128,14 +118,24 @@ public class ResponseResult { * 创建错误对象。 * 如果返回错误对象,errorCode 和 errorMessage 分别取自于参数 errorCode 和参数 errorMessage。 * - * @param errorCode - 自定义的错误码 - * @param errorMessage - 自定义的错误信息 + * @param errorCode 自定义的错误码 + * @param errorMessage 自定义的错误信息 * @return 返回创建的ResponseResult实例对象 */ public static ResponseResult error(String errorCode, String errorMessage) { return new ResponseResult<>(false, errorCode, errorMessage); } + /** + * 根据参数的errorCode和errorMessage创建新的错误应答对象。 + * + * @param errorCause 导致错误原因的应答对象。 + * @return 返回创建的ResponseResult实例对象。 + */ + public static ResponseResult errorFrom(ResponseResult errorCause) { + return error(errorCause.errorCode, errorCause.getErrorMessage()); + } + /** * 是否成功。 * @@ -154,5 +154,4 @@ public class ResponseResult { this.errorCode = errorCode; this.errorMessage = errorMessage; } - } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/TokenData.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/TokenData.java index ce20a4e0..fd20e5f6 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/TokenData.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/TokenData.java @@ -10,7 +10,7 @@ import javax.servlet.http.HttpServletRequest; * 基于Jwt,用于前后端传递的令牌对象。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Data @ToString diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/Tuple2.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/Tuple2.java index 18732226..8a50c04b 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/Tuple2.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/object/Tuple2.java @@ -4,7 +4,7 @@ package com.orange.admin.common.core.object; * 二元组对象。主要用于可以一次返回多个结果的场景,同时还能避免强制转换。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class Tuple2 { diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ApplicationContextHolder.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ApplicationContextHolder.java index 372ef569..3bdc3fd5 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ApplicationContextHolder.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ApplicationContextHolder.java @@ -1,6 +1,6 @@ package com.orange.admin.common.core.util; -import org.springframework.beans.BeansException; +import com.orange.admin.common.core.exception.MyRuntimeException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.lang.NonNull; @@ -10,7 +10,7 @@ import org.springframework.stereotype.Component; * Spring 系统启动应用感知对象,主要用于获取Spring Bean的上下文对象,后续的代码中可以直接查找系统中加载的Bean对象。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Component public class ApplicationContextHolder implements ApplicationContextAware { @@ -21,11 +21,10 @@ public class ApplicationContextHolder implements ApplicationContextAware { * Spring 启动的过程中会自动调用,并将应用上下文对象赋值进来。 * * @param applicationContext 应用上下文对象,可通过该对象查找Spring中已经加载的Bean。 - * @throws BeansException Bean处理相关的异常。 */ @Override - public void setApplicationContext(@NonNull ApplicationContext applicationContext) throws BeansException { - ApplicationContextHolder.applicationContext = applicationContext; + public void setApplicationContext(@NonNull ApplicationContext applicationContext) { + doSetApplicationContext(applicationContext); } /** @@ -65,8 +64,11 @@ public class ApplicationContextHolder implements ApplicationContextAware { private static void assertApplicationContext() { if (ApplicationContextHolder.applicationContext == null) { - throw new RuntimeException("applicaitonContext属性为null,请检查是否注入了ApplicationContextHolder!"); + throw new MyRuntimeException("applicaitonContext属性为null,请检查是否注入了ApplicationContextHolder!"); } } + private static void doSetApplicationContext(ApplicationContext applicationContext) { + ApplicationContextHolder.applicationContext = applicationContext; + } } \ No newline at end of file diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ContextUtil.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ContextUtil.java index e948a14e..0ae1bb97 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ContextUtil.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ContextUtil.java @@ -10,7 +10,7 @@ import javax.servlet.http.HttpServletResponse; * 获取Servlet HttpRequest和HttpResponse的工具类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class ContextUtil { @@ -41,4 +41,9 @@ public class ContextUtil { return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); } + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private ContextUtil() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ExportUtil.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ExportUtil.java index 15d521c0..37433866 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ExportUtil.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ExportUtil.java @@ -4,6 +4,9 @@ import cn.hutool.core.io.IoUtil; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.ExcelWriter; import cn.jimmyshi.beanquery.BeanQuery; +import com.orange.admin.common.core.constant.ApplicationConstant; +import com.orange.admin.common.core.exception.MyRuntimeException; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; @@ -20,17 +23,18 @@ import java.util.*; * 导出工具类,目前支持xlsx和csv两种类型。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ +@Slf4j public class ExportUtil { /** * 数据导出。目前仅支持xlsx和csv。 * - * @param dataList 导出数据列表。 + * @param dataList 导出数据列表。 * @param selectFieldMap 导出的数据字段,key为对象字段名称,value为中文标题名称。 - * @param filename 导出文件名。 - * @param 数据对象类型。 + * @param filename 导出文件名。 + * @param 数据对象类型。 * @throws IOException 文件操作失败。 */ public static void doExport( @@ -51,7 +55,7 @@ public class ExportUtil { response.setHeader("content-type", "application/octet-stream"); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + filename); - if ("xlsx".equals(FilenameUtils.getExtension(filename))) { + if (ApplicationConstant.XLSX_EXT.equals(FilenameUtils.getExtension(filename))) { ServletOutputStream out = response.getOutputStream(); ExcelWriter writer = ExcelUtil.getWriter(true); writer.setRowHeight(-1, 30); @@ -61,7 +65,7 @@ public class ExportUtil { writer.flush(out); writer.close(); IoUtil.close(out); - } else if ("csv".equals(FilenameUtils.getExtension(filename))) { + } else if (ApplicationConstant.CSV_EXT.equals(FilenameUtils.getExtension(filename))) { Collection headerList = selectFieldMap.values(); String[] headerArray = new String[headerList.size()]; headerList.toArray(headerArray); @@ -76,10 +80,16 @@ public class ExportUtil { } printer.flush(); } catch (Exception e) { - e.printStackTrace(); + log.error("Failed to call ExportUtil.doExport", e); } } else { - throw new RuntimeException("不支持的导出文件类型!"); + throw new MyRuntimeException("不支持的导出文件类型!"); } } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private ExportUtil() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ImportUtil.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ImportUtil.java index d9a644c9..34245208 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ImportUtil.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/ImportUtil.java @@ -4,6 +4,9 @@ import cn.hutool.core.util.ReflectUtil; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.sax.Excel07SaxReader; +import com.orange.admin.common.core.constant.ApplicationConstant; +import com.orange.admin.common.core.exception.MyRuntimeException; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; @@ -19,10 +22,13 @@ import java.util.stream.Collectors; * 导入工具类,目前支持xlsx和csv两种类型。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ +@Slf4j public class ImportUtil { + private static final String IMPORT_EXCEPTION_ERROR = "Failed to call ImportUtil.doImport"; + private static final String UNSUPPORT_FILE_EXT_ERROR = "不支持的导入文件类型!"; /** * 同步导入方式。 * @@ -30,11 +36,11 @@ public class ImportUtil { * @return 导入数据列表。 */ public static List> doImport(String filename) { - if ("xlsx".equals(FilenameUtils.getExtension(filename))) { + if (ApplicationConstant.XLSX_EXT.equals(FilenameUtils.getExtension(filename))) { try (ExcelReader reader = ExcelUtil.getReader(filename)) { return reader.readAll(); } - } else if ("csv".equals(FilenameUtils.getExtension(filename))) { + } else if (ApplicationConstant.CSV_EXT.equals(FilenameUtils.getExtension(filename))) { List> resultList = new LinkedList<>(); try (FileReader reader = new FileReader(filename)) { CSVParser parser = CSVFormat.DEFAULT.withFirstRecordAsHeader().parse(reader); @@ -50,11 +56,11 @@ public class ImportUtil { resultList.add(rowMap); } } catch (Exception e) { - e.printStackTrace(); + log.error(IMPORT_EXCEPTION_ERROR, e); } return resultList; } - throw new RuntimeException("不支持的导入文件类型!"); + throw new MyRuntimeException(UNSUPPORT_FILE_EXT_ERROR); } /** @@ -65,12 +71,12 @@ public class ImportUtil { * @throws IOException 文件处理异常。 */ public static void doImport(String filename, BaseImporter importer) throws IOException { - if ("xlsx".equals(FilenameUtils.getExtension(filename))) { + if (ApplicationConstant.XLSX_EXT.equals(FilenameUtils.getExtension(filename))) { Excel07SaxReader reader = new MyExcel07SaxReader<>(importer); try (InputStream in = new FileInputStream(filename)) { reader.read(in, 0); } - } else if ("csv".equals(FilenameUtils.getExtension(filename))) { + } else if (ApplicationConstant.CSV_EXT.equals(FilenameUtils.getExtension(filename))) { try (BufferedReader reader = new BufferedReader(new FileReader(filename))) { int rowIndex = 0; do { @@ -81,15 +87,12 @@ public class ImportUtil { } String[] dataArray = StringUtils.split(rowData, ","); importer.doImport(rowIndex++, Arrays.asList(dataArray)); - if (importer.doInterrupt()) { - break; - } - } while (true); + } while (!importer.doInterrupt()); } catch (Exception e) { - e.printStackTrace(); + log.error(IMPORT_EXCEPTION_ERROR, e); } } - throw new RuntimeException("不支持的导入文件类型!"); + throw new MyRuntimeException(UNSUPPORT_FILE_EXT_ERROR); } /** @@ -97,7 +100,7 @@ public class ImportUtil { * * @param 导入数据对象类型。 */ - public static abstract class BaseImporter { + public abstract static class BaseImporter { private Class beanType; private List batchRowList = new LinkedList<>(); private int batchSize; @@ -117,7 +120,7 @@ public class ImportUtil { * 导入操作执行函数。 * * @param rowIndex 当前行号。 - * @param row 当前行数据列表对象。 + * @param row 当前行数据列表对象。 */ public void doImport(int rowIndex, List row) { if (row == null) { @@ -154,7 +157,7 @@ public class ImportUtil { } batchRowList.add(data); } catch (Exception e) { - e.printStackTrace(); + log.error(IMPORT_EXCEPTION_ERROR, e); } if (rowIndex % batchSize == 0) { doProcess(batchRowList); @@ -193,7 +196,7 @@ public class ImportUtil { public void endElement(String uri, String localName, String qName) { super.endElement(uri, localName, qName); if (importer.doInterrupt()) { - throw new RuntimeException(); + throw new MyRuntimeException(); } } @@ -202,4 +205,10 @@ public class ImportUtil { importer.doImport(-1, null); } } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private ImportUtil() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/IpUtil.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/IpUtil.java index e5032a90..f73bf231 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/IpUtil.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/IpUtil.java @@ -16,7 +16,7 @@ import java.util.List; * Ip工具类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j public class IpUtil { @@ -81,12 +81,9 @@ public class IpUtil { Enumeration allAddress = ni.getInetAddresses(); while (allAddress.hasMoreElements()) { InetAddress address = allAddress.nextElement(); - if (address.isLoopbackAddress()) { - // skip the loopback addr - continue; - } - if (address instanceof Inet6Address) { - // skip the IPv6 addr + // skip the IPv6 addr + // skip the IPv6 addr + if (address.isLoopbackAddress() || address instanceof Inet6Address) { continue; } String hostAddress = address.getHostAddress(); @@ -95,4 +92,10 @@ public class IpUtil { } return ipList; } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private IpUtil() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/JwtUtil.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/JwtUtil.java index 2b47d2a9..bafcfc39 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/JwtUtil.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/JwtUtil.java @@ -3,6 +3,7 @@ package com.orange.admin.common.core.util; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; +import lombok.extern.slf4j.Slf4j; import java.util.Date; import java.util.Map; @@ -11,8 +12,9 @@ import java.util.Map; * 基于JWT的Token生成工具类 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ +@Slf4j public class JwtUtil { private static final String TOKEN_PREFIX = "Bearer:"; @@ -71,7 +73,7 @@ public class JwtUtil { try { claims = Jwts.parser().setSigningKey(signingKey).parseClaimsJws(tokenKey).getBody(); } catch (Exception e) { - System.out.println("Token Expired"); + log.error("Token Expired", e); } return claims; } @@ -100,4 +102,9 @@ public class JwtUtil { return createTime == null || System.currentTimeMillis() - createTime > REFRESH_TOKEN_INTERVAL; } + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private JwtUtil() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/LogMessageUtil.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/LogMessageUtil.java new file mode 100644 index 00000000..9d736208 --- /dev/null +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/LogMessageUtil.java @@ -0,0 +1,33 @@ +package com.orange.admin.common.core.util; + +/** + * 拼接日志消息的工具类。 + * 主要目标是,尽量保证日志输出的统一性,同时也可以有效减少与日志信息相关的常量字符串, + * 提高代码的规范度和可维护性。 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ +public class LogMessageUtil { + + /** + * RPC调用错误格式。 + */ + private static final String RPC_ERROR_MSG_FORMAT = "RPC Failed with Error message [%s]"; + + /** + * 组装RPC调用的错误信息。 + * + * @param errorMsg 具体的错误信息。 + * @return 格式化后的错误信息。 + */ + public static String makeRpcError(String errorMsg) { + return String.format(RPC_ERROR_MSG_FORMAT, errorMsg); + } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private LogMessageUtil() { + } +} diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyCommonUtil.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyCommonUtil.java index 98f6b7e4..514211e0 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyCommonUtil.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyCommonUtil.java @@ -1,6 +1,6 @@ package com.orange.admin.common.core.util; -import org.apache.commons.codec.digest.DigestUtils; +import cn.hutool.crypto.digest.DigestUtil; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -16,7 +16,7 @@ import java.util.UUID; * 脚手架中常用的基本工具方法集合,一般而言工程内部使用的方法。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class MyCommonUtil { @@ -32,17 +32,18 @@ public class MyCommonUtil { * @return 返回uuid。 */ public static String generateUuid() { - return UUID.randomUUID().toString().replaceAll("-", ""); + return UUID.randomUUID().toString().replace("-", ""); } /** * 对用户密码进行加盐后加密。 * - * @param password 明文密码。 + * @param password 明文密码。 + * @param passwordSalt 盐值。 * @return 加密后的密码。 */ public static String encrptedPassword(String password, String passwordSalt) { - return DigestUtils.md5Hex(password + passwordSalt); + return DigestUtil.md5Hex(password + passwordSalt); } /** @@ -119,7 +120,7 @@ public class MyCommonUtil { /** * 拼接参数中的字符串列表,用指定分隔符进行分割,同时每个字符串对象用单引号括起来。 * - * @param dataList 字符串集合。 + * @param dataList 字符串集合。 * @param separator 分隔符。 * @return 拼接后的字符串。 */ @@ -134,4 +135,10 @@ public class MyCommonUtil { } return sb.toString(); } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private MyCommonUtil() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyDateUtil.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyDateUtil.java index e2be2429..a7a2b100 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyDateUtil.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyDateUtil.java @@ -16,7 +16,7 @@ import static org.joda.time.PeriodType.days; * 日期工具类,主要封装了部分joda-time中的方法,让很多代码一行完成,同时统一了日期到字符串的pattern格式。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class MyDateUtil { @@ -172,4 +172,10 @@ public class MyDateUtil { public static Date truncateToYear(Date date) { return DateUtils.truncate(date, Calendar.YEAR); } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private MyDateUtil() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyModelUtil.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyModelUtil.java index 774285ef..5ef31835 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyModelUtil.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyModelUtil.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ReflectUtil; import com.orange.admin.common.core.annotation.RelationDict; import com.orange.admin.common.core.annotation.RelationOneToOne; +import com.orange.admin.common.core.exception.MyRuntimeException; import com.orange.admin.common.core.object.Tuple2; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -24,7 +25,7 @@ import java.util.stream.Collectors; * 负责Model数据操作、类型转换和关系关联等行为的工具类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j public class MyModelUtil { @@ -94,9 +95,9 @@ public class MyModelUtil { // 这里缺省情况下都是按照整型去处理,因为他覆盖太多的类型了。 // 如Integer/Long/Double/BigDecimal,可根据实际情况完善和扩充。 Integer type = NUMERIC_FIELD_TYPE; - if ("String".equals(typeName)) { + if (String.class.getSimpleName().equals(typeName)) { type = STRING_FIELD_TYPE; - } else if ("Date".equals(typeName)) { + } else if (Date.class.getSimpleName().equals(typeName)) { type = DATE_FIELD_TYPE; } columnInfo = new Tuple2<>(columnName, type); @@ -156,7 +157,7 @@ public class MyModelUtil { * @param 从表对象类型。 */ public static void makeDictRelation( - Class thisClazz, List thisModelList, List thatModelList, String thisRelationField) { + Class thisClazz, List thisModelList, List thatModelList, String thisRelationField) { if (CollectionUtils.isEmpty(thatModelList) || CollectionUtils.isEmpty(thisModelList)) { return; @@ -200,7 +201,7 @@ public class MyModelUtil { * @param 从表对象类型。 */ public static void makeDictRelation( - Class thisClazz, List thisModelList, Map thatMadelMap, String thisRelationField) { + Class thisClazz, List thisModelList, Map thatMadelMap, String thisRelationField) { if (MapUtils.isEmpty(thatMadelMap) || CollectionUtils.isEmpty(thisModelList)) { return; @@ -210,7 +211,6 @@ public class MyModelUtil { RelationDict r = thisTargetField.getAnnotation(RelationDict.class); Field masterIdField = ReflectUtil.getField(thisClazz, r.masterIdField()); Class thatClass = r.slaveModelClass(); - Field slaveIdField = ReflectUtil.getField(thatClass, r.slaveIdField()); Field slaveNameField = ReflectUtil.getField(thatClass, r.slaveNameField()); thisModelList.forEach(thisModel -> { if (thisModel != null) { @@ -238,7 +238,7 @@ public class MyModelUtil { * @param 从表对象类型。 */ public static void makeOneToOneRelation( - Class thisClazz, List thisModelList, List thatModelList, String thisRelationField) { + Class thisClazz, List thisModelList, List thatModelList, String thisRelationField) { if (CollectionUtils.isEmpty(thatModelList) || CollectionUtils.isEmpty(thisModelList)) { return; @@ -290,7 +290,7 @@ public class MyModelUtil { */ public static void makeOneToOneRelation( Class thisClazz, - List thisModelList, + List thisModelList, Function thisIdGetterFunc, List thatModelList, Function thatIdGetterFunc, @@ -316,60 +316,45 @@ public class MyModelUtil { */ public static void makeOneToOneRelation( Class thisClazz, - List thisModelList, + List thisModelList, Function thisIdGetterFunc, List thatModelList, Function thatIdGetterFunc, String thisRelationField, boolean orderByThatList) { Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField); + boolean isMap = thisTargetField.getType().equals(Map.class); if (orderByThatList) { List newThisModelList = new LinkedList<>(); Map thisModelMap = thisModelList.stream().collect(Collectors.toMap(thisIdGetterFunc, c -> c)); - if (thisTargetField.getType().equals(Map.class)) { - thatModelList.forEach(thatModel -> { - Object thatId = thatIdGetterFunc.apply(thatModel); - T thisModel = thisModelMap.get(thatId); - if (thisModel != null) { - ReflectUtil.setFieldValue(thisModel, thisTargetField, BeanUtil.beanToMap(thatModel)); - newThisModelList.add(thisModel); - } - }); - } else { - thatModelList.forEach(thatModel -> { - Object thatId = thatIdGetterFunc.apply(thatModel); - T thisModel = thisModelMap.get(thatId); - if (thisModel != null) { - ReflectUtil.setFieldValue(thisModel, thisTargetField, thatModel); - newThisModelList.add(thisModel); - } - }); - } - thisModelList = newThisModelList; + thatModelList.forEach(thatModel -> { + Object thatId = thatIdGetterFunc.apply(thatModel); + T thisModel = thisModelMap.get(thatId); + if (thisModel != null) { + ReflectUtil.setFieldValue(thisModel, thisTargetField, normalize(isMap, thatModel)); + newThisModelList.add(thisModel); + } + }); + thisModelList.clear(); + thisModelList.addAll(newThisModelList); } else { Map thatMadelMap = thatModelList.stream().collect(Collectors.toMap(thatIdGetterFunc, c -> c)); - if (thisTargetField.getType().equals(Map.class)) { - thisModelList.forEach(thisModel -> { - Object thisId = thisIdGetterFunc.apply(thisModel); - R thatModel = thatMadelMap.get(thisId); - if (thatModel != null) { - ReflectUtil.setFieldValue(thisModel, thisTargetField, BeanUtil.beanToMap(thatModel)); - } - }); - } else { - thisModelList.forEach(thisModel -> { - Object thisId = thisIdGetterFunc.apply(thisModel); - R thatModel = thatMadelMap.get(thisId); - if (thatModel != null) { - ReflectUtil.setFieldValue(thisModel, thisTargetField, thatModel); - } - }); - } + thisModelList.forEach(thisModel -> { + Object thisId = thisIdGetterFunc.apply(thisModel); + R thatModel = thatMadelMap.get(thisId); + if (thatModel != null) { + ReflectUtil.setFieldValue(thisModel, thisTargetField, normalize(isMap, thatModel)); + } + }); } } + private static Object normalize(boolean isMap, M model) { + return isMap ? BeanUtil.beanToMap(model) : model; + } + /** * 转换过滤对象到与其等效的Example对象。 * @@ -392,7 +377,7 @@ public class MyModelUtil { int modifiers = field.getModifiers(); // transient类型的字段不能作为查询条件 if ((modifiers & 128) == 0) { - field.setAccessible(true); + ReflectUtil.setAccessible(field); try { Object o = field.get(filterModel); if (o != null) { @@ -400,10 +385,16 @@ public class MyModelUtil { } } catch (IllegalAccessException ex) { log.error("Failed to call reflection code.", ex); - throw new RuntimeException(ex); + throw new MyRuntimeException(ex); } } } return e; } + + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private MyModelUtil() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyPageUtil.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyPageUtil.java index f2aa11fe..10be9eab 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyPageUtil.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/MyPageUtil.java @@ -10,22 +10,25 @@ import java.util.List; * 生成带有分页信息的数据列表 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class MyPageUtil { + private static final String DATA_LIST_LITERAL = "dataList"; + private static final String TOTAL_COUNT_LITERAL = "totalCount"; + /** * 用户构建带有分页信息的数据列表。 * - * @param dataList 数据列表,该参数必须是调用PageHelper.startPage之后,立即执行mybatis查询操作的结果集。 + * @param dataList 数据列表,该参数必须是调用PageMethod.startPage之后,立即执行mybatis查询操作的结果集。 * @param includeFields 结果集中需要返回到前端的字段,多个字段之间逗号分隔。 * @return 返回只是包含includeFields字段的数据列表,以及结果集TotalCount。 */ public static JSONObject makeResponseData(List dataList, String includeFields) { JSONObject pageData = new JSONObject(); - pageData.put("dataList", BeanQuery.select(includeFields).from(dataList).execute()); + pageData.put(DATA_LIST_LITERAL, BeanQuery.select(includeFields).from(dataList).execute()); if (dataList instanceof Page) { - pageData.put("totalCount", ((Page)dataList).getTotal()); + pageData.put(TOTAL_COUNT_LITERAL, ((Page)dataList).getTotal()); } return pageData; } @@ -33,14 +36,14 @@ public class MyPageUtil { /** * 用户构建带有分页信息的数据列表。 * - * @param dataList 数据列表,该参数必须是调用PageHelper.startPage之后,立即执行mybatis查询操作的结果集。 + * @param dataList 数据列表,该参数必须是调用PageMethod.startPage之后,立即执行mybatis查询操作的结果集。 * @return 返回结果集和TotalCount。 */ public static JSONObject makeResponseData(List dataList) { JSONObject pageData = new JSONObject(); - pageData.put("dataList", dataList); + pageData.put(DATA_LIST_LITERAL, dataList); if (dataList instanceof Page) { - pageData.put("totalCount", ((Page)dataList).getTotal()); + pageData.put(TOTAL_COUNT_LITERAL, ((Page)dataList).getTotal()); } return pageData; } @@ -48,17 +51,22 @@ public class MyPageUtil { /** * 用户构建带有分页信息的数据列表。 * - * @param dataList 数据列表,该参数必须是调用PageHelper.startPage之后,立即执行mybatis查询操作的结果集。 + * @param dataList 数据列表,该参数必须是调用PageMethod.startPage之后,立即执行mybatis查询操作的结果集。 * @param totalCount 总数量。 * @return 返回结果集和TotalCount。 */ public static JSONObject makeResponseData(List dataList, Long totalCount) { JSONObject pageData = new JSONObject(); - pageData.put("dataList", dataList); + pageData.put(DATA_LIST_LITERAL, dataList); if (totalCount != null) { - pageData.put("totalCount", totalCount); + pageData.put(TOTAL_COUNT_LITERAL, totalCount); } return pageData; } + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private MyPageUtil() { + } } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/RsaUtil.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/RsaUtil.java new file mode 100644 index 00000000..48c7972f --- /dev/null +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/RsaUtil.java @@ -0,0 +1,114 @@ +package com.orange.admin.common.core.util; + +import javax.crypto.Cipher; +import java.nio.charset.StandardCharsets; +import java.security.*; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * Java RSA 加密工具类 + * + * @author Stephen.Liu + * @date 2020-05-24 + */ +public class RsaUtil { + + /** + * 密钥长度 于原文长度对应 以及越长速度越慢 + */ + private static final int KEY_SIZE = 1024; + /** + * 用于封装随机产生的公钥与私钥 + */ + private static Map keyMap = new HashMap<>(); + + /** + * 随机生成密钥对。 + */ + public static void genKeyPair() throws NoSuchAlgorithmException { + // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象 + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); + // 初始化密钥对生成器 + keyPairGen.initialize(KEY_SIZE, new SecureRandom()); + // 生成一个密钥对,保存在keyPair中 + KeyPair keyPair = keyPairGen.generateKeyPair(); + // 得到私钥 + RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); + // 得到公钥 + RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); + String publicKeyString = Base64.getEncoder().encodeToString(publicKey.getEncoded()); + // 得到私钥字符串 + String privateKeyString = Base64.getEncoder().encodeToString(privateKey.getEncoded()); + // 将公钥和私钥保存到Map + //0表示公钥 + keyMap.put(0, publicKeyString); + //1表示私钥 + keyMap.put(1, privateKeyString); + } + + /** + * RSA公钥加密。 + * + * @param str 加密字符串 + * @param publicKey 公钥 + * @return 密文 + * @throws Exception 加密过程中的异常信息 + */ + public static String encrypt(String str, String publicKey) throws Exception { + //base64编码的公钥 + byte[] decoded = Base64.getDecoder().decode(publicKey); + RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); + //RSA加密 + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, pubKey); + return Base64.getEncoder().encodeToString(cipher.doFinal(str.getBytes(StandardCharsets.UTF_8))); + } + + /** + * RSA私钥解密。 + * + * @param str 加密字符串 + * @param privateKey 私钥 + * @return 明文 + * @throws Exception 解密过程中的异常信息 + */ + public static String decrypt(String str, String privateKey) throws Exception { + //64位解码加密后的字符串 + byte[] inputByte = Base64.getDecoder().decode(str); + //base64编码的私钥 + byte[] decoded = Base64.getDecoder().decode(privateKey); + RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); + //RSA解密 + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, priKey); + return new String(cipher.doFinal(inputByte)); + } + + public static void main(String[] args) throws Exception { + long temp = System.currentTimeMillis(); + //生成公钥和私钥 + genKeyPair(); + //加密字符串 + System.out.println("公钥:" + keyMap.get(0)); + System.out.println("私钥:" + keyMap.get(1)); + System.out.println("生成密钥消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒"); + System.out.println("生成后的公钥前端使用!"); + System.out.println("生成后的私钥后台使用!"); + String message = "RSA测试ABCD~!@#$"; + System.out.println("原文:" + message); + temp = System.currentTimeMillis(); + String messageEn = encrypt(message, keyMap.get(0)); + System.out.println("密文:" + messageEn); + System.out.println("加密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒"); + temp = System.currentTimeMillis(); + String messageDe = decrypt(messageEn, keyMap.get(1)); + System.out.println("解密:" + messageDe); + System.out.println("解密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒"); + } +} \ No newline at end of file diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/TreeNode.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/TreeNode.java index 9b4ae87c..409bd7ea 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/TreeNode.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/TreeNode.java @@ -15,7 +15,7 @@ import java.util.function.Function; * @param 节点之间关联键的类型。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Data public class TreeNode { @@ -28,12 +28,12 @@ public class TreeNode { /** * 将列表结构组建为树结构的工具方法。 * - * @param dataList 数据列表结构。 - * @param idFunc 获取关联id的函数对象。 + * @param dataList 数据列表结构。 + * @param idFunc 获取关联id的函数对象。 * @param parentIdFunc 获取关联ParentId的函数对象。 - * @param root 根节点。 - * @param 数据对象类型。 - * @param 节点之间关联键的类型。 + * @param root 根节点。 + * @param 数据对象类型。 + * @param 节点之间关联键的类型。 * @return 源数据对象的树结构存储。 */ public static List> build( @@ -90,5 +90,4 @@ public class TreeNode { private void add(TreeNode node) { childList.add(node); } - } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/UpDownloadUtil.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/UpDownloadUtil.java index 3567ab8b..bf44a0f2 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/UpDownloadUtil.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/util/UpDownloadUtil.java @@ -1,7 +1,6 @@ package com.orange.admin.common.core.util; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.JSON; import com.orange.admin.common.core.constant.ApplicationConstant; import com.orange.admin.common.core.constant.ErrorCodeEnum; import com.orange.admin.common.core.object.ResponseResult; @@ -19,12 +18,13 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; +import java.util.Objects; /** * 上传或下载附件文件的工具类。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Slf4j public class UpDownloadUtil { @@ -47,8 +47,8 @@ public class UpDownloadUtil { Boolean asImage, HttpServletResponse response) { StringBuilder uploadPathBuilder = new StringBuilder(128); - uploadPathBuilder.append(rootBaseDir); - if (asImage) { + uploadPathBuilder.append(rootBaseDir).append("/"); + if (Boolean.TRUE.equals(asImage)) { uploadPathBuilder.append(ApplicationConstant.UPLOAD_IMAGE_PARENT_PATH); } else { uploadPathBuilder.append(ApplicationConstant.UPLOAD_ATTACHMENT_PARENT_PATH); @@ -64,8 +64,8 @@ public class UpDownloadUtil { response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + fileName); byte[] buff = new byte[2048]; - try (OutputStream os = response.getOutputStream()) { - BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); + try (OutputStream os = response.getOutputStream(); + BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file))) { int i = bis.read(buff); while (i != -1) { os.write(buff, 0, buff.length); @@ -73,7 +73,7 @@ public class UpDownloadUtil { i = bis.read(buff); } } catch (IOException e) { - e.printStackTrace(); + log.error("Failed to call UpDownloadUtil.doDownload", e); } } @@ -97,9 +97,14 @@ public class UpDownloadUtil { HttpServletResponse response) throws IOException { PrintWriter out = response.getWriter(); response.setContentType("application/json; charset=utf-8"); + if (Objects.isNull(uploadFile) || uploadFile.isEmpty() || MyCommonUtil.isBlankOrNull(fieldName)) { + response.setStatus(HttpServletResponse.SC_FORBIDDEN); + out.print(JSON.toJSONString(ResponseResult.error(ErrorCodeEnum.INVALID_UPLOAD_FILE_ARGUMENT))); + return; + } StringBuilder uploadPathBuilder = new StringBuilder(128); - uploadPathBuilder.append(rootBaseDir); - if (asImage) { + uploadPathBuilder.append(rootBaseDir).append("/"); + if (Boolean.TRUE.equals(asImage)) { uploadPathBuilder.append(ApplicationConstant.UPLOAD_IMAGE_PARENT_PATH); } else { uploadPathBuilder.append(ApplicationConstant.UPLOAD_ATTACHMENT_PARENT_PATH); @@ -129,10 +134,10 @@ public class UpDownloadUtil { } catch (IOException e) { log.error("Failed to write uploaded file [" + uploadFile.getOriginalFilename() + " ].", e); response.setStatus(HttpServletResponse.SC_FORBIDDEN); - out.print(JSONObject.toJSONString(ResponseResult.error(ErrorCodeEnum.INVALID_UPLOAD_FILE_IOERROR))); + out.print(JSON.toJSONString(ResponseResult.error(ErrorCodeEnum.INVALID_UPLOAD_FILE_IOERROR))); return; } - out.print(JSONObject.toJSONString(ResponseResult.success(fileInfo))); + out.print(JSON.toJSONString(ResponseResult.success(fileInfo))); out.flush(); out.close(); } @@ -148,7 +153,7 @@ public class UpDownloadUtil { if (StringUtils.isAnyBlank(fileInfoJson, filename)) { return false; } - List fileInfoList = JSONArray.parseArray(fileInfoJson, UploadFileInfo.class); + List fileInfoList = JSON.parseArray(fileInfoJson, UploadFileInfo.class); if (CollectionUtils.isNotEmpty(fileInfoList)) { for (UploadFileInfo fileInfo : fileInfoList) { if (StringUtils.equals(filename, fileInfo.filename)) { @@ -159,6 +164,12 @@ public class UpDownloadUtil { return false; } + /** + * 私有构造函数,明确标识该常量类的作用。 + */ + private UpDownloadUtil() { + } + @Data static class UploadFileInfo { private String downloadUri; diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/AddGroup.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/AddGroup.java index 338fab64..ceccff7b 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/AddGroup.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/AddGroup.java @@ -4,7 +4,7 @@ package com.orange.admin.common.core.validator; * 数据增加的验证分组。通常用于数据新增场景。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface AddGroup { } diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/ConstDictRef.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/ConstDictRef.java index 0e5ffec1..e8d7d7c3 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/ConstDictRef.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/ConstDictRef.java @@ -11,7 +11,7 @@ import java.lang.annotation.Target; * 定义在Model对象中,标注字段值引用自指定的常量字典,和ConstDictRefValidator对象配合完成数据验证。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/ConstDictValidator.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/ConstDictValidator.java index 91911036..b13a7e58 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/ConstDictValidator.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/ConstDictValidator.java @@ -10,7 +10,7 @@ import java.lang.reflect.Method; * 数据字段自定义验证,用于验证Model中字符串字段的最大长度和最小长度。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class ConstDictValidator implements ConstraintValidator { diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/TextLength.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/TextLength.java index 422068a9..a353dbe9 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/TextLength.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/TextLength.java @@ -11,7 +11,7 @@ import java.lang.annotation.Target; * 定义在Model或Dto对象中,UTF-8编码的字符串字段长度的上限和下限,和TextLengthValidator对象配合完成数据验证。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ @Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/TextLengthValidator.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/TextLengthValidator.java index fece6df2..c8c08b42 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/TextLengthValidator.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/TextLengthValidator.java @@ -9,7 +9,7 @@ import javax.validation.ConstraintValidatorContext; * 数据字段自定义验证,用于验证Model中UTF-8编码的字符串字段的最大长度和最小长度。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public class TextLengthValidator implements ConstraintValidator { diff --git a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/UpdateGroup.java b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/UpdateGroup.java index ed407c63..106fc97f 100644 --- a/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/UpdateGroup.java +++ b/orange-admin-service/common/common-core/src/main/java/com/orange/admin/common/core/validator/UpdateGroup.java @@ -4,7 +4,7 @@ package com.orange.admin.common.core.validator; * 数据修改的验证分组。通常用于数据更新的场景。 * * @author Stephen.Liu - * @date 2020-04-11 + * @date 2020-05-24 */ public interface UpdateGroup { diff --git a/orange-admin-service/upms-script.sql b/orange-admin-service/upms-script.sql index 685bb259..e6e061f7 100644 --- a/orange-admin-service/upms-script.sql +++ b/orange-admin-service/upms-script.sql @@ -1,7 +1,7 @@ -- ---------------------------- -- 请仅在下面的数据库链接中执行该脚本。 --- 主数据源 [101.200.178.51:3306/zzdemo-single] +-- 主数据源 [localhost:3306/zz-orange-admin] -- ---------------------------- SET NAMES utf8mb4; @@ -246,8 +246,8 @@ CREATE TABLE `zz_sys_data_perm_dept` ( -- 管理员账号数据 -- ---------------------------- BEGIN; -INSERT INTO `zz_sys_dept` VALUES(1248875520100143104,'公司总部',1,1248875520100143105,'管理员',CURDATE(),CURDATE(),1); -INSERT INTO `zz_sys_user` VALUES(1248875520100143105,'admin','991a762615d6c112c5bb02c9b78a4417','管理员',1248875520100143104,0,'CHANGE TO YOUR HEAD IMAGE URL!!!',0,1248875520100143105,'管理员',CURDATE(),CURDATE(),1); +INSERT INTO `zz_sys_dept` VALUES(1264533563043221504,'公司总部',1,1264533563043221505,'管理员',CURDATE(),CURDATE(),1); +INSERT INTO `zz_sys_user` VALUES(1264533563043221505,'admin','991a762615d6c112c5bb02c9b78a4417','管理员',1264533563043221504,0,'CHANGE TO YOUR HEAD IMAGE URL!!!',0,1264533563043221505,'管理员',CURDATE(),CURDATE(),1); COMMIT; -- ---------------------------- @@ -256,212 +256,212 @@ COMMIT; BEGIN; INSERT INTO `zz_sys_menu` VALUES(1248448487335399424,NULL,'系统管理',0,NULL,1,NULL,CURDATE(),1); INSERT INTO `zz_sys_menu` VALUES(1248448487486394368,1248448487335399424,'用户管理',1,'formSysUser',100,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754512,1248448487486394368,'显示',3,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754513,1248448487486394368,'新增',3,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754514,1248448487486394368,'编辑',3,NULL,3,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754515,1248448487486394368,'删除',3,NULL,4,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754516,1248448487486394368,'重置密码',3,NULL,5,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563034832914,1248448487486394368,'显示',3,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563034832915,1248448487486394368,'新增',3,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563034832916,1248448487486394368,'编辑',3,NULL,3,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563034832917,1248448487486394368,'删除',3,NULL,4,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563034832918,1248448487486394368,'重置密码',3,NULL,5,NULL,CURDATE(),1); INSERT INTO `zz_sys_menu` VALUES(1248448487486394369,1248448487335399424,'部门管理',1,'formSysDept',105,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754524,1248448487486394369,'显示',3,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754525,1248448487486394369,'新增',3,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754526,1248448487486394369,'编辑',3,NULL,3,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754527,1248448487486394369,'删除',3,NULL,4,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027201,1248448487486394369,'显示',3,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027202,1248448487486394369,'新增',3,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027203,1248448487486394369,'编辑',3,NULL,3,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027204,1248448487486394369,'删除',3,NULL,4,NULL,CURDATE(),1); INSERT INTO `zz_sys_menu` VALUES(1248448487486394370,1248448487335399424,'角色管理',1,'formSysRole',110,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754534,1248448487486394370,'角色管理',2,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754535,1248448487486394370,'用户授权',2,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754536,1248875520091754534,'显示',3,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754537,1248875520091754534,'新增',3,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754538,1248875520091754534,'编辑',3,NULL,3,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754539,1248875520091754534,'删除',3,NULL,4,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754540,1248875520091754535,'显示',3,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754541,1248875520091754535,'授权用户',3,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754542,1248875520091754535,'移除用户',3,NULL,3,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027211,1248448487486394370,'角色管理',2,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027212,1248448487486394370,'用户授权',2,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027213,1264533563039027211,'显示',3,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027214,1264533563039027211,'新增',3,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027215,1264533563039027211,'编辑',3,NULL,3,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027216,1264533563039027211,'删除',3,NULL,4,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027217,1264533563039027212,'显示',3,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027218,1264533563039027212,'授权用户',3,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027219,1264533563039027212,'移除用户',3,NULL,3,NULL,CURDATE(),1); INSERT INTO `zz_sys_menu` VALUES(1248448487486394371,1248448487335399424,'数据权限管理',1,'formSysDataPerm',115,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754552,1248448487486394371,'数据权限管理',2,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754553,1248448487486394371,'用户授权',2,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754554,1248875520091754552,'显示',3,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754555,1248875520091754552,'新增',3,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754556,1248875520091754552,'编辑',3,NULL,3,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754557,1248875520091754552,'删除',3,NULL,4,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754558,1248875520091754553,'显示',3,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754559,1248875520091754553,'授权用户',3,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754560,1248875520091754553,'移除用户',3,NULL,3,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027229,1248448487486394371,'数据权限管理',2,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027230,1248448487486394371,'用户授权',2,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027231,1264533563039027229,'显示',3,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027232,1264533563039027229,'新增',3,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027233,1264533563039027229,'编辑',3,NULL,3,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027234,1264533563039027229,'删除',3,NULL,4,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027235,1264533563039027230,'显示',3,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027236,1264533563039027230,'授权用户',3,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027237,1264533563039027230,'移除用户',3,NULL,3,NULL,CURDATE(),1); INSERT INTO `zz_sys_menu` VALUES(1248448487486394372,1248448487335399424,'菜单管理',1,'formSysMenu',120,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754570,1248448487486394372,'显示',3,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754571,1248448487486394372,'新增',3,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754572,1248448487486394372,'编辑',3,NULL,3,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754573,1248448487486394372,'删除',3,NULL,4,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520091754574,1248448487486394372,'权限列表',3,NULL,5,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027247,1248448487486394372,'显示',3,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027248,1248448487486394372,'新增',3,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027249,1248448487486394372,'编辑',3,NULL,3,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027250,1248448487486394372,'删除',3,NULL,4,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027251,1248448487486394372,'权限列表',3,NULL,5,NULL,CURDATE(),1); INSERT INTO `zz_sys_menu` VALUES(1248448487486394373,1248448487335399424,'权限字管理',1,'formSysPermCode',125,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948801,1248448487486394373,'显示',3,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948802,1248448487486394373,'新增',3,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948803,1248448487486394373,'编辑',3,NULL,3,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948804,1248448487486394373,'删除',3,NULL,4,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027259,1248448487486394373,'显示',3,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027260,1248448487486394373,'新增',3,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027261,1248448487486394373,'编辑',3,NULL,3,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027262,1248448487486394373,'删除',3,NULL,4,NULL,CURDATE(),1); INSERT INTO `zz_sys_menu` VALUES(1248448487486394374,1248448487335399424,'权限管理',1,'formSysPerm',130,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948811,1248448487486394374,'显示',3,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948812,1248448487486394374,'新增模块',3,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948813,1248448487486394374,'编辑模块',3,NULL,3,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948814,1248448487486394374,'删除模块',3,NULL,4,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948815,1248448487486394374,'新增权限',3,NULL,5,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948816,1248448487486394374,'编辑权限',3,NULL,6,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948817,1248448487486394374,'删除权限',3,NULL,7,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027269,1248448487486394374,'显示',3,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027270,1248448487486394374,'新增模块',3,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027271,1248448487486394374,'编辑模块',3,NULL,3,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027272,1248448487486394374,'删除模块',3,NULL,4,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027273,1248448487486394374,'新增权限',3,NULL,5,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027274,1248448487486394374,'编辑权限',3,NULL,6,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027275,1248448487486394374,'删除权限',3,NULL,7,NULL,CURDATE(),1); INSERT INTO `zz_sys_menu` VALUES(1248448487486394375,1248448487335399424,'字典管理',1,'formSysDict',135,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948827,1248448487486394375,'显示',3,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948828,1248448487486394375,'新增',3,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948829,1248448487486394375,'编辑',3,NULL,3,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948830,1248448487486394375,'删除',3,NULL,4,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948831,1248448487486394375,'同步缓存',3,NULL,5,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027285,1248448487486394375,'显示',3,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027286,1248448487486394375,'新增',3,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027287,1248448487486394375,'编辑',3,NULL,3,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027288,1248448487486394375,'删除',3,NULL,4,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027289,1248448487486394375,'同步缓存',3,NULL,5,NULL,CURDATE(),1); INSERT INTO `zz_sys_menu` VALUES(1248512948561776640,NULL,'业务管理',0,NULL,5,NULL,CURDATE(),1); INSERT INTO `zz_sys_menu` VALUES(1248512995818999808,1248512948561776640,'老师管理',1,'formTeacher',1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948840,1248512995818999808,'显示',3,NULL,1,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948841,1248512995818999808,'新建',3,NULL,2,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948842,1248512995818999808,'编辑',3,NULL,3,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948843,1248512995818999808,'统计',3,NULL,4,NULL,CURDATE(),1); -INSERT INTO `zz_sys_menu` VALUES(1248875520095948844,1248512995818999808,'删除',3,NULL,5,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027298,1248512995818999808,'显示',3,NULL,1,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027299,1248512995818999808,'新建',3,NULL,2,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027300,1248512995818999808,'编辑',3,NULL,3,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027301,1248512995818999808,'统计',3,NULL,4,NULL,CURDATE(),1); +INSERT INTO `zz_sys_menu` VALUES(1264533563039027302,1248512995818999808,'删除',3,NULL,5,NULL,CURDATE(),1); COMMIT; -- ---------------------------- -- 全部权限字数据 -- ---------------------------- BEGIN; -INSERT INTO `zz_sys_perm_code` VALUES(1248875520087560192,NULL,'formTeacher',0,'老师管理',0,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520087560193,1248875520087560192,'formTeacher:formTeacher',1,'老师管理',0,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754496,1248875520087560193,'formTeacher:formTeacher:formCreateTeacher',2,'新建',0,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754497,1248875520087560193,'formTeacher:formTeacher:formEditTeacher',2,'编辑',10,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754498,1248875520087560193,'formTeacher:formTeacher:formTeacherTransStats',2,'统计',20,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754499,1248875520087560193,'formTeacher:formTeacher:delete',2,'删除',30,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754500,NULL,'formCreateTeacher',0,'新建老师',10,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754501,1248875520091754500,'formCreateTeacher:formCreateTeacher',1,'新建老师',0,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754502,1248875520091754501,'formCreateTeacher:formCreateTeacher:cancel',2,'取消',0,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754503,1248875520091754501,'formCreateTeacher:formCreateTeacher:add',2,'保存',10,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754504,NULL,'formEditTeacher',0,'编辑老师',20,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754505,1248875520091754504,'formEditTeacher:formEditTeacher',1,'编辑老师',0,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754506,1248875520091754505,'formEditTeacher:formEditTeacher:cancel',2,'取消',0,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754507,1248875520091754505,'formEditTeacher:formEditTeacher:update',2,'保存',10,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754508,NULL,'formTeacherTransStats',0,'老师个人统计',30,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754509,1248875520091754508,'formTeacherTransStats:formTeacherTransStats',1,'老师个人统计',0,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754517,NULL,'formSysUser',0,'用户管理',10000,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754518,1248875520091754517,'formSysUser:fragmentSysUser',1,'用户管理',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754519,1248875520091754518,'formSysUser:fragmentSysUser:add',2,'新增',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754520,1248875520091754518,'formSysUser:fragmentSysUser:update',2,'编辑',2,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754521,1248875520091754518,'formSysUser:fragmentSysUser:delete',2,'删除',3,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754522,1248875520091754518,'formSysUser:fragmentSysUser:resetPassword',2,'重置密码',4,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754528,NULL,'formSysDept',0,'部门管理',10100,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754529,1248875520091754528,'formSysDept:fragmentSysDept',1,'部门管理',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754530,1248875520091754529,'formSysDept:fragmentSysDept:add',2,'新增',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754531,1248875520091754529,'formSysDept:fragmentSysDept:update',2,'编辑',2,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754532,1248875520091754529,'formSysDept:fragmentSysDept:delete',2,'删除',3,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754543,NULL,'formSysRole',0,'角色管理',10200,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754544,1248875520091754543,'formSysRole:fragmentSysRole',1,'角色管理',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754545,1248875520091754543,'formSysRole:fragmentSysRoleUser',1,'用户授权',2,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754546,1248875520091754544,'formSysRole:fragmentSysRole:add',2,'新增',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754547,1248875520091754544,'formSysRole:fragmentSysRole:update',2,'编辑',2,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754548,1248875520091754544,'formSysRole:fragmentSysRole:delete',2,'删除',3,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754549,1248875520091754545,'formSysRole:fragmentSysRoleUser:addUserRole',2,'授权用户',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754550,1248875520091754545,'formSysRole:fragmentSysRoleUser:deleteUserRole',2,'移除用户',2,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754561,NULL,'formSysDataPerm',0,'数据权限管理',10400,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754562,1248875520091754561,'formSysDataPerm:fragmentSysDataPerm',1,'数据权限管理',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754563,1248875520091754561,'formSysDataPerm:fragmentSysDataPermUser',1,'用户授权',2,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754564,1248875520091754562,'formSysDataPerm:fragmentSysDataPerm:add',2,'新增',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754565,1248875520091754562,'formSysDataPerm:fragmentSysDataPerm:update',2,'编辑',2,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754566,1248875520091754562,'formSysDataPerm:fragmentSysDataPerm:delete',2,'删除',3,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754567,1248875520091754563,'formSysDataPerm:fragmentSysDataPermUser:addDataPermUser',2,'授权用户',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754568,1248875520091754563,'formSysDataPerm:fragmentSysDataPermUser:deleteDataPermUser',2,'移除用户',2,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754575,NULL,'formSysMenu',0,'菜单管理',10600,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754576,1248875520091754575,'formSysMenu:fragmentSysMenu',1,'菜单管理',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754577,1248875520091754576,'formSysMenu:fragmentSysMenu:add',2,'新增',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754578,1248875520091754576,'formSysMenu:fragmentSysMenu:update',2,'编辑',2,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754579,1248875520091754576,'formSysMenu:fragmentSysMenu:delete',2,'删除',3,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520091754580,1248875520091754576,'formSysMenu:fragmentSysMenu:listMenuPerm',2,'权限列表',4,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948805,NULL,'formSysPermCode',0,'权限字管理',10700,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948806,1248875520095948805,'formSysPermCode:fragmentSysPermCode',1,'权限字管理',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948807,1248875520095948806,'formSysPermCode:fragmentSysPermCode:add',2,'新增',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948808,1248875520095948806,'formSysPermCode:fragmentSysPermCode:update',2,'编辑',2,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948809,1248875520095948806,'formSysPermCode:fragmentSysPermCode:delete',2,'删除',3,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948818,NULL,'formSysPerm',0,'权限管理',10800,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948819,1248875520095948818,'formSysPerm:fragmentSysPerm',1,'权限管理',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948820,1248875520095948819,'formSysPerm:fragmentSysPerm:addPermModule',2,'新增模块',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948821,1248875520095948819,'formSysPerm:fragmentSysPerm:updatePermModule',2,'编辑模块',2,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948822,1248875520095948819,'formSysPerm:fragmentSysPerm:deletePermModule',2,'删除模块',3,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948823,1248875520095948819,'formSysPerm:fragmentSysPerm:addPerm',2,'新增权限',4,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948824,1248875520095948819,'formSysPerm:fragmentSysPerm:updatePerm',2,'编辑权限',5,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948825,1248875520095948819,'formSysPerm:fragmentSysPerm:deletePerm',2,'删除权限',6,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948832,NULL,'formSysDict',0,'字典管理',10900,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948833,1248875520095948832,'formSysDict:fragmentSysDict',1,'字典管理',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948834,1248875520095948833,'formSysDict:fragmentSysDict:add',2,'新增',1,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948835,1248875520095948833,'formSysDict:fragmentSysDict:update',2,'编辑',2,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948836,1248875520095948833,'formSysDict:fragmentSysDict:delete',2,'删除',3,CURDATE(),1); -INSERT INTO `zz_sys_perm_code` VALUES(1248875520095948837,1248875520095948833,'formSysDict:fragmentSysDict:reloadCache',2,'同步缓存',4,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832896,NULL,'formTeacher',0,'老师管理',0,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832897,1264533563034832896,'formTeacher:formTeacher',1,'老师管理',0,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832898,1264533563034832897,'formTeacher:formTeacher:formCreateTeacher',2,'新建',0,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832899,1264533563034832897,'formTeacher:formTeacher:formEditTeacher',2,'编辑',10,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832900,1264533563034832897,'formTeacher:formTeacher:formTeacherTransStats',2,'统计',20,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832901,1264533563034832897,'formTeacher:formTeacher:delete',2,'删除',30,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832902,NULL,'formCreateTeacher',0,'新建老师',10,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832903,1264533563034832902,'formCreateTeacher:formCreateTeacher',1,'新建老师',0,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832904,1264533563034832903,'formCreateTeacher:formCreateTeacher:cancel',2,'取消',0,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832905,1264533563034832903,'formCreateTeacher:formCreateTeacher:add',2,'保存',10,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832906,NULL,'formEditTeacher',0,'编辑老师',20,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832907,1264533563034832906,'formEditTeacher:formEditTeacher',1,'编辑老师',0,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832908,1264533563034832907,'formEditTeacher:formEditTeacher:cancel',2,'取消',0,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832909,1264533563034832907,'formEditTeacher:formEditTeacher:update',2,'保存',10,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832910,NULL,'formTeacherTransStats',0,'老师个人统计',30,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832911,1264533563034832910,'formTeacherTransStats:formTeacherTransStats',1,'老师个人统计',0,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832919,NULL,'formSysUser',0,'用户管理',10000,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832920,1264533563034832919,'formSysUser:fragmentSysUser',1,'用户管理',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832921,1264533563034832920,'formSysUser:fragmentSysUser:add',2,'新增',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832922,1264533563034832920,'formSysUser:fragmentSysUser:update',2,'编辑',2,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832923,1264533563034832920,'formSysUser:fragmentSysUser:delete',2,'删除',3,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563034832924,1264533563034832920,'formSysUser:fragmentSysUser:resetPassword',2,'重置密码',4,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027205,NULL,'formSysDept',0,'部门管理',10100,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027206,1264533563039027205,'formSysDept:fragmentSysDept',1,'部门管理',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027207,1264533563039027206,'formSysDept:fragmentSysDept:add',2,'新增',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027208,1264533563039027206,'formSysDept:fragmentSysDept:update',2,'编辑',2,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027209,1264533563039027206,'formSysDept:fragmentSysDept:delete',2,'删除',3,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027220,NULL,'formSysRole',0,'角色管理',10200,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027221,1264533563039027220,'formSysRole:fragmentSysRole',1,'角色管理',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027222,1264533563039027220,'formSysRole:fragmentSysRoleUser',1,'用户授权',2,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027223,1264533563039027221,'formSysRole:fragmentSysRole:add',2,'新增',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027224,1264533563039027221,'formSysRole:fragmentSysRole:update',2,'编辑',2,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027225,1264533563039027221,'formSysRole:fragmentSysRole:delete',2,'删除',3,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027226,1264533563039027222,'formSysRole:fragmentSysRoleUser:addUserRole',2,'授权用户',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027227,1264533563039027222,'formSysRole:fragmentSysRoleUser:deleteUserRole',2,'移除用户',2,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027238,NULL,'formSysDataPerm',0,'数据权限管理',10400,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027239,1264533563039027238,'formSysDataPerm:fragmentSysDataPerm',1,'数据权限管理',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027240,1264533563039027238,'formSysDataPerm:fragmentSysDataPermUser',1,'用户授权',2,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027241,1264533563039027239,'formSysDataPerm:fragmentSysDataPerm:add',2,'新增',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027242,1264533563039027239,'formSysDataPerm:fragmentSysDataPerm:update',2,'编辑',2,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027243,1264533563039027239,'formSysDataPerm:fragmentSysDataPerm:delete',2,'删除',3,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027244,1264533563039027240,'formSysDataPerm:fragmentSysDataPermUser:addDataPermUser',2,'授权用户',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027245,1264533563039027240,'formSysDataPerm:fragmentSysDataPermUser:deleteDataPermUser',2,'移除用户',2,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027252,NULL,'formSysMenu',0,'菜单管理',10600,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027253,1264533563039027252,'formSysMenu:fragmentSysMenu',1,'菜单管理',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027254,1264533563039027253,'formSysMenu:fragmentSysMenu:add',2,'新增',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027255,1264533563039027253,'formSysMenu:fragmentSysMenu:update',2,'编辑',2,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027256,1264533563039027253,'formSysMenu:fragmentSysMenu:delete',2,'删除',3,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027257,1264533563039027253,'formSysMenu:fragmentSysMenu:listMenuPerm',2,'权限列表',4,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027263,NULL,'formSysPermCode',0,'权限字管理',10700,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027264,1264533563039027263,'formSysPermCode:fragmentSysPermCode',1,'权限字管理',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027265,1264533563039027264,'formSysPermCode:fragmentSysPermCode:add',2,'新增',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027266,1264533563039027264,'formSysPermCode:fragmentSysPermCode:update',2,'编辑',2,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027267,1264533563039027264,'formSysPermCode:fragmentSysPermCode:delete',2,'删除',3,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027276,NULL,'formSysPerm',0,'权限管理',10800,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027277,1264533563039027276,'formSysPerm:fragmentSysPerm',1,'权限管理',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027278,1264533563039027277,'formSysPerm:fragmentSysPerm:addPermModule',2,'新增模块',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027279,1264533563039027277,'formSysPerm:fragmentSysPerm:updatePermModule',2,'编辑模块',2,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027280,1264533563039027277,'formSysPerm:fragmentSysPerm:deletePermModule',2,'删除模块',3,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027281,1264533563039027277,'formSysPerm:fragmentSysPerm:addPerm',2,'新增权限',4,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027282,1264533563039027277,'formSysPerm:fragmentSysPerm:updatePerm',2,'编辑权限',5,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027283,1264533563039027277,'formSysPerm:fragmentSysPerm:deletePerm',2,'删除权限',6,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027290,NULL,'formSysDict',0,'字典管理',10900,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027291,1264533563039027290,'formSysDict:fragmentSysDict',1,'字典管理',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027292,1264533563039027291,'formSysDict:fragmentSysDict:add',2,'新增',1,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027293,1264533563039027291,'formSysDict:fragmentSysDict:update',2,'编辑',2,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027294,1264533563039027291,'formSysDict:fragmentSysDict:delete',2,'删除',3,CURDATE(),1); +INSERT INTO `zz_sys_perm_code` VALUES(1264533563039027295,1264533563039027291,'formSysDict:fragmentSysDict:reloadCache',2,'同步缓存',4,CURDATE(),1); COMMIT; -- ---------------------------- -- 全部菜单和权限字关系数据 -- ---------------------------- BEGIN; -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754512,1248875520091754518); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754513,1248875520091754519); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754514,1248875520091754520); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754515,1248875520091754521); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754516,1248875520091754522); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754524,1248875520091754529); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754525,1248875520091754530); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754526,1248875520091754531); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754527,1248875520091754532); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754536,1248875520091754544); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754540,1248875520091754545); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754537,1248875520091754546); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754538,1248875520091754547); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754539,1248875520091754548); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754541,1248875520091754549); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754542,1248875520091754550); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754554,1248875520091754562); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754558,1248875520091754563); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754555,1248875520091754564); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754556,1248875520091754565); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754557,1248875520091754566); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754559,1248875520091754567); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754560,1248875520091754568); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754570,1248875520091754576); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754571,1248875520091754577); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754572,1248875520091754578); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754573,1248875520091754579); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520091754574,1248875520091754580); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948801,1248875520095948806); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948802,1248875520095948807); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948803,1248875520095948808); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948804,1248875520095948809); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948811,1248875520095948819); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948812,1248875520095948820); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948813,1248875520095948821); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948814,1248875520095948822); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948815,1248875520095948823); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948816,1248875520095948824); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948817,1248875520095948825); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248448487486394375,1248875520095948833); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248448487486394375,1248875520095948834); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248448487486394375,1248875520095948835); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248448487486394375,1248875520095948836); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248448487486394375,1248875520095948837); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948827,1248875520095948833); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948828,1248875520095948834); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948829,1248875520095948835); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948830,1248875520095948836); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948831,1248875520095948837); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948840,1248875520087560193); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948841,1248875520091754496); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948841,1248875520091754500); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948841,1248875520091754501); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948841,1248875520091754502); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948841,1248875520091754503); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948842,1248875520091754497); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948842,1248875520091754504); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948842,1248875520091754505); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948842,1248875520091754506); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948842,1248875520091754507); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948843,1248875520091754498); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948843,1248875520091754508); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948843,1248875520091754509); -INSERT INTO `zz_sys_menu_perm_code` VALUES(1248875520095948844,1248875520091754499); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563034832914,1264533563034832920); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563034832915,1264533563034832921); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563034832916,1264533563034832922); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563034832917,1264533563034832923); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563034832918,1264533563034832924); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027201,1264533563039027206); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027202,1264533563039027207); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027203,1264533563039027208); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027204,1264533563039027209); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027213,1264533563039027221); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027217,1264533563039027222); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027214,1264533563039027223); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027215,1264533563039027224); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027216,1264533563039027225); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027218,1264533563039027226); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027219,1264533563039027227); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027231,1264533563039027239); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027235,1264533563039027240); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027232,1264533563039027241); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027233,1264533563039027242); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027234,1264533563039027243); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027236,1264533563039027244); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027237,1264533563039027245); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027247,1264533563039027253); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027248,1264533563039027254); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027249,1264533563039027255); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027250,1264533563039027256); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027251,1264533563039027257); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027259,1264533563039027264); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027260,1264533563039027265); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027261,1264533563039027266); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027262,1264533563039027267); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027269,1264533563039027277); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027270,1264533563039027278); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027271,1264533563039027279); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027272,1264533563039027280); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027273,1264533563039027281); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027274,1264533563039027282); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027275,1264533563039027283); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1248448487486394375,1264533563039027291); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1248448487486394375,1264533563039027292); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1248448487486394375,1264533563039027293); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1248448487486394375,1264533563039027294); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1248448487486394375,1264533563039027295); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027285,1264533563039027291); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027286,1264533563039027292); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027287,1264533563039027293); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027288,1264533563039027294); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027289,1264533563039027295); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027298,1264533563034832897); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027299,1264533563034832898); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027299,1264533563034832902); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027299,1264533563034832903); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027299,1264533563034832904); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027299,1264533563034832905); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027300,1264533563034832899); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027300,1264533563034832906); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027300,1264533563034832907); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027300,1264533563034832908); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027300,1264533563034832909); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027301,1264533563034832900); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027301,1264533563034832910); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027301,1264533563034832911); +INSERT INTO `zz_sys_menu_perm_code` VALUES(1264533563039027302,1264533563034832901); COMMIT; -- ---------------------------- @@ -471,179 +471,179 @@ BEGIN; INSERT INTO `zz_sys_perm_module` VALUES(1248448487645777921,NULL,'缺省分组',0,3,CURDATE(),1); INSERT INTO `zz_sys_perm_module` VALUES(1248448487645777920,NULL,'系统配置',0,2,CURDATE(),1); INSERT INTO `zz_sys_perm_module` VALUES(1248448487087935491,NULL,'用户权限',0,1,CURDATE(),1); -INSERT INTO `zz_sys_perm_module` VALUES(1248875520028839936,1248448487645777921,'部门管理',1,0,CURDATE(),1); -INSERT INTO `zz_sys_perm_module` VALUES(1248875520033034247,1248448487645777921,'用户管理',1,5,CURDATE(),1); -INSERT INTO `zz_sys_perm_module` VALUES(1248875520033034256,1248448487645777921,'老师数据源',1,10,CURDATE(),1); -INSERT INTO `zz_sys_perm_module` VALUES(1248875520033034264,1248448487645777921,'老师流水统计',1,15,CURDATE(),1); -INSERT INTO `zz_sys_perm_module` VALUES(1248875520033034270,1248448487087935491,'角色管理',1,10,CURDATE(),1); -INSERT INTO `zz_sys_perm_module` VALUES(1248875520033034280,1248448487087935491,'数据权限管理',1,15,CURDATE(),1); -INSERT INTO `zz_sys_perm_module` VALUES(1248875520033034290,1248448487087935491,'菜单管理',1,20,CURDATE(),1); -INSERT INTO `zz_sys_perm_module` VALUES(1248875520033034297,1248448487087935491,'权限字管理',1,25,CURDATE(),1); -INSERT INTO `zz_sys_perm_module` VALUES(1248875520033034303,1248448487087935491,'权限模块管理',1,30,CURDATE(),1); -INSERT INTO `zz_sys_perm_module` VALUES(1248875520033034309,1248448487087935491,'权限资源管理',1,35,CURDATE(),1); -INSERT INTO `zz_sys_perm_module` VALUES(1248875520033034315,1248448487645777920,'字典管理',0,1,CURDATE(),1); -INSERT INTO `zz_sys_perm_module` VALUES(1248875520033034316,1248875520033034315,'行政区划',1,1,CURDATE(),1); +INSERT INTO `zz_sys_perm_module` VALUES(1264533562980306944,1248448487645777921,'部门管理',1,0,CURDATE(),1); +INSERT INTO `zz_sys_perm_module` VALUES(1264533562984501255,1248448487645777921,'用户管理',1,5,CURDATE(),1); +INSERT INTO `zz_sys_perm_module` VALUES(1264533562984501264,1248448487645777921,'老师数据源',1,10,CURDATE(),1); +INSERT INTO `zz_sys_perm_module` VALUES(1264533562984501272,1248448487645777921,'老师流水统计',1,15,CURDATE(),1); +INSERT INTO `zz_sys_perm_module` VALUES(1264533562984501278,1248448487087935491,'角色管理',1,10,CURDATE(),1); +INSERT INTO `zz_sys_perm_module` VALUES(1264533562984501288,1248448487087935491,'数据权限管理',1,15,CURDATE(),1); +INSERT INTO `zz_sys_perm_module` VALUES(1264533562984501298,1248448487087935491,'菜单管理',1,20,CURDATE(),1); +INSERT INTO `zz_sys_perm_module` VALUES(1264533562984501305,1248448487087935491,'权限字管理',1,25,CURDATE(),1); +INSERT INTO `zz_sys_perm_module` VALUES(1264533562984501311,1248448487087935491,'权限模块管理',1,30,CURDATE(),1); +INSERT INTO `zz_sys_perm_module` VALUES(1264533562984501317,1248448487087935491,'权限资源管理',1,35,CURDATE(),1); +INSERT INTO `zz_sys_perm_module` VALUES(1264533562984501323,1248448487645777920,'字典管理',0,1,CURDATE(),1); +INSERT INTO `zz_sys_perm_module` VALUES(1264533562984501324,1264533562984501323,'行政区划',1,1,CURDATE(),1); COMMIT; -- ---------------------------- -- 全部权限资源数据 -- ---------------------------- BEGIN; -INSERT INTO `zz_sys_perm` VALUES(1248875520033034240,1248875520028839936,'新增','/admin/upms/sysDept/add',1,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034241,1248875520028839936,'编辑','/admin/upms/sysDept/update',2,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034242,1248875520028839936,'删除','/admin/upms/sysDept/delete',3,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034243,1248875520028839936,'显示列表','/admin/upms/sysDept/list',4,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034244,1248875520028839936,'导出','/admin/upms/sysDept/export',5,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034245,1248875520028839936,'详情','/admin/upms/sysDept/view',6,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034246,1248875520028839936,'打印','/admin/upms/sysDept/print',7,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034248,1248875520033034247,'新增','/admin/upms/sysUser/add',1,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034249,1248875520033034247,'编辑','/admin/upms/sysUser/update',2,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034250,1248875520033034247,'删除','/admin/upms/sysUser/delete',3,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034251,1248875520033034247,'显示列表','/admin/upms/sysUser/list',4,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034252,1248875520033034247,'导出','/admin/upms/sysUser/export',5,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034253,1248875520033034247,'详情','/admin/upms/sysUser/view',6,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034254,1248875520033034247,'打印','/admin/upms/sysUser/print',7,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034255,1248875520033034247,'重置密码','/admin/upms/sysUser/resetPassword',8,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034257,1248875520033034256,'新增','/admin/app/teacher/add',1,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034258,1248875520033034256,'编辑','/admin/app/teacher/update',2,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034259,1248875520033034256,'删除','/admin/app/teacher/delete',3,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034260,1248875520033034256,'显示列表','/admin/app/teacher/list',4,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034261,1248875520033034256,'导出','/admin/app/teacher/export',5,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034262,1248875520033034256,'详情','/admin/app/teacher/view',6,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034263,1248875520033034256,'打印','/admin/app/teacher/print',7,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034265,1248875520033034264,'分组列表','/admin/app/teacherTransStats/listWithGroup',1,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034266,1248875520033034264,'显示列表','/admin/app/teacherTransStats/list',2,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034267,1248875520033034264,'导出','/admin/app/teacherTransStats/export',3,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034268,1248875520033034264,'详情','/admin/app/teacherTransStats/view',4,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034269,1248875520033034264,'打印','/admin/app/teacherTransStats/print',5,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034271,1248875520033034270,'新增','/admin/upms/sysRole/add',1,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034272,1248875520033034270,'编辑','/admin/upms/sysRole/update',2,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034273,1248875520033034270,'删除','/admin/upms/sysRole/delete',3,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034274,1248875520033034270,'显示列表','/admin/upms/sysRole/list',4,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034275,1248875520033034270,'详情','/admin/upms/sysRole/view',5,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034276,1248875520033034270,'授权用户','/admin/upms/sysRole/addUserRole',6,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034277,1248875520033034270,'移除用户','/admin/upms/sysRole/deleteUserRole',7,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034278,1248875520033034270,'角色用户列表','/admin/upms/sysRole/listUserRole',8,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034279,1248875520033034270,'角色未添加用户列表','/admin/upms/sysRole/listNotInUserRole',9,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034281,1248875520033034280,'新增','/admin/upms/sysDataPerm/add',1,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034282,1248875520033034280,'编辑','/admin/upms/sysDataPerm/update',2,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034283,1248875520033034280,'删除','/admin/upms/sysDataPerm/delete',3,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034284,1248875520033034280,'显示列表','/admin/upms/sysDataPerm/list',4,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034285,1248875520033034280,'详情','/admin/upms/sysDataPerm/view',5,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034286,1248875520033034280,'授权用户','/admin/upms/sysDataPerm/addDataPermUser',5,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034287,1248875520033034280,'移除用户','/admin/upms/sysDataPerm/deleteDataPermUser',6,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034288,1248875520033034280,'数据权限用户列表','/admin/upms/sysDataPerm/listDataPermUser',7,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034289,1248875520033034280,'数据权限未添加用户列表','/admin/upms/sysDataPerm/listNotInDataPermUser',8,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034291,1248875520033034290,'新增','/admin/upms/sysMenu/add',1,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034292,1248875520033034290,'编辑','/admin/upms/sysMenu/update',2,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034293,1248875520033034290,'删除','/admin/upms/sysMenu/delete',3,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034294,1248875520033034290,'显示列表','/admin/upms/sysMenu/list',4,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034295,1248875520033034290,'详情','/admin/upms/sysMenu/view',5,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034296,1248875520033034290,'权限资源列表','/admin/upms/sysMenu/listMenuPerm',6,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034298,1248875520033034297,'新增','/admin/upms/sysPermCode/add',1,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034299,1248875520033034297,'编辑','/admin/upms/sysPermCode/update',2,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034300,1248875520033034297,'删除','/admin/upms/sysPermCode/delete',3,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034301,1248875520033034297,'显示列表','/admin/upms/sysPermCode/list',4,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034302,1248875520033034297,'详情','/admin/upms/sysPermCode/view',5,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034304,1248875520033034303,'新增','/admin/upms/sysPermModule/add',1,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034305,1248875520033034303,'编辑','/admin/upms/sysPermModule/update',2,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034306,1248875520033034303,'删除','/admin/upms/sysPermModule/delete',3,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034307,1248875520033034303,'显示列表','/admin/upms/sysPermModule/list',4,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034308,1248875520033034303,'显示全部','/admin/upms/sysPermModule/listAll',5,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034310,1248875520033034309,'新增','/admin/upms/sysPerm/add',1,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034311,1248875520033034309,'编辑','/admin/upms/sysPerm/update',2,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034312,1248875520033034309,'删除','/admin/upms/sysPerm/delete',3,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034313,1248875520033034309,'显示列表','/admin/upms/sysPerm/list',4,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034314,1248875520033034309,'详情','/admin/upms/sysPerm/view',5,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034317,1248875520033034316,'新增','/admin/app/areaCode/add',1,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034318,1248875520033034316,'编辑','/admin/app/areaCode/update',2,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034319,1248875520033034316,'删除','/admin/app/areaCode/delete',3,CURDATE(),1); -INSERT INTO `zz_sys_perm` VALUES(1248875520033034320,1248875520033034316,'同步缓存','/admin/app/areaCode/reloadCachedData',4,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501248,1264533562980306944,'新增','/admin/upms/sysDept/add',1,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501249,1264533562980306944,'编辑','/admin/upms/sysDept/update',2,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501250,1264533562980306944,'删除','/admin/upms/sysDept/delete',3,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501251,1264533562980306944,'显示列表','/admin/upms/sysDept/list',4,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501252,1264533562980306944,'导出','/admin/upms/sysDept/export',5,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501253,1264533562980306944,'详情','/admin/upms/sysDept/view',6,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501254,1264533562980306944,'打印','/admin/upms/sysDept/print',7,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501256,1264533562984501255,'新增','/admin/upms/sysUser/add',1,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501257,1264533562984501255,'编辑','/admin/upms/sysUser/update',2,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501258,1264533562984501255,'删除','/admin/upms/sysUser/delete',3,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501259,1264533562984501255,'显示列表','/admin/upms/sysUser/list',4,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501260,1264533562984501255,'导出','/admin/upms/sysUser/export',5,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501261,1264533562984501255,'详情','/admin/upms/sysUser/view',6,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501262,1264533562984501255,'打印','/admin/upms/sysUser/print',7,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501263,1264533562984501255,'重置密码','/admin/upms/sysUser/resetPassword',8,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501265,1264533562984501264,'新增','/admin/app/teacher/add',1,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501266,1264533562984501264,'编辑','/admin/app/teacher/update',2,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501267,1264533562984501264,'删除','/admin/app/teacher/delete',3,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501268,1264533562984501264,'显示列表','/admin/app/teacher/list',4,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501269,1264533562984501264,'导出','/admin/app/teacher/export',5,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501270,1264533562984501264,'详情','/admin/app/teacher/view',6,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501271,1264533562984501264,'打印','/admin/app/teacher/print',7,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501273,1264533562984501272,'分组列表','/admin/app/teacherTransStats/listWithGroup',1,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501274,1264533562984501272,'显示列表','/admin/app/teacherTransStats/list',2,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501275,1264533562984501272,'导出','/admin/app/teacherTransStats/export',3,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501276,1264533562984501272,'详情','/admin/app/teacherTransStats/view',4,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501277,1264533562984501272,'打印','/admin/app/teacherTransStats/print',5,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501279,1264533562984501278,'新增','/admin/upms/sysRole/add',1,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501280,1264533562984501278,'编辑','/admin/upms/sysRole/update',2,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501281,1264533562984501278,'删除','/admin/upms/sysRole/delete',3,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501282,1264533562984501278,'显示列表','/admin/upms/sysRole/list',4,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501283,1264533562984501278,'详情','/admin/upms/sysRole/view',5,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501284,1264533562984501278,'授权用户','/admin/upms/sysRole/addUserRole',6,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501285,1264533562984501278,'移除用户','/admin/upms/sysRole/deleteUserRole',7,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501286,1264533562984501278,'角色用户列表','/admin/upms/sysRole/listUserRole',8,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501287,1264533562984501278,'角色未添加用户列表','/admin/upms/sysRole/listNotInUserRole',9,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501289,1264533562984501288,'新增','/admin/upms/sysDataPerm/add',1,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501290,1264533562984501288,'编辑','/admin/upms/sysDataPerm/update',2,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501291,1264533562984501288,'删除','/admin/upms/sysDataPerm/delete',3,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501292,1264533562984501288,'显示列表','/admin/upms/sysDataPerm/list',4,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501293,1264533562984501288,'详情','/admin/upms/sysDataPerm/view',5,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501294,1264533562984501288,'授权用户','/admin/upms/sysDataPerm/addDataPermUser',5,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501295,1264533562984501288,'移除用户','/admin/upms/sysDataPerm/deleteDataPermUser',6,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501296,1264533562984501288,'数据权限用户列表','/admin/upms/sysDataPerm/listDataPermUser',7,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501297,1264533562984501288,'数据权限未添加用户列表','/admin/upms/sysDataPerm/listNotInDataPermUser',8,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501299,1264533562984501298,'新增','/admin/upms/sysMenu/add',1,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501300,1264533562984501298,'编辑','/admin/upms/sysMenu/update',2,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501301,1264533562984501298,'删除','/admin/upms/sysMenu/delete',3,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501302,1264533562984501298,'显示列表','/admin/upms/sysMenu/list',4,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501303,1264533562984501298,'详情','/admin/upms/sysMenu/view',5,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501304,1264533562984501298,'权限资源列表','/admin/upms/sysMenu/listMenuPerm',6,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501306,1264533562984501305,'新增','/admin/upms/sysPermCode/add',1,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501307,1264533562984501305,'编辑','/admin/upms/sysPermCode/update',2,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501308,1264533562984501305,'删除','/admin/upms/sysPermCode/delete',3,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501309,1264533562984501305,'显示列表','/admin/upms/sysPermCode/list',4,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501310,1264533562984501305,'详情','/admin/upms/sysPermCode/view',5,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501312,1264533562984501311,'新增','/admin/upms/sysPermModule/add',1,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501313,1264533562984501311,'编辑','/admin/upms/sysPermModule/update',2,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501314,1264533562984501311,'删除','/admin/upms/sysPermModule/delete',3,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501315,1264533562984501311,'显示列表','/admin/upms/sysPermModule/list',4,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501316,1264533562984501311,'显示全部','/admin/upms/sysPermModule/listAll',5,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501318,1264533562984501317,'新增','/admin/upms/sysPerm/add',1,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501319,1264533562984501317,'编辑','/admin/upms/sysPerm/update',2,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501320,1264533562984501317,'删除','/admin/upms/sysPerm/delete',3,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501321,1264533562984501317,'显示列表','/admin/upms/sysPerm/list',4,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501322,1264533562984501317,'详情','/admin/upms/sysPerm/view',5,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501325,1264533562984501324,'新增','/admin/app/areaCode/add',1,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501326,1264533562984501324,'编辑','/admin/app/areaCode/update',2,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501327,1264533562984501324,'删除','/admin/app/areaCode/delete',3,CURDATE(),1); +INSERT INTO `zz_sys_perm` VALUES(1264533562984501328,1264533562984501324,'同步缓存','/admin/app/areaCode/reloadCachedData',4,CURDATE(),1); COMMIT; -- ---------------------------- -- 全部权限字和权限资源关系数据 -- ---------------------------- BEGIN; -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520087560193,1248875520033034260); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754499,1248875520033034259); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754503,1248875520033034257); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754505,1248875520033034262); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754507,1248875520033034258); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754509,1248875520033034265); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754509,1248875520033034266); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754518,1248875520033034251); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754518,1248875520033034252); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754519,1248875520033034248); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754519,1248875520033034243); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754519,1248875520033034284); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754519,1248875520033034274); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754520,1248875520033034253); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754520,1248875520033034249); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754520,1248875520033034254); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754520,1248875520033034243); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754520,1248875520033034284); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754520,1248875520033034274); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754521,1248875520033034250); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754522,1248875520033034255); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754529,1248875520033034243); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754529,1248875520033034244); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754530,1248875520033034240); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754531,1248875520033034245); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754531,1248875520033034241); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754531,1248875520033034246); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754532,1248875520033034242); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754544,1248875520033034274); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754546,1248875520033034271); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754546,1248875520033034294); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754547,1248875520033034275); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754547,1248875520033034272); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754547,1248875520033034294); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754548,1248875520033034273); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754545,1248875520033034278); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754549,1248875520033034276); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754549,1248875520033034279); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754550,1248875520033034277); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754562,1248875520033034284); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754564,1248875520033034281); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754564,1248875520033034294); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754565,1248875520033034285); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754565,1248875520033034282); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754565,1248875520033034294); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754566,1248875520033034283); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754563,1248875520033034288); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754567,1248875520033034286); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754567,1248875520033034289); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754568,1248875520033034287); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754576,1248875520033034294); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754577,1248875520033034291); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754577,1248875520033034301); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754578,1248875520033034295); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754578,1248875520033034292); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754578,1248875520033034301); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754579,1248875520033034293); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520091754580,1248875520033034296); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948806,1248875520033034301); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948807,1248875520033034298); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948807,1248875520033034308); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948808,1248875520033034302); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948808,1248875520033034299); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948808,1248875520033034308); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948809,1248875520033034300); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948819,1248875520033034307); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948819,1248875520033034308); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948819,1248875520033034313); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948820,1248875520033034304); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948821,1248875520033034305); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948822,1248875520033034306); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948823,1248875520033034310); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948824,1248875520033034314); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948824,1248875520033034311); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948825,1248875520033034312); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948833,1248875520033034317); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948833,1248875520033034318); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948833,1248875520033034319); -INSERT INTO `zz_sys_perm_code_perm` VALUES(1248875520095948833,1248875520033034320); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832897,1264533562984501268); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832901,1264533562984501267); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832905,1264533562984501265); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832907,1264533562984501270); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832909,1264533562984501266); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832911,1264533562984501273); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832911,1264533562984501274); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832920,1264533562984501259); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832920,1264533562984501260); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832921,1264533562984501256); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832921,1264533562984501251); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832921,1264533562984501292); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832921,1264533562984501282); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832922,1264533562984501261); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832922,1264533562984501257); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832922,1264533562984501262); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832922,1264533562984501251); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832922,1264533562984501292); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832922,1264533562984501282); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832923,1264533562984501258); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563034832924,1264533562984501263); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027206,1264533562984501251); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027206,1264533562984501252); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027207,1264533562984501248); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027208,1264533562984501253); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027208,1264533562984501249); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027208,1264533562984501254); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027209,1264533562984501250); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027221,1264533562984501282); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027223,1264533562984501279); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027223,1264533562984501302); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027224,1264533562984501283); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027224,1264533562984501280); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027224,1264533562984501302); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027225,1264533562984501281); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027222,1264533562984501286); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027226,1264533562984501284); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027226,1264533562984501287); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027227,1264533562984501285); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027239,1264533562984501292); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027241,1264533562984501289); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027241,1264533562984501302); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027242,1264533562984501293); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027242,1264533562984501290); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027242,1264533562984501302); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027243,1264533562984501291); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027240,1264533562984501296); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027244,1264533562984501294); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027244,1264533562984501297); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027245,1264533562984501295); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027253,1264533562984501302); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027254,1264533562984501299); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027254,1264533562984501309); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027255,1264533562984501303); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027255,1264533562984501300); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027255,1264533562984501309); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027256,1264533562984501301); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027257,1264533562984501304); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027264,1264533562984501309); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027265,1264533562984501306); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027265,1264533562984501316); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027266,1264533562984501310); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027266,1264533562984501307); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027266,1264533562984501316); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027267,1264533562984501308); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027277,1264533562984501315); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027277,1264533562984501316); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027277,1264533562984501321); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027278,1264533562984501312); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027279,1264533562984501313); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027280,1264533562984501314); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027281,1264533562984501318); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027282,1264533562984501322); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027282,1264533562984501319); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027283,1264533562984501320); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027291,1264533562984501325); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027291,1264533562984501326); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027291,1264533562984501327); +INSERT INTO `zz_sys_perm_code_perm` VALUES(1264533563039027291,1264533562984501328); COMMIT; -- ---------------------------- diff --git a/orange-admin-service/zzlogs/server/server.log b/orange-admin-service/zzlogs/server/server.log index cf11984e..498bff66 100644 --- a/orange-admin-service/zzlogs/server/server.log +++ b/orange-admin-service/zzlogs/server/server.log @@ -1,66 +1,10 @@ -[INFO ] 时间[2020-04-11 15:54:36] 线程[main] ==> Starting MyApplication on bogon with PID 1665 (/Users/stephen-liu/Desktop/OrangeAdmin/application/target/classes started by stephen-liu in /Users/stephen-liu/Desktop/OrangeAdmin) -[INFO ] 时间[2020-04-11 15:54:36] 线程[main] ==> The following profiles are active: dev -[INFO ] 时间[2020-04-11 15:57:14] 线程[main] ==> Starting MyApplication on bogon with PID 1680 (/Users/stephen-liu/Desktop/OrangeAdmin/application/target/classes started by stephen-liu in /Users/stephen-liu/Desktop/OrangeAdmin) -[INFO ] 时间[2020-04-11 15:57:14] 线程[main] ==> The following profiles are active: dev -[INFO ] 时间[2020-04-11 15:57:19] 线程[main] ==> Started MyApplication in 5.698 seconds (JVM running for 6.816) -[ERROR] 时间[2020-04-11 15:58:29] 线程[http-nio-8082-exec-2] ==> Unhandled exception from URL [/admin/login/doLogin] -org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported - at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.handleNoMatch(RequestMappingInfoHandlerMapping.java:213) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:421) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:367) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:110) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping.getHandlerInternal(RequestMappingInfoHandlerMapping.java:59) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:395) ~[spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1234) [spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1016) [spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) [spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) [spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909) [spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) [spring-webmvc-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-embed-websocket-9.0.31.jar:9.0.31] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92) [spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.31.jar:9.0.31] - at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124) [druid-1.1.21.jar:1.1.21] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) [spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) [spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:109) [spring-boot-actuator-2.2.5.RELEASE.jar:2.2.5.RELEASE] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) [spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) [spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE] - at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1639) [tomcat-embed-core-9.0.31.jar:9.0.31] - at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.31.jar:9.0.31] - at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_151] - at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_151] - at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.31.jar:9.0.31] - at java.lang.Thread.run(Thread.java:748) [?:1.8.0_151] -[INFO ] 时间[2020-04-11 15:58:41] 线程[http-nio-8082-exec-3] ==> access: com.orange.admin.upms.controller.LoginController.doLogin -- elapse 487 ms -- /admin/login/doLogin. +[INFO ] 时间[2020-05-24 22:35:48] 线程[main] ==> Starting MyApplication on stephendembp with PID 2363 (/Users/stephen-liu/Desktop/OrangeAdmin/application/target/classes started by stephen-liu in /Users/stephen-liu/Desktop/OrangeAdmin) +[INFO ] 时间[2020-05-24 22:35:48] 线程[main] ==> The following profiles are active: dev +[INFO ] 时间[2020-05-24 22:36:53] 线程[main] ==> Starting MyApplication on stephendembp with PID 2366 (/Users/stephen-liu/Desktop/OrangeAdmin/application/target/classes started by stephen-liu in /Users/stephen-liu/Desktop/OrangeAdmin) +[INFO ] 时间[2020-05-24 22:36:53] 线程[main] ==> The following profiles are active: dev +[INFO ] 时间[2020-05-24 22:37:00] 线程[main] ==> Started MyApplication in 7.554 seconds (JVM running for 8.747) +[INFO ] 时间[2020-05-24 22:37:39] 线程[http-nio-8082-exec-1] ==> access: com.orange.admin.upms.controller.LoginController.doLogin -- elapse 173 ms -- /admin/login/doLogin. +[INFO ] 时间[2020-05-24 22:38:34] 线程[main] ==> Starting MyApplication on stephendembp with PID 2385 (/Users/stephen-liu/Desktop/OrangeAdmin/application/target/classes started by stephen-liu in /Users/stephen-liu/Desktop/OrangeAdmin) +[INFO ] 时间[2020-05-24 22:38:34] 线程[main] ==> The following profiles are active: dev +[INFO ] 时间[2020-05-24 22:38:41] 线程[main] ==> Started MyApplication in 7.343 seconds (JVM running for 8.439) +[INFO ] 时间[2020-05-24 22:39:22] 线程[http-nio-8082-exec-2] ==> access: com.orange.admin.upms.controller.LoginController.doLogin -- elapse 126 ms -- /admin/login/doLogin. diff --git a/orange-admin-web/README.md b/orange-admin-web/README.md index e226b83d..fe1441d6 100644 --- a/orange-admin-web/README.md +++ b/orange-admin-web/README.md @@ -14,4 +14,4 @@ npm run build npm test ``` -### 官方文档:[http://101.200.178.51/development-vue/](http://101.200.178.51/development-vue/) \ No newline at end of file +### 官方文档:[http://101.200.178.51/](http://101.200.178.51/) \ No newline at end of file diff --git a/orange-admin-web/package.json b/orange-admin-web/package.json index b3f31d03..1fcb6289 100644 --- a/orange-admin-web/package.json +++ b/orange-admin-web/package.json @@ -14,6 +14,7 @@ "echarts": "^4.2.1", "element-ui": "^2.13.0", "jquery": "^3.3.1", + "jsencrypt": "^3.0.0-rc.1", "json-bigint": "^0.3.0", "layui-layer": "^1.0.9", "lodash": "^4.17.5", diff --git a/orange-admin-web/src/assets/img/login_bg.jpg b/orange-admin-web/src/assets/img/login_bg.jpg index b589f32f..74474f84 100644 Binary files a/orange-admin-web/src/assets/img/login_bg.jpg and b/orange-admin-web/src/assets/img/login_bg.jpg differ diff --git a/orange-admin-web/src/components/IconSelect/index.vue b/orange-admin-web/src/components/IconSelect/index.vue index e8584a1e..06be852b 100644 --- a/orange-admin-web/src/components/IconSelect/index.vue +++ b/orange-admin-web/src/components/IconSelect/index.vue @@ -101,5 +101,4 @@ export default { .active { color: #EF5E1C; } - diff --git a/orange-admin-web/src/utils/index.js b/orange-admin-web/src/utils/index.js index 336c9f3c..7c48d739 100644 --- a/orange-admin-web/src/utils/index.js +++ b/orange-admin-web/src/utils/index.js @@ -1,3 +1,5 @@ +import JSEncrypt from 'jsencrypt'; + /** * 列表数据转换树形数据 * @param {Array} data 要转换的列表 @@ -207,3 +209,14 @@ export function random (min, max) { let base = Math.random(); return min + base * (max - min); } +/** + * 加密 + * @param {*} value 要加密的字符串 + */ +const publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpC4QMnbTrQOFriJJCCFFWhlruBJThAEBfRk7pRx1jsAhyNVL3CqJb0tRvpnbCnJhrRAEPdgFHXv5A0RrvFp+5Cw7QoFH6O9rKB8+0H7+aVQeKITMUHf/XMXioymw6Iq4QfWd8RhdtM1KM6eGTy8aU7SO2s69Mc1LXefg/x3yw6wIDAQAB'; +export function encrypt (value) { + if (value == null || value === '') return null; + let encrypt = new JSEncrypt(); + encrypt.setPublicKey(publicKey); + return encodeURIComponent(encrypt.encrypt(value)); +} diff --git a/orange-admin-web/src/views/generated/formTeacher/index.vue b/orange-admin-web/src/views/generated/formTeacher/index.vue index b1d6296a..2a35a88f 100644 --- a/orange-admin-web/src/views/generated/formTeacher/index.vue +++ b/orange-admin-web/src/views/generated/formTeacher/index.vue @@ -63,7 +63,7 @@ {{formatDateByStatsType(scope.row.registerDate, 'day')}} - +