Commission.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <?php
  2. namespace app\controller\api;
  3. use app\service\api\UserServiceFacade;
  4. use app\service\MoneyServiceFacade;
  5. use app\service\ConfServiceFacade;
  6. use laytp\controller\Api;
  7. use laytp\library\Random;
  8. use laytp\traits\Error;
  9. use think\facade\Db;
  10. /**
  11. * 会员相关
  12. * @ApiWeigh (90)
  13. */
  14. class Commission extends Api
  15. {
  16. use Error;
  17. protected function _initialize()
  18. {
  19. $this->model = new \app\model\commission\Team();
  20. }
  21. // 检测
  22. public function auth()
  23. {
  24. $loginUserInfo = UserServiceFacade::getUserInfo();
  25. $modelUser = new \app\model\commission\User();
  26. $res = $modelUser::where('uid','=',$loginUserInfo['id'])->find();
  27. if(!$res){
  28. return $this->error('不是分销商',2);
  29. }
  30. $res['money_total'] = \app\model\commission\Income::where(['uid'=>$loginUserInfo['id']])->sum('money');
  31. $res['on_cashout_money'] =\app\model\commission\Cashout::where(['uid'=>$loginUserInfo['id'],'status'=>0])->sum('extract_price');
  32. return $this->success('数据获取成功', $res);
  33. }
  34. // 申请分销商
  35. public function apply()
  36. {
  37. global $_GPC;
  38. $modelUser = new \app\model\commission\User();
  39. $post = $this->request->post();
  40. $realName = $this->request->post('real_name','');
  41. $telnum = $this->request->post('telnum','');
  42. if(!$realName || !$telnum){
  43. return $this->error('请上传姓名或手机号');
  44. }
  45. $loginUserInfo = UserServiceFacade::getUserInfo();
  46. $conf = ConfServiceFacade::groupGet('system.commission', 0);
  47. $res = $modelUser::where('uid','=',$loginUserInfo['id'])->find();
  48. $status =0;
  49. if(!empty($conf['is_examine']) && $conf['is_examine'] == 2){
  50. $status = 1;
  51. }
  52. $post['uid'] = $loginUserInfo['id'];
  53. $post['uniacid'] = $_GPC['uniacid'];
  54. $post['status'] = $status;
  55. $post['paid'] = 0;
  56. if(!$res){
  57. $a = $modelUser->save($post);
  58. return $this->success('数据获取成功', $a);
  59. }
  60. return $this->success('数据获取成功', $res);
  61. }
  62. // 完善提现信息
  63. public function update()
  64. {
  65. global $_GPC;
  66. $modelUser = new \app\model\commission\User();
  67. $post = $this->request->post();
  68. if(!($post['qrcode_wechat'])){
  69. return $this->error('修改失败,请上传二维码');
  70. }
  71. $loginUserInfo = UserServiceFacade::getUserInfo();
  72. $updateRes = $modelUser->where('uid', '=', $loginUserInfo['id'])->update($post);
  73. if (!$updateRes) return $this->error('数据更新失败');
  74. return $this->success('获取结果', $post);
  75. }
  76. public function teamList()
  77. {
  78. global $_GPC;
  79. $loginUserInfo = UserServiceFacade::getUserInfo();
  80. $where = ['pid'=>$loginUserInfo['id'],'uniacid'=>$_GPC['uniacid']];
  81. $order = ['create_time' => 'desc'];
  82. $param = $this->request->param();
  83. $limit = $this->request->param('limit', 10);
  84. $level = $this->request->param('level', 1);
  85. if($level == 1){
  86. $data = $this->model->where($where)->with(['userinfo','payMoney'])->withCount(['question','gallery'])->order($order)->paginate($limit)->each(function ($item){
  87. $item->payTotal = 0;
  88. foreach ($item->payMoney ?? [] as $value){
  89. $item->payTotal += $value->pay_price;
  90. }
  91. unset($item->payMoney);
  92. })->toArray();
  93. }elseif($level == 2){
  94. $data = $this->model->where(['gid'=>$loginUserInfo['id'],'uniacid'=>$_GPC['uniacid']])->with(['userinfo','payMoney'])->withCount(['question','gallery'])->paginate($limit)->each(function ($item){
  95. $item->payTotal = 0;
  96. foreach ($item->payMoney ?? [] as $value){
  97. $item->payTotal += $value->pay_price;
  98. }
  99. unset($item->payMoney);
  100. })->toArray();
  101. }elseif($level == 3){
  102. $data = $this->model->where(['gfid'=>$loginUserInfo['id'],'uniacid'=>$_GPC['uniacid']])->with(['userinfo','payMoney'])->withCount(['question','gallery'])->paginate($limit)->each(function ($item){
  103. $item->payTotal = 0;
  104. foreach ($item->payMoney ?? [] as $value){
  105. $item->payTotal += $value->pay_price;
  106. }
  107. unset($item->payMoney);
  108. })->toArray();
  109. }
  110. if(!$data){
  111. return $this->error('数据获取失败');
  112. }
  113. return $this->success('数据获取成功', $data);
  114. }
  115. // 加入团队
  116. public function addTeam()
  117. {
  118. global $_GPC;
  119. $loginUserInfo = UserServiceFacade::getUserInfo();
  120. $spm = $this->request->post('spm',0);
  121. if(!$spm){
  122. return $this->error('数据获取失败,请上传spm',2);
  123. }
  124. $arr = explode('.',$spm);
  125. $shareuid = $arr[0];
  126. if($shareuid == 0){
  127. return $this->error('分销商用户id不能为0',2);
  128. }
  129. if($shareuid == $loginUserInfo['id']){
  130. return $this->error('不能邀请自己',2);
  131. }
  132. $sharecheck = \app\model\commission\User::where(['uid'=>$shareuid])->find();
  133. if(empty($sharecheck) && $sharecheck['status']!=1){
  134. return $this->error('分享者不是分销商',2);
  135. }
  136. $sharecheckUserInfo = \app\model\User::where(['id'=>$shareuid])->find();
  137. if($loginUserInfo['create_time_int'] < $sharecheckUserInfo['create_time_int']){
  138. return $this->error('被绑定用户注册时间大于分销商用户注册时间',2);
  139. }
  140. $check = $this->model->where(['uid'=>$loginUserInfo['id']])->find();
  141. if($check){
  142. return $this->error('已经绑定,无需重复绑定',2);
  143. }
  144. // 说明没被绑定过
  145. $gid = 0;
  146. $gfid = 0;
  147. // 查shareuid的信息
  148. $pinfo = $this->model->where(['uid'=>$shareuid])->find();
  149. if($pinfo){
  150. if($loginUserInfo['id'] == $pinfo['pid']){
  151. return $this->error('绑定关系错误,不支持逆向绑定',2);
  152. }
  153. $gid = $pinfo['pid'];
  154. if(!empty($pinfo['gid'])){
  155. if($loginUserInfo['id'] == $pinfo['gid']){
  156. return $this->error('绑定关系错误,不支持逆向绑定',2);
  157. }
  158. $gfid = $pinfo['gid'];
  159. }
  160. }
  161. $a = $this->model->save(['uid'=>$loginUserInfo['id'],'pid'=>$shareuid,'gid'=>$gid,'gfid'=>$gfid,'uniacid'=>$_GPC['uniacid'] ]);
  162. if(!$a){
  163. return $this->error('数据获取失败');
  164. }
  165. return $this->success('数据获取成功', $a);
  166. }
  167. // 申请提现
  168. public function extract()
  169. {
  170. global $_GPC;
  171. $loginUserInfo = UserServiceFacade::getUserInfo();
  172. $post = $this->request->post();
  173. $extractPrice = $this->request->post('extract_price',0);
  174. $modelUser = new \app\model\commission\User();
  175. $modelCashout = new \app\model\commission\Cashout();
  176. $commissionUser = $modelUser::where('uid','=',$loginUserInfo['id'])->find();
  177. if(!$commissionUser){
  178. return $this->error('未找到您的分销信息');
  179. }
  180. if($commissionUser['money'] < $extractPrice){
  181. return $this->error('金额不足');
  182. }
  183. if($extractPrice <= 0){
  184. return $this->error('提现金额不能小于或等于0元');
  185. }
  186. $mark = '';
  187. $platform = $this->request->post('platform','wxOfficialAccount');
  188. $post['uid'] = $loginUserInfo['id'];
  189. $post['uniacid'] = $_GPC['uniacid'];
  190. // if(!$post['real_name']) return $this->error('姓名输入有误');
  191. if (!preg_match('/^[0-9]+(.[0-9]{1,2})?$/', $post['extract_price'])) return $this->error('提现金额输入有误');
  192. $mark = '使用微信提现' . $post['extract_price'] . '元';
  193. if($platform =='wxOfficialAccount' ){
  194. $post['extract_type'] = 'wechat';
  195. }else{
  196. $post['extract_type'] = 'miniapp';
  197. }
  198. $balance = bcsub($commissionUser['money'],$extractPrice,2) ?? 0;
  199. $post['balance'] = $balance;//用户余额
  200. $post['mark'] = $mark;
  201. $saveRes = $modelCashout->save($post);
  202. if (!$saveRes) return $this->error('保存基础信息失败');
  203. $balanceRes = \app\model\commission\User::where(['uid'=>$loginUserInfo['id']])->update(['money' => $balance]);
  204. return $this->success('数据获取成功', $saveRes);
  205. }
  206. // 收入记录
  207. public function incomeLog()
  208. {
  209. global $_GPC;
  210. $order = ['id' => 'desc'];
  211. $modelIncome = new \app\model\commission\Income();
  212. $loginUserInfo = UserServiceFacade::getUserInfo();
  213. $where = ['uid'=>$loginUserInfo['id'],'uniacid'=>$_GPC['uniacid']];
  214. $post = $this->request->param();
  215. $limit = $this->request->param('limit', 10);
  216. $data = $modelIncome->order($order)->with(['userinfo','buy_userinfo'])->where($where)->paginate($limit)->toArray();
  217. if(!$data){
  218. return $this->error('数据获取失败');
  219. }
  220. return $this->success('数据获取成功', $data);
  221. }
  222. // 提现记录
  223. public function cashoutLog()
  224. {
  225. global $_GPC;
  226. $order = ['id' => 'desc'];
  227. $modelCashout = new \app\model\commission\Cashout();
  228. $loginUserInfo = UserServiceFacade::getUserInfo();
  229. $where = ['uid'=>$loginUserInfo['id'],'uniacid'=>$_GPC['uniacid']];
  230. $post = $this->request->param();
  231. $limit = $this->request->param('limit', 10);
  232. $data = $modelCashout->order($order)->where($where)->paginate($limit)->toArray();
  233. if(!$data){
  234. return $this->error('数据获取失败');
  235. }
  236. return $this->success('数据获取成功', $data);
  237. }
  238. // 排行榜
  239. public function ranking()
  240. {
  241. global $_GPC;
  242. $where = ['uniacid'=>$_GPC['uniacid']];
  243. $model = new \app\model\commission\User();
  244. $post = $this->request->param();
  245. // $where[] = ['pm' ,'=', 1];
  246. $order = ['income_sum' => 'desc'];
  247. $limit = $this->request->param('limit', 10);
  248. $data = $model->order($order)->where($where)->with('userinfo')->withSum('income','money')->paginate($limit)->toArray();
  249. if(!$data){
  250. return $this->error('数据获取失败');
  251. }
  252. return $this->success('数据获取成功', $data);
  253. }
  254. }