package com.zehong.system.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.zehong.common.utils.DateUtils;
import com.zehong.system.domain.*;
import com.zehong.system.mapper.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zehong.system.service.ITOrderFeedbackService;

/**
 * 工单反馈信息Service业务层处理
 * 
 * @author zehong
 * @date 2021-07-19
 */
@Service
public class TOrderFeedbackServiceImpl implements ITOrderFeedbackService 
{
    @Autowired
    private TOrderFeedbackMapper tOrderFeedbackMapper;
    @Autowired
    private TWorkOrderMapper tWorkOrderMapper;
    @Autowired
    private TInspectionDataMapper tInspectionDataMapper;
    @Autowired
    private TInspectionPlanMapper tInspectionPlanMapper;
    @Autowired
    private THiddenTroubleMapper tHiddenTroubleMapper;
    @Autowired
    private TDeviceAlarmMapper tDeviceAlarmMapper;
    @Autowired
    private TPipeMapper tPipeMapper;
    @Autowired
    private TDeviceInfoMapper tDeviceInfoMapper;

    /**
     * 查询工单反馈信息
     * 
     * @param feedbackId 工单反馈信息ID
     * @return 工单反馈信息
     */
    @Override
    public TOrderFeedback selectTOrderFeedbackById(int feedbackId)
    {
        return tOrderFeedbackMapper.selectTOrderFeedbackById(feedbackId);
    }

    /**
     * 查询工单反馈信息列表
     * 
     * @param tOrderFeedback 工单反馈信息
     * @return 工单反馈信息
     */
    @Override
    public List<TOrderFeedback> selectTOrderFeedbackList(TOrderFeedback tOrderFeedback)
    {
        return tOrderFeedbackMapper.selectTOrderFeedbackList(tOrderFeedback);
    }

    /**
     * 新增工单反馈信息
     * 
     * @param tOrderFeedback 工单反馈信息
     * @return 结果
     */
    @Override
    public int insertTOrderFeedback(TOrderFeedback tOrderFeedback) throws Exception
    {
        if("2".equals(tOrderFeedback.getIsHiddenDanger())){
            tOrderFeedback.setDealStatus("1");
        }
        tOrderFeedback.setFeedbackTime(DateUtils.getNowDate());

        String dealStatus = tOrderFeedback.getDealStatus();
        String isHiddenDanger = tOrderFeedback.getIsHiddenDanger();

        // 根据工单类型和源id修改源数据状态
        TWorkOrder order = tWorkOrderMapper.selectTWorkOrderById(tOrderFeedback.getOrderId());
        String orderType = order.getOrderType();

        if("1".equals(orderType)){
            TInspectionPlan tInspectionPlan = tInspectionPlanMapper.selectTInspectionPlanById(order.getResourceId());
            Integer planId = tInspectionPlan.getPlanId();
            Integer deviceId = tOrderFeedback.getDeviceId();

            TInspectionData data = tInspectionDataMapper.selectTInspectionDataByDeviceId(planId, deviceId);
            data.setDealStatus(dealStatus);
            data.setIsHiddenDanger(isHiddenDanger);
            data.setUpdateTime(DateUtils.getNowDate());

            tOrderFeedback.setDeviceType(data.getDeviceType());

            tInspectionDataMapper.updateTInspectionData(data);

            if("0".equals(data.getDeviceType())){
                TPipe pipe = tPipeMapper.selectTPipeById(deviceId);
                pipe.setInspectionTime(DateUtils.getNowDate());
                tPipeMapper.updateTPipe(pipe);
            } else {
                TDeviceInfo device = tDeviceInfoMapper.selectTDeviceInfoById(deviceId);
                device.setInspectionTime(DateUtils.getNowDate());
                tDeviceInfoMapper.updateTDeviceInfo(device);
            }
        } else if("2".equals(orderType)) {
            THiddenTrouble trouble = tHiddenTroubleMapper.selectTHiddenTroubleById(order.getResourceId());
            trouble.setDealStatus(dealStatus);
            trouble.setUpdateTime(DateUtils.getNowDate());

            tOrderFeedback.setDeviceId(trouble.getDeviceId());
            tOrderFeedback.setDeviceType(trouble.getDeviceType());

            tHiddenTroubleMapper.updateTHiddenTrouble(trouble);

            if("0".equals(trouble.getDeviceType())){
                TPipe pipe = tPipeMapper.selectTPipeById(trouble.getDeviceId());
                pipe.setInspectionTime(DateUtils.getNowDate());
                tPipeMapper.updateTPipe(pipe);
            } else {
                TDeviceInfo device = tDeviceInfoMapper.selectTDeviceInfoById(trouble.getDeviceId());
                device.setInspectionTime(DateUtils.getNowDate());
                tDeviceInfoMapper.updateTDeviceInfo(device);
            }
        } else if("3".equals(orderType)) {
            TDeviceAlarm alarm = tDeviceAlarmMapper.selectTDeviceAlarmById(order.getResourceId());
            alarm.setDealStatus(dealStatus);
            alarm.setUpdateTime(DateUtils.getNowDate());

            tOrderFeedback.setDeviceId(alarm.getDeviceId());
            tOrderFeedback.setDeviceType(alarm.getDeviceType());

            tDeviceAlarmMapper.updateTDeviceAlarm(alarm);

            if("0".equals(alarm.getDeviceType())){
                TPipe pipe = tPipeMapper.selectTPipeById(alarm.getDeviceId());
                pipe.setInspectionTime(DateUtils.getNowDate());
                tPipeMapper.updateTPipe(pipe);
            } else {
                TDeviceInfo device = tDeviceInfoMapper.selectTDeviceInfoById(alarm.getDeviceId());
                device.setInspectionTime(DateUtils.getNowDate());
                tDeviceInfoMapper.updateTDeviceInfo(device);
            }
        }

        // 如果工单状态是已接收，修改状态为已反馈
        if("1".equals(order.getOrderStatus())){
            order.setOrderStatus("2");
            tWorkOrderMapper.updateTWorkOrder(order);
        }

        return tOrderFeedbackMapper.insertTOrderFeedback(tOrderFeedback);
    }

    /**
     * 修改工单反馈信息
     * 
     * @param tOrderFeedback 工单反馈信息
     * @return 结果
     */
    @Override
    public int updateTOrderFeedback(TOrderFeedback tOrderFeedback)
    {
        return tOrderFeedbackMapper.updateTOrderFeedback(tOrderFeedback);
    }

    /**
     * 批量删除工单反馈信息
     * 
     * @param feedbackIds 需要删除的工单反馈信息ID
     * @return 结果
     */
    @Override
    public int deleteTOrderFeedbackByIds(int[] feedbackIds)
    {
        return tOrderFeedbackMapper.deleteTOrderFeedbackByIds(feedbackIds);
    }

    /**
     * 删除工单反馈信息信息
     * 
     * @param feedbackId 工单反馈信息ID
     * @return 结果
     */
    @Override
    public int deleteTOrderFeedbackById(int feedbackId)
    {
        return tOrderFeedbackMapper.deleteTOrderFeedbackById(feedbackId);
    }

    /**
     * 工单的反馈信息列表
     * @param orderId
     * @return
     */
    @Override
    public List<TOrderFeedback> selectTOrderFeedbackByOrderId(String orderId){
        List<TOrderFeedback> orderFeedbackList = tOrderFeedbackMapper.selectTOrderFeedbackByOrderId(orderId);
        return orderFeedbackList;
    }
}
