1988.sql 17 KB

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