Browse Source

1.添加未读反馈几口

yuanliang 1 year ago
parent
commit
18c6269a48

+ 37 - 0
cooleshow-app/src/main/java/com/yonge/cooleshow/student/controller/SysSuggestionV2Controller.java

@@ -8,12 +8,18 @@ import com.microsvc.toolkit.common.response.template.R;
 import com.yonge.cooleshow.admin.io.request.SysSuggestionVo;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.biz.dal.entity.SysMessageConfig;
 import com.yonge.cooleshow.biz.dal.entity.SysSuggestionV2;
 import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageSendMode;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.service.SysMessageConfigService;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.service.SysSuggestionV2Service;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
+import com.yonge.cooleshow.biz.dal.wrapper.SysMessageWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.SysSuggestionWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import io.swagger.annotations.Api;
@@ -22,6 +28,7 @@ import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
+import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -60,6 +67,12 @@ public class SysSuggestionV2Controller extends BaseController {
     @Autowired
     private StudentService studentService;
 
+    @Autowired
+    private SysMessageService sysMessageService;
+
+    @Autowired
+    private SysMessageConfigService sysMessageConfigService;
+
     /**
      * 查询分页
      *
@@ -128,4 +141,28 @@ public class SysSuggestionV2Controller extends BaseController {
 
         return R.from(sysSuggestionService.add(JSON.parseObject(suggestion.jsonString(), SysSuggestionV2.class)));
     }
+
+    @ApiOperation(value = "未读消息统计", notes = "统计当前用户推送未读消息数")
+    @PreAuthorize("@pcs.hasPermissions('sysSuggestionV2/suggestMessageUnread')")
+    @GetMapping("/suggestMessageUnread")
+    public R<List<SysMessageWrapper.MessageUnreadStat>> suggestMessageUnread() {
+        com.yonge.cooleshow.auth.api.entity.SysUser userInfo = sysUserFeignService.queryUserInfo();
+
+        SysMessageConfig one = sysMessageConfigService.queryByType(MessageTypeEnum.SYS_SUGGEST_FEEDBACK_STUDENT.getCode());
+
+        // 未读消息统计条件
+        SysMessageWrapper.SysMessageQuery query = SysMessageWrapper.SysMessageQuery.builder()
+                .userId(userInfo.getId())
+                .clientType(ClientEnum.STUDENT)
+                .readStatus(false)
+                .type(MessageSendMode.PUSH)
+                .sendTime(DateTime.now().toDate())
+                .messageConfigId(one.getId())
+                .build();
+
+        // 统计未读消息数
+        List<SysMessageWrapper.MessageUnreadStat> unreadStats = sysMessageService.userMessageUnreadStat(query);
+
+        return R.from(unreadStats);
+    }
 }

+ 49 - 8
cooleshow-app/src/main/java/com/yonge/cooleshow/teacher/controller/SysSuggestionV2Controller.java

@@ -7,22 +7,29 @@ import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.microsvc.toolkit.common.response.template.R;
 import com.yonge.cooleshow.admin.io.request.SysSuggestionVo;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
-import com.yonge.cooleshow.biz.dal.entity.Student;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.SysMessageConfig;
 import com.yonge.cooleshow.biz.dal.entity.SysSuggestionV2;
-import com.yonge.cooleshow.biz.dal.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
-import com.yonge.cooleshow.biz.dal.service.StudentService;
+import com.yonge.cooleshow.biz.dal.enums.MessageSendMode;
+import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.service.SysMessageConfigService;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.biz.dal.service.SysSuggestionV2Service;
 import com.yonge.cooleshow.biz.dal.service.SysUserService;
+import com.yonge.cooleshow.biz.dal.wrapper.SysMessageWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.SysSuggestionWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.joda.time.DateTime;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
@@ -51,6 +58,12 @@ public class SysSuggestionV2Controller extends BaseController {
     @Resource
     private SysUserFeignService sysUserFeignService;
 
+    @Autowired
+    private SysMessageService sysMessageService;
+
+    @Autowired
+    private SysMessageConfigService sysMessageConfigService;
+
     /**
      * 查询分页
      *
@@ -61,7 +74,7 @@ public class SysSuggestionV2Controller extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('sysSuggestionV2/page')")
     @PostMapping("/page")
     public R<PageInfo<SysSuggestionWrapper.SysSuggestion>> page(@RequestBody SysSuggestionWrapper.SysSuggestionQuery query) {
-        com.yonge.cooleshow.auth.api.entity.SysUser sysUser = sysUserFeignService.queryUserInfo();
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
         query.setUserId(sysUser.getId());
         query.setClientType(ClientEnum.TEACHER);
 
@@ -79,11 +92,11 @@ public class SysSuggestionV2Controller extends BaseController {
             if (!handUserIdList.isEmpty()) {
                 userIdList.addAll(handUserIdList);
             }
-            Map<Long, SysUser> userIdMap = sysUserService.getMapByIds(userIdList);
+            Map<Long, com.yonge.cooleshow.biz.dal.entity.SysUser> userIdMap = sysUserService.getMapByIds(userIdList);
 
             records.forEach(next -> {
-                next.setNickname(userIdMap.getOrDefault(next.getUserId(), new SysUser()).getUsername());
-                next.setHandleName(userIdMap.getOrDefault(next.getHandleBy(), new SysUser()).getUsername());
+                next.setNickname(userIdMap.getOrDefault(next.getUserId(), new com.yonge.cooleshow.biz.dal.entity.SysUser()).getUsername());
+                next.setHandleName(userIdMap.getOrDefault(next.getHandleBy(), new com.yonge.cooleshow.biz.dal.entity.SysUser()).getUsername());
             });
         }
         return R.from(QueryInfo.pageInfo(pages, records));
@@ -103,9 +116,37 @@ public class SysSuggestionV2Controller extends BaseController {
                           @RequestHeader(name = "user-agent") String userAgent) {
         com.yonge.cooleshow.auth.api.entity.SysUser sysUser = sysUserFeignService.queryUserInfo();
         suggestion.setUserId(sysUser.getId());
-        suggestion.setUserAgent(userAgent);
+        String userAgent1 = suggestion.getUserAgent();
+        if(StringUtils.isEmpty(userAgent1)){
+            userAgent1 = userAgent;
+        }
+        suggestion.setUserAgent(userAgent1);
         suggestion.setClientType(ClientEnum.TEACHER);
 
         return R.from(sysSuggestionService.add(JSON.parseObject(suggestion.jsonString(), SysSuggestionV2.class)));
     }
+
+    @ApiOperation(value = "未读消息统计", notes = "统计当前用户推送未读消息数")
+    @PreAuthorize("@pcs.hasPermissions('sysSuggestionV2/suggestMessageUnread')")
+    @GetMapping("/suggestMessageUnread")
+    public R<List<SysMessageWrapper.MessageUnreadStat>> suggestMessageUnread() {
+        SysUser userInfo = sysUserFeignService.queryUserInfo();
+
+        SysMessageConfig one = sysMessageConfigService.queryByType(MessageTypeEnum.SYS_SUGGEST_FEEDBACK_TEACHER.getCode());
+
+        // 未读消息统计条件
+        SysMessageWrapper.SysMessageQuery query = SysMessageWrapper.SysMessageQuery.builder()
+                .userId(userInfo.getId())
+                .clientType(ClientEnum.TEACHER)
+                .readStatus(false)
+                .type(MessageSendMode.PUSH)
+                .sendTime(DateTime.now().toDate())
+                .messageConfigId(one.getId())
+                .build();
+
+        // 统计未读消息数
+        List<SysMessageWrapper.MessageUnreadStat> unreadStats = sysMessageService.userMessageUnreadStat(query);
+
+        return R.from(unreadStats);
+    }
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/SysMessageDao.java

@@ -3,6 +3,7 @@ package com.yonge.cooleshow.biz.dal.dao;
 import java.util.List;
 import java.util.Map;
 
+import com.yonge.cooleshow.biz.dal.wrapper.SysMessageWrapper;
 import org.apache.ibatis.annotations.Param;
 
 import com.yonge.cooleshow.biz.dal.dto.SysMessageDto;
@@ -54,4 +55,6 @@ public interface SysMessageDao extends BaseDAO<Long, SysMessage> {
 	public int updateOneStatus(@Param("id") Long id, @Param("status") int status);
 
     String selectConfigUrl(String messageType);
+
+	List<SysMessageWrapper.MessageUnreadStat> selectMessageUnreadStat(SysMessageWrapper.SysMessageQuery query);
 }

+ 3 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/SysMessageService.java

@@ -9,6 +9,7 @@ import com.yonge.cooleshow.biz.dal.dto.SysMessageDto;
 import com.yonge.cooleshow.biz.dal.entity.SysMessage;
 import com.yonge.cooleshow.biz.dal.enums.MessageSendMode;
 import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
+import com.yonge.cooleshow.biz.dal.wrapper.SysMessageWrapper;
 import com.yonge.toolset.base.page.PageInfo;
 import com.yonge.toolset.base.page.QueryInfo;
 import com.yonge.cooleshow.common.entity.Mapper;
@@ -100,4 +101,6 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	String selectConfigUrl(String messageType,Object ...param);
 
 	String selectConfigUrlJumpType(String messageType, String jumpType, Object... param);
+
+	List<SysMessageWrapper.MessageUnreadStat> userMessageUnreadStat(SysMessageWrapper.SysMessageQuery query);
 }

+ 6 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMessageServiceImpl.java

@@ -13,6 +13,7 @@ import com.yonge.cooleshow.biz.dal.enums.MessageTypeEnum;
 import com.yonge.cooleshow.biz.dal.enums.SendStatusEnum;
 import com.yonge.cooleshow.biz.dal.service.SysMessageConfigService;
 import com.yonge.cooleshow.biz.dal.service.SysMessageService;
+import com.yonge.cooleshow.biz.dal.wrapper.SysMessageWrapper;
 import com.yonge.cooleshow.common.entity.Mapper;
 import com.yonge.cooleshow.common.redis.service.RedisCache;
 import com.yonge.toolset.base.exception.BizException;
@@ -414,4 +415,9 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
         }
 		return JSON.toJSONString(jumpUrlDto);
 	}
+
+	@Override
+	public List<SysMessageWrapper.MessageUnreadStat> userMessageUnreadStat(SysMessageWrapper.SysMessageQuery query) {
+		return sysMessageDao.selectMessageUnreadStat(query);
+	}
 }

+ 95 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/SysMessageWrapper.java

@@ -0,0 +1,95 @@
+package com.yonge.cooleshow.biz.dal.wrapper;
+
+import com.alibaba.fastjson.JSON;
+import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+import com.yonge.cooleshow.biz.dal.enums.MessageSendMode;
+import com.yonge.cooleshow.biz.dal.enums.SendStatusEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Optional;
+
+/**
+ * 系统消息表
+ * 2022-11-15 17:59:45
+ */
+public class SysMessageWrapper {
+
+    /**
+     * 消息查询条件
+     */
+    @Data
+    @Builder
+    @NoArgsConstructor
+    @AllArgsConstructor
+    public static class SysMessageQuery {
+
+        // 关键字匹配
+        private String keyword;
+
+        // 发送人编号
+        private Long userId;
+
+        // 用户类型
+        private ClientEnum clientType;
+
+        // 状态,0,待发送;1,发送中;2,发送完成
+        private SendStatusEnum status;
+
+        // 接收人编号
+        private String receiver;
+
+        // 标题
+        private String title;
+
+        // 消息类型;1,表示短信;2,表示邮件; 3,app推送消息
+        private MessageSendMode type;
+
+        // 客户端STUDENT,TEACHER,BACKEND,SCHOOL
+        private ClientEnum clientId;
+
+        // 0:未读,1:已读
+        private Boolean readStatus;
+
+        // 发送时间
+        private Date sendTime;
+
+        private Long messageConfigId;
+
+        public static SysMessageQuery from(String json) {
+            return JSON.parseObject(json, SysMessageQuery.class);
+        }
+
+        public String getKeyword() {
+            return Optional.ofNullable(keyword).filter(StringUtils::isNotBlank).orElse(null);
+        }
+
+        public String getReceiver() {
+            return Optional.ofNullable(receiver).filter(StringUtils::isNotBlank).orElse(null);
+        }
+
+        public String getTitle() {
+            return Optional.ofNullable(title).filter(StringUtils::isNotBlank).orElse(null);
+        }
+    }
+
+
+    @Data
+    @ApiModel("未读消息统计")
+    public static class MessageUnreadStat implements Serializable {
+
+        @ApiModelProperty("消息分组")
+        private String group;
+
+        @ApiModelProperty("未读消息数")
+        private Integer number;
+    }
+
+}

+ 31 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMessageMapper.xml

@@ -214,4 +214,35 @@
 	<select id="selectConfigUrl" resultType="java.lang.String" parameterType="java.lang.String">
 		SELECT url_ FROM sys_message_config WHERE message_type_=#{messageType}
 	</select>
+
+	<!--用户未读消息统计-->
+	<select id="selectMessageUnreadStat"
+			resultType="com.yonge.cooleshow.biz.dal.wrapper.SysMessageWrapper$MessageUnreadStat">
+		SELECT group_, COUNT(t.id_) AS number FROM sys_message t
+		<where>
+			t.group_ is not null
+			<if test="param.userId != null">
+				AND t.user_id_ = #{param.userId}
+			</if>
+			<if test="param.clientType != null">
+				AND t.client_type_ = #{param.clientType}
+			</if>
+			<if test="param.status != null">
+				AND t.status_ = #{param.status}
+			</if>
+			<if test="param.type != null">
+				AND t.type_ = #{param.type}
+			</if>
+			<if test="param.readStatus != null">
+				AND t.read_status_ = #{param.readStatus}
+			</if>
+			<if test="param.sendTime != null">
+				AND t.send_time_ &lt;= #{param.sendTime}
+			</if>
+			<if test="param.messageConfigId != null">
+				AND t.message_config_id_ = #{param.messageConfigId}
+			</if>
+		</where>
+		GROUP BY group_
+	</select>
 </mapper>