Explorar o código

Merge branch 'wanghaicheng' of lift-manager/lift-server into develop

wanghaicheng %!s(int64=5) %!d(string=hai) anos
pai
achega
a6b2bab309

+ 4 - 1
lift-push/pom.xml

@@ -35,7 +35,10 @@
             <groupId>cn.com.xwy</groupId>
             <artifactId>xwy-spring-boot</artifactId>
         </dependency>
-
+<!--        <dependency>-->
+<!--            <groupId>cn.com.xwy</groupId>-->
+<!--            <artifactId>xwy-cloud-dependencies</artifactId>-->
+<!--        </dependency>-->
     </dependencies>
 
     <build>

+ 2 - 0
lift-push/src/main/java/cn/com/ty/lift/push/PushApplication.java

@@ -3,6 +3,7 @@ package cn.com.ty.lift.push;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.data.redis.repository.configuration.EnableRedisRepositories;
 import org.springframework.jms.annotation.EnableJms;
 import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
@@ -14,6 +15,7 @@ import org.springframework.session.data.redis.config.annotation.web.http.EnableR
  * @since 2020/4/13
  */
 @EnableJms
+@EnableFeignClients
 @MapperScan("cn.com.ty.**.mapper")
 @SpringBootApplication
 @EnableRedisHttpSession

+ 50 - 0
lift-push/src/main/java/cn/com/ty/lift/push/app/PushConsumer.java

@@ -4,8 +4,13 @@ import cn.com.ty.lift.common.constants.WebSocketConstants;
 import cn.com.ty.lift.common.model.PushMessage;
 import cn.com.ty.lift.common.model.TimeyMessage;
 import cn.com.ty.lift.common.utils.ValuePool;
+import cn.com.ty.lift.push.message.dao.entity.TimeMessage;
+import cn.com.ty.lift.push.message.dao.entity.UserAccount;
+import cn.com.ty.lift.push.message.service.TimeMessageService;
+import cn.com.ty.lift.push.message.service.UserAccountService;
 import cn.com.ty.lift.push.websocket.handler.TimeyMessageHandler;
 import cn.com.ty.lift.push.websocket.service.TimeyMessageService;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.jms.annotation.JmsListener;
@@ -13,6 +18,7 @@ import org.springframework.jms.core.JmsMessagingTemplate;
 import org.springframework.messaging.support.GenericMessage;
 import org.springframework.stereotype.Component;
 
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -30,6 +36,8 @@ public class PushConsumer {
     private XingePush xingePush;
     private JmsMessagingTemplate jmsMessagingTemplate;
     private TimeyMessageService timeyMessageService;
+    private final UserAccountService userAccountService;
+    private final TimeMessageService timeMessageService;
 
     private class Processor {
         private String destination;
@@ -87,24 +95,32 @@ public class PushConsumer {
 
     @JmsListener(destination = ValuePool.PUSH_QUEUE_ANDROID_TOKEN)
     public void listenAndroidTokenQueue(PushMessage pushMessage) {
+        saveMessage(pushMessage);
+
         log.info("listen {} receive message:{}", ValuePool.PUSH_QUEUE_ANDROID_TOKEN, pushMessage);
         process(ValuePool.PUSH_QUEUE_ANDROID_TOKEN, pushMessage);
     }
 
     @JmsListener(destination = ValuePool.PUSH_QUEUE_ANDROID_ALL)
     public void listenAndroidAllQueue(PushMessage pushMessage) {
+        saveMessage(pushMessage);
+
         log.info("listen {} receive message:{}", ValuePool.PUSH_QUEUE_ANDROID_ALL, pushMessage);
         process(ValuePool.PUSH_QUEUE_ANDROID_ALL, pushMessage);
     }
 
     @JmsListener(destination = ValuePool.PUSH_QUEUE_IOS_TOKEN)
     public void listenIosTokenQueue(PushMessage pushMessage) {
+        saveMessage(pushMessage);
+
         log.info("listen {} receive message:{}", ValuePool.PUSH_QUEUE_IOS_TOKEN, pushMessage);
         process(ValuePool.PUSH_QUEUE_IOS_TOKEN, pushMessage);
     }
 
     @JmsListener(destination = ValuePool.PUSH_QUEUE_IOS_ALL)
     public void listenIosAllQueue(PushMessage pushMessage) {
+        saveMessage(pushMessage);
+
         log.info("listen {} receive message:{}", ValuePool.PUSH_QUEUE_IOS_ALL, pushMessage);
         process(ValuePool.PUSH_QUEUE_IOS_ALL, pushMessage);
     }
@@ -115,4 +131,38 @@ public class PushConsumer {
         TimeyMessageHandler timeyMessageHandler = new TimeyMessageHandler(timeyMessageService);
         timeyMessageHandler.saveAndPushMessageToUsers(timeyMessageList);
     }
+
+    /**
+     * 将推送消息存储到数据库
+     *
+     * @param pushMessage 要推送的消息
+     */
+    private void saveMessage(PushMessage pushMessage) {
+        List<String> toList = pushMessage.getToList();
+        List<UserAccount> userAccounts = userAccountService.list(Wrappers.<UserAccount>query().in("device_flag", toList));
+        List<TimeMessage> timeMessages = new ArrayList<>();
+        for (UserAccount userAccount : userAccounts) {
+            TimeMessage timeMessage = new TimeMessage();
+            timeMessage.setUserId(userAccount.getUserId());
+            timeMessage.setContent(pushMessage.getContent());
+            switch (pushMessage.getTitle()) {
+                case "团队消息":
+                    timeMessage.setType(1);
+                    break;
+                case "保养消息":
+                    timeMessage.setType(2);
+                    break;
+                case "急修消息":
+                    timeMessage.setType(3);
+                    break;
+                case "工作消息":
+                    timeMessage.setType(4);
+                    break;
+            }
+            timeMessage.setDeviceModel(userAccount.getDeviceModel());
+            timeMessage.setUserId(10000L);
+            timeMessage.setCreateTime(LocalDateTime.now());
+        }
+        timeMessageService.saveBatch(timeMessages);
+    }
 }

+ 10 - 0
lift-push/src/main/java/cn/com/ty/lift/push/conf/SystemConfiguration.java

@@ -6,6 +6,7 @@ import cn.com.ty.lift.common.utils.ValuePool;
 import cn.com.ty.lift.push.app.XingePush;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
@@ -102,6 +103,15 @@ public class SystemConfiguration {
         return sqlIllegalInterceptor;
     }
 
+    /**
+     * 分页插件
+     * @return 分页插件
+     */
+    @Bean
+    public PaginationInterceptor paginationInterceptor() {
+        return new PaginationInterceptor();
+    }
+
     @Bean
     public Queue androidTokenQueue() {
         return new ActiveMQQueue(ValuePool.PUSH_QUEUE_ANDROID_TOKEN);

+ 45 - 0
lift-push/src/main/java/cn/com/ty/lift/push/message/controller/TimeMessageController.java

@@ -0,0 +1,45 @@
+package cn.com.ty.lift.push.message.controller;
+
+import cn.com.ty.lift.push.message.dao.entity.TimeMessage;
+import cn.com.ty.lift.push.message.object.MessageBO;
+import cn.com.ty.lift.push.message.object.MessageVo;
+import cn.com.ty.lift.push.message.service.TimeMessageService;
+import cn.com.xwy.boot.web.dto.RestResponse;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("message")
+public class TimeMessageController {
+    private final TimeMessageService timeMessageService;
+
+    @PostMapping("list")
+    public RestResponse list(@RequestBody MessageVo messageVo) {
+        IPage<TimeMessage> page = new Page<>(messageVo.getPageNum(), messageVo.getPageSize());
+        IPage<TimeMessage> result = timeMessageService.page(page, Wrappers.<TimeMessage>query()
+                .eq(messageVo.getType() != null, "type", messageVo.getType())
+                .orderByAsc("view_flag", "create_time"));
+        MessageBO messageBO = MessageBO.pageCastMessageBo(result);
+        messageBO.setReadCount(timeMessageService.count(Wrappers.<TimeMessage>query()
+                .eq("view_flag", 1)
+                .eq("type", messageVo.getType())));
+        messageBO.setUnreadCount(timeMessageService.count(Wrappers.<TimeMessage>query()
+                .eq("view_flag", 0)
+                .eq("type", messageVo.getType())));
+        return RestResponse.success(messageBO);
+    }
+
+    @PostMapping
+    public RestResponse message(@RequestBody MessageVo messageVo) {
+        TimeMessage byId = timeMessageService.getById(messageVo.getId());
+        byId.setViewFlag(1);
+        return RestResponse.success(byId);
+    }
+}

+ 31 - 0
lift-push/src/main/java/cn/com/ty/lift/push/message/dao/entity/TimeMessage.java

@@ -0,0 +1,31 @@
+package cn.com.ty.lift.push.message.dao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 实时消息推送记录表
+ */
+@Data
+public class TimeMessage {
+    @TableId(value = "id", type = IdType.ID_WORKER)
+    private Long id;
+    @TableField("user_id")
+    private Long userId;
+    @TableField("content")
+    private String content;
+    @TableField("type")
+    private Integer type;
+    @TableField("view_flag")
+    private Integer viewFlag;
+    @TableField("device_model")
+    private Integer deviceModel;
+    @TableField("create_user_id")
+    private Long createUserId;
+    @TableField("create_time")
+    private LocalDateTime createTime;
+}

+ 58 - 0
lift-push/src/main/java/cn/com/ty/lift/push/message/dao/entity/UserAccount.java

@@ -0,0 +1,58 @@
+package cn.com.ty.lift.push.message.dao.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * 实体类 - 表:user_account
+ */
+@Data
+public class UserAccount {
+    @TableId(value = "user_id", type = IdType.ID_WORKER)
+    private Long userId;
+    @TableId("type")
+    private Integer type;
+    @TableId("account")
+    private String account;
+    @TableField("password")
+    private String password;
+    @TableField("salt")
+    private String salt;
+    @TableField("mobile")
+    private String mobile;
+    @TableField("wechat_open_id")
+    private String wechatOpenId;
+    @TableField("applet_open_id")
+    private String appletOpenId;
+    @TableField("email")
+    private String email;
+    @TableField("other_account")
+    private String otherAccount;
+    @TableField("other_account2")
+    private String otherAccount2;
+    @TableField("status")
+    private int status;
+    @TableField("remarks")
+    private String remarks;
+    @TableField("create_date")
+    private LocalDateTime createDate;
+    /**
+     * 设备类型
+     */
+    @TableField("device_model")
+    private Integer deviceModel;
+    /**
+     * 设备标识
+     */
+    @TableField("device_flag")
+    private String deviceFlag;
+    @TableField("delete_flag")
+    private int deleteFlag;
+    @TableField("expert_flag")
+    private int expertFlag;
+
+}

+ 7 - 0
lift-push/src/main/java/cn/com/ty/lift/push/message/dao/mapper/TimeMessageMapper.java

@@ -0,0 +1,7 @@
+package cn.com.ty.lift.push.message.dao.mapper;
+
+import cn.com.ty.lift.push.message.dao.entity.TimeMessage;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface TimeMessageMapper extends BaseMapper<TimeMessage> {
+}

+ 12 - 0
lift-push/src/main/java/cn/com/ty/lift/push/message/dao/mapper/UserAccountMapper.java

@@ -0,0 +1,12 @@
+package cn.com.ty.lift.push.message.dao.mapper;
+
+import cn.com.ty.lift.push.message.dao.entity.UserAccount;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+public interface UserAccountMapper extends BaseMapper<UserAccount> {
+    @Select("select user_id from user_account where device_flag in (${deviceFlags})")
+    List<Long> selectUserIdsByDeviceFlags(String deviceFlags);
+}

+ 24 - 0
lift-push/src/main/java/cn/com/ty/lift/push/message/object/MessageBO.java

@@ -0,0 +1,24 @@
+package cn.com.ty.lift.push.message.object;
+
+import cn.com.ty.lift.push.message.dao.entity.TimeMessage;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class MessageBO extends Page<TimeMessage> implements IPage<TimeMessage> {
+    private Integer readCount;
+    private Integer unreadCount;
+
+    public static MessageBO pageCastMessageBo(IPage<TimeMessage> page) {
+        MessageBO messageBO = new MessageBO();
+        messageBO.setRecords(page.getRecords());
+        messageBO.setCurrent(page.getCurrent());
+        messageBO.setPages(page.getPages());
+        messageBO.setSize(page.getSize());
+        messageBO.setTotal(page.getTotal());
+        return messageBO;
+    }
+}

+ 12 - 0
lift-push/src/main/java/cn/com/ty/lift/push/message/object/MessageVo.java

@@ -0,0 +1,12 @@
+package cn.com.ty.lift.push.message.object;
+
+import cn.com.ty.lift.push.message.dao.entity.TimeMessage;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class MessageVo extends TimeMessage {
+    private long pageNum = 1;
+    private long pageSize = 10;
+}

+ 10 - 0
lift-push/src/main/java/cn/com/ty/lift/push/message/service/TimeMessageService.java

@@ -0,0 +1,10 @@
+package cn.com.ty.lift.push.message.service;
+
+import cn.com.ty.lift.push.message.dao.entity.TimeMessage;
+import cn.com.ty.lift.push.message.dao.mapper.TimeMessageMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TimeMessageService extends ServiceImpl<TimeMessageMapper, TimeMessage> {
+}

+ 10 - 0
lift-push/src/main/java/cn/com/ty/lift/push/message/service/UserAccountService.java

@@ -0,0 +1,10 @@
+package cn.com.ty.lift.push.message.service;
+
+import cn.com.ty.lift.push.message.dao.entity.UserAccount;
+import cn.com.ty.lift.push.message.dao.mapper.UserAccountMapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service
+public class UserAccountService extends ServiceImpl<UserAccountMapper, UserAccount> {
+}

+ 24 - 0
lift-push/src/main/resources/bootstrap.yml

@@ -0,0 +1,24 @@
+spring:
+  cloud:
+    config:
+      fail-fast: true
+      discovery:
+        service-id: lift-config-server
+        enabled: true
+      name: portal
+      profile: ${spring.profiles.active}
+      failFast: true
+      retry:
+        multipliter: 1000
+        initial-interval: 1.2
+        max-interval: 2000
+        max-attempts: 6
+eureka:
+  instance:
+    prefer-ip-address: true
+    lease-renewal-interval-in-seconds: 5
+    lease-expiration-duration-in-seconds: 20
+  client:
+    service-url:
+      defaultZone: http://172.16.24.142:10225/eureka/
+