mysql存储过程及定时任务

本文介绍了一个使用MySQL存储过程进行日统计的例子。该存储过程通过游标遍历用户表,并统计每位用户的各项指标,如操作记录数、新增客户数、维护客户数等,最后将统计数据插入到日统计表中。

一、创建存储过程

DROP PROCEDURE IF EXISTS `daystatisticsProcedure`;

CREATE DEFINER = `root`@`localhost` PROCEDURE `daystatisticsProcedure`()
BEGIN
	-- 变量
	DECLARE done INT DEFAULT 0;
	
	-- 统计参数变量
	DECLARE userId VARCHAR(32);  
  DECLARE userRealName VARCHAR(50);  
  DECLARE BuserID VARCHAR(32);  
  DECLARE operation INT DEFAULT 0;  -- 操作记录
  DECLARE newCustomers INT DEFAULT 0;  -- 新增客户记录
  DECLARE maintainCustomers,maintainRecord INT DEFAULT 0;  -- 日维护客户数/日维护记录数
	DECLARE childCount INT DEFAULT 0;  -- 日发展线下用户统计数
	DECLARE	policyCount,policySum,policyExtract INT DEFAULT 0;-- 个人业绩统计(保单、金额、提成)
	DECLARE	BpolicyCount,BpolicySum,BpolicyExtract INT DEFAULT 0;-- B级业绩统计(保单、金额、提成)
	DECLARE	CpolicyCount,CpolicySum,CpolicyExtract INT DEFAULT 0;-- B级业绩统计(保单、金额、提成)

	-- 获取用户并赋值给游标
	DECLARE mycursor CURSOR FOR SELECT dcUserID,dcUserRealName FROM tb_user WHERE dnStatus = 0;  
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
	-- 打开游标
	OPEN mycursor;
		-- 循环执行
		REPEAT
			-- 声明赋值
			FETCH mycursor INTO userid,userRealName;
			IF NOT done THEN
				-- 查询用户操作记录
				SELECT COUNT(dcUserID) INTO operation FROM tb_logtrack 
				WHERE DATE_FORMAT(dtAddtime,'%Y%m%d')=DATE_ADD(CURDATE(), INTERVAL -1 DAY) AND dcUserID = userId;
				-- 查询用户新增客户
				SELECT COUNT(dcUserID) INTO newCustomers FROM tb_customer 
				WHERE DATE_FORMAT(dtAddTime,'%Y%m%d')=DATE_ADD(CURDATE(), INTERVAL -1 DAY) AND dcUserID = userId;
				-- 根据用户ID查询日维护客户数/日维护记录数
				SELECT COUNT(DISTINCT(dcCustomer)),COUNT(dcUserID) INTO maintainCustomers,maintainRecord FROM tb_customertraceinfo 
				WHERE DATE_FORMAT(dtAddTime,'%Y%m%d')=DATE_ADD(CURDATE(), INTERVAL -1 DAY)  AND dcUserID = userId ;
				-- 根据用户ID查询日发展线下用户统计数
				SELECT COUNT(dcUserIDParent) INTO childCount FROM tb_userrelationown 
				WHERE DATE_FORMAT(dtAddTime,'%Y%m%d')=DATE_ADD(CURDATE(), INTERVAL -1 DAY)  AND dcUserIDParent = userId;
				-- 个人业绩统计(保单、金额、提成)
				SELECT COUNT(dcUserID),SUM(ddPriceSum),SUM(ddPriceT) INTO policyCount,policySum,policyExtract FROM tb_policymsgt 
				WHERE DATE_FORMAT(dtAddTime,'%Y%m%d')=DATE_ADD(CURDATE(), INTERVAL -1 DAY) AND dcUserID = userId;
				-- B级业务统计(保单、金额、提成)
				SELECT COUNT(dcUserID),SUM(ddPriceSum),SUM(ddPriceT) INTO BpolicyCount,BpolicySum,BpolicyExtract FROM tb_policymsgt 
				WHERE DATE_FORMAT(dtAddTime,'%Y%m%d')=DATE_ADD(CURDATE(), INTERVAL -1 DAY) AND 
				dcUserID in(SELECT dcUserID FROM tb_userrelationown WHERE dcUserIDParent = userId);
				-- C级业务统计(保单、金额、提成)
				SELECT COUNT(dcUserID),SUM(ddPriceSum),SUM(ddPriceT) INTO CpolicyCount,CpolicySum,CpolicyExtract FROM tb_policymsgt 
				WHERE DATE_FORMAT(dtAddTime,'%Y%m%d')=DATE_ADD(CURDATE(), INTERVAL -1 DAY) 
				AND dcUserID in(SELECT dcUserID FROM tb_userrelationown WHERE dcUserIDParent 
				in(SELECT dcUserID FROM tb_userrelationown WHERE dcUserIDParent = userId));
				-- 添加日统计记录
				INSERT INTO tb_dailystatistics VALUES(REPLACE(uuid(),'-',''),userId,userRealName,NULL,NULL,NULL,NULL,
				YEAR(DATE_ADD(CURDATE(), INTERVAL -1 DAY)),MONTH(DATE_ADD(CURDATE(), INTERVAL -1 DAY)),DAY(DATE_ADD(CURDATE(), INTERVAL -1 DAY)),NOW(),'0',operation,
				newCustomers,maintainCustomers,maintainRecord,childCount,policyCount,policySum,policyExtract,
				BpolicyCount,BpolicySum,BpolicyExtract,CpolicyCount,CpolicySum,CpolicyExtract);
			END IF;
			-- 循环结束
			UNTIL done END REPEAT;
	-- 关闭游标
	CLOSE mycursor;
	-- 打印结果
END;

二、创建定时任务事件

6e732d9c4727ad0939467e987383bc16776.jpg

3a947e099f4b49541d2b037c65aaba7b3df.jpg

三、开启定时任务

-- 关闭定时任务
ALTER EVENT 《事件名称》 DISABLE;
-- 开启定时任务
ALTER EVENT 《事件名称》 ENABLE;

 

转载于:https://my.oschina.net/Clarences/blog/2050212

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值