1988.sql 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. -- 总监级别表增加推荐会员相关属性
  2. ALTER TABLE `AR_EMPLOY_LEVEL` ADD COLUMN `ACHIEVE_MEMBER_NUM` INT NOT NULL DEFAULT '0' COMMENT '推荐会员达标数' AFTER `ACHIEVE_PV`;
  3. ALTER TABLE `AR_EMPLOY_LEVEL` ADD COLUMN `ACHIEVE_PERF_PV` decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '推荐会员及格后晋级达标业绩PV' AFTER `ACHIEVE_MEMBER_NUM`;
  4. -- 蓝星管理奖增加推荐会员相关属性
  5. ALTER TABLE `AR_BS_BONUS_103_CALC` ADD COLUMN `ACHIEVE_MEMBER_NUM` INT NOT NULL DEFAULT '0' COMMENT '推荐会员达标数';
  6. ALTER TABLE `AR_BS_BONUS_103_CALC` ADD COLUMN `ACHIEVE_PERF_PV` decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '推荐会员及格后晋级达标业绩PV';
  7. ALTER TABLE `AR_BS_BONUS_103_TEST` ADD COLUMN `ACHIEVE_MEMBER_NUM` INT NOT NULL DEFAULT '0' COMMENT '推荐会员达标数';
  8. ALTER TABLE `AR_BS_BONUS_103_TEST` ADD COLUMN `ACHIEVE_PERF_PV` decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '推荐会员及格后晋级达标业绩PV';
  9. ALTER TABLE `AR_CALC_BONUS_BS` ADD COLUMN `ACHIEVE_MEMBER_NUM` INT NOT NULL DEFAULT '0' COMMENT '推荐会员达标数';
  10. ALTER TABLE `AR_CALC_BONUS_BS` ADD COLUMN `ACHIEVE_PERF_PV` decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '推荐会员及格后晋级达标业绩PV';
  11. -- 蓝星管理奖存储过程修改
  12. CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCINIT`(IN `PCPID` INT, IN `PCALCMONTH` TINYINT, IN `PCALCYEAR` INT)
  13. BEGIN
  14. DECLARE
  15. AC_USER_NO INT; -- 邀请会员达标数
  16. DECLARE
  17. MLIMITPV, -- 邀请会员不及格达标PV
  18. AC_PERF_PV DECIMAL ( 10, 2 ); -- 邀请会员及格达标PV
  19. -- 查询第一个级别的邀请会员数、达标PV值以及等奖比例
  20. SELECT
  21. T.ACHIEVE_PV,
  22. T.ACHIEVE_PERF_PV,
  23. T.ACHIEVE_MEMBER_NUM
  24. INTO MLIMITPV, AC_PERF_PV, AC_USER_NO
  25. FROM
  26. AR_EMPLOY_LEVEL T
  27. WHERE
  28. T.ID = 'E121497617216708615';
  29. INSERT INTO AR_BS_BONUS_103_CALC (
  30. LAST_DEC_LV,
  31. LAST_EMP_LV,
  32. LAST_STATUS,
  33. USER_ID,
  34. INTRODUCER_ID,
  35. LAYER,
  36. PV,
  37. GPV10,
  38. GPV,
  39. GPV_4_CALC,
  40. USER_TYPE10,
  41. USER_TYPE,
  42. BONUS10,
  43. BONUS20,
  44. BONUS30,
  45. BONUS40,
  46. BONUS50,
  47. BONUS60,
  48. BONUS70,
  49. BONUS80,
  50. BONUS90,
  51. BONUS100,
  52. BONUS110,
  53. BONUS,
  54. PRODUCT_POINT,
  55. CALC_PERIOD_ID,
  56. ACHIEVE_MEMBER_NUM,
  57. ACHIEVE_PERF_PV
  58. ) SELECT
  59. AU.LAST_DEC_LV,
  60. AU.EMP_LV,
  61. AU.STATUS,
  62. AU.ID,
  63. IFNULL( AURN.PARENT_UID, 0 ),
  64. AURN.TOP_DEEP,
  65. IFNULL( AO.PV, 0 ),
  66. 0,
  67. 0,
  68. 0,
  69. 0,
  70. 0,
  71. 0,
  72. 0,
  73. 0,
  74. 0,
  75. 0,
  76. 0,
  77. 0,
  78. 0,
  79. 0,
  80. 0,
  81. 0,
  82. 0,
  83. 0,
  84. PCPID,
  85. IFNULL(DO.ACHIEVE_MEMBER_NUM, 0) AS ACHIEVE_NUM,
  86. IF(DO.ACHIEVE_MEMBER_NUM >= AC_USER_NO, AC_PERF_PV, MLIMITPV) AS ACHIEVE_PV
  87. FROM
  88. AR_USER AU
  89. INNER JOIN AR_USER_RELATION_NEW AURN ON AU.ID = AURN.USER_ID
  90. LEFT JOIN (
  91. SELECT
  92. USER_ID,
  93. SUM( PV ) PV
  94. FROM
  95. AR_PERF_ORDER
  96. WHERE
  97. PERIOD_NUM IN ( SELECT PERIOD_NUM FROM AR_PERIOD WHERE CALC_YEAR = PCALCYEAR AND CALC_MONTH = PCALCMONTH )
  98. GROUP BY
  99. USER_ID
  100. ) AO ON AO.USER_ID = AU.ID
  101. LEFT JOIN (
  102. SELECT
  103. REC_USER_ID,
  104. COUNT(ID) AS ACHIEVE_MEMBER_NUM,
  105. GROUP_CONCAT(ID) AS ACHIEVE_MEMBER
  106. FROM
  107. AR_DEC_ORDER
  108. WHERE
  109. IS_DEL = 0 AND PERIOD_NUM IN ( SELECT PERIOD_NUM FROM AR_PERIOD WHERE PCALCYEAR AND CALC_MONTH = PCALCMONTH )
  110. GROUP BY
  111. REC_USER_ID
  112. ) DO ON DO.REC_USER_ID = AU.ID
  113. WHERE
  114. AU.DELETED = 0;
  115. END
  116. CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALC10`(IN `PCPID` INT)
  117. BEGIN
  118. DECLARE
  119. MLAYER,
  120. MMAXLAYER INT;
  121. DECLARE
  122. MRATE,
  123. MLIMITPV DECIMAL ( 10, 2 );-- 查询第一个级别的限制以及等奖比例
  124. SELECT
  125. T.ACHIEVE_PV,
  126. T.BS_PERCENT / 100 INTO MLIMITPV,
  127. MRATE
  128. FROM
  129. AR_EMPLOY_LEVEL T
  130. WHERE
  131. T.ID = 'E121497617216708615';
  132. SELECT
  133. MAX( LAYER ) INTO MLAYER
  134. FROM
  135. AR_BS_BONUS_103_CALC
  136. WHERE
  137. PV > 0;
  138. SET MMAXLAYER := MLAYER;
  139. WHILE
  140. MLAYER >= 0 DO
  141. IF
  142. ( MLAYER < MMAXLAYER ) THEN-- 向上累计
  143. UPDATE AR_BS_BONUS_103_CALC T1
  144. INNER JOIN (
  145. SELECT
  146. INTRODUCER_ID,
  147. SUM( GPV10 ) GPV10
  148. FROM
  149. AR_BS_BONUS_103_CALC
  150. WHERE
  151. LAYER = MLAYER + 1
  152. AND USER_TYPE10 = 0
  153. AND GPV10 > 0
  154. GROUP BY
  155. INTRODUCER_ID
  156. ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
  157. AND T1.LAYER = MLAYER
  158. SET T1.GPV10 = T2.GPV10;-- 没有升级的会员需要将自己的小组业绩清零
  159. UPDATE AR_BS_BONUS_103_CALC T
  160. SET T.GPV10 = 0
  161. WHERE
  162. T.GPV10 < T.ACHIEVE_PERF_PV AND T.LAYER = MLAYER + 1 AND USER_TYPE10 = 0 AND T.GPV10 > 0;
  163. END IF;
  164. UPDATE AR_BS_BONUS_103_CALC T1
  165. SET T1.GPV10 = T1.GPV10 + T1.PV
  166. WHERE
  167. T1.LAYER = MLAYER
  168. AND T1.PV > 0;-- 是否达标 如果达标
  169. UPDATE AR_BS_BONUS_103_CALC T
  170. SET T.USER_TYPE10 = 10
  171. WHERE
  172. T.GPV10 >= T.ACHIEVE_PERF_PV
  173. AND T.LAYER = MLAYER
  174. AND T.USER_TYPE10 = 0;
  175. IF
  176. ( MLAYER > 0 ) THEN-- 升级为蓝星A
  177. CALL CALCUPGARDE ( MLAYER );
  178. END IF;
  179. SET MLAYER := MLAYER - 1;
  180. END WHILE;
  181. UPDATE AR_BS_BONUS_103_CALC T
  182. SET T.BONUS10 = T.GPV10 * MRATE
  183. WHERE
  184. T.USER_TYPE10 = 10
  185. AND T.GPV10 > 0;
  186. UPDATE AR_BS_BONUS_103_CALC
  187. SET USER_TYPE = 0;
  188. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  189. SELECT USER_ID, NULL, 10, GPV10 * MRATE, GPV10, MRATE ,PCPID FROM AR_BS_BONUS_103_CALC WHERE USER_TYPE10 = 10
  190. AND GPV10 > 0;
  191. END
  192. CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALC20`(IN `PCPID` INT)
  193. BEGIN
  194. DECLARE
  195. MLAYER,
  196. MMAXLAYER,
  197. MCOUNT INT;
  198. DECLARE
  199. MRATE,
  200. MLIMITPV DECIMAL ( 10, 2 );
  201. START TRANSACTION;-- 第一个级别的限制
  202. SELECT
  203. T.ACHIEVE_PV INTO MLIMITPV
  204. FROM
  205. AR_EMPLOY_LEVEL T
  206. WHERE
  207. T.ID = 'E121497617216708615';-- 第二个级别得奖的比例
  208. SELECT
  209. T.BS_PERCENT / 100 INTO MRATE
  210. FROM
  211. AR_EMPLOY_LEVEL T
  212. WHERE
  213. T.ID = '67BE5FE7857C216AE055736AECE8644D';
  214. SELECT
  215. MAX( LAYER ) INTO MLAYER
  216. FROM
  217. AR_BS_BONUS_103_CALC
  218. WHERE
  219. PV > 0;
  220. SET MMAXLAYER := MLAYER;
  221. WHILE
  222. MLAYER >= 0 DO
  223. IF
  224. ( MLAYER < MMAXLAYER ) THEN-- 向上累计
  225. UPDATE AR_BS_BONUS_103_CALC T1
  226. INNER JOIN (
  227. SELECT
  228. INTRODUCER_ID,
  229. SUM( GPV ) GPV
  230. FROM
  231. AR_BS_BONUS_103_CALC
  232. WHERE
  233. LAYER = MLAYER + 1
  234. AND USER_TYPE = 0
  235. AND GPV > 0
  236. GROUP BY
  237. INTRODUCER_ID
  238. ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
  239. AND T1.LAYER = MLAYER
  240. SET T1.GPV = T2.GPV;-- 没有升级的会员需要将自己的小组业绩清零
  241. UPDATE AR_BS_BONUS_103_CALC T
  242. SET T.GPV = 0
  243. WHERE
  244. T.GPV < T.ACHIEVE_PERF_PV AND T.LAYER = MLAYER + 1 AND GPV > 0;
  245. END IF;
  246. UPDATE AR_BS_BONUS_103_CALC T1
  247. SET T1.GPV = T1.GPV + T1.PV
  248. WHERE
  249. T1.LAYER = MLAYER;-- 是否达标 如果达标
  250. UPDATE AR_BS_BONUS_103_CALC T
  251. SET T.USER_TYPE = 10
  252. WHERE
  253. T.GPV >= T.ACHIEVE_PERF_PV
  254. AND T.LAYER = MLAYER;
  255. SET MLAYER := MLAYER - 1;
  256. END WHILE;
  257. UPDATE AR_BS_BONUS_103_CALC
  258. SET GPV = 0
  259. WHERE
  260. USER_TYPE = 0
  261. AND GPV > 0;
  262. SELECT
  263. MAX( LAYER ) INTO MLAYER
  264. FROM
  265. AR_BS_BONUS_103_CALC
  266. WHERE
  267. USER_TYPE > 0;
  268. SET MMAXLAYER := MLAYER;-- 添加至新网体页面
  269. INSERT INTO AR_BS_BONUS_103_CALC_NET ( USER_ID, INTRODUCER_ID, CALC_PERIOD_ID, USER_TYPE, GPV, DIRECTLY_UNDER, LAYER, TEAM_GPV ) SELECT
  270. USER_ID,
  271. INTRODUCER_ID,
  272. CALC_PERIOD_ID,
  273. USER_TYPE,
  274. GPV,
  275. 0,
  276. LAYER,
  277. 0
  278. FROM
  279. AR_BS_BONUS_103_CALC
  280. WHERE
  281. LAYER <= MLAYER; -- 处理新的网体
  282. DELETE FROM AR_BS_BONUS_103_CALC_NET WHERE LAYER = MLAYER AND USER_TYPE = 0; SET MLAYER := MLAYER - 1; WHILE MLAYER >= 0 DO-- 计算直属宽度
  283. UPDATE AR_BS_BONUS_103_CALC_NET T1
  284. INNER JOIN ( SELECT INTRODUCER_ID, COUNT( * ) SONS FROM AR_BS_BONUS_103_CALC_NET WHERE LAYER = MLAYER + 1 GROUP BY INTRODUCER_ID ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
  285. AND T1.LAYER = MLAYER
  286. SET T1.DIRECTLY_UNDER = T2.SONS;-- 本人达标并且下属满足一个及以上的达标数升级为第二个级别
  287. UPDATE AR_BS_BONUS_103_CALC_NET T1
  288. SET T1.USER_TYPE = 20
  289. WHERE
  290. T1.LAYER = MLAYER
  291. AND USER_TYPE = 10
  292. AND DIRECTLY_UNDER >= 1;-- 计算本层达标人员
  293. SELECT
  294. COUNT( * ) INTO MCOUNT
  295. FROM
  296. AR_BS_BONUS_103_CALC_NET C
  297. WHERE
  298. C.DIRECTLY_UNDER >= 2
  299. AND C.USER_TYPE = 0
  300. AND LAYER = MLAYER;
  301. IF
  302. ( MCOUNT > 0 ) THEN
  303. CALL CALC20_0 ( MLAYER, PCPID );
  304. END IF;-- 删除未达标人员
  305. CALL CALCDELNET ( MLAYER );
  306. SET MLAYER := MLAYER - 1;
  307. END WHILE;-- 计算GPV_4_CALC,会员级别
  308. UPDATE AR_BS_BONUS_103_CALC C1
  309. INNER JOIN AR_BS_BONUS_103_CALC_NET C2 ON C1.USER_ID = C2.USER_ID
  310. SET C1.GPV_4_CALC = C2.GPV,
  311. C1.USER_TYPE = C2.USER_TYPE;-- 计算见习奖金
  312. UPDATE AR_BS_BONUS_103_CALC C1
  313. INNER JOIN ( SELECT INTRODUCER_ID, SUM( GPV ) ALL_GPV FROM AR_BS_BONUS_103_CALC_NET GROUP BY INTRODUCER_ID ) C2 ON C1.USER_ID = C2.INTRODUCER_ID
  314. AND C1.USER_TYPE = 20
  315. SET C1.BONUS20 = C2.ALL_GPV * MRATE;
  316. COMMIT;
  317. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE, PERIOD_NUM ) SELECT
  318. C1.USER_ID,
  319. NULL,
  320. 20,
  321. C2.ALL_GPV * MRATE,
  322. C2.ALL_GPV,
  323. MRATE,
  324. PCPID
  325. FROM
  326. AR_BS_BONUS_103_CALC C1
  327. INNER JOIN ( SELECT INTRODUCER_ID, SUM( GPV ) ALL_GPV FROM AR_BS_BONUS_103_CALC_NET GROUP BY INTRODUCER_ID ) C2 ON C1.USER_ID = C2.INTRODUCER_ID
  328. AND C1.USER_TYPE = 20
  329. AND ALL_GPV > 0;
  330. END