package com.app.crontask;


import org.python.modules._hashlib;
import psdi.app.iface.mdm.Mdm2EamHandler;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.server.SimpleCronTask;

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

/**
 * liuxq
 *  计量表定时生成计量表校验单
 * 定时任务
 */
public class UdMeterCronTask extends SimpleCronTask {

    @Override
    public void cronAction() {
        try {
            System.out.println("-------udmeter-start---------");
            //查询资产表中-资产
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String currentDateStr = sdf.format(new Date());
            Date currentDate = sdf.parse(currentDateStr);
            MboSetRemote assetSet = MXServer.getMXServer().getMboSet("ASSET",MXServer.getMXServer().getSystemUserInfo());//资产台账
            assetSet.setWhere("ATYPE='4' and USESTATUS='Running' and NEXTEXDATE=TO_DATE('"+currentDateStr+"','yyyy-MM-dd')");//资产类型是：4 代表计量表 ； 运行状态：Running运行
            assetSet.reset();
            if(assetSet!=null && !assetSet.isEmpty()){
                //生成主表数据
                MboSetRemote UDMETERJYSet = MXServer.getMXServer().getMboSet("UDMETERJY",MXServer.getMXServer().getSystemUserInfo());//计量表校验主表
                MboRemote UDMETERJYMbo = UDMETERJYSet.add();
                Integer UDMETERJYID = UDMETERJYMbo.getInt("UDMETERJYID");
                String UDMETERJYIDStr = String.valueOf(UDMETERJYID);
                UDMETERJYMbo.setValue("STATUS","EDIT",11L);//状态
                UDMETERJYMbo.setValue("DESCRIPTION","计量表校验送检",11L);//描述
                UDMETERJYMbo.setValue("SJDATE",currentDate,11L);//送检日期
                UDMETERJYMbo.setValue("UDMETERJYNUM",UDMETERJYIDStr,11L);//编号
                UDMETERJYMbo.getThisMboSet().save();
                for(int i=0;i<assetSet.getSize();i++){
                    MboSetRemote UDMETERJYLINESet = MXServer.getMXServer().getMboSet("UDMETERJYLINE",MXServer.getMXServer().getSystemUserInfo());//计量表校验子表
                    MboRemote assetMbo = assetSet.getMbo(i);
                    String ASSETNUM = assetMbo.getString("ASSETNUM");//资产编号
                    //生成子表数据
                    MboRemote UDMETERJYLINEMbo = UDMETERJYLINESet.add();
                    UDMETERJYLINEMbo.setValue("METERNAME",ASSETNUM,11L);
                    UDMETERJYLINEMbo.setValue("UDMETERJYID",UDMETERJYID,11L);
                    UDMETERJYLINEMbo.getThisMboSet().save();
                    //更新asset表的上次执行时间和下次执行时间
                    Integer FREQUENCY = assetMbo.getInt("FREQUENCY");//频率
                    String FREQUNIT = assetMbo.getString("FREQUNIT");//频率单位
                    if(currentDate!=null && !"".equals(currentDate) && FREQUENCY!=null && !"".equals(FREQUENCY) && FREQUNIT!=null && !"".equals(FREQUNIT)){
                        try {
                            Date nextDate = nextComDate(FREQUNIT,null,currentDate,FREQUENCY);
                            assetMbo.setValue("LASTCOMPDATE",currentDate,11L);//上次执行日期
                            assetMbo.setValue("NEXTEXDATE",nextDate,11L);//下次执行日期
                            assetMbo.getThisMboSet().save();
                        } catch (Exception e) {
                            throw new RuntimeException(e);
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            e.getCause();
            e.getMessage();
        }
    }

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

}
