package com.app.hxqh.udjobstand;

import com.app.crontask.ChangeTimeUtils;
import psdi.mbo.Mbo;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSet;
import psdi.mbo.MboSetRemote;
import psdi.util.MXException;

import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.Date;

/**
 * 资产预防性维护计划 Mbo
 */
public class UdJobPlanMbo extends Mbo implements MboRemote {

    public UdJobPlanMbo(MboSet ms) throws MXException, RemoteException {
        super(ms);
    }

    @Override
    public void save() throws MXException, RemoteException {
        super.save();
        String app = getThisMboSet().getApp();
        //资产预防性维护计划
        if("udjobplan".equalsIgnoreCase(app)){
            try {
                MboSetRemote udjobstandSet= getMboSet("UDJOBSTAND");
                if(null!=udjobstandSet && !udjobstandSet.isEmpty()){
                    MboRemote udjobstandSetMbo=udjobstandSet.getMbo(0);
                    setValue("CFTYPE", udjobstandSetMbo.getString("CFTYPE"),11L);//触发类型
                    setValue("JLPL", udjobstandSetMbo.getInt("FREQUENCY"),11L);//计量频率
                    setValue("JLPLDW", udjobstandSetMbo.getString("FREQUNIT"),11L);//计量频率单位
                    setValue("RQPL", udjobstandSetMbo.getInt("TIMEFRECY"),11L);//时间频率
                    setValue("RQPLDW", udjobstandSetMbo.getString("TIMEFRECYUNIT"),11L);//时间频率单位
                }

                boolean enable=getBoolean("ENABLE");
                if(enable){
                    String cftype=getString("CFTYPE");
                    //计量类型 || 时间&计量类型
                    if("metering".equalsIgnoreCase(cftype) || "TimeMetering".equalsIgnoreCase(cftype)){
                        setValue("XCZXJL", (getDouble("SCZXJL")+getDouble("JLPL")), 2L);//下次执行
                    }
                    //时间 || 时间&计量类型
                    if("time".equalsIgnoreCase(cftype) || "TimeMetering".equalsIgnoreCase(cftype)){
                        int frequency2=getInt("RQPL");//频率
                        String frequnit2=getString("RQPLDW");//频率单位
                        Date firsDate=getDate("ENABLEDATE");//第一个开始日期
                        Date lascomDate=getDate("SCZXDATE");//上次完成时间
                        Date commitTime = nextComDate( frequnit2, lascomDate, firsDate, frequency2);
                        setValue("XCZXRQ", commitTime,2L);//下次执行
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

        }

    }

    @Override
    public MboRemote duplicate() throws MXException, RemoteException {
        return super.duplicate();
    }

    @Override
    public void add() throws MXException, RemoteException {
        super.add();
        Calendar cd = Calendar.getInstance();
        cd.setTime(new Date());
        cd.add(Calendar.DATE, 1);//增加一天
        setValue("ENABLEDATE",  cd.getTime(), 2L);
    }


    @Override
    public void init() throws MXException {
        super.init();
        try {
            String app = getThisMboSet().getApp();
            String enable=getString("ENABLE");
            String[] mainFields = new String[] {"UDJOBSTANDNUM","ASSETNUM","ENABLEDATE"};
            if("Y".equalsIgnoreCase(enable)){
                setFieldFlag(mainFields, 7L, true);
            }else{
                setFieldFlag(mainFields, 7L, false);
            }
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取下次执行时间
     * @param frequnit
     * @param lascomDate
     * @param firsDate
     * @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;
    }
}
