Browse Source

Merge branch 'feature/1221-suggest' into develop-new

# Conflicts:
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/SysMessageServiceImpl.java
#	cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/SysMessageWrapper.java
yuanliang 1 year ago
parent
commit
f689545022

+ 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);
 }

+ 2 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/SysSuggestionType.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -21,7 +22,7 @@ import java.util.Date;
 public class SysSuggestionType implements Serializable {
 
     @ApiModelProperty("编号")
-    @TableId(value = "id_")
+    @TableId(value = "id_", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("名称")

+ 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

@@ -16,6 +16,7 @@ import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.service.SysMessageConfigService;
 import com.yonge.cooleshow.biz.dal.service.SysMessageService;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
+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;
@@ -431,4 +432,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);
+	}
 }

+ 18 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/SysMessageWrapper.java

@@ -3,6 +3,8 @@ package com.yonge.cooleshow.biz.dal.wrapper;
 import com.alibaba.fastjson.JSON;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.yonge.cooleshow.biz.dal.enums.ClientEnum;
+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;
@@ -11,6 +13,7 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
 import java.util.Date;
 
 /**
@@ -39,13 +42,13 @@ public class SysMessageWrapper {
         private ClientEnum clientId;
 
         @ApiModelProperty(value = "状态,0,待发送;1,发送中;2,发送完成 ")
-        private Integer status;
+        private SendStatusEnum status;
 
         @ApiModelProperty(value = "接收人编号")
         private String receiver;
 
         @ApiModelProperty(value = "消息类型;1,表示短信;2,表示邮件; 3,app推送消息",required = false)
-        private Integer type;
+        private MessageSendMode type;
 
         @ApiModelProperty("消息组 ")
         private String group;
@@ -62,6 +65,8 @@ public class SysMessageWrapper {
         @ApiModelProperty("发送结束时间")
         private Date endTime;
 
+        private Long messageConfigId;
+
         public String jsonString() {
             return JSON.toJSONString(this);
         }
@@ -143,4 +148,15 @@ public class SysMessageWrapper {
         }
     }
 
+    @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

@@ -291,4 +291,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>