Volunteer.php 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <?php
  2. namespace app\controller\api\user;
  3. //use app\common\repositories\user\UserRepository;
  4. //use crmeb\basic\BaseController;
  5. //use think\App;
  6. use think\Exception;
  7. use think\facade\Db;
  8. use think\facade\Log;
  9. class Volunteer //extends BaseController
  10. {
  11. // public $repository;
  12. //
  13. // /**
  14. // * Volunteer constructor.
  15. // * @param App $app
  16. // * @param UserRepository $repository
  17. // */
  18. // public function __construct(App $app, UserRepository $repository)
  19. // {
  20. // parent::__construct($app);
  21. // $this->repository = $repository;
  22. // }
  23. /**
  24. * 志愿者升级
  25. * */
  26. public function doUpgrade($uid=0){
  27. set_time_limit(0);
  28. try {
  29. //志愿者条件
  30. $volunteer_achievement = systemConfig("volunteer_achievement");//volunteer_achievement:用户本人满足养老金要求可升级为志愿者
  31. //一星条件
  32. $a_volunteer_achievement = systemConfig("a_volunteer_achievement");//团队养老金要求
  33. $a_volunteer_number = systemConfig("a_volunteer_number");//团队人数要求
  34. //二星条件
  35. $b_volunteer_achievement = systemConfig("b_volunteer_achievement");//团队养老金要求
  36. $b_volunteer_number = systemConfig("b_volunteer_number");//团队人数要求
  37. //三星条件
  38. $c_volunteer_achievement = systemConfig("c_volunteer_achievement");//团队养老金要求
  39. $c_volunteer_number = systemConfig("c_volunteer_number");//团队人数要求
  40. //董事条件
  41. $d_volunteer_achievement = systemConfig("d_volunteer_achievement");//团队养老金要求
  42. $d_volunteer_number = systemConfig("d_volunteer_number");//团队人数要求
  43. //用户列表
  44. if($uid > 0){
  45. $userList = Db::name("User") -> where("uid",$uid)-> field("uid")-> select();
  46. }else{
  47. $userList = Db::name("User")-> field("uid")-> select();
  48. }
  49. foreach($userList as $key => $value){
  50. $exist = Db::name("Volunteer") -> where(["uid"=>$value['uid']])->find();
  51. if(!$exist || $exist['grade'] < 1){
  52. continue;
  53. }
  54. $volunteer = $this -> volunteer($value['uid']);
  55. //本人养老金小于志愿者要求
  56. if($volunteer['self_yanglao'] < $volunteer_achievement){
  57. continue;
  58. }
  59. //满足志愿者要求
  60. if($volunteer['self_yanglao'] >= $volunteer_achievement){
  61. //志愿者
  62. if($volunteer['team'] < $a_volunteer_number || $volunteer['yanglao'] < $a_volunteer_achievement){
  63. $this -> grade($value['uid'],1,$volunteer);
  64. }
  65. //一星
  66. if ($volunteer['team'] >= $a_volunteer_number && $volunteer['yanglao'] >= $a_volunteer_achievement//满足一星条件
  67. &&
  68. ($volunteer['team'] < $b_volunteer_number || $volunteer['yanglao'] < $b_volunteer_achievement)//未满足二星条件
  69. ){
  70. $this -> grade($value['uid'],2,$volunteer);
  71. }
  72. //二星
  73. if ($volunteer['team'] >= $b_volunteer_number && $volunteer['yanglao'] >= $b_volunteer_achievement//满足二星条件
  74. &&
  75. ($volunteer['team'] < $c_volunteer_number || $volunteer['yanglao'] < $c_volunteer_achievement)//未满足三星条件
  76. ){
  77. $this -> grade($value['uid'],3,$volunteer);
  78. }
  79. //三星
  80. if ($volunteer['team'] >= $c_volunteer_number && $volunteer['yanglao'] >= $c_volunteer_achievement//满足三星条件
  81. &&
  82. ($volunteer['team'] < $d_volunteer_number || $volunteer['yanglao'] < $d_volunteer_achievement)//未满足董事条件
  83. ){
  84. $this -> grade($value['uid'],4,$volunteer);
  85. }
  86. //董事
  87. if($volunteer['team'] >= $d_volunteer_number && $volunteer['yanglao'] >= $d_volunteer_achievement){
  88. $this -> grade($value['uid'],5,$volunteer);
  89. }
  90. }
  91. //团队各等级数量统计
  92. $this -> statistics($value['uid']);
  93. }
  94. }catch (Exception $e){
  95. Log::info('志愿者升级:'.$e->getMessage());
  96. }
  97. }
  98. //志愿者信息
  99. public function volunteer($uid){
  100. if(!$uid){
  101. return false;
  102. }
  103. //本人养老金
  104. $data['self_yanglao'] = $this -> getYanglao($uid);
  105. //团队人数
  106. $data['team'] = $this -> volunteer_number($uid);
  107. //团队养老金
  108. $data['yanglao'] = $this -> volunteer_achievement($uid);
  109. //直推人数
  110. $data['extension'] = Db::name("user_identity_log")->where(["uid"=>$uid])->count();
  111. //直推商户数量
  112. $data['shop'] = Db::name("user_identity_log")->where(["uid"=>$uid,'identity'=>4])->whereNotIn("identity","0")->count();
  113. return $data;
  114. }
  115. //团队人数
  116. public function volunteer_number($uid){
  117. $number = 0;
  118. $number1=Db::name("user_identity_log")->where(["uid"=>$uid])->field("link_id") -> select();
  119. $number += count($number1);
  120. foreach ($number1 as $key => $value){
  121. $number += Db::name("user_identity_log")->where(["uid"=>$value['link_id']])->field("link_id") -> count();
  122. }
  123. return $number;
  124. }
  125. //团队养老金
  126. public function volunteer_achievement($uid){
  127. $yanglao = 0;
  128. $number1=Db::name("user_identity_log")->where(["uid"=>$uid])->field("link_id") -> select();
  129. foreach ($number1 as $key => $value){
  130. $yanglao += $this -> getYanglao($value['link_id']);
  131. $number2 = Db::name("user_identity_log")->where(["uid"=>$value['link_id']])->field("link_id") -> select();
  132. foreach ($number2 as $k => $v){
  133. $yanglao += $this -> getYanglao($v['link_id']);
  134. }
  135. unset($number2);
  136. }
  137. return $yanglao;
  138. }
  139. //用户养老金
  140. public function getYanglao($uid){
  141. $BeginDate = date('Y-m-01', strtotime(date("Y-m-d")));
  142. $endDate = date('Y-m-d', strtotime("$BeginDate +1 month -1 day"));
  143. return Db::name("UserBill")
  144. -> where("`uid` = $uid and `commission_type` = 5 and `status` = 1 and `pm` = 1 and `create_time` >= $BeginDate and `create_time` <= $endDate")
  145. -> sum("number");
  146. }
  147. //升级
  148. public function grade($uid,$grade,$volunteer){
  149. $exist = Db::name("Volunteer") -> where(["uid"=>$uid])->find();
  150. if($exist){
  151. Db::name("Volunteer")
  152. -> where(["uid"=>$uid])
  153. -> update([
  154. "grade" => $grade,
  155. "team" => $volunteer['team'],
  156. "yanglao" => $volunteer['yanglao'],
  157. "extension" => $volunteer['extension'],
  158. "shop" => $volunteer['shop'],
  159. "time" => time()
  160. ]);
  161. return true;
  162. }
  163. Db::name("Volunteer")
  164. -> insert([
  165. "uid" => $uid,
  166. "grade" => $grade,
  167. "team" => $volunteer['team'],
  168. "yanglao" => $volunteer['yanglao'],
  169. "extension" => $volunteer['extension'],
  170. "shop" => $volunteer['shop'],
  171. "time" => time()
  172. ]
  173. );
  174. return true;
  175. }
  176. //下级各等级数量统计
  177. public function statistics($uid){
  178. $data = [
  179. 'v' => 0,
  180. 'v1' => 0,
  181. 'v2' => 0,
  182. 'v3' => 0,
  183. 'v4' => 0
  184. ];
  185. $fns = function($uid) use (&$fns,&$data){
  186. $identity = Db::name("user_identity_log")
  187. -> alias("u")
  188. -> join("Volunteer v","u.link_id = v.uid")
  189. -> where(["u.uid"=>$uid])
  190. -> field("u.link_id,v.grade")
  191. -> select();
  192. if($identity){
  193. foreach ($identity as $key => $value){
  194. if($value['grade'] == 1){
  195. $data['v']++;
  196. }
  197. if($value['grade'] == 2){
  198. $data['v1']++;
  199. }
  200. if($value['grade'] == 3){
  201. $data['v2']++;
  202. }
  203. if($value['grade'] == 4){
  204. $data['v3']++;
  205. }
  206. if($value['grade'] == 5){
  207. $data['v4']++;
  208. }
  209. $fns($value['link_id']);
  210. }
  211. }
  212. };
  213. $fns($uid);
  214. Db::name("Volunteer")
  215. -> where(["uid"=>$uid])
  216. -> update([
  217. "v" => $data['v'],
  218. "v1" => $data['v1'],
  219. "v2" => $data['v2'],
  220. "v3" => $data['v3'],
  221. "v4" => $data['v4'],
  222. "time" => time()
  223. ]);
  224. return $data;
  225. }
  226. }