package org.jeecg.modules.andon.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import org.apache.commons.lang.StringUtils;
|
import org.apache.shiro.SecurityUtils;
|
import org.jeecg.common.system.vo.LoginUser;
|
import org.jeecg.modules.andon.dto.AndonButtonDTO;
|
import org.jeecg.modules.andon.dto.AndonOrdeDto;
|
import org.jeecg.modules.andon.entity.AndonButtonConfig;
|
import org.jeecg.modules.andon.entity.AndonOrder;
|
import org.jeecg.modules.andon.entity.AndonResponseConfig;
|
import org.jeecg.modules.andon.mapper.AndonResponseConfigMapper;
|
import org.jeecg.modules.andon.service.IAndonButtonConfigService;
|
import org.jeecg.modules.andon.service.IAndonOrderService;
|
import org.jeecg.modules.andon.service.IAndonResponseConfigService;
|
import org.jeecg.modules.base.entity.Factory;
|
import org.jeecg.modules.base.service.IFactoryService;
|
import org.jeecg.modules.feishu.service.FeishuUserService;
|
import org.jeecg.modules.system.entity.SysUser;
|
import org.jeecg.modules.system.service.ISysUserService;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Collections;
|
import java.util.List;
|
|
/**
|
* @Description: 安灯响应配置
|
* @Author: jeecg-boot
|
* @Date: 2025-07-10
|
* @Version: V1.0
|
*/
|
@Service
|
public class AndonResponseConfigServiceImpl extends ServiceImpl<AndonResponseConfigMapper, AndonResponseConfig> implements IAndonResponseConfigService {
|
@Autowired
|
private IFactoryService factoryService;
|
|
@Autowired
|
private ISysUserService iSysUserService;
|
|
@Autowired
|
private FeishuUserService feishuUserService;
|
@Autowired
|
private IAndonButtonConfigService andonButtonConfigService;
|
|
@Autowired
|
private IAndonOrderService andonOrderService;
|
|
@Override
|
public AndonResponseConfig getAndonResponseConfigByFactoryIdAndButtonId(String factoryId, String buttonId) {
|
return baseMapper.getAndonResponseConfigByFactoryIdAndButtonId(factoryId, buttonId);
|
}
|
|
@Override
|
public String getProductionLineIdByButtonId(String buttonId) {
|
QueryWrapper<AndonResponseConfig> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("button_id", buttonId);
|
AndonResponseConfig config = this.getOne(queryWrapper);
|
return config != null ? config.getFactoryId() : null;
|
}
|
|
@Override
|
public String getResponderByButtonId(String buttonId,String factoryId) {
|
QueryWrapper<AndonResponseConfig> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("button_id", buttonId);
|
queryWrapper.eq("factory_id", factoryId); // 假设factory_id对应产线ID
|
AndonResponseConfig config = this.getOne(queryWrapper, false);
|
return config != null ? config.getFirsterResponder() : null;
|
}
|
|
@Override
|
public AndonResponseConfig getResponseConfigByButtonIdAndFactoryId(String buttonId, String factoryId) {
|
QueryWrapper<AndonResponseConfig> queryWrapper = new QueryWrapper<>();
|
queryWrapper.eq("button_id", buttonId);
|
queryWrapper.eq("factory_id", factoryId);
|
// 使用false参数,当查询到多条记录时不会抛出异常,而是返回第一条
|
return this.getOne(queryWrapper, false);
|
}
|
|
|
@Override
|
public void sendAndonNotification(AndonOrdeDto andonButtonDTO) {
|
/**
|
* 1. 验证工单状态
|
*/
|
if (andonButtonDTO == null) {
|
log.warn("请求参数为空");
|
throw new IllegalArgumentException("请求参数不能为空");
|
}
|
|
/**
|
* 2. 获取响应配置
|
*/
|
AndonResponseConfig andonResponseConfig = getResponseConfigByButtonIdAndFactoryId(andonButtonDTO.getButtonId(), andonButtonDTO.getFactoryId());
|
|
AndonOrder andonOrder = andonOrderService.getById(andonButtonDTO.getId());
|
if (andonOrder == null) {
|
log.warn("未找到ID为[{}]的安灯订单");
|
throw new IllegalArgumentException("未找到对应的安灯订单");
|
}
|
// 获取当前登录用户
|
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
|
if (loginUser != null) {
|
log.warn("未找到当前用户");
|
|
}
|
assert loginUser != null;
|
andonOrder.setResponder(loginUser.getId());
|
String orderStatus = andonOrder.getOrderStatus();
|
andonButtonDTO.setOrderStatus(orderStatus);
|
if (andonResponseConfig == null) {
|
log.warn("未找到ID为[{}]的响应配置");
|
throw new IllegalArgumentException("未找到对应的响应配置");
|
}
|
/**
|
* 3. 设置二级响应人
|
*/
|
String secondResponder = andonResponseConfig.getSecondResponder();
|
if (StringUtils.isNotBlank(secondResponder)) {
|
andonButtonDTO.setSecondResponder(secondResponder);
|
}
|
|
/**
|
* 4. 获取工厂信息
|
*/
|
|
String factoryId = andonResponseConfig.getFactoryId();
|
if (factoryId == null || factoryId.isEmpty()) {
|
log.warn("响应配置[{}]未设置工厂ID");
|
throw new IllegalArgumentException("响应配置未设置工厂信息");
|
}
|
|
Factory factory = factoryService.getOne(new QueryWrapper<Factory>()
|
.eq("id", factoryId)
|
.eq("del_flag", 0));
|
|
if (factory == null) {
|
log.warn("未找到ID为[{}]的工厂");
|
throw new IllegalArgumentException("未找到对应的工厂信息");
|
}
|
|
/**
|
* 获取产线名称
|
*/
|
String factoryName = factory.getFactoryName();
|
andonButtonDTO.setFactoryName(factoryName);
|
/**
|
* 6. 设置工厂名称
|
*/
|
String parentId = factory.getParentId();
|
if (parentId != null && !parentId.isEmpty()) {
|
Factory parentFactory = factoryService.getOne(new QueryWrapper<Factory>()
|
.eq("id", parentId)
|
.eq("del_flag", 0));
|
if (parentFactory != null) {
|
andonButtonDTO.setParentFactoryName(parentFactory.getFactoryName());
|
}
|
}
|
/**
|
* 6. 获取安灯按钮配置
|
*/
|
AndonButtonConfig andonButtonById = andonButtonConfigService.getAndonButtonById(andonButtonDTO.getButtonId());
|
if (andonButtonById == null) {
|
log.warn("未找到ID为[{}]的安灯按钮");
|
throw new IllegalArgumentException("未找到对应的安灯按钮信息");
|
}
|
/**
|
* 7. 设置响应时间
|
*/
|
Integer upgradeResponseDuration = andonButtonById.getUpgradeResponseDuration();
|
andonButtonDTO.setUpgradeResponseDuration(upgradeResponseDuration);
|
|
Integer secondUpgradeResponseDuration = andonButtonById.getSecondUpgradeResponseDuration();
|
andonButtonDTO.setSecondUpgradeResponseDuration(secondUpgradeResponseDuration);
|
|
/**
|
* 8. 获取响应人信息
|
*/
|
String firstResponder = andonResponseConfig.getFirsterResponder();
|
String threeResponder = andonResponseConfig.getThirdResponder();
|
SysUser thirdUser = iSysUserService.getUserByName(threeResponder);
|
SysUser userByName = iSysUserService.getUserByName(firstResponder);
|
SysUser secondUser = null;
|
|
if (StringUtils.isNotBlank(secondResponder)) {
|
secondUser = iSysUserService.getUserByName(secondResponder);
|
}
|
/**
|
* 9. 验证并设置响应人信息
|
*/
|
|
if (userByName == null) {
|
log.warn("用户[{}]未找到,无法发送通知");
|
throw new IllegalArgumentException("用户[{}]未找到,无法发送通知");
|
}
|
|
if (secondUser == null && StringUtils.isNotBlank(secondResponder)) {
|
log.warn("用户[{}]未找到,无法发送通知");
|
throw new IllegalArgumentException("用户[{}]未找到,无法发送通知");
|
}
|
|
if (threeResponder == null) {
|
StringUtils.isNotBlank(null);
|
}
|
//
|
/**
|
* 10. 设置响应人相关信息
|
*/
|
|
andonButtonDTO.setResponderOpenId(userByName.getOpenId());
|
andonButtonDTO.setResponder(userByName.getRealname());
|
log.warn("用户[{}]已找到,开始发送通知");
|
|
if (secondUser != null) {
|
andonButtonDTO.setSecondResponderOpenId(secondUser.getOpenId());
|
andonButtonDTO.setSecondResponder(secondUser.getRealname());
|
log.warn("用户[{}]已找到,开始发送通知");
|
}
|
if (thirdUser != null) {
|
andonButtonDTO.setThirdResponderOpenId(thirdUser.getOpenId());
|
andonButtonDTO.setThirdResponder(thirdUser.getRealname());
|
log.warn("用户[{}]已找到,开始发送通知");
|
}
|
|
/**
|
* 11. 发送飞书通知
|
*/
|
if (StringUtils.isNotBlank(firstResponder)) {
|
String feishuAccessToken = feishuUserService.getFeishuAccessToken();
|
feishuUserService.sendAndonNotification(feishuAccessToken, andonButtonDTO);
|
} else {
|
log.warn("工单[{}]未找到对应响应人,无法发送通知");
|
}
|
}
|
|
|
}
|