From f0e6ec42ec688b155ec4f27c5d89b30f6bd959a0 Mon Sep 17 00:00:00 2001 From: YXY <932687738@qq.com> Date: Sun, 23 Apr 2023 20:50:13 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A3=9E=E4=B9=A6=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=E6=8F=90=E9=86=92=20=E5=88=87=E6=8D=A2=E4=B8=BA=E6=9C=BA?= =?UTF-8?q?=E5=99=A8=E4=BA=BA=E4=B8=80=E5=AF=B9=E4=B8=80=E7=A7=81=E8=81=8A?= =?UTF-8?q?=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LarkHelper/LarkRobotHelper.java | 59 +++++++++++++++++++ .../script/LarkTableFilterScriptHelper.java | 4 +- .../domain/lark/LarkRobotRequest.java | 46 +++++++++++++++ .../quartz/task/ScheduledRemindersTask.java | 53 ++++++++++++----- 4 files changed, 144 insertions(+), 18 deletions(-) create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkRobotHelper.java create mode 100644 ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkRobotRequest.java diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkRobotHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkRobotHelper.java new file mode 100644 index 0000000..926610b --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/LarkRobotHelper.java @@ -0,0 +1,59 @@ +package com.ruoyi.flyingbook.LarkHelper; + +import com.lark.oapi.service.im.v1.enums.CreateMessageReceiveIdTypeEnum; +import com.lark.oapi.service.im.v1.model.CreateMessageReq; +import com.lark.oapi.service.im.v1.model.CreateMessageReqBody; +import com.lark.oapi.service.im.v1.model.CreateMessageResp; +import com.lark.oapi.service.im.v1.model.CreateMessageRespBody; +import com.ruoyi.flyingbook.domain.lark.LarkRobotRequest; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + + +/** + * @author yuxiangyong + * @create 2023-03-12 18:10 + */ +@Slf4j +@Component +public class LarkRobotHelper extends LarkHelper{ + + + public static void main(String[] args) throws Exception { + LarkRobotHelper robotHelper = new LarkRobotHelper(); + LarkRobotRequest larkRobotRequest = new LarkRobotRequest(appId, secret, "ou_cd09481727e91fce1f12b7b0ed1500d2", "text", "{\"text\":\"test content\"}"); + CreateMessageRespBody resp = robotHelper.sendUserMessage(larkRobotRequest); + int i = 0; + } + + + /** + * 获取行详情 + * @return + */ + public CreateMessageRespBody sendUserMessage(LarkRobotRequest request) { + try { + CreateMessageResp createMessageResp = buildClient(request) + .im() + .message() + .create( + CreateMessageReq.newBuilder() + .createMessageReqBody(CreateMessageReqBody.newBuilder() + .msgType(request.getMsgType()) + .content(request.getContent()) + .receiveId(request.getReceiveId()) + .uuid(request.getUuid()) + .build()) + .receiveIdType(CreateMessageReceiveIdTypeEnum.OPEN_ID) + .build() + ); + if (createMessageResp.getCode() == 0){ + return createMessageResp.getData(); + }else { + throw new RuntimeException(createMessageResp.getMsg()); + } + } catch (Exception e) { + throw new RuntimeException(e.getMessage()); + } + } +} diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/script/LarkTableFilterScriptHelper.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/script/LarkTableFilterScriptHelper.java index d5c0bf6..5dd0da7 100644 --- a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/script/LarkTableFilterScriptHelper.java +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/LarkHelper/script/LarkTableFilterScriptHelper.java @@ -22,10 +22,10 @@ public class LarkTableFilterScriptHelper { Long minute = getMinute(larkTableConfiguration); switch (subType) { case REMINDER_BEFORE: - fromTime = fromTime.minusMinutes(minute); + fromTime = fromTime.plusMinutes(minute); break; case REMINDER_AFTER: - fromTime = fromTime.plusMinutes(minute); + fromTime = fromTime.minusMinutes(minute); break; default: break; diff --git a/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkRobotRequest.java b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkRobotRequest.java new file mode 100644 index 0000000..2a431a4 --- /dev/null +++ b/ruoyi-flyingbook/src/main/java/com/ruoyi/flyingbook/domain/lark/LarkRobotRequest.java @@ -0,0 +1,46 @@ +package com.ruoyi.flyingbook.domain.lark; + +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; +import java.util.Map; + +/** + * @author yuxiangyong + * @create 2023-03-18 1:05 + */ +@Data +@NoArgsConstructor +public class LarkRobotRequest extends LarkRequest{ + + + /** + * 唯一即可 + */ + private String uuid; + /** + * 内容 + */ + private String content; + /** + * 类型 + */ + private String msgType; + /** + * 接收人id + */ + private String receiveId; + + public LarkRobotRequest(String appId, String appSecret) { + super(appId, appSecret); + } + + public LarkRobotRequest(String appId, String appSecret, String receiveId,String msgType,String content) { + super(appId, appSecret); + this.receiveId = receiveId; + this.msgType = msgType; + this.content = content; + this.uuid = String.valueOf(new Date().getTime()); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/ScheduledRemindersTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/ScheduledRemindersTask.java index 5b39659..8343915 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/ScheduledRemindersTask.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/ScheduledRemindersTask.java @@ -7,12 +7,14 @@ import com.google.gson.internal.LinkedTreeMap; import com.lark.oapi.service.bitable.v1.model.AppTableRecord; import com.lark.oapi.service.bitable.v1.model.ListAppTableRecordRespBody; import com.ruoyi.common.enums.*; +import com.ruoyi.flyingbook.LarkHelper.LarkRobotHelper; import com.ruoyi.flyingbook.LarkHelper.LarkTableHelper; import com.ruoyi.flyingbook.LarkHelper.script.LarkTableFilterScriptHelper; import com.ruoyi.flyingbook.domain.EventLog; import com.ruoyi.flyingbook.domain.LarkCompanyTableInfo; import com.ruoyi.flyingbook.domain.LarkTableConfiguration; import com.ruoyi.flyingbook.domain.LarkTemplate; +import com.ruoyi.flyingbook.domain.lark.LarkRobotRequest; import com.ruoyi.flyingbook.domain.lark.LarkTableRequest; import com.ruoyi.flyingbook.mapper.EventLogMapper; import com.ruoyi.flyingbook.mapper.LarkTableConfigurationMapper; @@ -25,7 +27,10 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.math.BigDecimal; +import java.time.Instant; import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -52,6 +57,8 @@ public class ScheduledRemindersTask { private LarkTableConfigurationMapper larkTableConfigurationMapper; @Autowired private EventLogMapper eventLogMapper; + @Autowired + private LarkRobotHelper larkRobotHelper; /** * 查询分页大小 @@ -71,7 +78,7 @@ public class ScheduledRemindersTask { } List logList = new ArrayList<>(); LocalDateTime now = LocalDateTime.now(); -// LocalDateTime now = LocalDateTime.of(2023, 4, 22, 10, 0); +// LocalDateTime now = LocalDateTime.of(2023, 4, 23, 20, 0); for (LarkCompanyTableInfo larkCompanyTableInfo : larkList) { try { List larkConfiguration = this.getLarkConfiguration(larkCompanyTableInfo); @@ -82,12 +89,12 @@ public class ScheduledRemindersTask { } if (ConfigurationSubTypeEnum.REMINDER_AROUND.equals(subType)) { String script = LarkTableFilterScriptHelper.buildTimeRange(larkTableConfiguration, ConfigurationSubTypeEnum.REMINDER_BEFORE, RANGE_KEY, now); - this.sendMessage(script, larkCompanyTableInfo, logList,larkTableConfiguration); + this.sendMessage(script, larkCompanyTableInfo, logList,larkTableConfiguration,now); script = LarkTableFilterScriptHelper.buildTimeRange(larkTableConfiguration, ConfigurationSubTypeEnum.REMINDER_AFTER, RANGE_KEY, now); - this.sendMessage(script, larkCompanyTableInfo, logList,larkTableConfiguration); + this.sendMessage(script, larkCompanyTableInfo, logList,larkTableConfiguration,now); } else { String script = LarkTableFilterScriptHelper.buildTimeRange(larkTableConfiguration, subType, RANGE_KEY, now); - this.sendMessage(script, larkCompanyTableInfo, logList,larkTableConfiguration); + this.sendMessage(script, larkCompanyTableInfo, logList,larkTableConfiguration,now); } } } catch (Exception e) { @@ -101,12 +108,12 @@ public class ScheduledRemindersTask { log.info("scheduledRemindersTask end"); } - private void sendMessage(String script, LarkCompanyTableInfo larkCompanyTableInfo, List logList,LarkTableConfiguration larkTableConfiguration) { + private void sendMessage(String script, LarkCompanyTableInfo larkCompanyTableInfo, List logList,LarkTableConfiguration larkTableConfiguration,LocalDateTime now) { String pageToken = null; LarkTableRequest request = this.buildRequest(larkCompanyTableInfo, script); LarkTemplate template = this.getTemplate(larkCompanyTableInfo,larkTableConfiguration.getId()); do { - JSONObject msg = new JSONObject(); + Object msg = new JSONObject(); ListAppTableRecordRespBody respBody = larkTableHelper.listTableRecord(request); if (respBody.getPageToken().equals(pageToken)){ return; @@ -116,8 +123,12 @@ public class ScheduledRemindersTask { for (AppTableRecord item : respBody.getItems()) { try { Map fields = item.getFields(); + LocalDateTime localDateTime = changeLocalDateTime((Double) fields.get(RANGE_KEY)); + if ((localDateTime.getHour() == now.getHour() )&& localDateTime.getMinute() == now.getMinute()){ + continue; + } msg = this.buildMsg(larkCompanyTableInfo, fields, template); - OkHttpHelper.post(larkCompanyTableInfo.getToAppToken(), msg.toString()); + logList.add(new EventLog(larkCompanyTableInfo.getId(), EventOperateType.SCHEDULE_REMINDER.getCode(), msg.toString())); } catch (Exception e) { log.error("ScheduledRemindersTask#scheduledReminders error request tableId:{} msg:{}", JSONObject.toJSONString(larkCompanyTableInfo), msg.toString(), e); @@ -127,6 +138,14 @@ public class ScheduledRemindersTask { } while (StringUtils.isNotBlank(pageToken)); } + private LocalDateTime changeLocalDateTime(Double timestamp){ + BigDecimal bigDecimal = new BigDecimal(timestamp.toString()); + long time = bigDecimal.longValue(); + Instant instant = Instant.ofEpochMilli(time); + ZoneId zone = ZoneId.systemDefault(); + return LocalDateTime.ofInstant(instant, zone); + } + private LarkTemplate getTemplate(LarkCompanyTableInfo larkCompanyTableInfo,Long configurationId) { LarkTemplate larkTemplate = new LarkTemplate(); larkTemplate.setTemplateType(TemplateTypeEnum.SCHEDULED_REMINDER.getCode()); @@ -155,26 +174,28 @@ public class ScheduledRemindersTask { return configurationList; } - private JSONObject buildMsg(LarkCompanyTableInfo larkCompanyTableInfo, Map fields, LarkTemplate template) { - JSONObject msg = new JSONObject(); + private Object buildMsg(LarkCompanyTableInfo larkCompanyTableInfo, Map fields, LarkTemplate template) { + Object msg = ""; TemplateSubTypeEnum templateSubTypeEnum = TemplateSubTypeEnum.getByCode(template.getSubTemplateType()); if (templateSubTypeEnum == null) { throw new RuntimeException(String.format("当前tableId:%s 模板类型%s对应策略不存在", larkCompanyTableInfo.getId(), template.getSubTemplateType())); } + LarkRobotRequest robotRequest = new LarkRobotRequest(larkCompanyTableInfo.getAppId(),larkCompanyTableInfo.getAppSecret()); switch (templateSubTypeEnum) { case TEXT: - msg.put("msg_type", templateSubTypeEnum.getCode()); + robotRequest.setMsgType(templateSubTypeEnum.getCode()); String templateContent = template.getTemplateContent(); + templateContent = templateContent.replaceAll("#name", String.valueOf(fields.get("学生姓名"))); + JSONObject body = new JSONObject(); + body.put("text",templateContent); + robotRequest.setContent(body.toJSONString()); List> people = (List>)fields.get("业务员"); - StringBuilder sb = new StringBuilder(); for (int i = 0; i < people.size(); i++) { LinkedTreeMap detail = people.get(i); - sb.append(String.format("%s", detail.get("id"), detail.get("name"))); + robotRequest.setReceiveId(detail.get("id")); + msg = robotRequest; + larkRobotHelper.sendUserMessage(robotRequest); } - templateContent = templateContent.replaceAll("#name", String.valueOf(fields.get("学生姓名"))); - JSONObject content = new JSONObject(); - content.put("text", sb.append(templateContent).toString()); - msg.put("content", content); break; default: break;