User.php 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921
  1. <?php
  2. /**
  3. * @package merchant
  4. *
  5. * @author xaboy
  6. * @day 2020/5/29
  7. *
  8. *
  9. */
  10. namespace app\controller\merchant\user;
  11. use app\common\model\user\UserCertification;
  12. use app\common\repositories\merchant\order\OrderGzcRepository;
  13. use app\common\repositories\store\order\StoreOrderRepository;
  14. use app\common\repositories\user\UserBillRepository;
  15. use app\common\repositories\user\UserGroupRepository;
  16. use app\common\repositories\user\UserLabelRepository;
  17. use app\controller\api\user\Im;
  18. use app\traits\HaikeApiRequest;
  19. use app\validate\admin\UserValidate;
  20. use crmeb\basic\BaseController;
  21. use app\common\repositories\user\UserRepository;
  22. use think\App;
  23. use think\db\exception\DataNotFoundException;
  24. use think\db\exception\DbException;
  25. use think\db\exception\ModelNotFoundException;
  26. use think\facade\Cache;
  27. use think\facade\Db;
  28. use crmeb\services\WechatTemplateService;
  29. use think\facade\Log;
  30. use function Complex\add;
  31. class User extends BaseController
  32. {
  33. protected $repository;
  34. public function __construct(App $app, UserRepository $repository)
  35. {
  36. parent::__construct($app);
  37. $this->repository = $repository;
  38. }
  39. public function detail($id)
  40. {
  41. if($id<1){
  42. return app('json')->fail('信息错误');
  43. }
  44. $data=$this->repository->userOrderDetail($id);
  45. $data['enterprise_user'] = null;
  46. $data['pay_count']=Db::name("store_order")->where('uid',$id)->where('paid',1)->count();
  47. $data['pay_price']=Db::name("store_order")->where('uid',$id)->where('paid',1)->where('pay_type!=5')->sum('pay_price');
  48. $data['total_pay_count']=Db::name("store_order")->where('create_time > "'.date('Y-m-01 00:00:00').'"')->where('uid',$id)->where('paid',1)->count();
  49. $data['total_pay_price']=Db::name("store_order")->where('create_time > "'.date('Y-m-01 00:00:00').'"')->where('uid',$id)->where('paid',1)->where('pay_type!=5')->sum('pay_price');
  50. $where=["uid"=>$id,"type"=>"commission","commission_type"=>5];
  51. $ylj=Db::name("user_bill")->where($where)->whereIn('status',[0,1])->sum('number');
  52. $data['ylj']=$ylj?$ylj:0;
  53. return app('json')->success($data);
  54. }
  55. public function enterpriseUserScoreApi(){
  56. $where = $this->request->params(['uid']);
  57. $list=Db::name('user_sign_score')->where($where)->order('id desc')->select();
  58. foreach ($list as $k=>$v){
  59. $v['pm_text']='收入';
  60. if($v['pm']==2 || $v['pm']==4){
  61. $v['pm_text']='支出';
  62. $v['reward_socre']='-'.$v['reward_socre'];
  63. }else{
  64. $v['pm_text']='收入';
  65. $v['reward_socre']='+'.$v['reward_socre'];
  66. }
  67. if($v['order_id'] && empty($v['order_sn'])){
  68. $v['order_sn']=Db::name('store_order')->where('order_id',$v['order_id'])->value('order_sn');
  69. }
  70. if(!$v['order_sn']){
  71. $v['order_sn']='--';
  72. }
  73. $v['create_time'] = $v['settlement_time'];
  74. $v['create_time'] = date("Y-m-d H:i:s", $v['addtime']);
  75. $list[$k]=$v;
  76. }
  77. $data['list']=$list;
  78. $data['count']=Db::name('user_sign_score')->where($where)->count();
  79. return app('json')->success($data);
  80. }
  81. public function order($id)
  82. {
  83. [$page, $limit] = $this->getPage();
  84. $merid=$this->request->merId();
  85. $query = Db::name('store_order')->where([
  86. 'uid' => $id,
  87. // 'mer_id' => $merid,
  88. 'paid' => 1,
  89. ]);
  90. $count = $query->count();
  91. $list = $query->page($page, $limit)->order('order_id desc')->select()->toArray();
  92. foreach ($list as $k=>$v){
  93. $v['youhui_price']+$v['total_price'];
  94. $list[$k]['total_price']+=$v['youhui_price'];
  95. if ($v['mer_id'] != $merid) {
  96. $list[$k]['order_sn'] = '--';
  97. }
  98. }
  99. $data= compact('count', 'list');
  100. return app('json')->success($data);
  101. }
  102. public function annuitylog($id, UserRepository $user_repository){
  103. [$page, $limit] = $this->getPage();
  104. $merid=$this->request->merId();
  105. // $where=["uid"=>$id,"type"=>"commission","commission_type"=>5,'mer_id'=>$merid];
  106. $where=["uid"=>$id,"type"=>"commission","commission_type"=>5];
  107. $res = $user_repository->yanglaolog($where,$page,$limit);
  108. // foreach ($res['list'] as $k=>$v){
  109. // if ($v['mer_id'] != $merid) {
  110. // $res['list'][$k]['order_sn'] = '--';
  111. // }
  112. // }
  113. return app('json')->success($res);
  114. }
  115. public function tuandui($id, UserRepository $user_repository){
  116. if($id<1){
  117. return app('json')->fail('信息错误');
  118. }
  119. $merId=$this->request->merId();
  120. $where['eu.uid']=$id;
  121. $where['eu.mer_id']=$merId;
  122. $data=Db::name('enterprise_user')
  123. ->alias('eu')
  124. ->join('user u','u.uid=eu.uid')
  125. ->field('u.nickname,u.sex,u.real_name,u.account,eu.avatar,eu.performance,eu.identity,eu.uid')
  126. ->where($where)
  127. ->find();
  128. $data['children']=$this->buildTree($id,$merId);
  129. $data['num']=$this->buildTree_num($id,$merId);
  130. // $data['num']++;
  131. if($data['identity']==0){
  132. $identity_name='普通用户';
  133. }else if ($data['identity']==100){
  134. $identity_name='合伙人';
  135. }else{
  136. $identity_name=Db::name('enterprise_performance_divvy')->where('state',1)->where('mer_id',$merId)->where('id',$data['identity'])->value('name');
  137. if(!$identity_name){
  138. $identity_name='合伙人';
  139. }
  140. }
  141. $data['identity']=$identity_name?$identity_name:'普通用户';
  142. return app('json')->success($data);
  143. }
  144. function buildTree($uid = 0,$merId=0) {
  145. $where['eu.puid']=$uid;
  146. $where['eu.mer_id']=$merId;
  147. $user=Db::name('enterprise_user')
  148. ->alias('eu')
  149. ->join('user u','u.uid=eu.uid')
  150. ->field('u.nickname,u.sex,u.real_name,u.account,eu.avatar,eu.performance,eu.identity,eu.uid')
  151. ->where($where)
  152. ->select()->toArray();
  153. if($user){
  154. foreach ($user as &$v){
  155. $v['children']=$this->buildTree($v['uid'],$merId);
  156. if($v['identity']==0){
  157. $identity_name='普通用户';
  158. }else if ($v['identity']==100){
  159. $identity_name='合伙人';
  160. }else{
  161. $identity_name=Db::name('enterprise_performance_divvy')->where('state',1)->where('mer_id',$merId)->where('id',$v['identity'])->value('name');
  162. if(!$identity_name){
  163. $identity_name='合伙人';
  164. }
  165. }
  166. $v['identity']=$identity_name?$identity_name:'普通用户';
  167. $v['num']=$this->buildTree_num($v['uid'],$merId);
  168. // $v['num']++;
  169. }
  170. }
  171. return $user;
  172. }
  173. function buildTree_num($uid = 0,$merId=0,$num=0) {
  174. $where['eu.puid']=$uid;
  175. $where['eu.mer_id']=$merId;
  176. $user=Db::name('enterprise_user')
  177. ->alias('eu')
  178. ->join('user u','u.uid=eu.uid')
  179. ->field('u.nickname,u.sex,u.real_name,u.account,eu.avatar,eu.performance,eu.identity,eu.uid')
  180. ->where($where)
  181. ->select()->toArray();
  182. if($user){
  183. foreach ($user as &$v){
  184. $num++;
  185. $num=$this->buildTree_num($v['uid'],$merId,$num);
  186. }
  187. }
  188. return $num;
  189. }
  190. public function lst()
  191. {
  192. $result = Db::name('user')->alias('u')
  193. ->leftJoin('user_rich ur', 'u.uid = ur.uid')
  194. ->field('u.uid')
  195. ->where('ur.uid', null)
  196. ->select();
  197. foreach ($result as $v){
  198. $count=Db::name('user_rich')->where('uid',$v['uid'])->count();
  199. if($count<1){
  200. Db::name('user_rich')->insert(['uid'=>$v['uid']]);
  201. }
  202. }
  203. $where = $this->request->params([
  204. 'user_time_type',
  205. 'user_time',
  206. ]);
  207. $identity=$this->request->param('identity',-1);
  208. $nickname=$this->request->param('nickname','');
  209. $account=$this->request->param('account','');
  210. $user_rich=$this->request->param('user_rich','');
  211. $level=$this->request->param('level','');
  212. $stockholder=$this->request->param('stockholder','');
  213. $exchange=$this->request->param('exchange','');
  214. $yy=$this->request->param('yy','');
  215. $ling=$this->request->param('ling','');
  216. $status=$this->request->param('status','');
  217. $withdraw=$this->request->param('withdraw','');
  218. if($withdraw==='0' || $withdraw==='1'){
  219. $where2['eu.withdraw']=$withdraw;
  220. }
  221. if($status==='0' || $status==='1'){
  222. $where2['eu.status']=$status;
  223. }
  224. if($yy){
  225. $where2['eu.operate']=$yy;
  226. }
  227. if($ling=='1'){
  228. $where2['eu.node_uid']=11714;
  229. }
  230. if($stockholder){
  231. $where2['eu.partnership']=101;
  232. }
  233. if($level){
  234. $where2['eu.level']=$level;
  235. }
  236. if($user_rich){
  237. $where2['ur.star_level']=$user_rich;
  238. }
  239. if($identity!='' && $identity>-1){
  240. $where2['eu.identity']=$identity;
  241. }
  242. $uids='';
  243. if($exchange){
  244. $where2['eu.exchange']=100;
  245. // $uids='11682,11684,11694,11698,11648,11696,11163,11697,11701,11695,9606,11700,11687,11690,11691,11692,11679,11681,11693,9605,11638,11699,10980,11702,11644';
  246. }
  247. $p_phone=$this->request->param('p_phone','');
  248. if($p_phone){
  249. $p_uid=Db::name('user')->where('account',$p_phone)->value('uid');
  250. if($p_uid){
  251. $where2['eu.puid']=$p_uid;
  252. }else{
  253. $where2['eu.puid']=-1;
  254. }
  255. }
  256. $node_phone=$this->request->param('node_phone','');
  257. if($node_phone){
  258. $node_uid=Db::name('user')->where('account',$node_phone)->value('uid');
  259. if($node_uid){
  260. $where2['eu.node_uid']=$node_uid;
  261. }else{
  262. $where2['eu.node_uid']=-1;
  263. }
  264. }
  265. [$page, $limit] = $this->getPage();
  266. $where2['eu.mer_id']=$this->request->merId();
  267. $query_sql = Db::name('enterprise_user')
  268. ->alias('eu')
  269. ->join('user u','u.uid=eu.uid')
  270. ->join('user_rich ur','ur.uid=eu.uid')
  271. ->field('u.nickname,u.avatar,u.phone,u.sex,u.real_name,u.account,eu.*')
  272. ->where($where2)
  273. ->when($uids,function ($query) use ($uids){
  274. $query->whereIn('u.uid',$uids);
  275. })
  276. ->when($nickname,function ($query) use ($nickname){
  277. $query->whereLike('u.nickname',"%".$nickname."%");
  278. })->when($account,function ($query) use ($account){
  279. $query->whereLike('u.account',"%".$account."%");
  280. })->when(isset($where['user_time_type']) && $where['user_time_type'] !== '' && $where['user_time'] != '', function ($query) use ($where) {
  281. list($startTime, $endTime) = explode('-', $where['user_time']);
  282. if ($where['user_time_type'] == 'visitno') {
  283. $query->whereTime("u.last_time", 'between', [$startTime, $endTime]);
  284. }
  285. if ($where['user_time_type'] == 'visit') {
  286. $query->whereTime('u.last_time', '>=', $startTime);
  287. $query->whereTime('u.last_time', '<', $endTime);
  288. }
  289. if ($where['user_time_type'] == 'add_time') {
  290. $query->whereTime('u.create_time', '>=', $startTime);
  291. $query->whereTime('u.create_time', '<', $endTime);
  292. }
  293. });
  294. $merId=$this->request->merId();
  295. $date['list'] = $query_sql
  296. ->page($page, $limit)
  297. ->order("eu.enterprise_user_id desc")
  298. ->select()
  299. ->each(function ($item) use ($merId) {
  300. if($item['puid']){
  301. $item['p_phone']=Db::name('user')->where('uid',$item['puid'])->value('phone');
  302. }else{
  303. $item['p_phone']='';
  304. }
  305. if($item['node_uid']){
  306. $item['node_phone']=Db::name('user')->where('uid',$item['node_uid'])->value('phone');
  307. }else{
  308. $item['node_phone']='';
  309. }
  310. $user_rich=Db::name('user_rich')->where('uid', $item['uid'])->find();
  311. $item['user_rich']=$user_rich;
  312. $item['certification'] = Db::name('user_certification')->where('uid', $item['uid'])->find();;
  313. $identity_name=Db::name('enterprise_performance_divvy')->where('state',1)->where('mer_id',$merId)->where('id',$item['identity'])->value('name');
  314. if(!$identity_name && $item['identity']>0){
  315. $item['identity'] =100;
  316. }
  317. $identity_name=Db::name('enterprise_agent_divvy')->where('state',1)->where('mer_id',$merId)->where('id',$item['level'])->value('name');
  318. if(!$identity_name){
  319. $item['level'] =0;
  320. }
  321. $item['exchange_ues_red'] = 0;
  322. if($item['exchange']==100){
  323. $exchange_red_order_id = Db::name('store_order')->where('exchange_phone', $item['phone'])->value('order_id');
  324. if ($exchange_red_order_id) {
  325. $item['exchange_ues_red'] = (float)Db::name('enterprise_user_score')->where('order_id', $exchange_red_order_id)->value('reward_socre');
  326. }
  327. if($item['exchange_ues_red']<=0){
  328. $item['exchange_ues_red'] = (float)Db::name('enterprise_user_score')->where('use_uid', $item['uid'])->value('reward_socre');
  329. }
  330. }
  331. return $item;
  332. });
  333. $date['count']= $query_sql->count();
  334. $query_sql_0 = clone $query_sql;
  335. $user_count=$query_sql_0->where('eu.identity',0)->count();
  336. $countmoyer[]=['className'=> 'el-icon-s-goods', 'count'=>$user_count, 'field'=>'', 'name'=> '普通用户总数' ];
  337. $query_sql_1 = clone $query_sql;
  338. $count=$query_sql_1->where('eu.identity',100)->count();
  339. $countmoyer[]=['className'=> 'el-icon-s-goods', 'count'=>$count, 'field'=>'元', 'name'=> '合伙人总数' ];
  340. $mer_id=$this->request->merId();
  341. $enterprise_performance_divvy=Db::name('enterprise_performance_divvy')->where('mer_id',$mer_id)->where('state',1)->order('id asc')->select();
  342. foreach ($enterprise_performance_divvy as $v){
  343. $query_sql_2[$v['id']] = clone $query_sql;
  344. $count2[$v['id']]= $query_sql_2[$v['id']]->where('eu.identity',$v['id'])->count();
  345. $countmoyer[]= ['className'=> 'el-icon-s-goods', 'count'=>$count2[$v['id']], 'field'=>'', 'name'=> $v['name'].'总数' ];
  346. }
  347. $query_sql_6 = clone $query_sql;
  348. $query_sql_8 = clone $query_sql;
  349. $query_sql_9 = clone $query_sql;
  350. $count6=$query_sql_6->where('eu.partnership',101)->count();
  351. $count8=$query_sql_8->where('eu.operate',101)->count();
  352. $count9=$query_sql_9->where('eu.operate',102)->count();
  353. $countmoyer[]= ['className'=> 'el-icon-s-goods', 'count'=>$count6, 'field'=>'元', 'name'=> '董事股东总数' ];
  354. $countmoyer[]= ['className'=> 'el-icon-s-goods', 'count'=>$count8, 'field'=>'', 'name'=> '一级运营中心' ];
  355. $countmoyer[]= ['className'=> 'el-icon-s-goods', 'count'=>$count9, 'field'=>'', 'name'=> '二级运营中心' ];
  356. $date['countmoyer']=$countmoyer;
  357. return app('json')->success($date);
  358. }
  359. public function update($id, UserValidate $validate, UserLabelRepository $labelRepository, UserGroupRepository $groupRepository)
  360. {
  361. $data = $this->request->params(['real_name','phone', 'birthday', 'card_id', 'addres', 'mark','nickname','is_shop_partner']);
  362. $data['nickname']=$substring = mb_substr($data['nickname'], 0, 7, 'UTF-8');
  363. $validate->check($data);
  364. if (!$this->repository->exists($id))
  365. return app('json')->fail('数据不存在');
  366. if(!$data['birthday']) unset($data['birthday']);
  367. $user=Db::name('user')->where('uid',$id)->find();
  368. if($user['account']!=$data['phone']){
  369. $user_count=Db::name('user')->where('account',$data['phone'])->where('uid != '.$id)->count();
  370. if($user_count>0){
  371. return app('json')->fail('该手机号已存在~');
  372. }
  373. $data['account']=$data['phone'];
  374. }
  375. //todo 数据库字段未定义
  376. // //是否可以提现 0-可以 1-禁止
  377. // $data['withdraw'] = 0;
  378. // //用户状态 0为正常,1为禁止
  379. // $data['status'] = 0;
  380. $this->repository->update($id, $data);
  381. //
  382. // $enterprise_user_data = $this->request->param('enterprise_user');
  383. //// var_dump($enterprise_user_data);die;
  384. // $data2['level'] = $enterprise_user_data['level'];
  385. // $data2['partnership'] = $enterprise_user_data['partnership'];
  386. // $data2['identity'] = $enterprise_user_data['identity'];
  387. // $data2['stock_num'] = $enterprise_user_data['stock_num'] ?? '';
  388. // $data2['stock_right'] = $enterprise_user_data['stock_right'] ?? '';
  389. // $where['mer_id']= $this->request->merId();
  390. // $where['uid']= $id;
  391. // if($enterprise_user_data['identity']==0 && $enterprise_user_data['level']!=0){
  392. // return app('json')->fail('请先升级成合伙人~');
  393. // }
  394. // $enterprise_user=Db::name('enterprise_user')->where($where)->find();
  395. // if($enterprise_user['level']!= $data2['level']){
  396. // $data2['tad'] = 0;
  397. // }
  398. //
  399. // $data2['withdraw'] = 0;
  400. // $data2['status'] = 0;
  401. // if(isset($enterprise_user_data['status']) && $enterprise_user_data['status']==1){//是否可以提现 0-可以 1-禁止
  402. // $data2['status'] = 1;
  403. // }
  404. // if(isset($enterprise_user_data['withdraw']) && $enterprise_user_data['withdraw']==1){//用户状态0为正常,1为禁止
  405. // $data2['withdraw'] = 1;
  406. // }
  407. //
  408. // if($enterprise_user_data['yy']=='0'){
  409. // $data2['operate'] = 0;
  410. // }
  411. // if($enterprise_user_data['yy']=='1' && $enterprise_user['operate']==0){
  412. // $puser=Db::name('enterprise_user')->where('uid', $enterprise_user['puid'])->where('mer_id', $enterprise_user['mer_id'])->find();
  413. //
  414. // if($puser){
  415. // if($puser['operate']==0){
  416. // $data2['operate'] = 101;
  417. // }else if($puser['operate']==101){
  418. // $data2['operate'] = 102;
  419. // }else if($puser['operate']==102){
  420. // return app('json')->fail('该用户上级为二级运营中心,不可再设置运营中心~');
  421. // }
  422. // }else{
  423. // $data2['operate'] = 101;
  424. // }
  425. //
  426. // }
  427. //
  428. //
  429. //// $merchant=Db::name('merchant')->where('mer_id',$this->request->merId())->find();
  430. //
  431. // $uid_0=11714;
  432. // //11714 他下面的就是是0号节点
  433. //
  434. // if($enterprise_user_data['zero_node']==1){
  435. // if($enterprise_user['node_uid']!=$uid_0){
  436. // $data2['node_uid']=$uid_0;
  437. // $data2['old_node_uid']=$enterprise_user['node_uid'];
  438. // }
  439. // }else{
  440. // if($enterprise_user['old_node_uid']==0 && $enterprise_user['node_uid']==$uid_0){
  441. // return app('json')->fail('零号节点不支持修改业绩归属人~');
  442. // }
  443. // if($enterprise_user['old_node_uid']> 0 && $enterprise_user['node_uid']==$uid_0){
  444. // $data2['node_uid']=$enterprise_user['old_node_uid'];
  445. // $data2['old_node_uid']=0;
  446. // }
  447. //
  448. // }
  449. // Db::name('enterprise_user')->where($where)->update($data2);
  450. //更新身份证信息
  451. $cardData = [];
  452. if ($data['card_id']) {
  453. $cardData['user_card'] = $data['card_id'];
  454. }
  455. if ($data['real_name']) {
  456. $cardData['user_name'] = $data['real_name'];
  457. }
  458. if (!empty($cardData)) {
  459. //查询是否存在
  460. $user_certification = Db::name('user_certification')->where("uid", $id)->find();
  461. if ($user_certification) {
  462. Db::name('user_certification')->where("uid", $id)->update($cardData);
  463. } else {
  464. $cardData['uid'] = $id;
  465. $cardData['status'] = 1;
  466. $userCertification = app()->make(UserCertification::class);
  467. $userCertification->create($cardData);
  468. }
  469. }
  470. // $admin_start_level=input('post.admin_start_level',0);
  471. // if (!empty($admin_start_level)) {
  472. // }
  473. // $pics=input('post.area_manage_pics',[]);
  474. // $user_rich_ypdate['type']=input('post.user_rich_type',0);
  475. // $user_rich_ypdate['obtain']=input('post.area_manage_obtain',0);
  476. // $user_rich_ypdate['admin_start_level']=input('post.admin_start_level',0);
  477. // if($pics){
  478. // $user_rich_ypdate['pics']=implode(',',$pics);
  479. // }
  480. // $rich=Db::name('user_rich')->where('uid',$id)->count();
  481. // if($rich){
  482. // Db::name('user_rich')->where('uid',$id)->update($user_rich_ypdate);
  483. // }else{
  484. // $user_rich_ypdate['uid']=$id;
  485. // Db::name('user_rich')->insert($user_rich_ypdate);
  486. // }
  487. return app('json')->success('编辑成功');
  488. }
  489. public function partnership(){
  490. $where2['mer_id']=$this->request->merId();
  491. $where2['partnership']=101;
  492. $date['count']= Db::name('enterprise_user')->where($where2)->count();
  493. return app('json')->success($date);
  494. }
  495. public function changeProForm($id)
  496. {
  497. if (!$this->repository->exists($id))
  498. return app('json')->fail('数据不存在');
  499. $type = $this->request->param('type',0);
  500. $mer_id=$this->request->merId();
  501. $enterprise_user=Db::name('enterprise_user')->where('uid',$id)->where('mer_id',$mer_id)->find();
  502. $merchant=Db::name('merchant')->where('mer_id',$this->request->merId())->find();
  503. if($enterprise_user && $merchant && $merchant['uid']==$enterprise_user['node_uid']){
  504. return app('json')->fail('零号节点不支持修改业绩归属人~');
  505. }
  506. return app('json')->success(formToData($this->repository->changeProForm_yhc($id,(int)$type)));
  507. }
  508. public function changePro($id)
  509. {
  510. $spread_account = $this->request->param('spread_account');
  511. $type = $this->request->param('type',0);
  512. if (!$spread_account || !$id){
  513. return app('json')->fail('参数丢失');
  514. }
  515. $mer_id=$this->request->merId();
  516. //推荐人信息
  517. $spread_uid = Db::name("user")->where('account',$spread_account)->value("uid");
  518. if($spread_uid){
  519. $enterprise_user=Db::name("enterprise_user")->where('uid',$spread_uid)->where('mer_id',$mer_id)->count();
  520. if(!$enterprise_user){
  521. return app('json')->fail("号码不存在~ ");
  522. }
  523. $enterprise_user2=Db::name("enterprise_user")->where('uid',$id)->where('mer_id',$mer_id)->find();
  524. if($type==1){
  525. $update=['node_uid'=>$spread_uid];
  526. if($enterprise_user2['node_uid']==$spread_uid){
  527. return app('json')->success("修改成功");
  528. }
  529. }else{
  530. $update=['puid'=>$spread_uid];
  531. if($enterprise_user2['puid']==$spread_uid){
  532. return app('json')->success("修改成功");
  533. }
  534. }
  535. $re=Db::name("enterprise_user")->where('uid',$id)->where('mer_id',$mer_id)->update($update);
  536. }else{
  537. return app('json')->fail("号码不存在~ ");
  538. }
  539. if(isset($re) && $re){
  540. return app('json')->success("修改成功");
  541. }else{
  542. return app('json')->fail("失败");
  543. }
  544. }
  545. public function enterprise_update(){
  546. $we_com['we_com'] = $this->request->param('we_com', '');
  547. $we_com['we_com_url'] = $this->request->param('we_com_url', '');
  548. $where2['mer_id']=$this->request->merId();
  549. $user= Db::name('enterprise')->where($where2)->update($we_com);
  550. return app('json')->success("修改成功");
  551. }
  552. public function enterprise(){
  553. $where2['mer_id']=$this->request->merId();
  554. $user= Db::name('enterprise')->field('we_com,we_com_url')->where($where2)->find();
  555. return app('json')->success($user);
  556. }
  557. public function get_info($id)
  558. {
  559. if (!$this->repository->exists($id))
  560. return app('json')->fail('数据不存在');
  561. $user=Db::name('user')->find($id);
  562. $certification = Db::name('user_certification')->where("uid", $id)->find();
  563. $user['real_name'] = $certification['user_name'] ?? '';
  564. $user['card_id'] = $certification['user_card'] ?? '';
  565. $user_rich=Db::name('user_rich')->where('uid',$id)->find();
  566. $user['admin_start_level'] =$user_rich?$user_rich['admin_start_level']:'0';
  567. $user['user_rich_type'] =$user_rich?$user_rich['type']:'0';
  568. $user['area_manage_pics'] =[];
  569. $user['area_manage_obtain'] ='0';
  570. //身份
  571. $user['user_group_name'] = $this->repository->getUserGroupMap()[$user['user_group'] ?? ''] ?? '';
  572. //代理区域
  573. $user['manage_address_string'] = '';
  574. if (!empty($user['manage_address'])) {
  575. $manage_address_list = explode(",", $user['manage_address']);
  576. $address_list = Db::name('regions')->whereIn('id', $manage_address_list)->field('id,name,level')->select()->toArray();
  577. array_multisort(array_column($address_list, 'level'), SORT_ASC, $address_list);
  578. foreach ($address_list as $index => $item) {
  579. if ($index == count($address_list) - 1) {
  580. $user['manage_address_string'] .= $item['name'];
  581. break;
  582. }
  583. $user['manage_address_string'] .= $item['name'] . "/";
  584. }
  585. }
  586. //是否创客合伙人 is_shop_partner
  587. //是否直推用户 当前查询用户的spread_uid=商户uid为直推用户
  588. $uid = Db::name('merchant')->where('mer_id', $this->request->merId())->value('uid');
  589. $user['direct_push'] = 0;
  590. if ($user['spread_uid'] == $uid) {
  591. $user['direct_push'] = 1;
  592. }
  593. return app('json')->success($user);
  594. }
  595. public function getUserList()
  596. {
  597. $keyword = $this->request->param('keyword', '');
  598. if (!$keyword)
  599. return app('json')->fail('请输入关键字');
  600. [$page, $limit] = $this->getPage();
  601. return app('json')->success($this->repository->merList($keyword, $page, $limit));
  602. }
  603. //配置微信公众号
  604. public function haike_wx(){
  605. $where['mer_id'] = $this->request->merId();
  606. $merch_no = Db::name("Merchant") -> where($where) -> value("merch_no");
  607. $url = env('HAIKE.HOSTNAME')."/api/v1/wx-appid-conf/add";
  608. $data = [
  609. "agent_no"=> env('HAIKE.AGENT_NO'),
  610. "merch_no"=> $merch_no,
  611. "conf_key"=> "pay_appId",
  612. "conf_value"=> 'wx10669a2eca032216',
  613. ];
  614. $res = HaikeApiRequest::request($data,$url);
  615. if($res['result'] == 0){
  616. Db::name("Merchant") -> where($where) -> update(array("haike_mp"=>1));
  617. return app('json')->status('success', $res);
  618. }
  619. return app('json')->fail($res);
  620. }
  621. //海科小程序收款配置状态
  622. public function haike_wx_status(){
  623. $where['mer_id'] = $this->request->merId();
  624. $status = Db::name("Merchant") -> where($where) -> value("haike_mp");
  625. return app('json')->success(['status'=>$status]);
  626. }
  627. //小程序点餐二维码列表
  628. public function get_wx_code(){
  629. $where['mer_id'] = $this->request->merId();
  630. $list = Db::name('mp_qrcode') -> where($where) -> select();
  631. return app('json')->success($list);
  632. }
  633. //生成小程序点餐二维码
  634. public function create_wx_code(){
  635. $mer_id = $this->request->merId();
  636. $table_id = $this -> request->param('table_id', '');
  637. if($table_id == '')
  638. return app('json')->fail('请输入桌子编号');
  639. $access_token = $this -> get_mp_access_token();
  640. $url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=".$access_token;
  641. $data['scene'] = 'mer_id='.$mer_id.'&table_id='.$table_id;
  642. $res = $this -> posturl($url,$data);
  643. //判断是否是 json格式
  644. if(is_null(json_decode($res))){
  645. $new_file = (int)(microtime(true) * 1000);
  646. $dir = iconv("UTF-8", "GBK", "./public/mpqrcode");
  647. if (!file_exists($dir)){
  648. mkdir ($dir,0777,true);
  649. }
  650. $path = $dir.'/'.$new_file.".jpg";
  651. file_put_contents($path, $res);
  652. $imgurl = env('APP_URL')."/mpqrcode/".$new_file.".jpg";
  653. $db = Db::name('mp_qrcode');
  654. $db -> insert(['table_id'=>$table_id,'mer_id'=>$mer_id,'qrcode'=>"/mpqrcode/".$new_file.".jpg"]);
  655. return app('json')->success(['qrcode'=>$imgurl]);
  656. }else{
  657. $res=json_decode($res,true);
  658. //没有接收到数据流
  659. return false;
  660. }
  661. }
  662. public function get_mp_access_token(){
  663. $access_token = Cache::get('mp_access_token');
  664. if($access_token)
  665. return $access_token;
  666. $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx10669a2eca032216&secret=0e71d5c636fdb9bf1c79c403db70f739";
  667. $res = curlGet($url);
  668. Cache::set('mp_access_token', $res['access_token'], $res['expires_in']);
  669. return $res['access_token'];
  670. }
  671. public function posturl($url,$data){
  672. $json = json_encode($data, JSON_UNESCAPED_UNICODE);
  673. $curl = curl_init();
  674. curl_setopt($curl, CURLOPT_URL, $url);
  675. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
  676. curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
  677. curl_setopt($curl, CURLOPT_POST, 1);
  678. curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
  679. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  680. curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
  681. curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
  682. $output = curl_exec($curl);
  683. curl_close($curl);
  684. return $output;
  685. }
  686. public function getImUser(){
  687. $mer_id = $this->request->merId();
  688. $merchant = Db::name('merchant')->where('mer_id',$mer_id)->find();
  689. if(empty($merchant))
  690. return app('json')->fail('查找不到该用户');
  691. $uid=$merchant['uid'];
  692. $im = new Im();
  693. $user = Db::name('merchant_admin')->field('im_user_id,im_pass,im_uuid,uid')->where('mer_id', $mer_id)->find();
  694. if(isset($user['im_user_id']) && $user['im_user_id']!=''){
  695. return app('json')->success($user);
  696. }
  697. $update['im_user_id'] = 'mer_' . $mer_id;
  698. $update['im_pass'] = mt_rand(100000,999999);
  699. // 获取用户是否存在
  700. $imUser = $im->getImUser($update['im_user_id']);
  701. if (isset($imUser['activated']) && $imUser['activated'] == true) {
  702. $uuid = $imUser['uuid'];
  703. } else {
  704. // $getImUserResult = $im->getImUser($user_id);
  705. // Log::info('getImUser'.json_encode($getImUserResult));
  706. $uuid = $im->MerCreateImUser($update['im_user_id'], $update['im_pass'], $merchant['mer_name']);
  707. Log::info('createImUserResult' . json_encode($uuid));
  708. }
  709. $update['im_uuid']=$uuid;
  710. if($uuid){
  711. Db::name('merchant_admin')->where('mer_id', $mer_id)->where('uid', $uid)->update($update);
  712. return app('json')->success($update);
  713. }else{
  714. return app('json')->fail('创建失败');
  715. }
  716. }
  717. public function new_user_list(){
  718. $nickname=$this->request->param('nickname','');
  719. $account=$this->request->param('account','');
  720. $user_group=$this->request->param('user_group','');
  721. $is_shop_partner=$this->request->param('is_shop_partner','');
  722. $status=$this->request->param('status','');
  723. $p_phone=$this->request->param('p_phone','');
  724. $spread_uid = '';
  725. if($p_phone){
  726. $p_uid=Db::name('user')->where('account',$p_phone)->value('uid');
  727. if($p_uid){
  728. $spread_uid=$p_uid;
  729. }else{
  730. $spread_uid=-1;
  731. }
  732. }
  733. $mer_id = $this->request->merId();
  734. $mer_uid = Db::name('merchant')->where('mer_id', $mer_id)->value('uid');
  735. $userRepository = app()->make(UserRepository::class);
  736. $chilid_userids = $userRepository->getSpreadUidBreak($mer_uid);
  737. $chilid_userids_string = "1";
  738. if (!empty($chilid_userids)) {
  739. $chilid_userids_string = implode(',',$chilid_userids);
  740. }
  741. [$page, $limit] = $this->getPage();
  742. $dataQuery = Db::query("SELECT user_group,count(uid) count FROM `rrx_user` where uid in ($chilid_userids_string) group by user_group");
  743. $dataQuery = array_column($dataQuery, 'count', 'user_group');
  744. $shopPartnerCount = Db::query("SELECT user_group,count(uid) count FROM `rrx_user` where uid in ($chilid_userids_string) and is_shop_partner=1 group by user_group");
  745. $countmoyer[] = ['className' => 'el-icon-s-goods', 'user_group' => 1, 'count' => (int)($dataQuery[1] ?? 0), 'name' => '消费者'];
  746. $countmoyer[] = ['className' => 'el-icon-s-goods', 'user_group' => 2, 'count' => (int)($dataQuery[2] ?? 0), 'name' => 'V客'];
  747. $countmoyer[] = ['className' => 'el-icon-s-goods', 'user_group' => 3, 'count' => (int)($dataQuery[3] ?? 0), 'name' => '大V经理'];
  748. $countmoyer[] = ['className' => 'el-icon-s-goods', 'user_group' => 4, 'count' => (int)($dataQuery[4] ?? 0), 'name' => '创客'];
  749. $countmoyer[] = ['className' => 'el-icon-s-goods', 'user_group' => 5, 'count' => (int)($dataQuery[5] ?? 0), 'name' => '区县代理'];
  750. $countmoyer[] = ['className' => 'el-icon-s-goods', 'user_group' => 6, 'count' => (int)($dataQuery[6] ?? 0), 'name' => '省级代理'];
  751. // $countmoyer[] = ['className' => 'el-icon-s-goods', 'count' => (int)($shopPartnerCount), 'name' => '创客合伙人'];
  752. $whereTime = $this->request->params([
  753. 'user_time_type',
  754. 'user_time',
  755. ]);
  756. $query =Db::name('user')
  757. ->field('uid,nickname,phone,spread_uid,user_group,create_time,is_shop_partner')
  758. ->whereIn('uid', $chilid_userids)
  759. ->when($nickname != '',function ($query) use ($nickname){
  760. $query->whereLike('nickname',"%".$nickname."%");
  761. })->when($account != '',function ($query) use ($account){
  762. $query->whereLike('account',"%".$account."%");
  763. })->when($user_group != '',function ($query) use ($user_group){
  764. $query->where('user_group',$user_group);
  765. })->when($is_shop_partner != '',function ($query) use ($is_shop_partner){
  766. $query->where('is_shop_partner',$is_shop_partner);
  767. })->when($status != '',function ($query) use ($status){
  768. $query->where('status',$status);
  769. })->when($p_phone != '',function ($query) use ($spread_uid){
  770. $query->where('spread_uid',$spread_uid);
  771. })->when(isset($whereTime['user_time_type']) && $whereTime['user_time_type'] !== '' && $whereTime['user_time'] != '', function ($query) use ($whereTime) {
  772. list($startTime, $endTime) = explode('-', $whereTime['user_time']);
  773. if ($whereTime['user_time_type'] == 'visitno') {
  774. $query->whereTime("last_time", 'between', [$startTime, $endTime]);
  775. }
  776. if ($whereTime['user_time_type'] == 'visit') {
  777. $query->whereTime('u.last_time', '>=', $startTime);
  778. $query->whereTime('u.last_time', '<', $endTime);
  779. }
  780. if ($whereTime['user_time_type'] == 'add_time') {
  781. $query->whereTime('create_time', '>=', $startTime);
  782. $query->whereTime('create_time', '<', $endTime);
  783. }
  784. })->order('create_time desc');
  785. $date['list'] = $query->page($page, $limit)->select()
  786. ->each(function ($item) {
  787. if($item['spread_uid']){
  788. $item['p_phone']=Db::name('user')->where('uid',$item['spread_uid'])->value('phone');
  789. }else{
  790. $item['p_phone']='';
  791. }
  792. $item['user_card'] = Db::name("user_certification")->where(["uid" => $item['uid'], 'status' => 1])->value('user_card');
  793. $item['is_certification'] = (boolean)$item['user_card'];
  794. unset($item['spread_uid']);
  795. return $item;
  796. });;
  797. $date['count'] = $query->count();
  798. $date['shouyi'] = 0;
  799. $date['stride_shop_money'] = 0;
  800. $date['real_subsidy_money'] = 0;
  801. $date['countmoyer']=$countmoyer;
  802. return app('json')->success($date);
  803. }
  804. /**
  805. * @return mixed
  806. * @author xaboy
  807. * @day 2020/6/22
  808. */
  809. public function bill($id, UserBillRepository $billRepository)
  810. {
  811. [$page, $limit] = $this->getPage();
  812. $where = [
  813. // 'now_money' => $this->request->param('type', 0),
  814. 'status' => $this->request->param('status'),
  815. // 'mer_id' => $this->request->merId()
  816. ];
  817. if ($this->request->param('is_red') == true) {
  818. $where['is_red_brokerage'] = 1;
  819. }
  820. $where['commission_type'][] = 3;
  821. $bill_list = $billRepository->userList($where, $id, $page, $limit);
  822. foreach ($bill_list['list'] as $key => $item) {
  823. if ($item['mer_id'] != $this->request->merId()) {
  824. $bill_list['list'][$key]['order_sn'] = "--";
  825. }
  826. if (in_array($item['commission_type'], [3, 16, 7])) {
  827. $md = date('m.d', strtotime($item['create_time']));
  828. $m = date('m', strtotime($item['create_time']));
  829. if ($item['commission_type'] == 3) $bill_list['list'][$key]['title'] = "直推奖({$md})";
  830. if ($item['commission_type'] == 16) $bill_list['list'][$key]['title'] = "大V经理分享奖($m)";
  831. if ($item['commission_type'] == 7) $bill_list['list'][$key]['title'] = "跨店奖励($m)";
  832. }
  833. if ($item['status'] == 1) $bill_list['list'][$key]['jiesuan_string'] = "已结算";
  834. if ($item['status'] == 0) $bill_list['list'][$key]['jiesuan_string'] = "未结算";
  835. if ($item['status'] == -1) $bill_list['list'][$key]['jiesuan_string'] = "已失效";
  836. }
  837. return app('json')->success($bill_list);
  838. }
  839. }