1988.sql 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522
  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. UPDATE `AR_EMPLOY_LEVEL` SET `ACHIEVE_MEMBER_NUM` = 3, `ACHIEVE_PERF_PV` = 1000 WHERE ID = 'E121497617216708615';
  5. -- 蓝星管理奖增加推荐会员相关属性
  6. ALTER TABLE `AR_BS_BONUS_103_CALC` ADD COLUMN `ACHIEVE_MEMBER_NUM` INT NOT NULL DEFAULT '0' COMMENT '推荐会员达标数';
  7. ALTER TABLE `AR_BS_BONUS_103_CALC` ADD COLUMN `ACHIEVE_PERF_PV` decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '推荐会员及格后晋级达标业绩PV';
  8. ALTER TABLE `AR_BS_BONUS_103_TEST` ADD COLUMN `ACHIEVE_MEMBER_NUM` INT NOT NULL DEFAULT '0' COMMENT '推荐会员达标数';
  9. ALTER TABLE `AR_BS_BONUS_103_TEST` ADD COLUMN `ACHIEVE_PERF_PV` decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '推荐会员及格后晋级达标业绩PV';
  10. ALTER TABLE `AR_CALC_BONUS_BS` ADD COLUMN `ACHIEVE_MEMBER_NUM` INT NOT NULL DEFAULT '0' COMMENT '推荐会员达标数';
  11. ALTER TABLE `AR_CALC_BONUS_BS` ADD COLUMN `ACHIEVE_PERF_PV` decimal(10, 2) NOT NULL DEFAULT '0.00' COMMENT '推荐会员及格后晋级达标业绩PV';
  12. -- 蓝星管理奖存储过程修改
  13. CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCINIT`(IN `PCPID` INT, IN `PCALCMONTH` TINYINT, IN `PCALCYEAR` INT)
  14. BEGIN
  15. DECLARE
  16. AC_USER_NO INT; -- 邀请会员达标数
  17. DECLARE
  18. MLIMITPV, -- 邀请会员不及格达标PV
  19. AC_PERF_PV DECIMAL ( 10, 2 ); -- 邀请会员及格达标PV
  20. -- 查询第一个级别的邀请会员数、达标PV值以及等奖比例
  21. SELECT
  22. T.ACHIEVE_PV,
  23. T.ACHIEVE_PERF_PV,
  24. T.ACHIEVE_MEMBER_NUM
  25. INTO MLIMITPV, AC_PERF_PV, AC_USER_NO
  26. FROM
  27. AR_EMPLOY_LEVEL T
  28. WHERE
  29. T.ID = 'E121497617216708615';
  30. INSERT INTO AR_BS_BONUS_103_CALC (
  31. LAST_DEC_LV,
  32. LAST_EMP_LV,
  33. LAST_STATUS,
  34. USER_ID,
  35. INTRODUCER_ID,
  36. LAYER,
  37. PV,
  38. GPV10,
  39. GPV,
  40. GPV_4_CALC,
  41. USER_TYPE10,
  42. USER_TYPE,
  43. BONUS10,
  44. BONUS20,
  45. BONUS30,
  46. BONUS40,
  47. BONUS50,
  48. BONUS60,
  49. BONUS70,
  50. BONUS80,
  51. BONUS90,
  52. BONUS100,
  53. BONUS110,
  54. BONUS,
  55. PRODUCT_POINT,
  56. CALC_PERIOD_ID,
  57. ACHIEVE_MEMBER_NUM,
  58. ACHIEVE_PERF_PV
  59. ) SELECT
  60. AU.LAST_DEC_LV,
  61. AU.EMP_LV,
  62. AU.STATUS,
  63. AU.ID,
  64. IFNULL( AURN.PARENT_UID, 0 ),
  65. AURN.TOP_DEEP,
  66. IFNULL( AO.PV, 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. 0,
  85. PCPID,
  86. IFNULL(DO.ACHIEVE_MEMBER_NUM, 0) AS ACHIEVE_NUM,
  87. IF(DO.ACHIEVE_MEMBER_NUM >= AC_USER_NO, AC_PERF_PV, MLIMITPV) AS ACHIEVE_PV
  88. FROM
  89. AR_USER AU
  90. INNER JOIN AR_USER_RELATION_NEW AURN ON AU.ID = AURN.USER_ID
  91. LEFT JOIN (
  92. SELECT
  93. USER_ID,
  94. SUM( PV ) PV
  95. FROM
  96. AR_PERF_ORDER
  97. WHERE
  98. PERIOD_NUM IN ( SELECT PERIOD_NUM FROM AR_PERIOD WHERE CALC_YEAR = PCALCYEAR AND CALC_MONTH = PCALCMONTH )
  99. GROUP BY
  100. USER_ID
  101. ) AO ON AO.USER_ID = AU.ID
  102. LEFT JOIN (
  103. SELECT
  104. R.PARENT_UID,
  105. COUNT(O.USER_ID) AS ACHIEVE_MEMBER_NUM,
  106. GROUP_CONCAT(CONCAT(O.USER_ID, '_', U.USER_NAME, '_', O.PERIOD_NUM) separator ' | ') AS ACHIEVE_MEMBER
  107. FROM
  108. AR_PERF_ORDER O
  109. INNER JOIN AR_USER_RELATION_NEW R ON O.USER_ID = R.USER_ID
  110. INNER JOIN AR_USER U ON O.USER_ID = U.ID
  111. WHERE
  112. O.CALC_MONTH = PCALCMONTH AND O.DEC_TYPE = 'ZC'
  113. GROUP BY R.PARENT_UID
  114. ) DO ON DO.PARENT_UID = AU.ID
  115. WHERE
  116. AU.DELETED = 0;
  117. END
  118. CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALC10`(IN `PCPID` INT)
  119. BEGIN
  120. DECLARE
  121. MLAYER,
  122. MMAXLAYER INT;
  123. DECLARE
  124. MRATE,
  125. MLIMITPV DECIMAL ( 10, 2 );-- 查询第一个级别的限制以及等奖比例
  126. SELECT
  127. T.ACHIEVE_PV,
  128. T.BS_PERCENT / 100 INTO MLIMITPV,
  129. MRATE
  130. FROM
  131. AR_EMPLOY_LEVEL T
  132. WHERE
  133. T.ID = 'E121497617216708615';
  134. SELECT
  135. MAX( LAYER ) INTO MLAYER
  136. FROM
  137. AR_BS_BONUS_103_CALC
  138. WHERE
  139. PV > 0;
  140. SET MMAXLAYER := MLAYER;
  141. WHILE
  142. MLAYER >= 0 DO
  143. IF
  144. ( MLAYER < MMAXLAYER ) THEN-- 向上累计
  145. UPDATE AR_BS_BONUS_103_CALC T1
  146. INNER JOIN (
  147. SELECT
  148. INTRODUCER_ID,
  149. SUM( GPV10 ) GPV10
  150. FROM
  151. AR_BS_BONUS_103_CALC
  152. WHERE
  153. LAYER = MLAYER + 1
  154. AND USER_TYPE10 = 0
  155. AND GPV10 > 0
  156. GROUP BY
  157. INTRODUCER_ID
  158. ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
  159. AND T1.LAYER = MLAYER
  160. SET T1.GPV10 = T2.GPV10;-- 没有升级的会员需要将自己的小组业绩清零
  161. UPDATE AR_BS_BONUS_103_CALC T
  162. SET T.GPV10 = 0
  163. WHERE
  164. T.GPV10 < T.ACHIEVE_PERF_PV AND T.LAYER = MLAYER + 1 AND USER_TYPE10 = 0 AND T.GPV10 > 0;
  165. END IF;
  166. UPDATE AR_BS_BONUS_103_CALC T1
  167. SET T1.GPV10 = T1.GPV10 + T1.PV
  168. WHERE
  169. T1.LAYER = MLAYER
  170. AND T1.PV > 0;-- 是否达标 如果达标
  171. UPDATE AR_BS_BONUS_103_CALC T
  172. SET T.USER_TYPE10 = 10
  173. WHERE
  174. T.GPV10 >= T.ACHIEVE_PERF_PV
  175. AND T.LAYER = MLAYER
  176. AND T.USER_TYPE10 = 0;
  177. IF
  178. ( MLAYER > 0 ) THEN-- 升级为蓝星A
  179. CALL CALCUPGARDE ( MLAYER );
  180. END IF;
  181. SET MLAYER := MLAYER - 1;
  182. END WHILE;
  183. UPDATE AR_BS_BONUS_103_CALC T
  184. SET T.BONUS10 = T.GPV10 * MRATE
  185. WHERE
  186. T.USER_TYPE10 = 10
  187. AND T.GPV10 > 0;
  188. UPDATE AR_BS_BONUS_103_CALC
  189. SET USER_TYPE = 0;
  190. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  191. SELECT USER_ID, NULL, 10, GPV10 * MRATE, GPV10, MRATE ,PCPID FROM AR_BS_BONUS_103_CALC WHERE USER_TYPE10 = 10
  192. AND GPV10 > 0;
  193. END
  194. CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALC20`(IN `PCPID` INT)
  195. BEGIN
  196. DECLARE
  197. MLAYER,
  198. MMAXLAYER,
  199. MCOUNT INT;
  200. DECLARE
  201. MRATE,
  202. MLIMITPV DECIMAL ( 10, 2 );
  203. START TRANSACTION;-- 第一个级别的限制
  204. SELECT
  205. T.ACHIEVE_PV INTO MLIMITPV
  206. FROM
  207. AR_EMPLOY_LEVEL T
  208. WHERE
  209. T.ID = 'E121497617216708615';-- 第二个级别得奖的比例
  210. SELECT
  211. T.BS_PERCENT / 100 INTO MRATE
  212. FROM
  213. AR_EMPLOY_LEVEL T
  214. WHERE
  215. T.ID = '67BE5FE7857C216AE055736AECE8644D';
  216. SELECT
  217. MAX( LAYER ) INTO MLAYER
  218. FROM
  219. AR_BS_BONUS_103_CALC
  220. WHERE
  221. PV > 0;
  222. SET MMAXLAYER := MLAYER;
  223. WHILE
  224. MLAYER >= 0 DO
  225. IF
  226. ( MLAYER < MMAXLAYER ) THEN-- 向上累计
  227. UPDATE AR_BS_BONUS_103_CALC T1
  228. INNER JOIN (
  229. SELECT
  230. INTRODUCER_ID,
  231. SUM( GPV ) GPV
  232. FROM
  233. AR_BS_BONUS_103_CALC
  234. WHERE
  235. LAYER = MLAYER + 1
  236. AND USER_TYPE = 0
  237. AND GPV > 0
  238. GROUP BY
  239. INTRODUCER_ID
  240. ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
  241. AND T1.LAYER = MLAYER
  242. SET T1.GPV = T2.GPV;-- 没有升级的会员需要将自己的小组业绩清零
  243. UPDATE AR_BS_BONUS_103_CALC T
  244. SET T.GPV = 0
  245. WHERE
  246. T.GPV < T.ACHIEVE_PERF_PV AND T.LAYER = MLAYER + 1 AND GPV > 0;
  247. END IF;
  248. UPDATE AR_BS_BONUS_103_CALC T1
  249. SET T1.GPV = T1.GPV + T1.PV
  250. WHERE
  251. T1.LAYER = MLAYER;-- 是否达标 如果达标
  252. UPDATE AR_BS_BONUS_103_CALC T
  253. SET T.USER_TYPE = 10
  254. WHERE
  255. T.GPV >= T.ACHIEVE_PERF_PV
  256. AND T.LAYER = MLAYER;
  257. SET MLAYER := MLAYER - 1;
  258. END WHILE;
  259. UPDATE AR_BS_BONUS_103_CALC
  260. SET GPV = 0
  261. WHERE
  262. USER_TYPE = 0
  263. AND GPV > 0;
  264. SELECT
  265. MAX( LAYER ) INTO MLAYER
  266. FROM
  267. AR_BS_BONUS_103_CALC
  268. WHERE
  269. USER_TYPE > 0;
  270. SET MMAXLAYER := MLAYER;-- 添加至新网体页面
  271. INSERT INTO AR_BS_BONUS_103_CALC_NET ( USER_ID, INTRODUCER_ID, CALC_PERIOD_ID, USER_TYPE, GPV, DIRECTLY_UNDER, LAYER, TEAM_GPV ) SELECT
  272. USER_ID,
  273. INTRODUCER_ID,
  274. CALC_PERIOD_ID,
  275. USER_TYPE,
  276. GPV,
  277. 0,
  278. LAYER,
  279. 0
  280. FROM
  281. AR_BS_BONUS_103_CALC
  282. WHERE
  283. LAYER <= MLAYER; -- 处理新的网体
  284. DELETE FROM AR_BS_BONUS_103_CALC_NET WHERE LAYER = MLAYER AND USER_TYPE = 0; SET MLAYER := MLAYER - 1; WHILE MLAYER >= 0 DO-- 计算直属宽度
  285. UPDATE AR_BS_BONUS_103_CALC_NET T1
  286. 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
  287. AND T1.LAYER = MLAYER
  288. SET T1.DIRECTLY_UNDER = T2.SONS;-- 本人达标并且下属满足一个及以上的达标数升级为第二个级别
  289. UPDATE AR_BS_BONUS_103_CALC_NET T1
  290. SET T1.USER_TYPE = 20
  291. WHERE
  292. T1.LAYER = MLAYER
  293. AND USER_TYPE = 10
  294. AND DIRECTLY_UNDER >= 1;-- 计算本层达标人员
  295. SELECT
  296. COUNT( * ) INTO MCOUNT
  297. FROM
  298. AR_BS_BONUS_103_CALC_NET C
  299. WHERE
  300. C.DIRECTLY_UNDER >= 2
  301. AND C.USER_TYPE = 0
  302. AND LAYER = MLAYER;
  303. IF
  304. ( MCOUNT > 0 ) THEN
  305. CALL CALC20_0 ( MLAYER, PCPID );
  306. END IF;-- 删除未达标人员
  307. CALL CALCDELNET ( MLAYER );
  308. SET MLAYER := MLAYER - 1;
  309. END WHILE;-- 计算GPV_4_CALC,会员级别
  310. UPDATE AR_BS_BONUS_103_CALC C1
  311. INNER JOIN AR_BS_BONUS_103_CALC_NET C2 ON C1.USER_ID = C2.USER_ID
  312. SET C1.GPV_4_CALC = C2.GPV,
  313. C1.USER_TYPE = C2.USER_TYPE;-- 计算见习奖金
  314. UPDATE AR_BS_BONUS_103_CALC C1
  315. 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
  316. AND C1.USER_TYPE = 20
  317. SET C1.BONUS20 = C2.ALL_GPV * MRATE;
  318. COMMIT;
  319. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE, PERIOD_NUM ) SELECT
  320. C1.USER_ID,
  321. NULL,
  322. 20,
  323. C2.ALL_GPV * MRATE,
  324. C2.ALL_GPV,
  325. MRATE,
  326. PCPID
  327. FROM
  328. AR_BS_BONUS_103_CALC C1
  329. 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
  330. AND C1.USER_TYPE = 20
  331. AND ALL_GPV > 0;
  332. END
  333. CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCKEEP`(IN PCALCYEAR int, IN PCALCMONTH int)
  334. BEGIN
  335. INSERT INTO AR_BS_BONUS_103_TEST SELECT
  336. *
  337. FROM
  338. AR_BS_BONUS_103_CALC;
  339. INSERT INTO AR_BS_BONUS_103_TEST_NET SELECT
  340. *
  341. FROM
  342. AR_BS_BONUS_103_CALC_NET;
  343. INSERT INTO AR_CALC_BONUS_BS (
  344. USER_ID,
  345. INTRODUCER_ID,
  346. LAST_DEC_LV,
  347. LAST_EMP_LV,
  348. LAST_STATUS,
  349. LEVEL_ID,
  350. ORI_BONUS,
  351. MANAGE_TAX,
  352. AMOUNT,
  353. PRODUCT_POINT,
  354. PERIOD_NUM,
  355. CALC_YEAR,
  356. CALC_MONTH,
  357. P_CALC_MONTH,
  358. CREATED_AT,
  359. ORI_BONUS_MNT,
  360. MANAGE_TAX_MNT,
  361. AMOUNT_MNT,
  362. ORI_BONUS_ABBR,
  363. MANAGE_TAX_ABBR,
  364. AMOUNT_ABBR,
  365. ACHIEVE_MEMBER_NUM,
  366. ACHIEVE_PERF_PV
  367. ) SELECT
  368. A.USER_ID,
  369. A.INTRODUCER_ID,
  370. A.LAST_DEC_LV,
  371. A.LAST_EMP_LV,
  372. A.LAST_STATUS,
  373. B.ID,
  374. IFNULL( A.BONUS, 0 ),
  375. 0,
  376. IFNULL( A.BONUS, 0 ),
  377. IFNULL( A.PRODUCT_POINT, 0 ),
  378. CALC_PERIOD_ID,
  379. PCALCYEAR,
  380. PCALCYEAR*100+PCALCMONTH,
  381. NOW(),
  382. UNIX_TIMESTAMP(
  383. NOW()),
  384. IFNULL( A.BONUS_MNT, 0 ),
  385. 0,
  386. IFNULL( A.BONUS_MNT, 0 ),
  387. IFNULL( A.BONUS_ABBR, 0 ),
  388. 0,
  389. IFNULL( A.BONUS_ABBR, 0 ),
  390. A.ACHIEVE_MEMBER_NUM,
  391. A.ACHIEVE_PERF_PV
  392. FROM
  393. AR_BS_BONUS_103_CALC A
  394. LEFT JOIN AR_EMPLOY_LEVEL B ON A.USER_TYPE = B.SORT * 10
  395. WHERE
  396. A.BONUS > 0
  397. OR A.PRODUCT_POINT > 0;
  398. INSERT INTO AR_CALC_BONUS_BS_DETAIL (
  399. USER_ID,
  400. INTRODUCER_ID,
  401. LAST_DEC_LV,
  402. LAST_EMP_LV,
  403. LAST_STATUS,
  404. LEVEL_ID,
  405. ORI_BONUS,
  406. MANAGE_TAX,
  407. AMOUNT,
  408. PRODUCT_POINT,
  409. PERIOD_NUM,
  410. LAYER,
  411. PV,
  412. GPV10,
  413. GPV,
  414. GPV_4_CALC,
  415. USER_TYPE10,
  416. USER_TYPE,
  417. BONUS10,
  418. BONUS20,
  419. BONUS30,
  420. BONUS40,
  421. BONUS50,
  422. BONUS60,
  423. BONUS70,
  424. BONUS80,
  425. BONUS90,
  426. BONUS100,
  427. BONUS110,
  428. CALC_YEAR,
  429. CALC_MONTH,
  430. P_CALC_MONTH,
  431. CREATED_AT,
  432. ORI_BONUS_MNT,
  433. MANAGE_TAX_MNT,
  434. AMOUNT_MNT,
  435. ORI_BONUS_ABBR,
  436. MANAGE_TAX_ABBR,
  437. AMOUNT_ABBR
  438. ) SELECT
  439. USER_ID,
  440. INTRODUCER_ID,
  441. LAST_DEC_LV,
  442. LAST_EMP_LV,
  443. LAST_STATUS,
  444. B.ID,
  445. IFNULL( BONUS, 0 ),
  446. 0,
  447. IFNULL( BONUS, 0 ),
  448. IFNULL( PRODUCT_POINT, 0 ),
  449. CALC_PERIOD_ID,
  450. LAYER,
  451. PV,
  452. GPV10,
  453. GPV,
  454. GPV_4_CALC,
  455. USER_TYPE10,
  456. USER_TYPE,
  457. BONUS10,
  458. BONUS20,
  459. BONUS30,
  460. BONUS40,
  461. BONUS50,
  462. BONUS60,
  463. BONUS70,
  464. BONUS80,
  465. BONUS90,
  466. BONUS100,
  467. BONUS110,
  468. PCALCYEAR,
  469. PCALCYEAR*100+PCALCMONTH,
  470. NOW(),
  471. UNIX_TIMESTAMP(
  472. NOW()),
  473. IFNULL( A.BONUS_MNT, 0 ),
  474. 0,
  475. IFNULL( A.BONUS_MNT, 0 ),
  476. IFNULL( A.BONUS_ABBR, 0 ),
  477. 0,
  478. IFNULL( A.BONUS_ABBR, 0 )
  479. FROM
  480. AR_BS_BONUS_103_CALC A
  481. LEFT JOIN ( SELECT ID, SORT FROM AR_EMPLOY_LEVEL ) B ON A.USER_TYPE = B.SORT * 10;
  482. END