`
lw4135
  • 浏览: 46908 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

客户情况统计

    博客分类:
  • Java
 
阅读更多
/**
	 * 每周客户情况统计 liuwang 说明: 1、客户数=新认识的客户数+约访后回访的客户数+有效的访客数+转介绍客户数
	 * 2、分值数=新认识的客户数*1+约访后回访的客户数*10+有效的访客数*10+转介绍客户数*2 3、面谈数=有效访客数+约访后回访的客户数
	 * 合计中的总数就等于每天的数值之和
	 * 
	 * @Date 2013-12-11
	 * @param params
	 * @return
	 */
	public List getCustomerStaWeekly(Data params) {

		/*
		 * 营业组 营业员 合计 2013-11-15(星期五) 人次 新增 转介绍 邀约 回访 面谈 新增 转介绍 邀约 回访 面谈 客户数
		 */

		// 日期
		String startDate = params.getString("startDate");
		String endDate = params.getString("endDate");
		String staffId = params.getString("staffId");
		String staffGroupId = params.getString("staffGroupId");
		String staffGroupName = params.getString("staffGroupName");
		String staffName = params.getString("staffName");

		String staffDeptId = params.getString("staffDeptId");// 营业部
		String staffDeptName = params.getString("staffDeptName");

		DateTool dateTool = new DateTool();
		if (startDate == null || "".equals(startDate)) {
			startDate = dateTool.getDefaultDates().get(0);
		}
		if (endDate == null || "".equals(endDate)) {
			endDate = dateTool.getDefaultDates().get(1);
		}
		List<String> dates = dateTool.getDates(startDate, endDate);

		StringBuffer sql = new StringBuffer();
		sql.append(" select t0.dept_name,t0.group_name,                                                                    ");
		sql.append("        t0.full_name,                                                                     ");
		for (int j = 1; j <= dates.size(); j++) {
			String customernum = "customernum" + j;// 客户数
			String customerScoresnum = "customeScoresrnum" + j;// 分值数
			String facenum = "facenum" + j;// 面谈数
			String newnum = "newnum" + j;
			String visitnum = "visitnum" + j;
			String activenum = "activenum" + j;
			String referralsnum = "referralsnum" + j;

			String newScorenum = "newScorenum" + j;
			String visitScorenum = "visitScorenum" + j;
			String activeScorenum = "activeScorenum" + j;
			String referralsScorenum = "referralsScorenum" + j;

			// 客户数
			sql.append("isnull(t" + newnum + "." + newnum + ", 0) +");
			sql.append("isnull(t" + visitnum + "." + visitnum + ", 0) +");
			sql.append("isnull(t" + activenum + "." + activenum + ", 0) +");
			sql.append("isnull(t" + referralsnum + "." + referralsnum + ", 0) ");
			sql.append("   as " + customernum + " ,    ");
			// 分值数
			sql.append("isnull(t" + newnum + "." + newnum + ", 0) +");
			sql.append("isnull(10*t" + visitnum + "." + visitnum + ", 0) +");
			sql.append("isnull(10*t" + activenum + "." + activenum + ", 0) +");
			sql.append("isnull(2*t" + referralsnum + "." + referralsnum
					+ ", 0) ");
			sql.append("   as " + customerScoresnum + " ,    ");
			// 面谈数
			sql.append("isnull(t" + visitnum + "." + visitnum + ", 0) +");
			sql.append("isnull(t" + activenum + "." + activenum + ", 0) ");
			sql.append("   as " + facenum + " ,    ");

			sql.append("t" + newnum + "." + newnum + ",");
			sql.append(" t" + newnum + "." + newnum + " as " + newScorenum
					+ "  ,");
			sql.append("t" + visitnum + "." + visitnum + ",");
			sql.append("10*t" + visitnum + "." + visitnum + " as "
					+ visitScorenum + "  ,");
			sql.append("t" + activenum + "." + activenum + ",");
			sql.append("10*t" + activenum + "." + activenum + " as "
					+ activeScorenum + "  ,");
			sql.append("t" + referralsnum + "." + referralsnum + ",");
			sql.append("2*t" + referralsnum + "." + referralsnum + " as "
					+ referralsScorenum + "  ,");
		}

		sql = new StringBuffer(sql.substring(0, sql.length() - 1));
		sql.append("   from (select t00.id        as id,     t01.id as group_id	,	t02.id as dept_id,t02.name as dept_name, ");
		sql.append("                t01.name as group_name,                                              ");
		sql.append("                t00.name as full_name                                                ");
		sql.append("           from (select id, name, sales_group_id,sales_dept_id from org_staff where is_active = 1 and staff_type = 1 ");

		sql.append(" ) t00     ");
		sql.append("           left join (select id, name from org_staff where 1=1 ");

		sql.append(") t01                            ");
		sql.append("             on t00.sales_group_id = t01.id                                         ");

		sql.append(" left join (select id, name from org_staff where 1 = 1) t02  ");
		sql.append("  on t00.sales_dept_id = t02.id  ) t0  ");
		int i = 1;
		for (String date : dates) {
			String newnum = "newnum" + i;
			String visitnum = "visitnum" + i;
			String activenum = "activenum" + i;
			String referralsnum = "referralsnum" + i;

			// // 新认识的客户数+约访后回访的客户数+有效的访客数+转介绍客户数 Scores
			sql.append("   left join (select staff_id, count(*) as " + newnum
					+ "                                     ");
			sql.append("                from crm_situation_survey                                                 ");
			sql.append("               where register_date = '" + date
					+ "'                                         ");
			sql.append("                 and nature like '%新认识的客户%'      ");
			sql.append("               group by staff_id) t" + newnum
					+ "                                                  ");
			sql.append("     on t0.id = t"
					+ newnum
					+ ".staff_id                                                              ");

			sql.append("   left join (select staff_id, count(*) as " + visitnum
					+ "                                     ");
			sql.append("                from crm_situation_survey                                                 ");
			sql.append("               where register_date = '" + date
					+ "'                                         ");
			sql.append("                 and nature like '%约访后回访的客户%'      ");
			sql.append("               group by staff_id) t" + visitnum
					+ "                                                  ");
			sql.append("     on t0.id = t"
					+ visitnum
					+ ".staff_id                                                              ");

			sql.append("   left join (select staff_id, count(*) as "
					+ activenum + "                                     ");
			sql.append("                from crm_situation_survey                                                 ");
			sql.append("               where register_date = '" + date
					+ "'                                         ");
			sql.append("                 and nature like '%有效的访客%'      ");
			sql.append("               group by staff_id) t" + activenum
					+ "                                                  ");
			sql.append("     on t0.id = t"
					+ activenum
					+ ".staff_id                                                              ");

			sql.append("   left join (select staff_id, count(*) as "
					+ referralsnum + "                                     ");
			sql.append("                from crm_situation_survey                                                 ");
			sql.append("               where register_date = '" + date
					+ "'                                         ");
			sql.append("                 and nature like '%转介绍的客户%'      ");
			sql.append("               group by staff_id) t" + referralsnum
					+ "                                                  ");
			sql.append("     on t0.id = t"
					+ referralsnum
					+ ".staff_id                                                              ");
			i++;
		}

		sql.append("    where 1=1                                                           ");

		// 如果name有值,id为空;那么按name取like
		// 如果name为空,不加判断
		// 如果都有;按id。
		boolean nameB = false;
		boolean idB = false;
		if (null != staffName && !"".equals(staffName)
				&& !"undefined".equals(staffName)) {
			nameB = true;
		}
		if (null != staffId && !"".equals(staffId)
				&& !"undefined".equals(staffId)) {
			idB = true;
		}
		if (nameB & idB) {
			sql.append("  and t0.id in(" + staffId
					+ ")                                                 ");// 营销员的范围限定
		} else if (nameB == true && idB == false) {
			if (staffName.indexOf(',') != -1) {// 如果含有逗号包含多个name
				staffName = "'" + staffName + "'";
				staffName = staffName.replaceAll(",", "','");
				sql.append("  and t0.full_name in(" + staffName
						+ ")                                                 ");
			} else {
				sql.append("  and t0.full_name like('%"
						+ staffName
						+ "%')                                                 ");
			}
		}

		// ///营业组范围控制
		// 如果name有值,id为空;那么按name取like
		// 如果name为空,不加判断
		// 如果都有;按id。
		boolean nameGroupB = false;
		boolean idGroupB = false;
		if (null != staffGroupName && !"".equals(staffGroupName)
				&& !"undefined".equals(staffGroupName)) {
			nameGroupB = true;
		}
		if (null != staffGroupId && !"".equals(staffGroupId)
				&& !"undefined".equals(staffGroupId)) {
			idGroupB = true;
		}
		if (nameGroupB & idGroupB) {
			sql.append("  and t0.group_id in(" + staffGroupId
					+ ")                                                 ");// 营销员的范围限定
		} else if (nameGroupB == true && idGroupB == false) {
			if (staffGroupName.indexOf(',') != -1) {// 如果含有逗号包含多个name
				staffGroupName = "'" + staffGroupName + "'";
				staffGroupName = staffGroupName.replaceAll(",", "','");
				sql.append("  and t0.group_name in(" + staffGroupName
						+ ")                                                 ");
			} else {
				sql.append("  and t0.group_name like('%"
						+ staffGroupName
						+ "%')                                                 ");
			}
		}

		// ///营业部范围控制
		// 如果name有值,id为空;那么按name取like
		// 如果name为空,不加判断
		// 如果都有;按id。
		boolean nameDeptB = false;
		boolean idDeptB = false;
		if (null != staffDeptName && !"".equals(staffDeptName)
				&& !"undefined".equals(staffDeptName)) {
			nameDeptB = true;
		}
		if (null != staffDeptId && !"".equals(staffDeptId)
				&& !"undefined".equals(staffDeptId)) {
			idDeptB = true;
		}
		if (nameDeptB & idDeptB) {
			sql.append("  and t0.dept_id in(" + staffDeptId
					+ ")                                                 ");// 营销员的范围限定
		} else if (nameDeptB == true && idDeptB == false) {
			if (staffDeptName.indexOf(',') != -1) {// 如果含有逗号包含多个name
				staffDeptName = "'" + staffDeptName + "'";
				staffDeptName = staffDeptName.replaceAll(",", "','");
				sql.append("  and t0.dept_name in(" + staffDeptName
						+ ")                                                 ");
			} else {
				sql.append("  and t0.dept_name like('%"
						+ staffDeptName
						+ "%')                                                 ");
			}
		}

		// 基于每日的查询结果算出时间段内的合计
		StringBuffer reusltRow = new StringBuffer();
		reusltRow
				.append(" select t.dept_name,t.group_name,    t.full_name,    ");
		String customernumTotal = "";
		String customerScoresnumTotal = "";
		String facenumTotal = "";
		for (int j = 1; j <= dates.size(); j++) {
			customernumTotal = customernumTotal + "customernum" + j + "+";// 客户数
			customerScoresnumTotal = customerScoresnumTotal
					+ "customeScoresrnum" + j + "+";// 分值数
			facenumTotal = facenumTotal + "facenum" + j + "+";// 面谈数
		}
		reusltRow
				.append("    "
						+ customernumTotal.substring(0,
								customernumTotal.length() - 1)
						+ " as customernumTotal , "
						+ customerScoresnumTotal.substring(0,
								customerScoresnumTotal.length() - 1) + " as customerScoresnumTotal ,"
						+ facenumTotal.substring(0, facenumTotal.length() - 1)
						+ " as facenumTotal   , ");

		for (int j = 1; j <= dates.size(); j++) {
			String customernum = "customernum" + j;// 客户数
			String customerScoresnum = "customeScoresrnum" + j;// 分值数
			String facenum = "facenum" + j;// 面谈数
			String newnum = "newnum" + j;
			String visitnum = "visitnum" + j;
			String activenum = "activenum" + j;
			String referralsnum = "referralsnum" + j;

			String newScorenum = "newScorenum" + j;
			String visitScorenum = "visitScorenum" + j;
			String activeScorenum = "activeScorenum" + j;
			String referralsScorenum = "referralsScorenum" + j;

			reusltRow.append(" " + customernum + ", " + customerScoresnum + ","
					+ facenum + "," + newnum+"," +newScorenum +"," +visitnum+"," + visitScorenum+"," +activenum +","
					+ activeScorenum+"," +referralsnum +"," +referralsScorenum +",");
		}
		reusltRow=new StringBuffer(reusltRow.substring(0, reusltRow.length()-1));
		reusltRow.append(" from (");
		reusltRow.append(sql);
		reusltRow.append(")t");
		List<Object[]> result = super.findBySql(reusltRow.toString());
		return result;
	}

	/**
	 * 获取团队长的名字和id
	 * 
	 * @return
	 * @author liuwang
	 * @date 2013-11-29
	 */
	public List<Object[]> getTeamLeader(String name) {

		String sql = "select name,id,code from org_staff where is_active=1 and is_team=1";
		if (null != name && !"".equals(name)) {
			sql = sql + " and name like '%" + name.trim() + "%'";
		}
		List<Object[]> result = super.findBySql(sql);
		return result;
	}

	/**
	 * 获取组长的名字和id
	 * 
	 * @return
	 * @author liuwang
	 * @date 2013-11-29
	 */
	public List<Object[]> getGroupLeader(String name, String teamName) {

		String sql = "select name,id,code from org_staff where is_active=1 and is_group=1";

		if (null != teamName && !"".equals(teamName) && !",".equals(teamName)) {

			if (teamName.indexOf(',') != -1) {// 如果含有逗号包含多个name
				teamName = "'" + teamName + "'";
				teamName = teamName.replaceAll(",", "','");
				sql = sql
						+ " and sales_dept_id in (select  t2.id from org_staff t2 where t2.is_active=1 and t2.is_team=1 and t2.name in("
						+ teamName + ") )";
			} else {
				sql = sql
						+ " and sales_dept_id in (select  t2.id from org_staff t2 where t2.is_active=1 and t2.is_team=1 and t2.name like '%"
						+ teamName.trim() + "%' )";
			}

		}
		if (null != name && !"".equals(name)) {
			sql = sql + " and name like '%" + name.trim() + "%'";
		}
		List<Object[]> result = super.findBySql(sql);
		return result;
	}

	/**
	 * 获取营业员的名字和id
	 * 
	 * @return
	 * @author liuwang
	 * @date 2013-11-29
	 */
	public List<Object[]> getStaff(String name, String teamName,
			String groupName) {

		String sql = "select name,id,code from org_staff where is_active=1 and staff_type=1 ";

		if (null != groupName && !"".equals(groupName)
				&& !",".equals(groupName)) {

			if (groupName.indexOf(',') != -1) {// 如果含有逗号包含多个name
				groupName = "'" + groupName + "'";
				groupName = groupName.replaceAll(",", "','");
				sql = sql
						+ " and sales_group_id in (select  t.id from org_staff t where t.is_active=1 and t.is_group=1 and t.name  in("
						+ groupName + ") )";
			} else {
				sql = sql
						+ " and sales_group_id in (select  t.id from org_staff t where t.is_active=1 and t.is_group=1 and t.name like '%"
						+ groupName.trim() + "%' )";
			}
		}
		if (null != teamName && !"".equals(teamName) && !",".equals(teamName)) {

			if (teamName.indexOf(',') != -1) {// 如果含有逗号包含多个name
				teamName = "'" + teamName + "'";
				teamName = teamName.replaceAll(",", "','");
				sql = sql
						+ " and sales_dept_id in (select  t2.id from org_staff t2 where t2.is_active=1 and t2.is_team=1 and t2.name in("
						+ teamName + ") )";
			} else {
				sql = sql
						+ " and sales_dept_id in (select  t2.id from org_staff t2 where t2.is_active=1 and t2.is_team=1 and t2.name like '%"
						+ teamName.trim() + "%' )";
			}
		}
		if (null != name && !"".equals(name)) {
			sql = sql + " and name like '%" + name.trim() + "%'";
		}
		List<Object[]> result = super.findBySql(sql);
		return result;
	}
分享到:
评论

相关推荐

    周到访客户情况统计表格式.doc

    【周到访客户情况统计表格式】是一种管理表格,用于系统地记录和分析一周内客户拜访的情况,这对于销售团队和市场营销部门来说是非常重要的工具。它能够帮助管理层了解销售经理的工作效率,评估不同营销渠道的效果,...

    客户跟踪情况统计表.doc

    《客户跟踪情况统计表》是企业管理中非常关键的一环,特别是在汽车服务业中,它能够帮助企业高效地管理和优化其客户服务流程。这份文档的核心在于通过数据化的形式记录和分析客户跟踪的具体情况,以提升服务质量,...

    客户风险统计制度中数据报送差错的原因及对策.docx

    5. **新增指标**:如《零售贷款违约法人客户情况统计表》和《零售贷款违约个人客户情况统计表》中增加了“违约天数”指标,反映违约时间。 【常见报送错误】主要包括: 1. **漏报**:如漏报授信客户信息,或漏报...

    FR-YY0511客户意见统计表.zip

    标题中的“FR-YY0511客户意见统计表”很可能是一个特定项目或者活动的标识符,其中“FR”可能是项目、公司或部门的缩写,“YY”可能代表年份,“0511”可能是月份和日期的组合,具体含义需要结合实际情况来解读。...

    客户投诉案件统计表.zip

    2. 数据可视化:为了更好地理解投诉情况,统计表可能包含图表或图形,如柱状图、饼图或线图,用于直观地展示不同类型的投诉数量、投诉频率、投诉解决时间等关键指标。 3. 业务智能(BI):在更复杂的系统中,这样的...

    客户信用调查统计表.zip

    2. **信用历史**:信用历史是评估客户信用状况的关键因素,它包括过去的还款记录、逾期情况、欠款余额、信用额度等。良好的信用历史意味着客户有按时偿还债务的记录,降低了违约风险。 3. **财务状况**:这涵盖了...

    银行客户风险统计报送系统技术方案 .doc

    - **对公客户担保情况统计表:** 统计对公客户表内外授信的担保情况。 - **个人贷款违约情况统计表:** 统计个人贷款90天以上的违约情况。 - **个人违约贷款担保情况统计表:** 统计个人贷款的担保情况。 #### 三、...

    进销存管理系统详细说明

    3. **客户情况统计分析**:分析客户的购买历史,包括累计购货情况、各客户的销售和利润统计,以及特定商品的购买统计,以便优化客户服务和制定销售策略。 4. **供应商情况统计分析**:统计供应商的供货情况,形成...

    客户投诉案件统计表.doc

    "客户投诉案件统计表.doc" 提供了一种系统化记录和分析客户投诉的方式,这对于提升客户满意度和优化业务流程至关重要。下面将详细讨论这个统计表中的各个关键字段及其对营销管理的意义: 1. **投诉客户**:这是识别...

    商场客户流量统计 激光 语音

    在商场管理中,客户流量统计是一项至关重要的任务,它能够为商家提供宝贵的数据,以便进行更精准的市场分析、营销策略制定以及优化运营效率。"激光计数语音播报商场内客户数目"是一种现代化的技术手段,它结合了激光...

    一周客户统计表格式.doc

    一周客户统计表是一种重要的管理工具,特别是在销售、客户服务或市场分析等业务领域中,它能够帮助企业跟踪和评估销售团队的工作效率以及客户互动的情况。以下是对这个统计表的详细解析: 首先,表头部分明确了该...

    Excel模板按客户名称统计各产品订购数量.zip

    这个名为“按客户名称统计各产品订购数量”的模板提供了一种有效的方式来整理和分析销售数据。以下将详细讲解如何利用此模板以及Excel的一些核心功能来实现这一目标。 首先,打开压缩包中的“按客户名称统计各产品...

    客户统计表.doc

    5. **平均每家年销售额**:这个指标反映了平均每个客户在一年内的消费情况,它可以帮助企业了解客户的购买行为和消费能力。如果这个数字较低,可能意味着需要提高单个客户的购买频率或增加产品定价。 6. **前三名...

    客户学历统计表格式.doc

    3. **教育层次与消费行为**:在很多情况下,客户的教育水平可能与他们的消费习惯、产品需求和对服务的期望有关。例如,高学历客户可能更倾向于高端、复杂的产品,而低学历客户可能更注重产品的实用性。 4. **市场...

    销售情况统计

    在这个场景中,我们看到一个名为"销售情况统计"的项目,显然是利用Visual FoxPro(VFP)编程语言实现的。VFP是一种基于XBase的数据库管理系统,因其强大的数据库操作和报表生成能力而在过去被广泛使用。 首先,我们...

    易语言源码客户单位统计易语言源码.rar

    易语言源码客户单位统计易语言源码.rar 是一个压缩包,其中包含了一套用于统计客户单位信息的源代码。这个程序可能被用于企业或组织中,以便对客户的分布、数量、交易量等数据进行统计分析。 易语言的语法结构简洁...

    java统计高并发首页访问量,记录客户登录信息

    在Java开发中,统计高并发环境下首页访问量并记录客户登录信息是一项常见的需求,这涉及到系统性能优化、数据持久化以及并发控制等多个方面。在这个项目中,开发框架选择了Spring,这是一个广泛使用的Java企业级应用...

    通信行业客服中心大客户信息统计分析标准流程.ppt

    收集信息是整个流程的基础,涉及对大客户的基本档案、消费记录、业务使用情况等多方面数据的整合。这通常需要从公司的CRM(客户关系管理)系统、计费系统、销售记录等多个来源获取。 3. **信息整理**: 收集到的...

    统计分析法在电信客户价值分析中的应用.doc

    在电信客户价值分析中,频率统计可以用来描述客户当前价值的分布情况。通过对数据进行统计,可以统计出客户当前价值的最大值和最小值,然后确定统计步长,根据客户的月均值统计区间中点值,分别统计出每个区间的人数...

    VIP大客户管理 delphi

    2.1.9 客户经理重要活动及奖罚情况 2-15 2.1.10 客户经理培训记录 2-15 2.1.11 客户经理社会关系 2-16 2.1.12 客户经理工作经历 2-16 2.1.13 竞争对手管理 2-17 2.1.14 竞争对手营销策略管理 2-17 2.1.15 竞争对手...

Global site tag (gtag.js) - Google Analytics