diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/SubscribeMessageSendApi.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/SubscribeMessageSendApi.java index 0509fb8b..75c1fe33 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/SubscribeMessageSendApi.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/SubscribeMessageSendApi.java @@ -22,4 +22,8 @@ public interface SubscribeMessageSendApi { @PostMapping(PREFIX + "/send-process-todo-reminder") @Operation(summary = "发送OA流程待办提醒") CommonResult sendProcessToDoReminder(@RequestBody SubscribeMessageReqDTO reqDTO); + + @PostMapping(PREFIX + "/send-company-notice") + @Operation(summary = "发送公司公告通知") + CommonResult sendCompanyNotice(@RequestBody SubscribeMessageReqDTO reqDTO); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/SubscribeMessageSendApiImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/SubscribeMessageSendApiImpl.java index 91ec0ae4..950d5793 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/SubscribeMessageSendApiImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/api/subscribe/SubscribeMessageSendApiImpl.java @@ -41,6 +41,13 @@ public class SubscribeMessageSendApiImpl implements SubscribeMessageSendApi { return success(1L); } + @SneakyThrows + @Override + public CommonResult sendCompanyNotice(SubscribeMessageReqDTO reqDTO) { + socialClientService.getWxMaService().getMsgService().sendSubscribeMsg(initWxMaSubscribeMessage(reqDTO)); + return success(1L); + } + private WxMaSubscribeMessage initWxMaSubscribeMessage(SubscribeMessageReqDTO reqDTO) { WxMaSubscribeMessage message = WxMaSubscribeMessage.builder() .toUser(reqDTO.getToUser()) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/NoticeController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/NoticeController.java index 138f2d9a..33821c69 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/NoticeController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/notice/NoticeController.java @@ -85,7 +85,10 @@ public class NoticeController { NoticeDO notice = noticeService.getNotice(id); Assert.notNull(notice, "公告不能为空"); // 通过 websocket 推送给在线的用户 - webSocketSenderApi.sendObject(UserTypeEnum.ADMIN.getValue(), "notice-push", notice); + //webSocketSenderApi.sendObject(UserTypeEnum.ADMIN.getValue(), "notice-push", notice); + //小程序发送公告订阅消息 + //获取改造方式, push 方法传入需要推送的用户ID集合【 将ID集合查询出用户集合, 只获取openId的用户,进行推送 】 + noticeService.sendNotice(notice); return success(true); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/notice/NoticeConvert.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/notice/NoticeConvert.java new file mode 100644 index 00000000..a4bfe192 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/notice/NoticeConvert.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.module.system.convert.notice; + +import cn.iocoder.yudao.framework.common.util.date.DateUtils; +import cn.iocoder.yudao.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO; +import cn.iocoder.yudao.module.system.api.subscribe.dto.MsgData; +import cn.iocoder.yudao.module.system.api.subscribe.dto.SubscribeMessageReqDTO; +import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +import java.util.Date; +import java.util.Map; + +/** + * 功能描述 + * + * @author: yj + * @date: 2024年04月07日 19:44 + */ +@Mapper +public interface NoticeConvert { + + NoticeConvert INSTANCE = Mappers.getMapper(NoticeConvert.class); + + /** + * @param openId 微信小程序唯一id + * @param notice 公告对象 + * @param nickname 发布人姓名 + * @param miniProgramState 小程序的状态 + * @return + */ + default SubscribeMessageReqDTO convertCompanyNotice(String openId, NoticeDO notice, String nickname, String miniProgramState) { + SubscribeMessageReqDTO message = new SubscribeMessageReqDTO(); + message.setToUser(openId); + message.setTemplateId("OF4-948Vz9rtE_VA55rmDxo4azOwmrjjk33jDpOiPiY"); + //通知类型 + MsgData noticeType = new MsgData(); + noticeType.setName("thing1"); + noticeType.setValue(notice.getType()+""); //这里根据业务需求填写具体的公告类型 如全员公告, xxx公告 + message.addData(noticeType); + + //公告标题 + MsgData title = new MsgData(); + title.setName("thing6"); + title.setValue(notice.getTitle()); + message.addData(title); + + //通知内容 + MsgData content = new MsgData(); + content.setName("thing2"); + content.setValue("具体内容请进入小程序查看"); + message.addData(content); + + //发布人 + MsgData publishMan = new MsgData(); + publishMan.setName("thing9"); + publishMan.setValue(nickname); + message.addData(publishMan); + + //通知时间 + MsgData createTime = new MsgData(); + createTime.setName("time3"); + createTime.setValue(DateUtils.dateFormat(new Date(), DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)); + message.addData(createTime); + + message.setMiniprogramState(miniProgramState); + message.setPage("pages/index"); + return message; + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeService.java index c935c49b..c714098f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeService.java @@ -48,4 +48,9 @@ public interface NoticeService { */ NoticeDO getNotice(Long id); + /** + * 小程序发送公告订阅消息 + * @param notice + */ + void sendNotice(NoticeDO notice) ; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java index 9b2ed587..d0617473 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/notice/NoticeServiceImpl.java @@ -1,16 +1,25 @@ package cn.iocoder.yudao.module.system.service.notice; +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.system.api.subscribe.SubscribeMessageSendApi; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticePageReqVO; import cn.iocoder.yudao.module.system.controller.admin.notice.vo.NoticeSaveReqVO; +import cn.iocoder.yudao.module.system.convert.notice.NoticeConvert; import cn.iocoder.yudao.module.system.dal.dataobject.notice.NoticeDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.mysql.notice.NoticeMapper; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import com.google.common.annotations.VisibleForTesting; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.List; + import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.NOTICE_NOT_FOUND; @@ -70,4 +79,27 @@ public class NoticeServiceImpl implements NoticeService { } } + /** 添加小程序发送公告通知 add by yj 2024-04-07*/ + @Resource + private AdminUserService userService; + @Resource + private SubscribeMessageSendApi subscribeMessageSendApi; + + public void sendNotice(NoticeDO notice) { + //获取当前登陆用户的名称 + LoginUser user = SecurityFrameworkUtils.getLoginUser() ; + AdminUserDO currentUser = userService.getUser(user.getId()) ; + + //查询所有状态是开启的用户 + List list = userService.getUserListByStatus(CommonStatusEnum.ENABLE.getStatus()); + for(AdminUserDO adminUserDO : list) { + if( adminUserDO.getOpenId() != null && !adminUserDO.getOpenId().equals("") ) { + System.out.println("====" + adminUserDO.getNickname()); + //获取openId有值的用户 + subscribeMessageSendApi.sendCompanyNotice(NoticeConvert.INSTANCE.convertCompanyNotice( + adminUserDO.getOpenId(), notice , currentUser.getNickname(), + "formal")); + } + } + } }