diff --git a/web/src/main/java/com/ibeetl/jlw/conf/KeyExpiredListener.java b/web/src/main/java/com/ibeetl/jlw/conf/KeyExpiredListener.java index 4a16a5c3..7ca48948 100644 --- a/web/src/main/java/com/ibeetl/jlw/conf/KeyExpiredListener.java +++ b/web/src/main/java/com/ibeetl/jlw/conf/KeyExpiredListener.java @@ -57,10 +57,12 @@ public class KeyExpiredListener extends KeyExpirationEventMessageListener { try { String messageAsString = new String(message.getBody(), StandardCharsets.UTF_8); - log.info("有用户的token到期:{}", messageAsString); // 用户token到期事件 if (messageAsString.indexOf(TOKEN_KEY) == 0) { + + log.info("有用户的token到期:{}", messageAsString); + String token = messageAsString.replace(TOKEN_KEY + ":", ""); List audience = JWT.decode(token).getAudience(); Map claims = JWT.decode(token).getClaims(); diff --git a/web/src/main/java/com/ibeetl/jlw/entity/dto/StudentBatchImportAdminDTO.java b/web/src/main/java/com/ibeetl/jlw/entity/dto/StudentBatchImportAdminDTO.java new file mode 100644 index 00000000..9ff0f109 --- /dev/null +++ b/web/src/main/java/com/ibeetl/jlw/entity/dto/StudentBatchImportAdminDTO.java @@ -0,0 +1,108 @@ +package com.ibeetl.jlw.entity.dto; + +import com.ibeetl.admin.core.annotation.ExcelRequireIgnore; +import com.ibeetl.admin.core.util.excelGroupValidation.ExcelFile; +import com.ibeetl.jlw.entity.Student; +import com.ibeetl.jlw.enums.GenderEnum; +import lombok.Data; +import lombok.ToString; +import lombok.experimental.FieldNameConstants; + +import java.util.Date; +import java.util.function.Function; + +import static cn.hutool.core.util.ObjectUtil.defaultIfNull; + +/** + * 功能描述:
+ * 学生管理, 导入实体 + * 超级管理员导入 + * + * @Author: lx + * @Date: 2023/2/5 23:50 + */ +@Data +@FieldNameConstants +@ToString +@ExcelFile(fileHeadTemplate = "universitiesCollegesName|universityFacultyName|universitySystemName|classId|studentName|studentSn|studentMobile|studentEmail", + fileMappingTemplate = "universitiesCollegesName=院校名称|universityFacultyName=院系名称|universitySystemName=专业名称|classId=班级名称|studentName=学生姓名|studentSn=学号|studentMobile=电话|studentEmail=邮箱", + datasheetHidden = true, enableDataValidation = true) +public class StudentBatchImportAdminDTO { + + /** + * 院校名称,@ExcelRequireIgnore 用于忽略必传字段。这样导入接口可以共用一个。 + */ + @ExcelRequireIgnore + private String universitiesCollegesName ; + + /** + * 院系名称 + */ +// @ExcelValidation(datasourceMethod = "com.ibeetl.jlw.service.SchoolClassService.getAllSchoolClassWithOrgId") + private String universityFacultyName ; + /** + * 专业名称 + */ +// @ExcelValidation(datasourceMethod = "com.ibeetl.jlw.service.SchoolClassService.getAllSchoolClassWithOrgId") + private String universitySystemName ; + /** + * 班级名称 + */ +// @ExcelValidation(datasourceMethod = "com.ibeetl.jlw.service.SchoolClassService.getAllSchoolClassWithOrgId") + private String classId ; + /** + * 学生姓名 + */ + private String studentName ; + /** + * 学号 + */ + private String studentSn ; + + /** + * 电话 + */ + private String studentMobile ; + + /** + * 邮箱 + */ + @ExcelRequireIgnore + private String studentEmail ; + + /** + * 类型转换 + * + * @param importPojo 导入的数据 + * @param function 二次加工 + * @return + */ + public static Student pojo(StudentBatchImportAdminDTO importPojo, Function classIdFunction, Function function) { + Student build = Student.builder() +// .classId(longValuesOf(importPojo.getClassId())) + .classId(classIdFunction.apply(importPojo.getClassId())) + .studentName(importPojo.getStudentName()) + .studentSn(importPojo.getStudentSn()) + .studentMobile(importPojo.getStudentMobile()) + .studentEmail(importPojo.getStudentEmail()) + .studentStatus(1) + .studentGender(GenderEnum.UN_KNOW) + .studentPassword("123qwe") + .addTime(new Date()) + .codeFrom("导入") + .build(); + + return function.apply(build); + } + + /** + * 类型转换 + * + * @param importPojo 导入的数据 + * @return + */ + public static Student pojo(StudentBatchImportAdminDTO importPojo) { + return pojo(importPojo, o -> Long.valueOf(defaultIfNull(o, "-1")), e -> e); + } + +} diff --git a/web/src/main/java/com/ibeetl/jlw/entity/dto/StudentBatchImportDTO.java b/web/src/main/java/com/ibeetl/jlw/entity/dto/StudentBatchImportUniAdminDTO.java similarity index 67% rename from web/src/main/java/com/ibeetl/jlw/entity/dto/StudentBatchImportDTO.java rename to web/src/main/java/com/ibeetl/jlw/entity/dto/StudentBatchImportUniAdminDTO.java index f7e93743..9b711eee 100644 --- a/web/src/main/java/com/ibeetl/jlw/entity/dto/StudentBatchImportDTO.java +++ b/web/src/main/java/com/ibeetl/jlw/entity/dto/StudentBatchImportUniAdminDTO.java @@ -16,6 +16,7 @@ import static cn.hutool.core.util.ObjectUtil.defaultIfNull; /** * 功能描述:
* 学生管理, 导入实体 + * 院校管理员导入,这里不需要院校名称 * * @Author: lx * @Date: 2023/2/5 23:50 @@ -23,11 +24,21 @@ import static cn.hutool.core.util.ObjectUtil.defaultIfNull; @Data @FieldNameConstants @ToString -@ExcelFile(fileHeadTemplate = "classId|studentName|studentSn|studentMobile|studentEmail", - fileMappingTemplate = "classId=班级名称|studentName=学生姓名|studentSn=学号|studentMobile=电话|studentEmail=邮箱", +@ExcelFile(fileHeadTemplate = "universityFacultyName|universitySystemName|classId|studentName|studentSn|studentMobile|studentEmail", + fileMappingTemplate = "universityFacultyName=院系名称|universitySystemName=专业名称|classId=班级名称|studentName=学生姓名|studentSn=学号|studentMobile=电话|studentEmail=邮箱", datasheetHidden = true, enableDataValidation = true) -public class StudentBatchImportDTO { +public class StudentBatchImportUniAdminDTO { + /** + * 院系名称 + */ +// @ExcelValidation(datasourceMethod = "com.ibeetl.jlw.service.SchoolClassService.getAllSchoolClassWithOrgId") + private String universityFacultyName ; + /** + * 专业名称 + */ +// @ExcelValidation(datasourceMethod = "com.ibeetl.jlw.service.SchoolClassService.getAllSchoolClassWithOrgId") + private String universitySystemName ; /** * 班级名称 */ @@ -60,7 +71,7 @@ public class StudentBatchImportDTO { * @param function 二次加工 * @return */ - public static Student pojo(StudentBatchImportDTO importPojo, Function classIdFunction, Function function) { + public static Student pojo(StudentBatchImportUniAdminDTO importPojo, Function classIdFunction, Function function) { Student build = Student.builder() // .classId(longValuesOf(importPojo.getClassId())) .classId(classIdFunction.apply(importPojo.getClassId())) @@ -84,7 +95,7 @@ public class StudentBatchImportDTO { * @param importPojo 导入的数据 * @return */ - public static Student pojo(StudentBatchImportDTO importPojo) { + public static Student pojo(StudentBatchImportUniAdminDTO importPojo) { return pojo(importPojo, o -> Long.valueOf(defaultIfNull(o, "-1")), e -> e); } diff --git a/web/src/main/java/com/ibeetl/jlw/service/SchoolClassService.java b/web/src/main/java/com/ibeetl/jlw/service/SchoolClassService.java index 6d117afa..9d35941e 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/SchoolClassService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/SchoolClassService.java @@ -1,6 +1,5 @@ package com.ibeetl.jlw.service; - import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Assert; import cn.hutool.core.util.RandomUtil; @@ -10,18 +9,22 @@ import com.ibeetl.admin.core.service.CoreBaseService; import com.ibeetl.admin.core.util.PlatformException; import com.ibeetl.jlw.dao.SchoolClassDao; import com.ibeetl.jlw.entity.SchoolClass; +import com.ibeetl.jlw.entity.UniversitiesColleges; import com.ibeetl.jlw.web.query.SchoolClassQuery; import org.beetl.sql.core.SqlId; import org.beetl.sql.core.engine.PageQuery; import org.beetl.sql.core.query.interfacer.StrongValue; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; +import static cn.hutool.core.collection.CollUtil.getFirst; import static cn.hutool.core.util.ObjectUtil.defaultIfBlank; import static com.ibeetl.admin.core.util.ListUtils.getDuplicateElements; @@ -35,6 +38,9 @@ import static com.ibeetl.admin.core.util.ListUtils.getDuplicateElements; public class SchoolClassService extends CoreBaseService{ @Autowired private SchoolClassDao schoolClassDao; + @Autowired + @Lazy + private UniversitiesCollegesService universitiesCollegesService; public PageQueryqueryByCondition(PageQuery query){ PageQuery ret = schoolClassDao.queryByCondition(query); @@ -131,4 +137,77 @@ public class SchoolClassService extends CoreBaseService{ return SpringUtil.getBean(SchoolClassDao.class).getAllSchoolClass(null); } + public SchoolClass getByName(String name, Long orgId) { + SchoolClassQuery query = new SchoolClassQuery(); + query.setClassStatus(1); + query.setClassName(name.trim()); + + if (orgId != null) { + query.setOrgId(orgId); + } + return getFirst(getValuesByQueryNotWithPermission(query)); + } + + public SchoolClass getByName (String name){ + return getByName(name, null); + } + + /** + * 通过名称查询数据,没有查询到的话,则插入数据,并返回给前端这条插入的数据 + * @param name + * @param orgId + * @return + */ + public SchoolClass getByNameOrCreate(String name, Long orgId, Long userId, Long universityFacultyId, Long universitySystemId) { + SchoolClass schoolClass = getByName(name, orgId); + + if (schoolClass != null) { + return schoolClass; + } + + // 根据机构ID查找是否已经创建过的班级,直接取之前的部分数据,作为插入的数据 + SchoolClassQuery schoolClassQuery = new SchoolClassQuery(); + schoolClassQuery.setOrgId(orgId); + SchoolClass anyOne = getFirst(getValuesByQueryNotWithPermission(schoolClassQuery)); + + // 根据名字未查询到数据的话,就插入院系表 + if (anyOne != null) { + SchoolClass insertSchoolClass = new SchoolClass(); + insertSchoolClass.setUniversitiesCollegesId(anyOne.getUniversitiesCollegesId()); + insertSchoolClass.setUniversityFacultyId(anyOne.getUniversityFacultyId()); + insertSchoolClass.setUniversitySystemId(anyOne.getUniversitySystemId()); + insertSchoolClass.setClassName(name); + insertSchoolClass.setClassSn(RandomUtil.randomNumbers(6)); + insertSchoolClass.setClassStatus(1); + insertSchoolClass.setAddTime(new Date()); + insertSchoolClass.setOrgId(orgId); + insertSchoolClass.setUserId(userId); + + insert(insertSchoolClass); + return insertSchoolClass; + } + // 如果没有老数据,则就按照最简单的数据进行插入,后期再进各个模块修改详细数据 + else { + + // 通过机构ID查询院校信息 + UniversitiesColleges universitiesColleges = universitiesCollegesService.getByOrgId(orgId); + + SchoolClass insertSchoolClass = new SchoolClass(); + + if (universitiesColleges != null) { + insertSchoolClass.setUniversitiesCollegesId(universitiesColleges.getUniversitiesCollegesId()); + } + insertSchoolClass.setUniversityFacultyId(universityFacultyId); + insertSchoolClass.setUniversitySystemId(universitySystemId); + insertSchoolClass.setClassName(name); + insertSchoolClass.setClassSn(RandomUtil.randomNumbers(6)); + insertSchoolClass.setClassStatus(1); + insertSchoolClass.setAddTime(new Date()); + insertSchoolClass.setOrgId(orgId); + insertSchoolClass.setUserId(userId); + + insert(insertSchoolClass); + return insertSchoolClass; + } + } } \ No newline at end of file diff --git a/web/src/main/java/com/ibeetl/jlw/service/StudentService.java b/web/src/main/java/com/ibeetl/jlw/service/StudentService.java index 1b47c570..da22035f 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/StudentService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/StudentService.java @@ -23,7 +23,6 @@ import com.ibeetl.admin.core.web.JsonReturnCode; import com.ibeetl.jlw.dao.SchoolClassDao; import com.ibeetl.jlw.dao.StudentDao; import com.ibeetl.jlw.entity.*; -import com.ibeetl.jlw.entity.dto.StudentBatchImportDTO; import com.ibeetl.jlw.entity.vo.StudentLogAnalysisVO; import com.ibeetl.jlw.entity.vo.StudentLoginLogVO; import com.ibeetl.jlw.entity.vo.StudentUseLogVO; @@ -430,6 +429,7 @@ public class StudentService extends CoreBaseService{ student.setStudentPassword(StringUtils.isNotBlank(student.getStudentPassword())?student.getStudentPassword():"123qwe"); student.setAddTime(date); student.setStudentStatus(1); + student.setCodeFrom(defaultIfNull(student.getCodeFrom(), "注册")); this.save(student); String code = student.createCode(); @@ -963,7 +963,7 @@ public class StudentService extends CoreBaseService{ } - public void validateStudentSnListIsExistsThrow(List list, MyValidateExcelCellDataListener listener) { + public void validateStudentSnListIsExistsThrow(List list, MyValidateExcelCellDataListener listener) { if (CollectionUtil.isEmpty(list)) { return; } diff --git a/web/src/main/java/com/ibeetl/jlw/service/UniversitiesCollegesService.java b/web/src/main/java/com/ibeetl/jlw/service/UniversitiesCollegesService.java index 0a3447a3..2c805eeb 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/UniversitiesCollegesService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/UniversitiesCollegesService.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import static cn.hutool.core.collection.CollUtil.getFirst; import static com.ibeetl.admin.core.enums.MenuEnums.JT_01; import static com.ibeetl.admin.core.enums.MenuEnums.JT_S_04; import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUser; @@ -120,6 +121,8 @@ public class UniversitiesCollegesService extends CoreBaseService @Autowired private UniversityFacultyDao universityFacultyDao; @Autowired private CorePlatformService corePlatformService; + @Autowired + private UniversitiesCollegesService universitiesCollegesService; public PageQueryqueryByCondition(PageQuery query){ PageQuery ret = universityFacultyDao.queryByCondition(query); @@ -182,4 +187,77 @@ public class UniversityFacultyService extends CoreBaseService return groupMap; } + + public UniversityFaculty getByName(String name, Long orgId) { + UniversityFacultyQuery query = new UniversityFacultyQuery(); + query.setUniversityFacultyStatus(1); + query.setUniversityFacultyName(name.trim()); + + if (orgId != null) { + query.setOrgId(orgId); + } + return getFirst(getValuesByQueryNotWithPermission(query)); + } + + /** + * 通过名称查询数据,没有查询到的话,则插入数据,并返回给前端这条插入的数据 + * @param name + * @param orgId + * @return + */ + public UniversityFaculty getByNameOrCreate(String name, Long orgId, Long userId) { + UniversityFaculty universityFaculty = getByName(name, orgId); + + if (universityFaculty != null) { + return universityFaculty; + } + + // 根据机构ID查找是否已经创建过的院系,直接取之前的部分数据,作为插入的数据 + UniversityFacultyQuery facultyQuery = new UniversityFacultyQuery(); + facultyQuery.setOrgId(orgId); + UniversityFaculty anyOne = getFirst(getValuesByQueryNotWithPermission(facultyQuery)); + + // 根据名字未查询到数据的话,就插入院系表 + if (anyOne != null) { + UniversityFaculty faculty = new UniversityFaculty(); + faculty.setUniversityFacultyStatus(1); + faculty.setUniversityFacultyName(name); + faculty.setUniversityFacultyAddTime(new Date()); + faculty.setUniversityFacultyContact(anyOne.getUniversityFacultyContact()); + faculty.setUniversityFacultyContactTel(anyOne.getUniversityFacultyContactTel()); + faculty.setUniversityFacultyContactAddress(anyOne.getUniversityFacultyContactAddress()); + faculty.setUniversitiesCollegesId(anyOne.getUniversitiesCollegesId()); + faculty.setUniversityFacultyStatus(1); + faculty.setUserId(orgId); + faculty.setOrgId(userId); + + insert(faculty); + return faculty; + } + // 如果没有老数据,则就按照最简单的数据进行插入,后期再进各个模块修改详细数据 + else { + // 通过机构ID查询院校信息 + UniversitiesColleges universitiesColleges = universitiesCollegesService.getByOrgId(orgId); + + UniversityFaculty faculty = new UniversityFaculty(); + + if (universitiesColleges != null) { + faculty.setUniversitiesCollegesId(universitiesColleges.getUniversitiesCollegesId()); + } + faculty.setUniversityFacultyName(name); + faculty.setUniversityFacultyStatus(1); + faculty.setUniversityFacultyAddTime(new Date()); + faculty.setUserId(orgId); + faculty.setOrgId(userId); + + insert(faculty); + return faculty; + } + } + + + public UniversityFaculty getByName (String name){ + return getByName(name, null); + } + } diff --git a/web/src/main/java/com/ibeetl/jlw/service/UniversitySystemService.java b/web/src/main/java/com/ibeetl/jlw/service/UniversitySystemService.java index 51183ed9..99314c08 100644 --- a/web/src/main/java/com/ibeetl/jlw/service/UniversitySystemService.java +++ b/web/src/main/java/com/ibeetl/jlw/service/UniversitySystemService.java @@ -26,6 +26,8 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import static cn.hutool.core.collection.CollUtil.getFirst; + /** * 专业管理 Service @@ -38,6 +40,8 @@ public class UniversitySystemService extends CoreBaseService{ @Autowired private UniversitySystemDao universitySystemDao; @Autowired private CorePlatformService corePlatformService; + @Autowired + private UniversitiesCollegesService universitiesCollegesService; public PageQueryqueryByCondition(PageQuery query){ PageQuery ret = universitySystemDao.queryByCondition(query); @@ -146,6 +150,69 @@ public class UniversitySystemService extends CoreBaseService{ return universitySystemDao.getValuesByQueryNotWithPermission(universitySystemQuery); } + public UniversitySystem getByName (String name, Long orgId){ + UniversitySystemQuery query = new UniversitySystemQuery(); + query.setUniversitySystemStatus(1); + query.setUniversitySystemName(name.trim()); + + if (query != null) { + query.setOrgId(orgId); + } + return getFirst(universitySystemDao.getValuesByQueryNotWithPermission(query)); + } + public UniversitySystem getByName (String name){ + return getByName(name, null); + } + + /** + * 通过名称查询数据,没有查询到的话,则插入数据,并返回给前端这条插入的数据 + * @param name + * @param orgId + * @return + */ + public UniversitySystem getByNameOrCreate(String name, Long orgId, Long userId, Long universityFacultyId) { + UniversitySystem universitySystem = getByName(name, orgId); + + if (universitySystem != null) { + return universitySystem; + } + + // 根据机构ID查找是否已经创建过专业,直接取之前的部分数据,作为插入的数据 + UniversitySystemQuery systemQuery = new UniversitySystemQuery(); + systemQuery.setOrgId(orgId); + UniversitySystem anyOne = getFirst(getValuesByQueryNotWithPermission(systemQuery)); + + + // 根据名字未查询到数据的话,就插入院系表 + if (anyOne != null) { + UniversitySystem system = new UniversitySystem(); + system.setUniversitySystemName(name); + system.setUniversitySystemContact(anyOne.getUniversitySystemContact()); + system.setUniversitySystemContactTel(anyOne.getUniversitySystemContactTel()); + system.setUniversityFacultyId(anyOne.getUniversityFacultyId()); + system.setUniversitySystemAddTime(new Date()); + system.setUniversitySystemStatus(1); + system.setUserId(userId); + system.setOrgId(orgId); + + insert(system); + return system; + } + // 如果没有老数据,则就按照最简单的数据进行插入,后期再进各个模块修改详细数据 + else { + UniversitySystem system = new UniversitySystem(); + system.setUniversitySystemName(name); + system.setUniversityFacultyId(universityFacultyId); + system.setUniversitySystemAddTime(new Date()); + system.setUniversitySystemStatus(1); + system.setUserId(userId); + system.setOrgId(orgId); + + insert(system); + return system; + } + } + public UniversitySystem getInfo (Long universitySystemId){ UniversitySystemQuery universitySystemQuery = new UniversitySystemQuery(); universitySystemQuery.setUniversitySystemId(universitySystemId); diff --git a/web/src/main/java/com/ibeetl/jlw/web/CourseInfoController.java b/web/src/main/java/com/ibeetl/jlw/web/CourseInfoController.java index d0fc89e6..b67535a3 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/CourseInfoController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/CourseInfoController.java @@ -204,6 +204,7 @@ public class CourseInfoController{ } courseInfoQuery.setAddTime(new Date()); courseInfoQuery.setUserId(coreUser.getId()); + courseInfoQuery.setOrgId(coreUser.getOrgId()); CourseInfo courseInfo = courseInfoService.add(courseInfoQuery); //移除缓存 diff --git a/web/src/main/java/com/ibeetl/jlw/web/SchoolClassController.java b/web/src/main/java/com/ibeetl/jlw/web/SchoolClassController.java index 43acfa04..a08db507 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/SchoolClassController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/SchoolClassController.java @@ -76,8 +76,9 @@ public class SchoolClassController extends BaseController { /* 前端接口 */ @GetMapping(API + "/getList.do") @ResponseBody - public JsonResult> getList(SchoolClassQuery condition, @SCoreUser CoreUser coreUser) { - if (!coreUser.isAdmin()) { + public JsonResult> getList(SchoolClassQuery condition) { + CoreUser coreUser = getUser(); + if (null != coreUser && !coreUser.isAdmin()) { condition.setOrgId(coreUser.getOrgId()); } Listlist = schoolClassService.getValuesByQueryNotWithPermission(condition); diff --git a/web/src/main/java/com/ibeetl/jlw/web/StudentController.java b/web/src/main/java/com/ibeetl/jlw/web/StudentController.java index 4ef2d787..6b9acc55 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/StudentController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/StudentController.java @@ -24,7 +24,8 @@ import com.ibeetl.admin.core.util.TimeTool; import com.ibeetl.admin.core.web.JsonResult; import com.ibeetl.jlw.dao.SchoolClassDao; import com.ibeetl.jlw.entity.*; -import com.ibeetl.jlw.entity.dto.StudentBatchImportDTO; +import com.ibeetl.jlw.entity.dto.StudentBatchImportAdminDTO; +import com.ibeetl.jlw.entity.dto.StudentBatchImportUniAdminDTO; import com.ibeetl.jlw.entity.vo.StudentLogAnalysisVO; import com.ibeetl.jlw.entity.vo.StudentLoginLogVO; import com.ibeetl.jlw.entity.vo.StudentUseLogVO; @@ -39,7 +40,6 @@ import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.xssf.usermodel.*; import org.beetl.sql.core.engine.PageQuery; -import org.beetl.sql.core.query.LambdaQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.validation.BindingResult; @@ -67,8 +67,7 @@ import static cn.jlw.util.excel.ExcelUtil.standardName; import static com.ibeetl.admin.console.service.OrgConsoleService.setObjectOrgId; import static com.ibeetl.admin.core.util.ExcelUtil.convertData; import static com.ibeetl.admin.core.util.ExcelUtil.write; -import static com.ibeetl.admin.core.util.StreamUtils.listJoin; -import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUser; +import static com.ibeetl.admin.core.util.excelGroupValidation.ExcelUtil.createExcel; import static com.ibeetl.admin.core.web.JsonReturnCode.DIY_ERROR; import static com.ibeetl.jlw.web.IpAddressController.ipAddressMap; import static java.util.function.UnaryOperator.identity; @@ -136,6 +135,8 @@ public class StudentController extends BaseController{ @Autowired FileService fileService; + @Autowired + private UniversityFacultyService universityFacultyService; /* 前端接口 */ @@ -2786,16 +2787,22 @@ public class StudentController extends BaseController{ @SneakyThrows @GetMapping({ API + "/exportBatchTemplate.do", MODEL + "/downloadTemplate.json" }) @ResponseBody - public void exportBatchTemplate() { - - Assert.notNull(getUser(), "请登录后再操作"); + public void exportBatchTemplate(@SCoreUser CoreUser coreUser) { String filename = StrUtil.format("批量学生导入模板{}.xlsx", System.currentTimeMillis()); setExcelResponse(filename); - // 输出 Excel - com.ibeetl.admin.core.util.excelGroupValidation.ExcelUtil.createExcel(Arrays.asList(new StudentBatchImportDTO()), response.getOutputStream()); + if (coreUser.isAdmin()) { + // 输出 Excel + createExcel(Arrays.asList(new StudentBatchImportAdminDTO()), response.getOutputStream()); + } + else if(coreUser.isUniAdmin()) { + // 输出 Excel + createExcel(Arrays.asList(new StudentBatchImportUniAdminDTO()), response.getOutputStream()); + } + + throw new RuntimeException("该接口仅支持超管和管理员操作!"); } /** @@ -2803,62 +2810,72 @@ public class StudentController extends BaseController{ * 〈导入批量模板数据〉 * 批量导入题目 excel版本,只支持单选多选,对错吧 * @param file + * @param coreUser 一般这个接口都是学校管理员操作的,所以直接取这个里面的机构ID就代表这个学校的机构ID * @return {@link JsonResult} * @Author: 87966 * @Date: 2022/11/28 10:04 */ @SneakyThrows - @PostMapping({MODEL + "/importTemplate.json", API + "/importBatchTemplate.do"}) + @PostMapping({MODEL + "/uniAdminImportBatchTemplate.json", API + "/uniAdminImportBatchTemplate.do"}) @ResponseBody - public JsonResult importBatchTemplate(@NotNull(message = "导入的文件不能为空!") MultipartFile file, @SCoreUser CoreUser coreUser) { + public JsonResult uniAdminImportBatchTemplate(@NotNull(message = "导入的文件不能为空!") MultipartFile file, @SCoreUser CoreUser coreUser) { try { + Assert.isNull(getStudent(), "学生无法访问该接口"); // 输出 Excel, 有判断空值的操作 - MyValidateExcelCellDataListener listener = new MyValidateExcelCellDataListener<>(); + MyValidateExcelCellDataListener listener = new MyValidateExcelCellDataListener<>(); - ExcelUtil.readExcelNotContainHeader(file, StudentBatchImportDTO.class, listener); + ExcelUtil.readExcelNotContainHeader(file, StudentBatchImportUniAdminDTO.class, listener); // 判断错误的结果集 Assert.isTrue(CollectionUtil.isEmpty(listener.getFailMessage()), JSONUtil.toJsonStr(listener.getFailMessage())); // 类型转换 List list = listener.getData().stream().map(item -> { - // 存的是班级名称,只是叫做classId而已 - String classId = item.getClassId(); - - return StudentBatchImportDTO.pojo(item, importClassIdAsString -> { - SchoolClass params = new SchoolClass(); - params.setClassName(classId); - params.setClassStatus(1); - params.setOrgId(coreUser.getOrgId()); - LambdaQuery schoolClassLambdaQuery = schoolClassDao.createLambdaQuery() - .andEq(SchoolClass::getClassStatus, 1); - - // 超管不用传机构ID - if (!coreUser.isAdmin()) { - schoolClassLambdaQuery.andEq(SchoolClass::getOrgId, coreUser.getOrgId()); - } - List classList = schoolClassLambdaQuery - .andLike(SchoolClass::getClassName, "%"+classId+"%") - .select(); - - - consumerPutErrorMessage(classList, (cl) -> { - List tempList = (List) cl; - Assert.isTrue(CollectionUtil.isNotEmpty(classList), - "班级名称:【{}】未模糊匹配到任何班级!", classId); - - // 模糊搜索到重复的班级名称 - String repetitiveClassNames = listJoin(classList, SchoolClass::getClassName); - Assert.isFalse(tempList.size() > 1, - "提交的班级名称{},查询到多个【{}】,请修改后再来尝试!", classId, repetitiveClassNames); - }, listener); - - if (classList.size() == 1) { - return classList.get(0).getClassId(); - } - - return null; + + // 查询这个院校已经存在的院系 + UniversityFaculty universityFaculty = universityFacultyService.getByNameOrCreate( + item.getUniversityFacultyName(), coreUser.getOrgId(), coreUser.getId()); + + // 查询这个院校已经存在的专业 + UniversitySystem universitySystem = universitySystemService.getByNameOrCreate( + item.getUniversitySystemName(), coreUser.getOrgId(), coreUser.getId(), universityFaculty.getUniversityFacultyId()); + + // 查询这个院校已经存在的专业 + SchoolClass schoolClass = schoolClassService.getByNameOrCreate(item.getClassId(), + coreUser.getOrgId(), coreUser.getId(), universityFaculty.getUniversityFacultyId(), + universitySystem.getUniversitySystemId()); + + return StudentBatchImportUniAdminDTO.pojo(item, importClassIdAsString -> { + return schoolClass.getClassId(); +// LambdaQuery schoolClassLambdaQuery = schoolClassDao.createLambdaQuery() +// .andEq(SchoolClass::getClassStatus, 1); +// +// // 超管不用传机构ID +// if (!coreUser.isAdmin()) { +// schoolClassLambdaQuery.andEq(SchoolClass::getOrgId, coreUser.getOrgId()); +// } +// List classList = schoolClassLambdaQuery +// .andLike(SchoolClass::getClassName, "%"+classId+"%") +// .select(); +// +// +// consumerPutErrorMessage(classList, (cl) -> { +// List tempList = (List) cl; +// Assert.isTrue(CollectionUtil.isNotEmpty(classList), +// "班级名称:【{}】未模糊匹配到任何班级!", classId); +// +// // 模糊搜索到重复的班级名称 +// String repetitiveClassNames = listJoin(classList, SchoolClass::getClassName); +// Assert.isFalse(tempList.size() > 1, +// "提交的班级名称{},查询到多个【{}】,请修改后再来尝试!", classId, repetitiveClassNames); +// }, listener); +// +// if (classList.size() == 1) { +// return classList.get(0).getClassId(); +// } +// +// return null; }, identity()); }) .collect(Collectors.toList()); @@ -2892,6 +2909,83 @@ public class StudentController extends BaseController{ return JsonResult.successMessage("导入成功!"); } + /** + * 功能描述:
+ * 〈导入批量模板数据〉 + * 批量导入题目 excel版本,只支持单选多选,对错吧 + * @param file + * @param coreUser 一般这个接口都是学校管理员操作的,所以直接取这个里面的机构ID就代表这个学校的机构ID + * @return {@link JsonResult} + * @Author: 87966 + * @Date: 2022/11/28 10:04 + */ + @SneakyThrows + @PostMapping({MODEL + "/adminImportTemplate.json", API + "/adminImportBatchTemplate.do"}) + @ResponseBody + public JsonResult adminImportBatchTemplate(@NotNull(message = "导入的文件不能为空!") MultipartFile file, @SCoreUser CoreUser coreUser) { + + try { + + Assert.isNull(getStudent(), "学生无法访问该接口"); + + // 输出 Excel, 有判断空值的操作 + MyValidateExcelCellDataListener listener = new MyValidateExcelCellDataListener<>(); + + ExcelUtil.readExcelNotContainHeader(file, StudentBatchImportAdminDTO.class, listener); + // 判断错误的结果集 + Assert.isTrue(CollectionUtil.isEmpty(listener.getFailMessage()), JSONUtil.toJsonStr(listener.getFailMessage())); + // 类型转换 + List list = listener.getData().stream().map(item -> { + + // 查询这个院校已经存在的院系 + UniversitiesColleges universitiesColleges = universitiesCollegesService.getByNameOrCreate(item.getUniversitiesCollegesName()); + + // 查询这个院校已经存在的院系 + UniversityFaculty universityFaculty = universityFacultyService.getByNameOrCreate( + item.getUniversityFacultyName(), universitiesColleges.getOrgId(), universitiesColleges.getUserId()); + + // 查询这个院校已经存在的专业 + UniversitySystem universitySystem = universitySystemService.getByNameOrCreate( + item.getUniversitySystemName(), universitiesColleges.getOrgId(), universitiesColleges.getUserId(), universityFaculty.getUniversityFacultyId()); + + // 查询这个院校已经存在的专业 + SchoolClass schoolClass = schoolClassService.getByNameOrCreate(item.getClassId(), + universitiesColleges.getOrgId(), universitiesColleges.getUserId(), universityFaculty.getUniversityFacultyId(), + universitySystem.getUniversitySystemId()); + + return StudentBatchImportAdminDTO.pojo(item, importClassIdAsString -> schoolClass.getClassId(), identity()); + }) + .collect(Collectors.toList()); + + // 设置机构ID + try { + setObjectOrgId(list, (e) -> { + SchoolClass params = new SchoolClass(); + params.setClassId(e.getClassId()); + params.setClassStatus(1); + SchoolClass sc = schoolClassDao.templateOne(params); + if (sc != null) { + return sc.getOrgId(); + } + return null; + }, true); + }catch (Exception e) { + log.error(e.getMessage()); + } + + studentService.validateStudentSnListIsExistsThrow(list, listener); + // 再次判断错误的结果集 + Assert.isTrue(CollectionUtil.isEmpty(listener.getFailMessage()), JSONUtil.toJsonStr(listener.getFailMessage())); + + // 导入并添加身份信息 + list.forEach(studentService::add); + } + catch (IllegalArgumentException exception) { + return JsonResult.failMessage(exception.getMessage()).setCode(DIY_ERROR.getCode()); + } + + return JsonResult.successMessage("导入成功!"); + } /** * 消费并记录错误信息 diff --git a/web/src/main/java/com/ibeetl/jlw/web/UniversitiesCollegesJurisdictionCurriculumResourcesController.java b/web/src/main/java/com/ibeetl/jlw/web/UniversitiesCollegesJurisdictionCurriculumResourcesController.java index 985eafe6..c401ca0c 100644 --- a/web/src/main/java/com/ibeetl/jlw/web/UniversitiesCollegesJurisdictionCurriculumResourcesController.java +++ b/web/src/main/java/com/ibeetl/jlw/web/UniversitiesCollegesJurisdictionCurriculumResourcesController.java @@ -1,6 +1,9 @@ package com.ibeetl.jlw.web; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.lang.Assert; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.jlw.Interceptor.SCoreUser; import cn.jlw.validate.ValidateConfig; @@ -15,6 +18,7 @@ import com.ibeetl.jlw.entity.UniversitiesCollegesJurisdictionCurriculumResources import com.ibeetl.jlw.service.UniversitiesCollegesJurisdictionCurriculumResourcesService; import com.ibeetl.jlw.service.UniversitiesCollegesService; import com.ibeetl.jlw.web.query.UniversitiesCollegesJurisdictionCurriculumResourcesQuery; +import com.ibeetl.jlw.web.query.UniversitiesCollegesQuery; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.beetl.sql.core.engine.PageQuery; @@ -24,6 +28,7 @@ import org.springframework.validation.BindingResult; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; @@ -225,7 +230,18 @@ public class UniversitiesCollegesJurisdictionCurriculumResourcesController{ */ @PostMapping(MODEL + "/getAllAuthCourseInfoByOrgId.json") @ResponseBody - public JsonResult getAllAuthCourseInfoByOrgId(Long orgId, @SCoreUser CoreUser coreUser){ + public JsonResult getAllAuthCourseInfoByOrgId(@RequestParam(required = false) Long orgId, @RequestParam(required = false) Long universitiesCollegesId, String applicationIds, @SCoreUser CoreUser coreUser){ + + Assert.isFalse(ObjectUtil.isAllEmpty(orgId, universitiesCollegesId), "orgId(机构ID)或universitiesCollegesId (院校ID)不能同时为空!"); + + if (orgId == null) { + UniversitiesCollegesQuery universitiesCollegesQuery = new UniversitiesCollegesQuery(); + universitiesCollegesQuery.setUniversitiesCollegesId(universitiesCollegesId); + universitiesCollegesQuery.setUniversitiesCollegesStatus(1); + UniversitiesColleges universitiesColleges = CollectionUtil.getFirst(universitiesCollegesService.getValuesByQuery(universitiesCollegesQuery)); + orgId = universitiesColleges.getOrgId(); + } + return JsonResult.success(universitiesCollegesJurisdictionCurriculumResourcesService.getAllAuthCourseInfoStrByOrgId(orgId)); } diff --git a/web/src/main/resources/sql/jlw/universitiesCollegesJurisdictionCurriculumResources.md b/web/src/main/resources/sql/jlw/universitiesCollegesJurisdictionCurriculumResources.md index 8edaa772..e8e98a69 100644 --- a/web/src/main/resources/sql/jlw/universitiesCollegesJurisdictionCurriculumResources.md +++ b/web/src/main/resources/sql/jlw/universitiesCollegesJurisdictionCurriculumResources.md @@ -67,69 +67,138 @@ queryAllAuthCourseInfoByCondition === * 根据不为空的参数进行分页查询,查询理论课程类型的课程清单 + + select + @pageTag(){ + * + @} + from ( select - @pageTag(){ - t.*, - ta.*, + t.use_type, + t.use_start_time, + t.use_end_time, + t.second_level_name, + t.second_level_logo, + ta.`course_info_id`, + ta.`course_info_full_id`, + ta.`course_info_name`, + ta.`course_info_thumbnail`, + ta.`course_label_id`, + ta.`course_info_basics_count`, + ta.`course_info_content`, + ta.`course_info_status`, + ta.`course_info_type`, + ta.`course_info_parent_id`, + ta.`course_video_id`, + ta.`course_courseware_id`, + ta.`course_enclosure_ids`, + ta.`resources_question_ids`, + ta.`resources_competition_ids`, + ta.`resources_training_ids`, + ta.`order_index`, + ta.`add_time`, + ta.org_id, + ta.user_id, tb.universities_colleges_name, - (select course_label_type from course_label where course_label_id = ta.course_label_id limit 1) as course_label_type, - (select course_label_name from course_label where course_label_id = ta.course_label_id limit 1) as course_label_name, - ta.add_time - @} + tc.course_label_type, + tc.course_label_name from course_info ta left join course_label tc on tc.course_label_id = ta.course_label_id and tc.course_label_status = 1 left join universities_colleges_jurisdiction_curriculum_resources t on ta.course_info_id = t.course_info_id and ta.course_info_status = 1 - @if(!isEmpty(universitiesCollegesJurisdictionCurriculumResourcesId)){ - and t.universities_colleges_jurisdiction_curriculum_resources_id =#universitiesCollegesJurisdictionCurriculumResourcesId# - @} - @if(!isEmpty(universitiesCollegesId)){ - and t.universities_colleges_id =#universitiesCollegesId# - @} - @if(!isEmpty(type)){ - and t.type =#type# - @} - @if(!isEmpty(courseInfoId)){ - and t.course_info_id =#courseInfoId# - @} - @if(!isEmpty(courseInfoName)){ - and ta.course_info_name like #'%'+courseInfoName+'%'# - @} - @if(!isEmpty(typeId)){ - and t.type_id =#typeId# - @} - @if(!isEmpty(useType)){ - and t.use_type =#useType# - @} - @if(!isEmpty(useStartTime)){ - and t.use_start_time =#useStartTime# - @} - @if(!isEmpty(useEndTime)){ - and t.use_end_time =#useEndTime# - @} - @if(!isEmpty(secondLevelName)){ - and t.second_level_name =#secondLevelName# - @} - @if(!isEmpty(secondLevelLogo)){ - and t.second_level_logo =#secondLevelLogo# - @} - @if(!isEmpty(addTime)){ - and t.add_time =#addTime# - @} - @if(!isEmpty(orgId)){ - and t.org_id =#orgId# - @} - @if(!isEmpty(userId)){ - and t.user_id =#userId# - @} - @if(!isEmpty(universitiesCollegesJurisdictionExperimentalSystemId)){ - and t.universities_colleges_jurisdiction_experimental_system_id =#universitiesCollegesJurisdictionExperimentalSystemId# - @} left join universities_colleges tb on tb.universities_colleges_id = t.universities_colleges_id and tb.universities_colleges_status = 1 where 1=1 AND ta.course_info_status = 1 AND ta.course_info_type = 1 AND tc.course_label_type = '理论课程类' - + @if(!isEmpty(universitiesCollegesJurisdictionCurriculumResourcesId)){ + and t.universities_colleges_jurisdiction_curriculum_resources_id =#universitiesCollegesJurisdictionCurriculumResourcesId# + @} + @if(!isEmpty(universitiesCollegesId)){ + and t.universities_colleges_id =#universitiesCollegesId# + @} + @if(!isEmpty(type)){ + and t.type =#type# + @} + @if(!isEmpty(courseInfoId)){ + and t.course_info_id =#courseInfoId# + @} + @if(!isEmpty(courseInfoName)){ + and ta.course_info_name like #'%'+courseInfoName+'%'# + @} + @if(!isEmpty(typeId)){ + and t.type_id =#typeId# + @} + @if(!isEmpty(useType)){ + and t.use_type =#useType# + @} + @if(!isEmpty(useStartTime)){ + and t.use_start_time =#useStartTime# + @} + @if(!isEmpty(useEndTime)){ + and t.use_end_time =#useEndTime# + @} + @if(!isEmpty(secondLevelName)){ + and t.second_level_name =#secondLevelName# + @} + @if(!isEmpty(secondLevelLogo)){ + and t.second_level_logo =#secondLevelLogo# + @} + @if(!isEmpty(addTime)){ + and t.add_time =#addTime# + @} + @if(!isEmpty(orgId)){ + and t.org_id =#orgId# + @} + @if(!isEmpty(userId)){ + and t.user_id =#userId# + @} + @if(!isEmpty(universitiesCollegesJurisdictionExperimentalSystemId)){ + and t.universities_colleges_jurisdiction_experimental_system_id =#universitiesCollegesJurisdictionExperimentalSystemId# + @} + + @if(!isEmpty(universitiesCollegesId)){ + union + select + t.use_type, + t.use_start_time, + t.use_end_time, + t.second_level_name, + t.second_level_logo, + ta.`course_info_id`, + ta.`course_info_full_id`, + ta.`course_info_name`, + ta.`course_info_thumbnail`, + ta.`course_label_id`, + ta.`course_info_basics_count`, + ta.`course_info_content`, + ta.`course_info_status`, + ta.`course_info_type`, + ta.`course_info_parent_id`, + ta.`course_video_id`, + ta.`course_courseware_id`, + ta.`course_enclosure_ids`, + ta.`resources_question_ids`, + ta.`resources_competition_ids`, + ta.`resources_training_ids`, + ta.`order_index`, + ta.`add_time`, + ta.org_id, + ta.user_id, + null as universities_colleges_name, + tc.course_label_type, + tc.course_label_name + from course_info ta + left join course_label tc on tc.course_label_id = ta.course_label_id and tc.course_label_status = 1 + left join universities_colleges_jurisdiction_curriculum_resources t on ta.course_info_id = t.course_info_id and 0 + where 1 + AND tc.course_label_type = '理论课程类' + AND ta.course_info_status = 1 + AND ta.course_info_type = 1 + AND ta.org_id = ( + select org_id from universities_colleges where universities_colleges_id = #universitiesCollegesId# limit 1 + ) + @} + ) tt deleteUniversitiesCollegesJurisdictionCurriculumResourcesByIds === @@ -165,9 +234,9 @@ getUniversitiesCollegesJurisdictionCurriculumResourcesValues @if(!isEmpty(universitiesCollegesId)){ and t.universities_colleges_id =#universitiesCollegesId# @} - @if(!isEmpty(courseInfoName)){ - and ta.course_info_name like #'%'+courseInfoName+'%'# - @} + @if(!isEmpty(courseInfoName)){ + and ta.course_info_name like #'%'+courseInfoName+'%'# + @} @if(!isEmpty(type)){ and t.type =#type# @} @@ -346,7 +415,7 @@ getAllAuthCourseInfoByOrgId tb.*, TRUE as is_update, tc.use_type, - (CASE a.use_type WHEN 1 THEN '购买' WHEN 2 THEN '试用' WHEN 12 THEN '购买+试用' END) as use_type_text, + (CASE tc.use_type WHEN 1 THEN '购买' WHEN 2 THEN '试用' WHEN 12 THEN '购买+试用' END) as use_type_text, tc.use_start_time, tc.use_end_time, tc.second_level_name, diff --git a/web/src/main/resources/static/js/jlw/universitiesCollegesJurisdictionCurriculumResources/index.js b/web/src/main/resources/static/js/jlw/universitiesCollegesJurisdictionCurriculumResources/index.js index efc4a632..d532c70c 100644 --- a/web/src/main/resources/static/js/jlw/universitiesCollegesJurisdictionCurriculumResources/index.js +++ b/web/src/main/resources/static/js/jlw/universitiesCollegesJurisdictionCurriculumResources/index.js @@ -44,6 +44,17 @@ layui.define([ 'form', 'laydate', 'table' ], function(exports) { field : 'courseLabelName', title : '课程标签', }, + { + field : 'userId', + title : '课程来源', + templet: function (d) { + if(d.userId == null || d.userId == 1) { + return '系统授权' + } else { + return '院校添加' + } + }, + }, { field : 'useType', title : '使用级别', @@ -51,23 +62,31 @@ layui.define([ 'form', 'laydate', 'table' ], function(exports) { return d.useType === 0 ? '不使用' : d.useType === 1 ? '购买' : d.useType === 2 ? '试用' - : ''; + // 默认试用,会有一些课程,在清单中,但不属于授权的 + : '试用'; }, }, { field : 'useStartTime', title : '开始时间', + templet: function (d) { + return d.useStartTime ? d.useStartTime : '-' + }, }, { field : 'useEndTime', title : '结束时间', + templet: function (d) { + return d.useEndTime ? d.useEndTime : '-' + }, }, { field : '_endStatus_', title : '到期状态', templet: function (d) { + // 默认在用,会有一些课程,在清单中,但不属于授权的 if (!d.useEndTime) { - return ''; + return '在用'; } return new Date(d.useEndTime).getTime() < new Date().getTime() ?