Selaa lähdekoodia

消息通知改造

zouxuan 1 vuosi sitten
vanhempi
commit
f86146774e

+ 12 - 30
mec-application/src/main/java/com/ym/mec/student/controller/SysMessageController.java

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.entity.AppVersionInfo;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
@@ -22,6 +23,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.util.Map;
 
 @RestController
@@ -29,23 +31,19 @@ import java.util.Map;
 @RequestMapping("${app-config.url.student:}/sysMessage")
 public class SysMessageController extends BaseController {
 
-	@Autowired
+	@Resource
 	private SysMessageService sysMessageService;
 
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
+	@Resource
+	private SysUserService sysUserService;
 
-	@Autowired
+	@Resource
 	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.setUserId(sysUserService.getUserId());
 		queryInfo.setType(MessageSendMode.PUSH.getCode());
 		queryInfo.setJpushType("STUDENT");
 		return succeed(sysMessageService.queryPage(queryInfo));
@@ -77,32 +75,19 @@ public class SysMessageController extends BaseController {
 	@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();
+		return sysMessageService.updateStatus(sysUserService.getUserId(), 1,"STUDENT")? 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();
+		return sysMessageService.updateOneStatus(id) ? succeed() : failed();
 	}
 
 	@ApiOperation(value = "查询用户未读消息条数")
 	@GetMapping("/queryCountOfUnread")
 	public Object queryCountOfUnread() {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		Map<String, Integer> map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(),"STUDENT", sysUser.getTenantId());
 
 		if (map == null || map.size() == 0) {
@@ -114,17 +99,14 @@ public class SysMessageController extends BaseController {
 	@ApiOperation(value = "发送消息")
 	@PostMapping("/sendMessage")
 	public Object sendMessage(MessageSender messageSender, String content, String receiver, int readStatus, String url, String group) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		Integer 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");
+//		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group, "STUDENT");
 		return succeed();
 	}
 }

+ 3 - 3
mec-application/src/main/java/com/ym/mec/teacher/controller/SysMessageController.java

@@ -58,13 +58,13 @@ public class SysMessageController extends BaseController {
 	@ApiOperation("一键已读")
 	@PostMapping("batchSetRead")
 	public Object batchSetRead() {
-		return sysMessageService.updateStatus(sysUserService.getUserId(), 1,"TEACHER") > 0 ? succeed() : failed();
+		return sysMessageService.updateStatus(sysUserService.getUserId(), 1,"TEACHER")? succeed() : failed();
 	}
 
 	@ApiOperation("设置已读")
 	@PostMapping("setRead")
 	public Object setRead(Long id) {
-		return sysMessageService.updateOneStatus(id, 1) > 0 ? succeed() : failed();
+		return sysMessageService.updateOneStatus(id) ? succeed() : failed();
 	}
 
 	@ApiOperation(value = "查询用户未读消息条数")
@@ -87,7 +87,7 @@ public class SysMessageController extends BaseController {
 		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
 			throw new BizException("请输入正确的手机号");
 		}
-		sysMessageService.sendMessage(messageSender, sysUser.getId(), "", content, receiver, null, readStatus, url, group,"TEACHER");
+//		sysMessageService.sendMessage(messageSender, sysUser.getId(), "", content, receiver, null, readStatus, url, group,"TEACHER");
 		return succeed();
 	}
 }

+ 15 - 0
mec-application/src/main/java/com/ym/mec/vo/PageUtil.java

@@ -2,6 +2,7 @@ package com.ym.mec.vo;
 
 import com.ym.mec.common.page.PageInfo;
 
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -23,4 +24,18 @@ public class PageUtil {
         resultPage.setTotal(total);
         return resultPage;
     }
+
+    public static <T,E> PageInfo<T> pageInfo(com.microsvc.toolkit.common.response.paging.PageInfo<E> source, List<T> rows) {
+        if (Objects.isNull(source)) {
+            return new PageInfo<>(1, 20);
+        }
+        int total = Integer.parseInt(String.valueOf(source.getTotal()));
+        int limit = Integer.parseInt(String.valueOf(source.getLimit()));
+        PageInfo<T> resultPage = new PageInfo<>();
+        resultPage.setRows(rows);
+        resultPage.setPageNo(Long.valueOf(source.getCurrent()).intValue());
+        resultPage.setLimit(limit);
+        resultPage.setTotal(total);
+        return resultPage;
+    }
 }

+ 2 - 2
mec-application/src/main/java/com/ym/mec/web/controller/SchoolMessageController.java

@@ -49,12 +49,12 @@ public class SchoolMessageController extends BaseController {
     @ApiOperation("一键已读")
     @PostMapping("batchSetRead")
     public Object batchSetRead() {
-        return sysMessageService.updateStatus(sysUserService.getUserId(), 1,"SCHOOL") > 0 ? succeed() : failed();
+        return sysMessageService.updateStatus(sysUserService.getUserId(), 1,"SCHOOL")? succeed() : failed();
     }
     @ApiOperation("设置已读")
     @PostMapping("setRead")
     public Object setRead(@ApiParam("id") Long id) {
-        return sysMessageService.updateOneStatus(id, 1) > 0 ? succeed() : failed();
+        return sysMessageService.updateOneStatus(id)? succeed() : failed();
     }
 
     @ApiOperation(value = "查询用户未读消息条数")

+ 19 - 7
mec-application/src/main/java/com/ym/mec/web/controller/SysMessageController.java

@@ -1,6 +1,7 @@
 package com.ym.mec.web.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.dayaedu.cbs.openfeign.wrapper.message.CbsMessageWrapper;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.AppVersionInfoDao;
 import com.ym.mec.biz.dal.dto.SysMessageVo;
@@ -17,9 +18,12 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -76,7 +80,7 @@ public class SysMessageController extends BaseController {
 	@ApiOperation("设置已读")
 	@PostMapping("setRead")
 	public Object setRead(Long id) {
-		return sysMessageService.updateOneStatus(id, 1) > 0 ? succeed() : failed();
+		return sysMessageService.updateOneStatus(id)? succeed() : failed();
 	}
 
 	@ApiOperation(value = "查询用户未读消息条数")
@@ -91,19 +95,27 @@ public class SysMessageController extends BaseController {
 	@PreAuthorize("@pcs.hasPermissions('sysMessage/page')")
 	@PostMapping("/page")
 	public HttpResponseResult<PageInfo<SysMessageVo.SysMessageList>> page(@RequestBody SysMessageVo.SysMessageQuery query) {
-		// 数据类型转换
-		PageInfo<SysMessageVo.SysMessageList> records = sysMessageService.queryMessageCode(query);
-
+		com.microsvc.toolkit.common.response.paging.PageInfo<CbsMessageWrapper.SysMessage> pageInfo = sysMessageService.queryMessageCode(query).feignData();
+		if(CollectionUtils.isEmpty(pageInfo.getRows())){
+			return succeed(new PageInfo<>());
+		}
+		List<SysMessageVo.SysMessageList> sysMessageList = new ArrayList<>();
 		Pattern pattern = Pattern.compile("\\b验证码\\s*(\\d{6})\\b");
-		records.getRows().forEach(next -> {
+		pageInfo.getRows().forEach(next -> {
+			SysMessageVo.SysMessageList sysMessage = new SysMessageVo.SysMessageList();
 			String content = next.getContent();
+			sysMessage.setContent(content);
+			sysMessage.setTitle(next.getTitle());
+			sysMessage.setSendTime(next.getSendTime());
+			sysMessage.setReceiver(next.getReceiver());
 			if (StringUtils.isNotEmpty(content)) {
 				Matcher matcher = pattern.matcher(content);
 				if (matcher.find()) {
-					next.setVerityCode(matcher.group().replace("验证码",""));
+					sysMessage.setVerityCode(matcher.group().replace("验证码",""));
 				}
 			}
+			sysMessageList.add(sysMessage);
 		});
-		return succeed(records);
+		return succeed(PageUtil.pageInfo(pageInfo, sysMessageList));
 	}
 }

+ 12 - 33
mec-application/src/main/java/com/ym/mec/web/controller/education/SysEduMessageController.java

@@ -1,13 +1,13 @@
 package com.ym.mec.web.controller.education;
 
 import com.alibaba.fastjson.JSON;
-import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.AppVersionInfoDao;
 import com.ym.mec.biz.dal.entity.AppVersionInfo;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
@@ -15,13 +15,12 @@ import com.ym.mec.util.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 javax.annotation.Resource;
 import java.util.Map;
 
 @RestController
@@ -29,23 +28,19 @@ import java.util.Map;
 @RequestMapping("${app-config.url.web:}/sysEduMessage")
 public class SysEduMessageController extends BaseController {
 
-	@Autowired
+	@Resource
 	private SysMessageService sysMessageService;
 
-	@Autowired
-	private SysUserFeignService sysUserFeignService;
+	@Resource
+	private SysUserService sysUserService;
 
-	@Autowired
+	@Resource
 	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.setUserId(sysUserService.getUserId());
 		queryInfo.setType(3);
 		queryInfo.setJpushType("SYSTEM");
 		return succeed(sysMessageService.queryPage(queryInfo));
@@ -77,32 +72,19 @@ public class SysEduMessageController extends BaseController {
 	@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,"SYSTEM") > 0 ? succeed() : failed();
+		return sysMessageService.updateStatus(sysUserService.getUserId(), 1,"SYSTEM") ? 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();
+		return sysMessageService.updateOneStatus(id)? succeed() : failed();
 	}
 
 	@ApiOperation(value = "查询用户未读消息条数")
 	@GetMapping("/queryCountOfUnread")
 	public Object queryCountOfUnread() {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed("请重新登录");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		Map<String, Integer> map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(),"SYSTEM", sysUser.getTenantId());
 
 		if (map == null || map.size() == 0) {
@@ -114,17 +96,14 @@ public class SysEduMessageController extends BaseController {
 	@ApiOperation(value = "发送消息")
 	@PostMapping("/sendMessage")
 	public Object sendMessage(MessageSender messageSender, String content, String receiver, int readStatus, String url, String group) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
+		SysUser sysUser = sysUserService.getUser();
 		Integer 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,"SYSTEM");
+//		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group,"SYSTEM");
 		return succeed();
 	}
 }

+ 7 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/SysMessageService.java

@@ -8,7 +8,6 @@ import com.ym.mec.biz.dal.entity.SysMessage;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
-import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 
@@ -95,7 +94,7 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 * @param args 参数
 	 * @return
 	 */
-	public void batchSendMessage(Integer senderTenantId, MessageSender messageSender, MessageTypeEnum messageType, Map<Integer, String> receivers, Date triggerTime,
+	public void batchSendMessage(Integer senderTenantId, MessageSender messageSender, MessageTypeEnum messageType, Map<Integer,String> receivers, Date triggerTime,
 			Integer readStatus, String url,String jpushType, Object... args);
 
 	/**
@@ -109,7 +108,7 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 * @param args 参数
 	 * @return
 	 */
-	public void batchSendMessage(MessageSender messageSender, MessageTypeEnum messageType, Map<Integer, String> receivers, Date triggerTime,
+	public void batchSendMessage(MessageSender messageSender, MessageTypeEnum messageType, Map<Integer,String> receivers, Date triggerTime,
 			Integer readStatus, String url,String jpushType, Object... args);
 
 
@@ -123,25 +122,9 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 * @param args 参数
 	 * @return
 	 */
-	public void batchPushMessage(MessageTypeEnum messageType, Map<Integer, String> receivers, Date triggerTime,
+	public void batchPushMessage(MessageTypeEnum messageType, Map<Integer,String> receivers, Date triggerTime,
 			Integer readStatus, String url,String jpushType,String sound,String channelId, Object... args);
 
-	/**
-	 * 发送消息
-	 * @param messageSender 消息发送者
-	 * @param userId 用户编号
-	 * @param mode 消息模式
-	 * @param title 消息标题
-	 * @param content 消息内容
-	 * @param receiver 消息接受者
-	 * @param triggerTime 触发时间
-	 * @param readStatus 阅读状态(0-未读  1-已读)
-	 * @param url 超链接地址
-	 * @param group 组
-	 * @return
-	 */
-	public void sendMessage(MessageSender messageSender, Integer userId, String title, String content, String receiver, Date triggerTime, Integer readStatus,
-			String url, String group,String jpushType);
 
 	/**
 	 * 发送验证码
@@ -183,14 +166,14 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 * @param status 状态/1 已读,0未读
 	 * @return
 	 */
-	public int updateStatus(Integer userId, int status,String jpushType);
+	public Boolean updateStatus(Integer userId, int status,String jpushType);
 
 	/**
 	 * 修改单条消息状态
 	 */
-	public int updateOneStatus(Long id, int status);
+	public Boolean updateOneStatus(Long id);
 	
-	public List<SysMessage> queryUserInRecentMinList(String mobile, int recentMin, MessageSendMode type);
+	public List<CbsMessageWrapper.SysMessage> queryUserInRecentMinList(String mobile, int recentMin, MessageSendMode type);
 
 	/**
 	 * 发送私聊消息
@@ -214,5 +197,5 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	void pushWaitSendMessageTask();
 
 	//获取短信验证码
-	PageInfo<SysMessageVo.SysMessageList> queryMessageCode(SysMessageVo.SysMessageQuery query);
+	R<com.microsvc.toolkit.common.response.paging.PageInfo<CbsMessageWrapper.SysMessage>> queryMessageCode(SysMessageVo.SysMessageQuery query);
 }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SmsCodeServiceImpl.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service.impl;
 
 import java.util.List;
 
+import com.dayaedu.cbs.openfeign.wrapper.message.CbsMessageWrapper;
 import com.ym.mec.auth.api.enums.YesOrNoEnum;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -54,7 +55,7 @@ public class SmsCodeServiceImpl implements SmsCodeService {
 			times = Integer.parseInt(sysConfig.getParanValue());
 		}
 		// 十分钟内只能发3条
-		List<SysMessage> list = sysMessageService.queryUserInRecentMinList(mobile, 10, MessageSendMode.SMS);
+		List<CbsMessageWrapper.SysMessage> list = sysMessageService.queryUserInRecentMinList(mobile, 10, MessageSendMode.SMS);
 		if (list != null && list.size() >= times) {
 			throw new BizException("对不起,您发送太频繁请稍后重试!");
 		}

+ 175 - 358
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java

@@ -8,44 +8,38 @@ import com.dayaedu.cbs.common.enums.message.ESendStatus;
 import com.dayaedu.cbs.openfeign.client.MessageFeignClientService;
 import com.dayaedu.cbs.openfeign.wrapper.message.CbsMessageWrapper;
 import com.microsvc.toolkit.common.response.template.R;
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.SysMessageDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dao.WaitSendMessageDao;
-import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
-import com.ym.mec.biz.dal.dto.SysMessageDto;
 import com.ym.mec.biz.dal.dto.SysMessageVo;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.entity.ImSendGroupMessage;
+import com.ym.mec.biz.dal.entity.SysMessage;
+import com.ym.mec.biz.dal.entity.SysMessageConfig;
+import com.ym.mec.biz.dal.entity.WaitSendMessage;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.SendStatusEnum;
 import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
 import com.ym.mec.biz.service.SysMessageConfigService;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.biz.service.SysUserService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImMessageDto;
 import com.ym.mec.common.entity.ImPrivateMessage;
 import com.ym.mec.common.entity.ImSendMessageUserInfo;
 import com.ym.mec.common.entity.ImTxtMessage;
 import com.ym.mec.common.exception.BizException;
-import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.PageUtil;
-import com.ym.mec.common.page.QueryInfo;
-import com.ym.mec.common.page.WrapperUtil;
 import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.common.tenant.TenantContextHolder;
 import com.ym.mec.im.ImFeignService;
-import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
-import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.string.MessageFormatter;
 import net.coobird.thumbnailator.Thumbnails;
 import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -59,10 +53,8 @@ import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.net.URL;
 import java.util.*;
-import java.util.Map.Entry;
 import java.util.concurrent.CompletableFuture;
 
-import static com.ym.mec.biz.dal.enums.MessageTypeEnum.OA_NOTICE_PUSH;
 import static com.ym.mec.biz.dal.enums.MessageTypeEnum.STUDENT_PUSH_VIP_BUY;
 
 @Service
@@ -75,9 +67,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	@Resource
 	private SysMessageConfigService sysMessageConfigService;
 	@Resource
-	private MessageSenderPluginContext messageSenderPluginContext;
-	@Resource
-	private SysUserFeignService sysUserFeignService;
+	private SysUserService sysUserService;
 	@Resource
 	private TeacherDao teacherDao;
 	@Resource
@@ -89,8 +79,6 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	@Resource
 	private RedisCache<String, Object> redisCache;
 	@Resource
-	private SysEmailServiceImpl sysEmailService;
-	@Resource
 	private MessageFeignClientService messageFeignClientService;
 	// 验证码有效期
 	public static final int CODE_EXPIRE = 60 * 10;
@@ -114,7 +102,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		query.setRows(queryInfo.getRows());
 		query.setUserId(queryInfo.getUserId().longValue());
 		query.setClientType(EClientType.SCHOOL);
-		query.setStatus(ESendStatus.WAIT);
+		query.setStatus(ESendStatus.SUCCESSED);
 		query.setAppKey(EAppKey.GYM);
 		query.setSendMode(queryInfo.getType() == null?null:queryInfo.getType() == 1? EMessageSendMode.SMS :
 				queryInfo.getType() == 2?EMessageSendMode.EMAIL:
@@ -128,123 +116,40 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		return messageFeignClientService.sysMessagePage(query);
 	}
 
-	/**
-	 * 添加消息
-	 * @param subject 消息主题
-	 * @param content 消息内容
-	 * @param receivers 接收人,多个人用逗号分开
-	 * @param triggerTime 触发时间
-	 * @param mode 消息的发送模式
-	 * @param status 消息的当前状态
-	 * @param errorMsg 错误消息
-	 * @param readStatus 阅读状态
-	 * @param memo 备注
-	 * @param group 消息组
-	 * @return
-	 */
-	private int addMessage(Integer receiverTenantId, Map<Integer, String> receivers, String subject, String content, Date triggerTime, MessageSendMode mode, SendStatusEnum status,
-			String errorMsg, Integer readStatus, String memo, String group,String jpushType) {
-		return addMessage(receiverTenantId,receivers,subject,content,triggerTime,mode,status,errorMsg,readStatus,memo,group,jpushType,null);
-	}
-
-
-    /**
-     * 添加消息
-     * @param subject 消息主题
-     * @param content 消息内容
-     * @param receivers 接收人,多个人用逗号分开
-     * @param triggerTime 触发时间
-     * @param mode 消息的发送模式
-     * @param status 消息的当前状态
-     * @param errorMsg 错误消息
-     * @param readStatus 阅读状态
-     * @param memo 备注
-     * @param group 消息组
-     * @return
-     */
-    private int addMessage(Integer receiverTenantId, Map<Integer, String> receivers, String subject, String content, Date triggerTime, MessageSendMode mode, SendStatusEnum status,
-                           String errorMsg, Integer readStatus, String memo, String group,String jpushType,Integer messageConfigId) {
-        SysMessage message = null;
-        Date date = new Date();
-
-        List<SysMessage> messages = new ArrayList<>();
-
-        Integer userId = null;
-        String receiver;
-        for (Entry<Integer, String> entry : receivers.entrySet()) {
-            userId = entry.getKey();
-            receiver = entry.getValue();
-
-            message = new SysMessage();
-            if (userId == null) {
-                SysUser user = sysUserFeignService.queryUserByMobile(receiver);
-                if (user != null) {
-                    userId = user.getId();
-                }
-            }
-            message.setTenantId(receiverTenantId);
-            message.setUserId(userId);
-            message.setContent(content);
-            message.setCreateOn(date);
-            message.setModifyOn(date);
-            message.setReceiver(receiver);
-            if (triggerTime == null) {
-                triggerTime = date;
-            }
-            message.setMessageConfigId(messageConfigId);
-            message.setSendTime(triggerTime);
-            message.setTitle(subject);
-            message.setStatus(status);
-            message.setType(mode);
-            message.setErrorMsg(errorMsg);
-            message.setReadStatus(readStatus);
-            message.setMemo(memo);
-            message.setGroup(group);
-            message.setJpushType(jpushType);
-            messages.add(message);
-        }
-
-        return sysMessageDao.batchInsert(messages);
-    }
-
 	@Override
 	public boolean batchSeoMessage(Set<Integer> userIds, MessageTypeEnum messageType,String memo, Object... args) {
 		if(userIds != null){
 			userIds.removeAll(Collections.singleton(null));
 		}
-		if (userIds == null || userIds.size() == 0) {
+		if (CollectionUtils.isEmpty(userIds)) {
 			LOGGER.error("接收地址不能为空");
 			return false;
 		}
-		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(messageType);
-		if (messageConfig == null) {
-			throw new BizException("消息类型错误");
-		}else if(messageConfig.getSendFlag() == null || messageConfig.getSendFlag() == 0){
-			return true;
-		}
-		Date date = new Date();
-		SendStatusEnum status = SendStatusEnum.SUCCESSED;
-		String content = MessageFormatter.arrayFormat(messageConfig.getContent(), args);
-		SysMessage message = null;
-
-		List<SysMessage> messages = new ArrayList<>();
-		for (Integer userId : userIds) {
-			message = new SysMessage();
-			message.setUserId(userId);
-			message.setContent(content);
-			message.setCreateOn(date);
-			message.setModifyOn(date);
-			message.setReceiver(userId.toString());
-			message.setSendTime(date);
-			message.setStatus(status);
-			message.setType(MessageSendMode.SEO);
-			message.setTitle(messageConfig.getDescription());
-			message.setReadStatus(0);
-			message.setMemo(memo);
-			message.setGroup(messageConfig.getGroup());
-			messages.add(message);
+		List<SimpleUserDto> userDtoList = teacherDao.getUsersSimpleInfo(new ArrayList<>(userIds));
+		List<CbsMessageWrapper.MessageParam> messageParams = new ArrayList<>();
+		for (SimpleUserDto user : userDtoList) {
+			CbsMessageWrapper.MessageParam messageParam = new CbsMessageWrapper.MessageParam();
+			messageParam.setUserId(user.getUserId().longValue());
+			messageParam.setAppKey(EAppKey.GYM);
+			messageParam.setClientType(EClientType.BACKEND);
+			messageParam.setType(messageType.getCode());
+			Map<Long, String> params = new HashMap<>();
+			params.put(user.getUserId().longValue(), user.getPhone());
+			messageParam.setReceivers(params);
+			if(args != null && args.length > 0){
+				String[] argsStr = new String[args.length];
+				for (int i = 0; i < args.length; i++) {
+					if (args[i]!=null){
+						argsStr[i] = args[i].toString();
+					}else {
+						argsStr[i] = "";
+					}
+				}
+				messageParam.setContentArgs(argsStr);
+			}
+			messageParams.add(messageParam);
 		}
-		sysMessageDao.batchInsert(messages);
+		messageFeignClientService.sysMessageBatchSendMessage(messageParams);
 		return true;
 	}
 
@@ -430,13 +335,10 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	@Override
 	public void sendPrivateMessage(String studentId, String content, String extra) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if(sysUser == null){
-			throw new BizException("用户信息获取失败");
-		}
+		Integer userId = sysUserService.getUserId();
 		//ExecutorService executor = Executors.newCachedThreadPool();
 		CompletableFuture.runAsync(()->{
-			imFeignService.privateSend(getImGroupMessage("RC:TxtMsg", sysUser.getId().toString(),
+			imFeignService.privateSend(getImGroupMessage("RC:TxtMsg", userId.toString(),
 				studentId.split(","), content, extra));
 		});
 		//executor.shutdown();
@@ -471,253 +373,145 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	}
 
     @Override
-    public PageInfo<SysMessageVo.SysMessageList> queryMessageCode(SysMessageVo.SysMessageQuery queryInfo) {
-		PageInfo<SysMessageVo.SysMessageList> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
-		Map<String, Object> params = new HashMap<String, Object>();
-		MapUtil.populateMap(params, queryInfo);
-
-		List<SysMessageVo.SysMessageList> dataList = null;
-		int count = sysMessageDao.countMessageCode(params);
-		if (count > 0) {
-			pageInfo.setTotal(count);
-			params.put("offset", pageInfo.getOffset());
-			dataList = sysMessageDao.queryMessageCode(params);
-		}
-		if (count == 0) {
-			dataList = new ArrayList<>();
-		}
-		pageInfo.setRows(dataList);
-		return pageInfo;
+    public R<com.microsvc.toolkit.common.response.paging.PageInfo<CbsMessageWrapper.SysMessage>> queryMessageCode(SysMessageVo.SysMessageQuery queryInfo) {
+		CbsMessageWrapper.SysMessageQuery query = new CbsMessageWrapper.SysMessageQuery();
+		query.setPage(queryInfo.getPage());
+		query.setRows(queryInfo.getRows());
+		query.setStatus(ESendStatus.SUCCESSED);
+		query.setAppKey(EAppKey.GYM);
+		query.setTitle(queryInfo.getTitle());
+		query.setSendMode(EMessageSendMode.SMS);
+		query.setSendTimeStart(queryInfo.getSendTime() == null?null:DateUtil.stringToDate(queryInfo.getSendTime()+" 00:00:00"));
+		return messageFeignClientService.sysMessagePage(query);
 	}
 
     @Override
-	public void batchSendMessage(Integer senderTenantId, MessageSender messageSender, MessageTypeEnum type, Map<Integer, String> receivers, Date triggerTime, Integer readStatus,
-			String url,String jpushType, Object... args) {
+	public void batchSendMessage(Integer senderTenantId, MessageSender messageSender, MessageTypeEnum type, Map<Integer,String> receivers, Date triggerTime, Integer readStatus,
+								 String url, String jpushType, Object... args) {
 		LOGGER.info("batchSendMessage tenantId {} msgSender {}, type {}, receivers {} ", senderTenantId, messageSender, type, receivers);
-		if (receivers == null || receivers.size() == 0) {
+		if (receivers == null || receivers.isEmpty()) {
 			LOGGER.error("接收地址不能为空");
 			return;
 		}
-		Integer userId = receivers.keySet().iterator().next();
-		Integer receiverTenantId = 0;
-		SimpleUserDto simpleUserDto = teacherDao.getSimpleUser(userId);
-		if(simpleUserDto != null){
-			receiverTenantId = simpleUserDto.getTenantId();
-		}
-
-		// email data from database load, 使用接收者 tenantId, 假设发送者和接收者为同一机构
-		if (Objects.equals(messageSender.getSendMode(), "EMAIL")) {
-			LOGGER.info("batch 发送邮件 {} ", receiverTenantId);
-			loadEmailInfo(senderTenantId);
-			// debugMode = false;
-		}
-		if(StringUtils.isNotEmpty(jpushType) && jpushType.equals("STUDENT")){
+		if("STUDENT".equals(jpushType) && type != STUDENT_PUSH_VIP_BUY){
 			//如果不是缴费信息
-			if(type != STUDENT_PUSH_VIP_BUY){
-				int hour = DateUtil.getHour(new Date());
-				//如果当前时间在22点之后
-				String messageTime = sysConfigDao.findConfigValue("wait_send_message_time");
-				if(StringUtils.isEmpty(messageTime)){
-					messageTime = "22";
-				}
-				if(messageTime.contains(":")){
-					messageTime = messageTime.substring(0,messageTime.indexOf(":"));
-				}
-				if(hour > Integer.parseInt(messageTime)-1){
-					//保存推送信息
-					WaitSendMessage waitSendMessage = new WaitSendMessage();
-					if(args != null){
-						waitSendMessage.setAgrs(JSON.toJSONString(args));
-					}
-					waitSendMessage.setJpushType(jpushType);
-					waitSendMessage.setMessageSender(messageSender.name());
-					waitSendMessage.setMessageType(type.name());
-					waitSendMessage.setReceivers(JSON.toJSONString(receivers));
-					waitSendMessage.setUrl(url);
-					waitSendMessageDao.insert(waitSendMessage);
-					return;
+			int hour = DateUtil.getHour(new Date());
+			//如果当前时间在22点之后
+			String messageTime = sysConfigDao.findConfigValue("wait_send_message_time");
+			if(StringUtils.isEmpty(messageTime)){
+				messageTime = "22";
+			}
+			if(messageTime.contains(":")){
+				messageTime = messageTime.substring(0,messageTime.indexOf(":"));
+			}
+			if(hour > Integer.parseInt(messageTime)-1){
+				//保存推送信息
+				WaitSendMessage waitSendMessage = new WaitSendMessage();
+				if(args != null){
+					waitSendMessage.setAgrs(JSON.toJSONString(args));
 				}
+				waitSendMessage.setJpushType(jpushType);
+				waitSendMessage.setMessageSender(messageSender.name());
+				waitSendMessage.setMessageType(type.name());
+				waitSendMessage.setReceivers(JSON.toJSONString(receivers));
+				waitSendMessage.setUrl(url);
+				waitSendMessageDao.insert(waitSendMessage);
+				return;
 			}
 		}
-		String[] tos = receivers.values().toArray(new String[receivers.size()]);
-		LOGGER.error("batch 接收人 {} ", tos  );
-		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(type);
-		if (messageConfig == null) {
-			throw new BizException("消息类型错误");
-		}else if(messageConfig.getSendFlag() == null || messageConfig.getSendFlag() == 0){
-			LOGGER.error("batch 发送标志为空" );
-			return;
-		}
-		Date date = new Date();
-		SendStatusEnum status = SendStatusEnum.WAIT;
-		String errorMsg = null;
-		// 立即发送
-		if (triggerTime == null || date.after(triggerTime)) {
-			status = SendStatusEnum.SENDING;
-			try {
-				if (debugMode == true || messageSenderPluginContext.batchSend(messageSender, messageConfig.getDescription(),
-								MessageFormatter.arrayFormat(messageConfig.getContent(), args), tos, url,jpushType,"default",null)) {
-					status = SendStatusEnum.SUCCESSED;
-				} else {
-					status = SendStatusEnum.FAILED;
+		List<SimpleUserDto> userDtoList = teacherDao.getUsersSimpleInfo(new ArrayList<>(receivers.keySet()));
+		List<CbsMessageWrapper.MessageParam> messageParams = new ArrayList<>();
+		for (SimpleUserDto user : userDtoList) {
+			CbsMessageWrapper.MessageParam messageParam = new CbsMessageWrapper.MessageParam();
+			messageParam.setUserId(user.getUserId().longValue());
+			messageParam.setAppKey(EAppKey.GYM);
+			messageParam.setClientType(EClientType.STUDENT);
+			messageParam.setType(type.getCode());
+			Map<Long, String> params = new HashMap<>();
+			params.put(user.getUserId().longValue(), user.getPhone());
+			messageParam.setReceivers(params);
+			if(args != null && args.length > 0){
+				String[] argsStr = new String[args.length];
+				for (int i = 0; i < args.length; i++) {
+					if (args[i]!=null){
+						argsStr[i] = args[i].toString();
+					}else {
+						argsStr[i] = "";
+					}
 				}
-			} catch (Exception e) {
-				status = SendStatusEnum.FAILED;
-				errorMsg = e.getMessage();
-				LOGGER.warn("消息发送失败", e);
+				messageParam.setContentArgs(argsStr);
 			}
+			messageParams.add(messageParam);
 		}
-		MessageSendMode mode = MessageSendMode.SMS;
-		if (messageSender.getSendMode().equals("PUSH")) {
-			mode = MessageSendMode.PUSH;
-		} else if (messageSender.getSendMode().equals("EMAIL")) {
-			mode = MessageSendMode.EMAIL;
-		}
-		// oa 待审批只推送 不记录表
-		if (type == OA_NOTICE_PUSH) {
-			return;
-		}
-		addMessage(receiverTenantId, receivers, messageConfig.getDescription(), MessageFormatter.arrayFormat(messageConfig.getContent(), args), triggerTime, mode, status, errorMsg, readStatus,
-				url, messageConfig.getGroup(),jpushType,messageConfig.getId());
+		messageFeignClientService.sysMessageBatchSendMessage(messageParams);
 	}
 
     @Override
-	public void batchSendMessage(MessageSender messageSender, MessageTypeEnum type, Map<Integer, String> receivers, Date triggerTime, Integer readStatus,
+	public void batchSendMessage(MessageSender messageSender, MessageTypeEnum type, Map<Integer,String> receivers, Date triggerTime, Integer readStatus,
 			String url,String jpushType, Object... args) {
 		batchSendMessage(TenantContextHolder.getTenantId(), messageSender, type, receivers, triggerTime, readStatus, url, jpushType, args);
 	}
 
 
 	@Override
-	public void batchPushMessage(MessageTypeEnum type, Map<Integer, String> receivers, Date triggerTime, Integer readStatus,
+	public void batchPushMessage(MessageTypeEnum type, Map<Integer,String> receivers, Date triggerTime, Integer readStatus,
 			String url,String jpushType,String sound,String channelId, Object... args) {
-		if (receivers == null || receivers.size() == 0) {
-			throw new BizException("接收地址不能为空");
-		}
-		SimpleUserDto simpleUserDto = teacherDao.getSimpleUser(receivers.keySet().iterator().next());
-		Integer receiverTenantId = simpleUserDto.getTenantId();
-		
-		if(StringUtils.isNotEmpty(jpushType) && jpushType == "STUDENT"){
-			//如果不是缴费信息
-			if(type != STUDENT_PUSH_VIP_BUY){
-				int hour = DateUtil.getHour(new Date());
-				//如果当前时间在22点之后
-				String messageTime = sysConfigDao.findConfigValue("wait_send_message_time");
-				if(StringUtils.isEmpty(messageTime)){
-					messageTime = "22";
-				}
-				if(messageTime.contains(":")){
-					messageTime = messageTime.substring(0,messageTime.indexOf(":"));
-				}
-				if(hour > Integer.parseInt(messageTime)-1){
-					//保存推送信息
-					WaitSendMessage waitSendMessage = new WaitSendMessage();
-					if(args != null){
-						waitSendMessage.setAgrs(JSON.toJSONString(args));
-					}
-					waitSendMessage.setJpushType(jpushType);
-					waitSendMessage.setMessageSender(MessageSender.JIGUANG.name());
-					waitSendMessage.setMessageType(type.name());
-					waitSendMessage.setReceivers(JSON.toJSONString(receivers));
-					waitSendMessage.setUrl(url);
-					waitSendMessageDao.insert(waitSendMessage);
-					return;
-				}
-			}
-		}
-		String[] tos = receivers.values().toArray(new String[receivers.size()]);
-		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(type);
-		if (messageConfig == null) {
-			throw new BizException("消息类型错误");
-		}else if(messageConfig.getSendFlag() == null || messageConfig.getSendFlag() == 0){
+		if (receivers == null || receivers.isEmpty()) {
+			LOGGER.error("接收地址不能为空");
 			return;
 		}
-		Date date = new Date();
-		SendStatusEnum status = SendStatusEnum.WAIT;
-		String errorMsg = null;
-		// 立即发送
-		if (triggerTime == null || date.after(triggerTime)) {
-			status = SendStatusEnum.SENDING;
-			try {
-				if (debugMode == true || messageSenderPluginContext.batchSend(MessageSender.JIGUANG, messageConfig.getDescription(),
-								MessageFormatter.arrayFormat(messageConfig.getContent(), args), tos, url,jpushType,sound,channelId)) {
-					status = SendStatusEnum.SUCCESSED;
-				} else {
-					status = SendStatusEnum.FAILED;
+		if("STUDENT".equals(jpushType) && type != STUDENT_PUSH_VIP_BUY){
+			int hour = DateUtil.getHour(new Date());
+			//如果当前时间在22点之后
+			String messageTime = sysConfigDao.findConfigValue("wait_send_message_time");
+			if(StringUtils.isEmpty(messageTime)){
+				messageTime = "22";
+			}
+			if(messageTime.contains(":")){
+				messageTime = messageTime.substring(0,messageTime.indexOf(":"));
+			}
+			if(hour > Integer.parseInt(messageTime)-1){
+				//保存推送信息
+				WaitSendMessage waitSendMessage = new WaitSendMessage();
+				if(args != null){
+					waitSendMessage.setAgrs(JSON.toJSONString(args));
 				}
-			} catch (Exception e) {
-				status = SendStatusEnum.FAILED;
-				errorMsg = e.getMessage();
-				LOGGER.warn("消息发送失败", e);
+				waitSendMessage.setJpushType(jpushType);
+				waitSendMessage.setMessageSender(MessageSender.JIGUANG.name());
+				waitSendMessage.setMessageType(type.name());
+				waitSendMessage.setReceivers(JSON.toJSONString(receivers));
+				waitSendMessage.setUrl(url);
+				waitSendMessageDao.insert(waitSendMessage);
+				return;
 			}
 		}
-		addMessage(receiverTenantId, receivers, messageConfig.getDescription(), MessageFormatter.arrayFormat(messageConfig.getContent(), args), triggerTime, MessageSendMode.PUSH, status, errorMsg, readStatus,
-				url, messageConfig.getGroup(),jpushType);
-	}
-
-	@Override
-	public void sendMessage(MessageSender messageSender, Integer userId, String title, String content, String receiver, Date triggerTime, Integer readStatus, String url, String group,String jpushType) {
-		LOGGER.info("batchSendMessage {}, userId {}, receivers {} ", messageSender, userId, receiver);
-		if (StringUtils.isBlank(receiver)) {
-			throw new BizException("接收地址不能为空");
-		}
-		SimpleUserDto simpleUserDto = teacherDao.getSimpleUser(userId);
-		Integer receiverTenantId = simpleUserDto.getTenantId();
-		
-		// email data from database load
-		if (Objects.equals(messageSender.getSendMode(), "EMAIL")) {
-			loadEmailInfo(simpleUserDto.getTenantId());
-			debugMode = false;
-			LOGGER.info("batch 发送邮件 {} ", userId);
-		}
-		Date date = new Date();
-		SendStatusEnum status = SendStatusEnum.WAIT;
-		String errorMsg = null;
-		// 立即发送
-		if (triggerTime == null || date.after(triggerTime)) {
-			status = SendStatusEnum.SENDING;
-			try {
-				if (debugMode == true || messageSenderPluginContext.send(messageSender, receiver, title, content, url,jpushType,"default",null)) {
-					status = SendStatusEnum.SUCCESSED;
-				} else {
-					status = SendStatusEnum.FAILED;
+		List<SimpleUserDto> userDtoList = teacherDao.getUsersSimpleInfo(new ArrayList<>(receivers.keySet()));
+		List<CbsMessageWrapper.MessageParam> messageParams = new ArrayList<>();
+		for (SimpleUserDto user : userDtoList) {
+			CbsMessageWrapper.MessageParam messageParam = new CbsMessageWrapper.MessageParam();
+			messageParam.setUserId(user.getUserId().longValue());
+			messageParam.setAppKey(EAppKey.GYM);
+			messageParam.setClientType(EClientType.STUDENT);
+			messageParam.setType(type.getCode());
+			Map<Long, String> params = new HashMap<>();
+			params.put(user.getUserId().longValue(), user.getPhone());
+			messageParam.setReceivers(params);
+			if(args != null && args.length > 0){
+				String[] argsStr = new String[args.length];
+				for (int i = 0; i < args.length; i++) {
+					if (args[i]!=null){
+						argsStr[i] = args[i].toString();
+					}else {
+						argsStr[i] = "";
+					}
 				}
-			} catch (Exception e) {
-				status = SendStatusEnum.FAILED;
-				errorMsg = e.getMessage();
-				LOGGER.warn("消息发送失败", e);
+				messageParam.setContentArgs(argsStr);
 			}
+			messageParams.add(messageParam);
 		}
-		MessageSendMode mode = MessageSendMode.SMS;
-		if (messageSender.getSendMode().equals("PUSH")) {
-			mode = MessageSendMode.PUSH;
-		} else if (messageSender.getSendMode().equals("EMAIL")) {
-			mode = MessageSendMode.EMAIL;
-			LOGGER.info("发送邮件 {} ");
-		}
-		Map<Integer, String> receivers = new HashMap<Integer, String>();
-		receivers.put(userId, receiver);
-		addMessage(receiverTenantId, receivers, title, content, triggerTime, mode, status, errorMsg, readStatus, url, null,jpushType);
+		messageFeignClientService.sysMessageBatchSendMessage(messageParams);
 	}
 
-	private void loadEmailInfo(Integer tenantId) {
-		try {
-			SysEmail email1 = sysEmailService.getOne(new WrapperUtil<SysEmail>().hasEq("tenant_id_", tenantId).queryWrapper());
-			if (email1 == null) {
-				LOGGER.error("未找到邮件配置 tenantId" + tenantId);
-				throw new RuntimeException("未找到邮件配置 tenantId" + tenantId);
-			}
-
-			messageSenderPluginContext.sysEmail.setHostName(email1.getHostName());
-			messageSenderPluginContext.sysEmail.setSmtpPort(email1.getSmtpPort());
-			messageSenderPluginContext.sysEmail.setUserName(email1.getUserName());
-			messageSenderPluginContext.sysEmail.setPassword(email1.getPassword());
-			messageSenderPluginContext.sysEmail.setFromName(email1.getFromName());
-			messageSenderPluginContext.sysEmail.setFrom(email1.getFrom());
-		} catch (Exception e) {
-		    LOGGER.error("设置邮件配置错误: {} " + e);
-		}
-	}
 
 	@Override
 	public boolean sendSecurityCode(MessageSender messageSender, Integer userId, MessageTypeEnum messageType, String receiver) {
@@ -728,12 +522,12 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 		String key = getVerificationCodeCacheKey(messageType, receiver);
 		int code = DEFAULT_CODE;
-		if (debugMode == false) {
+		if (!debugMode) {
 			code = getRandomCode(messageType, receiver);
 		}
 		Map<Integer, String> receivers = new HashMap<>(1);
 		receivers.put(userId, receiver);
-		batchSendMessage(messageSender, messageType, receivers, null, 1, "","", code);
+		batchSendMessage(messageSender, messageType, receivers, null, 1, "","", Integer.toString(code));
 		redisCache.put(key, code + "", CODE_EXPIRE);
 		redisCache.put(key1, code + "", CODE_INTERVAL_TIME);
 		return true;
@@ -741,7 +535,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	@Override
 	public String getSendedVerificationCode(MessageTypeEnum type, String mobileNOOrEmailAddr) {
-		if (debugMode == true) {
+		if (debugMode) {
 			return DEFAULT_CODE + "";
 		}
 		String key = getVerificationCodeCacheKey(type, mobileNOOrEmailAddr);
@@ -759,12 +553,24 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	@Override
 	public Map<String, Integer> queryCountOfUnread(MessageSendMode type, Integer userId, String jpushType, Integer tenantId) {
-		List<Mapper> mappers = sysMessageDao.queryCountOfUnread(type, userId, jpushType, tenantId);
+		CbsMessageWrapper.SysMessageQuery query = new CbsMessageWrapper.SysMessageQuery();
+		query.setUserId(userId.longValue());
+		query.setClientType("STUDENT".equals(jpushType)?EClientType.STUDENT:
+				"TEACHER".equals(jpushType)?EClientType.TEACHER:
+						"SCHOOL".equals(jpushType)?EClientType.SCHOOL:EClientType.BACKEND);
+		query.setStatus(ESendStatus.SUCCESSED);
+		query.setAppKey(EAppKey.GYM);
+		query.setSendMode(type == null?null:type == MessageSendMode.SMS?EMessageSendMode.SMS:
+				type == MessageSendMode.EMAIL?EMessageSendMode.EMAIL:
+						type == MessageSendMode.PUSH?EMessageSendMode.PUSH:EMessageSendMode.SEO);
+		query.setReadStatus(false);
+		List<CbsMessageWrapper.MessageUnreadStat> messageUnreadStats = messageFeignClientService.messageUnreadStat(query).feignData();
+//		List<Mapper> mappers = sysMessageDao.queryCountOfUnread(type, userId, jpushType, tenantId);
 
 		Map<String, Integer> map = new HashMap<String, Integer>();
 
-		for (Mapper mapper : mappers) {
-			map.put(mapper.getKey().toString(), Integer.parseInt(mapper.getValue().toString()));
+		for (CbsMessageWrapper.MessageUnreadStat mapper : messageUnreadStats) {
+			map.put(mapper.getGroup().getCode(), mapper.getNumber());
 		}
 
 		return map;
@@ -797,17 +603,28 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	 * @return 修改的条数
 	 */
 	@Override
-	public int updateStatus(Integer userId, int status,String jpushType) {
-		return sysMessageDao.updateStatus(userId, status,jpushType);
+	public Boolean updateStatus(Integer userId, int status,String jpushType) {
+		CbsMessageWrapper.MessageRead messageRead = new CbsMessageWrapper.MessageRead();
+		messageRead.setUserId(userId.longValue());
+		messageRead.setAppKey(EAppKey.GYM);
+		messageRead.setClientType("STUDENT".equals(jpushType)?EClientType.STUDENT:
+				"TEACHER".equals(jpushType)?EClientType.TEACHER:
+						"SCHOOL".equals(jpushType)?EClientType.SCHOOL:EClientType.BACKEND);
+		return messageFeignClientService.batchSetRead(messageRead).feignData();
 	}
 
 	@Override
-	public int updateOneStatus(Long id, int status) {
-		return sysMessageDao.updateOneStatus(id, status);
+	public Boolean updateOneStatus(Long id) {
+		return messageFeignClientService.setRead(id).feignData();
 	}
 
 	@Override
-	public List<SysMessage> queryUserInRecentMinList(String mobile, int recentMin, MessageSendMode type) {
-		return sysMessageDao.queryUserInRecentMinList(mobile, recentMin, type);
+	public List<CbsMessageWrapper.SysMessage> queryUserInRecentMinList(String mobile, int recentMin, MessageSendMode type) {
+		CbsMessageWrapper.UserRecentMessageQuery query = new CbsMessageWrapper.UserRecentMessageQuery();
+		query.setPhone(mobile);
+		query.setRecentMin(recentMin);
+		query.setSendMode(EMessageSendMode.SMS);
+		query.setAppKey(EAppKey.GYM);
+		return messageFeignClientService.userRecentMessageRecords(query).feignData();
 	}
 }