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. 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(R.USER_ID) AS ACHIEVE_MEMBER_NUM
  106. FROM
  107. AR_PERF_ORDER O
  108. INNER JOIN AR_USER_RELATION_NEW R ON O.USER_ID = R.USER_ID
  109. WHERE
  110. O.CALC_MONTH = CONCAT(PCALCYEAR, PCALCMONTH) AND O.DEC_TYPE = 'ZC'
  111. GROUP BY R.PARENT_UID
  112. ) DO ON DO.PARENT_UID = 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
  331. CREATE DEFINER=`black_tea_0309`@`%` PROCEDURE `CALCKEEP`(IN PCALCYEAR int, IN PCALCMONTH int)
  332. BEGIN
  333. INSERT INTO AR_BS_BONUS_103_TEST SELECT
  334. *
  335. FROM
  336. AR_BS_BONUS_103_CALC;
  337. INSERT INTO AR_BS_BONUS_103_TEST_NET SELECT
  338. *
  339. FROM
  340. AR_BS_BONUS_103_CALC_NET;
  341. INSERT INTO AR_CALC_BONUS_BS (
  342. USER_ID,
  343. INTRODUCER_ID,
  344. LAST_DEC_LV,
  345. LAST_EMP_LV,
  346. LAST_STATUS,
  347. LEVEL_ID,
  348. ORI_BONUS,
  349. MANAGE_TAX,
  350. AMOUNT,
  351. PRODUCT_POINT,
  352. PERIOD_NUM,
  353. CALC_YEAR,
  354. CALC_MONTH,
  355. P_CALC_MONTH,
  356. CREATED_AT,
  357. ORI_BONUS_MNT,
  358. MANAGE_TAX_MNT,
  359. AMOUNT_MNT,
  360. ORI_BONUS_ABBR,
  361. MANAGE_TAX_ABBR,
  362. AMOUNT_ABBR,
  363. ACHIEVE_MEMBER_NUM,
  364. ACHIEVE_PERF_PV
  365. ) SELECT
  366. A.USER_ID,
  367. A.INTRODUCER_ID,
  368. A.LAST_DEC_LV,
  369. A.LAST_EMP_LV,
  370. A.LAST_STATUS,
  371. B.ID,
  372. IFNULL( A.BONUS, 0 ),
  373. 0,
  374. IFNULL( A.BONUS, 0 ),
  375. IFNULL( A.PRODUCT_POINT, 0 ),
  376. CALC_PERIOD_ID,
  377. PCALCYEAR,
  378. PCALCYEAR*100+PCALCMONTH,
  379. NOW(),
  380. UNIX_TIMESTAMP(
  381. NOW()),
  382. IFNULL( A.BONUS_MNT, 0 ),
  383. 0,
  384. IFNULL( A.BONUS_MNT, 0 ),
  385. IFNULL( A.BONUS_ABBR, 0 ),
  386. 0,
  387. IFNULL( A.BONUS_ABBR, 0 ),
  388. A.ACHIEVE_MEMBER_NUM,
  389. A.ACHIEVE_PERF_PV
  390. FROM
  391. AR_BS_BONUS_103_CALC A
  392. LEFT JOIN AR_EMPLOY_LEVEL B ON A.USER_TYPE = B.SORT * 10
  393. WHERE
  394. A.BONUS > 0
  395. OR A.PRODUCT_POINT > 0;
  396. INSERT INTO AR_CALC_BONUS_BS_DETAIL (
  397. USER_ID,
  398. INTRODUCER_ID,
  399. LAST_DEC_LV,
  400. LAST_EMP_LV,
  401. LAST_STATUS,
  402. LEVEL_ID,
  403. ORI_BONUS,
  404. MANAGE_TAX,
  405. AMOUNT,
  406. PRODUCT_POINT,
  407. PERIOD_NUM,
  408. LAYER,
  409. PV,
  410. GPV10,
  411. GPV,
  412. GPV_4_CALC,
  413. USER_TYPE10,
  414. USER_TYPE,
  415. BONUS10,
  416. BONUS20,
  417. BONUS30,
  418. BONUS40,
  419. BONUS50,
  420. BONUS60,
  421. BONUS70,
  422. BONUS80,
  423. BONUS90,
  424. BONUS100,
  425. BONUS110,
  426. CALC_YEAR,
  427. CALC_MONTH,
  428. P_CALC_MONTH,
  429. CREATED_AT,
  430. ORI_BONUS_MNT,
  431. MANAGE_TAX_MNT,
  432. AMOUNT_MNT,
  433. ORI_BONUS_ABBR,
  434. MANAGE_TAX_ABBR,
  435. AMOUNT_ABBR
  436. ) SELECT
  437. USER_ID,
  438. INTRODUCER_ID,
  439. LAST_DEC_LV,
  440. LAST_EMP_LV,
  441. LAST_STATUS,
  442. B.ID,
  443. IFNULL( BONUS, 0 ),
  444. 0,
  445. IFNULL( BONUS, 0 ),
  446. IFNULL( PRODUCT_POINT, 0 ),
  447. CALC_PERIOD_ID,
  448. LAYER,
  449. PV,
  450. GPV10,
  451. GPV,
  452. GPV_4_CALC,
  453. USER_TYPE10,
  454. USER_TYPE,
  455. BONUS10,
  456. BONUS20,
  457. BONUS30,
  458. BONUS40,
  459. BONUS50,
  460. BONUS60,
  461. BONUS70,
  462. BONUS80,
  463. BONUS90,
  464. BONUS100,
  465. BONUS110,
  466. PCALCYEAR,
  467. PCALCYEAR*100+PCALCMONTH,
  468. NOW(),
  469. UNIX_TIMESTAMP(
  470. NOW()),
  471. IFNULL( A.BONUS_MNT, 0 ),
  472. 0,
  473. IFNULL( A.BONUS_MNT, 0 ),
  474. IFNULL( A.BONUS_ABBR, 0 ),
  475. 0,
  476. IFNULL( A.BONUS_ABBR, 0 )
  477. FROM
  478. AR_BS_BONUS_103_CALC A
  479. LEFT JOIN ( SELECT ID, SORT FROM AR_EMPLOY_LEVEL ) B ON A.USER_TYPE = B.SORT * 10;
  480. END