mmsuserstatisticsserviceimpl.java

来自「移动彩信管理平台」· Java 代码 · 共 514 行 · 第 1/2 页

JAVA
514
字号
package com.my7g.zj.mobile.mms.business.service;

import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.JdbcTemplate;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

import com.my7g.zj.mobile.mms.bean.MmsSelectBean;
import com.my7g.zj.mobile.mms.bean.MmsUserStatisticsBean;
import com.my7g.zj.mobile.mms.business.IMmsUserStatisticsService;
import com.my7g.zj.mobile.mms.sys.BasicDao;
import com.my7g.zj.mobile.mms.sys.Constant;

public class MmsUserStatisticsServiceImpl extends BasicDao implements IMmsUserStatisticsService {
	
	private JdbcTemplate jdbcTemplatePlatform;
	
	
	
	public JdbcTemplate getJdbcTemplatePlatform() {
		return jdbcTemplatePlatform;
	}
	public void setJdbcTemplatePlatform(JdbcTemplate jdbcTemplatePlatform) {
		this.jdbcTemplatePlatform = jdbcTemplatePlatform;
	}
	
	
	public List<MmsUserStatisticsBean> getUserStatisticsList(String conditions,
			String time, int flag) {
		List statisticsList = null;
		List<MmsUserStatisticsBean> reList= new ArrayList<MmsUserStatisticsBean>();
		
		String hql = null;
		boolean isArea = true;
		if(flag == 11 || flag == 12 || flag == 31 || flag == 32)
			isArea = false;
		
		hql = getQueryHQL(conditions,time,flag);
		if(hql == null)
			return null;
		//System.out.println("业务用户数统计->获得HQL="+hql);
		
		// 存在问题 ************************ 没有用户时的判断处理 **************************
		statisticsList = this.jdbcTemplatePlatform.queryForList(hql);
		
		// 整理成存放MmsUserStatisticsBean的Map
		HashMap<String,MmsUserStatisticsBean> beanMap = new HashMap<String,MmsUserStatisticsBean>();
		
		String condtions = null;
		short state = 0;
		int total = 0;
		
		MmsUserStatisticsBean value = null;
		Map obj = null;
		
		for(int i=0;i< statisticsList.size();i++)
		{
			obj = (Map) statisticsList.get(i);
			if(obj == null)
			{
				System.out.println("业务用户数统计->列数组对象为空!");
				return null;
			}
			total = (Integer) obj.get("total");
			condtions = String.valueOf(obj.get("condtions")).trim();
			state = Short.valueOf(String.valueOf(obj.get("state")));
			
			// 若map中不存在相应记录 增加一条新的 /////individuality 目前是 名称 不是类型代码////////
			if(!beanMap.containsKey(condtions))
			{
				if(isArea)
					beanMap.put(condtions, new MmsUserStatisticsBean(Constant.areaMap.get(condtions),time,0,0,0));
				else
					beanMap.put(condtions, new MmsUserStatisticsBean(condtions,time,0,0,0));
			}
			value = beanMap.get(condtions);

			if(value == null)
			{
				System.out.println("业务用户数统计->从beanMap对象取出对象为空!");
				return null;
			}
			
			System.out.println("业务用户数统计->从beanMap对象取出对象="+value);
			
			if(state == 0)//退订
				value.setUnOrderUserNum(value.getUnOrderUserNum()+total);
			else if(state == 2)//注册
				value.setOrderUserNum(value.getOrderUserNum()+total);
			else//体验
				value.setTasteUserNum(value.getTasteUserNum()+total);			
		}
		
		// 整理成存放MmsUserStatisticsBean的List
		Iterator itor = beanMap.values().iterator();
		MmsUserStatisticsBean bean = null;
		int totalOrderNum = 0;
		int totalTasteNum = 0;
		int totalUnOrderNum = 0;
		
		while(itor.hasNext())
		{
			bean =(MmsUserStatisticsBean) itor.next();
			// 定制用户总量累加
			totalOrderNum += bean.getOrderUserNum();
			// 体验用户总量累加
			totalTasteNum += bean.getTasteUserNum();
			// 退订用户总量累加
			totalUnOrderNum += bean.getUnOrderUserNum();
			reList.add(bean);
		}
		reList.add(new MmsUserStatisticsBean("总计",time,totalOrderNum,totalTasteNum,totalUnOrderNum));
		
		return reList;
	}
	/**
	 * 获得地市列表
	 * */
	public List<MmsSelectBean> getAreaList() {
		List<MmsSelectBean> areaList = new ArrayList<MmsSelectBean>();
		// 获得所有地市的列表
		Iterator itor = Constant.areaMap_Obj.values().iterator();
		MmsSelectBean value = null;
		while(itor.hasNext())
		{
			value = (MmsSelectBean) itor.next();
			areaList.add(value);
		}
		if(areaList == null || areaList.isEmpty())
			System.out.println("获得地市列表为空!请核实!");
		
		return areaList;
	}
	/**
	 * 获得用户身份对应的栏目列表
	 * */
	public List<MmsSelectBean> getClassifyList(String userID, int flag) {
		List<MmsSelectBean> classifyList = new ArrayList<MmsSelectBean>();
		if(flag == 1)
		{
			// 获得 cp 对应的栏目列表 ************************ 等待补充 ********************************
			//List list = this.find("select sortId,sortName from TbMmsType where sortIndex in (select typeIndex from TbMmsCpProvider where userId = "+userID+")");
			List list = this.jdbcTemplatePlatform.queryForList("select sort_index,sort_name from platform.dbo.tb_mms_type where sort_index in (select type_index from supermms_cp.dbo.tb_mms_cp_provider where user_id = "+userID+")");
			//Object[] obj = null;
			Map obj = null;
			for(int i=0;i<list.size();i++)
			{
				obj = (Map)list.get(i);
				classifyList.add(new MmsSelectBean(String.valueOf(obj.get("sort_index")),String.valueOf(obj.get("sort_name"))));
			}
		}
		else
		{
			// 获得所有栏目的列表
			Iterator itor = Constant.typeMap_Obj.values().iterator();
			MmsSelectBean value = null;
			while(itor.hasNext())
			{
				value = (MmsSelectBean) itor.next();
				classifyList.add(value);
			}			
		}
		if(classifyList == null || classifyList.isEmpty())
			System.out.println("获得栏目列表为空,userID="+userID+" flag="+flag);
		
		return classifyList;
	}

	private String getQueryHQL(String conditions,String endTime,int flag)
	{
		String strHql = null;
		
		String strParamHql_start = "select count(*) as total, ";
		String strParamHql_mid = " as condtions,state  from tb_cjdx_user_info where datediff(dd,'"+endTime+"',register_date)<=0 ";
		String strParamHql_end1 = " group by individuality,state";
		String strParamHql_end2 = " group by cityid,state";

		if(flag == 11)
		{
			// cp 用户首次进入查询页面 返回相对应所有栏目的统计信息 对应HQL
			strHql = strParamHql_start + "individuality" + strParamHql_mid + conditions+strParamHql_end1;
		}
		else if(flag == 12)
		{
			// cp 用户已经进入查询页面并选择了相应栏目 返回选择栏目的统计信息 对应HQL
			strHql = strParamHql_start + "individuality" + strParamHql_mid + conditions+strParamHql_end1;
		}
		else if(flag == 21)
		{
			// cp 用户首次进入查询页面 返回所有地市的统计信息 对应HQL
			strHql = strParamHql_start + "cityid" + strParamHql_mid + strParamHql_end2;
		}
		else if(flag == 22)
		{
			// cp 用户已经进入查询页面并选择了相应地市 返回选择地市的统计信息 对应HQL
			strHql = strParamHql_start + "cityid" + strParamHql_mid + conditions+strParamHql_end2;
		}
		else if(flag == 31)
		{
			// ad 用户首次进入查询页面 返回所有栏目的统计信息 对应HQL
			strHql = strParamHql_start + "individuality" + strParamHql_mid + strParamHql_end1;
		}
		else if(flag == 32)
		{
			// ad 用户已经进入查询页面并选择了相应栏目 返回选择栏目的统计信息 对应HQL
			strHql = strParamHql_start + "individuality" + strParamHql_mid + conditions+strParamHql_end1;
		}
		else if(flag == 41)
		{
			// ad 用户首次进入查询页面 返回所有地市的统计信息 对应HQL
			strHql = strParamHql_start + "cityid" + strParamHql_mid + strParamHql_end2;
		}
		else if(flag == 42)
		{
			// ad 用户已经进入查询页面并选择了相应地市 返回选择地市的统计信息 对应HQL
			strHql = strParamHql_start + "cityid" + strParamHql_mid + conditions+strParamHql_end2;
		}
		else
		{
			// 类型标识有误
			System.out.println("业务用户数统计->类型标识有误!flag="+flag);
		}
		if(strHql == null)
			System.out.println("业务用户数统计->获取检索HQL语句有误!flag="+flag);
		return strHql;
	}

	/**
	 * 创建统计报表
	 * */
	//生成报表
	public void createWorkbook(List<MmsUserStatisticsBean> list, OutputStream out) {
		WritableWorkbook wwb = null;
		try {
			wwb = Workbook.createWorkbook(out);
			WritableSheet ws = wwb.createSheet("用户统计报表", 0);

			// 总计计数器
			int totalOrderNum = 0;
			int totalTasteNum = 0;
			int totalUnOrderNum = 0;
			
			// 字段名
			Label lb_0 = new Label(0, 0, "标题");
			ws.addCell(lb_0);
			Label lb_1 = new Label(1, 0, "截至时间");

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?