接口定义
按照开始时间和结束时间查询一段时间范围内(开始时间和结束时间)的基本数据(线索数量,商机数量,合同数量,成交的金额)
需求:查询当前用户在选定范围内的待跟进的线索,商机,和待分配的线索和商机
对于销售主管来说,主要的工作是分配线索和商机,对于销售人员来说主要是跟进线索和商机
在首页提供一个入口用来展示还有多少任务是没有完成的
接口名 /index/getTodoInfo
请求方式 get请求
参数列表
传入参数:
/index/getBaseInfo?beginCreateTime=2021-05-05&endCreateTime=2023-05-05
beginCreateTime 开始时间
endCreateTime 结束时间
返回值:
{
"msg":"操作成功",
"code":200,
"data":{
"tofollowedCluesNum":0, //待跟进线索数目
"tofollowedBusinessNum":0,//待跟进商机数目
"toallocatedCluesNum":1,//待分配线索数目
"toallocatedBusinessNum":0 //待分配商机数目
}
}
步骤:
1.阅读产品文档(接口名,请求方式,参数列表)
2.根据产品的返回值和接收参数构建VO类
3.编写mapper层操作数据库
4.编写service层操作数据
5.编写controller层接收参数和返回数据
思路:
1.阅读上述产品文档
接口路径: /index/getTodoInfo
请求方式:get请求
传入参数:
/index/getBaseInfo?beginCreateTime=2021-05-05&endCreateTime=2023-05-05
beginCreateTime 开始时间
endCreateTime 结束时间
返回值:
{
"msg":"操作成功",
"code":200,
"data":{
"tofollowedCluesNum":0, //待跟进线索数目
"tofollowedBusinessNum":0,//待跟进商机数目
"toallocatedCluesNum":1,//待分配线索数目
"toallocatedBusinessNum":0 //待分配商机数目
}
}
2.根据返回值数据类型构建返回对象
package com.huike.report.domain.vo;
import lombok.Data;
/**
* 首页--今日待办--返回前端VO类
*/
@Data
public class IndexTodoInfoVO {
private Integer tofollowedCluesNum=0; //待跟进线索数目
private Integer tofollowedBusinessNum=0; //待跟进商机数目
private Integer toallocatedCluesNum=0; //待分配线索数目
private Integer toallocatedBusinessNum=0; //待分配商机数目
}
3.基于需求编写sql
按照开始时间和结束时间查询一段时间范围内(开始时间和结束时间)的基本数据(线索数量,商机数量,合同数量,成交的金额)
需求:查询当前用户在选定范围内的待跟进的线索,商机,和待分配的线索和商机
对于销售主管来说,主要的工作是分配线索和商机,对于销售人员来说主要是跟进线索和商机
这是我们的需求,我们要查询出对应的待跟进,待分配的线索和商机
线索的状态可以看到对应的待跟进,定义了待跟进状态码对应的是1
UNFOLLOWED("待跟进","1"),
FOLLOWING("跟进中","2"),
RECOVERY("回收","3"),
FALSE("伪线索/踢回公海","4"),
DELETED("删除","5"),
TOBUSINESS("转换商机","6"),
TOCUSTOMER("转换客户","7");
4.编写xml代码
ReportMapper.xml
<select id="getToallocatedCluesNum" resultType="Integer">
SELECT COUNT(DISTINCT(id)) AS toallocatedCluesNum
FROM `tb_clue`
WHERE id NOT IN (
SELECT assign_id FROM `tb_assign_record`
WHERE
AND latest = 1
AND `type` = 0
)
and
AND create_time BETWEEN #{startTime}
AND #{endTime}
</select>
<select id="getToallocatedBusinessNum" resultType="Integer">
SELECT COUNT(DISTINCT(id)) AS toallocatedBusinessNum
FROM `tb_business`
WHERE id NOT IN (
SELECT assign_id FROM `tb_assign_record`
WHERE create_time BETWEEN #{startTime}
AND #{endTime}
AND latest = 1
AND `type` = 1
)
AND create_time BETWEEN #{startTime}
AND #{endTime}
</select>
<select id="getTofollowedCluesNum" resultType="Integer">
SELECT COUNT(DISTINCT (id)) AS tofollowedCluesNum
FROM `tb_clue`
WHERE id IN
(
SELECT assign_id FROM `tb_assign_record`
WHERE user_name = #{username}
AND create_time BETWEEN #{startTime}
AND #{endTime}
AND latest = 1
AND `type` = 0
)
AND `status` = 1
</select>
<select id="getTofollowedBusinessNum" resultType="Integer">
SELECT COUNT(DISTINCT(id)) AS tofollowedBusinessNum
FROM `tb_business`
WHERE id IN (
SELECT assign_id FROM `tb_assign_record`
WHERE user_name = #{username}
AND create_time BETWEEN #{startTime}
AND #{endTime}
AND latest = 1
AND `type` = 1
)
AND `status` = 1
</select>
4.编写Mapper层接口
ReportMapper
/**=========================================待办========================================*/
/**
* 首页--今日待办--待分配线索数量
* @param beginCreateTime 开始时间
* @param endCreateTime 结束时间
* @param username 用户名
* @return
*/
Integer getToallocatedCluesNum(@Param("startTime")String beginCreateTime,
@Param("endTime")String endCreateTime,
@Param("username")String username);
/**
* 首页--今日待办--待分配商机数量
* @param beginCreateTime 开始时间
* @param endCreateTime 结束时间
* @param username 用户名
* @return
*/
Integer getToallocatedBusinessNum(@Param("startTime")String beginCreateTime,
@Param("endTime")String endCreateTime,
@Param("username")String username);
/**
* 首页--今日待办--待跟进线索数量
* @param beginCreateTime
* @param endCreateTime
* @param username
* @return
*/
Integer getTofollowedCluesNum(@Param("startTime")String beginCreateTime,
@Param("endTime")String endCreateTime,
@Param("username")String username);
/**
* 首页--今日待办--待跟进商机数量
* @param beginCreateTime 开始时间
* @param endCreateTime 结束时间
* @param username 用户名
* @return
*/
Integer getTofollowedBusinessNum(@Param("startTime")String beginCreateTime,
@Param("endTime")String endCreateTime,
@Param("username")String username);
5.编写service层接口
编写service层实现类
ReportServiceImpl
/**
* 获取待办
* @param beginCreateTime 开始时间
* @param endCreateTime 结束时间
* @return
*/
@Override
public IndexTodoInfoVO getTodoInfo(String beginCreateTime, String endCreateTime) {
IndexTodoInfoVO result = new IndexTodoInfoVO();
//2 封装结果集属性
// 2.1 由于查询需要用到用户名 调用工具类获取用户名
String username = SecurityUtils.getUsername();
// 2.2 封装第一个属性 待分配线索数量
result.setToallocatedCluesNum(reportMpper.getToallocatedCluesNum(beginCreateTime,endCreateTime,username));
// 2.3 封装第二个属性 待分配商机数量
result.setToallocatedBusinessNum(reportMpper.getToallocatedBusinessNum(beginCreateTime,endCreateTime,username));
// 2.4 封装第三个属性 待跟进线索数量
result.setTofollowedCluesNum(reportMpper.getTofollowedCluesNum(beginCreateTime,endCreateTime,username));
// 2.5 封装第四个属性 待跟进商机
result.setTofollowedBusinessNum(reportMpper.getTofollowedBusinessNum(beginCreateTime,endCreateTime,username));
//3属性封装完成后,返回结果集
return result;
编写service层接口
IReportService
/**
* 获取待办数据
* @param beginCreateTime
* @param endCreateTime
* @return
*/
IndexTodoInfoVO getTodoInfo(String beginCreateTime, String endCreateTime);
6.编写controller层代码
IndexController
/**
* 首页--获取待办数据
* @return
*/
@GetMapping("/getTodoInfo")
public AjaxResult getTodoInfo(@RequestParam("beginCreateTime") String beginCreateTime,
@RequestParam("endCreateTime") String endCreateTime){
return AjaxResult.success(reportService.getTodoInfo(beginCreateTime,endCreateTime));
}