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<SendDingtalkMapper, SendDingtalk> implements SendDingtalkService {
|
|
|
private final SimpleExample simpleExample;
|
|
private final SendMessageService sendMessageService;
|
|
@Override
|
public void getDingTalkUserId() throws Exception {
|
String accessToken = simpleExample.getAccessToken();
|
|
LambdaQueryWrapper<SendDingtalk> wrapper = new LambdaQueryWrapper<>();
|
wrapper.isNull(SendDingtalk::getUserId);
|
List<SendDingtalk> 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<String> 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<SendDingtalk> updateWrapper = new LambdaUpdateWrapper<>();
|
updateWrapper.set(SendDingtalk::getUserId, userId).eq(SendDingtalk::getId, s.getId());
|
|
update(updateWrapper);
|
}
|
|
});
|
}
|
|
@Override
|
public void sendDingTalkFiveMinute() throws Exception {
|
|
LambdaQueryWrapper<SendDingtalk> wrapper = new LambdaQueryWrapper<>();
|
wrapper.eq(SendDingtalk::getFiveMinuteReminder, 1);
|
|
List<SendDingtalk> list = list(wrapper);
|
|
getMessage(list, 5);
|
}
|
|
@Override
|
public void sendDingTalkthirtyMinute() throws Exception {
|
LambdaQueryWrapper<SendDingtalk> wrapper = new LambdaQueryWrapper<>();
|
wrapper.eq(SendDingtalk::getThirtyMinuteReminder, 1);
|
|
List<SendDingtalk> list = list(wrapper);
|
|
getMessage(list, 30);
|
}
|
|
@Override
|
public void chatSendMessage() throws Exception {
|
List<SendMessage> 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<SendDingtalk> list, int Minutes) {
|
List<SendMessage> 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("发送成功");
|
}
|
});
|
}
|
}
|