package com.webclient.beans.udjobstand;

import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.util.MXApplicationException;
import psdi.util.MXException;
import psdi.webclient.system.beans.AppBean;
import psdi.webclient.system.beans.ResultsBean;
import psdi.workflow.WorkFlowServiceRemote;

import java.rmi.RemoteException;

/**
 * 资产预防性维护计划AppBean
 * edit 2023-11-14
 */
public class UdjobplanAppBean extends AppBean {

    public void toudwork() throws MXException, RemoteException {
        MboRemote jobMbo=app.getAppBean().getMbo();
        //预防性维护工单
        MboSetRemote udworkorderSet = MXServer.getMXServer().getMboSet("UDWORKORDER",MXServer.getMXServer().getSystemUserInfo());
        String sql="UDJOBSTANDID="+jobMbo.getInt("UDJOBSTANDID")+" AND STATUS NOT IN('CLOSE','COMP') AND ORGID='"+jobMbo.getString("ORGID")+"' AND SITEID='"+jobMbo.getString("SITEID")+"' AND ASSETNUM='"+jobMbo.getString("ASSETNUM")+"' ";
        udworkorderSet.setWhere(sql);
        udworkorderSet.reset();
        if(udworkorderSet.isEmpty()){

            String siteid=jobMbo.getMboSet("$ASSET", "ASSET", "ASSETNUM='"+jobMbo.getString("ASSETNUM")+"'").getMbo(0).getString("SITEID");

            MboRemote workMbo=udworkorderSet.addAtEnd(2L);
            workMbo.setValue("SCSJLZ", jobMbo.getDouble("SCZXJL"),11L);//工单生成时计量值
            workMbo.setValue("APPNAME", "UDPMWOORDER",11L);
            String zybzdesc=jobMbo.getString("UDJOBSTAND.DESCRIPTION");
            workMbo.setValue("DESCRIPTION", jobMbo.getString("ASSETNUM")+zybzdesc,11L);
            workMbo.setValue("ASSETNUM", jobMbo.getString("ASSETNUM"),2L);
            workMbo.setValue("UDJOBSTANDID", jobMbo.getInt("UDJOBSTANDID"),2L);
            workMbo.setValue("STATUS", "EDIT",2L);
            workMbo.setValue("ORGID", jobMbo.getString("ORGID"),2L);
            workMbo.setValue("SITEID", siteid,2L);
            String userid = this.app.getBeanForApp().getMbo().getUserInfo().getPersonId();
            workMbo.setValue("CREATEBY", userid,2L);
            workMbo.setValue("YFXCJFS", "Manual", 2L);//预防性工单创建方式，Manual手动，automatic自动

            //任务子表
            MboSetRemote wotaskSet=workMbo.getMboSet("UDWOTASK");
            MboSetRemote jobstandline=jobMbo.getMboSet("UDJOBSTANDLINE");
            if(null!=jobstandline && !jobstandline.isEmpty()){
                for(int j=0;j<jobstandline.count();j++){
                    //parentid=:UDWORKORDERID AND siteid=:siteid
                    MboRemote wotaskMbo=wotaskSet.add();
                    MboRemote jobstandlineMbo=jobstandline.getMbo(j);
                    wotaskMbo.setValue("parentid", workMbo.getInt("UDWORKORDERID"),11L);
                    wotaskMbo.setValue("siteid", workMbo.getString("siteid"),11L);
                    wotaskMbo.setValue("TASKID", jobstandlineMbo.getString("TASKID"),11L);
                    wotaskMbo.setValue("DESCRIPTION", jobstandlineMbo.getString("DESCRIPTION"),11L);
                }
            }

            //物料子表
            MboSetRemote woWlSet=workMbo.getMboSet("SHOWPLANMATERIAL");
            MboSetRemote joblWlSet=jobMbo.getMboSet("UDJOBZIGF_WL");
            if(null!=woWlSet && !joblWlSet.isEmpty()){
                for(int j=0;j<joblWlSet.count();j++){
                    //parentid=:UDWORKORDERID and ISPLAN=1 and LTYPE=2
                    MboRemote woWlMbo=woWlSet.add();
                    MboRemote joblWlMbo=joblWlSet.getMbo(j);
                    woWlMbo.setValue("parentid", workMbo.getInt("UDWORKORDERID"),2L);
                    woWlMbo.setValue("siteid", workMbo.getString("siteid"),2L);
                    woWlMbo.setValue("ORGID", workMbo.getString("ORGID"),2L);
                    woWlMbo.setValue("ISPLAN", 1,2L);
                    woWlMbo.setValue("LTYPE", 2,2L);
                    woWlMbo.setValue("ITEMNUM", joblWlMbo.getString("ITEMNUM"),2L);
                    woWlMbo.setValue("ITEMQTY", joblWlMbo.getDouble("QUANTITY"),11L);
                }
            }

            //员工子表
            MboSetRemote ygSet=workMbo.getMboSet("SHOWPLANLABOR");
            MboSetRemote bzZxzSet=jobMbo.getMboSet("UDJOBZIGF_ZXZ");
            if(null!=bzZxzSet && !bzZxzSet.isEmpty()){
                for(int k=0;k<bzZxzSet.count();k++){
                    MboRemote zxzMbo=bzZxzSet.getMbo(k);
                    String zxz=zxzMbo.getString("ZXZ");
                    String zxzSql="";
//                                if("MainGroup".equalsIgnoreCase(zxz)){
//                                    //维修组
//                                    zxzSql="PERSONGROUP IN(SELECT UDZXZGH FROM UDZXZ WHERE ASSETID="+jobMbo.getString("ASSETNUM")+" )";
//                                }else if("WorkGroup".equalsIgnoreCase(zxz)){
//                                    //车间组
//                                    zxzSql="PERSONGROUP IN(SELECT UDZXZGH FROM UDCJZ WHERE ASSETID="+jobMbo.getString("ASSETNUM")+" )";
//                                }
                    zxzSql="PERSONGROUP IN(SELECT UDZXZGH FROM UDCJZ WHERE ASSETID="+jobMbo.getString("ASSETNUM")+" AND TYPE='"+zxz+"')";
                    MboSetRemote ryzSet=workMbo.getMboSet("$PERSONGROUPTEAM", "PERSONGROUPTEAM", zxzSql);
                    if(null!=ryzSet){
                        for(int l=0;l<ryzSet.count();l++){
                            MboRemote ryzMbo=ryzSet.getMbo(l);
                            //parentid=:UDWORKORDERID and ISPLAN=1 and LTYPE=1
                            MboRemote ygMbo=ygSet.add();
                            ygMbo.setValue("parentid", workMbo.getInt("UDWORKORDERID"),2L);
                            ygMbo.setValue("ISPLAN", 1,2L);
                            ygMbo.setValue("LTYPE", 1,2L);
                            ygMbo.setValue("TASKID", zxzMbo.getString("TASKID"),2L);
                            ygMbo.setValue("LABORCODE", ryzMbo.getString("RESPPARTYGROUP"),2L);
                        }
                    }
                }
            }
            ((WorkFlowServiceRemote) MXServer.getMXServer().lookup("WORKFLOW")).initiateWorkflow("UDPMWOORDE", workMbo);
            workMbo.getThisMboSet().save();
            workMbo.getThisMboSet().close();

            app.getAppBean().reloadTable();
            app.getAppBean().refreshTable();

            int udlldid=workMbo.getInt("UDWORKORDERID");


            String appName = "UDPMWOORDER";
            StringBuffer newUrl = new StringBuffer(this.clientSession.getMaximoRequestURI());
            newUrl.append("?event=gotoapp&value=" +appName+"&uniqueid="+udlldid);
            this.clientSession.getCurrentApp().put("forcereload", "true");
            this.clientSession.gotoApplink(newUrl.toString());
        }else{
            throw new MXApplicationException("udpmworkorder", "udpmworkorder_cf", new String[]{} );
        }

    }

    public void initializeApp() throws MXException, RemoteException {
        super.initializeApp();
        ResultsBean resultsbean = app.getResultsBean();
        MboSetRemote set=resultsbean.getMboSet();
        String userid=set.getUserInfo().getPersonId();
        MboSetRemote pset= MXServer.getMXServer().getMboSet("person", set.getUserInfo());
        pset.setWhere("personid='"+userid+"'");
        if(!pset.isEmpty() && pset.count()>0){
            MboRemote per=pset.getMbo(0);
            //权限等级
            String aut=per.getString("UDAUTGRADE");
            String orgid=per.getString("LOCATIONORG");
            String siteid=per.getString("LOCATIONSITE");

            if("Level 1".equalsIgnoreCase(aut)){
                set.setWhere(" 1=1 ");
            }else if("Level 2".equalsIgnoreCase(aut)){
                set.setWhere(" ORGID='"+orgid+"' ");
            }else if("Level 3".equalsIgnoreCase(aut)){
                set.setWhere(" SITEID='"+siteid+"' ");
            }else{
                //没有等级
                set.setWhere("1=2");
            }
        }
        pset.close();

    }
}
