新增做题日志;

增加Request工具类
beetlsql3-dev
Mlxa0324 3 years ago
parent e86a99d945
commit fed6eaf3ad

@ -3,6 +3,7 @@ package cn.jlw.Interceptor;
import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.service.CorePlatformService; import com.ibeetl.admin.core.service.CorePlatformService;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.context.request.NativeWebRequest;
@ -13,9 +14,10 @@ import javax.servlet.http.HttpServletRequest;
//将从token中获取的member获取出来 //将从token中获取的member获取出来
public class getSCoreUser implements HandlerMethodArgumentResolver { @Configuration
public class GetSCoreUser implements HandlerMethodArgumentResolver {
public getSCoreUser() { public GetSCoreUser() {
} }
@Override @Override

@ -0,0 +1,95 @@
package com.ibeetl.admin.core.util.servlet;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.json.JSONUtil;
import org.springframework.http.MediaType;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
/**
*
*
* @author mlx
*/
public class ServletUtils {
/**
* JSON
*
* @param response
* @param object JSON
*/
@SuppressWarnings("deprecation") // 必须使用 APPLICATION_JSON_UTF8_VALUE否则会乱码
public static void writeJSON(HttpServletResponse response, Object object) {
String content = JSONUtil.toJsonStr(object);
ServletUtil.write(response, content, MediaType.APPLICATION_JSON_UTF8_VALUE);
}
/**
*
*
* @param response
* @param filename
* @param content
* @throws IOException
*/
public static void writeAttachment(HttpServletResponse response, String filename, byte[] content) throws IOException {
// 设置 header 和 contentType
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
// 输出附件
IoUtil.write(response.getOutputStream(), false, content);
}
/**
* @param request
* @return ua
*/
public static String getUserAgent(HttpServletRequest request) {
String ua = request.getHeader("User-Agent");
return ua != null ? ua : "";
}
/**
*
*
* @return HttpServletRequest
*/
public static HttpServletRequest getRequest() {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if (!(requestAttributes instanceof ServletRequestAttributes)) {
return null;
}
return ((ServletRequestAttributes) requestAttributes).getRequest();
}
public static String getUserAgent() {
HttpServletRequest request = getRequest();
if (request == null) {
return null;
}
return getUserAgent(request);
}
public static String getClientIP() {
HttpServletRequest request = getRequest();
if (request == null) {
return null;
}
return ServletUtil.getClientIP(request);
}
public static boolean isJsonRequest(ServletRequest request) {
return StrUtil.startWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE);
}
}

@ -0,0 +1,55 @@
package com.ibeetl.admin.core.util.user;
import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.service.CorePlatformService;
import java.util.Objects;
import static com.ibeetl.admin.core.util.servlet.ServletUtils.getRequest;
/**
* <p>
*
* </p>
*
* @author mlx
* @date 2022/9/27
* @modified
*/
public class CacheUserUtil {
/**
*
* @return
*/
public static CoreUser getUser() {
CoreUser user = (CoreUser) getRequest().getSession().getAttribute(CorePlatformService.ACCESS_CURRENT_USER);
Objects.requireNonNull(user, "用户未登录或状态已超时!");
return user;
}
/**
*
* @return
*/
public static String getUserName() {
return getUser().getName();
}
/**
* ID
* @return
*/
public static Long getUserId() {
return getUser().getId();
}
/**
* Code
* @return
*/
public static String getUserCode() {
return getUser().getCode();
}
}

@ -1,49 +0,0 @@
package com.ibeetl.admin.test.base;
import com.ibeetl.admin.test.config.RedisTestConfiguration;
import com.ibeetl.admin.test.config.SqlInitializationTestConfiguration;
import com.qeedata.data.beetlsql.dynamic.BeetlSqlBeanRegister;
import com.qeedata.data.beetlsql.dynamic.configure.DynamicBeetlSqlAutoConfiguration;
import org.junit.runner.RunWith;
import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.junit4.SpringRunner;
/**
* <p>
*
* TODO
* </p>
*
* @author mlx
* @date 2022/9/24
* @modified
*/
@SpringBootTest(classes = {BaseDbAndRedisUnitTest1.Application.class}, webEnvironment = SpringBootTest.WebEnvironment.NONE)
@RunWith(SpringRunner.class)
@AutoConfigureMockMvc
@ActiveProfiles("test")
@Sql(scripts = "/sql/clean.sql", executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) // 每个单元测试结束后,清理 DB
public class BaseDbAndRedisUnitTest1 {
@Import({
// DB 配置类
DataSourceAutoConfiguration.class, // Spring DB 自动配置类
DataSourceTransactionManagerAutoConfiguration.class, // Spring 事务自动配置类
SqlInitializationTestConfiguration.class, // SQL 初始化
// BeetlSql 配置类
BeetlSqlBeanRegister.class,
DynamicBeetlSqlAutoConfiguration.class, // 动态多数据源BeetlSql
// Redis 配置类
RedisTestConfiguration.class, // Redis 测试配置类,用于启动 RedisServer
RedisAutoConfiguration.class, // Spring Redis 自动配置类
})
public static class Application {
}
}

@ -6,7 +6,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
/** /**
* Mockito * Mockito
* *
* @author * @author mlx
*/ */
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
public class BaseMockitoUnitTest { public class BaseMockitoUnitTest {

@ -11,7 +11,7 @@ import java.util.Objects;
/** /**
* assert * assert
* *
* @author * @author mlx
*/ */
public class AssertUtils { public class AssertUtils {

@ -18,7 +18,7 @@ import static java.lang.Math.min;
/** /**
* *
* *
* @author * @author mlx
*/ */
public class RandomUtils { public class RandomUtils {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -28626,9 +28626,6 @@ alter table teacher_open_course_homework comment '我的课程-题库作业';
-- Records of teacher_open_course_homework -- Records of teacher_open_course_homework
-- ---------------------------- -- ----------------------------
-- ----------------------------
-- Table structure for teacher_open_course_homework_question_log
-- ----------------------------
drop table if exists teacher_open_course_homework_question_log; drop table if exists teacher_open_course_homework_question_log;
/*==============================================================*/ /*==============================================================*/
@ -28643,6 +28640,8 @@ create table teacher_open_course_homework_question_log
teacher_open_course_homework_question_log_upload_file varchar(1000) comment '附件,学生端上传附件(单文件)', teacher_open_course_homework_question_log_upload_file varchar(1000) comment '附件,学生端上传附件(单文件)',
teacher_open_course_homework_question_log_add_time datetime comment '创建时间', teacher_open_course_homework_question_log_add_time datetime comment '创建时间',
teacher_open_course_homework_question_log_status int comment '状态1正常 2删除', teacher_open_course_homework_question_log_status int comment '状态1正常 2删除',
teacher_open_course_homework_question_log_from_type varchar(50) comment '来源类型(枚举)',
student_id bigint comment '学生ID',
org_id bigint comment '组织ID', org_id bigint comment '组织ID',
user_id bigint comment '用户ID', user_id bigint comment '用户ID',
primary key (teacher_open_course_homework_question_log_id) primary key (teacher_open_course_homework_question_log_id)
@ -28654,6 +28653,7 @@ COLLATE = utf8_general_ci;
alter table teacher_open_course_homework_question_log comment '我的课程-题库作业-做题日志'; alter table teacher_open_course_homework_question_log comment '我的课程-题库作业-做题日志';
-- ---------------------------- -- ----------------------------
-- Records of teacher_open_course_homework_question_log -- Records of teacher_open_course_homework_question_log
-- ---------------------------- -- ----------------------------

@ -14,6 +14,7 @@ import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.context.request.NativeWebRequest;
@ -36,7 +37,9 @@ import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
//将从request中获取的file获取出来并存入临时文件夹中 //将从request中获取的file获取出来并存入临时文件夹中
public class getFile implements HandlerMethodArgumentResolver {
@Configuration
public class GetFile implements HandlerMethodArgumentResolver {
private ExecutorService pool = Executors.newCachedThreadPool(); private ExecutorService pool = Executors.newCachedThreadPool();
@ -51,7 +54,7 @@ public class getFile implements HandlerMethodArgumentResolver {
} }
} }
public getFile() { public GetFile() {
} }
@Override @Override

@ -1,6 +1,7 @@
package cn.jlw.Interceptor; package cn.jlw.Interceptor;
import cn.jlw.util.IpUtils; import cn.jlw.util.IpUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.context.request.NativeWebRequest;
@ -9,9 +10,10 @@ import org.springframework.web.method.support.ModelAndViewContainer;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
public class getIp implements HandlerMethodArgumentResolver { @Configuration
public class GetIp implements HandlerMethodArgumentResolver {
public getIp() { public GetIp() {
} }
@Override @Override

@ -1,6 +1,7 @@
package cn.jlw.Interceptor; package cn.jlw.Interceptor;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.context.request.NativeWebRequest;
@ -9,10 +10,11 @@ import org.springframework.web.method.support.ModelAndViewContainer;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
public class getReferer implements HandlerMethodArgumentResolver { @Configuration
public class GetReferer implements HandlerMethodArgumentResolver {
public getReferer() { public GetReferer() {
} }
@Override @Override

@ -1,6 +1,7 @@
package cn.jlw.Interceptor; package cn.jlw.Interceptor;
import com.ibeetl.jlw.entity.Student; import com.ibeetl.jlw.entity.Student;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.MethodParameter; import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.context.request.NativeWebRequest;
@ -11,9 +12,10 @@ import javax.servlet.http.HttpServletRequest;
//将从token中获取的member获取出来 //将从token中获取的member获取出来
public class getTStudent implements HandlerMethodArgumentResolver { @Configuration
public class GetTStudent implements HandlerMethodArgumentResolver {
public getTStudent() { public GetTStudent() {
} }
@Override @Override

@ -12,6 +12,7 @@ import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
import java.util.List; import java.util.List;
import java.util.ResourceBundle; import java.util.ResourceBundle;
@ -20,6 +21,12 @@ import java.util.ResourceBundle;
@Configuration @Configuration
public class InterceptorConfig implements WebMvcConfigurer { public class InterceptorConfig implements WebMvcConfigurer {
@Resource private GetSCoreUser getSCoreUser;
@Resource private GetFile getFile;
@Resource private GetTStudent getTStudent;
@Resource private GetReferer getReferer;
@Resource private GetIp getIp;
private final Log log = LogFactory.getLog(this.getClass()); private final Log log = LogFactory.getLog(this.getClass());
private static String p = new FileEntity().getParentPath(); private static String p = new FileEntity().getParentPath();
@ -75,11 +82,11 @@ public class InterceptorConfig implements WebMvcConfigurer {
*/ */
@Override @Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new getSCoreUser()); argumentResolvers.add(getSCoreUser);
argumentResolvers.add(new getFile()); argumentResolvers.add(getFile);
argumentResolvers.add(new getTStudent()); argumentResolvers.add(getTStudent);
argumentResolvers.add(new getReferer()); argumentResolvers.add(getReferer);
argumentResolvers.add(new getIp()); argumentResolvers.add(getIp);
} }
} }

@ -1,18 +1,15 @@
package cn.jlw.util; package cn.jlw.util;
import cn.jlw.Interceptor.getFile; import cn.jlw.Interceptor.GetFile;
import cn.jlw.aliPay.utils.StringUtils;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.RandomAccessFile; import java.io.RandomAccessFile;
import java.lang.reflect.InvocationTargetException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.channels.FileChannel; import java.nio.channels.FileChannel;
import java.util.UUID;
/** /**
* @author TLT * @author TLT
@ -22,7 +19,7 @@ import java.util.UUID;
@Component @Component
public class ChunkUploadUtil { public class ChunkUploadUtil {
public boolean chunkUploadByMappedByteBuffer(getFile.MultipartFileParam param, String filePath,String tempName) throws Exception { public boolean chunkUploadByMappedByteBuffer(GetFile.MultipartFileParam param, String filePath, String tempName) throws Exception {
String fileName = param.getMultipartFile().getOriginalFilename(); String fileName = param.getMultipartFile().getOriginalFilename();
String format = fileName.substring(fileName.lastIndexOf(".")); String format = fileName.substring(fileName.lastIndexOf("."));
@ -86,7 +83,7 @@ public class ChunkUploadUtil {
* *
* @return * @return
*/ */
public boolean checkUploadPartStatus(getFile.MultipartFileParam param, String fileName, String filePath) throws IOException { public boolean checkUploadPartStatus(GetFile.MultipartFileParam param, String fileName, String filePath) throws IOException {
File confFile = new File(filePath, fileName + ".conf"); File confFile = new File(filePath, fileName + ".conf");
if(confFile.exists()){ if(confFile.exists()){
byte[] completeStatusList = FileUtils.readFileToByteArray(confFile); byte[] completeStatusList = FileUtils.readFileToByteArray(confFile);
@ -102,7 +99,7 @@ public class ChunkUploadUtil {
* *
* @return * @return
*/ */
public boolean checkUploadStatus(getFile.MultipartFileParam param, String fileName, String filePath) throws IOException { public boolean checkUploadStatus(GetFile.MultipartFileParam param, String fileName, String filePath) throws IOException {
File confFile = new File(filePath, fileName + ".conf"); File confFile = new File(filePath, fileName + ".conf");
RandomAccessFile confAccessFile = new RandomAccessFile(confFile, "rw"); RandomAccessFile confAccessFile = new RandomAccessFile(confFile, "rw");
//设置文件长度 //设置文件长度

@ -12,7 +12,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import static cn.jlw.Interceptor.getFile.p;
import static cn.jlw.Interceptor.GetFile.p;
/** /**
* mp4m3u8 * mp4m3u8

@ -1,6 +1,6 @@
package cn.jlw.util; package cn.jlw.util;
import cn.jlw.Interceptor.getFile; import cn.jlw.Interceptor.GetFile;
import cn.jlw.aliPay.utils.StringUtils; import cn.jlw.aliPay.utils.StringUtils;
import com.google.zxing.BarcodeFormat; import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType; import com.google.zxing.EncodeHintType;
@ -11,19 +11,21 @@ import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.ibeetl.admin.core.util.TimeTool; import com.ibeetl.admin.core.util.TimeTool;
import org.apache.tomcat.util.codec.binary.Base64; import org.apache.tomcat.util.codec.binary.Base64;
import sun.font.FontDesignMetrics;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import java.awt.*; import java.awt.*;
import java.awt.geom.RoundRectangle2D; import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.*; import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.sql.Time; import java.util.HashMap;
import java.util.*; import java.util.Map;
import java.util.List; import java.util.Objects;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -215,7 +217,7 @@ public class zxing {
if(headImg.contains("http")){ if(headImg.contains("http")){
head = disposeImage(getRemoteBufferedImage(headImg),160,160); head = disposeImage(getRemoteBufferedImage(headImg),160,160);
}else { }else {
File goodsImgFile = new File(getFile.p+headImg); File goodsImgFile = new File(GetFile.p+headImg);
head = disposeImage(imageIoRead(goodsImgFile),160,160); head = disposeImage(imageIoRead(goodsImgFile),160,160);
} }
BufferedImage code = disposeImage(imageIoRead(codeFile),300,300); BufferedImage code = disposeImage(imageIoRead(codeFile),300,300);
@ -372,7 +374,7 @@ public class zxing {
//File groundFile = new File("D://1.png"); //File groundFile = new File("D://1.png");
File groundFile = new File(getFile.p+File.separator + "filesystem" + File.separator + "temp" +File.separator+"groundGood.png"); File groundFile = new File(GetFile.p+File.separator + "filesystem" + File.separator + "temp" +File.separator+"groundGood.png");
BufferedImage ground = imageIoRead(groundFile); BufferedImage ground = imageIoRead(groundFile);
int width = ground.getWidth(); int width = ground.getWidth();
@ -388,7 +390,7 @@ public class zxing {
goodsImg = disposeImage(getRemoteBufferedImage(imgUrl),500,500); goodsImg = disposeImage(getRemoteBufferedImage(imgUrl),500,500);
}else { }else {
//File goodsImgFile = new File(imgUrl); //File goodsImgFile = new File(imgUrl);
File goodsImgFile = new File(getFile.p+imgUrl); File goodsImgFile = new File(GetFile.p+imgUrl);
goodsImg = disposeImage(imageIoRead(goodsImgFile),500,500); goodsImg = disposeImage(imageIoRead(goodsImgFile),500,500);
} }

@ -10,7 +10,7 @@ import org.beetl.sql.mapper.annotation.Update;
import java.util.List; import java.util.List;
/** /**
* Dao * Dao
*/ */
@SqlResource("jlw.teacherOpenCourseHomeworkQuestionLog") @SqlResource("jlw.teacherOpenCourseHomeworkQuestionLog")
public interface TeacherOpenCourseHomeworkQuestionLogDao extends BaseMapper<TeacherOpenCourseHomeworkQuestionLog>{ public interface TeacherOpenCourseHomeworkQuestionLogDao extends BaseMapper<TeacherOpenCourseHomeworkQuestionLog>{

@ -1,5 +1,6 @@
package com.ibeetl.jlw.entity; package com.ibeetl.jlw.entity;
import cn.hutool.core.collection.ConcurrentHashSet;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
@ -7,7 +8,6 @@ import cn.hutool.core.util.ReflectUtil;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.*; import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import static org.apache.commons.lang3.StringUtils.join; import static org.apache.commons.lang3.StringUtils.join;
import static org.apache.commons.lang3.StringUtils.upperCase; import static org.apache.commons.lang3.StringUtils.upperCase;
@ -56,9 +56,9 @@ public class ResourcesQuestionOptionEntity {
* @param answerMap <ABCD..> * @param answerMap <ABCD..>
* @return * @return
*/ */
public List<String> getAnswerList(Map<String, String> answerMap) { public Set<String> getAnswerList(Map<String, String> answerMap) {
// 最后的答案 // 最后的答案
List<String> answerList = new CopyOnWriteArrayList<>(); Set<String> answerList = new ConcurrentHashSet<>();
answerMap.forEach((optionText, newAnswer) -> { answerMap.forEach((optionText, newAnswer) -> {
optionTextMap.forEach((optionText2, isAnswer) -> { optionTextMap.forEach((optionText2, isAnswer) -> {
if (optionText2.equals(optionText) && isAnswer) { if (optionText2.equals(optionText) && isAnswer) {
@ -130,9 +130,9 @@ public class ResourcesQuestionOptionEntity {
} }
// 如果没有选项,可能是单选或者其他类型的题目 // 如果没有选项,可能是单选或者其他类型的题目
List<String> answerList = optionEntity.getAnswerList(answerMap); Set<String> answerList = optionEntity.getAnswerList(answerMap);
List<String> defaultAnswer = Collections.singletonList(questionAnswer); Set<String> defaultAnswer = Collections.singleton(questionAnswer);
List<String> answer = ObjectUtil.isNotEmpty(answerList)? answerList: defaultAnswer; Set<String> answer = ObjectUtil.isNotEmpty(answerList)? answerList: defaultAnswer;
// 乱序后的正确答案赋值 // 乱序后的正确答案赋值
ReflectUtil.setFieldValue(obj, answerFieldName, join(answer, ",")); ReflectUtil.setFieldValue(obj, answerFieldName, join(answer, ","));
} }

@ -10,7 +10,7 @@ import java.util.Date;
/* /*
* -- * --
* gen by Spring Boot2 Admin 2022-09-26 * gen by Spring Boot2 Admin 2022-09-28
*/ */
public class TeacherOpenCourseHomeworkQuestionLog extends BaseEntity{ public class TeacherOpenCourseHomeworkQuestionLog extends BaseEntity{
@ -27,7 +27,6 @@ public class TeacherOpenCourseHomeworkQuestionLog extends BaseEntity{
private Long teacherOpenCourseQuestionHomeworkId ; private Long teacherOpenCourseQuestionHomeworkId ;
//题目快照ID //题目快照ID
@Dict(type="resources_question_snapshot.question_stem.question_status=1")
private Long resourcesQuestionSnapshotId ; private Long resourcesQuestionSnapshotId ;
@ -48,6 +47,14 @@ public class TeacherOpenCourseHomeworkQuestionLog extends BaseEntity{
private Integer teacherOpenCourseHomeworkQuestionLogStatus ; private Integer teacherOpenCourseHomeworkQuestionLogStatus ;
//来源类型(枚举)
private String teacherOpenCourseHomeworkQuestionLogFromType ;
//学生ID
private Long studentId ;
//组织ID //组织ID
private Long orgId ; private Long orgId ;
@ -150,6 +157,32 @@ public class TeacherOpenCourseHomeworkQuestionLog extends BaseEntity{
this.teacherOpenCourseHomeworkQuestionLogStatus = teacherOpenCourseHomeworkQuestionLogStatus; this.teacherOpenCourseHomeworkQuestionLogStatus = teacherOpenCourseHomeworkQuestionLogStatus;
} }
/**
*@return
*/
public String getTeacherOpenCourseHomeworkQuestionLogFromType(){
return teacherOpenCourseHomeworkQuestionLogFromType;
}
/**
*@param teacherOpenCourseHomeworkQuestionLogFromType
*/
public void setTeacherOpenCourseHomeworkQuestionLogFromType(String teacherOpenCourseHomeworkQuestionLogFromType){
this.teacherOpenCourseHomeworkQuestionLogFromType = teacherOpenCourseHomeworkQuestionLogFromType;
}
/**ID
*@return
*/
public Long getStudentId(){
return studentId;
}
/**ID
*@param studentId
*/
public void setStudentId(Long studentId){
this.studentId = studentId;
}
/**ID /**ID
*@return *@return
*/ */

@ -20,7 +20,7 @@ import java.math.RoundingMode;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import static cn.jlw.Interceptor.getFile.p; import static cn.jlw.Interceptor.GetFile.p;
import static java.lang.Thread.sleep; import static java.lang.Thread.sleep;
public class ImageAutoJob implements Job { public class ImageAutoJob implements Job {

@ -1,7 +1,7 @@
package com.ibeetl.jlw.service; package com.ibeetl.jlw.service;
import cn.jlw.Interceptor.getFile; import cn.jlw.Interceptor.GetFile;
import cn.jlw.util.ToolUtils; import cn.jlw.util.ToolUtils;
import com.ibeetl.admin.core.service.CoreBaseService; import com.ibeetl.admin.core.service.CoreBaseService;
import com.ibeetl.admin.core.service.CorePlatformService; import com.ibeetl.admin.core.service.CorePlatformService;
@ -762,7 +762,7 @@ public class CourseInfoService extends CoreBaseService<CourseInfo>{
//文件夹路径 //文件夹路径
String saveUrl = File.separator + "filesystem" + File.separator + "courseInfo" + File.separator + System.currentTimeMillis() + File.separator ; String saveUrl = File.separator + "filesystem" + File.separator + "courseInfo" + File.separator + System.currentTimeMillis() + File.separator ;
String path = getFile.p + saveUrl; String path = GetFile.p + saveUrl;
File m = new File(path); File m = new File(path);
if(!m.exists()){ if(!m.exists()){
@ -778,7 +778,7 @@ public class CourseInfoService extends CoreBaseService<CourseInfo>{
if(null != courseInfoList && courseInfoList.size()>0){ if(null != courseInfoList && courseInfoList.size()>0){
String p = saveUrl + System.currentTimeMillis() + ".docx"; String p = saveUrl + System.currentTimeMillis() + ".docx";
String url = getFile.p + p; String url = GetFile.p + p;
FileInputStream fis = new FileInputStream(file); FileInputStream fis = new FileInputStream(file);

@ -21,7 +21,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* Service * Service
* ID使insert(*,true) * ID使insert(*,true)
*/ */
@ -58,7 +58,7 @@ public class TeacherOpenCourseHomeworkQuestionLogService extends CoreBaseService
try { try {
teacherOpenCourseHomeworkQuestionLogDao.deleteTeacherOpenCourseHomeworkQuestionLogByIds(ids); teacherOpenCourseHomeworkQuestionLogDao.deleteTeacherOpenCourseHomeworkQuestionLogByIds(ids);
} catch (Exception e) { } catch (Exception e) {
throw new PlatformException("批量删除开课作业日志失败", e); throw new PlatformException("批量删除做题日志失败", e);
} }
} }

@ -1,7 +1,5 @@
package com.ibeetl.jlw.service; package com.ibeetl.jlw.service;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.validation.BeanValidationResult; import cn.hutool.extra.validation.BeanValidationResult;
import cn.hutool.extra.validation.ValidationUtil; import cn.hutool.extra.validation.ValidationUtil;
import cn.jlw.util.ToolUtils; import cn.jlw.util.ToolUtils;
@ -29,14 +27,12 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import static cn.hutool.json.JSONUtil.toJsonStr; import static cn.hutool.json.JSONUtil.toJsonStr;
import static com.ibeetl.admin.core.util.user.CacheUserUtil.getUserId;
import static com.ibeetl.jlw.entity.ResourcesQuestionOptionEntity.shuffleOrderOptions; import static com.ibeetl.jlw.entity.ResourcesQuestionOptionEntity.shuffleOrderOptions;
import static com.ibeetl.jlw.web.query.TeacherOpenCourseHomeworkQuery.TeacherOpenCourseHomeworkTypeEnum.getClazzByEnum; import static com.ibeetl.jlw.web.query.TeacherOpenCourseHomeworkQuery.TeacherOpenCourseHomeworkTypeEnum.getClazzByEnum;
import static java.util.stream.Collectors.groupingBy;
/** /**
* Service * Service
@ -51,6 +47,8 @@ public class TeacherOpenCourseHomeworkService extends CoreBaseService<TeacherOpe
@Resource private TeacherOpenCourseHomeworkSettingService teacherOpenCourseHomeworkSettingService; @Resource private TeacherOpenCourseHomeworkSettingService teacherOpenCourseHomeworkSettingService;
@Resource private ResourcesQuestionSnapshotDao resourcesQuestionSnapshotDao; @Resource private ResourcesQuestionSnapshotDao resourcesQuestionSnapshotDao;
public PageQuery<TeacherOpenCourseHomework>queryByCondition(PageQuery query){ public PageQuery<TeacherOpenCourseHomework>queryByCondition(PageQuery query){
PageQuery ret = teacherOpenCourseHomeworkDao.queryByCondition(query); PageQuery ret = teacherOpenCourseHomeworkDao.queryByCondition(query);
queryListAfter(ret.getList()); queryListAfter(ret.getList());
@ -199,15 +197,19 @@ public class TeacherOpenCourseHomeworkService extends CoreBaseService<TeacherOpe
final Integer TRUE_CONST = 1; final Integer TRUE_CONST = 1;
List<ResourcesQuestionSnapshot> resourcesQuestionSnapshots = new ArrayList<>(); List<ResourcesQuestionSnapshot> resourcesQuestionSnapshots = new ArrayList<>();
TeacherOpenCourseHomework homework = getInfo(teacherOpenCourseHomeworkId); TeacherOpenCourseHomework homework = getInfo(teacherOpenCourseHomeworkId);
cn.hutool.core.lang.Assert.notNull(homework, "未查询到"); cn.hutool.core.lang.Assert.notNull(homework, "未查询到作业ID对应的题目");
TeacherOpenCourseHomeworkSettingQuery settingQuery = new TeacherOpenCourseHomeworkSettingQuery(); TeacherOpenCourseHomeworkSettingQuery settingQuery = new TeacherOpenCourseHomeworkSettingQuery();
settingQuery.setTeacherOpenCourseHomeworkId(teacherOpenCourseHomeworkId); settingQuery.setTeacherOpenCourseHomeworkId(teacherOpenCourseHomeworkId);
TeacherOpenCourseHomeworkSetting hwSetting = teacherOpenCourseHomeworkSettingService.getInfo(settingQuery); TeacherOpenCourseHomeworkSetting hwSetting = teacherOpenCourseHomeworkSettingService.getInfo(settingQuery);
ResourcesQuestionSnapshotQuery questionSnapshotQuery = new ResourcesQuestionSnapshotQuery();
questionSnapshotQuery.setFromId(teacherOpenCourseHomeworkId);
// 作答次数 // 作答次数
if (TRUE_CONST.equals(hwSetting.getTeacherOpenCourseHomeworkSettingDoCount())) { if (TRUE_CONST.equals(hwSetting.getTeacherOpenCourseHomeworkSettingDoCount())) {
// TODO 逻辑不一定要在这里写 // TODO 逻辑不一定要在这里写
getUserId();
} }
// 答卷后显示答案解析 // 答卷后显示答案解析
@ -220,10 +222,13 @@ public class TeacherOpenCourseHomeworkService extends CoreBaseService<TeacherOpe
// TODO 逻辑不一定要在这里写 // TODO 逻辑不一定要在这里写
} }
// 题目乱序(同一大题内)
if (TRUE_CONST.equals(hwSetting.getTeacherOpenCourseHomeworkSettingQuestionNoOrder())) {
questionSnapshotQuery.setRand(true);
}
// 选项乱序(限单选、多选) // 选项乱序(限单选、多选)
if (TRUE_CONST.equals(hwSetting.getTeacherOpenCourseHomeworkSettingOptionNoOrder())) { if (TRUE_CONST.equals(hwSetting.getTeacherOpenCourseHomeworkSettingOptionNoOrder())) {
ResourcesQuestionSnapshotQuery questionSnapshotQuery = new ResourcesQuestionSnapshotQuery();
questionSnapshotQuery.setFromId(teacherOpenCourseHomeworkId);
resourcesQuestionSnapshots = resourcesQuestionSnapshotDao.getValuesByQuery(questionSnapshotQuery); resourcesQuestionSnapshots = resourcesQuestionSnapshotDao.getValuesByQuery(questionSnapshotQuery);
// 单题选项排序处理 // 单题选项排序处理
@ -231,37 +236,8 @@ public class TeacherOpenCourseHomeworkService extends CoreBaseService<TeacherOpe
shuffleOrderOptions(value, "questionAnswer","questionOption", true)); shuffleOrderOptions(value, "questionAnswer","questionOption", true));
} }
// 题目乱序(同一大题内)
if (TRUE_CONST.equals(hwSetting.getTeacherOpenCourseHomeworkSettingQuestionNoOrder())) {
shuffleOrderQuestions(resourcesQuestionSnapshots);
}
return resourcesQuestionSnapshots;
}
/**
*
* @param resourcesQuestionSnapshots
*/
private void shuffleOrderQuestions(List<ResourcesQuestionSnapshot> resourcesQuestionSnapshots) {
// 安全判空
if (ObjectUtil.isEmpty(resourcesQuestionSnapshots)) {
return;
}
// 题目根据类型分组 return resourcesQuestionSnapshots;
Map<Integer, List<ResourcesQuestionSnapshot>> questionTypeMap = resourcesQuestionSnapshots.stream()
.collect(groupingBy(ResourcesQuestionSnapshot::getQuestionType));
// 同一道大题内,乱序
questionTypeMap.forEach((questionType, questionSnapshots) -> {
Collections.shuffle(questionSnapshots);
});
// 大题数字升序
MapUtil.sort(questionTypeMap);
} }
} }

@ -1,59 +1,33 @@
package com.ibeetl.jlw.web; package com.ibeetl.jlw.web;
import cn.jlw.Interceptor.RFile;
import cn.jlw.Interceptor.SCoreUser; import cn.jlw.Interceptor.SCoreUser;
import cn.jlw.Interceptor.getFile;
import cn.jlw.util.ToolUtils;
import cn.jlw.validate.ValidateConfig; import cn.jlw.validate.ValidateConfig;
import com.ibeetl.admin.core.annotation.Function;
import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.file.FileService; import com.ibeetl.admin.core.file.FileService;
import com.ibeetl.admin.core.util.ConvertUtil;
import com.ibeetl.admin.core.util.PlatformException;
import com.ibeetl.admin.core.util.TimeTool;
import com.ibeetl.admin.core.web.JsonResult; import com.ibeetl.admin.core.web.JsonResult;
import com.ibeetl.jlw.entity.HandsOn;
import com.ibeetl.jlw.entity.HandsOnSimulationTasks;
import com.ibeetl.jlw.service.HandsOnService;
import com.ibeetl.jlw.service.HandsOnSimulationTasksService;
import com.ibeetl.jlw.web.query.HandsOnQuery;
import com.ibeetl.jlw.web.query.HandsOnSimulationTasksQuery;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.beetl.sql.core.engine.PageQuery; import org.beetl.sql.core.engine.PageQuery;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.validation.annotation.Validated; import org.springframework.web.servlet.ModelAndView;
import com.ibeetl.admin.console.web.dto.DictExcelImportData;
import com.ibeetl.admin.console.web.query.UserQuery;
import com.ibeetl.admin.core.annotation.Function;
import com.ibeetl.jlw.entity.*;
import com.ibeetl.jlw.service.*;
import com.ibeetl.jlw.web.query.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import javax.annotation.Resource;
/** /**
* HandsOn * HandsOn

@ -1,58 +1,28 @@
package com.ibeetl.jlw.web; package com.ibeetl.jlw.web;
import cn.jlw.Interceptor.RFile;
import cn.jlw.Interceptor.SCoreUser; import cn.jlw.Interceptor.SCoreUser;
import cn.jlw.Interceptor.getFile;
import cn.jlw.util.ToolUtils;
import cn.jlw.validate.ValidateConfig; import cn.jlw.validate.ValidateConfig;
import com.ibeetl.admin.core.annotation.Function;
import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.entity.CoreUser;
import com.ibeetl.admin.core.file.FileService; import com.ibeetl.admin.core.file.FileService;
import com.ibeetl.admin.core.util.ConvertUtil;
import com.ibeetl.admin.core.util.PlatformException;
import com.ibeetl.admin.core.util.TimeTool;
import com.ibeetl.admin.core.web.JsonResult; import com.ibeetl.admin.core.web.JsonResult;
import com.ibeetl.jlw.entity.HandsOnSimulationTasks;
import com.ibeetl.jlw.service.HandsOnSimulationTasksService;
import com.ibeetl.jlw.web.query.HandsOnSimulationTasksQuery;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.beetl.sql.core.engine.PageQuery; import org.beetl.sql.core.engine.PageQuery;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.validation.annotation.Validated; import org.springframework.web.servlet.ModelAndView;
import com.ibeetl.admin.console.web.dto.DictExcelImportData;
import com.ibeetl.admin.console.web.query.UserQuery;
import com.ibeetl.admin.core.annotation.Function;
import com.ibeetl.jlw.entity.*;
import com.ibeetl.jlw.service.*;
import com.ibeetl.jlw.web.query.*;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import javax.annotation.Resource;
/** /**
* HandsOnSimulationTasks - * HandsOnSimulationTasks -

@ -1,7 +1,7 @@
package com.ibeetl.jlw.web; package com.ibeetl.jlw.web;
import cn.jlw.Interceptor.GetFile;
import cn.jlw.Interceptor.RFile; import cn.jlw.Interceptor.RFile;
import cn.jlw.Interceptor.getFile;
import cn.jlw.validate.ValidateConfig; import cn.jlw.validate.ValidateConfig;
import com.ibeetl.admin.core.annotation.Function; import com.ibeetl.admin.core.annotation.Function;
import com.ibeetl.admin.core.file.FileService; import com.ibeetl.admin.core.file.FileService;
@ -330,7 +330,7 @@ public class ResourcesQuestionController{
XSSFWorkbook workbook = null; XSSFWorkbook workbook = null;
InputStream is = null; InputStream is = null;
try { try {
is = new FileInputStream(getFile.p + File.separator +"filesystem"+ File.separator +"template"+ File.separator+ "题库导入模板.xlsx"); is = new FileInputStream(GetFile.p + File.separator +"filesystem"+ File.separator +"template"+ File.separator+ "题库导入模板.xlsx");
workbook = new XSSFWorkbook(is); workbook = new XSSFWorkbook(is);

@ -1,6 +1,5 @@
package com.ibeetl.jlw.web; package com.ibeetl.jlw.web;
import cn.hutool.core.util.ObjectUtil;
import cn.jlw.Interceptor.*; import cn.jlw.Interceptor.*;
import cn.jlw.token.TokenService; import cn.jlw.token.TokenService;
import cn.jlw.util.JupyterNotebookUtils; import cn.jlw.util.JupyterNotebookUtils;
@ -2273,7 +2272,7 @@ public class StudentController{
XSSFWorkbook workbook = null; XSSFWorkbook workbook = null;
InputStream is = null; InputStream is = null;
try { try {
is = new FileInputStream(getFile.p + File.separator +"filesystem"+ File.separator +"template"+ File.separator+ "学生导入模板.xlsx"); is = new FileInputStream(GetFile.p + File.separator +"filesystem"+ File.separator +"template"+ File.separator+ "学生导入模板.xlsx");
workbook = new XSSFWorkbook(is); workbook = new XSSFWorkbook(is);

@ -1,8 +1,8 @@
package com.ibeetl.jlw.web; package com.ibeetl.jlw.web;
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;
import cn.jlw.Interceptor.getFile;
import cn.jlw.util.JupyterNotebookUtils; import cn.jlw.util.JupyterNotebookUtils;
import cn.jlw.util.ToolUtils; import cn.jlw.util.ToolUtils;
import cn.jlw.validate.ValidateConfig; import cn.jlw.validate.ValidateConfig;
@ -1274,7 +1274,7 @@ public class TeacherController{
XSSFWorkbook workbook = null; XSSFWorkbook workbook = null;
InputStream is = null; InputStream is = null;
try { try {
is = new FileInputStream(getFile.p + File.separator +"filesystem"+ File.separator +"template"+ File.separator+ "教师导入模板.xlsx"); is = new FileInputStream(GetFile.p + File.separator +"filesystem"+ File.separator +"template"+ File.separator+ "教师导入模板.xlsx");
workbook = new XSSFWorkbook(is); workbook = new XSSFWorkbook(is);

@ -192,7 +192,7 @@ public class TeacherOpenCourseHomeworkController {
} }
/** /**
* * -
* @param teacherOpenCourseHomeworkQuery * @param teacherOpenCourseHomeworkQuery
* @param result * @param result
* @param coreUser * @param coreUser
@ -215,13 +215,13 @@ public class TeacherOpenCourseHomeworkController {
} }
/** /**
* - * -
* @param teacherOpenCourseHomeworkId ID * @param teacherOpenCourseHomeworkId ID
* @return * @return
*/ */
@PostMapping(MODEL + "/homeworkDetail.json") @PostMapping(MODEL + "/homeworkDetail.json")
@Function("teacherOpenCourseHomework.query") @Function("teacherOpenCourseHomework.query")
public JsonResult homeworkDetail(Long teacherOpenCourseHomeworkId) { public JsonResult homeworkDetail(Long teacherOpenCourseHomeworkId, @SCoreUser CoreUser coreUser) {
return JsonResult.success(teacherOpenCourseHomeworkService.homeworkDetail(teacherOpenCourseHomeworkId)); return JsonResult.success(teacherOpenCourseHomeworkService.homeworkDetail(teacherOpenCourseHomeworkId));
} }

@ -25,7 +25,7 @@ import javax.annotation.Resource;
import java.util.List; import java.util.List;
/** /**
* -- * --
* 线 * 线
*/ */

@ -49,6 +49,11 @@ public class ResourcesQuestionSnapshotQuery extends PageParam {
@Query(name = "组织机构ID", display = false) @Query(name = "组织机构ID", display = false)
private Long orgId; private Long orgId;
/**
* SQL
*/
private Boolean rand;
private String fromIdPlural; private String fromIdPlural;
private String courseInfoIdPlural; private String courseInfoIdPlural;
private String questionTypePlural; private String questionTypePlural;
@ -233,4 +238,12 @@ public class ResourcesQuestionSnapshotQuery extends PageParam {
public void set_given(String _given) { public void set_given(String _given) {
this._given = _given; this._given = _given;
} }
public Boolean getRand() {
return rand;
}
public void setRand(Boolean rand) {
this.rand = rand;
}
} }

@ -9,7 +9,7 @@ import javax.validation.constraints.NotNull;
import java.util.Date; import java.util.Date;
/** /**
* *
*/ */
public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam { public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
@NotNull(message = "ID不能为空", groups =ValidateConfig.UPDATE.class) @NotNull(message = "ID不能为空", groups =ValidateConfig.UPDATE.class)
@ -17,7 +17,7 @@ public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
private Long teacherOpenCourseHomeworkQuestionLogId; private Long teacherOpenCourseHomeworkQuestionLogId;
@Query(name = "题库作业ID", display = true,type=Query.TYPE_DICT,dict="teacher_open_course_homework.teacher_open_course_homework_name.teacher_open_course_homework_status=1") @Query(name = "题库作业ID", display = true,type=Query.TYPE_DICT,dict="teacher_open_course_homework.teacher_open_course_homework_name.teacher_open_course_homework_status=1")
private Long teacherOpenCourseQuestionHomeworkId; private Long teacherOpenCourseQuestionHomeworkId;
@Query(name = "题目快照ID", display = true,type=Query.TYPE_DICT,dict="resources_question_snapshot.question_stem.question_status=1") @Query(name = "题目快照ID", display = false)
private Long resourcesQuestionSnapshotId; private Long resourcesQuestionSnapshotId;
@Query(name = "学生提交的答案", display = false) @Query(name = "学生提交的答案", display = false)
private String teacherOpenCourseHomeworkQuestionLogAnswer; private String teacherOpenCourseHomeworkQuestionLogAnswer;
@ -27,6 +27,10 @@ public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
private Date teacherOpenCourseHomeworkQuestionLogAddTime; private Date teacherOpenCourseHomeworkQuestionLogAddTime;
@Query(name = "状态1正常 2删除", display = true,type=Query.TYPE_DICT,dict="global_status") @Query(name = "状态1正常 2删除", display = true,type=Query.TYPE_DICT,dict="global_status")
private Integer teacherOpenCourseHomeworkQuestionLogStatus; private Integer teacherOpenCourseHomeworkQuestionLogStatus;
@Query(name = "来源类型(枚举)", display = false)
private String teacherOpenCourseHomeworkQuestionLogFromType;
@Query(name = "学生ID", display = false)
private Long studentId;
@Query(name = "组织ID", display = false) @Query(name = "组织ID", display = false)
private Long orgId; private Long orgId;
@Query(name = "用户ID", display = false) @Query(name = "用户ID", display = false)
@ -36,6 +40,7 @@ public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
private String teacherOpenCourseQuestionHomeworkIdPlural; private String teacherOpenCourseQuestionHomeworkIdPlural;
private String resourcesQuestionSnapshotIdPlural; private String resourcesQuestionSnapshotIdPlural;
private String teacherOpenCourseHomeworkQuestionLogStatusPlural; private String teacherOpenCourseHomeworkQuestionLogStatusPlural;
private String studentIdPlural;
private String orgIdPlural; private String orgIdPlural;
private String userIdPlural; private String userIdPlural;
@ -85,6 +90,18 @@ public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
public void setTeacherOpenCourseHomeworkQuestionLogStatus(Integer teacherOpenCourseHomeworkQuestionLogStatus ){ public void setTeacherOpenCourseHomeworkQuestionLogStatus(Integer teacherOpenCourseHomeworkQuestionLogStatus ){
this.teacherOpenCourseHomeworkQuestionLogStatus = teacherOpenCourseHomeworkQuestionLogStatus; this.teacherOpenCourseHomeworkQuestionLogStatus = teacherOpenCourseHomeworkQuestionLogStatus;
} }
public String getTeacherOpenCourseHomeworkQuestionLogFromType(){
return teacherOpenCourseHomeworkQuestionLogFromType;
}
public void setTeacherOpenCourseHomeworkQuestionLogFromType(String teacherOpenCourseHomeworkQuestionLogFromType ){
this.teacherOpenCourseHomeworkQuestionLogFromType = teacherOpenCourseHomeworkQuestionLogFromType;
}
public Long getStudentId(){
return studentId;
}
public void setStudentId(Long studentId ){
this.studentId = studentId;
}
public Long getOrgId(){ public Long getOrgId(){
return orgId; return orgId;
} }
@ -107,6 +124,8 @@ public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
pojo.setTeacherOpenCourseHomeworkQuestionLogUploadFile(this.getTeacherOpenCourseHomeworkQuestionLogUploadFile()); pojo.setTeacherOpenCourseHomeworkQuestionLogUploadFile(this.getTeacherOpenCourseHomeworkQuestionLogUploadFile());
pojo.setTeacherOpenCourseHomeworkQuestionLogAddTime(this.getTeacherOpenCourseHomeworkQuestionLogAddTime()); pojo.setTeacherOpenCourseHomeworkQuestionLogAddTime(this.getTeacherOpenCourseHomeworkQuestionLogAddTime());
pojo.setTeacherOpenCourseHomeworkQuestionLogStatus(this.getTeacherOpenCourseHomeworkQuestionLogStatus()); pojo.setTeacherOpenCourseHomeworkQuestionLogStatus(this.getTeacherOpenCourseHomeworkQuestionLogStatus());
pojo.setTeacherOpenCourseHomeworkQuestionLogFromType(this.getTeacherOpenCourseHomeworkQuestionLogFromType());
pojo.setStudentId(this.getStudentId());
pojo.setOrgId(this.getOrgId()); pojo.setOrgId(this.getOrgId());
pojo.setUserId(this.getUserId()); pojo.setUserId(this.getUserId());
return pojo; return pojo;
@ -136,6 +155,12 @@ public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
public void setTeacherOpenCourseHomeworkQuestionLogStatusPlural(String teacherOpenCourseHomeworkQuestionLogStatusPlural){ public void setTeacherOpenCourseHomeworkQuestionLogStatusPlural(String teacherOpenCourseHomeworkQuestionLogStatusPlural){
this.teacherOpenCourseHomeworkQuestionLogStatusPlural = teacherOpenCourseHomeworkQuestionLogStatusPlural; this.teacherOpenCourseHomeworkQuestionLogStatusPlural = teacherOpenCourseHomeworkQuestionLogStatusPlural;
} }
public String getStudentIdPlural(){
return studentIdPlural;
}
public void setStudentIdPlural(String studentIdPlural){
this.studentIdPlural = studentIdPlural;
}
public String getOrgIdPlural(){ public String getOrgIdPlural(){
return orgIdPlural; return orgIdPlural;
} }

@ -441,6 +441,12 @@ getValuesByQuery
@if(!isEmpty(orgIdPlural)){ @if(!isEmpty(orgIdPlural)){
and find_in_set(t.org_id,#orgIdPlural#) and find_in_set(t.org_id,#orgIdPlural#)
@} @}
order by question_type
@// 同一大题,是否随机排序
@if(rand == true){
,rand()
@}
asc

@ -46,6 +46,15 @@ queryByCondition
and find_in_set(t.teacher_open_course_homework_question_log_status,#teacherOpenCourseHomeworkQuestionLogStatusPlural#) and find_in_set(t.teacher_open_course_homework_question_log_status,#teacherOpenCourseHomeworkQuestionLogStatusPlural#)
@} @}
@} @}
@if(!isEmpty(teacherOpenCourseHomeworkQuestionLogFromType)){
and t.teacher_open_course_homework_question_log_from_type =#teacherOpenCourseHomeworkQuestionLogFromType#
@}
@if(!isEmpty(studentId)){
and t.student_id =#studentId#
@}
@if(!isEmpty(studentIdPlural)){
and find_in_set(t.student_id,#studentIdPlural#)
@}
@if(!isEmpty(orgId)){ @if(!isEmpty(orgId)){
and t.org_id =#orgId# and t.org_id =#orgId#
@} @}
@ -106,6 +115,15 @@ queryByConditionQuery
and find_in_set(t.teacher_open_course_homework_question_log_status,#teacherOpenCourseHomeworkQuestionLogStatusPlural#) and find_in_set(t.teacher_open_course_homework_question_log_status,#teacherOpenCourseHomeworkQuestionLogStatusPlural#)
@} @}
@} @}
@if(!isEmpty(teacherOpenCourseHomeworkQuestionLogFromType)){
and t.teacher_open_course_homework_question_log_from_type =#teacherOpenCourseHomeworkQuestionLogFromType#
@}
@if(!isEmpty(studentId)){
and t.student_id =#studentId#
@}
@if(!isEmpty(studentIdPlural)){
and find_in_set(t.student_id,#studentIdPlural#)
@}
@if(!isEmpty(orgId)){ @if(!isEmpty(orgId)){
and t.org_id =#orgId# and t.org_id =#orgId#
@} @}
@ -194,6 +212,20 @@ updateGivenByIds
teacher_open_course_homework_question_log_status = #teacherOpenCourseHomeworkQuestionLogStatus# , teacher_open_course_homework_question_log_status = #teacherOpenCourseHomeworkQuestionLogStatus# ,
@} @}
@} @}
@if(contain("teacherOpenCourseHomeworkQuestionLogFromType",_given)){
@if(isEmpty(teacherOpenCourseHomeworkQuestionLogFromType)){
teacher_open_course_homework_question_log_from_type = null ,
@}else{
teacher_open_course_homework_question_log_from_type = #teacherOpenCourseHomeworkQuestionLogFromType# ,
@}
@}
@if(contain("studentId",_given)){
@if(isEmpty(studentId)){
student_id = null ,
@}else{
student_id = #studentId# ,
@}
@}
@if(contain("orgId",_given)){ @if(contain("orgId",_given)){
@if(isEmpty(orgId)){ @if(isEmpty(orgId)){
org_id = null , org_id = null ,
@ -244,6 +276,12 @@ getTeacherOpenCourseHomeworkQuestionLogValues
@}else{ @}else{
and t.teacher_open_course_homework_question_log_status != 2 and t.teacher_open_course_homework_question_log_status != 2
@} @}
@if(!isEmpty(teacherOpenCourseHomeworkQuestionLogFromType)){
and t.teacher_open_course_homework_question_log_from_type =#teacherOpenCourseHomeworkQuestionLogFromType#
@}
@if(!isEmpty(studentId)){
and t.student_id =#studentId#
@}
@if(!isEmpty(orgId)){ @if(!isEmpty(orgId)){
and t.org_id =#orgId# and t.org_id =#orgId#
@} @}
@ -296,6 +334,15 @@ getValuesByQuery
and find_in_set(t.teacher_open_course_homework_question_log_status,#teacherOpenCourseHomeworkQuestionLogStatusPlural#) and find_in_set(t.teacher_open_course_homework_question_log_status,#teacherOpenCourseHomeworkQuestionLogStatusPlural#)
@} @}
@} @}
@if(!isEmpty(teacherOpenCourseHomeworkQuestionLogFromType)){
and t.teacher_open_course_homework_question_log_from_type =#teacherOpenCourseHomeworkQuestionLogFromType#
@}
@if(!isEmpty(studentId)){
and t.student_id =#studentId#
@}
@if(!isEmpty(studentIdPlural)){
and find_in_set(t.student_id,#studentIdPlural#)
@}
@if(!isEmpty(orgId)){ @if(!isEmpty(orgId)){
and t.org_id =#orgId# and t.org_id =#orgId#
@} @}

@ -9,7 +9,7 @@ layui.define(['table', 'teacherOpenCourseHomeworkQuestionLogApi'], function(expo
if(data==null){ if(data==null){
return ; return ;
} }
Common.openConfirm("确认要删除这些开课作业日志?",function(){ Common.openConfirm("确认要删除这些做题日志?",function(){
var ids =Common.concatBatchId(data,"teacherOpenCourseHomeworkQuestionLogId"); var ids =Common.concatBatchId(data,"teacherOpenCourseHomeworkQuestionLogId");
teacherOpenCourseHomeworkQuestionLogApi.del(ids,function(){ teacherOpenCourseHomeworkQuestionLogApi.del(ids,function(){
Common.info("删除成功"); Common.info("删除成功");

@ -49,11 +49,11 @@ layui.define([ 'form', 'laydate', 'table' ], function(exports) {
hide:$.isEmpty(sx_['teacherOpenCourseQuestionHomeworkIdText'])?false:sx_['teacherOpenCourseQuestionHomeworkIdText'], hide:$.isEmpty(sx_['teacherOpenCourseQuestionHomeworkIdText'])?false:sx_['teacherOpenCourseQuestionHomeworkIdText'],
}, },
{ {
field : 'resourcesQuestionSnapshotIdText', //数据字典类型为 resources_question_snapshot.question_stem.question_status=1 field : 'resourcesQuestionSnapshotId',
title : '题目快照ID', title : '题目快照ID',
align:"center", align:"center",
hideField :false, hideField :false,
hide:$.isEmpty(sx_['resourcesQuestionSnapshotIdText'])?false:sx_['resourcesQuestionSnapshotIdText'], hide:$.isEmpty(sx_['resourcesQuestionSnapshotId'])?false:sx_['resourcesQuestionSnapshotId'],
}, },
{ {
field : 'teacherOpenCourseHomeworkQuestionLogAnswer', field : 'teacherOpenCourseHomeworkQuestionLogAnswer',
@ -83,6 +83,20 @@ layui.define([ 'form', 'laydate', 'table' ], function(exports) {
hideField :false, hideField :false,
hide:$.isEmpty(sx_['teacherOpenCourseHomeworkQuestionLogStatusText'])?false:sx_['teacherOpenCourseHomeworkQuestionLogStatusText'], hide:$.isEmpty(sx_['teacherOpenCourseHomeworkQuestionLogStatusText'])?false:sx_['teacherOpenCourseHomeworkQuestionLogStatusText'],
}, },
{
field : 'teacherOpenCourseHomeworkQuestionLogFromType',
title : '来源类型(枚举)',
align:"center",
hideField :false,
hide:$.isEmpty(sx_['teacherOpenCourseHomeworkQuestionLogFromType'])?false:sx_['teacherOpenCourseHomeworkQuestionLogFromType'],
},
{
field : 'studentId',
title : '学生ID',
align:"center",
hideField :false,
hide:$.isEmpty(sx_['studentId'])?false:sx_['studentId'],
},
{ {
field : 'orgId', field : 'orgId',
title : '组织ID', title : '组织ID',
@ -127,7 +141,7 @@ layui.define([ 'form', 'laydate', 'table' ], function(exports) {
toolbar = { toolbar = {
add: function () { add: function () {
var url = "/jlw/teacherOpenCourseHomeworkQuestionLog/add.do"; var url = "/jlw/teacherOpenCourseHomeworkQuestionLog/add.do";
Common.openDlg(url,"开课作业日志管理>新增"); Common.openDlg(url,"做题日志管理>新增");
}, },
edit: function () { edit: function () {
var data = Common.getOneFromTable(table,"teacherOpenCourseHomeworkQuestionLogTable"); var data = Common.getOneFromTable(table,"teacherOpenCourseHomeworkQuestionLogTable");
@ -135,7 +149,7 @@ layui.define([ 'form', 'laydate', 'table' ], function(exports) {
return ; return ;
} }
var url = "/jlw/teacherOpenCourseHomeworkQuestionLog/add.do?teacherOpenCourseHomeworkQuestionLogId="+data.teacherOpenCourseHomeworkQuestionLogId; var url = "/jlw/teacherOpenCourseHomeworkQuestionLog/add.do?teacherOpenCourseHomeworkQuestionLogId="+data.teacherOpenCourseHomeworkQuestionLogId;
Common.openDlg(url,"开课作业日志管理>"+data.teacherOpenCourseHomeworkQuestionLogId+">编辑"); Common.openDlg(url,"做题日志管理>"+data.teacherOpenCourseHomeworkQuestionLogId+">编辑");
}, },
del: function () { del: function () {
layui.use(['del'], function(){ layui.use(['del'], function(){
@ -163,7 +177,7 @@ layui.define([ 'form', 'laydate', 'table' ], function(exports) {
var data = obj.data; var data = obj.data;
if (obj.event === 'edit') { if (obj.event === 'edit') {
var url = "/jlw/teacherOpenCourseHomeworkQuestionLog/add.do?teacherOpenCourseHomeworkQuestionLogId="+data.teacherOpenCourseHomeworkQuestionLogId; var url = "/jlw/teacherOpenCourseHomeworkQuestionLog/add.do?teacherOpenCourseHomeworkQuestionLogId="+data.teacherOpenCourseHomeworkQuestionLogId;
Common.openDlg(url,"开课作业日志管理>"+data.teacherOpenCourseHomeworkQuestionLogId+">编辑"); Common.openDlg(url,"做题日志管理>"+data.teacherOpenCourseHomeworkQuestionLogId+">编辑");
}else if(obj.event === "del"){ }else if(obj.event === "del"){
layer.confirm('是否确定删除该信息?', function (index) { layer.confirm('是否确定删除该信息?', function (index) {
var ret = Common.postAjax("/jlw/teacherOpenCourseHomeworkQuestionLog/delete.json",{ids:data.teacherOpenCourseHomeworkQuestionLogId}); var ret = Common.postAjax("/jlw/teacherOpenCourseHomeworkQuestionLog/delete.json",{ids:data.teacherOpenCourseHomeworkQuestionLogId});

@ -13,8 +13,7 @@
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">题目快照ID</label> <label class="layui-form-label">题目快照ID</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<layui:simpleDictSelect style='layui-input-inline' type="resources_question_snapshot.question_stem.question_status=1" <input type="text" id="resourcesQuestionSnapshotId" name="resourcesQuestionSnapshotId" value="${teacherOpenCourseHomeworkQuestionLog.resourcesQuestionSnapshotId}" class="layui-input" >
id="resourcesQuestionSnapshotId" name="resourcesQuestionSnapshotId" value="${teacherOpenCourseHomeworkQuestionLog.resourcesQuestionSnapshotId}" layVerify="" />
</div> </div>
</div> </div>
</div> </div>
@ -52,6 +51,22 @@
</div> </div>
</div> </div>
</div> </div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">来源类型(枚举)</label>
<div class="layui-input-inline">
<input type="text" id="teacherOpenCourseHomeworkQuestionLogFromType" name="teacherOpenCourseHomeworkQuestionLogFromType" value="${teacherOpenCourseHomeworkQuestionLog.teacherOpenCourseHomeworkQuestionLogFromType}" class="layui-input" >
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">学生ID</label>
<div class="layui-input-inline">
<input type="text" id="studentId" name="studentId" value="${teacherOpenCourseHomeworkQuestionLog.studentId}" class="layui-input" >
</div>
</div>
</div>
</div>
<div class="layui-row"> <div class="layui-row">
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-inline"> <div class="layui-inline">

@ -13,8 +13,7 @@
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">题目快照ID</label> <label class="layui-form-label">题目快照ID</label>
<div class="layui-input-inline"> <div class="layui-input-inline">
<layui:simpleDictSelect style='layui-input-inline' type="resources_question_snapshot.question_stem.question_status=1" <input type="text" id="resourcesQuestionSnapshotId" name="resourcesQuestionSnapshotId" value="${teacherOpenCourseHomeworkQuestionLog.resourcesQuestionSnapshotId}" class="layui-input" >
id="resourcesQuestionSnapshotId" name="resourcesQuestionSnapshotId" value="${teacherOpenCourseHomeworkQuestionLog.resourcesQuestionSnapshotId}" layVerify="" />
</div> </div>
</div> </div>
</div> </div>
@ -52,6 +51,22 @@
</div> </div>
</div> </div>
</div> </div>
<div class="layui-row">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label">来源类型(枚举)</label>
<div class="layui-input-inline">
<input type="text" id="teacherOpenCourseHomeworkQuestionLogFromType" name="teacherOpenCourseHomeworkQuestionLogFromType" value="${teacherOpenCourseHomeworkQuestionLog.teacherOpenCourseHomeworkQuestionLogFromType}" class="layui-input" >
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label">学生ID</label>
<div class="layui-input-inline">
<input type="text" id="studentId" name="studentId" value="${teacherOpenCourseHomeworkQuestionLog.studentId}" class="layui-input" >
</div>
</div>
</div>
</div>
<div class="layui-row"> <div class="layui-row">
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-inline"> <div class="layui-inline">

@ -193,6 +193,7 @@ class TeacherOpenCourseHomeworkControllerTest extends BaseTest {
// 断言 // 断言
Assert.assertTrue(ObjectUtil.isNotEmpty(homeworkList)); Assert.assertTrue(ObjectUtil.isNotEmpty(homeworkList));
// 开课作业ID
Long teacherOpenCourseHomeworkId = RandomUtil.randomEle(homeworkList).getTeacherOpenCourseHomeworkId(); Long teacherOpenCourseHomeworkId = RandomUtil.randomEle(homeworkList).getTeacherOpenCourseHomeworkId();
//构造请求参数 //构造请求参数

Loading…
Cancel
Save