package com.app.hxqh.udworkorder;

import com.alibaba.fastjson.JSONObject;
import psdi.app.iface.spms.Spms2EamHandler;
import psdi.common.action.ActionCustomClass;
import psdi.common.emailstner.LSNRActionHandledException;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.util.MXApplicationException;
import psdi.util.MXException;

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

/**
 * 日常维修工单-执行阶段发起流程
 * edit 2023-07-04
 */
public class WorkOrderToInprgAction implements ActionCustomClass {
    @Override
    public void applyCustomAction(MboRemote mboRemote, Object[] objects) throws MXException, RemoteException {
        String app = mboRemote.getThisMboSet().getApp();
        String appname=mboRemote.getString("APPNAME");
        //待测试成功后转移到WorkOrderToInprgAction上
        if("UDWORKORDER".equalsIgnoreCase(app) || "UDWORKORDER".equalsIgnoreCase(appname) || "UDWORKORDERAPP".equalsIgnoreCase(appname)){
            String status=mboRemote.getString("STATUS");
            Date actstart=mboRemote.getDate("ACTSTART");
            Date actfinish=mboRemote.getDate("ACTFINISH");
            if(null==actstart || null==actfinish){
                throw new LSNRActionHandledException(true, "udworkorder", "udworkorder_sjsj", new String[]{});
            }

            String deptnum=mboRemote.getString("ASSET.SDSYBM");//车间编号
            String depttype=mboRemote.getString("ASSET.DEPTSDSYBM.DEPTTYPE");//部门类
//            if("INPRG".equalsIgnoreCase(status)){//执行中
                MboSetRemote sjwlSet=mboRemote.getMboSet("SHOWACTUALMATERIAL");
                MboSetRemote udmatuSet = MXServer.getMXServer().getMboSet("UDMATUSETRANS",MXServer.getMXServer().getSystemUserInfo());
                if(null!=sjwlSet && !sjwlSet.isEmpty()){
                    boolean curbalFlag=false;
                    boolean udinvFlag=false;
                    for(int i=0;i<sjwlSet.count();i++){
                        MboRemote sjwlMbo=sjwlSet.getMbo(i);
                        String itemnum=sjwlMbo.getString("ITEMNUM");
                        double itemqty=sjwlMbo.getDouble("ITEMQTY");
                        double jjcksl=sjwlMbo.getDouble("JJCKSL");
                        MboSetRemote udinvSet=mboRemote.getMboSet("$UDINVENTORY", "UDINVENTORY","ITEMNUM='"+itemnum+"' and DEPTNUM='"+depttype+"'");
                        if(null!=udinvSet && !udinvSet.isEmpty()){
                            MboRemote udinvMbo=udinvSet.getMbo(0);
                            double curbaltotal=udinvMbo.getDouble("CURBALTOTAL");//余量
                            double jjhsyl=udinvMbo.getDouble("JJHSYL");//旧件回收余量
                            if(itemqty>curbaltotal){
                                curbalFlag=true;
                                mboRemote.setValue("SPMSSTATUS", "udworkorder_cub"+itemnum);
                                mboRemote.getThisMboSet().save();
                                throw new LSNRActionHandledException(true, "udworkorder", "udworkorder_cub", new String[]{itemnum});
                            }
                            if(jjcksl>jjhsyl){
                                curbalFlag=true;
                                mboRemote.setValue("SPMSSTATUS", "udworkorder_cub"+itemnum);
                                mboRemote.getThisMboSet().save();
                                throw new LSNRActionHandledException(true, "udworkorder", "udworkorder_jjck", new String[]{itemnum});
                            }
                        }else{
                            udinvFlag=true;
                            mboRemote.setValue("SPMSSTATUS", "udworkorder_inv"+itemnum);
                            mboRemote.getThisMboSet().save();
                            throw new LSNRActionHandledException(true, "udworkorder", "udworkorder_inv", new String[]{itemnum});
                        }
                    }
                    if(!curbalFlag && !udinvFlag){
                        for(int i=0;i<sjwlSet.count();i++) {
                            MboRemote sjwlMbo = sjwlSet.getMbo(i);
                            String itemnum = sjwlMbo.getString("ITEMNUM");
                            double itemqty = sjwlMbo.getDouble("ITEMQTY");//出库数量
                            double jjcksl = sjwlMbo.getDouble("JJCKSL");//旧件出库数量
                            if(itemqty>0){ //出库数量
                                MboRemote udmatuMbo=udmatuSet.add();
                                udmatuMbo.setValue("ITEMNUM", itemnum);
                                udmatuMbo.setValue("DEPTNUM", deptnum);
                                udmatuMbo.setValue("QUANTITY", (-itemqty));
                                udmatuMbo.setValue("ISSUETYPE", "Distribute");
                                udmatuMbo.setValue("TRANSDATE", new Date());
                                udmatuMbo.setValue("ENTERBY", mboRemote.getString("CREATEBY"));
                                udmatuMbo.setValue("WONUM", mboRemote.getString("WONUM"));
                                udmatuMbo.setValue("KOSTL", mboRemote.getString("KOSTL"));
                                udmatuMbo.setValue("OUTBOUND", mboRemote.getString("UDWORKORDERID"));
                                udmatuMbo.setValue("ORDERUNIT", sjwlMbo.getString("ITEMQTYUNTI"));
                                udmatuMbo.setValue("BINNUM", sjwlMbo.getString("UDKC.BINNUM"));
                                udmatuMbo.setValue("SJYDTYPE", sjwlMbo.getString("UDYDLX"));
                                udmatuMbo.setValue("AUFNR", sjwlMbo.getString("AUFNR"));
                                udmatuMbo.setValue("APPNAME", "UDWORKORDER");
                                udmatuMbo.getThisMboSet().save();
                            }
                            if(jjcksl>0){//旧件出库数量
                                MboRemote udmatuJjMbo=udmatuSet.add();
                                udmatuJjMbo.setValue("ITEMNUM", itemnum);
                                udmatuJjMbo.setValue("DEPTNUM", deptnum);
                                udmatuJjMbo.setValue("QUANTITY", (-jjcksl));
                                udmatuJjMbo.setValue("ISSUETYPE", "Distribute");
                                udmatuJjMbo.setValue("TRANSDATE", new Date());
                                udmatuJjMbo.setValue("ENTERBY", mboRemote.getString("CREATEBY"));
                                udmatuJjMbo.setValue("WONUM", mboRemote.getString("WONUM"));
                                udmatuJjMbo.setValue("KOSTL", mboRemote.getString("KOSTL"));
                                udmatuJjMbo.setValue("OUTBOUND", mboRemote.getString("UDWORKORDERID"));
                                udmatuJjMbo.setValue("ORDERUNIT", sjwlMbo.getString("ITEMQTYUNTI"));
                                udmatuJjMbo.setValue("BINNUM", sjwlMbo.getString("UDKC.BINNUM"));
                                udmatuJjMbo.setValue("SJYDTYPE", sjwlMbo.getString("UDYDLX"));
                                udmatuJjMbo.setValue("AUFNR", sjwlMbo.getString("AUFNR"));
                                udmatuJjMbo.setValue("APPNAME", "UDWORKORDER");
                                udmatuJjMbo.setValue("ISJJ", 1);
                                udmatuJjMbo.getThisMboSet().save();
                            }

                        }
                    }
                }
//            }
            mboRemote.setValue("STATUS", "COMP");
        }

    }

}
