管理奖1.0.sql 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  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 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. , JICENGDAISHU
  261. , JIJIANGDAISHU
  262. , R1_ORI_BONUS_QY_BD
  263. , R2_ORI_BONUS_QY_BD
  264. , R2_BDYJ
  265. , if(r2_bdyj <980,0,XIANAJIANGJIN)
  266. , TUIGUANGRENSHU
  267. , DAISHUXIANZHI
  268. , JIANGJINBILI
  269. )
  270. ;
  271. SET JIJIANGDAISHU = JICENGDAISHU;
  272. END IF;
  273. IF R2_BDYJ < 980 THEN
  274. SELECT
  275. U.`推荐编号`
  276. INTO
  277. R3_PARENT_USER_NAME
  278. FROM
  279. zr_user_vw U
  280. WHERE
  281. U.`会员编号` = R2_USER_NAME
  282. ;
  283. REPEAT
  284. SELECT
  285. U.USER_NAME
  286. , U.REAL_NAME
  287. , U2.USER_NAME AS PARENT_USER_NAME
  288. , U2.REAL_NAME AS PARENT_REAL_NAME
  289. ,( XIAOYEJI ( U.USER_NAME, PRM_PERIOD_NUM )) AS BDYJ
  290. INTO
  291. R3_USER_NAME
  292. , R3_REAL_NAME
  293. , R3_PARENT_USER_NAME
  294. , R3_PARENT_REAL_NAME
  295. , R3_BDYJ
  296. FROM
  297. ar_user U
  298. LEFT JOIN
  299. ar_user_relation_new R
  300. ON
  301. R.USER_ID = U.ID
  302. LEFT JOIN
  303. ar_user U2
  304. ON
  305. U2.ID = R.PARENT_UID
  306. LEFT JOIN
  307. ar_perf_period P
  308. ON
  309. P.USER_ID = U.ID
  310. AND P.PERIOD_NUM = PRM_PERIOD_NUM
  311. WHERE
  312. U.USER_NAME = R3_PARENT_USER_NAME
  313. ;
  314. INSERT INTO ek_temp_gl_cs
  315. ( `得奖人编号`
  316. , `得奖人姓名`
  317. , `得奖人级别`
  318. , `给奖人编号`
  319. , `给奖人姓名`
  320. , `实际代数`
  321. , `计层代数`
  322. , `计奖代数`
  323. , `给奖人报团奖`
  324. , `得奖人报团奖`
  325. , `得奖人小业绩`
  326. , `奖金`
  327. , `推广人数`
  328. , `奖金比例`
  329. , `是否紧缩980`
  330. )
  331. VALUES
  332. ( R3_USER_NAME
  333. , R3_REAL_NAME
  334. , NULL
  335. , R1_USER_NAME
  336. , R1_REAL_NAME
  337. , NULL
  338. , NULL
  339. , NULL
  340. , NULL
  341. , NULL
  342. , R3_BDYJ
  343. , if(r3_bdyj >=980 ,XIANAJIANGJIN,0)
  344. , NULL
  345. , NULL
  346. , 1
  347. )
  348. ;
  349. UNTIL R3_BDYJ >= 980
  350. OR
  351. R3_PARENT_USER_NAME IS NULL
  352. END REPEAT;
  353. END IF;
  354. SET R1_PARENT_USER_NAME = R2_PARENT_USER_NAME;
  355. UNTIL JIJIANGDAISHU >= 18
  356. OR
  357. R2_USER_NAME IS NULL
  358. END REPEAT;
  359. FETCH NEXT
  360. FROM
  361. rs
  362. INTO
  363. R1_USER_NAME
  364. , R1_REAL_NAME
  365. , R1_ORI_BONUS_QY_BD
  366. , R1_PARENT_USER_NAME
  367. , R1_PARENT_REAL_NAME
  368. ;
  369. UNTIL Done
  370. END REPEAT;
  371. /* 关闭游标 */
  372. CLOSE rs;
  373. END