学生导入

beetlsql3-dev
Mlxa0324 2 years ago
parent f14c011f33
commit 1db566f572

@ -89,8 +89,7 @@ public class BeetlConf {
@Bean @Bean
public BeetlTemplateCustomize beetlTemplateCustomize() { public BeetlTemplateCustomize beetlTemplateCustomize() {
return new BeetlTemplateCustomize() { return groupTemplate -> {
public void customize(GroupTemplate groupTemplate) {
groupTemplate.registerFunctionPackage("platform", platFormService); groupTemplate.registerFunctionPackage("platform", platFormService);
groupTemplate.registerFunctionPackage("queryCondition", new QueryParser()); groupTemplate.registerFunctionPackage("queryCondition", new QueryParser());
groupTemplate.registerFunctionPackage("dict", dictDownQueryFunction); groupTemplate.registerFunctionPackage("dict", dictDownQueryFunction);
@ -240,7 +239,6 @@ public class BeetlConf {
} }
return new ArrayList<String>(); return new ArrayList<String>();
}); });
}
}; };
} }

@ -9,6 +9,7 @@ import org.beetl.core.Function;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component @Component
@Deprecated
public class SessionFunction implements Function { public class SessionFunction implements Function {
CorePlatformService platFormService = SpringUtil.getBean(CorePlatformService.class); CorePlatformService platFormService = SpringUtil.getBean(CorePlatformService.class);

@ -10,6 +10,8 @@ public enum JsonReturnCode {
FAIL ("500","内部失败"), FAIL ("500","内部失败"),
ACCESS_ERROR ("403","禁止访问"), ACCESS_ERROR ("403","禁止访问"),
NOT_FOUND ("404","页面未发现"), NOT_FOUND ("404","页面未发现"),
// 目前用在导入excel的时候异常的返回
DIY_ERROR ("5000","自定义异常"); DIY_ERROR ("5000","自定义异常");
private String code; private String code;
private String desc; private String desc;

@ -1,6 +1,8 @@
package cn.jlw.util.excel; package cn.jlw.util.excel;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
/** /**
* <p> * <p>
@ -12,6 +14,8 @@ import lombok.Data;
* @modified * @modified
*/ */
@Data @Data
@AllArgsConstructor
@NoArgsConstructor
public class ExcelFailRecord { public class ExcelFailRecord {
private Integer row; private Integer row;

@ -1,7 +1,6 @@
package com.ibeetl.jlw.entity.dto; package com.ibeetl.jlw.entity.dto;
import com.ibeetl.admin.core.util.excelGroupValidation.ExcelFile; import com.ibeetl.admin.core.util.excelGroupValidation.ExcelFile;
import com.ibeetl.admin.core.util.excelGroupValidation.ExcelValidation;
import com.ibeetl.jlw.entity.Student; import com.ibeetl.jlw.entity.Student;
import com.ibeetl.jlw.enums.GenderEnum; import com.ibeetl.jlw.enums.GenderEnum;
import lombok.Data; import lombok.Data;
@ -11,7 +10,7 @@ import lombok.experimental.FieldNameConstants;
import java.util.Date; import java.util.Date;
import java.util.function.Function; import java.util.function.Function;
import static cn.jlw.util.excel.ExcelUtil.longValuesOf; import static cn.hutool.core.util.ObjectUtil.defaultIfNull;
/** /**
* : <br> * : <br>
@ -31,7 +30,7 @@ public class StudentBatchImportDTO {
/** /**
* *
*/ */
@ExcelValidation(datasourceMethod = "com.ibeetl.jlw.service.SchoolClassService.getAllSchoolClassWithOrgId") // @ExcelValidation(datasourceMethod = "com.ibeetl.jlw.service.SchoolClassService.getAllSchoolClassWithOrgId")
private String classId ; private String classId ;
/** /**
* *
@ -59,9 +58,10 @@ public class StudentBatchImportDTO {
* @param function * @param function
* @return * @return
*/ */
public static Student pojo(StudentBatchImportDTO importPojo, Function<Student, Student> function) { public static Student pojo(StudentBatchImportDTO importPojo, Function<String, Long> classIdFunction, Function<Student, Student> function) {
Student build = Student.builder() Student build = Student.builder()
.classId(longValuesOf(importPojo.getClassId())) // .classId(longValuesOf(importPojo.getClassId()))
.classId(classIdFunction.apply(importPojo.getClassId()))
.studentName(importPojo.getStudentName()) .studentName(importPojo.getStudentName())
.studentSn(importPojo.getStudentSn()) .studentSn(importPojo.getStudentSn())
.studentMobile(importPojo.getStudentMobile()) .studentMobile(importPojo.getStudentMobile())
@ -83,7 +83,7 @@ public class StudentBatchImportDTO {
* @return * @return
*/ */
public static Student pojo(StudentBatchImportDTO importPojo) { public static Student pojo(StudentBatchImportDTO importPojo) {
return pojo(importPojo, e -> e); return pojo(importPojo, o -> Long.valueOf(defaultIfNull(o, "-1")), e -> e);
} }
} }

@ -977,7 +977,7 @@ public class StudentService extends CoreBaseService<Student>{
// 这里固定列索引,省事 // 这里固定列索引,省事
listener.putFailMessage( listener.putFailMessage(
errorRowIndex, 4, StrUtil.format("本次上传的文件中,存在重复的的学生编号:\"{}\"", duplicateElement)); errorRowIndex, 2, StrUtil.format("本次上传的文件中,存在重复的的学生编号:\"{}\"", duplicateElement));
} }
// 查询库里已经存在的编号 // 查询库里已经存在的编号

@ -16,9 +16,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import static com.ibeetl.admin.core.util.StreamUtils.listJoin;
/** /**
@ -65,11 +63,39 @@ public class UniversitiesCollegesJurisdictionCurriculumResourcesService extends
return sqlManager.select(SqlId.of("jlw.universitiesCollegesJurisdictionCurriculumResources.getUniversitiesCollegesJurisdictionCurriculumResourcesValues"),UniversitiesCollegesJurisdictionCurriculumResources.class,paras); return sqlManager.select(SqlId.of("jlw.universitiesCollegesJurisdictionCurriculumResources.getUniversitiesCollegesJurisdictionCurriculumResourcesValues"),UniversitiesCollegesJurisdictionCurriculumResources.class,paras);
} }
/**
* ID
* @param orgId
* @return
*/
public List<CourseInfo> getAuthCourseInfoByOrgId(Long orgId){ public List<CourseInfo> getAuthCourseInfoByOrgId(Long orgId){
return universitiesCollegesJurisdictionCurriculumResourcesDao.getAuthCourseInfoByOrgId(orgId); return universitiesCollegesJurisdictionCurriculumResourcesDao.getAuthCourseInfoByOrgId(orgId);
} }
/**
* ID
* @param orgId
* @return
*/
public String getAuthCourseInfoStrByOrgId(Long orgId){
return listJoin(universitiesCollegesJurisdictionCurriculumResourcesDao.getAuthCourseInfoByOrgId(orgId), CourseInfo::getCourseInfoId);
}
/**
* ID
* @param coreUser
* @return
*/
public List<CourseInfo> getAuthCourseInfoByCoreUser(CoreUser coreUser){ public List<CourseInfo> getAuthCourseInfoByCoreUser(CoreUser coreUser){
return universitiesCollegesJurisdictionCurriculumResourcesDao.getAuthCourseInfoByOrgId(coreUser.getOrgId()); return universitiesCollegesJurisdictionCurriculumResourcesDao.getAuthCourseInfoByOrgId(coreUser.getOrgId());
} }
/**
* ID
* @param coreUser
* @return
*/
public String getAuthCourseInfoStrByCoreUser(CoreUser coreUser){
return listJoin(universitiesCollegesJurisdictionCurriculumResourcesDao.getAuthCourseInfoByOrgId(coreUser.getOrgId()), CourseInfo::getCourseInfoId);
}
} }

@ -1,5 +1,6 @@
package com.ibeetl.jlw.web; package com.ibeetl.jlw.web;
import cn.hutool.core.util.StrUtil;
import cn.jlw.Interceptor.GetFile; import cn.jlw.Interceptor.GetFile;
import cn.jlw.Interceptor.RFile; import cn.jlw.Interceptor.RFile;
import cn.jlw.Interceptor.SCoreUser; import cn.jlw.Interceptor.SCoreUser;
@ -20,6 +21,7 @@ import com.ibeetl.jlw.enums.MatchTypeEnum;
import com.ibeetl.jlw.enums.QuestionBusinessTypeEnum; import com.ibeetl.jlw.enums.QuestionBusinessTypeEnum;
import com.ibeetl.jlw.service.CourseInfoService; import com.ibeetl.jlw.service.CourseInfoService;
import com.ibeetl.jlw.service.ResourcesQuestionService; import com.ibeetl.jlw.service.ResourcesQuestionService;
import com.ibeetl.jlw.service.UniversitiesCollegesJurisdictionCurriculumResourcesService;
import com.ibeetl.jlw.web.query.CourseInfoQuery; import com.ibeetl.jlw.web.query.CourseInfoQuery;
import com.ibeetl.jlw.web.query.ResourcesQuestionQuery; import com.ibeetl.jlw.web.query.ResourcesQuestionQuery;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@ -46,10 +48,12 @@ import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.InputStream; import java.io.InputStream;
import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.*; import java.util.*;
import static cn.hutool.core.util.ArrayUtil.join; import static cn.hutool.core.util.ArrayUtil.join;
import static cn.hutool.core.util.ObjectUtil.defaultIfNull;
import static cn.jlw.util.excel.ExcelUtil.standardName; import static cn.jlw.util.excel.ExcelUtil.standardName;
/** /**
@ -71,6 +75,7 @@ public class ResourcesQuestionController{
FileService fileService; FileService fileService;
@Autowired private CourseInfoService courseInfoService; @Autowired private CourseInfoService courseInfoService;
@Autowired private UniversitiesCollegesJurisdictionCurriculumResourcesService universitiesCollegesJurisdictionCurriculumResourcesService;
/* 前端接口 */ /* 前端接口 */
@ -155,6 +160,13 @@ public class ResourcesQuestionController{
if (coreUser.isUniAdmin()) { if (coreUser.isUniAdmin()) {
condition.setOrgIdPlural(join(Arrays.asList(coreUser.getOrgId(), 1L, null).toArray(), ",")); condition.setOrgIdPlural(join(Arrays.asList(coreUser.getOrgId(), 1L, null).toArray(), ","));
// 查询已经授权的课程ID
Serializable courseInfoIds = defaultIfNull(condition.getCourseInfoId(), condition.getCourseInfoIds());
Serializable ifNullCourseInfoIds = defaultIfNull(courseInfoIds,
universitiesCollegesJurisdictionCurriculumResourcesService.getAuthCourseInfoStrByOrgId(coreUser.getOrgId()));
// 如果为空字符串,那么代表这个学校,还没有授权的课程,所以是不会显示任何东西的。
condition.setCourseInfoIds(StrUtil.blankToDefault(String.valueOf(ifNullCourseInfoIds), "未授权应用"));
} }
resourcesQuestionService.queryByCondition(page); resourcesQuestionService.queryByCondition(page);
return JsonResult.success(page); return JsonResult.success(page);

@ -56,6 +56,7 @@ import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.*; import java.util.*;
import java.util.function.Consumer;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static cn.jlw.token.TokenService.getMap; import static cn.jlw.token.TokenService.getMap;
@ -65,9 +66,11 @@ import static cn.jlw.util.excel.ExcelUtil.standardName;
import static com.ibeetl.admin.console.service.OrgConsoleService.setObjectOrgId; 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.convertData;
import static com.ibeetl.admin.core.util.ExcelUtil.write; 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.user.CacheUserUtil.getUser;
import static com.ibeetl.admin.core.web.JsonReturnCode.DIY_ERROR; import static com.ibeetl.admin.core.web.JsonReturnCode.DIY_ERROR;
import static com.ibeetl.jlw.web.IpAddressController.ipAddressMap; import static com.ibeetl.jlw.web.IpAddressController.ipAddressMap;
import static java.util.function.UnaryOperator.identity;
/** /**
@ -2811,17 +2814,51 @@ public class StudentController extends BaseController{
try { try {
Assert.isNull(getStudent(), "学生无法访问该接口"); Assert.isNull(getStudent(), "学生无法访问该接口");
// 输出 Excel // 输出 Excel, 有判断空值的操作
MyValidateExcelCellDataListener<StudentBatchImportDTO> listener = new MyValidateExcelCellDataListener<>(); MyValidateExcelCellDataListener<StudentBatchImportDTO> listener = new MyValidateExcelCellDataListener<>();
ExcelUtil.readExcelNotContainHeader(file, StudentBatchImportDTO.class, listener); ExcelUtil.readExcelNotContainHeader(file, StudentBatchImportDTO.class, listener);
// 判断错误的结果集 // 判断错误的结果集
Assert.isTrue(CollectionUtil.isEmpty(listener.getFailMessage()), JSONUtil.toJsonStr(listener.getFailMessage())); Assert.isTrue(CollectionUtil.isEmpty(listener.getFailMessage()), JSONUtil.toJsonStr(listener.getFailMessage()));
// 类型转换 // 类型转换
List<Student> list = listener.getData().stream().map(StudentBatchImportDTO::pojo) List<Student> 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());
List<SchoolClass> classList = schoolClassDao.createLambdaQuery()
.andEq(SchoolClass::getClassStatus, 1)
.andEq(SchoolClass::getOrgId, coreUser.getOrgId())
.andLike(SchoolClass::getClassName, "%"+classId+"%")
.select();
consumerPutErrorMessage(classList, (cl) -> {
List<SchoolClass> tempList = (List<SchoolClass>) 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()); .collect(Collectors.toList());
// 设置机构ID // 设置机构ID
try {
setObjectOrgId(list, (e) -> { setObjectOrgId(list, (e) -> {
SchoolClass params = new SchoolClass(); SchoolClass params = new SchoolClass();
params.setClassId(e.getClassId()); params.setClassId(e.getClassId());
@ -2832,6 +2869,9 @@ public class StudentController extends BaseController{
} }
return null; return null;
}, true); }, true);
}catch (Exception e) {
log.error(e.getMessage());
}
studentService.validateStudentSnListIsExistsThrow(list, listener); studentService.validateStudentSnListIsExistsThrow(list, listener);
// 再次判断错误的结果集 // 再次判断错误的结果集
@ -2843,6 +2883,21 @@ public class StudentController extends BaseController{
catch (IllegalArgumentException exception) { catch (IllegalArgumentException exception) {
return JsonResult.failMessage(exception.getMessage()).setCode(DIY_ERROR.getCode()); return JsonResult.failMessage(exception.getMessage()).setCode(DIY_ERROR.getCode());
} }
return JsonResult.successMessage("导入成功!"); return JsonResult.successMessage("导入成功!");
} }
/**
*
* @param t
* @param tConsumer
* @param listener
*/
private void consumerPutErrorMessage(Object t, Consumer tConsumer, MyValidateExcelCellDataListener listener) {
try {
tConsumer.accept(t);
}catch (Exception e) {
listener.putFailMessage(e.getMessage());
}
}
} }

@ -15,3 +15,5 @@ FNP.reUtil = cn.hutool.core.util.ReUtil
FNP.dateUtil =cn.hutool.core.date.DateUtil FNP.dateUtil =cn.hutool.core.date.DateUtil
# map\u5DE5\u5177\u7C7B # map\u5DE5\u5177\u7C7B
FNP.mapUtil =com.ibeetl.admin.core.util.map.MapUtil FNP.mapUtil =com.ibeetl.admin.core.util.map.MapUtil
# \u53EF\u4EE5\u67E5\u8BE2\u6388\u6743\u8BFE\u7A0B\u5217\u8868\u7684
FNP.authCourseInfoUtil =com.ibeetl.jlw.service.UniversitiesCollegesJurisdictionCurriculumResourcesService

@ -41,6 +41,10 @@ queryByCondition
@} @}
@if(!isEmpty(courseInfoIds)){ @if(!isEmpty(courseInfoIds)){
and find_in_set(t.course_info_id,#courseInfoIds#) and find_in_set(t.course_info_id,#courseInfoIds#)
@// 未授权任何应用的话,这里直接返回空数据
@if(courseInfoIds == '未授权应用'){
and false
@}
@} @}
@if(!isEmpty(courseInfoId)){ @if(!isEmpty(courseInfoId)){
and t.course_info_id =#courseInfoId# and t.course_info_id =#courseInfoId#

@ -31,8 +31,10 @@
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">授权院校:</label> <label class="layui-form-label">授权院校:</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<!-- 时间久远,忘记这里是干啥的,先注释吧 -->
<!-- universities_colleges.universities_colleges_name.universities_colleges_status=1,not find_in_set(universities_colleges_id,IFNULL((SELECT group_concat(universities_colleges_id) FROM universities_colleges_jurisdiction_experimental_system WHERE FIND_IN_SET(use_type,'1,2')),-1))-->
<layui:simpleDictSelect style='layui-input-inline' value="${universitiesCollegesId}" <layui:simpleDictSelect style='layui-input-inline' value="${universitiesCollegesId}"
type="universities_colleges.universities_colleges_name.universities_colleges_status=1,not find_in_set(universities_colleges_id,IFNULL((SELECT group_concat(universities_colleges_id) FROM universities_colleges_jurisdiction_experimental_system WHERE FIND_IN_SET(use_type,'1,2')),-1))" type="universities_colleges.universities_colleges_name.universities_colleges_status=1"
id="universitiesCollegesId" name="universitiesCollegesId" id="universitiesCollegesId" name="universitiesCollegesId"
layFilter="select_universitiesColleges"/> layFilter="select_universitiesColleges"/>
</div> </div>

Loading…
Cancel
Save