package com.app.hxqh.udRecovery;

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

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

/**
 *  1)没有入库数量，只需要将留用数量更新到部门清单
 *  2)没有留用数量,全是报废数量，直接结束流程。
 * edit 2024-04-09
 */
public class UpdateLycountToDeptListAction implements ActionCustomClass {
    @Override
    public void applyCustomAction(MboRemote mboRemote, Object[] objects) throws MXException, RemoteException {
        String app = mboRemote.getThisMboSet().getApp();
        Integer UDRECOVERYID = mboRemote.getInt("UDRECOVERYID");//表ID
        String RCNUM = mboRemote.getString("RCNUM");//单号
        String WONUM = mboRemote.getString("WONUM");//领料申请单号
        String ORGID = mboRemote.getString("ORGID");//组织
        String SITEID = mboRemote.getString("SITEID");//地点
        String STATUS = mboRemote.getString("STATUS");//状态
        String CREATEBY = mboRemote.getString("CREATEBY");//责任人
        MboSetRemote personSet = MXServer.getMXServer().getMboSet("PERSON",MXServer.getMXServer().getSystemUserInfo());//人员表
        personSet.setWhere("personid='"+CREATEBY+"'");
        personSet.reset();
        String displayname = "";//用户名
        String department = "";//部门编号
        if(personSet!=null && !personSet.isEmpty()){
            MboRemote personMbo = personSet.getMbo(0);
            displayname = personMbo.getString("DISPLAYNAME");
            department = personMbo.getString("DEPARTMENT");
        }
        try {
            //如有留用数量，更新部门清单
            MboSetRemote udinvSet = MXServer.getMXServer().getMboSet("UDINVENTORY",MXServer.getMXServer().getSystemUserInfo());//EAM物资清单表（部门清单表）
            MboSetRemote udmatuSet = MXServer.getMXServer().getMboSet("UDMATUSETRANS",MXServer.getMXServer().getSystemUserInfo());//EAM物资清单子表
            MboSetRemote UDRECOVERYLINESet = mboRemote.getMboSet("$UDRECOVERYLINE","UDRECOVERYLINE","UDRECOVERYID="+UDRECOVERYID+" AND ORGID='"+ORGID+"' AND SITEID='"+SITEID+"' AND LYNUM>0");
            int count = UDRECOVERYLINESet.count();//总数
            if(count > 0){
                //更新部门清单（EAM物资备件清单）
                for(int i=0;i<count;i++) {
                    MboRemote rcMbo = UDRECOVERYLINESet.getMbo(i);
                    String itemnum = rcMbo.getString("ITEMNUM");
                    double LYNUM = rcMbo.getDouble("LYNUM");//留用数量
                    udinvSet.setWhere("ITEMNUM='" + itemnum + "' AND DEPTNUM='" + department + "'");
                    udinvSet.reset();
                    if (null != udinvSet && !udinvSet.isEmpty()) {
                        //插入交易记录表
                        setudmatuSetValue(udmatuSet,itemnum,department,LYNUM,mboRemote,"UDRECOVERY","Storage");
                    } else {
                        MboRemote udinvMbo = udinvSet.add();
                        udinvMbo.setValue("ITEMNUM", itemnum);
                        udinvMbo.setValue("DEPTNUM",department);
                        udinvMbo.setValue("ORGID",ORGID);
                        udinvMbo.setValue("SITEID",SITEID);
                        udinvMbo.getThisMboSet().save();
                        //插入交易记录表
                        setudmatuSetValue(udmatuSet,itemnum,department,LYNUM,mboRemote,"UDRECOVERY","Storage");
                    }
                }
            }
            mboRemote.setValue("STATUS", "CLOSE");//关闭
        } catch (IOException e) {
            throw new RuntimeException(e.getMessage());
        }
    }

    /**
     * 插入交易记录表
     * @param udmatuSet
     * @param itemnum
     * @param workshop
     * @param udlldMbo
     * @throws RemoteException
     * @throws MXException
     */
    public void setudmatuSetValue(MboSetRemote udmatuSet,String itemnum,String workshop,double quantity,MboRemote udlldMbo,String appname,String issuetype) throws RemoteException, MXException {
        MboRemote udmatuMbo=udmatuSet.add();
        //ITEMNUM=:ITEMNUM and DEPTNUM=:DEPTNUM
        udmatuMbo.setValue("ITEMNUM", itemnum);
        udmatuMbo.setValue("DEPTNUM", workshop);
        udmatuMbo.setValue("QUANTITY", quantity);
        udmatuMbo.setValue("ISSUETYPE", issuetype);
        udmatuMbo.setValue("TRANSDATE", new Date());
        udmatuMbo.setValue("ENTERBY", udlldMbo.getString("CREATEBY"));
        udmatuMbo.setValue("WONUM", udlldMbo.getString("RCNUM"));
        udmatuMbo.setValue("KOSTL", "");
        udmatuMbo.setValue("OUTBOUND","");
        udmatuMbo.setValue("ORDERUNIT","");
        udmatuMbo.setValue("BINNUM", "");
        udmatuMbo.setValue("SJYDTYPE", "");
        udmatuMbo.setValue("AUFNR", "");
        udmatuMbo.setValue("ORGID", "");
        udmatuMbo.setValue("SITEID", "");
        udmatuMbo.setValue("APPNAME", appname);
        udmatuMbo.getThisMboSet().save();
    }
}
