Przeglądaj źródła

调整跌倒事件处理 加密存储处理人手机号

hxd 2 miesięcy temu
rodzic
commit
0eb25195ba

+ 16 - 16
portal-service-application/src/main/java/com/hfln/portal/application/controller/wap/UserController.java

@@ -93,23 +93,23 @@ public class UserController {
         return ApiResult.failed("发送短信验证码失败!");
     }
 
-    @GetMapping("/getSignupSmsCode")
-    @Operation(summary = "获取注册短信验证码")
-    public ApiResult<String> getSignupSmsCode(@RequestParam String phone) {
-        if (smsGateway.sendSignupSmsCode(phone)) {
-            return ApiResult.success("发送短信验证码成功!");
-        }
-        return ApiResult.failed("发送短信验证码失败!");
-    }
+//    @GetMapping("/getSignupSmsCode")
+//    @Operation(summary = "获取注册短信验证码")
+//    public ApiResult<String> getSignupSmsCode(@RequestParam String phone) {
+//        if (smsGateway.sendSignupSmsCode(phone)) {
+//            return ApiResult.success("发送短信验证码成功!");
+//        }
+//        return ApiResult.failed("发送短信验证码失败!");
+//    }
 
-    @PostMapping("/signup")
-    @Operation(summary = "小程序用户注册")
-    public ApiResult<String> signup(@Valid @RequestBody UserSignupParams request) {
-        if (userGateway.signup(request)) {
-            return ApiResult.success("注册成功!");
-        }
-        return ApiResult.failed("注册失败!");
-    }
+//    @PostMapping("/signup")
+//    @Operation(summary = "小程序用户注册")
+//    public ApiResult<String> signup(@Valid @RequestBody UserSignupParams request) {
+//        if (userGateway.signup(request)) {
+//            return ApiResult.success("注册成功!");
+//        }
+//        return ApiResult.failed("注册失败!");
+//    }
 
     @PostMapping("/loginBySmsCode")
     @Operation(summary = "短信验证码登录")

+ 11 - 0
portal-service-domain/src/main/java/com/hfln/portal/domain/customer/util/PhoneUtils.java

@@ -0,0 +1,11 @@
+package com.hfln.portal.domain.customer.util;
+
+public class PhoneUtils {
+
+    public static String maskPhone(String phone) {
+        if (phone == null || phone.length() != 11) {
+            return phone; // 长度不对就原样返回
+        }
+        return phone.substring(0, 3) + "****" + phone.substring(7);
+    }
+}

+ 1 - 1
portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/UserGateway.java

@@ -22,7 +22,7 @@ public interface UserGateway {
     UserTokenInfo loginByPhone(PhoneLoginParams params);
 
 
-    Boolean signup(UserSignupParams request);
+//    Boolean signup(UserSignupParams request);
 
 
     Boolean checkOpenId(String openId);

+ 1 - 1
portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/sms/SmsGateway.java

@@ -8,7 +8,7 @@ public interface SmsGateway {
     Boolean sendLoginSmsCode(String phone);
 
 
-    Boolean sendSignupSmsCode(String phone);
+//    Boolean sendSignupSmsCode(String phone);
 
     Boolean sendResetSmsCode(String phone);
 

+ 8 - 1
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/DeviceGatewayImpl.java

@@ -1,5 +1,6 @@
 package com.hfln.portal.infrastructure.gateway.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hfln.framework.extension.BizException;
 import cn.hfln.framework.redis.util.RedisUtil;
 import com.alibaba.fastjson2.JSONArray;
@@ -8,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.hfln.portal.common.constant.UserConstants;
 import com.hfln.portal.common.constant.mqtt.topic.TopicConstants;
 import com.hfln.portal.common.dto.data.device.DeviceDTO;
 import com.hfln.portal.common.dto.data.event.EventListDTO;
@@ -31,6 +33,7 @@ import com.hfln.portal.domain.customer.OprLogType;
 import com.hfln.portal.domain.customer.OssBusiType;
 import com.hfln.portal.domain.customer.util.CopyUtils;
 import com.hfln.portal.domain.customer.util.DevPosFixUtil;
+import com.hfln.portal.domain.customer.util.PhoneUtils;
 import com.hfln.portal.domain.customer.util.WxOfficeAccountClient;
 import com.hfln.portal.domain.exception.ErrorEnum;
 import com.hfln.portal.domain.gateway.DeviceGateway;
@@ -362,9 +365,13 @@ public class DeviceGatewayImpl implements DeviceGateway {
 
     @Override
     public Boolean handleEvent(Long eventListId) {
+        //获取当前操作者手机号
+        String phone = (String) StpUtil.getSession().get(UserConstants.SA_USER_PHONE);
+
         LambdaUpdateWrapper<EventList> updateWrapper = new LambdaUpdateWrapper<>();
         updateWrapper.eq(EventList::getEventListId, eventListId)
-                .set(EventList::getIsHandle, 1);
+                .set(EventList::getIsHandle, 1)
+                .set(EventList::getRemark, PhoneUtils.maskPhone(phone));
         return this.eventService.update(updateWrapper);
     }
 

+ 39 - 37
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/UserGatewayImpl.java

@@ -14,12 +14,14 @@ import com.hfln.portal.common.constant.UserConstants;
 import com.hfln.portal.common.constant.redis.RedisCacheConstant;
 import com.hfln.portal.common.dto.data.oss.OssFileDTO;
 import com.hfln.portal.common.dto.data.user.UserDto;
-import com.hfln.portal.common.request.user.*;
+import com.hfln.portal.common.request.user.LoginBySmsCodeParams;
+import com.hfln.portal.common.request.user.PhoneLoginParams;
+import com.hfln.portal.common.request.user.UserLogoffParams;
+import com.hfln.portal.common.request.user.WxFreshTokenParams;
 import com.hfln.portal.common.response.user.UserInfoWxRes;
 import com.hfln.portal.common.response.user.UserTokenInfo;
 import com.hfln.portal.domain.customer.DeviceType;
 import com.hfln.portal.domain.customer.util.CopyUtils;
-import com.hfln.portal.domain.customer.util.PasswordUtil;
 import com.hfln.portal.domain.customer.util.WxOfficeAccountClient;
 import com.hfln.portal.domain.exception.ErrorEnum;
 import com.hfln.portal.domain.gateway.UserGateway;
@@ -218,41 +220,41 @@ public class UserGatewayImpl implements UserGateway {
         return result;
     }
 
-    @Override
-    public Boolean signup(UserSignupParams request) {
-        //校验验证码
-        String redisKey = RedisCacheConstant.SMS_SIGNUP_CODE + request.getPhone();
-        log.info("验证注册验证码:手机号={}, 输入验证码={}, Redis key={}", request.getPhone(), request.getCode(), redisKey);
-        
-        Object cacheCodeObj = redisService.get(redisKey);
-        log.info("从Redis获取验证码:key={}, value={}", redisKey, cacheCodeObj);
-        
-        if (Objects.isNull(cacheCodeObj)) {
-            log.warn("验证码已过期或不存在:手机号={}, Redis key={}", request.getPhone(), redisKey);
-            throw new BizException(ErrorEnum.SMS_CODE_EXPIRED.getErrorCode(), ErrorEnum.SMS_CODE_EXPIRED.getErrorMessage());
-        }
-        String cacheCode = String.valueOf(cacheCodeObj);
-        log.info("验证码比较:输入={}, 缓存={}", request.getCode(), cacheCode);
-        
-        if (!Objects.equals(cacheCode, request.getCode())) {
-            log.warn("验证码错误:手机号={}, 输入={}, 缓存={}", request.getPhone(), request.getCode(), cacheCode);
-            throw new BizException(ErrorEnum.SMS_CODE_ERROR.getErrorCode(), ErrorEnum.SMS_CODE_ERROR.getErrorMessage());
-
-        }
-        if (checkOpenId(request.getOpenId())) {
-            throw new BizException(ErrorEnum.USER_ALREADY_EXISTS.getErrorCode(), ErrorEnum.USER_ALREADY_EXISTS.getErrorMessage());
-        }
-        // 验证通过 清除验证码入库
-        redisService.del(redisKey);
-        UserInfo user = new UserInfo();
-        user.setPhone(request.getPhone());
-        String encryptedPassword = PasswordUtil.encrypt(request.getPassword());
-        user.setPassword(encryptedPassword);
-        user.setOpenid(request.getOpenId());
-        user.setUnionId(request.getUnionId());
-        userService.save(user);
-        return true;
-    }
+//    @Override
+//    public Boolean signup(UserSignupParams request) {
+//        //校验验证码
+//        String redisKey = RedisCacheConstant.SMS_SIGNUP_CODE + request.getPhone();
+//        log.info("验证注册验证码:手机号={}, 输入验证码={}, Redis key={}", request.getPhone(), request.getCode(), redisKey);
+//
+//        Object cacheCodeObj = redisService.get(redisKey);
+//        log.info("从Redis获取验证码:key={}, value={}", redisKey, cacheCodeObj);
+//
+//        if (Objects.isNull(cacheCodeObj)) {
+//            log.warn("验证码已过期或不存在:手机号={}, Redis key={}", request.getPhone(), redisKey);
+//            throw new BizException(ErrorEnum.SMS_CODE_EXPIRED.getErrorCode(), ErrorEnum.SMS_CODE_EXPIRED.getErrorMessage());
+//        }
+//        String cacheCode = String.valueOf(cacheCodeObj);
+//        log.info("验证码比较:输入={}, 缓存={}", request.getCode(), cacheCode);
+//
+//        if (!Objects.equals(cacheCode, request.getCode())) {
+//            log.warn("验证码错误:手机号={}, 输入={}, 缓存={}", request.getPhone(), request.getCode(), cacheCode);
+//            throw new BizException(ErrorEnum.SMS_CODE_ERROR.getErrorCode(), ErrorEnum.SMS_CODE_ERROR.getErrorMessage());
+//
+//        }
+//        if (checkOpenId(request.getOpenId())) {
+//            throw new BizException(ErrorEnum.USER_ALREADY_EXISTS.getErrorCode(), ErrorEnum.USER_ALREADY_EXISTS.getErrorMessage());
+//        }
+//        // 验证通过 清除验证码入库
+//        redisService.del(redisKey);
+//        UserInfo user = new UserInfo();
+//        user.setPhone(request.getPhone());
+//        String encryptedPassword = PasswordUtil.encrypt(request.getPassword());
+//        user.setPassword(encryptedPassword);
+//        user.setOpenid(request.getOpenId());
+//        user.setUnionId(request.getUnionId());
+//        userService.save(user);
+//        return true;
+//    }
 
 
     @Override

+ 35 - 29
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/sms/SmsGatewayImpl.java

@@ -29,47 +29,53 @@ public class SmsGatewayImpl implements SmsGateway {
     public Boolean sendLoginSmsCode(String phone) {
         // 限制短信发送不超过一分钟一次
         String key = RedisCacheConstant.SMS_SEND_LOGIN_TIME + phone;
-        Boolean hasKey = redisService.hasKey(key);
+        boolean hasKey = redisService.hasKey(key);
         if (hasKey) {
             throw new BizException(ErrorEnum.FREQUENT_SMS_SENDING.getErrorCode(), ErrorEnum.FREQUENT_SMS_SENDING.getErrorMessage());
         }
-        redisService.set(key, 1, 1L, TimeUnit.MINUTES);
+        redisService.set(key, "1", 1L, TimeUnit.MINUTES);
+
+        //生成4位验证码
         int captcha = (int) ((Math.random() * 9 + 1) * 1000);
+        log.info("生成登录验证码:手机号={}, 验证码={}", phone, captcha);
+
+        //发送短信
         String sentLoginMsg = msgClient.sendLoginMsg(phone, String.valueOf(captcha));
         if (Objects.nonNull(sentLoginMsg)) {
             // 存入redis  过期时间十分钟
-            redisService.set(RedisCacheConstant.SMS_LOGIN_CODE + phone, captcha,10L, TimeUnit.MINUTES);
+            redisService.set(RedisCacheConstant.SMS_LOGIN_CODE + phone, String.valueOf(captcha),10L, TimeUnit.MINUTES);
+           log.info("验证码已存入Redis:key={}, value={}, 过期时间=10分钟", RedisCacheConstant.SMS_LOGIN_CODE + phone, captcha);
             return true;
         }
         return false;
     }
 
-    @Override
-    public Boolean sendSignupSmsCode(String phone) {
-        // 限制短信发送不超过一分钟一次
-        String key = RedisCacheConstant.SMS_SEND_SIGNUP_TIME + phone;
-        Boolean hasKey = redisService.hasKey(key);
-        if (hasKey) {
-            throw new BizException(ErrorEnum.FREQUENT_SMS_SENDING.getErrorCode(), ErrorEnum.FREQUENT_SMS_SENDING.getErrorMessage());
-        }
-        int captcha = (int) ((Math.random() * 9 + 1) * 1000);
-        log.info("生成注册验证码:手机号={}, 验证码={}", phone, captcha);
-        
-        String sentLoginMsg = msgClient.sendRegisterMsg(phone, String.valueOf(captcha));
-        if (Objects.nonNull(sentLoginMsg)) {
-            // 存入redis  过期时间十分钟
-            String redisKey = RedisCacheConstant.SMS_SIGNUP_CODE + phone;
-            redisService.set(redisKey, captcha, 10L, TimeUnit.MINUTES);
-            log.info("验证码已存入Redis:key={}, value={}, 过期时间=10分钟", redisKey, captcha);
-            
-            // 验证是否存储成功
-            Object storedValue = redisService.get(redisKey);
-            log.info("验证存储结果:key={}, 存储的值={}", redisKey, storedValue);
-            return true;
-        }
-        log.warn("短信发送失败:手机号={}, 验证码={}", phone, captcha);
-        return false;
-    }
+//    @Override
+//    public Boolean sendSignupSmsCode(String phone) {
+//        // 限制短信发送不超过一分钟一次
+//        String key = RedisCacheConstant.SMS_SEND_SIGNUP_TIME + phone;
+//        Boolean hasKey = redisService.hasKey(key);
+//        if (hasKey) {
+//            throw new BizException(ErrorEnum.FREQUENT_SMS_SENDING.getErrorCode(), ErrorEnum.FREQUENT_SMS_SENDING.getErrorMessage());
+//        }
+//        int captcha = (int) ((Math.random() * 9 + 1) * 1000);
+//        log.info("生成注册验证码:手机号={}, 验证码={}", phone, captcha);
+//
+//        String sentLoginMsg = msgClient.sendRegisterMsg(phone, String.valueOf(captcha));
+//        if (Objects.nonNull(sentLoginMsg)) {
+//            // 存入redis  过期时间十分钟
+//            String redisKey = RedisCacheConstant.SMS_SIGNUP_CODE + phone;
+//            redisService.set(redisKey, captcha, 10L, TimeUnit.MINUTES);
+//            log.info("验证码已存入Redis:key={}, value={}, 过期时间=10分钟", redisKey, captcha);
+//
+//            // 验证是否存储成功
+//            Object storedValue = redisService.get(redisKey);
+//            log.info("验证存储结果:key={}, 存储的值={}", redisKey, storedValue);
+//            return true;
+//        }
+//        log.warn("短信发送失败:手机号={}, 验证码={}", phone, captcha);
+//        return false;
+//    }
 
     @Override
     public Boolean sendResetSmsCode(String phone) {

+ 28 - 24
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/mqtt/MqttSubHandle.java

@@ -142,7 +142,8 @@ public class MqttSubHandle {
             return;
         }
 
-        // 2 存储跌倒确认事件
+
+        // 2 有跌倒事件发生
         if (messageType == 3 && ("fall_confirmed").equals(event)) {
 
             BigDecimal[][] targetPoints = new BigDecimal[targetPointArray.size()][3];
@@ -152,32 +153,33 @@ public class MqttSubHandle {
             }
             String targetPointsStr = JSON.toJSONString(targetPoints);
 
+            //存储跌倒时间到数据库
             EventList eventListVO = new EventList();
             eventListVO.setDevId(dev.getDevId());
-            eventListVO.setPose((int)pose);
+            eventListVO.setPose((int) pose);
             eventListVO.setIsHandle(0);
             eventListVO.setTargetPoints(targetPointsStr);
-            eventListVO.setEventType((int)messageType);
+            eventListVO.setEventType((int) messageType);
             eventService.save(eventListVO);
-        }
 
-        // 3 向前端发送数据
-        JSONArray targetPointOne = targetPointArray.getJSONArray(0);
-        BigDecimal x = targetPointOne.getBigDecimal(0);
-        BigDecimal y = targetPointOne.getBigDecimal(1);
-        JSONObject msg = new JSONObject();
-        msg.put("target_points", targetPointArray);
-        msg.put("x", x);
-        msg.put("y", y);
-        msg.put("zt", pose);
-        msg.put("clientId", clientId);
-        msg.put("event", event);
-        msg.put("msgType", "event");
-        // 发送socket
-        mqttClient.sendMessage(String.format("/mps/%s/event", clientId), msg.toString());
 
-        // 发送短信
-        if (event.equals("fall_confirmed")) {
+            //  向前端发送数据
+            JSONArray targetPointOne = targetPointArray.getJSONArray(0);
+            BigDecimal x = targetPointOne.getBigDecimal(0);
+            BigDecimal y = targetPointOne.getBigDecimal(1);
+            JSONObject msg = new JSONObject();
+            msg.put("target_points", targetPointArray);
+            msg.put("x", x);
+            msg.put("y", y);
+            msg.put("zt", pose);
+            msg.put("clientId", clientId);
+            msg.put("event", event);
+            msg.put("msgType", "event");
+            msg.put("eventListId", eventListVO.getEventListId());
+            // 发送socket
+            mqttClient.sendMessage(String.format("/mps/%s/event", clientId), msg.toString());
+
+            // 整理需要接收消息的人员列表
             log.info("mqttutil--有跌倒事件");
             List<SendMsgUserDto> sendList = new ArrayList<>();
             String devName = dev.getDevName();
@@ -185,7 +187,7 @@ public class MqttSubHandle {
             Long userId = dev.getUserId();
 
             // 需要发送提示的 有 当前设备拥有者, 被分享者, 以及 对当前设备 具有管理权限的 web管理用户
-            // 1 小程序拥有者
+            //  小程序拥有者
             if (userId != null) {
                 UserInfo userInfo = userService.queryById(userId);
                 SendMsgUserDto msgUserDto = new SendMsgUserDto();
@@ -211,11 +213,12 @@ public class MqttSubHandle {
                 wxMsg.put("event", "fall_confirmed");
                 wxMsg.put("msgType", "fall");
                 wxMsg.put("devName", devName.toString());
+                wxMsg.put("eventListId", eventListVO.getEventListId());
 
                 log.info("发送微信跌倒主题消息:topic:{}, msg:{}", String.format(TopicConstants.TOPIC_MPS_NOTIC, RedisCacheConstant.WX_USER_PRE + userInfo.getUserId()), wxMsg.toString());
                 mqttClient.sendMessage(String.format(TopicConstants.TOPIC_MPS_NOTIC, RedisCacheConstant.WX_USER_PRE + userInfo.getUserId()), wxMsg.toString(), 2, false);
 
-                // 2  被分享者 - 根据标志位筛选并添加到发送列表
+                //  设备的被分享者 - 根据标志位筛选并添加到发送列表
                 List<DevShare> shares = devShareService.queryConfirmedByDevId(dev.getDevId());
                 if (!CollectionUtils.isEmpty(shares)) {
                     for (DevShare share : shares) {
@@ -279,6 +282,7 @@ public class MqttSubHandle {
                 webMsg.put("msgType", "fall");
                 webMsg.put("devName", devName.toString());
                 webMsg.put("tenantName", tenantName);
+                webMsg.put("eventListId", eventListVO.getEventListId());
 
                 // 查询当前需要发送的userId
                 List<AdminUserInfo> adminUserInfos = adminUserService.queryByTenantIdAndUserType(dev.getTenantId(), null);
@@ -305,8 +309,8 @@ public class MqttSubHandle {
                     }
                 }
             }
-            //调用 发送短信和微信公众号通知 功能
-            sendMesAndWxService(sendList, devName, devId);
+            //3.调用 发送短信和微信公众号通知 功能
+//            sendMesAndWxService(sendList, devName, devId);
         }
     }