欢迎光临
我们一直在努力

datascope叫什么公司统计报表统计全年

前言:这是公司的统计需求,需要按全年维度来进行统计

由于统计数据在分布式调度中心做了按月统计和按日统计,并且分别入库到了不同的表里,那么我们只需要根据这两张表来进行统计即可,犹豫数据量过大,所以前11个月的数据需要按照月统计表来进行统计,第十二个月数据不统计当天数据并按日统计表统计。

OK。到这里,我们就可以写查询sql

 SELECT
        t.dict_value paySources,
        IFNULL(c.transcount, 0) transCount,
        IFNULL(c.transfee, 0.0)  transFee
        FROM
        sys_dict_data t
        LEFT JOIN
        (SELECT
        CASE a.paysources WHEN '7' THEN 'ls'
        WHEN '5' THEN 'hs'
        WHEN '0' THEN 'wechat'
        WHEN '0' THEN 'alipay'
        WHEN '3' THEN 'wowo'
        WHEN '6' THEN 'unionpay'
        WHEN '4' THEN 'wft'
        WHEN '8' THEN 'fubei'
        WHEN '9' THEN 'saobei'
        WHEN '10' THEN 'ys'
        WHEN '11' THEN 'tl'
        WHEN '12' THEN 'nyyh'
        WHEN '13' THEN 'msl'
        WHEN '14' THEN 'sxf'
        WHEN '15' THEN 'ebuy'
        WHEN '16' THEN 'miya'
        WHEN '17' THEN 'ums'
        END  AS paysources,
        SUM(a.transcount) transcount,
        SUM(a.transfee) transfee
        FROM
        business_monthtrans_data a
        <where>
            <if test="beginTime != null and endTime != null">
                <!-- 开始结束时间检索 -->
                AND a.transtime BETWEEN #{beginTime} AND #{endTime}
            </if>
        </where>
        GROUP BY a.paysources) c
        ON t.dict_value  = c.paysources
        WHERE t.dict_type = 'pay_source'
        ORDER BY t.dict_sort

这是我的查询sql,一共有两个sql,我这里只写一个,上文说到,查询的是月统计表和日统计表,犹豫两张表里的字段是一样的,所以我们只放了一条sql上来,另一条换一个表名罢了!!

那么接下来看一下查询到的数据

现在问题来了!  两张表的数据都是上图的这个样式,而我现在需要返回前11个月的数据+12月份的数据的前一天(当天不纳入统计),怎样才能做到?

首先来看看我的代码

 @Override
    @DataScope(tableAlias = "t1")
    public String queryBusinessYearTransDataTra(BusinessDaytransData businessDaytransData)

        for (int i = 0; i < businessByEffectiveLastMoth.size(); i++)

        BigDecimal count  = new BigDecimal(0);
        //求总笔数
        Iterator iter = hashMap.keySet().iterator();
        while (iter.hasNext()) 
        list.add(businessValue);
        list.add(hashMap);
        //对两个集合 求和
        return JSON.toJSONString(list);

 首先我遍历了月统计表的list,从里面将查出来的值分别取出(很明显),然后我new hashMap

和一个 BusinessValue 对象。hashMap的Key用来存他们相同的的字段,也就是paySources支付通道,而value则用来存储BusinessValue对象 。来看一下BusinessValue的属性。

package com.ruipos.transaction.domain;

import lombok.Data;

import java.math.BigDecimal;

@Data
public class BusinessValue
{
  private BigDecimal transfee;
  private BigDecimal transcount;
  private BigDecimal transcountSum; //总笔数

}

回过头来,此时将月统计表的数据存到了map里,然后再遍历日统计表,来取里面的数据,日统计表循环里有这么一行代码非常有意思:上面我们说了,他们的key是一样的,于是我把日统计表里取到的paySourceslast做为条件放进了月统计表里的hashMap的key里

BusinessValue  value = hashMap.get(paySourceslast);

然后去取里面的value值,对它们相加再塞回value里,最终hashmap的值就会是这样的

 key它还是那个key,但是里面的值已经相加了。

最终遍历hashmap,去取transcout(总笔数) ,并给它累加,一起放到一个List当中通过

JSON.toJSONString(list)转换成一个字符串,返回给了前端。

兄弟们!!如果你们有更秒的办法,请在留言区说出你的答案!!!!!!


赞(0)
未经允许不得转载:上海聚慕医疗器械有限公司 » datascope叫什么公司统计报表统计全年

登录

找回密码

注册