package com.ruoyi.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.SnowflakeUtil;
import com.ruoyi.domain.*;
import com.ruoyi.mapper.SystemReviewTaskMapper;
import com.ruoyi.service.*;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.web.request.SystemReviewTaskCreateRequest;
import com.ruoyi.web.request.SystemReviewTaskStartRequest;
import com.ruoyi.web.response.SystemReviewTaskViewResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.*;

/**
* @author wangfei
* @description 针对表【t_system_review_task(体系审查任务)】的数据库操作Service实现
* @createDate 2023-12-15 09:56:07
*/
@Transactional
@Service
public class SystemReviewTaskServiceImpl extends ServiceImpl<SystemReviewTaskMapper, SystemReviewTask> implements SystemReviewTaskService {

    @Autowired
    private SystemReviewTaskUserRelationService systemReviewTaskUserRelationService;

    @Autowired
    private SystemReviewTaskService systemReviewTaskService;

    @Autowired
    private StrategySystemReviewTaskContext strategySystemReviewTaskContext;

    @Autowired
    private SystemReviewTaskMapper systemReviewTaskMapper;

    @Autowired
    private ISysUserService sysUserService;


    @Override
    public void createTaskTest(SystemReviewTaskCreateRequest request) {

        // 构建任务创建者
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser initiator = sysUserService.selectUserById(loginUser.getUserId());

        // 找到审查组长
        SystemReviewTaskUserRelation leader = null;
        List<SystemReviewTaskUserRelation> auditors = request.getAuditors();
        for(SystemReviewTaskUserRelation auditor : auditors) {
            if(auditor.getIsLeader() == 1) {
                leader = auditor;
                break;
            }
        }

        // 构建并保存任务信息
        SystemReviewTask task = new SystemReviewTask()
                .setTaskNo(SnowflakeUtil.generate().toString())
                .setTaskInitiator(initiator.getNickName())
                .setTaskInitiatorDept(initiator.getDept().getDeptName())
                .setTaskStatus(SystemReviewTask.STATUS_NEW)
                .setBizInfo(request.getBizInfo())
                .setLeaderId(leader.getUserId())
                .setLeader(leader.getName())
                .setCreateTime(new Date());

        systemReviewTaskService.save(task);


        // 构建并保存该任务所关联的审核组信息
        for(SystemReviewTaskUserRelation auditor : auditors) {
            auditor.setTaskId(task.getId());
        }
        systemReviewTaskUserRelationService.saveBatch(auditors);
    }

    @Override
    public SystemReviewTaskViewResponse view(Long taskId) {
        SystemReviewTask systemReviewTask = systemReviewTaskService.getById(taskId);
        return strategySystemReviewTaskContext.getResource(systemReviewTask.getTaskStatus()).doView(systemReviewTask);
    }

    @Override
    public void start(SystemReviewTaskStartRequest request) {
        SystemReviewTask systemReviewTask = systemReviewTaskService.getById(request.getTaskId());
        strategySystemReviewTaskContext.getResource(systemReviewTask.getTaskStatus()).doStart(systemReviewTask);
    }

    @Override
    public List<SystemReviewTask> findListByStatus(String status) {
        return systemReviewTaskMapper.findListByStatus(status);
    }

}