package com.zehong.system.service.impl;

import java.math.BigDecimal;
import java.util.*;

import com.zehong.common.core.domain.entity.SysDept;
import com.zehong.common.utils.DateUtils;
import com.zehong.system.domain.THiddenTroubleWork;
import com.zehong.system.domain.vo.HiddenStatVO;
import com.zehong.system.mapper.SysDeptMapper;
import com.zehong.system.mapper.THiddenTroubleWorkMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zehong.system.mapper.TStaningBookMapper;
import com.zehong.system.domain.TStaningBook;
import com.zehong.system.service.ITStaningBookService;

/**
 * 隐患台账Service业务层处理
 * 
 * @author zehong
 * @date 2022-07-09
 */
@Service
public class TStaningBookServiceImpl implements ITStaningBookService 
{
    @Autowired
    private TStaningBookMapper tStaningBookMapper;
    @Autowired
    private THiddenTroubleWorkMapper tHiddenTroubleWorkMapper;
    @Autowired
    private SysDeptMapper deptMapper;

    /**
     * 查询隐患台账
     * 
     * @param bookId 隐患台账ID
     * @return 隐患台账
     */
    @Override
    public TStaningBook selectTStaningBookById(Long bookId)
    {
        return tStaningBookMapper.selectTStaningBookById(bookId);
    }

    /**
     * 查询隐患台账列表
     * 
     * @param tStaningBook 隐患台账
     * @return 隐患台账
     */
    @Override
    public List<TStaningBook> selectTStaningBookList(TStaningBook tStaningBook,Long deptId)
    {
        List<Long> oneList = new ArrayList<>();
        oneList.add(deptId);
        List<Long> deptIds = selectDeptIds(new ArrayList<>(),oneList);
        deptIds.add(deptId);
        tStaningBook.setDeptList(deptIds);
        List<TStaningBook> list = tStaningBookMapper.selectTStaningBookList(tStaningBook);
        return  list;
    }
    public List<Long> selectDeptIds(List<Long> list,List<Long> deptIds){
        List<Long> resultlist = deptMapper.selectDeptByParentId(deptIds);
        if(resultlist.size()==0){
            return list;
        }
        list.addAll(resultlist);
        return selectDeptIds(list,resultlist);
    }
    /**
     * 新增隐患台账
     * 
     * @param tStaningBook 隐患台账
     * @return 结果
     */
    @Override
    public int insertTStaningBook(TStaningBook tStaningBook)
    {
        tStaningBook.setCreateTime(DateUtils.getNowDate());
        return tStaningBookMapper.insertTStaningBook(tStaningBook);
    }

    /**
     * 修改隐患台账
     * 
     * @param tStaningBook 隐患台账
     * @return 结果
     */
    @Override
    public int updateTStaningBook(TStaningBook tStaningBook)
    {
        return tStaningBookMapper.updateTStaningBook(tStaningBook);
    }

    /**
     * 批量删除隐患台账
     * 
     * @param bookIds 需要删除的隐患台账ID
     * @return 结果
     */
    @Override
    public int deleteTStaningBookByIds(Long[] bookIds)
    {
        return tStaningBookMapper.deleteTStaningBookByIds(bookIds);
    }

    /**
     * 删除隐患台账信息
     * 
     * @param bookId 隐患台账ID
     * @return 结果
     */
    @Override
    public int deleteTStaningBookById(Long bookId)
    {
        return tStaningBookMapper.deleteTStaningBookById(bookId);
    }

    @Override
    public Map statics(String type) {
        return tStaningBookMapper.statics(type);
    }

    @Override
    public Map<String,List> hiddenStat(Integer troubleLevel, Date beginTime, Date endTime){
        Map<String,List> result = new HashMap<>(16);
        List<HiddenStatVO> barData = tStaningBookMapper.hiddenBarStat(troubleLevel,beginTime,endTime);
        //柱状图月份数据
        List<String> months = new ArrayList<>();
        //柱状图隐患数量
        List<Integer> hiddens = new ArrayList<>();
        //柱状图整改数量
        List<Integer> rectifieds = new ArrayList<>();
        for(HiddenStatVO hidden : barData){
            months.add(changeMonth(hidden.getMonth()));
            hiddens.add(hidden.getHiddenCount());
            rectifieds.add(hidden.getRectifiedCount());
        }
        result.put("months",months);
        result.put("hiddens",hiddens);
        result.put("rectifieds",rectifieds);
        //环状统计图
        Map<String,Integer> pieData = tStaningBookMapper.hiddenPieStat(troubleLevel,beginTime,endTime);
        List<Map<String,Object>> pieResult = new ArrayList<>();
        Map<String,Object> rectifiedMap = new HashMap<>(16);
        rectifiedMap.put("name","已整改");
        rectifiedMap.put("value",pieData.get("rectifiedCount"));
        pieResult.add(rectifiedMap);
        Map<String,Object> stayRectifiedMap = new HashMap<>(16);
        stayRectifiedMap.put("name","未整改");
        stayRectifiedMap.put("value",pieData.get("stayRectifiedCount"));
        pieResult.add(stayRectifiedMap);
        result.put("pieData",pieResult);
        return result;
    }

    private String changeMonth(int month){
        switch (month){
            case 1:
                return "一月";
            case 2:
                return "二月";
            case 3:
                return "三月";
            case 4:
                return "四月";
            case 5:
                return "五月";
            case 6:
                return "六月";
            case 7:
                return "七月";
            case 8:
                return "八月";
            case 9:
                return "九月";
            case 10:
                return "十月";
            case 11:
                return "十一月";
            default:
                return "十二月";
        }
    }
}