新增做题日志;

增加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.service.CorePlatformService;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
@ -13,9 +14,10 @@ import javax.servlet.http.HttpServletRequest;
//将从token中获取的member获取出来
public class getSCoreUser implements HandlerMethodArgumentResolver {
@Configuration
public class GetSCoreUser implements HandlerMethodArgumentResolver {
public getSCoreUser() {
public GetSCoreUser() {
}
@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
*
* @author
* @author mlx
*/
@ExtendWith(MockitoExtension.class)
public class BaseMockitoUnitTest {

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

@ -18,7 +18,7 @@ import static java.lang.Math.min;
/**
*
*
* @author
* @author mlx
*/
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
-- ----------------------------
-- ----------------------------
-- Table structure for 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_add_time datetime comment '创建时间',
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',
user_id bigint comment '用户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 '我的课程-题库作业-做题日志';
-- ----------------------------
-- 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.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
@ -36,7 +37,9 @@ import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicLong;
//将从request中获取的file获取出来并存入临时文件夹中
public class getFile implements HandlerMethodArgumentResolver {
@Configuration
public class GetFile implements HandlerMethodArgumentResolver {
private ExecutorService pool = Executors.newCachedThreadPool();
@ -51,7 +54,7 @@ public class getFile implements HandlerMethodArgumentResolver {
}
}
public getFile() {
public GetFile() {
}
@Override

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

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

@ -1,6 +1,7 @@
package cn.jlw.Interceptor;
import com.ibeetl.jlw.entity.Student;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
@ -11,9 +12,10 @@ import javax.servlet.http.HttpServletRequest;
//将从token中获取的member获取出来
public class getTStudent implements HandlerMethodArgumentResolver {
@Configuration
public class GetTStudent implements HandlerMethodArgumentResolver {
public getTStudent() {
public GetTStudent() {
}
@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.WebMvcConfigurer;
import javax.annotation.Resource;
import java.util.List;
import java.util.ResourceBundle;
@ -20,6 +21,12 @@ import java.util.ResourceBundle;
@Configuration
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 static String p = new FileEntity().getParentPath();
@ -75,11 +82,11 @@ public class InterceptorConfig implements WebMvcConfigurer {
*/
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
argumentResolvers.add(new getSCoreUser());
argumentResolvers.add(new getFile());
argumentResolvers.add(new getTStudent());
argumentResolvers.add(new getReferer());
argumentResolvers.add(new getIp());
argumentResolvers.add(getSCoreUser);
argumentResolvers.add(getFile);
argumentResolvers.add(getTStudent);
argumentResolvers.add(getReferer);
argumentResolvers.add(getIp);
}
}

@ -1,18 +1,15 @@
package cn.jlw.util;
import cn.jlw.Interceptor.getFile;
import cn.jlw.aliPay.utils.StringUtils;
import cn.jlw.Interceptor.GetFile;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.lang.reflect.InvocationTargetException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.UUID;
/**
* @author TLT
@ -22,7 +19,7 @@ import java.util.UUID;
@Component
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 format = fileName.substring(fileName.lastIndexOf("."));
@ -86,7 +83,7 @@ public class ChunkUploadUtil {
*
* @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");
if(confFile.exists()){
byte[] completeStatusList = FileUtils.readFileToByteArray(confFile);
@ -102,7 +99,7 @@ public class ChunkUploadUtil {
*
* @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");
RandomAccessFile confAccessFile = new RandomAccessFile(confFile, "rw");
//设置文件长度

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

@ -1,6 +1,6 @@
package cn.jlw.util;
import cn.jlw.Interceptor.getFile;
import cn.jlw.Interceptor.GetFile;
import cn.jlw.aliPay.utils.StringUtils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
@ -11,19 +11,21 @@ import com.google.zxing.qrcode.QRCodeWriter;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.ibeetl.admin.core.util.TimeTool;
import org.apache.tomcat.util.codec.binary.Base64;
import sun.font.FontDesignMetrics;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import java.awt.*;
import java.awt.geom.RoundRectangle2D;
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.URL;
import java.sql.Time;
import java.util.*;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -215,7 +217,7 @@ public class zxing {
if(headImg.contains("http")){
head = disposeImage(getRemoteBufferedImage(headImg),160,160);
}else {
File goodsImgFile = new File(getFile.p+headImg);
File goodsImgFile = new File(GetFile.p+headImg);
head = disposeImage(imageIoRead(goodsImgFile),160,160);
}
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(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);
int width = ground.getWidth();
@ -388,7 +390,7 @@ public class zxing {
goodsImg = disposeImage(getRemoteBufferedImage(imgUrl),500,500);
}else {
//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);
}

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

@ -1,5 +1,6 @@
package com.ibeetl.jlw.entity;
import cn.hutool.core.collection.ConcurrentHashSet;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
@ -7,7 +8,6 @@ import cn.hutool.core.util.ReflectUtil;
import java.lang.reflect.Field;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import static org.apache.commons.lang3.StringUtils.join;
import static org.apache.commons.lang3.StringUtils.upperCase;
@ -56,9 +56,9 @@ public class ResourcesQuestionOptionEntity {
* @param answerMap <ABCD..>
* @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) -> {
optionTextMap.forEach((optionText2, isAnswer) -> {
if (optionText2.equals(optionText) && isAnswer) {
@ -130,9 +130,9 @@ public class ResourcesQuestionOptionEntity {
}
// 如果没有选项,可能是单选或者其他类型的题目
List<String> answerList = optionEntity.getAnswerList(answerMap);
List<String> defaultAnswer = Collections.singletonList(questionAnswer);
List<String> answer = ObjectUtil.isNotEmpty(answerList)? answerList: defaultAnswer;
Set<String> answerList = optionEntity.getAnswerList(answerMap);
Set<String> defaultAnswer = Collections.singleton(questionAnswer);
Set<String> answer = ObjectUtil.isNotEmpty(answerList)? answerList: defaultAnswer;
// 乱序后的正确答案赋值
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{
@ -27,7 +27,6 @@ public class TeacherOpenCourseHomeworkQuestionLog extends BaseEntity{
private Long teacherOpenCourseQuestionHomeworkId ;
//题目快照ID
@Dict(type="resources_question_snapshot.question_stem.question_status=1")
private Long resourcesQuestionSnapshotId ;
@ -48,6 +47,14 @@ public class TeacherOpenCourseHomeworkQuestionLog extends BaseEntity{
private Integer teacherOpenCourseHomeworkQuestionLogStatus ;
//来源类型(枚举)
private String teacherOpenCourseHomeworkQuestionLogFromType ;
//学生ID
private Long studentId ;
//组织ID
private Long orgId ;
@ -150,6 +157,32 @@ public class TeacherOpenCourseHomeworkQuestionLog extends BaseEntity{
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
*@return
*/

@ -20,7 +20,7 @@ import java.math.RoundingMode;
import java.util.Map;
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;
public class ImageAutoJob implements Job {

@ -1,7 +1,7 @@
package com.ibeetl.jlw.service;
import cn.jlw.Interceptor.getFile;
import cn.jlw.Interceptor.GetFile;
import cn.jlw.util.ToolUtils;
import com.ibeetl.admin.core.service.CoreBaseService;
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 path = getFile.p + saveUrl;
String path = GetFile.p + saveUrl;
File m = new File(path);
if(!m.exists()){
@ -778,7 +778,7 @@ public class CourseInfoService extends CoreBaseService<CourseInfo>{
if(null != courseInfoList && courseInfoList.size()>0){
String p = saveUrl + System.currentTimeMillis() + ".docx";
String url = getFile.p + p;
String url = GetFile.p + p;
FileInputStream fis = new FileInputStream(file);

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

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

@ -1,59 +1,33 @@
package com.ibeetl.jlw.web;
import cn.jlw.Interceptor.RFile;
import cn.jlw.Interceptor.SCoreUser;
import cn.jlw.Interceptor.getFile;
import cn.jlw.util.ToolUtils;
import cn.jlw.validate.ValidateConfig;
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.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.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.lang3.StringUtils;
import org.apache.commons.logging.Log;
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.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.validation.annotation.Validated;
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 org.springframework.web.servlet.ModelAndView;
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.Map;
import java.math.BigDecimal;
import javax.annotation.Resource;
/**
* HandsOn

@ -1,58 +1,28 @@
package com.ibeetl.jlw.web;
import cn.jlw.Interceptor.RFile;
import cn.jlw.Interceptor.SCoreUser;
import cn.jlw.Interceptor.getFile;
import cn.jlw.util.ToolUtils;
import cn.jlw.validate.ValidateConfig;
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.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.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.logging.Log;
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.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.validation.annotation.Validated;
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 org.springframework.web.servlet.ModelAndView;
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.Map;
import java.math.BigDecimal;
import javax.annotation.Resource;
/**
* HandsOnSimulationTasks -

@ -1,7 +1,7 @@
package com.ibeetl.jlw.web;
import cn.jlw.Interceptor.GetFile;
import cn.jlw.Interceptor.RFile;
import cn.jlw.Interceptor.getFile;
import cn.jlw.validate.ValidateConfig;
import com.ibeetl.admin.core.annotation.Function;
import com.ibeetl.admin.core.file.FileService;
@ -330,7 +330,7 @@ public class ResourcesQuestionController{
XSSFWorkbook workbook = null;
InputStream is = null;
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);

@ -1,6 +1,5 @@
package com.ibeetl.jlw.web;
import cn.hutool.core.util.ObjectUtil;
import cn.jlw.Interceptor.*;
import cn.jlw.token.TokenService;
import cn.jlw.util.JupyterNotebookUtils;
@ -2273,7 +2272,7 @@ public class StudentController{
XSSFWorkbook workbook = null;
InputStream is = null;
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);

@ -1,8 +1,8 @@
package com.ibeetl.jlw.web;
import cn.jlw.Interceptor.GetFile;
import cn.jlw.Interceptor.RFile;
import cn.jlw.Interceptor.SCoreUser;
import cn.jlw.Interceptor.getFile;
import cn.jlw.util.JupyterNotebookUtils;
import cn.jlw.util.ToolUtils;
import cn.jlw.validate.ValidateConfig;
@ -1274,7 +1274,7 @@ public class TeacherController{
XSSFWorkbook workbook = null;
InputStream is = null;
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);

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

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

@ -49,6 +49,11 @@ public class ResourcesQuestionSnapshotQuery extends PageParam {
@Query(name = "组织机构ID", display = false)
private Long orgId;
/**
* SQL
*/
private Boolean rand;
private String fromIdPlural;
private String courseInfoIdPlural;
private String questionTypePlural;
@ -233,4 +238,12 @@ public class ResourcesQuestionSnapshotQuery extends PageParam {
public void set_given(String _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;
/**
*
*
*/
public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
@NotNull(message = "ID不能为空", groups =ValidateConfig.UPDATE.class)
@ -17,7 +17,7 @@ public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
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")
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;
@Query(name = "学生提交的答案", display = false)
private String teacherOpenCourseHomeworkQuestionLogAnswer;
@ -27,6 +27,10 @@ public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
private Date teacherOpenCourseHomeworkQuestionLogAddTime;
@Query(name = "状态1正常 2删除", display = true,type=Query.TYPE_DICT,dict="global_status")
private Integer teacherOpenCourseHomeworkQuestionLogStatus;
@Query(name = "来源类型(枚举)", display = false)
private String teacherOpenCourseHomeworkQuestionLogFromType;
@Query(name = "学生ID", display = false)
private Long studentId;
@Query(name = "组织ID", display = false)
private Long orgId;
@Query(name = "用户ID", display = false)
@ -36,6 +40,7 @@ public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
private String teacherOpenCourseQuestionHomeworkIdPlural;
private String resourcesQuestionSnapshotIdPlural;
private String teacherOpenCourseHomeworkQuestionLogStatusPlural;
private String studentIdPlural;
private String orgIdPlural;
private String userIdPlural;
@ -85,6 +90,18 @@ public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
public void setTeacherOpenCourseHomeworkQuestionLogStatus(Integer 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(){
return orgId;
}
@ -107,6 +124,8 @@ public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
pojo.setTeacherOpenCourseHomeworkQuestionLogUploadFile(this.getTeacherOpenCourseHomeworkQuestionLogUploadFile());
pojo.setTeacherOpenCourseHomeworkQuestionLogAddTime(this.getTeacherOpenCourseHomeworkQuestionLogAddTime());
pojo.setTeacherOpenCourseHomeworkQuestionLogStatus(this.getTeacherOpenCourseHomeworkQuestionLogStatus());
pojo.setTeacherOpenCourseHomeworkQuestionLogFromType(this.getTeacherOpenCourseHomeworkQuestionLogFromType());
pojo.setStudentId(this.getStudentId());
pojo.setOrgId(this.getOrgId());
pojo.setUserId(this.getUserId());
return pojo;
@ -136,6 +155,12 @@ public class TeacherOpenCourseHomeworkQuestionLogQuery extends PageParam {
public void setTeacherOpenCourseHomeworkQuestionLogStatusPlural(String teacherOpenCourseHomeworkQuestionLogStatusPlural){
this.teacherOpenCourseHomeworkQuestionLogStatusPlural = teacherOpenCourseHomeworkQuestionLogStatusPlural;
}
public String getStudentIdPlural(){
return studentIdPlural;
}
public void setStudentIdPlural(String studentIdPlural){
this.studentIdPlural = studentIdPlural;
}
public String getOrgIdPlural(){
return orgIdPlural;
}

@ -441,6 +441,12 @@ getValuesByQuery
@if(!isEmpty(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#)
@}
@}
@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)){
and t.org_id =#orgId#
@}
@ -106,6 +115,15 @@ queryByConditionQuery
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)){
and t.org_id =#orgId#
@}
@ -194,6 +212,20 @@ updateGivenByIds
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(isEmpty(orgId)){
org_id = null ,
@ -244,6 +276,12 @@ getTeacherOpenCourseHomeworkQuestionLogValues
@}else{
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)){
and t.org_id =#orgId#
@}
@ -296,6 +334,15 @@ getValuesByQuery
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)){
and t.org_id =#orgId#
@}

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

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

@ -13,8 +13,7 @@
<div class="layui-inline">
<label class="layui-form-label">题目快照ID</label>
<div class="layui-input-inline">
<layui:simpleDictSelect style='layui-input-inline' type="resources_question_snapshot.question_stem.question_status=1"
id="resourcesQuestionSnapshotId" name="resourcesQuestionSnapshotId" value="${teacherOpenCourseHomeworkQuestionLog.resourcesQuestionSnapshotId}" layVerify="" />
<input type="text" id="resourcesQuestionSnapshotId" name="resourcesQuestionSnapshotId" value="${teacherOpenCourseHomeworkQuestionLog.resourcesQuestionSnapshotId}" class="layui-input" >
</div>
</div>
</div>
@ -52,6 +51,22 @@
</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-form-item">
<div class="layui-inline">

@ -13,8 +13,7 @@
<div class="layui-inline">
<label class="layui-form-label">题目快照ID</label>
<div class="layui-input-inline">
<layui:simpleDictSelect style='layui-input-inline' type="resources_question_snapshot.question_stem.question_status=1"
id="resourcesQuestionSnapshotId" name="resourcesQuestionSnapshotId" value="${teacherOpenCourseHomeworkQuestionLog.resourcesQuestionSnapshotId}" layVerify="" />
<input type="text" id="resourcesQuestionSnapshotId" name="resourcesQuestionSnapshotId" value="${teacherOpenCourseHomeworkQuestionLog.resourcesQuestionSnapshotId}" class="layui-input" >
</div>
</div>
</div>
@ -52,6 +51,22 @@
</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-form-item">
<div class="layui-inline">

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

Loading…
Cancel
Save