Преглед изворни кода

完成系统用户积分接口(新)

tsurumure пре 7 месеци
родитељ
комит
c8c5b6b20d

+ 4 - 3
db/sys_user_integral_log.sql

@@ -10,10 +10,11 @@ CREATE TABLE `sys_user_integral_log` (
     `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
     `user_id` BIGINT NOT NULL COMMENT '用户ID',
     `content` VARCHAR(500) COMMENT '内容',
-    `integral` INT NOT NULL COMMENT '积分',
+    `integral` INT NOT NULL COMMENT '操作积分',
     `operation` INT NOT NULL COMMENT '操作 (1:增加, -1:减少)',
-    `operation_user_id` BIGINT COMMENT '操作人 (手动添加必填)',
-    `origin` INT NOT NULL COMMENT '来源 (1:手动添加, 2:..)',
+    `operation_user_id` BIGINT COMMENT '操作人 (手动操作必填)',
+    `operation_ip` VARCHAR(64) COMMENT '操作IP',
+    `origin` INT NOT NULL COMMENT '来源 (1:手动操作, 2:..)',
     `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     INDEX `idx_user_id` (`user_id`)
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统用户积分记录表';

+ 0 - 1
db/sys_user_role_permission.sql

@@ -55,7 +55,6 @@ INSERT INTO sys_user_role_permission(id, parent_id, permission_name, sort) VALUE
             ('3.3.3', '3.3', '查询用户积分详情', null),
                 ('3.3.3.2', '3.3.3', '查询他人积分详情', null),
             ('3.3.4', '3.3', '查询用户积分操作记录', null),
-                ('3.3.4.2', '3.3', '查询他人积分操作记录', null),
         ('3.4', '3', '系统用户权限列表', null),
             ('3.4.1', '3.4', '查询用户权限', null),
             ('3.4.1.2', '3.4', '查询他人用户权限', null),

+ 1 - 1
db/sys_user_role_permission_relation.sql

@@ -31,7 +31,7 @@ INSERT INTO sys_user_role_permission_relation(role_id, permission_id) VALUES
             (1, '3.2.4'), (1, '3.2.5'), (1, '3.2.6'), (1, '3.2.7'),
         (1, '3.3'),
             (1, '3.3.1'), (1, '3.3.2'), (1, '3.3.3'), (1, '3.3.3.2'),
-            (1, '3.3.4'), (1, '3.3.4.2'),
+            (1, '3.3.4'),
         (1, '3.4'),
             (1, '3.4.1'), (1, '3.4.1.2'),
         (1, '3.5'),

+ 5 - 5
src/main/java/com/backendsys/mapper/Cms/CmsArticleMapper.xml

@@ -8,8 +8,8 @@
     <sql id="includeArticle">
         a.id id,
         a.id article_id,
-        sf.user_id user_id,
-        COALESCE(sf.nickname, '') user_nickname,
+        uf.user_id user_id,
+        COALESCE(uf.nickname, '') user_nickname,
         ac.id category_id,
         ac.category_name category_name,
         at.title title,
@@ -27,8 +27,8 @@
     <sql id="includeArticleDetail">
         a.id id,
         a.id article_id,
-        sf.user_id user_id,
-        COALESCE(sf.nickname, '') user_nickname,
+        uf.user_id user_id,
+        COALESCE(uf.nickname, '') user_nickname,
         ac.id category_id,
         ac.category_name category_name,
         COALESCE(a.meta_keyword, '') meta_keyword,
@@ -93,7 +93,7 @@
         LEFT JOIN cms_article_category ac ON a.category_id = ac.id
     </sql>
     <sql id="leftJoinUser">
-        LEFT JOIN sys_user_info sf ON a.user_id = sf.user_id
+        LEFT JOIN sys_user_info uf ON a.user_id = uf.user_id
     </sql>
     <sql id="leftJoinTranslations">
         LEFT JOIN cms_article_i18n at ON a.id = at.article_id

+ 27 - 3
src/main/java/com/backendsys/modules/system/controller/SysUserIntegralController.java

@@ -5,8 +5,9 @@ import com.backendsys.modules.common.config.security.enums.SecurityEnum;
 import com.backendsys.modules.common.config.security.utils.SecurityUtil;
 import com.backendsys.modules.common.utils.Result;
 import com.backendsys.modules.system.dao.SysUserDao;
-import com.backendsys.modules.system.entity.SysLogEntity;
 import com.backendsys.modules.system.entity.SysUser;
+import com.backendsys.modules.system.entity.SysUserIntegralLog;
+import com.backendsys.modules.system.service.SysUserIntegralLogService;
 import com.backendsys.modules.system.service.SysUserIntegralService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -26,14 +27,15 @@ public class SysUserIntegralController {
 
     @Autowired
     private SecurityUtil securityUtil;
-
     @Autowired
     private SysUserDao sysUserDao;
     @Autowired
     private SysUserIntegralService sysUserIntegralService;
+    @Autowired
+    private SysUserIntegralLogService sysUserIntegralLogService;
 
     @Operation(summary = "获取系统用户积分详情")
-    @GetMapping("/api/system/getUserIntegral")
+    @GetMapping("/api/system/user/getUserIntegral")
     public Result getUserIntegral(Long user_id) {
         if (user_id == null) user_id = SecurityUtil.getUserId();
 
@@ -56,4 +58,26 @@ public class SysUserIntegralController {
         return Result.success().put("data", resp);
     }
 
+    @Operation(summary = "获取系统用户积分日志列表")
+    @PreAuthorize("@sr.hasPermission('3.3.4')")
+    @GetMapping("/api/system/user/getUserIntegralLogList")
+    public Result getUserIntegralLogList(SysUserIntegralLog sysUserIntegralLog) {
+        return Result.success().put("data", sysUserIntegralLogService.selectIntegralLogList(sysUserIntegralLog));
+    }
+
+
+//    // 测试完删除
+//    @Operation(summary = "增加积分 (测试)")
+//    @GetMapping("/api/system/increaseUserIntegral")
+//    public Result increaseUserIntegral(Long user_id, Integer integral) {
+//        return Result.success().put("data", sysUserIntegralService.increase(user_id, integral));
+//    }
+//
+//    // 测试完删除
+//    @Operation(summary = "减少积分 (测试)")
+//    @GetMapping("/api/system/decreaseUserIntegral")
+//    public Result decreaseUserIntegral(Long user_id, Integer integral) {
+//        return Result.success().put("data", sysUserIntegralService.decrease(user_id, integral));
+//    }
+
 }

+ 6 - 0
src/main/java/com/backendsys/modules/system/dao/SysUserIntegralLogDao.java

@@ -4,6 +4,12 @@ import com.backendsys.modules.system.entity.SysUserIntegralLog;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+import java.util.Map;
+
 @Mapper
 public interface SysUserIntegralLogDao extends BaseMapper<SysUserIntegralLog> {
+
+    List<Map<String, Object>> selectIntegralLogList(SysUserIntegralLog sysUserIntegralLog);
+
 }

+ 18 - 2
src/main/java/com/backendsys/modules/system/entity/SysUserIntegralLog.java

@@ -1,6 +1,7 @@
 package com.backendsys.modules.system.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
@@ -8,13 +9,28 @@ import lombok.Data;
 @Data
 @TableName("sys_user_integral_log")
 public class SysUserIntegralLog {
+
     @TableId(type = IdType.AUTO)
     private Long id;
     private Long user_id;
+
+    @TableField(exist = false)
+    private String user_nickname;
+
     private String content;             // 内容
     private Integer integral;           // 积分
     private Integer operation;          // 操作 (1:增加, -1:减少)
-    private Long operation_user_id;     // 操作人 (手动添加必填)
-    private Integer origin;             // 来源 (1:手动添加, 2:..)
+    private Long operation_user_id;     // 操作人 (手动操作必填)
+
+    @TableField(exist = false)
+    private String operation_user_nickname;
+
+    private Integer origin;             // 来源 (1:手动操作, 2:..)
+    private String operation_ip;
     private String create_time;
+
+    @TableField(exist = false)
+    private String create_time_begin;
+    @TableField(exist = false)
+    private String create_time_end;
 }

+ 8 - 0
src/main/java/com/backendsys/modules/system/service/SysUserIntegralLogService.java

@@ -1,4 +1,12 @@
 package com.backendsys.modules.system.service;
 
+import com.backendsys.modules.system.entity.SysLogEntity;
+import com.backendsys.modules.system.entity.SysUserIntegralLog;
+import com.backendsys.utils.response.PageEntity;
+
 public interface SysUserIntegralLogService {
+
+    // 获取系统用户积分日志列表
+    PageEntity selectIntegralLogList(SysUserIntegralLog sysUserIntegralLog);
+
 }

+ 2 - 1
src/main/java/com/backendsys/modules/system/service/SysUserIntegralService.java

@@ -4,9 +4,10 @@ import java.util.Map;
 
 public interface SysUserIntegralService {
 
+    // 初始化用户积分
+    void init(Long user_id);
     // 查询积分
     Integer selectIntegralByUserId(Long user_id);
-
     // 增加积分
     Map<String, Object> increase(Long user_id, Integer integral);
     // 减少积分

+ 8 - 0
src/main/java/com/backendsys/modules/system/service/impl/SysAuthV2ServiceImpl.java

@@ -11,6 +11,7 @@ import com.backendsys.modules.system.dao.SysUserDao;
 import com.backendsys.modules.system.dao.SysUserInfoDao;
 import com.backendsys.modules.system.entity.*;
 import com.backendsys.modules.system.service.SysAuthV2Service;
+import com.backendsys.modules.system.service.SysUserIntegralService;
 import com.backendsys.modules.system.service.SysUserService;
 import com.backendsys.utils.response.ResultEnum;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -56,6 +57,8 @@ public class SysAuthV2ServiceImpl implements SysAuthV2Service {
     private SysUserService sysUserService;
     @Autowired
     private SysMobileAreaDao sysMobileAreaDao;
+    @Autowired
+    private SysUserIntegralService sysUserIntegralService;
 
     @Value("${tencent.sms.debug}")
     private String SMS_DEBUG;
@@ -319,7 +322,12 @@ public class SysAuthV2ServiceImpl implements SysAuthV2Service {
         // 注册时,状态为禁用
         registerEntity.setStatus(-1);
 
+        // 创建用户
         sysUserDao.insertUser(registerEntity);
+
+        // 初始化用户积分
+        sysUserIntegralService.init(registerEntity.getId());
+
         return Map.of("user_id", registerEntity.getId());
     }
 

+ 24 - 0
src/main/java/com/backendsys/modules/system/service/impl/SysUserIntegralLogServiceImpl.java

@@ -1,8 +1,32 @@
 package com.backendsys.modules.system.service.impl;
 
+import com.backendsys.modules.system.dao.SysUserIntegralLogDao;
+import com.backendsys.modules.system.entity.SysLogEntity;
+import com.backendsys.modules.system.entity.SysUserIntegralLog;
 import com.backendsys.modules.system.service.SysUserIntegralLogService;
+import com.backendsys.utils.response.PageEntity;
+import com.backendsys.utils.response.PageInfoResult;
+import com.backendsys.utils.v2.PageUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Map;
+
 @Service
 public class SysUserIntegralLogServiceImpl implements SysUserIntegralLogService {
+
+    @Autowired
+    private SysUserIntegralLogDao sysUserIntegralLogDao;
+
+    /**
+     * 获取系统用户积分日志列表
+     */
+    @Override
+    public PageEntity selectIntegralLogList(SysUserIntegralLog sysUserIntegralLog) {
+        PageUtils.startPage();  // 分页
+        List<Map<String, Object>> list = sysUserIntegralLogDao.selectIntegralLogList(sysUserIntegralLog);
+        return new PageInfoResult(list).toEntity();
+    }
+
 }

+ 54 - 14
src/main/java/com/backendsys/modules/system/service/impl/SysUserIntegralServiceImpl.java

@@ -1,8 +1,12 @@
 package com.backendsys.modules.system.service.impl;
 
+import cn.hutool.core.util.NumberUtil;
+import com.backendsys.modules.common.config.security.utils.HttpRequestUtil;
+import com.backendsys.modules.common.config.security.utils.SecurityUtil;
 import com.backendsys.modules.system.dao.SysUserIntegralDao;
 import com.backendsys.modules.system.dao.SysUserIntegralLogDao;
 import com.backendsys.modules.system.entity.SysUserIntegral;
+import com.backendsys.modules.system.entity.SysUserIntegralLog;
 import com.backendsys.modules.system.service.SysUserIntegralService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -14,11 +18,24 @@ import java.util.Map;
 @Service
 public class SysUserIntegralServiceImpl implements SysUserIntegralService {
 
+    @Autowired
+    private HttpRequestUtil httpRequestUtil;
+
     @Autowired
     private SysUserIntegralDao sysUserIntegralDao;
     @Autowired
     private SysUserIntegralLogDao sysUserIntegralLogDao;
 
+    /**
+     * 初始化用户积分
+     */
+    @Override
+    public void init(Long user_id) {
+        SysUserIntegral entity = new SysUserIntegral();
+        entity.setUser_id(user_id);
+        sysUserIntegralDao.insert(entity);
+    }
+
     /**
      * 查询积分 (如果不存在记录,则创建)
      */
@@ -45,16 +62,27 @@ public class SysUserIntegralServiceImpl implements SysUserIntegralService {
     public Map<String, Object> increase(Long user_id, Integer integral) {
 
         // 查询当前积分 (如果不存在记录,则创建)
-        Integer currentIntegral = selectIntegralByUserId(user_id);
+        Integer current_integral = selectIntegralByUserId(user_id);
+        // 计算结果积分 (当前 + 增量)
+        int target_integral = NumberUtil.add(current_integral, integral).intValue();
 
-        Integer operation = 1;  // 操作 (1:增加, -1:减少)
+        // 更新用户积分
+        SysUserIntegral entity = new SysUserIntegral();
+        entity.setIntegral(target_integral);
+        sysUserIntegralDao.update(entity, new LambdaQueryWrapper<SysUserIntegral>().eq(SysUserIntegral::getUser_id, user_id));
 
+        // 创建用户积分日志
+        SysUserIntegralLog entityLog = new SysUserIntegralLog();
+        entityLog.setUser_id(user_id);
+        entityLog.setContent("手动增加积分");
+        entityLog.setIntegral(integral);
+        entityLog.setOperation(1);                                  // 操作 (1:增加, -1:减少)
+        entityLog.setOperation_user_id(SecurityUtil.getUserId());   // 操作人 (手动操作必填)
+        entityLog.setOrigin(1);                                     // 来源 (1:手动操作, 2:..)
+        entityLog.setOperation_ip(httpRequestUtil.getIpAddr());               // IP
+        sysUserIntegralLogDao.insert(entityLog);
 
-        Map<String, Object> resp = new LinkedHashMap<>();
-        resp.put("user_id", user_id);
-        resp.put("integral", integral);
-        resp.put("operation", operation);
-        return resp;
+        return Map.of("user_id", user_id);
     }
 
     /**
@@ -64,14 +92,26 @@ public class SysUserIntegralServiceImpl implements SysUserIntegralService {
     public Map<String, Object> decrease(Long user_id, Integer integral) {
 
         // 查询当前积分 (如果不存在记录,则创建)
-        Integer currentIntegral = selectIntegralByUserId(user_id);
+        Integer current_integral = selectIntegralByUserId(user_id);
+        // 计算结果积分 (当前 - 增量)
+        int target_integral = NumberUtil.sub(current_integral, integral).intValue();
+
+        // 更新用户积分
+        SysUserIntegral entity = new SysUserIntegral();
+        entity.setIntegral(target_integral);
+        sysUserIntegralDao.update(entity, new LambdaQueryWrapper<SysUserIntegral>().eq(SysUserIntegral::getUser_id, user_id));
 
-        Integer operation = -1;  // 操作 (1:增加, -1:减少)
+        // 创建用户积分日志
+        SysUserIntegralLog entityLog = new SysUserIntegralLog();
+        entityLog.setUser_id(user_id);
+        entityLog.setContent("手动减少积分");
+        entityLog.setIntegral(integral);
+        entityLog.setOperation(-1);                                 // 操作 (1:增加, -1:减少)
+        entityLog.setOperation_user_id(SecurityUtil.getUserId());   // 操作人 (手动操作必填)
+        entityLog.setOrigin(1);                                     // 来源 (1:手动操作, 2:..)
+        entityLog.setOperation_ip(httpRequestUtil.getIpAddr());     // IP
+        sysUserIntegralLogDao.insert(entityLog);
 
-        Map<String, Object> resp = new LinkedHashMap<>();
-        resp.put("user_id", user_id);
-        resp.put("integral", integral);
-        resp.put("operation", operation);
-        return resp;
+        return Map.of("user_id", user_id);
     }
 }

+ 3 - 0
src/main/java/com/backendsys/modules/system/service/impl/SysUserServiceImpl.java

@@ -241,6 +241,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserDao, SysUser> impleme
             // 创建用户
             sysUserDao.insertUser(sysUserDTO);
 
+            // 初始化用户积分
+            sysUserIntegralService.init(sysUserDTO.getId());
+
             return Map.of("user_id", sysUserDTO.getId());
 
         } catch (InterruptedException e) { throw new RuntimeException(e);

+ 5 - 5
src/main/resources/mapper/cms/article/ArticleDao.xml

@@ -6,8 +6,8 @@
         a.id id,
         a.id article_id,
         a.uid uid,
-        sf.user_id user_id,
-        COALESCE(sf.nickname, '') user_nickname,
+        uf.user_id user_id,
+        COALESCE(uf.nickname, '') user_nickname,
         COALESCE(ac.id, -1) category_id,
         COALESCE(ac.category_name, '') category_name,
         at.title title,
@@ -22,8 +22,8 @@
         a.id id,
         a.id article_id,
         a.uid uid,
-        sf.user_id user_id,
-        COALESCE(sf.nickname, '') user_nickname,
+        uf.user_id user_id,
+        COALESCE(uf.nickname, '') user_nickname,
         ac.id category_id,
         ac.category_name category_name,
         a.status status,
@@ -45,7 +45,7 @@
         LEFT JOIN cms_article_category_i18n ac ON ac.article_category_id = a.category_id AND ac.language = #{lang}
     </sql>
     <sql id="leftJoinUser">
-        LEFT JOIN sys_user_info sf ON a.user_id = sf.user_id
+        LEFT JOIN sys_user_info uf ON a.user_id = uf.user_id
     </sql>
     <sql id="leftJoinTranslations">
         LEFT JOIN cms_article_i18n at ON a.id = at.article_id

+ 69 - 0
src/main/resources/mapper/system/SysUserIntegralLogDao.xml

@@ -0,0 +1,69 @@
+<?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.backendsys.modules.system.dao.SysUserIntegralLogDao">
+
+    <sql id="includeIntegralLog">
+        uil.id,
+        uil.user_id,
+        COALESCE(ufsec.nickname, '') user_nickname,
+        COALESCE(uil.content, '') content,
+        uil.integral,
+        uil.operation,
+        COALESCE(uil.operation_user_id, '') operation_user_id,
+        COALESCE(uf.nickname, '') operation_user_nickname,
+        uil.origin,
+        COALESCE(uil.operation_ip, '') operation_ip,
+        uil.create_time
+    </sql>
+
+    <resultMap id="resultMapIntegralLogList" type="java.util.LinkedHashMap">
+        <id property="id" column="id" jdbcType="BIGINT" />
+        <result property="user_id" column="user_id" javaType="java.lang.Long" />
+        <result property="user_nickname" column="user_nickname" />
+        <result property="content" column="content" />
+        <result property="integral" column="integral" javaType="java.lang.Integer" />
+        <result property="operation" column="operation" javaType="java.lang.Integer" />
+        <result property="operation_user_id" column="operation_user_id" javaType="java.lang.Long" />
+        <result property="operation_user_nickname" column="operation_user_nickname" />
+        <result property="origin" column="origin" javaType="java.lang.Integer" />
+        <result property="operation_ip" column="operation_ip" />
+        <result property="create_time" column="create_time" />
+    </resultMap>
+
+    <select id="selectIntegralLogList" resultMap="resultMapIntegralLogList">
+        SELECT <include refid="includeIntegralLog" />
+        FROM sys_user_integral_log uil
+        LEFT JOIN sys_user_info uf ON uil.operation_user_id = uf.user_id
+        LEFT JOIN sys_user_info ufsec ON uil.user_id = ufsec.user_id
+        <where>
+            <if test="user_id != null and user_id != ''">
+                AND uil.user_id = #{user_id}
+            </if>
+            <if test="user_nickname != null and user_nickname != ''">
+                AND ufsec.nickname LIKE CONCAT('%', #{user_nickname}, '%')
+            </if>
+            <if test="content != null and content != ''">
+                AND uil.content LIKE CONCAT('%', #{content}, '%')
+            </if>
+            <if test="operation != null and operation != ''">
+                AND uil.operation = #{operation}
+            </if>
+            <if test="operation_user_id != null and operation_user_id != ''">
+                AND uil.operation_user_id = #{operation_user_id}
+            </if>
+            <if test="operation_user_nickname != null and operation_user_nickname != ''">
+                AND uf.nickname LIKE CONCAT('%', #{operation_user_nickname}, '%')
+            </if>
+            <if test="operation_ip != null and operation_ip != ''">
+                AND uil.operation_ip = #{operation_ip}
+            </if>
+            <if test="create_time_begin != null and create_time_begin != '' and create_time_end != null and create_time_end != ''">
+                AND uil.create_time BETWEEN #{create_time_begin} AND #{create_time_end}
+            </if>
+        </where>
+        ORDER BY create_time DESC
+    </select>
+
+</mapper>
+
+

+ 1 - 1
src/main/resources/mapper/system/SysUserRoleDao.xml

@@ -16,7 +16,7 @@
         <result property="role_name" column="role_name" />
         <result property="role_description" column="role_description" />
         <result property="user_count" column="user_count" />
-        <result property="sort" column="sort"  javaType="java.lang.Integer" />
+        <result property="sort" column="sort" javaType="java.lang.Integer" />
         <result property="status" column="status" javaType="java.lang.Integer" />
     </resultMap>
     <select id="selectUserRoleList" resultMap="resultMapUserRole">