苍穹多维数据库查询及保存数据(附Object转BigDecimal的工具类) - IShare

苍穹多维数据库查询及保存数据(附Object转BigDecimal的工具类)

官方合并报表在线文档中的方法不能正常使用,多维数据库的开发文档中的方法只能输出结果集,取度量值相当麻烦,故重写了一下官方的方法到MDDQuery

MathUtils

public class MathUtils {
        public static BigDecimal getBigDecimal(Object value ) {
            BigDecimal ret = null;
            if( value != null ) {
                if( value instanceof BigDecimal ) {
                    ret = (BigDecimal) value;
                } else if( value instanceof String ) {
                    ret = new BigDecimal( (String) value );
                } else if( value instanceof BigInteger ) {
                    ret = new BigDecimal( (BigInteger) value );
                } else if( value instanceof Number ) {
                    ret = new BigDecimal( ((Number)value).doubleValue() );
                } else {
                    throw new ClassCastException("Not possible to coerce ["+value+"] from class "+value.getClass()+" into a BigDecimal.");
                }
            }
            return ret;
        }
}

MDDConnection

public class MDDConnection {
    public static OlapConnection getConnection(String cubeName) {
        OlapConnectionStringBuilder strBuilder = new OlapConnectionStringBuilder();
        strBuilder.setProvider("kingdee.olap.Shrek");
        strBuilder.setDataSource("http://{{实际地址}}}/bos-olap-webserver/services/httpolap");
        if (!cubeName.isEmpty()) { //为空时,不设置initialCatalog值,用于判断cube是否存在
            strBuilder.setInitialCatalog(cubeName); // 设置即将连接或创建的Cube
        }
        OlapConnection olapConn = new OlapConnection(strBuilder.toString());
// 设置用户名及密码
        olapConn.setUserName("{{用户名}}");
        olapConn.setPassword("{{密码}}}");
        return olapConn;
    }
}

MDDQuery

public class MDDQuery{
    private static WatchLogger logger = BcmLogFactory.getWatchLogInstance(true, OlapServiceHelper.class);
    private static Log log = LogFactory.getLog(GetOlapDataOpPlugin.class);
    public static MDResultSet queryData(SQLBuilder sql) {
        if (sql.isCancel()) {
            return null;
        } else {
            sql.checkSelf();
            SelectCommandInfo queryInfo = new SelectCommandInfo();
            queryInfo.addDims(sql.getSelectField());
            queryInfo.addMeasures(sql.getMeasures());
            queryInfo.setExcludeDynamicCalcResult(sql.isExcludeDynaData());
            sql.getFilters().forEach((p) -> {
                queryInfo.addFilter((String)p.p1, (String[])p.p2);
            });
            if (sql.getTop() > 0) {
                queryInfo.setTop(sql.getTop());
            }

            OlapConnection conn = null;
            OlapDataReader cs = null;

            MDResultSet var85;
            try {
                //conn = getOlapConnection("conn","{{用户名}}","{{密码}}}");
                conn = MDDConnection.getConnection(sql.getCubecatalog());
                conn.Open();
                OlapCommand cmd = new OlapCommand(conn, queryInfo);
                cs = cmd.ExecuteReader();
               // cs = cmd.executeReader(cs.getMetadataBuilder());
                MDResultSet rs = new MDResultSet();
                CellSetResultSet set = new CellSetResultSet(sql.getCubecatalog(), cs, queryInfo, conn);
                set.setIncludeNull(sql.getTop() > 0 || sql.isIncludeNull());
                MemSpanTrace span = MemSpanTrace.create("olap", "query");
                Throwable var8 = null;

                try {
                    TraceSpan ts = Tracer.create("olap", "query");
                    Throwable var10 = null;

                    try {
                        Auditable audit = Audit.audit("olap_cost", new Object[]{"query", queryInfo});
                        Throwable var12 = null;

                        try {
                            if (Tracer.isTracing() && TraceConfig.isTypeEnable("olap")) {
                                ts.addTag("sql", queryInfo.toString());
                            }

                            ts.addTag("route", sql.getCubecatalog());
                            rs.populate(set);
                            ts.addTag("count", String.valueOf(rs.getCount()));
                        } catch (Throwable var77) {
                            var12 = var77;
                            throw var77;
                        } finally {
                            if (audit != null) {
                                if (var12 != null) {
                                    try {
                                        audit.close();
                                    } catch (Throwable var76) {
                                        var12.addSuppressed(var76);
                                    }
                                } else {
                                    audit.close();
                                }
                            }

                        }
                    } catch (Throwable var79) {
                        var10 = var79;
                        throw var79;
                    } finally {
                        if (ts != null) {
                            if (var10 != null) {
                                try {
                                    ts.close();
                                } catch (Throwable var75) {
                                    var10.addSuppressed(var75);
                                }
                            } else {
                                ts.close();
                            }
                        }

                    }
                } catch (Throwable var81) {
                    var8 = var81;
                    throw var81;
                } finally {
                    if (span != null) {
                        if (var8 != null) {
                            try {
                                span.close();
                            } catch (Throwable var74) {
                                var8.addSuppressed(var74);
                            }
                        } else {
                            span.close();
                        }
                    }

                }

                var85 = rs;
            } catch (Exception var83) {
                logger.error(var83);
                throw new MDQueryException(String.format(ResManager.loadKDString("olap 查询失败:%s", "OlapServiceHelper_3", "fi-bcm-business", new Object[0]), var83.getMessage()), var83);
            } finally {
                if (cs != null) {
                    cs.close();
                }

                if (conn != null) {
                    conn.Close();
                }

            }

            return var85;
        }
    } 
  public static BigDecimal get(String Entity, String Account, String BudgetPeriod, String Version, String Currency, String AuditTrail, String ChangeType, String DataType, String Metric, String project1, String ZCMC) {
        SQLBuilder sql = new SQLBuilder("{{体系编码}}}");//传入体系编码
        String[] dims = {"Entity", "Account", "BudgetPeriod", "Version", "Currency", "AuditTrail", "ChangeType", "DataType", "Metric", "project1", "ZCMC"};//维度名
        sql.addSelectField(dims);
        //设置维度成员过滤
        if (!Objects.equals(Entity, "")) {
            sql.addFilter("Entity", Entity);
        }
        if (!Objects.equals(Account, "")) {
            sql.addFilter("Account", Account);
        }
        if (!Objects.equals(BudgetPeriod, "")) {
            sql.addFilter("BudgetPeriod", BudgetPeriod);
        }
        if (!Objects.equals(Version, "")) {
            sql.addFilter("Version", Version);
        }
        if (!Objects.equals(Currency, "")) {
            sql.addFilter("Currency", Currency);
        }
        if (!Objects.equals(AuditTrail, "")) {
            sql.addFilter("AuditTrail", AuditTrail);
        }
        if (!Objects.equals(ChangeType, "")) {
            sql.addFilter("ChangeType", ChangeType);
        }
        if (!Objects.equals(DataType, "")) {
            sql.addFilter("DataType", DataType);
        }
        if (!Objects.equals(Metric, "")) {
            sql.addFilter("Metric", Metric);
        }
        if (!Objects.equals(project1, "")) {
            sql.addFilter("project1", project1);
        }
        if (!Objects.equals(ZCMC, "")) {
            sql.addFilter("ZCMC", ZCMC);
        }

        Map<Integer, Object> fmoney = new HashMap<>();
        //Map<Integer,String> org = new HashMap<>();
        MDResultSet rs = MDDQuery.queryData(sql);
        int i = 0;
        BigDecimal amount = new BigDecimal("0");
        while (rs.next()) {//遍历数据8
            i++;
            Object money = rs.getOriginalValue("FMONEY");//度量值
            fmoney.put(i, money.toString());
            amount = amount.add(MathUtils.getBigDecimal(fmoney.get(i)));//查出数据集的总和(不一定保险)
        }
        rs.close();
        return amount;
    }
    public static void set(BigDecimal amount,String Entity, String Account, String BudgetPeriod, String Version, String Currency, String AuditTrail, String ChangeType, String DataType, String Metric, String project1, String ZCMC){
        Map<String, Object> params = new HashMap<>();
        params.put("modelNumber", "zfbd001");
        params.put("datasetNumber", "default");
        List<Object[]> memberData = new ArrayList<>();
        params.put("dimensions", new String[]{"Entity", "Account", "BudgetPeriod", "Version", "Currency", "AuditTrail", "ChangeType", "DataType", "Metric", "project1", "ZCMC"});
        memberData.add(new Object[]{amount, Entity, Account, BudgetPeriod, Version, Currency, AuditTrail, ChangeType, DataType, Metric, project1, ZCMC});
        params.put("data", memberData);
        try {
            Object o = DispatchServiceHelper.invokeBizService("epm", "eb", "ShrekService", "saveData", new Object[]{params});
            log.info("o");
        } catch (Exception exception) {
            log.info(exception.getMessage());
        }
        memberData.clear();
    }

使用示例

BigDecimal yanfazibenhua = MDDQuery.get("","PL1205","FY2023.M12","V1","","","","","Money","","");
MDDQuery.set(yanfazibenhua, "106003000", "BS0416", "FY2023.M12", "V1", "CNY", "EntityInput", "CurrentPeriod", "YE01", "Money", "PRNone", "ZCNone");

1

无标签
打赏
评论区
头像
    头像
    slifanizwk
    2025年3月4日 20:15
    回复

    文章深入浅出,既有深度思考,又不乏广度覆盖,令人叹为观止。

    头像
    cyikacdxey
    2025年3月3日 08:40
    回复

    案例丰富,数据详实,论证扎实可信。

    头像
    auonzphjvl
    2025年3月2日 17:56
    回复

    每一个段落都紧密相连,逻辑清晰,展现了作者高超的写作技巧。

    头像
    noytkixeao
    2025年3月1日 12:24
    回复

    建议补充性能优化方案,增强实用性。

    头像
    yctweulkpi
    2025年3月1日 04:19
    回复

    内容的丰富性和深度让人仿佛置身于知识的海洋,受益匪浅。

文章目录