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;
import java.util.Date;

/**
 * 备件管理报表 定时任务类
 * 每月执行一次
 *
 */
public class BMCronTask extends SimpleCronTask {

    @Override
    public void cronAction() {

        try {
            //物资出入库明细表
            MboSetRemote udwlcrkSet = MXServer.getMXServer().getMboSet("UDWLCRK", MXServer.getMXServer().getSystemUserInfo());
            MboSetRemote udwlcrkSet2 = MXServer.getMXServer().getMboSet("UDWLCRK", MXServer.getMXServer().getSystemUserInfo());
            //备件指标定时任务表
            MboSetRemote udbmtaskSet = MXServer.getMXServer().getMboSet("UDBMTASK", MXServer.getMXServer().getSystemUserInfo());
            //报表统计组织结构配置表
            MboSetRemote udosbcfgidSet = MXServer.getMXServer().getMboSet("UDOSBCFG", MXServer.getMXServer().getSystemUserInfo());
            //库存表
            MboSetRemote udkcSet = MXServer.getMXServer().getMboSet("UDKC", MXServer.getMXServer().getSystemUserInfo());
            //报表统计备件配置表
            MboSetRemote uditemcfgSet = MXServer.getMXServer().getMboSet("UDITEMCFG", MXServer.getMXServer().getSystemUserInfo());
            //国内仓单价表
            MboSetRemote udgncjgSet = MXServer.getMXServer().getMboSet("UDGNCJG", MXServer.getMXServer().getSystemUserInfo());
            //领料单明细表
            MboSetRemote udlldlineSet = MXServer.getMXServer().getMboSet("UDLLDLINE", MXServer.getMXServer().getSystemUserInfo());
            //物料金额视图表
            MboSetRemote udbbwljeSet = MXServer.getMXServer().getMboSet("UDBBWLJE", MXServer.getMXServer().getSystemUserInfo());
            //呆滞品库存金额
            MboSetRemote uddzkcjeSet = MXServer.getMXServer().getMboSet("UDBBDZPKC", MXServer.getMXServer().getSystemUserInfo());
            //库存金额
            MboSetRemote udkcjeSet = MXServer.getMXServer().getMboSet("UDKC", MXServer.getMXServer().getSystemUserInfo());
            //物料单价表
            MboSetRemote udwldjSet = MXServer.getMXServer().getMboSet("UDGNCJG", MXServer.getMXServer().getSystemUserInfo());
            //库存中间表
            MboSetRemote udbbkczjbSet = MXServer.getMXServer().getMboSet("UDBBKCZJB", MXServer.getMXServer().getSystemUserInfo());
            //汇率表
            MboSetRemote coinrateSet = MXServer.getMXServer().getMboSet("COINRATE", MXServer.getMXServer().getSystemUserInfo());

            // 获取当前日期
            LocalDate currentDate = LocalDate.now();
            Date curdate=new Date();
            // 获取当前年份
            int currentYear = Year.now().getValue();
            // 获取当前年月
            YearMonth currentYearMonth = YearMonth.from(currentDate);
            // 获取当前月份
            int currentMonth = currentYearMonth.getMonthValue();
//            String sysdate="to_date('2024-01-31', 'yyyy-MM-dd')";
            String sysdate="SYSDATE";
            //配置的各工厂
            udosbcfgidSet.setWhere("UDOSBCFGID IN(SELECT MAX(UDOSBCFGID) FROM UDOSBCFG GROUP BY SITEID)  ");
            udosbcfgidSet.reset();
            if(null!=udosbcfgidSet && !udosbcfgidSet.isEmpty()) {
                //货币代码
                String coinnum="";
                double avgrate=0;
                for (int i = 0; i < udosbcfgidSet.count(); i++) {
                    MboRemote udosbcfgidMbo = udosbcfgidSet.getMbo(i);
                    String orgid = udosbcfgidMbo.getString("ORGID");
                    String siteid = udosbcfgidMbo.getString("SITEID");
                    if("GF03".equalsIgnoreCase(siteid)){//1.加纳陶瓷
                        coinnum="GHS";
                    }
                    if("GF08".equalsIgnoreCase(siteid)){//2.加纳陶瓷
                        coinnum="GHS";
                    }
                    if("GF02".equalsIgnoreCase(siteid)){//3.加纳五金
                        coinnum="GHS";
                    }
                    if("GF51".equalsIgnoreCase(siteid)){//4.加纳卫品
                        coinnum="GHS";
                    }
                    if("KF51".equalsIgnoreCase(siteid)){//5.肯尼亚卫品
                        coinnum="KES";
                    }
                    if("KF61".equalsIgnoreCase(siteid)){//6.肯尼亚陶瓷
                        coinnum="KES";
                    }
                    if("TF51".equalsIgnoreCase(siteid)){//7.坦桑卫品
                        coinnum="TZS";
                    }
                    if("TF01".equalsIgnoreCase(siteid)){//8.坦桑洗衣粉
                        coinnum="TZS";
                    }
                    if("CM61".equalsIgnoreCase(siteid)){//9.喀麦隆陶瓷厂
                        coinnum="XAF";
                    }
                    String coinStr="DHDMLX='TOUS' AND COINNUM='"+coinnum+"' AND NF='"+currentYear+"' AND YF='"+currentMonth+"'";
                    coinrateSet.setWhere(coinStr);
                    coinrateSet.reset();
                    if(null!=coinrateSet && !coinrateSet.isEmpty() && coinrateSet.count()>0){
                        avgrate=coinrateSet.getMbo(0).getDouble("AVGRATE");//月均汇率
                    }

                    //备件周转率
                    try{
                        //取报表备件配置表 物料
                        String qdnStr="UDITEMCFGID IN(SELECT MAX(UDITEMCFGID)  FROM UDITEMCFG WHERE ORGID='"+orgid+"' AND ISACTIVE='Y' GROUP BY ITEMNUM) AND ORGID='"+orgid+"' ";
                        uditemcfgSet.setWhere(qdnStr);
                        uditemcfgSet.reset();
                        if(null!=uditemcfgSet && !uditemcfgSet.isEmpty()){
                            for(int j=0;j<uditemcfgSet.count();j++){
                                MboRemote udwlcrkMbo=uditemcfgSet.getMbo(j);
                                String itemnum=udwlcrkMbo.getString("ITEMNUM");
                                try{
                                    //期段内物资累计出库量 = Σ期段内所有出库数量。
                                    String itStr="CREATETIME >= TRUNC("+sysdate+", 'MONTH') AND CREATETIME < ADD_MONTHS(TRUNC("+sysdate+", 'MONTH'), 1) AND ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND MATERIALNO='"+itemnum+"' and OVERSEAWHSINNO is null AND QUANTITY IS NOT null ";
                                    udwlcrkSet2.setWhere(itStr);
                                    udwlcrkSet2.reset();
                                    double cksl=0;//期段内物资累计出库量 = Σ期段内所有出库数量。
                                    if(null!=udwlcrkSet2 && !udwlcrkSet2.isEmpty() && udwlcrkSet2.count()>0){
                                        for(int k=0;k<udwlcrkSet2.count();k++){
                                            cksl=cksl+Double.valueOf(udwlcrkSet2.getMbo(k).getString("QUANTITY"));
                                        }
                                    }
                                    //月平均库存 = （月初库存数量 + 月末库存数量）/ 2
                                    double kcsl_ym=0;//月末库存数量
                                    String kcStr="ITEMNUM='"+itemnum+"' AND SITEID='"+siteid+"' AND NF='"+currentYear+"' AND YF='"+currentMonth+"'";
                                    udbbkczjbSet.setWhere(kcStr);
                                    udbbkczjbSet.reset();
                                    if(null!=udbbkczjbSet && !udbbkczjbSet.isEmpty() && udbbkczjbSet.count()>0){
                                        kcsl_ym=udbbkczjbSet.sum("CURBALTOTAL");
                                    }
                                    double kcsl_yc=0;//月初库存数量
                                    String kcycStr="ITEMNUM='"+itemnum+"' AND SITEID='"+siteid+"' AND NF='"+currentYear+"' AND YF='"+(currentMonth-1)+"'";
                                    udbbkczjbSet.setWhere(kcycStr);
                                    udbbkczjbSet.reset();
                                    if(null!=udbbkczjbSet && !udbbkczjbSet.isEmpty() && udbbkczjbSet.count()>0){
                                        kcsl_yc=udbbkczjbSet.sum("CURBALTOTAL");
                                    }
                                    //月平均库存
                                    double ypjkc=(kcsl_yc+kcsl_ym)/2;
                                    //周转率 = 期段内物资累计出库量 / 期段内平均库存
                                    double zzl=0;
                                    //期段内平均库存 = Σ每月平均库存 / 月份
                                    MboSetRemote udbmtSet2=udosbcfgidMbo.getMboSet("$UDBMTASK2", "UDBMTASK", "YEAR='"+currentYear+"' AND ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND UDBTYPE='SPTR' AND ITEMNUM='"+itemnum+"'");
                                    if(null!=udbmtSet2 && !udbmtSet2.isEmpty() && udbmtSet2.count()>0){
                                        //月平均库存 = （月初库存数量 + 月末库存数量）/ 2
                                        double hqckc=udbmtSet2.sum("QCTOTAL")+kcsl_yc;
                                        double hqmkc=udbmtSet2.sum("QMTOTAL")+kcsl_yc;
                                        double qdlpjkc=((hqckc+hqmkc)/2)/currentMonth;//期段内平均库存
                                        if(qdlpjkc>0){
                                            zzl=cksl/qdlpjkc;
                                        }
                                    }else{
                                        double qdlpjkcSy=ypjkc/currentMonth;//期段内平均库存
                                        if(qdlpjkcSy>0){
                                            zzl=cksl/qdlpjkcSy;
                                        }
                                    }
                                    MboRemote udbmtaskMbo=udbmtaskSet.add();
                                    udbmtaskMbo.setValue("ITEMNUM", itemnum,2L);
                                    udbmtaskMbo.setValue("ORGID", orgid,2L);
                                    udbmtaskMbo.setValue("SITEID", siteid,2L);
                                    udbmtaskMbo.setValue("YEAR", currentYear+"",2L);
                                    udbmtaskMbo.setValue("MONTH", currentMonth+"",2L);
                                    udbmtaskMbo.setValue("CREATEDATE", curdate,2L);
                                    udbmtaskMbo.setValue("CKTOTAL", cksl,2L);//出库数量
                                    udbmtaskMbo.setValue("QMTOTAL", kcsl_ym,2L);//期末数量
                                    udbmtaskMbo.setValue("QCTOTAL", kcsl_yc,2L);//期初数量
                                    udbmtaskMbo.setValue("ZZL", zzl,2L);//周转率
                                    udbmtaskMbo.setValue("UDBTYPE", "SPTR",2L);
                                    udbmtaskMbo.getThisMboSet().save();
                                    udbmtaskMbo.getThisMboSet().close();
                                }catch (Exception e){
                                    e.printStackTrace();
                                    e.getMessage();
                                    e.getCause();
                                }
                            }
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                        e.getMessage();
                        e.getCause();
                    }

                    //备件仓库资金周转率
                    try{
                        //备件库存资金周转率=期间内仓库发出物资价值总额/平均库存占用的金额
                        //期间内仓库发出物资价值总额
                        String qjwzzeStr="ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND PARENTID in(SELECT UDLLDID FROM UDLLD WHERE ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND STATUSDATE >= TRUNC("+sysdate+", 'MONTH') AND STATUSDATE < ADD_MONTHS(TRUNC("+sysdate+", 'MONTH'), 1) AND STATUS='COMP' ) AND ITEMNUM  in(SELECT ITEMNUM FROM UDITEMCFG WHERE ORGID='"+orgid+"' AND ISACTIVE='Y' ) ";
                        udlldlineSet.setWhere(qjwzzeStr);
                        udlldlineSet.reset();
                        double qjnzje=0;//期间内仓库发出物资价值总额
                        if(null!=udlldlineSet && !udlldlineSet.isEmpty() && udlldlineSet.count()>0){
                            for(int qj=0;qj<udlldlineSet.count();qj++){
                                if(null!=udlldlineSet.getMbo(qj).getString("DMBTR") && !"".equalsIgnoreCase(udlldlineSet.getMbo(qj).getString("DMBTR"))){
                                    qjnzje=qjnzje+Double.valueOf(udlldlineSet.getMbo(qj).getString("DMBTR"));
                                }
                            }

                            //平均库存占用的金额=（上个月的库存金额（期初）+本月的库存金额（期末））/2
                            //本月的库存金额（期末）
                            String kcbyStr="SITEID='"+siteid+"' AND NF='"+currentYear+"' AND YF='"+currentMonth+"' AND ITEMNUM IN(SELECT ITEMNUM FROM UDITEMCFG WHERE ORGID='"+orgid+"' AND ISACTIVE='Y')";
                            udbbkczjbSet.setWhere(kcbyStr);
                            udbbkczjbSet.reset();
                            double bykcje=0;
                            if(null!=udbbkczjbSet && !udbbkczjbSet.isEmpty() && udbbkczjbSet.count()>0){
                                bykcje=udbbkczjbSet.sum("KCJE");
                            }
                            //上个月的库存金额（期初）
                            String kcsyStr="SITEID='"+siteid+"' AND NF='"+currentYear+"' AND YF='"+(currentMonth-1)+"' AND ITEMNUM IN(SELECT ITEMNUM FROM UDITEMCFG WHERE ORGID='"+orgid+"' AND ISACTIVE='Y')";
                            udbbkczjbSet.setWhere(kcsyStr);
                            udbbkczjbSet.reset();
                            double sykcje=0;
                            if(null!=udbbkczjbSet && !udbbkczjbSet.isEmpty() && udbbkczjbSet.count()>0){
                                sykcje=udbbkczjbSet.sum("KCJE");
                            }
                            double bjzjzzl=qjnzje/((bykcje+sykcje)/2);//备件库存资金周转率
                            MboRemote udbmtaskMbo=udbmtaskSet.add();
                            udbmtaskMbo.setValue("ORGID", orgid,2L);
                            udbmtaskMbo.setValue("SITEID", siteid,2L);
                            udbmtaskMbo.setValue("YEAR", currentYear+"",2L);
                            udbmtaskMbo.setValue("MONTH", currentMonth+"",2L);
                            udbmtaskMbo.setValue("CREATEDATE", curdate,2L);
                            udbmtaskMbo.setValue("QMTOTAL", bykcje,2L);//期末
                            udbmtaskMbo.setValue("QCTOTAL", sykcje,2L);//期初
                            udbmtaskMbo.setValue("ZZL", bjzjzzl,2L);//周转率
                            //今年平均备件仓库资金周转率
                            MboSetRemote ySumjnpjzjzzlSet=udosbcfgidMbo.getMboSet("$UDBMTASK", "UDBMTASK", "ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND YEAR='"+currentYear+"' AND UDBTYPE='CTROSPW'");
                            double ypjzjzzl=(ySumjnpjzjzzlSet.sum("ZZL")+bjzjzzl)/currentMonth;
                            //去年平均备件仓库资金周转率
                            double ySumQnpjzjzzl=udosbcfgidMbo.getMboSet("$UDBMTASK", "UDBMTASK", "ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND YEAR='"+(currentYear-1)+"' AND UDBTYPE='CTROSPW'").sum("YTOTALCOST");
                            udbmtaskMbo.setValue("YTOTALCOST", ypjzjzzl,2L);//今年平均备件仓库资金周转率
                            udbmtaskMbo.setValue("LTOTALCOST", ySumQnpjzjzzl,2L);//去年平均备件仓库资金周转率
                            udbmtaskMbo.setValue("UDBTYPE", "CTROSPW",2L);
                            udbmtaskMbo.getThisMboSet().save();
                            udbmtaskMbo.getThisMboSet().close();
                        }
                    }catch (Exception e){
                        e.printStackTrace();
                        e.getMessage();
                        e.getCause();
                    }

                    //取报表备件配置表 车间 / 202405提出改为部门类
                    try{
                        //取报表备件配置表 车间
                        String cjStr="UDITEMCFGID IN(SELECT MAX(UDITEMCFGID)  FROM UDITEMCFG WHERE ORGID='"+orgid+"' AND ISACTIVE='Y'  AND DEPTNUM IS NOT NULL  GROUP BY DEPTNUM) AND ORGID='"+orgid+"' ";
                        uditemcfgSet.setWhere(cjStr);
                        uditemcfgSet.reset();
                        if(null!=uditemcfgSet && !uditemcfgSet.isEmpty()) {
                            for (int h = 0; h < uditemcfgSet.count(); h++) {
                                MboRemote udwlcrkMbo = uditemcfgSet.getMbo(h);
                                String deptnum = udwlcrkMbo.getString("DEPTNUM");//部门类

                                //备件库存金额统计
                                try{
                                    //备件库存金额统计 本月份库存金额 = 该工厂车间下该月份的库存金额合计
                                    String wljeStr="SITEID='"+siteid+"' AND NF='"+currentYear+"' AND YF='"+currentMonth+"' AND BML='"+deptnum+"' AND ITEMNUM IN(SELECT ITEMNUM FROM UDITEMCFG WHERE ORGID='"+orgid+"' AND ISACTIVE='Y')";
                                    udbbkczjbSet.setWhere(wljeStr);
                                    udbbkczjbSet.reset();
                                    double bykcje=0;//本月份库存金额 = 该工厂车间下该月份的库存金额合计
                                    if(null!=udbbkczjbSet && avgrate>0){
                                        bykcje=udbbkczjbSet.sum("KCJE")/avgrate;
                                    }
                                    MboRemote udbmtaskMbo=udbmtaskSet.add();
                                    udbmtaskMbo.setValue("ORGID", orgid,2L);
                                    udbmtaskMbo.setValue("SITEID", siteid,2L);
                                    udbmtaskMbo.setValue("DEPTNUM", deptnum,2L);
                                    udbmtaskMbo.setValue("YEAR", currentYear+"",2L);
                                    udbmtaskMbo.setValue("MONTH", currentMonth+"",2L);
                                    udbmtaskMbo.setValue("CREATEDATE", curdate,2L);
                                    udbmtaskMbo.setValue("TOTALCOST", bykcje,2L);//备件库存金额
                                    //今年平均备件库存金额
                                    MboSetRemote ySumjnpjjeSet=udosbcfgidMbo.getMboSet("$UDBMTASK", "UDBMTASK", "ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND DEPTNUM='"+deptnum+"' AND YEAR='"+currentYear+"' AND UDBTYPE='IASOSP'");
                                    double ypjje=(ySumjnpjjeSet.sum("TOTALCOST")+bykcje)/currentMonth;
                                    //去年平均备件库存金额
                                    double ySumQnpjje=udosbcfgidMbo.getMboSet("$UDBMTASK", "UDBMTASK", "ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND DEPTNUM='"+deptnum+"' AND YEAR='"+(currentYear-1)+"' AND UDBTYPE='IASOSP'").sum("YTOTALCOST");
                                    udbmtaskMbo.setValue("YTOTALCOST", ypjje,2L);//今年平均备件库存金额
                                    udbmtaskMbo.setValue("LTOTALCOST", ySumQnpjje,2L);//去年平均备件库存金额
                                    udbmtaskMbo.setValue("UDBTYPE", "IASOSP",2L);//类型
                                    udbmtaskMbo.getThisMboSet().save();
                                    udbmtaskMbo.getThisMboSet().close();
                                }catch (Exception e){
                                    e.printStackTrace();
                                    e.getMessage();
                                    e.getCause();
                                }

                                //备件消耗统计
                                try{
                                    //本月度备件消耗金额=该工厂车间下的所有备件消耗金额合计（按领料单算）
                                    String lldStr="ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND DMBTR IS NOT null AND PARENTID in(SELECT UDLLDID FROM UDLLD WHERE STATUS='COMP' AND ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND WORKSHOP in(SELECT DEPTNUM FROM DEPT WHERE DEPTTYPE='"+deptnum+"' AND SITEID='"+siteid+"' ) AND STATUSDATE >= TRUNC("+sysdate+", 'MONTH') AND STATUSDATE < ADD_MONTHS(TRUNC("+sysdate+", 'MONTH'), 1))";
                                    udlldlineSet.setWhere(lldStr);
                                    udlldlineSet.reset();
                                    double bybjxhje=0;//本月度备件消耗金额
                                    if(null!=udlldlineSet && !udlldlineSet.isEmpty() && udlldlineSet.count()>0 && avgrate>0){
                                        for(int b=0;b<udlldlineSet.count();b++){
                                            bybjxhje=bybjxhje+Double.valueOf(udlldlineSet.getMbo(b).getString("DMBTR"));
                                        }
                                        bybjxhje=bybjxhje/avgrate;
                                    }
                                    MboRemote udbmtaskMbo=udbmtaskSet.add();
                                    udbmtaskMbo.setValue("ORGID", orgid,2L);
                                    udbmtaskMbo.setValue("SITEID", siteid,2L);
                                    udbmtaskMbo.setValue("DEPTNUM", deptnum,2L);
                                    udbmtaskMbo.setValue("YEAR", currentYear+"",2L);
                                    udbmtaskMbo.setValue("MONTH", currentMonth+"",2L);
                                    udbmtaskMbo.setValue("CREATEDATE", curdate,2L);
                                    udbmtaskMbo.setValue("TOTALCOST", bybjxhje,2L);//备件消耗金额
                                    //今年平均备件消耗金额
                                    MboSetRemote ySumjnpjBJSet=udosbcfgidMbo.getMboSet("$UDBMTASK", "UDBMTASK", "ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND DEPTNUM='"+deptnum+"' AND YEAR='"+currentYear+"' AND UDBTYPE='TAOSPCTM'");
                                    double ypjBJ=(ySumjnpjBJSet.sum("TOTALCOST")+bybjxhje)/currentMonth;
                                    //去年平均备件消耗金额
                                    double ySumQnpjBJ=udosbcfgidMbo.getMboSet("$UDBMTASK", "UDBMTASK", "ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND DEPTNUM='"+deptnum+"' AND YEAR='"+(currentYear-1)+"' AND UDBTYPE='TAOSPCTM'").sum("YTOTALCOST");
                                    udbmtaskMbo.setValue("YTOTALCOST", ypjBJ,2L); //今年平均备件消耗金额
                                    udbmtaskMbo.setValue("LTOTALCOST", ySumQnpjBJ,2L); //去年平均备件消耗金额
                                    udbmtaskMbo.setValue("UDBTYPE", "TAOSPCTM",2L);//类型
                                    udbmtaskMbo.getThisMboSet().save();
                                    udbmtaskMbo.getThisMboSet().close();
                                }catch (Exception e){
                                    e.printStackTrace();
                                    e.getMessage();
                                    e.getCause();
                                }

                                //呆滞库存金额统计
                                try{
                                    //当前
                                    String wljeStr="SITEID='"+siteid+"' AND NF='"+currentYear+"' AND YF='"+currentMonth+"' AND BML='"+deptnum+"' AND ITEMNUM IN(SELECT ITEMNUM FROM UDITEMCFG WHERE ORGID='"+orgid+"' AND ISACTIVE='Y') ";
                                    udbbkczjbSet.setWhere(wljeStr);
                                    udbbkczjbSet.reset();
                                    double kcje=0;//库存金额 = 该工厂下该月份的库存金额合计。
                                    if(null!=udbbkczjbSet && avgrate>0){
                                        kcje=udbbkczjbSet.sum("KCJE")/avgrate;
                                    }
                                    //库存占比 = 呆滞品库存金额/库存金额
                                    String dzkcStr=" SITEID='"+siteid+"' AND NF='"+currentYear+"' AND YF='"+currentMonth+"' AND BML='"+deptnum+"' AND ITEMNUM IN(SELECT ITEMNUM FROM UDITEMCFG WHERE ORGID='"+orgid+"' AND ISACTIVE='Y') ";
                                    uddzkcjeSet.setWhere(dzkcStr);
                                    uddzkcjeSet.reset();
                                    double dzkcje=0;//呆滞品库存金额
                                    if(null!=uddzkcjeSet && !uddzkcjeSet.isEmpty() && avgrate>0){
                                        dzkcje= uddzkcjeSet.sum("DMBTR366")/avgrate;
                                    }
                                    double kczb=0;//库存占比
                                    if(kcje>0){
                                        kczb=(dzkcje/kcje)*100;
                                    }
                                    MboRemote udbmtaskMbo=udbmtaskSet.add();
                                    udbmtaskMbo.setValue("ORGID", orgid,2L);
                                    udbmtaskMbo.setValue("SITEID", siteid,2L);
                                    udbmtaskMbo.setValue("DEPTNUM", deptnum,2L);
                                    udbmtaskMbo.setValue("YEAR", currentYear+"",2L);
                                    udbmtaskMbo.setValue("MONTH", currentMonth+"",2L);
                                    udbmtaskMbo.setValue("CREATEDATE", curdate,2L);
                                    udbmtaskMbo.setValue("TOTALCOST", kcje,2L);//库存金额
                                    udbmtaskMbo.setValue("UNITCOST", dzkcje, 2L);//呆滞品库存金额
                                    udbmtaskMbo.setValue("ZZL", kczb, 2L);//库存占比

                                    //今年平均呆滞品库存金额
                                    MboSetRemote ySumjnpjBJSet=udosbcfgidMbo.getMboSet("$UDBMTASK", "UDBMTASK", "ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND DEPTNUM='"+deptnum+"' AND YEAR='"+currentYear+"' AND UDBTYPE='SOSIA'");
                                    double ypjDzpkcje=(ySumjnpjBJSet.sum("UNITCOST")+dzkcje)/currentMonth;
                                    //去年平均呆滞品库存金额
                                    double ySumQnDzpkcje=udosbcfgidMbo.getMboSet("$UDBMTASK", "UDBMTASK", "ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND DEPTNUM='"+deptnum+"' AND YEAR='"+(currentYear-1)+"' AND UDBTYPE='SOSIA'").sum("YTOTALCOST");
                                    //今年平均库存占比
                                    MboSetRemote ySumjnpjkczbSet=udosbcfgidMbo.getMboSet("$UDBMTASK", "UDBMTASK", "ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND DEPTNUM='"+deptnum+"' AND YEAR='"+currentYear+"' AND UDBTYPE='SOSIA'");
                                    double kcjeLj=0;
                                    double dzkcjeLj=0;
                                    if(null!=ySumjnpjkczbSet){
                                        kcjeLj=ySumjnpjkczbSet.sum("TOTALCOST");;//累计库存金额
                                        dzkcjeLj=ySumjnpjkczbSet.sum("UNITCOST");//累计呆滞品库存金额
                                    }
                                    double yRkczb=0;
                                    if((kcjeLj+kcje)>0){
                                        yRkczb=((dzkcje+dzkcjeLj)/(kcjeLj+kcje))*100;
                                    }
                                    //去年平均库存占比
                                    double ySumQnkczb=udosbcfgidMbo.getMboSet("$UDBMTASK", "UDBMTASK", "ORGID='"+orgid+"' AND SITEID='"+siteid+"' AND DEPTNUM='"+deptnum+"' AND YEAR='"+(currentYear-1)+"' AND UDBTYPE='SOSIA'").sum("YZZL");
                                    udbmtaskMbo.setValue("YTOTALCOST", ypjDzpkcje,2L); //今年平均呆滞品库存金额
                                    udbmtaskMbo.setValue("LTOTALCOST", ySumQnDzpkcje,2L); //去年平均呆滞品库存金额
                                    udbmtaskMbo.setValue("UDBTYPE", "SOSIA",2L);//类型
                                    udbmtaskMbo.setValue("YZZL", yRkczb,2L);//今年平均库存占比
                                    udbmtaskMbo.setValue("LYZZL", ySumQnkczb,2L);//去年平均库存占比
                                    udbmtaskMbo.getThisMboSet().save();
                                    udbmtaskMbo.getThisMboSet().close();

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

                            }
                        }

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

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