package com.webclient.beans.udmxware;

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 java.rmi.RemoteException;
import java.util.Date;

/**
 * 模芯变更AppBean
 * edit 2023-09-22
 */
public class UdmxbgAppBean extends AppBean {

    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 if("Level 4".equalsIgnoreCase(aut)){
                set.setWhere(" ORGID='"+orgid+"' and SITEID='"+siteid+"' and CREATEBY='"+userid+"'");
            }else{
                //没有等级
                set.setWhere("1=2");
            }
        }
        pset.close();

    }


    public void MWDAPOOL()throws RemoteException, MXException {
        app.getAppBean().save();
        MboRemote appMbo = app.getAppBean().getMbo();
        String status = appMbo.getString("STATUS");
        String location = appMbo.getString("LOCATION");
        String deptnum = appMbo.getString("DEPTNUM");

        if(!"COMP".equalsIgnoreCase(status)){
            //模芯库存交易记录表
            MboSetRemote udmxjymxSet = MXServer.getMXServer().getMboSet("UDCORETRADE", MXServer.getMXServer().getSystemUserInfo());
            MboSetRemote udmxkcSet = MXServer.getMXServer().getMboSet("UDCOREINVENTORY", MXServer.getMXServer().getSystemUserInfo());
            if (null != udmxjymxSet && null != udmxkcSet) {
                    String hitemnum = appMbo.getString("HITEMNUM");
                    String qitemnum = appMbo.getString("QITEMNUM");
                    udmxkcSet.setWhere("ITEMNUM='" + hitemnum + "' AND LOCATION='" + location + "'");
                    udmxkcSet.reset();

                    MboSetRemote ykcSet=appMbo.getMboSet("$UDCOREINVENTORY", "UDCOREINVENTORY", "ITEMNUM='" + qitemnum + "' AND LOCATION='" + location + "'");
                    if(null!=ykcSet && !ykcSet.isEmpty()){
                        MboRemote ykcMbo=ykcSet.getMbo(0);
                        String yorgid=ykcMbo.getString("ORGID");
                        String ysiteid=ykcMbo.getString("SITEID");
                        String yitemnum=ykcMbo.getString("ITEMNUM");
                        String ydeptnum=ykcMbo.getString("DEPTNUM");
                        String ylocation=ykcMbo.getString("LOCATION");
                        String ybinnum=ykcMbo.getString("BINNUM");
                        MboRemote udinvMbo=null;

                        if((ykcMbo.getDouble("REPAIREDCOUNT")-appMbo.getDouble("BGNUM"))<0){
                            throw new MXApplicationException("udmxware", "udmxware_crk", new String[]{"物料"+ykcMbo.getString("ITEMNUM")+"的待修数量不足，请检查后重新操作！"} );
                        }else {
                            if (null != udmxkcSet && !udmxkcSet.isEmpty()) {
                                //插入交易记录表
                                udinvMbo=udmxkcSet.getMbo(0);
                                setYitemvalue( udmxjymxSet, udinvMbo, ykcMbo, appMbo,yorgid, ysiteid, yitemnum, ydeptnum, ylocation, ybinnum);
                                setbgSetValue( udmxjymxSet, udinvMbo, appMbo, hitemnum, deptnum,ylocation,ybinnum);
                            } else {
                                udinvMbo=udmxkcSet.add();
                                udinvMbo.setValue("ITEMNUM", hitemnum,2L);
                                udinvMbo.setValue("DEPTNUM", deptnum,2L);
                                udinvMbo.setValue("LOCATION", ylocation,2L);
                                udinvMbo.setValue("BINNUM", ybinnum,2L);
                                udinvMbo.setValue("ORGID", appMbo.getString("ORGID"),2L);
                                udinvMbo.setValue("SITEID", appMbo.getString("SITEID"),2L);
                                udinvMbo.getThisMboSet().save();
                                //插入交易记录表
                                setYitemvalue( udmxjymxSet, udinvMbo, ykcMbo, appMbo,yorgid, ysiteid, yitemnum, ydeptnum, ylocation, ybinnum);
                                setbgSetValue( udmxjymxSet, udinvMbo, appMbo, hitemnum, deptnum,ylocation,ybinnum);
                            }
                        }
                    }

            }
            appMbo.setValue("STATUS", "COMP", 2L);
            appMbo.getThisMboSet().save();
            app.getAppBean().refreshTable();
            app.getAppBean().reloadTable();
            System.gc();
        }else{
            throw new MXApplicationException("udmxware", "udmxware_cf", new String[]{} );
        }


    }

    //更新原物料
    public void setYitemvalue(MboSetRemote udmxjymxSet,MboRemote udinvMbo,MboRemote ykcMbo,MboRemote appMbo,
                              String yorgid,String ysiteid,String yitemnum,String ydeptnum,String ylocation,String ybinnum) throws RemoteException, MXException {

        MboRemote udmxjymxMbo2=udmxjymxSet.add();
        //OWNERTABLE='UDCOREINVENTORY'  and PARENTID=:UDCOREINVENTORYID AND ORGID=:ORGID AND SITEID=:SITEID
        udmxjymxMbo2.setValue("OWNERTABLE", "UDMXWARE", 2L);
        udmxjymxMbo2.setValue("PARENTID", appMbo.getInt("UDMXWAREID"), 2L);
        udmxjymxMbo2.setValue("ORGID", yorgid, 2L);
        udmxjymxMbo2.setValue("SITEID", ysiteid, 2L);
        udmxjymxMbo2.setValue("ITEMNUM", yitemnum, 2L);
        udmxjymxMbo2.setValue("DEPTNUM", ydeptnum, 2L);
        udmxjymxMbo2.setValue("LOCATION", ylocation, 2L);
        udmxjymxMbo2.setValue("BINNUM", ybinnum, 2L);
        udmxjymxMbo2.setValue("TRADETYPE", "UDMXBG", 2L);
        udmxjymxMbo2.setValue("TRADETIME", new Date(), 2L);
        udmxjymxMbo2.setValue("JYNUM", appMbo.getString("UDMXWARENUM"), 2L);
        udmxjymxMbo2.setValue("TRADEBY", appMbo.getString("CREATEBY"), 2L);
        udmxjymxMbo2.setValue("APPNAME", "UDMXBG", 2L);
        udmxjymxMbo2.setValue("DXSL", (-appMbo.getDouble("BGNUM")), 2L);//待修数量
        udmxjymxMbo2.getThisMboSet().save();

    }


    public void setbgSetValue(MboSetRemote udmxjymxSet,MboRemote udinvMbo,MboRemote appMbo,String itemnum,String deptnum,String ylocation,String ybinnum) throws RemoteException, MXException {
        MboRemote udmxjymxMbo=udmxjymxSet.add();
        //OWNERTABLE='UDCOREINVENTORY'  and PARENTID=:UDCOREINVENTORYID AND ORGID=:ORGID AND SITEID=:SITEID
        udmxjymxMbo.setValue("OWNERTABLE", "UDMXWARE", 2L);
        udmxjymxMbo.setValue("PARENTID", appMbo.getInt("UDMXWAREID"), 2L);
        udmxjymxMbo.setValue("ORGID", appMbo.getString("ORGID"), 2L);
        udmxjymxMbo.setValue("SITEID", appMbo.getString("SITEID"), 2L);
        udmxjymxMbo.setValue("ITEMNUM", itemnum, 2L);
        udmxjymxMbo.setValue("DEPTNUM", deptnum, 2L);
        udmxjymxMbo.setValue("LOCATION", ylocation, 2L);
        udmxjymxMbo.setValue("BINNUM", ybinnum, 2L);
        udmxjymxMbo.setValue("TRADETYPE", "UDMXBG", 2L);
        udmxjymxMbo.setValue("TRADETIME", new Date(), 2L);
        udmxjymxMbo.setValue("JYNUM", appMbo.getString("UDMXWARENUM"), 2L);
        udmxjymxMbo.setValue("TRADEBY", appMbo.getString("CREATEBY"), 2L);
        udmxjymxMbo.setValue("APPNAME", "UDMXBG", 2L);
        udmxjymxMbo.setValue("DXSL", (appMbo.getDouble("BGNUM")), 2L);//待修数量
        udmxjymxMbo.getThisMboSet().save();

    }



}
