From 781b5fea46cd55220b5ffca17aa6bb1b83551410 Mon Sep 17 00:00:00 2001
From: 44323 <443237572@qq.com>
Date: 星期二, 21 五月 2024 08:59:55 +0800
Subject: [PATCH] 代码提交

---
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserShareServiceImpl.java                   |   23 +
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TSysSetController.java               |   26 +
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java                |    8 
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TFeedbackController.java             |   17 
 ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/SubjectVO.java                                     |    2 
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TFeedback.java                           |    2 
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUserController.java                 |    4 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStory.java                                        |   13 
 ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUseGuideMapper.xml |    3 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserShare.java                                    |   34 +
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUserParent.java                          |   52 ++
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TStudyController.java                |    6 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserShareMapper.java                              |   17 
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java                    |    7 
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipSetVO.java                                |    6 
 ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/feignClient/ManagementClient.java           |   13 
 ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/SubjectDTO.java                                   |    2 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java                            |   11 
 ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/query/UseGuideQuery.java                    |   17 
 ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStoryMapper.xml                                        |    2 
 ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserShareMapper.xml                                    |    7 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StoryDTO.java                                         |    2 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/SubjectDTO.java                                       |    2 
 ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/StoryDTO.java                                     |    2 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserShareService.java                           |   17 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/config/DataUpdateHandlerConfig.java                       |    6 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStoryController.java                          |    3 
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/OssController.java                   |   78 +++
 ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/model/TUseGuide.java                        |  108 +++++
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUseGuideMapper.java                     |    2 
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java                     |    9 
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/query/UseGuideQuery.java                        |   17 
 ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/model/TFeedback.java                        |  118 +++++
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUseGuideService.java                  |    2 
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TSubjectController.java                        |    3 
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java              |   89 ++++
 ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TUserShare.java                                |   36 +
 ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java                           |  273 +++++++++---
 ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/factory/TManagementFallbackFactory.java     |   18 
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/utils/ObsUploadUtil.java                        |   78 +++
 ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TUseGuide.java                           |   15 
 41 files changed, 1,017 insertions(+), 133 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/factory/TManagementFallbackFactory.java b/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/factory/TManagementFallbackFactory.java
index 9c592e4..82dc9c2 100644
--- a/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/factory/TManagementFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/factory/TManagementFallbackFactory.java
@@ -1,10 +1,12 @@
 package com.ruoyi.management.api.factory;
 
 import com.ruoyi.common.core.domain.R;
-import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.management.api.feignClient.ManagementClient;
+import com.ruoyi.management.api.model.TFeedback;
+import com.ruoyi.management.api.model.TUseGuide;
 import com.ruoyi.management.api.model.TVipSet;
+import com.ruoyi.management.api.query.UseGuideQuery;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cloud.openfeign.FallbackFactory;
@@ -28,12 +30,22 @@
         return new ManagementClient() {
             @Override
             public R getPage1() {
-                return R.fail("获取注意事项失败"+cause.getMessage());
+                return R.fail("家长端获取注意事项失败"+cause.getMessage());
             }
 
             @Override
             public R<List<TVipSet>> getVipSet1() {
-                return R.fail("获取会员规格配置和说明失败"+cause.getMessage());
+                return R.fail("家长端获取会员规格配置和说明失败"+cause.getMessage());
+            }
+
+            @Override
+            public R<PageInfo<TUseGuide>> useGuide1(UseGuideQuery query) {
+                return R.fail("家长端获取使用指南失败"+cause.getMessage());
+            }
+
+            @Override
+            public R addFeedBack(TFeedback dto) {
+                return R.fail("家长端发布意见反馈失败"+cause.getMessage());
             }
         };
     }
diff --git a/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/feignClient/ManagementClient.java b/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/feignClient/ManagementClient.java
index 9a5400d..16601be 100644
--- a/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/feignClient/ManagementClient.java
+++ b/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/feignClient/ManagementClient.java
@@ -2,14 +2,17 @@
 
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.common.core.domain.R;
-import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.management.api.factory.TManagementFallbackFactory;
+import com.ruoyi.management.api.model.TFeedback;
 import com.ruoyi.management.api.model.TPage;
+import com.ruoyi.management.api.model.TUseGuide;
 import com.ruoyi.management.api.model.TVipSet;
+import com.ruoyi.management.api.query.UseGuideQuery;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import java.util.List;
 
@@ -21,4 +24,10 @@
     @PostMapping("/tUser/getVipSet1")
     R<List<TVipSet>> getVipSet1();
 
+    @PostMapping("/tSysSet/useGuide1")
+    R<PageInfo<TUseGuide>> useGuide1(@RequestBody UseGuideQuery query);
+
+    @PostMapping("/tFeedback/addFeedBack")
+    R addFeedBack(@RequestBody TFeedback dto);
+
 }
diff --git a/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/model/TFeedback.java b/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/model/TFeedback.java
new file mode 100644
index 0000000..678a6dd
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/model/TFeedback.java
@@ -0,0 +1,118 @@
+package com.ruoyi.management.api.model;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.web.domain.BaseModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户反馈
+ * </p>
+ *
+ * @author 无关风月
+ * @since 2024-04-26
+ */
+@Data
+@TableName("t_feedback")
+public class TFeedback extends BaseModel {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(value = "用户id")
+    private Integer userId;
+    /**
+     * 图片
+     */
+    @ApiModelProperty(value = "图片 多张逗号隔开")
+    private String img;
+    /**
+     * 内容
+     */
+    @ApiModelProperty(value = "内容")
+    private String content;
+    /**
+     * 状态1未处理 2已处理
+     */
+    @ApiModelProperty(value = "状态1未处理2已处理")
+    private Integer state;
+    /**
+     * 添加时间
+     */
+    @ApiModelProperty(value = "插入时间")
+    private Date insertTime;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getImg() {
+        return img;
+    }
+
+    public void setImg(String img) {
+        this.img = img;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getState() {
+        return state;
+    }
+
+    public void setState(Integer state) {
+        this.state = state;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    @Override
+    public String toString() {
+        return "TFeedback{" +
+        ", id=" + id +
+        ", userId=" + userId +
+        ", img=" + img +
+        ", content=" + content +
+        ", state=" + state +
+        ", insertTime=" + insertTime +
+        "}";
+    }
+}
diff --git a/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/model/TUseGuide.java b/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/model/TUseGuide.java
new file mode 100644
index 0000000..e793774
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/model/TUseGuide.java
@@ -0,0 +1,108 @@
+package com.ruoyi.management.api.model;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.web.domain.BaseModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 使用指南
+ * </p>
+ *
+ * @author 无关风月
+ * @since 2024-04-26
+ */
+@Data
+@TableName("t_use_guide")
+public class TUseGuide extends BaseModel {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 标题
+     */
+    @ApiModelProperty(value = "标题")
+    private String title;
+    /**
+     * 排序 数字越大权重越大
+     */
+    @ApiModelProperty(value = "排序")
+    private String sort;
+
+    /**
+     * 答案
+     */
+    @ApiModelProperty(value = "答案--查看详情使用该字段")
+    private String answer;
+    /**
+     * 插入时间
+     */
+    @ApiModelProperty(value = "插入时间")
+    private Date insertTime;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getSort() {
+        return sort;
+    }
+
+    public void setSort(String sort) {
+        this.sort = sort;
+    }
+
+
+
+    public String getAnswer() {
+        return answer;
+    }
+
+    public void setAnswer(String answer) {
+        this.answer = answer;
+    }
+
+    public Date getInsertTime() {
+        return insertTime;
+    }
+
+    public void setInsertTime(Date insertTime) {
+        this.insertTime = insertTime;
+    }
+
+    @Override
+    public String toString() {
+        return "TUseGuide{" +
+        ", id=" + id +
+        ", title=" + title +
+        ", sort=" + sort +
+
+        ", answer=" + answer +
+        ", insertTime=" + insertTime +
+        "}";
+    }
+}
diff --git a/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/query/UseGuideQuery.java b/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/query/UseGuideQuery.java
new file mode 100644
index 0000000..63c2844
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/query/UseGuideQuery.java
@@ -0,0 +1,17 @@
+package com.ruoyi.management.api.query;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+@ApiModel
+@Data
+public class UseGuideQuery {
+    @ApiModelProperty(value = "标题")
+    private String title;
+    @ApiModelProperty(value = "页码,首页1", required = true)
+    private Integer pageNumber;
+    @ApiModelProperty(value = "页条数", required = true)
+    private Integer pageSize;
+}
\ No newline at end of file
diff --git a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TUserShare.java b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TUserShare.java
new file mode 100644
index 0000000..4cbc1a8
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TUserShare.java
@@ -0,0 +1,36 @@
+package com.ruoyi.study.api.domain;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.web.domain.BaseModel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户表
+ * </p>
+ *
+ * @author 无关风月
+ * @since 2024-04-26
+ */
+@Data
+@TableName("t_user_share")
+public class TUserShare extends BaseModel {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 用户id
+     */
+    private Integer userId;
+    /**
+     * 分享时 获得积分
+     */
+    private Integer integral;
+
+}
diff --git a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/StoryDTO.java b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/StoryDTO.java
index 638d8c7..f01777f 100644
--- a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/StoryDTO.java
+++ b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/StoryDTO.java
@@ -19,7 +19,7 @@
     @ApiModelProperty(value = "图片",required = true)
     private String img;
     @ApiModelProperty(value = "正确语音",required = true)
-    private String right;
+    private String correct;
     @ApiModelProperty(value = "错误语音 多个逗号拼接")
     private String error;
 
diff --git a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/SubjectDTO.java b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/SubjectDTO.java
index c7f1322..183d190 100644
--- a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/SubjectDTO.java
+++ b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/dto/SubjectDTO.java
@@ -19,7 +19,7 @@
     @ApiModelProperty(value = "图片",required = true)
     private String img;
     @ApiModelProperty(value = "正确语音",required = true)
-    private String right;
+    private String correct;
     @ApiModelProperty(value = "错误语音 多个逗号拼接")
     private String error;
 
diff --git a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/SubjectVO.java b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/SubjectVO.java
index 180d6c8..0baa4c7 100644
--- a/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/SubjectVO.java
+++ b/ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/vo/SubjectVO.java
@@ -7,6 +7,8 @@
 @Data
 @ApiModel("故事/题目管理列表查询返回VO")
 public class SubjectVO {
+    @ApiModelProperty(value = "id")
+    private Integer id;
     @ApiModelProperty(value = "题目名称")
     private String name;
     @ApiModelProperty(value = "英文释义")
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUserParent.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUserParent.java
new file mode 100644
index 0000000..da08de9
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUserParent.java
@@ -0,0 +1,52 @@
+package com.ruoyi.system.api.model;
+
+import com.ruoyi.system.api.domain.SysUser;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Set;
+
+/**
+ * 用户信息 家长端 学习端使用
+ *
+ * @author ruoyi
+ */
+@Data
+public class LoginUserParent implements Serializable
+{
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 用户唯一标识
+     */
+    private String token;
+    /**
+     * 用户姓名
+     */
+    private String name;
+
+    /**
+     * 用户名id
+     */
+    private Integer userid;
+
+    /**
+     * 用户名
+     */
+    private String phone;
+    /**
+     * 登录时间
+     */
+    private Long loginTime;
+
+    /**
+     * 过期时间
+     */
+    private Long expireTime;
+
+    /**
+     * 登录IP地址
+     */
+    private String ipaddr;
+
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java
index c122e52..80a3aeb 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java
@@ -36,6 +36,14 @@
      * 用户标识
      */
     public static final String USER_KEY = "user_key";
+    /**
+     * 家长端登录用户标识
+     */
+    public static final String USER_PARENT_KEY = "user_parent_key";
+    /**
+     * 学习端登录用户标识 -- 做单点登录
+     */
+    public static final String USER_STUDY_KEY = "user_study_key";
 
     /**
      * 登录用户
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java
index d984892..e0e99f4 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/JwtUtils.java
@@ -51,6 +51,17 @@
         Claims claims = parseToken(token);
         return getValue(claims, SecurityConstants.USER_KEY);
     }
+    /**
+     * 家长端 学习端根据令牌获取用户标识
+     *
+     * @param token 令牌
+     * @return 用户ID
+     */
+    public static String getUserKey1(String token)
+    {
+        Claims claims = parseToken(token);
+        return getValue(claims, SecurityConstants.USER_PARENT_KEY);
+    }
 
     /**
      * 根据令牌获取用户标识
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
index fa04637..9813724 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
@@ -53,6 +53,13 @@
     {
         tokenService.delLoginUser(token);
     }
+    /**
+     * 家长端会话注销,根据指定Token
+     */
+    public void logoutByToken1(String token)
+    {
+        tokenService.delLoginUser1(token);
+    }
 
     /**
      * 检验用户是否已经登录,如未登录,则抛出异常
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java
index 8b0d86c..3d070e5 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java
@@ -33,6 +33,15 @@
     {
         authLogic.logoutByToken(token);
     }
+    /**
+     * 家长端会话注销,根据指定Token
+     *
+     * @param token 指定token
+     */
+    public static void logoutByToken1(String token)
+    {
+        authLogic.logoutByToken1(token);
+    }
 
     /**
      * 检验当前会话是否已经登录,如未登录,则抛出异常
diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
index 139ee8b..a5af603 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -4,6 +4,8 @@
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import javax.servlet.http.HttpServletRequest;
+
+import com.ruoyi.system.api.model.LoginUserParent;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import com.ruoyi.common.core.constant.CacheConstants;
@@ -64,7 +66,25 @@
         rspMap.put("expires_in", expireTime);
         return rspMap;
     }
-
+    public Map<String, Object> createToken1(LoginUserParent loginUser)
+    {
+        String token = IdUtils.fastUUID();
+        Integer userId = loginUser.getUserid();
+        String name = loginUser.getName();
+        loginUser.setToken(token);
+        loginUser.setIpaddr(IpUtils.getIpAddr());
+        refreshToken1(loginUser);
+        // Jwt存储信息
+        Map<String, Object> claimsMap = new HashMap<String, Object>();
+        claimsMap.put(SecurityConstants.USER_PARENT_KEY, token);
+        claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId);
+        claimsMap.put(SecurityConstants.DETAILS_USERNAME, name);
+        // 接口返回信息
+        Map<String, Object> rspMap = new HashMap<String, Object>();
+        rspMap.put("access_token", JwtUtils.createToken(claimsMap));
+        rspMap.put("expires_in", expireTime);
+        return rspMap;
+    }
     /**
      * 获取用户身份信息
      *
@@ -85,6 +105,27 @@
         // 获取请求携带的令牌
         String token = SecurityUtils.getToken(request);
         return getLoginUser(token);
+    }
+    /**
+     * 家长端/学习端获取用户身份信息
+     *
+     * @return 用户信息
+     */
+    public LoginUserParent getLoginUser1()
+    {
+        return getLoginUser1(ServletUtils.getRequest());
+    }
+
+    /**
+     * 获取用户身份信息
+     *
+     * @return 用户信息
+     */
+    public LoginUserParent getLoginUser1(HttpServletRequest request)
+    {
+        // 获取请求携带的令牌
+        String token = SecurityUtils.getToken(request);
+        return getLoginUser1(token);
     }
 
     /**
@@ -109,6 +150,29 @@
         }
         return user;
     }
+    /**
+     * 家长端 学习端 获取用户身份信息
+     *
+     * @return 用户信息
+     */
+    public LoginUserParent getLoginUser1(String token)
+    {
+        LoginUserParent user = null;
+        try
+        {
+            if (StringUtils.isNotEmpty(token))
+            {
+                String userkey = JwtUtils.getUserKey1(token);
+                user = redisService.getCacheObject(getTokenKey(userkey));
+                return user;
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return user;
+    }
 
     /**
      * 设置用户身份信息
@@ -129,6 +193,17 @@
         if (StringUtils.isNotEmpty(token))
         {
             String userkey = JwtUtils.getUserKey(token);
+            redisService.deleteObject(getTokenKey(userkey));
+        }
+    }
+    /**
+     * 家长端删除用户缓存信息
+     */
+    public void delLoginUser1(String token)
+    {
+        if (StringUtils.isNotEmpty(token))
+        {
+            String userkey = JwtUtils.getUserKey1(token);
             redisService.deleteObject(getTokenKey(userkey));
         }
     }
@@ -162,6 +237,18 @@
         redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
     }
 
+    /**
+     * 家长端用户登录
+     */
+    public void refreshToken1(LoginUserParent dto)
+    {
+        dto.setLoginTime(System.currentTimeMillis());
+        dto.setExpireTime(dto.getLoginTime() + expireTime * MILLIS_MINUTE);
+        // 根据uuid将loginUser缓存
+        String userKey = getTokenKey(dto.getToken());
+        redisService.setCacheObject(userKey, dto, expireTime, TimeUnit.MINUTES);
+    }
+
     private String getTokenKey(String token)
     {
         return ACCESS_TOKEN + token;
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/OssController.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/OssController.java
new file mode 100644
index 0000000..4560bfe
--- /dev/null
+++ b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/OssController.java
@@ -0,0 +1,78 @@
+package com.ruoyi.management.controller;
+
+
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.ruoyi.management.utils.ObsUploadUtil;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+@RestController
+@RequestMapping("/base/oss")
+public class OssController {
+    private static final String endpoint = "obs.cn-north-4.myhuaweicloud.com";
+    private static final String accessKeyId = "DRJFJRVQ9KVLQUSJUROI";
+    private static final String accessKeySecret = "3zpPkULh0a8CTTYjKL4f7szQZECkvVol4SwNab0f";
+    private static final String bucketName = "jkjianshen";
+    @PostMapping("/upload")
+    @ApiOperation(value = "文件上传",tags = "文件上传")
+    public String upload(@RequestParam("file") MultipartFile file) throws IOException {
+        String s = ObsUploadUtil.obsUpload(file);
+        return s;
+    }
+//    @PostMapping("/uploadVideo")
+//    @ApiOperation(value = "视频上传",tags = "文件上传")
+//    public String uploadVideo(@RequestParam("file") MultipartFile file) throws Exception {
+//        // 获取文件名
+//        String fileName = file.getOriginalFilename();
+//        // 构建目标文件路径
+//        String filePath = "/usr/local/temp" + fileName;
+////        String filePath = "C:/temp/" + fileName;
+//        // 创建目标文件对象
+//        File targetFile = new File(filePath);
+//        // 将 MultipartFile 内容写入目标文件
+//        try (FileOutputStream fos = new FileOutputStream(targetFile)) {
+//            fos.write(file.getBytes());
+//        }
+//        String s = UploadVideoUtil.endUpload(targetFile.toString(), UUIDUtil.getRandomCode(5)+fileName);
+//        // 创建要删除的文件对象
+//        File fileToDelete = new File(targetFile.toString());
+//        // 检查文件是否存在,并删除文件
+//        if (fileToDelete.exists()) {
+//            fileToDelete.delete();
+//        }
+//        return s;
+//    }
+
+//    @PostMapping("/upload")
+//    @ApiOperation(value = "文件上传",tags = "文件上传")
+//    public ResponseEntity<String> upload(@RequestParam("file") MultipartFile file) throws IOException {
+//        // 创建 OSSClient 实例
+//        OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
+//
+//
+//        // 创建 PutObjectRequest 对象
+//        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, file.getOriginalFilename(), file.getInputStream());
+//
+//        ObjectMetadata metadata = new ObjectMetadata();
+//        // 取消文件缓存,文件每次都会从OSS服务器获取
+//        metadata.setHeader("Cache-Control", "no-cache");
+//        metadata.setHeader("Expires", "0");
+//
+//
+//        // 上传文件
+//        PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);
+//
+//        // 关闭 OSSClient 实例
+//        ossClient.shutdown();
+//
+//        String fileUrl = "https://" + bucketName + "." + endpoint + "/" + file.getOriginalFilename();
+//        return ResponseEntity.ok(fileUrl);
+//    }
+
+
+}
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TFeedbackController.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TFeedbackController.java
index 8af2110..73e0bbe 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TFeedbackController.java
+++ b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TFeedbackController.java
@@ -1,21 +1,24 @@
 package com.ruoyi.management.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.management.domain.TFeedback;
+import com.ruoyi.management.domain.TUseGuide;
 import com.ruoyi.management.dto.FeedbackQuery;
+import com.ruoyi.management.query.UseGuideQuery;
 import com.ruoyi.management.service.ITFeedbackService;
 import com.ruoyi.management.vo.FeedbackVO;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -32,6 +35,12 @@
     @Autowired
     private ITFeedbackService feedbackService;
 
+    @PostMapping("/addFeedBack")
+    @ApiOperation(value = "反馈", tags = {"家长端-意见反馈"})
+    public R addFeedBack(@RequestBody TFeedback dto) {
+        feedbackService.save(dto);
+        return R.ok();
+    }
 
     @ResponseBody
     @PostMapping("/listAll")
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TStudyController.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TStudyController.java
index 0908c27..7032f98 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TStudyController.java
+++ b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TStudyController.java
@@ -30,7 +30,7 @@
  * @since 2024-04-26
  */
 @Controller
-@RequestMapping("/management/tStudy")
+@RequestMapping("/tStudy")
 public class TStudyController {
     @Autowired
     private StudyClient studyClient;
@@ -43,9 +43,9 @@
         return AjaxResult.success(data);
     }
     @ApiOperation(value = "选择故事列表查询", tags = {"后台-学习"})
-    @PostMapping(value = "/storyist1")
+    @PostMapping(value = "/storyList1")
     @ResponseBody
-    public AjaxResult<PageInfo<TStory>> storyist(ChoiceStory dto) {
+    public AjaxResult<PageInfo<TStory>> storyList(ChoiceStory dto) {
         R<PageInfo<TStory>> pageInfoR = studyClient.storyList(dto);
         PageInfo<TStory> data = pageInfoR.getData();
         return AjaxResult.success(data);
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TSysSetController.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TSysSetController.java
index 6187c6c..821b6c1 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TSysSetController.java
+++ b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TSysSetController.java
@@ -11,6 +11,7 @@
 import com.ruoyi.management.domain.TUseGuide;
 import com.ruoyi.management.dto.AggrementDTO;
 import com.ruoyi.management.dto.UseGuidDTO;
+import com.ruoyi.management.query.UseGuideQuery;
 import com.ruoyi.management.service.ITPageService;
 import com.ruoyi.management.service.ITProtocolService;
 import com.ruoyi.management.service.ITSysSetService;
@@ -20,7 +21,6 @@
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -118,6 +118,23 @@
         res.setTotal(useGuides.size());
         return AjaxResult.success(res);
     }
+    @PostMapping("/useGuide1")
+    @ApiOperation(value = "列表查询", tags = {"家长端-使用指南"})
+    public R<PageInfo<TUseGuide>> useGuide1(@RequestBody UseGuideQuery query) {
+        QueryWrapper<TUseGuide> wrapper = new QueryWrapper<>();
+        if (StringUtils.hasLength(query.getTitle())){
+            wrapper.like("title",query.getTitle());
+        }
+        List<String> strings = new ArrayList<>();
+        strings.add("insertTime");
+        wrapper.orderByDesc(strings);
+        PageInfo<TUseGuide> res = new PageInfo<>(query.getPageNumber(), query.getPageSize());
+        List<TUseGuide> useGuides = useGuideService.list(wrapper);
+        res.setRecords(useGuides);
+        res.setTotal(useGuides.size());
+        return R.ok(res);
+    }
+
     @PostMapping("/updateUseGuide")
     @ApiOperation(value = "使用指南-添加/编辑/查看详情", tags = {"使用指南"})
     public AjaxResult<TUseGuide> updateUseGuide(@RequestBody UseGuidDTO dto) {
@@ -126,7 +143,6 @@
                 TUseGuide useGuide = new TUseGuide();
                 useGuide.setTitle(dto.getTitle());
                 useGuide.setSort(dto.getSort());
-                useGuide.setIsDelete(0);
                 useGuide.setAnswer(dto.getAnswer());
                 useGuide.setInsertTime(new Date());
                 useGuideService.save(useGuide);
@@ -148,10 +164,8 @@
     @DeleteMapping("/delete{id}")
     @ApiOperation(value = "使用指南-删除", tags = {"使用指南"})
     public AjaxResult updateUseGuide(@PathVariable Integer id) {
-
-        TUseGuide useGuide2 = useGuideService.getById(id);
-        useGuide2.setIsDelete(1);
-        useGuideService.updateById(useGuide2);
+//        TUseGuide useGuide2 = useGuideService.getById(id);
+        useGuideService.removeById(id);
         return AjaxResult.success("删除成功");
     }
 }
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUserController.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUserController.java
index c12df85..3bf88bd 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUserController.java
+++ b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUserController.java
@@ -136,14 +136,12 @@
         return R.ok(list);
     }
     @PostMapping("/setVipSet")
-    @ApiOperation(value = "获取会员设置", tags = {"用户管理"})
+    @ApiOperation(value = "保存会员设置", tags = {"用户管理"})
     public AjaxResult setVipSet(@RequestBody VipSetVO vo) {
-        String info = vo.getInfo();
         List<TVipSet> list = vo.getList();
         // 删除原有数据 重新保存
         vipSetService.remove(new QueryWrapper<TVipSet>());
         for (TVipSet tVipSet : list) {
-            tVipSet.setInfo(info);
             vipSetService.save(tVipSet);
         }
         return AjaxResult.success("保存成功");
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TFeedback.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TFeedback.java
index b41a00e..3a2ca11 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TFeedback.java
+++ b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TFeedback.java
@@ -8,6 +8,7 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.ruoyi.common.core.web.domain.BaseModel;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 
 import java.io.Serializable;
 
@@ -19,6 +20,7 @@
  * @author 无关风月
  * @since 2024-04-26
  */
+@Data
 @TableName("t_feedback")
 public class TFeedback extends BaseModel {
 
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TUseGuide.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TUseGuide.java
index bda616c..88cf1a5 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TUseGuide.java
+++ b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TUseGuide.java
@@ -39,11 +39,7 @@
      */
     @ApiModelProperty(value = "排序")
     private String sort;
-    /**
-     * 是否删除0否1是
-     */
-    @ApiModelProperty(value = "是否删除 0否1是")
-    private Integer isDelete;
+
     /**
      * 答案
      */
@@ -80,13 +76,6 @@
         this.sort = sort;
     }
 
-    public Integer getIsDelete() {
-        return isDelete;
-    }
-
-    public void setIsDelete(Integer isDelete) {
-        this.isDelete = isDelete;
-    }
 
     public String getAnswer() {
         return answer;
@@ -110,7 +99,7 @@
         ", id=" + id +
         ", title=" + title +
         ", sort=" + sort +
-        ", isDelete=" + isDelete +
+
         ", answer=" + answer +
         ", insertTime=" + insertTime +
         "}";
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUseGuideMapper.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUseGuideMapper.java
index 6213eaa..95a419c 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUseGuideMapper.java
+++ b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUseGuideMapper.java
@@ -1,7 +1,7 @@
 package com.ruoyi.management.mapper;
 
-import com.ruoyi.management.domain.TUseGuide;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.management.domain.TUseGuide;
 
 /**
  * <p>
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/query/UseGuideQuery.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/query/UseGuideQuery.java
new file mode 100644
index 0000000..d278c60
--- /dev/null
+++ b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/query/UseGuideQuery.java
@@ -0,0 +1,17 @@
+package com.ruoyi.management.query;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+@ApiModel
+@Data
+public class UseGuideQuery {
+    @ApiModelProperty(value = "标题")
+    private String title;
+    @ApiModelProperty(value = "页码,首页1", required = true)
+    private Integer pageNumber;
+    @ApiModelProperty(value = "页条数", required = true)
+    private Integer pageSize;
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUseGuideService.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUseGuideService.java
index a841d2b..4cf2c8c 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUseGuideService.java
+++ b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUseGuideService.java
@@ -1,7 +1,7 @@
 package com.ruoyi.management.service;
 
-import com.ruoyi.management.domain.TUseGuide;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.management.domain.TUseGuide;
 
 /**
  * <p>
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/utils/ObsUploadUtil.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/utils/ObsUploadUtil.java
new file mode 100644
index 0000000..a9335f5
--- /dev/null
+++ b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/utils/ObsUploadUtil.java
@@ -0,0 +1,78 @@
+package com.ruoyi.management.utils;
+
+import com.obs.services.ObsClient;
+import com.obs.services.model.ObjectMetadata;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.UUID;
+
+public class ObsUploadUtil {
+
+	public static String endPoint = "obs.cn-north-4.myhuaweicloud.com";
+	public static String accessKeyId = "X3V6GPYUK1VQ03K0JG4G";
+	public static String accessKeySecret = "CustHR4B9XKdT7hGcEYEpV9UVUoc4pmUhnHckU9h";
+	public static String bucketName = "jkjianshen";
+	public static String oss_domain = "https://jkjianshen.obs.cn-north-4.myhuaweicloud.com/";
+	// 创建ObsClient实例
+	public static ObsClient obsClient = new ObsClient(accessKeyId, accessKeySecret, endPoint);
+
+	public static String obsUpload(MultipartFile file) throws IOException{
+		//CommonsMultipartFile file = (CommonsMultipartFile)multipartFile;
+		String fileName = "";
+		if(file!=null && !"".equals(file.getOriginalFilename()) && file.getOriginalFilename()!=null){
+			InputStream content = file.getInputStream();//获得指定文件的输入流
+			ObjectMetadata meta = new ObjectMetadata();// 创建上传Object的Metadata
+			meta.setContentLength(file.getSize());  // 必须设置ContentLength
+			String originalFilename = file.getOriginalFilename();
+			if (originalFilename.contains("apk")){
+				fileName = "bf2fe5c5499341e5bc0d56c0c7d5fb2e.apk";
+				System.err.println("apk");
+			}else{
+				fileName =  UUID.randomUUID().toString().replaceAll("-","") + originalFilename.subSequence(originalFilename.lastIndexOf("."), originalFilename.length());
+			}
+			obsClient.putObject(bucketName,"admin/"+fileName,content,meta);// 上传Object.
+			if(fileName != null && !"".equals(fileName)){
+				System.out.println(fileName);
+				fileName = oss_domain+"admin/"+fileName;
+			}
+		}
+		return fileName;
+	}
+
+	/**
+	 * 删除某个Object
+	 *
+	 * @param bucketUrl
+	 * @return
+	 */
+	public static boolean deleteObject(String bucketUrl) {
+		try {
+			bucketUrl=bucketUrl.replace(oss_domain+"web","");
+			// 删除Object.
+			obsClient.deleteObject(bucketName, bucketUrl);
+		} catch (Exception e) {
+			e.printStackTrace();
+			return false;
+		} finally {
+			//ossClient.shutdown();
+		}
+		return true;
+	}
+	
+//	 public static void createBucket(String bucketName)
+//     {
+//         //初始化 OSSClient
+////          ossClient = new OssClient(endPoint, accessKeyId, accessKeySecret);
+//
+//         // 新建一个Bucket
+//         Bucket bucket = ossClient.createBucket(bucketName);
+//         System.out.println(bucket.getName());
+//         System.out.println(bucket.getCreationDate());
+//     }
+//	 
+//	 public static void main(String[] args) {
+//		 OssUploadUtil.createBucket("ssfdfsd");
+//	}
+}
diff --git a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipSetVO.java b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipSetVO.java
index ff9046b..348c306 100644
--- a/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipSetVO.java
+++ b/ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipSetVO.java
@@ -17,11 +17,7 @@
  */
 @Data
 public class VipSetVO {
-    /**
-     * 会员说明
-     */
-    @ApiModelProperty(value = "会员说明")
-    private String info;
+
     @ApiModelProperty(value = "会员价格设置")
     private List<TVipSet> list;
 
diff --git a/ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUseGuideMapper.xml b/ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUseGuideMapper.xml
index 3bec438..de30e7e 100644
--- a/ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUseGuideMapper.xml
+++ b/ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUseGuideMapper.xml
@@ -7,14 +7,13 @@
         <id column="id" property="id" />
         <result column="title" property="title" />
         <result column="sort" property="sort" />
-        <result column="isDelete" property="isDelete" />
         <result column="answer" property="answer" />
         <result column="insertTime" property="insertTime" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, title, sort, isDelete, answer, insertTime
+        id, title, sort, isDelete, answer
     </sql>
 
 </mapper>
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/config/DataUpdateHandlerConfig.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/config/DataUpdateHandlerConfig.java
index 23e4d89..14f16cb 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/config/DataUpdateHandlerConfig.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/config/DataUpdateHandlerConfig.java
@@ -8,6 +8,8 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Configuration;
 
+import java.util.Date;
+
 /**
  * @author xiaochen
  * @ClassName DataUpdateInterceptor
@@ -34,7 +36,9 @@
     public void insertFill(MetaObject metaObject) {
         //  获取登录信息
         LoginUser loginUser = tokenService.getLoginUser();
-        String userName = loginUser.getUsername();
+        this.setFieldValByName("createTime", new Date(), metaObject);
+        this.setFieldValByName("updateTime", new Date(), metaObject);
+//        String userName = loginUser.getUsername();
 //        if (StringUtils.hasLength(userName)) {
 //            this.setFieldValByName("createBy", userName, metaObject);
 //            this.setFieldValByName("createTime", new Date(), metaObject);
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStoryController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStoryController.java
index 907ff62..2ba4946 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStoryController.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStoryController.java
@@ -121,6 +121,9 @@
         TStory byId = service.getById(id);
         byId.setState(state);
         service.updateById(byId);
+        if (state == 3){
+            service.removeById(byId);
+        }
         return R.ok("成功");
     }
     private R<Object> getObjectR(Integer id) {
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TSubjectController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TSubjectController.java
index a5d637e..32a9e8a 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TSubjectController.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TSubjectController.java
@@ -199,6 +199,9 @@
         TSubject byId = subjectService.getById(id);
         byId.setState(state);
         subjectService.updateById(byId);
+        if (state == 3){
+            subjectService.removeById(byId);
+        }
         return R.ok("编辑成功");
     }
 }
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
index cc0d7d8..8fd56b1 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TUserController.java
@@ -4,12 +4,19 @@
 import com.alipay.api.AlipayApiException;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.utils.JwtUtils;
 import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.PageInfo;
+import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.common.security.auth.AuthUtil;
 import com.ruoyi.common.security.service.TokenService;
+import com.ruoyi.common.security.utils.SecurityUtils;
 import com.ruoyi.management.api.feignClient.ManagementClient;
+import com.ruoyi.management.api.model.TFeedback;
 import com.ruoyi.management.api.model.TPage;
+import com.ruoyi.management.api.model.TUseGuide;
 import com.ruoyi.management.api.model.TVipSet;
+import com.ruoyi.management.api.query.UseGuideQuery;
 import com.ruoyi.study.domain.TUser;
 import com.ruoyi.study.domain.TVipOrder;
 import com.ruoyi.study.dto.AppUserQuery;
@@ -19,10 +26,17 @@
 import com.ruoyi.study.utils.PayMoneyUtil;
 import com.ruoyi.study.utils.UUIDUtil;
 import com.ruoyi.study.vo.*;
+import com.ruoyi.system.api.domain.SysRole;
+import com.ruoyi.system.api.domain.SysUser;
+import com.ruoyi.system.api.model.LoginUser;
+import com.ruoyi.system.api.model.LoginUserParent;
+import io.jsonwebtoken.Claims;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
@@ -50,16 +64,34 @@
     private IVipOrderService vipOrderService;
     @Autowired
     private ManagementClient managementClient;
+    @Autowired
+    private TokenService tokenService;
+
     @PostMapping("/vipInfo")
     @ApiOperation(value = "会员中心-获取会员说明、当前登录用户是否为会员、会员购买规格", tags = {"家长端-个人中心"})
     public AjaxResult<List<VipInfoVO>> vipInfo() {
+        if (tokenService.getLoginUser1() == null){
+            return AjaxResult.tokenError("登录失效",new Object());
+        }
         List<VipInfoVO> vipInfoVOS = new ArrayList<>();
         List<TVipSet> data = managementClient.getVipSet1().getData();
         for (TVipSet datum : data) {
             VipInfoVO vipInfoVO = new VipInfoVO();
             vipInfoVO.setInfo(datum.getInfo());
             vipInfoVO.setId(datum.getId());
-//            vipInfoVO.setIsVip();
+            Integer userid = tokenService.getLoginUser1().getUserid();
+            TUser byId = userService.getById(userid);
+            // 先判断vipEndTime
+            if (byId.getVipEndTime() == null){
+                vipInfoVO.setIsVip(0);
+            }else{
+                // 判断会员到期时间是否大于当前时间
+                if (byId.getVipEndTime().getTime() > new Date().getTime()){
+                    vipInfoVO.setIsVip(1);
+                }else{
+                    vipInfoVO.setIsVip(0);
+                }
+            }
             vipInfoVO.setTime(datum.getTime());
             vipInfoVO.setAmount(datum.getAmount());
         }
@@ -76,6 +108,10 @@
             @ApiImplicitParam(name = "id", value = "会员规格id", required = true),
     })
     public AjaxResult order(Integer payType,Integer id) throws Exception {
+        if (tokenService.getLoginUser1() == null){
+            return AjaxResult.tokenError("登录失效",new Object());
+        }
+        Integer userid = tokenService.getLoginUser1().getUserid();
         TVipOrder tVipOrder = new TVipOrder();
         List<TVipSet> data = managementClient.getVipSet1().getData();
         Integer time = 0;
@@ -86,10 +122,7 @@
             }
         }
         tVipOrder.setPayState(1);
-//        tVipOrder.setUserId();
-//        tVipOrder.setPayTime();
-//        tVipOrder.setBackTime();
-//        tVipOrder.setTime();
+        tVipOrder.setUserId(userid);
         tVipOrder.setPayType(payType);
         tVipOrder.setCount(time);
         switch (payType){
@@ -137,19 +170,40 @@
                 byId.setTransactionId(trade_no);
                 byId.setOutTradeNo(out_trade_no);
                 byId.setPayTime(new Date());
-                Calendar calendar = Calendar.getInstance();
-                calendar.setTime(new Date());
-                calendar.add(Calendar.MONTH, time);
-                Date dateAfterOneMonth = calendar.getTime();
-                byId.setTime(dateAfterOneMonth);
-                // 修改订单状态
-                vipOrderService.updateById(byId);
+
+
                 TUser byId1 = userService.getById(byId.getUserId());
                 if (byId1.getVipPayTime() == null){
                     // 是否是首次充值会员
                     byId1.setVipPayTime(new Date());
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(new Date());
+                    calendar.add(Calendar.MONTH, time);
+                    Date dateAfterOneMonth = calendar.getTime();
+                    byId.setTime(dateAfterOneMonth);
+                    byId1.setVipEndTime(dateAfterOneMonth);
+                }else{
+                    // 不是首次 判断vipEndTime 是否到期 如果没有 加指定月份时间 如果到期了 将会员到期时间从当前增加指定月份
+                    if (byId1.getVipEndTime().getTime() < new Date().getTime()){
+                        Calendar calendar = Calendar.getInstance();
+                        calendar.setTime(new Date());
+                        calendar.add(Calendar.MONTH, time);
+                        Date dateAfterOneMonth = calendar.getTime();
+                        byId.setTime(dateAfterOneMonth);
+                        byId1.setVipEndTime(dateAfterOneMonth);
+                    }else{
+                        Calendar calendar = Calendar.getInstance();
+                        calendar.setTime(byId1.getVipEndTime());
+                        calendar.add(Calendar.MONTH, time);
+                        Date dateAfterOneMonth = calendar.getTime();
+                        byId.setTime(dateAfterOneMonth);
+                        byId1.setVipEndTime(dateAfterOneMonth);
+                    }
                 }
-                byId1.setVipEndTime(dateAfterOneMonth);
+
+                // 修改订单状态
+                vipOrderService.updateById(byId);
+
                 // 修改用户会员续期信息
                 userService.updateById(byId1);
                 PrintWriter out = response.getWriter();
@@ -189,19 +243,38 @@
                 byId.setTransactionId(transaction_id);
                 byId.setOutTradeNo(out_trade_no);
                 byId.setPayTime(new Date());
-                Calendar calendar = Calendar.getInstance();
-                calendar.setTime(new Date());
-                calendar.add(Calendar.MONTH, time);
-                Date dateAfterOneMonth = calendar.getTime();
-                byId.setTime(dateAfterOneMonth);
-                // 修改订单状态
-                vipOrderService.updateById(byId);
+
+
                 TUser byId1 = userService.getById(byId.getUserId());
                 if (byId1.getVipPayTime() == null){
                     // 是否是首次充值会员
                     byId1.setVipPayTime(new Date());
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(new Date());
+                    calendar.add(Calendar.MONTH, time);
+                    Date dateAfterOneMonth = calendar.getTime();
+                    byId.setTime(dateAfterOneMonth);
+                    byId1.setVipEndTime(dateAfterOneMonth);
+                }else{
+                    // 不是首次 判断vipEndTime 是否到期 如果没有 加指定月份时间 如果到期了 将会员到期时间从当前增加指定月份
+                    if (byId1.getVipEndTime().getTime() < new Date().getTime()){
+                        Calendar calendar = Calendar.getInstance();
+                        calendar.setTime(new Date());
+                        calendar.add(Calendar.MONTH, time);
+                        Date dateAfterOneMonth = calendar.getTime();
+                        byId.setTime(dateAfterOneMonth);
+                        byId1.setVipEndTime(dateAfterOneMonth);
+                    }else{
+                        Calendar calendar = Calendar.getInstance();
+                        calendar.setTime(byId1.getVipEndTime());
+                        calendar.add(Calendar.MONTH, time);
+                        Date dateAfterOneMonth = calendar.getTime();
+                        byId.setTime(dateAfterOneMonth);
+                        byId1.setVipEndTime(dateAfterOneMonth);
+                    }
                 }
-                byId1.setVipEndTime(dateAfterOneMonth);
+                // 修改订单状态
+                vipOrderService.updateById(byId);
                 // 修改用户会员续期信息
                 userService.updateById(byId1);
                 PrintWriter out = response.getWriter();
@@ -215,66 +288,107 @@
     }
     @PostMapping("/getPage")
     @ApiOperation(value = "获取注意事项", tags = {"家长端-注意事项"})
-    public AjaxResult<TPage> getPage() {
+    public AjaxResult<String> getPage() {
         List<TPage> data = managementClient.getPage1().getData();
         for (TPage datum : data) {
             if (datum.getType() == 4){
-                return AjaxResult.success(datum);
+                return AjaxResult.success(datum.getImg());
             }
         }
         return AjaxResult.success();
     }
-    @Autowired
-    private TokenService tokenService;
-//    @Autowired
-//    private HWSendSms hwSendSms;
-//    @ResponseBody
-//    @PostMapping("/getSMSCode")
-//    @ApiOperation(value = "获取短信验证码", tags = {"家长端-登录注册"})
-//    @ApiImplicitParams({
-//            @ApiImplicitParam(value = "类型(1:登录,2:注册,3:修改密码,4:忘记密码,5:修改绑定手机号)", name = "type", dataType = "int", required = true),
-//            @ApiImplicitParam(value = "电话号码", name = "phone", dataType = "string", required = true)
-//    })
-//    public AjaxResult getSMSCode(Integer type, String phone) {
-//        if (ToolUtil.isEmpty(phone)) {
-//            return AjaxResult.paranErr("phone");
-//        }
-//        if (ToolUtil.isEmpty(type)) {
-//            return AjaxResult.paranErr("type");
-//        }
-//        try {
-//            if (type == 2) {
-//                AppUser tAppUser = appUserService.selectOne(new EntityWrapper<AppUser>()
-//                        .eq("phone", phone).ne("state", 3));
-//                if (null != tAppUser) {
-//                    return AjaxResult.error("账号已存在");
-//                }
-//            }
-//            if (type == 5) {
-//                AppUser tAppUser = appUserService.selectOne(new EntityWrapper<AppUser>()
-//                        .eq("phone", phone).ne("state", 3));
-//                if (null != tAppUser) {
-//                    return AjaxResult.error("账号已存在");
-//                }
-//            }
-//            String numberRandom = UUIDUtil.getNumberRandom(6);
-//            String templateCode = "";
-//            if (type == 1 || type == 2) {
-//                templateCode = "SMS_161275250";
-//            }
-//            if (type == 3 || type == 4) {
-//                templateCode = "SMS_160960014";
-//            }
-////            aLiSendSms.sendSms(phone, templateCode, "{\"code\":\"" + numberRandom + "\"}");
-//            hwSendSms.sendSms(numberRandom,phone);
-//            redisUtil.setStrValue(phone, numberRandom, 300);
-//            return AjaxResult.success();
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//            return ResultUtil.runErr();
-//        }
-//    }
+    @PostMapping("/useGuide")
+    @ApiOperation(value = "使用指南", tags = {"家长端-使用指南"})
+    public AjaxResult<PageInfo<TUseGuide>> useGuide(@RequestBody UseGuideQuery query) {
+        PageInfo<TUseGuide> data = managementClient.useGuide1(query).getData();
+        return AjaxResult.success(data);
+    }
+    @PostMapping("/feedBack")
+    @ApiOperation(value = "反馈", tags = {"家长端-意见反馈"})
+    public AjaxResult feedBack(@RequestBody TFeedback dto) {
+        if (tokenService.getLoginUser1() == null){
+            return AjaxResult.tokenError("登录失效",new Object());
+        }
+        LoginUserParent loginUser1 = tokenService.getLoginUser1();
+        dto.setUserId(loginUser1.getUserid());
+        managementClient.addFeedBack(dto);
+        return AjaxResult.success("反馈成功");
+    }
+    @PostMapping("/parentLogin")
+    @ApiOperation(value = "登录", tags = {"家长端-登录"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "手机号", name = "phone", dataType = "string", required = true),
+            @ApiImplicitParam(value = "验证码", name = "phoneCode", dataType = "string", required = true)
+    })
+    public AjaxResult login(String phone, String phoneCode)
+    {
+        TUser tUser1 = userService.getOne(new QueryWrapper<TUser>()
+                .ne("state", 3)
+                .eq("phone",phone));
+        if (tUser1 != null){
+            if (tUser1.getState() == 2){
+                return AjaxResult.error("登录失败,您的账号已被冻结!");
+            }
+        }else{
+            // todo 验证码校验
+            tUser1 = new TUser();
+            // 注册
+            tUser1.setName(phone);
+            tUser1.setAccount(phone);
+            tUser1.setState(1);
+            tUser1.setInsertTime(new Date());
+            tUser1.setCreateTime(new Date());
+            tUser1.setPhone(phone);
+            userService.save(tUser1);
+        }
+        LoginUserParent loginUserParent = new LoginUserParent();
+        loginUserParent.setName(tUser1.getName());
+        loginUserParent.setUserid(tUser1.getId());
+        loginUserParent.setPhone(tUser1.getPhone());
+        loginUserParent.setLoginTime(new Date().getTime());
+        HashMap<String, Object> map = new HashMap<>();
+        map.put("token",tokenService.createToken1(loginUserParent));
+        // 获取登录token
+        return AjaxResult.success(map);
+    }
 
+
+    @PostMapping("/deleteUser")
+    @ApiOperation(value = "注销当前帐号", tags = {"家长端-个人中心"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
+    })
+    public AjaxResult deleteUser() {
+        if (tokenService.getLoginUser1() == null){
+           return AjaxResult.tokenError("登录失效");
+        }
+        Integer userid = tokenService.getLoginUser1().getUserid();
+        TUser tUser = userService.getById(userid);
+
+        tUser.setState(3);
+        userService.updateById(tUser);
+
+        userService.removeById(tUser);
+        return AjaxResult.success("注销成功");
+    }
+    @PostMapping("/logout")
+    @ApiOperation(value = "退出登录", tags = {"家长端-个人中心"})
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "Authorization", value = "Bearer eyJhbGciOiJIUzUxMiJ....", required = true, paramType = "header"),
+    })
+    public AjaxResult logout(HttpServletRequest request) {
+        if (tokenService.getLoginUser1() == null){
+            return AjaxResult.tokenError("登录失效");
+        }
+        String token = SecurityUtils.getToken(request);
+        if (com.ruoyi.common.core.utils.StringUtils.isNotEmpty(token))
+        {
+            // 删除用户缓存记录
+            AuthUtil.logoutByToken1(token);
+        }
+        // todo 清除token
+        return AjaxResult.success("退出登录成功");
+    }
     @PostMapping("/updateUserInfo")
     @ApiOperation(value = "修改个人资料", tags = {"家长端-个人中心"})
     @ApiImplicitParams({
@@ -284,9 +398,13 @@
             @ApiImplicitParam(name = "headImg", value = "头像 改什么就只传什么"),
     })
     public AjaxResult updateUserInfo(String name, String phone,String headImg) {
+        if (tokenService.getLoginUser1() == null){
+            return AjaxResult.tokenError("登录失效",new Object());
+        }
         // todo 获取用户id
-        Long userid = tokenService.getLoginUser().getUserid();
+        Integer userid = tokenService.getLoginUser1().getUserid();
         TUser byId = userService.getById(userid);
+
         if (StringUtils.hasLength(name)){
             byId.setName(name);
         }
@@ -295,9 +413,16 @@
 //            if (byId == null){
 //                return AjaxResult.tokenError("登录失效");
 //            }
+
             if (phone.equals(byId.getPhone())){
                 return AjaxResult.error("更换的手机号不能和原手机号相同");
             }
+            List<TUser> list = userService.list(new QueryWrapper<TUser>()
+                    .eq("phone", phone)
+                    .ne("state", 3));
+            if (list.size() > 0){
+                return AjaxResult.error("更换的手机号已被使用",new Object());
+            }
             byId.setPhone(phone);
         }
         if (StringUtils.hasLength(headImg)){
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStory.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStory.java
index bd166e2..b4a947c 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStory.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStory.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.ruoyi.common.core.web.domain.BaseModel;
+import lombok.Data;
 
 /**
  * <p>
@@ -13,6 +14,7 @@
  * @author 无关风月
  * @since 2024-04-26
  */
+@Data
 @TableName("t_story")
 public class TStory extends BaseModel {
 
@@ -46,7 +48,7 @@
     /**
      * 正确语音
      */
-    private String right;
+    private String correct;
     /**
      * 错误语音 要么没有 要么两个逗号隔开
      */
@@ -101,13 +103,6 @@
         this.img = img;
     }
 
-    public String getRight() {
-        return right;
-    }
-
-    public void setRight(String right) {
-        this.right = right;
-    }
 
     public String getError() {
         return error;
@@ -126,7 +121,7 @@
         ", type=" + type +
         ", state=" + state +
         ", img=" + img +
-        ", right=" + right +
+        ", correct=" + correct +
         ", error=" + error +
         "}";
     }
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserShare.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserShare.java
new file mode 100644
index 0000000..eef075e
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserShare.java
@@ -0,0 +1,34 @@
+package com.ruoyi.study.domain;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.web.domain.BaseModel;
+import lombok.Data;
+
+/**
+ * <p>
+ * 用户表
+ * </p>
+ *
+ * @author 无关风月
+ * @since 2024-04-26
+ */
+@Data
+@TableName("t_user_share")
+public class TUserShare extends BaseModel {
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+    /**
+     * 用户id
+     */
+    private Integer userId;
+    /**
+     * 分享时 获得积分
+     */
+    private Integer integral;
+
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StoryDTO.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StoryDTO.java
index d3966fe..ad7f414 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StoryDTO.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StoryDTO.java
@@ -19,7 +19,7 @@
     @ApiModelProperty(value = "图片",required = true)
     private String img;
     @ApiModelProperty(value = "正确语音",required = true)
-    private String right;
+    private String correct;
     @ApiModelProperty(value = "错误语音 多个逗号拼接")
     private String error;
 
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/SubjectDTO.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/SubjectDTO.java
index 9621251..83a1c93 100644
--- a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/SubjectDTO.java
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/SubjectDTO.java
@@ -19,7 +19,7 @@
     @ApiModelProperty(value = "图片",required = true)
     private String img;
     @ApiModelProperty(value = "正确语音",required = true)
-    private String right;
+    private String correct;
     @ApiModelProperty(value = "错误语音 多个逗号拼接")
     private String error;
 
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserShareMapper.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserShareMapper.java
new file mode 100644
index 0000000..cdd15c5
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserShareMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.study.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.study.domain.TGame;
+import com.ruoyi.study.domain.TUserShare;
+
+/**
+ * <p>
+ * 自主游戏 Mapper 接口
+ * </p>
+ *
+ * @author 无关风月
+ * @since 2024-04-26
+ */
+public interface TUserShareMapper extends BaseMapper<TUserShare> {
+
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserShareService.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserShareService.java
new file mode 100644
index 0000000..7aad242
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserShareService.java
@@ -0,0 +1,17 @@
+package com.ruoyi.study.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.study.domain.TGame;
+import com.ruoyi.study.domain.TUserShare;
+
+/**
+ * <p>
+ * 自主游戏 服务类
+ * </p>
+ *
+ * @author 无关风月
+ * @since 2024-04-26
+ */
+public interface ITUserShareService extends IService<TUserShare> {
+
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserShareServiceImpl.java b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserShareServiceImpl.java
new file mode 100644
index 0000000..2fc4eee
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserShareServiceImpl.java
@@ -0,0 +1,23 @@
+package com.ruoyi.study.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.study.domain.TGame;
+import com.ruoyi.study.domain.TUserShare;
+import com.ruoyi.study.mapper.TGameMapper;
+import com.ruoyi.study.mapper.TUserShareMapper;
+import com.ruoyi.study.service.ITGameService;
+import com.ruoyi.study.service.ITUserShareService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 自主游戏 服务实现类
+ * </p>
+ *
+ * @author 无关风月
+ * @since 2024-04-26
+ */
+@Service
+public class TUserShareServiceImpl extends ServiceImpl<TUserShareMapper, TUserShare> implements ITUserShareService {
+
+}
diff --git a/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStoryMapper.xml b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStoryMapper.xml
index 76b4f4b..db3388e 100644
--- a/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStoryMapper.xml
+++ b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStoryMapper.xml
@@ -23,7 +23,7 @@
         from t_story
         where 1=1 and `state`!=3
         <if test="req.name != null and req.name != ''">
-            and name like concat('%',#{req.name},'%')
+            and `name` like concat('%',#{req.name},'%')
         </if>
         <if test="req.english != null and req.english != ''">
             and english like concat('%',#{req.english},'%')
diff --git a/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserShareMapper.xml b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserShareMapper.xml
new file mode 100644
index 0000000..41f5319
--- /dev/null
+++ b/ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserShareMapper.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.study.mapper.TUserShareMapper">
+
+
+
+</mapper>

--
Gitblit v1.7.1