package com.gs.dingtalk.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.gs.dingtalk.dto.DingTalkMessage;
|
import com.gs.dingtalk.dto.QaMsgDto;
|
import com.gs.dingtalk.entity.MesQaDingtalk;
|
import com.gs.dingtalk.entity.QaRkj;
|
import com.gs.dingtalk.entity.QaSj;
|
import com.gs.dingtalk.entity.QaXj;
|
import com.gs.dingtalk.service.*;
|
import com.gs.dingtalk.mapper.MesQaDingtalkMapper;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.util.StringUtils;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* @author Administrator
|
* @description 针对表【MES_QA_DINGTALK】的数据库操作Service实现
|
* @createDate 2025-12-03 18:53:07
|
*/
|
@Service
|
@RequiredArgsConstructor
|
@Transactional(rollbackFor = Exception.class)
|
public class MesQaDingtalkServiceImpl extends ServiceImpl<MesQaDingtalkMapper, MesQaDingtalk>
|
implements MesQaDingtalkService {
|
|
private final SimpleExample simpleExample;
|
|
private final QaSjService qaSjService;
|
|
private final QaXjService qaXjService;
|
|
private final QaRkjService qaRkjService;
|
|
@Override
|
public void sendQaMsgSJ(QaMsgDto dto) {
|
// 对dto.getId()进行判空处理
|
if (dto.getId() == null) {
|
log.warn("检验ID为空,无法发送消息");
|
return;
|
}
|
|
LambdaQueryWrapper<MesQaDingtalk> wrapper = new LambdaQueryWrapper<>();
|
|
wrapper.eq(MesQaDingtalk::getLineName, dto.getLineName())
|
.eq(MesQaDingtalk::getDepartmentname, dto.getWorkshopName())
|
.eq(MesQaDingtalk::getQaType, dto.getQaType());
|
|
//获取到用户id,当用户没有id时重新获取并更新MesQaDingtalk表
|
List<MesQaDingtalk> list = list(wrapper);
|
|
if (list.isEmpty()) {
|
// 如果没有找到对应的用户,直接返回
|
return;
|
}
|
|
LambdaQueryWrapper<QaSj> qaSjQueryWrapper = new LambdaQueryWrapper<>();
|
qaSjQueryWrapper.eq(QaSj::getId, dto.getId());
|
QaSj qaSj = qaSjService.getOne(qaSjQueryWrapper, false);
|
|
if (qaSj == null) {
|
// 如果没有找到对应的检验信息,直接返回
|
return;
|
}
|
|
String message = String.format("首件检验单号:%s, 物料:%s-%s, 车间:%s线体:%s, 工单:%s, 结果:%s, 请进行后续处理",
|
qaSj.getBillNo(), qaSj.getItemNo(), qaSj.getItemName(), qaSj.getWorkshopName(),
|
qaSj.getLineName(), qaSj.getDaa001(), qaSj.getJyjg());
|
|
List<String> sidList = list.stream()
|
.map(MesQaDingtalk::getTelephone)
|
.collect(Collectors.toList());
|
|
List<String> userIdList = getDingtalkUserIdListByPhones(sidList);
|
|
if (userIdList == null || userIdList.isEmpty()) {
|
log.warn("没有有效的钉钉用户ID");
|
return;
|
}
|
|
String userIdListStr = String.join(",", userIdList);
|
|
|
DingTalkMessage dingTalkMessage = null;
|
try {
|
dingTalkMessage = simpleExample.sendMessage(userIdListStr, message);
|
} catch (Exception e) {
|
throw new RuntimeException("发送钉钉消息失败", e);
|
}
|
|
if (dingTalkMessage != null && dingTalkMessage.getErrcode() == 0) {
|
System.out.println("发送成功");
|
} else {
|
System.out.println("发送失败");
|
}
|
}
|
|
@Override
|
public void sendQaMsgXJ(QaMsgDto dto) {
|
// 对dto.getId()进行判空处理
|
if (dto.getId() == null) {
|
log.warn("巡检ID为空,无法发送消息");
|
return;
|
}
|
|
LambdaQueryWrapper<MesQaDingtalk> wrapper = new LambdaQueryWrapper<>();
|
|
wrapper.eq(MesQaDingtalk::getLineName, dto.getLineName())
|
.eq(MesQaDingtalk::getDepartmentname, dto.getWorkshopName())
|
.eq(MesQaDingtalk::getQaType, dto.getQaType());
|
|
//获取到用户id,当用户没有id时重新获取并更新MesQaDingtalk表
|
List<MesQaDingtalk> list = list(wrapper);
|
|
if (list.isEmpty()) {
|
// 如果没有找到对应的用户,直接返回
|
return;
|
}
|
|
LambdaQueryWrapper<QaXj> qaXjQueryWrapper = new LambdaQueryWrapper<>();
|
qaXjQueryWrapper.eq(QaXj::getId, dto.getId());
|
QaXj qaXj = qaXjService.getOne(qaXjQueryWrapper, false);
|
|
if (qaXj == null) {
|
// 如果没有找到对应的巡检信息,直接返回
|
return;
|
}
|
|
String message = String.format("巡检单号:%s, 物料:%s-%s, 车间:%s线体:%s, 工单:%s, 结果:%s, 请进行后续处理",
|
qaXj.getReleaseNo(), qaXj.getItemNo(), qaXj.getItemName(), qaXj.getDepartmentname(),
|
qaXj.getLineName(), qaXj.getDaa001(), qaXj.getFcheckResu());
|
|
// 把List<MesQaDingtalk>中的userId使用,拼接起来变成userIdList这个变量
|
|
List<String> sidList = list.stream()
|
.map(MesQaDingtalk::getTelephone)
|
.collect(Collectors.toList());
|
|
List<String> userIdList = getDingtalkUserIdListByPhones(sidList);
|
|
if (userIdList == null || userIdList.isEmpty()) {
|
log.warn("没有有效的钉钉用户ID");
|
return;
|
}
|
|
String userIdListStr = String.join(",", userIdList);
|
|
|
DingTalkMessage dingTalkMessage = null;
|
try {
|
dingTalkMessage = simpleExample.sendMessage(userIdListStr, message);
|
} catch (Exception e) {
|
throw new RuntimeException("发送钉钉消息失败", e);
|
}
|
|
if (dingTalkMessage != null && dingTalkMessage.getErrcode() == 0) {
|
System.out.println("发送成功");
|
} else {
|
System.out.println("发送失败");
|
}
|
}
|
|
@Override
|
public void sendQaMsgRKJ(QaMsgDto dto) {
|
// 对dto.getId()进行判空处理
|
if (dto.getId() == null) {
|
log.warn("入库检ID为空,无法发送消息");
|
return;
|
}
|
|
LambdaQueryWrapper<MesQaDingtalk> wrapper = new LambdaQueryWrapper<>();
|
|
wrapper.eq(MesQaDingtalk::getLineName, dto.getLineName())
|
.eq(MesQaDingtalk::getDepartmentname, dto.getWorkshopName())
|
.eq(MesQaDingtalk::getQaType, dto.getQaType());
|
|
//获取到用户id,当用户没有id时重新获取并更新MesQaDingtalk表
|
List<MesQaDingtalk> list = list(wrapper);
|
|
if (list.isEmpty()) {
|
// 如果没有找到对应的用户,直接返回
|
return;
|
}
|
|
LambdaQueryWrapper<QaRkj> qaRkjQueryWrapper = new LambdaQueryWrapper<>();
|
qaRkjQueryWrapper.eq(QaRkj::getId, dto.getId());
|
QaRkj qaRkj = qaRkjService.getOne(qaRkjQueryWrapper, false);
|
|
if (qaRkj == null) {
|
// 如果没有找到对应的入库检信息,直接返回
|
return;
|
}
|
|
String message = String.format("入库检单号:%s, 物料:%s-%s, 车间:%s线体:%s, 工单:%s, 结果:%s, 请进行后续处理",
|
qaRkj.getReleaseNo(), qaRkj.getItemNo(), qaRkj.getItemName(), qaRkj.getDepartmentname(),
|
qaRkj.getDaa020(), qaRkj.getDaa001(), qaRkj.getFcheckResu());
|
|
// 把List<MesQaDingtalk>中的userId使用,拼接起来变成userIdList这个变量
|
|
List<String> sidList = list.stream()
|
.map(MesQaDingtalk::getTelephone)
|
.collect(Collectors.toList());
|
|
List<String> userIdList = getDingtalkUserIdListByPhones(sidList);
|
|
if (userIdList == null || userIdList.isEmpty()) {
|
log.warn("没有有效的钉钉用户ID");
|
return;
|
}
|
|
String userIdListStr = String.join(",", userIdList);
|
|
|
DingTalkMessage dingTalkMessage = null;
|
try {
|
dingTalkMessage = simpleExample.sendMessage(userIdListStr, message);
|
} catch (Exception e) {
|
throw new RuntimeException("发送钉钉消息失败", e);
|
}
|
|
if (dingTalkMessage != null && dingTalkMessage.getErrcode() == 0) {
|
System.out.println("发送成功");
|
} else {
|
System.out.println("发送失败");
|
}
|
}
|
|
private List<String> getDingtalkUserIdListByPhones(List<String> phoneList) {
|
try {
|
if (phoneList == null || phoneList.isEmpty()) {
|
return new ArrayList<>();
|
}
|
|
// 去重
|
phoneList = phoneList.stream().distinct().collect(Collectors.toList());
|
|
// 根据sid查询DingtalkInfo
|
List<MesQaDingtalk> list = baseMapper.selectList(
|
new LambdaQueryWrapper<MesQaDingtalk>().in(MesQaDingtalk::getTelephone, phoneList)
|
);
|
|
if (list == null || list.isEmpty()) {
|
return new ArrayList<>();
|
}
|
|
// 使用stream流过滤出list中dingtalkId为空的数据
|
List<MesQaDingtalk> emptyDingtalkIdList = list.stream()
|
.filter(info -> !StringUtils.hasText(info.getUserId()))
|
.collect(Collectors.toList());
|
|
// 如果存在为空的数据就通过钉钉的接口获取,为dingtalkId赋值,并且更新数据库
|
if (!emptyDingtalkIdList.isEmpty()) {
|
String accessToken = simpleExample.getAccessToken();
|
|
for (MesQaDingtalk info : emptyDingtalkIdList) {
|
if (StringUtils.hasText(info.getTelephone())) {
|
try {
|
// 通过手机号获取钉钉用户ID
|
com.dingtalk.api.response.OapiV2UserGetbymobileResponse response =
|
simpleExample.getOapiV2UserGetbymobileResponse(info.getTelephone(), accessToken);
|
|
if (response != null && response.getResult() != null) {
|
info.setUserId(response.getResult().getUserid());
|
// 更新数据库
|
updateById(info);
|
}
|
} catch (Exception e) {
|
log.error("获取钉钉用户ID失败,手机号:" + info.getTelephone());
|
}
|
}
|
}
|
}
|
|
// 不存在为空的数据或者处理完空数据后,返回所有有效的dingtalkId列表
|
return list.stream()
|
.map(MesQaDingtalk::getUserId)
|
.filter(StringUtils::hasText)
|
.distinct()
|
.collect(Collectors.toList());
|
} catch (Exception e) {
|
log.error("获取钉钉用户列表失败", e);
|
return new ArrayList<>();
|
}
|
}
|
}
|