commit:VO支持以及bug修复

This commit is contained in:
Jerry
2020-12-18 22:52:35 +08:00
parent ecec5ae30a
commit d86ae86f1c
558 changed files with 8019 additions and 10785 deletions

View File

@@ -7,6 +7,7 @@ import com.orange.demo.common.core.upload.UpDownloaderFactory;
import com.orange.demo.common.core.upload.UploadResponseInfo;
import com.orange.demo.common.core.upload.UploadStoreInfo;
import com.github.pagehelper.page.PageMethod;
import com.orange.demo.app.vo.*;
import com.orange.demo.app.model.*;
import com.orange.demo.app.service.*;
import com.orange.demo.common.core.object.*;
@@ -133,7 +134,7 @@ public class CourseController {
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<Course>> list(
public ResponseResult<MyPageData<CourseVo>> list(
@MyRequestBody Course courseFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
@@ -141,8 +142,8 @@ public class CourseController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, Course.class);
List<Course> resultList = courseService.getCourseListWithRelation(courseFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
List<Course> courseList = courseService.getCourseListWithRelation(courseFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(courseList, Course.INSTANCE));
}
/**
@@ -152,7 +153,7 @@ public class CourseController {
* @return 应答结果对象,包含对象详情。
*/
@GetMapping("/view")
public ResponseResult<Course> view(@RequestParam Long courseId) {
public ResponseResult<CourseVo> view(@RequestParam Long courseId) {
if (MyCommonUtil.existBlankArgument(courseId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
@@ -160,7 +161,8 @@ public class CourseController {
if (course == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(course);
CourseVo courseVo = Course.INSTANCE.fromModel(course);
return ResponseResult.success(courseVo);
}
/**

View File

@@ -1,6 +1,7 @@
package com.orange.demo.app.controller;
import com.github.pagehelper.page.PageMethod;
import com.orange.demo.app.vo.*;
import com.orange.demo.app.model.*;
import com.orange.demo.app.service.*;
import com.orange.demo.common.core.object.*;
@@ -36,7 +37,7 @@ public class CourseTransStatsController {
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<CourseTransStats>> list(
public ResponseResult<MyPageData<CourseTransStatsVo>> list(
@MyRequestBody CourseTransStats courseTransStatsFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
@@ -44,8 +45,8 @@ public class CourseTransStatsController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, CourseTransStats.class);
List<CourseTransStats> resultList = courseTransStatsService.getCourseTransStatsListWithRelation(courseTransStatsFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
List<CourseTransStats> courseTransStatsList = courseTransStatsService.getCourseTransStatsListWithRelation(courseTransStatsFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(courseTransStatsList, CourseTransStats.INSTANCE));
}
/**
@@ -58,7 +59,7 @@ public class CourseTransStatsController {
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/listWithGroup")
public ResponseResult<MyPageData<CourseTransStats>> listWithGroup(
public ResponseResult<MyPageData<CourseTransStatsVo>> listWithGroup(
@MyRequestBody CourseTransStats courseTransStatsFilter,
@MyRequestBody(required = true) MyGroupParam groupParam,
@MyRequestBody MyOrderParam orderParam,
@@ -75,7 +76,8 @@ public class CourseTransStatsController {
MyGroupCriteria criteria = groupParam.getGroupCriteria();
List<CourseTransStats> resultList = courseTransStatsService.getGroupedCourseTransStatsListWithRelation(
courseTransStatsFilter, criteria.getGroupSelect(), criteria.getGroupBy(), orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
// 分页连同对象数据转换copy工作下面的方法一并完成。
return ResponseResult.success(MyPageUtil.makeResponseData(resultList, CourseTransStats.INSTANCE));
}
/**
@@ -85,7 +87,7 @@ public class CourseTransStatsController {
* @return 应答结果对象,包含对象详情。
*/
@GetMapping("/view")
public ResponseResult<CourseTransStats> view(@RequestParam Long statsId) {
public ResponseResult<CourseTransStatsVo> view(@RequestParam Long statsId) {
if (MyCommonUtil.existBlankArgument(statsId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
@@ -93,6 +95,7 @@ public class CourseTransStatsController {
if (courseTransStats == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(courseTransStats);
CourseTransStatsVo courseTransStatsVo = CourseTransStats.INSTANCE.fromModel(courseTransStats);
return ResponseResult.success(courseTransStatsVo);
}
}

View File

@@ -2,6 +2,7 @@ package com.orange.demo.app.controller;
import cn.jimmyshi.beanquery.BeanQuery;
import com.github.pagehelper.page.PageMethod;
import com.orange.demo.app.vo.*;
import com.orange.demo.app.model.*;
import com.orange.demo.app.service.*;
import com.orange.demo.common.core.object.*;
@@ -118,7 +119,7 @@ public class SchoolInfoController {
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<SchoolInfo>> list(
public ResponseResult<MyPageData<SchoolInfoVo>> list(
@MyRequestBody SchoolInfo schoolInfoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
@@ -126,8 +127,8 @@ public class SchoolInfoController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, SchoolInfo.class);
List<SchoolInfo> resultList = schoolInfoService.getSchoolInfoListWithRelation(schoolInfoFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
List<SchoolInfo> schoolInfoList = schoolInfoService.getSchoolInfoListWithRelation(schoolInfoFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(schoolInfoList, SchoolInfo.INSTANCE));
}
/**
@@ -137,7 +138,7 @@ public class SchoolInfoController {
* @return 应答结果对象,包含对象详情。
*/
@GetMapping("/view")
public ResponseResult<SchoolInfo> view(@RequestParam Long schoolId) {
public ResponseResult<SchoolInfoVo> view(@RequestParam Long schoolId) {
if (MyCommonUtil.existBlankArgument(schoolId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
@@ -145,7 +146,8 @@ public class SchoolInfoController {
if (schoolInfo == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(schoolInfo);
SchoolInfoVo schoolInfoVo = SchoolInfo.INSTANCE.fromModel(schoolInfo);
return ResponseResult.success(schoolInfoVo);
}
/**

View File

@@ -1,6 +1,7 @@
package com.orange.demo.app.controller;
import com.github.pagehelper.page.PageMethod;
import com.orange.demo.app.vo.*;
import com.orange.demo.app.model.*;
import com.orange.demo.app.service.*;
import com.orange.demo.common.core.object.*;
@@ -36,7 +37,7 @@ public class StudentActionStatsController {
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<StudentActionStats>> list(
public ResponseResult<MyPageData<StudentActionStatsVo>> list(
@MyRequestBody StudentActionStats studentActionStatsFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
@@ -44,8 +45,8 @@ public class StudentActionStatsController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, StudentActionStats.class);
List<StudentActionStats> resultList = studentActionStatsService.getStudentActionStatsListWithRelation(studentActionStatsFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
List<StudentActionStats> studentActionStatsList = studentActionStatsService.getStudentActionStatsListWithRelation(studentActionStatsFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(studentActionStatsList, StudentActionStats.INSTANCE));
}
/**
@@ -58,7 +59,7 @@ public class StudentActionStatsController {
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/listWithGroup")
public ResponseResult<MyPageData<StudentActionStats>> listWithGroup(
public ResponseResult<MyPageData<StudentActionStatsVo>> listWithGroup(
@MyRequestBody StudentActionStats studentActionStatsFilter,
@MyRequestBody(required = true) MyGroupParam groupParam,
@MyRequestBody MyOrderParam orderParam,
@@ -75,7 +76,8 @@ public class StudentActionStatsController {
MyGroupCriteria criteria = groupParam.getGroupCriteria();
List<StudentActionStats> resultList = studentActionStatsService.getGroupedStudentActionStatsListWithRelation(
studentActionStatsFilter, criteria.getGroupSelect(), criteria.getGroupBy(), orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
// 分页连同对象数据转换copy工作下面的方法一并完成。
return ResponseResult.success(MyPageUtil.makeResponseData(resultList, StudentActionStats.INSTANCE));
}
/**
@@ -85,7 +87,7 @@ public class StudentActionStatsController {
* @return 应答结果对象,包含对象详情。
*/
@GetMapping("/view")
public ResponseResult<StudentActionStats> view(@RequestParam Long statsId) {
public ResponseResult<StudentActionStatsVo> view(@RequestParam Long statsId) {
if (MyCommonUtil.existBlankArgument(statsId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
@@ -93,6 +95,7 @@ public class StudentActionStatsController {
if (studentActionStats == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(studentActionStats);
StudentActionStatsVo studentActionStatsVo = StudentActionStats.INSTANCE.fromModel(studentActionStats);
return ResponseResult.success(studentActionStatsVo);
}
}

View File

@@ -1,6 +1,7 @@
package com.orange.demo.app.controller;
import com.github.pagehelper.page.PageMethod;
import com.orange.demo.app.vo.*;
import com.orange.demo.app.model.*;
import com.orange.demo.app.service.*;
import com.orange.demo.common.core.object.*;
@@ -117,7 +118,7 @@ public class StudentActionTransController {
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<StudentActionTrans>> list(
public ResponseResult<MyPageData<StudentActionTransVo>> list(
@MyRequestBody StudentActionTrans studentActionTransFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
@@ -125,8 +126,8 @@ public class StudentActionTransController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, StudentActionTrans.class);
List<StudentActionTrans> resultList = studentActionTransService.getStudentActionTransListWithRelation(studentActionTransFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
List<StudentActionTrans> studentActionTransList = studentActionTransService.getStudentActionTransListWithRelation(studentActionTransFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(studentActionTransList, StudentActionTrans.INSTANCE));
}
/**
@@ -136,7 +137,7 @@ public class StudentActionTransController {
* @return 应答结果对象,包含对象详情。
*/
@GetMapping("/view")
public ResponseResult<StudentActionTrans> view(@RequestParam Long transId) {
public ResponseResult<StudentActionTransVo> view(@RequestParam Long transId) {
if (MyCommonUtil.existBlankArgument(transId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
@@ -144,6 +145,7 @@ public class StudentActionTransController {
if (studentActionTrans == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(studentActionTrans);
StudentActionTransVo studentActionTransVo = StudentActionTrans.INSTANCE.fromModel(studentActionTrans);
return ResponseResult.success(studentActionTransVo);
}
}

View File

@@ -1,6 +1,7 @@
package com.orange.demo.app.controller;
import com.github.pagehelper.page.PageMethod;
import com.orange.demo.app.vo.*;
import com.orange.demo.app.model.*;
import com.orange.demo.app.service.*;
import com.orange.demo.common.core.object.*;
@@ -122,7 +123,7 @@ public class StudentClassController {
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<StudentClass>> list(
public ResponseResult<MyPageData<StudentClassVo>> list(
@MyRequestBody StudentClass studentClassFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
@@ -130,8 +131,8 @@ public class StudentClassController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, StudentClass.class);
List<StudentClass> resultList = studentClassService.getStudentClassListWithRelation(studentClassFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
List<StudentClass> studentClassList = studentClassService.getStudentClassListWithRelation(studentClassFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(studentClassList, StudentClass.INSTANCE));
}
/**
@@ -141,7 +142,7 @@ public class StudentClassController {
* @return 应答结果对象,包含对象详情。
*/
@GetMapping("/view")
public ResponseResult<StudentClass> view(@RequestParam Long classId) {
public ResponseResult<StudentClassVo> view(@RequestParam Long classId) {
if (MyCommonUtil.existBlankArgument(classId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
@@ -149,7 +150,8 @@ public class StudentClassController {
if (studentClass == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(studentClass);
StudentClassVo studentClassVo = StudentClass.INSTANCE.fromModel(studentClass);
return ResponseResult.success(studentClassVo);
}
/**
@@ -162,7 +164,7 @@ public class StudentClassController {
* @return 应答结果对象,返回符合条件的数据列表。
*/
@PostMapping("/listNotInClassCourse")
public ResponseResult<MyPageData<Course>> listNotInClassCourse(
public ResponseResult<MyPageData<CourseVo>> listNotInClassCourse(
@MyRequestBody Long classId,
@MyRequestBody Course courseFilter,
@MyRequestBody MyOrderParam orderParam,
@@ -175,9 +177,9 @@ public class StudentClassController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, Course.class);
List<Course> resultList =
List<Course> courseList =
courseService.getNotInCourseListByClassId(classId, courseFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
return ResponseResult.success(MyPageUtil.makeResponseData(courseList, Course.INSTANCE));
}
/**
@@ -190,7 +192,7 @@ public class StudentClassController {
* @return 应答结果对象,返回符合条件的数据列表。
*/
@PostMapping("/listClassCourse")
public ResponseResult<MyPageData<Course>> listClassCourse(
public ResponseResult<MyPageData<CourseVo>> listClassCourse(
@MyRequestBody Long classId,
@MyRequestBody Course courseFilter,
@MyRequestBody MyOrderParam orderParam,
@@ -203,9 +205,9 @@ public class StudentClassController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, Course.class);
List<Course> resultList =
List<Course> courseList =
courseService.getCourseListByClassId(classId, courseFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
return ResponseResult.success(MyPageUtil.makeResponseData(courseList, Course.INSTANCE));
}
private ResponseResult<Void> doClassCourseVerify(Long classId) {
@@ -274,7 +276,7 @@ public class StudentClassController {
* @return 应答结果对象,包括中间表详情。
*/
@GetMapping("/viewClassCourse")
public ResponseResult<ClassCourse> viewClassCourse(
public ResponseResult<ClassCourseVo> viewClassCourse(
@RequestParam Long classId, @RequestParam Long courseId) {
if (MyCommonUtil.existBlankArgument(classId, courseId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
@@ -283,7 +285,8 @@ public class StudentClassController {
if (classCourse == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(classCourse);
ClassCourseVo classCourseVo = MyModelUtil.copyTo(classCourse, ClassCourseVo.class);
return ResponseResult.success(classCourseVo);
}
/**
@@ -315,7 +318,7 @@ public class StudentClassController {
* @return 应答结果对象,返回符合条件的数据列表。
*/
@PostMapping("/listNotInClassStudent")
public ResponseResult<MyPageData<Student>> listNotInClassStudent(
public ResponseResult<MyPageData<StudentVo>> listNotInClassStudent(
@MyRequestBody Long classId,
@MyRequestBody Student studentFilter,
@MyRequestBody MyOrderParam orderParam,
@@ -328,9 +331,9 @@ public class StudentClassController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, Student.class);
List<Student> resultList =
List<Student> studentList =
studentService.getNotInStudentListByClassId(classId, studentFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
return ResponseResult.success(MyPageUtil.makeResponseData(studentList, Student.INSTANCE));
}
/**
@@ -343,7 +346,7 @@ public class StudentClassController {
* @return 应答结果对象,返回符合条件的数据列表。
*/
@PostMapping("/listClassStudent")
public ResponseResult<MyPageData<Student>> listClassStudent(
public ResponseResult<MyPageData<StudentVo>> listClassStudent(
@MyRequestBody Long classId,
@MyRequestBody Student studentFilter,
@MyRequestBody MyOrderParam orderParam,
@@ -356,9 +359,9 @@ public class StudentClassController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, Student.class);
List<Student> resultList =
List<Student> studentList =
studentService.getStudentListByClassId(classId, studentFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
return ResponseResult.success(MyPageUtil.makeResponseData(studentList, Student.INSTANCE));
}
private ResponseResult<Void> doClassStudentVerify(Long classId) {

View File

@@ -2,6 +2,7 @@ package com.orange.demo.app.controller;
import cn.jimmyshi.beanquery.BeanQuery;
import com.github.pagehelper.page.PageMethod;
import com.orange.demo.app.vo.*;
import com.orange.demo.app.model.*;
import com.orange.demo.app.service.*;
import com.orange.demo.common.core.object.*;
@@ -118,7 +119,7 @@ public class StudentController {
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<Student>> list(
public ResponseResult<MyPageData<StudentVo>> list(
@MyRequestBody Student studentFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
@@ -126,8 +127,8 @@ public class StudentController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, Student.class);
List<Student> resultList = studentService.getStudentListWithRelation(studentFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
List<Student> studentList = studentService.getStudentListWithRelation(studentFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(studentList, Student.INSTANCE));
}
/**
@@ -137,7 +138,7 @@ public class StudentController {
* @return 应答结果对象,包含对象详情。
*/
@GetMapping("/view")
public ResponseResult<Student> view(@RequestParam Long studentId) {
public ResponseResult<StudentVo> view(@RequestParam Long studentId) {
if (MyCommonUtil.existBlankArgument(studentId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
@@ -145,7 +146,8 @@ public class StudentController {
if (student == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(student);
StudentVo studentVo = Student.INSTANCE.fromModel(student);
return ResponseResult.success(studentVo);
}
/**

View File

@@ -20,8 +20,13 @@
<association property="classCourse" column="course_id" foreignColumn="course_id"
notNullColumn="course_id" resultMap="com.orange.demo.app.dao.ClassCourseMapper.BaseResultMap" />
</resultMap>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名否则当filterRef被其他Mapper.xml包含引用的时候就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.orange.demo.app.dao.CourseMapper.inputFilterRef"/>
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="courseFilter != null">
<if test="courseFilter.courseName != null and courseFilter.courseName != ''">
<bind name = "safeCourseName" value = "'%' + courseFilter.courseName + '%'" />

View File

@@ -13,8 +13,13 @@
<result column="student_flower_amount" jdbcType="INTEGER" property="studentFlowerAmount"/>
<result column="student_flower_count" jdbcType="INTEGER" property="studentFlowerCount"/>
</resultMap>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名否则当filterRef被其他Mapper.xml包含引用的时候就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.orange.demo.app.dao.CourseTransStatsMapper.inputFilterRef"/>
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="courseTransStatsFilter != null">
<if test="courseTransStatsFilter.statsDateStart != null and courseTransStatsFilter.statsDateStart != ''">
AND zz_course_trans_stats.stats_date &gt;= #{courseTransStatsFilter.statsDateStart}

View File

@@ -7,8 +7,13 @@
<result column="province_id" jdbcType="BIGINT" property="provinceId"/>
<result column="city_id" jdbcType="BIGINT" property="cityId"/>
</resultMap>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名否则当filterRef被其他Mapper.xml包含引用的时候就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.orange.demo.app.dao.SchoolInfoMapper.inputFilterRef"/>
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="schoolInfoFilter != null">
<if test="schoolInfoFilter.schoolName != null and schoolInfoFilter.schoolName != ''">
<bind name = "safeSchoolName" value = "'%' + schoolInfoFilter.schoolName + '%'" />

View File

@@ -24,8 +24,13 @@
<result column="do_exercise_count" jdbcType="INTEGER" property="doExerciseCount"/>
<result column="do_exercise_correct_count" jdbcType="INTEGER" property="doExerciseCorrectCount"/>
</resultMap>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名否则当filterRef被其他Mapper.xml包含引用的时候就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.orange.demo.app.dao.StudentActionStatsMapper.inputFilterRef"/>
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="studentActionStatsFilter != null">
<if test="studentActionStatsFilter.statsDateStart != null and studentActionStatsFilter.statsDateStart != ''">
AND zz_student_action_stats.stats_date &gt;= #{studentActionStatsFilter.statsDateStart}

View File

@@ -18,8 +18,13 @@
<result column="exercise_correct_flag" jdbcType="TINYINT" property="exerciseCorrectFlag"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
</resultMap>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名否则当filterRef被其他Mapper.xml包含引用的时候就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.orange.demo.app.dao.StudentActionTransMapper.inputFilterRef"/>
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="studentActionTransFilter != null">
<if test="studentActionTransFilter.studentId != null">
AND zz_student_action_trans.student_id = #{studentActionTransFilter.studentId}

View File

@@ -12,8 +12,14 @@
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="status" jdbcType="TINYINT" property="status"/>
</resultMap>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名否则当filterRef被其他Mapper.xml包含引用的时候就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.orange.demo.app.dao.StudentClassMapper.inputFilterRef"/>
AND zz_class.status = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="studentClassFilter != null">
<if test="studentClassFilter.className != null and studentClassFilter.className != ''">
AND zz_class.class_name = #{studentClassFilter.className}
@@ -25,7 +31,6 @@
AND zz_class.class_level = #{studentClassFilter.classLevel}
</if>
</if>
AND zz_class.status = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
</sql>
<select id="getStudentClassList" resultMap="BaseResultMap" parameterType="com.orange.demo.app.model.StudentClass">

View File

@@ -18,8 +18,13 @@
<result column="register_time" jdbcType="TIMESTAMP" property="registerTime"/>
<result column="status" jdbcType="TINYINT" property="status"/>
</resultMap>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名否则当filterRef被其他Mapper.xml包含引用的时候就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.orange.demo.app.dao.StudentMapper.inputFilterRef"/>
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="studentFilter != null">
<if test="studentFilter.provinceId != null">
AND zz_student.province_id = #{studentFilter.provinceId}

View File

@@ -6,9 +6,13 @@ import com.orange.demo.common.core.upload.UploadStoreTypeEnum;
import com.orange.demo.common.core.annotation.UploadFlagColumn;
import com.orange.demo.common.core.annotation.RelationDict;
import com.orange.demo.common.core.annotation.RelationConstDict;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.common.core.validator.ConstDictRef;
import com.orange.demo.app.vo.CourseVo;
import lombok.Data;
import org.mapstruct.*;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
@@ -169,4 +173,27 @@ public class Course {
constantDictClass = Subject.class)
@Transient
private Map<String, Object> subjectIdDictMap;
@Mapper
public interface CourseModelMapper extends BaseModelMapper<CourseVo, Course> {
/**
* 转换Vo对象到实体对象。
*
* @param courseVo 域对象。
* @return 实体对象。
*/
@Mapping(target = "classCourse", expression = "java(mapToBean(courseVo.getClassCourse(), com.orange.demo.app.model.ClassCourse.class))")
@Override
Course toModel(CourseVo courseVo);
/**
* 转换实体对象到VO对象。
*
* @param course 实体对象。
* @return 域对象。
*/
@Mapping(target = "classCourse", expression = "java(beanToMap(course.getClassCourse(), false))")
@Override
CourseVo fromModel(Course course);
}
public static final CourseModelMapper INSTANCE = Mappers.getMapper(CourseModelMapper.class);
}

View File

@@ -3,9 +3,13 @@ package com.orange.demo.app.model;
import com.orange.demo.application.common.constant.Subject;
import com.orange.demo.common.core.annotation.RelationDict;
import com.orange.demo.common.core.annotation.RelationConstDict;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.common.core.validator.ConstDictRef;
import com.orange.demo.app.vo.CourseTransStatsVo;
import lombok.Data;
import org.mapstruct.*;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
@@ -119,4 +123,25 @@ public class CourseTransStats {
constantDictClass = Subject.class)
@Transient
private Map<String, Object> subjectIdDictMap;
@Mapper
public interface CourseTransStatsModelMapper extends BaseModelMapper<CourseTransStatsVo, CourseTransStats> {
/**
* 转换Vo对象到实体对象。
*
* @param courseTransStatsVo 域对象。
* @return 实体对象。
*/
@Override
CourseTransStats toModel(CourseTransStatsVo courseTransStatsVo);
/**
* 转换实体对象到VO对象。
*
* @param courseTransStats 实体对象。
* @return 域对象。
*/
@Override
CourseTransStatsVo fromModel(CourseTransStats courseTransStats);
}
public static final CourseTransStatsModelMapper INSTANCE = Mappers.getMapper(CourseTransStatsModelMapper.class);
}

View File

@@ -1,8 +1,12 @@
package com.orange.demo.app.model;
import com.orange.demo.common.core.annotation.RelationDict;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.app.vo.SchoolInfoVo;
import lombok.Data;
import org.mapstruct.*;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
@@ -64,4 +68,25 @@ public class SchoolInfo {
slaveNameField = "areaName")
@Transient
private Map<String, Object> cityIdDictMap;
@Mapper
public interface SchoolInfoModelMapper extends BaseModelMapper<SchoolInfoVo, SchoolInfo> {
/**
* 转换Vo对象到实体对象。
*
* @param schoolInfoVo 域对象。
* @return 实体对象。
*/
@Override
SchoolInfo toModel(SchoolInfoVo schoolInfoVo);
/**
* 转换实体对象到VO对象。
*
* @param schoolInfo 实体对象。
* @return 域对象。
*/
@Override
SchoolInfoVo fromModel(SchoolInfo schoolInfo);
}
public static final SchoolInfoModelMapper INSTANCE = Mappers.getMapper(SchoolInfoModelMapper.class);
}

View File

@@ -5,9 +5,13 @@ import com.orange.demo.application.common.constant.ExpLevel;
import com.orange.demo.application.common.constant.StudentStatus;
import com.orange.demo.common.core.annotation.RelationDict;
import com.orange.demo.common.core.annotation.RelationConstDict;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.common.core.validator.ConstDictRef;
import com.orange.demo.app.vo.StudentVo;
import lombok.Data;
import org.mapstruct.*;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
@@ -221,4 +225,25 @@ public class Student {
constantDictClass = StudentStatus.class)
@Transient
private Map<String, Object> statusDictMap;
@Mapper
public interface StudentModelMapper extends BaseModelMapper<StudentVo, Student> {
/**
* 转换Vo对象到实体对象。
*
* @param studentVo 域对象。
* @return 实体对象。
*/
@Override
Student toModel(StudentVo studentVo);
/**
* 转换实体对象到VO对象。
*
* @param student 实体对象。
* @return 域对象。
*/
@Override
StudentVo fromModel(Student student);
}
public static final StudentModelMapper INSTANCE = Mappers.getMapper(StudentModelMapper.class);
}

View File

@@ -1,8 +1,12 @@
package com.orange.demo.app.model;
import com.orange.demo.common.core.annotation.RelationDict;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.app.vo.StudentActionStatsVo;
import lombok.Data;
import org.mapstruct.*;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
@@ -204,4 +208,25 @@ public class StudentActionStats {
slaveNameField = "areaName")
@Transient
private Map<String, Object> cityIdDictMap;
@Mapper
public interface StudentActionStatsModelMapper extends BaseModelMapper<StudentActionStatsVo, StudentActionStats> {
/**
* 转换Vo对象到实体对象。
*
* @param studentActionStatsVo 域对象。
* @return 实体对象。
*/
@Override
StudentActionStats toModel(StudentActionStatsVo studentActionStatsVo);
/**
* 转换实体对象到VO对象。
*
* @param studentActionStats 实体对象。
* @return 域对象。
*/
@Override
StudentActionStatsVo fromModel(StudentActionStats studentActionStats);
}
public static final StudentActionStatsModelMapper INSTANCE = Mappers.getMapper(StudentActionStatsModelMapper.class);
}

View File

@@ -4,9 +4,13 @@ import com.orange.demo.application.common.constant.StudentActionType;
import com.orange.demo.application.common.constant.DeviceType;
import com.orange.demo.common.core.annotation.RelationDict;
import com.orange.demo.common.core.annotation.RelationConstDict;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.common.core.validator.ConstDictRef;
import com.orange.demo.app.vo.StudentActionTransVo;
import lombok.Data;
import org.mapstruct.*;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
@@ -165,4 +169,25 @@ public class StudentActionTrans {
constantDictClass = DeviceType.class)
@Transient
private Map<String, Object> deviceTypeDictMap;
@Mapper
public interface StudentActionTransModelMapper extends BaseModelMapper<StudentActionTransVo, StudentActionTrans> {
/**
* 转换Vo对象到实体对象。
*
* @param studentActionTransVo 域对象。
* @return 实体对象。
*/
@Override
StudentActionTrans toModel(StudentActionTransVo studentActionTransVo);
/**
* 转换实体对象到VO对象。
*
* @param studentActionTrans 实体对象。
* @return 域对象。
*/
@Override
StudentActionTransVo fromModel(StudentActionTrans studentActionTrans);
}
public static final StudentActionTransModelMapper INSTANCE = Mappers.getMapper(StudentActionTransModelMapper.class);
}

View File

@@ -4,10 +4,14 @@ import com.alibaba.fastjson.annotation.JSONField;
import com.orange.demo.app.model.constant.ClassLevel;
import com.orange.demo.common.core.annotation.RelationDict;
import com.orange.demo.common.core.annotation.RelationConstDict;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.common.core.validator.ConstDictRef;
import com.orange.demo.app.vo.StudentClassVo;
import lombok.Data;
import org.mapstruct.*;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
@@ -110,4 +114,25 @@ public class StudentClass {
constantDictClass = ClassLevel.class)
@Transient
private Map<String, Object> classLevelDictMap;
@Mapper
public interface StudentClassModelMapper extends BaseModelMapper<StudentClassVo, StudentClass> {
/**
* 转换Vo对象到实体对象。
*
* @param studentClassVo 域对象。
* @return 实体对象。
*/
@Override
StudentClass toModel(StudentClassVo studentClassVo);
/**
* 转换实体对象到VO对象。
*
* @param studentClass 实体对象。
* @return 域对象。
*/
@Override
StudentClassVo fromModel(StudentClass studentClass);
}
public static final StudentClassModelMapper INSTANCE = Mappers.getMapper(StudentClassModelMapper.class);
}

View File

@@ -0,0 +1,33 @@
package com.orange.demo.app.vo;
import lombok.Data;
/**
* 行政区划DomainVO对象。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class AreaCodeVo {
/**
* 行政区划主键Id
*/
private Long areaId;
/**
* 行政区划名称
*/
private String areaName;
/**
* 行政区划级别 (1: 省级别 2: 市级别 3: 区级别)
*/
private Integer areaLevel;
/**
* 父级行政区划Id
*/
private Long parentId;
}

View File

@@ -0,0 +1,28 @@
package com.orange.demo.app.vo;
import lombok.Data;
/**
* ClassCourseVO对象。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class ClassCourseVo {
/**
* 班级Id。
*/
private Long classId;
/**
* 课程Id。
*/
private Long courseId;
/**
* 课程顺序(数值越小越靠前)。
*/
private Integer courseOrder;
}

View File

@@ -0,0 +1,23 @@
package com.orange.demo.app.vo;
import lombok.Data;
/**
* ClassStudentVO对象。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class ClassStudentVo {
/**
* 班级Id。
*/
private Long classId;
/**
* 学生Id。
*/
private Long studentId;
}

View File

@@ -0,0 +1,76 @@
package com.orange.demo.app.vo;
import lombok.Data;
import java.util.Date;
import java.util.Map;
/**
* CourseTransStatsVO对象。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class CourseTransStatsVo {
/**
* 主键Id。
*/
private Long statsId;
/**
* 统计日期。
*/
private Date statsDate;
/**
* 科目Id。
*/
private Integer subjectId;
/**
* 年级Id。
*/
private Integer gradeId;
/**
* 年级名称。
*/
private String gradeName;
/**
* 课程Id。
*/
private Long courseId;
/**
* 课程名称。
*/
private String courseName;
/**
* 学生上课次数。
*/
private Integer studentAttendCount;
/**
* 学生献花数量。
*/
private Integer studentFlowerAmount;
/**
* 学生献花次数。
*/
private Integer studentFlowerCount;
/**
* gradeId 字典关联数据。
*/
private Map<String, Object> gradeIdDictMap;
/**
* subjectId 常量字典关联数据。
*/
private Map<String, Object> subjectIdDictMap;
}

View File

@@ -0,0 +1,97 @@
package com.orange.demo.app.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
/**
* CourseVO对象。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class CourseVo {
/**
* 主键Id。
*/
private Long courseId;
/**
* 课程名称。
*/
private String courseName;
/**
* 课程价格。
*/
private BigDecimal price;
/**
* 课程描述。
*/
private String description;
/**
* 课程难度(0: 容易 1: 普通 2: 很难)。
*/
private Integer difficulty;
/**
* 年级Id。
*/
private Integer gradeId;
/**
* 学科Id。
*/
private Integer subjectId;
/**
* 课时数量。
*/
private Integer classHour;
/**
* 多张课程图片地址。
*/
private String pictureUrl;
/**
* 创建用户Id。
*/
private Long createUserId;
/**
* 创建时间。
*/
private Date createTime;
/**
* 最后修改时间。
*/
private Date updateTime;
/**
* courseId 的多对多关联表数据对象数据对应类型为ClassCourseVo。
*/
private Map<String, Object> classCourse;
/**
* gradeId 字典关联数据。
*/
private Map<String, Object> gradeIdDictMap;
/**
* difficulty 常量字典关联数据。
*/
private Map<String, Object> difficultyDictMap;
/**
* subjectId 常量字典关联数据。
*/
private Map<String, Object> subjectIdDictMap;
}

View File

@@ -0,0 +1,23 @@
package com.orange.demo.app.vo;
import lombok.Data;
/**
* GradeVO对象。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class GradeVo {
/**
* 主键Id。
*/
private Integer gradeId;
/**
* 年级名称。
*/
private String gradeName;
}

View File

@@ -0,0 +1,45 @@
package com.orange.demo.app.vo;
import lombok.Data;
import java.util.Map;
/**
* SchoolInfoVO对象。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class SchoolInfoVo {
/**
* 学校Id。
*/
private Long schoolId;
/**
* 学校名称。
*/
private String schoolName;
/**
* 所在省Id。
*/
private Long provinceId;
/**
* 所在城市Id。
*/
private Long cityId;
/**
* provinceId 字典关联数据。
*/
private Map<String, Object> provinceIdDictMap;
/**
* cityId 字典关联数据。
*/
private Map<String, Object> cityIdDictMap;
}

View File

@@ -0,0 +1,136 @@
package com.orange.demo.app.vo;
import lombok.Data;
import java.util.Date;
import java.util.Map;
/**
* StudentActionStatsVO对象。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class StudentActionStatsVo {
/**
* 主键Id。
*/
private Long statsId;
/**
* 统计日期。
*/
private Date statsDate;
/**
* 统计小时。
*/
private Date statsMonth;
/**
* 年级Id。
*/
private Integer gradeId;
/**
* 学生所在省Id。
*/
private Long provinceId;
/**
* 学生所在城市Id。
*/
private Long cityId;
/**
* 购课学币数量。
*/
private Integer buyCourseAmount;
/**
* 购买课程次数。
*/
private Integer buyCourseCount;
/**
* 购买视频学币数量。
*/
private Integer buyVideoAmount;
/**
* 购买视频次数。
*/
private Integer buyVideoCount;
/**
* 购买作业学币数量。
*/
private Integer buyPaperAmount;
/**
* 购买作业次数。
*/
private Integer buyPaperCount;
/**
* 购买献花数量。
*/
private Integer buyFlowerAmount;
/**
* 购买献花次数。
*/
private Integer buyFlowerCount;
/**
* 充值学币数量。
*/
private Integer rechargeCoinAmount;
/**
* 充值学币次数。
*/
private Integer rechargeCoinCount;
/**
* 线下课程上课次数。
*/
private Integer doCourseCount;
/**
* 观看视频次数。
*/
private Integer watchVideoCount;
/**
* 购买献花消费学币数量。
*/
private Integer watchVideoTotalSecond;
/**
* 做题数量。
*/
private Integer doExerciseCount;
/**
* 做题正确的数量。
*/
private Integer doExerciseCorrectCount;
/**
* gradeId 字典关联数据。
*/
private Map<String, Object> gradeIdDictMap;
/**
* provinceId 字典关联数据。
*/
private Map<String, Object> provinceIdDictMap;
/**
* cityId 字典关联数据。
*/
private Map<String, Object> cityIdDictMap;
}

View File

@@ -0,0 +1,111 @@
package com.orange.demo.app.vo;
import lombok.Data;
import java.util.Date;
import java.util.Map;
/**
* StudentActionTransVO对象。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class StudentActionTransVo {
/**
* 主键Id。
*/
private Long transId;
/**
* 学生Id。
*/
private Long studentId;
/**
* 学生名称。
*/
private String studentName;
/**
* 学生校区。
*/
private Long schoolId;
/**
* 年级Id。
*/
private Integer gradeId;
/**
* 行为类型(0: 充值 1: 购课 2: 上课签到 3: 上课签退 4: 看视频课 5: 做作业 6: 刷题 7: 献花)。
*/
private Integer actionType;
/**
* 设备类型(0: iOS 1: Android 2: PC)。
*/
private Integer deviceType;
/**
* 看视频秒数。
*/
private Integer watchVideoSeconds;
/**
* 购买献花数量。
*/
private Integer flowerCount;
/**
* 购买作业数量。
*/
private Integer paperCount;
/**
* 购买视频数量。
*/
private Integer videoCount;
/**
* 购买课程数量。
*/
private Integer courseCount;
/**
* 充值学币数量。
*/
private Integer coinCount;
/**
* 做题是否正确标记。
*/
private Integer exerciseCorrectFlag;
/**
* 发生时间。
*/
private Date createTime;
/**
* schoolId 字典关联数据。
*/
private Map<String, Object> schoolIdDictMap;
/**
* gradeId 字典关联数据。
*/
private Map<String, Object> gradeIdDictMap;
/**
* actionType 常量字典关联数据。
*/
private Map<String, Object> actionTypeDictMap;
/**
* deviceType 常量字典关联数据。
*/
private Map<String, Object> deviceTypeDictMap;
}

View File

@@ -0,0 +1,71 @@
package com.orange.demo.app.vo;
import lombok.Data;
import java.util.Date;
import java.util.Map;
/**
* StudentClassVO对象。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class StudentClassVo {
/**
* 班级Id。
*/
private Long classId;
/**
* 班级名称。
*/
private String className;
/**
* 学校Id。
*/
private Long schoolId;
/**
* 学生班长Id。
*/
private Long leaderId;
/**
* 已完成课时数量。
*/
private Integer finishClassHour;
/**
* 班级级别(0: 初级班 1: 培优班 2: 冲刺提分班 3: 竞赛班)。
*/
private Integer classLevel;
/**
* 创建用户。
*/
private Long createUserId;
/**
* 班级创建时间。
*/
private Date createTime;
/**
* schoolId 字典关联数据。
*/
private Map<String, Object> schoolIdDictMap;
/**
* leaderId 字典关联数据。
*/
private Map<String, Object> leaderIdDictMap;
/**
* classLevel 常量字典关联数据。
*/
private Map<String, Object> classLevelDictMap;
}

View File

@@ -0,0 +1,131 @@
package com.orange.demo.app.vo;
import lombok.Data;
import java.util.Date;
import java.util.Map;
/**
* StudentVO对象。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class StudentVo {
/**
* 学生Id。
*/
private Long studentId;
/**
* 登录手机。
*/
private String loginMobile;
/**
* 学生姓名。
*/
private String studentName;
/**
* 所在省份Id。
*/
private Long provinceId;
/**
* 所在城市Id。
*/
private Long cityId;
/**
* 区县Id。
*/
private Long districtId;
/**
* 学生性别 (0: 女生 1: 男生)。
*/
private Integer gender;
/**
* 生日。
*/
private Date birthday;
/**
* 经验等级 (0: 初级 1: 中级 2: 高级 3: 资深)。
*/
private Integer experienceLevel;
/**
* 总共充值学币数量。
*/
private Integer totalCoin;
/**
* 可用学币数量。
*/
private Integer leftCoin;
/**
* 年级Id。
*/
private Integer gradeId;
/**
* 校区Id。
*/
private Long schoolId;
/**
* 注册时间。
*/
private Date registerTime;
/**
* 学生状态 (0: 正常 1: 锁定 2: 注销)。
*/
private Integer status;
/**
* provinceId 字典关联数据。
*/
private Map<String, Object> provinceIdDictMap;
/**
* cityId 字典关联数据。
*/
private Map<String, Object> cityIdDictMap;
/**
* districtId 字典关联数据。
*/
private Map<String, Object> districtIdDictMap;
/**
* gradeId 字典关联数据。
*/
private Map<String, Object> gradeIdDictMap;
/**
* schoolId 字典关联数据。
*/
private Map<String, Object> schoolIdDictMap;
/**
* gender 常量字典关联数据。
*/
private Map<String, Object> genderDictMap;
/**
* experienceLevel 常量字典关联数据。
*/
private Map<String, Object> experienceLevelDictMap;
/**
* status 常量字典关联数据。
*/
private Map<String, Object> statusDictMap;
}

View File

@@ -115,10 +115,39 @@ public class LoginController {
*/
@PostMapping("/doLogout")
public ResponseResult<Void> doLogout() {
cacheHelper.removeAllSessionCache();
TokenData tokenData = TokenData.takeFromRequest();
cacheHelper.removeAllSessionCache(tokenData.getSessionId());
return ResponseResult.success();
}
/**
* 在登录之后通过token再次获取登录信息。
* 用于在当前浏览器登录系统后在新tab页中可以免密登录。
*
* @return 应答结果对象其中包括JWT的Token数据以及菜单列表。
*/
@GetMapping("/getLoginInfo")
public ResponseResult<JSONObject> getLoginInfo() {
TokenData tokenData = TokenData.takeFromRequest();
// 这里解释一下为什么没有缓存menuList和permCodeList。
// 1. 该操作和权限验证不同,属于低频操作。
// 2. 第一次登录和再次获取登录信息之间,如果修改了用户的权限,那么本次获取的是最新权限。
// 3. 上一个问题无法避免,因为即便缓存也是有过期时间的,过期之后还是要从数据库获取的。
JSONObject jsonData = new JSONObject();
jsonData.put("showName", tokenData.getShowName());
jsonData.put("isAdmin", tokenData.getIsAdmin());
List<SysMenu> menuList;
if (tokenData.getIsAdmin()) {
menuList = sysMenuService.getAllMenuList();
} else {
menuList = sysMenuService.getMenuListByUserId(tokenData.getUserId());
List<String> permCodeList = sysPermCodeService.getPermCodeListByUserId(tokenData.getUserId());
jsonData.put("permCodeList", permCodeList);
}
jsonData.put("menuList", menuList);
return ResponseResult.success(jsonData);
}
/**
* 用户修改自己的密码。
*

View File

@@ -1,12 +1,12 @@
package com.orange.demo.upms.controller;
import lombok.extern.slf4j.Slf4j;
import com.orange.demo.upms.vo.SysMenuVo;
import com.orange.demo.upms.model.SysMenu;
import com.orange.demo.upms.service.SysMenuService;
import com.orange.demo.upms.service.SysPermCodeService;
import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.object.*;
import com.orange.demo.common.core.util.MyCommonUtil;
import com.orange.demo.common.core.util.*;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.common.core.annotation.MyRequestBody;
import org.springframework.beans.factory.annotation.Autowired;
@@ -28,8 +28,6 @@ public class SysMenuController {
@Autowired
private SysMenuService sysMenuService;
@Autowired
private SysPermCodeService sysPermCodeService;
/**
* 添加新菜单操作。
@@ -120,8 +118,9 @@ public class SysMenuController {
* @return 应答结果对象,包含全部菜单数据列表。
*/
@GetMapping("/list")
public ResponseResult<List<SysMenu>> list() {
return ResponseResult.success(sysMenuService.getAllListByOrder("showOrder"));
public ResponseResult<List<SysMenuVo>> list() {
List<SysMenu> sysMenuList = sysMenuService.getAllListByOrder("menuType", "showOrder");
return ResponseResult.success(MyModelUtil.copyCollectionTo(sysMenuList, SysMenuVo.class));
}
/**
@@ -131,7 +130,7 @@ public class SysMenuController {
* @return 应答结果对象,包含菜单详情。
*/
@GetMapping("/view")
public ResponseResult<SysMenu> view(@RequestParam Long menuId) {
public ResponseResult<SysMenuVo> view(@RequestParam Long menuId) {
if (MyCommonUtil.existBlankArgument(menuId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
@@ -139,7 +138,8 @@ public class SysMenuController {
if (sysMenu == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(sysMenu);
SysMenuVo sysMenuVo = MyModelUtil.copyTo(sysMenu, SysMenuVo.class);
return ResponseResult.success(sysMenuVo);
}
/**

View File

@@ -1,11 +1,12 @@
package com.orange.demo.upms.controller;
import lombok.extern.slf4j.Slf4j;
import com.orange.demo.upms.vo.SysPermCodeVo;
import com.orange.demo.upms.model.SysPermCode;
import com.orange.demo.upms.service.SysPermCodeService;
import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.object.*;
import com.orange.demo.common.core.util.MyCommonUtil;
import com.orange.demo.common.core.util.*;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.common.core.annotation.MyRequestBody;
import org.springframework.beans.factory.annotation.Autowired;
@@ -123,8 +124,10 @@ public class SysPermCodeController {
* @return 应答结果对象,包含权限字列表。
*/
@PostMapping("/list")
public ResponseResult<List<SysPermCode>> list() {
return ResponseResult.success(sysPermCodeService.getAllListByOrder("permCodeType", "showOrder"));
public ResponseResult<List<SysPermCodeVo>> list() {
List<SysPermCode> sysPermCodeList =
sysPermCodeService.getAllListByOrder("permCodeType", "showOrder");
return ResponseResult.success(MyModelUtil.copyCollectionTo(sysPermCodeList, SysPermCodeVo.class));
}
/**
@@ -134,15 +137,17 @@ public class SysPermCodeController {
* @return 应答结果对象,包含权限字对象详情。
*/
@GetMapping("/view")
public ResponseResult<SysPermCode> view(@RequestParam Long permCodeId) {
public ResponseResult<SysPermCodeVo> view(@RequestParam Long permCodeId) {
if (MyCommonUtil.existBlankArgument(permCodeId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
SysPermCode sysPermCode = sysPermCodeService.getByIdWithRelation(permCodeId, MyRelationParam.full());
SysPermCode sysPermCode =
sysPermCodeService.getByIdWithRelation(permCodeId, MyRelationParam.full());
if (sysPermCode == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(sysPermCode);
SysPermCodeVo sysPermCodeVo = MyModelUtil.copyTo(sysPermCode, SysPermCodeVo.class);
return ResponseResult.success(sysPermCodeVo);
}
/**

View File

@@ -1,14 +1,14 @@
package com.orange.demo.upms.controller;
import com.github.pagehelper.Page;
import com.github.pagehelper.page.PageMethod;
import lombok.extern.slf4j.Slf4j;
import com.orange.demo.upms.vo.SysPermVo;
import com.orange.demo.upms.model.SysPerm;
import com.orange.demo.upms.model.SysPermModule;
import com.orange.demo.upms.service.SysPermService;
import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.object.*;
import com.orange.demo.common.core.util.MyCommonUtil;
import com.orange.demo.common.core.util.MyPageUtil;
import com.orange.demo.common.core.util.*;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.common.core.annotation.MyRequestBody;
import org.springframework.beans.factory.annotation.Autowired;
@@ -73,10 +73,6 @@ public class SysPermController {
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_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();
}
@@ -106,7 +102,7 @@ public class SysPermController {
* @return 应答结果对象,包含权限资源对象详情。
*/
@GetMapping("/view")
public ResponseResult<SysPerm> view(@RequestParam Long permId) {
public ResponseResult<SysPermVo> view(@RequestParam Long permId) {
if (MyCommonUtil.existBlankArgument(permId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
@@ -114,7 +110,8 @@ public class SysPermController {
if (perm == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(perm);
SysPermVo permVo = MyModelUtil.copyTo(perm, SysPermVo.class);
return ResponseResult.success(permVo);
}
/**
@@ -125,13 +122,18 @@ public class SysPermController {
* @return 应答结果对象,包含权限资源列表。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<SysPerm>> list(
public ResponseResult<MyPageData<SysPermVo>> list(
@MyRequestBody SysPerm sysPermFilter, @MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
List<SysPerm> resultList = sysPermService.getPermListWithRelation(sysPermFilter);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
List<SysPerm> permList = sysPermService.getPermListWithRelation(sysPermFilter);
List<SysPermVo> permVoList = MyModelUtil.copyCollectionTo(permList, SysPermVo.class);
long totalCount = 0L;
if (permList instanceof Page) {
totalCount = ((Page<SysPerm>) permList).getTotal();
}
return ResponseResult.success(MyPageUtil.makeResponseData(permVoList, totalCount));
}
/**

View File

@@ -1,12 +1,13 @@
package com.orange.demo.upms.controller;
import lombok.extern.slf4j.Slf4j;
import com.orange.demo.upms.vo.SysPermModuleVo;
import com.orange.demo.upms.model.SysPerm;
import com.orange.demo.upms.model.SysPermModule;
import com.orange.demo.upms.service.SysPermModuleService;
import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.object.*;
import com.orange.demo.common.core.util.MyCommonUtil;
import com.orange.demo.common.core.util.*;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.common.core.annotation.MyRequestBody;
import org.apache.commons.collections4.CollectionUtils;
@@ -114,8 +115,9 @@ public class SysPermModuleController {
* @return 应答结果对象,包含权限资源模块列表。
*/
@GetMapping("/list")
public ResponseResult<List<SysPermModule>> list() {
return ResponseResult.success(sysPermModuleService.getAllListByOrder("showOrder"));
public ResponseResult<List<SysPermModuleVo>> list() {
List<SysPermModule> permModuleList = sysPermModuleService.getAllListByOrder("showOrder");
return ResponseResult.success(MyModelUtil.copyCollectionTo(permModuleList, SysPermModuleVo.class));
}
/**

View File

@@ -1,17 +1,19 @@
package com.orange.demo.upms.controller;
import com.github.pagehelper.Page;
import com.github.pagehelper.page.PageMethod;
import lombok.extern.slf4j.Slf4j;
import com.orange.demo.upms.vo.SysRoleVo;
import com.orange.demo.upms.vo.SysUserVo;
import com.orange.demo.upms.model.SysRole;
import com.orange.demo.upms.model.SysUser;
import com.orange.demo.upms.model.SysUserRole;
import com.orange.demo.upms.service.SysRoleService;
import com.orange.demo.upms.service.SysUserService;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.common.core.util.MyCommonUtil;
import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.object.*;
import com.orange.demo.common.core.util.MyPageUtil;
import com.orange.demo.common.core.util.*;
import com.orange.demo.common.core.annotation.MyRequestBody;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -123,7 +125,7 @@ public class SysRoleController {
* @return 应答结果对象,包含角色列表。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<SysRole>> list(
public ResponseResult<MyPageData<SysRoleVo>> list(
@MyRequestBody SysRole sysRoleFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
@@ -132,7 +134,12 @@ public class SysRoleController {
}
List<SysRole> roleList = sysRoleService.getSysRoleList(
sysRoleFilter, MyOrderParam.buildOrderBy(orderParam, SysRole.class));
return ResponseResult.success(MyPageUtil.makeResponseData(roleList));
List<SysRoleVo> roleVoList = MyModelUtil.copyCollectionTo(roleList, SysRoleVo.class);
long totalCount = 0L;
if (roleList instanceof Page) {
totalCount = ((Page<SysRole>) roleList).getTotal();
}
return ResponseResult.success(MyPageUtil.makeResponseData(roleVoList, totalCount));
}
/**
@@ -142,7 +149,7 @@ public class SysRoleController {
* @return 应答结果对象,包含角色详情对象。
*/
@GetMapping("/view")
public ResponseResult<SysRole> view(@RequestParam Long roleId) {
public ResponseResult<SysRoleVo> view(@RequestParam Long roleId) {
if (MyCommonUtil.existBlankArgument(roleId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
@@ -150,7 +157,8 @@ public class SysRoleController {
if (sysRole == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(sysRole);
SysRoleVo sysRoleVo = MyModelUtil.copyTo(sysRole, SysRoleVo.class);
return ResponseResult.success(sysRoleVo);
}
/**
@@ -164,7 +172,7 @@ public class SysRoleController {
* @return 应答结果对象,包含用户列表数据。
*/
@PostMapping("/listNotInUserRole")
public ResponseResult<MyPageData<SysUser>> listNotInUserRole(
public ResponseResult<MyPageData<SysUserVo>> listNotInUserRole(
@MyRequestBody Long roleId,
@MyRequestBody SysUser sysUserFilter,
@MyRequestBody MyOrderParam orderParam,
@@ -177,9 +185,10 @@ public class SysRoleController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class);
List<SysUser> resultList =
List<SysUser> userList =
sysUserService.getNotInSysUserListByRoleId(roleId, sysUserFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
List<SysUserVo> userVoList = MyModelUtil.copyCollectionTo(userList, SysUserVo.class);
return ResponseResult.success(MyPageUtil.makeResponseData(userVoList));
}
/**
@@ -192,7 +201,7 @@ public class SysRoleController {
* @return 应答结果对象,包含用户列表数据。
*/
@PostMapping("/listUserRole")
public ResponseResult<MyPageData<SysUser>> listUserRole(
public ResponseResult<MyPageData<SysUserVo>> listUserRole(
@MyRequestBody Long roleId,
@MyRequestBody SysUser sysUserFilter,
@MyRequestBody MyOrderParam orderParam,
@@ -205,8 +214,9 @@ public class SysRoleController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class);
List<SysUser> resultList = sysUserService.getSysUserListByRoleId(roleId, sysUserFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
List<SysUser> userList = sysUserService.getSysUserListByRoleId(roleId, sysUserFilter, orderBy);
List<SysUserVo> userVoList = MyModelUtil.copyCollectionTo(userList, SysUserVo.class);
return ResponseResult.success(MyPageUtil.makeResponseData(userVoList));
}
private ResponseResult<Void> doRoleUserVerify(Long roleId) {

View File

@@ -1,6 +1,7 @@
package com.orange.demo.upms.controller;
import com.github.pagehelper.page.PageMethod;
import com.orange.demo.upms.vo.*;
import com.orange.demo.upms.model.*;
import com.orange.demo.upms.service.*;
import com.orange.demo.common.core.object.*;
@@ -140,7 +141,7 @@ public class SysUserController {
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<SysUser>> list(
public ResponseResult<MyPageData<SysUserVo>> list(
@MyRequestBody SysUser sysUserFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
@@ -148,8 +149,8 @@ public class SysUserController {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class);
List<SysUser> resultList = sysUserService.getSysUserListWithRelation(sysUserFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(resultList));
List<SysUser> sysUserList = sysUserService.getSysUserListWithRelation(sysUserFilter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(sysUserList, SysUser.INSTANCE));
}
/**
@@ -159,7 +160,7 @@ public class SysUserController {
* @return 应答结果对象,包含对象详情。
*/
@GetMapping("/view")
public ResponseResult<SysUser> view(@RequestParam Long userId) {
public ResponseResult<SysUserVo> view(@RequestParam Long userId) {
if (MyCommonUtil.existBlankArgument(userId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
@@ -168,7 +169,8 @@ public class SysUserController {
if (sysUser == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success(sysUser);
SysUserVo sysUserVo = SysUser.INSTANCE.fromModel(sysUser);
return ResponseResult.success(sysUserVo);
}
/**

View File

@@ -22,15 +22,6 @@ public interface SysPermMapper extends BaseDaoMapper<SysPerm> {
*/
List<SysPerm> getPermListByUserId(@Param("userId") Long userId);
/**
* 根据关联权限字主键Id获取权限资源数据列表。
*
* @param permCodeId 关联权限字主键Id。
* @param orderBy 排序字符串ORDER BY从句的参数。
* @return 从表数据列表。
*/
List<SysPerm> getPermListByPermCodeId(@Param("permCodeId") Long permCodeId, @Param("orderBy") String orderBy);
/**
* 查询权限资源地址的用户列表。同时返回详细的分配路径。
*

View File

@@ -3,8 +3,6 @@ package com.orange.demo.upms.dao;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.upms.model.SysUserRole;
import java.util.List;
/**
* 用户与角色关联关系数据访问操作接口。
*
@@ -12,11 +10,4 @@ import java.util.List;
* @date 2020-09-24
*/
public interface SysUserRoleMapper extends BaseDaoMapper<SysUserRole> {
/**
* 批量插入用户角色信息,如果用户角色已经存在,则不会重复插入。
*
* @param userRoleList 待插入的角色用户列表。
*/
void addUserRoleList(List<SysUserRole> userRoleList);
}

View File

@@ -17,18 +17,14 @@
SELECT
DISTINCT m.*
FROM
zz_sys_user u,
zz_sys_user_role ur,
zz_sys_role_menu rm,
zz_sys_menu m
<where>
AND u.user_id = #{userId}
AND u.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND u.user_id = ur.user_id
AND ur.user_id = #{userId}
AND ur.role_id = rm.role_id
AND rm.menu_id = m.menu_id
AND m.menu_type &lt;= ${@com.orange.demo.upms.model.constant.SysMenuType@TYPE_MENU}
AND m.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
</where>
ORDER BY m.show_order
</select>

View File

@@ -16,19 +16,15 @@
SELECT
DISTINCT pc.perm_code
FROM
zz_sys_user u,
zz_sys_user_role ur,
zz_sys_role_menu rm,
zz_sys_menu_perm_code mpc,
zz_sys_perm_code pc
<where>
AND u.user_id = #{userId}
AND u.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND u.user_id = ur.user_id
AND ur.user_id = #{userId}
AND ur.role_id = rm.role_id
AND rm.menu_id = mpc.menu_id
AND mpc.perm_code_id = pc.perm_code_id
AND pc.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
</where>
</select>

View File

@@ -15,40 +15,20 @@
SELECT
p.*
FROM
zz_sys_user u,
zz_sys_user_role ur,
zz_sys_role_menu rm,
zz_sys_menu_perm_code mpc,
zz_sys_perm_code_perm pcp,
zz_sys_perm p
<where>
AND u.user_id = #{userId}
AND u.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
AND u.user_id = ur.user_id
AND ur.user_id = #{userId}
AND ur.role_id = rm.role_id
AND rm.menu_id = mpc.menu_id
AND mpc.perm_code_id = pcp.perm_code_id
AND pcp.perm_id = p.perm_id
AND p.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
</where>
</select>
<select id="getPermListByPermCodeId" resultMap="BaseResultMap">
SELECT
p.*
FROM
zz_sys_perm_code_perm pcp,
zz_sys_perm p
<where>
AND pcp.perm_code_id = #{permCodeId}
AND pcp.perm_id = p.perm_id
AND p.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
</where>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}
</if>
</select>
<!-- 以下查询仅用于权限分配的问题定位,由于关联表较多,可能会给系统运行带来性能影响 -->
<select id="getSysUserListWithDetail" resultType="map">
SELECT

View File

@@ -11,16 +11,20 @@
<result column="deleted_flag" jdbcType="INTEGER" property="deletedFlag"/>
</resultMap>
<sql id="filterRef">
<if test="sysRoleFilter != null">
<if test="sysRoleFilter.roleName != null and sysRoleFilter.roleName != ''">
<bind name= "safeRoleName" value= "'%' + sysRoleFilter.roleName + '%'"/>
AND role_name LIKE #{safeRoleName}
</if>
</if>
AND deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
</sql>
<select id="getSysRoleList" resultMap="BaseResultMap" parameterType="com.orange.demo.upms.model.SysRole">
SELECT * FROM zz_sys_role
<where>
<if test="sysRoleFilter != null">
<if test="sysRoleFilter.roleName != null and sysRoleFilter.roleName != ''">
<bind name= "safeRoleName" value= "'%' + sysRoleFilter.roleName + '%'"/>
AND role_name LIKE #{safeRoleName}
</if>
</if>
AND deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
<include refid="filterRef"/>
</where>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}

View File

@@ -15,8 +15,14 @@
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
</resultMap>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名否则当filterRef被其他Mapper.xml包含引用的时候就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.orange.demo.upms.dao.SysUserMapper.inputFilterRef"/>
AND zz_sys_user.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
</sql>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="sysUserFilter != null">
<if test="sysUserFilter.loginName != null and sysUserFilter.loginName != ''">
<bind name = "safeLoginName" value = "'%' + sysUserFilter.loginName + '%'" />
@@ -36,7 +42,6 @@
AND zz_sys_user.create_time &lt;= #{sysUserFilter.createTimeEnd}
</if>
</if>
AND zz_sys_user.deleted_flag = ${@com.orange.demo.common.core.constant.GlobalDeletedFlag@NORMAL}
</sql>
<select id="getSysUserList" resultMap="BaseResultMap" parameterType="com.orange.demo.upms.model.SysUser">

View File

@@ -5,11 +5,4 @@
<id column="user_id" jdbcType="BIGINT" property="userId"/>
<id column="role_id" jdbcType="BIGINT" property="roleId"/>
</resultMap>
<insert id="addUserRoleList">
REPLACE INTO zz_sys_user_role(user_id, role_id) VALUES
<foreach collection="list" index="index" item="item" separator=",">
(#{item.userId}, #{item.roleId})
</foreach>
</insert>
</mapper>

View File

@@ -3,10 +3,15 @@ package com.orange.demo.upms.model;
import com.alibaba.fastjson.annotation.JSONField;
import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.annotation.RelationManyToMany;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.validator.ConstDictRef;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.upms.model.constant.SysMenuType;
import com.orange.demo.upms.vo.SysMenuVo;
import lombok.Data;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
@@ -90,4 +95,27 @@ public class SysMenu {
relationModelClass = SysMenuPermCode.class)
@Transient
private List<SysMenuPermCode> sysMenuPermCodeList;
@Mapper
public interface SysMenuModelMapper extends BaseModelMapper<SysMenuVo, SysMenu> {
/**
* 转换VO对象到实体对象。
*
* @param sysMenuVo 域对象。
* @return 实体对象。
*/
@Mapping(target = "sysMenuPermCodeList", expression = "java(mapToBean(sysMenuVo.getSysMenuPermCodeList(), com.orange.demo.upms.model.SysMenuPermCode.class))")
@Override
SysMenu toModel(SysMenuVo sysMenuVo);
/**
* 转换实体对象到VO对象。
*
* @param sysMenu 实体对象。
* @return 域对象。
*/
@Mapping(target = "sysMenuPermCodeList", expression = "java(beanToMap(sysMenu.getSysMenuPermCodeList(), false))")
@Override
SysMenuVo fromModel(SysMenu sysMenu);
}
public static final SysMenuModelMapper INSTANCE = Mappers.getMapper(SysMenu.SysMenuModelMapper.class);
}

View File

@@ -3,10 +3,15 @@ package com.orange.demo.upms.model;
import com.alibaba.fastjson.annotation.JSONField;
import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.annotation.RelationManyToMany;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.validator.ConstDictRef;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.upms.model.constant.SysPermCodeType;
import com.orange.demo.upms.vo.SysPermCodeVo;
import lombok.Data;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
@@ -86,4 +91,27 @@ public class SysPermCode {
relationModelClass = SysPermCodePerm.class)
@Transient
private List<SysPermCodePerm> sysPermCodePermList;
@Mapper
public interface SysPermCodeModelMapper extends BaseModelMapper<SysPermCodeVo, SysPermCode> {
/**
* 转换VO对象到实体对象。
*
* @param sysPermCodeVo 域对象。
* @return 实体对象。
*/
@Mapping(target = "sysPermCodePermList", expression = "java(mapToBean(sysPermCodeVo.getSysPermCodePermList(), com.orange.demo.upms.model.SysPermCodePerm.class))")
@Override
SysPermCode toModel(SysPermCodeVo sysPermCodeVo);
/**
* 转换实体对象到VO对象。
*
* @param sysPermCode 实体对象。
* @return 域对象。
*/
@Mapping(target = "sysPermCodePermList", expression = "java(beanToMap(sysPermCode.getSysPermCodePermList(), false))")
@Override
SysPermCodeVo fromModel(SysPermCode sysPermCode);
}
public static final SysPermCodeModelMapper INSTANCE = Mappers.getMapper(SysPermCode.SysPermCodeModelMapper.class);
}

View File

@@ -3,8 +3,13 @@ package com.orange.demo.upms.model;
import com.alibaba.fastjson.annotation.JSONField;
import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.annotation.RelationManyToMany;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.upms.vo.SysRoleVo;
import lombok.Data;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
@@ -75,9 +80,26 @@ public class SysRole {
@Transient
private List<SysRoleMenu> sysRoleMenuList;
@Transient
private String createTimeStart;
@Transient
private String createTimeEnd;
@Mapper
public interface SysRoleModelMapper extends BaseModelMapper<SysRoleVo, SysRole> {
/**
* 转换VO对象到实体对象。
*
* @param sysRoleVo 域对象。
* @return 实体对象。
*/
@Mapping(target = "sysRoleMenuList", expression = "java(mapToBean(sysRoleVo.getSysRoleMenuList(), com.orange.demo.upms.model.SysRoleMenu.class))")
@Override
SysRole toModel(SysRoleVo sysRoleVo);
/**
* 转换实体对象到VO对象。
*
* @param sysRole 实体对象。
* @return 域对象。
*/
@Mapping(target = "sysRoleMenuList", expression = "java(beanToMap(sysRole.getSysRoleMenuList(), false))")
@Override
SysRoleVo fromModel(SysRole sysRole);
}
public static final SysRoleModelMapper INSTANCE = Mappers.getMapper(SysRole.SysRoleModelMapper.class);
}

View File

@@ -5,11 +5,15 @@ import com.orange.demo.upms.model.constant.SysUserType;
import com.orange.demo.upms.model.constant.SysUserStatus;
import com.orange.demo.common.core.annotation.RelationConstDict;
import com.orange.demo.common.core.annotation.RelationManyToMany;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.annotation.DeletedFlagColumn;
import com.orange.demo.common.core.validator.AddGroup;
import com.orange.demo.common.core.validator.UpdateGroup;
import com.orange.demo.common.core.validator.ConstDictRef;
import com.orange.demo.upms.vo.SysUserVo;
import lombok.Data;
import org.mapstruct.*;
import org.mapstruct.factory.Mappers;
import javax.persistence.*;
import javax.validation.constraints.*;
@@ -142,4 +146,27 @@ public class SysUser {
constantDictClass = SysUserStatus.class)
@Transient
private Map<String, Object> userStatusDictMap;
@Mapper
public interface SysUserModelMapper extends BaseModelMapper<SysUserVo, SysUser> {
/**
* 转换Vo对象到实体对象。
*
* @param sysUserVo 域对象。
* @return 实体对象。
*/
@Mapping(target = "sysUserRoleList", expression = "java(mapToBean(sysUserVo.getSysUserRoleList(), com.orange.demo.upms.model.SysUserRole.class))")
@Override
SysUser toModel(SysUserVo sysUserVo);
/**
* 转换实体对象到VO对象。
*
* @param sysUser 实体对象。
* @return 域对象。
*/
@Mapping(target = "sysUserRoleList", expression = "java(beanToMap(sysUser.getSysUserRoleList(), false))")
@Override
SysUserVo fromModel(SysUser sysUser);
}
public static final SysUserModelMapper INSTANCE = Mappers.getMapper(SysUserModelMapper.class);
}

View File

@@ -178,20 +178,19 @@ public class SysMenuService extends BaseService<SysMenu, Long> {
* @return 验证结果。
*/
public CallResult verifyRelatedData(SysMenu sysMenu, SysMenu originalSysMenu, String permCodeIdListString) {
JSONObject jsonObject = null;
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);
}
// menu、ui fragment和button类型的menu不能没有parentId
if (sysMenu.getParentId() == null) {
if (sysMenu.getMenuType() != SysMenuType.TYPE_DIRECTORY) {
return CallResult.error("数据验证失败,当前类型菜单项的上级菜单不能为空!");
}
}
if (this.needToVerify(sysMenu, originalSysMenu, SysMenu::getParentId)) {
String errorMessage = checkErrorOfNonDirectoryMenu(sysMenu);
if (errorMessage != null) {
return CallResult.error(errorMessage);
}
}
JSONObject jsonObject = null;
if (StringUtils.isNotBlank(permCodeIdListString)) {
Set<Long> permCodeIdSet = Arrays.stream(
permCodeIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());

View File

@@ -1,7 +1,6 @@
package com.orange.demo.upms.service;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
@@ -182,17 +181,6 @@ public class SysPermService extends BaseService<SysPerm, Long> {
return permList.stream().map(SysPerm::getUrl).collect(Collectors.toSet());
}
/**
* 获取与指定权限字关联的权限资源列表。
*
* @param permCodeId 关联的权限字主键Id。
* @param orderBy 排序参数。
* @return 与指定权限字Id关联的权限资源列表。
*/
public List<SysPerm> getPermListByPermCodeId(Long permCodeId, String orderBy) {
return sysPermMapper.getPermListByPermCodeId(permCodeId, orderBy);
}
/**
* 获取与指定用户关联的权限资源列表。
*
@@ -211,16 +199,13 @@ public class SysPermService extends BaseService<SysPerm, Long> {
* @return 验证结果。
*/
public CallResult verifyRelatedData(SysPerm sysPerm, SysPerm originalSysPerm) {
JSONObject jsonObject = null;
if (this.needToVerify(sysPerm, originalSysPerm, SysPerm::getModuleId)) {
SysPermModule permModule = sysPermModuleService.getById(sysPerm.getModuleId());
if (permModule == null) {
return CallResult.error("数据验证失败关联的权限模块Id并不存在请刷新后重试");
}
jsonObject = new JSONObject();
jsonObject.put("permModule", permModule);
}
return CallResult.ok(jsonObject);
return CallResult.ok();
}
/**

View File

@@ -14,7 +14,6 @@ import com.orange.demo.upms.model.SysRole;
import com.orange.demo.upms.model.SysRoleMenu;
import com.orange.demo.upms.model.SysUserRole;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -93,11 +92,11 @@ public class SysRoleService extends BaseService<SysRole, Long> {
*/
@Transactional(rollbackFor = Exception.class)
public boolean update(SysRole role, SysRole originalRole, Set<Long> menuIdSet) {
SysRole updateRole = new SysRole();
BeanUtils.copyProperties(role, updateRole, "createUserId", "createUsername", "createTime");
updateRole.setUpdateTime(new Date());
updateRole.setDeletedFlag(GlobalDeletedFlag.NORMAL);
if (sysRoleMapper.updateByPrimaryKeySelective(updateRole) != 1) {
role.setCreateUserId(originalRole.getCreateUserId());
role.setCreateTime(originalRole.getCreateTime());
role.setUpdateTime(new Date());
role.setDeletedFlag(GlobalDeletedFlag.NORMAL);
if (sysRoleMapper.updateByPrimaryKey(role) != 1) {
return false;
}
SysRoleMenu deletedRoleMenu = new SysRoleMenu();
@@ -157,7 +156,7 @@ public class SysRoleService extends BaseService<SysRole, Long> {
*/
@Transactional(rollbackFor = Exception.class)
public void addUserRoleList(List<SysUserRole> userRoleList) {
sysUserRoleMapper.addUserRoleList(userRoleList);
sysUserRoleMapper.insertList(userRoleList);
}
/**

View File

@@ -145,8 +145,9 @@ public class SysUserService extends BaseService<SysUser, Long> {
@Transactional(rollbackFor = Exception.class)
public boolean changePassword(Long userId, String newPass) {
Example e = new Example(SysUser.class);
e.createCriteria().andEqualTo(super.idFieldName, userId);
e.createCriteria().andEqualTo(super.deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
e.createCriteria()
.andEqualTo(super.idFieldName, userId)
.andEqualTo(super.deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
SysUser updatedUser = new SysUser();
updatedUser.setPassword(passwordEncoder.encode(newPass));
return sysUserMapper.updateByExampleSelective(updatedUser, e) == 1;

View File

@@ -0,0 +1,60 @@
package com.orange.demo.upms.vo;
import lombok.Data;
import java.util.*;
/**
* 菜单VO。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class SysMenuVo {
/**
* 菜单Id。
*/
private Long menuId;
/**
* 父菜单Id目录菜单的父菜单为null
*/
private Long parentId;
/**
* 菜单显示名称。
*/
private String menuName;
/**
* 菜单类型 (0: 目录 1: 菜单 2: 按钮 3: UI片段)。
*/
private Integer menuType;
/**
* 前端表单路由名称仅用于menu_type为1的菜单类型。
*/
private String formRouterName;
/**
* 菜单显示顺序 (值越小,排序越靠前)。
*/
private Integer showOrder;
/**
* 菜单图标。
*/
private String icon;
/**
* 创建时间。
*/
private Date createTime;
/**
* 菜单与权限字关联对象列表。
*/
private List<Map<String, Object>> sysMenuPermCodeList;
}

View File

@@ -0,0 +1,55 @@
package com.orange.demo.upms.vo;
import lombok.Data;
import java.util.*;
/**
* 权限字VO。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class SysPermCodeVo {
/**
* 权限字Id。
*/
private Long permCodeId;
/**
* 权限字标识(一般为有含义的英文字符串)。
*/
private String permCode;
/**
* 上级权限字Id。
*/
private Long parentId;
/**
* 权限字类型(0: 表单 1: UI片段 2: 操作)。
*/
private Integer permCodeType;
/**
* 显示名称。
*/
private String showName;
/**
* 显示顺序(数值越小,越靠前)。
*/
private Integer showOrder;
/**
* 创建时间。
*/
private Date createTime;
/**
* 权限字与权限资源关联对象列表。
*/
private List<Map<String, Object>> sysPermCodePermList;
}

View File

@@ -0,0 +1,50 @@
package com.orange.demo.upms.vo;
import lombok.Data;
import java.util.*;
/**
* 权限资源模块VO。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class SysPermModuleVo {
/**
* 权限模块Id。
*/
private Long moduleId;
/**
* 权限模块名称。
*/
private String moduleName;
/**
* 上级权限模块Id。
*/
private Long parentId;
/**
* 权限模块类型(0: 普通模块 1: Controller模块)。
*/
private Integer moduleType;
/**
* 权限模块在当前层级下的顺序,由小到大。
*/
private Integer showOrder;
/**
* 创建时间。
*/
private Date createTime;
/**
* 权限资源对象列表。
*/
private List<SysPermVo> sysPermList;
}

View File

@@ -0,0 +1,55 @@
package com.orange.demo.upms.vo;
import lombok.Data;
import java.util.*;
/**
* 权限资源VO。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class SysPermVo {
/**
* 权限资源Id。
*/
private Long permId;
/**
* 权限资源名称。
*/
private String permName;
/**
* shiro格式的权限字如(upms:sysUser:add)。
*/
private String permCode;
/**
* 权限所在的权限模块Id。
*/
private Long moduleId;
/**
* 关联的URL。
*/
private String url;
/**
* 权限在当前模块下的顺序,由小到大。
*/
private Integer showOrder;
/**
* 创建时间。
*/
private Date createTime;
/**
* 模块Id的字典关联数据。
*/
private Map<String, Object> moduleIdDictMap;
}

View File

@@ -0,0 +1,50 @@
package com.orange.demo.upms.vo;
import lombok.Data;
import java.util.*;
/**
* 角色VO。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class SysRoleVo {
/**
* 角色Id。
*/
private Long roleId;
/**
* 角色名称。
*/
private String roleName;
/**
* 创建者Id。
*/
private Long createUserId;
/**
* 创建者显示名称。
*/
private String createUsername;
/**
* 创建时间。
*/
private Date createTime;
/**
* 更新时间。
*/
private Date updateTime;
/**
* 角色与菜单关联对象列表。
*/
private List<Map<String, Object>> sysRoleMenuList;
}

View File

@@ -0,0 +1,87 @@
package com.orange.demo.upms.vo;
import lombok.Data;
import java.util.Date;
import java.util.Map;
import java.util.List;
/**
* SysUserVO对象。
*
* @author Jerry
* @date 2020-09-24
*/
@Data
public class SysUserVo {
/**
* 用户Id。
*/
private Long userId;
/**
* 登录用户名。
*/
private String loginName;
/**
* 用户密码。
*/
private String password;
/**
* 用户显示名称。
*/
private String showName;
/**
* 用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)。
*/
private Integer userType;
/**
* 用户头像的Url。
*/
private String headImageUrl;
/**
* 用户状态(0: 正常 1: 锁定)。
*/
private Integer userStatus;
/**
* 创建用户Id。
*/
private Long createUserId;
/**
* 创建用户名。
*/
private String createUsername;
/**
* 创建时间。
*/
private Date createTime;
/**
* 更新时间。
*/
private Date updateTime;
/**
* 多对多用户角色数据集合。
*/
private List<Map<String, Object>> sysUserRoleList;
/**
* userType 常量字典关联数据。
*/
private Map<String, Object> userTypeDictMap;
/**
* userStatus 常量字典关联数据。
*/
private Map<String, Object> userStatusDictMap;
}

View File

@@ -7,9 +7,9 @@
<!--日志变量 -->
<properties>
<!-- 日志主目录 ,需要保存到文件时请自己配置-->
<property name="LOG_HOME">./zzlogs</property>
<property name="LOG_HOME">./zzlogs/application</property>
<!-- 日志备份目录 -->
<property name="BACKUP_HOME">./zzlogs/backup</property>
<property name="BACKUP_HOME">./zzlogs/application/backup</property>
<!-- 日志输出级别 -->
<property name="OUTPUT_LOG_LEVEL">info</property>
<!-- 日志输出格式 -->
@@ -37,8 +37,8 @@
</console>
<!-- console_log级别日志文件 -->
<!--每次大小超过size则这size大小的日志会自动进行压缩作为存档 -->
<rollingFile name="file_log" fileName="${LOG_HOME}/server/server.log"
filePattern="${LOG_HOME}/server/server-%d{yyyy-MM-dd}-%i.log.gz">
<rollingFile name="file_log" fileName="${LOG_HOME}/application.log"
filePattern="${LOG_HOME}/application-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout charset="UTF-8" pattern="${LOG_PATTERN_EX}"/>
<!-- 日志切割的最小单位 -->
<SizeBasedTriggeringPolicy size="${EVERY_FILE_SIZE}"/>

View File

@@ -1,8 +1,6 @@
package com.orange.demo.common.core.advice;
import com.orange.demo.common.core.exception.InvalidClassFieldException;
import com.orange.demo.common.core.exception.InvalidDataFieldException;
import com.orange.demo.common.core.exception.InvalidDataModelException;
import com.orange.demo.common.core.exception.*;
import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.exception.RedisCacheAccessException;
import com.orange.demo.common.core.object.ResponseResult;
@@ -113,6 +111,19 @@ public class MyExceptionHandler {
return ResponseResult.error(ErrorCodeEnum.DATA_ACCESS_FAILED);
}
/**
* 操作不存在或已逻辑删除数据的异常处理方法。
*
* @param ex 异常对象。
* @param request http请求。
* @return 应答对象。
*/
@ExceptionHandler(value = NoDataAffectException.class)
public ResponseResult<Void> noDataEffectExceptionHandle(Exception ex, HttpServletRequest request) {
log.error("NoDataAffectException exception from URL [" + request.getRequestURI() + "]", ex);
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
/**
* Redis缓存访问异常处理方法。
*

View File

@@ -125,7 +125,7 @@ public abstract class BaseDictService<M, K> extends BaseService<M, K> {
@SuppressWarnings("unchecked")
public <T> boolean existUniqueKeyList(String inFilterField, Set<T> inFilterValues) {
if (CollectionUtils.isEmpty(inFilterValues)) {
return false;
return true;
}
if (inFilterField.equals(this.idFieldName)) {
List<M> dataList = dictionaryCache.getInList((Set<K>) inFilterValues);

View File

@@ -20,6 +20,7 @@ import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.lang.reflect.Modifier;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
@@ -169,7 +170,7 @@ public abstract class BaseService<M, K> {
}
Example e = new Example(modelClass);
e.createCriteria().andEqualTo(fieldName, fieldValue);
return mapper().selectByExample(e).size() == 1;
return mapper().selectCountByExample(e) == 1;
}
/**
@@ -263,7 +264,7 @@ public abstract class BaseService<M, K> {
*/
public boolean existAllPrimaryKeys(Set<K> idSet) {
if (CollectionUtils.isEmpty(idSet)) {
return false;
return true;
}
return this.existUniqueKeyList(idFieldName, idSet);
}
@@ -277,7 +278,7 @@ public abstract class BaseService<M, K> {
*/
public <T> boolean existUniqueKeyList(String inFilterField, Set<T> inFilterValues) {
if (CollectionUtils.isEmpty(inFilterValues)) {
return false;
return true;
}
Example e = this.makeDefaultInListExample(inFilterField, inFilterValues, null);
if (deletedFlagFieldName != null) {
@@ -450,20 +451,21 @@ public abstract class BaseService<M, K> {
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);
if ((modifiers & transientMask) != 0 || Modifier.isStatic(modifiers)) {
return;
}
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);
}
}
}
@@ -492,10 +494,14 @@ public abstract class BaseService<M, K> {
*/
public List<M> getListByParentId(String parentIdFieldName, K parentId) {
Example e = new Example(modelClass);
Example.Criteria c = e.createCriteria();
if (parentId != null) {
e.createCriteria().andEqualTo(parentIdFieldName, parentId);
c.andEqualTo(parentIdFieldName, parentId);
} else {
e.createCriteria().andIsNull(parentIdFieldName);
c.andIsNull(parentIdFieldName);
}
if (deletedFlagFieldName != null) {
c.andEqualTo(deletedFlagFieldName, GlobalDeletedFlag.NORMAL);
}
return mapper().selectByExample(e);
}

View File

@@ -88,10 +88,12 @@ public class SessionCacheHelper {
/**
* 清除当前session的所有缓存数据。
*
* @param sessionId 当前会话的SessionId。
*/
public void removeAllSessionCache() {
public void removeAllSessionCache(String sessionId) {
for (CacheConfig.CacheEnum c : CacheConfig.CacheEnum.values()) {
cacheManager.getCache(c.name()).clear();
cacheManager.getCache(c.name()).evict(sessionId);
}
}
}

View File

@@ -35,6 +35,9 @@ public enum ErrorCodeEnum {
INVALID_USERNAME_PASSWORD("用户名或密码错误,请重试!"),
INVALID_ACCESS_TOKEN("无效的用户访问令牌!"),
INVALID_USER_STATUS("用户状态错误,请刷新后重试!"),
INVALID_TENANT_CODE("指定的租户编码并不存在,请刷新后重试!"),
INVALID_TENANT_STATUS("当前租户为不可用状态,请刷新后重试!"),
INVALID_USER_TENANT("当前用户并不属于当前租户,请刷新后重试!"),
HAS_CHILDREN_DATA("数据验证失败,子数据存在,请刷新后重试!"),
DATA_VALIDATED_FAILED("数据验证失败,请核对!"),

View File

@@ -1,7 +1,10 @@
package com.orange.demo.common.core.object;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.LinkedList;
import java.util.List;
/**
@@ -11,6 +14,8 @@ import java.util.List;
* @date 2020-09-24
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyPageData<T> {
/**
* 数据列表。
@@ -20,4 +25,12 @@ public class MyPageData<T> {
* 数据总数量。
*/
private Long totalCount;
/**
* 为了保持前端的数据格式兼容性,在没有数据的时候,需要返回空分页对象。
* @return 空分页对象。
*/
public static <T> MyPageData<T> emptyPageData() {
return new MyPageData<>(new LinkedList<>(), 0L);
}
}

View File

@@ -19,6 +19,7 @@ import javax.persistence.Column;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
@@ -414,6 +415,9 @@ public class MyModelUtil {
Function<R, Object> thatIdGetterFunc,
String thisRelationField,
boolean orderByThatList) {
if (CollectionUtils.isEmpty(thisModelList)) {
return;
}
Field thisTargetField = ReflectUtil.getField(thisClazz, thisRelationField);
boolean isMap = thisTargetField.getType().equals(Map.class);
if (orderByThatList) {
@@ -463,12 +467,12 @@ public class MyModelUtil {
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.getAnnotation(Transient.class) == null) {
int modifiers = field.getModifiers();
// transient类型的字段不能作为查询条件
if ((modifiers & 128) != 0 || Modifier.isStatic(modifiers)) {
continue;
}
ReflectUtil.setAccessible(field);
try {
Object o = field.get(filterModel);

View File

@@ -3,7 +3,10 @@ package com.orange.demo.common.core.util;
import cn.jimmyshi.beanquery.BeanQuery;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import org.apache.commons.collections4.CollectionUtils;
import com.orange.demo.common.core.base.mapper.BaseModelMapper;
import com.orange.demo.common.core.object.MyPageData;
import com.orange.demo.common.core.object.Tuple2;
import java.util.List;
@@ -65,6 +68,38 @@ public class MyPageUtil {
return pageData;
}
/**
* 用户构建带有分页信息的数据列表。
*
* @param dataList 实体对象数据列表。
* @param modelMapper 实体对象到DomainVO对象的数据映射器。
* @param <D> DomainVO对象类型。
* @param <T> 实体对象类型。
* @return 返回分页数据对象。
*/
public static <D, T> MyPageData<D> makeResponseData(List<T> dataList, BaseModelMapper<D, T> modelMapper) {
long totalCount = 0L;
if (CollectionUtils.isEmpty(dataList)) {
// 这里需要构建分页数据对象,统一前端数据格式
return MyPageData.emptyPageData();
}
if (dataList instanceof Page) {
totalCount = ((Page<T>) dataList).getTotal();
}
return MyPageUtil.makeResponseData(modelMapper.fromModelList(dataList), totalCount);
}
/**
* 用户构建带有分页信息的数据列表。
*
* @param responseData 第一个数据时数据列表,第二个是列表数量。
* @param <T> 源数据类型。
* @return 返回分页数据对象。
*/
public static <T> MyPageData<T> makeResponseData(Tuple2<List<T>, Long> responseData) {
return makeResponseData(responseData.getFirst(), responseData.getSecond());
}
/**
* 私有构造函数,明确标识该常量类的作用。
*/

File diff suppressed because one or more lines are too long