栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

CRM--今日简报(接口实现)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CRM--今日简报(接口实现)

接口定义

按照开始时间和结束时间查询今日基本数据(线索数量,商机数量,合同数量,成交的金额)

需求:

当前用户在当前的线索数量,商机数量,合同数量,成交的金额

当前用户的线索 商机 合同 成交金额都不需要考虑状态

只要是今日做的 哪怕是回收了删除了都要考虑因为这些都是当前销售人员的工作产出

该功能主要是辅助当前销售人员对当天的工作进行复盘分析,分析今天操作了多少线索,商机,合同等

线索数量、商机数量、合同数量、最终成交的合同金额

步骤:

1.阅读产品文档(接口名,请求方式,参数列表)

2.根据产品的返回值和接收参数构建VO类

3.编写mapper层操作数据库

4.编写service层操作数据

5.编写controller层接收参数和返回数据

首先阅读接口文档:

获取首页基础数据信息(今日简报部分数据),需要查询今日处理的的线索数量,商机数量,

需求:

当前用户在当前的线索数量,商机数量,合同数量,成交的金额

当前用户的线索 商机 合同 成交金额都不需要考虑状态只要是今日做的哪怕是回收了删除了 都要考虑

以便当前销售人员进行复盘分析工作,用来分析今天操作了多少线索,商机,合同等

线索数量、商机数量、合同数量、最终成交的合同金额

接口名:/index/getTodayInfo/

前端传入参数:

返回前端数据样例

{
    "msg":"操作成功",
    "code":200,
    "data":{
        "todayCluesNum":0, //今日线索数目
        "todayBusinessNum":0,//今日商机数目
        "todayContractNum":1,//今日合同数目
        "todaySalesAmount":0 //今日销售金额
    }
}

按照步骤编写代码:

创建前端需要的结果集VO对象IndexTodayInfoVO

import lombok.Data;

@Data
public class IndexTodayInfoVO {
    private Integer todayCluesNum=0;  //今日线索数目
    private Integer todayBusinessNum=0;  //今日商机数目
    private Integer todayContractNum=0;  //今日合同数目
    private Double todaySalesAmount=0.0;  //今日销售金额
}

需求是要我们查询该用户下今日线索数目,今日商机数目,今日合同数目,今日销售金额

sql:

思路

查询数据库中所有的线索数目线索数目怎么查

SELECt COUNT(id) AS todayCluesNum FROM tb_clue 

查询该用户下所有的线索数量

首先思考,如何判断一个线索最终归属人是谁

可以单独通过线索表来进行判断吗?线索表里的create_by字段没有办法说明线索的最终归属人

而线索的创建人,由于系统中存在分配的逻辑,一个线索可能被分配到一个人,然后又继续分配,这里我们要判断线索的最终归属人就要去找分配表,分配表是tb_assign_record,这张表的特点是

assign_id 是关联id,它既可以线索id也可以是商机id,它的这个线索id和商机id的状态主要是由type字段来区分的type为0 标识这条技术是一条线索,如果type是1 则这是一条商机数据,这个过程中一个商机可能被分配给很多人,这其中用了一个latest字段用来区分,latest为1表示这一条记录是最后一条记录

查询该用户下所有的线索数目

SELECt COUNT(id) AS todayCluesNum
		FROM `tb_clue`
		WHERe id IN
			  (SELECt assign_id FROM `tb_assign_record`
			   WHERe user_name = 'admin'
				 AND latest = 1
				 AND `type` = 0)

查询该用户下今日的线索数目

这个时候又有一个问题了,需要对比的是分配时间表里的创建时间,因为领导把任务分配给了具体的业务员的时候,这个任务就相当于分配下去了,就算作他今天的任务,所以在查询今日简报的时候,就应该被统计到

SELECt COUNT(id) AS todayCluesNum
		FROM `tb_clue`
		WHERe id IN
			  (SELECt assign_id FROM `tb_assign_record`
			   WHERe user_name = 'admin'
               	  AND create_time = '2021-11-16'
				 AND latest = 1
				 AND `type` = 0)

大家思考一下这样写是不是就写完了,有没有问题

数据库中存储的时间是包含了时分秒的 也就是说 日期格式是yyyy-MM-dd HH:mm:ss

而我们这里的比较仅仅就是一个年月日的值,当然是可以比较,但是会按照我们期望的结果进行比对年月日吗?一定不会,我们需要在比对的时候将数据库里的字段进行日期格式转换 ,这里可以通过百度的方式查阅:sql的日期格式化转化,需要对数据库中的create_time字段进行日期格式转换

得到下面的sql语句

SELECt COUNT(id) AS todayCluesNum
		FROM `tb_clue`
		WHERe id IN
			  (SELECt assign_id FROM `tb_assign_record`
			   WHERe user_name = 'admin'
               	  AND DATE_FORMAT(create_time, '%Y-%m-%d') = '2021-11-16'
				 AND latest = 1
				 AND `type` = 0)

查询今日商机数量的sql

同今日线索数量,如果上面的今日线索能看明白可以先自己尝试编写sql语句,实战写不出来再来看下面的内容

先查询所有的商机数

SELECt COUNT(id) AS todayBusinessNum FROM `tb_business`

查询当前用户所有的商机数

SELECt COUNT(id) AS todayBusinessNum
		FROM  `tb_business`
		WHERe id IN
			  ( SELECt
					assign_id
				FROM
					`tb_assign_record`
				WHERe user_name =  'admin'
				  AND latest = 1
				  AND `type` = 1 )

查询当前用户今日所有的商机数

SELECt COUNT(id) AS todayBusinessNum
		FROM  `tb_business`
		WHERe id IN
			  ( SELECt
					assign_id
				FROM
					`tb_assign_record`
				WHERe user_name =  'admin'
				  AND create_time = '2021-11-16'
				  AND latest = 1
				  AND `type` = 1 )

考虑到创建时间需要进行日期的格式化,利用sql里的DATE_FORMAT函数来进行格式化得到如下sql

SELECt COUNT(id) AS todayBusinessNum
		FROM  `tb_business`
		WHERe id IN
			  ( SELECt
					assign_id
				FROM
					`tb_assign_record`
				WHERe user_name =  'admin'
				  AND DATE_FORMAT(create_time, '%Y-%m-%d') = '2021-11-16'
				  AND latest = 1
				  AND `type` = 1 )

查询今日合同数量的sql

如果线索转化成商机,商机转换成合同,我们的流程就打止了,这个过程中

合同后续没有流转了,所以通过合同表的create_by来判断合同的最终归属人

查询该用户所有的合同数量

SELECt COUNT(id) AS todayContractNum
		FROM `tb_contract`
		WHERe create_by =  'admin'

查询当天的合同数量并且考虑到日期格式问题,sql如下

今日合同数量的sql如下

SELECt COUNT(id) AS todayContractNum
		FROM `tb_contract`
		WHERe create_by =  'admin'
 AND DATE_FORMAT(create_time, '%Y-%m-%d') = '2021-11-16'

查询今日成交金额的sql

SELECt CAST(  SUM(`contract_order`) AS DECIMAL (30, 0) ) AS todaySalesAmount
		FROM
			`tb_contract`
		WHERe create_by =  'admin'
		  AND DATE_FORMAT(create_time, '%Y-%m-%d') = '2021-11-16'

写出了sql以后需要在项目中执行我们需要的sql

先从mapper层开始编写,我们整理了4条sql语句分别对应了4个数据

所以我们在mapper层也分别写对应4个sql,由于都是查询所以使用的是select,返回值类型是resultType

id对应的是mapper接口里的方法名

编写对应的xml

ReportMapper.xml


		SELECT COUNT(DISTINCT (id)) AS todayBusinessNum
		FROM  `tb_business`
		WHERe id IN
			  ( SELECt
					assign_id
				FROM
					`tb_assign_record`
				WHERe user_name =  #{username}
				  AND DATE_FORMAT(create_time, '%Y-%m-%d') = #{now}
				  AND latest = 1
				  AND `type` = 1 )
	

	
		SELECT CAST(  SUM(`contract_order`) AS DECIMAL (30, 0) ) AS todaySalesAmount
		FROM
			`tb_contract`
		WHERe create_by =  #{username}
		  AND DATE_FORMAT(create_time, '%Y-%m-%d') = #{now}
	

ReportMapper.java

	
	Integer getTodayCluesNum(@Param("now") String today,@Param("username") String username);

	
	Integer getTodayBusinessNum(@Param("now") String today,@Param("username") String username);

	
	Integer getTodayContractNum(@Param("now") String today,@Param("username") String username);

	
	Double getTodaySalesAmount(@Param("now") String today,@Param("username") String username);

编写业务层

在业务层需要将所有的数据封装成我们之前构造的VO对象IndexTodayInfoVO

创建一个结果集对象,将每个属性都封装进去

ReportServiceImpl.java

    @Override
    public IndexTodayInfoVO getTodayInfo(String today) {
        //1)构建一个空的结果集对象
        IndexTodayInfoVO result = new IndexTodayInfoVO();
        //2 封装结果集属性
        // 2.1 由于查询需要用到用户名 调用工具类获取用户名
        String username = SecurityUtils.getUsername();
        // 2.2 封装第一个属性 今日线索数量
        result.setTodayCluesNum(reportMpper.getTodayCluesNum(today,username));
        // 2.3 封装第二个属性 今日商机数量
        result.setTodayBusinessNum(reportMpper.getTodayBusinessNum(today,username));
        // 2.4 封装第三个属性 今日合同数量
        result.setTodayContractNum(reportMpper.getTodayContractNum(today,username));
        // 2.5 封装第四个属性 今日合同金额
        result.setTodaySalesAmount(reportMpper.getTodaySalesAmount(today,username));
        //3属性封装完成后,返回结果集
        return result;
    }

IReportService.java

 
    IndexTodayInfoVO getTodayInfo(String today);

controller层接收参数

controller层主要是处理前端的交互,传入参数是空,返回值是包装类,用包装类封装我们的VO结果集

IndexController.java

@RestController
@RequestMapping("/index")
public class IndexController {

    @Autowired
    private IReportService reportService;


    
    @GetMapping("/getTodayInfo")
    public AjaxResult getTodayInfo(){
        return AjaxResult.success(reportService.getTodayInfo(new SimpleDateFormat("yyyy-MM-dd").format(new Date())));
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027334.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号