package com.app.hxqh.udmeter;

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.text.SimpleDateFormat;
import java.util.Date;

/**
 * 计量管理-Mbo
 */
public class UdMeterHisMbo extends Mbo implements MboRemote {

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

    @Override
    public void init() throws MXException {
        super.init();
        try {
            SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd");
            String[] mainFields = new String[] {"METERNAME1","METERDS1","T1TOTAL"};
            if(!isNew()){
                setFieldFlag(mainFields, 7L, true);
                setFlag(7L, true);
            }else{
                setFieldFlag(mainFields, 7L, false);
            }


        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void save() throws MXException, RemoteException {
        super.save();
        System.out.println("--------------------ji liang guan li");
        MboRemote parentMbo=getOwner();
        String app = null;
        //----移动端parentMbo=null，需要重新设置--start------------------------------------------
        if(parentMbo==null){
            MboSetRemote UDMETERSet = MXServer.getMXServer().getMboSet("UDMETER", MXServer.getMXServer().getSystemUserInfo());
            UDMETERSet.setWhere(" UDMETERNUM='"+getString("UDMETERNUM")+"'");
            UDMETERSet.reset();
            parentMbo = UDMETERSet.getMbo(0);
        }else{
            app = parentMbo.getThisMboSet().getApp();
        }
        //----移动端parentMbo=null，需要重新设置--end------------------------------------------
        if(parentMbo!=null){
            String UDMETERNUM =  parentMbo.getString("UDMETERNUM");//父表单号
            String ASSETNUM =  parentMbo.getString("ASSETNUM");//父表单号
            String MEASUREUNITID =  parentMbo.getString("MEASUREUNITID");//计量单位/类型

            //资产台账下的预防性维护表
//            MboSetRemote UDJOBPLANSet = MXServer.getMXServer().getMboSet("UDJOBPLAN", MXServer.getMXServer().getSystemUserInfo());
//            UDJOBPLANSet.setWhere(" ASSETNUM='"+ASSETNUM+"' and JLPLDW='"+MEASUREUNITID+"'");
//            UDJOBPLANSet.reset();
            MboSetRemote UDJOBPLANSet = parentMbo.getMboSet("$UDJOBPLAN","UDJOBPLAN"," ASSETNUM='"+ASSETNUM+"' and JLPLDW='"+MEASUREUNITID+"'");
            if(isModified("METERDS1")){
                //计量记录的读数变化
                Double METERDS1 = getDouble("METERDS1"); //T1读数
                MboSetRemote METERNAME2Set = MXServer.getMXServer().getMboSet("UDMETERHIS", MXServer.getMXServer().getSystemUserInfo());
                METERNAME2Set.setWhere(" UDMETERNUM='"+UDMETERNUM+"' and HSTYPE='HX'");
                METERNAME2Set.setOrderBy(" GXDATE2 desc");
                METERNAME2Set.reset();
                double METERDS22 = 0;
                double T2TOTAL = 0;
                if(METERNAME2Set!=null && !METERNAME2Set.isEmpty()){
                    MboRemote meter2 = METERNAME2Set.getMbo(0);
                    METERDS22 = meter2.getDouble("METERDS22");//新表读数
                    T2TOTAL = meter2.getDouble("T2TOTAL");//当前表读数
                }
                double T1TOTAL = METERDS1 - METERDS22 + T2TOTAL;
                setValue("T1TOTAL",T1TOTAL);
                parentMbo.setValue("TOTALDS",T1TOTAL);
                //app端需要判断，pc端不走这个判断
                if(app==null || "".equals(app)){
                    parentMbo.getThisMboSet().save();//
                }
                //资产台账-预防性维护-计量数据动态更新
                if(UDJOBPLANSet!=null && !UDJOBPLANSet.isEmpty()){
                    System.out.println("udjobplan tiao shu="+UDJOBPLANSet.count());
                    System.out.println("--UDJOBPLANSet--"+UDJOBPLANSet);
                   for(int i=0;i<UDJOBPLANSet.count();i++){
                       MboRemote udjobplanMbo = UDJOBPLANSet.getMbo(i);
                       System.out.println("--UDJOBPLANSet-i-"+UDJOBPLANSet);
                       if(udjobplanMbo!=null){
                           udjobplanMbo.setValue("SCZXJL",T1TOTAL,2L);
//                           UDJOBPLANSet.save(11L);
                       }
                   }
                }
            }

            if(isModified("METERDS22") || isModified("METERDS2")){
                //换表记录的读数变化
                //先判断时间，哪个是最新时间
                Double METERDS2 = getDouble("METERDS2"); //T2读数
                double T2TOTAL = 0;
                Date GXDATE1 = null;
                Date GXDATE2 = null;
                MboSetRemote GXDATE1Set = MXServer.getMXServer().getMboSet("UDMETERHIS", MXServer.getMXServer().getSystemUserInfo());
                GXDATE1Set.setWhere(" UDMETERNUM='"+UDMETERNUM+"' and HSTYPE='UP'");
                GXDATE1Set.setOrderBy(" GXDATE1 desc");
                GXDATE1Set.reset();
                if(GXDATE1Set!=null && !GXDATE1Set.isEmpty()){
                    MboRemote mbo = GXDATE1Set.getMbo(0);
                    GXDATE1 = mbo.getDate("GXDATE1");
                }
                MboSetRemote GXDATE2Set = MXServer.getMXServer().getMboSet("UDMETERHIS", MXServer.getMXServer().getSystemUserInfo());
                GXDATE2Set.setWhere(" UDMETERNUM='"+UDMETERNUM+"' and HSTYPE='HX'");
                GXDATE2Set.setOrderBy(" GXDATE2 desc");
                GXDATE2Set.reset();
                if(GXDATE2Set!=null && !GXDATE2Set.isEmpty()){
                    MboRemote mbo = GXDATE2Set.getMbo(0);
                    GXDATE2 = mbo.getDate("GXDATE2");
                }
                if(GXDATE2==null){
                    double METERDS1 = 0;
                    double T1TOTAL = 0;
                    if(GXDATE1Set!=null && !GXDATE1Set.isEmpty()){
                        MboRemote meter1 = GXDATE1Set.getMbo(0);
                        METERDS1 = meter1.getDouble("METERDS1");//旧表读数
                        T1TOTAL = meter1.getDouble("T1TOTAL");//当前表读数
                    }
                    T2TOTAL = METERDS2 - METERDS1 + T1TOTAL;
                }else if(GXDATE1!=null && GXDATE2!=null){
                    if(GXDATE1.after(GXDATE2)){
                        //GXDATE1 时间最新
                        double METERDS1 = 0;
                        double T1TOTAL = 0;
                        if(GXDATE1Set!=null && !GXDATE1Set.isEmpty()){
                            MboRemote meter1 = GXDATE1Set.getMbo(0);
                            METERDS1 = meter1.getDouble("METERDS1");//旧表读数
                            T1TOTAL = meter1.getDouble("T1TOTAL");//当前表读数
                        }
                        T2TOTAL = METERDS2 - METERDS1 + T1TOTAL;
                    }else {
                        //GXDATE2 时间最新
                        double METERDS22 = 0;
                        double T2TOTAL1 = 0;
                        if(GXDATE2Set!=null && !GXDATE2Set.isEmpty()){
                            MboRemote meter2 = GXDATE2Set.getMbo(0);
                            METERDS22 = meter2.getDouble("METERDS22");//新表读数
                            T2TOTAL1 = meter2.getDouble("T2TOTAL");//当前表读数
                        }
                        T2TOTAL = METERDS2 - METERDS22 + T2TOTAL1;
                    }
                }
                setValue("T2TOTAL",T2TOTAL);
                parentMbo.setValue("TOTALDS",T2TOTAL);
                parentMbo.setValue("OLDTOTALDS",T2TOTAL);
                //app端需要判断，pc端不走这个判断
                if(app==null || "".equals(app)){
                    parentMbo.getThisMboSet().save();//
                }
                //资产台账-预防性维护-计量数据动态更新
                if(UDJOBPLANSet!=null && !UDJOBPLANSet.isEmpty()){
                    for(int i=0;i<UDJOBPLANSet.count();i++){
                        MboRemote udjobplanMbo = UDJOBPLANSet.getMbo(i);
                        if(udjobplanMbo!=null){
                            udjobplanMbo.setValue("SCZXJL",T2TOTAL,2L);
//                        UDJOBPLANSet.save();
                        }
                    }
                }
            }
        }

    }

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

}
