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.jeecg.modules.andon.dto.AndonButtonDTO; 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 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 List queryAndonButtonList(String factoryId) { return Collections.emptyList(); } @Override public void sendAndonNotification(AndonButtonDTO andonButtonDTO) { /** * 1. 验证工单状态 */ if (andonButtonDTO == null) { log.warn("请求参数为空"); throw new IllegalArgumentException("请求参数不能为空"); } /** * 2. 获取响应配置 */ AndonResponseConfig andonResponseConfig = this.getById(andonButtonDTO.getId()); AndonOrder andonOrder = andonOrderService.getById(andonButtonDTO.getOrderIds()); if (andonOrder == null) { log.warn("未找到ID为[{}]的安灯订单"); throw new IllegalArgumentException("未找到对应的安灯订单"); } 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() .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() .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("工单[{}]未找到对应响应人,无法发送通知"); } } }