瀏覽代碼

【feat】【第一版开发】
1.增加jasypt,配置文件敏感信息加解密
2.增加新用户登录处理
3.代码逻辑优化

ChenYL 1 年之前
父節點
當前提交
224da08cd3

+ 6 - 0
pom.xml

@@ -23,6 +23,7 @@
         <spring-cloud.version>2023.0.3</spring-cloud.version>
         <jwt.version>4.4.0</jwt.version>
         <tk-mybatis.version>5.0.1</tk-mybatis.version>
+        <jasypt.version>3.0.5</jasypt.version>
     </properties>
 
     <dependencyManagement>
@@ -91,6 +92,11 @@
             <artifactId>java-jwt</artifactId>
             <version>${jwt.version}</version>
         </dependency>
+        <dependency>
+            <groupId>com.github.ulisesbocchio</groupId>
+            <artifactId>jasypt-spring-boot-starter</artifactId>
+            <version>${jasypt.version}</version>
+        </dependency>
     </dependencies>
 
     <!-- 配置阿里云仓库 -->

+ 6 - 0
src/main/java/com/punchsettle/server/atomic/service/IUserRewardService.java

@@ -37,4 +37,10 @@ public interface IUserRewardService {
      * @param userRewards
      */
     void batchUpdateUserReward(List<UserReward> userRewards);
+
+    /**
+     * 新增用户奖励记录
+     * @param userReward
+     */
+    void insert(UserReward userReward);
 }

+ 8 - 2
src/main/java/com/punchsettle/server/atomic/service/IUserService.java

@@ -20,11 +20,17 @@ public interface IUserService {
     User getById(Long id);
 
     /**
-     * 获取ID获取用户,不存在时新增
+     * 根据openId获取用户
      * @param openId 微信openid
      * @return
      */
-    User getAndAdd(String openId);
+    User getByOpenId(String openId);
+
+    /**
+     * 新增用户
+     * @param user
+     */
+    void insert(User user);
 
     /**
      * 查询所有用户

+ 6 - 0
src/main/java/com/punchsettle/server/atomic/service/impl/UserRewardServiceImpl.java

@@ -66,4 +66,10 @@ public class UserRewardServiceImpl implements IUserRewardService {
         Assert.notEmpty(userRewards);
         userRewardMapper.batchUpdateSelective(userRewards);
     }
+
+    @Override
+    public void insert(UserReward userReward) {
+        Assert.isNull(userReward);
+        userRewardMapper.insert(userReward);
+    }
 }

+ 8 - 1
src/main/java/com/punchsettle/server/atomic/service/impl/UserServiceImpl.java

@@ -3,6 +3,7 @@ package com.punchsettle.server.atomic.service.impl;
 import java.util.List;
 import java.util.Objects;
 
+import com.punchsettle.server.common.utils.Assert;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -33,7 +34,7 @@ public class UserServiceImpl implements IUserService {
     }
 
     @Override
-    public User getAndAdd(String openId) {
+    public User getByOpenId(String openId) {
         if (StringUtils.isBlank(openId)) {
             return null;
         }
@@ -43,6 +44,12 @@ public class UserServiceImpl implements IUserService {
         return userMapper.selectOne(queryUser);
     }
 
+    @Override
+    public void insert(User user) {
+        Assert.isNull(user);
+        userMapper.insert(user);
+    }
+
     @Override
     public List<User> list() {
         return userMapper.selectAll();

+ 0 - 0
src/main/java/com/punchsettle/server/core/config/TkMyBatisConfig.java → src/main/java/com/punchsettle/server/core/config/MyBatisConfig.java


+ 1 - 1
src/main/java/com/punchsettle/server/core/config/WebMvcConfig.java

@@ -28,7 +28,7 @@ public class WebMvcConfig implements WebMvcConfigurer {
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
         registry.addInterceptor(authInterceptor)
-                .excludePathPatterns("/health/**", "/login/**");
+                .excludePathPatterns("/health/**", "/wechat/miniprogram/login");
     }
 
     /**

+ 10 - 0
src/main/java/com/punchsettle/server/dto/wechat/LoginRequest.java

@@ -16,4 +16,14 @@ public class LoginRequest {
      * 微信小程序登录时获取的 code
      */
     private String code;
+
+    /**
+     * 头像
+     */
+    private String avatar;
+
+    /**
+     * 昵称
+     */
+    private String nickname;
 }

+ 18 - 0
src/main/java/com/punchsettle/server/service/manager/IUserManager.java

@@ -0,0 +1,18 @@
+package com.punchsettle.server.service.manager;
+
+import com.punchsettle.server.atomic.entity.User;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 用户 服务类
+ * @date 2024/11/30 14:28
+ */
+public interface IUserManager {
+
+    /**
+     * 根据openId获取用户,如果没有则新增
+     * @param user
+     */
+    User getAndAddUser(User user);
+}

+ 8 - 6
src/main/java/com/punchsettle/server/service/manager/impl/LoginManagerImpl.java

@@ -7,9 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.punchsettle.server.atomic.entity.User;
-import com.punchsettle.server.atomic.service.IUserService;
 import com.punchsettle.server.common.exception.BusinessException;
-import com.punchsettle.server.common.utils.Assert;
 import com.punchsettle.server.constant.CacheConstant;
 import com.punchsettle.server.core.config.BizConfig;
 import com.punchsettle.server.dto.wechat.Code2SessionRequest;
@@ -17,6 +15,7 @@ import com.punchsettle.server.dto.wechat.Code2SessionResponse;
 import com.punchsettle.server.dto.wechat.LoginRequest;
 import com.punchsettle.server.feign.WechatMiniProgramFeign;
 import com.punchsettle.server.service.manager.ILoginManager;
+import com.punchsettle.server.service.manager.IUserManager;
 import com.punchsettle.server.utiis.CacheUtils;
 import com.punchsettle.server.utiis.TokenUtils;
 
@@ -33,7 +32,7 @@ public class LoginManagerImpl implements ILoginManager {
     private WechatMiniProgramFeign wechatMiniProgramFeign;
 
     @Autowired
-    private IUserService userService;
+    private IUserManager userManager;
 
     @Autowired
     private BizConfig bizConfig;
@@ -49,9 +48,12 @@ public class LoginManagerImpl implements ILoginManager {
             throw BusinessException.fail(loginResponse.getErrMsg());
         }
 
-        // 获取用户记录
-        User user = userService.getAndAdd(loginResponse.getOpenId());
-        Assert.isNullInBusiness(user, String.format("不存在的用户,且无法新增,openid: %s", loginResponse.getOpenId()));
+        // 获取用户
+        User loginUserInfo = new User();
+        loginUserInfo.setOpenId(loginResponse.getOpenId());
+        loginUserInfo.setNickname(request.getNickname());
+        loginUserInfo.setAvatar(request.getAvatar());
+        User user = userManager.getAndAddUser(loginUserInfo);
 
         // 缓存微信用户对应的session_key
         CacheUtils.put(CacheConstant.WECHAT_MINI_PROGRAM_SESSION_KEY, user.getId().toString(),

+ 13 - 0
src/main/java/com/punchsettle/server/service/manager/impl/PunchInManagerImpl.java

@@ -3,6 +3,7 @@ package com.punchsettle.server.service.manager.impl;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -164,6 +165,18 @@ public class PunchInManagerImpl implements IPunchInManager {
     @Transactional(rollbackFor = Exception.class)
     public void doPunchIn(Long punchInId) {
         Assert.isNullInBusiness(punchInId, "请传入待打卡的任务");
+
+        // 判断是否重复打卡
+        LocalDate today = LocalDate.now();
+        PunchInRecordQuery punchInRecordQuery = new PunchInRecordQuery();
+        punchInRecordQuery.setPunchInIds(Arrays.asList(punchInId));
+        punchInRecordQuery.setStartDate(today.toString());
+        punchInRecordQuery.setEndDate(today.toString());
+        List<PunchInRecord> punchInRecords = punchInRecordService.listByCondition(punchInRecordQuery);
+        if (!CollectionUtils.isEmpty(punchInRecords)) {
+            throw BusinessException.fail("已打卡");
+        }
+
         // 创建打卡记录
         PunchInRecord punchInRecord = new PunchInRecord();
         punchInRecord.setPunchInId(punchInId);

+ 58 - 0
src/main/java/com/punchsettle/server/service/manager/impl/UserManagerImpl.java

@@ -0,0 +1,58 @@
+package com.punchsettle.server.service.manager.impl;
+
+import java.util.Objects;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.punchsettle.server.atomic.entity.User;
+import com.punchsettle.server.atomic.entity.UserReward;
+import com.punchsettle.server.atomic.service.IUserRewardService;
+import com.punchsettle.server.atomic.service.IUserService;
+import com.punchsettle.server.common.utils.Assert;
+import com.punchsettle.server.service.manager.IUserManager;
+
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 用户 服务类
+ * @date 2024/11/30 14:28
+ */
+@Slf4j
+@Service
+public class UserManagerImpl implements IUserManager {
+
+    @Autowired
+    private IUserService userService;
+
+    @Autowired
+    private IUserRewardService userRewardService;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public User getAndAddUser(User loginUserInfo) {
+        Assert.isNullInBusiness(loginUserInfo, "传入了空的登录对象");
+        Assert.isNullInBusiness(loginUserInfo.getOpenId(), "传入了空的openId");
+
+        // 获取用户记录
+        User user = userService.getByOpenId(loginUserInfo.getOpenId());
+        if (!Objects.isNull(user)) {
+            return user;
+        }
+
+        // 没有则创建新用户
+        userService.insert(loginUserInfo);
+        // 为新用户创建奖励数据
+        UserReward userReward = new UserReward();
+        userReward.setUserId(user.getId());
+        userReward.setUnclaimedRewardNum(0);
+        userReward.setClaimedRewardNum(0);
+        userReward.setTotalRewardNum(0);
+        userRewardService.insert(userReward);
+
+        return user;
+    }
+}

+ 6 - 0
src/main/resources/application.yaml

@@ -10,6 +10,12 @@ spring:
   cache:
     type: caffeine
 
+jasypt:
+  encryptor:
+    algorithm: PBEWithMD5AndDES
+    salt-generator-classname: org.jasypt.salt.RandomSaltGenerator
+    iv-generator-classname: org.jasypt.iv.RandomIvGenerator
+
 biz:
   wechat:
     mini-program: