Compare commits
54 Commits
f8169b453e
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| fcf381b8f1 | |||
| fb29acc145 | |||
| 7182371c92 | |||
| 09b326c07a | |||
| 49963bb49c | |||
| bf2a80917c | |||
| deabd5f7f5 | |||
| 0802f6fe70 | |||
| 679241588f | |||
| fe7128dd4e | |||
| 1184ea7895 | |||
| e468be74b7 | |||
| 57166af2f4 | |||
| fcb8ac9c22 | |||
| 7f2fda16ec | |||
| 9cd43c0e74 | |||
| b86f37443c | |||
| 36e5231c6c | |||
| 868e0bb7bd | |||
| 504dd8d964 | |||
| 6277e3ab42 | |||
| 0f5169c1d7 | |||
| 5ebf40101d | |||
| 5858bf2ecc | |||
| bddf6c0936 | |||
| 340bc5b5e3 | |||
| 2d76ed507e | |||
| 494ab77486 | |||
| d3cfa80613 | |||
| 66eb02cb08 | |||
| 0b0311d2d9 | |||
| 7b68184787 | |||
| bc9334f5ab | |||
| aff862d161 | |||
| 15e909c318 | |||
| 260c2c79f1 | |||
| 4135b72648 | |||
| 5404f295e4 | |||
| 948144e7b2 | |||
| bc4c74f881 | |||
| f4498e5676 | |||
| 515bd8fae2 | |||
| 065da854ee | |||
| 7a66548aed | |||
| a50c9a2b16 | |||
| eeeb48d048 | |||
| 26674ab8a9 | |||
| fd828442b1 | |||
| dbe7312633 | |||
| 49cd146bc3 | |||
| 07b9b56e8a | |||
| 7f41036193 | |||
| d027c9c7e6 | |||
| e5fbb445cf |
BIN
debug_roi.jpg
BIN
debug_roi.jpg
Binary file not shown.
|
Before Width: | Height: | Size: 22 KiB |
7142
docx/enlish.sql
Normal file
7142
docx/enlish.sql
Normal file
File diff suppressed because one or more lines are too long
5728
docx/enlish_v2.sql
Normal file
5728
docx/enlish_v2.sql
Normal file
File diff suppressed because one or more lines are too long
11395
docx/enlish_v3.sql
Normal file
11395
docx/enlish_v3.sql
Normal file
File diff suppressed because one or more lines are too long
@@ -105,6 +105,74 @@
|
|||||||
<artifactId>tess4j</artifactId>
|
<artifactId>tess4j</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 阿里云短信发送 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.aliyun</groupId>
|
||||||
|
<artifactId>dysmsapi20170525</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.dev33</groupId>
|
||||||
|
<artifactId>sa-token-spring-boot3-starter</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.dev33</groupId>
|
||||||
|
<artifactId>sa-token-redis-template</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- 密码加密 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.security</groupId>
|
||||||
|
<artifactId>spring-security-crypto</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.tomcat.embed</groupId>
|
||||||
|
<artifactId>tomcat-embed-core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-configuration-processor</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>commons-codec</groupId>
|
||||||
|
<artifactId>commons-codec</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
|
<artifactId>jjwt</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.auth0</groupId>
|
||||||
|
<artifactId>java-jwt</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.ai</groupId>
|
||||||
|
<artifactId>spring-ai-openai</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.ai</groupId>
|
||||||
|
<artifactId>spring-ai-starter-model-openai</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.zxing</groupId>
|
||||||
|
<artifactId>core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.zxing</groupId>
|
||||||
|
<artifactId>javase</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|||||||
@@ -3,11 +3,13 @@ package com.yinlihupo.enlish.service;
|
|||||||
import org.mybatis.spring.annotation.MapperScan;
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
import org.springframework.scheduling.annotation.EnableAsync;
|
||||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@MapperScan("com.yinlihupo.enlish.service.domain.mapper")
|
@MapperScan("com.yinlihupo.enlish.service.domain.mapper")
|
||||||
@EnableScheduling
|
@EnableScheduling
|
||||||
|
@EnableAsync
|
||||||
public class EnlishServiceApplication {
|
public class EnlishServiceApplication {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.yinlihupo.enlish.service.config;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@ConfigurationProperties(prefix = "aliyun")
|
||||||
|
@Component
|
||||||
|
@Data
|
||||||
|
public class AliyunAccessKeyProperties {
|
||||||
|
private String accessKeyId;
|
||||||
|
private String accessKeySecret;
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.yinlihupo.enlish.service.config;
|
||||||
|
|
||||||
|
import com.aliyun.dysmsapi20170525.Client;
|
||||||
|
import com.aliyun.teaopenapi.models.Config;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@Slf4j
|
||||||
|
public class AliyunSmsClientConfig {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AliyunAccessKeyProperties aliyunAccessKeyProperties;
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public Client smsClient() {
|
||||||
|
try {
|
||||||
|
Config config = new Config()
|
||||||
|
// 必填
|
||||||
|
.setAccessKeyId(aliyunAccessKeyProperties.getAccessKeyId())
|
||||||
|
// 必填
|
||||||
|
.setAccessKeySecret(aliyunAccessKeyProperties.getAccessKeySecret());
|
||||||
|
|
||||||
|
// Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
|
||||||
|
config.endpoint = "dysmsapi.aliyuncs.com";
|
||||||
|
|
||||||
|
return new Client(config);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("初始化阿里云短信发送客户端错误: ", e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.yinlihupo.enlish.service.config;
|
||||||
|
|
||||||
|
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class PasswordEncoderConfig {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public PasswordEncoder passwordEncoder() {
|
||||||
|
// BCrypt 是一种安全且适合密码存储的哈希算法,它在进行哈希时会自动加入“盐”,增加密码的安全性。
|
||||||
|
return new BCryptPasswordEncoder();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
package com.yinlihupo.enlish.service.config;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.interceptor.SaInterceptor;
|
||||||
|
import cn.dev33.satoken.router.SaHttpMethod;
|
||||||
|
import cn.dev33.satoken.router.SaRouter;
|
||||||
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||||
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
|
||||||
|
@Configuration
|
||||||
|
@Slf4j
|
||||||
|
public class SaTokenConfigure implements WebMvcConfigurer {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addInterceptors(InterceptorRegistry registry) {
|
||||||
|
registry.addInterceptor(new SaInterceptor(handler -> {
|
||||||
|
log.info("Sa-Token 拦截器: {}", handler);
|
||||||
|
|
||||||
|
|
||||||
|
SaRouter.match(SaHttpMethod.OPTIONS)
|
||||||
|
.free(r -> System.out.println("--------OPTIONS预检请求,不做处理"))
|
||||||
|
.back();
|
||||||
|
|
||||||
|
SaRouter.match("/**")
|
||||||
|
.notMatch("/login/**")
|
||||||
|
.notMatch("/plan/word/voice")
|
||||||
|
.notMatch("/plan/word/voice/tts")
|
||||||
|
.check(r -> StpUtil.checkLogin());
|
||||||
|
|
||||||
|
SaRouter.match("/admin/**")
|
||||||
|
.notMatch("/plan/word/voice")
|
||||||
|
.notMatch("/plan/word/voice/tts")
|
||||||
|
.check(r -> StpUtil.checkRole("root"));
|
||||||
|
|
||||||
|
}))
|
||||||
|
.addPathPatterns("/**")
|
||||||
|
.excludePathPatterns("/error");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package com.yinlihupo.enlish.service.config;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.dev33.satoken.stp.StpInterface;
|
||||||
|
|
||||||
|
import com.google.common.cache.Cache;
|
||||||
|
import com.yinlihupo.enlish.service.constant.RoleConstants;
|
||||||
|
import com.yinlihupo.framework.common.util.JsonUtils;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class StpInterfaceImpl implements StpInterface {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private StringRedisTemplate stringRedisTemplate;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getPermissionList(Object loginId, String loginType) {
|
||||||
|
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getRoleList(Object loginId, String loginType) {
|
||||||
|
long l = 0L;
|
||||||
|
if (loginId instanceof String loginIdStr) {
|
||||||
|
l = Long.parseLong(loginIdStr);
|
||||||
|
}
|
||||||
|
return userToRole(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<String> userToRole(Long userId) {
|
||||||
|
|
||||||
|
String keys = stringRedisTemplate.opsForValue().get(RoleConstants.buildUserRoleKey(userId));
|
||||||
|
if (keys != null) {
|
||||||
|
try {
|
||||||
|
return JsonUtils.parseList(keys, String.class);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return List.of();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,153 @@
|
|||||||
package com.yinlihupo.enlish.service.constant;
|
package com.yinlihupo.enlish.service.constant;
|
||||||
|
|
||||||
public interface ExamWordsConstant {
|
public class ExamWordsConstant {
|
||||||
|
|
||||||
int PGN_COL = 53;
|
public static final int PGN_COL = 53;
|
||||||
|
|
||||||
|
public static final int GRADE_1 = 1;
|
||||||
|
public static final int GRADE_2 = 2;
|
||||||
|
public static final int GRADE_3 = 3;
|
||||||
|
public static final int GRADE_4 = 4;
|
||||||
|
public static final int GRADE_5 = 5;
|
||||||
|
public static final int GRADE_6 = 6;
|
||||||
|
public static final int GRADE_7 = 7;
|
||||||
|
public static final int GRADE_8 = 8;
|
||||||
|
|
||||||
|
public static final String GRADE_1_NAME = "一年级";
|
||||||
|
public static final String GRADE_2_NAME = "二年级";
|
||||||
|
public static final String GRADE_3_NAME = "三年级";
|
||||||
|
public static final String GRADE_4_NAME = "四年级";
|
||||||
|
public static final String GRADE_5_NAME = "五年级";
|
||||||
|
public static final String GRADE_6_NAME = "六年级";
|
||||||
|
public static final String GRADE_7_NAME = "初一";
|
||||||
|
public static final String GRADE_8_NAME = "初二";
|
||||||
|
|
||||||
|
|
||||||
|
public static final int ZONE_A_SIZE = 10;
|
||||||
|
public static final int ZONE_B_SIZE = 20;
|
||||||
|
public static final int ZONE_C_SIZE = 28;
|
||||||
|
public static final int ZONE_D_SIZE = 21;
|
||||||
|
public static final int ZONE_E_SIZE = 14;
|
||||||
|
public static final int ZONE_F_SIZE = 7;
|
||||||
|
|
||||||
|
|
||||||
|
// 摸底
|
||||||
|
public static final int EXAM_TYPE_BASELINE = 1;
|
||||||
|
// 中期
|
||||||
|
public static final int EXAM_TYPE_MIDTERM = 2;
|
||||||
|
// 期末
|
||||||
|
public static final int EXAM_TYPE_FINAL = 3;
|
||||||
|
// 小测
|
||||||
|
public static final int EXAM_TYPE_TEST = 4;
|
||||||
|
|
||||||
|
|
||||||
|
public static int getZoneA(int gradeId) {
|
||||||
|
return switch (gradeId) {
|
||||||
|
case GRADE_1 -> GRADE_2;
|
||||||
|
case GRADE_2 -> GRADE_3;
|
||||||
|
case GRADE_3 -> GRADE_4;
|
||||||
|
case GRADE_4 -> GRADE_5;
|
||||||
|
case GRADE_5 -> GRADE_6;
|
||||||
|
case GRADE_6 -> GRADE_7;
|
||||||
|
case GRADE_7 -> GRADE_8;
|
||||||
|
default -> 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getZoneB(int gradeId) {
|
||||||
|
return switch (gradeId) {
|
||||||
|
case GRADE_1 -> GRADE_1;
|
||||||
|
case GRADE_2 -> GRADE_2;
|
||||||
|
case GRADE_3 -> GRADE_3;
|
||||||
|
case GRADE_4 -> GRADE_4;
|
||||||
|
case GRADE_5 -> GRADE_5;
|
||||||
|
case GRADE_6 -> GRADE_6;
|
||||||
|
case GRADE_7 -> GRADE_7;
|
||||||
|
case GRADE_8 -> GRADE_8;
|
||||||
|
default -> 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getZoneC(int gradeId) {
|
||||||
|
return switch (gradeId) {
|
||||||
|
case GRADE_1 -> GRADE_1;
|
||||||
|
case GRADE_2 -> GRADE_1;
|
||||||
|
case GRADE_3 -> GRADE_2;
|
||||||
|
case GRADE_4 -> GRADE_3;
|
||||||
|
case GRADE_5 -> GRADE_4;
|
||||||
|
case GRADE_6 -> GRADE_5;
|
||||||
|
case GRADE_7 -> GRADE_6;
|
||||||
|
case GRADE_8 -> GRADE_7;
|
||||||
|
default -> 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getZoneD(int gradeId) {
|
||||||
|
return switch (gradeId) {
|
||||||
|
case GRADE_1 -> GRADE_1;
|
||||||
|
case GRADE_2 -> GRADE_1;
|
||||||
|
case GRADE_3 -> GRADE_1;
|
||||||
|
case GRADE_4 -> GRADE_2;
|
||||||
|
case GRADE_5 -> GRADE_3;
|
||||||
|
case GRADE_6 -> GRADE_4;
|
||||||
|
case GRADE_7 -> GRADE_5;
|
||||||
|
case GRADE_8 -> GRADE_6;
|
||||||
|
default -> 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getZoneE(int gradeId) {
|
||||||
|
return switch (gradeId) {
|
||||||
|
case GRADE_1 -> GRADE_1;
|
||||||
|
case GRADE_2 -> GRADE_1;
|
||||||
|
case GRADE_3 -> GRADE_1;
|
||||||
|
case GRADE_4 -> GRADE_1;
|
||||||
|
case GRADE_5 -> GRADE_2;
|
||||||
|
case GRADE_6 -> GRADE_3;
|
||||||
|
case GRADE_7 -> GRADE_4;
|
||||||
|
case GRADE_8 -> GRADE_5;
|
||||||
|
default -> 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getZoneF(int gradeId) {
|
||||||
|
return switch (gradeId) {
|
||||||
|
case GRADE_1 -> GRADE_1;
|
||||||
|
case GRADE_2 -> GRADE_1;
|
||||||
|
case GRADE_3 -> GRADE_1;
|
||||||
|
case GRADE_4 -> GRADE_1;
|
||||||
|
case GRADE_5 -> GRADE_1;
|
||||||
|
case GRADE_6 -> GRADE_2;
|
||||||
|
case GRADE_7 -> GRADE_3;
|
||||||
|
case GRADE_8 -> GRADE_4;
|
||||||
|
default -> 0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getGradeName(int gradeId) {
|
||||||
|
return switch (gradeId) {
|
||||||
|
case GRADE_1 -> GRADE_1_NAME;
|
||||||
|
case GRADE_2 -> GRADE_2_NAME;
|
||||||
|
case GRADE_3 -> GRADE_3_NAME;
|
||||||
|
case GRADE_4 -> GRADE_4_NAME;
|
||||||
|
case GRADE_5 -> GRADE_5_NAME;
|
||||||
|
case GRADE_6 -> GRADE_6_NAME;
|
||||||
|
case GRADE_7 -> GRADE_7_NAME;
|
||||||
|
case GRADE_8 -> GRADE_8_NAME;
|
||||||
|
default -> "";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String day2Chinese(int day) {
|
||||||
|
return switch (day) {
|
||||||
|
case 1 -> "一";
|
||||||
|
case 2 -> "二";
|
||||||
|
case 3 -> "三";
|
||||||
|
case 4 -> "四";
|
||||||
|
case 5 -> "五";
|
||||||
|
case 6 -> "六";
|
||||||
|
case 7 -> "七";
|
||||||
|
default -> "";
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.yinlihupo.enlish.service.constant;
|
||||||
|
|
||||||
|
public class LessonPlanConstant {
|
||||||
|
|
||||||
|
public static final String TITLE = "Title";
|
||||||
|
public static final String PASSAGE = "ThePassage";
|
||||||
|
public static final String QUIZ = "Quiz";
|
||||||
|
public static final String ANSWER_KEY_EXPLANATION = "AnswerKey&Explanation";
|
||||||
|
public static final String FULL_TRANSLATION = "FullTranslation";
|
||||||
|
|
||||||
|
// 正在生成学案标识
|
||||||
|
public static final String GENERATING_PLAN = "GeneratingPlan";
|
||||||
|
|
||||||
|
public static String buildGeneratePlanContent(Integer studentId) {
|
||||||
|
return GENERATING_PLAN + ":" + studentId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.yinlihupo.enlish.service.constant;
|
||||||
|
|
||||||
|
public class RoleConstants {
|
||||||
|
|
||||||
|
public final static String USER_ROLE = "user:role";
|
||||||
|
public final static String ROLE = "role";
|
||||||
|
|
||||||
|
public static String buildUserRoleKey(Long userId) {
|
||||||
|
return USER_ROLE + ":" + userId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.yinlihupo.enlish.service.constant;
|
||||||
|
|
||||||
|
public class StudentConstant {
|
||||||
|
|
||||||
|
public static final String ANALYZE_STUDENT_STUDY = "analyzeStudentStudy";
|
||||||
|
|
||||||
|
public static String buildAnalyzeStudentStudyKey(Integer studentId) {
|
||||||
|
return ANALYZE_STUDENT_STUDY + ":" + studentId;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.yinlihupo.enlish.service.constant;
|
||||||
|
|
||||||
|
public class UserRedisConstants {
|
||||||
|
|
||||||
|
public static final String USER_LOGIN_CODE = "user:login:code:";
|
||||||
|
|
||||||
|
public static final String USER_INVITATION_CODE = "user:invitation:code:";
|
||||||
|
|
||||||
|
public static String buildUserLoginCode(String phone) {
|
||||||
|
return USER_LOGIN_CODE + phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String buildUserInvitationCode(String code) {
|
||||||
|
return USER_INVITATION_CODE + code;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
package com.yinlihupo.enlish.service.controller;
|
||||||
|
|
||||||
|
import com.yinlihupo.enlish.service.constant.UserRedisConstants;
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.RoleDO;
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.UserDO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.admin.CreateInvitationCodeReqVO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.admin.CreateInvitationCodeRspVO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.user.CreateUserReqVO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.user.FindUserListRepVO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.user.FindUserListRspVO;
|
||||||
|
import com.yinlihupo.enlish.service.service.RoleService;
|
||||||
|
import com.yinlihupo.enlish.service.service.UserService;
|
||||||
|
import com.yinlihupo.framework.biz.operationlog.aspect.ApiOperationLog;
|
||||||
|
import com.yinlihupo.framework.common.response.PageResponse;
|
||||||
|
import com.yinlihupo.framework.common.response.Response;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
@RequestMapping("/admin/")
|
||||||
|
@RestController
|
||||||
|
public class AdminController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserService userService;
|
||||||
|
@Resource
|
||||||
|
private PasswordEncoder passwordEncoder;
|
||||||
|
@Resource
|
||||||
|
private RoleService roleService;
|
||||||
|
@Resource
|
||||||
|
private RedisTemplate<String, Object> redisTemplate;
|
||||||
|
|
||||||
|
@PostMapping("user/list")
|
||||||
|
@ApiOperationLog(description = "查询用户列表")
|
||||||
|
public PageResponse<FindUserListRspVO> listUser(@RequestBody FindUserListRepVO findUserListRepVO) {
|
||||||
|
Integer userTotal = userService.findUserTotal();
|
||||||
|
if (userTotal == null || userTotal == 0) {
|
||||||
|
throw new RuntimeException("暂无用户");
|
||||||
|
}
|
||||||
|
|
||||||
|
Integer page = findUserListRepVO.getPage();
|
||||||
|
Integer pageSize = findUserListRepVO.getPageSize();
|
||||||
|
String name = findUserListRepVO.getName();
|
||||||
|
List<UserDO> usersList = userService.findUsersList(page, pageSize, name.isEmpty() ? null : name);
|
||||||
|
Map<Long, RoleDO> userId2RoleMap = roleService.findUserId2RoleMap(usersList.stream().map(UserDO::getId).toList());
|
||||||
|
return PageResponse.success(usersList.stream().map(userDO -> FindUserListRspVO.builder()
|
||||||
|
.id(userDO.getId())
|
||||||
|
.name(userDO.getName())
|
||||||
|
.phone(userDO.getPhone())
|
||||||
|
.roleName(userId2RoleMap.get(userDO.getId()).getRoleName())
|
||||||
|
.build()).toList(), page, userTotal, pageSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("user/create")
|
||||||
|
public Response<Void> createUser(@RequestBody CreateUserReqVO createUserReqVO) {
|
||||||
|
String name = createUserReqVO.getName();
|
||||||
|
String phone = createUserReqVO.getPhone();
|
||||||
|
String password = createUserReqVO.getPassword();
|
||||||
|
|
||||||
|
userService.createUser(UserDO.builder()
|
||||||
|
.name(name)
|
||||||
|
.phone(phone)
|
||||||
|
.password(passwordEncoder.encode(password))
|
||||||
|
.build());
|
||||||
|
|
||||||
|
return Response.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("user/create/invitation/code")
|
||||||
|
@ApiOperationLog(description = "创建邀请码")
|
||||||
|
public Response<CreateInvitationCodeRspVO> createInvitationCode(@RequestBody CreateInvitationCodeReqVO createInvitationCodeReqVO) {
|
||||||
|
|
||||||
|
String code = String.valueOf(new Random().nextInt(1000000));
|
||||||
|
Integer limit = createInvitationCodeReqVO.getLimit();
|
||||||
|
Integer expire = createInvitationCodeReqVO.getExpire();
|
||||||
|
|
||||||
|
redisTemplate.opsForValue().set(UserRedisConstants.buildUserInvitationCode(code), limit);
|
||||||
|
redisTemplate.expire(UserRedisConstants.buildUserInvitationCode(code), expire, TimeUnit.DAYS);
|
||||||
|
|
||||||
|
return Response.success(CreateInvitationCodeRspVO.builder().invitationCode(code).build());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -42,22 +42,28 @@ public class ExamWordsController {
|
|||||||
|
|
||||||
@PostMapping("generate")
|
@PostMapping("generate")
|
||||||
public void generateFeltExamWords(@RequestBody GenerateExamWordsReqVO generateExamWordsReqVO, HttpServletResponse response) {
|
public void generateFeltExamWords(@RequestBody GenerateExamWordsReqVO generateExamWordsReqVO, HttpServletResponse response) {
|
||||||
Integer gradeId = generateExamWordsReqVO.getGradeId();
|
Integer type = generateExamWordsReqVO.getType();
|
||||||
Integer level = generateExamWordsReqVO.getLevel();
|
Integer studentId = generateExamWordsReqVO.getStudentId();
|
||||||
List<Integer> studentIds = generateExamWordsReqVO.getStudentIds();
|
if (studentId == null) {
|
||||||
if (studentIds == null || studentIds.isEmpty() || gradeId == null || level == null) {
|
|
||||||
throw new RuntimeException("参数错误");
|
throw new RuntimeException("参数错误");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
ExamWordsDO examWordsDO = examWordsService.generateExamWords(gradeId, level, studentIds);
|
ExamWordsDO examWordsDO = examWordsService.generateExamWords(studentId, type);
|
||||||
|
if (examWordsDO == null || examWordsDO.getWordIds().isEmpty()) {
|
||||||
|
throw new RuntimeException("没有单词");
|
||||||
|
}
|
||||||
|
|
||||||
List<VocabularyBankDO> vocabularyBankDOS = vocabularyService.findVocabularyBankDOListById(examWordsDO.getWordIds());
|
List<VocabularyBankDO> vocabularyBankDOS = vocabularyService.findVocabularyBankDOListById(examWordsDO.getWordIds());
|
||||||
List<Word> assessmentWords = vocabularyBankDOS.stream().map(vocabularyBankDO -> Word.builder()
|
List<Word> assessmentWords = vocabularyBankDOS.stream().map(vocabularyBankDO -> Word.builder()
|
||||||
.id(vocabularyBankDO.getId())
|
.id(vocabularyBankDO.getId())
|
||||||
.title(vocabularyBankDO.getWord())
|
.title(vocabularyBankDO.getWord())
|
||||||
.definition(vocabularyBankDO.getDefinition())
|
.definition(vocabularyBankDO.getDefinition().length() > 6 ? vocabularyBankDO.getDefinition().substring(0, 6) : vocabularyBankDO.getDefinition())
|
||||||
.build()).toList();
|
.build()).toList();
|
||||||
|
// bug: 获取单词后,单词的id会乱序、 需要重新更新考试记录中的 id
|
||||||
List<StudentDetail> studentDetailList = studentService.getStudentDetailList(studentIds);
|
examWordsDO.setWordIds(assessmentWords.stream().map(Word::getId).toList());
|
||||||
|
examWordsService.updateExamWordsWordIdsOrder(examWordsDO);
|
||||||
|
log.info("生成试卷成功 {}", examWordsDO);
|
||||||
|
List<StudentDetail> studentDetailList = studentService.getStudentDetailList(Collections.singletonList(studentId));
|
||||||
List<Map<String, Object>> maps = studentDetailList.stream().map(studentDetail -> {
|
List<Map<String, Object>> maps = studentDetailList.stream().map(studentDetail -> {
|
||||||
Map<String, Object> data = new HashMap<>();
|
Map<String, Object> data = new HashMap<>();
|
||||||
data.put("examId", examWordsDO.getId());
|
data.put("examId", examWordsDO.getId());
|
||||||
@@ -66,10 +72,16 @@ public class ExamWordsController {
|
|||||||
data.put("examStr", examWordsDO.getTitle());
|
data.put("examStr", examWordsDO.getTitle());
|
||||||
data.put("words", assessmentWords);
|
data.put("words", assessmentWords);
|
||||||
data.put("answer", assessmentWords);
|
data.put("answer", assessmentWords);
|
||||||
|
|
||||||
|
List<Word> words1 = assessmentWords.subList(0, assessmentWords.size() / 2);
|
||||||
|
List<Word> words2 = assessmentWords.subList(assessmentWords.size() / 2, assessmentWords.size());
|
||||||
|
data.put("words1", words1);
|
||||||
|
data.put("words2", words2);
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}).toList();
|
}).toList();
|
||||||
|
|
||||||
WordExportUtil.generateExamWords(maps, response, templateWordPath);
|
WordExportUtil.generateExamWords(maps, examWordsDO, response, templateWordPath);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
|
||||||
@@ -101,18 +113,23 @@ public class ExamWordsController {
|
|||||||
PageResponse<ExamWordsResultRspVO> getExamWordsResult(@RequestBody ExamWordsResultReqVO examWordsResultReqVO) {
|
PageResponse<ExamWordsResultRspVO> getExamWordsResult(@RequestBody ExamWordsResultReqVO examWordsResultReqVO) {
|
||||||
Integer page = examWordsResultReqVO.getPage();
|
Integer page = examWordsResultReqVO.getPage();
|
||||||
Integer size = examWordsResultReqVO.getSize();
|
Integer size = examWordsResultReqVO.getSize();
|
||||||
|
Integer classId = examWordsResultReqVO.getClassId();
|
||||||
|
Integer gradeId = examWordsResultReqVO.getGradeId();
|
||||||
|
String studentName = examWordsResultReqVO.getStudentName();
|
||||||
Integer total = examWordsJudgeService.getExamWordsJudgeResultCount();
|
Integer total = examWordsJudgeService.getExamWordsJudgeResultCount();
|
||||||
List<ExamWordsJudgeResultDO> examWordsJudgeResult = examWordsJudgeService.getExamWordsJudgeResult(page, size);
|
List<ExamWordsJudgeResultDO> examWordsJudgeResult = examWordsJudgeService.getExamWordsJudgeResult(page, size, classId, gradeId, studentName);
|
||||||
List<ExamWordsResultRspVO> list = examWordsJudgeResult.stream().map(examWordsJudgeResultDO -> ExamWordsResultRspVO
|
List<ExamWordsResultRspVO> list = examWordsJudgeResult.stream().map(examWordsJudgeResultDO -> ExamWordsResultRspVO
|
||||||
.builder()
|
.builder()
|
||||||
.id(examWordsJudgeResultDO.getId())
|
.id(examWordsJudgeResultDO.getId())
|
||||||
.studentId(examWordsJudgeResultDO.getStudentId())
|
.studentId(examWordsJudgeResultDO.getStudentId())
|
||||||
|
.studentName(examWordsJudgeResultDO.getStudentId() != null ? studentService.getStudentById(examWordsJudgeResultDO.getStudentId()).getName() : "")
|
||||||
|
.examWordsTitle(examWordsJudgeResultDO.getExamWordsId() != null ? examWordsService.getExamWordsDOById(examWordsJudgeResultDO.getExamWordsId()).getTitle() : "")
|
||||||
.examWordsId(examWordsJudgeResultDO.getExamWordsId())
|
.examWordsId(examWordsJudgeResultDO.getExamWordsId())
|
||||||
.startDate(examWordsJudgeResultDO.getStartDate())
|
.startDate(examWordsJudgeResultDO.getStartDate())
|
||||||
.correctWordCount(examWordsJudgeResultDO.getCorrectWordCount())
|
.correctWordCount(examWordsJudgeResultDO.getCorrectWordCount())
|
||||||
.wrongWordCount(examWordsJudgeResultDO.getWrongWordCount())
|
.wrongWordCount(examWordsJudgeResultDO.getWrongWordCount())
|
||||||
.isFinished(examWordsJudgeResultDO.getIsFinished())
|
.isFinished(examWordsJudgeResultDO.getIsFinished())
|
||||||
.errorMsg(examWordsJudgeResultDO.getErrorMsg())
|
.msg(examWordsJudgeResultDO.getMsg())
|
||||||
.build()
|
.build()
|
||||||
).toList();
|
).toList();
|
||||||
return PageResponse.success(list, page, total, size);
|
return PageResponse.success(list, page, total, size);
|
||||||
@@ -131,11 +148,29 @@ public class ExamWordsController {
|
|||||||
.correctWordCount(examWordsJudgeResultDO.getCorrectWordCount())
|
.correctWordCount(examWordsJudgeResultDO.getCorrectWordCount())
|
||||||
.wrongWordCount(examWordsJudgeResultDO.getWrongWordCount())
|
.wrongWordCount(examWordsJudgeResultDO.getWrongWordCount())
|
||||||
.isFinished(examWordsJudgeResultDO.getIsFinished())
|
.isFinished(examWordsJudgeResultDO.getIsFinished())
|
||||||
.errorMsg(examWordsJudgeResultDO.getErrorMsg())
|
.errorMsg(examWordsJudgeResultDO.getMsg())
|
||||||
.correctWordIds(examWordsJudgeResultDO.getCorrectWordIds())
|
.correctWordIds(examWordsJudgeResultDO.getCorrectWordIds())
|
||||||
.wrongWordIds(examWordsJudgeResultDO.getWrongWordIds())
|
.wrongWordIds(examWordsJudgeResultDO.getWrongWordIds())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
return Response.success(examWordsDetailResultRspVO);
|
return Response.success(examWordsDetailResultRspVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("student/history")
|
||||||
|
@ApiOperationLog(description = "获取学生历史考试结果")
|
||||||
|
Response<List<FindStudentExamWordsResultListRspVO>> getStudentExamWordsResultList(@RequestBody FindStudentExamWordsResultReqVO findStudentExamWordsResultReqVO) {
|
||||||
|
Integer studentId = findStudentExamWordsResultReqVO.getStudentId();
|
||||||
|
List<FindStudentExamWordsResultListRspVO> list = examWordsJudgeService.getStudentExamWordsResultList(studentId).stream().map(examWordsJudgeResultDO -> FindStudentExamWordsResultListRspVO.builder()
|
||||||
|
.id(examWordsJudgeResultDO.getId())
|
||||||
|
.studentId(examWordsJudgeResultDO.getStudentId())
|
||||||
|
.examWordsId(examWordsJudgeResultDO.getExamWordsId())
|
||||||
|
.correctWordCount(examWordsJudgeResultDO.getCorrectWordCount())
|
||||||
|
.wrongWordCount(examWordsJudgeResultDO.getWrongWordCount())
|
||||||
|
.startDate(examWordsJudgeResultDO.getStartDate())
|
||||||
|
.accuracy((double)examWordsJudgeResultDO.getCorrectWordCount() / (examWordsJudgeResultDO.getCorrectWordCount() + examWordsJudgeResultDO.getWrongWordCount()))
|
||||||
|
.build()
|
||||||
|
).toList();
|
||||||
|
|
||||||
|
return Response.success(list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,135 @@
|
|||||||
|
package com.yinlihupo.enlish.service.controller;
|
||||||
|
|
||||||
|
import com.yinlihupo.enlish.service.constant.LessonPlanConstant;
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.LessonPlansDO;
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.VocabularyBankDO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.plan.*;
|
||||||
|
import com.yinlihupo.enlish.service.service.LessonPlansService;
|
||||||
|
import com.yinlihupo.enlish.service.utils.TTSUtil;
|
||||||
|
import com.yinlihupo.enlish.service.utils.WordExportUtil;
|
||||||
|
import com.yinlihupo.framework.biz.operationlog.aspect.ApiOperationLog;
|
||||||
|
import com.yinlihupo.framework.common.response.PageResponse;
|
||||||
|
import com.yinlihupo.framework.common.response.Response;
|
||||||
|
import com.yinlihupo.framework.common.util.JsonUtils;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
|
||||||
|
@RequestMapping("/plan/")
|
||||||
|
@RestController
|
||||||
|
@Slf4j
|
||||||
|
public class LessonPlanController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private LessonPlansService lessonPlanService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RedisTemplate<String, Object> redisTemplate;
|
||||||
|
|
||||||
|
@Resource(name = "taskExecutor")
|
||||||
|
private Executor taskExecutor;
|
||||||
|
@Resource
|
||||||
|
private TTSUtil ttsUtil;
|
||||||
|
|
||||||
|
@Value("${templates.plan.weekday}")
|
||||||
|
private String planWeekday;
|
||||||
|
@Value("${templates.plan.weekend}")
|
||||||
|
private String planWeekend;
|
||||||
|
|
||||||
|
@PostMapping("generate")
|
||||||
|
@ApiOperationLog(description = "生成学案")
|
||||||
|
public Response<String> generateLessonPlan(@RequestBody AddLessonPlanReqVO addLessonPlanReqVO) {
|
||||||
|
Integer studentId = addLessonPlanReqVO.getStudentId();
|
||||||
|
Integer unitId = addLessonPlanReqVO.getUnitId();
|
||||||
|
Integer wordSize = addLessonPlanReqVO.getWordSize();
|
||||||
|
try {
|
||||||
|
if (redisTemplate.opsForValue().get(LessonPlanConstant.buildGeneratePlanContent(studentId)) != null) {
|
||||||
|
throw new RuntimeException("学案正在生成,请耐心等待");
|
||||||
|
}
|
||||||
|
taskExecutor.execute(() -> lessonPlanService.generateLessonPlans(studentId, unitId, wordSize));
|
||||||
|
return Response.success("生成学案成功,请等待 10 分钟");
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
return Response.fail("生成学案失败" + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("download")
|
||||||
|
public void downloadLessonPlan(@RequestBody DownLoadLessonPlanReqVO downLoadLessonPlanReqVO, HttpServletResponse response) {
|
||||||
|
Integer id = downLoadLessonPlanReqVO.getId();
|
||||||
|
LessonPlansDO lessonPlanById = lessonPlanService.findLessonPlanById(id);
|
||||||
|
|
||||||
|
try {
|
||||||
|
Map<String, Object> map = JsonUtils.parseMap(lessonPlanById.getContentDetails(), String.class, Object.class);
|
||||||
|
if (!lessonPlanById.getTitle().contains("复习")) {
|
||||||
|
WordExportUtil.generateLessonPlanDocx(map, lessonPlanById, response, planWeekday, true);
|
||||||
|
} else {
|
||||||
|
WordExportUtil.generateLessonPlanDocx(map, lessonPlanById, response, planWeekend, false);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("word/voice")
|
||||||
|
@ApiOperationLog(description = "获取单词")
|
||||||
|
public Response<FindWordVoiceRspVO> findPlanWordVoice(@RequestBody FindWordVoiceReqVO findWordVoiceReqVO) {
|
||||||
|
Integer id = findWordVoiceReqVO.getPlanId();
|
||||||
|
LessonPlansDO lessonPlanById = lessonPlanService.findLessonPlanById(id);
|
||||||
|
try {
|
||||||
|
Map<String, Object> map = JsonUtils.parseMap(lessonPlanById.getContentDetails(), String.class, Object.class);
|
||||||
|
Object syncVocabList = map.get("syncVocabList");
|
||||||
|
List<VocabularyBankDO> list = JsonUtils.parseList(JsonUtils.toJsonString(syncVocabList), VocabularyBankDO.class);
|
||||||
|
List<String> words = list.stream().map(VocabularyBankDO::getWord).toList();
|
||||||
|
|
||||||
|
return Response.success(FindWordVoiceRspVO.builder().words(words).build());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
return Response.fail("获取单词失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("word/voice/tts")
|
||||||
|
public void findPlanWordVoiceTTS(@RequestBody FindWordTTSVoiceReqVO findWordVoiceReqVO, HttpServletResponse response) {
|
||||||
|
ttsUtil.generateWordVoice(findWordVoiceReqVO.getText(), response);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("check")
|
||||||
|
@ApiOperationLog(description = "检测学案是否在生成")
|
||||||
|
public Response<String> checkLessonPlan(@RequestBody FindIsGeneratePlanReqVO findIsGeneratePlanReqVO) {
|
||||||
|
Integer studentId = findIsGeneratePlanReqVO.getStudentId();
|
||||||
|
String key = LessonPlanConstant.buildGeneratePlanContent(studentId);
|
||||||
|
if (redisTemplate.opsForValue().get(key) != null) {
|
||||||
|
return Response.fail();
|
||||||
|
}
|
||||||
|
return Response.success("学案生成完成");
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("student/list")
|
||||||
|
@ApiOperationLog(description = "查询学生学案")
|
||||||
|
public Response<FindPlanStudentListRspVO> findStudentPlans(@RequestBody FindPlanStudentReqVO findPlanStudentReqVO) {
|
||||||
|
List<LessonPlansDO> lessonPlansDOS = lessonPlanService.findLessonPlansByStudentId(findPlanStudentReqVO.getStudentId());
|
||||||
|
List<LessonPlanItem> list = lessonPlansDOS.stream().map(lessonPlansDO -> LessonPlanItem
|
||||||
|
.builder()
|
||||||
|
.id(lessonPlansDO.getId())
|
||||||
|
.isFinished(0)
|
||||||
|
.title(lessonPlansDO.getTitle())
|
||||||
|
.build())
|
||||||
|
.toList();
|
||||||
|
|
||||||
|
return Response.success(FindPlanStudentListRspVO.builder().lessonPlanItems(list).build());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
package com.yinlihupo.enlish.service.controller;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.login.LoginReqVO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.login.VerificationCodeReqVO;
|
||||||
|
import com.yinlihupo.enlish.service.service.LoginService;
|
||||||
|
import com.yinlihupo.framework.biz.operationlog.aspect.ApiOperationLog;
|
||||||
|
import com.yinlihupo.framework.common.response.Response;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@RequestMapping("/login/")
|
||||||
|
@RestController
|
||||||
|
@Slf4j
|
||||||
|
public class LoginController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private LoginService loginService;
|
||||||
|
|
||||||
|
@PostMapping("login")
|
||||||
|
@ApiOperationLog(description = "登录")
|
||||||
|
public Response<String> login(@RequestBody LoginReqVO loginReqVO) {
|
||||||
|
try {
|
||||||
|
loginService.login(loginReqVO.getPhone(), loginReqVO.getName(), loginReqVO.getPassword(), loginReqVO.getCode(), loginReqVO.getInvitationCode());
|
||||||
|
return Response.success(StpUtil.getTokenInfo().getTokenValue());
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("注册或登录失败 {}", e.getMessage());
|
||||||
|
return Response.fail("注册或登录失败 " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("logout")
|
||||||
|
@ApiOperationLog(description = "登出")
|
||||||
|
public Response<Void> logout() {
|
||||||
|
try {
|
||||||
|
StpUtil.logout();
|
||||||
|
return Response.success();
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("登出失败 {}", e.getMessage());
|
||||||
|
return Response.fail("登出失败 " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("sendVerificationCode")
|
||||||
|
@ApiOperationLog(description = "发送验证码")
|
||||||
|
public Response<Void> sendVerificationCode(@RequestBody VerificationCodeReqVO verificationCodeReqVO) {
|
||||||
|
try {
|
||||||
|
loginService.sendVerificationCode(verificationCodeReqVO.getPhone());
|
||||||
|
return Response.success();
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("发送验证码失败 {}", e.getMessage());
|
||||||
|
return Response.fail("发送验证码失败 " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -4,6 +4,8 @@ package com.yinlihupo.enlish.service.controller;
|
|||||||
import com.yinlihupo.enlish.service.domain.dataobject.ClassDO;
|
import com.yinlihupo.enlish.service.domain.dataobject.ClassDO;
|
||||||
import com.yinlihupo.enlish.service.domain.dataobject.GradeDO;
|
import com.yinlihupo.enlish.service.domain.dataobject.GradeDO;
|
||||||
import com.yinlihupo.enlish.service.domain.dataobject.StudentDO;
|
import com.yinlihupo.enlish.service.domain.dataobject.StudentDO;
|
||||||
|
import com.yinlihupo.enlish.service.model.bo.StudentDetail;
|
||||||
|
import com.yinlihupo.enlish.service.model.bo.exam.WordMasteryDetail;
|
||||||
import com.yinlihupo.enlish.service.model.vo.student.*;
|
import com.yinlihupo.enlish.service.model.vo.student.*;
|
||||||
import com.yinlihupo.enlish.service.service.ClassService;
|
import com.yinlihupo.enlish.service.service.ClassService;
|
||||||
import com.yinlihupo.enlish.service.service.GradeService;
|
import com.yinlihupo.enlish.service.service.GradeService;
|
||||||
@@ -46,6 +48,8 @@ public class StudentController {
|
|||||||
.id(studentDO.getId())
|
.id(studentDO.getId())
|
||||||
.name(studentDO.getName())
|
.name(studentDO.getName())
|
||||||
.classId(studentDO.getClassId())
|
.classId(studentDO.getClassId())
|
||||||
|
.className(classService.findClassById(studentDO.getClassId()).getTitle())
|
||||||
|
.gradeName(gradeService.findByClassId(studentDO.getGradeId()).getTitle())
|
||||||
.gradeId(studentDO.getGradeId())
|
.gradeId(studentDO.getGradeId())
|
||||||
.build()).toList();
|
.build()).toList();
|
||||||
|
|
||||||
@@ -60,12 +64,13 @@ public class StudentController {
|
|||||||
StudentDO studentById = studentService.getStudentById(studentId);
|
StudentDO studentById = studentService.getStudentById(studentId);
|
||||||
ClassDO classById = classService.findClassById(studentById.getClassId());
|
ClassDO classById = classService.findClassById(studentById.getClassId());
|
||||||
GradeDO byClassId = gradeService.findByClassId(studentById.getGradeId());
|
GradeDO byClassId = gradeService.findByClassId(studentById.getGradeId());
|
||||||
|
GradeDO actualGradeById = gradeService.findByClassId(studentById.getActualGradeId());
|
||||||
FindStudentDetailRspVO findStudentDetailRspVO = FindStudentDetailRspVO.builder()
|
FindStudentDetailRspVO findStudentDetailRspVO = FindStudentDetailRspVO.builder()
|
||||||
.id(studentById.getId())
|
.id(studentById.getId())
|
||||||
.name(studentById.getName())
|
.name(studentById.getName())
|
||||||
.className(classById.getTitle())
|
.className(classById.getTitle())
|
||||||
.gradeName(byClassId.getTitle())
|
.gradeName(byClassId.getTitle())
|
||||||
|
.actualGrade(actualGradeById != null ? actualGradeById.getTitle() : "")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
return Response.success(findStudentDetailRspVO);
|
return Response.success(findStudentDetailRspVO);
|
||||||
@@ -84,4 +89,28 @@ public class StudentController {
|
|||||||
studentService.deleteStudent(deleteStudentReqVO.getStudentId());
|
studentService.deleteStudent(deleteStudentReqVO.getStudentId());
|
||||||
return Response.success();
|
return Response.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("analyze")
|
||||||
|
@ApiOperationLog(description = "学生学习分析")
|
||||||
|
public Response<String> analyzeStudentStudy(@RequestBody AnalyzeStudentStudyReqVO analyzeStudentStudyReqVO) {
|
||||||
|
String analyzeStudentStudy = studentService.analyzeStudentStudy(analyzeStudentStudyReqVO.getStudentId());
|
||||||
|
return Response.success(analyzeStudentStudy);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("mastery/detail")
|
||||||
|
@ApiOperationLog(description = "查询学生单词掌握详情")
|
||||||
|
public Response<List<FindStudentMasteryDetailRspVO>> findStudentMasteryDetail(@RequestBody FindStudentMasteryDetailReqVO findStudentMasteryDetailReqVO) {
|
||||||
|
Integer studentId = findStudentMasteryDetailReqVO.getStudentId();
|
||||||
|
List<WordMasteryDetail> studentWordMasteryDetail = studentService.findStudentWordMasteryDetail(studentId);
|
||||||
|
|
||||||
|
List<FindStudentMasteryDetailRspVO> list = studentWordMasteryDetail.stream().map(wordMasteryDetail -> FindStudentMasteryDetailRspVO.builder()
|
||||||
|
.word(wordMasteryDetail.getWord())
|
||||||
|
.reviewCount(wordMasteryDetail.getReviewCount())
|
||||||
|
.memoryStrength(wordMasteryDetail.getMemoryStrength())
|
||||||
|
.updateTime(wordMasteryDetail.getUpdate_time())
|
||||||
|
.build()
|
||||||
|
).toList();
|
||||||
|
|
||||||
|
return Response.success(list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,107 @@
|
|||||||
|
package com.yinlihupo.enlish.service.controller;
|
||||||
|
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.LessonPlansDO;
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.StudentLessonPlansDO;
|
||||||
|
import com.yinlihupo.enlish.service.model.bo.StudentDetail;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.plan.*;
|
||||||
|
import com.yinlihupo.enlish.service.service.LessonPlansService;
|
||||||
|
import com.yinlihupo.enlish.service.service.StudentLessonPlansService;
|
||||||
|
import com.yinlihupo.enlish.service.service.StudentService;
|
||||||
|
import com.yinlihupo.framework.biz.operationlog.aspect.ApiOperationLog;
|
||||||
|
import com.yinlihupo.framework.common.response.PageResponse;
|
||||||
|
import com.yinlihupo.framework.common.response.Response;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@RequestMapping("/studentLessonPlans/")
|
||||||
|
@RestController
|
||||||
|
public class StudentLessonPlansController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private StudentLessonPlansService studentLessonPlansService;
|
||||||
|
@Resource
|
||||||
|
private StudentService studentService;
|
||||||
|
@Resource
|
||||||
|
private LessonPlansService lessonPlansService;
|
||||||
|
|
||||||
|
@PostMapping("/list")
|
||||||
|
@ApiOperationLog(description = "查询学生学案")
|
||||||
|
public PageResponse<FindStudentPlansRspVO> findStudentPlans(@RequestBody FindStudentPlansReqVO findStudentPlansReqVO) {
|
||||||
|
|
||||||
|
Integer studentLessonPlanTotal = studentLessonPlansService.findStudentLessonPlanTotal();
|
||||||
|
|
||||||
|
String name = findStudentPlansReqVO.getName();
|
||||||
|
Integer page = findStudentPlansReqVO.getPage();
|
||||||
|
Integer size = findStudentPlansReqVO.getSize();
|
||||||
|
|
||||||
|
List<StudentLessonPlansDO> studentLessonPlansDOListPageSize = studentLessonPlansService.findStudentLessonPlansDOList(page, size, name);
|
||||||
|
Map<Integer, List<StudentLessonPlansDO>> studentId2StudentLessonPlansDOListMap = studentLessonPlansDOListPageSize.stream().collect(
|
||||||
|
Collectors.groupingBy(StudentLessonPlansDO::getStudentId)
|
||||||
|
);
|
||||||
|
|
||||||
|
List<Integer> planIds = studentLessonPlansDOListPageSize.stream().map(StudentLessonPlansDO::getPlanId).toList();
|
||||||
|
List<LessonPlansDO> lessonPlans = lessonPlansService.findLessonPlans(planIds);
|
||||||
|
Map<Integer, LessonPlansDO> id2LessonPlansDO = lessonPlans.stream().collect(Collectors.toMap(
|
||||||
|
LessonPlansDO::getId,
|
||||||
|
lessonPlansDO -> lessonPlansDO
|
||||||
|
));
|
||||||
|
|
||||||
|
List<StudentDetail> studentDetailList = studentService.getStudentDetailList(new ArrayList<>(studentId2StudentLessonPlansDOListMap.keySet()));
|
||||||
|
|
||||||
|
List<FindStudentPlansRspVO> findStudentPlansRspVOList = studentDetailList.stream().map(studentDetail -> {
|
||||||
|
List<StudentLessonPlansDO> studentLessonPlansDOList = studentId2StudentLessonPlansDOListMap.get(studentDetail.getId());
|
||||||
|
return FindStudentPlansRspVO.builder()
|
||||||
|
.name(studentDetail.getName())
|
||||||
|
.id(studentDetail.getId())
|
||||||
|
.classId(studentDetail.getClassId())
|
||||||
|
.gradeId(studentDetail.getGradeId())
|
||||||
|
.gradeName(studentDetail.getGradeName())
|
||||||
|
.className(studentDetail.getClassName())
|
||||||
|
.plans(studentLessonPlansDOList.stream().map(studentLessonPlansDO ->
|
||||||
|
LessonPlanItem.builder().title(id2LessonPlansDO.get(studentLessonPlansDO.getPlanId()).getTitle()).id(studentLessonPlansDO.getPlanId()).isFinished(studentLessonPlansDO.getIsFinished()).build()
|
||||||
|
).toList())
|
||||||
|
.build();
|
||||||
|
}).toList();
|
||||||
|
|
||||||
|
return PageResponse.success(findStudentPlansRspVOList, page, studentLessonPlanTotal, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("finish")
|
||||||
|
@ApiOperationLog(description = "完成学案")
|
||||||
|
public Response<String> finishStudentPlan(@RequestBody FinishStudentPlanReqVO finishStudentPlanReqVO) {
|
||||||
|
Integer studentId = finishStudentPlanReqVO.getStudentId();
|
||||||
|
Integer planId = finishStudentPlanReqVO.getPlanId();
|
||||||
|
int lessonPlan = studentLessonPlansService.finishStudentLessonPlan(studentId, planId);
|
||||||
|
|
||||||
|
if (lessonPlan > 0) {
|
||||||
|
return Response.success("完成学案成功");
|
||||||
|
}
|
||||||
|
return Response.fail("完成学案失败");
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("history")
|
||||||
|
@ApiOperationLog(description = "查询学案历史")
|
||||||
|
public Response<List<FindStudentPlanHistoryListRspVO>> findStudentPlanHistory(@RequestBody FindStudentPlanHistoryReqVO findStudentPlanHistoryReqVO) {
|
||||||
|
Integer studentId = findStudentPlanHistoryReqVO.getStudentId();
|
||||||
|
List<FindStudentPlanHistoryListRspVO> list = studentLessonPlansService.findStudentLessonPlansByStudentId(studentId)
|
||||||
|
.stream().map(studentLessonPlansDO -> FindStudentPlanHistoryListRspVO.builder()
|
||||||
|
.id(studentLessonPlansDO.getId())
|
||||||
|
.studentId(studentLessonPlansDO.getStudentId())
|
||||||
|
.planId(studentLessonPlansDO.getPlanId())
|
||||||
|
.startTime(studentLessonPlansDO.getStartTime())
|
||||||
|
.masteryRat(studentLessonPlansDO.getMasteryRat())
|
||||||
|
.totalCount(studentLessonPlansDO.getTotalCount())
|
||||||
|
.build()
|
||||||
|
).toList();
|
||||||
|
|
||||||
|
return Response.success(list);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
package com.yinlihupo.enlish.service.controller;
|
||||||
|
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.UnitDO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.unit.AddUnitReqVO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.unit.DeleteUnitReqVO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.unit.FindUnitListReqVO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.unit.FindUnitListRspVO;
|
||||||
|
import com.yinlihupo.enlish.service.service.UnitService;
|
||||||
|
import com.yinlihupo.framework.biz.operationlog.aspect.ApiOperationLog;
|
||||||
|
import com.yinlihupo.framework.common.response.PageResponse;
|
||||||
|
import com.yinlihupo.framework.common.response.Response;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@RequestMapping("/unit/")
|
||||||
|
@RestController
|
||||||
|
@Slf4j
|
||||||
|
public class UnitController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UnitService unitService;
|
||||||
|
|
||||||
|
@PostMapping("/list")
|
||||||
|
@ApiOperationLog(description = "查询单元")
|
||||||
|
public PageResponse<FindUnitListRspVO> list(@RequestBody FindUnitListReqVO findUnitListReqVO) {
|
||||||
|
Integer page = findUnitListReqVO.getPage();
|
||||||
|
Integer size = findUnitListReqVO.getSize();
|
||||||
|
Integer unitDOListCount = unitService.findUnitDOListCount();
|
||||||
|
|
||||||
|
List<UnitDO> unitDOList = unitService.findUnitDOList(page, size);
|
||||||
|
List<FindUnitListRspVO> findUnitListRspVOS = unitDOList.stream().map(unitDO -> FindUnitListRspVO.builder()
|
||||||
|
.id(unitDO.getId())
|
||||||
|
.title(unitDO.getTitle())
|
||||||
|
.version(unitDO.getVersion())
|
||||||
|
.createAt(unitDO.getCreateAt())
|
||||||
|
.build()
|
||||||
|
).toList();
|
||||||
|
|
||||||
|
return PageResponse.success(findUnitListRspVOS, page, unitDOListCount, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/add")
|
||||||
|
@ApiOperationLog(description = "添加单元")
|
||||||
|
public Response<Void> add(@RequestBody AddUnitReqVO addUnitReqVO) {
|
||||||
|
try {
|
||||||
|
unitService.add(addUnitReqVO);
|
||||||
|
|
||||||
|
return Response.success();
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
return Response.fail(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/delete")
|
||||||
|
@ApiOperationLog(description = "删除单元")
|
||||||
|
public Response<String> delete(@RequestBody DeleteUnitReqVO deleteUnitReqVO) {
|
||||||
|
try {
|
||||||
|
unitService.delete(deleteUnitReqVO.getId());
|
||||||
|
|
||||||
|
return Response.success();
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error(e.getMessage());
|
||||||
|
return Response.fail(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
package com.yinlihupo.enlish.service.controller;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.UserDO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.user.FindUserInfoRspVO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.user.UpdateUserInfoReqVO;
|
||||||
|
import com.yinlihupo.enlish.service.service.UserService;
|
||||||
|
import com.yinlihupo.framework.biz.operationlog.aspect.ApiOperationLog;
|
||||||
|
import com.yinlihupo.framework.common.response.Response;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestBody;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/user/")
|
||||||
|
@Slf4j
|
||||||
|
public class UserController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
@PostMapping("info")
|
||||||
|
public Response<FindUserInfoRspVO> info() {
|
||||||
|
|
||||||
|
UserDO user = userService.findUser();
|
||||||
|
FindUserInfoRspVO findUserInfoRspVO = FindUserInfoRspVO.builder()
|
||||||
|
.id(user.getId())
|
||||||
|
.name(user.getName())
|
||||||
|
.build();
|
||||||
|
return Response.success(findUserInfoRspVO);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("update-user-info")
|
||||||
|
@ApiOperationLog(description = "修改用户信息")
|
||||||
|
public Response<String> updatePassword(@RequestBody UpdateUserInfoReqVO updateUserInfoReqVO) {
|
||||||
|
try {
|
||||||
|
String code = updateUserInfoReqVO.getCode();
|
||||||
|
String newPassword = updateUserInfoReqVO.getNewPassword();
|
||||||
|
String phone = updateUserInfoReqVO.getPhone();
|
||||||
|
String name = updateUserInfoReqVO.getName();
|
||||||
|
userService.updateUserInfo(newPassword, code, phone, name);
|
||||||
|
|
||||||
|
StpUtil.logout();
|
||||||
|
|
||||||
|
return Response.success();
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("修改密码失败 {}", e.getMessage());
|
||||||
|
return Response.fail(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
package com.yinlihupo.enlish.service.controller;
|
package com.yinlihupo.enlish.service.controller;
|
||||||
|
|
||||||
import com.yinlihupo.enlish.service.domain.dataobject.VocabularyBankDO;
|
import com.yinlihupo.enlish.service.domain.dataobject.VocabularyBankDO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.vocabulary.FindStudentWordDetailReqVO;
|
||||||
|
import com.yinlihupo.enlish.service.model.vo.vocabulary.FindStudentWordDetailRspVO;
|
||||||
import com.yinlihupo.enlish.service.model.vo.vocabulary.FindWordTitleReqVO;
|
import com.yinlihupo.enlish.service.model.vo.vocabulary.FindWordTitleReqVO;
|
||||||
import com.yinlihupo.enlish.service.model.vo.vocabulary.FindWordTitleRspVO;
|
import com.yinlihupo.enlish.service.model.vo.vocabulary.FindWordTitleRspVO;
|
||||||
import com.yinlihupo.enlish.service.service.VocabularyService;
|
import com.yinlihupo.enlish.service.service.VocabularyService;
|
||||||
@@ -30,4 +32,11 @@ public class VocabularyController {
|
|||||||
.build();
|
.build();
|
||||||
return Response.success(findWordTitleRspVO);
|
return Response.success(findWordTitleRspVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("student/detail")
|
||||||
|
@ApiOperationLog(description = "查询学生单词详情")
|
||||||
|
public Response<FindStudentWordDetailRspVO> findStudentWordDetail(@RequestBody FindStudentWordDetailReqVO vo) {
|
||||||
|
return Response.success(vocabularyService.findStudentWordDetail(vo.getId()));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ public class ExamWordsDO {
|
|||||||
|
|
||||||
private Integer level;
|
private Integer level;
|
||||||
|
|
||||||
|
private Integer type;
|
||||||
|
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
private LocalDateTime createdAt;
|
private LocalDateTime createdAt;
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import java.util.List;
|
|||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
public class ExamWordsJudgeResultDO {
|
public class ExamWordsJudgeResultDO {
|
||||||
|
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
private String ansSheetPath;
|
private String ansSheetPath;
|
||||||
@@ -33,6 +34,6 @@ public class ExamWordsJudgeResultDO {
|
|||||||
|
|
||||||
private List<Integer> wrongWordIds;
|
private List<Integer> wrongWordIds;
|
||||||
|
|
||||||
private String errorMsg;
|
private String msg;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.dataobject;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class LessonPlansDO {
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
private String gradeId;
|
||||||
|
|
||||||
|
private Integer unitId;
|
||||||
|
|
||||||
|
private LocalDateTime createdAt;
|
||||||
|
|
||||||
|
private String contentDetails;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.dataobject;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class PlanExamDO {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private Integer planId;
|
||||||
|
|
||||||
|
private Integer examId;
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.dataobject;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class RoleDO {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String roleName;
|
||||||
|
|
||||||
|
private String roleKey;
|
||||||
|
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
private Integer isDeleted;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -21,6 +21,8 @@ public class StudentDO {
|
|||||||
|
|
||||||
private Integer gradeId;
|
private Integer gradeId;
|
||||||
|
|
||||||
|
private Integer actualGradeId;
|
||||||
|
|
||||||
private Integer isDeleted;
|
private Integer isDeleted;
|
||||||
|
|
||||||
private LocalDateTime startTime;
|
private LocalDateTime startTime;
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.dataobject;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class StudentLessonPlansDO {
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private Integer studentId;
|
||||||
|
|
||||||
|
private Integer planId;
|
||||||
|
|
||||||
|
private LocalDateTime startTime;
|
||||||
|
|
||||||
|
private BigDecimal masteryRat;
|
||||||
|
|
||||||
|
private Integer totalCount;
|
||||||
|
|
||||||
|
private Integer isFinished;
|
||||||
|
|
||||||
|
private String memorizedWordsJson;
|
||||||
|
|
||||||
|
private String unmemorizedWordsJson;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.dataobject;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class StudentStageLearningRemarkDO {
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private Integer studentId;
|
||||||
|
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
private String commentContent;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.dataobject;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class UserDO {
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String openid;
|
||||||
|
|
||||||
|
private String phone;
|
||||||
|
|
||||||
|
private String email;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.dataobject;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class UserRoleRelDO {
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
private Long roleId;
|
||||||
|
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -10,6 +10,7 @@ import lombok.NoArgsConstructor;
|
|||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
public class VocabularyBankDO {
|
public class VocabularyBankDO {
|
||||||
|
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
private String word;
|
private String word;
|
||||||
@@ -18,6 +19,8 @@ public class VocabularyBankDO {
|
|||||||
|
|
||||||
private String pronunciation;
|
private String pronunciation;
|
||||||
|
|
||||||
|
private String pos;
|
||||||
|
|
||||||
private Integer unitId;
|
private Integer unitId;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -7,4 +7,6 @@ public interface ExamWordsDOMapper {
|
|||||||
int insert(ExamWordsDO record);
|
int insert(ExamWordsDO record);
|
||||||
|
|
||||||
ExamWordsDO selectById(Integer id);
|
ExamWordsDO selectById(Integer id);
|
||||||
|
|
||||||
|
void updateWordIdsOrder(ExamWordsDO examWordsDO);
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,7 @@ public interface ExamWordsJudgeResultDOMapper {
|
|||||||
|
|
||||||
List<ExamWordsJudgeResultDO> selectUnfinishedExamWordsJudgeResultDOList(int count);
|
List<ExamWordsJudgeResultDO> selectUnfinishedExamWordsJudgeResultDOList(int count);
|
||||||
|
|
||||||
int updateErrorMsg(@Param("id") Integer id, @Param("errorMsg") String errorMsg);
|
int updateMsg(@Param("id") Integer id, @Param("msg") String msg);
|
||||||
|
|
||||||
int updateExamWordsJudgeResultDO(@Param("examWordsJudgeResultDO") ExamWordsJudgeResultDO examWordsJudgeResultDO);
|
int updateExamWordsJudgeResultDO(@Param("examWordsJudgeResultDO") ExamWordsJudgeResultDO examWordsJudgeResultDO);
|
||||||
|
|
||||||
@@ -19,5 +19,13 @@ public interface ExamWordsJudgeResultDOMapper {
|
|||||||
|
|
||||||
Integer selectCount();
|
Integer selectCount();
|
||||||
|
|
||||||
|
Integer selectUnfinishedCount();
|
||||||
|
|
||||||
ExamWordsJudgeResultDO selectDetailById(@Param("id") Integer id);
|
ExamWordsJudgeResultDO selectDetailById(@Param("id") Integer id);
|
||||||
|
|
||||||
|
List<ExamWordsJudgeResultDO> selectByStudentId(@Param("studentId") Integer studentId);
|
||||||
|
|
||||||
|
List<ExamWordsJudgeResultDO> selectByStudentIdAndLimitTime(@Param("studentId") Integer studentId);
|
||||||
|
|
||||||
|
List<ExamWordsJudgeResultDO> selectByPageAndStudentIds(@Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize, @Param("studentIds") List<Integer> studentIds);
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.yinlihupo.enlish.service.domain.mapper;
|
package com.yinlihupo.enlish.service.domain.mapper;
|
||||||
|
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.GradeUnitDO;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -7,4 +8,12 @@ import java.util.List;
|
|||||||
public interface GradeUnitDOMapper {
|
public interface GradeUnitDOMapper {
|
||||||
|
|
||||||
List<Integer> selectUnitIdsByGradeId(@Param("gradeId") Integer gradeId);
|
List<Integer> selectUnitIdsByGradeId(@Param("gradeId") Integer gradeId);
|
||||||
|
|
||||||
|
GradeUnitDO selectByUnitId(@Param("unitId") Integer unitId);
|
||||||
|
|
||||||
|
List<GradeUnitDO> selectByUnitIds(@Param("unitIds") List<Integer> unitIds);
|
||||||
|
|
||||||
|
int insert(GradeUnitDO record);
|
||||||
|
|
||||||
|
int deleteByUnitId(@Param("unitId") Integer unitId);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.mapper;
|
||||||
|
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.LessonPlansDO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface LessonPlansDOMapper {
|
||||||
|
|
||||||
|
void insert(LessonPlansDO lessonPlansDO);
|
||||||
|
|
||||||
|
LessonPlansDO selectById(Integer id);
|
||||||
|
|
||||||
|
List<LessonPlansDO> findLessonPlansByStudentId(@Param("ids") List<Integer> ids);
|
||||||
|
|
||||||
|
LessonPlansDO selectByLessonId(@Param("lessonId") Integer lessonId);
|
||||||
|
|
||||||
|
List<LessonPlansDO> selectByStudentId(@Param("studentId") Integer studentId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.mapper;
|
||||||
|
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.PlanExamDO;
|
||||||
|
|
||||||
|
public interface PlanExamDOMapper {
|
||||||
|
void insert(PlanExamDO record);
|
||||||
|
|
||||||
|
PlanExamDO selectByExamId(Integer examId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.mapper;
|
||||||
|
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.RoleDO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface RoleDOMapper {
|
||||||
|
|
||||||
|
List<RoleDO> selectAll();
|
||||||
|
|
||||||
|
List<RoleDO> selectByIds(@Param("ids") List<Long> ids);
|
||||||
|
}
|
||||||
@@ -19,4 +19,14 @@ public interface StudentDOMapper {
|
|||||||
|
|
||||||
// 逻辑删除
|
// 逻辑删除
|
||||||
void deleteById(Integer id);
|
void deleteById(Integer id);
|
||||||
|
|
||||||
|
int selectStudentCountByClassId(@Param("classId") Integer classId);
|
||||||
|
|
||||||
|
int updateStudentActualGradeId(@Param("studentId") Integer studentId, @Param("gradeId") Integer gradeId);
|
||||||
|
|
||||||
|
List<StudentDO> selectStudentDOListByClassId(@Param("classId") Integer classId);
|
||||||
|
|
||||||
|
List<StudentDO> selectStudentDOListByGradeId(@Param("gradeId") Integer gradeId);
|
||||||
|
|
||||||
|
List<StudentDO> selectStudentDOListByName(@Param("name") String name);
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,7 @@ import java.util.List;
|
|||||||
|
|
||||||
public interface StudentExamWordsDOMapper {
|
public interface StudentExamWordsDOMapper {
|
||||||
|
|
||||||
int insertStudentsExam(@Param("studentIds") List<Integer> studentIds, @Param("examWordsId") Integer examWordsId);
|
int insertStudentsExam(@Param("studentId") Integer studentId, @Param("examWordsId") Integer examWordsId);
|
||||||
|
|
||||||
StudentExamWordsDO selectByStudentIdAndExamWordsId(@Param("studentId") Integer studentId, @Param("examWordsId") Integer examWordsId);
|
StudentExamWordsDO selectByStudentIdAndExamWordsId(@Param("studentId") Integer studentId, @Param("examWordsId") Integer examWordsId);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.mapper;
|
||||||
|
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.StudentLessonPlansDO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface StudentLessonPlansDOMapper {
|
||||||
|
|
||||||
|
void insert(StudentLessonPlansDO studentLessonPlansDO);
|
||||||
|
|
||||||
|
List<StudentLessonPlansDO> selectStudentLessonPlanList(@Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize, @Param("name") String name);
|
||||||
|
|
||||||
|
Integer selectStudentPlanTotal();
|
||||||
|
|
||||||
|
Integer finfishStudentPlan(@Param("studentId") Integer studentId, @Param("planId") Integer planId, @Param("count") Integer count, @Param("mastery") double mastery);
|
||||||
|
|
||||||
|
List<StudentLessonPlansDO> selectStudentLessonPlanListByStudentId(@Param("studentId") Integer studentId);
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.mapper;
|
||||||
|
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.StudentStageLearningRemarkDO;
|
||||||
|
|
||||||
|
public interface StudentStageLearningRemarkDOMapper {
|
||||||
|
|
||||||
|
void insert(StudentStageLearningRemarkDO studentStageLearningRemarkDO);
|
||||||
|
}
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
package com.yinlihupo.enlish.service.domain.mapper;
|
package com.yinlihupo.enlish.service.domain.mapper;
|
||||||
|
|
||||||
import com.yinlihupo.enlish.service.domain.dataobject.UnitDO;
|
import com.yinlihupo.enlish.service.domain.dataobject.UnitDO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface UnitDOMapper {
|
public interface UnitDOMapper {
|
||||||
int deleteByPrimaryKey(Integer id);
|
int deleteByPrimaryKey(Integer id);
|
||||||
@@ -18,4 +21,10 @@ public interface UnitDOMapper {
|
|||||||
int updateByPrimaryKey(UnitDO record);
|
int updateByPrimaryKey(UnitDO record);
|
||||||
|
|
||||||
UnitDO selectByTitle(String title);
|
UnitDO selectByTitle(String title);
|
||||||
|
|
||||||
|
List<UnitDO> selectUnitDOList(@Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);
|
||||||
|
|
||||||
|
Integer selectUnitDOListCount();
|
||||||
|
|
||||||
|
List<UnitDO> selectByUnitName(@Param("unitName") String unitName);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.mapper;
|
||||||
|
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.UserDO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface UserDOMapper {
|
||||||
|
|
||||||
|
UserDO selectByPhone(String phone);
|
||||||
|
|
||||||
|
void insert(UserDO userDO);
|
||||||
|
|
||||||
|
void updatePassword(@Param("id") Long id, @Param("password") String password);
|
||||||
|
|
||||||
|
void updateUserInfo(@Param("id") Long id, @Param("name") String name, @Param("password") String password, @Param("phone") String phone);
|
||||||
|
|
||||||
|
UserDO selectById(Long id);
|
||||||
|
|
||||||
|
List<UserDO> selectUserDOList(@Param("name") String name, @Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);
|
||||||
|
|
||||||
|
int selectUserTotal();
|
||||||
|
|
||||||
|
void createUser(UserDO userDO);
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package com.yinlihupo.enlish.service.domain.mapper;
|
||||||
|
|
||||||
|
import com.yinlihupo.enlish.service.domain.dataobject.UserRoleRelDO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface UserRoleRelDOMapper {
|
||||||
|
|
||||||
|
List<UserRoleRelDO> selectAll();
|
||||||
|
|
||||||
|
List<UserRoleRelDO> selectByUserIds(@Param("userIds") List<Long> userIds);
|
||||||
|
}
|
||||||
@@ -14,4 +14,18 @@ public interface VocabularyBankDOMapper {
|
|||||||
List<VocabularyBankDO> selectVocabularyBankDOListByIds(@Param("ids") List<Integer> ids);
|
List<VocabularyBankDO> selectVocabularyBankDOListByIds(@Param("ids") List<Integer> ids);
|
||||||
|
|
||||||
List<Integer> selectAllIds();
|
List<Integer> selectAllIds();
|
||||||
|
|
||||||
|
List<VocabularyBankDO> selectVocabularyBankDOAllByUnitId(@Param("unitId") Integer unitId);
|
||||||
|
|
||||||
|
List<VocabularyBankDO> selectVocabularyBankListStudentNotMaster(@Param("gradeId") Integer gradeId, @Param("studentId") Integer studentId);
|
||||||
|
|
||||||
|
List<VocabularyBankDO> selectVocabularyBankListSelfCheck(@Param("gradeId") Integer gradeId, @Param("studentId") Integer studentId, @Param("ids") List<Integer> ids, @Param("wordCount") Integer wordCount);
|
||||||
|
|
||||||
|
List<VocabularyBankDO> selectVocabularyBankListByGradeIdRandom(@Param("gradeId") Integer gradeId, @Param("wordCount") Integer wordCount);
|
||||||
|
|
||||||
|
Integer selectWordTotal();
|
||||||
|
|
||||||
|
List<VocabularyBankDO> selectByUnitIds(@Param("unitIds") List<Integer> unitIds);
|
||||||
|
|
||||||
|
List<VocabularyBankDO> selectByGradeIdAndNotMatchIds(@Param("gradeId") Integer gradeId, @Param("ids") List<Integer> ids, @Param("wordCount") Integer wordCount);
|
||||||
}
|
}
|
||||||
@@ -14,4 +14,14 @@ public interface WordMasteryLogDOMapper {
|
|||||||
int batchInsertInitialization(@Param("wordIds") List<Integer> wordIds, @Param("studentId") Integer studentId);
|
int batchInsertInitialization(@Param("wordIds") List<Integer> wordIds, @Param("studentId") Integer studentId);
|
||||||
|
|
||||||
int batchUpdateStudentMastery(@Param("wordMasteryLogDOs") List<WordMasteryLogDO> wordMasteryLogDOs);
|
int batchUpdateStudentMastery(@Param("wordMasteryLogDOs") List<WordMasteryLogDO> wordMasteryLogDOs);
|
||||||
|
|
||||||
|
int selectStudentStrengthCount(@Param("studentId") Integer studentId);
|
||||||
|
|
||||||
|
List<WordMasteryLogDO> selectByStudentIdAndLimitTime(@Param("studentId") Integer studentId);
|
||||||
|
|
||||||
|
List<WordMasteryLogDO> selectAllByStudentId(@Param("studentId") Integer studentId);
|
||||||
|
|
||||||
|
Integer selectMasteryCount(@Param("studentId") Integer studentId);
|
||||||
|
|
||||||
|
Integer selectNotMasteryCount(@Param("studentId") Integer studentId);
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,7 @@ public enum ResponseCodeEnum implements BaseExceptionInterface {
|
|||||||
// ----------- 通用异常状态码 -----------
|
// ----------- 通用异常状态码 -----------
|
||||||
SYSTEM_ERROR("AUTH-10000", "出错啦,后台小哥正在努力修复中..."),
|
SYSTEM_ERROR("AUTH-10000", "出错啦,后台小哥正在努力修复中..."),
|
||||||
PARAM_NOT_VALID("AUTH-10001", "参数错误"),
|
PARAM_NOT_VALID("AUTH-10001", "参数错误"),
|
||||||
|
NOT_LOGIN("AUTH-10002", "请先登录")
|
||||||
// ----------- 业务异常状态码 -----------
|
// ----------- 业务异常状态码 -----------
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.yinlihupo.enlish.service.exception;
|
package com.yinlihupo.enlish.service.exception;
|
||||||
|
|
||||||
|
|
||||||
|
import cn.dev33.satoken.exception.NotLoginException;
|
||||||
import com.yinlihupo.enlish.service.enums.ResponseCodeEnum;
|
import com.yinlihupo.enlish.service.enums.ResponseCodeEnum;
|
||||||
import com.yinlihupo.framework.common.exception.BizException;
|
import com.yinlihupo.framework.common.exception.BizException;
|
||||||
import com.yinlihupo.framework.common.response.Response;
|
import com.yinlihupo.framework.common.response.Response;
|
||||||
@@ -96,4 +97,11 @@ public class GlobalExceptionHandler {
|
|||||||
log.error("{} request error, ", request.getRequestURI(), e);
|
log.error("{} request error, ", request.getRequestURI(), e);
|
||||||
return Response.fail(ResponseCodeEnum.SYSTEM_ERROR);
|
return Response.fail(ResponseCodeEnum.SYSTEM_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ExceptionHandler({ NotLoginException.class })
|
||||||
|
@ResponseBody
|
||||||
|
public Response<Object> handleNotLoginException(HttpServletRequest request, NotLoginException e) {
|
||||||
|
log.warn("{} request error, ", request.getRequestURI(), e);
|
||||||
|
return Response.fail(ResponseCodeEnum.NOT_LOGIN);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.bo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class Sentence {
|
||||||
|
|
||||||
|
@JsonProperty("target_word")
|
||||||
|
private String targetWord;
|
||||||
|
@JsonProperty("grade_level")
|
||||||
|
private String gradeLevel;
|
||||||
|
@JsonProperty("question")
|
||||||
|
private String question;
|
||||||
|
@JsonProperty("chinese_clue")
|
||||||
|
private String chineseClue;
|
||||||
|
@JsonProperty("correct_answer")
|
||||||
|
private String correctAnswer;
|
||||||
|
@JsonProperty("grammar_point")
|
||||||
|
private String grammarPoint;
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.bo.exam;
|
||||||
|
|
||||||
|
public enum ActionType {
|
||||||
|
PASS, // 保持当前进度
|
||||||
|
UPGRADE, // 升级
|
||||||
|
DOWNGRADE, // 降级回填
|
||||||
|
STAY_AND_REVIEW, // 保持年级但进入复习模式
|
||||||
|
TRIGGER_RETEST // 触发熔断二测
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.bo.exam;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class DiagnosisResult {
|
||||||
|
|
||||||
|
int determinedLevel; // 系统判定的真实等级
|
||||||
|
ActionType actionType; // 建议的系统动作
|
||||||
|
String message; // 展示给用户的文案
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.bo.exam;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class ExamWordsJudgeResultDetail {
|
||||||
|
|
||||||
|
private Integer correctWordCount;
|
||||||
|
|
||||||
|
private Integer wrongWordCount;
|
||||||
|
|
||||||
|
private LocalDateTime startDate;
|
||||||
|
|
||||||
|
private List<String> correctWords;
|
||||||
|
|
||||||
|
private List<String> wrongWords;
|
||||||
|
|
||||||
|
private String msg;
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.bo.exam;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class WordMasteryDetail {
|
||||||
|
|
||||||
|
private String word;
|
||||||
|
|
||||||
|
private Integer reviewCount;
|
||||||
|
|
||||||
|
private Double memoryStrength;
|
||||||
|
|
||||||
|
private LocalDateTime update_time;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.bo.exam;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class ZoneStats {
|
||||||
|
|
||||||
|
private int gradeId;
|
||||||
|
private int totalCount;
|
||||||
|
private int correctCount;
|
||||||
|
private double accuracy;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.admin;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class CreateInvitationCodeReqVO {
|
||||||
|
|
||||||
|
// 限制人数
|
||||||
|
private Integer limit;
|
||||||
|
// 有效期
|
||||||
|
private Integer expire;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.admin;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class CreateInvitationCodeRspVO {
|
||||||
|
|
||||||
|
private String invitationCode;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -13,4 +13,8 @@ public class ExamWordsResultReqVO {
|
|||||||
|
|
||||||
private Integer page;
|
private Integer page;
|
||||||
private Integer size;
|
private Integer size;
|
||||||
|
|
||||||
|
private Integer classId;
|
||||||
|
private Integer gradeId;
|
||||||
|
private String studentName;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import java.time.LocalDateTime;
|
|||||||
@Data
|
@Data
|
||||||
@Builder
|
@Builder
|
||||||
public class ExamWordsResultRspVO {
|
public class ExamWordsResultRspVO {
|
||||||
|
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
private String ansSheetPath;
|
private String ansSheetPath;
|
||||||
@@ -20,6 +21,10 @@ public class ExamWordsResultRspVO {
|
|||||||
|
|
||||||
private Integer examWordsId;
|
private Integer examWordsId;
|
||||||
|
|
||||||
|
private String studentName;
|
||||||
|
|
||||||
|
private String examWordsTitle;
|
||||||
|
|
||||||
private Integer correctWordCount;
|
private Integer correctWordCount;
|
||||||
|
|
||||||
private Integer wrongWordCount;
|
private Integer wrongWordCount;
|
||||||
@@ -28,5 +33,5 @@ public class ExamWordsResultRspVO {
|
|||||||
|
|
||||||
private LocalDateTime startDate;
|
private LocalDateTime startDate;
|
||||||
|
|
||||||
private String errorMsg;
|
private String msg;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.exam;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindStudentExamWordsResultListRspVO {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private Integer studentId;
|
||||||
|
|
||||||
|
private Integer examWordsId;
|
||||||
|
|
||||||
|
private Integer correctWordCount;
|
||||||
|
|
||||||
|
private Integer wrongWordCount;
|
||||||
|
|
||||||
|
private Double accuracy;
|
||||||
|
|
||||||
|
private LocalDateTime startDate;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.exam;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindStudentExamWordsResultReqVO {
|
||||||
|
|
||||||
|
private Integer studentId;
|
||||||
|
}
|
||||||
@@ -14,7 +14,6 @@ import java.util.List;
|
|||||||
@Builder
|
@Builder
|
||||||
public class GenerateExamWordsReqVO {
|
public class GenerateExamWordsReqVO {
|
||||||
|
|
||||||
private Integer gradeId;
|
private Integer type;
|
||||||
private Integer level;
|
private Integer studentId;
|
||||||
private List<Integer> studentIds;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.login;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class LoginReqVO {
|
||||||
|
|
||||||
|
private String phone;
|
||||||
|
private String name;
|
||||||
|
private String password;
|
||||||
|
private String code;
|
||||||
|
private String invitationCode;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.login;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class VerificationCodeReqVO {
|
||||||
|
|
||||||
|
private String phone;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@Data
|
||||||
|
public class AddLessonPlanReqVO {
|
||||||
|
|
||||||
|
private Integer studentId;
|
||||||
|
private Integer unitId;
|
||||||
|
private Integer wordSize;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class DownLoadLessonPlanReqVO {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindIsGeneratePlanReqVO {
|
||||||
|
|
||||||
|
private Integer studentId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindPlanStudentListRspVO {
|
||||||
|
|
||||||
|
List<LessonPlanItem> lessonPlanItems;
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindPlanStudentReqVO {
|
||||||
|
private Integer studentId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindStudentPlanHistoryListRspVO {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private Integer studentId;
|
||||||
|
|
||||||
|
private Integer planId;
|
||||||
|
|
||||||
|
private LocalDateTime startTime;
|
||||||
|
|
||||||
|
private BigDecimal masteryRat;
|
||||||
|
|
||||||
|
private Integer totalCount;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindStudentPlanHistoryReqVO {
|
||||||
|
|
||||||
|
private Integer studentId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindStudentPlansReqVO {
|
||||||
|
|
||||||
|
String name;
|
||||||
|
Integer page;
|
||||||
|
Integer size;
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindStudentPlansRspVO {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
private String name;
|
||||||
|
private Integer classId;
|
||||||
|
private String className;
|
||||||
|
private Integer gradeId;
|
||||||
|
private String gradeName;
|
||||||
|
|
||||||
|
List<LessonPlanItem> plans;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindWordTTSVoiceReqVO {
|
||||||
|
|
||||||
|
String text;
|
||||||
|
String voice;
|
||||||
|
String format;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindWordVoiceReqVO {
|
||||||
|
|
||||||
|
private Integer planId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindWordVoiceRspVO {
|
||||||
|
|
||||||
|
private List<String> words;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@Data
|
||||||
|
public class FinishStudentPlanReqVO {
|
||||||
|
|
||||||
|
private Integer studentId;
|
||||||
|
private Integer planId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.plan;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class LessonPlanItem {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
private Integer isFinished;
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.yinlihupo.enlish.service.model.vo.student;
|
package com.yinlihupo.enlish.service.model.vo.student;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
@@ -16,5 +17,6 @@ public class AddStudentReqVO {
|
|||||||
private String name;
|
private String name;
|
||||||
private Integer classId;
|
private Integer classId;
|
||||||
private Integer gradeId;
|
private Integer gradeId;
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||||
private LocalDateTime createTime;
|
private LocalDateTime createTime;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.student;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class AnalyzeStudentStudyReqVO {
|
||||||
|
|
||||||
|
private Integer studentId;
|
||||||
|
}
|
||||||
@@ -15,4 +15,5 @@ public class FindStudentDetailRspVO {
|
|||||||
private String name;
|
private String name;
|
||||||
private String className;
|
private String className;
|
||||||
private String gradeName;
|
private String gradeName;
|
||||||
|
private String actualGrade;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.student;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindStudentMasteryDetailReqVO {
|
||||||
|
|
||||||
|
private Integer studentId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.student;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindStudentMasteryDetailRspVO {
|
||||||
|
private String word;
|
||||||
|
|
||||||
|
private Integer reviewCount;
|
||||||
|
|
||||||
|
private Double memoryStrength;
|
||||||
|
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
}
|
||||||
@@ -15,4 +15,6 @@ public class StudentItemRspVO {
|
|||||||
private String name;
|
private String name;
|
||||||
private Integer classId;
|
private Integer classId;
|
||||||
private Integer gradeId;
|
private Integer gradeId;
|
||||||
|
private String className;
|
||||||
|
private String gradeName;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.unit;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class AddUnitReqVO {
|
||||||
|
|
||||||
|
private String title;
|
||||||
|
private Integer gradeId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.unit;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class DeleteUnitReqVO {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.unit;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindUnitListReqVO {
|
||||||
|
|
||||||
|
private Integer page;
|
||||||
|
private Integer size;
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.unit;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindUnitListRspVO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主键
|
||||||
|
*/
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 年级/单元
|
||||||
|
*/
|
||||||
|
private String title;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 版本
|
||||||
|
*/
|
||||||
|
private String version;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private LocalDateTime createAt;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.user;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class CreateUserReqVO {
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
private String phone;
|
||||||
|
private String password;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.user;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindUserInfoRspVO {
|
||||||
|
|
||||||
|
private Long id;
|
||||||
|
private String name;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.user;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindUserListRepVO {
|
||||||
|
|
||||||
|
private Integer page;
|
||||||
|
private Integer pageSize;
|
||||||
|
private String name;
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.user;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindUserListRspVO {
|
||||||
|
private Long id;
|
||||||
|
private String name;
|
||||||
|
private String phone;
|
||||||
|
private String roleName;
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.user;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@Data
|
||||||
|
public class UpdateUserInfoReqVO {
|
||||||
|
|
||||||
|
private String newPassword;
|
||||||
|
private String name;
|
||||||
|
private String phone;
|
||||||
|
private String code;
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.vocabulary;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
public class FindStudentWordDetailReqVO {
|
||||||
|
|
||||||
|
private Integer id;
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.yinlihupo.enlish.service.model.vo.vocabulary;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@Builder
|
||||||
|
@Data
|
||||||
|
public class FindStudentWordDetailRspVO {
|
||||||
|
/**
|
||||||
|
* 已掌握单词数
|
||||||
|
*/
|
||||||
|
private Integer masteredWordCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 未掌握单词数
|
||||||
|
*/
|
||||||
|
private Integer unmasteredWordCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 待审查单词数(推荐使用,简洁通用)
|
||||||
|
*/
|
||||||
|
private Integer pendingReviewWordCount;
|
||||||
|
}
|
||||||
@@ -2,15 +2,20 @@ package com.yinlihupo.enlish.service.service;
|
|||||||
|
|
||||||
import com.yinlihupo.enlish.service.domain.dataobject.ExamWordsJudgeResultDO;
|
import com.yinlihupo.enlish.service.domain.dataobject.ExamWordsJudgeResultDO;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface ExamWordsJudgeService {
|
public interface ExamWordsJudgeService {
|
||||||
|
|
||||||
void judgeExamWords(int count);
|
void judgeExamWords(int count);
|
||||||
|
|
||||||
List<ExamWordsJudgeResultDO> getExamWordsJudgeResult(Integer page, Integer pageSize);
|
List<ExamWordsJudgeResultDO> getExamWordsJudgeResult(Integer page, Integer pageSize, Integer classId, Integer gradeId, String studentName);
|
||||||
|
|
||||||
Integer getExamWordsJudgeResultCount();
|
Integer getExamWordsJudgeResultCount();
|
||||||
|
|
||||||
|
Integer getExamUnfinishedCount();
|
||||||
|
|
||||||
ExamWordsJudgeResultDO getExamWordsJudgeResultDOById(Integer id);
|
ExamWordsJudgeResultDO getExamWordsJudgeResultDOById(Integer id);
|
||||||
|
|
||||||
|
List<ExamWordsJudgeResultDO> getStudentExamWordsResultList(Integer studentId);
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user