package com.gyee.generation.task.thread;

import com.gyee.common.contant.ContantXk;
import com.gyee.common.model.PointData;
import com.gyee.common.model.StringUtils;
import com.gyee.generation.init.CacheContext;
import com.gyee.generation.model.auto.ProBasicEquipment;
import com.gyee.generation.model.auto.ProBasicEquipmentPoint;
import com.gyee.generation.model.auto.ProEconEquipmentInfoDay2;
import com.gyee.generation.util.DateUtils;
import com.gyee.generation.util.realtimesource.IEdosUtil;
import com.gyee.generation.util.statisticcs.Initial;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Callable;

public class EquipmentInfo2ThreadPool implements Callable<String>, Serializable {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    private static final long serialVersionUID = 0;

    // 保存任务所需要的数据

    private Object threadPoolTaskData;
    private ProBasicEquipment wt;
    private Map<String, ProEconEquipmentInfoDay2> pep2map;

    private Date recordDate;
    private Date end;

    private Date begin;
    private List<ProEconEquipmentInfoDay2> dayls;
    private IEdosUtil edosUtil;

    public EquipmentInfo2ThreadPool(Object tasks, ProBasicEquipment wt, Map<String, ProEconEquipmentInfoDay2> pep2map,
                                    Date recordDate, Date end, Date begin, List<ProEconEquipmentInfoDay2> dayls,
                                    IEdosUtil edosUtil
    ) {

        this.threadPoolTaskData = tasks;
        this.wt = wt;
        this.pep2map = pep2map;
        this.recordDate = recordDate;
        this.end = end;
        this.begin = begin;
        this.dayls = dayls;
        this.edosUtil = edosUtil;
    }

    public synchronized String call() throws Exception {


        // 处理一个任务，这里的处理方式太简单了，仅仅是一个打印语句

        //System.out.println("开始执行任务：" + threadPoolTaskData);

        String result = "";

        // //便于观察，等待一段时间

        try {
            if (CacheContext.wtpAimap.containsKey(wt.getId())) {

                ProEconEquipmentInfoDay2 pewp = new ProEconEquipmentInfoDay2();
                Initial.initial(pewp);
                pewp.setCompanyId(wt.getCompanyId());
                pewp.setWindpowerstationId(wt.getWindpowerstationId());
                pewp.setLineId(wt.getLineId());
                pewp.setProjectId(wt.getProjectId());
                pewp.setRegionId(wt.getRegionId());
                pewp.setRecordDate(DateUtils.truncate(recordDate));
                pewp.setWindturbineId(wt.getId());
                //昨日的统计结果
                List<ProEconEquipmentInfoDay2> pepidls = new ArrayList<>();

                if (pep2map.containsKey(wt.getId())) {
                    pepidls.add(pep2map.get(wt.getId()));
                }
                calDetiall(pewp, end, begin, wt, pepidls);
                calSimple(pewp, end, begin, wt, pepidls);
                dayls.add(pewp);
                // proEconEquipmentInfoDay2Service.save(pewp);

            }


        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        threadPoolTaskData = null;

        return result;

    }

    private void calDetiall(ProEconEquipmentInfoDay2 pewp, Date end, Date begin, ProBasicEquipment wt, List<ProEconEquipmentInfoDay2> pepidls) throws Exception {
        //        //                0	待机
        //                1	手动停机
        //                2	正常发电
        //                3	发电降出力
        //                4	故障
        //                5	故障受累
        //                6	检修
        //                7	检修受累
        //                8	限电降出力
        //                9	限电停机
        //                10	电网受累
        //                11	环境受累
        //                12	通讯中断
        //                13	设备离线

        double lastState;//上一分钟状态

        double djsc = 0;//待机时长
        double sdtjsc = 0;//手动停机时长
        double zcfdsc = 0;//正常发电时长
        double fdjclsc = 0;//发电降出力时长
        double gzsc = 0;//故障时长
        double gzslsc = 0;//故障受累时长
        double jxsc = 0;//检修时长
        double jxslsc = 0;//检修受累时长
        double xdjclsc = 0;//限电降出力时长
        double xdtjsc = 0;//限电停机时长
        double dwslsc = 0;//电网受累时长
        double hjslsc = 0;//环境受累时长
        double txzdsc = 0;//通讯中断时长
        double sblxsc = 0;//设备离线时长

        Map<String, Map<String, ProBasicEquipmentPoint>> wtpAimap = CacheContext.wtpAimap;


        lastState = -1;//上一分钟状态
        Map<String, ProBasicEquipmentPoint> aimap = wtpAimap.get(wt.getId());

        if (aimap.containsKey(ContantXk.MXZT)) {

            ProBasicEquipmentPoint point = aimap.get(ContantXk.MXZT);
            //按照分钟时间进行统计状态快照值
            List<PointData> pointls = edosUtil.getHistoryDatasSnap(point.getNemCode(), begin.getTime() / 1000, end.getTime() / 1000);
            if (!pointls.isEmpty()) {
                for (PointData po : pointls) {

                    if (po.getPointValueInDouble() == 0) {

                        if (lastState != po.getPointValueInDouble()) {
                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }
                        //待机时长加1分钟
                        djsc++;
                    } else if (po.getPointValueInDouble() == 1) {
                        if (lastState != po.getPointValueInDouble()) {
                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //手动停机时长加1分钟
                        sdtjsc++;
                    } else if (po.getPointValueInDouble() == 2) {
                        if (lastState != po.getPointValueInDouble()) {
                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }
                        //正常发电时长加1分钟
                        zcfdsc++;
                    } else if (po.getPointValueInDouble() == 3) {
                        if (lastState != po.getPointValueInDouble()) {
                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //发电降出力时长加1分钟
                        fdjclsc++;
                    } else if (po.getPointValueInDouble() == 4) {
                        if (lastState != po.getPointValueInDouble()) {
                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //故障时长加1分钟
                        gzsc++;
                    } else if (po.getPointValueInDouble() == 5) {
                        if (lastState != po.getPointValueInDouble()) {
                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //故障受累时长加1分钟
                        gzslsc++;
                    } else if (po.getPointValueInDouble() == 6) {
                        if (lastState != po.getPointValueInDouble()) {
                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //检修时长加1分钟
                        jxsc++;
                    } else if (po.getPointValueInDouble() == 7) {
                        if (lastState != po.getPointValueInDouble()) {
                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //检修受累时长加1分钟
                        jxslsc++;
                    } else if (po.getPointValueInDouble() == 8) {
                        if (lastState != po.getPointValueInDouble()) {
                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //限电降出力时长加1分钟
                        xdjclsc++;
                    } else if (po.getPointValueInDouble() == 9) {
                        if (lastState != po.getPointValueInDouble()) {

                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //限电停机时长加1分钟
                        xdtjsc++;
                    } else if (po.getPointValueInDouble() == 10) {
                        if (lastState != po.getPointValueInDouble()) {

                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //电网受累时长加1分钟
                        dwslsc++;
                    } else if (po.getPointValueInDouble() == 11) {
                        if (lastState != po.getPointValueInDouble()) {

                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }
                        //环境受累时长加1分钟
                        hjslsc++;
                    } else if (po.getPointValueInDouble() == 12) {
                        if (lastState != po.getPointValueInDouble()) {

                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }
                        //通讯中断时长加1分钟
                        txzdsc++;
                    } else if (po.getPointValueInDouble() == 13) {
                        if (lastState != po.getPointValueInDouble()) {

                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //设备离线时长加1分钟
                        sblxsc++;
                    }

                }


            }

        }

        //日合计故障小时（明细）
        pewp.setRgzxsmx(new BigDecimal(gzsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计场内受累故障小时（明细）
        pewp.setRcnslgzxsmx(new BigDecimal(gzslsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计检修小时（明细）
        pewp.setRjxxsmx(new BigDecimal(jxsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计场内受累检修小时（明细）
        pewp.setRcnsljxxsmx(new BigDecimal(jxslsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计待机小时（明细）
        pewp.setRdjxsmx(new BigDecimal(djsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计缺陷降出力小时（明细）
        pewp.setRqxjclxsmx(new BigDecimal(fdjclsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计手动停机小时（明细）
        pewp.setRsdtjxsmx(new BigDecimal(sdtjsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计性能小时（明细）
        pewp.setRbwxsmx(new BigDecimal(zcfdsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());


        //日合计限电停机小时（明细）
        pewp.setRxdtjxsmx(new BigDecimal(xdtjsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计限电降出力小时（明细）
        pewp.setRxdjclxsmx(new BigDecimal(xdjclsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计场外受累电网小时（明细）
        pewp.setRcwsldwxsmx(new BigDecimal(dwslsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计场外受累电网小时（明细）
        pewp.setRcwsltqxsmx(new BigDecimal(hjslsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());

        //		//日合计限电停机小时（明细）
        //		pewp.setRxdtjxsmx(new BigDecimal(0).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //		//日合计限电降出力小时（明细）
        //		pewp.setRxdjclxsmx(new BigDecimal(0).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //		//日合计场外受累电网小时（明细）
        //		pewp.setRcwsldwxsmx(new BigDecimal(0).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //		//日合计场外受累电网小时（明细）
        //		pewp.setRcwsltqxsmx(new BigDecimal(0).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());

        //日合计通讯中断小时（明细）
        pewp.setRtxzdxsmx(new BigDecimal(txzdsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计离线小时（明细）
        pewp.setRlxxsmx(new BigDecimal(sblxsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());


        double sc = pewp.getRgzxsmx() + pewp.getRcnslgzxsmx() + pewp.getRjxxsmx() + pewp.getRcnsljxxsmx() +
                pewp.getRdjxsmx() + pewp.getRqxjclxsmx() + pewp.getRsdtjxsmx() + pewp.getRbwxsmx() +
                pewp.getRxdtjxsmx() + pewp.getRxdjclxsmx() + pewp.getRcwsldwxsmx() + pewp.getRcwsltqxsmx() +
                pewp.getRtxzdxsmx() + pewp.getRlxxsmx();

        if (sc > 24) {
            double value = sc - 24;
            if (pewp.getRbwxsmx() > value) {
                pewp.setRbwxsmx(pewp.getRbwxsmx() - value);
            } else if (pewp.getRdjxsmx() > value) {
                pewp.setRdjxsmx(pewp.getRdjxsmx() - value);
            } else if (pewp.getRgzxsmx() > value) {
                pewp.setRgzxsmx(pewp.getRgzxsmx() - value);
            } else if (pewp.getRjxxsmx() > value) {
                pewp.setRjxxsmx(pewp.getRjxxsmx() - value);
            } else if (pewp.getRlxxsmx() > value) {
                pewp.setRlxxsmx(pewp.getRlxxsmx() - value);
            } else if (pewp.getRtxzdxsmx() > value) {
                pewp.setRtxzdxsmx(pewp.getRtxzdxsmx() - value);
            }
        } else if (sc < 24) {
            double value = 24 - sc;
            pewp.setRdjxsmx(pewp.getRdjxsmx() + value);

        }


        //*******************************************日信息统计*********************************************************/

        //*******************************************月信息统计*********************************************************/

        if (pepidls.isEmpty()) {
            setLossHoursMonth(pewp);

        } else {


            ProEconEquipmentInfoDay2 pepid = pepidls.get(0);

            //月合计故障小时（明细）
            pewp.setYgzxsmx(StringUtils.round(pepid.getYgzxsmx() + pewp.getRgzxsmx(), 2));
            //月合计场内受累故障小时（明细）
            pewp.setYcnslgzxsmx(StringUtils.round(pepid.getYcnslgzxsmx() + pewp.getRcnslgzxsmx(), 2));
            //月合计检修小时（明细）
            pewp.setYjxxsmx(StringUtils.round(pepid.getYjxxsmx() + pewp.getRjxxsmx(), 2));
            //月合计场内受累检修小时（明细）
            pewp.setYcnsljxxsmx(StringUtils.round(pepid.getYcnsljxxsmx() + pewp.getRcnsljxxsmx(), 2));
            //月合计待机小时（明细）
            pewp.setYdjxsmx(StringUtils.round(pepid.getYdjxsmx() + pewp.getRdjxsmx(), 2));
            //月合计缺陷降出力小时（明细）
            pewp.setYqxjclxsmx(StringUtils.round(pepid.getYqxjclxsmx() + pewp.getRqxjclxsmx(), 2));
            //月合计手动停机小时（明细）
            pewp.setYsdtjxsmx(StringUtils.round(pepid.getYsdtjxsmx() + pewp.getRsdtjxsmx(), 2));
            //月合计性能小时（明细）
            pewp.setYbwxsmx(StringUtils.round(pepid.getYbwxsmx() + pewp.getRbwxsmx(), 2));


            //月合计限电停机小时（明细）
            pewp.setYxdtjxsmx(StringUtils.round(pepid.getYxdtjxsmx() + pewp.getRxdtjxsmx(), 2));
            //月合计限电降出力小时（明细）
            pewp.setYxdjclxsmx(StringUtils.round(pepid.getYxdjclxsmx() + pewp.getRxdjclxsmx(), 2));
            //月合计场外受累电网小时（明细）
            pewp.setYcwsldwxsmx(StringUtils.round(pepid.getYcwsldwxsmx() + pewp.getRcwsldwxsmx(), 2));
            //月合计场外受累电网小时（明细）
            pewp.setYcwsltqxsmx(StringUtils.round(pepid.getYcwsltqxsmx() + pewp.getRcwsltqxsmx(), 2));


            //			//月合计限电停机小时（明细）
            //			pewp.setYxdtjxsmx(StringUtils.round(0,2));
            //			//月合计限电降出力小时（明细）
            //			pewp.setYxdjclxsmx(StringUtils.round(0,2));
            //			//月合计场外受累电网小时（明细）
            //			pewp.setYcwsldwxsmx(StringUtils.round(0,2));
            //			//月合计场外受累电网小时（明细）
            //			pewp.setYcwsltqxsmx(StringUtils.round(0,2));


            //月合计通讯中断小时（明细）
            pewp.setYtxzdxsmx(StringUtils.round(pepid.getYtxzdxsmx() + pewp.getRtxzdxsmx(), 2));
            //月合计离线小时（明细）
            pewp.setYlxxsmx(StringUtils.round(pepid.getYlxxsmx() + pewp.getRlxxsmx(), 2));

        }


        //*******************************************月信息统计*********************************************************/

        //*******************************************年信息统计*********************************************************/
        if (pepidls.isEmpty()) {
            setLossHoursYear(pewp);
        } else {

            ProEconEquipmentInfoDay2 pepid = pepidls.get(0);

            //年合计故障小时（明细）
            pewp.setNgzxsmx(StringUtils.round(pepid.getNgzxsmx() + pewp.getRgzxsmx(), 2));
            //年合计场内受累故障小时（明细）
            pewp.setNcnslgzxsmx(StringUtils.round(pepid.getNcnslgzxsmx() + pewp.getRcnslgzxsmx(), 2));
            //年合计检修小时（明细）
            pewp.setNjxxsmx(StringUtils.round(pepid.getNjxxsmx() + pewp.getRjxxsmx(), 2));
            //年合计场内受累检修小时（明细）
            pewp.setNcnsljxxsmx(StringUtils.round(pepid.getNcnsljxxsmx() + pewp.getRcnsljxxsmx(), 2));
            //年合计待机小时（明细）
            pewp.setNdjxsmx(StringUtils.round(pepid.getNdjxsmx() + pewp.getRdjxsmx(), 2));
            //年合计缺陷降出力小时（明细）
            pewp.setNqxjclxsmx(StringUtils.round(pepid.getNqxjclxsmx() + pewp.getRqxjclxsmx(), 2));
            //年合计手动停机小时（明细）
            pewp.setNsdtjxsmx(StringUtils.round(pepid.getNsdtjxsmx() + pewp.getRsdtjxsmx(), 2));
            //年合计性能小时（明细）
            pewp.setNbwxsmx(StringUtils.round(pepid.getNbwxsmx() + pewp.getRbwxsmx(), 2));
            //年合计限电停机小时（明细）
            pewp.setNxdtjxsmx(StringUtils.round(pepid.getNxdtjxsmx() + pewp.getRxdtjxsmx(), 2));
            //年合计限电降出力小时（明细）
            pewp.setNxdjclxsmx(StringUtils.round(pepid.getNxdjclxsmx() + pewp.getRxdjclxsmx(), 2));
            //年合计场外受累电网小时（明细）
            pewp.setNcwsldwxsmx(StringUtils.round(pepid.getNcwsldwxsmx() + pewp.getRcwsldwxsmx(), 2));
            //年合计场外受累电网小时（明细）
            pewp.setNcwsltqxsmx(StringUtils.round(pepid.getNcwsltqxsmx() + pewp.getRcwsltqxsmx(), 2));


            //			//年合计限电停机小时（明细）
            //			pewp.setNxdtjxsmx(StringUtils.round(0,2));
            //			//年合计限电降出力小时（明细）
            //			pewp.setNxdjclxsmx(StringUtils.round(0,2));
            //			//年合计场外受累电网小时（明细）
            //			pewp.setNcwsldwxsmx(StringUtils.round(0,2));
            //			//年合计场外受累电网小时（明细）
            //			pewp.setNcwsltqxsmx(StringUtils.round(0,2));

            //年合计通讯中断小时（明细）
            pewp.setNtxzdxsmx(StringUtils.round(pepid.getNtxzdxsmx() + pewp.getRtxzdxsmx(), 2));
            //年合计离线小时（明细）
            pewp.setNlxxsmx(StringUtils.round(pepid.getNlxxsmx() + pewp.getRlxxsmx(), 2));

        }


    }

    private static void setLossHoursYear(ProEconEquipmentInfoDay2 pewp) {
        //年合计故障小时（明细）
        pewp.setNgzxsmx(pewp.getRgzxsmx());
        //年合计场内受累故障小时（明细）
        pewp.setNcnslgzxsmx(pewp.getRcnslgzxsmx());
        //年合计检修小时（明细）
        pewp.setNjxxsmx(pewp.getRjxxsmx());
        //年合计场内受累检修小时（明细）
        pewp.setNcnsljxxsmx(pewp.getRcnsljxxsmx());
        //年合计待机小时（明细）
        pewp.setNdjxsmx(pewp.getRdjxsmx());
        //年合计缺陷降出力小时（明细）
        pewp.setNqxjclxsmx(pewp.getRqxjclxsmx());
        //年合计手动停机小时（明细）
        pewp.setNsdtjxsmx(pewp.getRsdtjxsmx());
        //年合计性能小时（明细）
        pewp.setNbwxsmx(pewp.getRbwxsmx());
        //年合计限电停机小时（明细）
        pewp.setNxdtjxsmx(pewp.getRxdtjxsmx());
        //年合计限电降出力小时（明细）
        pewp.setNxdjclxsmx(pewp.getRxdjclxsmx());
        //年合计场外受累电网小时（明细）
        pewp.setNcwsldwxsmx(pewp.getRcwsldwxsmx());
        //年合计场外受累电网小时（明细）
        pewp.setNcwsltqxsmx(pewp.getRcwsltqxsmx());
        //年合计通讯中断小时（明细）
        pewp.setNtxzdxsmx(pewp.getRtxzdxsmx());
        //年合计离线小时（明细）
        pewp.setNlxxsmx(pewp.getRlxxsmx());
    }

    private static void setLossHoursMonth(ProEconEquipmentInfoDay2 pewp) {
        //月合计故障小时（明细）
        pewp.setYgzxsmx(pewp.getRgzxsmx());
        //月合计场内受累故障小时（明细）
        pewp.setYcnslgzxsmx(pewp.getRcnslgzxsmx());
        //月合计检修小时（明细）
        pewp.setYjxxsmx(pewp.getRjxxsmx());
        //月合计场内受累检修小时（明细）
        pewp.setYcnsljxxsmx(pewp.getRcnsljxxsmx());
        //月合计待机小时（明细）
        pewp.setYdjxsmx(pewp.getRdjxsmx());
        //月合计缺陷降出力小时（明细）
        pewp.setYqxjclxsmx(pewp.getRqxjclxsmx());
        //月合计手动停机小时（明细）
        pewp.setYsdtjxsmx(pewp.getRsdtjxsmx());
        //月合计性能小时（明细）
        pewp.setYbwxsmx(pewp.getRbwxsmx());
        //月合计限电停机小时（明细）
        pewp.setYxdtjxsmx(pewp.getRxdtjxsmx());
        //月合计限电降出力小时（明细）
        pewp.setYxdjclxsmx(pewp.getRxdjclxsmx());
        //月合计场外受累电网小时（明细）
        pewp.setYcwsldwxsmx(pewp.getRcwsldwxsmx());
        //月合计场外受累电网小时（明细）
        pewp.setYcwsltqxsmx(pewp.getRcwsltqxsmx());
        //月合计通讯中断小时（明细）
        pewp.setYtxzdxsmx(pewp.getRtxzdxsmx());
        //月合计离线小时（明细）
        pewp.setYlxxsmx(pewp.getRlxxsmx());
    }


    private static void setLossHoursMonthSimple(ProEconEquipmentInfoDay2 pewp) {
        //月合计待机小时
        pewp.setYdjxs(pewp.getRdjxs());
        //月合计维护停机小时
        pewp.setYjxtjxs(pewp.getRjxtjxs());
        // 月合计故障停机小时
        pewp.setYgztjxs(pewp.getRgztjxs());
        //月合计运行小时
        pewp.setYyxxs(pewp.getRyxxs());
        //月合计限电小时
        pewp.setYxdxs(pewp.getRxdxs());
        //月合计通讯中断小时
        pewp.setYtxzdxs(pewp.getRtxzdxs());
        //月合计受累小时
        pewp.setYslxs(pewp.getRslxs());
    }

    private static void setLossHoursYearSimple(ProEconEquipmentInfoDay2 pewp) {
        //年合计待机小时
        pewp.setNdjxs(pewp.getRdjxs());
        //年合计维护停机小时
        pewp.setNjxtjxs(pewp.getRjxtjxs());
        // 年合计故障小时
        pewp.setNgztjxs(pewp.getRgztjxs());
        //年合计运行小时
        pewp.setNyxxs(pewp.getRyxxs());
        //年合计限电小时
        pewp.setNxdxs(pewp.getRxdxs());
        //年合计通讯中断小时
        pewp.setNtxzdxs(pewp.getRtxzdxs());
        //年合计受累小时
        pewp.setNslxs(pewp.getRslxs());
    }

    private void calSimple(ProEconEquipmentInfoDay2 pewp, Date end, Date begin, ProBasicEquipment wt, List<ProEconEquipmentInfoDay2> pepidls) throws Exception {
        //        0	待机
        //        1	运行
        //        2	故障
        //        3	检修
        //        4	限电
        //        5	受累
        //        6	离线
        //*******************************************日信息统计*********************************************************/

        double lastState = -1;//上一分钟状态


        double djsc = 0;//待机时长
        double zcfdsc = 0;//正常发电时长
        double gzsc = 0;//故障时长
        double jxsc = 0;//检修时长
        double xdtjsc = 0;//限电停机时长
        double slsc = 0;//受累时长
        double txzdsc = 0;//通讯中断时长


        Map<String, Map<String, ProBasicEquipmentPoint>> wtpAimap = CacheContext.wtpAimap;


        Map<String, ProBasicEquipmentPoint> aimap = wtpAimap.get(wt.getId());
        if (aimap.containsKey(ContantXk.MXZT)) {

            ProBasicEquipmentPoint point = aimap.get(ContantXk.MXZT);
            //按照分钟时间进行统计状态快照值
            List<PointData> pointls = edosUtil.getHistoryDatasSnap(point.getNemCode(), begin.getTime() / 1000, end.getTime() / 1000);
            if (!pointls.isEmpty()) {
                for (PointData po : pointls) {

                    if (po.getPointValueInDouble() == 0) {
                        if (lastState != po.getPointValueInDouble()) {

                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }
                        //待机时长加1分钟
                        djsc++;
                    } else if (po.getPointValueInDouble() == 1) {
                        if (lastState != po.getPointValueInDouble()) {

                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }
                        //正常发电时长加1分钟
                        zcfdsc++;
                    } else if (po.getPointValueInDouble() == 2) {
                        if (lastState != po.getPointValueInDouble()) {

                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }
                        //故障时长加1分钟
                        gzsc++;
                    } else if (po.getPointValueInDouble() == 3) {
                        if (lastState != po.getPointValueInDouble()) {

                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //检修时长加1分钟
                        jxsc++;

                    } else if (po.getPointValueInDouble() == 4) {
                        if (lastState != po.getPointValueInDouble()) {

                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //限电停机时长加1分钟
                        xdtjsc++;
                    } else if (po.getPointValueInDouble() == 5) {
                        if (lastState != po.getPointValueInDouble()) {

                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }

                        //受累时长加1分钟
                        slsc++;

                    } else if (po.getPointValueInDouble() == 6) {
                        if (lastState != po.getPointValueInDouble()) {
                            //将当前状态保存到上一分钟状态
                            lastState = po.getPointValueInDouble();

                        }
                        //通讯中断时长加1分钟
                        txzdsc++;
                    }

                }

            }


        }


        //日合计故障停机小时
        pewp.setRgztjxs(new BigDecimal(gzsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计维护停机小时
        pewp.setRjxtjxs(new BigDecimal(jxsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        // 日合计待机小时
        pewp.setRdjxs(new BigDecimal(djsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计运行小时
        pewp.setRyxxs(new BigDecimal(zcfdsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计限电小时
        pewp.setRxdxs(new BigDecimal(xdtjsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());


        //日合计通讯中断小时
        pewp.setRtxzdxs(new BigDecimal(txzdsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());
        //日合计受累小时
        pewp.setRslxs(new BigDecimal(slsc).divide(new BigDecimal(60), 2, RoundingMode.HALF_EVEN).doubleValue());


        double sc = pewp.getRdjxs() + pewp.getRgztjxs() + pewp.getRjxtjxs() + pewp.getRyxxs() +
                pewp.getRxdxs() + pewp.getRtxzdxs() + pewp.getRslxs();

        if (sc > 24) {
            double value = sc - 24;
            if (pewp.getRyxxs() > value) {
                pewp.setRyxxs(pewp.getRyxxs() - value);
            } else if (pewp.getRdjxs() > value) {
                pewp.setRdjxs(pewp.getRdjxs() - value);
            } else if (pewp.getRjxtjxs() > value) {
                pewp.setRjxtjxs(pewp.getRjxtjxs() - value);
            } else if (pewp.getRjxxsmx() > value) {
                pewp.setRjxxsmx(pewp.getRjxxsmx() - value);
            } else if (pewp.getRgztjxs() > value) {
                pewp.setRgztjxs(pewp.getRgztjxs() - value);
            } else if (pewp.getRxdxs() > value) {
                pewp.setRxdxs(pewp.getRxdxs() - value);
            }
        } else if (sc < 24) {
            double value = 24 - sc;
            pewp.setRyxxs(pewp.getRyxxs() + value);

        }
        //*******************************************日信息统计*********************************************************/

        //*******************************************月信息统计*********************************************************/
        if (pepidls.isEmpty()) {
            setLossHoursMonthSimple(pewp);

        } else {

            ProEconEquipmentInfoDay2 pepid = pepidls.get(0);

            //月合计待机小时
            pewp.setYdjxs(StringUtils.round(pepid.getYdjxs() + pewp.getRdjxs(), 2));
            //月合计维护停机小时
            pewp.setYjxtjxs(StringUtils.round(pepid.getYjxtjxs() + pewp.getRjxtjxs(), 2));
            // 月合计故障小时
            pewp.setYgztjxs(StringUtils.round(pepid.getYgztjxs() + pewp.getRgztjxs(), 2));
            //月合计运行小时
            pewp.setYyxxs(StringUtils.round(pepid.getYyxxs() + pewp.getRyxxs(), 2));
            //月合计限电小时
            pewp.setYxdxs(StringUtils.round(pepid.getYxdxs() + pewp.getRxdxs(), 2));


            //月合计限电小时
            pewp.setYxdxs(StringUtils.round(0, 2));
            //月合计通讯中断小时
            pewp.setYtxzdxs(StringUtils.round(pepid.getYtxzdxs() + pewp.getRtxzdxs(), 2));
            //月合计受累小时
            pewp.setYslxs(StringUtils.round(pepid.getYslxs() + pewp.getRslxs(), 2));

            //月合计受累小时
            pewp.setYslxs(StringUtils.round(0, 2));

        }
        //*******************************************月信息统计*********************************************************/

        //*******************************************年信息统计*********************************************************/
        if (pepidls.isEmpty()) {
            setLossHoursYearSimple(pewp);

        } else {
            ProEconEquipmentInfoDay2 pepid = pepidls.get(0);

            //年合计待机小时
            pewp.setNdjxs(StringUtils.round(pepid.getNdjxs() + pewp.getRdjxs(), 2));
            //年合计维护停机小时
            pewp.setNjxtjxs(StringUtils.round(pepid.getNjxtjxs() + pewp.getRjxtjxs(), 2));
            // 年合计故障小时
            pewp.setNgztjxs(StringUtils.round(pepid.getNgztjxs() + pewp.getRgztjxs(), 2));
            //年合计运行小时
            pewp.setNyxxs(StringUtils.round(pepid.getNyxxs() + pewp.getRyxxs(), 2));
            //年合计限电小时
            pewp.setNxdxs(StringUtils.round(pepid.getNxdxs() + pewp.getRxdxs(), 2));

            //年合计限电小时
            pewp.setNxdxs(StringUtils.round(0, 2));
            //年合计通讯中断小时
            pewp.setNtxzdxs(StringUtils.round(pepid.getNtxzdxs() + pewp.getRtxzdxs(), 2));
            //年合计受累小时
            pewp.setNslxs(StringUtils.round(pepid.getNslxs() + pewp.getRslxs(), 2));

            //年合计受累小时
            pewp.setNslxs(StringUtils.round(0, 2));

        }
        //*******************************************年信息统计*********************************************************/
    }
}