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()); } }; } 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); } ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/model/TFeedback.java
New file @@ -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 + "}"; } } ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/model/TUseGuide.java
New file @@ -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 + "}"; } } ruoyi-api/ruoyi-api-management/src/main/java/com/ruoyi/management/api/query/UseGuideQuery.java
New file @@ -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; } ruoyi-api/ruoyi-api-study/src/main/java/com/ruoyi/study/api/domain/TUserShare.java
New file @@ -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; } 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; 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; 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 = "英文释义") ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginUserParent.java
New file @@ -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; } 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"; /** * 登录用户 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); } /** * 根据令牌获取用户标识 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); } /** * 检验用户是否已经登录,如未登录,则抛出异常 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); } /** * 检验当前会话是否已经登录,如未登录,则抛出异常 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; ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/OssController.java
New file @@ -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); // } } 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") 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); 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("删除成功"); } } 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("保存成功"); 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 { 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 + "}"; 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> ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/query/UseGuideQuery.java
New file @@ -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; } 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> ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/utils/ObsUploadUtil.java
New file @@ -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"); // } } 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; 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> 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); 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) { 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("编辑成功"); } } 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)){ 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 + "}"; } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TUserShare.java
New file @@ -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; } 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; 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; ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TUserShareMapper.java
New file @@ -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> { } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITUserShareService.java
New file @@ -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> { } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserShareServiceImpl.java
New file @@ -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 { } 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},'%') ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TUserShareMapper.xml
New file @@ -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>