package com.app.crontask.kfwy;


import com.app.crontask.ChangeTimeUtils;
import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.server.SimpleCronTask;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 物资安全库存设定 定时生成车间需求申请单
 * ORGID='FMCG' and SITEID='KF51'
 * edit 20231120
 */
public class SafetyKfwyStockCronTask extends SimpleCronTask {

    @Override
    public void cronAction() {

        try {
            //已低于最低安全量的物资的所有车间
            MboSetRemote uditemsafeSet = MXServer.getMXServer().getMboSet("UDITEMSAFE", MXServer.getMXServer().getSystemUserInfo());
            String cjStr = " UDITEMSAFEID in( SELECT max(UDITEMSAFEID) FROM ( SELECT UDITEMSAFE.UDITEMSAFEID,UDITEMSAFE.ITEMNUM,UDITEMSAFE.ORGID,UDITEMSAFE.SITEID,UDITEMSAFE.LOWQT,UDITEMSAFE.DEPTNUM,UDKC.CURBALTOTAL  FROM  ( SELECT ITEMNUM,ORGID,SITEID,LOWQT,DEPTNUM,UDITEMSAFEID FROM UDITEMSAFE WHERE ISENABLE=1 AND ORGID='FMCG' AND SITEID='KF51' ) UDITEMSAFE LEFT JOIN (SELECT sum(CURBALTOTAL) CURBALTOTAL,ITEMNUM,ORGID,SITEID FROM UDKC WHERE ORGID='FMCG' AND SITEID='KF51' GROUP BY ITEMNUM,ORGID,SITEID) UDKC ON UDKC.ITEMNUM=UDITEMSAFE.ITEMNUM and UDKC.ORGID=UDITEMSAFE.ORGID AND UDKC.SITEID=UDITEMSAFE.SITEID  AND UDITEMSAFE.LOWQT >= UDKC.CURBALTOTAL ) a WHERE a.ORGID='FMCG' AND a.SITEID='KF51' AND a.CURBALTOTAL IS NOT null GROUP BY a.DEPTNUM )";
            uditemsafeSet.setWhere(cjStr);
            uditemsafeSet.reset();
            if (null != uditemsafeSet && !uditemsafeSet.isEmpty()) {
                MboSetRemote prSet = MXServer.getMXServer().getMboSet("PR", MXServer.getMXServer().getSystemUserInfo());
                MboSetRemote uditemsafeSet2 = MXServer.getMXServer().getMboSet("UDITEMSAFE", MXServer.getMXServer().getSystemUserInfo());
                SimpleDateFormat sf=new SimpleDateFormat("yyyyMMdd");
                Date date=new Date();
                String curdateStr=sf.format(date);
                Date cxqdhrq=ChangeTimeUtils.changeMonth(date,3);
                for (int i = 0; i < uditemsafeSet.count(); i++) {
                    MboRemote uditemsafeMbo = uditemsafeSet.getMbo(i);
                    String deptnum=uditemsafeMbo.getString("DEPTNUM");
                    String siteid=uditemsafeMbo.getString("SITEID");
                    MboRemote prMbo = prSet.add();
                    prMbo.setValue("requestedby", "MAXADMIN", 2L);
                    prMbo.setValue("APPNAME", "UDPRTB", 2L);
                    prMbo.setValue("UDPRNUM", "EAM-AUTO-"+siteid+"-"+deptnum+"-"+curdateStr+"", 2L);
                    prMbo.setValue("STATUS", "WAPPR", 2L);
                    prMbo.setValue("STATUSDATE", new Date(), 2L);
                    prMbo.setValue("ORGID", uditemsafeMbo.getString("ORGID"), 2L);
                    prMbo.setValue("SITEID", uditemsafeMbo.getString("SITEID"), 2L);
                    prMbo.setValue("UDLOC", "0",2L);
                    prMbo.setValue("URGENCY", "0",2L);
                    prMbo.setValue("REPCATEGORY", "0",2L);
                    prMbo.setValue("REQUIREDDATE", cxqdhrq, 2L);
                    prMbo.setValue("APPREASON", "系统自动触发补库", 2L);
                    prMbo.setValue("DESCRIPTION", "系统自动触发补库", 2L);
                    prMbo.setValue("DEPTNUM", uditemsafeMbo.getString("DEPTNUM"), 2L);
                    prMbo.getThisMboSet().save();

                    //取当前车间下的库存余量低于安全库存量的物料
                    String str2="UDITEMSAFEID in(SELECT UDITEMSAFE.UDITEMSAFEID FROM ( SELECT ITEMNUM,ORGID,SITEID,LOWQT,DEPTNUM,UDITEMSAFEID FROM UDITEMSAFE WHERE ISENABLE=1 AND ORGID='FMCG' AND SITEID='KF51' AND DEPTNUM='"+deptnum+"')  UDITEMSAFE LEFT JOIN (SELECT sum(CURBALTOTAL) CURBALTOTAL,ITEMNUM,ORGID,SITEID FROM UDKC WHERE ORGID='FMCG' AND SITEID='KF51' GROUP BY ITEMNUM,ORGID,SITEID) UDKC ON UDKC.ITEMNUM=UDITEMSAFE.ITEMNUM and UDKC.ORGID=UDITEMSAFE.ORGID AND UDKC.SITEID=UDITEMSAFE.SITEID AND UDITEMSAFE.LOWQT >= UDKC.CURBALTOTAL)";
                    uditemsafeSet2.setWhere(str2);
                    uditemsafeSet2.reset();
                    if(null!=uditemsafeSet2 && !uditemsafeSet2.isEmpty()){
                        for(int j=0;j<uditemsafeSet2.count();j++){
                            MboRemote uditemMbo=uditemsafeSet2.getMbo(j);
                            double safeqt=uditemMbo.getDouble("SAFEQT");//安全库存量
//                            double dqkcl=uditemMbo.getDouble("KC.CURBALTOTAL");//当前库存量
                            double dqkcl=uditemMbo.getDouble("KCQT");//当前库存量
                            double ztsl=uditemMbo.getDouble("TANSQT1");//在途数量
//                            double bmqdyl=uditemMbo.getDouble("QDYL");//部门清单数量
                            double orderqty=safeqt-(dqkcl+ztsl);
                            if(orderqty>0){
                                MboSetRemote prlineSet=prMbo.getMboSet("PRLINE");
                                MboRemote prlineMbo=prlineSet.add();
                                //prnum=:prnum and siteid=:siteid
                                prlineMbo.setValue("prnum", prMbo.getString("prnum"),2L);
                                prlineMbo.setValue("SITEID", prMbo.getString("SITEID"),2L);
                                prlineMbo.setValue("ORGID", prMbo.getString("ORGID"),2L);
                                prlineMbo.setValue("PRLINENUM", prlineMbo.getThisMboSet().count()+"",2L);//序号
                                prlineMbo.setValue("ITEMNUM", uditemMbo.getString("ITEMNUM"),2L);
                                prlineMbo.setValue("ORDERQTY", orderqty,2L);
                                prlineMbo.setValue("APPRQUANTITY", orderqty,2L);
                                prlineMbo.setValue("ORDERUNIT", uditemMbo.getString("KC.ISSUEUNIT"),11L);
                                prlineMbo.setValue("CONVERSION",1,2L);
                                prlineMbo.getThisMboSet().save();
                                prlineMbo.getThisMboSet().close();
                            }

                        }
                    }
                }
            }

        }catch (Exception e){
            e.getMessage();
            e.getCause();
            e.printStackTrace();
        }finally {
            System.gc();
            System.out.println("--KF51安全库存生成成功！");
        }
    }


}
