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 75c1fe33..76ac304e 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 @@ -26,4 +26,8 @@ public interface SubscribeMessageSendApi { @PostMapping(PREFIX + "/send-company-notice") @Operation(summary = "发送公司公告通知") CommonResult sendCompanyNotice(@RequestBody SubscribeMessageReqDTO reqDTO); + + @PostMapping(PREFIX + "/send-worklog-comment") + @Operation(summary = "发送日志评论、回复通知") + CommonResult sendWorkLogComment(@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 950d5793..9cd4230c 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 @@ -48,6 +48,13 @@ public class SubscribeMessageSendApiImpl implements SubscribeMessageSendApi { return success(1L); } + @SneakyThrows + @Override + public CommonResult sendWorkLogComment(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/convert/worklog/LogCommentConvert.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/worklog/LogCommentConvert.java new file mode 100644 index 00000000..e0d40cee --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/convert/worklog/LogCommentConvert.java @@ -0,0 +1,66 @@ +package cn.iocoder.yudao.module.system.convert.worklog; + +import cn.iocoder.yudao.framework.common.util.date.DateUtils; +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.comment.WorkLogCommentDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +import java.util.Date; + +@Mapper +public interface LogCommentConvert { + + LogCommentConvert INSTANCE = Mappers.getMapper(LogCommentConvert.class); + + /** + * @param openId 微信小程序唯一id + * @param logCommentDO 评论对象 + * @param nickname 发布人姓名 + * @param miniProgramState 小程序的状态 + * @return + */ + default SubscribeMessageReqDTO convertLogComment(String openId, WorkLogCommentDO logCommentDO, String nickname, String miniProgramState) { + + SubscribeMessageReqDTO message = new SubscribeMessageReqDTO(); + message.setToUser(openId); + message.setTemplateId("fH29xjNb8pe-7onQ-wE3QrBAC-y8aaC_oosYZKNMtzM"); + + //消息类型 + MsgData noticeType = new MsgData(); + noticeType.setName("phrase8"); + if (logCommentDO.getType()) { + noticeType.setValue("评论回复"); + }else { + noticeType.setValue("日志评论"); + } + message.addData(noticeType); + + //发送人 + MsgData publishMan = new MsgData(); + publishMan.setName("thing16"); + 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); + + //消息内容 + MsgData content = new MsgData(); + String comment = logCommentDO.getComment(); + content.setName("thing2"); + if (comment.length() > 10) { + comment = comment.substring(0,10) + ". . . . "; + } + content.setValue(comment); + message.addData(content); + + message.setMiniprogramState(miniProgramState); + message.setPage("/subPages/notice/detail?id="); + return message; + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/comment/WorkLogCommentServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/comment/WorkLogCommentServiceImpl.java index 6a4ccbe8..0fbf0727 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/comment/WorkLogCommentServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/comment/WorkLogCommentServiceImpl.java @@ -5,15 +5,21 @@ import cn.hutool.json.JSONObject; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; +import cn.iocoder.yudao.module.system.api.subscribe.SubscribeMessageSendApi; +import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceRespVO; import cn.iocoder.yudao.module.system.controller.app.comment.dto.CommentDTO; import cn.iocoder.yudao.module.system.controller.app.comment.vo.CommentPageListVO; import cn.iocoder.yudao.module.system.controller.app.comment.vo.CommentTypeCountVO; import cn.iocoder.yudao.module.system.controller.app.comment.vo.WorkLogCommentPageReqVO; import cn.iocoder.yudao.module.system.controller.app.comment.vo.WorkLogCommentSaveReqVO; +import cn.iocoder.yudao.module.system.convert.worklog.LogCommentConvert; import cn.iocoder.yudao.module.system.dal.dataobject.comment.WorkLogCommentDO; +import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogFormDO; import cn.iocoder.yudao.module.system.dal.mysql.comment.WorkLogCommentMapper; +import cn.iocoder.yudao.module.system.service.user.AdminUserService; import cn.iocoder.yudao.module.system.service.worklog.LogFormService; +import cn.iocoder.yudao.module.system.service.worklog.LogInstanceService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -21,6 +27,7 @@ import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -39,6 +46,15 @@ public class WorkLogCommentServiceImpl implements WorkLogCommentService { @Resource private LogFormService logFormService; + @Resource + private AdminUserService userService; + + @Resource + private LogInstanceService logInstanceService; + + @Resource + private SubscribeMessageSendApi subscribeMessageSendApi; + @Override public Long createWorkLogComment(WorkLogCommentSaveReqVO createReqVO) { // 插入 @@ -46,6 +62,10 @@ public class WorkLogCommentServiceImpl implements WorkLogCommentService { Long userId = WebFrameworkUtils.getLoginUserId(); workLogComment.setUserId(userId); workLogCommentMapper.insert(workLogComment); + + //创建评论、回复后, 发送消息通知 + sendMessage(workLogComment); + // 返回 return workLogComment.getId(); } @@ -134,4 +154,26 @@ public class WorkLogCommentServiceImpl implements WorkLogCommentService { return vo; } + /** + * 评论或回复 发送消息通知 + */ + private void sendMessage(WorkLogCommentDO workLogComment) { + + //获得日志详情 + LogInstanceRespVO instanceDO = logInstanceService.getLogInstance(workLogComment.getWorkLogId()); + + //获得 用户信息Map + Map userMap = userService.getUserMap(Arrays.asList(instanceDO.getStartUserId(), workLogComment.getUserId())); + + String openId = userMap.get(instanceDO.getStartUserId()).getOpenId(); + + if (openId != null) { + + //发送消息通知 + subscribeMessageSendApi.sendCompanyNotice(LogCommentConvert.INSTANCE.convertLogComment( + openId, workLogComment, userMap.get(workLogComment.getUserId()).getNickname(), + "formal")); + } + + } } \ No newline at end of file