/** * @param context * @param key * @param tenant * @return */ private static Map<GUID, ReportResult> getYearDoubleMapPurchase( Context context, ReportCommonKey key, Tenant tenant) { QuerySqlBuilder qb = new QuerySqlBuilder(context); qb.addTable("SA_REPORT_GOODS_BUY_DATE", "t"); qb.addArgs("comNo", qb.guid, tenant.getId()); qb.addEquals("t.tenantId", "@comNo"); String dateKey = null, dateValue = null; int year = 0; for (Condition con : key.getConditions()) { if ("month".toUpperCase().equals(con.getConditionColumn().toUpperCase())) { qb.addArgs("month", qb.INT, con.getValue()); year = Integer.parseInt((con.getValue() + "").substring(0, 4)); dateKey = "t.monthNo"; dateValue = "@month"; } else if ("season".toUpperCase().equals(con.getConditionColumn().toUpperCase())) { qb.addArgs("season", qb.INT, con.getValue()); year = Integer.parseInt((con.getValue() + "").substring(0, 4)); dateKey = "t.quarter"; dateValue = "@season"; } } qb.addLessThanOrEquals(dateKey, dateValue); qb.addArgs("year", qb.INT, year); qb.addEquals("t.yearNo", "@year"); qb.addColumn("t.goodsItemId", "id"); qb.addColumn("sum(t.ordAmount)", "ordAmount"); qb.addColumn("sum(t.ordCount)", "receiptAmount"); qb.addColumn("sum(t.rtnAmount)", "rtnAmount"); qb.addGroupBy("t.goodsItemId"); RecordSet rs = qb.getRecord(); Map<GUID, ReportResult> map = new HashMap<GUID, ReportResult>(); while (rs.next()) { GUID id = rs.getFields().get(0).getGUID(); ReportResult rr = new ReportResult(); rr.setTargetValue(GoodsItemEnum.PurchaseAmount_OfYear, rs.getFields().get(1).getDouble()); rr.setTargetValue(GoodsItemEnum.PurchaseCount_OfYear, rs.getFields().get(2).getDouble()); rr.setTargetValue( GoodsItemEnum.PurchaseReturnAmount_OfYear, rs.getFields().get(3).getDouble()); map.put(id, rr); } return map; }
/** * @param context * @param key * @param list */ @SuppressWarnings("unchecked") private static void purchaseProvider( Context context, ReportCommonKey key, List<ReportResult> list) { Tenant tenant = context.find(Tenant.class); QuerySqlBuilder qb = new QuerySqlBuilder(context); qb.addTable("SA_REPORT_GOODS_BUY_DATE", "t2"); qb.addArgs("comNo", qb.guid, tenant.getId()); qb.addEquals("t2.tenantId", "@comNo"); List<Enum> targets = key.getTargets(); qb.addColumn("t2.goodsItemId", "goodsItemId"); if (targets.indexOf(GoodsItemEnum.PurchaseAmount) >= 0) { qb.addColumn("sum(t2.ordAmount)", "ordAmounts"); } if (targets.indexOf(GoodsItemEnum.PurchaseCount) >= 0) { qb.addColumn("sum(t2.ordCount)", "ordCount2"); } if (targets.indexOf(GoodsItemEnum.PurchaseReturnAmount) >= 0) { qb.addColumn("sum(t2.rtnAmount)", "rtnAmounts"); } if (targets.indexOf(GoodsItemEnum.InStoreCount) >= 0) { qb.addColumn("sum(t2.outstoAmount)", "outstoAmount2"); } if (targets.indexOf(GoodsItemEnum.PayAmount) >= 0) { qb.addColumn("sum(t2.receiptAmount)", "receiptAmount2"); } Map<GUID, ReportResult> ymap = null; if (targets.indexOf(GoodsItemEnum.PurchaseAmount_OfYear) >= 0 || targets.indexOf(GoodsItemEnum.PurchaseCount_OfYear) >= 0 || targets.indexOf(GoodsItemEnum.PurchaseReturnAmount_OfYear) >= 0) { ymap = getYearDoubleMapPurchase(context, key, tenant); } for (Condition con : key.getConditions()) { if ("month".toUpperCase().equals(con.getConditionColumn().toUpperCase())) { qb.addArgs("month", qb.INT, con.getValue()); qb.addEquals("t2.monthNo", "@month"); } else if ("season".toUpperCase().equals(con.getConditionColumn().toUpperCase())) { qb.addArgs("season", qb.INT, con.getValue()); qb.addEquals("t2.quarter", "@season"); } else { } } qb.addGroupBy("t2.goodsItemId"); if (CheckIsNull.isNotEmpty(key.getOrderTarget()) && GoodsItemEnum.getTarget(key.getOrderTarget()) == GoodsItemEnum.PurchaseAmount) { String column = "ordAmounts"; if (key.isOrderDesc()) { column = column + " desc"; } qb.addOrderBy(column); } else if (CheckIsNull.isNotEmpty(key.getOrderTarget()) && GoodsItemEnum.getTarget(key.getOrderTarget()) == GoodsItemEnum.PurchaseReturnAmount) { String column = "rtnAmounts"; if (key.isOrderDesc()) { column = column + " desc"; } qb.addOrderBy(column); } RecordSet rs = null; if (key.getMaxCount() == 0) { rs = qb.getRecord(); } else { rs = qb.getRecordLimit(0, key.getMaxCount()); } while (rs.next()) { ReportResult rr = new ReportResult(); int index = 0; GUID goodsItemId = rs.getFields().get(index++).getGUID(); rr.setTargetValue(GoodsItemEnum.Id, goodsItemId); GoodsItem item = context.find(GoodsItem.class, goodsItemId); rr.setTargetValue(GoodsItemEnum.GoodsName, item.getGoodsName()); rr.setTargetValue(GoodsItemEnum.GoodsAttr, item.getPropertiesWithoutUnit()); rr.setTargetValue(GoodsItemEnum.GoodsUnit, item.getGoodsUnit()); if (targets.indexOf(GoodsItemEnum.PurchaseAmount) >= 0) { Object value = rs.getFields().get(index++).getObject(); rr.setTargetValue(GoodsItemEnum.PurchaseAmount, value); } if (targets.indexOf(GoodsItemEnum.PurchaseCount) >= 0) { Object value = rs.getFields().get(index++).getObject(); rr.setTargetValue(GoodsItemEnum.PurchaseCount, value); } if (targets.indexOf(GoodsItemEnum.PurchaseReturnAmount) >= 0) { Object value = rs.getFields().get(index++).getObject(); rr.setTargetValue(GoodsItemEnum.PurchaseReturnAmount, value); } if (targets.indexOf(GoodsItemEnum.InStoreCount) >= 0) { Object value = rs.getFields().get(index++).getObject(); rr.setTargetValue(GoodsItemEnum.InStoreCount, value); } if (targets.indexOf(GoodsItemEnum.PayAmount) >= 0) { Object value = rs.getFields().get(index++).getObject(); rr.setTargetValue(GoodsItemEnum.PayAmount, value); } if (targets.indexOf(GoodsItemEnum.PurchaseAmount_OfYear) >= 0 || targets.indexOf(GoodsItemEnum.PurchaseCount_OfYear) >= 0 || targets.indexOf(GoodsItemEnum.PurchaseReturnAmount_OfYear) >= 0) { ReportResult tt = ymap.get(goodsItemId); if (tt != null) { rr.setTargetValue( GoodsItemEnum.PurchaseAmount_OfYear, tt.getTargetValue(GoodsItemEnum.PurchaseAmount_OfYear)); rr.setTargetValue( GoodsItemEnum.PurchaseCount_OfYear, tt.getTargetValue(GoodsItemEnum.PurchaseCount_OfYear)); rr.setTargetValue( GoodsItemEnum.PurchaseReturnAmount_OfYear, tt.getTargetValue(GoodsItemEnum.PurchaseReturnAmount_OfYear)); } } list.add(rr); } }