package com.app.hxqh.udaqdjlx;

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;

/**
 * 安全点检路线主表
 * edit 20240703
 */
public class UdAqdjlxMbo extends Mbo implements MboRemote {

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

    @Override
    public void add() throws MXException, RemoteException {
        super.add();
        setValue("UDAQDJLXNUM", getInt("UDAQDJLXID")+"",2L);
        setValue("STATUS", "EDIT",2L);
    }

    @Override
    public void init() throws MXException {
        super.init();
        try{
            String status = getString("STATUS");
            String[] mainFields = new String[] {"UDAQDJLXNUM","DESCRIPTION","PL","PLDW","REMARKS","ZXDATE"};
           if(!"EDIT".equalsIgnoreCase(status) && !isNew()){
                setFieldFlag(mainFields, 7L, true);
                getMboSet("UDAQDJLXLINE").setFlag(7L, true);
            }
            String pldw=getString("PLDW");
            if("WEEK".equalsIgnoreCase(pldw)){
                setFieldFlag("YJ", 128L, false);
                setValueNull("YJ", 2L);
                setFieldFlag("YJ", 7L, true);
                setFieldFlag("ZJ", 7L, false);
                setFieldFlag("ZJ", 128L, true);
            }else if("MONTH".equalsIgnoreCase(pldw)){
                setFieldFlag("ZJ", 128L, false);
                setValueNull("ZJ", 2L);
                setFieldFlag("ZJ", 7L, true);
                setFieldFlag("YJ", 7L, false);
                setFieldFlag("YJ", 128L, true);
            }else{
                setFieldFlag("YJ", 128L, false);
                setValueNull("YJ", 2L);
                setFieldFlag("YJ", 7L, true);
                setFieldFlag("ZJ", 128L, false);
                setValueNull("ZJ", 2L);
                setFieldFlag("ZJ", 7L, true);
            }
        }catch (Exception e){
            e.getCause();
            e.printStackTrace();
            e.getMessage();
        }
    }

    @Override
    public void save() throws MXException, RemoteException {
        super.save();
        if(isModified("STATUS") && "ACTIVE".equalsIgnoreCase(getString("STATUS"))){
            System.out.println("----开始执行更新至安全点检位置中的任务计划明细里----");
            int aqdjlxid=getInt("UDAQDJLXID");//安全点检路线主表id
            Date zxdate2=getDate("ZXDATE");//开始日期
            Date zxdate=null;//开始日期
            String pldw=getString("PLDW");//频率
            String orgid=getString("ORGID");
            String siteid=getString("SITEID");
            //点检开始时间配置表
            MboSetRemote djkssjwhSet=getMboSet("$UDDJKSSJWH", "UDDJKSSJWH","ORGID='"+orgid+"' AND SITEID='"+siteid+"'");
            if(null!=djkssjwhSet && !djkssjwhSet.isEmpty()){
                MboRemote djkssjMbo=djkssjwhSet.getMbo(0);
                Date serverstart=djkssjMbo.getDate("SERVERSTART");//对应北京时间
                int hours = serverstart.getHours();
                int minutes = serverstart.getMinutes();
                int seconds = serverstart.getSeconds();
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(zxdate2);
                calendar.set(Calendar.HOUR_OF_DAY, hours);
                calendar.set(Calendar.MINUTE, minutes);
                calendar.set(Calendar.SECOND, seconds);
                zxdate=calendar.getTime();
            }else{
                zxdate=zxdate2;//开始日期
            }

            MboSetRemote djwzmxSet=getMboSet("UDAQDJLXLINE");//点检位置明细子表
            if(null!=djwzmxSet && !djwzmxSet.isEmpty()){
                MboSetRemote udaqdjwzrwjhSet = MXServer.getMXServer().getMboSet("UDAQDJWZRWJH",MXServer.getMXServer().getSystemUserInfo());//安全点检位置-安全点检任务计划子表
                MboSetRemote udsaistandlineSet = MXServer.getMXServer().getMboSet("UDSAISTANDLINE",MXServer.getMXServer().getSystemUserInfo());//安全点检标准明细表
                for(int i=0;i<djwzmxSet.count();i++){
                    MboRemote djwzmxMbo=djwzmxSet.getMbo(i);
                    String location=djwzmxMbo.getString("LOCATION");
                    int adqjlxmxid=djwzmxMbo.getInt("UDAQDJLXLINEID");

                    //安全点检位置Set
                    MboSetRemote aqdjwzSet=getMboSet("$UDAQDJWZ","UDAQDJWZ","LOCATION='"+location+"' and ORGID='"+orgid+"' and SITEID='"+siteid+"'");
                    if(null!=aqdjwzSet && !aqdjwzSet.isEmpty()){
                        for(int j=0;j<aqdjwzSet.count();j++){
                            MboRemote aqdjwzMbo=aqdjwzSet.getMbo(j);
                            int aqdjwzzbid=aqdjwzMbo.getInt("UDAQDJWZID");//安全点检位置主表id

                            String sql="PARENTID in(SELECT UDSAISTANDID FROM UDSAISTAND WHERE UDSAISTANDNUM IN(SELECT UDSAISTANDNUM FROM UDAQDJWZDJBZ WHERE PARENTID in("+aqdjwzzbid+")) ) AND ORGID='"+orgid+"' AND PLDW='"+pldw+"'";
                            udsaistandlineSet.setWhere(sql);
                            udsaistandlineSet.reset();
                            if(null!=udsaistandlineSet && !udsaistandlineSet.isEmpty()){
                                for(int k=0;k<udsaistandlineSet.count();k++){
                                    MboRemote aqdjbzmxMbo=udsaistandlineSet.getMbo(k);//安全点检标准明细行mbo

                                    //安全点检位置-安全点检任务计划子表
                                    MboSetRemote aqdjjhrw=getMboSet("$UDAQDJWZRWJH", "UDAQDJWZRWJH", "UDAQDJLXLINEID="+adqjlxmxid+" AND ORGID='"+orgid+"' AND SITEID='"+siteid+"' ");
                                    if(null==aqdjjhrw || aqdjjhrw.isEmpty()){
                                        MboRemote aqdjwzjhrwMbo=udaqdjwzrwjhSet.add();//安全点检位置-任务计划明细行mbo
                                        aqdjwzjhrwMbo.setValue("PARENTID", aqdjwzzbid, 2L);//关联值
                                        aqdjwzjhrwMbo.setValue("UDAQDJLXID", aqdjlxid, 2L);//安全点检路线主表ID
                                        aqdjwzjhrwMbo.setValue("UDAQDJLXLINEID", adqjlxmxid, 2L);//安全点检路线明细行ID
                                        aqdjwzjhrwMbo.setValue("UDSAISTANDLINEID", aqdjbzmxMbo.getInt("UDSAISTANDLINEID"), 2L);//安全点检标准明细行ID
                                        aqdjwzjhrwMbo.setValue("XH", aqdjbzmxMbo.getInt("XH"), 2L);//序号
                                        aqdjwzjhrwMbo.setValue("JCXM", aqdjbzmxMbo.getString("JCXM"), 2L);//检查项目
                                        aqdjwzjhrwMbo.setValue("DESCRIPTION", aqdjbzmxMbo.getString("DESCRIPTION"), 2L);//检查内容及要求
                                        aqdjwzjhrwMbo.setValue("JCFS", aqdjbzmxMbo.getString("JCFS"), 2L);//检查方式

                                        //写入多语言字段
                                        MboSetRemote l_djbzZhSet=aqdjwzjhrwMbo.getMboSet("$L_UDSAISTANDLINE", "L_UDSAISTANDLINE", "OWNERID="+aqdjbzmxMbo.getInt("UDSAISTANDLINEID")+" AND LANGCODE='ZH'");
                                        if(null!=l_djbzZhSet && !l_djbzZhSet.isEmpty()){
                                            MboSetRemote l_addjwzjhrwSet=aqdjwzjhrwMbo.getMboSet("$L_UDAQDJWZRWJH", "L_UDAQDJWZRWJH", "1=2");
                                            MboRemote l_djbzZhMbo=l_djbzZhSet.getMbo(0);
                                            MboRemote l_addjwzjhrwMbo=l_addjwzjhrwSet.add();
                                            l_addjwzjhrwMbo.setValue("OWNERID", aqdjwzjhrwMbo.getInt("UDAQDJWZRWJHID"));
                                            l_addjwzjhrwMbo.setValue("LANGCODE", "ZH");
                                            l_addjwzjhrwMbo.setValue("JCXM", l_djbzZhMbo.getString("JCXM"));
                                            l_addjwzjhrwMbo.setValue("DESCRIPTION", l_djbzZhMbo.getString("DESCRIPTION"));
                                            l_addjwzjhrwMbo.setValue("JCFS", l_djbzZhMbo.getString("JCFS"));
                                        }
                                        MboSetRemote l_djbzFrSet=aqdjwzjhrwMbo.getMboSet("$L_UDSAISTANDLINE", "L_UDSAISTANDLINE", "OWNERID="+aqdjbzmxMbo.getInt("UDSAISTANDLINEID")+" AND LANGCODE='FR'");
                                        if(null!=l_djbzFrSet && !l_djbzFrSet.isEmpty()){
                                            MboSetRemote l_addjwzjhrwSet=aqdjwzjhrwMbo.getMboSet("$L_UDAQDJWZRWJH", "L_UDAQDJWZRWJH", "1=2");
                                            MboRemote l_djbzFrMbo=l_djbzFrSet.getMbo(0);
                                            MboRemote l_addjwzjhrwMbo=l_addjwzjhrwSet.add();
                                            l_addjwzjhrwMbo.setValue("OWNERID", aqdjwzjhrwMbo.getInt("UDAQDJWZRWJHID"));
                                            l_addjwzjhrwMbo.setValue("LANGCODE", "FR");
                                            l_addjwzjhrwMbo.setValue("JCXM", l_djbzFrMbo.getString("JCXM"));
                                            l_addjwzjhrwMbo.setValue("DESCRIPTION", l_djbzFrMbo.getString("DESCRIPTION"));
                                            l_addjwzjhrwMbo.setValue("JCFS", l_djbzFrMbo.getString("JCFS"));
                                        }

                                        aqdjwzjhrwMbo.setValue("PL", aqdjbzmxMbo.getInt("PL"), 2L);//频率
                                        aqdjwzjhrwMbo.setValue("PLDW", aqdjbzmxMbo.getString("PLDW"), 2L);//频率单位
                                        aqdjwzjhrwMbo.setValue("ORGID", orgid, 2L);
                                        aqdjwzjhrwMbo.setValue("SITEID", siteid, 2L);
                                        aqdjwzjhrwMbo.setValue("XCZXSJ", zxdate, 2L);
                                        aqdjwzjhrwMbo.setValue("ZXZLX", aqdjbzmxMbo.getString("ZXZLX"), 2L);//执行组类型
                                        aqdjwzjhrwMbo.setValue("ZXZBH", aqdjbzmxMbo.getString("ZRZBH"), 2L);//责任组类型
                                        aqdjwzjhrwMbo.setValue("LANGCODE", "EN", 2L);
                                        aqdjwzjhrwMbo.getThisMboSet().save();
                                    }
                                }
                            }
                        }
                    }
                }
                udaqdjwzrwjhSet.close();
                udsaistandlineSet.close();
            }

        }

    }

}
