同步到1.7版本

This commit is contained in:
Jerry
2021-06-06 22:53:13 +08:00
parent ecfa3349bf
commit 562d4bc726
349 changed files with 7056 additions and 7458 deletions

View File

@@ -4,8 +4,10 @@ import cn.jimmyshi.beanquery.BeanQuery;
import com.orange.demo.webadmin.app.model.AreaCode;
import com.orange.demo.webadmin.app.service.AreaCodeService;
import com.orange.demo.common.core.object.ResponseResult;
import com.orange.demo.common.core.annotation.MyRequestBody;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@@ -53,4 +55,18 @@ public class AreaCodeController {
return ResponseResult.success(BeanQuery.select(
"parentId as parentId", "areaId as id", "areaName as name").executeFrom(resultList));
}
/**
* 根据字典Id集合获取查询后的字典数据。
*
* @param dictIds 字典Id集合。
* @return 字典形式的行政区划列表。
*/
@PostMapping("/listDictByIds")
public ResponseResult<List<Map<String, Object>>> listDictByIds(
@MyRequestBody(elementType = Long.class) List<Long> dictIds) {
List<AreaCode> resultList = areaCodeService.getInList(new HashSet<>(dictIds));
return ResponseResult.success(BeanQuery.select(
"parentId as parentId", "areaId as id", "areaName as name").executeFrom(resultList));
}
}

View File

@@ -54,7 +54,7 @@ public class CourseController {
* @return 应答结果对象包含新增对象主键Id。
*/
@PostMapping("/add")
public ResponseResult<Long> add(@MyRequestBody("course") CourseDto courseDto) {
public ResponseResult<Long> add(@MyRequestBody CourseDto courseDto) {
String errorMessage = MyCommonUtil.getModelValidationError(courseDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -77,7 +77,7 @@ public class CourseController {
* @return 应答结果对象。
*/
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody("course") CourseDto courseDto) {
public ResponseResult<Void> update(@MyRequestBody CourseDto courseDto) {
String errorMessage = MyCommonUtil.getModelValidationError(courseDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -137,7 +137,7 @@ public class CourseController {
*/
@PostMapping("/list")
public ResponseResult<MyPageData<CourseVo>> list(
@MyRequestBody("courseFilter") CourseDto courseDtoFilter,
@MyRequestBody CourseDto courseDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
@@ -274,4 +274,18 @@ public class CourseController {
return ResponseResult.success(BeanQuery.select(
"courseId as id", "courseName as name").executeFrom(resultList));
}
/**
* 根据字典Id集合获取查询后的字典数据。
*
* @param dictIds 字典Id集合。
* @return 应答结果对象,包含字典形式的数据集合。
*/
@PostMapping("/listDictByIds")
public ResponseResult<List<Map<String, Object>>> listDictByIds(
@MyRequestBody(elementType = Long.class) List<Long> dictIds) {
List<Course> resultList = courseService.getInList(new HashSet<>(dictIds));
return ResponseResult.success(BeanQuery.select(
"courseId as id", "courseName as name").executeFrom(resultList));
}
}

View File

@@ -39,7 +39,7 @@ public class CourseTransStatsController {
*/
@PostMapping("/list")
public ResponseResult<MyPageData<CourseTransStatsVo>> list(
@MyRequestBody("courseTransStatsFilter") CourseTransStatsDto courseTransStatsDtoFilter,
@MyRequestBody CourseTransStatsDto courseTransStatsDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
@@ -62,7 +62,7 @@ public class CourseTransStatsController {
*/
@PostMapping("/listWithGroup")
public ResponseResult<MyPageData<CourseTransStatsVo>> listWithGroup(
@MyRequestBody("courseTransStatsFilter") CourseTransStatsDto courseTransStatsDtoFilter,
@MyRequestBody CourseTransStatsDto courseTransStatsDtoFilter,
@MyRequestBody(required = true) MyGroupParam groupParam,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {

View File

@@ -40,7 +40,7 @@ public class GradeController {
* @return 应答结果对象包含新增对象主键Id。
*/
@PostMapping("/add")
public ResponseResult<Integer> add(@MyRequestBody("grade") GradeDto gradeDto) {
public ResponseResult<Integer> add(@MyRequestBody GradeDto gradeDto) {
String errorMessage = MyCommonUtil.getModelValidationError(gradeDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -57,7 +57,7 @@ public class GradeController {
* @return 应答结果对象。
*/
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody("grade") GradeDto gradeDto) {
public ResponseResult<Void> update(@MyRequestBody GradeDto gradeDto) {
String errorMessage = MyCommonUtil.getModelValidationError(gradeDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -99,7 +99,7 @@ public class GradeController {
@GetMapping("/listDict")
public ResponseResult<List<Map<String, Object>>> listDict() {
List<Grade> resultList = gradeService.getAllListFromCache();
if (CollectionUtils.isNotEmpty(resultList)) {
if (CollectionUtils.isEmpty(resultList)) {
gradeService.reloadCachedData(true);
resultList = gradeService.getAllList();
}
@@ -123,6 +123,20 @@ public class GradeController {
return ResponseResult.success(jsonObject);
}
/**
* 根据字典Id集合获取查询后的字典数据。
*
* @param dictIds 字典Id集合。
* @return 应答结果对象,包含字典形式的数据集合。
*/
@PostMapping("/listDictByIds")
public ResponseResult<List<Map<String, Object>>> listDictByIds(
@MyRequestBody(elementType = Integer.class) List<Integer> dictIds) {
List<Grade> resultList = gradeService.getInList(new HashSet<>(dictIds));
return ResponseResult.success(BeanQuery.select(
"gradeId as id", "gradeName as name").executeFrom(resultList));
}
/**
* 将当前字典表的数据重新加载到缓存中。
* 由于缓存的数据更新在add/update/delete等接口均有同步处理。因此该接口仅当同步过程中出现问题时

View File

@@ -39,7 +39,7 @@ public class SchoolInfoController {
* @return 应答结果对象包含新增对象主键Id。
*/
@PostMapping("/add")
public ResponseResult<Long> add(@MyRequestBody("schoolInfo") SchoolInfoDto schoolInfoDto) {
public ResponseResult<Long> add(@MyRequestBody SchoolInfoDto schoolInfoDto) {
String errorMessage = MyCommonUtil.getModelValidationError(schoolInfoDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -62,7 +62,7 @@ public class SchoolInfoController {
* @return 应答结果对象。
*/
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody("schoolInfo") SchoolInfoDto schoolInfoDto) {
public ResponseResult<Void> update(@MyRequestBody SchoolInfoDto schoolInfoDto) {
String errorMessage = MyCommonUtil.getModelValidationError(schoolInfoDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -122,7 +122,7 @@ public class SchoolInfoController {
*/
@PostMapping("/list")
public ResponseResult<MyPageData<SchoolInfoVo>> list(
@MyRequestBody("schoolInfoFilter") SchoolInfoDto schoolInfoDtoFilter,
@MyRequestBody SchoolInfoDto schoolInfoDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
@@ -166,4 +166,18 @@ public class SchoolInfoController {
return ResponseResult.success(BeanQuery.select(
"schoolId as id", "schoolName as name").executeFrom(resultList));
}
/**
* 根据字典Id集合获取查询后的字典数据。
*
* @param dictIds 字典Id集合。
* @return 应答结果对象,包含字典形式的数据集合。
*/
@PostMapping("/listDictByIds")
public ResponseResult<List<Map<String, Object>>> listDictByIds(
@MyRequestBody(elementType = Long.class) List<Long> dictIds) {
List<SchoolInfo> resultList = schoolInfoService.getInList(new HashSet<>(dictIds));
return ResponseResult.success(BeanQuery.select(
"schoolId as id", "schoolName as name").executeFrom(resultList));
}
}

View File

@@ -39,7 +39,7 @@ public class StudentActionStatsController {
*/
@PostMapping("/list")
public ResponseResult<MyPageData<StudentActionStatsVo>> list(
@MyRequestBody("studentActionStatsFilter") StudentActionStatsDto studentActionStatsDtoFilter,
@MyRequestBody StudentActionStatsDto studentActionStatsDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
@@ -62,7 +62,7 @@ public class StudentActionStatsController {
*/
@PostMapping("/listWithGroup")
public ResponseResult<MyPageData<StudentActionStatsVo>> listWithGroup(
@MyRequestBody("studentActionStatsFilter") StudentActionStatsDto studentActionStatsDtoFilter,
@MyRequestBody StudentActionStatsDto studentActionStatsDtoFilter,
@MyRequestBody(required = true) MyGroupParam groupParam,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {

View File

@@ -38,7 +38,7 @@ public class StudentActionTransController {
* @return 应答结果对象包含新增对象主键Id。
*/
@PostMapping("/add")
public ResponseResult<Long> add(@MyRequestBody("studentActionTrans") StudentActionTransDto studentActionTransDto) {
public ResponseResult<Long> add(@MyRequestBody StudentActionTransDto studentActionTransDto) {
String errorMessage = MyCommonUtil.getModelValidationError(studentActionTransDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -61,7 +61,7 @@ public class StudentActionTransController {
* @return 应答结果对象。
*/
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody("studentActionTrans") StudentActionTransDto studentActionTransDto) {
public ResponseResult<Void> update(@MyRequestBody StudentActionTransDto studentActionTransDto) {
String errorMessage = MyCommonUtil.getModelValidationError(studentActionTransDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -121,7 +121,7 @@ public class StudentActionTransController {
*/
@PostMapping("/list")
public ResponseResult<MyPageData<StudentActionTransVo>> list(
@MyRequestBody("studentActionTransFilter") StudentActionTransDto studentActionTransDtoFilter,
@MyRequestBody StudentActionTransDto studentActionTransDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {

View File

@@ -43,7 +43,7 @@ public class StudentClassController {
* @return 应答结果对象包含新增对象主键Id。
*/
@PostMapping("/add")
public ResponseResult<Long> add(@MyRequestBody("studentClass") StudentClassDto studentClassDto) {
public ResponseResult<Long> add(@MyRequestBody StudentClassDto studentClassDto) {
String errorMessage = MyCommonUtil.getModelValidationError(studentClassDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -66,7 +66,7 @@ public class StudentClassController {
* @return 应答结果对象。
*/
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody("studentClass") StudentClassDto studentClassDto) {
public ResponseResult<Void> update(@MyRequestBody StudentClassDto studentClassDto) {
String errorMessage = MyCommonUtil.getModelValidationError(studentClassDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -126,7 +126,7 @@ public class StudentClassController {
*/
@PostMapping("/list")
public ResponseResult<MyPageData<StudentClassVo>> list(
@MyRequestBody("studentClassFilter") StudentClassDto studentClassDtoFilter,
@MyRequestBody StudentClassDto studentClassDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
@@ -169,7 +169,7 @@ public class StudentClassController {
@PostMapping("/listNotInClassCourse")
public ResponseResult<MyPageData<CourseVo>> listNotInClassCourse(
@MyRequestBody Long classId,
@MyRequestBody("courseFilter") CourseDto courseDtoFilter,
@MyRequestBody CourseDto courseDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
ResponseResult<Void> verifyResult = this.doClassCourseVerify(classId);
@@ -198,7 +198,7 @@ public class StudentClassController {
@PostMapping("/listClassCourse")
public ResponseResult<MyPageData<CourseVo>> listClassCourse(
@MyRequestBody Long classId,
@MyRequestBody("courseFilter") CourseDto courseDtoFilter,
@MyRequestBody CourseDto courseDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
ResponseResult<Void> verifyResult = this.doClassCourseVerify(classId);
@@ -235,7 +235,7 @@ public class StudentClassController {
@PostMapping("/addClassCourse")
public ResponseResult<Void> addClassCourse(
@MyRequestBody Long classId,
@MyRequestBody(value = "classCourseList", elementType = ClassCourseDto.class) List<ClassCourseDto> classCourseDtoList) {
@MyRequestBody(elementType = ClassCourseDto.class) List<ClassCourseDto> classCourseDtoList) {
if (MyCommonUtil.existBlankArgument(classId, classCourseDtoList)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
@@ -265,7 +265,7 @@ public class StudentClassController {
*/
@PostMapping("/updateClassCourse")
public ResponseResult<Void> updateClassCourse(
@MyRequestBody("classCourse") ClassCourseDto classCourseDto) {
@MyRequestBody ClassCourseDto classCourseDto) {
String errorMessage = MyCommonUtil.getModelValidationError(classCourseDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -329,7 +329,7 @@ public class StudentClassController {
@PostMapping("/listNotInClassStudent")
public ResponseResult<MyPageData<StudentVo>> listNotInClassStudent(
@MyRequestBody Long classId,
@MyRequestBody("studentFilter") StudentDto studentDtoFilter,
@MyRequestBody StudentDto studentDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
ResponseResult<Void> verifyResult = this.doClassStudentVerify(classId);
@@ -358,7 +358,7 @@ public class StudentClassController {
@PostMapping("/listClassStudent")
public ResponseResult<MyPageData<StudentVo>> listClassStudent(
@MyRequestBody Long classId,
@MyRequestBody("studentFilter") StudentDto studentDtoFilter,
@MyRequestBody StudentDto studentDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
ResponseResult<Void> verifyResult = this.doClassStudentVerify(classId);
@@ -395,7 +395,7 @@ public class StudentClassController {
@PostMapping("/addClassStudent")
public ResponseResult<Void> addClassStudent(
@MyRequestBody Long classId,
@MyRequestBody(value = "classStudentList", elementType = ClassStudentDto.class) List<ClassStudentDto> classStudentDtoList) {
@MyRequestBody(elementType = ClassStudentDto.class) List<ClassStudentDto> classStudentDtoList) {
if (MyCommonUtil.existBlankArgument(classId, classStudentDtoList)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}

View File

@@ -39,7 +39,7 @@ public class StudentController {
* @return 应答结果对象包含新增对象主键Id。
*/
@PostMapping("/add")
public ResponseResult<Long> add(@MyRequestBody("student") StudentDto studentDto) {
public ResponseResult<Long> add(@MyRequestBody StudentDto studentDto) {
String errorMessage = MyCommonUtil.getModelValidationError(studentDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -62,7 +62,7 @@ public class StudentController {
* @return 应答结果对象。
*/
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody("student") StudentDto studentDto) {
public ResponseResult<Void> update(@MyRequestBody StudentDto studentDto) {
String errorMessage = MyCommonUtil.getModelValidationError(studentDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -122,7 +122,7 @@ public class StudentController {
*/
@PostMapping("/list")
public ResponseResult<MyPageData<StudentVo>> list(
@MyRequestBody("studentFilter") StudentDto studentDtoFilter,
@MyRequestBody StudentDto studentDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
@@ -166,4 +166,18 @@ public class StudentController {
return ResponseResult.success(BeanQuery.select(
"studentId as id", "studentName as name").executeFrom(resultList));
}
/**
* 根据字典Id集合获取查询后的字典数据。
*
* @param dictIds 字典Id集合。
* @return 应答结果对象,包含字典形式的数据集合。
*/
@PostMapping("/listDictByIds")
public ResponseResult<List<Map<String, Object>>> listDictByIds(
@MyRequestBody(elementType = Long.class) List<Long> dictIds) {
List<Student> resultList = studentService.getInList(new HashSet<>(dictIds));
return ResponseResult.success(BeanQuery.select(
"studentId as id", "studentName as name").executeFrom(resultList));
}
}

View File

@@ -68,8 +68,7 @@ public interface CourseService extends IBaseService<Course, Long> {
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<Course> getNotInCourseListByClassId(
Long classId, Course filter, String orderBy);
List<Course> getNotInCourseListByClassId(Long classId, Course filter, String orderBy);
/**
* 在多对多关系中当前Service的数据表为从表返回与指定主表主键Id存在对多对关系的列表。
@@ -79,8 +78,7 @@ public interface CourseService extends IBaseService<Course, Long> {
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<Course> getCourseListByClassId(
Long classId, Course filter, String orderBy);
List<Course> getCourseListByClassId(Long classId, Course filter, String orderBy);
/**
* 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。

View File

@@ -68,8 +68,7 @@ public interface StudentService extends IBaseService<Student, Long> {
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<Student> getNotInStudentListByClassId(
Long classId, Student filter, String orderBy);
List<Student> getNotInStudentListByClassId(Long classId, Student filter, String orderBy);
/**
* 在多对多关系中当前Service的数据表为从表返回与指定主表主键Id存在对多对关系的列表。
@@ -79,8 +78,7 @@ public interface StudentService extends IBaseService<Student, Long> {
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<Student> getStudentListByClassId(
Long classId, Student filter, String orderBy);
List<Student> getStudentListByClassId(Long classId, Student filter, String orderBy);
/**
* 根据最新对象和原有对象的数据对比,判断关联的字典数据和多对一主表数据是否都是合法数据。

View File

@@ -10,6 +10,7 @@ import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.github.pagehelper.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -22,6 +23,7 @@ import java.util.*;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("courseService")
public class CourseServiceImpl extends BaseService<Course, Long> implements CourseService {
@@ -125,6 +127,8 @@ public class CourseServiceImpl extends BaseService<Course, Long> implements Cour
@Override
public List<Course> getCourseListWithRelation(Course filter, String orderBy) {
List<Course> resultList = courseMapper.getCourseList(filter, orderBy);
// 在缺省生成的代码中如果查询结果resultList不是Page对象说明没有分页那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
return resultList;
@@ -139,8 +143,7 @@ public class CourseServiceImpl extends BaseService<Course, Long> implements Cour
* @return 查询结果集。
*/
@Override
public List<Course> getNotInCourseListByClassId(
Long classId, Course filter, String orderBy) {
public List<Course> getNotInCourseListByClassId(Long classId, Course filter, String orderBy) {
List<Course> resultList =
courseMapper.getNotInCourseListByClassId(classId, filter, orderBy);
this.buildRelationForDataList(resultList, MyRelationParam.dictOnly());
@@ -156,8 +159,7 @@ public class CourseServiceImpl extends BaseService<Course, Long> implements Cour
* @return 查询结果集。
*/
@Override
public List<Course> getCourseListByClassId(
Long classId, Course filter, String orderBy) {
public List<Course> getCourseListByClassId(Long classId, Course filter, String orderBy) {
List<Course> resultList =
courseMapper.getCourseListByClassId(classId, filter, orderBy);
this.buildRelationForDataList(resultList, MyRelationParam.dictOnly());

View File

@@ -7,6 +7,7 @@ import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.object.MyRelationParam;
import com.orange.demo.common.core.base.service.BaseService;
import com.github.pagehelper.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -18,6 +19,7 @@ import java.util.*;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("courseTransStatsService")
public class CourseTransStatsServiceImpl extends BaseService<CourseTransStats, Long> implements CourseTransStatsService {
@@ -61,6 +63,8 @@ public class CourseTransStatsServiceImpl extends BaseService<CourseTransStats, L
@Override
public List<CourseTransStats> getCourseTransStatsListWithRelation(CourseTransStats filter, String orderBy) {
List<CourseTransStats> resultList = courseTransStatsMapper.getCourseTransStatsList(filter, orderBy);
// 在缺省生成的代码中如果查询结果resultList不是Page对象说明没有分页那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
return resultList;
@@ -80,6 +84,8 @@ public class CourseTransStatsServiceImpl extends BaseService<CourseTransStats, L
CourseTransStats filter, String groupSelect, String groupBy, String orderBy) {
List<CourseTransStats> resultList =
courseTransStatsMapper.getGroupedCourseTransStatsList(filter, groupSelect, groupBy, orderBy);
// 在缺省生成的代码中如果查询结果resultList不是Page对象说明没有分页那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
// NOTE: 这里只是包含了关联数据,聚合计算数据没有包含。
// 主要原因是由于聚合字段通常被视为普通字段使用不会在group by的从句中出现语义上也不会在此关联。

View File

@@ -6,6 +6,7 @@ import com.orange.demo.common.redis.cache.RedisDictionaryCache;
import com.orange.demo.webadmin.app.service.GradeService;
import com.orange.demo.webadmin.app.dao.GradeMapper;
import com.orange.demo.webadmin.app.model.Grade;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -17,6 +18,7 @@ import javax.annotation.PostConstruct;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("gradeService")
public class GradeServiceImpl extends BaseDictService<Grade, Integer> implements GradeService {

View File

@@ -9,6 +9,7 @@ import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.github.pagehelper.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -21,6 +22,7 @@ import java.util.*;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("schoolInfoService")
public class SchoolInfoServiceImpl extends BaseService<SchoolInfo, Long> implements SchoolInfoService {
@@ -107,6 +109,8 @@ public class SchoolInfoServiceImpl extends BaseService<SchoolInfo, Long> impleme
@Override
public List<SchoolInfo> getSchoolInfoListWithRelation(SchoolInfo filter, String orderBy) {
List<SchoolInfo> resultList = schoolInfoMapper.getSchoolInfoList(filter, orderBy);
// 在缺省生成的代码中如果查询结果resultList不是Page对象说明没有分页那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
return resultList;

View File

@@ -6,8 +6,8 @@ import com.orange.demo.webadmin.app.model.*;
import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.common.core.object.MyRelationParam;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.core.util.MyModelUtil;
import com.github.pagehelper.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -19,6 +19,7 @@ import java.util.*;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("studentActionStatsService")
public class StudentActionStatsServiceImpl extends BaseService<StudentActionStats, Long> implements StudentActionStatsService {
@@ -64,6 +65,8 @@ public class StudentActionStatsServiceImpl extends BaseService<StudentActionStat
@Override
public List<StudentActionStats> getStudentActionStatsListWithRelation(StudentActionStats filter, String orderBy) {
List<StudentActionStats> resultList = studentActionStatsMapper.getStudentActionStatsList(filter, orderBy);
// 在缺省生成的代码中如果查询结果resultList不是Page对象说明没有分页那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
return resultList;
@@ -83,6 +86,8 @@ public class StudentActionStatsServiceImpl extends BaseService<StudentActionStat
StudentActionStats filter, String groupSelect, String groupBy, String orderBy) {
List<StudentActionStats> resultList =
studentActionStatsMapper.getGroupedStudentActionStatsList(filter, groupSelect, groupBy, orderBy);
// 在缺省生成的代码中如果查询结果resultList不是Page对象说明没有分页那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
// NOTE: 这里只是包含了关联数据,聚合计算数据没有包含。
// 主要原因是由于聚合字段通常被视为普通字段使用不会在group by的从句中出现语义上也不会在此关联。

View File

@@ -9,6 +9,7 @@ import com.orange.demo.common.core.object.CallResult;
import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.github.pagehelper.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -21,6 +22,7 @@ import java.util.*;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("studentActionTransService")
public class StudentActionTransServiceImpl extends BaseService<StudentActionTrans, Long> implements StudentActionTransService {
@@ -109,6 +111,8 @@ public class StudentActionTransServiceImpl extends BaseService<StudentActionTran
@Override
public List<StudentActionTrans> getStudentActionTransListWithRelation(StudentActionTrans filter, String orderBy) {
List<StudentActionTrans> resultList = studentActionTransMapper.getStudentActionTransList(filter, orderBy);
// 在缺省生成的代码中如果查询结果resultList不是Page对象说明没有分页那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
return resultList;

View File

@@ -12,6 +12,7 @@ import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.core.util.MyModelUtil;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.github.pagehelper.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -25,6 +26,7 @@ import java.util.*;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("studentClassService")
public class StudentClassServiceImpl extends BaseService<StudentClass, Long> implements StudentClassService {
@@ -135,6 +137,8 @@ public class StudentClassServiceImpl extends BaseService<StudentClass, Long> imp
@Override
public List<StudentClass> getStudentClassListWithRelation(StudentClass filter, String orderBy) {
List<StudentClass> resultList = studentClassMapper.getStudentClassList(filter, orderBy);
// 在缺省生成的代码中如果查询结果resultList不是Page对象说明没有分页那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
return resultList;

View File

@@ -11,6 +11,7 @@ import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.core.util.MyModelUtil;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.github.pagehelper.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -23,6 +24,7 @@ import java.util.*;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("studentService")
public class StudentServiceImpl extends BaseService<Student, Long> implements StudentService {
@@ -127,6 +129,8 @@ public class StudentServiceImpl extends BaseService<Student, Long> implements St
@Override
public List<Student> getStudentListWithRelation(Student filter, String orderBy) {
List<Student> resultList = studentMapper.getStudentList(filter, orderBy);
// 在缺省生成的代码中如果查询结果resultList不是Page对象说明没有分页那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
return resultList;
@@ -141,8 +145,7 @@ public class StudentServiceImpl extends BaseService<Student, Long> implements St
* @return 查询结果集。
*/
@Override
public List<Student> getNotInStudentListByClassId(
Long classId, Student filter, String orderBy) {
public List<Student> getNotInStudentListByClassId(Long classId, Student filter, String orderBy) {
List<Student> resultList =
studentMapper.getNotInStudentListByClassId(classId, filter, orderBy);
this.buildRelationForDataList(resultList, MyRelationParam.dictOnly());
@@ -158,8 +161,7 @@ public class StudentServiceImpl extends BaseService<Student, Long> implements St
* @return 查询结果集。
*/
@Override
public List<Student> getStudentListByClassId(
Long classId, Student filter, String orderBy) {
public List<Student> getStudentListByClassId(Long classId, Student filter, String orderBy) {
List<Student> resultList =
studentMapper.getStudentListByClassId(classId, filter, orderBy);
this.buildRelationForDataList(resultList, MyRelationParam.dictOnly());

View File

@@ -82,7 +82,7 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
return false;
}
String sessionId = (String) c.get("sessionId");
String sessionIdKey = RedisKeyUtil.makeSessionIdKeyForRedis(sessionId);
String sessionIdKey = RedisKeyUtil.makeSessionIdKey(sessionId);
RBucket<String> sessionData = redissonClient.getBucket(sessionIdKey);
TokenData tokenData = null;
if (sessionData.isExists()) {
@@ -97,7 +97,7 @@ public class AuthenticationInterceptor implements HandlerInterceptor {
TokenData.addToRequest(tokenData);
// 如果url在权限资源白名单中则不需要进行鉴权操作
if (Boolean.FALSE.equals(tokenData.getIsAdmin()) && !whitelistPermSet.contains(url)) {
RSet<String> permSet = redissonClient.getSet(RedisKeyUtil.makeSessionPermIdKeyForRedis(sessionId));
RSet<String> permSet = redissonClient.getSet(RedisKeyUtil.makeSessionPermIdKey(sessionId));
if (!permSet.contains(url)) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
this.outputResponseMessage(response, ResponseResult.error(ErrorCodeEnum.NO_OPERATION_PERMISSION));

View File

@@ -95,7 +95,7 @@ public class LoginController {
@PostMapping("/doLogout")
public ResponseResult<Void> doLogout() {
TokenData tokenData = TokenData.takeFromRequest();
String sessionIdKey = RedisKeyUtil.makeSessionIdKeyForRedis(tokenData.getSessionId());
String sessionIdKey = RedisKeyUtil.makeSessionIdKey(tokenData.getSessionId());
redissonClient.getBucket(sessionIdKey).delete();
sysPermService.removeUserSysPermCache(tokenData.getSessionId());
cacheHelper.removeAllSessionCache(tokenData.getSessionId());
@@ -180,7 +180,7 @@ public class LoginController {
tokenData.setIsAdmin(isAdmin);
tokenData.setLoginIp(IpUtil.getRemoteIpAddress(ContextUtil.getHttpRequest()));
tokenData.setLoginTime(new Date());
String sessionIdKey = RedisKeyUtil.makeSessionIdKeyForRedis(sessionId);
String sessionIdKey = RedisKeyUtil.makeSessionIdKey(sessionId);
String sessionData = JSON.toJSONString(tokenData, SerializerFeature.WriteNonStringValueAsString);
RBucket<String> bucket = redissonClient.getBucket(sessionIdKey);
bucket.set(sessionData);

View File

@@ -72,7 +72,7 @@ public class LoginUserController {
public ResponseResult<Void> delete(@MyRequestBody String sessionId) {
// 为了保证被剔除用户正在进行的操作不被干扰这里只是删除sessionIdKey即可这样可以使强制下线操作更加平滑。
// 比如如果删除操作权限或数据权限的redis session key那么正在请求数据的操作就会报错。
redissonClient.getBucket(RedisKeyUtil.makeSessionIdKeyForRedis(sessionId)).delete();
redissonClient.getBucket(RedisKeyUtil.makeSessionIdKey(sessionId)).delete();
return ResponseResult.success();
}

View File

@@ -1,9 +1,11 @@
package com.orange.demo.webadmin.upms.controller;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import com.orange.demo.webadmin.upms.dto.SysMenuDto;
import com.orange.demo.webadmin.upms.vo.SysMenuVo;
import com.orange.demo.webadmin.upms.model.SysMenu;
import com.orange.demo.webadmin.upms.model.constant.SysMenuType;
import com.orange.demo.webadmin.upms.service.SysMenuService;
import com.orange.demo.common.core.constant.ErrorCodeEnum;
import com.orange.demo.common.core.object.*;
@@ -40,12 +42,23 @@ public class SysMenuController {
@SuppressWarnings("unchecked")
@PostMapping("/add")
public ResponseResult<Long> add(
@MyRequestBody("sysMenu") SysMenuDto sysMenuDto, @MyRequestBody String permCodeIdListString) {
@MyRequestBody SysMenuDto sysMenuDto, @MyRequestBody String permCodeIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysMenuDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
SysMenu sysMenu = MyModelUtil.copyTo(sysMenuDto, SysMenu.class);
if (sysMenu.getParentId() != null) {
SysMenu parentSysMenu = sysMenuService.getById(sysMenu.getParentId());
if (parentSysMenu == null) {
errorMessage = "数据验证失败,关联的父菜单不存在!";
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
if (parentSysMenu.getOnlineFormId() != null) {
errorMessage = "数据验证失败,不能动态表单菜单添加父菜单!";
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
}
CallResult result = sysMenuService.verifyRelatedData(sysMenu, null, permCodeIdListString);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
@@ -68,7 +81,7 @@ public class SysMenuController {
@SuppressWarnings("unchecked")
@PostMapping("/update")
public ResponseResult<Void> update(
@MyRequestBody("sysMenu") SysMenuDto sysMenuDto, @MyRequestBody String permCodeIdListString) {
@MyRequestBody SysMenuDto sysMenuDto, @MyRequestBody String permCodeIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysMenuDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -79,6 +92,21 @@ public class SysMenuController {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}
SysMenu sysMenu = MyModelUtil.copyTo(sysMenuDto, SysMenu.class);
if (ObjectUtil.notEqual(originalSysMenu.getOnlineFormId(), sysMenu.getOnlineFormId())) {
if (originalSysMenu.getOnlineFormId() == null) {
errorMessage = "数据验证失败不能为当前菜单添加在线表单Id属性";
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
if (sysMenu.getOnlineFormId() == null) {
errorMessage = "数据验证失败不能去掉当前菜单的在线表单Id属性";
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
}
if (originalSysMenu.getOnlineFormId() != null
&& originalSysMenu.getMenuType().equals(SysMenuType.TYPE_BUTTON)) {
errorMessage = "数据验证失败,在线表单的内置菜单不能编辑!";
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
CallResult result = sysMenuService.verifyRelatedData(sysMenu, originalSysMenu, permCodeIdListString);
if (!result.isSuccess()) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, result.getErrorMessage());
@@ -106,11 +134,20 @@ public class SysMenuController {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
String errorMessage;
if (sysMenuService.hasChildren(menuId)) {
SysMenu menu = sysMenuService.getById(menuId);
if (menu == null) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
if (menu.getOnlineFormId() != null && menu.getMenuType().equals(SysMenuType.TYPE_BUTTON)) {
errorMessage = "数据验证失败,在线表单的内置菜单不能删除!";
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
}
// 对于在线表单,无需进行子菜单的验证,而是在删除的时候,连同子菜单一起删除。
if (menu.getOnlineFormId() == null && sysMenuService.hasChildren(menuId)) {
errorMessage = "数据验证失败,当前菜单存在下级菜单!";
return ResponseResult.error(ErrorCodeEnum.HAS_CHILDREN_DATA, errorMessage);
}
if (!sysMenuService.remove(menuId)) {
if (!sysMenuService.remove(menu)) {
errorMessage = "数据操作失败,菜单不存在,请刷新后重试!";
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
}

View File

@@ -41,7 +41,7 @@ public class SysPermCodeController {
@SuppressWarnings("unchecked")
@PostMapping("/add")
public ResponseResult<Long> add(
@MyRequestBody("sysPermCode") SysPermCodeDto sysPermCodeDto, @MyRequestBody String permIdListString) {
@MyRequestBody SysPermCodeDto sysPermCodeDto, @MyRequestBody String permIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysPermCodeDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED);
@@ -69,7 +69,7 @@ public class SysPermCodeController {
@SuppressWarnings("unchecked")
@PostMapping("/update")
public ResponseResult<Void> update(
@MyRequestBody("sysPermCode") SysPermCodeDto sysPermCodeDto, @MyRequestBody String permIdListString) {
@MyRequestBody SysPermCodeDto sysPermCodeDto, @MyRequestBody String permIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysPermCodeDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);

View File

@@ -40,7 +40,7 @@ public class SysPermController {
* @return 应答结果对象包含新增权限资源的主键Id。
*/
@PostMapping("/add")
public ResponseResult<Long> add(@MyRequestBody("sysPerm") SysPermDto sysPermDto) {
public ResponseResult<Long> add(@MyRequestBody SysPermDto sysPermDto) {
String errorMessage = MyCommonUtil.getModelValidationError(sysPermDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -61,7 +61,7 @@ public class SysPermController {
* @return 应答结果对象包含更新权限资源的主键Id。
*/
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody("sysPerm") SysPermDto sysPermDto) {
public ResponseResult<Void> update(@MyRequestBody SysPermDto sysPermDto) {
String errorMessage = MyCommonUtil.getModelValidationError(sysPermDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -120,17 +120,17 @@ public class SysPermController {
/**
* 查看权限资源列表。
*
* @param sysPermDtoFiltter 过滤对象。
* @param sysPermDtoFilter 过滤对象。
* @param pageParam 分页参数。
* @return 应答结果对象,包含权限资源列表。
*/
@PostMapping("/list")
public ResponseResult<MyPageData<SysPermVo>> list(
@MyRequestBody("sysPermFilter") SysPermDto sysPermDtoFiltter, @MyRequestBody MyPageParam pageParam) {
@MyRequestBody SysPermDto sysPermDtoFilter, @MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
SysPerm filter = MyModelUtil.copyTo(sysPermDtoFiltter, SysPerm.class);
SysPerm filter = MyModelUtil.copyTo(sysPermDtoFilter, SysPerm.class);
List<SysPerm> permList = sysPermService.getPermListWithRelation(filter);
List<SysPermVo> permVoList = MyModelUtil.copyCollectionTo(permList, SysPermVo.class);
long totalCount = 0L;

View File

@@ -42,7 +42,7 @@ public class SysPermModuleController {
* @return 应答结果对象包含新增权限资源模块的主键Id。
*/
@PostMapping("/add")
public ResponseResult<Long> add(@MyRequestBody("sysPermModule") SysPermModuleDto sysPermModuleDto) {
public ResponseResult<Long> add(@MyRequestBody SysPermModuleDto sysPermModuleDto) {
String errorMessage = MyCommonUtil.getModelValidationError(sysPermModuleDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -64,7 +64,7 @@ public class SysPermModuleController {
* @return 应答结果对象包含新增权限资源模块的主键Id。
*/
@PostMapping("/update")
public ResponseResult<Void> update(@MyRequestBody("sysPermModule") SysPermModuleDto sysPermModuleDto) {
public ResponseResult<Void> update(@MyRequestBody SysPermModuleDto sysPermModuleDto) {
String errorMessage = MyCommonUtil.getModelValidationError(sysPermModuleDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);

View File

@@ -50,7 +50,7 @@ public class SysRoleController {
@SuppressWarnings("unchecked")
@PostMapping("/add")
public ResponseResult<Long> add(
@MyRequestBody("sysRole") SysRoleDto sysRoleDto, @MyRequestBody String menuIdListString) {
@MyRequestBody SysRoleDto sysRoleDto, @MyRequestBody String menuIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysRoleDto);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -78,7 +78,7 @@ public class SysRoleController {
@SuppressWarnings("unchecked")
@PostMapping("/update")
public ResponseResult<Void> update(
@MyRequestBody("sysRole") SysRoleDto sysRoleDto, @MyRequestBody String menuIdListString) {
@MyRequestBody SysRoleDto sysRoleDto, @MyRequestBody String menuIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysRoleDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -132,7 +132,7 @@ public class SysRoleController {
*/
@PostMapping("/list")
public ResponseResult<MyPageData<SysRoleVo>> list(
@MyRequestBody("sysRoleFilter") SysRoleDto sysRoleDtoFilter,
@MyRequestBody SysRoleDto sysRoleDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {
@@ -181,7 +181,7 @@ public class SysRoleController {
@PostMapping("/listNotInUserRole")
public ResponseResult<MyPageData<SysUserVo>> listNotInUserRole(
@MyRequestBody Long roleId,
@MyRequestBody("sysUserFilter") SysUserDto sysUserDtoFilter,
@MyRequestBody SysUserDto sysUserDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
ResponseResult<Void> verifyResult = this.doRoleUserVerify(roleId);
@@ -210,7 +210,7 @@ public class SysRoleController {
@PostMapping("/listUserRole")
public ResponseResult<MyPageData<SysUserVo>> listUserRole(
@MyRequestBody Long roleId,
@MyRequestBody("sysUserFilter") SysUserDto sysUserDtoFilter,
@MyRequestBody SysUserDto sysUserDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
ResponseResult<Void> verifyResult = this.doRoleUserVerify(roleId);

View File

@@ -48,7 +48,7 @@ public class SysUserController {
@SuppressWarnings("unchecked")
@PostMapping("/add")
public ResponseResult<Long> add(
@MyRequestBody("sysUser") SysUserDto sysUserDto, @MyRequestBody String roleIdListString) {
@MyRequestBody SysUserDto sysUserDto, @MyRequestBody String roleIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysUserDto, Default.class, AddGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -73,7 +73,7 @@ public class SysUserController {
@SuppressWarnings("unchecked")
@PostMapping("/update")
public ResponseResult<Void> update(
@MyRequestBody("sysUser") SysUserDto sysUserDto, @MyRequestBody String roleIdListString) {
@MyRequestBody SysUserDto sysUserDto, @MyRequestBody String roleIdListString) {
String errorMessage = MyCommonUtil.getModelValidationError(sysUserDto, Default.class, UpdateGroup.class);
if (errorMessage != null) {
return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
@@ -147,7 +147,7 @@ public class SysUserController {
*/
@PostMapping("/list")
public ResponseResult<MyPageData<SysUserVo>> list(
@MyRequestBody("sysUserFilter") SysUserDto sysUserDtoFilter,
@MyRequestBody SysUserDto sysUserDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (pageParam != null) {

View File

@@ -22,6 +22,16 @@ public interface SysMenuMapper extends BaseDaoMapper<SysMenu> {
*/
List<SysMenu> getMenuListByUserId(@Param("userId") Long userId);
/**
* 获取当前用户有权访问的在线表单菜单仅返回类型为BUTTON的菜单。
*
* @param userId 指定的用户。
* @param menuType 菜单类型NULL则返回全部类型。
* @return 在线表单关联的菜单列表。
*/
List<SysMenu> getOnlineMenuListByUserId(
@Param("userId") Long userId, @Param("menuType") Integer menuType);
/**
* 查询菜单的权限资源地址列表。同时返回详细的分配路径。
*

View File

@@ -7,6 +7,8 @@
<result column="menu_name" jdbcType="VARCHAR" property="menuName"/>
<result column="menu_type" jdbcType="INTEGER" property="menuType"/>
<result column="form_router_name" jdbcType="VARCHAR" property="formRouterName"/>
<result column="online_form_id" jdbcType="BIGINT" property="onlineFormId"/>
<result column="online_menu_perm_type" jdbcType="INTEGER" property="onlineMenuPermType"/>
<result column="show_order" jdbcType="INTEGER" property="showOrder"/>
<result column="icon" jdbcType="VARCHAR" property="icon"/>
<result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
@@ -32,6 +34,25 @@
ORDER BY m.show_order
</select>
<select id="getOnlineMenuListByUserId" resultMap="BaseResultMap">
SELECT
m.*
FROM
zz_sys_user_role ur,
zz_sys_role_menu rm,
zz_sys_menu m
<where>
AND ur.user_id = #{userId}
AND ur.role_id = rm.role_id
AND rm.menu_id = m.menu_id
AND m.online_form_id IS NOT NULL
<if test="menuType != null">
AND m.menu_type = #{menuType}
</if>
</where>
ORDER BY m.show_order
</select>
<!-- 以下查询仅用于权限分配的问题定位,由于关联表较多,可能会给系统运行带来性能影响 -->
<select id="getSysPermListWithDetail" resultType="map">
SELECT

View File

@@ -46,6 +46,11 @@ public class SysMenuDto {
*/
private String formRouterName;
/**
* 在线表单主键Id仅用于在线表单绑定的菜单。
*/
private Long onlineFormId;
/**
* 菜单显示顺序 (值越小,排序越靠前)。
*/

View File

@@ -53,6 +53,18 @@ public class SysMenu {
@Column(name = "form_router_name")
private String formRouterName;
/**
* 在线表单主键Id仅用于在线表单绑定的菜单。
*/
@Column(name = "online_form_id")
private Long onlineFormId;
/**
* 在线表单菜单的权限控制类型具体值可参考SysOnlineMenuPermType常量对象。
*/
@Column(name = "online_menu_perm_type")
private Integer onlineMenuPermType;
/**
* 菜单显示顺序 (值越小,排序越靠前)。
*/

View File

@@ -30,10 +30,10 @@ public final class SysMenuType {
private static final Map<Object, String> DICT_MAP = new HashMap<>(4);
static {
DICT_MAP.put(0, "目录菜单");
DICT_MAP.put(1, "普通菜单");
DICT_MAP.put(2, "表单片段类型");
DICT_MAP.put(3, "按钮类型");
DICT_MAP.put(TYPE_DIRECTORY, "目录菜单");
DICT_MAP.put(TYPE_MENU, "普通菜单");
DICT_MAP.put(TYPE_UI_FRAGMENT, "表单片段类型");
DICT_MAP.put(TYPE_BUTTON, "按钮类型");
}
/**

View File

@@ -0,0 +1,44 @@
package com.orange.demo.webadmin.upms.model.constant;
import java.util.HashMap;
import java.util.Map;
/**
* 菜单关联在线表单的控制权限类型。
*
* @author Jerry
* @date 2020-09-24
*/
public final class SysOnlineMenuPermType {
/**
* 查看。
*/
public static final int TYPE_VIEW = 0;
/**
* 编辑。
*/
public static final int TYPE_EDIT = 1;
private static final Map<Object, String> DICT_MAP = new HashMap<>(4);
static {
DICT_MAP.put(TYPE_VIEW, "查看");
DICT_MAP.put(TYPE_EDIT, "编辑");
}
/**
* 判断参数是否为当前常量字典的合法值。
*
* @param value 待验证的参数值。
* @return 合法返回true否则false。
*/
public static boolean isValid(Integer value) {
return value != null && DICT_MAP.containsKey(value);
}
/**
* 私有构造函数,明确标识该常量类的作用。
*/
private SysOnlineMenuPermType() {
}
}

View File

@@ -26,9 +26,9 @@ public final class SysPermCodeType {
private static final Map<Object, String> DICT_MAP = new HashMap<>(3);
static {
DICT_MAP.put(0, "表单权限字");
DICT_MAP.put(1, "表单片段布局权限字");
DICT_MAP.put(2, "操作权限字");
DICT_MAP.put(TYPE_FORM, "表单权限字");
DICT_MAP.put(TYPE_FRAGMENT, "表单片段布局权限字");
DICT_MAP.put(TYPE_OPERATION, "操作权限字");
}
/**

View File

@@ -22,8 +22,8 @@ public final class SysPermModuleType {
private static final Map<Object, String> DICT_MAP = new HashMap<>(2);
static {
DICT_MAP.put(0, "普通模块");
DICT_MAP.put(1, "controller接口模块");
DICT_MAP.put(TYPE_NORMAL, "普通模块");
DICT_MAP.put(TYPE_CONTROLLER, "controller接口模块");
}
/**

View File

@@ -36,10 +36,10 @@ public interface SysMenuService extends IBaseService<SysMenu, Long> {
/**
* 删除指定的菜单。
*
* @param menuId 菜单主键Id
* @param menu 菜单对象
* @return 删除成功返回true否则false。
*/
boolean remove(Long menuId);
boolean remove(SysMenu menu);
/**
* 获取全部菜单列表。
@@ -91,4 +91,21 @@ public interface SysMenuService extends IBaseService<SysMenu, Long> {
* @return 包含从菜单到用户的完整权限分配路径信息的查询结果列表。
*/
List<Map<String, Object>> getSysUserListWithDetail(Long menuId, String loginName);
/**
* 获取指定类型的所有在线表单的菜单。
*
* @param menuType 菜单类型NULL则返回全部类型。
* @return 在线表单关联的菜单列表。
*/
List<SysMenu> getAllOnlineMenuList(Integer menuType);
/**
* 获取当前用户有权访问的在线表单菜单仅返回类型为BUTTON的菜单。
*
* @param userId 指定的用户。
* @param menuType 菜单类型NULL则返回全部类型。
* @return 在线表单关联的菜单列表。
*/
List<SysMenu> getOnlineMenuListByUserId(Long userId, Integer menuType);
}

View File

@@ -56,6 +56,14 @@ public interface SysPermService extends IBaseService<SysPerm, Long> {
*/
Collection<String> putUserSysPermCache(String sessionId, Long userId);
/**
* 把在线表单的权限URL集合存放到权限URL的缓存中。
*
* @param sessionId 会话Id。
* @param permUrlSet URL集合。
*/
void putOnlinePermToCache(String sessionId, Set<String> permUrlSet);
/**
* 将指定会话的权限集合从缓存中移除。
*

View File

@@ -1,5 +1,6 @@
package com.orange.demo.webadmin.upms.service.impl;
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;
@@ -14,8 +15,10 @@ import com.orange.demo.webadmin.upms.model.SysMenu;
import com.orange.demo.webadmin.upms.model.SysMenuPermCode;
import com.orange.demo.webadmin.upms.model.SysRoleMenu;
import com.orange.demo.webadmin.upms.model.constant.SysMenuType;
import com.orange.demo.webadmin.upms.model.constant.SysOnlineMenuPermType;
import com.orange.demo.webadmin.upms.service.SysMenuService;
import com.orange.demo.webadmin.upms.service.SysPermCodeService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -31,6 +34,7 @@ import java.util.stream.Collectors;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("sysMenuService")
public class SysMenuServiceImpl extends BaseService<SysMenu, Long> implements SysMenuService {
@@ -79,6 +83,29 @@ public class SysMenuServiceImpl extends BaseService<SysMenu, Long> implements Sy
}
sysMenuPermCodeMapper.insertList(sysMenuPermCodeList);
}
// 判断当前菜单是否为指向在线表单的菜单,并将根据约定,动态插入两个子菜单。
if (sysMenu.getOnlineFormId() != null) {
SysMenu viewSubMenu = new SysMenu();
viewSubMenu.setMenuId(idGenerator.nextLongId());
viewSubMenu.setParentId(sysMenu.getMenuId());
viewSubMenu.setMenuType(SysMenuType.TYPE_BUTTON);
viewSubMenu.setMenuName("查看");
viewSubMenu.setShowOrder(0);
viewSubMenu.setOnlineFormId(sysMenu.getOnlineFormId());
viewSubMenu.setOnlineMenuPermType(SysOnlineMenuPermType.TYPE_VIEW);
MyModelUtil.fillCommonsForInsert(viewSubMenu);
sysMenuMapper.insert(viewSubMenu);
SysMenu editSubMenu = new SysMenu();
editSubMenu.setMenuId(idGenerator.nextLongId());
editSubMenu.setParentId(sysMenu.getMenuId());
editSubMenu.setMenuType(SysMenuType.TYPE_BUTTON);
editSubMenu.setMenuName("编辑");
editSubMenu.setShowOrder(1);
editSubMenu.setOnlineFormId(sysMenu.getOnlineFormId());
editSubMenu.setOnlineMenuPermType(SysOnlineMenuPermType.TYPE_EDIT);
MyModelUtil.fillCommonsForInsert(editSubMenu);
sysMenuMapper.insert(editSubMenu);
}
return sysMenu;
}
@@ -112,18 +139,27 @@ public class SysMenuServiceImpl extends BaseService<SysMenu, Long> implements Sy
}
sysMenuPermCodeMapper.insertList(sysMenuPermCodeList);
}
// 如果当前菜单的在线表单Id变化了就需要同步更新他的内置子菜单也同步更新。
if (ObjectUtil.notEqual(originalSysMenu.getOnlineFormId(), sysMenu.getOnlineFormId())) {
SysMenu onlineSubMenu = new SysMenu();
onlineSubMenu.setOnlineFormId(sysMenu.getOnlineFormId());
Example e = new Example(SysMenu.class);
e.createCriteria().andEqualTo("parentId", sysMenu.getMenuId());
sysMenuMapper.updateByExampleSelective(onlineSubMenu, e);
}
return true;
}
/**
* 删除指定的菜单。
*
* @param menuId 菜单主键Id
* @param menu 菜单对象
* @return 删除成功返回true否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean remove(Long menuId) {
public boolean remove(SysMenu menu) {
Long menuId = menu.getMenuId();
if (!this.removeById(menuId)) {
return false;
}
@@ -133,6 +169,12 @@ public class SysMenuServiceImpl extends BaseService<SysMenu, Long> implements Sy
SysMenuPermCode menuPermCode = new SysMenuPermCode();
menuPermCode.setMenuId(menuId);
sysMenuPermCodeMapper.delete(menuPermCode);
// 如果为指向在线表单的菜单,则连同删除子菜单
if (menu.getOnlineFormId() != null) {
Example e = new Example(SysMenu.class);
e.createCriteria().andEqualTo("parentId", menuId);
sysMenuMapper.deleteByExample(e);
}
return true;
}
@@ -239,6 +281,34 @@ public class SysMenuServiceImpl extends BaseService<SysMenu, Long> implements Sy
return sysMenuMapper.getSysUserListWithDetail(menuId, loginName);
}
/**
* 获取指定类型的所有在线表单的菜单。
*
* @param menuType 菜单类型NULL则返回全部类型。
* @return 在线表单关联的菜单列表。
*/
@Override
public List<SysMenu> getAllOnlineMenuList(Integer menuType) {
Example e = new Example(SysMenu.class);
Example.Criteria c = e.createCriteria().andIsNotNull("onlineFormId");
if (menuType != null) {
c.andEqualTo("menuType", menuType);
}
return sysMenuMapper.selectByExample(e);
}
/**
* 获取当前用户有权访问的在线表单菜单仅返回类型为BUTTON的菜单。
*
* @param userId 指定的用户。
* @param menuType 菜单类型NULL则返回全部类型。
* @return 在线表单关联的菜单列表。
*/
@Override
public List<SysMenu> getOnlineMenuListByUserId(Long userId, Integer menuType) {
return sysMenuMapper.getOnlineMenuListByUserId(userId, menuType);
}
private String checkErrorOfNonDirectoryMenu(SysMenu sysMenu) {
// 判断父节点是否存在
SysMenu parentSysMenu = getById(sysMenu.getParentId());

View File

@@ -15,6 +15,7 @@ import com.orange.demo.webadmin.upms.model.SysPermCode;
import com.orange.demo.webadmin.upms.model.SysPermCodePerm;
import com.orange.demo.webadmin.upms.service.SysPermCodeService;
import com.orange.demo.webadmin.upms.service.SysPermService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -29,6 +30,7 @@ import java.util.stream.Collectors;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("sysPermCodeService")
public class SysPermCodeServiceImpl extends BaseService<SysPermCode, Long> implements SysPermCodeService {

View File

@@ -10,6 +10,7 @@ import com.orange.demo.webadmin.upms.model.SysPerm;
import com.orange.demo.webadmin.upms.model.SysPermModule;
import com.orange.demo.webadmin.upms.service.SysPermModuleService;
import com.orange.demo.webadmin.upms.service.SysPermService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -22,6 +23,7 @@ import java.util.List;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("sysPermModuleService")
public class SysPermModuleServiceImpl extends BaseService<SysPermModule, Long> implements SysPermModuleService {

View File

@@ -16,6 +16,7 @@ import com.orange.demo.webadmin.upms.dao.SysPermMapper;
import com.orange.demo.webadmin.upms.model.SysPerm;
import com.orange.demo.webadmin.upms.model.SysPermCodePerm;
import com.orange.demo.webadmin.upms.model.SysPermModule;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.redisson.api.RSet;
import org.redisson.api.RedissonClient;
@@ -34,6 +35,7 @@ import java.util.stream.Collectors;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("sysPermService")
public class SysPermServiceImpl extends BaseService<SysPerm, Long> implements SysPermService {
@@ -148,13 +150,25 @@ public class SysPermServiceImpl extends BaseService<SysPerm, Long> implements Sy
if (CollectionUtils.isEmpty(permList)) {
return permList;
}
String sessionPermKey = RedisKeyUtil.makeSessionPermIdKeyForRedis(sessionId);
String sessionPermKey = RedisKeyUtil.makeSessionPermIdKey(sessionId);
RSet<String> redisPermSet = redissonClient.getSet(sessionPermKey);
redisPermSet.addAll(permList.stream().map(Object::toString).collect(Collectors.toSet()));
redisPermSet.expire(applicationConfig.getSessionExpiredSeconds(), TimeUnit.SECONDS);
return permList;
}
/**
* 把在线表单的权限URL集合存放到权限URL的缓存中。
*
* @param sessionId 会话Id。
* @param permUrlSet URL集合。
*/
@Override
public void putOnlinePermToCache(String sessionId, Set<String> permUrlSet) {
String sessionPermKey = RedisKeyUtil.makeSessionPermIdKey(sessionId);
redissonClient.getSet(sessionPermKey).addAll(permUrlSet);
}
/**
* 将指定会话的权限集合从缓存中移除。
*
@@ -162,7 +176,7 @@ public class SysPermServiceImpl extends BaseService<SysPerm, Long> implements Sy
*/
@Override
public void removeUserSysPermCache(String sessionId) {
String sessionPermKey = RedisKeyUtil.makeSessionPermIdKeyForRedis(sessionId);
String sessionPermKey = RedisKeyUtil.makeSessionPermIdKey(sessionId);
redissonClient.getSet(sessionPermKey).deleteAsync();
}

View File

@@ -5,6 +5,7 @@ import com.orange.demo.common.core.base.dao.BaseDaoMapper;
import com.orange.demo.webadmin.upms.dao.SysPermWhitelistMapper;
import com.orange.demo.webadmin.upms.model.SysPermWhitelist;
import com.orange.demo.webadmin.upms.service.SysPermWhitelistService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -19,6 +20,7 @@ import java.util.stream.Collectors;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("sysPermWhitelistService")
public class SysPermWhitelistServiceImpl extends BaseService<SysPermWhitelist, String> implements SysPermWhitelistService {

View File

@@ -15,6 +15,7 @@ import com.orange.demo.webadmin.upms.model.SysRoleMenu;
import com.orange.demo.webadmin.upms.model.SysUserRole;
import com.orange.demo.webadmin.upms.service.SysMenuService;
import com.orange.demo.webadmin.upms.service.SysRoleService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -29,6 +30,7 @@ import java.util.stream.Collectors;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("sysRoleService")
public class SysRoleServiceImpl extends BaseService<SysRole, Long> implements SysRoleService {

View File

@@ -13,6 +13,7 @@ import com.orange.demo.common.core.base.service.BaseService;
import com.orange.demo.common.core.util.MyModelUtil;
import com.orange.demo.common.sequence.wrapper.IdGeneratorWrapper;
import com.github.pagehelper.Page;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.transaction.annotation.Transactional;
@@ -30,6 +31,7 @@ import java.util.stream.Collectors;
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
@Service("sysUserService")
public class SysUserServiceImpl extends BaseService<SysUser, Long> implements SysUserService {
@@ -194,6 +196,8 @@ public class SysUserServiceImpl extends BaseService<SysUser, Long> implements Sy
@Override
public List<SysUser> getSysUserListWithRelation(SysUser filter, String orderBy) {
List<SysUser> resultList = sysUserMapper.getSysUserList(filter, orderBy);
// 在缺省生成的代码中如果查询结果resultList不是Page对象说明没有分页那么就很可能是数据导出接口调用了当前方法。
// 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
int batchSize = resultList instanceof Page ? 0 : 1000;
this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
return resultList;

View File

@@ -38,6 +38,16 @@ public class SysMenuVo {
*/
private String formRouterName;
/**
* 在线表单主键Id仅用于在线表单绑定的菜单。
*/
private Long onlineFormId;
/**
* 在线表单菜单的权限控制类型具体值可参考SysOnlineMenuPermType常量对象。
*/
private Integer onlineMenuPermType;
/**
* 菜单显示顺序 (值越小,排序越靠前)。
*/

View File

@@ -4,11 +4,17 @@ logging:
com.orange.demo: info
server:
port: 8082
tomcat:
uri-encoding: UTF-8
max-threads: 100
min-spare-threads: 10
port: 8082
threads:
max: 100
min-spare: 10
servlet:
encoding:
force: true
charset: UTF-8
enabled: true
# spring相关配置
spring:
@@ -20,13 +26,9 @@ spring:
multipart:
max-file-size: 50MB
max-request-size: 50MB
http:
mvc:
converters:
preferred-json-mapper: fastjson
encoding:
force: true
charset: UTF-8
enabled: true
freemarker:
template-loader-path: classpath:/template/
cache: false
@@ -160,7 +162,7 @@ application:
defaultUserPassword: 123456
# 缺省的文件上传根目录。
uploadFileBaseDir: ./zz-resource/upload-files/app
# 跨域的IP白名单列表多个IP之间逗号分隔(* 表示全部信任,空白表示禁用跨域信任)。
# 跨域的IP(http://192.168.10.10:8086)白名单列表多个IP之间逗号分隔(* 表示全部信任,空白表示禁用跨域信任)。
credentialIpList: "*"
# Session的用户和数据权限在Redis中的过期时间(秒)。
sessionExpiredSeconds: 86400
@@ -219,7 +221,7 @@ application:
defaultUserPassword: 123456
# 缺省的文件上传根目录。
uploadFileBaseDir: ./zz-resource/upload-files/app
# 跨域的IP白名单列表多个IP之间逗号分隔(* 表示全部信任,空白表示禁用跨域信任)。
# 跨域的IP(http://192.168.10.10:8086)白名单列表多个IP之间逗号分隔(* 表示全部信任,空白表示禁用跨域信任)。
credentialIpList: "*"
# Session的用户和数据权限在Redis中的过期时间(秒)。
sessionExpiredSeconds: 86400