同步到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

View File

@@ -48,7 +48,7 @@ public class DataSourceResolveAspect {
resolver = ApplicationContextHolder.getBean(resolverClass);
resolverMap.put(resolverClass, resolver);
}
int type = resolver.resolve(dsr.arg());
int type = resolver.resolve(dsr.arg(), point.getArgs());
// 通过判断 DataSource 中的值来判断当前方法应用哪个数据源
DataSourceContextHolder.setDataSourceType(type);
log.debug("set datasource is " + type);

View File

@@ -560,16 +560,31 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
return mapper().getCountByCondition(this.tableName, whereClause);
}
/**
* 集成所有与主表实体对象相关的关联数据列表。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。
* 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。
* NOTE: 该方法内执行的SQL将禁用数据权限过滤。
*
* @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。
* @param relationParam 实体对象数据组装的参数构建器。
*/
@Override
public void buildRelationForDataList(List<M> resultList, MyRelationParam relationParam) {
this.buildRelationForDataList(resultList, relationParam, null);
}
/**
* 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。
* 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。
* NOTE: 该方法内执行的SQL将禁用数据权限过滤。
*
* @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。
* @param relationParam 实体对象数据组装的参数构建器。
* @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。
* @param relationParam 实体对象数据组装的参数构建器。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
@Override
public void buildRelationForDataList(List<M> resultList, MyRelationParam relationParam) {
public void buildRelationForDataList(
List<M> resultList, MyRelationParam relationParam, Set<String> ignoreFields) {
if (relationParam == null || CollectionUtils.isEmpty(resultList)) {
return;
}
@@ -579,24 +594,24 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
boolean buildOneToOne = relationParam.isBuildOneToOne() || relationParam.isBuildOneToOneWithDict();
// 这里集成一对一关联。
if (buildOneToOne) {
this.buildOneToOneForDataList(resultList, relationParam.isBuildOneToOneWithDict());
this.buildOneToOneForDataList(resultList, relationParam.isBuildOneToOneWithDict(), ignoreFields);
}
// 集成一对多关联
if (relationParam.isBuildOneToMany()) {
this.buildOneToManyForDataList(resultList);
this.buildOneToManyForDataList(resultList, ignoreFields);
}
// 这里集成字典关联
if (relationParam.isBuildDict()) {
// 构建常量字典关联关系
this.buildConstDictForDataList(resultList);
this.buildDictForDataList(resultList, buildOneToOne);
this.buildConstDictForDataList(resultList, ignoreFields);
this.buildDictForDataList(resultList, buildOneToOne, ignoreFields);
}
// 组装本地聚合计算关联数据
if (relationParam.isBuildRelationAggregation()) {
// 处理多对多场景下,根据主表的结果,进行从表聚合数据的计算。
this.buildManyToManyAggregationForDataList(resultList, buildAggregationAdditionalWhereCriteria());
this.buildManyToManyAggregationForDataList(resultList, buildAggregationAdditionalWhereCriteria(), ignoreFields);
// 处理多一多场景下,根据主表的结果,进行从表聚合数据的计算。
this.buildOneToManyAggregationForDataList(resultList, buildAggregationAdditionalWhereCriteria());
this.buildOneToManyAggregationForDataList(resultList, buildAggregationAdditionalWhereCriteria(), ignoreFields);
}
} finally {
GlobalThreadLocal.setDataFilter(dataFilterValue);
@@ -621,6 +636,29 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
*/
@Override
public void buildRelationForDataList(List<M> resultList, MyRelationParam relationParam, int batchSize) {
this.buildRelationForDataList(resultList, relationParam, batchSize, null);
}
/**
* 该函数主要用于对查询结果的批量导出。不同于支持分页的列表查询,批量导出没有分页机制,
* 因此在导出数据量较大的情况下很容易给数据库的内存、CPU和IO带来较大的压力。而通过
* 我们的分批处理可以极大的规避该问题的出现几率。调整batchSize的大小也可以有效的
* 改善运行效率。
* 我们目前的处理机制是,先从主表取出所有符合条件的主表数据,这样可以避免分批处理时,
* 后面几批数据因为skip过多而带来的效率问题。因为是单表过滤不会给数据库带来过大的压力。
* 之后再在主表结果集数据上进行分批级联处理。
* 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。
* 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。
* NOTE: 该方法内执行的SQL将禁用数据权限过滤。
*
* @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。
* @param relationParam 实体对象数据组装的参数构建器。
* @param batchSize 每批集成的记录数量。小于等于时将不做分批处理。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
@Override
public void buildRelationForDataList(
List<M> resultList, MyRelationParam relationParam, int batchSize, Set<String> ignoreFields) {
if (CollectionUtils.isEmpty(resultList)) {
return;
}
@@ -633,23 +671,38 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
int toIndex = Math.min(batchSize, totalCount);
while (toIndex > fromIndex) {
List<M> subResultList = resultList.subList(fromIndex, toIndex);
this.buildRelationForDataList(subResultList, relationParam);
this.buildRelationForDataList(subResultList, relationParam, ignoreFields);
fromIndex = toIndex;
toIndex = Math.min(batchSize + fromIndex, totalCount);
}
}
/**
* 集成所有与主表实体对象相关的关联数据对象。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。
* 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。
* NOTE: 该方法内执行的SQL将禁用数据权限过滤。
*
* @param dataObject 主表实体对象。数据集成将直接作用于该对象。
* @param relationParam 实体对象数据组装的参数构建器。
* @param <T> 实体对象类型。
*/
@Override
public <T extends M> void buildRelationForData(T dataObject, MyRelationParam relationParam) {
this.buildRelationForData(dataObject, relationParam, null);
}
/**
* 集成所有与主表实体对象相关的关联数据对象。包括一对一、字典、一对多和多对多聚合运算等。
* 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。
* NOTE: 该方法内执行的SQL将禁用数据权限过滤。
*
* @param dataObject 主表实体对象。数据集成将直接作用于该对象。
* @param relationParam 实体对象数据组装的参数构建器。
* @param <T> 实体对象类型
* @param dataObject 主表实体对象。数据集成将直接作用于该对象。
* @param relationParam 实体对象数据组装的参数构建器。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装
* @param <T> 实体对象类型。
*/
@Override
public <T extends M> void buildRelationForData(T dataObject, MyRelationParam relationParam) {
public <T extends M> void buildRelationForData(T dataObject, MyRelationParam relationParam, Set<String> ignoreFields) {
if (dataObject == null || relationParam == null) {
return;
}
@@ -658,27 +711,27 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
// 集成本地一对一和字段级别的数据关联。
boolean buildOneToOne = relationParam.isBuildOneToOne() || relationParam.isBuildOneToOneWithDict();
if (buildOneToOne) {
this.buildOneToOneForData(dataObject, relationParam.isBuildOneToOneWithDict());
this.buildOneToOneForData(dataObject, relationParam.isBuildOneToOneWithDict(), ignoreFields);
}
// 集成一对多关联
if (relationParam.isBuildOneToMany()) {
this.buildOneToManyForData(dataObject);
this.buildOneToManyForData(dataObject, ignoreFields);
}
if (relationParam.isBuildDict()) {
// 构建常量字典关联关系
this.buildConstDictForData(dataObject);
this.buildConstDictForData(dataObject, ignoreFields);
// 构建本地数据字典关联关系。
this.buildDictForData(dataObject, buildOneToOne);
this.buildDictForData(dataObject, buildOneToOne, ignoreFields);
}
// 组装本地聚合计算关联数据
if (relationParam.isBuildRelationAggregation()) {
// 开始处理多对多场景。
buildManyToManyAggregationForData(dataObject, buildAggregationAdditionalWhereCriteria());
buildManyToManyAggregationForData(dataObject, buildAggregationAdditionalWhereCriteria(), ignoreFields);
// 构建一对多场景
buildOneToManyAggregationForData(dataObject, buildAggregationAdditionalWhereCriteria());
buildOneToManyAggregationForData(dataObject, buildAggregationAdditionalWhereCriteria(), ignoreFields);
}
if (relationParam.isBuildRelationManyToMany()) {
this.buildRelationManyToMany(dataObject);
this.buildRelationManyToMany(dataObject, ignoreFields);
}
} finally {
GlobalThreadLocal.setDataFilter(dataFilterValue);
@@ -688,13 +741,17 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
/**
* 集成主表和多对多中间表之间的关联关系。
*
* @param dataObject 关联后的主表数据对象。
* @param dataObject 关联后的主表数据对象。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private <T extends M> void buildRelationManyToMany(T dataObject) {
private <T extends M> void buildRelationManyToMany(T dataObject, Set<String> ignoreFields) {
if (dataObject == null || CollectionUtils.isEmpty(this.relationManyToManyStructList)) {
return;
}
for (RelationStruct relationStruct : this.relationManyToManyStructList) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField);
Example e = new Example(relationStruct.relationManyToMany.relationModelClass());
e.createCriteria().andEqualTo(relationStruct.masterIdField.getName(), masterIdValue);
@@ -706,13 +763,17 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
/**
* 为实体对象参数列表数据集成本地静态字典关联数据。
*
* @param resultList 主表数据列表。
* @param resultList 主表数据列表。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private void buildConstDictForDataList(List<M> resultList) {
private void buildConstDictForDataList(List<M> resultList, Set<String> ignoreFields) {
if (CollectionUtils.isEmpty(this.relationConstDictStructList) || CollectionUtils.isEmpty(resultList)) {
return;
}
for (RelationStruct relationStruct : this.relationConstDictStructList) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
for (M dataObject : resultList) {
Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField);
if (id != null) {
@@ -731,13 +792,17 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
/**
* 为参数实体对象数据集成本地静态字典关联数据。
*
* @param dataObject 实体对象。
* @param dataObject 实体对象。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private <T extends M> void buildConstDictForData(T dataObject) {
private <T extends M> void buildConstDictForData(T dataObject, Set<String> ignoreFields) {
if (dataObject == null || CollectionUtils.isEmpty(this.relationConstDictStructList)) {
return;
}
for (RelationStruct relationStruct : this.relationConstDictStructList) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField);
if (id != null) {
String name = relationStruct.dictMap.get(id);
@@ -757,12 +822,16 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
* @param resultList 实体对象数据列表。
* @param hasBuiltOneToOne 性能优化参数。如果该值为true同时注解参数RelationDict.equalOneToOneRelationField
* 不为空,则直接从已经完成一对一数据关联的从表对象中获取数据,减少一次数据库交互。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private void buildDictForDataList(List<M> resultList, boolean hasBuiltOneToOne) {
private void buildDictForDataList(List<M> resultList, boolean hasBuiltOneToOne, Set<String> ignoreFields) {
if (CollectionUtils.isEmpty(this.relationDictStructList) || CollectionUtils.isEmpty(resultList)) {
return;
}
for (RelationStruct relationStruct : this.relationDictStructList) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
List<Object> relationList = null;
if (hasBuiltOneToOne && relationStruct.equalOneToOneRelationField != null) {
relationList = resultList.stream()
@@ -790,12 +859,16 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
* @param dataObject 实体对象。
* @param hasBuiltOneToOne 性能优化参数。如果该值为true同时注解参数RelationDict.equalOneToOneRelationField
* 不为空,则直接从已经完成一对一数据关联的从表对象中获取数据,减少一次数据库交互。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private <T extends M> void buildDictForData(T dataObject, boolean hasBuiltOneToOne) {
private <T extends M> void buildDictForData(T dataObject, boolean hasBuiltOneToOne, Set<String> ignoreFields) {
if (dataObject == null || CollectionUtils.isEmpty(this.relationDictStructList)) {
return;
}
for (RelationStruct relationStruct : this.relationDictStructList) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
Object relationObject = null;
if (hasBuiltOneToOne && relationStruct.equalOneToOneRelationField != null) {
relationObject = ReflectUtil.getFieldValue(dataObject, relationStruct.equalOneToOneRelationField);
@@ -813,14 +886,18 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
/**
* 为实体对象参数列表数据集成本地一对一关联数据。
*
* @param resultList 实体对象数据列表。
* @param withDict 关联从表数据后,是否把从表的字典数据也一起关联了。
* @param resultList 实体对象数据列表。
* @param withDict 关联从表数据后,是否把从表的字典数据也一起关联了。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private void buildOneToOneForDataList(List<M> resultList, boolean withDict) {
private void buildOneToOneForDataList(List<M> resultList, boolean withDict, Set<String> ignoreFields) {
if (CollectionUtils.isEmpty(this.relationOneToOneStructList) || CollectionUtils.isEmpty(resultList)) {
return;
}
for (RelationStruct relationStruct : this.relationOneToOneStructList) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
Set<Object> masterIdSet = resultList.stream()
.map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField))
.filter(Objects::nonNull)
@@ -839,9 +916,9 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
BaseService<Object, Object> proxyTarget =
(BaseService<Object, Object>) AopTargetUtil.getTarget(relationService);
// 关联本地字典。
proxyTarget.buildDictForDataList(relationList, false);
proxyTarget.buildDictForDataList(relationList, false, ignoreFields);
// 关联常量字典
proxyTarget.buildConstDictForDataList(relationList);
proxyTarget.buildConstDictForDataList(relationList, ignoreFields);
}
}
}
@@ -850,14 +927,18 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
/**
* 为实体对象数据集成本地一对一关联数据。
*
* @param dataObject 实体对象。
* @param withDict 关联从表数据后,是否把从表的字典数据也一起关联了。
* @param dataObject 实体对象。
* @param withDict 关联从表数据后,是否把从表的字典数据也一起关联了。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private void buildOneToOneForData(M dataObject, boolean withDict) {
private void buildOneToOneForData(M dataObject, boolean withDict, Set<String> ignoreFields) {
if (dataObject == null || CollectionUtils.isEmpty(this.relationOneToOneStructList)) {
return;
}
for (RelationStruct relationStruct : this.relationOneToOneStructList) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField);
if (id != null) {
BaseService<Object, Object> relationService = relationStruct.service;
@@ -869,9 +950,9 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
BaseService<Object, Object> proxyTarget =
(BaseService<Object, Object>) AopTargetUtil.getTarget(relationService);
// 关联本地字典
proxyTarget.buildDictForData(relationObject, false);
proxyTarget.buildDictForData(relationObject, false, ignoreFields);
// 关联常量字典
proxyTarget.buildConstDictForData(relationObject);
proxyTarget.buildConstDictForData(relationObject, ignoreFields);
}
}
}
@@ -880,13 +961,17 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
/**
* 为实体对象参数列表数据集成本地一对多关联数据。
*
* @param resultList 实体对象数据列表。
* @param resultList 实体对象数据列表。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private void buildOneToManyForDataList(List<M> resultList) {
private void buildOneToManyForDataList(List<M> resultList, Set<String> ignoreFields) {
if (CollectionUtils.isEmpty(this.relationOneToManyStructList) || CollectionUtils.isEmpty(resultList)) {
return;
}
for (RelationStruct relationStruct : this.relationOneToManyStructList) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
Set<Object> masterIdSet = resultList.stream()
.map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField))
.filter(Objects::nonNull)
@@ -905,13 +990,17 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
/**
* 为实体对象数据集成本地一对多关联数据。
*
* @param dataObject 实体对象。
* @param dataObject 实体对象。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private void buildOneToManyForData(M dataObject) {
private void buildOneToManyForData(M dataObject, Set<String> ignoreFields) {
if (dataObject == null || CollectionUtils.isEmpty(this.relationOneToManyStructList)) {
return;
}
for (RelationStruct relationStruct : this.relationOneToManyStructList) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
Object id = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField);
if (id != null) {
BaseService<Object, Object> relationService = relationStruct.service;
@@ -929,9 +1018,10 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
*
* @param resultList 实体对象数据列表。
* @param criteriaListMap 过滤参数。key为主表字段名称value是过滤条件列表。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private void buildManyToManyAggregationForDataList(
List<M> resultList, Map<String, List<MyWhereCriteria>> criteriaListMap) {
List<M> resultList, Map<String, List<MyWhereCriteria>> criteriaListMap, Set<String> ignoreFields) {
if (CollectionUtils.isEmpty(this.relationManyToManyAggrStructList) || CollectionUtils.isEmpty(resultList)) {
return;
}
@@ -939,6 +1029,9 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
criteriaListMap = new HashMap<>(this.relationManyToManyAggrStructList.size());
}
for (RelationStruct relationStruct : this.relationManyToManyAggrStructList) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
Set<Object> masterIdSet = resultList.stream()
.map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField))
.filter(Objects::nonNull)
@@ -1000,9 +1093,10 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
*
* @param dataObject 实体对象。
* @param criteriaListMap 过滤参数。key为主表字段名称value是过滤条件列表。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private <T extends M> void buildManyToManyAggregationForData(
T dataObject, Map<String, List<MyWhereCriteria>> criteriaListMap) {
T dataObject, Map<String, List<MyWhereCriteria>> criteriaListMap, Set<String> ignoreFields) {
if (dataObject == null || CollectionUtils.isEmpty(this.relationManyToManyAggrStructList)) {
return;
}
@@ -1010,28 +1104,30 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
criteriaListMap = new HashMap<>(relationManyToManyAggrStructList.size());
}
for (RelationStruct relationStruct : this.relationManyToManyAggrStructList) {
Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField);
if (masterIdValue == null) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
BasicAggregationRelationInfo basicRelationInfo =
this.parseBasicAggregationRelationInfo(relationStruct, criteriaListMap);
// 组装过滤条件
String whereClause = this.makeManyToManyWhereClause(
relationStruct, masterIdValue, basicRelationInfo, criteriaListMap);
StringBuilder tableNames = new StringBuilder(64);
tableNames.append(basicRelationInfo.relationTable);
if (!basicRelationInfo.onlySelectRelationTable) {
tableNames.append(", ").append(basicRelationInfo.slaveTable);
}
List<Map<String, Object>> aggregationMapList =
mapper().getGroupedListByCondition(tableNames.toString(),
basicRelationInfo.selectList, whereClause, basicRelationInfo.groupBy);
// 将查询后的结果回填到主表数据中。
if (CollectionUtils.isNotEmpty(aggregationMapList)) {
Object value = aggregationMapList.get(0).get(AGGREGATED_VALUE);
if (value != null) {
ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value);
Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField);
if (masterIdValue != null) {
BasicAggregationRelationInfo basicRelationInfo =
this.parseBasicAggregationRelationInfo(relationStruct, criteriaListMap);
// 组装过滤条件
String whereClause = this.makeManyToManyWhereClause(
relationStruct, masterIdValue, basicRelationInfo, criteriaListMap);
StringBuilder tableNames = new StringBuilder(64);
tableNames.append(basicRelationInfo.relationTable);
if (!basicRelationInfo.onlySelectRelationTable) {
tableNames.append(", ").append(basicRelationInfo.slaveTable);
}
List<Map<String, Object>> aggregationMapList =
mapper().getGroupedListByCondition(tableNames.toString(),
basicRelationInfo.selectList, whereClause, basicRelationInfo.groupBy);
// 将查询后的结果回填到主表数据中。
if (CollectionUtils.isNotEmpty(aggregationMapList)) {
Object value = aggregationMapList.get(0).get(AGGREGATED_VALUE);
if (value != null) {
ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value);
}
}
}
}
@@ -1042,9 +1138,10 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
*
* @param resultList 实体对象数据列表。
* @param criteriaListMap 过滤参数。key为主表字段名称value是过滤条件列表。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private void buildOneToManyAggregationForDataList(
List<M> resultList, Map<String, List<MyWhereCriteria>> criteriaListMap) {
List<M> resultList, Map<String, List<MyWhereCriteria>> criteriaListMap, Set<String> ignoreFields) {
// 处理多一多场景下,根据主表的结果,进行从表聚合数据的计算。
if (CollectionUtils.isEmpty(this.relationOneToManyAggrStructList) || CollectionUtils.isEmpty(resultList)) {
return;
@@ -1053,6 +1150,9 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
criteriaListMap = new HashMap<>(relationOneToManyAggrStructList.size());
}
for (RelationStruct relationStruct : this.relationOneToManyAggrStructList) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
Set<Object> masterIdSet = resultList.stream()
.map(obj -> ReflectUtil.getFieldValue(obj, relationStruct.masterIdField))
.filter(Objects::nonNull)
@@ -1098,9 +1198,10 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
*
* @param dataObject 实体对象。
* @param criteriaListMap 过滤参数。key为主表字段名称value是过滤条件列表。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
private <T extends M> void buildOneToManyAggregationForData(
T dataObject, Map<String, List<MyWhereCriteria>> criteriaListMap) {
T dataObject, Map<String, List<MyWhereCriteria>> criteriaListMap, Set<String> ignoreFields) {
if (dataObject == null || CollectionUtils.isEmpty(this.relationOneToManyAggrStructList)) {
return;
}
@@ -1108,29 +1209,31 @@ public abstract class BaseService<M, K> implements IBaseService<M, K> {
criteriaListMap = new HashMap<>(relationOneToManyAggrStructList.size());
}
for (RelationStruct relationStruct : this.relationOneToManyAggrStructList) {
Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField);
if (masterIdValue == null) {
if (ignoreFields != null && ignoreFields.contains(relationStruct.relationField.getName())) {
continue;
}
RelationOneToManyAggregation relation = relationStruct.relationOneToManyAggregation;
String slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass());
String slaveColumnName =
MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass());
Tuple2<String, String> selectAndGroupByTuple = makeSelectListAndGroupByClause(
slaveTable, slaveColumnName, relation.slaveModelClass(),
slaveTable, relation.aggregationField(), relation.aggregationType());
String selectList = selectAndGroupByTuple.getFirst();
String groupBy = selectAndGroupByTuple.getSecond();
String whereClause = this.makeOneToManyWhereClause(
relationStruct, masterIdValue, slaveColumnName, criteriaListMap);
// 获取分组聚合计算结果
List<Map<String, Object>> aggregationMapList =
mapper().getGroupedListByCondition(slaveTable, selectList, whereClause, groupBy);
// 将计算结果回填到主表关联字段
if (CollectionUtils.isNotEmpty(aggregationMapList)) {
Object value = aggregationMapList.get(0).get(AGGREGATED_VALUE);
if (value != null) {
ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value);
Object masterIdValue = ReflectUtil.getFieldValue(dataObject, relationStruct.masterIdField);
if (masterIdValue != null) {
RelationOneToManyAggregation relation = relationStruct.relationOneToManyAggregation;
String slaveTable = MyModelUtil.mapToTableName(relation.slaveModelClass());
String slaveColumnName =
MyModelUtil.mapToColumnName(relation.slaveIdField(), relation.slaveModelClass());
Tuple2<String, String> selectAndGroupByTuple = makeSelectListAndGroupByClause(
slaveTable, slaveColumnName, relation.slaveModelClass(),
slaveTable, relation.aggregationField(), relation.aggregationType());
String selectList = selectAndGroupByTuple.getFirst();
String groupBy = selectAndGroupByTuple.getSecond();
String whereClause = this.makeOneToManyWhereClause(
relationStruct, masterIdValue, slaveColumnName, criteriaListMap);
// 获取分组聚合计算结果
List<Map<String, Object>> aggregationMapList =
mapper().getGroupedListByCondition(slaveTable, selectList, whereClause, groupBy);
// 将计算结果回填到主表关联字段
if (CollectionUtils.isNotEmpty(aggregationMapList)) {
Object value = aggregationMapList.get(0).get(AGGREGATED_VALUE);
if (value != null) {
ReflectUtil.setFieldValue(dataObject, relationStruct.relationField, value);
}
}
}
}

View File

@@ -199,6 +199,17 @@ public interface IBaseService<M, K> {
*/
void buildRelationForDataList(List<M> resultList, MyRelationParam relationParam);
/**
* 集成所有与主表实体对象相关的关联数据列表。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。
* 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。
* NOTE: 该方法内执行的SQL将禁用数据权限过滤。
*
* @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。
* @param relationParam 实体对象数据组装的参数构建器。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
void buildRelationForDataList(List<M> resultList, MyRelationParam relationParam, Set<String> ignoreFields);
/**
* 该函数主要用于对查询结果的批量导出。不同于支持分页的列表查询,批量导出没有分页机制,
* 因此在导出数据量较大的情况下很容易给数据库的内存、CPU和IO带来较大的压力。而通过
@@ -217,6 +228,26 @@ public interface IBaseService<M, K> {
*/
void buildRelationForDataList(List<M> resultList, MyRelationParam relationParam, int batchSize);
/**
* 该函数主要用于对查询结果的批量导出。不同于支持分页的列表查询,批量导出没有分页机制,
* 因此在导出数据量较大的情况下很容易给数据库的内存、CPU和IO带来较大的压力。而通过
* 我们的分批处理可以极大的规避该问题的出现几率。调整batchSize的大小也可以有效的
* 改善运行效率。
* 我们目前的处理机制是,先从主表取出所有符合条件的主表数据,这样可以避免分批处理时,
* 后面几批数据因为skip过多而带来的效率问题。因为是单表过滤不会给数据库带来过大的压力。
* 之后再在主表结果集数据上进行分批级联处理。
* 集成所有与主表实体对象相关的关联数据列表。包括一对一、字典、一对多和多对多聚合运算等。
* 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。
* NOTE: 该方法内执行的SQL将禁用数据权限过滤。
*
* @param resultList 主表实体对象列表。数据集成将直接作用于该对象列表。
* @param relationParam 实体对象数据组装的参数构建器。
* @param batchSize 每批集成的记录数量。小于等于时将不做分批处理。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
*/
void buildRelationForDataList(
List<M> resultList, MyRelationParam relationParam, int batchSize, Set<String> ignoreFields);
/**
* 集成所有与主表实体对象相关的关联数据对象。包括一对一、字典、一对多和多对多聚合运算等。
* 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。
@@ -228,6 +259,18 @@ public interface IBaseService<M, K> {
*/
<T extends M> void buildRelationForData(T dataObject, MyRelationParam relationParam);
/**
* 集成所有与主表实体对象相关的关联数据对象。包括本地和远程服务的一对一、字典、一对多和多对多聚合运算等。
* 也可以根据实际需求,单独调用该函数所包含的各个数据集成函数。
* NOTE: 该方法内执行的SQL将禁用数据权限过滤。
*
* @param dataObject 主表实体对象。数据集成将直接作用于该对象。
* @param relationParam 实体对象数据组装的参数构建器。
* @param ignoreFields 该集合中的字段,即便包含注解也不会在当前调用中进行数据组装。
* @param <T> 实体对象类型。
*/
<T extends M> void buildRelationForData(T dataObject, MyRelationParam relationParam, Set<String> ignoreFields);
/**
* 仅仅在spring boot 启动后的监听器事件中调用缓存所有service的关联关系加速后续的数据绑定效率。
*/

View File

@@ -71,7 +71,6 @@ public class MyRelationParam {
.buildDict(true)
.buildOneToOneWithDict(true)
.buildRelationAggregation(true)
.buildOneToMany(true)
.build();
}

View File

@@ -11,8 +11,9 @@ public interface DataSourceResolver {
/**
* 动态解析方法。实现类可以根据当前的请求,或者上下文环境进行动态解析。
*
* @param arg 可选的入参。MyDataSourceResolver注解中的arg参数。
* @param arg 可选的入参。MyDataSourceResolver注解中的arg参数。
* @param methodArgs 被织入方法的所有参数。
* @return 返回用于多数据源切换的类型值。DataSourceResolveAspect 切面方法会根据该返回值和配置信息,进行多数据源切换。
*/
int resolve(String arg);
int resolve(String arg, Object[] methodArgs);
}

View File

@@ -1,214 +0,0 @@
package com.orange.demo.common.core.util;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.sax.Excel07SaxReader;
import com.orange.demo.common.core.constant.ApplicationConstant;
import com.orange.demo.common.core.exception.MyRuntimeException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import java.io.*;
import java.lang.reflect.Field;
import java.util.*;
import java.util.stream.Collectors;
/**
* 导入工具类目前支持xlsx和csv两种类型。
*
* @author Jerry
* @date 2020-09-24
*/
@Slf4j
public class ImportUtil {
private static final String IMPORT_EXCEPTION_ERROR = "Failed to call ImportUtil.doImport";
private static final String UNSUPPORT_FILE_EXT_ERROR = "不支持的导入文件类型!";
/**
* 同步导入方式。
*
* @param filename 导入文件名。
* @return 导入数据列表。
*/
public static List<Map<String, Object>> doImport(String filename) {
if (ApplicationConstant.XLSX_EXT.equals(FilenameUtils.getExtension(filename))) {
try (ExcelReader reader = ExcelUtil.getReader(filename)) {
return reader.readAll();
}
} else if (ApplicationConstant.CSV_EXT.equals(FilenameUtils.getExtension(filename))) {
List<Map<String, Object>> resultList = new LinkedList<>();
try (FileReader reader = new FileReader(filename)) {
CSVParser parser = CSVFormat.DEFAULT.withFirstRecordAsHeader().parse(reader);
Map<String, Integer> headerMap = parser.getHeaderMap();
for (CSVRecord record : parser) {
Map<String, Object> rowMap = new LinkedHashMap<>();
for (final Map.Entry<String, Integer> header : headerMap.entrySet()) {
int col = header.getValue();
if (col < record.size()) {
rowMap.put(header.getKey(), record.get(col));
}
}
resultList.add(rowMap);
}
} catch (Exception e) {
log.error(IMPORT_EXCEPTION_ERROR, e);
}
return resultList;
}
throw new MyRuntimeException(UNSUPPORT_FILE_EXT_ERROR);
}
/**
* 异步导入方式即SAX导入方式。
*
* @param filename 导入文件名。
* @param importer 异步导入处理接口。
* @throws IOException 文件处理异常。
*/
public static <T> void doImport(String filename, BaseImporter<T> importer) throws IOException {
if (ApplicationConstant.XLSX_EXT.equals(FilenameUtils.getExtension(filename))) {
Excel07SaxReader reader = new MyExcel07SaxReader<>(importer);
try (InputStream in = new FileInputStream(filename)) {
reader.read(in, 0);
}
} else if (ApplicationConstant.CSV_EXT.equals(FilenameUtils.getExtension(filename))) {
try (BufferedReader reader = new BufferedReader(new FileReader(filename))) {
int rowIndex = 0;
do {
String rowData = reader.readLine();
if (StringUtils.isBlank(rowData)) {
importer.doImport(-1, null);
break;
}
String[] dataArray = StringUtils.split(rowData, ",");
importer.doImport(rowIndex++, Arrays.asList(dataArray));
} while (!importer.doInterrupt());
} catch (Exception e) {
log.error(IMPORT_EXCEPTION_ERROR, e);
}
}
throw new MyRuntimeException(UNSUPPORT_FILE_EXT_ERROR);
}
/**
* 异步导入抽象类。
*
* @param <T> 导入数据对象类型。
*/
public abstract static class BaseImporter<T> {
private final Class<T> beanType;
private final List<T> batchRowList = new LinkedList<>();
private final int batchSize;
private final Map<String, String> headerColumnMap;
private Field[] fieldArray = null;
public BaseImporter(int batchSize, Class<T> beanType, Map<String, String> headerColumnMap) {
if (batchSize <= 0) {
batchSize = 100;
}
this.batchSize = batchSize;
this.beanType = beanType;
this.headerColumnMap = headerColumnMap;
}
/**
* 导入操作执行函数。
*
* @param rowIndex 当前行号。
* @param row 当前行数据列表对象。
*/
public void doImport(long rowIndex, List<Object> row) {
if (row == null) {
doProcess(batchRowList);
doFinish();
batchRowList.clear();
return;
}
if (rowIndex <= 0) {
fieldArray = new Field[row.size()];
List<String> headerList = row.stream().map(Object::toString).collect(Collectors.toList());
List<String> columnList = new ArrayList<>(row.size());
for (String headerName : headerList) {
String columnName = headerColumnMap.get(headerName);
if (columnName != null) {
columnList.add(columnName);
}
}
columnList.stream()
.map(columnName -> ReflectUtil.getField(beanType, columnName))
.collect(Collectors.toList())
.toArray(fieldArray);
return;
}
T data;
try {
data = beanType.newInstance();
for (int i = 0; i < row.size(); i++) {
Object value = row.get(i);
Field field = fieldArray[i];
if (field != null) {
ReflectUtil.setFieldValue(data, field, value);
}
}
batchRowList.add(data);
} catch (Exception e) {
log.error(IMPORT_EXCEPTION_ERROR, e);
}
if (rowIndex % batchSize == 0) {
doProcess(batchRowList);
batchRowList.clear();
}
}
/**
* 数据处理进行中回调模板函数。
*
* @param batchRowList 一批数据行。
*/
public abstract void doProcess(List<T> batchRowList);
/**
* 数据处理完毕回调模板函数。
*/
public abstract void doFinish();
/**
* 数据处理终端标记模板函数。
* @return 是否中断。true则中断后面的处理。
*/
public abstract boolean doInterrupt();
}
static class MyExcel07SaxReader<T> extends Excel07SaxReader {
private final BaseImporter<T> importer;
MyExcel07SaxReader(BaseImporter<T> importer) {
super((sheetIndex, rowIndex, rowList) -> importer.doImport(rowIndex, rowList));
this.importer = importer;
}
@Override
public void endElement(String uri, String localName, String qName) {
super.endElement(uri, localName, qName);
if (importer.doInterrupt()) {
throw new MyRuntimeException();
}
}
@Override
public void endDocument() {
importer.doImport(-1, null);
}
}
/**
* 私有构造函数,明确标识该常量类的作用。
*/
private ImportUtil() {
}
}

View File

@@ -239,7 +239,8 @@ public class MyModelUtil {
continue;
}
Field dictMapField = ReflectUtil.getField(r.constantDictClass(), "DICT_MAP");
Map<Object, String> dictMap = (Map<Object, String>) ReflectUtil.getFieldValue(thisClazz, dictMapField);
Map<Object, String> dictMap =
(Map<Object, String>) ReflectUtil.getFieldValue(r.constantDictClass(), dictMapField);
Object id = ReflectUtil.getFieldValue(thisModel, r.masterIdField());
if (id != null) {
String name = dictMap.get(id);
@@ -253,6 +254,48 @@ public class MyModelUtil {
}
}
/**
* 主Model类型中遍历所有包含RelationConstDict注解的字段并将关联的静态字典中的数据
* 填充到thisModelList集合元素对象的被注解字段中。
*
* @param thisClazz 主对象的Class对象。
* @param thisModelList 主对象列表。
* @param <T> 主表对象类型。
*/
@SuppressWarnings("unchecked")
public static <T> void makeConstDictRelation(Class<T> thisClazz, List<T> thisModelList) {
if (CollectionUtils.isEmpty(thisModelList)) {
return;
}
Field[] fields = ReflectUtil.getFields(thisClazz);
for (Field field : fields) {
// 这里不做任何空值判断,从而让配置错误在调试期间即可抛出
Field thisTargetField = ReflectUtil.getField(thisClazz, field.getName());
RelationConstDict r = thisTargetField.getAnnotation(RelationConstDict.class);
if (r == null) {
continue;
}
Field dictMapField = ReflectUtil.getField(r.constantDictClass(), "DICT_MAP");
Map<Object, String> dictMap =
(Map<Object, String>) ReflectUtil.getFieldValue(r.constantDictClass(), dictMapField);
for (T thisModel : thisModelList) {
if (thisModel == null) {
continue;
}
Object id = ReflectUtil.getFieldValue(thisModel, r.masterIdField());
if (id != null) {
String name = dictMap.get(id);
if (name != null) {
Map<String, Object> m = new HashMap<>(2);
m.put("id", id);
m.put("name", name);
ReflectUtil.setFieldValue(thisModel, thisTargetField, m);
}
}
}
}
}
/**
* 在主Model类型中根据thisRelationField字段的RelationDict注解参数将被关联对象thatModel中的数据
* 关联到thisModel对象的thisRelationField字段中。

View File

@@ -33,7 +33,7 @@ public class RedisKeyUtil {
* @param sessionId 会话Id。
* @return 会话存储于Redis中的键值。
*/
public static String makeSessionIdKeyForRedis(String sessionId) {
public static String makeSessionIdKey(String sessionId) {
return "SESSIONID__" + sessionId;
}
@@ -43,7 +43,7 @@ public class RedisKeyUtil {
* @param sessionId 会话Id。
* @return 会话关联的权限数据存储于Redis中的键值。
*/
public static String makeSessionPermIdKeyForRedis(String sessionId) {
public static String makeSessionPermIdKey(String sessionId) {
return "PERM__" + sessionId;
}
@@ -53,10 +53,20 @@ public class RedisKeyUtil {
* @param sessionId 会话Id。
* @return 会话关联的数据权限数据存储于Redis中的键值。
*/
public static String makeSessionDataPermIdKeyForRedis(String sessionId) {
public static String makeSessionDataPermIdKey(String sessionId) {
return "DATA_PERM__" + sessionId;
}
/**
* 计算在线表对象缓存在Redis中的键值。
*
* @param tableId 在线表主键Id。
* @return 会话关联的数据权限数据存储于Redis中的键值。
*/
public static String makeOnlineTableKey(Long tableId) {
return "ONLINE_TABLE_" + tableId;
}
/**
* 私有构造函数,明确标识该常量类的作用。
*/

View File

@@ -10,9 +10,9 @@
<packaging>pom</packaging>
<properties>
<spring-boot.version>2.2.5.RELEASE</spring-boot.version>
<spring-boot.version>2.3.10.RELEASE</spring-boot.version>
<spring-platform.version>Cairo-SR8</spring-platform.version>
<spring-boot-admin.version>2.2.2</spring-boot-admin.version>
<spring-boot-admin.version>2.3.1</spring-boot-admin.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
@@ -22,19 +22,21 @@
<commons-collections4.version>4.4</commons-collections4.version>
<common-csv.version>1.8</common-csv.version>
<poi-ooxml.version>4.1.2</poi-ooxml.version>
<hutool.version>5.4.5</hutool.version>
<hutool.version>5.6.4</hutool.version>
<jjwt.version>0.9.1</jjwt.version>
<fastjson.version>1.2.74</fastjson.version>
<fastjson.version>1.2.76</fastjson.version>
<bean.query.version>1.1.5</bean.query.version>
<caffeine.version>2.8.1</caffeine.version>
<mapstruct.version>1.3.1.Final</mapstruct.version>
<disruptor.version>3.4.2</disruptor.version>
<caffeine.version>3.0.2</caffeine.version>
<mapstruct.version>1.4.2.Final</mapstruct.version>
<lombok.version>1.18.20</lombok.version>
<disruptor.version>3.4.3</disruptor.version>
<hibernate-validator.version>6.2.0.Final</hibernate-validator.version>
<!-- 数据库工具版本 -->
<druid.version>1.1.22</druid.version>
<druid.version>1.2.6</druid.version>
<mybatis-mapper.version>2.1.5</mybatis-mapper.version>
<mybatis-generator.version>1.3.7</mybatis-generator.version>
<pagehelper.version>1.3.0</pagehelper.version>
<redisson.version>3.12.3</redisson.version>
<redisson.version>3.15.4</redisson.version>
<qdox.version>2.0.0</qdox.version>
</properties>
@@ -103,6 +105,12 @@
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>${spring-boot-admin.version}</version>
</dependency>
<!-- api参数验证 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator.version}</version>
</dependency>
<!-- mapstruct 对象映射 -->
<dependency>
<groupId>org.mapstruct</groupId>
@@ -153,4 +161,35 @@
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<target>${maven.compiler.target}</target>
<source>${maven.compiler.source}</source>
<encoding>UTF-8</encoding>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,836 @@
-- ----------------------------
-- 请仅在下面的数据库链接中执行该脚本。
-- 主数据源 [localhost:3306/zzdemo-single]
-- ----------------------------
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- 系统用户表
-- ----------------------------
DROP TABLE IF EXISTS `zz_sys_user`;
CREATE TABLE `zz_sys_user` (
`user_id` bigint(20) NOT NULL COMMENT '主键Id',
`login_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '用户登录名称',
`password` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '密码',
`show_name` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '用户显示名称',
`user_type` int(11) NOT NULL COMMENT '用户类型(0: 管理员 1: 系统管理用户 2: 系统业务用户)',
`head_image_url` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户头像的Url',
`user_status` int(11) NOT NULL COMMENT '状态(0: 正常 1: 锁定)',
`create_user_id` bigint(20) NOT NULL COMMENT '创建者Id',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user_id` bigint(20) NOT NULL COMMENT '更新者Id',
`update_time` datetime NOT NULL COMMENT '最后更新时间',
`deleted_flag` int(11) NOT NULL COMMENT '删除标记(1: 正常 -1: 已删除)',
PRIMARY KEY (`user_id`) USING BTREE,
UNIQUE KEY `uk_login_name` (`login_name`) USING BTREE,
KEY `idx_status` (`user_status`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='系统用户表';
-- ----------------------------
-- 系统角色表
-- ----------------------------
DROP TABLE IF EXISTS `zz_sys_role`;
CREATE TABLE `zz_sys_role` (
`role_id` bigint(20) NOT NULL COMMENT '主键Id',
`role_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '角色名称',
`create_user_id` bigint(20) NOT NULL COMMENT '创建者Id',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user_id` bigint(20) NOT NULL COMMENT '更新者Id',
`update_time` datetime NOT NULL COMMENT '最后更新时间',
`deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)',
PRIMARY KEY (`role_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='系统角色表';
-- ----------------------------
-- 用户与角色对应关系表
-- ----------------------------
DROP TABLE IF EXISTS `zz_sys_user_role`;
CREATE TABLE `zz_sys_user_role` (
`user_id` bigint(20) NOT NULL COMMENT '用户Id',
`role_id` bigint(20) NOT NULL COMMENT '角色Id',
PRIMARY KEY (`user_id`,`role_id`) USING BTREE,
KEY `idx_role_id` (`role_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='用户与角色对应关系表';
-- ----------------------------
-- 菜单和操作权限管理表
-- ----------------------------
DROP TABLE IF EXISTS `zz_sys_menu`;
CREATE TABLE `zz_sys_menu` (
`menu_id` bigint(20) NOT NULL COMMENT '主键Id',
`parent_id` bigint(20) DEFAULT NULL COMMENT '父菜单Id目录菜单的父菜单为null',
`menu_name` varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '菜单显示名称',
`menu_type` int(11) NOT NULL COMMENT '(0: 目录 1: 菜单 2: 按钮 3: UI片段)',
`form_router_name` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '前端表单路由名称仅用于menu_type为1的菜单类型',
`online_form_id` bigint(20) DEFAULT NULL COMMENT '在线表单主键Id',
`online_menu_perm_type` int(11) DEFAULT NULL COMMENT '在线表单菜单的权限控制类型',
`show_order` int(11) NOT NULL COMMENT '菜单显示顺序 (值越小,排序越靠前)',
`icon` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '菜单图标',
`create_user_id` bigint(20) NOT NULL COMMENT '创建者Id',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user_id` bigint(20) NOT NULL COMMENT '更新者Id',
`update_time` datetime NOT NULL COMMENT '最后更新时间',
`deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)',
PRIMARY KEY (`menu_id`) USING BTREE,
KEY `idx_show_order` (`show_order`) USING BTREE,
KEY `idx_parent_id` (`parent_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='菜单和操作权限管理表';
-- ----------------------------
-- 角色与菜单对应关系表
-- ----------------------------
DROP TABLE IF EXISTS `zz_sys_role_menu`;
CREATE TABLE `zz_sys_role_menu` (
`role_id` bigint(20) NOT NULL COMMENT '角色Id',
`menu_id` bigint(20) NOT NULL COMMENT '菜单Id',
PRIMARY KEY (`role_id`,`menu_id`) USING BTREE,
KEY `idx_menu_id` (`menu_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='角色与菜单对应关系表';
-- ----------------------------
-- 系统权限资源表
-- ----------------------------
DROP TABLE IF EXISTS `zz_sys_perm_code`;
CREATE TABLE `zz_sys_perm_code` (
`perm_code_id` bigint(20) NOT NULL COMMENT '主键Id',
`parent_id` bigint(20) DEFAULT NULL COMMENT '上级权限字Id',
`perm_code` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '权限字标识(一般为有含义的英文字符串)',
`perm_code_type` int(11) NOT NULL COMMENT '类型(0: 表单 1: UI片段 2: 操作)',
`show_name` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '显示名称',
`show_order` int(11) NOT NULL COMMENT '显示顺序(数值越小,越靠前)',
`create_user_id` bigint(20) NOT NULL COMMENT '创建者Id',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user_id` bigint(20) NOT NULL COMMENT '更新者Id',
`update_time` datetime NOT NULL COMMENT '最后更新时间',
`deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)',
PRIMARY KEY (`perm_code_id`),
UNIQUE KEY `idx_perm_code` (`perm_code`) USING BTREE,
KEY `idx_parent_id` (`parent_id`) USING BTREE,
KEY `idx_show_order` (`show_order`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='系统权限资源表';
-- ----------------------------
-- 菜单和权限关系表
-- ----------------------------
DROP TABLE IF EXISTS `zz_sys_menu_perm_code`;
CREATE TABLE `zz_sys_menu_perm_code` (
`menu_id` bigint(20) NOT NULL COMMENT '关联菜单Id',
`perm_code_id` bigint(20) NOT NULL COMMENT '关联权限字Id',
PRIMARY KEY (`menu_id`,`perm_code_id`) USING BTREE,
KEY `idx_perm_code_id` (`perm_code_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='菜单和权限关系表';
-- ----------------------------
-- 系统权限模块表
-- ----------------------------
DROP TABLE IF EXISTS `zz_sys_perm_module`;
CREATE TABLE `zz_sys_perm_module` (
`module_id` bigint(20) NOT NULL COMMENT '权限模块id',
`parent_id` bigint(20) DEFAULT 0 COMMENT '上级权限模块id',
`module_name` varchar(64) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '权限模块名称',
`module_type` int(11) NOT NULL COMMENT '模块类型(0: 普通模块 1: Controller模块)',
`show_order` int(11) NOT NULL DEFAULT '0' COMMENT '权限模块在当前层级下的顺序,由小到大',
`create_user_id` bigint(20) NOT NULL COMMENT '创建者Id',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user_id` bigint(20) NOT NULL COMMENT '更新者Id',
`update_time` datetime NOT NULL COMMENT '最后更新时间',
`deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)',
PRIMARY KEY (`module_id`) USING BTREE,
KEY `idx_show_order` (`show_order`) USING BTREE,
KEY `idx_parent_id` (`parent_id`) USING BTREE,
KEY `idx_module_type` (`module_type`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='系统权限模块表';
-- ----------------------------
-- 系统权限表
-- ----------------------------
DROP TABLE IF EXISTS `zz_sys_perm`;
CREATE TABLE `zz_sys_perm` (
`perm_id` bigint(20) NOT NULL COMMENT '权限id',
`module_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '权限所在的权限模块id',
`perm_name` varchar(64) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '权限名称',
`url` varchar(128) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '关联的url',
`show_order` int(11) NOT NULL DEFAULT '0' COMMENT '权限在当前模块下的顺序,由小到大',
`create_user_id` bigint(20) NOT NULL COMMENT '创建者Id',
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_user_id` bigint(20) NOT NULL COMMENT '更新者Id',
`update_time` datetime NOT NULL COMMENT '最后更新时间',
`deleted_flag` int(11) NOT NULL COMMENT '逻辑删除标记(1: 正常 -1: 已删除)',
PRIMARY KEY (`perm_id`) USING BTREE,
KEY `idx_show_order` (`show_order`) USING BTREE,
KEY `idx_module_id` (`module_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='系统权限表';
-- ----------------------------
-- 系统权限字和权限资源关联表
-- ----------------------------
DROP TABLE IF EXISTS `zz_sys_perm_code_perm`;
CREATE TABLE `zz_sys_perm_code_perm` (
`perm_code_id` bigint(20) NOT NULL COMMENT '权限字Id',
`perm_id` bigint(20) NOT NULL COMMENT '权限id',
PRIMARY KEY (`perm_code_id`,`perm_id`),
KEY `idx_perm_id` (`perm_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=COMPACT COMMENT='系统权限字和权限资源关联表';
-- ----------------------------
-- 权限资源白名单表
-- ----------------------------
DROP TABLE IF EXISTS `zz_sys_perm_whitelist`;
CREATE TABLE `zz_sys_perm_whitelist` (
`perm_url` varchar(512) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '权限资源的url',
`module_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '权限资源所属模块名字(通常是Controller的名字)',
`perm_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL COMMENT '权限的名称',
PRIMARY KEY (`perm_url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='权限资源白名单表(认证用户均可访问的url资源)';
-- ----------------------------
-- 管理员账号数据
-- ----------------------------
BEGIN;
INSERT INTO `zz_sys_user` VALUES(1401541697321570305,'admin','$2a$10$m6n/ZGA9yOLJegQK1erXee4oy0UCm.aIa/LIljjy1iXH1z/22ugmi','管理员',0,'CHANGE TO YOUR HEAD IMAGE URL!!!',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
COMMIT;
-- ----------------------------
-- 全部菜单数据
-- ----------------------------
BEGIN;
INSERT INTO `zz_sys_menu` VALUES(1309065501179121664,NULL,'系统管理',0,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309065501183315968,1309065501179121664,'用户管理',1,'formSysUser',NULL,NULL,100,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181746,1309065501183315968,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181747,1309065501183315968,'新增',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181748,1309065501183315968,'编辑',3,NULL,NULL,NULL,3,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181749,1309065501183315968,'删除',3,NULL,NULL,NULL,4,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181750,1309065501183315968,'重置密码',3,NULL,NULL,NULL,5,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181751,1309065501183315968,'权限详情',3,NULL,NULL,NULL,6,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309065501183315969,1309065501179121664,'角色管理',1,'formSysRole',NULL,NULL,110,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181760,1309065501183315969,'角色管理',2,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181761,1309065501183315969,'用户授权',2,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181762,1401541697313181760,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181763,1401541697313181760,'新增',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181764,1401541697313181760,'编辑',3,NULL,NULL,NULL,3,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181765,1401541697313181760,'删除',3,NULL,NULL,NULL,4,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181766,1401541697313181760,'权限详情',3,NULL,NULL,NULL,5,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181767,1401541697313181761,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181768,1401541697313181761,'授权用户',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181769,1401541697313181761,'移除用户',3,NULL,NULL,NULL,3,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309065501183315970,1309065501179121664,'菜单管理',1,'formSysMenu',NULL,NULL,120,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181780,1309065501183315970,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181781,1309065501183315970,'新增',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181782,1309065501183315970,'编辑',3,NULL,NULL,NULL,3,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181783,1309065501183315970,'删除',3,NULL,NULL,NULL,4,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181784,1309065501183315970,'权限详情',3,NULL,NULL,NULL,5,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309065501183315971,1309065501179121664,'权限字管理',1,'formSysPermCode',NULL,NULL,125,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181792,1309065501183315971,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181793,1309065501183315971,'新增',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181794,1309065501183315971,'编辑',3,NULL,NULL,NULL,3,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181795,1309065501183315971,'删除',3,NULL,NULL,NULL,4,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181796,1309065501183315971,'权限详情',3,NULL,NULL,NULL,5,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309065501183315972,1309065501179121664,'权限管理',1,'formSysPerm',NULL,NULL,130,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181804,1309065501183315972,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181805,1309065501183315972,'新增模块',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181806,1309065501183315972,'编辑模块',3,NULL,NULL,NULL,3,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181807,1309065501183315972,'删除模块',3,NULL,NULL,NULL,4,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181808,1309065501183315972,'新增权限',3,NULL,NULL,NULL,5,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181809,1309065501183315972,'编辑权限',3,NULL,NULL,NULL,6,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181810,1309065501183315972,'删除权限',3,NULL,NULL,NULL,7,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181811,1309065501183315972,'权限详情',3,NULL,NULL,NULL,8,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309065501183315973,1309065501179121664,'字典管理',1,'formSysDict',NULL,NULL,135,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181822,1309065501183315973,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181823,1309065501183315973,'新增',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181824,1309065501183315973,'编辑',3,NULL,NULL,NULL,3,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181825,1309065501183315973,'删除',3,NULL,NULL,NULL,4,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181826,1309065501183315973,'同步缓存',3,NULL,NULL,NULL,5,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309149272268083200,NULL,'业务管理',0,NULL,NULL,NULL,10,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309149323312762880,NULL,'统计管理',0,NULL,NULL,NULL,20,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309149401033216000,1309149272268083200,'校区管理',1,'formSchool',NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181836,1309149401033216000,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181837,1309149401033216000,'新建',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181838,1309149401033216000,'编辑',3,NULL,NULL,NULL,3,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181839,1309149401033216000,'删除',3,NULL,NULL,NULL,4,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309149467043172352,1309149272268083200,'学生管理',1,'formStudent',NULL,NULL,5,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181841,1309149467043172352,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181842,1309149467043172352,'新建',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181843,1309149467043172352,'编辑',3,NULL,NULL,NULL,3,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181844,1309149467043172352,'删除',3,NULL,NULL,NULL,4,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309149536341463040,1309149272268083200,'课程管理',1,'formCourse',NULL,NULL,10,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181846,1309149536341463040,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181847,1309149536341463040,'新建',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181848,1309149536341463040,'编辑',3,NULL,NULL,NULL,3,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181849,1309149536341463040,'删除',3,NULL,NULL,NULL,4,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309149599981637632,1309149272268083200,'班级管理',1,'formClass',NULL,NULL,15,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181851,1309149599981637632,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181852,1309149599981637632,'设置班级课程',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181853,1309149599981637632,'编辑',3,NULL,NULL,NULL,3,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181854,1309149599981637632,'删除',3,NULL,NULL,NULL,4,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181855,1309149599981637632,'移除',3,NULL,NULL,NULL,5,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181856,1309149599981637632,'移除',3,NULL,NULL,NULL,6,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181857,1309149599981637632,'设置班级学生',3,NULL,NULL,NULL,7,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181858,1309149599981637632,'新建',3,NULL,NULL,NULL,8,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309149688699555840,1309149323312762880,'课程统计',1,'formCourseStats',NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181860,1309149688699555840,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1309149754092949504,1309149323312762880,'学生行为统计',1,'formStudentActionStats',NULL,NULL,5,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181862,1309149754092949504,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181863,1309149754092949504,'学生行为详情',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181864,1309149754092949504,'学生行为详情',3,NULL,NULL,NULL,3,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181865,1309149754092949504,'学生行为详情',3,NULL,NULL,NULL,4,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181866,1309149754092949504,'学生行为详情',3,NULL,NULL,NULL,5,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181867,1309149754092949504,'学生行为详情',3,NULL,NULL,NULL,6,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697313181868,1309149754092949504,'学生行为详情',3,NULL,NULL,NULL,7,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697317376000,1309149754092949504,'学生行为详情',3,NULL,NULL,NULL,8,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697317376001,1309149754092949504,'学生行为详情',3,NULL,NULL,NULL,9,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1381236994243301376,1309065501179121664,'在线用户',1,'formSysLoginUser',NULL,NULL,145,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697317376003,1381236994243301376,'显示',3,NULL,NULL,NULL,1,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_menu` VALUES(1401541697317376004,1381236994243301376,'强制下线',3,NULL,NULL,NULL,2,NULL,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
COMMIT;
-- ----------------------------
-- 全部权限字数据
-- ----------------------------
BEGIN;
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987421,1401541697308987419,'formCreateCourse:formCreateCourse:add',2,'保存',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987415,1401541697308987414,'formEditStudent:formEditStudent',1,'编辑学生',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987406,1401541697308987405,'formStudent:formStudent',1,'学生管理',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181758,1401541697313181753,'formSysUser:fragmentSysUser:listSysUserPermDetail',2,'权限详情',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987394,1401541697308987393,'formSchool:formSchool:formCreateSchool',2,'新建',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181725,NULL,'formSetClassStudent',0,'设置班级学生',140,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181812,NULL,'formSysPerm',0,'权限管理',10800,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181798,1401541697313181797,'formSysPermCode:fragmentSysPermCode',1,'权限字管理',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987396,1401541697308987393,'formSchool:formSchool:delete',2,'删除',20,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987412,1401541697308987411,'formCreateStudent:formCreateStudent:cancel',2,'取消',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181698,NULL,'formCourse',0,'课程管理',80,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697317376005,NULL,'formSysLoginUser',0,'在线用户',11200,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181829,1401541697313181828,'formSysDict:fragmentSysDict:add',2,'新增',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181743,1401541697313181736,'formClass:formClass:formCreateClass',2,'新建',60,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987402,1401541697308987401,'formEditSchool:formEditSchool',1,'编辑校区',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987401,NULL,'formEditSchool',0,'编辑校区',20,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181721,NULL,'formEditClass',0,'编辑班级',130,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987420,1401541697308987419,'formCreateCourse:formCreateCourse:cancel',2,'取消',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181736,1401541697313181735,'formClass:formClass',1,'班级管理',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181754,1401541697313181753,'formSysUser:fragmentSysUser:add',2,'新增',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181723,1401541697313181722,'formEditClass:formEditClass:cancel',2,'取消',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987422,NULL,'formEditCourse',0,'编辑课程',70,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181726,1401541697313181725,'formSetClassStudent:formSetClassStudent',1,'设置班级学生',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181712,1401541697313181706,'formStudentActionStats:formStudentActionStats:formDoCourseDetail',2,'学生行为详情',50,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181732,1401541697313181731,'formEditClassCourseOrder:formEditClassCourseOrder',1,'编辑课程顺序',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181714,1401541697313181706,'formStudentActionStats:formStudentActionStats:formRfreshDetail',2,'学生行为详情',70,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181752,NULL,'formSysUser',0,'用户管理',10000,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987400,1401541697308987398,'formCreateSchool:formCreateSchool:add',2,'保存',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181800,1401541697313181798,'formSysPermCode:fragmentSysPermCode:update',2,'编辑',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181741,1401541697313181736,'formClass:formClass:deleteClassStudent',2,'移除',40,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987393,1401541697308987392,'formSchool:formSchool',1,'校区管理',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987397,NULL,'formCreateSchool',0,'新建校区',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181735,NULL,'formClass',0,'班级管理',170,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181814,1401541697313181813,'formSysPerm:fragmentSysPerm:addPermModule',2,'新增模块',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987404,1401541697308987402,'formEditSchool:formEditSchool:update',2,'保存',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181740,1401541697313181736,'formClass:formClass:deleteClassCourse',2,'移除',30,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181720,1401541697313181718,'formCreateClass:formCreateClass:add',2,'保存',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181708,1401541697313181706,'formStudentActionStats:formStudentActionStats:formBuyVideoDetail',2,'学生行为详情',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987405,NULL,'formStudent',0,'学生管理',30,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987423,1401541697308987422,'formEditCourse:formEditCourse',1,'编辑课程',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181802,1401541697313181798,'formSysPermCode:fragmentSysPermCode:listSysPermCodePermDetail',2,'权限详情',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987414,NULL,'formEditStudent',0,'编辑学生',50,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181828,1401541697313181827,'formSysDict:fragmentSysDict',1,'字典管理',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181719,1401541697313181718,'formCreateClass:formCreateClass:cancel',2,'取消',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181755,1401541697313181753,'formSysUser:fragmentSysUser:update',2,'编辑',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181757,1401541697313181753,'formSysUser:fragmentSysUser:resetPassword',2,'重置密码',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181827,NULL,'formSysDict',0,'字典管理',10900,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181788,1401541697313181786,'formSysMenu:fragmentSysMenu:update',2,'编辑',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987419,1401541697308987418,'formCreateCourse:formCreateCourse',1,'新建课程',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181817,1401541697313181813,'formSysPerm:fragmentSysPerm:addPerm',2,'新增权限',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987399,1401541697308987398,'formCreateSchool:formCreateSchool:cancel',2,'取消',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181816,1401541697313181813,'formSysPerm:fragmentSysPerm:deletePermModule',2,'删除模块',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181820,1401541697313181813,'formSysPerm:fragmentSysPerm:listSysPermPermDetail',2,'权限详情',7,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181733,1401541697313181732,'formEditClassCourseOrder:formEditClassCourseOrder:cancel',2,'取消',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181702,1401541697313181699,'formCourse:formCourse:delete',2,'删除',20,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181707,1401541697313181706,'formStudentActionStats:formStudentActionStats:formBuyCourseDetail',2,'学生行为详情',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181734,1401541697313181732,'formEditClassCourseOrder:formEditClassCourseOrder:updateClassCourse',2,'保存',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181776,1401541697313181771,'formSysRole:fragmentSysRole:listSysRolePermDetail',2,'权限详情',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181787,1401541697313181786,'formSysMenu:fragmentSysMenu:add',2,'新增',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181801,1401541697313181798,'formSysPermCode:fragmentSysPermCode:delete',2,'删除',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181730,1401541697313181729,'formSetClassCourse:formSetClassCourse:addClassCourse',2,'添加',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181729,1401541697313181728,'formSetClassCourse:formSetClassCourse',1,'设置班级课程',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181717,NULL,'formCreateClass',0,'新建班级',120,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181727,1401541697313181726,'formSetClassStudent:formSetClassStudent:addClassStudent',2,'添加',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987411,1401541697308987410,'formCreateStudent:formCreateStudent',1,'新建学生',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697317376006,1401541697317376005,'formSysLoginUser:fragmentLoginUser',1,'在线用户',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987403,1401541697308987402,'formEditSchool:formEditSchool:cancel',2,'取消',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181703,NULL,'formCourseStats',0,'课程统计',90,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181716,1401541697313181715,'formStudentActionDetail:formStudentActionDetail',1,'学生行为详情',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181785,NULL,'formSysMenu',0,'菜单管理',10600,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181704,1401541697313181703,'formCourseStats:formCourseStats',1,'课程统计',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181790,1401541697313181786,'formSysMenu:fragmentSysMenu:listSysMenuPermDetail',2,'权限详情',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987418,NULL,'formCreateCourse',0,'新建课程',60,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181709,1401541697313181706,'formStudentActionStats:formStudentActionStats:formBuyFlowerDetail',2,'学生行为详情',20,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181775,1401541697313181771,'formSysRole:fragmentSysRole:delete',2,'删除',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987407,1401541697308987406,'formStudent:formStudent:formCreateStudent',2,'新建',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181797,NULL,'formSysPermCode',0,'权限字管理',10700,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987408,1401541697308987406,'formStudent:formStudent:formEditStudent',2,'编辑',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181777,1401541697313181772,'formSysRole:fragmentSysRoleUser:addUserRole',2,'授权用户',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181815,1401541697313181813,'formSysPerm:fragmentSysPerm:updatePermModule',2,'编辑模块',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987395,1401541697308987393,'formSchool:formSchool:formEditSchool',2,'编辑',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181728,NULL,'formSetClassCourse',0,'设置班级课程',150,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181770,NULL,'formSysRole',0,'角色管理',10200,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181718,1401541697313181717,'formCreateClass:formCreateClass',1,'新建班级',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181697,1401541697308987423,'formEditCourse:formEditCourse:update',2,'保存',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181831,1401541697313181828,'formSysDict:fragmentSysDict:delete',2,'删除',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181715,NULL,'formStudentActionDetail',0,'学生行为详情',110,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181737,1401541697313181736,'formClass:formClass:formSetClassCourse',2,'设置班级课程',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181701,1401541697313181699,'formCourse:formCourse:formEditCourse',2,'编辑',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181739,1401541697313181736,'formClass:formClass:delete',2,'删除',20,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181731,NULL,'formEditClassCourseOrder',0,'编辑课程顺序',160,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987410,NULL,'formCreateStudent',0,'新建学生',40,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987398,1401541697308987397,'formCreateSchool:formCreateSchool',1,'新建校区',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987417,1401541697308987415,'formEditStudent:formEditStudent:update',2,'保存',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181832,1401541697313181828,'formSysDict:fragmentSysDict:reloadCache',2,'同步缓存',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181799,1401541697313181798,'formSysPermCode:fragmentSysPermCode:add',2,'新增',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181819,1401541697313181813,'formSysPerm:fragmentSysPerm:deletePerm',2,'删除权限',6,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181713,1401541697313181706,'formStudentActionStats:formStudentActionStats:formWatchVideoDetail',2,'学生行为详情',60,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181771,1401541697313181770,'formSysRole:fragmentSysRole',1,'角色管理',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181818,1401541697313181813,'formSysPerm:fragmentSysPerm:updatePerm',2,'编辑权限',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697317376007,1401541697317376006,'formSysLoginUser:fragmentLoginUser:delete',2,'强制下线',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181753,1401541697313181752,'formSysUser:fragmentSysUser',1,'用户管理',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181724,1401541697313181722,'formEditClass:formEditClass:update',2,'保存',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181700,1401541697313181699,'formCourse:formCourse:formCreateCourse',2,'新建',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181789,1401541697313181786,'formSysMenu:fragmentSysMenu:delete',2,'删除',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181778,1401541697313181772,'formSysRole:fragmentSysRoleUser:deleteUserRole',2,'移除用户',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987416,1401541697308987415,'formEditStudent:formEditStudent:cancel',2,'取消',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181696,1401541697308987423,'formEditCourse:formEditCourse:cancel',2,'取消',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987392,NULL,'formSchool',0,'校区管理',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181699,1401541697313181698,'formCourse:formCourse',1,'课程管理',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181710,1401541697313181706,'formStudentActionStats:formStudentActionStats:formBuyPaperDetail',2,'学生行为详情',30,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181706,1401541697313181705,'formStudentActionStats:formStudentActionStats',1,'学生行为统计',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181722,1401541697313181721,'formEditClass:formEditClass',1,'编辑班级',0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181711,1401541697313181706,'formStudentActionStats:formStudentActionStats:formBuyCoinDetail',2,'学生行为详情',40,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181756,1401541697313181753,'formSysUser:fragmentSysUser:delete',2,'删除',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181786,1401541697313181785,'formSysMenu:fragmentSysMenu',1,'菜单管理',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181830,1401541697313181828,'formSysDict:fragmentSysDict:update',2,'编辑',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987409,1401541697308987406,'formStudent:formStudent:delete',2,'删除',20,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181813,1401541697313181812,'formSysPerm:fragmentSysPerm',1,'权限管理',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181772,1401541697313181770,'formSysRole:fragmentSysRoleUser',1,'用户授权',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181773,1401541697313181771,'formSysRole:fragmentSysRole:add',2,'新增',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181774,1401541697313181771,'formSysRole:fragmentSysRole:update',2,'编辑',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697308987413,1401541697308987411,'formCreateStudent:formCreateStudent:add',2,'保存',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181738,1401541697313181736,'formClass:formClass:formEditClass',2,'编辑',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181742,1401541697313181736,'formClass:formClass:formSetClassStudent',2,'设置班级学生',50,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_code` VALUES(1401541697313181705,NULL,'formStudentActionStats',0,'学生行为统计',100,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
COMMIT;
-- ----------------------------
-- 全部菜单和权限字关系数据
-- ----------------------------
BEGIN;
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181746,1401541697313181753);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181747,1401541697313181754);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181748,1401541697313181755);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181749,1401541697313181756);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181750,1401541697313181757);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181751,1401541697313181758);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181762,1401541697313181771);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181767,1401541697313181772);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181763,1401541697313181773);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181764,1401541697313181774);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181765,1401541697313181775);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181768,1401541697313181777);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181769,1401541697313181778);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181766,1401541697313181776);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181780,1401541697313181786);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181782,1401541697313181788);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181781,1401541697313181787);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181783,1401541697313181789);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181784,1401541697313181790);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181792,1401541697313181798);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181793,1401541697313181799);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181794,1401541697313181800);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181795,1401541697313181801);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181796,1401541697313181802);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181804,1401541697313181813);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181805,1401541697313181814);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181806,1401541697313181815);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181807,1401541697313181816);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181808,1401541697313181817);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181809,1401541697313181818);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181810,1401541697313181819);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181811,1401541697313181820);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1309065501183315973,1401541697313181828);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1309065501183315973,1401541697313181829);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1309065501183315973,1401541697313181830);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1309065501183315973,1401541697313181831);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1309065501183315973,1401541697313181832);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181822,1401541697313181828);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181823,1401541697313181829);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181824,1401541697313181830);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181825,1401541697313181831);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181826,1401541697313181832);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181836,1401541697308987393);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181837,1401541697308987394);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181837,1401541697308987397);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181837,1401541697308987398);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181837,1401541697308987399);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181837,1401541697308987400);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181838,1401541697308987395);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181838,1401541697308987401);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181838,1401541697308987402);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181838,1401541697308987403);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181838,1401541697308987404);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181839,1401541697308987396);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181841,1401541697308987406);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181842,1401541697308987407);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181842,1401541697308987410);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181842,1401541697308987411);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181842,1401541697308987412);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181842,1401541697308987413);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181843,1401541697308987408);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181843,1401541697308987414);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181843,1401541697308987415);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181843,1401541697308987416);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181843,1401541697308987417);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181844,1401541697308987409);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181846,1401541697313181699);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181847,1401541697313181700);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181847,1401541697308987418);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181847,1401541697308987419);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181847,1401541697308987420);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181847,1401541697308987421);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181848,1401541697313181701);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181848,1401541697308987422);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181848,1401541697308987423);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181848,1401541697313181696);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181848,1401541697313181697);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181849,1401541697313181702);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181851,1401541697313181736);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181852,1401541697313181737);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181852,1401541697313181728);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181852,1401541697313181729);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181852,1401541697313181730);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181853,1401541697313181738);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181853,1401541697313181721);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181853,1401541697313181722);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181853,1401541697313181723);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181853,1401541697313181724);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181854,1401541697313181739);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181855,1401541697313181740);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181856,1401541697313181741);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181857,1401541697313181742);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181857,1401541697313181725);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181857,1401541697313181726);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181857,1401541697313181727);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181858,1401541697313181743);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181858,1401541697313181717);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181858,1401541697313181718);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181858,1401541697313181719);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181858,1401541697313181720);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181860,1401541697313181704);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181862,1401541697313181706);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181863,1401541697313181707);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181863,1401541697313181715);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181863,1401541697313181716);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181864,1401541697313181708);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181864,1401541697313181715);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181864,1401541697313181716);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181865,1401541697313181709);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181865,1401541697313181715);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181865,1401541697313181716);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181866,1401541697313181710);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181866,1401541697313181715);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181866,1401541697313181716);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181867,1401541697313181711);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181867,1401541697313181715);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181867,1401541697313181716);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181868,1401541697313181712);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181868,1401541697313181715);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697313181868,1401541697313181716);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697317376000,1401541697313181713);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697317376000,1401541697313181715);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697317376000,1401541697313181716);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697317376001,1401541697313181714);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697317376001,1401541697313181715);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697317376001,1401541697313181716);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697317376003,1401541697317376006);
INSERT INTO `zz_sys_menu_perm_code` VALUES(1401541697317376004,1401541697317376007);
COMMIT;
-- ----------------------------
-- 全部权限资源模块数据
-- ----------------------------
BEGIN;
INSERT INTO `zz_sys_perm_module` VALUES(1309065501191704577,NULL,'缺省分组',0,3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1309065501191704576,NULL,'系统配置',0,2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1309065501174927363,NULL,'用户权限',0,1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015991,1309065501191704576,'字典管理',0,0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015872,1309065501191704577,'课程数据',1,0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015882,1309065501191704577,'校区数据',1,5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015890,1309065501191704577,'学生数据',1,10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015898,1309065501174927363,'用户管理',1,0,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015910,1309065501191704577,'班级数据',1,15,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015928,1309065501191704577,'课程统计',1,20,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015934,1309065501191704577,'学生行为统计',1,25,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015940,1309065501191704577,'学生行为流水',1,30,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015948,1309065501174927363,'角色管理',1,10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015960,1309065501174927363,'菜单管理',1,15,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015968,1309065501174927363,'权限字管理',1,20,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015976,1309065501174927363,'权限模块管理',1,25,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015982,1309065501174927363,'权限资源管理',1,30,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015992,1401541697288015991,'行政区划',1,1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288015997,1401541697288015991,'年级',1,2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm_module` VALUES(1401541697288016002,1309065501191704576,'在线用户',1,5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
COMMIT;
-- ----------------------------
-- 全部权限资源数据
-- ----------------------------
BEGIN;
INSERT INTO `zz_sys_perm` VALUES(1401541697288015873,1401541697288015872,'新增','/admin/app/course/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015874,1401541697288015872,'编辑','/admin/app/course/update',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015875,1401541697288015872,'删除','/admin/app/course/delete',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015876,1401541697288015872,'显示列表','/admin/app/course/list',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015877,1401541697288015872,'导出','/admin/app/course/export',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015878,1401541697288015872,'详情','/admin/app/course/view',6,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015879,1401541697288015872,'打印','/admin/app/course/print',7,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015880,1401541697288015872,'课程数据文件上传','/admin/app/course/upload',8,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015881,1401541697288015872,'课程数据文件下载','/admin/app/course/download',9,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015883,1401541697288015882,'新增','/admin/app/schoolInfo/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015884,1401541697288015882,'编辑','/admin/app/schoolInfo/update',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015885,1401541697288015882,'删除','/admin/app/schoolInfo/delete',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015886,1401541697288015882,'显示列表','/admin/app/schoolInfo/list',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015887,1401541697288015882,'导出','/admin/app/schoolInfo/export',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015888,1401541697288015882,'详情','/admin/app/schoolInfo/view',6,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015889,1401541697288015882,'打印','/admin/app/schoolInfo/print',7,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015891,1401541697288015890,'新增','/admin/app/student/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015892,1401541697288015890,'编辑','/admin/app/student/update',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015893,1401541697288015890,'删除','/admin/app/student/delete',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015894,1401541697288015890,'显示列表','/admin/app/student/list',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015895,1401541697288015890,'导出','/admin/app/student/export',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015896,1401541697288015890,'详情','/admin/app/student/view',6,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015897,1401541697288015890,'打印','/admin/app/student/print',7,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015899,1401541697288015898,'新增','/admin/upms/sysUser/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015900,1401541697288015898,'编辑','/admin/upms/sysUser/update',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015901,1401541697288015898,'删除','/admin/upms/sysUser/delete',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015902,1401541697288015898,'显示列表','/admin/upms/sysUser/list',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015903,1401541697288015898,'导出','/admin/upms/sysUser/export',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015904,1401541697288015898,'详情','/admin/upms/sysUser/view',6,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015905,1401541697288015898,'打印','/admin/upms/sysUser/print',7,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015906,1401541697288015898,'重置密码','/admin/upms/sysUser/resetPassword',8,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015907,1401541697288015898,'用户权限资源分配详情','/admin/upms/sysUser/listSysPermWithDetail',9,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015908,1401541697288015898,'用户权限字分配详情','/admin/upms/sysUser/listSysPermCodeWithDetail',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015909,1401541697288015898,'用户菜单分配详情','/admin/upms/sysUser/listSysMenuWithDetail',11,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015911,1401541697288015910,'新增','/admin/app/studentClass/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015912,1401541697288015910,'编辑','/admin/app/studentClass/update',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015913,1401541697288015910,'删除','/admin/app/studentClass/delete',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015914,1401541697288015910,'显示列表','/admin/app/studentClass/list',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015915,1401541697288015910,'导出','/admin/app/studentClass/export',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015916,1401541697288015910,'详情','/admin/app/studentClass/view',6,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015917,1401541697288015910,'打印','/admin/app/studentClass/print',7,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015918,1401541697288015910,'新增班级课程','/admin/app/studentClass/addClassCourse',8,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015919,1401541697288015910,'详情班级课程','/admin/app/studentClass/viewClassCourse',9,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015920,1401541697288015910,'编辑班级课程','/admin/app/studentClass/updateClassCourse',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015921,1401541697288015910,'移除班级课程','/admin/app/studentClass/deleteClassCourse',11,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015922,1401541697288015910,'班级课程列表','/admin/app/studentClass/listClassCourse',12,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015923,1401541697288015910,'班级课程未关联列表','/admin/app/studentClass/listNotInClassCourse',13,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015924,1401541697288015910,'新增班级学生','/admin/app/studentClass/addClassStudent',14,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015925,1401541697288015910,'移除班级学生','/admin/app/studentClass/deleteClassStudent',15,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015926,1401541697288015910,'班级学生列表','/admin/app/studentClass/listClassStudent',16,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015927,1401541697288015910,'班级学生未关联列表','/admin/app/studentClass/listNotInClassStudent',17,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015929,1401541697288015928,'分组列表','/admin/app/courseTransStats/listWithGroup',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015930,1401541697288015928,'显示列表','/admin/app/courseTransStats/list',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015931,1401541697288015928,'导出','/admin/app/courseTransStats/export',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015932,1401541697288015928,'详情','/admin/app/courseTransStats/view',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015933,1401541697288015928,'打印','/admin/app/courseTransStats/print',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015935,1401541697288015934,'分组列表','/admin/app/studentActionStats/listWithGroup',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015936,1401541697288015934,'显示列表','/admin/app/studentActionStats/list',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015937,1401541697288015934,'导出','/admin/app/studentActionStats/export',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015938,1401541697288015934,'详情','/admin/app/studentActionStats/view',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015939,1401541697288015934,'打印','/admin/app/studentActionStats/print',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015941,1401541697288015940,'新增','/admin/app/studentActionTrans/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015942,1401541697288015940,'编辑','/admin/app/studentActionTrans/update',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015943,1401541697288015940,'删除','/admin/app/studentActionTrans/delete',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015944,1401541697288015940,'显示列表','/admin/app/studentActionTrans/list',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015945,1401541697288015940,'导出','/admin/app/studentActionTrans/export',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015946,1401541697288015940,'详情','/admin/app/studentActionTrans/view',6,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015947,1401541697288015940,'打印','/admin/app/studentActionTrans/print',7,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015949,1401541697288015948,'新增','/admin/upms/sysRole/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015950,1401541697288015948,'编辑','/admin/upms/sysRole/update',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015951,1401541697288015948,'删除','/admin/upms/sysRole/delete',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015952,1401541697288015948,'显示列表','/admin/upms/sysRole/list',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015953,1401541697288015948,'详情','/admin/upms/sysRole/view',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015954,1401541697288015948,'授权用户','/admin/upms/sysRole/addUserRole',6,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015955,1401541697288015948,'移除用户','/admin/upms/sysRole/deleteUserRole',7,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015956,1401541697288015948,'角色用户列表','/admin/upms/sysRole/listUserRole',8,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015957,1401541697288015948,'角色未添加用户列表','/admin/upms/sysRole/listNotInUserRole',9,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015958,1401541697288015948,'角色权限资源分配详情','/admin/upms/sysRole/listSysPermWithDetail',10,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015959,1401541697288015948,'角色权限字分配详情','/admin/upms/sysRole/listSysPermCodeWithDetail',11,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015961,1401541697288015960,'新增','/admin/upms/sysMenu/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015962,1401541697288015960,'删除','/admin/upms/sysMenu/delete',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015963,1401541697288015960,'编辑','/admin/upms/sysMenu/update',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015964,1401541697288015960,'显示列表','/admin/upms/sysMenu/list',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015965,1401541697288015960,'详情','/admin/upms/sysMenu/view',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015966,1401541697288015960,'菜单权限资源分配详情','/admin/upms/sysMenu/listSysPermWithDetail',6,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015967,1401541697288015960,'菜单用户分配详情','/admin/upms/sysMenu/listSysUserWithDetail',7,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015969,1401541697288015968,'新增','/admin/upms/sysPermCode/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015970,1401541697288015968,'编辑','/admin/upms/sysPermCode/update',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015971,1401541697288015968,'删除','/admin/upms/sysPermCode/delete',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015972,1401541697288015968,'显示列表','/admin/upms/sysPermCode/list',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015973,1401541697288015968,'详情','/admin/upms/sysPermCode/view',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015974,1401541697288015968,'权限字用户分配详情','/admin/upms/sysPermCode/listSysUserWithDetail',6,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015975,1401541697288015968,'权限字角色分配详情','/admin/upms/sysPermCode/listSysRoleWithDetail',7,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015977,1401541697288015976,'新增','/admin/upms/sysPermModule/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015978,1401541697288015976,'编辑','/admin/upms/sysPermModule/update',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015979,1401541697288015976,'删除','/admin/upms/sysPermModule/delete',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015980,1401541697288015976,'显示列表','/admin/upms/sysPermModule/list',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015981,1401541697288015976,'显示全部','/admin/upms/sysPermModule/listAll',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015983,1401541697288015982,'新增','/admin/upms/sysPerm/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015984,1401541697288015982,'编辑','/admin/upms/sysPerm/update',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015985,1401541697288015982,'删除','/admin/upms/sysPerm/delete',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015986,1401541697288015982,'显示列表','/admin/upms/sysPerm/list',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015987,1401541697288015982,'详情','/admin/upms/sysPerm/view',5,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015988,1401541697288015982,'权限资源用户分配详情','/admin/upms/sysPerm/listSysUserWithDetail',6,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015989,1401541697288015982,'权限资源角色分配详情','/admin/upms/sysPerm/listSysRoleWithDetail',7,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015990,1401541697288015982,'权限资源菜单分配详情','/admin/upms/sysPerm/listSysMenuWithDetail',8,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015993,1401541697288015992,'新增','/admin/app/areaCode/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015994,1401541697288015992,'编辑','/admin/app/areaCode/update',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015995,1401541697288015992,'删除','/admin/app/areaCode/delete',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015996,1401541697288015992,'同步缓存','/admin/app/areaCode/reloadCachedData',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015998,1401541697288015997,'新增','/admin/app/grade/add',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288015999,1401541697288015997,'编辑','/admin/app/grade/update',2,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288016000,1401541697288015997,'删除','/admin/app/grade/delete',3,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288016001,1401541697288015997,'同步缓存','/admin/app/grade/reloadCachedData',4,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288016003,1401541697288016002,'显示列表','/admin/upms/loginUser/list',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
INSERT INTO `zz_sys_perm` VALUES(1401541697288016004,1401541697288016002,'删除','/admin/upms/loginUser/delete',1,1401541697321570305,CURDATE(),1401541697321570305,CURDATE(),1);
COMMIT;
-- ----------------------------
-- 全部权限字和权限资源关系数据
-- ----------------------------
BEGIN;
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987393,1401541697288015886);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987396,1401541697288015885);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987400,1401541697288015883);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987402,1401541697288015888);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987404,1401541697288015884);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987406,1401541697288015894);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987409,1401541697288015893);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987413,1401541697288015891);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987415,1401541697288015896);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987417,1401541697288015892);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987421,1401541697288015880);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987421,1401541697288015873);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987423,1401541697288015881);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697308987423,1401541697288015878);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181697,1401541697288015880);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181697,1401541697288015874);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181699,1401541697288015881);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181699,1401541697288015876);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181702,1401541697288015875);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181704,1401541697288015929);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181704,1401541697288015930);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181706,1401541697288015935);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181706,1401541697288015936);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181716,1401541697288015944);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181720,1401541697288015911);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181722,1401541697288015916);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181724,1401541697288015912);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181726,1401541697288015927);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181727,1401541697288015924);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181729,1401541697288015923);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181730,1401541697288015918);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181732,1401541697288015919);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181734,1401541697288015920);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181736,1401541697288015914);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181736,1401541697288015922);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181736,1401541697288015926);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181739,1401541697288015913);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181740,1401541697288015921);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181741,1401541697288015925);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181753,1401541697288015902);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181753,1401541697288015903);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181754,1401541697288015899);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181754,1401541697288015952);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181755,1401541697288015904);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181755,1401541697288015900);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181755,1401541697288015905);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181755,1401541697288015952);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181756,1401541697288015901);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181757,1401541697288015906);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181758,1401541697288015909);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181758,1401541697288015908);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181758,1401541697288015907);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181771,1401541697288015952);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181773,1401541697288015949);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181773,1401541697288015964);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181774,1401541697288015953);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181774,1401541697288015950);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181774,1401541697288015964);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181776,1401541697288015959);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181776,1401541697288015958);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181775,1401541697288015951);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181772,1401541697288015956);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181777,1401541697288015954);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181777,1401541697288015957);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181778,1401541697288015955);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181786,1401541697288015964);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181787,1401541697288015961);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181787,1401541697288015972);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181788,1401541697288015965);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181788,1401541697288015963);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181788,1401541697288015972);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181789,1401541697288015962);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181790,1401541697288015966);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181790,1401541697288015967);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181798,1401541697288015972);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181799,1401541697288015969);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181799,1401541697288015981);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181800,1401541697288015973);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181800,1401541697288015970);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181800,1401541697288015981);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181801,1401541697288015971);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181802,1401541697288015974);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181802,1401541697288015975);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181813,1401541697288015980);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181813,1401541697288015981);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181813,1401541697288015986);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181814,1401541697288015977);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181815,1401541697288015978);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181816,1401541697288015979);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181817,1401541697288015983);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181818,1401541697288015987);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181818,1401541697288015984);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181819,1401541697288015985);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181820,1401541697288015988);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181820,1401541697288015989);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181820,1401541697288015990);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181828,1401541697288015993);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181828,1401541697288015994);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181828,1401541697288015995);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181828,1401541697288015996);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181828,1401541697288015998);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181828,1401541697288015999);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181828,1401541697288016000);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697313181828,1401541697288016001);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697317376006,1401541697288016003);
INSERT INTO `zz_sys_perm_code_perm` VALUES(1401541697317376007,1401541697288016004);
COMMIT;
-- ----------------------------
-- 全部白名单权限资源数据
-- ----------------------------
BEGIN;
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/upms/login/getLoginInfo','登录模块','获取登录信息');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/areaCode/listDict','行政区划','行政区划列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/areaCode/listAll','行政区划','字典全部列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/areaCode/listDictByIds','行政区划','行政区划批量Id列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/areaCode/listDictByParentId','行政区划','行政区划过滤列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/course/listDict','课程数据','课程字典列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/course/listDictByIds','课程数据','课程字典批量Id列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/grade/listDict','年级','字典列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/grade/listAll','年级','字典全部列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/grade/listDictByIds','年级','字典批量Id列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/schoolInfo/listDict','校区数据','校区字典列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/schoolInfo/listDictByIds','校区数据','校区字典批量Id列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/student/listDict','学生数据','学生字典列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/app/student/listDictByIds','学生数据','学生字典批量Id列表');
INSERT INTO `zz_sys_perm_whitelist` VALUES ('/admin/upms/login/doLogout','登录模块','退出登陆');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;