test_test.sql 42 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876
  1. -- Active: 1688690638810@@127.0.0.1@3306
  2. /*
  3. Navicat Premium Data Transfer
  4. Source Server : NDS测试数据库
  5. Source Server Type : MySQL
  6. Source Server Version : 80028
  7. Source Host : 16.163.228.151:8051
  8. Source Schema : test_test
  9. Target Server Type : MySQL
  10. Target Server Version : 80028
  11. File Encoding : 65001
  12. Date: 06/07/2023 17:24:33
  13. */
  14. SET NAMES utf8mb4;
  15. SET FOREIGN_KEY_CHECKS = 0;
  16. -- ----------------------------
  17. -- Procedure structure for CALC10
  18. -- ----------------------------
  19. DROP PROCEDURE IF EXISTS `CALC10`;
  20. delimiter ;;
  21. CREATE PROCEDURE `CALC10`(IN `PCPID` INT)
  22. BEGIN
  23. DECLARE
  24. MLAYER,
  25. MMAXLAYER INT;
  26. DECLARE
  27. MRATE,
  28. MLIMITPV DECIMAL ( 10, 2 );-- 查询第一个级别的限制以及等奖比例
  29. SELECT
  30. T.ACHIEVE_PV,
  31. T.BS_PERCENT / 100 INTO MLIMITPV,
  32. MRATE
  33. FROM
  34. AR_EMPLOY_LEVEL T
  35. WHERE
  36. T.ID = 'E121497617216708615';
  37. UPDATE AR_BS_BONUS_103_CALC SET PV = PV_UP_ZC + PV_FX;
  38. SELECT
  39. MAX( LAYER ) INTO MLAYER
  40. FROM
  41. AR_BS_BONUS_103_CALC
  42. WHERE
  43. PV > 0;
  44. SET MMAXLAYER := MLAYER;
  45. WHILE
  46. MLAYER >= 0 DO
  47. IF
  48. ( MLAYER < MMAXLAYER ) THEN-- 向上累计
  49. UPDATE AR_BS_BONUS_103_CALC T1
  50. INNER JOIN (
  51. SELECT
  52. INTRODUCER_ID,
  53. SUM( GPV10 ) GPV10
  54. FROM
  55. AR_BS_BONUS_103_CALC
  56. WHERE
  57. LAYER = MLAYER + 1
  58. AND USER_TYPE10 = 0
  59. AND GPV10 > 0
  60. GROUP BY
  61. INTRODUCER_ID
  62. ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
  63. AND T1.LAYER = MLAYER
  64. SET T1.GPV10 = T2.GPV10;-- 没有升级的会员需要将自己的小组业绩清零
  65. UPDATE AR_BS_BONUS_103_CALC T
  66. SET T.GPV10 = 0
  67. WHERE
  68. T.GPV10 < MLIMITPV AND T.LAYER = MLAYER + 1 AND USER_TYPE10 = 0 AND T.GPV10 > 0;
  69. END IF;
  70. UPDATE AR_BS_BONUS_103_CALC T1
  71. SET T1.GPV10 = T1.GPV10 + T1.PV
  72. WHERE
  73. T1.LAYER = MLAYER
  74. AND T1.PV > 0;-- 是否达标 如果达标
  75. UPDATE AR_BS_BONUS_103_CALC T
  76. SET T.USER_TYPE10 = 10
  77. WHERE
  78. T.GPV10 >= MLIMITPV
  79. AND T.LAYER = MLAYER
  80. AND T.USER_TYPE10 = 0;
  81. IF
  82. ( MLAYER > 0 ) THEN-- 升级为蓝星A
  83. CALL CALCUPGARDE ( MLAYER );
  84. END IF;
  85. SET MLAYER := MLAYER - 1;
  86. END WHILE;
  87. UPDATE AR_BS_BONUS_103_CALC T
  88. SET T.BONUS10 = T.GPV10 * MRATE
  89. WHERE
  90. T.USER_TYPE10 = 10
  91. AND T.GPV10 > 0;
  92. UPDATE AR_BS_BONUS_103_CALC
  93. SET USER_TYPE = 0;
  94. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE,PERIOD_NUM )
  95. SELECT USER_ID, NULL, 10, GPV10 * MRATE, GPV10, MRATE ,PCPID FROM AR_BS_BONUS_103_CALC WHERE USER_TYPE10 = 10
  96. AND GPV10 > 0;
  97. END
  98. ;;
  99. delimiter ;
  100. -- ----------------------------
  101. -- Procedure structure for CALC20
  102. -- ----------------------------
  103. DROP PROCEDURE IF EXISTS `CALC20`;
  104. delimiter ;;
  105. CREATE PROCEDURE `CALC20`(IN `PCPID` INT)
  106. BEGIN
  107. DECLARE
  108. MLAYER,
  109. MMAXLAYER,
  110. MCOUNT INT;
  111. DECLARE
  112. MRATE,
  113. MLIMITPV DECIMAL ( 10, 2 );
  114. START TRANSACTION;-- 第一个级别的限制
  115. SELECT
  116. T.ACHIEVE_PV INTO MLIMITPV
  117. FROM
  118. AR_EMPLOY_LEVEL T
  119. WHERE
  120. T.ID = 'E121497617216708615';-- 第二个级别得奖的比例
  121. SELECT
  122. T.BS_PERCENT / 100 INTO MRATE
  123. FROM
  124. AR_EMPLOY_LEVEL T
  125. WHERE
  126. T.ID = '67BE5FE7857C216AE055736AECE8644D';
  127. UPDATE AR_BS_BONUS_103_CALC SET PV = PV_ZC + PV_FX;
  128. SELECT
  129. MAX( LAYER ) INTO MLAYER
  130. FROM
  131. AR_BS_BONUS_103_CALC
  132. WHERE
  133. PV > 0;
  134. SET MMAXLAYER := MLAYER;
  135. WHILE
  136. MLAYER >= 0 DO
  137. IF
  138. ( MLAYER < MMAXLAYER ) THEN-- 向上累计
  139. UPDATE AR_BS_BONUS_103_CALC T1
  140. INNER JOIN (
  141. SELECT
  142. INTRODUCER_ID,
  143. SUM( GPV ) GPV
  144. FROM
  145. AR_BS_BONUS_103_CALC
  146. WHERE
  147. LAYER = MLAYER + 1
  148. AND USER_TYPE = 0
  149. AND GPV > 0
  150. GROUP BY
  151. INTRODUCER_ID
  152. ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
  153. AND T1.LAYER = MLAYER
  154. SET T1.GPV = T2.GPV;-- 没有升级的会员需要将自己的小组业绩清零
  155. UPDATE AR_BS_BONUS_103_CALC T
  156. SET T.GPV = 0
  157. WHERE
  158. T.GPV < MLIMITPV AND T.LAYER = MLAYER + 1 AND GPV > 0;
  159. END IF;
  160. UPDATE AR_BS_BONUS_103_CALC T1
  161. SET T1.GPV = T1.GPV + T1.PV
  162. WHERE
  163. T1.LAYER = MLAYER;-- 是否达标 如果达标
  164. UPDATE AR_BS_BONUS_103_CALC T
  165. SET T.USER_TYPE = 10
  166. WHERE
  167. T.GPV >= MLIMITPV
  168. AND T.LAYER = MLAYER;
  169. SET MLAYER := MLAYER - 1;
  170. END WHILE;
  171. UPDATE AR_BS_BONUS_103_CALC
  172. SET GPV = 0
  173. WHERE
  174. USER_TYPE = 0
  175. AND GPV > 0;
  176. SELECT
  177. MAX( LAYER ) INTO MLAYER
  178. FROM
  179. AR_BS_BONUS_103_CALC
  180. WHERE
  181. USER_TYPE > 0;
  182. SET MMAXLAYER := MLAYER;-- 添加至新网体页面
  183. INSERT INTO AR_BS_BONUS_103_CALC_NET ( USER_ID, INTRODUCER_ID, CALC_PERIOD_ID, USER_TYPE, GPV, DIRECTLY_UNDER, LAYER, TEAM_GPV ) SELECT
  184. USER_ID,
  185. INTRODUCER_ID,
  186. CALC_PERIOD_ID,
  187. USER_TYPE,
  188. GPV,
  189. 0,
  190. LAYER,
  191. 0
  192. FROM
  193. AR_BS_BONUS_103_CALC
  194. WHERE
  195. LAYER <= MLAYER; -- 处理新的网体
  196. DELETE FROM AR_BS_BONUS_103_CALC_NET WHERE LAYER = MLAYER AND USER_TYPE = 0; SET MLAYER := MLAYER - 1; WHILE MLAYER >= 0 DO-- 计算直属宽度
  197. UPDATE AR_BS_BONUS_103_CALC_NET T1
  198. 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
  199. AND T1.LAYER = MLAYER
  200. SET T1.DIRECTLY_UNDER = T2.SONS;-- 本人达标并且下属满足一个及以上的达标数升级为第二个级别
  201. UPDATE AR_BS_BONUS_103_CALC_NET T1
  202. SET T1.USER_TYPE = 20
  203. WHERE
  204. T1.LAYER = MLAYER
  205. AND USER_TYPE = 10
  206. AND DIRECTLY_UNDER >= 1;-- 计算本层达标人员
  207. SELECT
  208. COUNT( * ) INTO MCOUNT
  209. FROM
  210. AR_BS_BONUS_103_CALC_NET C
  211. WHERE
  212. C.DIRECTLY_UNDER >= 2
  213. AND C.USER_TYPE = 0
  214. AND LAYER = MLAYER;
  215. IF
  216. ( MCOUNT > 0 ) THEN
  217. CALL CALC20_0 ( MLAYER, PCPID );
  218. END IF;-- 删除未达标人员
  219. CALL CALCDELNET ( MLAYER );
  220. SET MLAYER := MLAYER - 1;
  221. END WHILE;-- 计算GPV_4_CALC,会员级别
  222. UPDATE AR_BS_BONUS_103_CALC C1
  223. INNER JOIN AR_BS_BONUS_103_CALC_NET C2 ON C1.USER_ID = C2.USER_ID
  224. SET C1.GPV_4_CALC = C2.GPV,
  225. C1.USER_TYPE = C2.USER_TYPE;-- 计算见习奖金
  226. UPDATE AR_BS_BONUS_103_CALC C1
  227. 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
  228. AND C1.USER_TYPE = 20
  229. SET C1.BONUS20 = C2.ALL_GPV * MRATE;
  230. COMMIT;
  231. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, ORI_BONUS, PV, RATE, PERIOD_NUM ) SELECT
  232. C1.USER_ID,
  233. NULL,
  234. 20,
  235. C2.ALL_GPV * MRATE,
  236. C2.ALL_GPV,
  237. MRATE,
  238. PCPID
  239. FROM
  240. AR_BS_BONUS_103_CALC C1
  241. 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
  242. AND C1.USER_TYPE = 20
  243. AND ALL_GPV > 0;
  244. END
  245. ;;
  246. delimiter ;
  247. -- ----------------------------
  248. -- Procedure structure for CALC20_0
  249. -- ----------------------------
  250. DROP PROCEDURE IF EXISTS `CALC20_0`;
  251. delimiter ;;
  252. CREATE PROCEDURE `CALC20_0`(IN PLAYER INT,IN `PCPID` INT)
  253. BEGIN
  254. DECLARE
  255. FLAG INT DEFAULT 0;
  256. DECLARE
  257. MUSERID,
  258. MMAXUSERID VARCHAR ( 50 );
  259. DECLARE
  260. MGPV DECIMAL ( 10, 2 );
  261. DECLARE
  262. MC CURSOR FOR SELECT
  263. C.USER_ID
  264. FROM
  265. AR_BS_BONUS_103_CALC_NET C
  266. WHERE
  267. C.DIRECTLY_UNDER >= 2
  268. AND C.USER_TYPE = 0
  269. AND LAYER = PLAYER;
  270. DECLARE
  271. CONTINUE HANDLER FOR NOT FOUND
  272. SET FLAG = 1;-- 打开游标
  273. OPEN MC;-- 获取结果
  274. L2 :
  275. LOOP
  276. FETCH MC INTO MUSERID;
  277. IF
  278. FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
  279. LEAVE L2;
  280. END IF;-- 这里是为了显示获取结果
  281. SELECT
  282. MIN( GPV ) INTO MGPV
  283. FROM
  284. AR_BS_BONUS_103_CALC_NET C
  285. WHERE
  286. C.INTRODUCER_ID = MUSERID
  287. AND C.USER_TYPE >= 10;
  288. SELECT
  289. MAX( USER_ID ) INTO MMAXUSERID
  290. FROM
  291. AR_BS_BONUS_103_CALC_NET C
  292. WHERE
  293. C.INTRODUCER_ID = MUSERID
  294. AND C.GPV = MGPV;
  295. UPDATE AR_BS_BONUS_103_CALC_NET C
  296. SET C.USER_TYPE = 20,
  297. C.GPV = MGPV
  298. WHERE
  299. USER_ID = MUSERID;
  300. UPDATE AR_BS_BONUS_103_CALC_NET C
  301. SET C.GPV = 0
  302. WHERE
  303. USER_ID = MMAXUSERID;-- 关闭游标
  304. INSERT INTO AR_CALC_BONUS_BS_DETAIL_GPV(USER_ID,INTRODUCER_ID,GPV,PERIOD_NUM)
  305. VALUES(MMAXUSERID,MUSERID,MGPV,PCPID);
  306. END LOOP;
  307. CLOSE MC;
  308. END
  309. ;;
  310. delimiter ;
  311. -- ----------------------------
  312. -- Procedure structure for CALCBLUE
  313. -- ----------------------------
  314. DROP PROCEDURE IF EXISTS `CALCBLUE`;
  315. delimiter ;;
  316. CREATE PROCEDURE `CALCBLUE`(IN `PCPID` INT)
  317. LABEL: BEGIN
  318. DECLARE MCALCYEAR INT;
  319. DECLARE MISMONTH,MCALCMONTH,MISSENT TINYINT;
  320. START TRANSACTION;
  321. -- 日志;
  322. DELETE FROM AR_BS_BONUS_103_CALC_EVENT ;-- WHERE CALC_PERIOD_ID >= PCPID;
  323. CALL CALCRECORD(-1,'开始',PCPID,NOW());
  324. COMMIT;
  325. -- SELECT USER_ID INTO MISMONTH FROM ZR_USER;
  326. SELECT AP.IS_MONTH,AP.CALC_MONTH,AP.CALC_YEAR,AP.IS_SENT
  327. INTO MISMONTH,MCALCMONTH,MCALCYEAR,MISSENT
  328. FROM AR_PERIOD AP WHERE AP.PERIOD_NUM = PCPID;
  329. -- 查看是否月结
  330. IF(MISMONTH = 0 OR MISSENT = 1)THEN
  331. LEAVE LABEL;
  332. END IF;
  333. -- 清除数据
  334. CALL CALCRECORD(1,'清除数据',PCPID,NOW());
  335. COMMIT;
  336. CALL CALCCLEAN(PCPID);
  337. COMMIT;
  338. -- 初始化
  339. CALL CALCRECORD(2,'初始化',PCPID,NOW());
  340. COMMIT;
  341. CALL CALCINIT(PCPID,MCALCMONTH,MCALCYEAR);
  342. COMMIT;
  343. -- 初始业绩
  344. -- 3.蓝星奖
  345. CALL CALCRECORD(3,'蓝星奖',PCPID,NOW());
  346. COMMIT;
  347. CALL CALC10(PCPID);
  348. COMMIT;
  349. -- 4.新网体
  350. CALL CALCRECORD(4,'新网体',PCPID,NOW());
  351. COMMIT;
  352. CALL CALC20(PCPID);
  353. COMMIT;
  354. -- 5.升级主任
  355. CALL CALCRECORD(5,'升级主任',PCPID,NOW());
  356. COMMIT;
  357. CALL CALCUP30;
  358. COMMIT;
  359. -- 6.计算主任自己第一层的总业绩
  360. CALL CALCRECORD(6,'计算主任自己第一层的总业绩',PCPID,NOW());
  361. COMMIT;
  362. CALL CALCTOTALGPV;
  363. COMMIT;
  364. -- 7.计算平级奖业绩和级别
  365. CALL CALCRECORD(7,'计算平级奖业绩和级别',PCPID,NOW());
  366. COMMIT;
  367. CALL CALCLEVEL(PCPID);
  368. COMMIT;
  369. -- 8.计算平级奖
  370. CALL CALCRECORD(8,'计算平级奖',PCPID,NOW());
  371. COMMIT;
  372. CALL CALCPJ(PCPID);
  373. COMMIT;
  374. -- 9.积分
  375. CALL CALCRECORD(9,'积分',PCPID,NOW());
  376. COMMIT;
  377. CALL CALCPOINT;
  378. COMMIT;
  379. -- 10.汇总
  380. CALL CALCRECORD(10,'汇总',PCPID,NOW());
  381. COMMIT;
  382. CALL CALCSUMMARY;
  383. COMMIT;
  384. -- 11.记录总表
  385. CALL CALCRECORD(11,'记录总表',PCPID,NOW());
  386. COMMIT;
  387. CALL CALCKEEP(MCALCYEAR,MCALCMONTH);
  388. COMMIT;
  389. -- 12.计算拨出比
  390. CALL CALCRECORD(12,'计算拨出比',PCPID,NOW());
  391. COMMIT;
  392. CALL CALCSTAT(PCPID);
  393. COMMIT;
  394. CALL CALCRECORD(13,'结束',PCPID,NOW());
  395. COMMIT;
  396. END
  397. ;;
  398. delimiter ;
  399. -- ----------------------------
  400. -- Procedure structure for CALCCHECKING
  401. -- ----------------------------
  402. DROP PROCEDURE IF EXISTS `CALCCHECKING`;
  403. delimiter ;;
  404. CREATE PROCEDURE `CALCCHECKING`(IN `PCPID` INT)
  405. LABEL : BEGIN-- 遍历数据结束标志
  406. DECLARE
  407. MCOLUMNNAME,
  408. MVALUES,
  409. MVALUES0,
  410. MVALUES1,
  411. MVALUES2 VARCHAR ( 100 );-- 定义预处理SQL语句
  412. DECLARE
  413. SQL_FOR_SELECT VARCHAR ( 2000 );
  414. DECLARE
  415. MCOUNT INT DEFAULT 0;
  416. DECLARE
  417. DONE INT DEFAULT FALSE;
  418. DECLARE
  419. MISMONTH,
  420. MISSEND TINYINT;-- 游标
  421. DECLARE
  422. CUR_ACCOUNT CURSOR FOR SELECT
  423. COLUMN_NAME
  424. FROM
  425. INFORMATION_SCHEMA.COLUMNS
  426. WHERE
  427. TABLE_NAME = 'AR_CALC_BONUS_BS_DETAIL'
  428. AND TABLE_SCHEMA = 'aikang_db_28'
  429. AND COLUMN_NAME NOT IN ( 'CALC_YEAR', 'CALC_MONTH', 'P_CALC_MONTH', 'CREATED_AT', 'ID', 'LAYER' )
  430. AND DATA_TYPE IN ( 'DECIMAL', 'DOUBLE', 'INT' );-- 将结束标志绑定到游标
  431. DECLARE
  432. CONTINUE HANDLER FOR NOT FOUND
  433. SET DONE = TRUE;
  434. START TRANSACTION;
  435. SELECT
  436. AP.IS_MONTH,
  437. AP.IS_SENT INTO MISMONTH,
  438. MISSEND
  439. FROM
  440. AR_PERIOD AP
  441. WHERE
  442. AP.PERIOD_NUM = PCPID;-- 查看是否月结
  443. IF
  444. ( MISMONTH = 0 OR MISSEND = 1 ) THEN
  445. LEAVE LABEL;
  446. END IF;-- 打开游标
  447. DELETE
  448. FROM
  449. AR_CALC_BONUS_BS_CHECKING
  450. WHERE
  451. PERIOD_NUM >= PCPID;
  452. OPEN CUR_ACCOUNT;-- 遍历
  453. READ_LOOP :
  454. LOOP-- 取值 取多个字段
  455. FETCH NEXT
  456. FROM
  457. CUR_ACCOUNT INTO MCOLUMNNAME;
  458. IF
  459. DONE THEN
  460. LEAVE READ_LOOP;
  461. END IF;
  462. SET SQL_FOR_SELECT = CONCAT(
  463. "SELECT COUNT(*) INTO @MVALUES0 FROM (SELECT IFNULL(A1.USER_ID,'-1') MAIN_ID,IFNULL(A2.USER_ID,'-1') TEST_ID,IFNULL(A1.",
  464. MCOLUMNNAME,
  465. ",0) NAME1,IFNULL(A2.",
  466. MCOLUMNNAME,
  467. ",0) NAME2 FROM AR_CALC_BONUS_BS_DETAIL A1 LEFT JOIN AR_CALC_BONUS_BS_DETAIL_CALC A2 ON A1.USER_ID = A2.USER_ID WHERE A1.PERIOD_NUM = ",
  468. PCPID,
  469. " AND A2.PERIOD_NUM = ",
  470. PCPID,
  471. " UNION SELECT IFNULL(A2.USER_ID,'-1') MAIN_ID,IFNULL(A1.USER_ID,'-1') TEST_ID,IFNULL(A2.",
  472. MCOLUMNNAME,
  473. ",0) NAME1,IFNULL(A1.",
  474. MCOLUMNNAME,
  475. ",0) NAME2 FROM AR_CALC_BONUS_BS_DETAIL_CALC A1 LEFT JOIN AR_CALC_BONUS_BS_DETAIL A2 ON A1.USER_ID = A2.USER_ID WHERE A1.PERIOD_NUM = ",
  476. PCPID,
  477. " AND A2.PERIOD_NUM = ",
  478. PCPID,
  479. ") B WHERE B.MAIN_ID != B.TEST_ID OR ABS(B.NAME1-B.NAME2)>0.5"
  480. );-- 拼接查询SQL语句
  481. SET @SQL = SQL_FOR_SELECT;
  482. PREPARE STMT
  483. FROM
  484. @SQL;-- 预处理动态SQL语句
  485. EXECUTE STMT;-- 执行SQL语句
  486. DEALLOCATE PREPARE STMT;
  487. SET MVALUES0 := @MVALUES0;
  488. SET SQL_FOR_SELECT = CONCAT( "SELECT IFNULL(SUM(", MCOLUMNNAME, "),0) INTO @MVALUES1 FROM AR_CALC_BONUS_BS_DETAIL WHERE PERIOD_NUM = '", PCPID, "'" );-- 拼接查询SQL语句
  489. SET @SQL = SQL_FOR_SELECT;
  490. PREPARE STMT
  491. FROM
  492. @SQL;-- 预处理动态SQL语句
  493. EXECUTE STMT;-- 执行SQL语句
  494. DEALLOCATE PREPARE STMT;
  495. SET MVALUES1 := @MVALUES1;
  496. SET SQL_FOR_SELECT = CONCAT( "SELECT IFNULL(SUM(", MCOLUMNNAME, "),0) INTO @MVALUES2 FROM AR_CALC_BONUS_BS_DETAIL_CALC WHERE USER_ID != '0' AND PERIOD_NUM = '", PCPID, "'" );-- 拼接查询SQL语句
  497. SET @SQL = SQL_FOR_SELECT;
  498. PREPARE STMT
  499. FROM
  500. @SQL;-- 预处理动态SQL语句
  501. EXECUTE STMT;-- 执行SQL语句
  502. DEALLOCATE PREPARE STMT;
  503. SET MVALUES2 := @MVALUES2;
  504. INSERT INTO AR_CALC_BONUS_BS_CHECKING ( PERIOD_NUM, COLUMN_NAME, DIFF_COUNT, MAIN_SUM, CALC_SUM, DIFF_SUM )
  505. VALUES
  506. (
  507. PCPID,
  508. MCOLUMNNAME,
  509. MVALUES0,
  510. MVALUES1,
  511. MVALUES2,
  512. ABS(
  513. CONVERT (
  514. MVALUES1,
  515. DECIMAL ( 12, 2 ))- CONVERT (
  516. MVALUES2,
  517. DECIMAL ( 12, 2 ))));
  518. COMMIT;
  519. END LOOP;
  520. CLOSE CUR_ACCOUNT;
  521. SELECT
  522. COUNT(*) INTO MCOUNT
  523. FROM
  524. AR_CALC_BONUS_BS_CHECKING
  525. WHERE
  526. ( DIFF_COUNT > 0 OR DIFF_SUM >= 1 )
  527. AND COLUMN_NAME IN (
  528. 'USER_TYPE10',
  529. 'USER_TYPE',
  530. 'BONUS10',
  531. 'BONUS20',
  532. 'BONUS30',
  533. 'BONUS40',
  534. 'BONUS50',
  535. 'BONUS60',
  536. 'BONUS70',
  537. 'BONUS80',
  538. 'BONUS90',
  539. 'BONUS100',
  540. 'BONUS110',
  541. 'ORI_BONUS',
  542. 'AMOUNT',
  543. 'PRODUCT_POINT'
  544. );
  545. IF
  546. ( MCOUNT = 0 ) THEN
  547. UPDATE AR_CALC_BONUS_BS_STAT T
  548. SET T.CHECK_STATUS = 1
  549. WHERE
  550. T.PERIOD_NUM = PCPID;
  551. END IF;
  552. COMMIT;
  553. END
  554. ;
  555. ;;
  556. delimiter ;
  557. -- ----------------------------
  558. -- Procedure structure for CALCCLEAN
  559. -- ----------------------------
  560. DROP PROCEDURE IF EXISTS `CALCCLEAN`;
  561. delimiter ;;
  562. CREATE PROCEDURE `CALCCLEAN`(IN `PCPID` INT)
  563. BEGIN-- 删除当期奖金
  564. DELETE
  565. FROM
  566. AR_BS_BONUS_103_CALC;
  567. DELETE
  568. FROM
  569. AR_BS_BONUS_103_TEST
  570. WHERE
  571. CALC_PERIOD_ID >= PCPID;-- 使用的奖金表
  572. DELETE
  573. FROM
  574. AR_CALC_BONUS_BS
  575. WHERE
  576. PERIOD_NUM >= PCPID;
  577. DELETE
  578. FROM
  579. AR_CALC_BONUS_BS_DETAIL
  580. WHERE
  581. PERIOD_NUM >= PCPID;-- 删除当期网体
  582. DELETE
  583. FROM
  584. AR_BS_BONUS_103_CALC_NET;
  585. DELETE
  586. FROM
  587. AR_BS_BONUS_103_TEST_NET
  588. WHERE
  589. CALC_PERIOD_ID >= PCPID;-- 删除拨出表
  590. DELETE
  591. FROM
  592. AR_CALC_BONUS_BS_STAT
  593. WHERE
  594. PERIOD_NUM >= PCPID;-- 删除明细表
  595. DELETE
  596. FROM
  597. AR_CALC_BONUS_BS_DETAIL_BONUS
  598. WHERE
  599. PERIOD_NUM >= PCPID;-- 删除日志
  600. DELETE
  601. FROM
  602. AR_CALC_BONUS_BS_DETAIL_GPV
  603. WHERE
  604. PERIOD_NUM >= PCPID;
  605. END
  606. ;;
  607. delimiter ;
  608. -- ----------------------------
  609. -- Procedure structure for CALCDELNET
  610. -- ----------------------------
  611. DROP PROCEDURE IF EXISTS `CALCDELNET`;
  612. delimiter ;;
  613. CREATE PROCEDURE `CALCDELNET`(IN `PLAYER` INT)
  614. BEGIN
  615. DECLARE
  616. FLAG INT DEFAULT 0;
  617. DECLARE
  618. MUSERID,
  619. MMAXUSERID,
  620. MINTRODUCERID VARCHAR ( 50 );
  621. /*DECLARE
  622. MGPV DECIMAL ( 10, 2 );
  623. DECLARE
  624. DN CURSOR FOR SELECT
  625. USER_ID
  626. FROM
  627. AR_BS_BONUS_103_CALC_NET
  628. WHERE
  629. LAYER = PLAYER
  630. AND USER_TYPE = 0;
  631. DECLARE
  632. CONTINUE HANDLER FOR NOT FOUND
  633. SET FLAG = 1;*/
  634. START TRANSACTION;-- 打开游标
  635. /*OPEN DN;-- 获取结果
  636. L2 :
  637. LOOP
  638. FETCH DN INTO MUSERID;
  639. IF
  640. FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
  641. LEAVE L2;
  642. END IF;-- 查询需要删除会员的推荐人ID
  643. SELECT
  644. T.INTRODUCER_ID INTO MINTRODUCERID
  645. FROM
  646. AR_BS_BONUS_103_CALC_NET T
  647. WHERE
  648. T.USER_ID = MUSERID;-- 更改需要删除会员第一代的推荐人ID以及层数
  649. UPDATE AR_BS_BONUS_103_CALC_NET T
  650. SET T.INTRODUCER_ID = MINTRODUCERID,
  651. T.LAYER = T.LAYER - 1
  652. WHERE
  653. T.INTRODUCER_ID = MUSERID;-- 关闭游标
  654. END LOOP;
  655. CLOSE DN;*/
  656. UPDATE AR_BS_BONUS_103_CALC_NET
  657. SET DELETED = 1
  658. WHERE
  659. LAYER = PLAYER
  660. AND USER_TYPE = 0;
  661. UPDATE AR_BS_BONUS_103_CALC_NET T1
  662. INNER JOIN AR_BS_BONUS_103_CALC_NET T2
  663. ON T1.INTRODUCER_ID = T2.USER_ID AND T1.LAYER = PLAYER+1 AND T2.LAYER = PLAYER AND T2.USER_TYPE = 0
  664. SET T1.INTRODUCER_ID = T2.INTRODUCER_ID,T1.LAYER = PLAYER;
  665. DELETE
  666. FROM
  667. AR_BS_BONUS_103_CALC_NET
  668. WHERE
  669. LAYER = PLAYER
  670. AND USER_TYPE = 0
  671. AND DELETED = 1;
  672. COMMIT;
  673. END
  674. ;;
  675. delimiter ;
  676. -- ----------------------------
  677. -- Procedure structure for CALCINIT
  678. -- ----------------------------
  679. DROP PROCEDURE IF EXISTS `CALCINIT`;
  680. delimiter ;;
  681. CREATE PROCEDURE `CALCINIT`(IN `PCPID` INT, IN `PCALCMONTH` TINYINT, IN `PCALCYEAR` INT)
  682. BEGIN
  683. INSERT INTO AR_BS_BONUS_103_CALC (
  684. LAST_DEC_LV,
  685. LAST_EMP_LV,
  686. LAST_STATUS,
  687. USER_ID,
  688. INTRODUCER_ID,
  689. LAYER,
  690. PV,
  691. GPV10,
  692. GPV,
  693. GPV_4_CALC,
  694. USER_TYPE10,
  695. USER_TYPE,
  696. BONUS10,
  697. BONUS20,
  698. BONUS30,
  699. BONUS40,
  700. BONUS50,
  701. BONUS60,
  702. BONUS70,
  703. BONUS80,
  704. BONUS90,
  705. BONUS100,
  706. BONUS110,
  707. BONUS,
  708. PRODUCT_POINT,
  709. CALC_PERIOD_ID,
  710. PV_ZC,
  711. PV_FX,
  712. PV_UP_ZC
  713. ) SELECT
  714. AU.LAST_DEC_LV,
  715. AU.EMP_LV,
  716. AU.STATUS,
  717. AU.ID,
  718. IFNULL( AURN.PARENT_UID, 0 ),
  719. AURN.TOP_DEEP,
  720. IFNULL( AO.PV, 0 ),
  721. 0,
  722. 0,
  723. 0,
  724. 0,
  725. 0,
  726. 0,
  727. 0,
  728. 0,
  729. 0,
  730. 0,
  731. 0,
  732. 0,
  733. 0,
  734. 0,
  735. 0,
  736. 0,
  737. 0,
  738. 0,
  739. PCPID,
  740. (SELECT
  741. IFNULL( SUM( PV ), 0 ) PV
  742. FROM
  743. AR_PERF_ORDER
  744. WHERE
  745. PERIOD_NUM IN ( SELECT PERIOD_NUM FROM AR_PERIOD WHERE CALC_YEAR = PCALCYEAR AND CALC_MONTH = PCALCMONTH)
  746. AND USER_ID=AU.ID AND DEC_TYPE='ZC')PV_ZC,
  747. (SELECT
  748. IFNULL( SUM( PV ), 0 ) PV
  749. FROM
  750. AR_PERF_ORDER
  751. WHERE
  752. PERIOD_NUM IN ( SELECT PERIOD_NUM FROM AR_PERIOD WHERE CALC_YEAR = PCALCYEAR AND CALC_MONTH = PCALCMONTH)
  753. AND USER_ID=AU.ID AND DEC_TYPE='FX')PV_FX,
  754. (SELECT
  755. IFNULL( SUM( O.PV ), 0 ) PV
  756. FROM
  757. AR_PERF_ORDER O
  758. LEFT JOIN AR_USER_RELATION_NEW R ON R.USER_ID = O.USER_ID
  759. WHERE
  760. O.PERIOD_NUM IN ( SELECT PERIOD_NUM FROM AR_PERIOD WHERE CALC_YEAR = PCALCYEAR AND CALC_MONTH = PCALCMONTH)
  761. AND R.PARENT_UID=AU.ID AND O.DEC_TYPE='ZC')PV_UP_ZC
  762. FROM
  763. AR_USER AU
  764. INNER JOIN AR_USER_RELATION_NEW AURN ON AU.ID = AURN.USER_ID
  765. LEFT JOIN (
  766. SELECT
  767. USER_ID,
  768. SUM( PV ) PV
  769. FROM
  770. AR_PERF_ORDER
  771. WHERE
  772. PERIOD_NUM IN ( SELECT PERIOD_NUM FROM AR_PERIOD WHERE CALC_YEAR = PCALCYEAR AND CALC_MONTH = PCALCMONTH )
  773. GROUP BY
  774. USER_ID
  775. ) AO ON AO.USER_ID = AU.ID
  776. WHERE
  777. AU.DELETED = 0;
  778. END
  779. ;;
  780. delimiter ;
  781. -- ----------------------------
  782. -- Procedure structure for CALCKEEP
  783. -- ----------------------------
  784. DROP PROCEDURE IF EXISTS `CALCKEEP`;
  785. delimiter ;;
  786. CREATE PROCEDURE `CALCKEEP`(IN `PCALCYEAR` INT,IN `PCALCMONTH` INT)
  787. BEGIN
  788. INSERT INTO AR_BS_BONUS_103_TEST SELECT
  789. *
  790. FROM
  791. AR_BS_BONUS_103_CALC;
  792. INSERT INTO AR_BS_BONUS_103_TEST_NET SELECT
  793. *
  794. FROM
  795. AR_BS_BONUS_103_CALC_NET;
  796. INSERT INTO AR_CALC_BONUS_BS (
  797. USER_ID,
  798. INTRODUCER_ID,
  799. LAST_DEC_LV,
  800. LAST_EMP_LV,
  801. LAST_STATUS,
  802. LEVEL_ID,
  803. ORI_BONUS,
  804. MANAGE_TAX,
  805. AMOUNT,
  806. PRODUCT_POINT,
  807. PERIOD_NUM,
  808. CALC_YEAR,
  809. CALC_MONTH,
  810. P_CALC_MONTH,
  811. CREATED_AT ,
  812. ORI_BONUS_ABBR,
  813. MANAGE_TAX_ABBR,
  814. AMOUNT_ABBR,
  815. ABBR_RECONSUME_POINTS,
  816. ORI_BONUS_MNT,
  817. MANAGE_TAX_MNT,
  818. AMOUNT_MNT,
  819. MNT_RECONSUME_POINTS
  820. ) SELECT
  821. A.USER_ID,
  822. A.INTRODUCER_ID,
  823. A.LAST_DEC_LV,
  824. A.LAST_EMP_LV,
  825. A.LAST_STATUS,
  826. B.ID,
  827. IFNULL( A.BONUS, 0 ),
  828. 0,
  829. IFNULL( A.BONUS, 0 ),
  830. IFNULL( A.PRODUCT_POINT, 0 ),
  831. CALC_PERIOD_ID,
  832. PCALCYEAR,
  833. PCALCYEAR*100+PCALCMONTH,
  834. NOW(),
  835. UNIX_TIMESTAMP(
  836. NOW()),
  837. IFNULL(A.BONUSYJ,0),
  838. 0 ,
  839. IFNULL(A.BONUSYJ,0),
  840. 0,
  841. IFNULL(A.BONUSGL,0),
  842. 0,
  843. IFNULL(A.BONUSGL,0),
  844. 0
  845. FROM
  846. AR_BS_BONUS_103_CALC A
  847. LEFT JOIN AR_EMPLOY_LEVEL B ON A.USER_TYPE = B.SORT * 10
  848. WHERE
  849. A.BONUS > 0
  850. OR A.PRODUCT_POINT > 0;
  851. INSERT INTO AR_CALC_BONUS_BS_DETAIL (
  852. USER_ID,
  853. INTRODUCER_ID,
  854. LAST_DEC_LV,
  855. LAST_EMP_LV,
  856. LAST_STATUS,
  857. LEVEL_ID,
  858. ORI_BONUS,
  859. MANAGE_TAX,
  860. AMOUNT,
  861. PRODUCT_POINT,
  862. PERIOD_NUM,
  863. LAYER,
  864. PV,
  865. GPV10,
  866. GPV,
  867. GPV_4_CALC,
  868. USER_TYPE10,
  869. USER_TYPE,
  870. BONUS10,
  871. BONUS20,
  872. BONUS30,
  873. BONUS40,
  874. BONUS50,
  875. BONUS60,
  876. BONUS70,
  877. BONUS80,
  878. BONUS90,
  879. BONUS100,
  880. BONUS110,
  881. CALC_YEAR,
  882. CALC_MONTH,
  883. P_CALC_MONTH,
  884. CREATED_AT ,
  885. ORI_BONUS_ABBR,
  886. AMOUNT_ABBR,
  887. ORI_BONUS_MNT,
  888. AMOUNT_MNT
  889. ) SELECT
  890. USER_ID,
  891. INTRODUCER_ID,
  892. LAST_DEC_LV,
  893. LAST_EMP_LV,
  894. LAST_STATUS,
  895. B.ID,
  896. IFNULL( BONUS, 0 ),
  897. 0,
  898. IFNULL( BONUS, 0 ),
  899. IFNULL( PRODUCT_POINT, 0 ),
  900. CALC_PERIOD_ID,
  901. LAYER,
  902. PV,
  903. GPV10,
  904. GPV,
  905. GPV_4_CALC,
  906. USER_TYPE10,
  907. USER_TYPE,
  908. BONUS10,
  909. BONUS20,
  910. BONUS30,
  911. BONUS40,
  912. BONUS50,
  913. BONUS60,
  914. BONUS70,
  915. BONUS80,
  916. BONUS90,
  917. BONUS100,
  918. BONUS110,
  919. PCALCYEAR,
  920. PCALCYEAR*100+PCALCMONTH,
  921. NOW(),
  922. UNIX_TIMESTAMP(
  923. NOW()) ,
  924. IFNULL(A.BONUSYJ,0),
  925. IFNULL(A.BONUSYJ,0),
  926. IFNULL(A.BONUSGL,0),
  927. IFNULL(A.BONUSGL,0)
  928. FROM
  929. AR_BS_BONUS_103_CALC A
  930. LEFT JOIN ( SELECT ID, SORT FROM AR_EMPLOY_LEVEL ) B ON A.USER_TYPE = B.SORT * 10;
  931. END
  932. ;;
  933. delimiter ;
  934. -- ----------------------------
  935. -- Procedure structure for CALCLEVEL
  936. -- ----------------------------
  937. DROP PROCEDURE IF EXISTS `CALCLEVEL`;
  938. delimiter ;;
  939. CREATE PROCEDURE `CALCLEVEL`(IN `PCPID` INT)
  940. BEGIN
  941. DECLARE
  942. FLAG,
  943. MLAYER,
  944. MUSERTYPE INT DEFAULT 0;
  945. DECLARE
  946. MGPV,
  947. MLIMITPV DECIMAL ( 10, 2 );
  948. DECLARE
  949. MC CURSOR FOR SELECT
  950. LAYER
  951. FROM
  952. AR_BS_BONUS_103_CALC_NET T
  953. WHERE
  954. T.USER_TYPE = 30 GROUP BY LAYER ORDER BY LAYER DESC;
  955. DECLARE
  956. CONTINUE HANDLER FOR NOT FOUND
  957. SET FLAG = 1;
  958. START TRANSACTION;-- 打开游标
  959. OPEN MC;-- 获取结果
  960. L2 :
  961. LOOP
  962. FETCH MC INTO MLAYER;
  963. IF
  964. FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
  965. LEAVE L2;
  966. END IF;
  967. -- 计算当前层数的奖金以及向上所贡献的奖金
  968. CALL CALCLEVEL_ ( MLAYER ,PCPID);
  969. END LOOP;
  970. CLOSE MC;
  971. /*WHILE
  972. ( MLAYER >= 0 ) DO-- 计算当前层数的奖金以及向上所贡献的奖金
  973. CALL CALCLEVEL_ ( MLAYER );
  974. SET MLAYER := MLAYER - 1;
  975. END WHILE;*/-- 级别更新
  976. UPDATE AR_BS_BONUS_103_CALC C1
  977. INNER JOIN AR_BS_BONUS_103_CALC_NET C2 ON C1.USER_ID = C2.USER_ID
  978. AND C1.USER_TYPE <> C2.USER_TYPE
  979. SET C1.USER_TYPE = C2.USER_TYPE;
  980. SELECT
  981. T.ACHIEVE_PV INTO MLIMITPV
  982. FROM
  983. AR_EMPLOY_LEVEL T
  984. WHERE
  985. T.ID = 'E121497617216708615';
  986. UPDATE AR_BS_BONUS_103_CALC SET USER_TYPE = 0 WHERE USER_TYPE = 10;
  987. UPDATE AR_BS_BONUS_103_CALC SET USER_TYPE = 10 WHERE GPV10 >= MLIMITPV AND USER_TYPE = 0;
  988. END
  989. ;;
  990. delimiter ;
  991. -- ----------------------------
  992. -- Procedure structure for CALCLEVEL_
  993. -- ----------------------------
  994. DROP PROCEDURE IF EXISTS `CALCLEVEL_`;
  995. delimiter ;;
  996. CREATE PROCEDURE `CALCLEVEL_`(IN `PLAYER` INT,IN `PCPID` INT)
  997. BEGIN
  998. DECLARE
  999. FLAG,
  1000. MLAYER,
  1001. MUSERTYPE INT DEFAULT 0;
  1002. DECLARE
  1003. MUSERID,
  1004. MBONUSID,
  1005. MNEWBONUSID VARCHAR ( 50 );
  1006. DECLARE
  1007. MGPV DECIMAL ( 10, 2 );
  1008. DECLARE
  1009. MC CURSOR FOR SELECT
  1010. C.USER_ID,
  1011. C.TEAM_GPV
  1012. FROM
  1013. AR_BS_BONUS_103_CALC_NET C
  1014. WHERE
  1015. C.USER_TYPE >= 30
  1016. AND LAYER = PLAYER;
  1017. DECLARE
  1018. CONTINUE HANDLER FOR NOT FOUND
  1019. SET FLAG = 1;
  1020. START TRANSACTION;
  1021. -- 打开游标
  1022. OPEN MC;-- 获取结果
  1023. L2 :
  1024. LOOP
  1025. FETCH MC INTO MUSERID,
  1026. MGPV;
  1027. IF
  1028. FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
  1029. LEAVE L2;
  1030. END IF;-- 这里是为了显示获取结果
  1031. SET MLAYER := 1;
  1032. SET MBONUSID := MUSERID;
  1033. OUTER_LABEL :
  1034. WHILE
  1035. ( MLAYER <= 9 ) DO
  1036. IF
  1037. ( MLAYER > 1 ) THEN
  1038. CALL CALCREFEREE ( MBONUSID, MNEWBONUSID );
  1039. IF
  1040. ( ISNULL( MNEWBONUSID ) OR MNEWBONUSID = 0 ) THEN
  1041. LEAVE OUTER_LABEL;
  1042. ELSE
  1043. SET MBONUSID := MNEWBONUSID;
  1044. END IF;
  1045. END IF;
  1046. IF
  1047. ( MLAYER = 1 ) THEN
  1048. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, PV, PERIOD_NUM )
  1049. VALUES
  1050. ( MBONUSID, NULL, 30, MGPV ,PCPID);
  1051. ELSEIF ( MLAYER = 2 ) THEN
  1052. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, PV, PERIOD_NUM )
  1053. VALUES
  1054. ( MBONUSID, MUSERID, 40, MGPV,PCPID);
  1055. ELSEIF ( MLAYER = 3 ) THEN
  1056. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, PV, PERIOD_NUM )
  1057. VALUES
  1058. ( MBONUSID, MUSERID, 50, MGPV, PCPID );
  1059. ELSEIF ( MLAYER = 4 ) THEN
  1060. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, PV, PERIOD_NUM )
  1061. VALUES
  1062. ( MBONUSID, MUSERID, 60, MGPV, PCPID );
  1063. ELSEIF ( MLAYER = 5 ) THEN
  1064. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, PV, PERIOD_NUM )
  1065. VALUES
  1066. ( MBONUSID, MUSERID, 70, MGPV, PCPID );
  1067. ELSEIF ( MLAYER = 6 ) THEN
  1068. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, PV, PERIOD_NUM )
  1069. VALUES
  1070. ( MBONUSID, MUSERID, 80, MGPV, PCPID );
  1071. ELSEIF ( MLAYER = 7 ) THEN
  1072. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, PV, PERIOD_NUM )
  1073. VALUES
  1074. ( MBONUSID, MUSERID, 90, MGPV, PCPID );
  1075. ELSEIF ( MLAYER = 8 ) THEN
  1076. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, PV, PERIOD_NUM )
  1077. VALUES
  1078. ( MBONUSID, MUSERID, 100, MGPV, PCPID );
  1079. ELSEIF ( MLAYER = 9 ) THEN
  1080. INSERT INTO AR_CALC_BONUS_BS_DETAIL_BONUS ( USER_ID, INTRODUCER_ID, LAST_EMP_LV, PV, PERIOD_NUM )
  1081. VALUES
  1082. ( MBONUSID, MUSERID, 110, MGPV, PCPID );
  1083. END IF;-- 计算会员的级别
  1084. UPDATE AR_BS_BONUS_103_CALC_NET T
  1085. SET T.USER_TYPE = ( MLAYER + 2 )* 10
  1086. WHERE
  1087. T.USER_ID = MBONUSID
  1088. AND USER_TYPE <=(
  1089. MLAYER + 1
  1090. )* 10;
  1091. SET MLAYER := MLAYER + 1;
  1092. END WHILE;-- 关闭游标
  1093. END LOOP;
  1094. CLOSE MC;
  1095. COMMIT;
  1096. END
  1097. ;;
  1098. delimiter ;
  1099. -- ----------------------------
  1100. -- Procedure structure for CALCMAIN
  1101. -- ----------------------------
  1102. DROP PROCEDURE IF EXISTS `CALCMAIN`;
  1103. delimiter ;;
  1104. CREATE PROCEDURE `CALCMAIN`(IN `PCPID` int,OUT `PRESULT` varchar(100))
  1105. BEGIN
  1106. #Routine body goes here...
  1107. DECLARE EXIT HANDLER FOR SQLEXCEPTION
  1108. SET PRESULT = 'FAIL';
  1109. CALL CalcBlue(PCPID);
  1110. SET PRESULT = 'SUCCESS';
  1111. END
  1112. ;;
  1113. delimiter ;
  1114. -- ----------------------------
  1115. -- Procedure structure for CALCPJ
  1116. -- ----------------------------
  1117. DROP PROCEDURE IF EXISTS `CALCPJ`;
  1118. delimiter ;;
  1119. CREATE PROCEDURE `CALCPJ`(IN `PCPID` int)
  1120. BEGIN
  1121. DECLARE USERID VARCHAR (100);
  1122. DECLARE TOTALPV,
  1123. PV3,
  1124. PV4,
  1125. PV5,
  1126. PV6,
  1127. PV7,
  1128. PV8,
  1129. PV9,
  1130. PV10,
  1131. PV11,
  1132. PERCENT1,
  1133. PERCENT2,
  1134. REWARD_BONUS1,
  1135. REWARD_BONUS2,
  1136. REWARD_BONUS_TOTAL DECIMAL (16,2);
  1137. DECLARE RATE DECIMAL (16,8);
  1138. DECLARE RATE2 DECIMAL (16,8);
  1139. DECLARE DONE INT DEFAULT TRUE;
  1140. DECLARE DONE2 INT DEFAULT TRUE;
  1141. DECLARE CUR CURSOR FOR SELECT DISTINCT(USER_ID) FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND LAST_EMP_LV>=30 AND PV>0;
  1142. DECLARE CUR2 CURSOR FOR SELECT DISTINCT(USER_ID) FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND LAST_EMP_LV>=30 AND PV>0;
  1143. DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE = FALSE;
  1144. SELECT IFNULL(MAX(INCREASE_PERCENT),0) INTO PERCENT1 FROM AR_BS_BONUS_REWARD_PARAMETER WHERE LEVEL_ID='67BE5FE7857C216AE055736AECE8644D';
  1145. SELECT IFNULL(MAX(INCREASE_PERCENT),0) INTO PERCENT2 FROM AR_BS_BONUS_REWARD_PARAMETER WHERE LEVEL_ID='E121497617216708616';
  1146. -- 备份AR_BS_BONUS_REWARD_PARAMETER
  1147. DELETE FROM AR_BS_BONUS_REWARD_PARAMETER_HISTROY WHERE PERIOD_NUM=PCPID;
  1148. INSERT INTO AR_BS_BONUS_REWARD_PARAMETER_HISTROY (LEVEL_ID,LEVEL_NAME,INCREASE_PERCENT,PERIOD_NUM) (SELECT LEVEL_ID,LEVEL_NAME,INCREASE_PERCENT,PCPID FROM AR_BS_BONUS_REWARD_PARAMETER);
  1149. -- 平级奖计奖业绩
  1150. SELECT SUM(PV) INTO TOTALPV FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND LAST_EMP_LV>=30;
  1151. -- 平级奖奖金和业绩占比
  1152. SELECT (SUM(PV)*0.15)/TOTALPV INTO RATE FROM AR_BS_BONUS_103_CALC;
  1153. OPEN CUR;
  1154. WHILE DONE DO
  1155. FETCH CUR INTO USERID;
  1156. IF DONE THEN
  1157. SELECT SUM(PV) INTO PV3 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=30;
  1158. UPDATE AR_BS_BONUS_103_CALC SET BONUS30 = PV3 * RATE WHERE USER_ID=USERID;
  1159. END IF;
  1160. END WHILE;
  1161. CLOSE CUR;
  1162. SELECT SUM(BONUS20)*PERCENT1 INTO REWARD_BONUS1 FROM AR_BS_BONUS_103_CALC WHERE USER_TYPE=20;
  1163. SELECT SUM(BONUS30)*PERCENT2 INTO REWARD_BONUS2 FROM AR_BS_BONUS_103_CALC WHERE USER_TYPE=30;
  1164. -- 备份高级专员的加发奖金
  1165. UPDATE AR_BS_BONUS_103_CALC SET REWARD20 = BONUS20*PERCENT1 WHERE USER_TYPE=20;
  1166. -- 备份主任的加发奖金
  1167. UPDATE AR_BS_BONUS_103_CALC SET REWARD30 = BONUS30*PERCENT2 WHERE USER_TYPE=30;
  1168. -- 特别奖励加发总奖金
  1169. SET REWARD_BONUS_TOTAL=REWARD_BONUS1+REWARD_BONUS2;
  1170. -- 平级奖奖金和业绩占比
  1171. SELECT (SUM(PV)*0.15 -REWARD_BONUS_TOTAL)/TOTALPV INTO RATE2 FROM AR_BS_BONUS_103_CALC;
  1172. -- 备份平级奖比例
  1173. UPDATE AR_BS_BONUS_103_CALC SET RATE = RATE2;
  1174. SET DONE = TRUE;
  1175. OPEN CUR2;
  1176. WHILE DONE DO
  1177. FETCH CUR2 INTO USERID;
  1178. IF DONE THEN
  1179. SELECT SUM(PV) INTO PV3 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=30;
  1180. UPDATE AR_BS_BONUS_103_CALC SET BONUS30 = PV3 * RATE2 WHERE USER_ID=USERID;
  1181. SELECT SUM(PV) INTO PV4 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=40;
  1182. UPDATE AR_BS_BONUS_103_CALC SET BONUS40 = PV4 * RATE2 WHERE USER_ID=USERID;
  1183. SELECT SUM(PV) INTO PV5 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=50;
  1184. UPDATE AR_BS_BONUS_103_CALC SET BONUS50 = PV5 * RATE2 WHERE USER_ID=USERID;
  1185. SELECT SUM(PV) INTO PV6 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=60;
  1186. UPDATE AR_BS_BONUS_103_CALC SET BONUS60 = PV6 * RATE2 WHERE USER_ID=USERID;
  1187. SELECT SUM(PV) INTO PV7 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=70;
  1188. UPDATE AR_BS_BONUS_103_CALC SET BONUS70 = PV7 * RATE2 WHERE USER_ID=USERID;
  1189. SELECT SUM(PV) INTO PV8 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=80;
  1190. UPDATE AR_BS_BONUS_103_CALC SET BONUS80 = PV8 * RATE2 WHERE USER_ID=USERID;
  1191. SELECT SUM(PV) INTO PV9 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=90;
  1192. UPDATE AR_BS_BONUS_103_CALC SET BONUS90 = PV9 * RATE2 WHERE USER_ID=USERID;
  1193. SELECT SUM(PV) INTO PV10 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=100;
  1194. UPDATE AR_BS_BONUS_103_CALC SET BONUS100 = PV10 * RATE2 WHERE USER_ID=USERID;
  1195. SELECT SUM(PV) INTO PV11 FROM AR_CALC_BONUS_BS_DETAIL_BONUS WHERE PERIOD_NUM=PCPID AND USER_ID=USERID AND LAST_EMP_LV=110;
  1196. UPDATE AR_BS_BONUS_103_CALC SET BONUS110 = PV11 * RATE2 WHERE USER_ID=USERID;
  1197. END IF;
  1198. END WHILE;
  1199. CLOSE CUR2;
  1200. -- 达到高级专员加发高级专员奖
  1201. UPDATE AR_BS_BONUS_103_CALC SET BONUS20 = REWARD20 + BONUS20 WHERE USER_TYPE=20;
  1202. -- 达到主任加发主任奖
  1203. UPDATE AR_BS_BONUS_103_CALC SET BONUS30 = REWARD30 + BONUS30 WHERE USER_TYPE=30;
  1204. END
  1205. ;;
  1206. delimiter ;
  1207. -- ----------------------------
  1208. -- Procedure structure for CALCPOINT
  1209. -- ----------------------------
  1210. DROP PROCEDURE IF EXISTS `CALCPOINT`;
  1211. delimiter ;;
  1212. CREATE PROCEDURE `CALCPOINT`()
  1213. BEGIN
  1214. DECLARE
  1215. MPOINTRATE DECIMAL ( 10, 2 );
  1216. SELECT
  1217. VALUE
  1218. / 100 INTO MPOINTRATE
  1219. FROM
  1220. AR_CONFIG
  1221. WHERE
  1222. CONFIG_NAME = 'bsNoPvPointsPercent';
  1223. UPDATE AR_BS_BONUS_103_CALC
  1224. SET PRODUCT_POINT = PV * MPOINTRATE
  1225. WHERE
  1226. USER_TYPE10 = 0
  1227. AND USER_TYPE = 0
  1228. AND PV > 0;
  1229. END
  1230. ;;
  1231. delimiter ;
  1232. -- ----------------------------
  1233. -- Procedure structure for CALCRECORD
  1234. -- ----------------------------
  1235. DROP PROCEDURE IF EXISTS `CALCRECORD`;
  1236. delimiter ;;
  1237. CREATE PROCEDURE `CALCRECORD`(IN `PID` INT, IN `PEVENT` VARCHAR ( 255 ), IN `PCPID` INT, IN `PNOW` DATETIME)
  1238. BEGIN
  1239. INSERT INTO AR_BS_BONUS_103_CALC_EVENT ( ID, EVENT, CREATION_TIME, CALC_PERIOD_ID )
  1240. VALUES
  1241. ( PID, PEVENT, NOW(), PCPID );
  1242. END
  1243. ;;
  1244. delimiter ;
  1245. -- ----------------------------
  1246. -- Procedure structure for CALCREFEREE
  1247. -- ----------------------------
  1248. DROP PROCEDURE IF EXISTS `CALCREFEREE`;
  1249. delimiter ;;
  1250. CREATE PROCEDURE `CALCREFEREE`(IN `PBONUSID` VARCHAR ( 50 ),
  1251. OUT `PNEWBONUSID` VARCHAR ( 50 ))
  1252. BEGIN
  1253. DECLARE
  1254. MUSERID,
  1255. MBONUSID VARCHAR ( 50 );
  1256. DECLARE
  1257. MUSERTYPE INT;
  1258. /*SET MUSERID := PBONUSID;
  1259. OUTER_LABEL :
  1260. WHILE
  1261. (
  1262. ISNULL( MBONUSID )) DO
  1263. SELECT
  1264. INTRODUCER_ID INTO MUSERID
  1265. FROM
  1266. AR_BS_BONUS_103_CALC_NET T
  1267. WHERE
  1268. T.USER_ID = MUSERID;
  1269. IF
  1270. ( MUSERID = 0 ) THEN
  1271. SET PNEWBONUSID := NULL;
  1272. LEAVE OUTER_LABEL;
  1273. END IF;
  1274. SELECT
  1275. USER_TYPE INTO MUSERTYPE
  1276. FROM
  1277. AR_BS_BONUS_103_CALC_NET T
  1278. WHERE
  1279. T.USER_ID = MUSERID;
  1280. IF
  1281. ( MUSERTYPE >= 30 ) THEN
  1282. SET PNEWBONUSID := MUSERID;
  1283. LEAVE OUTER_LABEL;
  1284. END IF;
  1285. END WHILE;*/
  1286. SELECT INTRODUCER_ID30 INTO PNEWBONUSID FROM AR_BS_BONUS_103_CALC_NET WHERE USER_ID = PBONUSID;
  1287. END
  1288. ;;
  1289. delimiter ;
  1290. -- ----------------------------
  1291. -- Procedure structure for CALCSTAT
  1292. -- ----------------------------
  1293. DROP PROCEDURE IF EXISTS `CALCSTAT`;
  1294. delimiter ;;
  1295. CREATE PROCEDURE `CALCSTAT`(IN `PCPID` INT)
  1296. BEGIN
  1297. INSERT INTO AR_CALC_BONUS_BS_STAT (
  1298. PERIOD_NUM,
  1299. TOTAL_PV,
  1300. BONUS10,
  1301. PERCENT10,
  1302. BONUS20,
  1303. PERCENT20,
  1304. BONUS30,
  1305. PERCENT30,
  1306. BONUS40,
  1307. PERCENT40,
  1308. BONUS50,
  1309. PERCENT50,
  1310. BONUS60,
  1311. PERCENT60,
  1312. BONUS70,
  1313. PERCENT70,
  1314. BONUS80,
  1315. PERCENT80,
  1316. BONUS90,
  1317. PERCENT90,
  1318. BONUS100,
  1319. PERCENT100,
  1320. BONUS110,
  1321. PERCENT110,
  1322. BONUS,
  1323. PERCENT,
  1324. CHECK_STATUS ,
  1325. BONUS_ABBR,
  1326. BONUS_ABBR_PERCENT,
  1327. BONUS_MNT,
  1328. BONUS_MNT_PERCENT
  1329. ) SELECT
  1330. PCPID,
  1331. SUM( PV ),
  1332. SUM( BONUS10 ),
  1333. 0,
  1334. SUM( BONUS20 ),
  1335. 0,
  1336. SUM( BONUS30 ),
  1337. 0,
  1338. SUM( BONUS40 ),
  1339. 0,
  1340. SUM( BONUS50 ),
  1341. 0,
  1342. SUM( BONUS60 ),
  1343. 0,
  1344. SUM( BONUS70 ),
  1345. 0,
  1346. SUM( BONUS80 ),
  1347. 0,
  1348. SUM( BONUS90 ),
  1349. 0,
  1350. SUM( BONUS100 ),
  1351. 0,
  1352. SUM( BONUS110 ),
  1353. 0,
  1354. SUM( BONUS ),
  1355. 0,
  1356. 0 ,
  1357. SUM( BONUSYJ),
  1358. 0,
  1359. SUM(BONUSGL),
  1360. 0
  1361. FROM
  1362. AR_BS_BONUS_103_CALC;
  1363. UPDATE AR_CALC_BONUS_BS_STAT
  1364. SET PERCENT10 = BONUS10 / TOTAL_PV,
  1365. PERCENT20 = BONUS20 / TOTAL_PV,
  1366. PERCENT30 = BONUS30 / TOTAL_PV,
  1367. PERCENT40 = BONUS40 / TOTAL_PV,
  1368. PERCENT50 = BONUS50 / TOTAL_PV,
  1369. PERCENT60 = BONUS60 / TOTAL_PV,
  1370. PERCENT70 = BONUS70 / TOTAL_PV,
  1371. PERCENT80 = BONUS80 / TOTAL_PV,
  1372. PERCENT90 = BONUS90 / TOTAL_PV,
  1373. PERCENT100 = BONUS100 / TOTAL_PV,
  1374. PERCENT110 = BONUS110 / TOTAL_PV,
  1375. PERCENT = BONUS / TOTAL_PV,
  1376. BONUS_ABBR_PERCENT = BONUS_ABBR / TOTAL_PV,
  1377. BONUS_MNT_PERCENT = BONUS_MNT /TOTAL_PV
  1378. WHERE
  1379. PERIOD_NUM = PCPID
  1380. AND TOTAL_PV > 0;
  1381. END
  1382. ;;
  1383. delimiter ;
  1384. -- ----------------------------
  1385. -- Procedure structure for CALCSUMMARY
  1386. -- ----------------------------
  1387. DROP PROCEDURE IF EXISTS `CALCSUMMARY`;
  1388. delimiter ;;
  1389. CREATE PROCEDURE `CALCSUMMARY`()
  1390. BEGIN
  1391. UPDATE AR_BS_BONUS_103_CALC T
  1392. SET T.BONUS = BONUS10 + BONUS20 + BONUS30 + BONUS40 + BONUS50 + BONUS60 + BONUS70 + BONUS80 + BONUS90 + BONUS100 + BONUS110,T.BONUSYJ = BONUS10 + BONUS20,T.BONUSGL = BONUS30 + BONUS40 +BONUS50 + BONUS60 + BONUS70 +BONUS80 +BONUS90 +BONUS100 + BONUS110
  1393. WHERE
  1394. T.BONUS10 > 0
  1395. OR T.BONUS20 > 0
  1396. OR T.BONUS30 > 0
  1397. OR T.BONUS40 > 0
  1398. OR T.BONUS50 > 0
  1399. OR T.BONUS60 > 0
  1400. OR T.BONUS70 > 0
  1401. OR T.BONUS80 > 0
  1402. OR T.BONUS90 > 0
  1403. OR T.BONUS100 > 0
  1404. OR T.BONUS110 > 0;
  1405. UPDATE AR_BS_BONUS_103_CALC T
  1406. SET GPV = 0
  1407. WHERE
  1408. T.INTRODUCER_ID = '0'
  1409. AND USER_TYPE = 0;
  1410. END
  1411. ;;
  1412. delimiter ;
  1413. -- ----------------------------
  1414. -- Procedure structure for CALCTOTALGPV
  1415. -- ----------------------------
  1416. DROP PROCEDURE IF EXISTS `CALCTOTALGPV`;
  1417. delimiter ;;
  1418. CREATE PROCEDURE `CALCTOTALGPV`()
  1419. BEGIN
  1420. DECLARE
  1421. MLAYER,
  1422. MMINLAYER,
  1423. MUSERTYPE INT DEFAULT 0;
  1424. DECLARE
  1425. MUSERID,
  1426. MMAXUSERID VARCHAR ( 50 );
  1427. DECLARE
  1428. MGPV DECIMAL ( 10, 2 );
  1429. SELECT
  1430. MAX( LAYER ) INTO MLAYER
  1431. FROM
  1432. AR_BS_BONUS_103_CALC_NET
  1433. WHERE
  1434. GPV > 0;
  1435. SELECT
  1436. MIN( LAYER ) INTO MMINLAYER
  1437. FROM
  1438. AR_BS_BONUS_103_CALC_NET
  1439. WHERE
  1440. USER_TYPE = 30;
  1441. UPDATE AR_BS_BONUS_103_CALC_NET T1
  1442. INNER JOIN AR_BS_BONUS_103_CALC_NET T2 ON IFNULL( T1.INTRODUCER_ID, '0' ) = T2.USER_ID
  1443. AND T1.USER_TYPE = 30
  1444. AND T2.USER_TYPE = 30
  1445. SET T1.INTRODUCER_ID30 = T2.USER_ID;
  1446. WHILE
  1447. MLAYER > MMINLAYER DO
  1448. CALL CALCTOTALGPV_ ( MLAYER, MMINLAYER );
  1449. SET MLAYER = MLAYER - 1;
  1450. END WHILE;
  1451. END
  1452. ;;
  1453. delimiter ;
  1454. -- ----------------------------
  1455. -- Procedure structure for CALCTOTALGPV_
  1456. -- ----------------------------
  1457. DROP PROCEDURE IF EXISTS `CALCTOTALGPV_`;
  1458. delimiter ;;
  1459. CREATE PROCEDURE `CALCTOTALGPV_`(IN `PLAYER` INT, -- 第几层
  1460. IN `PMINLAYER` INT)
  1461. BEGIN
  1462. DECLARE
  1463. FLAG,
  1464. MLAYER,
  1465. MINTLAYER,
  1466. MUSERTYPE,
  1467. MINTTYPE INT DEFAULT 0;
  1468. DECLARE
  1469. MGPV DECIMAL ( 10, 2 );
  1470. DECLARE
  1471. MUSERID,
  1472. MUSERINTID,
  1473. MINTUSERID,
  1474. MINTRODUCERID VARCHAR ( 50 );
  1475. DECLARE
  1476. MC CURSOR FOR SELECT
  1477. C.USER_ID,
  1478. C.INTRODUCER_ID,
  1479. C.USER_TYPE,
  1480. C.GPV
  1481. FROM
  1482. (
  1483. SELECT
  1484. USER_ID,
  1485. IFNULL( INTRODUCER_ID, '0' ) INTRODUCER_ID,
  1486. USER_TYPE,
  1487. GPV
  1488. FROM
  1489. AR_BS_BONUS_103_CALC_NET
  1490. WHERE
  1491. LAYER = PLAYER
  1492. AND GPV > 0
  1493. OR ( GPV = 0 AND USER_TYPE = 30 )
  1494. ORDER BY
  1495. USER_ID DESC
  1496. ) C;
  1497. DECLARE
  1498. CONTINUE HANDLER FOR NOT FOUND
  1499. SET FLAG = 1;
  1500. START TRANSACTION;-- 打开游标
  1501. OPEN MC;-- 获取结果
  1502. L2 :
  1503. LOOP
  1504. FETCH MC INTO MUSERID,
  1505. MUSERINTID,
  1506. MUSERTYPE,
  1507. MGPV;
  1508. IF
  1509. FLAG = 1 THEN-- 当无法FETCH会触发HANDLER CONTINUE
  1510. LEAVE L2;
  1511. END IF;
  1512. SET MLAYER = PLAYER;
  1513. SET MINTUSERID = MUSERINTID;
  1514. IF
  1515. ( MINTUSERID != '0' ) THEN
  1516. OUTLABEL :
  1517. WHILE
  1518. MLAYER > PMINLAYER DO
  1519. SELECT
  1520. INTRODUCER_ID,
  1521. USER_TYPE,
  1522. LAYER INTO MINTRODUCERID,
  1523. MINTTYPE,
  1524. MLAYER
  1525. FROM
  1526. AR_BS_BONUS_103_CALC_NET
  1527. WHERE
  1528. USER_ID = MINTUSERID;
  1529. IF
  1530. ( MINTUSERID != MUSERINTID AND MINTTYPE = 30 ) THEN
  1531. UPDATE AR_BS_BONUS_103_CALC_NET
  1532. SET TEAM_GPV = TEAM_GPV + MGPV
  1533. WHERE
  1534. USER_ID = MINTUSERID;
  1535. IF
  1536. ( MUSERTYPE = 30 ) THEN
  1537. UPDATE AR_BS_BONUS_103_CALC_NET
  1538. SET INTRODUCER_ID30 = MINTUSERID
  1539. WHERE
  1540. USER_ID = MUSERID
  1541. AND INTRODUCER_ID30 IS NULL;
  1542. END IF;
  1543. LEAVE OUTLABEL;
  1544. END IF;
  1545. SET MINTUSERID = MINTRODUCERID;
  1546. END WHILE;
  1547. END IF;-- 关闭游标
  1548. END LOOP;
  1549. CLOSE MC;
  1550. COMMIT;
  1551. END
  1552. ;;
  1553. delimiter ;
  1554. -- ----------------------------
  1555. -- Procedure structure for CALCUP30
  1556. -- ----------------------------
  1557. DROP PROCEDURE IF EXISTS `CALCUP30`;
  1558. delimiter ;;
  1559. CREATE PROCEDURE `CALCUP30`()
  1560. BEGIN
  1561. START TRANSACTION;
  1562. UPDATE AR_BS_BONUS_103_CALC_NET T1
  1563. SET T1.USER_TYPE = 30
  1564. WHERE
  1565. USER_TYPE >= 10
  1566. AND DIRECTLY_UNDER >= 3;
  1567. COMMIT;
  1568. END
  1569. ;;
  1570. delimiter ;
  1571. -- ----------------------------
  1572. -- Procedure structure for CALCUPGARDE
  1573. -- ----------------------------
  1574. DROP PROCEDURE IF EXISTS `CALCUPGARDE`;
  1575. delimiter ;;
  1576. CREATE PROCEDURE `CALCUPGARDE`(IN `PLAYER` INT)
  1577. BEGIN
  1578. DECLARE
  1579. MLAYER,
  1580. MCOUNT,
  1581. MCOUNT1,
  1582. MCOUNT2 INT;
  1583. SET MLAYER := PLAYER;
  1584. SELECT
  1585. COUNT(*) INTO MCOUNT
  1586. FROM
  1587. AR_BS_BONUS_103_CALC T
  1588. WHERE
  1589. T.LAYER = MLAYER
  1590. AND USER_TYPE10 = 10
  1591. AND USER_TYPE = 0;
  1592. IF
  1593. ( MCOUNT > 0 ) THEN
  1594. BREAKLABLE :
  1595. WHILE
  1596. MLAYER > 0 DO
  1597. SELECT
  1598. COUNT(*) INTO MCOUNT1
  1599. FROM
  1600. AR_BS_BONUS_103_CALC T1
  1601. WHERE
  1602. T1.USER_TYPE10 = 10
  1603. AND T1.LAYER = MLAYER - 1;
  1604. UPDATE AR_BS_BONUS_103_CALC T1
  1605. INNER JOIN ( SELECT INTRODUCER_ID FROM AR_BS_BONUS_103_CALC WHERE LAYER = MLAYER AND USER_TYPE10 = 10 GROUP BY INTRODUCER_ID ) T2 ON T1.USER_ID = T2.INTRODUCER_ID
  1606. AND T1.USER_TYPE10 = 0
  1607. AND T1.LAYER = MLAYER - 1
  1608. SET T1.USER_TYPE10 = 10,
  1609. T1.USER_TYPE = 10;
  1610. SELECT
  1611. COUNT(*) INTO MCOUNT2
  1612. FROM
  1613. AR_BS_BONUS_103_CALC T1
  1614. WHERE
  1615. T1.USER_TYPE10 = 10
  1616. AND T1.LAYER = MLAYER - 1;
  1617. IF
  1618. ( MCOUNT1 = MCOUNT2 ) THEN
  1619. LEAVE BREAKLABLE;
  1620. END IF;
  1621. SET MLAYER := MLAYER - 1;
  1622. END WHILE;
  1623. END IF;
  1624. END
  1625. ;;
  1626. delimiter ;
  1627. -- ----------------------------
  1628. -- Procedure structure for UPPERCASE
  1629. -- ----------------------------
  1630. DROP PROCEDURE IF EXISTS `UPPERCASE`;
  1631. delimiter ;;
  1632. CREATE PROCEDURE `UPPERCASE`(IN DBNAME VARCHAR(200))
  1633. BEGIN
  1634. DECLARE DONE INT DEFAULT 0;
  1635. DECLARE OLDNAME VARCHAR(200);
  1636. DECLARE CUR CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DBNAME;
  1637. DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE = 1;
  1638. OPEN CUR;
  1639. REPEAT
  1640. FETCH CUR INTO OLDNAME;
  1641. SET @NEWNAME = UPPER(OLDNAME);
  1642. SET @ISNOTSAME = @NEWNAME <> BINARY OLDNAME;
  1643. IF NOT DONE && @ISNOTSAME THEN
  1644. SET @SQL = CONCAT('RENAME TABLE `',OLDNAME,'` TO `', LOWER(@NEWNAME), '_TMP` ');
  1645. PREPARE TMPSTMT FROM @SQL;
  1646. EXECUTE TMPSTMT;
  1647. SET @SQL = CONCAT('RENAME TABLE `',LOWER(@NEWNAME),'_TMP` TO `',@NEWNAME, '`');
  1648. PREPARE TMPSTMT FROM @SQL;
  1649. EXECUTE TMPSTMT;
  1650. DEALLOCATE PREPARE TMPSTMT;
  1651. END IF;
  1652. UNTIL DONE END REPEAT;
  1653. CLOSE CUR;
  1654. END
  1655. ;;
  1656. delimiter ;
  1657. SET FOREIGN_KEY_CHECKS = 1;