Quellcode durchsuchen

木鱼记录功能开发

zsf vor 5 Tagen
Ursprung
Commit
0555d745c6

+ 3 - 0
build.gradle

@@ -93,6 +93,9 @@ dependencies {
 
 	implementation group: 'org.dom4j', name: 'dom4j', version: '2.1.1'
 
+	// https://mvnrepository.com/artifact/cn.hutool/hutool-all
+	implementation("cn.hutool:hutool-all:5.8.25")
+
 }
 
 test {

+ 1 - 1
src/main/java/com/rf/woodenFish/security/SSLConfig.java → src/main/java/com/rf/woodenFish/config/SSLConfig.java

@@ -1,4 +1,4 @@
-package com.rf.woodenFish.security;
+package com.rf.woodenFish.config;
 
 import org.apache.catalina.Context;
 import org.apache.catalina.connector.Connector;

+ 0 - 62
src/main/java/com/rf/woodenFish/filter/JWTInterceptor.java

@@ -1,62 +0,0 @@
-package com.rf.woodenFish.filter;
-
-import com.alibaba.fastjson.JSON;
-import com.auth0.jwt.exceptions.AlgorithmMismatchException;
-import com.auth0.jwt.exceptions.SignatureVerificationException;
-import com.rf.woodenFish.utils.JWTUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.StringUtils;
-import org.springframework.stereotype.Component;
-import org.springframework.web.servlet.HandlerInterceptor;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.util.HashMap;
-
-/**
- * @author lpf
- * @description:
- * @date 2021/12/2821:48
- */
-@Slf4j
-public class JWTInterceptor implements HandlerInterceptor {
-
-    @Override
-    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-        HashMap<String, Object> resultJson = new HashMap<>();
-        String uri = request.getRequestURI();
-        try {
-            String token = request.getHeader("Authorization");
-            if(StringUtils.isEmpty(token)) {
-                resultJson.put("code", HttpServletResponse.SC_UNAUTHORIZED);
-                resultJson.put("msg", "无效签名信息");
-            }
-            String[] len = token.split(" ");
-            if (len.length >=1){
-                token = len[1];
-                JWTUtil.verify(token);
-                return true;
-            }else {
-                resultJson.put("code", HttpServletResponse.SC_UNAUTHORIZED);
-                resultJson.put("msg", "无效签名信息");
-            }
-
-        } catch (SignatureVerificationException e) {
-            e.printStackTrace();
-            resultJson.put("code", HttpServletResponse.SC_UNAUTHORIZED);
-            resultJson.put("msg", "无效签名信息");
-        } catch (AlgorithmMismatchException e) {
-            e.printStackTrace();
-            resultJson.put("code", HttpServletResponse.SC_UNAUTHORIZED);
-            resultJson.put("msg", "token算法不一致");
-        } catch (Exception e) {
-            e.printStackTrace();
-            resultJson.put("code", HttpServletResponse.SC_UNAUTHORIZED);
-            resultJson.put("msg", "登录状态失效,请重新登录");
-        }
-        String s = JSON.toJSONString(resultJson);
-        response.setContentType("application/json;charset=UTF-8");
-        response.getWriter().println(s);
-        return false;
-    }
-}

+ 116 - 0
src/main/java/com/rf/woodenFish/record/controller/UserKnockRecordController.java

@@ -0,0 +1,116 @@
+package com.rf.woodenFish.record.controller;
+
+import com.rf.woodenFish.base.rest.BaseController;
+import com.rf.woodenFish.filter.JwtIgnore;
+import com.rf.woodenFish.record.model.UserKnockRecordEntity;
+import com.rf.woodenFish.record.service.UserKnockRecordService;
+import com.rf.woodenFish.utils.Result;
+import com.rf.woodenFish.utils.WebContextUtil;
+import com.sun.javafx.collections.MappingChange;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:用户敲击记录管理
+ * @Author: mimang
+ * @Date: 2025/6/6
+ */
+@Slf4j
+@RestController
+@RequestMapping("/knock")
+public class UserKnockRecordController extends BaseController {
+
+    @Autowired
+    private UserKnockRecordService service;
+
+    @PostMapping("/add")
+    public Result add(@RequestBody UserKnockRecordEntity entity){
+        try {
+            return success(service.add(entity));
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.getMessage());
+            return fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation(value = "当前用户本次功德")
+    @GetMapping("/findCurrentRecord")
+    public Result findCurrentRecord(){
+        try {
+            int num = 0;
+            //获取到当前人信息
+            String openId = WebContextUtil.getOpenId();
+            UserKnockRecordEntity entity  = service.findCurrentRecord(openId);
+            if (entity != null){
+                num = entity.getKnockNum();
+            }
+            return success(num);
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.getMessage());
+            return fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation(value = "当前用户今日功德")
+    @GetMapping("/countByCreateDate")
+    public Result countByCreateDate(){
+        try {
+            //获取到当前人信息
+            String openId = WebContextUtil.getOpenId();
+            Integer num  = service.countByCreateDate(openId);
+            return success(num);
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.getMessage());
+            return fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation(value = "当前用户总功德")
+    @GetMapping("/countByOpenId")
+    public Result countByOpenId(){
+        try {
+            //获取到当前人信息
+            String openId = WebContextUtil.getOpenId();
+            Integer num  = service.countByOpenId(openId);
+            return success(num);
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.getMessage());
+            return fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation(value = "今日排行榜")
+    @GetMapping("/orderByCurrentDateNum")
+    public Result orderByCurrentDateNum(){
+        try {
+            List<Map<String,Integer>> list = service.orderByCurrentDateNum();
+            return success(list);
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.getMessage());
+            return fail(e.getMessage());
+        }
+    }
+
+    @ApiOperation(value = "总排行榜")
+    @GetMapping("/orderByTotalNum")
+    public Result orderByTotalNum(){
+        try {
+            List<Map<String,Integer>> list = service.orderByTotalNum();
+            return success(list);
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.getMessage());
+            return fail(e.getMessage());
+        }
+    }
+}

+ 35 - 0
src/main/java/com/rf/woodenFish/record/model/UserKnockRecordEntity.java

@@ -0,0 +1,35 @@
+package com.rf.woodenFish.record.model;
+
+import com.rf.woodenFish.base.model.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Table;
+
+/**
+ * @Description:用户敲击记录
+ * @Author: mimang
+ * @Date: 2025/6/6
+ */
+@Entity
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Table(name = "t_user_knock_record")
+@EqualsAndHashCode(callSuper=true)
+@org.hibernate.annotations.Table(appliesTo = "t_user_knock_record", comment = "用户敲击记录表")
+public class UserKnockRecordEntity extends BaseEntity {
+
+    @Column(name = "open_id", columnDefinition = "varchar(36) not null comment 'openId'")
+    private String openId;
+
+    @Column(name = "create_date", columnDefinition = "varchar(36) not null comment '敲击日期'")
+    private String createDate;
+
+    @Column(name = "knock_num", columnDefinition = "int  comment '单次敲击数'")
+    private int knockNum;
+}

+ 91 - 0
src/main/java/com/rf/woodenFish/record/repostiory/UserKnockRecordRepository.java

@@ -0,0 +1,91 @@
+package com.rf.woodenFish.record.repostiory;
+
+import com.rf.woodenFish.base.repository.BaseRepository;
+import com.rf.woodenFish.record.model.UserKnockRecordEntity;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:用户敲击记录管理
+ * @Author: mimang
+ * @Date: 2025/6/6
+ */
+public interface UserKnockRecordRepository extends BaseRepository<UserKnockRecordEntity,String> {
+
+    /**
+     * 获取今日最新敲击记录
+     * @param openId
+     * @param createDate
+     * @return
+     */
+    UserKnockRecordEntity findTopByOpenIdAndCreateDateOrderByCreateTimeDesc(String openId,String createDate);
+
+    /**
+     * 当日功德
+     * @param openId
+     * @param createDate
+     * @return
+     */
+    @Query(value = "SELECT SUM(konck_num) FROM t_user_knock_record WHERE open_id =?1 AND create_date = ?2 ",
+            nativeQuery = true)
+    Integer countByOpenIdAndCreateDate(String openId,String createDate);
+
+    /**
+     * 总功德
+     * @param openId
+     * @return
+     */
+    @Query(value = "SELECT SUM(konck_num) FROM t_user_knock_record WHERE open_id =?1  ",
+            nativeQuery = true)
+    Integer countByOpenId(String openId);
+
+    /**
+     * 当日功德排行
+     * @param createDate
+     * @return
+     */
+    @Query(value = "SELECT " +
+            "ui.open_id," +
+            "ui.user_name," +
+            "ui.avatar,un.num " +
+            "FROM t_user_info ui " +
+            "LEFT JOIN " +
+            "(" +
+            "SELECT " +
+            "ur.open_id, " +
+            "SUM(ur.knock_num) AS num " +
+            "FROM t_user_knock_record ur" +
+            " WHERE " +
+            "ur.create_date = ?1 " +
+            "GROUP BY ur.open_id " +
+            ") AS un " +
+            "ON ui.open_id = un.open_id  " +
+            "ORDER BY num DESC  ",
+            nativeQuery = true)
+    List<Map<String,Integer>> orderByCurrentDateNum(String createDate);
+
+    /**
+     * 总功德排行
+     * @return
+     */
+    @Query(value = "SELECT " +
+            "ui.open_id," +
+            "ui.user_name," +
+            "ui.avatar,un.num " +
+            "FROM t_user_info ui " +
+            "LEFT JOIN " +
+            "(" +
+            "SELECT " +
+            "ur.open_id, " +
+            "SUM(ur.knock_num) AS num " +
+            "FROM t_user_knock_record ur " +
+
+            "GROUP BY ur.open_id " +
+            ") AS un " +
+            "ON ui.open_id = un.open_id  " +
+            "ORDER BY num DESC  ",
+            nativeQuery = true)
+    List<Map<String,Integer>> orderByTotalNum();
+}

+ 37 - 0
src/main/java/com/rf/woodenFish/record/service/UserKnockRecordService.java

@@ -0,0 +1,37 @@
+package com.rf.woodenFish.record.service;
+
+import com.rf.woodenFish.record.model.UserKnockRecordEntity;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:用户敲击记录管理
+ * @Author: mimang
+ * @Date: 2025/6/6
+ */
+public interface UserKnockRecordService {
+
+
+    UserKnockRecordEntity add(UserKnockRecordEntity entity);
+
+    /**
+     * 当前功德
+     * @param openId
+     * @return
+     */
+    UserKnockRecordEntity findCurrentRecord(String openId);
+
+    /**
+     * 获取当日功德
+     * @param openId
+     * @return
+     */
+    Integer countByCreateDate(String openId);
+
+    Integer countByOpenId(String openId);
+
+    List<Map<String, Integer>> orderByCurrentDateNum();
+
+    List<Map<String, Integer>> orderByTotalNum();
+}

+ 55 - 0
src/main/java/com/rf/woodenFish/record/service/impl/UserKnockRecordServiceImpl.java

@@ -0,0 +1,55 @@
+package com.rf.woodenFish.record.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.rf.woodenFish.record.model.UserKnockRecordEntity;
+import com.rf.woodenFish.record.repostiory.UserKnockRecordRepository;
+import com.rf.woodenFish.record.service.UserKnockRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:用户敲击记录管理
+ * @Author: mimang
+ * @Date: 2025/6/6
+ */
+@Service
+public class UserKnockRecordServiceImpl implements UserKnockRecordService {
+
+    @Autowired
+    private UserKnockRecordRepository repository;
+
+    @Override
+    public UserKnockRecordEntity add(UserKnockRecordEntity entity) {
+        entity.setCreateTime(DateUtil.now());
+        entity.setCreateDate(DateUtil.today());
+        return repository.save(entity);
+    }
+
+    @Override
+    public UserKnockRecordEntity findCurrentRecord(String openId) {
+        return repository.findTopByOpenIdAndCreateDateOrderByCreateTimeDesc(openId,DateUtil.today());
+    }
+
+    @Override
+    public Integer countByCreateDate(String openId) {
+        return repository.countByOpenIdAndCreateDate(openId,DateUtil.today());
+    }
+
+    @Override
+    public Integer countByOpenId(String openId) {
+        return repository.countByOpenId(openId);
+    }
+
+    @Override
+    public List<Map<String, Integer>> orderByCurrentDateNum() {
+        return repository.orderByCurrentDateNum(DateUtil.today());
+    }
+
+    @Override
+    public List<Map<String, Integer>> orderByTotalNum() {
+        return repository.orderByTotalNum();
+    }
+}

+ 0 - 18
src/main/java/com/rf/woodenFish/security/SafetyProcess.java

@@ -1,18 +0,0 @@
-package com.rf.woodenFish.security;
-
-import java.lang.annotation.*;
-
-/**
- * @author zzf
- * @description:
- * @date 2021/7/29 11:44
- */
-@Target({ElementType.METHOD,ElementType.TYPE})
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Inherited
-public @interface SafetyProcess {
-    boolean decode() default false;
-
-    boolean encode() default true;
-}

+ 0 - 2
src/main/java/com/rf/woodenFish/user/rest/UserController.java

@@ -3,7 +3,6 @@ package com.rf.woodenFish.user.rest;
 import com.alibaba.fastjson.JSONObject;
 import com.google.gson.Gson;
 import com.rf.woodenFish.base.rest.BaseController;
-import com.rf.woodenFish.security.SafetyProcess;
 import com.rf.woodenFish.user.dao.model.UserEntity;
 import com.rf.woodenFish.user.service.UserService;
 import com.rf.woodenFish.utils.Constant;
@@ -47,7 +46,6 @@ public class UserController extends BaseController {
 
     @GetMapping("/code2openid/{code}")
     @ApiOperation(value = "code 换 opernid",notes = "code:临时code,获取openid")
-    @SafetyProcess
     public Result<JSONObject> code2openid(@PathVariable String code) throws Exception {
         String openId;
         HttpResponse response = getToken(code);

+ 11 - 2
src/main/java/com/rf/woodenFish/utils/WebContextUtil.java

@@ -1,6 +1,7 @@
 package com.rf.woodenFish.utils;
 
 import com.alibaba.fastjson.JSONObject;
+import com.rf.woodenFish.user.dao.model.UserEntity;
 
 /**
  * @Description:线程缓存工具类
@@ -24,13 +25,21 @@ public class WebContextUtil {
      * 获取token信息
      * @return
      */
-    /*public static UserEntity getUserToken(){
+    public static UserEntity getUserToken(){
         if(local.get() != null){
             UserEntity userToken = JSONObject.parseObject(local.get() , UserEntity.class);
             return userToken;
         }
         return null;
-    }*/
+    }
+
+    public static String getOpenId(){
+        if(local.get() != null){
+            UserEntity userToken = JSONObject.parseObject(local.get() , UserEntity.class);
+            return userToken.getOpenId();
+        }
+        return null;
+    }
 
     /**
      * 移除token信息

+ 1 - 1
src/main/resources/config/application-test.yml

@@ -6,7 +6,7 @@ spring:
     type: com.alibaba.druid.pool.DruidDataSource
     druid:
       driver-class-name: com.mysql.cj.jdbc.Driver
-      url: jdbc:mysql://82.157.34.244:3306/?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
+      url: jdbc:mysql://82.157.34.244:3306/wooden_fish?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2B8
       username: root
       password: Mysql@.2020
       initial-size: 5

+ 1 - 1
src/main/resources/config/application.yml

@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: prod
+    active: test
 
   jpa:
     hibernate: