1988.sql 17 KB

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