手动签到,入参整理

beetlsql3-dev
Mlxa0324 2 years ago
parent 0d0a401d9b
commit c406314c81

@ -1,5 +1,7 @@
package com.ibeetl.jlw.dao;
import com.ibeetl.jlw.entity.RandomStudentListDTO;
import com.ibeetl.jlw.entity.Student;
import com.ibeetl.jlw.entity.TeacherOpenCourseMergeStudent;
import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeStudentQuery;
import com.sun.istack.internal.NotNull;
@ -34,5 +36,10 @@ public interface TeacherOpenCourseMergeStudentDao extends BaseMapper<TeacherOpen
*/
List<Long> selectStudentIdListByTeacherId(@NotNull Long teacherId);
/**
*
* @param dto
* @return
*/
List<Student> randomStudentList(RandomStudentListDTO dto);
}

@ -0,0 +1,43 @@
package com.ibeetl.jlw.entity;
import lombok.Data;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
/**
* <p>
*
* </p>
*
* @author mlx
* @date 2022/10/25
* @modified
*/
@Data
public class RandomStudentListDTO {
/**
* ID
*/
@NotNull(message = "开课ID不能为空")
private Long teacherOpenCourseId;
/**
* ID
*/
private String schoolClassIds;
/**
* ()
* null-1
*/
@Min(message = "随机抽取的数量不能小于1非必填", value = 1)
private Long randomCount;
/**
*
*/
private Long studentSnOrName;
}

@ -0,0 +1,31 @@
package com.ibeetl.jlw.entity;
import com.ibeetl.jlw.web.query.TeacherOpenCourseStudentSigninLogQuery;
import lombok.Data;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotNull;
/*
* ---
* gen by Spring Boot2 Admin 2022-10-12
*/
@Data
@Validated
public class TeacherOpenCourseStudentSigninLogManualDTO {
//学生ID
@NotNull(message = "学生ID不能为空")
private Long studentId ;
//备注(缺勤理由)
private String teacherOpenCourseStudentSigninLogRemark ;
// 签到标签 10 签到20 缺勤
@NotNull(message = "签到方式不能为空")
private TeacherOpenCourseStudentSigninLogQuery.SignInTypeEnum teacherOpenCourseStudentSigninLogTag;
}

@ -16,18 +16,18 @@ import java.util.List;
* @modified
*/
@Data
public class TeacherOpenCourseStudentSigninLogManualSignInDTO {
public class TeacherOpenCourseStudentSigninLogManualMergeDTO {
/**
*
*/
@NotNull(message = "签到配置参数不能为空!")
private TeacherOpenCourseStudentSigninSetting signinSetting;
private TeacherOpenCourseStudentSigninSettingManualDTO signinSetting;
/**
*
*/
@NotEmpty(message = "签到日志不能为空!")
private List<TeacherOpenCourseStudentSigninLog> signinLogList;
private List<TeacherOpenCourseStudentSigninLogManualDTO> signinLogList;
}

@ -0,0 +1,26 @@
package com.ibeetl.jlw.entity;
import lombok.Data;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotNull;
/*
* ----
* gen by Spring Boot2 Admin 2022-10-11
*/
@Data
@Validated
public class TeacherOpenCourseStudentSigninSettingManualDTO {
//开课ID
@NotNull(message = "开课ID不能为空")
private Long teacherOpenCourseId ;
//班级ID集合
@NotNull(message = "班级ID不能为空")
private String schoolClassIds ;
}

@ -11,7 +11,7 @@ import org.beetl.sql.annotation.entity.EnumMapping;
@Getter
@AllArgsConstructor
@EnumMapping("text")
@EnumMapping("name")
public enum MoveEnum {
// 进行中
MOVE_TOP(10, "置顶"),

@ -1,7 +1,6 @@
package com.ibeetl.jlw.service;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ObjectUtil;
import cn.jlw.util.ToolUtils;
import cn.jlw.validate.ValidateConfig;
import com.alibaba.fastjson.JSON;
@ -18,13 +17,11 @@ import com.ibeetl.jlw.web.query.TeacherOpenCourseMergeStudentQuery;
import org.apache.commons.lang3.StringUtils;
import org.beetl.sql.core.SqlId;
import org.beetl.sql.core.engine.PageQuery;
import org.beetl.sql.core.query.LambdaQuery;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
@ -222,23 +219,12 @@ public class TeacherOpenCourseMergeStudentService extends CoreBaseService<Teache
/**
* -
*
* @param teacherOpenCourseId ID
* @param randomCount
*
* @param dto
* @return
*/
public List<TeacherOpenCourseMergeStudent> randomStudentList(
@NotNull(message = "开课ID不能为空") Long teacherOpenCourseId,
@Min(message = "随机抽取的数量不能小于1非必填", value = 1) Long randomCount) {
LambdaQuery<TeacherOpenCourseMergeStudent> lambdaQuery = teacherOpenCourseMergeStudentDao.createLambdaQuery()
.andEq(TeacherOpenCourseMergeStudent::getTeacherOpenCourseId, teacherOpenCourseId);
// 查询数量大于0
if(ObjectUtil.isNotNull(randomCount)) {
lambdaQuery.appendSql("ORDER BY RAND() LIMIT " + randomCount);
}
List<TeacherOpenCourseMergeStudent> studentList = lambdaQuery.select();
public Object randomStudentList(RandomStudentListDTO dto) {
List<Student> studentList = teacherOpenCourseMergeStudentDao.randomStudentList(dto);
queryListAfter(studentList);
return studentList;
}

@ -1,5 +1,8 @@
package com.ibeetl.jlw.service;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.core.util.EnumUtil;
@ -22,6 +25,7 @@ import com.ibeetl.jlw.dao.TeacherOpenCourseStudentSigninSettingDao;
import com.ibeetl.jlw.entity.*;
import com.ibeetl.jlw.entity.dto.TeacherOpenCourseStudentSigninLogSigninDTO;
import com.ibeetl.jlw.entity.dto.TeacherOpenCourseStudentSigninLogSigninDTO.ManualClass;
import com.ibeetl.jlw.enums.StartStatusEnum;
import com.ibeetl.jlw.validator.TeacherOpenCourseStudentSigninLogSigninDTOValidator;
import com.ibeetl.jlw.web.query.TeacherOpenCourseStudentSigninLogQuery;
import org.apache.commons.lang3.StringUtils;
@ -37,9 +41,11 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.constraints.NotNull;
import java.io.*;
import java.util.*;
import java.util.stream.Collectors;
import static cn.jlw.util.IpUtils.getIpAddr;
import static cn.jlw.util.IpUtils.isRangeInner;
@ -546,16 +552,59 @@ public class TeacherOpenCourseStudentSigninLogService extends CoreBaseService<Te
* @param dto
* @return
*/
public void manualSigninAdd(@NotNull(message = "手动签到参数不能为空!") TeacherOpenCourseStudentSigninLogManualSignInDTO dto) {
teacherOpenCourseStudentSigninSettingDao.insert(dto.getSigninSetting());
public void manualSigninAdd(@NotNull(message = "手动签到参数不能为空!") TeacherOpenCourseStudentSigninLogManualMergeDTO dto) {
// 获取当前登录用户信息
final CoreUser user = getUser();
final HttpServletRequest request = getRequest();
// 添加我签到配置
TeacherOpenCourseStudentSigninSettingManualDTO signinSetting = dto.getSigninSetting();
TeacherOpenCourseStudentSigninSetting entity = new TeacherOpenCourseStudentSigninSetting();
// 拷贝前端传过来的值
BeanUtil.copyProperties(signinSetting, entity);
DateTime now = DateUtil.date();
// 默认的一些属性填充
entity.setTeacherOpenCourseStudentSigninSettingSessionTime(now);
entity.setTeacherOpenCourseStudentSigninSettingStartTime(now);
entity.setTeacherOpenCourseStudentSigninSettingAddTime(now);
entity.setTeacherOpenCourseStudentSigninSettingType(manual_signin.name());
entity.setTeacherOpenCourseStudentSigninSettingStartStatus(StartStatusEnum.READY);
entity.setTeacherOpenCourseStudentSigninSettingStatus(1);
entity.setOrgId(user.getOrgId());
entity.setUserId(user.getId());
teacherOpenCourseStudentSigninSettingDao.insert(entity);
// 获取插入后的配置ID
final Long settingId = entity.getTeacherOpenCourseStudentSigninSettingId();
// 构建签到日志集合
List<TeacherOpenCourseStudentSigninLog> signinLogList = dto.getSigninLogList().stream()
.map(item -> {
Student studentInfo = studentDao.getById(item.getStudentId());
Long classId = studentInfo.getClassId();
Assert.notNull(classId, "学生姓名:{}, 编号:{} 信息异常,请联系管理员!"
, studentInfo.getStudentName(), studentInfo.getStudentSn());
// 签到配置ID
final Long settingId = dto.getSigninSetting().getTeacherOpenCourseStudentSigninSettingId();
dto.getSigninLogList().forEach(item -> {
item.setTeacherOpenCourseStudentSigninSettingId(settingId);
});
insertBatch(dto.getSigninLogList());
TeacherOpenCourseStudentSigninLog teacherOpenCourseStudentSigninLog = new TeacherOpenCourseStudentSigninLog();
teacherOpenCourseStudentSigninLog.setTeacherOpenCourseId(entity.getTeacherOpenCourseId());
teacherOpenCourseStudentSigninLog.setSchoolClassId(classId);
teacherOpenCourseStudentSigninLog.setTeacherOpenCourseStudentSigninLogAddTime(now);
teacherOpenCourseStudentSigninLog.setTeacherOpenCourseStudentSigninLogIp(getIpAddr(request));
teacherOpenCourseStudentSigninLog.setTeacherOpenCourseStudentSigninLogTag(SIGN_IN);
teacherOpenCourseStudentSigninLog.setTeacherOpenCourseStudentSigninSettingSessionTime(now);
teacherOpenCourseStudentSigninLog.setTeacherOpenCourseStudentSigninSettingId(settingId);
teacherOpenCourseStudentSigninLog.setOrgId(user.getOrgId());
teacherOpenCourseStudentSigninLog.setUserId(user.getId());
// 拷贝前端传过来的值
BeanUtil.copyProperties(item, teacherOpenCourseStudentSigninLog);
return teacherOpenCourseStudentSigninLog;
// 默认的一些属性填充
}).collect(Collectors.toList());
insertBatch(signinLogList);
}
}

@ -8,6 +8,7 @@ import com.ibeetl.admin.core.annotation.Function;
import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.file.FileService;
import com.ibeetl.admin.core.web.JsonResult;
import com.ibeetl.jlw.entity.RandomStudentListDTO;
import com.ibeetl.jlw.entity.Student;
import com.ibeetl.jlw.entity.TeacherOpenCourseMergeStudent;
import com.ibeetl.jlw.service.TeacherOpenCourseMergeStudentService;
@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.Resource;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
@ -155,13 +157,12 @@ public class TeacherOpenCourseMergeStudentController{
/**
* -
*
* @param teacherOpenCourseId ID
* @param randomCount null-1
* @param dto
* @return
*/
@PostMapping(API + "/randomStudentList.do")
public JsonResult randomStudentList(Long teacherOpenCourseId, Long randomCount) {
return JsonResult.success(teacherOpenCourseMergeStudentService.randomStudentList(teacherOpenCourseId, randomCount));
public JsonResult randomStudentList(@NotNull(message = "必传参数不能为空!") RandomStudentListDTO dto) {
return JsonResult.success(teacherOpenCourseMergeStudentService.randomStudentList(dto));
}

@ -12,7 +12,7 @@ import com.ibeetl.admin.core.util.TimeTool;
import com.ibeetl.admin.core.web.JsonResult;
import com.ibeetl.jlw.entity.FileEntity;
import com.ibeetl.jlw.entity.TeacherOpenCourseStudentSigninLog;
import com.ibeetl.jlw.entity.TeacherOpenCourseStudentSigninLogManualSignInDTO;
import com.ibeetl.jlw.entity.TeacherOpenCourseStudentSigninLogManualMergeDTO;
import com.ibeetl.jlw.entity.dto.TeacherOpenCourseStudentSigninLogSigninDTO;
import com.ibeetl.jlw.service.TeacherOpenCourseStudentSigninLogService;
import com.ibeetl.jlw.web.query.TeacherOpenCourseStudentSigninLogQuery;
@ -24,6 +24,7 @@ import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.beetl.sql.core.engine.PageQuery;
import org.springframework.util.Assert;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -100,10 +101,11 @@ public class TeacherOpenCourseStudentSigninLogController{
*/
@PostMapping(API + "/manualSigninAdd.do")
public JsonResult manualSigninAdd(@RequestBody TeacherOpenCourseStudentSigninLogManualSignInDTO dto, @SCoreUser CoreUser coreUser) {
public JsonResult manualSigninAdd(@RequestBody TeacherOpenCourseStudentSigninLogManualMergeDTO dto, @SCoreUser CoreUser coreUser) {
if(null == coreUser){
return JsonResult.failMessage("请登录后再操作");
}else{
Assert.isTrue(coreUser.isTeacher(), "非老师身份,无法进行手动签到操作!");
teacherOpenCourseStudentSigninLogService.manualSigninAdd(dto);
return JsonResult.success();
}

@ -383,3 +383,29 @@ selectStudentIdListByTeacherId
AND ta.teacher_open_course_school_class_merge_student_status = 1
AND t.teacher_id = #teacherId#
randomStudentList
===
* 教师开课随机获取学生
SELECT
distinct tb.*
FROM
teacher_open_course_merge_teacher t
RIGHT JOIN teacher_open_course_merge_student ta ON ta.teacher_open_course_id = t.teacher_open_course_id
RIGHT JOIN student tb on tb.student_id = ta.student_id
WHERE
1 = 1
AND t.teacher_open_course_merge_teacher_status = 1
AND ta.teacher_open_course_school_class_merge_student_status = 1
AND tb.student_status = 1
AND t.teacher_open_course_id = #teacherOpenCourseId#
@if(!isEmpty(schoolClassIds)){
and find_in_set(tb.class_id, #schoolClassIds#)
@}
@if(!isEmpty(randomCount) && randomCount > 0){
ORDER BY RAND() LIMIT #randomCount#
@}
@if(!isEmpty(studentSnOrName)){
and (tb.student_sn like #'%'+studentSnOrName+'%'# or tb.student_name like #'%'+studentSnOrName+'%'#)
@}

@ -5,6 +5,7 @@ import com.ibeetl.jlw.dao.StudentDao;
import com.ibeetl.jlw.dao.TeacherOpenCourseDao;
import com.ibeetl.jlw.dao.TeacherOpenCourseMergeTeacherDao;
import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.RequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
@ -145,4 +146,27 @@ class TeacherOpenCourseMergeStudentControllerTest extends BaseTest {
System.out.println(result);
clearEnvLoginInfo();
}
@Test
void randomStudentList() throws Exception {
//构造请求参数
RequestBuilder rb = MockMvcRequestBuilders.post(API + "/randomStudentList.do")
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.param("randomCount", "1000")
.param("schoolClassIds", "1")
.param("teacherOpenCourseId", "1569699103338831872")
;
// 测试账号,佟老师
putLoginInfoToEnv("102", "26");
//发送请求,验证返回结果
String result = mvc.perform(rb)
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value("0"))
.andReturn().getResponse().getContentAsString(Charset.defaultCharset());
System.out.println(result);
clearEnvLoginInfo();
}
}

@ -77,6 +77,41 @@ class TeacherOpenCourseStudentSigninLogControllerTest extends BaseTest {
.params(toMultiMap(dto));
//发送请求,验证返回结果
String result = mvc.perform(rb)
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.code").value("0"))
.andReturn().getResponse().getContentAsString(Charset.defaultCharset());
System.out.println(result);
}
@Test
void manualSigninAdd() throws Exception {
String paramsString = "{\n" +
" \"signinSetting\": {\n" +
" \"teacherOpenCourseId\": 1569699103338831872,\n" +
" \"schoolClassIds\": \"1\"\n" +
" },\n" +
" \"signinLogList\": [\n" +
" {\n" +
" \"studentId\": 11,\n" +
" \"teacherOpenCourseStudentSigninLogRemark\": \"这个学生缺勤了\",\n" +
" \"teacherOpenCourseStudentSigninLogTag\": \"UN_SIGN_IN\"\n" +
" }\n" +
" ]\n" +
"}";
//构造请求参数
RequestBuilder rb = MockMvcRequestBuilders.post(API + "/manualSigninAdd.do")
.contentType(MediaType.APPLICATION_JSON_VALUE)
// 模拟IP
.header(X_FORWARDED_FOR, "192.168.1.2")
.content(paramsString);
// 测试账号,佟老师
putLoginInfoToEnv("102", "26");
//发送请求,验证返回结果
String result = mvc.perform(rb)
.andExpect(status().isOk())

Loading…
Cancel
Save