SpringJDBC 活跃 用户的行业分布 人数 || 统计每日"激活"用 || 每个行业的分布

/** 
 * Project Name:TranbPortal 
 * File Name:QuartzPersonIUCodeReportDaoImpl.java 
 * Package Name:com.tranb.reports.dao.impl 
 * Date:2016年6月1日上午11:01:13 
 * Copyright (c) 2016, lizhi1817@163.com All Rights Reserved 
 */  
package com.tranb.reports.dao.impl;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.ResultSetExtractor;

import net.sf.json.JSONObject;

import com.tranb.common.JSONPropertyRowMapper;
import com.tranb.common.MultiDataSourceDaoSupport;
import com.tranb.common.consts.DB;
import com.tranb.common.tools.DateUtils;

/**  
 *
 * @author : zhaoshuli
 * @createTime : 2016-04-26 上午11:13:42 
 * @version :  
 * @description : 
 *
 * */
public class QuartzPersonIUCodeReportDaoImpl extends MultiDataSourceDaoSupport{
    


    /**
     * 统计每日"激活"用户行业分布 人数
     * @param time
     *
     * @author : zhaoshuli
     * @param now 
     * @createTime : 2016-6-01
     */
    public void statisticsPersonIUCodeActivateByDaily(final long beginDate, final long now) {
        //获取user_account表激活日期为过滤条件的 uid
        String uaSql="SELECT uid  FROM user_account where activeTime BETWEEN ? and ? ";
        List<Integer> uidList = getJdbcTemplate(DB.JIU_TONG_USER).query(uaSql, new Object[]{beginDate,now},new ResultSetExtractor<List<Integer>>(){
            
            @Override
            public List<Integer> extractData(ResultSet rs) throws SQLException,
                    DataAccessException {
                 List<Integer> list = new ArrayList<Integer>();
                
                while(rs.next()){
                    list.add(rs.getInt("uid"));
                }
                
                return list;
            }
        });
        if(uidList!=null&&uidList.size()>0){
            //获取UID,结果为 都好分割的字符串
            String uids=StringUtils.join(uidList, ",");
            
            String uiSql="SELECT count(1) as count,personIUCode from user_info where uid in ("+uids+" ) and LENGTH(personIUCode)=4 GROUP BY personIUCode";
            List<JSONObject> queryList = getJdbcTemplate(DB.JIU_TONG_USER).query(uiSql, new JSONPropertyRowMapper());
            //type=1  当日"激活"用户行业分布
             byte type = 1;
            //调通方法,将数据插入Reports_personIUCode_daily 表
            batchInsertReports_personIUCode_daily(queryList,DateUtils.timeToInt(beginDate),type);
            
            
        }
    }

    /**
     * 统计每日 "活跃" 用户的行业分布 人数
     * @param beginDate
     * @author : zhaoshuli
     * @createTime : 2016-06-01 
     */
    public void activePersonIUCode(final int beginDate) {
        //查询前一日的活跃用户UID
        String sql ="SELECT uid FROM user_active WHERE logDate = ? ";
        List<Integer> uidList = getJdbcTemplate(DB.JIU_TONG_REPORT).query(sql, new Object[]{beginDate},new ResultSetExtractor<List<Integer>>(){
            
            @Override
            public List<Integer> extractData(ResultSet rs) throws SQLException,
                    DataAccessException {
                 List<Integer> list = new ArrayList<Integer>();
                while(rs.next()){
                    list.add(rs.getInt("uid"));
                }
                return list;
            }
        });
        
        if(uidList!=null&&uidList.size()>0){
            //获取UID,结果为 都好分割的字符串
            String uids=StringUtils.join(uidList, ",");
            
            String uiSql="SELECT count(1) as count,personIUCode from user_info where uid in ("+uids+" ) and LENGTH(personIUCode)=4 GROUP BY personIUCode";
             List<JSONObject> queryList = getJdbcTemplate(DB.JIU_TONG_USER).query(uiSql, new JSONPropertyRowMapper());
            //type=2  当日活跃用户行业分布
            byte type = 2;
            //调通方法,将数据插入Reports_personIUCode_daily 表
            batchInsertReports_personIUCode_daily(queryList,beginDate,type);
            
            
        }
    }

    /**
     * 将数据插入Reports_personIUCode_daily 表
     * @param queryList
     * @param beginDate
     * @param type
     *
     * @author : zhaoshuli
     * @createTime : 2016-06-01 
     */
    private void batchInsertReports_personIUCode_daily(
            final List<JSONObject> queryList, final int beginDate, final byte type) {
        getJdbcTemplate(DB.JIU_TONG_REPORT).batchUpdate(
                "INSERT INTO reports_personIUCode_daily (personIUCode,count,date,type) values(?,?,?,?)", 
                new BatchPreparedStatementSetter() {
                    
                    @Override
                    public void setValues(PreparedStatement ps, int i) throws SQLException {
                        JSONObject js = queryList.get(i);
                        ps.setString(1,js.getString("personIUCode"));
                        ps.setInt(2,js.getInt("count"));
                        //激活日期,当前日期前一天
                        ps.setInt(3,beginDate);
                        //type=2  当日活跃用户行业分布
                        ps.setInt(4,type);
                    }
                    
                    @Override
                    public int getBatchSize() {
                        
                        return queryList.size();
                    }
                });
        
    }

    /**
     *  统计所有用户 在每个行业的分布
     * @author : zhaoshuli
     * @createTime : 2016-06-01 
     */
    public void countAllPersonIUCode() {
        
        
        String sql="SELECT count(1) as count,personIUCode FROM `user_info` WHERE LENGTH(personIUCode)=4 GROUP BY personIUCode";
        //查询所有用户行业分布
        final List<JSONObject> list = getJdbcTemplate(DB.JIU_TONG_USER).query(sql, new JSONPropertyRowMapper());
        
        
        getJdbcTemplate(DB.JIU_TONG_REPORT).batchUpdate(
                "INSERT INTO reports_personIUCode_count (personIUCode,count,date) values(?,?,?)", 
                new BatchPreparedStatementSetter() {
                    
                    @Override
                    public void setValues(PreparedStatement ps, int i) throws SQLException {
                        JSONObject js = list.get(i);
                        ps.setString(1,js.getString("personIUCode"));
                        ps.setInt(2,js.getInt("count"));
                        ps.setInt(3,DateUtils.timeToInt(System.currentTimeMillis()));
                    }
                    
                    @Override
                    public int getBatchSize() {
                        
                        return list.size();
                    }
                });
        
    }
    
    
    /**
     * 统计4月1号至6月1号的每日"激活"用户行业分布 人数
     * @param time
     *
     * @author : zhaoshuli
     * @param now 
     * @createTime : 2016-6-01
     */
    public void statisticsPersonIUCodeActivateByHistory(final long beginDate, final long now) {
        //获取user_account表激活日期为过滤条件的 uid
        String uaSql="SELECT uid  FROM user_account where activeTime BETWEEN ? and ? ";
        List<Integer> uidList = getJdbcTemplate(DB.JIU_TONG_USER).query(uaSql, new Object[]{beginDate,now},new ResultSetExtractor<List<Integer>>(){
            
            @Override
            public List<Integer> extractData(ResultSet rs) throws SQLException,
                    DataAccessException {
                 List<Integer> list = new ArrayList<Integer>();
                
                while(rs.next()){
                    list.add(rs.getInt("uid"));
                }
                
                return list;
            }
        });
        if(uidList!=null&&uidList.size()>0){
            //获取UID,结果为 都好分割的字符串
            String uids=StringUtils.join(uidList, ",");
            
            String uiSql="SELECT count(1) as count,personIUCode from user_info where uid in ("+uids+" ) and LENGTH(personIUCode)=4 GROUP BY personIUCode";
            List<JSONObject> queryList = getJdbcTemplate(DB.JIU_TONG_USER).query(uiSql, new JSONPropertyRowMapper());
            //type=1  当日"激活"用户行业分布
             byte type = 1;
            //调通方法,将数据插入Reports_personIUCode_daily 表
            batchInsertReports_personIUCode_daily(queryList,DateUtils.timeToInt(beginDate),type);
            
            
        }
    }

    /**
     * @param date
     *
     * @author : zhaoshuli
     * @createTime : 2016-04-26 
     */
    public void statisticsPersonIUCodeByActionHistory(int date) {
        //查询前一日的活跃用户UID
                String sql ="SELECT uid FROM user_active WHERE logDate = ? ";
                List<Integer> uidList = getJdbcTemplate(DB.JIU_TONG_REPORT).query(sql, new Object[]{date},new ResultSetExtractor<List<Integer>>(){
                    
                    @Override
                    public List<Integer> extractData(ResultSet rs) throws SQLException,
                            DataAccessException {
                         List<Integer> list = new ArrayList<Integer>();
                        while(rs.next()){
                            list.add(rs.getInt("uid"));
                        }
                        return list;
                    }
                });
                
                if(uidList!=null&&uidList.size()>0){
                    //获取UID,结果为 都好分割的字符串
                    String uids=StringUtils.join(uidList, ",");
                    
                    String uiSql="SELECT count(1) as count,personIUCode from user_info where uid in ("+uids+" ) and LENGTH(personIUCode)=4 GROUP BY personIUCode";
                     List<JSONObject> queryList = getJdbcTemplate(DB.JIU_TONG_USER).query(uiSql, new JSONPropertyRowMapper());
                    //type=2  当日活跃用户行业分布
                    byte type = 2;
                    //调通方法,将数据插入Reports_personIUCode_daily 表
                    batchInsertReports_personIUCode_daily(queryList,date,type);
                    
                    
                }
        
    }
    
    public void countAllPersonIUCodeHistory(final long time) {
        
        
        String sql="SELECT count(1) as count,personIUCode FROM `user_info` WHERE LENGTH(personIUCode)=4 and createTime < ? GROUP BY personIUCode";
        //查询所有用户行业分布
        final List<JSONObject> list = getJdbcTemplate(DB.JIU_TONG_USER).query(sql, new Object[]{time},new JSONPropertyRowMapper());
        
        
        getJdbcTemplate(DB.JIU_TONG_REPORT).batchUpdate(
                "INSERT INTO reports_personIUCode_count (personIUCode,count,date) values(?,?,?)", 
                new BatchPreparedStatementSetter() {
                    
                    @Override
                    public void setValues(PreparedStatement ps, int i) throws SQLException {
                        JSONObject js = list.get(i);
                        ps.setString(1,js.getString("personIUCode"));
                        ps.setInt(2,js.getInt("count"));
                        ps.setInt(3,DateUtils.timeToInt(time-60*1000L));
                    }
                    
                    @Override
                    public int getBatchSize() {
                        
                        return list.size();
                    }
                });
        
    }
    
    
    
    
    
    
    

}

 

转载于:https://my.oschina.net/u/2253438/blog/686550

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值