管理奖1.2(1.2均无紧缩).sql 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. CREATE DEFINER=`bi`@`%` PROCEDURE `BONUS_GL`(
  2. `PRM_PERIOD_NUM` INT
  3. )
  4. BEGIN
  5. DECLARE
  6. Done INT DEFAULT 0;
  7. DECLARE
  8. R1_USER_NAME VARCHAR ( 30 );
  9. DECLARE
  10. R1_REAL_NAME VARCHAR ( 50 );
  11. DECLARE
  12. R1_USER_LEVEL VARCHAR ( 10 );
  13. DECLARE
  14. R1_PARENT_LEVEL VARCHAR ( 10 );
  15. DECLARE
  16. R1_PARENT_USER_NAME VARCHAR ( 30 );
  17. DECLARE
  18. R3_USER_NAME VARCHAR ( 30 );
  19. DECLARE
  20. R3_REAL_NAME VARCHAR ( 50 );
  21. DECLARE
  22. R3_PARENT_USER_NAME VARCHAR ( 30 );
  23. DECLARE
  24. R3_PARENT_REAL_NAME VARCHAR ( 50 );
  25. DECLARE
  26. R1_PARENT_REAL_NAME VARCHAR ( 50 );
  27. DECLARE
  28. SHIJIDAISHU INT DEFAULT 0;
  29. /*DECLARE
  30. JICENGDAISHU INT DEFAULT 0;*/
  31. DECLARE
  32. JIJIANGDAISHU INT DEFAULT 0;
  33. DECLARE
  34. R1_ORI_BONUS_QY_BD DECIMAL ( 16, 3 );
  35. DECLARE
  36. R2_USER_NAME VARCHAR ( 30 );
  37. DECLARE
  38. R2_REAL_NAME VARCHAR ( 50 );
  39. DECLARE
  40. R2_ORI_BONUS_QY_BD DECIMAL ( 16, 3 );
  41. DECLARE
  42. R2_BDYJ DECIMAL ( 16, 3 );
  43. DECLARE
  44. R3_BDYJ DECIMAL ( 16, 3 );
  45. DECLARE
  46. R2_PARENT_USER_NAME VARCHAR ( 30 );
  47. DECLARE
  48. R2_PARENT_REAL_NAME VARCHAR ( 50 );
  49. DECLARE
  50. XIANAJIANGJIN DECIMAL ( 16, 3 );
  51. DECLARE
  52. TUIGUANGRENSHU INT;
  53. DECLARE
  54. DAISHUXIANZHI INT;
  55. DECLARE
  56. JIANGJINBILI DECIMAL ( 16, 3 );
  57. /* 声明游标 */
  58. DECLARE
  59. rs
  60. CURSOR FOR
  61. SELECT
  62. U.USER_NAME
  63. , U.REAL_NAME
  64. , B.ORI_BONUS_QY_BD
  65. , U2.USER_NAME AS PARENT_USER_NAME
  66. , U2.REAL_NAME AS PARENT_REAL_NAME
  67. FROM
  68. ar_calc_bonus B
  69. LEFT JOIN
  70. ar_user U
  71. ON
  72. U.ID = B.USER_ID
  73. LEFT JOIN
  74. ar_user_relation_new R
  75. ON
  76. R.USER_ID = B.USER_ID
  77. LEFT JOIN
  78. ar_user U2
  79. ON
  80. U2.ID = R.PARENT_UID
  81. LEFT JOIN
  82. ar_perf_period P
  83. ON
  84. P.USER_ID = U.ID
  85. AND P.PERIOD_NUM = PRM_PERIOD_NUM
  86. WHERE
  87. B.PERIOD_NUM = PRM_PERIOD_NUM
  88. AND B.ORI_BONUS_QY_BD > 0
  89. ;
  90. /* 异常处理 */
  91. DECLARE
  92. CONTINUE HANDLER FOR SQLSTATE '02000'
  93. SET Done = 1;
  94. /* 打开游标 */
  95. OPEN rs;
  96. DELETE
  97. FROM
  98. ek_temp_gl_cs
  99. ;
  100. /* 逐个取出当前记录LingQi字段的值,需要进行最大值的判断 */
  101. FETCH NEXT
  102. FROM
  103. rs
  104. INTO
  105. R1_USER_NAME
  106. , R1_REAL_NAME
  107. , R1_ORI_BONUS_QY_BD
  108. , R1_PARENT_USER_NAME
  109. , R1_PARENT_REAL_NAME
  110. ;
  111. /* 遍历数据表 */
  112. REPEAT
  113. SET JIJIANGDAISHU = 1;
  114. -- SET JICENGDAISHU = 1;
  115. 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);
  116. REPEAT
  117. SET R2_USER_NAME = NULL;
  118. SELECT
  119. A.USER_NAME
  120. , A.REAL_NAME
  121. , A.LEVEL_NAME
  122. , A.ORI_BONUS_QY_BD
  123. , A.PARENT_USER_NAME
  124. , A.PARENT_REAL_NAME
  125. , A.PARENT_LEVEL_NAME
  126. , A.BDYJ
  127. , A.TUIGUANGRENSHU
  128. , G.`实际代数`
  129. INTO
  130. R2_USER_NAME
  131. , R2_REAL_NAME
  132. , R1_USER_LEVEL
  133. , R2_ORI_BONUS_QY_BD
  134. , R2_PARENT_USER_NAME
  135. , R2_PARENT_REAL_NAME
  136. , R1_PARENT_LEVEL
  137. , R2_BDYJ
  138. , TUIGUANGRENSHU
  139. , DAISHUXIANZHI
  140. FROM
  141. (
  142. SELECT
  143. U.USER_NAME
  144. , U.REAL_NAME
  145. , D.LEVEL_NAME
  146. , IFNULL( B.ORI_BONUS_QY_BD, 0 ) AS ORI_BONUS_QY_BD
  147. , U2.USER_NAME AS PARENT_USER_NAME
  148. , U2.REAL_NAME AS PARENT_REAL_NAME
  149. , D2.LEVEL_NAME AS PARENT_LEVEL_NAME
  150. ,( XIAOYEJI ( R1_PARENT_USER_NAME, PRM_PERIOD_NUM )) AS BDYJ
  151. , (
  152. SELECT
  153. COUNT(*)
  154. FROM
  155. zr_user_vw R
  156. WHERE
  157. R.`推荐编号` = U.USER_NAME
  158. )
  159. AS TUIGUANGRENSHU
  160. FROM
  161. ar_user U
  162. LEFT JOIN
  163. ar_calc_bonus B
  164. ON
  165. B.USER_ID = U.ID
  166. AND B.PERIOD_NUM = PRM_PERIOD_NUM
  167. LEFT JOIN
  168. ar_declaration_level D
  169. ON
  170. D.ID = U.DEC_LV
  171. LEFT JOIN
  172. ar_user_relation_new R
  173. ON
  174. R.USER_ID = U.ID
  175. LEFT JOIN
  176. ar_user U2
  177. ON
  178. U2.ID = R.PARENT_UID
  179. LEFT JOIN
  180. ar_declaration_level D2
  181. ON
  182. D2.ID = U2.DEC_LV
  183. LEFT JOIN
  184. ar_perf_period P
  185. ON
  186. P.USER_ID = U.ID
  187. AND P.PERIOD_NUM = PRM_PERIOD_NUM
  188. WHERE
  189. U.USER_NAME = R1_PARENT_USER_NAME
  190. )
  191. A
  192. LEFT JOIN
  193. ek_temp_glds G
  194. ON
  195. G.`会员级别` = A.LEVEL_NAME
  196. AND G.`推广人数` =
  197. IF
  198. (
  199. A.TUIGUANGRENSHU > 3, 3, A.TUIGUANGRENSHU
  200. )
  201. ;
  202. SET Done = 0;
  203. SET SHIJIDAISHU = SHIJIDAISHU + 1;-- SET SHANGDAI = SHANGDAI + 1;
  204. IF R2_USER_NAME IS NOT NULL THEN
  205. SET JIANGJINBILI = 0;
  206. SET XIANAJIANGJIN = 0;
  207. IF JIJIANGDAISHU <= DAISHUXIANZHI AND JIJIANGDAISHU%2 = 1 AND R1_ORI_BONUS_QY_BD > 0 THEN
  208. IF JIJIANGDAISHU = 1
  209. OR
  210. JIJIANGDAISHU = 3
  211. OR
  212. JIJIANGDAISHU = 5 THEN
  213. SET JIANGJINBILI = 0.05;
  214. ELSEIF
  215. JIJIANGDAISHU = 7
  216. OR
  217. JIJIANGDAISHU = 9
  218. OR
  219. JIJIANGDAISHU = 11 THEN
  220. SET JIANGJINBILI = 0.04;
  221. ELSEIF
  222. JIJIANGDAISHU = 13
  223. OR
  224. JIJIANGDAISHU = 15
  225. OR
  226. JIJIANGDAISHU = 17 THEN
  227. SET JIANGJINBILI = 0.03;
  228. ELSE
  229. SET JIANGJINBILI = 0;
  230. END IF;
  231. SET XIANAJIANGJIN = R1_ORI_BONUS_QY_BD * JIANGJINBILI;
  232. END IF;
  233. /*IF R2_ORI_BONUS_QY_BD > 0 THEN
  234. SET JICENGDAISHU = JICENGDAISHU + 1;
  235. END IF;*/
  236. INSERT INTO ek_temp_gl_cs
  237. ( `得奖人编号`
  238. , `得奖人姓名`
  239. , `得奖人级别`
  240. , `给奖人编号`
  241. , `给奖人姓名`
  242. , `实际代数`
  243. , `计层代数`
  244. , `计奖代数`
  245. , `给奖人报团奖`
  246. , `得奖人报团奖`
  247. , `得奖人小业绩`
  248. , `奖金`
  249. , `推广人数`
  250. , `代数限制`
  251. , `奖金比例`
  252. )
  253. VALUES
  254. ( R2_USER_NAME
  255. , R2_REAL_NAME
  256. , R1_USER_LEVEL
  257. , R1_USER_NAME
  258. , R1_REAL_NAME
  259. , SHIJIDAISHU
  260. , NULL
  261. , IF(R2_ORI_BONUS_QY_BD = 0,NULL,JIJIANGDAISHU)
  262. , R1_ORI_BONUS_QY_BD
  263. , R2_ORI_BONUS_QY_BD
  264. , R2_BDYJ
  265. , IF(R2_ORI_BONUS_QY_BD = 0,0,XIANAJIANGJIN)
  266. , TUIGUANGRENSHU
  267. , DAISHUXIANZHI
  268. , JIANGJINBILI
  269. )
  270. ;
  271. -- SET JIJIANGDAISHU = JICENGDAISHU;
  272. END IF;
  273. IF R2_ORI_BONUS_QY_BD > 0 THEN
  274. SET JIJIANGDAISHU = JIJIANGDAISHU + 1;
  275. END IF;
  276. SET R1_PARENT_USER_NAME = R2_PARENT_USER_NAME;
  277. UNTIL JIJIANGDAISHU >= 18
  278. OR
  279. R2_USER_NAME IS NULL
  280. END REPEAT;
  281. FETCH NEXT
  282. FROM
  283. rs
  284. INTO
  285. R1_USER_NAME
  286. , R1_REAL_NAME
  287. , R1_ORI_BONUS_QY_BD
  288. , R1_PARENT_USER_NAME
  289. , R1_PARENT_REAL_NAME
  290. ;
  291. UNTIL Done
  292. END REPEAT;
  293. /* 关闭游标 */
  294. CLOSE rs;
  295. END