package com.app.crontask.gfle;


import com.app.crontask.ChangeTimeUtils;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.server.SimpleCronTask;

import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 加纳HHMC/五金百货业务中心 GF02 点检保养任务生成定时任务类
 * ORGID='HHMC' and SITEID='GF02'
 * edit 2023-8-24
 */
public class CheckTaskGfleCronTask extends SimpleCronTask {

    @Override
    public void cronAction() {

        try {
            //GF02的所有活动的检修路线
            MboSetRemote routesSet = MXServer.getMXServer().getMboSet("ROUTES",MXServer.getMXServer().getSystemUserInfo());
            routesSet.setWhere("STATUS ='ACTIVE' and ORGID='HHMC' and SITEID='GF02' ");
            routesSet.setOrderBy("ROUTESID");
            routesSet.reset();
            if(null!=routesSet && !routesSet.isEmpty()){
                Calendar calendar = Calendar.getInstance();
                SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date curdate=new Date();
                int hours = curdate.getHours();
                calendar.setTime(curdate);
                calendar.set(Calendar.HOUR_OF_DAY, hours);
                calendar.set(Calendar.MINUTE, 0);
                calendar.set(Calendar.SECOND, 0);
                Date curZsdate=calendar.getTime();
                String curdateStr=sf.format(curZsdate);
                Calendar djrwCan = Calendar.getInstance();
                Date djrw=new Date();

                //扫描更新修改后的点检项的时间
                MboSetRemote pmlineRwqSetQ= MXServer.getMXServer().getMboSet("PMSTDARDLINES",MXServer.getMXServer().getSystemUserInfo());;
                String pmlqstr="SPOTRUNID IN(SELECT ROUTE_STOPID FROM ROUTE_STOP WHERE ORGID='HHMC' and SITEID='GF02' ) AND ISSCRW=0 AND TRUNC(NEXTEXDATE) < TRUNC(SYSDATE)";
                pmlineRwqSetQ.setWhere(pmlqstr);
                pmlineRwqSetQ.reset();
                if(null!=pmlineRwqSetQ){
                    MboRemote djbzZxhMboq=null;
                    for(int updateq=0;updateq<pmlineRwqSetQ.count();updateq++){
                        djbzZxhMboq=pmlineRwqSetQ.getMbo(updateq);
                        int frequency1 = djbzZxhMboq.getInt("FREQUENCY");//频率
                        String frequnit1 = djbzZxhMboq.getString("FREQUNIT");//频率单位
                        Date lascomDate1=djbzZxhMboq.getDate("NEXTEXDATE");
                        Date updateNextTime1=calculateNext(frequnit1,lascomDate1,frequency1);
                        if (updateNextTime1.after(curdate)) {
                            djbzZxhMboq.setValue("NEXTEXDATE",updateNextTime1,2L);
                        } else {
                            djbzZxhMboq.setValue("NEXTEXDATE",curdate,2L);
                        }
                    }
                    try{
                        pmlineRwqSetQ.save();
                        pmlineRwqSetQ.close();
                    }catch (Exception e){

                    }

                }

                //点检保养任务主表
                MboSetRemote spotrunSet = MXServer.getMXServer().getMboSet("SPOTRUN",MXServer.getMXServer().getSystemUserInfo());

                Date curlocaldate=null;
                DecimalFormat de=new DecimalFormat("0000");
                SimpleDateFormat sfdj=new SimpleDateFormat("yyyyMMdd");
                MboRemote routeMbo=null;
                MboSetRemote udzxzSet = MXServer.getMXServer().getMboSet("UDCJZ",MXServer.getMXServer().getSystemUserInfo());

                MboRemote udzxzMbo=null;
                MboSetRemote pmlineRwqSet= MXServer.getMXServer().getMboSet("PMSTDARDLINES",MXServer.getMXServer().getSystemUserInfo());;
                MboRemote sporturnMbo=null;
                MboSetRemote sptrunSet=null;
                MboSetRemote ryzSet=null;
                MboSetRemote l_spotrunSet=null;
                MboSetRemote l_spotrunlineSet=null;
                MboSetRemote l_routesSet=null;
                MboRemote l_routesMbo=null;
                MboRemote l_spotrunMbo=null;
                MboSetRemote sporturnLineSet=null;
                MboSetRemote routeStopZxzSet=MXServer.getMXServer().getMboSet("ROUTE_STOP",MXServer.getMXServer().getSystemUserInfo());;
                MboRemote routeStopMbo=null;
                MboSetRemote pmplSet=MXServer.getMXServer().getMboSet("PMSTDARDLINES",MXServer.getMXServer().getSystemUserInfo());;;
                MboRemote pmplMbo=null;
                MboSetRemote pmdqplSet=null;
                MboRemote splineMbo=null;
                MboSetRemote l_pmstdardlineSet=null;
                MboRemote l_pmstdarlineMbo=null;
                MboRemote l_spotrunlineMbo=null;
                for(int i=0;i<routesSet.count();i++){
                    routeMbo=routesSet.getMbo(i);
                    String route=routeMbo.getString("ROUTE");//路线编号
                    String orgid=routeMbo.getString("ORGID");
                    String siteid=routeMbo.getString("SITEID");
                    System.out.println("--GF02任务开始生成第"+i+"条路线"+route);
                    String djrwbhrqStr="";
                    String djjnsjStr="";
                    String djbjsjStr="";
                    if("GF03".equalsIgnoreCase(siteid) || "GF02".equalsIgnoreCase(siteid) || "GF51".equalsIgnoreCase(siteid)){
                        curlocaldate = ChangeTimeUtils.changeHour(djrw, -8);//转换成当地时间
                        djrwCan.setTime(curlocaldate);
                        djrwCan.set(Calendar.HOUR_OF_DAY, 8);
                        djrwCan.set(Calendar.MINUTE, 0);
                        djrwCan.set(Calendar.SECOND, 0);
                        Date djjnsj=djrwCan.getTime();//北京开始时间
                        djjnsjStr=sf.format(djjnsj);
                        Date djbjsj = ChangeTimeUtils.changeDay(djrwCan.getTime(), 1);//北京结束时间
                        djbjsjStr=sf.format(djbjsj);
                        djrwbhrqStr+="ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND CREATEDATE BETWEEN TO_TIMESTAMP('"+djjnsjStr+"', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('"+djbjsjStr+"', 'YYYY-MM-DD HH24:MI:SS')";
                    }else if("KF61".equalsIgnoreCase(siteid) || "KF51".equalsIgnoreCase(siteid)
                            || "TF51".equalsIgnoreCase(siteid) || "TF01".equalsIgnoreCase(siteid)){
                        curlocaldate = ChangeTimeUtils.changeHour(djrw, -5);//转换成当地时间
                        djrwCan.setTime(curlocaldate);
                        djrwCan.set(Calendar.HOUR_OF_DAY, 5);
                        djrwCan.set(Calendar.MINUTE, 0);
                        djrwCan.set(Calendar.SECOND, 0);
                        Date djjnsj=djrwCan.getTime();//北京开始时间
                        djjnsjStr=sf.format(djjnsj);
                        Date djbjsj = ChangeTimeUtils.changeDay(djrwCan.getTime(), 1);//北京结束时间
                        djbjsjStr=sf.format(djbjsj);
                        djrwbhrqStr+="ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND CREATEDATE BETWEEN TO_TIMESTAMP('"+djjnsjStr+"', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('"+djbjsjStr+"', 'YYYY-MM-DD HH24:MI:SS')";
                    }

                    //取当前路线中所需的执行组、执行组人员组
                    String udzxzSqlStr="UDCJZID in(SELECT max(UDCJZ2.UDCJZID) FROM ROUTES LEFT JOIN ROUTE_STOP ON ROUTE_STOP.ROUTE=ROUTES.ROUTE and ROUTE_STOP.ORGID=ROUTES.ORGID  and ROUTE_STOP.SITEID=ROUTES.SITEID  LEFT JOIN UDCJZ ON UDCJZ.ASSETID=ROUTE_STOP.ASSETNUM  LEFT JOIN UDCJZ  UDCJZ2 ON UDCJZ2.TYPE=UDCJZ.TYPE AND UDCJZ2.ASSETID=UDCJZ.ASSETID WHERE ROUTES.ROUTE='"+route+"' AND ROUTES.ORGID='"+orgid+"' AND ROUTES.SITEID='"+siteid+"' AND UDCJZ.ASSETID in(SELECT ASSETNUM FROM ASSET WHERE USESTATUS='Running' AND orgid='"+orgid+"' AND siteid='"+siteid+"') GROUP BY UDCJZ.TYPE,UDCJZ2.UDZXZGH)";
                    udzxzSet.setWhere(udzxzSqlStr);
                    udzxzSet.reset();
                    if(null!=udzxzSet && !udzxzSet.isEmpty()){
                        for(int j=0;j<udzxzSet.count();j++){
                            udzxzMbo=udzxzSet.getMbo(j);
                            String type=udzxzMbo.getString("TYPE");
                            String udzxzgh=udzxzMbo.getString("UDZXZGH");
                            //在此处需要新增各执行组的点检任务
                            //查询当前执行组有代办的点检项
                            String pmdjqsql="PERGROUP='"+type+"' AND SPOTRUNID in(SELECT ROUTE_STOPID FROM ROUTE_STOP WHERE ROUTE='"+route+"' AND ORGID='"+orgid+"' AND SITEID='"+siteid+"') AND (NEXTEXDATE BETWEEN TO_TIMESTAMP('"+djjnsjStr+"', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('"+djbjsjStr+"', 'YYYY-MM-DD HH24:MI:SS') ) AND ASSETNUM in(SELECT ASSETNUM FROM ASSET WHERE USESTATUS='Running' AND orgid='"+orgid+"' AND siteid='"+siteid+"' AND ASSETNUM IN(SELECT ASSETID FROM UDCJZ WHERE UDZXZGH='"+udzxzgh+"' AND TYPE='"+type+"')) ";
                            pmlineRwqSet.setWhere(pmdjqsql);
                            pmlineRwqSet.reset();
                            if(null!=pmlineRwqSet && !pmlineRwqSet.isEmpty()){
                                sporturnMbo=spotrunSet.addAtEnd(2L);
                                sptrunSet=sporturnMbo.getMboSet("$SPOTRUN", "SPOTRUN",djrwbhrqStr);
                                int count=sptrunSet.count()+1;
                                String sKeynum = "EXE"+sfdj.format(curlocaldate)+"-"+de.format(count);
                                sporturnMbo.setValue("SPOTRUNNUM",sKeynum,11L);
                                sporturnMbo.setValue("DESCRIPTION", routeMbo.getString("DESCRIPTION")+"("+type+"-"+udzxzgh+") group's inspection and maintenance tasks",2L);//描述
                                sporturnMbo.setValue("POINTROUTE", routeMbo.getString("ROUTE"),2L);//点检路线
                                sporturnMbo.setValue("ORGID", orgid,2L);
                                sporturnMbo.setValue("SITEID", siteid,2L);
                                sporturnMbo.setValue("PERSONGROUP", udzxzgh,2L);
                                ryzSet=routeMbo.getMboSet("$PERSONGROUP", "PERSONGROUP", "PERSONGROUP='"+udzxzgh+"' AND ORGID='"+orgid+"' AND SITEID='"+siteid+"'");
                                if(null!=ryzSet && !ryzSet.isEmpty()){
                                    sporturnMbo.setValue("DEPTNUM", ryzSet.getMbo(0).getString("DEPTNUM"),2L);
                                }
                                sporturnMbo.setValue("ZXZTYPE", type,2L);
                                sporturnMbo.setValue("EQUPMNTDESC", "EDIT",2L);
                                sporturnMbo.setValue("LANGCODE", "EN",2L);
                                //添加语言表
                                l_spotrunSet=sporturnMbo.getMboSet("$L_SPOTRUN","L_SPOTRUN","1=2");
                                l_spotrunlineSet=routeMbo.getMboSet("$L_SPOTRUNLINES", "L_SPOTRUNLINES","1=2");
                                if(null!=l_spotrunSet){
                                    l_routesSet=sporturnMbo.getMboSet("$L_ROUTES","L_ROUTES","OWNERID="+routeMbo.getInt("ROUTESID")+" and LANGCODE='ZH'");
                                    if(null!=l_routesSet){
                                        l_routesMbo=l_routesSet.getMbo(0);
                                        l_spotrunMbo=l_spotrunSet.addAtEnd(2L);
                                        if(null!=l_routesMbo){
                                            l_spotrunMbo.setValue("OWNERID", sporturnMbo.getInt("SPOTRUNID"), 2L);
                                            l_spotrunMbo.setValue("LANGCODE", "ZH", 2L);
                                            l_spotrunMbo.setValue("DESCRIPTION", l_routesMbo.getString("DESCRIPTION")+"("+type+"-"+udzxzgh+")点检保养任务", 2L);
                                        }
                                    }
                                }
                                sporturnMbo.getThisMboSet().save();
                                sporturnLineSet=sporturnMbo.getMboSet("SPOTRUN_SPOTRUNLINES");//点检保养任务子表

                                //取每个执行组的人员组的路线中所需要点检的设备
                                String routestopSqlStr="ROUTE_STOPID in(SELECT ROUTE_STOP.ROUTE_STOPID FROM ROUTES LEFT JOIN ROUTE_STOP ON ROUTE_STOP.ROUTE=ROUTES.ROUTE  and ROUTE_STOP.ORGID=ROUTES.ORGID  and ROUTE_STOP.SITEID=ROUTES.SITEID LEFT JOIN UDCJZ ON UDCJZ.ASSETID=ROUTE_STOP.ASSETNUM LEFT JOIN UDCJZ UDCJZ2 ON UDCJZ2.TYPE=UDCJZ.TYPE AND UDCJZ2.ASSETID=UDCJZ.ASSETID  WHERE ROUTES.ROUTE='"+route+"' AND UDCJZ.TYPE='"+type+"' AND UDCJZ.UDZXZGH='"+udzxzgh+"' AND ROUTES.ORGID='"+orgid+"' AND ROUTES.SITEID='"+siteid+"' AND ROUTE_STOP.ASSETNUM in(SELECT ASSETNUM FROM ASSET WHERE USESTATUS='Running'))";
                                routeStopZxzSet.setWhere(routestopSqlStr);
                                routeStopZxzSet.reset();
                                routeStopZxzSet.setOrderBy("STOPSEQUENCE");
                                if(null!=routeStopZxzSet && !routeStopZxzSet.isEmpty()){
                                    for(int k=0;k<routeStopZxzSet.count();k++){
                                        routeStopMbo=routeStopZxzSet.getMbo(k);
                                        String assetnum=routeStopMbo.getString("ASSETNUM");
                                        int routeStopid=routeStopMbo.getInt("ROUTE_STOPID");
                                        int stopsequence=routeStopMbo.getInt("STOPSEQUENCE");

                                        //取每个设备所需的点检项的频率  / 取当前路线中当前设备所需的点检项目
                                        String pmgplSql="ASSETNUM in(SELECT ASSETNUM FROM ASSET WHERE USESTATUS='Running' AND ASSETNUM='"+assetnum+"')  AND SPOTRUNID="+routeStopid+"  AND PERGROUP='"+type+"'";
                                        pmplSet.setWhere(pmgplSql);
                                        pmplSet.reset();
                                        pmplSet.setOrderBy("NUM");
                                        if(null!=pmplSet && !pmplSet.isEmpty()){
                                            for(int l=0;l<pmplSet.count();l++){
                                                pmplMbo=pmplSet.getMbo(l);
                                                //系统执行时间开始加上频率算出截至的时间，取这个范围的点检项
                                                String frequnit=pmplMbo.getString("FREQUNIT");//频率单位
                                                int frequency=pmplMbo.getInt("FREQUENCY");//频率
                                                Date nextdate=pmplMbo.getDate("NEXTEXDATE");
                                                String nextdateStr=sf.format(nextdate);
                                                Date selendtime=calculateNext(frequnit,curZsdate, frequency);//计算出查询截至时间
                                                String selendtimeStr=sf.format(selendtime);
                                                int pmstadardlinesid=pmplMbo.getInt("PMSTDARDLINESID");
                                                int parentid=pmplMbo.getInt("PARENTID");
                                                String pmdqplsql="";
                                                //判断是否满足当前生成任务的时间范围条件
                                                if("HOUR".equalsIgnoreCase(frequnit)){
                                                    pmdqplsql=" PMSTDARDLINESID="+pmstadardlinesid+" AND (NEXTEXDATE BETWEEN TO_TIMESTAMP('"+curdateStr+"', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('"+selendtimeStr+"', 'YYYY-MM-DD HH24:MI:SS') )";
                                                }else{
                                                    pmdqplsql=" PMSTDARDLINESID="+pmstadardlinesid+" AND (NEXTEXDATE BETWEEN TO_TIMESTAMP('"+djjnsjStr+"', 'YYYY-MM-DD HH24:MI:SS') AND TO_TIMESTAMP('"+djbjsjStr+"', 'YYYY-MM-DD HH24:MI:SS') )";
                                                }

                                                //取当前频率单位下的频率的应该执行的点检项目
                                                pmdqplSet=routeMbo.getMboSet("$PMSTDARDLINES2", "PMSTDARDLINES",pmdqplsql);
                                                pmdqplSet.setOrderBy("NUM");
                                                if(null!=pmdqplSet && !pmdqplSet.isEmpty()){
                                                    //新增当前点检任务的明细行 注意按检修路线的顺序和点检标准的顺序
                                                    splineMbo=sporturnLineSet.addAtEnd(2L);
                                                    //ORGID=:ORGID and SITEID =:SITEID and PARENTID =:SPOTRUNID
                                                    splineMbo.setValue("ORGID", orgid,2L);
                                                    splineMbo.setValue("SITEID", siteid,2L);
                                                    splineMbo.setValue("SPOTRUNNUM", sporturnMbo.getString("SPOTRUNNUM"),2L);
                                                    splineMbo.setValue("PARENTID", sporturnMbo.getInt("SPOTRUNID"),2L);

                                                    splineMbo.setValue("PMPOINTNUM", pmplMbo.getString("PMPOINTNUM"),2L);//点检保养标准编号
                                                    splineMbo.setValue("PROJECTNUM", pmplMbo.getInt("NUM")+"",2L);//点检保养标准明细行序号

                                                    splineMbo.setValue("NUM", pmplMbo.getInt("NUM"),2L);//序号(点检项排序作用)
                                                    splineMbo.setValue("STOPSEQUENCE", stopsequence,2L);//序号(设备排序作用)
                                                    splineMbo.setValue("DESCRIPTION", pmplMbo.getString("DESCRIPTION"),2L);//作业任务
                                                    splineMbo.setValue("POSITION", pmplMbo.getString("POSITION"),2L);//部位
                                                    splineMbo.setValue("POINTDATUM", pmplMbo.getString("POINTDATUM"),2L);//判定基准
                                                    splineMbo.setValue("WORKTYPE", pmplMbo.getString("WORKTYPE"),2L);//管理性质
                                                    splineMbo.setValue("UNSUAL", pmplMbo.getString("UNSUAL"),2L);//异常处置
                                                    splineMbo.setValue("STATUS", pmplMbo.getString("STATUS"),2L);//实施状态
                                                    splineMbo.setValue("FREQUENCY", frequency,2L);//频率
                                                    splineMbo.setValue("FREQUNIT", frequnit,2L);//频率单位
                                                    splineMbo.setValue("POINTMETHOD", pmplMbo.getString("POINTMETHOD"),2L);//点检方法
                                                    splineMbo.setValue("SDYRZY", pmplMbo.getString("PERGROUP"),2L);//执行组

                                                    splineMbo.setValue("FWAY", pmplMbo.getString("FWAY"),2L);//点检方式
                                                    splineMbo.setValue("UPPERACTION", pmplMbo.getInt("UPPERACTION"),2L);
                                                    splineMbo.setValue("LOWERACTION", pmplMbo.getInt("LOWERACTION"),2L);

                                                    splineMbo.setValue("ASSETNUM", assetnum,2L);//资产
                                                    MboRemote assetMbo=routeMbo.getMboSet("$ASSET", "ASSET", "ASSETNUM='"+assetnum+"'").getMbo(0);
                                                    splineMbo.setValue("LOCATION", assetMbo.getString("LOCATION"),2L);//位置
                                                    splineMbo.setValue("LANGCODE", "EN",2L);

                                                    //添加明细行语言表
                                                    if(null!=l_spotrunlineSet){
                                                        l_pmstdardlineSet=routeMbo.getMboSet("$L_PMSTDARDLINES", "L_PMSTDARDLINES", "OWNERID="+parentid+" and LANGCODE='ZH'");
                                                        if(null!=l_pmstdardlineSet){
                                                            l_pmstdarlineMbo=l_pmstdardlineSet.getMbo(0);
                                                            if(null!=l_pmstdarlineMbo){
                                                                l_spotrunlineMbo=l_spotrunlineSet.addAtEnd(2L);
                                                                l_spotrunlineMbo.setValue("OWNERID", splineMbo.getInt("SPOTRUNLINESID"), 2L);
                                                                l_spotrunlineMbo.setValue("LANGCODE", "ZH", 2L);
                                                                l_spotrunlineMbo.setValue("DESCRIPTION", l_pmstdarlineMbo.getString("DESCRIPTION"), 2L);
                                                                l_spotrunlineMbo.setValue("POSITION", l_pmstdarlineMbo.getString("POSITION"), 2L);
                                                                l_spotrunlineMbo.setValue("POINTMETHOD", l_pmstdarlineMbo.getString("POINTMETHOD"), 2L);
                                                                l_spotrunlineMbo.setValue("UNSUAL", l_pmstdarlineMbo.getString("UNSUAL"), 2L);
                                                                l_spotrunlineMbo.setValue("POINTDATUM", l_pmstdarlineMbo.getString("POINTDATUM"), 2L);
                                                                l_spotrunlineMbo.getThisMboSet().save();
                                                                l_spotrunlineMbo.getThisMboSet().close();
                                                            }
                                                        }
                                                    }

                                                    //反填点检标准明细行的上次完成时间
                                                    pmplMbo.setValue("LASTCOMPDATE",curdate,2L);
                                                    pmplMbo.setValue("ISSCRW",true,2L);
                                                    splineMbo.getThisMboSet().save();
                                                    pmplMbo.getThisMboSet().save();

                                                }

                                            }
                                        }
                                    }

                                }
                            }

                        }
                    }

                }
                System.out.println("--GF02任务生成完成！");
                //更新下次执行时间
                //所有路线匹配完点检标准后更新点检标准中的下次执行日期
                MboSetRemote djbzZxhUpdateSet = MXServer.getMXServer().getMboSet("PMSTDARDLINES",MXServer.getMXServer().getSystemUserInfo());
                djbzZxhUpdateSet.setWhere("SPOTRUNID IN(SELECT ROUTE_STOPID FROM ROUTE_STOP WHERE ORGID='HHMC' and SITEID='GF02') AND ISSCRW=1");
                djbzZxhUpdateSet.reset();
                if(null!=djbzZxhUpdateSet){
                    for(int update=0;update<djbzZxhUpdateSet.count();update++){
                        MboRemote djbzZxhMbo=djbzZxhUpdateSet.getMbo(update);
                        int frequency2 = djbzZxhMbo.getInt("FREQUENCY");//频率
                        String frequnit2 = djbzZxhMbo.getString("FREQUNIT");//频率单位
                        Date lascomDate2 = djbzZxhMbo.getDate("LASTCOMPDATE");//上次完成日期
                        Date updateNextTime=calculateNext(frequnit2,lascomDate2,frequency2);
                        djbzZxhMbo.setValue("NEXTEXDATE", updateNextTime,2L);
                        djbzZxhMbo.setValue("ISSCRW", false,2L);
                    }
                    djbzZxhUpdateSet.save();
                    djbzZxhUpdateSet.close();
                }

                //更新没有执行任务的点检项的下次执行时间
                MboSetRemote pmlineRwqSet2= MXServer.getMXServer().getMboSet("PMSTDARDLINES",MXServer.getMXServer().getSystemUserInfo());;
                pmlineRwqSet2.setWhere("SPOTRUNID IN(SELECT ROUTE_STOPID FROM ROUTE_STOP WHERE ORGID='HHMC' and SITEID='GF02') AND ISSCRW=0 AND TRUNC(NEXTEXDATE) = TRUNC(SYSDATE) ");
                pmlineRwqSet2.reset();
                if(null!=pmlineRwqSet2){
                    MboRemote djbzZxhMbo2=null;
                    for(int update2=0;update2<pmlineRwqSet2.count();update2++){
                        djbzZxhMbo2=pmlineRwqSet2.getMbo(update2);
                        int frequency3 = djbzZxhMbo2.getInt("FREQUENCY");//频率
                        String frequnit3 = djbzZxhMbo2.getString("FREQUNIT");//频率单位
                        Date lascomDate3 = curdate;//系统当前时间
                        Date updateNextTime2=calculateNext(frequnit3,lascomDate3,frequency3);
                        djbzZxhMbo2.setValue("NEXTEXDATE", updateNextTime2,2L);
                        djbzZxhMbo2.setValue("ISSCRW", false,2L);
                    }
                    pmlineRwqSet2.save();
                    pmlineRwqSet2.close();
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
            e.getCause();
            e.getMessage();
        }finally {
            System.gc();
            System.out.println("--GF02点检任务已执行");
        }
    }

    /**
     * 根据频率单位、频率计算出下一次的时间
     * @param frequnit
     * @param firsDate
     * @param frequency
     * @return
     * @throws Exception
     */
    public Date calculateNext(String frequnit,Date firsDate,int frequency) throws Exception {
        Date commitTime=null;
        if ("DAY".equalsIgnoreCase(frequnit)) {//日
            commitTime = ChangeTimeUtils.changeDay(firsDate, frequency);
        }
        if ("HOUR".equalsIgnoreCase(frequnit)) {//小时
            commitTime = ChangeTimeUtils.changeHour(firsDate, frequency);
        }
        if ("MONTH".equalsIgnoreCase(frequnit)) {//月
            commitTime = ChangeTimeUtils.changeMonth(firsDate, frequency);
            SimpleDateFormat sf9=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        }
        if ("QUARTER".equalsIgnoreCase(frequnit)) {//季度
            commitTime = ChangeTimeUtils.changeQuarter(firsDate, frequency);
        }
        if ("WEEK".equalsIgnoreCase(frequnit)) {//周
            commitTime = ChangeTimeUtils.changeWeek(firsDate, frequency);
        }
        if ("YEAR".equalsIgnoreCase(frequnit)) {//年
            commitTime = ChangeTimeUtils.changeYear(firsDate, frequency);
        }
        return commitTime;
    }



    /**
     * 获取下次执行时间
     * @param frequnit
     * @param lascomDate
     * @param firsDate
     * @param frequency
     * @return
     * @throws Exception
     */
    public Date nextComDate(String frequnit,Date lascomDate,Date firsDate,int frequency) throws Exception {
        Date commitTime=null;
        if ("DAY".equalsIgnoreCase(frequnit)) {//日
            if (null == lascomDate) {
                commitTime = ChangeTimeUtils.changeDay(firsDate, frequency);
            } else {
                commitTime = ChangeTimeUtils.changeDay(new Date(), frequency);
            }
        }
        if ("HOUR".equalsIgnoreCase(frequnit)) {//小时
            if (null == lascomDate) {
                commitTime = ChangeTimeUtils.changeHour(firsDate, frequency);
            } else {
                commitTime = ChangeTimeUtils.changeHour(new Date(), frequency);
            }
        }
        if ("MONTH".equalsIgnoreCase(frequnit)) {//月
            if (null == lascomDate) {
                commitTime = ChangeTimeUtils.changeMonth(firsDate, frequency);
            } else {
                commitTime = ChangeTimeUtils.changeMonth(new Date(), frequency);
            }
        }
        if ("QUARTER".equalsIgnoreCase(frequnit)) {//季度
            if (null == lascomDate) {
                commitTime = ChangeTimeUtils.changeQuarter(firsDate, frequency);
            } else {
                commitTime = ChangeTimeUtils.changeQuarter(new Date(), frequency);
            }
        }
        if ("WEEK".equalsIgnoreCase(frequnit)) {//周
            if (null == lascomDate) {
                commitTime = ChangeTimeUtils.changeWeek(firsDate, frequency);
            } else {
                commitTime = ChangeTimeUtils.changeWeek(new Date(), frequency);
            }
        }
        if ("YEAR".equalsIgnoreCase(frequnit)) {//年
            if (null == lascomDate) {
                commitTime = ChangeTimeUtils.changeYear(firsDate, frequency);
            } else {
                commitTime = ChangeTimeUtils.changeYear(new Date(), frequency);
            }
        }
        return commitTime;
    }
}
