Index.php 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596
  1. <?php
  2. namespace app\api\controller;
  3. use app\common\controller\Api;
  4. use app\common\library\CoinRate;
  5. use app\common\model\ReleaseLog;
  6. use app\common\model\Trade;
  7. use think\db;
  8. use think\Session;
  9. use Think\Config;
  10. /**
  11. * 首页接口
  12. */
  13. class Index extends Api
  14. {
  15. protected $noNeedLogin = ['*'];
  16. protected $noNeedRight = ['*'];
  17. /**
  18. * 首页
  19. *
  20. */
  21. public function index()
  22. {
  23. $yestday=strtotime('today')-60*60*24;
  24. $list=db('trade')->where(['status'=>3,'issell'=>2,'create_time'=>$yestday])->select();
  25. foreach ($list as $v)
  26. {
  27. $appointcnt=db('trade')->where(['goodsid'=>$v['goodsid'],'isout'=>0,'status'=>0])->count();
  28. $goods=db('goods')->where(['id'=>$v['goodsid']])->find();
  29. if($goods['on_sale'] == 1 && $appointcnt == 0)
  30. {
  31. db('goods')->where(['id'=>$v['goodsid']])->update(['istrade'=>0]);
  32. db('trade')->where(['id'=>$v['id']])->update(['status'=>4]);
  33. }elseif($goods['on_sale'] == 1 && $appointcnt >0){
  34. db('trade')->where(['id'=>$v['id']])->update(['status'=>4]);
  35. }elseif($goods['on_sale'] != 1){
  36. db('trade')->where(['id'=>$v['id']])->update(['status'=>4]);
  37. }else{
  38. continue;
  39. }
  40. }
  41. $list1=db('goods')->where(['isnew'=>1,'on_sale'=>0,'create_user'=>1,'utime'=>[['gt',$yestday],['lt',strtotime('today')]]])->select();
  42. foreach ($list1 as $v)
  43. {
  44. db('goods')->where(['id'=>$v['id']])->update(['create_user'=>0,'on_sale'=>1,'istrade'=>0]);
  45. }
  46. $this->success('请求成功');
  47. }
  48. /**
  49. * 转售产品每日释放
  50. * @throws \think\exception\DbException
  51. * @throws db\exception\DataNotFoundException
  52. * @throws db\exception\ModelNotFoundException
  53. */
  54. public function release()
  55. {
  56. $key = input('key','');
  57. if($key != md5('hua')){
  58. $this->error('非法请求');
  59. }
  60. if(date('H:i') >= '23:50'){
  61. $this->error('不在释放处理时间段内');
  62. }
  63. // 计算获取奖池和已释放总额
  64. $awards = Trade::getAwardTotal();
  65. $releaseTotal = Trade::where(['status'=> 3,'on_resale'=>1])->sum('release_total');
  66. $awardTotal = isset($awards['total'])? $awards['total'] : 0;
  67. // 奖池是否还有钱,若已释放完
  68. if($awardTotal <= $releaseTotal){
  69. $this->error('抱歉,奖池金额已释放完');
  70. }
  71. // 处理转售释放
  72. $tradeConfig = \app\common\model\Config::getConfigByGroup('trade');
  73. $config['release_rate'] = isset($tradeConfig['release_rate'])? $tradeConfig['release_rate']['value'] : 0;
  74. if($config['release_rate'] <= 0){
  75. $this->error('释放参数错误,请先配置');
  76. }
  77. $coinRate = CoinRate::getRate('CNY','USD');
  78. if($coinRate<=0){
  79. $this->error('汇率参数错误,请稍后重试');
  80. }
  81. // 待释放产品
  82. $tradeList = \app\common\model\Trade::where(['on_resale'=>1])
  83. ->whereIn('status', [3,4])
  84. ->whereRaw('release_usdt < endnums')
  85. ->where('release_time','<', strtotime(date('Y-m-d')))
  86. ->field('id,orderNo,goodsid,userid,relevant_userid,status,endnums,release_total,release_usdt,release_total_usdt,release_time')
  87. ->order('ctime','asc')
  88. ->limit(1000)
  89. ->select();
  90. if(empty($tradeList)){
  91. $this->error('暂时没有可释放的转售产品');
  92. }
  93. $success = 0;
  94. $fail = 0;
  95. foreach ($tradeList as $k => $item){
  96. $tradeUserId = isset($item['relevant_userid'])? $item['relevant_userid'] : 0;
  97. $releaseTotalUsdt = isset($item['release_total_usdt'])? $item['release_total_usdt'] : 0;
  98. $speedData = Trade::getSpeedTotalByUser($tradeUserId); // 加速值
  99. $speedUsdt = isset($speedData['speed_usdt'])? $speedData['speed_usdt'] : 0;
  100. $speedTotal = isset($speedData['speed_total'])? $speedData['speed_total'] : 0;
  101. // 计算释放额度
  102. $amount = isset($item['endnums'])? $item['endnums'] : 0;
  103. $releaseUsdt = isset($item['release_usdt'])? $item['release_usdt'] : 0;
  104. $releaseAmount = $amount? round($amount * $config['release_rate']/100 + $speedTotal, 2) : 0;
  105. $releaseAmount = ($amount-$releaseAmount)<$releaseAmount? ($amount-$releaseAmount) : $releaseAmount;
  106. $totalUsdt = $releaseTotalUsdt? $releaseTotalUsdt : round(CoinRate::transfer($amount, 'CNY','USD'), 2);
  107. $usdt = $totalUsdt? round($totalUsdt * $config['release_rate']/100 + $speedUsdt, 2) : 0;
  108. $usdt = ($totalUsdt-$usdt)<$usdt? ($totalUsdt-$usdt) : $usdt;
  109. $releaseTotal = isset($item['release_total'])? $item['release_total'] : 0;
  110. if($tradeUserId<=0 || $amount<=0 || $usdt<=0 || $amount<=$releaseUsdt){
  111. $fail++;
  112. continue;
  113. }
  114. // 用户信息
  115. $user = \app\common\model\User::where(['id'=> $tradeUserId,'status'=>1])
  116. ->field('id,usdt,nickname,username')
  117. ->find();
  118. if(empty($user)){
  119. $fail++;
  120. continue;
  121. }
  122. // 释放到余额
  123. Db::startTrans();
  124. $balance = $user->usdt;
  125. $user->usdt = $user->usdt+$usdt;
  126. $user->updatetime = time();
  127. if(!$user->save()){
  128. $fail++;
  129. Db::rollback();
  130. continue;
  131. }
  132. // 流水明细
  133. $changedata=[
  134. 'userid'=>$tradeUserId,
  135. 'type'=> 17,
  136. 'money_type'=> 2,
  137. 'money'=> $usdt,
  138. 'balance'=>$balance,
  139. 'relevant_userid'=>$tradeUserId,
  140. 'status'=>1,
  141. 'create_time'=>time(),
  142. 'remark'=>'转售产品给平台释放USDT到账',
  143. 'user_name'=>$user->username? $user->username : '系统',
  144. 'relevant_name'=>$user->username? $user->username : '系统',
  145. ];
  146. if(!Db::name('detailed_bonus')->insertGetId($changedata)){
  147. $fail++;
  148. Db::rollback();
  149. continue;
  150. }
  151. // 释放明细
  152. $data = [
  153. 'userid'=> $tradeUserId,
  154. 'type'=>1,
  155. 'money'=> $releaseAmount,
  156. 'usdt_num'=> $usdt,
  157. 'speed_usdt'=> $speedUsdt,
  158. 'speed_total'=> $speedTotal,
  159. 'balance'=> $user->usdt,
  160. 'orderid'=> $item['id'],
  161. 'status'=> 1,
  162. 'create_time'=> time(),
  163. 'update_time'=> time(),
  164. 'remark'=> '转售产品每日释放到账',
  165. ];
  166. if(!ReleaseLog::insertGetId($data)){
  167. $fail++;
  168. Db::rollback();
  169. continue;
  170. }
  171. // 更新释放交易商品数据
  172. $tradeData = ['release_total'=> $releaseTotal+$releaseAmount,'release_usdt'=> $releaseUsdt+$usdt,'release_time'=> time()];
  173. if($releaseTotalUsdt<=0){
  174. $tradeUserId['release_total_usdt'] = $totalUsdt;
  175. }
  176. if($releaseUsdt+$usdt >= $amount){
  177. $tradeData['status'] = 4;
  178. }
  179. if(!Trade::where(['id'=> $item['id']])->update($tradeData)){
  180. $fail++;
  181. Db::rollback();
  182. continue;
  183. }
  184. $success++;
  185. Db::commit();
  186. }
  187. $this->success('请求处理成功', ['success'=> $success,'fail'=> $fail]);
  188. }
  189. /*预约上架*/
  190. function checkappoint()
  191. {
  192. $gids=db('trade')->where(['status'=>0])->group('goodsid')->column('goodsid');
  193. foreach ($gids as $vl)
  194. {
  195. $tradelist=db('trade')->where(['goodsid'=>$vl,'status'=>0])->select();
  196. if(count($tradelist) == 1)
  197. {
  198. continue;
  199. }else{
  200. $cnt=0;
  201. foreach ($tradelist as $vs)
  202. {
  203. $cnt++;
  204. if($cnt == 1)
  205. {
  206. continue;
  207. }else{
  208. #取消
  209. db('trade')->where(['id'=>$vs['id']])->update(['status'=>-2,'iscancel'=>1,'confirm_time'=>time()]);
  210. }
  211. }
  212. }
  213. }
  214. $list=db('goods_cats')->where(['status'=>1])->select();
  215. foreach($list as $v)
  216. {
  217. if(time()>=strtotime(date("Y-m-d {$v['start']}")) && time()<=strtotime(date("Y-m-d {$v['end']}")))
  218. {
  219. db('trade')->where(['catid'=>$v['id'],'appoint_time'=>['lt',strtotime('today')],'status'=>0])->update(['status'=>1,'ctime'=>time(),'create_time'=>strtotime('today')]);
  220. }
  221. }
  222. $this->success('操作完成');
  223. }
  224. function getnowtime()
  225. {
  226. $id = input('id', 0);
  227. $time=date('Y年m月d日H:i:s',time());
  228. $studio=db('studio')->where(['id'=> $id])->find();
  229. $startTime = isset($studio['start'])? $studio['start'] : 0;
  230. $endTime = isset($studio['end'])? $studio['end'] : 0;
  231. $startTime = $startTime? strtotime(date('Y-m-d').' '.$startTime) : 0;
  232. $endTime = $endTime? strtotime(date('Y-m-d').' '.$endTime) : 0;
  233. $expired = $startTime > time()? $startTime - time() : 0;
  234. if($endTime <= time()){
  235. $startTime = strtotime(date('Y-m-d',strtotime(date('Y-m-d'))+86400).' '.$startTime);
  236. $expired = $startTime > time()? $startTime - time() : 0;
  237. }
  238. if(date('week') == 1)
  239. {
  240. $weeks='一';
  241. }elseif(date('week') ==2)
  242. {
  243. $weeks='二';
  244. }elseif(date('week') ==3)
  245. {
  246. $weeks='三';
  247. }elseif(date('week') ==4)
  248. {
  249. $weeks='四';
  250. }elseif(date('week') ==5)
  251. {
  252. $weeks='五';
  253. }elseif(date('week') ==6)
  254. {
  255. $weeks='六';
  256. }else{
  257. $weeks='七';
  258. }
  259. $this->success($time.' 星期'.$weeks,['time'=> $endTime,'expired'=>$expired]);
  260. }
  261. function getusername()
  262. {
  263. $names=input('username');
  264. if(empty($names))
  265. {
  266. $this->error('请输入账户');
  267. }
  268. $user=db('user')->where(['username|mobile'=>$names,'status'=>1])->find();
  269. if($user)
  270. {
  271. $this->success('',['name'=>$user['nickname']]);
  272. }else{
  273. $this->error('用户不存在'.$names);
  274. }
  275. }
  276. /*匹配*/
  277. function checktrade()
  278. {
  279. $bcf=db('bonus_config')->where('id',4)->find();
  280. $list=db('trade')->where(['status'=>['in','1,2']])->select();
  281. foreach ($list as $v)
  282. {
  283. if($v['status'] == 2)
  284. {
  285. $JC=time()-($v['pay_time']+60*(int)$bcf['cap']);
  286. if($JC>0)
  287. {//自动确认
  288. db('trade')->where(['id'=>$v['id']])->update(['status'=>-1]);
  289. }
  290. }
  291. if($v['status'] == 1)
  292. {
  293. $JC1=time()-($v['ctime']+60*$bcf['value']);
  294. if($JC1>0)
  295. {//超时未支付
  296. db()->startTrans();
  297. $res1=db('trade')->where(['id'=>$v['id']])->update(['status'=>-2,'iscancel'=>1,'confirm_time'=>time()]);
  298. $res2=db('goods')->where(['id'=>$v['goodsid']])->update(['istrade'=>0]);
  299. if($res1 && $res2)
  300. {
  301. db()->commit();
  302. }else{
  303. db()->rollback();
  304. }
  305. }
  306. }
  307. }
  308. echo 'success';
  309. }
  310. function getnoticelist()
  311. {
  312. $map['status']=1;
  313. $map['catid']=1;
  314. $p=$this->request->request('p');
  315. if(empty($p))
  316. {
  317. $this->error('缺少参数页码');
  318. }
  319. $pagesize=10;
  320. $total=db('article')->where($map)->count();
  321. $totalPage=ceil($total/$pagesize);
  322. if($p>$totalPage && $total>0)
  323. {
  324. $this->error('页码有误');
  325. }
  326. $list=db('article')->where($map)->page($p,$pagesize)->order('id desc')->select();
  327. foreach ($list as &$v)
  328. {
  329. $v['ctime']=date('Y-m-d H:i:s',$v['ctime']);
  330. $v['abs']=mbsubstr($v['content'],0,30);
  331. $v['prc']=empty($v['prc']) ?'http://' . $_SERVER['HTTP_HOST'].'/assets/shop/img/gg.png':$v['prc'];
  332. }
  333. if(empty($list))
  334. {
  335. $data['list']=[];
  336. }else{
  337. $data['list']=$list;
  338. }
  339. $data['total']=$totalPage;
  340. $this->success('',$data);
  341. }
  342. function fdbonus()
  343. {
  344. db()->execute('call CashBonus()');
  345. $this->success('执行完毕');
  346. }
  347. /*发送留言 */
  348. function tosendmsg()
  349. {
  350. $uid=input('uid');
  351. $content=input('content');
  352. if(empty($content))
  353. {
  354. $this->error(__("请输入留言"));
  355. }
  356. $param['content']=$content;
  357. $param['from_uid']=0;
  358. $param['to_uid']=$uid;
  359. $param['ctime']=time();
  360. $param['userid']=$uid;
  361. $ids=db('user_message')->insertGetId($param);
  362. if($ids)
  363. {
  364. goeasy_sms($content);
  365. $this->success(__("留言成功"));
  366. }else{
  367. $this->error(__("留言失败"));
  368. }
  369. }
  370. function checkuserappoint()
  371. {
  372. $name=$this->request->request('name');
  373. $sid=$this->request->request('sid');
  374. $user=db('user')->where(['username|mobile'=>$name])->find();
  375. if($user)
  376. {
  377. $isappoint=db('studio_user')->where(['userid'=>$user['id'],'sid'=>$sid])->find();
  378. if($isappoint)
  379. {
  380. $this->success('',['id'=>$user['id'],'username'=>$user['username'],'isclose'=>0]);
  381. }else{
  382. $this->success('',['id'=>$user['id'],'username'=>$user['username'],'isclose'=>1]);
  383. }
  384. }else{
  385. $this->error('您输入的会员不存在');
  386. }
  387. }
  388. function setuserappoint()
  389. {
  390. $userid=$this->request->request('userid');
  391. $sid=$this->request->request('sid');
  392. $isappoint=$this->request->request('isappoint');
  393. $info=db('studio_user')->where(['userid'=>$userid,'sid'=>$sid])->find();
  394. if($info)
  395. {
  396. if($isappoint == 1)
  397. {
  398. db('studio_user')->where(['id'=>$info['id']])->delete();
  399. $this->success('设置成功');
  400. }else{
  401. $this->error('您并未做任何修改');
  402. }
  403. }else{
  404. if($isappoint == 1)
  405. {
  406. $this->error('您并未做任何修改');
  407. }else{
  408. db('studio_user')->insertGetId(['userid'=>$userid,'sid'=>$sid,'ctime'=>time(),'status'=>1]);
  409. $this->success('设置成功');
  410. }
  411. }
  412. }
  413. /* 获取节点 */
  414. function getClass()
  415. {
  416. $rootid=input('rootid');
  417. $uid=input('uid');
  418. $where['refereeid']=$uid;
  419. if($uid==0){
  420. $myself = db('user')->where(['id'=>$rootid])->find();
  421. $value['uid'] = $myself['id'];
  422. $value['status'] = $myself['status'];
  423. $value['usernumber'] = $myself['username']."[姓名:".$myself['nickname']."]";
  424. $count = db('user')->where('refereeid',$value['uid'])->count();
  425. $value['count']= $count;
  426. if($count!=0){
  427. $value['isParent']= true;
  428. }else{
  429. $value['isParent']= false;
  430. }
  431. $list[] = $value;
  432. }else{
  433. $info = db('user')->where($where)->select();
  434. foreach ($info as $value){
  435. $count = db('user')->where('refereeid',$value['id'])->count();
  436. $value['count']= $count;
  437. if($count!=0){
  438. $value['isParent']= true;
  439. } else {
  440. $value['isParent']= false;
  441. }
  442. $value['uid']=$value['id'];
  443. $value['usernumber'] = $value['username']."[姓名:".$value['nickname']."]";
  444. $list[] = $value;
  445. }
  446. }
  447. return $list;
  448. }
  449. /* 奖金设置 */
  450. function bonus_set()
  451. {
  452. $param=$this->request->get();
  453. $data_arr=explode('-',$param['id']);
  454. $column=$data_arr['0'];
  455. $key=$data_arr['1'];
  456. //模型
  457. if(count($data_arr)<3){
  458. $data_model="bonus_config";
  459. }else{
  460. $data_model=$data_arr['2'];
  461. }
  462. $data[$column]=$param['val'];
  463. $info=db($data_model)->where('id',$key)->find();
  464. $res=db($data_model)->where('id',$key)->update($data);
  465. if($res){
  466. $this->success("修改完成");
  467. }else{
  468. $this->error("修改完成");
  469. }
  470. }
  471. /*切换用户名 */
  472. function switchname()
  473. {
  474. $randStr = str_shuffle('1234567890');
  475. $randZm = str_shuffle('abcdefghijklmnopqrstuvwxyz');
  476. $username= substr($randZm,0,2).substr($randStr,0,6);//账号为7位随机数
  477. $this->success($username);
  478. }
  479. function getuserid()
  480. {
  481. $param=$this->request->get();
  482. $info=db('user')->where(['username|mobile'=>$param['username']])->find();
  483. if($info)
  484. {
  485. $this->success($info['id']);
  486. }else{
  487. $this->error('用户不存在');
  488. }
  489. }
  490. function getstuid()
  491. {
  492. $param=$this->request->get();
  493. $info=db('studio')->where(['title'=>$param['title']])->find();
  494. if($info)
  495. {
  496. $this->success($info['id']);
  497. }else{
  498. $this->error('商家不存在');
  499. }
  500. }
  501. /* 检测用户名 */
  502. function checkusername()
  503. {
  504. $param=$this->request->get();
  505. $info=db('user')->where('username',$param['username'])->find();
  506. if($info)
  507. {
  508. $this->error("用户名已注册,请更换");
  509. }else{
  510. $this->success("用户名可以使用");
  511. }
  512. }
  513. /* 获取昵称 */
  514. function getnickname()
  515. {
  516. $param=$this->request->get();
  517. $info=db('user')->where(['username|mobile'=>$param['username']])->find();
  518. if($info)
  519. {
  520. $this->success($info['nickname']);
  521. }else{
  522. $this->error('用户不存在');
  523. }
  524. }
  525. /* 获取位置节点pos */
  526. function getpos()
  527. {
  528. $param=$this->request->get();
  529. $info=db('user')->where(['username'=>$param['username'],'status'=>1])->find();
  530. if(!$info)
  531. {
  532. $this->error("会员不存在或不可用");
  533. }
  534. $str="<option value=''>请选择</option>";
  535. $pos=config('pos');
  536. $list=db('user_parent')->where('pid',$info['id'])->select();
  537. if($list)
  538. {
  539. $pos_arr=[];
  540. foreach ($list as $k=>$v)
  541. {
  542. $pos_arr[$v['position']]=$v;
  543. }
  544. foreach ($pos as $key=>$v)
  545. {
  546. if(empty($pos_arr[$key]['userid']))
  547. {
  548. $str.="<option value='{$key}'>".$v.'</option>';
  549. }else{
  550. $str.="<option value='{$key}' disabled>".$v.'【'.$pos_arr[$key]['username'].'】</option>';
  551. }
  552. }
  553. }else{
  554. foreach ($pos as $key=>$v)
  555. {
  556. $str.="<option value='{$key}'>".$v.'</option>';
  557. }
  558. }
  559. $this->success($str);
  560. }
  561. }