فهرست منبع

Wesmiler OTC 提交更新 0729

APPLE 3 سال پیش
والد
کامیت
a99ef3725e

+ 1 - 1
app/Helpers/common.php

@@ -761,7 +761,7 @@ if (!function_exists('get_image_url')) {
     {
         $host = request()->header('HOST');
         $host = ((strpos($host,'127') === false)&&strpos($host,'localhost') === false)? env('IMG_URL') : 'http://'.$host.'/uploads';
-        return strpos($image_url,'http') === false? $host . $image_url : $image_url;
+        return strpos($image_url,'http') === false? $host . '/'.ltrim($image_url,'/') : $image_url;
     }
 }
 

+ 10 - 8
app/Http/Controllers/Admin/IndexController.php

@@ -98,7 +98,7 @@ class IndexController extends Backend
         }
 
         $userService = new UserService();
-        $result = $userService->authSubmit($this->userId);
+        $result = $userService->authSubmit($this->userInfo['user_id']);
         return $result;
     }
 
@@ -152,7 +152,7 @@ class IndexController extends Backend
         $userId = isset($info['user_id'])? $info['user_id'] : 0;
         $userInfo = MemberService::make()->getInfo($userId);
         if($userId<=0 || empty($userInfo)){
-            return returnJson(MESSAGE_FAILED, false);
+            return returnJson(MESSAGE_FAILED, true);
         }
 
         // 用户交易设置参数
@@ -218,21 +218,23 @@ class IndexController extends Backend
     public function wallet()
     {
         $data = ConfigService::make()->getConfigOptionByGroup(5);
+
         if(isset($data['trc_address']) && $data['trc_address']){
             $qrcode = \App\Services\Api\MemberService::make()->makeQrcode($data['trc_address']);
             $data['trc_qrcode'] = $qrcode? get_image_url($qrcode) : '';
             $data['wallet']['trc_usdt'] = UsdtWalletService::make()->getTrc20Usdt($data['trc_address']);
         }
-        if(isset($data['erc_address']) && $data['erc_address']){
-            $qrcode = \App\Services\Api\MemberService::make()->makeQrcode($data['erc_address']);
-            $data['erc_qrcode'] = $qrcode? get_image_url($qrcode) : '';
-            $data['wallet']['erc_usdt'] = UsdtWalletService::make()->getErc20Usdt($data['erc_address']);
-        }
         if(isset($data['trc_out_address']) && $data['trc_out_address']){
             $qrcode = \App\Services\Api\MemberService::make()->makeQrcode($data['trc_out_address']);
             $data['trc_out_qrcode'] = $qrcode? get_image_url($qrcode) : '';
             $data['wallet']['trc_out_usdt'] = UsdtWalletService::make()->getTrc20Usdt($data['trc_out_address']);
         }
+        if(isset($data['erc_address']) && $data['erc_address']){
+            $qrcode = \App\Services\Api\MemberService::make()->makeQrcode($data['erc_address']);
+            $data['erc_qrcode'] = $qrcode? get_image_url($qrcode) : '';
+            $data['wallet']['erc_usdt'] = UsdtWalletService::make()->getErc20Usdt($data['erc_address']);
+        }
+
         if(isset($data['erc_out_address']) && $data['erc_out_address']){
             $qrcode = \App\Services\Api\MemberService::make()->makeQrcode($data['erc_out_address']);
             $data['erc_out_qrcode'] = $qrcode? get_image_url($qrcode) : '';
@@ -254,7 +256,7 @@ class IndexController extends Backend
         $address = request()->post('address', '');
         $limit = request()->post('limit', 10);
         if(empty($address)){
-            return returnJson(MESSAGE_OK, false);
+            return returnJson(MESSAGE_OK, true);
         }
 
         // trc

+ 12 - 0
app/Http/Controllers/Admin/MemberController.php

@@ -34,6 +34,18 @@ class MemberController extends Backend
         $this->service = new MemberService();
     }
 
+    /**
+     * 更新个人资料
+     * @return mixed
+     * @since 2020/11/11
+     * @author laravel开发员
+     */
+    public function business()
+    {
+        $result = $this->service->getBusiness();
+        return returnJson(1002,true, $result);
+    }
+
     public function info()
     {
         $info = MemberService::make()->getInfo($this->userInfo['user_id']);

+ 17 - 0
app/Http/Controllers/Admin/UserController.php

@@ -33,6 +33,23 @@ class UserController extends Backend
     }
 
     /**
+     * 承兑商
+     * @return array
+     */
+    public function business()
+    {
+        $pageSize = request()->get('limit', 15);
+        $list = $this->service->getDataList(request()->all(), $pageSize);
+        $message = array(
+            "msg" => '操作成功',
+            "code" => 0,
+            "data" => isset($list['list'])? $list['list']:[],
+            "count" => isset($list['total'])? $list['total']:0,
+        );
+        return $message;
+    }
+
+    /**
      * 重置密码
      * @return mixed
      * @since 2020/11/11

+ 12 - 1
app/Http/Controllers/Api/IndexController.php

@@ -6,6 +6,7 @@ use App\Helpers\Jwt;
 use App\Http\Validator\MemberValidator;
 use App\Services\Api\AdService;
 use App\Services\Api\MemberService;
+use App\Services\ChatMessageService;
 use App\Services\Common\TradeOrderService;
 use App\Services\ConfigService;
 use App\Services\EmailService;
@@ -97,5 +98,15 @@ class IndexController extends webApp
         return message(1010, true,  compact('trade'));
     }
 
-
+    /**
+     * 未读消息数量
+     * @return array
+     */
+    public function chatCount()
+    {
+        $userId = request()->post('user_id', 0);
+        $userId = $userId? $userId : $this->userId;
+        $count = ChatMessageService::make()->getUnReadCount($userId);
+        return message(1002, true, $count);
+    }
 }

+ 17 - 6
app/Http/Controllers/Oapi/LoginController.php

@@ -22,11 +22,6 @@ class LoginController extends webApp
     public function login(MemberValidator  $validator)
     {
         $params = request()->all();
-        $params = $validator->check($params, 'login');
-        if(!is_array($params)){
-            return message($params, false);
-        }
-
         $apiKey = request()->post('api_key','');
         if(!$apiInfo = ApiService::make()->checkApi($apiKey)){
             return message(ApiService::make()->getError(), false);
@@ -37,6 +32,22 @@ class LoginController extends webApp
             return message(6002, false);
         }
 
+        // 若为外汇平台,不需要登录直接
+        $userType = isset($params['user_type'])? intval($params['user_type']) : 3;
+        if($userType == 3){
+            $token = 'TK'.strtoupper(md5($apiId . $apiKey).rand(100,999));
+            RedisService::set("apis:tokens:{$token}", ['id' => 0, 'api_id'=> $apiId, 'info' => [], 'token' => $token], 48 * 3600);
+            return message(2004, true, [
+                'token' => $token,
+                'api_id' => $apiId,
+            ]);
+        }
+
+        $params = $validator->check($params, 'login');
+        if(!is_array($params)){
+            return message($params, false);
+        }
+
         if(!$result = MemberService::make()->apiLogin($apiId,$params)){
             return message(MemberService::make()->getError(), false);
         }
@@ -62,7 +73,7 @@ class LoginController extends webApp
             return message(6002, false);
         }
 
-        if(!$result = MemberService::make()->apiLogin($apiId,$params)){
+        if(!$result = MemberService::make()->apiRegister($apiId,$params)){
             return message(MemberService::make()->getError(), false);
         }
 

+ 9 - 3
app/Http/Controllers/Oapi/TradeController.php

@@ -32,13 +32,14 @@ class TradeController extends webApp
     public function buy(TradeValidator $validate)
     {
         $params = request()->post();
-        $params = $validate->check($params,'buy');
+        $params = $validate->check($params,'trade_buy');
         if(!is_array($params)){
             return message($params, false);
         }
 
         // 额外验证没注册需要前往下载APP注册
 
+
         $params['api_id'] = $this->apiId;
         if($info = TradeOrderService::make()->buy($this->userId, $params)){
             return message(3006, true, $info);
@@ -56,7 +57,7 @@ class TradeController extends webApp
     public function sell(TradeValidator $validate)
     {
         $params = request()->post();
-        $params = $validate->check($params,'sell');
+        $params = $validate->check($params,'trade_sell');
         if(!is_array($params)){
             return message($params, false);
         }
@@ -141,7 +142,12 @@ class TradeController extends webApp
         }
 
         $info = $this->service->getInfoByNo($orderNo, $this->userId);
-        return message(1002, true, $info);
+        if($info){
+            return message(1002, true, $info);
+        }else{
+            return message(1002, false);
+        }
+
     }
 
 }

+ 1 - 1
app/Http/Validator/MemberValidator.php

@@ -66,7 +66,7 @@ class MemberValidator extends BaseValidator
         'password'=> ['username','password','code'],
         'tradePassword'=> ['username','trade_password','code'],
         'auth'=> ['realname','idcard','idcard_front_img','idcard_back_img','idcard_hand_img','bank_front_img','bank_back_img'],
-        'business_auth'=> ['realname','idcard','idcard_front_img','idcard_back_img','idcard_hand_img','credit_score_img'],
+        'business_auth'=> ['realname','idcard','idcard_front_img','idcard_back_img','idcard_hand_img'],
         'login'=> ['username','password'],
         'apiLogin'=> ['username','password','api_key'],
         'apiRegister'=> ['username','password','api_key'],

+ 12 - 0
app/Http/Validator/TradeValidator.php

@@ -9,6 +9,11 @@ class TradeValidator extends BaseValidator
         'num_type' => 'required',
         'pay_type' => 'required',
         'payment_id' => 'required',
+        'order_no' => 'required',
+        'notify_url' => 'required',
+        'usdt_address' => 'required',
+        'contact_type' => 'required',
+        'payment' => 'required',
         'pay_img' => 'required',
         'num' => 'required',
     ];
@@ -27,10 +32,15 @@ class TradeValidator extends BaseValidator
     public static $fields = [
         'id' => 'ID',
         'trade_type' => '交易类型',
+        'contact_type' => '合约类型',
         'num_type' => '交易数值类型',
         'pay_type' => '支付方式',
         'payment_id' => '收款账号',
         'pay_img' => '打款凭证',
+        'payment' => '收款参数',
+        'order_no' => '单号',
+        'notify_url' => '回调地址',
+        'usdt_address' => '交易钱包地址',
         'num' => '数量或金额',
     ];
 
@@ -38,7 +48,9 @@ class TradeValidator extends BaseValidator
     public static $scenes = [
         'info'=> ['id'],
         'buy'=> ['trade_type','pay_type','num_type','num'],
+        'trade_buy'=> ['trade_type','contact_type','order_no','num','notify_url','usdt_address'],
         'sell'=> ['trade_type','payment_id','num_type','num'],
+        'trade_sell'=> ['trade_type','num','contact_type','payment','order_no','notify_url','usdt_address'],
         'pay'=> ['id','pay_type','pay_img'],
     ];
 

+ 12 - 0
app/Models/MemberModel.php

@@ -50,6 +50,12 @@ class MemberModel extends BaseModel
             if(isset($info['idcard_hand_img'])){
                 $info['idcard_hand_img'] = $info['idcard_hand_img'] ? get_image_url($info['idcard_hand_img']) : '';
             }
+            if(isset($info['bank_front_img'])){
+                $info['bank_front_img'] = $info['bank_front_img'] ? get_image_url($info['bank_front_img']) : '';
+            }
+            if(isset($info['bank_back_img'])){
+                $info['bank_back_img'] = $info['bank_back_img'] ? get_image_url($info['bank_back_img']) : '';
+            }
             if(isset($info['usdt_num'])){
                 $info['usdt_num'] = $info['usdt_num'] ? moneyFormat($info['usdt_num'], 4) : '0.0000';
             }
@@ -81,8 +87,14 @@ class MemberModel extends BaseModel
 //            $ercUsdtNum = UsdtWalletService::make()->getErc20Usdt($info['erc_hexaddress'], true);
             $info['erc_usdt_num'] = floatval($ercUsdtNum);
 
+            if($info['login_time'] < time() - 600){
+                $info['is_online'] = 2;
+            }
+
             $info['create_time_text'] = datetime(strtotime($info['create_time']));
             $info['login_time'] = $info['login_time']? datetime($info['login_time']) : '';
+
+
         }
         return $info;
     }

+ 5 - 4
app/Models/UserModel.php

@@ -66,10 +66,11 @@ class UserModel extends BaseModel
                 $info['exception_num'] = isset($memberInfo['exception_num'])? intval($memberInfo['exception_num']) : 0;
                 $info['idcard_check'] = isset($memberInfo['idcard_check'])? intval($memberInfo['idcard_check']) : 0;
                 $info['idcard'] = isset($memberInfo['idcard'])? trim($memberInfo['idcard']) : '';
-                $info['idcard_front_img'] = isset($memberInfo['idcard_front_img'])? get_image_url($memberInfo['idcard_front_img']) : '';
-                $info['idcard_back_img'] = isset($memberInfo['idcard_back_img'])? get_image_url($memberInfo['idcard_back_img']) : '';
-                $info['idcard_hand_img'] = isset($memberInfo['idcard_hand_img'])? get_image_url($memberInfo['idcard_hand_img']) : '';
-                $info['credit_score_img'] = isset($memberInfo['credit_score_img'])? get_image_url($memberInfo['credit_score_img']) : '';
+                $info['realname'] = isset($memberInfo['realname'])? trim($memberInfo['realname']) : '';
+                $info['idcard_front_img'] = isset($memberInfo['idcard_front_img']) && $memberInfo['idcard_front_img']? get_image_url($memberInfo['idcard_front_img']) : '';
+                $info['idcard_back_img'] = isset($memberInfo['idcard_back_img']) && $memberInfo['idcard_back_img']? get_image_url($memberInfo['idcard_back_img']) : '';
+                $info['idcard_hand_img'] = isset($memberInfo['idcard_hand_img']) && $memberInfo['idcard_hand_img']? get_image_url($memberInfo['idcard_hand_img']) : '';
+                $info['credit_score_img'] = isset($memberInfo['credit_score_img']) && $memberInfo['credit_score_img']? get_image_url($memberInfo['credit_score_img']) : '';
 
                 // 钱包余额
                 $info['trc_num'] = '0.00';

+ 8 - 5
app/Services/Api/MemberService.php

@@ -64,7 +64,7 @@ class MemberService extends BaseService
      */
     public function getInfo($where, array $field = [])
     {
-        $field = $field ? $field : ['id', 'api_id', 'username', 'realname', 'nickname', 'openid', 'idcard', 'google_secret', 'password', 'trade_password', 'trc_address', 'erc_address', 'erc_hexaddress', 'source', 'idcard_check', 'idcard_front_img', 'idcard_back_img', 'idcard_hand_img', 'safe_level', 'user_type', 'member_level', 'usdt_num', 'user_type', 'status', 'credit', 'avatar'];
+        $field = $field ? $field : ['id', 'api_id', 'username', 'realname', 'nickname', 'openid', 'idcard', 'google_secret', 'password', 'trade_password', 'trc_address', 'erc_address', 'erc_hexaddress', 'source', 'idcard_check', 'idcard_front_img', 'idcard_back_img', 'idcard_hand_img', 'bank_front_img', 'bank_back_img', 'safe_level', 'user_type', 'member_level', 'usdt_num', 'user_type', 'status', 'credit', 'avatar'];
         if (is_array($where)) {
             $info = $this->model->where($where)->select($field)->first();
         } else {
@@ -80,6 +80,8 @@ class MemberService extends BaseService
             $info['idcard_front_img'] = $info['idcard_front_img'] ? get_image_url($info['idcard_front_img']) : '';
             $info['idcard_back_img'] = $info['idcard_back_img'] ? get_image_url($info['idcard_back_img']) : '';
             $info['idcard_hand_img'] = $info['idcard_hand_img'] ? get_image_url($info['idcard_hand_img']) : '';
+            $info['bank_front_img'] = $info['bank_front_img'] ? get_image_url($info['bank_front_img']) : '';
+            $info['bank_back_img'] = $info['bank_back_img'] ? get_image_url($info['bank_back_img']) : '';
             $info['usdt_num'] = isset($info['usdt_num']) ? moneyFormat($info['usdt_num'], 4) : '0.0000';
             $info['cny_num'] = $info['usdt_num'] && $tradePrice > 0 ? moneyFormat($info['usdt_num'] * $tradePrice, 6) : '0.0000';
             $info['is_collection'] = MemberPaymentService::make()->checkHasByUser($info['id']);
@@ -217,7 +219,7 @@ class MemberService extends BaseService
         RedisService::set("stores:auths:info:{$info['id']}", $info, 5, 10);
 
         // 登录
-        $updateData = ['login_time' => time(), 'login_ip' => get_client_ip()];
+        $updateData = ['login_time' => time(),'is_online'=>1, 'login_ip' => get_client_ip()];
         if (empty($info['google_secret'])) {
             $google = GoogleAuthenticator::CreateSecret();
             $updateData['google_secret'] = isset($google['secret']) ? $google['secret'] : '';
@@ -247,7 +249,7 @@ class MemberService extends BaseService
             $this->error = '2005';
             return false;
         }
-
+        var_dump($params);
         $username = isset($params['username']) ? trim($params['username']) : '';
         $password = isset($params['password']) ? trim($params['password']) : '';
         $userType = isset($params['user_type']) ? intval($params['user_type']) : 0;
@@ -341,7 +343,7 @@ class MemberService extends BaseService
             }
 
             if ($info['api_id'] != $apiId) {
-                $this->error = 6002;
+                $this->error = 6010;
                 return false;
             }
 
@@ -357,7 +359,7 @@ class MemberService extends BaseService
         ActionLogModel::record($info);
 
         // JWT生成token
-        $token = md5($info['id'] . $username);
+        $token = 'TB'.strtoupper(md5($info['id'] . $username).rand(100,999));
         RedisService::set("apis:auths:info:{$info['id']}", $info, rand(5, 10));
         RedisService::set("apis:tokens:{$token}", ['id' => $info['id'], 'info' => $info, 'token' => $token], 48 * 3600);
 
@@ -412,6 +414,7 @@ class MemberService extends BaseService
         if (isset($params['bank_back_img']) && strpos($params['bank_back_img'], 'http') === false) {
             $data['bank_back_img'] = $params['bank_back_img'];
         }
+
         $info = $this->getInfo($userId);
         $idcardCheck = isset($info['idcard_check']) ? $info['idcard_check'] : 0;
         if ($idcardCheck == 1) {

+ 15 - 0
app/Services/ChatMessageService.php

@@ -288,6 +288,21 @@ class ChatMessageService extends BaseService
     }
 
     /**
+     * 消息数量
+     * @param $userId
+     * @return int[]
+     */
+    public function getUnReadCount($userId)
+    {
+        $count = $this->model->where(['status' => 1, 'mark' => 1, 'type' => 1,'is_read'=>2])
+            ->where(function ($query) use ($userId) {
+                $query->where(['to_uid' => $userId]);
+            })->count('id');
+
+        return $count;
+    }
+
+    /**
      * 获取最新的聊天消息
      * @param $chatKey 聊天窗口标识
      * @return array|mixed

+ 7 - 2
app/Services/Common/AdvertOrderService.php

@@ -79,6 +79,11 @@ class AdvertOrderService extends BaseService
                 if ($type > 0) {
                     $query->where(['a.type' => $type]);
                 }
+                $businessId = isset($params['business_id']) ? $params['business_id'] : 0;
+                $userType = isset($params['user_type']) ? intval($params['user_type']) : 0;
+                if ($userType > 0 && $businessId<=0) {
+                    $query->where(['c.user_type' => $userType]);
+                }
 
                 // 日期
                 $date = isset($params['date']) ? $params['date'] : [];
@@ -107,7 +112,7 @@ class AdvertOrderService extends BaseService
                     $query->where('a.user_id', $userId);
                 }
 
-                $businessId = isset($params['business_id']) ? $params['business_id'] : 0;
+
                 if ($businessId > 0) {
                     $query->where('a.business_id', $businessId);
                 }
@@ -934,7 +939,7 @@ class AdvertOrderService extends BaseService
             }
 
             $this->model->startTrans();
-            $updateData = ['status'=> 8, 'update_time'=> time(),'catch_at'=>time(),'exception_remark'=>'系统取消'];
+            $updateData = ['status'=> 8, 'update_time'=> time(),'catch_at'=>time(),'exception_status'=> 0,'exception_remark'=>'系统取消'];
             if(!$this->model->where(['id'=> $orderInfo['id']])->update($updateData)){
                 $this->model->rollBack();
                 $this->error = '3043';

+ 5 - 1
app/Services/Common/CoinLogService.php

@@ -70,12 +70,16 @@ class CoinLogService extends BaseService
         $changeType = isset($params['change_type'])? $params['change_type'] : 1;
         $contactType = isset($params['contact_type'])? $params['contact_type'] : 1;
         $coinType = isset($params['coin_type'])? $params['coin_type'] : 1;
+        $userType = isset($params['user_type'])? $params['user_type'] : 0;
         $userId = isset($params['user_id'])? $params['user_id'] : 0;
         $from = isset($params['from'])? $params['from'] : '';
         $to = isset($params['to'])? $params['to'] : '';
         if($type>0){
             $where['a.type'] = $type;
         }
+        if($userType>0){
+            $where['m.user_type'] = $userType;
+        }
         if($status>0){
             $where['a.status'] = $status;
         }
@@ -106,7 +110,7 @@ class CoinLogService extends BaseService
             ->where(function ($query) use($params){
                 $keyword = isset($params['keyword'])? $params['keyword'] : '';
                 if($keyword){
-                    $query->where('a.order_no','like',"{$keyword}")->orWhere('m.username','like',"%{$keyword}%");
+                    $query->where('a.order_no','like',"%{$keyword}%")->orWhere('m.username','like',"%{$keyword}%");
                 }
 
                 // 日期

+ 5 - 0
app/Services/Common/LoginService.php

@@ -13,6 +13,7 @@ namespace App\Services\Common;
 
 use App\Helpers\Jwt;
 use App\Models\ActionLogModel;
+use App\Models\MemberModel;
 use App\Models\UserModel;
 use App\Services\BaseService;
 use Carbon\Carbon;
@@ -149,6 +150,10 @@ class LoginService extends BaseService
         $jwt = new Jwt();
         $token = $jwt->getToken($info['id']);
 
+        if($info['user_type']==2 && $info['user_id']){
+            MemberModel::where(['id'=> $info['user_id']])->update(['is_online'=>1,'login_time'=>time()]);
+        }
+
         // 结果返回
         $result = [
             'access_token' => $token,

+ 2 - 1
app/Services/Common/MemberPaymentService.php

@@ -62,7 +62,7 @@ class MemberPaymentService extends BaseService
         $list = $this->model->where(function ($query) use ($userId, $type) {
             $query->where(['user_id' => $userId,'type'=> $type,'mark'=>1])->where('status','>',0);
             })
-            ->selectRaw('id,type,real_name,logo,bank_name,branch_name,account,is_default,bank_card,trade_num,used_num,trade_quota,used_quota,(trade_quota - used_quota) as credit,status')
+            ->selectRaw('id,type,real_name,logo,bank_name,branch_name,account,qrcode,is_default,bank_card,trade_num,used_num,trade_quota,used_quota,(trade_quota - used_quota) as credit,status')
            ->orderBy('is_default','asc')
             ->orderBy('id','desc')
             ->paginate($pageSize>0? $pageSize : 9999999);
@@ -70,6 +70,7 @@ class MemberPaymentService extends BaseService
         if($list){
             foreach($list['data'] as &$item){
                 $item['logo'] = $item['logo'] ? get_image_url($item['logo']) : '';
+                $item['qrcode'] = $item['qrcode'] ? get_image_url($item['qrcode']) : '';
                 $item['realname_text'] = $item['real_name'] ? format_realname($item['real_name']) : '';
                 $item['account_text'] = $item['account'] ? format_account($item['account']) : '';
                 $item['bank_card_text'] = $item['bank_card'] ? format_bank_card($item['bank_card']) : '';

+ 27 - 0
app/Services/Common/MemberService.php

@@ -100,6 +100,33 @@ class MemberService extends BaseService
     }
 
     /**
+     * 获取承兑商
+     * @return mixed
+     */
+    public function getBusiness()
+    {
+        $params = request()->all();
+        $list = $this->model->where(['status'=> 1,'mark'=>1,'user_type'=> 2])
+            ->where(function($query) use($params){
+                $keyword = isset($params['keyword'])? trim($params['keyword']) : '';
+                if($keyword){
+                    $query->where('username','like',"%{$keyword}%");
+                }
+
+                $userId = isset($params['user_id'])? $params['user_id'] : 0;
+                if($userId){
+                    $query->whereNotIn('id',[$userId]);
+                }
+            })
+            ->select(['id','username'])
+            ->take(100)
+            ->orderBy('id','desc')
+            ->get();
+
+        return $list;
+    }
+
+    /**
      * 添加会编辑会员
      * @return array
      * @since 2020/11/11

+ 12 - 1
app/Services/Common/TradeOrderService.php

@@ -81,6 +81,16 @@ class TradeOrderService extends BaseService
                     $query->where(['a.type' => $type]);
                 }
 
+                $businessName = isset($params['business_name']) ? trim($params['business_name']) : '';
+                if ($businessName) {
+                    $query->where('b.username','like',"%{$businessName}%");
+                }
+
+                $userName = isset($params['username']) ? trim($params['username']) : '';
+                if ($userName) {
+                    $query->where('c.username','like',"%{$userName}%");
+                }
+
                 $apiId = isset($params['api_id']) ? intval($params['api_id']) : 0;
                 if ($apiId > 0) {
                     $query->where(['a.api_id' => $apiId]);
@@ -1089,6 +1099,7 @@ class TradeOrderService extends BaseService
             return false;
         }
 
+
         // 用户信息
         if ($businessId > 0) {
             $userInfo = MemberService::make()->getInfo($businessId);
@@ -1685,7 +1696,7 @@ class TradeOrderService extends BaseService
             }
 
             $this->model->startTrans();
-            $updateData = ['status' => 8, 'update_time' => time(), 'catch_at' => time(), 'exception_remark' => '系统取消'];
+            $updateData = ['status' => 8, 'update_time' => time(), 'catch_at' => time(),'exception_status'=> 0, 'exception_remark' => '系统取消'];
             if (!$this->model->where(['id' => $orderInfo['id']])->update($updateData)) {
                 $this->model->rollBack();
                 $this->error = '3043';

+ 95 - 9
app/Services/Common/UserService.php

@@ -91,6 +91,89 @@ class UserService extends BaseService
     }
 
     /**
+     * @param $params
+     * @param int $pageSize
+     * @return array
+     */
+    public function getDataList($params, $pageSize = 15)
+    {
+        $where = ['a.mark' => 1];
+        $status = isset($params['status'])? $params['status'] : 0;
+        $userType = isset($params['user_type'])? $params['user_type'] : 1;
+        $tradeType = isset($params['trade_type'])? $params['trade_type'] : 0;
+        $parentId = isset($params['parent_id'])? $params['parent_id'] : 0;
+        if($userType>0){
+            $where['a.user_type'] = $userType;
+        }
+        if($tradeType>0){
+            $where['m.trade_type'] = $tradeType;
+        }
+        if($parentId>0){
+            $where['m.parent_id'] = $parentId;
+        }
+        if($status>0){
+            $where['a.status'] = $status;
+        }
+
+        $list = $this->model->from('user as a')
+            ->leftJoin('member as m', 'm.id', '=', 'a.user_id')
+            ->where($where)
+            ->where(function ($query) use($params){
+                $keyword = isset($params['username'])? $params['username'] : '';
+                if($keyword){
+                    $query->where('a.username','like',"%{$keyword}%")->orWhere('m.username','like',"%{$keyword}%");
+                }
+
+                $realname = isset($params['realname'])? $params['realname'] : '';
+                if($realname){
+                    $query->where('m.username','like',"%{$realname}%");
+                }
+
+            })
+            ->select(['a.*','m.usdt_num','m.credit','m.is_online','m.login_time','m.exception_num','m.realname', 'm.username', 'm.idcard','m.idcard_check','m.idcard_front_img','m.idcard_back_img','m.idcard_hand_img','m.credit_score_img','m.trc_address','m.erc_hexaddress'])
+            ->orderBy('a.create_time','desc')
+            ->paginate($pageSize > 0 ? $pageSize : 9999999);
+        $list = $list? $list->toArray() :[];
+        if($list){
+            foreach($list['data'] as &$item){
+                $item['idcard_front_img'] = isset($item['idcard_front_img']) && $item['idcard_front_img']? get_image_url($item['idcard_front_img']) : '';
+                $item['idcard_back_img'] = isset($item['idcard_back_img']) && $item['idcard_back_img']? get_image_url($item['idcard_back_img']) : '';
+                $item['idcard_hand_img'] = isset($item['idcard_hand_img']) && $item['idcard_hand_img']? get_image_url($item['idcard_hand_img']) : '';
+                $item['credit_score_img'] = isset($item['credit_score_img']) && $item['credit_score_img']? get_image_url($item['credit_score_img']) : '';
+
+                if($item['login_time'] < time() - 600){
+                    $item['is_online'] = 2;
+                }
+
+                $item['trc_num'] = '0.00';
+                $item['trc_usdt_num'] = '0.00';
+                $item['erc_num'] = '0.00';
+                $item['erc_usdt_num'] = '0.00';
+                if($item['user_type'] == 2){
+                    $trcNum = UsdtWalletService::make()->getTrxBalance($item['trc_address'], true);
+//                    $trcNum = 0;
+                    $info['trc_num'] = floatval($trcNum);
+                    $trcUsdtNum = UsdtWalletService::make()->getTrc20Usdt($item['trc_address'], true);
+//                    $trcUsdtNum = 0;
+                    $info['trc_usdt_num'] = floatval($trcUsdtNum);
+                    $ercNum = 0;
+//                    $ercNum = UsdtWalletService::make()->getErcBalance($item['erc_hexaddress'], true);
+                    $info['erc_num'] = floatval($ercNum);
+                    $ercUsdtNum = 0;
+//                    $ercUsdtNum = UsdtWalletService::make()->getErc20Usdt($item['erc_hexaddress'], true);
+                    $info['erc_usdt_num'] = floatval($ercUsdtNum);
+                }
+            }
+        }
+
+        return [
+            'pageSize'=> $pageSize,
+            'total'=>isset($list['total'])? $list['total'] : 0,
+            'list'=> isset($list['data'])? $list['data'] : []
+        ];
+    }
+
+    /**
      * 添加或编辑用户
      * @return array
      * @since 2020/11/11
@@ -185,6 +268,7 @@ class UserService extends BaseService
             'username'=> $username,
             'realname'=> isset($data['realname'])? $data['realname'] : '',
             'gender'=> isset($data['gender'])? $data['gender'] : 0,
+            'parent_id'=> isset($data['parent_id'])? intval($data['parent_id']) : 0,
             'user_type'=> 2,
             'mark'=> 1,
             'status'=> 1,
@@ -322,30 +406,36 @@ class UserService extends BaseService
         $data = [
             'realname' => $param['realname'],
             'idcard' => $param['idcard'],
+            'idcard_check' => 2,
+            'update_time' => time(),
         ];
 
         if (isset($param['idcard_front_img']) && strpos($param['idcard_front_img'], "temp")) {
             $data['idcard_front_img'] = save_image($param['idcard_front_img'], 'member');
         } else {
-            $data['idcard_front_img'] = str_replace(IMG_URL, "", $param['idcard_front_img']);
+            $image = $param['idcard_front_img']? explode('/uploads', $param['idcard_front_img']) : [];
+            $data['idcard_front_img'] = isset($image[1])? $image[1] : '';
         }
 
         if (isset($param['idcard_back_img']) && strpos($param['idcard_back_img'], "temp")) {
             $data['idcard_back_img'] = save_image($param['idcard_back_img'], 'member');
         } else {
-            $data['idcard_back_img'] = str_replace(IMG_URL, "", $param['idcard_back_img']);
+            $image = $param['idcard_back_img']? explode('/uploads', $param['idcard_back_img']) : [];
+            $data['idcard_back_img'] = isset($image[1])? $image[1] : '';
         }
 
         if (isset($param['idcard_hand_img']) && strpos($param['idcard_hand_img'], "temp")) {
             $data['idcard_hand_img'] = save_image($param['idcard_hand_img'], 'member');
         } else {
-            $data['idcard_hand_img'] = str_replace(IMG_URL, "", $param['idcard_hand_img']);
+            $image = $param['idcard_hand_img']? explode('/uploads', $param['idcard_hand_img']) : [];
+            $data['idcard_hand_img'] = isset($image[1])? $image[1] : '';
         }
 
         if (isset($param['credit_score_img']) && strpos($param['credit_score_img'], "temp")) {
             $data['credit_score_img'] = save_image($param['credit_score_img'], 'member');
         } else {
-            $data['credit_score_img'] = str_replace(IMG_URL, "", $param['credit_score_img']);
+            $image = $param['credit_score_img']? explode('/uploads', $param['credit_score_img']) : [];
+            $data['credit_score_img'] = isset($image[1])? $image[1] : '';
         }
 
         $info = $this->memberModel->getInfo($userId);
@@ -353,11 +443,7 @@ class UserService extends BaseService
             return returnJson("抱歉您已完成认证,不需再提交资料", false);
         }
 
-        $result = $this->memberModel->edit($data);
-        if (!$result) {
-            return returnJson("提交认证资料失败", false);
-        }
-
+       $this->memberModel->where(['id'=> $userId])->update($data);
 
         return returnJson("提交认证资料成功,请耐心等候审核");
     }

+ 1 - 1
app/Services/Oapi/TradeOrderService.php

@@ -136,7 +136,7 @@ class TradeOrderService extends BaseService
         $ptOrderNo = isset($params['order_no']) ? trim($params['order_no']) : '';
         $notifyUrl = isset($params['notify_url']) ? trim($params['notify_url']) : '';
         $tradeType = $tradeType? $tradeType : 2;
-
+        var_dump($params);
         // 外汇平台需要注册登录
         if ($userId <= 0 && $tradeType == 2) {
             $this->error = '1013';

+ 18 - 11
app/Services/UsdtWalletService.php

@@ -876,7 +876,7 @@ class UsdtWalletService extends BaseService
 
         $cacheKey = "caches:wallet:balance:erc_{$address}";
         if ($data = RedisService::get($cacheKey) && $cache) {
-            return $data;
+            return floatval($data);
         }
 
         if (RedisService::get($cacheKey . '_lock') && $cache) {
@@ -884,13 +884,16 @@ class UsdtWalletService extends BaseService
         }
 
         try {
-            $api = new Etherscan($this->config['eth_api_key']);
-            $result = $api->balance($address);
+            $url = sprintf($this->apiUrls['erc_balance'],$address, $this->config['eth_api_key']);
+            $url = $this->config['eth_api_url'] . $url;
+            RedisService::set("caches:trades:erc:balance_{$address}", ['url' => $url, 'config' => $this->config], 600);
+            $result = curl_api($url);
+            $result = $result? json_decode($result, true) : [];
             $balance = isset($result['result']) ? floatval($result['result']) : 0.00;
-            $balance = $balance ? floatval($balance / pow(10, 18)) : '0.00';
+            $balance = $balance>0? floatval($balance / pow(10, 18)) : '0.00';
             RedisService::set($cacheKey, $balance, rand(5, 10));
             RedisService::set($cacheKey . '_lock', true, rand(10, 20));
-            return $balance;
+            return floatval($balance);
         } catch (\Exception $exception) {
             $this->error = $exception->getMessage();
             return false;
@@ -927,7 +930,7 @@ class UsdtWalletService extends BaseService
 
         $cacheKey = "caches:wallet:balance:erc_usdt_{$address}";
         if ($data = RedisService::get($cacheKey) && $cache) {
-            return $data;
+            return floatval($data);
         }
 
         if (RedisService::get($cacheKey . '_lock') && $cache) {
@@ -935,13 +938,17 @@ class UsdtWalletService extends BaseService
         }
 
         try {
-            $api = new Etherscan($this->config['eth_api_key']);
-            $result = $api->tokenBalance($this->config['erc_contract_address'], $address);
+
+            $url = sprintf($this->apiUrls['erc20_balance'], $this->config['erc_contract_address'],$address, $this->config['eth_api_key']);
+            $url = $this->config['eth_api_url'] . $url;
+            RedisService::set("caches:trades:erc:balance20_{$address}", ['url' => $url, 'config' => $this->config], 600);
+            $result = curl_api($url);
+            $result = $result? json_decode($result, true) : [];
             $balance = isset($result['result']) ? floatval($result['result']) : 0.00;
-            $balance = $balance ? floatval($balance / pow(10, 6)) : '0.00';
-            RedisService::set($cacheKey, $balance, rand(5, 10));
+            $balance = $balance>0? floatval($balance / pow(10, 6)) : '0.00';
+            RedisService::set($cacheKey, floatval($balance), rand(5, 10));
             RedisService::set($cacheKey . '_lock', true, rand(10, 20));
-            return $balance;
+            return floatval($balance);
         } catch (\Exception $exception) {
             $this->error = $exception->getMessage();
             return false;