package com.app.hxqh.udjobstand;

import org.apache.commons.io.filefilter.FalseFileFilter;
import psdi.mbo.Mbo;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSet;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.util.MXException;

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

/**
 * 作业标准 Mbo
 * edit 2023-06-19
 */
public class UdJobStandMbo extends Mbo implements MboRemote {

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

    @Override
    public void save() throws MXException, RemoteException {
        super.save();
        /** 20240530根据用户卢占占要求，取消作业标准自动发布到资产台账上，修改预防性维护计划，由用户手动创建，主要用于用户维护不同的启用时间
        String app = getThisMboSet().getApp();
        //作业标准
        if("UDJOBSTAND".equalsIgnoreCase(app)){
            String status=getString("STATUS");
            String templateid=getString("TEMPLATEID");
            if("ACTIVE".equalsIgnoreCase(status)){
                MboSetRemote udjobplan = MXServer.getMXServer().getMboSet("UDJOBPLAN", MXServer.getMXServer().getSystemUserInfo());
                if(null!=udjobplan){
                    MboSetRemote assetSet=getMboSet("$ASSET", "ASSET","TEMPLATEID='"+templateid+"'");
                    MboRemote joblaMbo=null;
                    String cftype=getString("CFTYPE");
                    for(int j=0;j<assetSet.count();j++){
                        udjobplan.setWhere("UDJOBSTANDID="+getInt("UDJOBSTANDID")+" and ASSETNUM='"+assetSet.getMbo(j).getString("ASSETNUM")+"' ");
                        udjobplan.reset();
                        if(udjobplan==null || udjobplan.isEmpty()){
                            joblaMbo=udjobplan.add();
                        }else{
                            joblaMbo=udjobplan.getMbo(0);
                        }
                        joblaMbo.setValue("ASSETNUM", assetSet.getMbo(j).getString("ASSETNUM"), 2L);
                        joblaMbo.setValue("ENABLE", true, 2L);
                        Calendar cd = Calendar.getInstance();
                        cd.setTime(new Date());
                        cd.add(Calendar.DATE, 1);//增加一天
                        joblaMbo.setValue("ENABLEDATE",  cd.getTime(), 2L);

                        joblaMbo.setValue("UDJOBSTANDID", getInt("UDJOBSTANDID"), 2L);
                        joblaMbo.setValue("RQPL", getInt("TIMEFRECY"), 2L);
                        joblaMbo.setValue("RQPLDW", getString("TIMEFRECYUNIT"), 2L);
                        joblaMbo.setValue("JLPL", getInt("FREQUENCY"), 2L);
                        joblaMbo.setValue("JLPLDW", getString("FREQUNIT"), 2L);
                        joblaMbo.setValue("CFTYPE", getString("CFTYPE"), 2L);
                        joblaMbo.setValue("ORGID", getString("ORGID"), 2L);
                        joblaMbo.setValue("SITEID", assetSet.getMbo(j).getString("SITEID"), 2L);
                        joblaMbo.setValue("TQD", 0, 2L);
                        //计量类型 || 时间&计量类型
                        if("metering".equalsIgnoreCase(cftype) || "TimeMetering".equalsIgnoreCase(cftype)){
                            joblaMbo.setValue("SCZXJL", (joblaMbo.getDouble("SCZXJL")+0), 2L);//上次执行计量
                            joblaMbo.setValue("XCZXJL", (joblaMbo.getDouble("SCZXJL")+joblaMbo.getDouble("JLPL")), 2L);//下次执行
                        }
                        //时间 || 时间&计量类型
                        if("time".equalsIgnoreCase(cftype) || "TimeMetering".equalsIgnoreCase(cftype)){
                            joblaMbo.setValue("XCZXRQ",  cd.getTime(), 2L);//下次执行
                        }
                        joblaMbo.getThisMboSet().save();
                    }
                }
            }else{
                MboSetRemote udjobplan = MXServer.getMXServer().getMboSet("UDJOBPLAN", MXServer.getMXServer().getSystemUserInfo());
                udjobplan.setWhere("UDJOBSTANDID="+getInt("UDJOBSTANDID")+" ");
                udjobplan.reset();
                if(null!=udjobplan && !udjobplan.isEmpty()){
                    for(int i=0;i<udjobplan.count();i++){
                        udjobplan.getMbo(i).setValue("ENABLE", false, 2L);
                        udjobplan.getMbo(i).setValueNull("ENABLEDATE", 2L);
                    }
                    udjobplan.save();
                }
            }
        }
         */
    }

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

    @Override
    public void add() throws MXException, RemoteException {
        super.add();
    }


    @Override
    public void init() throws MXException {
        super.init();
        try {
            String app = getThisMboSet().getApp();
            String status = getString("STATUS");
            if("UDJOBSTAND".equalsIgnoreCase(app)){ //作业标准
                String[] mainFields = new String[] {"DESCRIPTION","TEMPLATEID","FREQUENCY","FREQUNIT","TIMEFRECY","TIMEFRECYUNIT","CFTYPE"};
                if("INACTIVE".equalsIgnoreCase(status)){
                    setFieldFlag(mainFields, 7L, false);
                    getMboSet("UDJOBSTANDLINE").setFlag(7L, false);
                    getMboSet("UDJOBZIGF_ZXZ").setFlag(7L, false);
                    getMboSet("UDJOBZIGF_WL").setFlag(7L, false);
                    getMboSet("UDJOBZIGF_GJ").setFlag(7L, false);
                    getMboSet("UDJOBZIGF_FW").setFlag(7L, false);
                }
                if("ACTIVE".equalsIgnoreCase(status) ){
                    setFieldFlag(mainFields, 7L, true);
                    getMboSet("UDJOBSTANDLINE").setFlag(7L, true);
                    getMboSet("UDJOBZIGF_ZXZ").setFlag(7L, true);
                    getMboSet("UDJOBZIGF_WL").setFlag(7L, true);
                    getMboSet("UDJOBZIGF_GJ").setFlag(7L, true);
                    getMboSet("UDJOBZIGF_FW").setFlag(7L, true);
                }
            }
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}
