package com.app.crontask.reportCron;

import psdi.mbo.MboRemote;
import psdi.mbo.MboSetRemote;
import psdi.server.MXServer;
import psdi.server.SimpleCronTask;

import java.time.LocalDate;
import java.time.Year;
import java.time.YearMonth;

/**
 * 备件报表类定时取每月的呆滞品库存金额
 * 用于每个月记录报表统计备件配置表中的各物料的数量、单价、汇率、金额等数据
 * edit 20240521 14:25
 */
public class UDBBDZPKCCronTask extends SimpleCronTask {
    @Override
    public void cronAction() {
        try {
            MboSetRemote siteSet = MXServer.getMXServer().getMboSet("SITE", MXServer.getMXServer().getSystemUserInfo());
            siteSet.setWhere("ACTIVE=1 AND SITEID<>'CN01'");
            siteSet.reset();
            if(null!=siteSet && !siteSet.isEmpty()){
                //物资库存表
                MboSetRemote udklSet = MXServer.getMXServer().getMboSet("UDKL", MXServer.getMXServer().getSystemUserInfo());
                //报表呆滞品库存金额中间表
                MboSetRemote udbbdzpkcSet = MXServer.getMXServer().getMboSet("UDBBDZPKC", MXServer.getMXServer().getSystemUserInfo());
                //取部门类
                MboSetRemote uditemcfgSet = MXServer.getMXServer().getMboSet("UDITEMCFG", MXServer.getMXServer().getSystemUserInfo());
                //取费率
                MboSetRemote coinrateSet = MXServer.getMXServer().getMboSet("COINRATE", MXServer.getMXServer().getSystemUserInfo());

                // 获取当前日期
                LocalDate currentDate = LocalDate.now();
                // 获取当前年份
                int currentYear = Year.now().getValue();
                // 获取当前年月
                YearMonth currentYearMonth = YearMonth.from(currentDate);
                // 获取当前月份
                int currentMonth = currentYearMonth.getMonthValue();

                for(int i=0;i<siteSet.count();i++){
                    MboRemote siteMbo=siteSet.getMbo(i);
                    String siteid=siteMbo.getString("SITEID");
                    String orgid=siteMbo.getString("ORGID");
                    //取物资库存中存在报表配置表中的物料
                    String udkcSql="MATNR IN(SELECT ITEMNUM FROM UDITEMCFG WHERE ORGID='"+orgid+"') AND SITEID='"+siteid+"' ";
                    udklSet.setWhere(udkcSql);
                    udklSet.reset();
                    if(null!=udklSet && !udklSet.isEmpty()){
                        for(int j=0;j<udklSet.count();j++){
                            MboRemote udklMbo=udklSet.getMbo(j);
                            String itemnum=udklMbo.getString("MATNR");
                            String currency=udklMbo.getString("WAERS");//币种
                            MboRemote udbbdzpkcMbo=udbbdzpkcSet.add();
                            udbbdzpkcMbo.setValue("ORGID", orgid, 2L);
                            udbbdzpkcMbo.setValue("SITEID", siteid, 2L);
                            udbbdzpkcMbo.setValue("ITEMNUM",itemnum,2L);//物料编号
                            udbbdzpkcMbo.setValue("LABST366",udklMbo.getDouble("LABST366"),2L);//366库存总数量
                            udbbdzpkcMbo.setValue("DMBTR366",udklMbo.getDouble("DMBTR366"),2L);//366天库存总金额
                            udbbdzpkcMbo.setValue("WAERS",currency,2L);//币种
                            udbbdzpkcMbo.setValue("NF",currentYear,2L);//年
                            udbbdzpkcMbo.setValue("YF",currentMonth,2L);//月
                            //取部门类
                            uditemcfgSet.setWhere("ORGID='"+orgid+"' AND ITEMNUM='"+itemnum+"'");
                            uditemcfgSet.reset();
                            if(null!=uditemcfgSet && !uditemcfgSet.isEmpty()){
                                MboRemote uditemcfgMbo=uditemcfgSet.getMbo(0);
                                udbbdzpkcMbo.setValue("BML",uditemcfgMbo.getString("DEPTNUM"),2L);//部门类代码
                            }
                            //取美元费率
                            coinrateSet.setWhere("COINNUM='"+currency+"' AND NF='"+currentYear+"' AND YF='"+currentMonth+"' AND DHDMLX='TOUS' ");
                            coinrateSet.reset();
                            if(null!=coinrateSet && !coinrateSet.isEmpty()){
                                MboRemote coinrateMbo=coinrateSet.getMbo(0);
                                udbbdzpkcMbo.setValue("RATEUS",coinrateMbo.getString("AVGRATE"),2L);//美元汇率
                            }
                            udbbdzpkcMbo.getThisMboSet().save();
                            udbbdzpkcMbo.getThisMboSet().close();
                        }
                    }

                }
            }

        } catch (Exception e) {
            e.printStackTrace();
            e.getMessage();
            e.getCause();
        }finally {
            System.gc();
        }
    }
}
