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

fix 可指定用户可查看双重认证验证码次数

zoujiajian пре 3 година
родитељ
комит
074af76607

+ 13 - 0
netflix-dao/src/main/java/com/cyksj/mapper/UserFuncPropertyMapper.java

@@ -0,0 +1,13 @@
+package com.cyksj.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cyksj.model.entity.UserFuncProperty;
+
+/*
+ *项目名: netflix
+ *文件名: UserFuncPropertyMapper
+ *创建者: JavaZou
+ *创建时间:2023/6/7 15:23
+ */
+public interface UserFuncPropertyMapper extends BaseMapper<UserFuncProperty> {
+}

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/DoubleVerifyClickRecord.java

@@ -21,4 +21,8 @@ public class DoubleVerifyClickRecord extends BaseEntity{
 	private Long skuId;
 
 	private Long relationId;
+
+	private String code;
+
+	private Integer remainTime;
 }

+ 4 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/DoubleVerifyClickRefreshRecord.java

@@ -15,4 +15,8 @@ public class DoubleVerifyClickRefreshRecord extends BaseEntity{
 	private Long userId;
 
 	private Long clickId;
+
+	private String code;
+
+	private Integer remainTime;
 }

+ 21 - 0
netflix-dao/src/main/java/com/cyksj/model/entity/UserFuncProperty.java

@@ -0,0 +1,21 @@
+package com.cyksj.model.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: UserFuncProperty
+ *创建者: JavaZou
+ *创建时间:2023/6/7 15:21
+ */
+@Getter
+@Setter
+public class UserFuncProperty extends BaseEntity{
+	private Long userId;
+
+	/**
+	 * 双重认证查看次数
+	 */
+	private Integer verifyCheckNum;
+}

+ 21 - 0
netflix-dao/src/main/java/com/cyksj/model/request/UserFuncPropertyReq.java

@@ -0,0 +1,21 @@
+package com.cyksj.model.request;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/*
+ *项目名: netflix
+ *文件名: UserFuncPropertyReq
+ *创建者: JavaZou
+ *创建时间:2023/6/7 15:25
+ */
+@Getter
+@Setter
+public class UserFuncPropertyReq {
+	private Long userId;
+
+	/**
+	 * 双重认证查看次数
+	 */
+	private Integer verifyCheckNum;
+}

+ 4 - 6
netflix-dao/src/main/java/com/cyksj/model/views/DoubleVerifyCodeView.java

@@ -1,6 +1,5 @@
 package com.cyksj.model.views;
 
-import com.ejlchina.searcher.bean.DbField;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -15,18 +14,17 @@ import java.util.Date;
 @Getter
 @Setter
 public class DoubleVerifyCodeView {
-	@DbField("dr.user_id")
 	private Long userId;
 
-	@DbField("dr.account_id")
 	private Long accountId;
 
-	@DbField("dr.account")
 	private String account;
 
-	@DbField("case when dcr.id is null then 1 else 2 end")
 	private Integer type;
 
-	@DbField("case when dcr.id is null then dr.created_time else dcr.created_time end")
+	private String code;
+
+	private Integer remainTime;
+
 	private Date createdTime;
 }

+ 4 - 3
netflix-dao/src/main/resources/mapper/DoubleVerifyClickRecordMapper.xml

@@ -6,15 +6,16 @@
 
     <select id="getDoubleVerifyCodeList" resultType="com.cyksj.model.views.DoubleVerifyCodeView">
         select *
-        from (select user_id, account_id, relation_id, 1 as `type`, created_time
+        from (select user_id, account_id, relation_id, 1 as `type`, code, if(remain_time = 0,null,remain_time) as remain_time, created_time
               from double_verify_click_record
               where user_id = #{userId}
                 and relation_id = #{relationId}
               union all
-              select dr.user_id, dr.account_id, dr.relation_id, 2 as `type`, dcr.created_time
+              select dr.user_id, dr.account_id, dr.relation_id, 2 as `type`, dcr.code, if(dcr.remain_time = 0,null,dcr.remain_time) as remain_time, dcr.created_time
               from double_verify_click_record dr
                        inner join double_verify_click_refresh_record dcr
-                                  on dcr.click_id = dr.id and dr.user_id = #{userId} and dr.relation_id = #{relationId})s
+                                  on dcr.click_id = dr.id and dr.user_id = #{userId} and
+                                     dr.relation_id = #{relationId}) s
         order by created_time desc
     </select>
 </mapper>

+ 28 - 18
netflix-web/src/main/java/com/cyksj/web/controller/group/GroupRelationController.java

@@ -7,7 +7,6 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.servlet.ServletUtil;
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.cyksj.common.constant.Constant;
 import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.common.task.GlobalThreadPoolTaskExecutor;
 import com.cyksj.common.util.GoogleGenerator;
@@ -71,7 +70,7 @@ public class GroupRelationController {
 
     private final RedisService redisService;
 
-    private final SysConfigMapper sysConfigMapper;
+    private final UserFuncPropertyMapper userFuncPropertyMapper;
 
     private final DoubleVerifyClickRefreshRecordMapper refreshRecordMapper;
 
@@ -192,7 +191,7 @@ public class GroupRelationController {
     public Result<String> getAuthCode(Long relationId) {
         long userId = StpUserUtil.getLoginIdAsLong();
         List<Long> userIds = userService.getRelationUserIdList(userId, null);
-        //每个人 每月只能获取
+        //每个人 每月只能获取3
         if (relationId == null) throw BusinessRuntimeException.getInstance("车票不存在");
         GroupsRelationView groupsRelationView = beanSearcher.searchFirst(GroupsRelationView.class, MapUtils.builder()
                 .field(GroupsRelationView::getId, relationId)
@@ -205,11 +204,11 @@ public class GroupRelationController {
                 .eq(DoubleVerifyClickRecord::getRelationId, relationId)
                 .eq(DoubleVerifyClickRecord::getAccountId, groupsRelationView.getAccountId())
                 .between(DoubleVerifyClickRecord::getCreatedTime, DateUtil.beginOfMonth(now), DateUtil.endOfMonth(now)));
-        SysConfig double_verify_num = sysConfigMapper.selectOne(Wrappers.lambdaQuery(SysConfig.class).eq(SysConfig::getSysKey, Constant.ACCOUNT_DOUBLE_VERIFY_KEY));
-        int num = 2;
-        if (double_verify_num != null) {
-            num = Integer.parseInt(double_verify_num.getSysValue());
-        }
+        UserFuncProperty userFuncProperty = userFuncPropertyMapper.selectOne(Wrappers.lambdaQuery(UserFuncProperty.class)
+                .eq(UserFuncProperty::getUserId, userId).last("limit 1"));
+        //默认3次
+        int num = 3;
+        if (userFuncProperty != null) num = userFuncProperty.getVerifyCheckNum();
         if (count >= num) throw BusinessRuntimeException.getInstance("获取双重验证码次数上限");
         int second = now.second();
         if (second < 30 && 30 - second < 3) {
@@ -218,12 +217,22 @@ public class GroupRelationController {
             ThreadUtil.sleep(60 - second + 1, TimeUnit.SECONDS);
         }
         StringBuilder sb = new StringBuilder();
+        JSONObject re = new JSONObject();
         try {
             long code = GoogleGenerator.getCode(groupsRelationView.getApiSecret(), now.getTime());
             sb.append(code);
             while (sb.length() < 6) {
                 sb.insert(0, 0);
             }
+            re.putOpt("code", sb.toString());
+            int nowSecond = DateTime.now().second();
+            int time = 0;
+            if (nowSecond < 30) {
+                time = 30 - nowSecond;
+            } else {
+                time = 60 - nowSecond;
+            }
+            re.putOpt("time", time);
             DoubleVerifyClickRecord doubleVerifyClickRecord = new DoubleVerifyClickRecord();
             doubleVerifyClickRecord.setRelationId(relationId);
             doubleVerifyClickRecord.setUserId(userId);
@@ -231,6 +240,8 @@ public class GroupRelationController {
             doubleVerifyClickRecord.setAccountId(groupsRelationView.getAccountId());
             doubleVerifyClickRecord.setAccount(groupsRelationView.getTripsAccount());
             doubleVerifyClickRecord.setSkuId(groupsRelationView.getSkuId());
+            doubleVerifyClickRecord.setCode(sb.toString());
+            doubleVerifyClickRecord.setRemainTime(time);
             doubleVerifyRecordMapper.insert(doubleVerifyClickRecord);
 
             DoubleVerifyDto doubleVerifyDto = new DoubleVerifyDto();
@@ -241,16 +252,6 @@ public class GroupRelationController {
         } catch (Exception e) {
             throw BusinessRuntimeException.getInstance("获取双重验证码错误,请联系客服");
         }
-        JSONObject re = new JSONObject();
-        re.putOpt("code", sb.toString());
-        int nowSecond = DateTime.now().second();
-        int time = 0;
-        if (nowSecond < 30) {
-            time = 30 - nowSecond;
-        } else {
-            time = 60 - nowSecond;
-        }
-        re.putOpt("time", time);
         return GatewayResponse.SUCCESS.newBuilder().toResult(re.toString());
     }
 
@@ -299,10 +300,19 @@ public class GroupRelationController {
             throw BusinessRuntimeException.getInstance("刷新双重验证码错误,请联系客服");
         }
         if (clickId != 0) {
+            int nowSecond = DateTime.now().second();
+            int time = 0;
+            if (nowSecond < 30) {
+                time = 30 - nowSecond;
+            } else {
+                time = 60 - nowSecond;
+            }
             //刷新双重验证码记录
             DoubleVerifyClickRefreshRecord refreshRecord = new DoubleVerifyClickRefreshRecord();
             refreshRecord.setClickId(clickId);
             refreshRecord.setUserId(userId);
+            refreshRecord.setCode(sb.toString());
+            refreshRecord.setRemainTime(time);
             refreshRecordMapper.insert(refreshRecord);
         }
         return GatewayResponse.SUCCESS.newBuilder().toResult(sb.toString());

+ 45 - 1
netflix-web/src/main/java/com/cyksj/web/controller/manage/CmsUserController.java

@@ -4,14 +4,17 @@ import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
+import com.cyksj.common.exception.BusinessRuntimeException;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
 import com.cyksj.mapper.GroupsRelationMapper;
 import com.cyksj.mapper.OrderDonMapper;
+import com.cyksj.mapper.UserFuncPropertyMapper;
 import com.cyksj.mapper.UserMapper;
 import com.cyksj.mapper.corp.CorpUserFollowRelationMapper;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.manage.views.UserView;
+import com.cyksj.model.request.UserFuncPropertyReq;
 import com.cyksj.model.views.*;
 import com.cyksj.service.relation.GroupRelationClearService;
 import com.cyksj.service.relation.GroupRelationFrontService;
@@ -22,6 +25,7 @@ import com.ejlchina.searcher.util.MapBuilder;
 import com.ejlchina.searcher.util.MapUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
@@ -44,7 +48,7 @@ public class CmsUserController{
 
     private final BeanSearcher beanSearcher;
 
-    private final GroupsRelationMapper relationMapper;
+    private final UserFuncPropertyMapper userFuncPropertyMapper;
 
     private final UserMapper userMapper;
 
@@ -115,6 +119,46 @@ public class CmsUserController{
         return GatewayResponse.SUCCESS.newBuilder().toResult();
     }
 
+    /**
+     * 修改用户查看验证码次数
+     */
+    @PutMapping("/put/verifyCheck/num")
+    public Result<String> updateCheckCodeNum(@RequestBody UserFuncPropertyReq req) {
+        if (req.getUserId() == null) throw BusinessRuntimeException.getInstance("用户id为空");
+        if (req.getVerifyCheckNum() == null || req.getVerifyCheckNum() < 0) {
+            throw BusinessRuntimeException.getInstance("请输入正确的查看验证码次数");
+        }
+        UserFuncProperty userFuncProperty = userFuncPropertyMapper.selectOne(Wrappers.lambdaQuery(UserFuncProperty.class)
+                .eq(UserFuncProperty::getUserId, req.getUserId()).last("limit 1"));
+        if (userFuncProperty == null) {
+            try {
+                userFuncProperty = new UserFuncProperty();
+                userFuncProperty.setUserId(req.getUserId());
+                userFuncProperty.setVerifyCheckNum(req.getVerifyCheckNum());
+                userFuncPropertyMapper.insert(userFuncProperty);
+            } catch (DuplicateKeyException e) {
+
+            }
+        }
+        userFuncProperty.setVerifyCheckNum(req.getVerifyCheckNum());
+        userFuncPropertyMapper.updateById(userFuncProperty);
+        return GatewayResponse.SUCCESS.newBuilder().toResult();
+    }
+
+    /**
+     * 查看用户验证码次数
+     */
+    @GetMapping("/get/verifyCheck/num")
+    public Result<Integer> getVerifyCheckNum(Long userId) {
+        if (userId==null) throw BusinessRuntimeException.getInstance("用户id为空");
+        UserFuncProperty userFuncProperty = userFuncPropertyMapper.selectOne(Wrappers.lambdaQuery(UserFuncProperty.class)
+                .eq(UserFuncProperty::getUserId, userId).last("limit 1"));
+        //默认三次
+        Integer verifyCheckNum = 3;
+        if (userFuncProperty != null) verifyCheckNum = userFuncProperty.getVerifyCheckNum();
+        return GatewayResponse.SUCCESS.newBuilder().toResult(verifyCheckNum);
+    }
+
     /**
      * 用户加入企业微信客服详情
      */