package com.gs.dingtalk.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dingtalk.api.response.OapiV2UserGetbymobileResponse; import com.google.gson.Gson; import com.gs.dingtalk.dto.DingTalkMessage; import com.gs.dingtalk.dto.DingTalkResponse; import com.gs.dingtalk.entity.SendDingtalk; import com.gs.dingtalk.entity.SendMessage; import com.gs.dingtalk.mapper.SendDingtalkMapper; import com.gs.dingtalk.service.SendDingtalkService; import com.gs.dingtalk.service.SendMessageService; import com.gs.dingtalk.service.SimpleExample; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @Service @RequiredArgsConstructor @Transactional(rollbackFor = Exception.class) public class SendDingtalkServiceImpl extends ServiceImpl implements SendDingtalkService { private final SimpleExample simpleExample; private final SendMessageService sendMessageService; @Override public void getDingTalkUserId() throws Exception { String accessToken = simpleExample.getAccessToken(); LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.isNull(SendDingtalk::getUserId); List list = list(wrapper); list.forEach(s -> { OapiV2UserGetbymobileResponse rsp = simpleExample.getOapiV2UserGetbymobileResponse(s, accessToken); // 使用 Gson 解析响应数据 Gson gson = new Gson(); DingTalkResponse response = gson.fromJson(rsp.getBody(), DingTalkResponse.class); if ("ok".equals(response.getErrmsg())) { List exclusiveAccountUseridList = response.getResult().getExclusiveAccountUseridList(); String userId = ""; if (CollectionUtil.isNotEmpty(exclusiveAccountUseridList)) { userId = exclusiveAccountUseridList.get(0); } else if (StrUtil.isNotEmpty(response.getResult().getUserid())) { userId = response.getResult().getUserid(); } LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.set(SendDingtalk::getUserId, userId).eq(SendDingtalk::getId, s.getId()); update(updateWrapper); } }); } @Override public void sendDingTalkFiveMinute() throws Exception { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SendDingtalk::getFiveMinuteReminder, 1); List list = list(wrapper); getMessage(list, 5); } @Override public void sendDingTalkthirtyMinute() throws Exception { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SendDingtalk::getThirtyMinuteReminder, 1); List list = list(wrapper); getMessage(list, 30); } @Override public void chatSendMessage() throws Exception { List sendMessageList = sendMessageService.getSendMessageList(); sendMessageList.forEach(s -> { //钉钉的规则限制 给同一员工一天只能发送一条内容相同的消息通知。 String message = s.getLineName() + s.getProcName() + ",请尽快处理"; DingTalkResponse dingTalkResponse = null; try { dingTalkResponse = simpleExample.chatSendMessage(message); } catch (Exception e) { throw new RuntimeException(e); } if (dingTalkResponse != null) { if (dingTalkResponse.getErrcode() == 0) { System.out.println("发送成功"); } } }); } private void getMessage(List list, int Minutes) { List sendMessageList = sendMessageService.getSendMessageList(); sendMessageList.forEach(s -> { // 获取当前时间的 LocalDateTime,忽略秒 LocalDateTime now = LocalDateTime.now().withSecond(0).withNano(0); // 比较时间,判断 sendDate 是否大于当前时间五分钟 boolean isGreaterThanFiveMinutes = s.getSendDate().plusMinutes(Minutes).isBefore(now); if (!isGreaterThanFiveMinutes) { return; } String userIdList = list.stream().filter(dingtalk -> { String[] purviews = dingtalk.getPurview().split(","); return Arrays.asList(purviews).contains(s.getProcNo()); }).map(SendDingtalk::getUserId).collect(Collectors.joining(",")); String message = s.getLineName() + s.getProcName() + ",请尽快处理"; DingTalkMessage dingTalkMessage = null; try { dingTalkMessage = simpleExample.sendMessage(userIdList, message); } catch (Exception e) { throw new RuntimeException(e); } if (dingTalkMessage.getErrcode() == 0) { System.out.println("发送成功"); } }); } }