Parcourir la source

暂时屏蔽与手机验证码相关业务;手表会话功能增加日志

nelson il y a 5 mois
Parent
commit
dfcec9e717

+ 22 - 0
api-location/src/main/resources/application.properties

@@ -0,0 +1,22 @@
+# 服务端口
+server.port=3400
+# 项目名字
+spring.application.name=api-location
+# 服务默认环境
+spring.profiles.active=test
+# 请求最大大小
+spring.servlet.multipart.max-file-size=20MB
+spring.servlet.multipart.max-request-size=20MB
+# cloud 配置
+spring.config.import=consul:
+# consul 服务注册
+# 如需要查看 Web UI: http://localhost:8500/ui/
+spring.cloud.consul.host=127.0.0.1
+spring.cloud.consul.port=8500
+# discovery
+spring.cloud.consul.discovery.enabled=true
+spring.cloud.consul.discovery.prefer-ip-address=true
+# config
+spring.cloud.consul.config.enabled=true
+spring.cloud.consul.config.format=yaml
+spring.cloud.consul.config.data-key=data

+ 0 - 133
api-location/src/main/resources/application.yml

@@ -1,133 +0,0 @@
-# 基础配置
-server:
-    port: 3400
-
-spring:
-  # 数据源配置
-  datasource:
-    url: jdbc:mysql://106.75.230.4:13306/wa04?useUnicode=true&characterEncoding=utf-8&useSSL=false
-    driver-class-name: com.mysql.cj.jdbc.Driver
-    username: root
-    password: 9RKdJsEQKnjrni9R
-    type: com.alibaba.druid.pool.DruidDataSource
-    druid:
-      initial-size: 5
-      min-idle: 10
-      # 最大连接数
-      max-active: 20
-      # 获取连接时的最大等待时间
-      max-wait: 60000
-      # 一个连接在池中最小生存的时间,单位是毫秒
-      min-evictable-idle-time-millis: 300000
-      # 多久才进行一次检测需要关闭的空闲连接,单位是毫秒
-      time-between-eviction-runs-millis: 60000
-      # 复用 prepared-statement 对象,避免重复创建和销毁,减少数据库编译 sql 语句的开销
-      pool-prepared-statements: true
-      # 池中最大的 prepared-statement 数量
-      max-pool-prepared-statement-per-connection-size: 20
-      # 配置扩展插件:stat-监控统计,log4j-日志,wall-防火墙(防止sql注入),去掉后,监控界面的sql无法统计
-      filters: stat,wall
-      # 检测连接是否有效的 sql语句,为空时以下三个配置均无效
-      validation-query: select 1
-      # 申请连接时执行validation-query检测连接是否有效,默认true,开启后会降低性能
-      test-on-borrow: true
-      # 归还连接时执行validation-query检测连接是否有效,默认false,开启后会降低性能
-      test-on-return: true
-      # 申请连接时如果空闲时间大于time-between-eviction-runs-millis,执行validation-query检测连接是否有效,默认false,建议开启,不影响性能
-      test-while-idle: true
-      filter:
-        stat:
-          enabled: true
-          # 是否开启 慢sql 记录,默认false
-          log-slow-sql: true
-          # 慢 sql 的标准,默认 3000,单位:毫秒
-          slow-sql-millis: 5000
-          # 合并多个连接池的监控数据,默认false
-          merge-sql: false
-  # redis 配置
-  data:
-    redis:
-      repositories:
-        enabled: true
-      host: 106.75.230.4
-      port: 6379
-      password: sikey!Q@W#E456
-      timeout: 5000
-  # rabbitmq 配置
-  rabbitmq:
-    host: 106.75.230.4
-    port: 5672
-    username: wa04
-    password: wa04@skey123
-    virtual-host: /
-    connection-timeout: 5000
-    requested-heartbeat: 60
-    publisher-confirm-type: correlated
-    messaging:
-      queue-name: publish_queue
-      exchange-name: wa04_exchange.topic
-      routing-key: publish.#
-    # 重试机制
-    listener:
-      simple:
-        retry:
-          enabled: true
-          max-attempts: 3
-          initial-interval: 1000
-          max-interval: 10000
-          multiplier: 2
-
-  application:
-       name: api-location
-  profiles:
-       active: test  # 默认激活测试环境
-  config:
-       import: "consul:"
-  # 文件上传限制
-  servlet:
-    multipart:
-      max-file-size: 20MB
-      max-request-size: 20MB
-  # Consul 集成配置
-  cloud:
-    consul:
-      host: 127.0.0.1
-      port: 8500
-      # discovery
-      discovery:
-        enabled: true
-        prefer-ip-address: true
-        instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
-        tags:
-          - env=${spring.profiles.active}  # 动态注入环境标签
-          - version=1.0
-      # config
-      config:
-        enabled: true
-        format: YAML  # 必须大写
-        data-key: application  # Consul 中的键名
-
-# 日志配置
-logging:
-  config: classpath:logback-spring-test.xml
-  file:
-    path: /var/log/sikey
-  #level:
-  #org.springframework.amqp: DEBUG
-  #org.springframework.cloud: DEBUG
-
-management:
-  endpoints:
-    web:
-      exposure:
-        include: "*"
-
-# mybatis 驼峰命名映射
-mybatis:
-  configuration:
-    map-underscore-to-camel-case: true
-
-# nats connection config
-nats:
-  addr: "nats://127.0.0.1:4222"
-  subject: "clients.message" # 消息通道

+ 1 - 1
api-message/src/main/resources/application.properties

@@ -3,7 +3,7 @@ server.port=3300
 # 项目名字
 spring.application.name=api-message
 # 服务默认环境
-spring.profiles.active=dev
+spring.profiles.active=test
 # 请求最大大小
 spring.servlet.multipart.max-file-size=20MB
 spring.servlet.multipart.max-request-size=20MB

+ 6 - 4
api-user/src/main/java/com/sikey/wa04/api/user/client/rest/UserController.java

@@ -33,21 +33,23 @@ public class UserController {
 
     @PostMapping("/sign-in")
     public SignInResponse signIn(@Valid @RequestBody SignInRequest request) {
-        if (!request.isEmailMode()) {
+        // TODO 暂时屏蔽,待新的短信审核通过后再放开
+        /*if (!request.isEmailMode()) {
             if (!ucloudService.validation(request.phoneNumber(), request.areaCode(), request.captcha())) {
                 throw Errors.VERIFICATION_CODE_IS_INCORRECT.getException();
             }
-        }
+        }*/
         return authenticateService.signIn(request);
     }
 
     @PostMapping("/sign-up")
     public void signUp(@Valid @RequestBody SignUpRequest request) {
-        if (!request.isEmailMode()) {
+        // TODO 暂时屏蔽,待新的短信审核通过后再放开
+        /*if (!request.isEmailMode()) {
             if (!ucloudService.validation(request.phoneNumber(), request.areaCode(), request.captcha())) {
                 throw Errors.VERIFICATION_CODE_IS_INCORRECT.getException();
             }
-        }
+        }*/
         authenticateService.signUp(request);
     }
 

+ 1 - 1
api-websocket/src/main/resources/application.properties

@@ -3,7 +3,7 @@ server.port=5200
 # \u9879\u76EE\u540D\u5B57
 spring.application.name=api-websocket
 # \u670D\u52A1\u9ED8\u8BA4\u73AF\u5883
-spring.profiles.active=dev
+spring.profiles.active=test
 # \u8BF7\u6C42\u6700\u5927\u5927\u5C0F
 spring.servlet.multipart.max-file-size=20MB
 spring.servlet.multipart.max-request-size=20MB

+ 0 - 1
app-gateway/src/main/resources/application.yml

@@ -21,7 +21,6 @@ spring:
                 enabled: true
                 prefer-ip-address: true
                 instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
-                tags: env=dev,version=1.0
             # config
             config:
                 enabled: true

+ 2 - 2
business-application/src/main/java/com/sikey/wa04/business/application/service/location/LocationService.java

@@ -211,7 +211,7 @@ public class LocationService {
 
         // 通知监护人
         List<ChildRef> childRefs = childQueryAdapter.queryChildRefByChildId(location.getChildId().getId());
-        childRefs.stream().filter(cd -> isFamilyMembers(IdentityEnum.valueOf(cd.getIdentity()))).forEach(cd -> {
+        childRefs.stream().filter(cd -> Objects.nonNull(cd.getIdentity()) && isFamilyMembers(IdentityEnum.valueOf(cd.getIdentity()))).forEach(cd -> {
             NatsPubLocationMessageRequest natsPubLocationMessageRequest = new NatsPubLocationMessageRequest(location.getChildId().getId(), location.getAddress().getLongitude(), location.getAddress().getLatitude(), location.getAddress().getRadius(), location.getType().getValue(), location.getPositionTime().toEpochMilli(), null, null, cd.getUserId(), cd.getChildId());
             NatsPubMessageRequest natsPubMessageRequest = new NatsPubMessageRequest(requestId(), MessageTypeEnum.MESSAGE_TYPE_LOCATION.getValue(), JSONUtil.toJsonStr(natsPubLocationMessageRequest));
             // 创建发送通知消息
@@ -288,7 +288,7 @@ public class LocationService {
 
                 // 通知监护人
                 List<ChildRef> childRefs = childQueryAdapter.queryChildRefByChildId(cid);
-                childRefs.stream().filter(cd -> isFamilyMembers(IdentityEnum.valueOf(cd.getIdentity()))).forEach(cd -> {
+                childRefs.stream().filter(cd -> Objects.nonNull(cd.getIdentity()) && isFamilyMembers(IdentityEnum.valueOf(cd.getIdentity()))).forEach(cd -> {
                     String userId = cd.getUserId();
                     // 处理家庭成员的情况
                     String key = String.format("clients.seq.%s", cd.getUserId());

+ 12 - 12
business-application/src/main/java/com/sikey/wa04/business/application/service/message/HistoryMessageService.java

@@ -13,10 +13,8 @@ import com.sikey.wa04.business.infrastructure.dto.request.messaging.HistoryUnrea
 import com.sikey.wa04.business.infrastructure.dto.response.messaging.HistoryMessageSessionResponse;
 import com.sikey.wa04.business.infrastructure.dto.response.messaging.HistoryUnreadMessageResponse;
 import com.sikey.wa04.business.infrastructure.repository.ContactRepository;
-import com.sikey.wa04.common.enums.ContactRole;
 import com.sikey.wa04.common.enums.GroupMemberRole;
 import com.sikey.wa04.common.enums.UserType;
-import com.sikey.wa04.common.exception.errors.Errors;
 import com.sikey.wa04.common.interceptor.CurrentRequestUser;
 import com.sikey.wa04.common.utils.ObjectMapperUtil;
 import jakarta.annotation.Resource;
@@ -24,10 +22,7 @@ import jakarta.transaction.Transactional;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 @Slf4j
 @Service
@@ -178,13 +173,15 @@ public class HistoryMessageService {
      * @throws Exception error
      */
     private HistoryMessageSessionResponse.Session loadGroupSession(UserId userId, Child child) throws Exception {
-
+        log.info("[加载群聊会话]入参:用户id:{},儿童:{}", userId, child);
         // Query child contacts
         List<ContactModel> contacts = contactRepository.findByChildId(child.getId());
+        log.info("[加载群聊会话]联系人:{}", contacts);
 
         // Query group
         Group group = groupAdapter.findByChildId(new ChildId(child.getId()));
         group.setMembers(groupMemberAdapter.findMembers(group.getId()));
+        log.info("[加载群聊会话]群组:{}", group);
 
         HistoryMessageSessionResponse.Session groupSession = new HistoryMessageSessionResponse.Session()
                 .setIsGroup(true)
@@ -217,12 +214,15 @@ public class HistoryMessageService {
                 sessionMember.setAvatar(child.getAvatar());
             } else {
                 // Find oneself in contacts
-                ContactModel oneself = contacts.stream()
+                Optional<ContactModel> oneself = contacts.stream()
                         .filter(ct -> ct.getRefId().equals(groupMember.getRefId()))
-                        .findFirst()
-                        .orElseThrow();
-                sessionMember.setName(oneself.getRemarkName());
-                sessionMember.setAvatar(oneself.getRemarkAvatar());
+                        .findFirst();
+                if (oneself.isPresent()) {
+                    ContactModel contactModel = oneself.get();
+                    sessionMember.setName(contactModel.getRemarkName());
+                    sessionMember.setAvatar(contactModel.getRemarkAvatar());
+                }
+
             }
 
             groupMembers.add(sessionMember);

+ 3 - 2
business-application/src/main/java/com/sikey/wa04/business/application/service/user/UserService.java

@@ -66,7 +66,8 @@ public class UserService extends BaseService {
      * @throws Exception 异常
      */
     public void retrievePassword(RetrievePasswordRequest request) throws Exception {
-        if (ucloudService.validation(request.phoneNumber(), request.areaCode(), request.captcha())) {
+        // TODO 暂时屏蔽,待新的短信审核通过后再放开
+        if (true) {// ucloudService.validation(request.phoneNumber(), request.areaCode(), request.captcha())
             UserModel userModel = userRepository.findByPhoneNumberAndAreaCode(request.phoneNumber(), request.areaCode());
             if (userModel == null) {
                 throw Errors.USER_NOT_FOUND.getException();
@@ -75,7 +76,7 @@ public class UserService extends BaseService {
             userRepository.save(userModel);
             log.info("用户 {} 找回密码成功", userModel.getId());
         } else {
-            throw new BusinessException(HttpStatus.BAD_REQUEST.value(), "CAPTCHA_ERROR", "验证码错误");
+            throw new BusinessException(HttpStatus.BAD_REQUEST.value(), "验证码错误", "验证码错误");
         }
     }
 

+ 9 - 3
business-infrastructure/src/main/java/com/sikey/wa04/business/infrastructure/adapter/dao/MessageAdapterImpl.java

@@ -70,8 +70,11 @@ public class MessageAdapterImpl implements MessageAdapter {
         } else {
             messageRecvModels = messageRecvRepository.findByRecvIdAndSendId(receiverId.getId(), chatSessionId.getId());
         }
-        return (int) messageRecvModels.stream().filter(model ->
-                model.getStatus().equals(MessageStatus.RECEIVED_ACK.getValue())).count();
+        int unreadCount = (int) messageRecvModels.stream().filter(model ->
+                model.getStatus().equals(MessageStatus.RECEIVED_ACK.getValue()) || model.getStatus().equals(MessageStatus.OFFLINE_QUEUE.getValue())
+                        || model.getStatus().equals(MessageStatus.WAIT_ACK.getValue())).count();
+        log.info("[未读消息]消息:{};数量:{}", messageRecvModels, unreadCount);
+        return unreadCount;
     }
 
     @Override
@@ -84,10 +87,13 @@ public class MessageAdapterImpl implements MessageAdapter {
         }
 
         List<Long> msgIds = messageRecvModels.stream()
-                .filter(model -> model.getStatus().equals(MessageStatus.RECEIVED_ACK.getValue()))
+                .filter(model -> model.getStatus().equals(MessageStatus.RECEIVED_ACK.getValue()) ||
+                        model.getStatus().equals(MessageStatus.OFFLINE_QUEUE.getValue())
+                        || model.getStatus().equals(MessageStatus.WAIT_ACK.getValue()))
                 .map(MessageRecvModel::getMsgId)
                 .distinct()
                 .toList();
+        log.info("[未读消息]findUnreadMessages消息:{}", msgIds);
         if (msgIds.isEmpty()) {
             return List.of();
         }

+ 0 - 2
business-infrastructure/src/main/java/com/sikey/wa04/business/infrastructure/dto/model/MapTrajectoryPoiModel.java

@@ -23,12 +23,10 @@ public class MapTrajectoryPoiModel extends BaseModel {
     private Long trajectoryId;
 
     @Size(max = 125)
-    @NotNull
     @Column(name = "`desc`", nullable = false, length = 125)
     private String desc;
 
     @Size(max = 125)
-    @NotNull
     @Column(name = "poi", nullable = false, length = 125)
     private String poi;
 

+ 1 - 1
business-infrastructure/src/main/java/com/sikey/wa04/business/infrastructure/dto/model/MessageRecvModel.java

@@ -50,7 +50,7 @@ public class MessageRecvModel extends BaseModel {
 
     @Column(name = "content")
     @JdbcTypeCode(SqlTypes.JSON)
-    private JSON content;
+    private Map<String, Object> content;
 
     @NotNull
     @ColumnDefault("0")