package com.gyee.frame.service.report;

import com.gyee.frame.common.spring.InitialRunner;
import com.gyee.frame.model.auto.*;
import com.gyee.frame.service.WtMttrAndMtbfMonthService;
import com.gyee.frame.util.DateUtils;
import com.gyee.frame.util.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;

/**
 * 线路 LineService
 *
 * @author gyee_自动生成
 * @Title: LineService.java 
 * @Package com.gyee.frame.service 
 * @email 1@qq.com
 * @date 2019-12-31 14:58:09  
 **/
@Service
public class WtHealthReport3Service {

    @Resource
    private Wttragetreport3Service wttragetreport3Service;
    @Resource
    private Wttragetreportchart3Service wttragetreportchart3Service;
    @Resource
    private Wttragetreportfnlyl3Service wttragetreportfnlyl3Service;
    @Resource
    private Wttragetreportkkxfx3Service wttragetreportkkxfx3Service;
    @Resource
    private Wttragetreportmain3Service wttragetreportmain3Service;
    @Resource
    private Wttragetreportpart3Service wttragetreportpart3Service;
    @Resource
    private Wttragetreportxndjpj3Service wttragetreportxndjpj3Service;
    @Resource
    private WtReportFault3Service wtReportFault3Service;
    @Resource
    private WtMttrAndMtbfMonthService wtMttrAndMtbfMonthService;

    //评价等级
    private String PJDJ = "pjdj";
    //评价结果
    private String PJJG = "pjjg";

    /**
     * 查询健康报告
     *
     * @return
     */
    public Map<String, Object> healthReport(String wtId, Date recorddate) {

        Map<String, Object> map = new HashMap<>();

        if (StringUtils.notEmp(wtId) && StringUtils.notEmp(recorddate)) {
            Calendar cal = Calendar.getInstance();
            cal.setTime(recorddate);

            int year = cal.get(Calendar.YEAR);
            int month = cal.get(Calendar.MONTH) + 1;

            int daynum=cal.get(Calendar.DAY_OF_MONTH);
            if (InitialRunner.wtmap.containsKey(wtId)) {
                Windturbine wt = InitialRunner.wtmap.get(wtId);


                //List<Wttragetreport3> wtreportls = wttragetreport3Service.findWttragetreport3(wtId, year, month);

                List<Wttragetreport3> wtreportls = wttragetreport3Service.findWttragetreport3(wtId,recorddate);

                if (!wtreportls.isEmpty()) {
                    //获得健康报告主表信息
                    Wttragetreport3 wtreport = wtreportls.get(0);
                    Map<String, Object> jczbmap = new HashMap<>();

                    List<WtMttrAndMtbfMonth> mmls=wtMttrAndMtbfMonthService.getMttrAndMtbf(wtId, year, month);

                    if(!mmls.isEmpty())
                    {
                        WtMttrAndMtbfMonth mm=mmls.get(0);
                        double stoptimes=mm.getStoprtimes();
                        double stophours=mm.getStophours();
                        double mttr=0.0;
                        double mtbf=daynum*24;
                        if(stoptimes!=0)
                        {
                            mttr=new BigDecimal(stophours).divide(new BigDecimal(stoptimes), 2, RoundingMode.HALF_EVEN).doubleValue();
                            mtbf=new BigDecimal(daynum*24).divide(new BigDecimal(stoptimes), 2, RoundingMode.HALF_EVEN).doubleValue();

                        }

                        jczbmap.put("mttr", mttr);
                        jczbmap.put("mtbf", mtbf);
                    }

                    //风机编号
                    jczbmap.put("fjbh", wt.getCode());
                    //风机名称
                    jczbmap.put("fjmc", wt.getName());
					/*******************************基础指标****************************************/
                    //获得基础指标表数据
                    List<Wttragetreportmain3> mainls = wttragetreportmain3Service.findWttragetreportmain3(wtreport.getId(), wtId);

                    if (!mainls.isEmpty()) {
                        Wttragetreportmain3 wttragetreportmain3 = mainls.get(0);

                        String datestr = DateUtils.format(wttragetreportmain3.getRecodedate());
                        //报告日期
                        jczbmap.put("bgrq", datestr);
                        //评级等级
                        jczbmap.put(PJDJ, wttragetreportmain3.getPjdj());
                        //评级结果
                        jczbmap.put(PJJG, wttragetreportmain3.getPjjg());
                        //月发电量
                        jczbmap.put("yfdl", wttragetreportmain3.getYfdl());
                        //年发电量
                        jczbmap.put("nfdl", wttragetreportmain3.getNfdl());
                        //月发电量环比
                        jczbmap.put("yfdlhb", wttragetreportmain3.getYfdlhb());
                        //年发电量同比
                        jczbmap.put("yfdltb", wttragetreportmain3.getYfdltb());
                        //月故障次数
                        jczbmap.put("ygzcs", wttragetreportmain3.getYgzcs());
                        //月故障时长
                        jczbmap.put("ygzsc", wttragetreportmain3.getYgzsc());
                        //发电机故障次数
                        jczbmap.put("fdlgzcs", wttragetreportmain3.getFdlgzcs());
                        //发电机报警次数
                        jczbmap.put("fdlbjcs", wttragetreportmain3.getFdlbjcs());
                        //发电机健康情况
                        jczbmap.put("fdljkqk", wttragetreportmain3.getFdljkqk());
                        //齿轮箱故障次数
                        jczbmap.put("clxgzcs", wttragetreportmain3.getClxgzcs());
                        //齿轮箱报警次数
                        jczbmap.put("clxbjcs", wttragetreportmain3.getClxbjcs());
                        //齿轮箱健康情况
                        jczbmap.put("clxjkqk", wttragetreportmain3.getClxjkqk());
                        //变浆故障次数
                        jczbmap.put("bjgzcs", wttragetreportmain3.getBjgzcs());
                        //变浆报警次数
                        jczbmap.put("bjbjcs", wttragetreportmain3.getBjbjcs());
                        //变浆健康情况
                        jczbmap.put("bjjkqk", wttragetreportmain3.getBjjkqk());
                        //主控故障次数
                        jczbmap.put("zkgzcs", wttragetreportmain3.getZkgzcs());
                        //主控报警次数
                        jczbmap.put("zkbjcs", wttragetreportmain3.getZkbjcs());
                        //主控健康情况
                        jczbmap.put("zkjkqk", wttragetreportmain3.getZkjkqk());


                        //理论发电量
                        jczbmap.put("llfdl", wttragetreportmain3.getLlfdl());
                        //平均功率
                        jczbmap.put("pjgl", wttragetreportmain3.getPjgl());
                        //故障损失电量
                        jczbmap.put("gzssdl", wttragetreportmain3.getGzssdl());
                        //限电损失电量
                        jczbmap.put("xdssdll", wttragetreportmain3.getXdssdll());
                        //维护损失电量
                        jczbmap.put("whssdl", wttragetreportmain3.getWhssdl());
                        //性能损失电量
                        jczbmap.put("xnssdl", wttragetreportmain3.getXnssdl());
                        //受累损失电量
                        jczbmap.put("slssdl", 0.0);
                        //故障时间
                        jczbmap.put("gzsj", wttragetreportmain3.getGzsj());
                        //维护时间
                        jczbmap.put("whsj", wttragetreportmain3.getWhsj());
                        //运行时间
                        jczbmap.put("yxsj", wttragetreportmain3.getYxsj());
                        //停机时间
                        jczbmap.put("tjsj", wttragetreportmain3.getTjsj());
                        //平均切入风速
                        jczbmap.put("pjqrfs", wttragetreportmain3.getPjqrfs());

                        //拟合优度
                        jczbmap.put("nhyd", wttragetreportmain3.getNhyd());
                        //功率一致性系数
                        jczbmap.put("glyzxxs", wttragetreportmain3.getGlyzxxs());
                        //利用小时
                        jczbmap.put("lyxs", wttragetreportmain3.getLyxs());
                        //设备利用率
                        jczbmap.put("sbklyl", wttragetreportmain3.getSbklyl());
                        //等效可利用系数
                        jczbmap.put("dxklyxs", wttragetreportmain3.getDxklyxs());
                        //有效风时速
                        jczbmap.put("yxfss", wttragetreportmain3.getYxfss());
                        //平均风速
                        jczbmap.put("pjfs", wttragetreportmain3.getPjfs());

                        //静风频率
                        jczbmap.put("jfpl", wttragetreportmain3.getJfpl());
                        //并网时间
                        jczbmap.put("bwsj", wttragetreportmain3.getBwsj());

                    }

                    //获得检修数据
                    List<WtReportFault3> wtfaultls = wtReportFault3Service.findWtReportFault3(wtreport.getId(), wtId);

                    if (!wtfaultls.isEmpty()) {
                        WtReportFault3 wtReportFault3 = wtfaultls.get(0);

                        if (StringUtils.notEmp(wtReportFault3.getMainreason())) {
                            if (jczbmap.containsKey(PJJG)) {
                                String pjjg = (String) jczbmap.get(PJJG);
                                if (!pjjg.equals("差！")) {
                                    jczbmap.put(PJJG, "差！");
                                }
                                jczbmap.put(PJDJ, "C-");
                            }
                        } else {
                            if (jczbmap.containsKey(PJJG)) {
                                String pjjg = (String) jczbmap.get(PJJG);
                                if (pjjg.equals("差！")) {
                                    jczbmap.put(PJJG, "良！");
                                }
                                jczbmap.put(PJDJ, "B");
                            }
                        }


                        //健康情况说明
                        jczbmap.put("jkqksm", wtReportFault3.getGztop3name());
                        //故障类型1
                        if (!wtReportFault3.getTop1type().equals("null")) {
                            jczbmap.put("top1type", wtReportFault3.getTop1type());
                        } else {
                            jczbmap.put("top1type", null);
                        }
                        //故障类型2
                        if (!wtReportFault3.getTop2type().equals("null")) {
                            jczbmap.put("top2type", wtReportFault3.getTop2type());
                        } else {
                            jczbmap.put("top2type", null);
                        }
                        //故障类型3
                        if (!wtReportFault3.getTop3type().equals("null")) {
                            jczbmap.put("top3type", wtReportFault3.getTop3type());
                        } else {
                            jczbmap.put("top3type", null);
                        }


                        //推荐理由
                        jczbmap.put("jxly", wtReportFault3.getMainreason());
                        //检修时间
                        jczbmap.put("jxsj", wtReportFault3.getMaindate());
                        //风速
                        jczbmap.put("jxfs", wtReportFault3.getSpeed());
                        //检修方法
                        jczbmap.put("jxff", wtReportFault3.getMainmethod());
                        //检查步骤
                        jczbmap.put("jxbz", wtReportFault3.getApproach());
                        //检修工具
                        jczbmap.put("jxgj", wtReportFault3.getTools());
                        //检修平均时间
                        jczbmap.put("jxsc", wtReportFault3.getMainhour());

                    }

                    map.put("jczbmap",jczbmap);
                    /*******************************基础指标****************************************/

					/**************************风机四大部件图表指标***********************************/
					Map<String,List<Wttragetreportchart3>> chartmap=new HashMap<>();
					//获得风机四大部件图表列表
					List<Wttragetreportchart3>  wtchartls = wttragetreportchart3Service.findWttragetreportchart3(wtreport.getId(), wtId);

					if(!wtchartls.isEmpty())
					{
						for(Wttragetreportchart3 chart:wtchartls)
						{
							if(StringUtils.notEmp(chart.getPartid()))
							{
								if(chartmap.containsKey(chart.getPartid()))
								{
									List<Wttragetreportchart3> ls=chartmap.get(chart.getPartid());
									ls.add(chart);
									chartmap.put(chart.getPartid(),ls);
								}else
								{
									List<Wttragetreportchart3> ls=new ArrayList<>();
									ls.add(chart);
									chartmap.put(chart.getPartid(),ls);
								}
							}
						}
					}
					map.put("chartmap",chartmap);
					/**************************风机四大部件图表指标***********************************/

					/**************************风能利用率指标***********************************/

					//获得风能利用率列表
					List<Wttragetreportfnlyl3>  wtfnlylls = wttragetreportfnlyl3Service.findWttragetreportfnlyl3(wtreport.getId(), wtId);

					map.put("fnlyl",wtfnlylls);
					/**************************风风能利用率指标***********************************/

					/**************************可靠性分析指标***********************************/

					//获得可靠性分析列表
					List<Wttragetreportkkxfx3>  wtkkxfxls = wttragetreportkkxfx3Service.findWttragetreportkkxfx3(wtreport.getId(), wtId);

					map.put("kkxfx",wtkkxfxls);
					/**************************可靠性分析指标***********************************/

					/**************************风机部件指标指标***********************************/

					//获得风机部件指标列表
					List<Wttragetreportpart3>  wtbjzbls = wttragetreportpart3Service.findWttragetreportpart3(wtreport.getId(), wtId);

					map.put("bjzb",wtbjzbls);
					/**************************风机部件指标指标***********************************/

					/**************************等级评估指标***********************************/

					//获得风机等级评估指标列表
					List<Wttragetreportxndjpj3>  wtdjpgzbls = wttragetreportxndjpj3Service.findWttragetreportxndjpj3(wtreport.getId(), wtId);

					map.put("djpg",wtdjpgzbls);
					/**************************等级评估指标***********************************/
				}
            }

        }


        return map;

    }
}
