13-1-首页--待办数据统计接口(实现)

YangeIT大约 9 分钟

13-1-首页--待办数据统计接口(实现)

需求:查询当前用户待根进的线索,商机,和待分配的线索和商机

对于销售主管来说,主要的工作是分配线索和商机,对于销售人员来说主要是跟进线索和商机

👉 在首页提供一个入口用来展示还有多少任务是没有完成的

  • 接口名 /index/getTodoInfo

  • 请求方式 get请求

  • 参数列表

    • 传入参数:/index/getTodoInfo?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.阅读上述产品文档

同上需求,得出接口信息

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

按照开始时间结束时间查询一段时间范围内(开始时间和结束时间)的基本数据

需求:查询当前用户在选定范围内的待跟进的线索,商机,和待分配的线索和商机

对于销售主管来说,主要的工作是分配线索和商机,对于销售人员来说主要是跟进线索和商机

3.1查询待跟进线索

1.查询所有的线索

select * from tb_clue

2.查询所有的待跟进线索

待跟进这个状态从哪里进行获取

在第一天阅读代码的时候已经介绍了,业务对象的状态是保存在实体类中的枚举类中的

package com.huike.clues.domain;


/**
 * 线索管理对象 tb_clue
 * @date 2021-04-02
 */
public class TbClue extends BaseEntity {

 	public enum StatusType{

        UNFOLLOWED("待跟进","1"),
        FOLLOWING("跟进中","2"),
        RECOVERY("回收","3"),
        FALSE("伪线索/踢回公海","4"),
        DELETED("删除","5"),
        TOBUSINESS("转换商机","6"),
        TOCUSTOMER("转换客户","7");

        private String name;
        private String value;

        private StatusType(String name,String value){
            this.name = name;
            this.value = value;
        }

        public String getName() {
            return name;
        }

        public String getValue() {
            return value;
        }
    }
}
    

线索的状态可以看到对应的待跟进,定义了待跟进状态码 对应的是1

UNFOLLOWED("待跟进","1"),
FOLLOWING("跟进中","2"),
RECOVERY("回收","3"),
FALSE("伪线索/踢回公海","4"),
DELETED("删除","5"),
TOBUSINESS("转换商机","6"),
TOCUSTOMER("转换客户","7");

那么对应的待跟进的sql语句就应该按照枚举类里定义的内容来进行判断

那么我们现在查询待跟进 的数据 👇

SELECT * FROM tb_clue WHERE `status` = 1

3.查询当前用户待跟进的所有线索

如果要判断这个线索是某一个人的需要关联到分配表

tb_assign_record 其中的用户名是对应的用户名,如果是最后一条 latest是1 ,如果是线索type为1

	SELECT * FROM  `tb_clue` WHERE   `status` = 1 AND 
			id IN(
				  SELECT assign_id FROM `tb_assign_record`
				  WHERE user_name = 'admin' AND latest = 1 AND `type` = 0
			 	)
		  

接下来需要考虑的是时间范围

这里的时间应该是线索的创建时间,还是应该是被分配给当前用户的时间

由于数据是和用户进行绑定的,线索的创建时间可能当时根本没有和当前用户进行绑定,应该取的是分配表里的最后一条数据的创建时间

4.查询当前用户在一定时间范围内的待跟进线索 👇

SELECT * FROM `tb_clue` WHERE `status` = 1 AND
	id IN(
				SELECT assign_id FROM `tb_assign_record`
				WHERE user_name = 'admin' AND latest = 1 AND `type` = 0
					AND create_time BETWEEN '2021-05-05' AND '2022-05-05'
			)
		   




 


5.统一当前用户在一定时间范围内的待跟进线索数量👇

SELECT count(id) FROM `tb_clue` WHERE `status` = 1 AND
	id IN(
				SELECT assign_id FROM `tb_assign_record`
				WHERE user_name = 'admin' AND latest = 1 AND `type` = 0
					AND create_time BETWEEN '2021-05-05' AND '2022-05-05'
			)
 





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>




 
 
 
 


 






 
 
 
 
 
 

 





 
 
 
 
 
 
 
 






 
 
 
 
 
 



5.编写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);

6.编写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);

7.编写controller层代码

IndexController

	/**
	* 首页--获取待办数据
	* @return
	*/
@GetMapping("/getTodoInfo")
public AjaxResult getTodoInfo(@RequestParam("beginCreateTime") String beginCreateTime,
								@RequestParam("endCreateTime") String endCreateTime){
	return AjaxResult.success(reportService.getTodoInfo(beginCreateTime,endCreateTime));
}