package com.srs.flowable.listener.disciplinary;

import com.srs.common.utils.WeChatUtil;
import com.srs.common.utils.spring.SpringUtils;
import com.srs.flowable.mapper.DisciplinaryMapper;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.DelegateExecution;
import org.flowable.engine.delegate.ExecutionListener;
import org.springframework.stereotype.Component;

/**
 * 根据辅导员部门id获取二级学院书记 知无涯
 */
@Component
@Slf4j
public class EJXYSJListener implements ExecutionListener {


    @Override
    public void notify(DelegateExecution delegateExecution) {
        DisciplinaryMapper disciplinaryMapper = SpringUtils.getBean("disciplinaryMapper");

        Long deptId = (Long) delegateExecution.getVariable("deptId");

        Long userId = disciplinaryMapper.getApprovalByDeptIdAndRoleKey(deptId, "xywjclwyh");
        if (userId!=null){
            delegateExecution.setVariable("approval", userId);
            // todo 企业微信推送消息
// --- 企业微信推送消息模块 ---
            try {
                // 步骤 2: 【关键】使用 userId 查询对应的企业微信账号 (userName)
                String userName = disciplinaryMapper.getUserNameByUserId(userId);

                // 步骤 3: 检查 userName 是否存在
                if (userName != null && !userName.isEmpty()) {
                    WeChatUtil weChatUtil = SpringUtils.getBean(WeChatUtil.class);

                    // 构造包含超链接的消息内容
                    String content = "您有一条新的学生违纪审批任务待处理，<a href='http://zhxg.gxsdxy.cn/web/#/pages/Approval/index'>请点击前往处理</a>。";

                    // 步骤 4: 【关键】使用 userName 作为接收人发送消息
                    weChatUtil.sendTextMessage(userName, content);
                    log.info("已成功向二级学院书记(userName:{})发送企业微信审批通知。", userName);
                } else {
                    // 如果找不到userName，记录警告日志，但流程继续
                    log.warn("找到了二级学院书记审批人(userId:{})，但其对应的企业微信账号(userName)为空，无法发送通知。", userId);
                }
            } catch (Exception e) {
                // 保证即使通知失败，流程也能继续
                log.error("向二级学院书记(userId:{})发送企业微信通知时出现异常。流程将继续。错误详情: {}", userId, e.getMessage(), e);
            }
        }else{
            throw new RuntimeException("该二级学院书记审批人未配置");
        }
    }
}
