共享奖下拿1.1.sql 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. CREATE DEFINER=`bi`@`%` PROCEDURE `BONUS_GX_DOWN`( `PRM_PERIOD_NUM` INT )
  2. BEGIN#Routine body goes here...
  3. DECLARE
  4. Done INT DEFAULT 0;
  5. DECLARE
  6. R1_USER_NAME VARCHAR ( 30 );
  7. DECLARE
  8. R1_REAL_NAME VARCHAR ( 50 );
  9. DECLARE
  10. R1_PARENT_USER_NAME VARCHAR ( 30 );
  11. DECLARE
  12. R1_PARENT_REAL_NAME VARCHAR ( 50 );
  13. DECLARE
  14. SHIJIDAISHU INT DEFAULT 0;
  15. /*DECLARE
  16. JICENGDAISHU INT DEFAULT 0;*/
  17. DECLARE
  18. JIJIANGDAISHU INT DEFAULT 0;
  19. DECLARE
  20. R1_ORI_BONUS_QY_BD DECIMAL ( 16, 3 );
  21. DECLARE
  22. R2_USER_NAME VARCHAR ( 30 );
  23. DECLARE
  24. R2_REAL_NAME VARCHAR ( 50 );
  25. DECLARE
  26. R3_USER_NAME VARCHAR ( 30 );
  27. DECLARE
  28. R3_REAL_NAME VARCHAR ( 50 );
  29. DECLARE
  30. R2_ORI_BONUS_QY_BD DECIMAL ( 16, 3 );
  31. DECLARE
  32. R2_BDYJ DECIMAL ( 16, 3 );
  33. DECLARE
  34. R3_BDYJ DECIMAL ( 16, 3 );
  35. DECLARE
  36. R2_PARENT_USER_NAME VARCHAR ( 30 );
  37. DECLARE
  38. R2_PARENT_REAL_NAME VARCHAR ( 50 );
  39. DECLARE
  40. R3_PARENT_USER_NAME VARCHAR ( 30 );
  41. DECLARE
  42. R3_PARENT_REAL_NAME VARCHAR ( 50 );
  43. DECLARE
  44. XIANAJIANGJIN DECIMAL ( 16, 3 );
  45. /* 声明游标 */
  46. DECLARE
  47. rs CURSOR FOR SELECT
  48. U.USER_NAME,
  49. U.REAL_NAME,
  50. B.ORI_BONUS_QY_BD,
  51. U2.USER_NAME AS PARENT_USER_NAME,
  52. U2.REAL_NAME AS PARENT_REAL_NAME
  53. FROM
  54. ar_calc_bonus B
  55. LEFT JOIN ar_user U ON U.ID = B.USER_ID
  56. LEFT JOIN ar_user_network_new N ON N.USER_ID = B.USER_ID
  57. LEFT JOIN ar_user U2 ON U2.ID = N.PARENT_UID
  58. WHERE
  59. B.PERIOD_NUM = PRM_PERIOD_NUM
  60. AND B.ORI_BONUS_QY_BD > 0 ;
  61. /* 异常处理 */
  62. DECLARE
  63. CONTINUE HANDLER FOR SQLSTATE '02000'
  64. SET Done = 1;
  65. /* 打开游标 */
  66. OPEN rs;
  67. DELETE
  68. FROM
  69. ek_temp_gx_xiana;
  70. /* 逐个取出当前记录LingQi字段的值,需要进行最大值的判断 */
  71. FETCH NEXT
  72. FROM
  73. rs INTO R1_USER_NAME,
  74. R1_REAL_NAME,
  75. R1_ORI_BONUS_QY_BD,
  76. R1_PARENT_USER_NAME,
  77. R1_PARENT_REAL_NAME;
  78. /* 遍历数据表 */
  79. REPEAT
  80. SET JIJIANGDAISHU = 1;
  81. -- SET JICENGDAISHU = 1;
  82. SET SHIJIDAISHU = 0;-- INSERT INTO ORI_BONUS_GX_CS(USER_NAME,REAL_NAME,PARENT_NAME,ORI_BONUS_GX) VALUES (USER_NAME,REAL_NAME,PARENT_NAME,ORI_BONUS_GX);
  83. REPEAT
  84. SET R2_USER_NAME = NULL;
  85. SELECT
  86. U.USER_NAME,
  87. U.REAL_NAME,
  88. IFNULL( B.ORI_BONUS_QY_BD, 0 ),
  89. ( XIAOYEJI(U.USER_NAME, PRM_PERIOD_NUM)) AS BDYJ,
  90. U2.USER_NAME AS PARENT_USER_NAME,
  91. U2.REAL_NAME AS PARENT_REAL_NAME INTO R2_USER_NAME,
  92. R2_REAL_NAME,
  93. R2_ORI_BONUS_QY_BD,
  94. R2_BDYJ,
  95. R2_PARENT_USER_NAME,
  96. R2_PARENT_REAL_NAME
  97. FROM
  98. ar_user U
  99. LEFT JOIN ar_calc_bonus B ON B.USER_ID = U.ID
  100. AND B.PERIOD_NUM = PRM_PERIOD_NUM
  101. LEFT JOIN ar_user_network_new N ON N.USER_ID = U.ID
  102. LEFT JOIN ar_user U2 ON U2.ID = N.PARENT_UID
  103. LEFT JOIN ar_perf_period P ON P.USER_ID = U.ID
  104. AND P.PERIOD_NUM = PRM_PERIOD_NUM
  105. WHERE
  106. U.USER_NAME = R1_PARENT_USER_NAME;
  107. SET Done = 0;
  108. SET SHIJIDAISHU = SHIJIDAISHU + 1;-- SET SHANGDAI = SHANGDAI + 1;
  109. IF
  110. R2_USER_NAME IS NOT NULL THEN
  111. IF
  112. JIJIANGDAISHU % 2 = 0 THEN
  113. SET XIANAJIANGJIN = R1_ORI_BONUS_QY_BD * 0.05;
  114. ELSE
  115. SET XIANAJIANGJIN = 0;
  116. END IF;
  117. /*IF
  118. R2_ORI_BONUS_QY_BD > 0 THEN
  119. SET JIJIANGDAISHU = JIJIANGDAISHU + 1;
  120. END IF;*/
  121. INSERT INTO ek_temp_gx_xiana ( `得奖人编号`, `得奖人姓名`, `给奖人编号`, `给奖人姓名`, `实际代数`, `计层代数`, `计奖代数`, `给奖人报团奖`, `得奖人报团奖`, `得奖人小业绩`, `奖金` )
  122. VALUES
  123. (
  124. R2_USER_NAME,
  125. R2_REAL_NAME,
  126. R1_USER_NAME,
  127. R1_REAL_NAME,
  128. SHIJIDAISHU,
  129. NULL,
  130. IF(R2_BDYJ < 980, NULL , JIJIANGDAISHU),
  131. R1_ORI_BONUS_QY_BD,
  132. R2_ORI_BONUS_QY_BD,
  133. R2_BDYJ,
  134. IF
  135. ( R2_BDYJ < 980, 0, XIANAJIANGJIN )
  136. );
  137. /*IF R1_ORI_BONUS_QY_BD IS NULL THEN
  138. SET JIJIANGDAISHU = JIJIANGDAISHU + 1;
  139. END IF;*/
  140. END IF;
  141. IF
  142. R2_BDYJ >= 980 THEN
  143. SET JIJIANGDAISHU = JIJIANGDAISHU + 1;
  144. END IF;
  145. SET R1_PARENT_USER_NAME = R2_PARENT_USER_NAME;
  146. UNTIL JIJIANGDAISHU >= 11
  147. OR R2_USER_NAME IS NULL
  148. END REPEAT;
  149. FETCH NEXT
  150. FROM
  151. rs INTO R1_USER_NAME,
  152. R1_REAL_NAME,
  153. R1_ORI_BONUS_QY_BD,
  154. R1_PARENT_USER_NAME,
  155. R1_PARENT_REAL_NAME;
  156. UNTIL Done
  157. END REPEAT;
  158. /* 关闭游标 */
  159. CLOSE rs;
  160. END