瀏覽代碼

[update] message:1.用户积分

kelei 10 月之前
父節點
當前提交
0e55edfac5

+ 1 - 1
admin/src/main/java/com/flyer/foster/config/SaTokenConfigure.java

@@ -26,7 +26,7 @@ public class SaTokenConfigure implements WebMvcConfigurer {
                     .check(r -> StpUtil.checkLogin());
 
             SaRouter.match("/app/**")
-                    .notMatch("/app/user/login","/app/user/send-sub-msg")
+                    .notMatch("/app/user/login")
                     .check(r -> StpAppUtil.checkLogin());
 
 

+ 31 - 0
admin/src/main/java/com/flyer/foster/controller/app/AppScoreController.java

@@ -0,0 +1,31 @@
+package com.flyer.foster.controller.app;
+
+import com.flyer.foster.dto.app.AppScoreAddDTO;
+import com.flyer.foster.service.IScoreService;
+import com.flyer.util.R;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 小程序用户积分(小程序)
+ *
+ * @author flyer
+ * @since 2024-05-18
+ */
+@RestController
+@RequestMapping("/app/score")
+public class AppScoreController {
+    @Autowired
+    private IScoreService iScoreService;
+
+    /**
+     * 新增积分
+     *
+     * @return
+     */
+    @PostMapping("/{appUserId}")
+    public R addOrUpdate(@PathVariable Integer appUserId, AppScoreAddDTO addDTO) {
+        addDTO.setAppUserId(appUserId);
+        return R.ok().result(iScoreService.addScore(addDTO));
+    }
+}

+ 0 - 14
admin/src/main/java/com/flyer/foster/controller/app/AppTreeController.java

@@ -30,9 +30,6 @@ public class AppTreeController {
     @Autowired
     private ITreeService iTreeService;
 
-    @Autowired
-    private IFosterRecordService iFosterRecordService;
-
     /**
      * 根据果园id查询树
      *
@@ -51,17 +48,6 @@ public class AppTreeController {
      */
     @GetMapping("/getRandomTree/{gardenId}")
     public R getRandomTree(@PathVariable Integer gardenId) {
-//        List<FosterRecord> records = iFosterRecordService.lambdaQuery().eq(FosterRecord::getGardenId, gardenId).list();
-//        //已认养的树
-//        List<Integer> fosteredIds = records.stream().map(FosterRecord::getTreeId).collect(Collectors.toList());
-//        LambdaQueryChainWrapper<Tree> queryChainWrapper = iTreeService.lambdaQuery().eq(Tree::getGardenId, gardenId);
-//        if(fosteredIds.size() > 0){
-//            queryChainWrapper = queryChainWrapper.notIn(Tree::getId, fosteredIds);
-//        }
-//        List<Tree> list = queryChainWrapper.list();
-//        if(list.size() > 0){
-//            return R.ok().result(list.get(0));
-//        }
         int tenantId = StpAppUtil.getTokenSession().getInt("tenantId");
         Tree tree = new Tree();
         tree.setGardenId(gardenId);

+ 33 - 0
admin/src/main/java/com/flyer/foster/dto/app/AppScoreAddDTO.java

@@ -0,0 +1,33 @@
+package com.flyer.foster.dto.app;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * AppScoreRespDTO
+ *
+ * @author kelei
+ * @since 2024/5/18/19:37
+ */
+@Data
+public class AppScoreAddDTO {
+    /**
+     * 用户id
+     */
+    @NotNull(message = "用户id不能为空")
+    private Integer appUserId;
+
+    /**
+     * 用户积分
+     */
+    @NotNull(message = "用户积分不能为空")
+    private Integer score;
+
+    /**
+     * 用户行为
+     */
+    @NotBlank(message = "用户行为不能为空")
+    private String action;
+}

+ 22 - 0
admin/src/main/java/com/flyer/foster/dto/app/AppScoreRespDTO.java

@@ -0,0 +1,22 @@
+package com.flyer.foster.dto.app;
+
+import lombok.Data;
+
+/**
+ * AppScoreRespDTO
+ *
+ * @author kelei
+ * @since 2024/5/18/19:37
+ */
+@Data
+public class AppScoreRespDTO {
+    /**
+     * 用户id
+     */
+    private Integer appUserId;
+
+    /**
+     * 用户积分
+     */
+    private Integer score;
+}

+ 5 - 0
admin/src/main/java/com/flyer/foster/entity/AppUser.java

@@ -65,6 +65,11 @@ public class AppUser implements Serializable {
     private String appId;
 
     /**
+     * 用户总积分
+     */
+    private Integer totalScore;
+
+    /**
      * 状态-{0.不可用 1.可用}
      */
     private Integer status;

+ 98 - 0
admin/src/main/java/com/flyer/foster/entity/Score.java

@@ -0,0 +1,98 @@
+package com.flyer.foster.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.Version;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 小程序用户积分
+ * </p>
+ *
+ * @author flyer
+ * @since 2024-05-18
+ */
+@Getter
+@Setter
+@TableName("tb_score")
+public class Score implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 小程序用户主键id
+     */
+    private Integer appUserId;
+
+    /**
+     * 用户行为
+     */
+    private String action;
+
+    /**
+     * 总积分
+     */
+    private Integer score;
+
+    /**
+     * 状态-{0.不可用 1.可用}
+     */
+    private Integer status;
+
+    /**
+     * 租户号
+     */
+    private Integer tenantId;
+
+    /**
+     * 乐观锁
+     */
+    @Version
+    private Integer version;
+
+    /**
+     * 是否删除
+     */
+    @TableLogic
+    private Integer isDeleted;
+
+    /**
+     * 创建人
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private String createdBy;
+
+    /**
+     * 创建时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createdTime;
+
+    /**
+     * 更新人
+     */
+    @TableField(fill = FieldFill.UPDATE)
+    private String updatedBy;
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime updatedTime;
+
+
+}

+ 25 - 0
admin/src/main/java/com/flyer/foster/mapper/IScoreMapper.java

@@ -0,0 +1,25 @@
+package com.flyer.foster.mapper;
+
+import com.flyer.foster.dto.app.AppScoreAddDTO;
+import com.flyer.foster.dto.app.AppScoreRespDTO;
+import com.flyer.foster.entity.Score;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 小程序用户积分 Mapper 接口
+ * </p>
+ *
+ * @author flyer
+ * @since 2024-05-18
+ */
+public interface IScoreMapper extends BaseMapper<Score> {
+
+    /**
+     * 是否
+     * @param addDTO
+     * @return
+     */
+     AppScoreRespDTO isExist(@Param("queryDTO") AppScoreAddDTO addDTO);
+}

+ 19 - 0
admin/src/main/java/com/flyer/foster/service/IScoreService.java

@@ -0,0 +1,19 @@
+package com.flyer.foster.service;
+
+import com.flyer.foster.dto.app.AppScoreAddDTO;
+import com.flyer.foster.dto.app.AppScoreRespDTO;
+import com.flyer.foster.entity.Score;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 小程序用户积分 服务类
+ * </p>
+ *
+ * @author flyer
+ * @since 2024-05-18
+ */
+public interface IScoreService extends IService<Score> {
+
+    boolean addScore(AppScoreAddDTO addDTO);
+}

+ 62 - 0
admin/src/main/java/com/flyer/foster/service/impl/ScoreServiceImpl.java

@@ -0,0 +1,62 @@
+package com.flyer.foster.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.flyer.exception.BusinessException;
+import com.flyer.foster.dto.app.AppScoreAddDTO;
+import com.flyer.foster.dto.app.AppScoreRespDTO;
+import com.flyer.foster.entity.AppUser;
+import com.flyer.foster.entity.Score;
+import com.flyer.foster.mapper.IScoreMapper;
+import com.flyer.foster.pojo.StpAppUtil;
+import com.flyer.foster.service.IAppUserService;
+import com.flyer.foster.service.IScoreService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 小程序用户积分 服务实现类
+ * </p>
+ *
+ * @author flyer
+ * @since 2024-05-18
+ */
+@Service
+public class ScoreServiceImpl extends ServiceImpl<IScoreMapper, Score> implements IScoreService {
+    @Autowired
+    private IAppUserService iAppUserService;
+
+    @Transactional
+    @Override
+    public boolean addScore(AppScoreAddDTO addDTO) {
+        int tenantId = StpAppUtil.getLoginIdAsInt();
+        // 根据用户id查询积分数据是否存在
+        Score entity = new Score();
+        AppScoreRespDTO score = baseMapper.isExist(addDTO);
+        if (score == null) {
+            entity.setAction(addDTO.getAction());
+            entity.setAppUserId(addDTO.getAppUserId());
+            entity.setScore(addDTO.getScore());
+            entity.setTenantId(tenantId);
+            entity.setCreatedBy("kelei");
+            entity.setCreatedTime(LocalDateTime.now());
+            entity.setUpdatedBy("kelei");
+            entity.setUpdatedTime(LocalDateTime.now());
+            // 插入用户积分
+            this.save(entity);
+            // 修改用户总积分
+            AppUser appUser = iAppUserService.getById(entity.getAppUserId());
+            // 原始积分
+            Integer totalScore = appUser.getTotalScore();
+            totalScore += addDTO.getScore();
+            appUser.setTotalScore(totalScore);
+            iAppUserService.saveOrUpdate(appUser);
+        }
+        return true;
+    }
+}

+ 13 - 0
admin/src/main/resources/mapper/ScoreMapper.xml

@@ -0,0 +1,13 @@
+<?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.flyer.foster.mapper.IScoreMapper">
+
+    <select id="isExist" resultType="com.flyer.foster.dto.app.AppScoreRespDTO">
+        select app_user_id as appUserId,
+               score       as score
+        from tb_score
+        where app_user_id = #{queryDTO.appUserId}
+          and action = #{queryDTO.action}
+          and DATE_FORMAT(created_time, '%Y-%m-%d') = date_format(now(), '%Y-%m-%d')
+    </select>
+</mapper>