package com.app.hxqh.asset;

import com.app.crontask.ChangeTimeUtils;
import psdi.app.asset.Asset;
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.text.SimpleDateFormat;
import java.util.Date;

/**
 * 资产台账Mbo
 */
public class AssetMbo extends Asset {

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

    @Override
    public void save() throws MXException, RemoteException {
        super.save();
        String ORGID = getString("ORGID");
        String SITEID = getString("SITEID");
        String app = getThisMboSet().getApp();
        if ("LPASSET".equalsIgnoreCase(app) ) {
            if(isModified("ASSETNUM")){
                String assetnum=getString("ASSETNUM").replace(",", "");
                setValue("ASSETNUM", assetnum);
            }
            //状态发生变化，需要记录日志
            if(isModified("USESTATUS") && !isNew()){
                String ASSETNUM = getString("ASSETNUM");//设备编号
                MboSetRemote ASSETSet = MXServer.getMXServer().getMboSet("ASSET",MXServer.getMXServer().getSystemUserInfo());//设备台账表
                ASSETSet.setWhere("ASSETNUM='"+ASSETNUM+"' and orgid='"+ORGID+"' and siteid='"+SITEID+"'");//
                ASSETSet.reset();
                MboRemote mbo = ASSETSet.getMbo(0);
                String USESTATUSQ = mbo.getString("USESTATUS");//修改前状态
                MboSetRemote ASSETLOGSet = MXServer.getMXServer().getMboSet("UDSBSTATUSLOG",MXServer.getMXServer().getSystemUserInfo());//设备台账日志表
                //添加修改日志记录
                String PERSONID = this.getThisMboSet().getUserName();//获取登录人
                Date CREATEDATE = new Date();
                String USESTATUSH = getString("USESTATUS");//保存后状态
                MboRemote logMbo = ASSETLOGSet.add();
                logMbo.setValue("ASSETNUM",ASSETNUM);//设备
                logMbo.setValue("CREATEBY",PERSONID);//变更人
                logMbo.setValue("CREATEDATE",CREATEDATE);//变更日期
                logMbo.setValue("BFSTATUS",USESTATUSQ);//变更前状态
                logMbo.setValue("AFSTATUS",USESTATUSH);//变更后状态
                logMbo.setValue("SITEID",SITEID);//地点
                logMbo.setValue("ORGID",ORGID);//组织
                logMbo.getThisMboSet().save();
            }
        }
        //计量表下次执行日期和上次时间的更新
        if("LPASSET".equalsIgnoreCase(app)){
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date FIRSTDATE = getDate("FIRSTDATE");
            Integer FREQUENCY = getInt("FREQUENCY");//频率
            String FREQUNIT = getString("FREQUNIT");//频率单位
            if(FIRSTDATE!=null && !"".equals(FIRSTDATE) && FREQUENCY!=null && !"".equals(FREQUENCY) && FREQUNIT!=null && !"".equals(FREQUNIT)){
                try {
                    Date nextDate = nextComDate(FREQUNIT,null,FIRSTDATE,FREQUENCY);
                    String nextDateStr = sdf.format(nextDate);
                    nextDate = sdf.parse(nextDateStr);
                    setValue("LASTCOMPDATE",nextDate,11L);//上次执行日期
                    setValue("NEXTEXDATE",nextDate,11L);//下次执行日期
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }

            //复制资产模板的备件
            if(isModified("TEMPLATEID")){
                MboSetRemote zcmbSet = MXServer.getMXServer().getMboSet("PLUSCTEMPLATE",MXServer.getMXServer().getSystemUserInfo());
                zcmbSet.setWhere("TEMPLATEID='"+getString("TEMPLATEID")+"' and ORGID='"+getString("ORGID")+"'");
                zcmbSet.reset();
                if(null!=zcmbSet && !zcmbSet.isEmpty()){
                    MboRemote zcmbMbo=zcmbSet.getMbo(0);
                    MboSetRemote zcmbBjSet=zcmbMbo.getMboSet("PLUSCTPSPAREPART");
                    if(null!=zcmbBjSet && !zcmbBjSet.isEmpty()){
                        MboSetRemote sparepartSet = MXServer.getMXServer().getMboSet("SPAREPART",MXServer.getMXServer().getSystemUserInfo());
                        sparepartSet.setWhere("assetnum ='"+getString("assetnum")+"' and siteid='"+getString("siteid")+"' ");
                        sparepartSet.reset();
                        sparepartSet.deleteAll(2l);
                        sparepartSet.save(11L);

                        MboSetRemote sparepartSet2=getMboSet("SPAREPART");
                        for(int i=0;i<zcmbBjSet.count();i++){
                            MboRemote zcmbBjMbo=zcmbBjSet.getMbo(i);
                            //assetnum = :assetnum and siteid=:siteid
                            MboRemote sparepartMbo=sparepartSet2.add();
                            sparepartMbo.setValue("assetnum", getString("assetnum"), 2L);
                            sparepartMbo.setValue("siteid", getString("siteid"), 2L);
                            sparepartMbo.setValue("ITEMNUM", zcmbBjMbo.getString("ITEMNUM"), 2L);
                        }
                    }
                }
            }

        }

    }


    @Override
    public MboRemote duplicate() throws MXException, RemoteException {
        return super.duplicate();
    }

    @Override
    public void add() throws MXException, RemoteException {
        super.add();
        String app = getThisMboSet().getApp();
        //模具刀具管理
        if ("MOLDMAG".equalsIgnoreCase(app) ) {
            setValue("ATYPE","3",11L);
            setValue("ASSETNUM",String.valueOf(getInt("ASSETUID")).replace(",", ""),11L);
        }
    }


    @Override
    public void init() throws MXException {
        super.init();
        setFieldFlag("LOCATION", 7L, false);
    }


    /**
     * 获取下次执行时间
     * @param frequnit
     * @param lascomDate
     * @param firsDate
     * @return
     * @throws Exception
     */
    public Date nextComDate(String frequnit,Date lascomDate,Date firsDate,int frequency) throws Exception {
        Date commitTime=null;
        if ("DAY".equalsIgnoreCase(frequnit)) {//日
            if (null == lascomDate) {
                commitTime = ChangeTimeUtils.changeDay(firsDate, frequency);
            } else {
                commitTime = ChangeTimeUtils.changeDay(new Date(), frequency);
            }
        }
        if ("HOUR".equalsIgnoreCase(frequnit)) {//小时
            if (null == lascomDate) {
                commitTime = ChangeTimeUtils.changeHour(firsDate, frequency);
            } else {
                commitTime = ChangeTimeUtils.changeHour(new Date(), frequency);
            }
        }
        if ("MONTH".equalsIgnoreCase(frequnit)) {//月
            if (null == lascomDate) {
                commitTime = ChangeTimeUtils.changeMonth(firsDate, frequency);
            } else {
                commitTime = ChangeTimeUtils.changeMonth(new Date(), frequency);
            }
        }
        if ("QUARTER".equalsIgnoreCase(frequnit)) {//季度
            if (null == lascomDate) {
                commitTime = ChangeTimeUtils.changeQuarter(firsDate, frequency);
            } else {
                commitTime = ChangeTimeUtils.changeQuarter(new Date(), frequency);
            }
        }
        if ("WEEK".equalsIgnoreCase(frequnit)) {//周
            if (null == lascomDate) {
                commitTime = ChangeTimeUtils.changeWeek(firsDate, frequency);
            } else {
                commitTime = ChangeTimeUtils.changeWeek(new Date(), frequency);
            }
        }
        if ("YEAR".equalsIgnoreCase(frequnit)) {//年
            if (null == lascomDate) {
                commitTime = ChangeTimeUtils.changeYear(firsDate, frequency);
            } else {
                commitTime = ChangeTimeUtils.changeYear(new Date(), frequency);
            }
        }
        return commitTime;
    }

}
