Browse Source

add:app消息通知

liujunchi 2 years ago
parent
commit
9acc58b04d

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

@@ -41,7 +41,7 @@ public interface SysMessageDao extends BaseDAO<Long, SysMessage> {
 	 * @param userId
 	 * @return
 	 */
-	public List<Mapper> queryCountOfUnread(@Param("type") MessageSendMode type, @Param("userId") Long userId, @Param("jpushType") String jpushType, @Param("tenantId") Integer tenantId);
+	public List<Mapper> queryCountOfUnread(@Param("type") MessageSendMode type, @Param("userId") Long userId, @Param("jpushType") String jpushType);
 
 	/**
 	 * 修改用户所有消息阅读状态

+ 97 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/search/SysMessageQueryInfo.java

@@ -0,0 +1,97 @@
+package com.yonge.cooleshow.biz.dal.dto.search;
+
+import com.yonge.toolset.mybatis.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+public class SysMessageQueryInfo extends QueryInfo {
+
+	/** 状态,0,待发送;1,发送中;2,发送完成 */
+	@ApiModelProperty(value = "状态,0,待发送;1,发送中;2,发送完成 ",required = false)
+	private Integer status;
+
+	@ApiModelProperty(value = "接收人编号",required = false)
+	private String receiver;
+
+	@ApiModelProperty(value = "发送人编号",required = false)
+	private Long userId;
+
+	@ApiModelProperty(value = "标题",required = false)
+	private String title;
+
+	@ApiModelProperty(value = "消息类型;1,表示短信;2,表示邮件; 3,app推送消息",required = false)
+	private Integer type;
+
+	@ApiModelProperty("消息组 SYSTEM:系统消息  COURSE:课程信息")
+	private String group;
+
+	@ApiModelProperty("客户端STUDENT,TEACHER,SYSTEM")
+	private String jpushType;
+
+	@ApiModelProperty("0:未读,1:已读")
+	private Integer readStatus;
+
+	public String getJpushType() {
+		return jpushType;
+	}
+
+	public void setJpushType(String jpushType) {
+		this.jpushType = jpushType;
+	}
+
+	public Integer getStatus() {
+		return status;
+	}
+
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public String getReceiver() {
+		return receiver;
+	}
+
+	public void setReceiver(String receiver) {
+		this.receiver = receiver;
+	}
+
+	public Long getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Long userId) {
+		this.userId = userId;
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public Integer getType() {
+		return type;
+	}
+
+	public void setType(Integer type) {
+		this.type = type;
+	}
+
+	public String getGroup() {
+		return group;
+	}
+
+	public void setGroup(String group) {
+		this.group = group;
+	}
+
+	public Integer getReadStatus() {
+		return readStatus;
+	}
+
+	public void setReadStatus(Integer readStatus) {
+		this.readStatus = readStatus;
+	}
+
+}

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

@@ -55,7 +55,7 @@ public class SysMessage extends BaseEntity {
 	private Long userId;
 	
 	/** 备注 */
-	@ApiModelProperty(value = "备注",required = false)
+	@ApiModelProperty(value = "备注/url (为空就没有连接,不为空就有连接)",required = false)
 	private String memo;
 	
 	/** 是否已读 */

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/MessageTypeEnum.java

@@ -1,5 +1,6 @@
 package com.yonge.cooleshow.biz.dal.enums;
 
+import com.baomidou.mybatisplus.annotation.EnumValue;
 import com.yonge.cooleshow.common.enums.BaseEnum;
 
 public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
@@ -19,6 +20,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
         this.msg = msg;
     }
 
+    @EnumValue
     private String code;
 
     private String msg;

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

@@ -9,6 +9,8 @@ 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.vo.MessageTypeCountVo;
+import com.yonge.cooleshow.common.entity.Mapper;
 import com.yonge.toolset.mybatis.page.PageInfo;
 import com.yonge.toolset.mybatis.page.QueryInfo;
 import com.yonge.toolset.mybatis.service.BaseService;
@@ -108,7 +110,7 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 * @param userId
 	 * @return
 	 */
-	public Map<String, Integer> queryCountOfUnread(MessageSendMode type, Long userId,String jpushType, Integer tenantId);
+	public List<Mapper>  queryCountOfUnread(MessageSendMode type, Long userId, String jpushType);
 
 	/**
 	 *

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseHomeworkServiceImpl.java

@@ -234,7 +234,7 @@ public class CourseHomeworkServiceImpl extends ServiceImpl<CourseHomeworkDao, Co
             this.updateById(courseHomework);
 
             // 发送学生提交作业消息给老师
-            SysUser student = sysUserFeignService.queryUserById(courseHomeworkDetailVo.getStudentId());
+            SysUser student = sysUserFeignService.queryUserById(submitDto.getStudentId());
             SysUser teacher = sysUserFeignService.queryUserById(courseHomeworkDetailVo.getTeacherId());
             Map<Long,String> receivers = new HashMap<>();
             receivers.put(teacher.getId(), teacher.getPhone());

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

@@ -10,6 +10,7 @@ import java.util.Map.Entry;
 import java.util.Random;
 import java.util.Set;
 
+import com.yonge.cooleshow.biz.dal.vo.MessageTypeCountVo;
 import com.yonge.toolset.mybatis.service.impl.BaseServiceImpl;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -356,16 +357,10 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	}
 
 	@Override
-	public Map<String, Integer> queryCountOfUnread(MessageSendMode type, Long userId, String jpushType, Integer tenantId) {
-		List<Mapper> mappers = sysMessageDao.queryCountOfUnread(type, userId, jpushType, tenantId);
+	public List<Mapper> queryCountOfUnread(MessageSendMode type, Long userId, String jpushType) {
+		return sysMessageDao.queryCountOfUnread(type, userId, jpushType);
 
-		Map<String, Integer> map = new HashMap<String, Integer>();
 
-		for (Mapper mapper : mappers) {
-			map.put(mapper.getKey().toString(), Integer.parseInt(mapper.getValue().toString()));
-		}
-
-		return map;
 	}
 
 	public void setDebugMode(boolean debugMode) {

+ 36 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/vo/MessageTypeCountVo.java

@@ -0,0 +1,36 @@
+package com.yonge.cooleshow.biz.dal.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-04-28
+ */
+@ApiModel("消息未读数量")
+public class MessageTypeCountVo {
+
+    @ApiModelProperty("类型 SYSTEM 系统消息  COURSE:课程信息")
+    private String type;
+
+    @ApiModelProperty("未读数量")
+    private Integer count;
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public Integer getCount() {
+        return count;
+    }
+
+    public void setCount(Integer count) {
+        this.count = count;
+    }
+}

+ 5 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml

@@ -152,6 +152,11 @@
         ,sch.teacher_replied_ as teacherReplied
         ,sch.submit_time_ as submitTime
         ,sch.id_ as studentHomeworkId
+        ,sch.student_id_ as studendId
+        ,cs.teacher_id_ as teacherId
+        ,cs.id_ as courseGroupId
+        ,ch.create_time_ as decorateTime
+        ,cs.type_ as courseType
         ,cs.type_ as courseType
         ,cs.class_date_ as classDate
         ,cs.start_time_ as startTime

+ 1 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/SysMessageConfigMapper.xml

@@ -6,8 +6,7 @@
 	<resultMap type="com.yonge.cooleshow.biz.dal.entity.SysMessageConfig"
 		id="SysMessageConfig">
 		<result column="id_" property="id" />
-		<result column="message_type_" property="messageType"
-			typeHandler="com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler" />
+		<result column="message_type_" property="messageType" />
 		<result column="content_" property="content" />
 		<result column="description_" property="description" />
 		<result column="modify_on_" property="modifyOn" />

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

@@ -10,8 +10,8 @@
         <result column="id_" property="id"/>
         <result column="title_" property="title"/>
         <result column="content_" property="content"/>
-        <result column="type_" property="type" typeHandler="com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler"/>
-        <result column="status_" property="status" typeHandler="com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler"/>
+        <result column="type_" property="type" />
+        <result column="status_" property="status" />
         <result column="receiver_" property="receiver"/>
         <result column="send_time_" property="sendTime"/>
         <result column="error_msg_" property="errorMsg"/>
@@ -81,7 +81,7 @@
 	<insert id="insert" parameterType="com.yonge.cooleshow.biz.dal.entity.SysMessage">
 		insert into sys_message (user_id_,title_, content_,type_, receiver_,
 		send_time_, error_msg_,memo_, create_on_,modify_on_,group_,client_id_)
-		values (#{userId}, #{title},#{content},#{type,typeHandler=com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler},
+		values (#{userId}, #{title},#{content},#{type},
 				#{receiver},now(),#{errorMsg},#{memo},now(),now(),#{group},#{clientId})
 	</insert>
 
@@ -97,8 +97,8 @@
 			(
 			#{item.id,jdbcType=BIGINT},#{item.userId,jdbcType=BIGINT}, #{item.title,jdbcType=VARCHAR},
 			#{item.content,jdbcType=VARCHAR},
-			#{item.type,typeHandler=com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler},
-			#{item.status,typeHandler=com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler}, #{item.receiver,jdbcType=VARCHAR},
+			#{item.type},
+			#{item.status}, #{item.receiver,jdbcType=VARCHAR},
 			#{item.sendTime},#{item.errorMsg,jdbcType=VARCHAR},#{item.readStatus},#{item.memo},
 			#{item.createOn},
 			#{item.modifyOn},#{item.group},#{item.clientId})
@@ -118,10 +118,10 @@
 				content_ = #{content,jdbcType=VARCHAR},
 			</if>
 			<if test="type != null">
-				type_ = #{type,typeHandler=com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler},
+				type_ = #{type},
 			</if>
 			<if test="status != null">
-				status_ = #{status,typeHandler=com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler},
+				status_ = #{status},
 			</if>
 			<if test="receiver != null">
 				receiver_ = #{receiver,jdbcType=VARCHAR},
@@ -152,7 +152,7 @@
 	</update>
 	<update id="updateStatus">
 		update sys_message set read_status_=#{status}
-		where user_id_ = #{userId} AND (client_id_ = #{clientId} OR client_id_ IS NULL)
+		where user_id_ = #{userId} AND (client_id_ = #{jpushType} OR client_id_ IS NULL)
 	</update>
 
     <update id="updateOneStatus">
@@ -189,16 +189,16 @@
 	<select id="queryCountOfUnread" resultMap="Mapper" parameterType="map">
 		SELECT group_ key_,COUNT(*) value_ FROM sys_message
 		WHERE user_id_ = #{userId} AND read_status_ = 0 and status_ = 2
-		AND (client_id_ = #{clientId} OR client_id_ IS NULL)
+		AND (client_id_ = #{jpushType} OR client_id_ IS NULL)
 		<if test="type != null">
-		and type_ = #{type,typeHandler=com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler}
+		and type_ = #{type}
 		</if>
 		group by group_
 	</select>
 
 	<select id="queryUserInRecentMinList" resultMap="message" parameterType="map">
 		select *
-		from sys_message where receiver_ = #{mobile} and type_ = #{type,typeHandler=com.yonge.toolset.mybatis.dal.CustomEnumTypeHandler} and <![CDATA[DATE_ADD(send_time_,
+		from sys_message where receiver_ = #{mobile} and type_ = #{type} and <![CDATA[DATE_ADD(send_time_,
 		INTERVAL #{recentMin} MINUTE) >= now()]]>
 	</select>
 </mapper>

+ 127 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/SysMessageController.java

@@ -0,0 +1,127 @@
+package com.yonge.cooleshow.student.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.AppVersionInfoDao;
+import com.yonge.cooleshow.biz.dal.dto.search.SysMessageQueryInfo;
+import com.yonge.cooleshow.biz.dal.enums.MessageSendMode;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.entity.Mapper;
+import com.yonge.cooleshow.common.exception.BizException;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import com.yonge.toolset.utils.validator.CommonValidator;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@Api(tags = "消息服务")
+@RequestMapping("sysMessage")
+public class SysMessageController extends BaseController {
+
+	@Autowired
+	private SysMessageService sysMessageService;
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@Autowired
+	private AppVersionInfoDao appVersionInfoDao;
+
+	@ApiOperation("获取所有消息列表")
+	@GetMapping(value = "list")
+	public Object list(SysMessageQueryInfo queryInfo){
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		queryInfo.setUserId(sysUser.getId());
+		queryInfo.setType(MessageSendMode.PUSH.getCode());
+		queryInfo.setJpushType("STUDENT");
+		return succeed(sysMessageService.queryPage(queryInfo));
+	}
+
+	// @ApiOperation("获取消息分类类型")
+	// @GetMapping(value = "typeList")
+	// public Object typeList(String memo){
+	// 	//如果用户使用的版本比当前版本号大,那么屏蔽缴费信息
+	// 	if(StringUtils.isNotEmpty(memo)){
+	// 		//获取当前使用的版本
+	// 		AppVersionInfo appVersionInfo = appVersionInfoDao.queryNewestByPlatform("ios-student").get(0);
+	// 		int defaultVersion = Integer.parseInt(appVersionInfo.getVersion().replaceAll("\\.",""));
+	// 		int currentVersion = Integer.parseInt(memo.replaceAll("\\.",""));
+	// 		if(currentVersion > defaultVersion){
+	// 			return succeed(JSON.parseArray("[{\"value\":\"全部\",\"key\":\"ALL\"}," +
+	// 					"{\"value\":\"课程信息\",\"key\":\"COURSE\"}," +
+	// 					"{\"value\":\"训练信息\",\"key\":\"WORK\"}," +
+	// 					"{\"value\":\"其他\",\"key\":\"DEFAULT\"}]"));
+	// 		}
+	// 	}
+	// 	return succeed(JSON.parseArray("[{\"value\":\"全部\",\"key\":\"ALL\"}," +
+	// 			"{\"value\":\"缴费信息\",\"key\":\"PAY\"}," +
+	// 			"{\"value\":\"课程信息\",\"key\":\"COURSE\"}," +
+	// 			"{\"value\":\"训练信息\",\"key\":\"WORK\"}," +
+	// 			"{\"value\":\"其他\",\"key\":\"DEFAULT\"}]"));
+	// }
+
+	@ApiOperation("一键已读")
+	@PostMapping("batchSetRead")
+	public Object batchSetRead() {
+		int status = 1;
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return sysMessageService.updateStatus(sysUser.getId(), status,"STUDENT") > 0 ? succeed() : failed();
+	}
+
+	@ApiOperation("设置已读")
+	@PostMapping("setRead")
+	public Object setRead(Long id) {
+		int status = 1;
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return sysMessageService.updateOneStatus(id, status) > 0 ? succeed() : failed();
+	}
+
+	@ApiOperation(value = "查询用户未读消息条数")
+	@GetMapping("/queryCountOfUnread")
+	public HttpResponseResult<List<Mapper>> queryCountOfUnread() {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		List<Mapper>  map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(), "STUDENT");
+
+		return succeed(map);
+	}
+
+	@ApiOperation(value = "发送消息")
+	@PostMapping("/sendMessage")
+	public Object sendMessage(MessageSenderPluginContext.MessageSender messageSender, String content, String receiver, int readStatus, String url, String group) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		Long userId = sysUser.getId();
+
+		String mobileNo = sysUser.getPhone();
+		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
+			throw new BizException("请输入正确的手机号");
+		}
+		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group, "STUDENT");
+		return succeed();
+	}
+}

+ 127 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/SysMessageController.java

@@ -0,0 +1,127 @@
+package com.yonge.cooleshow.teacher.controller;
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.dao.AppVersionInfoDao;
+import com.yonge.cooleshow.biz.dal.dto.search.SysMessageQueryInfo;
+import com.yonge.cooleshow.biz.dal.enums.MessageSendMode;
+import com.yonge.cooleshow.biz.dal.service.SysMessageService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.entity.Mapper;
+import com.yonge.cooleshow.common.exception.BizException;
+import com.yonge.toolset.thirdparty.message.MessageSenderPluginContext;
+import com.yonge.toolset.utils.validator.CommonValidator;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@Api(tags = "消息服务")
+@RequestMapping("sysMessage")
+public class SysMessageController extends BaseController {
+
+	@Autowired
+	private SysMessageService sysMessageService;
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@Autowired
+	private AppVersionInfoDao appVersionInfoDao;
+
+	@ApiOperation("获取所有消息列表")
+	@GetMapping(value = "list")
+	public Object list(SysMessageQueryInfo queryInfo){
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		queryInfo.setUserId(sysUser.getId());
+		queryInfo.setType(MessageSendMode.PUSH.getCode());
+		queryInfo.setJpushType("TEACHER");
+		return succeed(sysMessageService.queryPage(queryInfo));
+	}
+
+	// @ApiOperation("获取消息分类类型")
+	// @GetMapping(value = "typeList")
+	// public Object typeList(String memo){
+	// 	//如果用户使用的版本比当前版本号大,那么屏蔽缴费信息
+	// 	if(StringUtils.isNotEmpty(memo)){
+	// 		//获取当前使用的版本
+	// 		AppVersionInfo appVersionInfo = appVersionInfoDao.queryNewestByPlatform("ios-student").get(0);
+	// 		int defaultVersion = Integer.parseInt(appVersionInfo.getVersion().replaceAll("\\.",""));
+	// 		int currentVersion = Integer.parseInt(memo.replaceAll("\\.",""));
+	// 		if(currentVersion > defaultVersion){
+	// 			return succeed(JSON.parseArray("[{\"value\":\"全部\",\"key\":\"ALL\"}," +
+	// 					"{\"value\":\"课程信息\",\"key\":\"COURSE\"}," +
+	// 					"{\"value\":\"训练信息\",\"key\":\"WORK\"}," +
+	// 					"{\"value\":\"其他\",\"key\":\"DEFAULT\"}]"));
+	// 		}
+	// 	}
+	// 	return succeed(JSON.parseArray("[{\"value\":\"全部\",\"key\":\"ALL\"}," +
+	// 			"{\"value\":\"缴费信息\",\"key\":\"PAY\"}," +
+	// 			"{\"value\":\"课程信息\",\"key\":\"COURSE\"}," +
+	// 			"{\"value\":\"训练信息\",\"key\":\"WORK\"}," +
+	// 			"{\"value\":\"其他\",\"key\":\"DEFAULT\"}]"));
+	// }
+
+	@ApiOperation("一键已读")
+	@PostMapping("batchSetRead")
+	public Object batchSetRead() {
+		int status = 1;
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return sysMessageService.updateStatus(sysUser.getId(), status,"TEACHER") > 0 ? succeed() : failed();
+	}
+
+	@ApiOperation("设置已读")
+	@PostMapping("setRead")
+	public Object setRead(Long id) {
+		int status = 1;
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return sysMessageService.updateOneStatus(id, status) > 0 ? succeed() : failed();
+	}
+
+	@ApiOperation(value = "查询用户未读消息条数")
+	@GetMapping("/queryCountOfUnread")
+	public HttpResponseResult<List<Mapper>> queryCountOfUnread() {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		List<Mapper>  map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(), "TEACHER");
+
+		return succeed(map);
+	}
+
+	@ApiOperation(value = "发送消息")
+	@PostMapping("/sendMessage")
+	public Object sendMessage(MessageSenderPluginContext.MessageSender messageSender, String content, String receiver, int readStatus, String url, String group) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		Long userId = sysUser.getId();
+
+		String mobileNo = sysUser.getPhone();
+		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
+			throw new BizException("请输入正确的手机号");
+		}
+		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group, "TEACHER");
+		return succeed();
+	}
+}