package com.ruoyi.service.impl;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.DataStatisticsUtils;
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.StringUtils;
import com.ruoyi.common.utils.bean.BeanUtils;
import com.ruoyi.domain.*;
import com.ruoyi.mapper.*;
import com.ruoyi.service.*;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.web.request.*;
import com.ruoyi.web.response.DataStatisticsResponse;
import com.ruoyi.web.response.TaskFindResponse;
import com.ruoyi.web.response.TaskGetInfoResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;

@Transactional
@Service
public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task>implements TaskService {

    @Autowired
    private TaskMapper taskMapper;

    @Autowired
    private ISysUserService sysUserService;

    @Autowired
    private StandardService standardService;

    @Autowired
    private TaskUserRelationService taskUserRelationService;

    @Autowired
    private TaskService taskService;

    @Autowired
    private SystemReviewTaskService systemReviewTaskService;

    @Autowired
    private CarReviewTaskService carReviewTaskService;

    @Autowired
    private SystemReviewTaskMapper systemReviewTaskMapper;

    @Autowired
    private CarReviewTaskMapper carReviewTaskMapper;

    @Autowired
    private ReviewDetailsMapper reviewDetailsMapper;

    @Autowired
    private TaskStateFacade taskStateFacade;

    @Autowired
    private TaskSampleRelationService taskSampleRelationService;

    @Autowired
    private SampleManagementMapper sampleManagementMapper;

    @Autowired
    private TaskSampleRelationMapper taskSampleRelationMapper;

    @Autowired
    private ReviewEnterpriseArchiveMapper reviewEnterpriseArchiveMapper;

    @Autowired
    private ReviewEnterpriseArchiveService reviewEnterpriseArchiveService;

    @Autowired
    private ReviewStandardService reviewStandardService;

    @Autowired
    private ReviewDetailsResultService reviewDetailsResultService;


    @Override
    public List<Task> findList(TaskListRequest request) {
        return taskMapper.findList(request);
    }

    @Override
    public void createTask(TaskCreateRequest request) {

        // 构建任务创建者
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser initiator = sysUserService.selectUserById(loginUser.getUserId());
        Standard standard = standardService.findListById(request.getStandardId());

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

        // 构建并保存任务信息
        // 总任务
        Task task = new Task();
        task.setTaskInitiatorId(loginUser.getUserId());
        task.setTaskInitiator(initiator.getNickName());
        if (initiator.getDept() != null) {
            task.setTaskInitiatorDept(initiator.getDept().getDeptName());
        }
        task.setTaskStatus(Task.TASK_STATUS_NEW);
        task.setRunStatus(Task.RUN_STATUS_RUNNABLE);
        task.setLeaderId(leader.getUserId());
        task.setLeader(leader.getName());
        task.setCreateTime(new Date());
        task.setName(standard.getName());
        task.setStandardNo(standard.getStandardNo());
        task.setFile(standard.getFile());
        String joinTaskList = StringUtils.join(request.getTaskList(),",");
        task.setTaskList(joinTaskList);
        BeanUtils.copyBeanProp(task, request);

        if(request.getTaskList().contains(Task.SUB_TASK_GRFIS)) {
            // 保存车型审查问卷任务
            task.setCarReviewTaskId(saveCarReview(request,initiator,standard,leader));
        }
        if(request.getTaskList().contains(Task.SUB_TASK_SRAIF)) {
            // 保存体系审查任务
            task.setSystemReviewTaskId(saveSystemReview(request,initiator,standard,leader));
        }

        taskService.save(task);

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

        taskUserRelationService.saveBatch(auditors);

        // 保存关联的整车样品信息
        List<TaskSampleRelation> relations = request.getSample();
        if (relations.size() != 0 && relations != null) {
            for (TaskSampleRelation sampleRelation : relations) {
                sampleRelation.setTaskId(task.getId());
            }

            taskSampleRelationService.saveBatch(relations);
        }

        // 保存关联的零部件样品信息
        List<TaskSampleRelation> partRelations = request.getPartSample();
        if (partRelations.size() != 0 && partRelations != null) {
            for (TaskSampleRelation sampleRelation : partRelations) {
                sampleRelation.setTaskId(task.getId());
            }

            taskSampleRelationService.saveBatch(partRelations);
        }

        taskStateFacade.doCreate(task, request.getTaskList());

        TaskGetInfoResponse temporaryStorageTask = taskService.getByUserId(loginUser.getUserId());
        if(temporaryStorageTask != null) {
            taskMapper.deleteById(temporaryStorageTask.getId());
        }
    }

    @Override
    public List<TaskFindResponse> findPending(TaskFindPendingRequest request,Long userId) {
        List<TaskFindResponse> responses = taskMapper.findPending(request,userId);
        for (TaskFindResponse response : responses) {
            if (response.getSystemReviewTaskId() != null) {
                BigDecimal num = new BigDecimal(((double)reviewDetailsMapper.count(response.getSystemReviewTaskId(),SystemReviewTask.TYPE))* 100);
                response.setSystemReview(num.setScale(1,BigDecimal.ROUND_UP).doubleValue() );
            }
            if (response.getCarReviewTaskId() != null) {
                BigDecimal num = new BigDecimal(((double)reviewDetailsMapper.count(response.getCarReviewTaskId(),CarReviewTask.TYPE)) * 100);
                response.setCarReview(num.setScale(1,BigDecimal.ROUND_UP).doubleValue());
            }
        }
        return responses;
    }

    @Override
    public List<Task> findFinish(TaskFindFinishRequest request) {
        return taskMapper.findFinish(request);
    }

    @Override
    public void editTask(TaskEditRequest request) {

        // 构建任务创建者
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser initiator = sysUserService.selectUserById(loginUser.getUserId());
        Standard standard = standardService.findListById(request.getStandardId());

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

        // 构建并保存任务信息
        // 总任务
        Task task = taskMapper.selectById(request.getId());
        task.setLeaderId(leader.getUserId());
        task.setLeader(leader.getName());
        String joinTaskList = StringUtils.join(request.getTaskList(),",");
        task.setTaskList(joinTaskList);
        BeanUtils.copyBeanProp(task, request);


        if (Objects.equals(task.getTaskStatus(), Task.TASK_STATUS_NEW)) {
            if(request.getTaskList().contains(Task.SUB_TASK_GRFIS) && task.getCarReviewTaskId() == null) {
                // 保存车型审查问卷任务
                TaskCreateRequest createRequest = new TaskCreateRequest();
                BeanUtils.copyBeanProp(createRequest, request);
                task.setCarReviewTaskId(saveCarReview(createRequest,initiator,standard,leader));
            }
            if ( !request.getTaskList().contains(Task.SUB_TASK_GRFIS) && task.getCarReviewTaskId() != null) {
                carReviewTaskMapper.deleteById(task.getCarReviewTaskId());
                task.setCarReviewTaskIdNull();
            }
            if(request.getTaskList().contains(Task.SUB_TASK_SRAIF) && task.getSystemReviewTaskId() == null) {
                // 保存体系审查任务
                TaskCreateRequest createRequest = new TaskCreateRequest();
                BeanUtils.copyBeanProp(createRequest, request);
                task.setSystemReviewTaskId(saveSystemReview(createRequest,initiator,standard,leader));
            }
            if ( !request.getTaskList().contains(Task.SUB_TASK_SRAIF) && task.getSystemReviewTaskId() != null) {
                systemReviewTaskMapper.deleteById(task.getSystemReviewTaskId());
                task.setSystemReviewTaskIdNull();
            }

        }


        task.setMaxPointer(request.getTaskList().size());

        taskService.updateById(task);


        // 构建并保存该任务所关联的审核组信息
        List<TaskUserRelation> list = taskUserRelationService.selectQTeamMembers(request.getId());
        taskUserRelationService.removeBatchByIds(list);
        for(TaskUserRelation auditor : auditors) {
            auditor.setTaskId(task.getId());
        }
        taskUserRelationService.saveBatch(auditors);

        // 获取传入的样品列表
        List<TaskSampleRelation> relations = request.getSample();

        // 任务样品关系
        List<TaskSampleRelation> sampleRelations = taskSampleRelationMapper.selectByTaskId(request.getId(),TaskSampleRelation.COMPLETE_VEHICLE_SAMPLE);

        if (sampleRelations.size() != 0 && sampleRelations != null) {
            // 获取之前的第一个企业名称
            TaskSampleRelation taskSampleRelation = sampleRelations.get(0);
            Sample oldSample = sampleManagementMapper.selectSampleManagementById(taskSampleRelation.getSampleId());

            // 获取编辑任务后的第一个企业名称
            TaskSampleRelation newTaskSampleRelation = relations.get(0);
            Sample newSample = sampleManagementMapper.selectSampleManagementById(newTaskSampleRelation.getSampleId());

            // 第一个企业名称不相同则修改
            if (!Objects.equals(oldSample.getManufacturingEnterprise(), newSample.getManufacturingEnterprise())){
                // 留档文件
                List<ReviewEnterpriseArchive> reviewEnterpriseArchiveList = reviewEnterpriseArchiveMapper.findList(request.getId());

                if (reviewEnterpriseArchiveList.size() != 0 && reviewEnterpriseArchiveList != null) {
                    for (ReviewEnterpriseArchive reviewEnterpriseArchive : reviewEnterpriseArchiveList) {
                        reviewEnterpriseArchive.setEnterpriseName(newSample.getManufacturingEnterprise());
                    }

                    reviewEnterpriseArchiveService.updateBatchById(reviewEnterpriseArchiveList);
                }

            }
        }

        // 保存关联的整车样品信息
        List<TaskSampleRelation> partRelationList = taskSampleRelationService.selectByTaskId(request.getId(),TaskSampleRelation.COMPLETE_VEHICLE_SAMPLE);
        taskSampleRelationService.removeBatchByIds(partRelationList);
        if (relations.size() != 0 && relations != null) {
            for (TaskSampleRelation sampleRelation : relations) {
                sampleRelation.setTaskId(task.getId());
            }

            taskSampleRelationService.saveBatch(relations);
        }

        // 保存关联的零部件样品信息
        List<TaskSampleRelation> relationList = taskSampleRelationService.selectByTaskId(request.getId(),TaskSampleRelation.PART_VEHICLE_SAMPLE);
        taskSampleRelationService.removeBatchByIds(relationList);
        List<TaskSampleRelation> partRelations = request.getPartSample();
        if (partRelations.size() != 0 && partRelations != null) {
            for (TaskSampleRelation partSampleRelation : partRelations) {
                partSampleRelation.setTaskId(task.getId());
            }

            taskSampleRelationService.saveBatch(partRelations);
        }

    }

    @Override
    public void deleteTask(TaskDeleteRequest request) {
        Task task = taskMapper.selectById(request.getId());

        systemReviewTaskMapper.deleteById(task.getSystemReviewTaskId());
        carReviewTaskMapper.deleteById(task.getCarReviewTaskId());
        taskMapper.deleteById(request.getId());
    }

    @Override
    public void startTask(TaskStartRequest request) {
        Task task = taskMapper.selectById(request.getId());
        taskStateFacade.doStart(task);
    }

    @Override
    public List<TaskFindResponse> findCreate(TaskFindRequest request,Long userId) {
        List<TaskFindResponse> responses = taskMapper.findByUserId(request,userId);
        for (TaskFindResponse response : responses) {
            if (response.getSystemReviewTaskId() != null) {
                BigDecimal num = new BigDecimal(((double)reviewDetailsMapper.count(response.getSystemReviewTaskId(),SystemReviewTask.TYPE))* 100);
                response.setSystemReview(num.setScale(1,BigDecimal.ROUND_UP).doubleValue());
            }
            if (response.getCarReviewTaskId() != null) {
                BigDecimal num = new BigDecimal(((double)reviewDetailsMapper.count(response.getCarReviewTaskId(),CarReviewTask.TYPE)) * 100);
                response.setCarReview(num.setScale(1,BigDecimal.ROUND_UP).doubleValue());
            }
        }
        return responses;
    }

    @Override
    public TaskGetInfoResponse getInfo(TaskGetInfoRequest request) {

        TaskGetInfoResponse response = new TaskGetInfoResponse();
        Task task = taskService.getById(request.getId());

        if (task != null) {
            BeanUtils.copyBeanProp(response, task);

            // 小组成员
            response.setAuditors(setAuditors(request.getId()));

            // 整车样品信息
            response.setCompleteVehicleSample(setSampleList(request.getId(),TaskSampleRelation.COMPLETE_VEHICLE_SAMPLE));

            // 零部件样品信息
            response.setPartVehicleSample(setSampleList(request.getId(),TaskSampleRelation.PART_VEHICLE_SAMPLE));

            return response;
        } else {
            return null;
        }

    }

    @Override
    public List<Task> findUserFinish(TaskFindFinishRequest request,Long userId) {

        return taskMapper.findUserFinish(request,userId);
    }

    @Override
    public void temporaryStorageTask(TaskCreateRequest request) {

        // 构建任务创建者
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser initiator = sysUserService.selectUserById(loginUser.getUserId());
        Standard standard = standardService.findListById(request.getStandardId());

        // 构建并保存任务信息
        // 总任务
        Task task = new Task();
        task.setTaskInitiatorId(loginUser.getUserId());
        task.setTaskInitiator(initiator.getNickName());
        task.setTaskInitiatorDept(initiator.getDept().getDeptName());
        task.setTaskStatus(Task.TASK_STATUS_TEMPORARILY);
        String joinTaskList = StringUtils.join(request.getTaskList(),",");
        task.setTaskList(joinTaskList);
        BeanUtils.copyBeanProp(task, request);

        if (standard != null) {
            task.setName(standard.getName());
            task.setStandardNo(standard.getStandardNo());
            task.setFile(standard.getFile());
        }

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

            // 任务组长
            task.setLeaderId(leader.getUserId());
            task.setLeader(leader.getName());
        }

        // 暂存
        taskService.save(task);

        if (auditors.size() != 0 && auditors != null) {
            // 构建并保存该任务所关联的审核组信息
            for(TaskUserRelation auditor : auditors) {
                auditor.setTaskId(task.getId());
            }

            taskUserRelationService.saveBatch(auditors);
        }




        // 保存关联的整车样品信息
        List<TaskSampleRelation> relations = request.getSample();
        if (relations.size() != 0 && relations != null) {
            for (TaskSampleRelation sampleRelation : relations) {
                sampleRelation.setTaskId(task.getId());
            }

            taskSampleRelationService.saveBatch(relations);
        }

        // 保存关联的零部件样品信息
        List<TaskSampleRelation> partRelations = request.getPartSample();
        if (partRelations.size() != 0 && partRelations != null) {
            for (TaskSampleRelation sampleRelation : partRelations) {
                sampleRelation.setTaskId(task.getId());
            }

            taskSampleRelationService.saveBatch(partRelations);
        }
    }

    @Override
    public void editTemporaryStorageTask(TaskEditRequest request) {
        // 构建任务创建者
        LoginUser loginUser = SecurityUtils.getLoginUser();
        SysUser initiator = sysUserService.selectUserById(loginUser.getUserId());
        Standard standard = standardService.findListById(request.getStandardId());

        // 构建并保存任务信息
        // 总任务
        Task task = new Task();
        task.setTaskInitiatorId(loginUser.getUserId());
        task.setTaskInitiator(initiator.getNickName());
        task.setTaskInitiatorDept(initiator.getDept().getDeptName());
        String joinTaskList = StringUtils.join(request.getTaskList(),",");
        task.setTaskList(joinTaskList);
        BeanUtils.copyBeanProp(task, request);

        if (standard != null) {
            task.setName(standard.getName());
            task.setStandardNo(standard.getStandardNo());
            task.setFile(standard.getFile());
        }

        // 找到审查组长
        TaskUserRelation leader = null;
        List<TaskUserRelation> auditors = request.getAuditors();
        if (auditors.size() != 0 && auditors != null) {
            List<TaskUserRelation> list = taskUserRelationService.selectQTeamMembers(request.getId());
            taskUserRelationService.removeBatchByIds(list);
            for(TaskUserRelation auditor : auditors) {
                if(auditor.getIsLeader() == 1) {
                    leader = auditor;
                    break;
                }
            }

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

            taskUserRelationService.saveBatch(auditors);

            // 任务组长
            task.setLeaderId(leader.getUserId());
            task.setLeader(leader.getName());
        }

        // 暂存
        taskService.updateById(task);


        // 保存关联的整车样品信息
        List<TaskSampleRelation> partRelationList = taskSampleRelationService.selectByTaskId(request.getId(),TaskSampleRelation.COMPLETE_VEHICLE_SAMPLE);
        taskSampleRelationService.removeBatchByIds(partRelationList);
        List<TaskSampleRelation> relations = request.getSample();
        if (relations.size() != 0 && relations != null) {
            for (TaskSampleRelation sampleRelation : relations) {
                sampleRelation.setTaskId(task.getId());
            }

            taskSampleRelationService.saveBatch(relations);
        }

        // 保存关联的零部件样品信息
        List<TaskSampleRelation> relationList = taskSampleRelationService.selectByTaskId(request.getId(),TaskSampleRelation.PART_VEHICLE_SAMPLE);
        taskSampleRelationService.removeBatchByIds(relationList);
        List<TaskSampleRelation> partRelations = request.getPartSample();
        if (partRelations.size() != 0 && partRelations != null) {
            for (TaskSampleRelation sampleRelation : partRelations) {
                sampleRelation.setTaskId(task.getId());
            }

            taskSampleRelationService.saveBatch(partRelations);
        }
    }

    @Override
    public TaskGetInfoResponse getByUserId(Long userId) {

        TaskGetInfoResponse response = new TaskGetInfoResponse();
        Task task = taskMapper.getByUserIdTemporary(userId);

        if (task != null && task.getId() != null) {

            BeanUtils.copyBeanProp(response, task);

            // 小组成员
            response.setAuditors(setAuditors(task.getId()));

            // 整车样品信息
            response.setCompleteVehicleSample(setSampleList(task.getId(), TaskSampleRelation.COMPLETE_VEHICLE_SAMPLE));

            // 零部件样品信息
            response.setPartVehicleSample(setSampleList(task.getId(), TaskSampleRelation.PART_VEHICLE_SAMPLE));

            return response;
        } else {
            return null;
        }


    }

    @Override
    public TaskGetInfoResponse getBySubtaskId(TaskSubGetInfoRequest request) {
        TaskGetInfoResponse response = new TaskGetInfoResponse();
        Task task = taskMapper.getBySubtaskId(request.getId());

        if (task != null) {
            BeanUtils.copyBeanProp(response, task);
            // 小组成员
            response.setAuditors(setAuditors(task.getId()));

            // 整车样品信息
            response.setCompleteVehicleSample(setSampleList(task.getId(),TaskSampleRelation.COMPLETE_VEHICLE_SAMPLE));

            // 零部件样品信息
            response.setPartVehicleSample(setSampleList(task.getId(),TaskSampleRelation.PART_VEHICLE_SAMPLE));

            return response;
        } else {
            return null;
        }

    }

    @Override
    public DataStatisticsResponse dataStatistics(TaskGetInfoRequest request) {

        Task task = taskMapper.selectById(request.getId());
        DataStatisticsResponse response = new DataStatisticsResponse();

        if (task.getSystemReviewTaskId() != null) {

            systemReviewTaskService.view(task.getSystemReviewTaskId());

            SystemReviewTask systemReviewTask = systemReviewTaskMapper.selectById(task.getSystemReviewTaskId());
            // 获取最新问卷
            List<ReviewStandard> standardTree = reviewStandardService.findTree(systemReviewTask.getStandardId(), ReviewStandard.TYPE_SYSTEM);

            // 获取当前问卷答案
            List<ReviewDetailsResult> results = reviewDetailsResultService.findByTaskId(systemReviewTask.getId());

            // 体系审查
            setSystemDataStatistics(standardTree,results,response,systemReviewTask);

        }

        if (task.getCarReviewTaskId() != null) {

            carReviewTaskService.viewReviewTask(task.getCarReviewTaskId());

            CarReviewTask carReviewTask = carReviewTaskMapper.selectById(task.getCarReviewTaskId());

            // 获取最新问卷
            List<ReviewStandard> carStandardTree = reviewStandardService.findTree(carReviewTask.getStandardId(), ReviewStandard.TYPE_CAR);

            // 获取当前问卷答案
            List<ReviewDetailsResult> carResults = reviewDetailsResultService.findByTaskId(carReviewTask.getId());

            // 车型审查
            setCarDataStatistics(carStandardTree,carResults,response,carReviewTask);

        }

        return response;

    }


    private void setSystemDataStatistics(List<ReviewStandard> standards, List<ReviewDetailsResult> results,DataStatisticsResponse response,SystemReviewTask systemReviewTask) {
        Map<Long, ReviewDetailsResult> resultMap = results.stream().collect(Collectors.toMap(ReviewDetailsResult::getReviewDetailsId, Function.identity(), (v1, v2) -> v1));

        if (Objects.equals(systemReviewTask.getTaskStatus(), SystemReviewTask.STATUS_NEW)) {
            response.setSystemStandards(DataStatisticsUtils.calculateStandards(standards));
            response.setSystemDetails(DataStatisticsUtils.calculateDetails(standards));
        } else {
            response.setSystemStandards(systemReviewTask.getStandards());
            response.setSystemDetails(systemReviewTask.getDetails());
        }

        response.setSystemStandardsPassNum(DataStatisticsUtils.calculateStandardsPass(standards, resultMap));
        response.setSystemStandardsNoPassNum(DataStatisticsUtils.calculateStandardsNoPass(standards, resultMap));
        response.setSystemStandardsUnderNum(response.getSystemStandards() -response.getSystemStandardsPassNum() - response.getSystemStandardsNoPassNum());
        BigDecimal standardPass = new BigDecimal((response.getSystemStandardsPassNum() / (double) response.getSystemStandards())*100);
        response.setSystemStandardsPass(standardPass.setScale(1,BigDecimal.ROUND_UP).doubleValue());
        response.setSystemDetailsPassNum(DataStatisticsUtils.calculateDetailsPass(standards, resultMap));
        response.setSystemDetailsNoPassNum(DataStatisticsUtils.calculateDetailsNoPass(standards, resultMap));
        response.setSystemDetailsUnderNum(response.getSystemDetails() - response.getSystemDetailsPassNum() - response.getSystemDetailsNoPassNum());
        BigDecimal detailsPass = new BigDecimal((response.getSystemDetailsPassNum() / (double) response.getSystemDetails())*100);
        response.setSystemDetailsPass(detailsPass.setScale(1,BigDecimal.ROUND_UP).doubleValue());

    }

    private void setCarDataStatistics(List<ReviewStandard> standards, List<ReviewDetailsResult> results,DataStatisticsResponse response,CarReviewTask carReviewTask) {
        Map<Long, ReviewDetailsResult> resultMap = results.stream().collect(Collectors.toMap(ReviewDetailsResult::getReviewDetailsId, Function.identity(), (v1, v2) -> v1));

        if (Objects.equals(carReviewTask.getTaskStatus(), CarReviewTask.TASK_STATUS_NEW)) {
            response.setCarStandards(DataStatisticsUtils.calculateStandards(standards));
            response.setCarDetails(DataStatisticsUtils.calculateDetails(standards));
        } else {
            response.setCarStandards(carReviewTask.getStandards());
            response.setCarDetails(carReviewTask.getDetails());
        }
        response.setCarStandardsPassNum(DataStatisticsUtils.calculateStandardsPass(standards, resultMap));
        response.setCarStandardsNoPassNum(DataStatisticsUtils.calculateStandardsNoPass(standards, resultMap));
        response.setCarStandardsUnderNum(response.getCarStandards() -response.getCarStandardsPassNum() - response.getCarStandardsNoPassNum());
        BigDecimal standardPass = new BigDecimal((response.getCarStandardsPassNum() / (double) response.getCarStandards())*100);
        response.setCarStandardsPass(standardPass.setScale(1,BigDecimal.ROUND_UP).doubleValue());
        response.setCarDetailsPassNum(DataStatisticsUtils.calculateDetailsPass(standards, resultMap));
        response.setCarDetailsNoPassNum(DataStatisticsUtils.calculateDetailsNoPass(standards, resultMap));
        response.setCarDetailsUnderNum(response.getCarDetails() - response.getCarDetailsPassNum() - response.getCarDetailsNoPassNum());
        BigDecimal detailsPass = new BigDecimal((response.getCarDetailsPassNum() / (double) response.getCarDetails())*100);
        response.setCarDetailsPass(detailsPass.setScale(1,BigDecimal.ROUND_UP).doubleValue());

    }

    public List<TaskUserRelation> setAuditors ( Long id) {

        // 小组成员
        List<TaskUserRelation> relation = taskUserRelationService.selectQTeamMembers(id);

        return relation;
    }

    public List<Sample> setSampleList(Long id,String type) {
        // 样品信息
        List<TaskSampleRelation> relationList = taskSampleRelationService.selectByTaskId(id,type);
        if (relationList.size() != 0 && relationList != null) {
            List<Sample> SampleList = sampleManagementMapper.findByIdList(relationList,id);
            return SampleList;
        } else {
            return null;
        }


    }

    public Long saveSystemReview(TaskCreateRequest request,SysUser initiator,Standard standard,TaskUserRelation leader) {

        // 构建并保存任务信息
        SystemReviewTask task = new SystemReviewTask()
                .setTaskNo(request.getTaskNo())
                .setTaskInitiator(initiator.getNickName())
                .setTaskStatus(SystemReviewTask.STATUS_NEW)
                .setLeaderId(leader.getUserId())
                .setLeader(leader.getName())
                .setCreateTime(new Date())
                .setStandardId(standard.getId())
                .setName(standard.getName())
                .setStandardNo(standard.getStandardNo())
                .setFile(standard.getFile());

        if (initiator.getDept() != null) {
            task.setTaskInitiatorDept(initiator.getDept().getDeptName());
        }

        systemReviewTaskService.save(task);
        return task.getId();
    }

    public Long saveCarReview(TaskCreateRequest request,SysUser initiator,Standard standard,TaskUserRelation leader) {

        List<String> taskList = request.getTaskList();

        // 构建并保存任务信息
        CarReviewTask task = new CarReviewTask()
                .setTaskNo(request.getTaskNo())
                .setTaskInitiator(initiator.getNickName())
                .setTaskStatus(CarReviewTask.TASK_STATUS_NEW)
                .setLeaderId(leader.getUserId())
                .setLeader(leader.getName())
                .setCreateTime(new Date())
                .setStandardId(standard.getId())
                .setName(standard.getName())
                .setStandardNo(standard.getStandardNo())
                .setFile(standard.getFile());

        if (initiator.getDept() != null) {
            task.setTaskInitiatorDept(initiator.getDept().getDeptName());
        }

        carReviewTaskService.save(task);
        return task.getId();
    }


}