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 UDBBKCZJBCronTask 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 udkcSet = MXServer.getMXServer().getMboSet("UDKC", MXServer.getMXServer().getSystemUserInfo());
                //报表库存中间表
                MboSetRemote udbbkczjbSet = MXServer.getMXServer().getMboSet("UDBBKCZJB", 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="ITEMNUM IN(SELECT ITEMNUM FROM UDITEMCFG WHERE ORGID='"+orgid+"') AND SITEID='"+siteid+"' ";
                    udkcSet.setWhere(udkcSql);
                    udkcSet.reset();
                    if(null!=udkcSet && !udkcSet.isEmpty()){
                        for(int j=0;j<udkcSet.count();j++){
                            MboRemote udkcMbo=udkcSet.getMbo(j);
                            String itemnum=udkcMbo.getString("ITEMNUM");
                            String currency=udkcMbo.getString("CURRENCY");//币种
                            MboRemote udbbkczjbMbo=udbbkczjbSet.add();
                            udbbkczjbMbo.setValue("ORGID", orgid, 2L);
                            udbbkczjbMbo.setValue("SITEID", siteid, 2L);
                            udbbkczjbMbo.setValue("ITEMNUM",itemnum,2L);//物料编号
                            udbbkczjbMbo.setValue("CURBALTOTAL",udkcMbo.getDouble("CURBALTOTAL"),2L);//数量
                            udbbkczjbMbo.setValue("CURRENCY",currency,2L);//币种
                            udbbkczjbMbo.setValue("UNITCOST",udkcMbo.getDouble("UNITCOST"),2L);//单价
                            udbbkczjbMbo.setValue("NF",currentYear,2L);//年
                            udbbkczjbMbo.setValue("YF",currentMonth,2L);//月
                            udbbkczjbMbo.setValue("KCJE",(udkcMbo.getDouble("CURBALTOTAL")*udkcMbo.getDouble("UNITCOST")),2L);//库存金额（本币）
                            //取部门类
                            uditemcfgSet.setWhere("ORGID='"+orgid+"' AND ITEMNUM='"+itemnum+"'");
                            uditemcfgSet.reset();
                            if(null!=uditemcfgSet && !uditemcfgSet.isEmpty()){
                                MboRemote uditemcfgMbo=uditemcfgSet.getMbo(0);
                                udbbkczjbMbo.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);
                                udbbkczjbMbo.setValue("RATEUS",coinrateMbo.getString("AVGRATE"),2L);//美元汇率
                            }
                            udbbkczjbMbo.getThisMboSet().save();
                            udbbkczjbMbo.getThisMboSet().close();
                        }
                    }

                }
            }

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