Przeglądaj źródła

Wesmiler OTC 提交更新 0729

APPLE 3 lat temu
rodzic
commit
2b70c0880c

+ 35 - 2
app/Console/Commands/Socket.php

@@ -90,7 +90,14 @@ class Socket extends Command
     public function open($ws, $request)
     {
         echo "连接成功:" . $request->fd . "\n";
-        $this->ws->push($request->fd, json_encode(['message' => '连接成功'], 256));
+        $fds = RedisService::get('chats:fds');
+        if($fds){
+            $fds[] = $request->fd;
+        }else{
+            $fds = [$request->fd];
+        }
+        RedisService::set('chats:fds',$fds, 86400);
+        $this->ws->push($request->fd, json_encode(['message' => '连接成功:'.$request->fd], 256));
     }
 
     /**
@@ -110,7 +117,7 @@ class Socket extends Command
             $data = $frame->data ? json_decode($frame->data, true) : [];
 
             $op = isset($data['op']) ? $data['op'] : '';
-            $userId = isset($data['from_uid']) ? intval($data['from_uid']) : 0;
+            $userId = isset($data['from_uid']) ? trim($data['from_uid']) : 0;
             $chatKey = isset($data['chat_key']) ? trim($data['chat_key']) : '';
             $toUid = isset($data['to_uid']) ? intval($data['to_uid']) : 0;
             if ($userId && $frame->fd) {
@@ -164,6 +171,16 @@ class Socket extends Command
                         }
 
                         break;
+                    case 'order':
+                        $toBindData = RedisService::get("chats:bind:od_{$toUid}");
+                        $toFd = isset($toBindData['fd']) ? $toBindData['fd'] : 0;
+                        if($toFd){
+                            $this->sendMsg($toFd, $frame->data);
+                        }
+                        $data['fd'] = $frame->fd;
+                        $data['to_fd'] = $toFd;
+                        $this->ws->push($frame->fd, json_encode($data, 256));
+                        break;
                     default:
                         $this->ws->push($frame->fd, json_encode(['message' =>   $frame->data], 256));
                         break;
@@ -188,6 +205,22 @@ class Socket extends Command
     }
 
     /**
+     * 发送消息
+     * @param $fd
+     * @param $data
+     * @return false
+     */
+    public function sendMsg($fd, $data)
+    {
+        try {
+            $this->ws->push($fd, $data);
+        } catch (\Exception $exception){
+            return false;
+        }
+
+    }
+
+    /**
      * 关闭连接
      * @param $ws
      * @param $fd

+ 10 - 0
app/Http/Controllers/Admin/ChatController.php

@@ -77,4 +77,14 @@ class ChatController extends Backend
         return $message;
     }
 
+    /**
+     * 订单通知
+     * @return array
+     */
+    public function notify()
+    {
+        $info = ChatMessageService::make()->getOrderNotify($this->userInfo['user_id']);
+        return returnJson(1002,true, $info);
+    }
+
 }

+ 1 - 0
app/Http/Controllers/Admin/LoginController.php

@@ -13,6 +13,7 @@ namespace App\Http\Controllers\Admin;
 
 use App\Models\ActionLogModel;
 use App\Services\Common\LoginService;
+use App\Services\RedisService;
 
 /**
  * 登录控制器

+ 7 - 0
app/Http/Controllers/Api/LoginController.php

@@ -57,6 +57,13 @@ class LoginController extends webApp
             return message($params, false);
         }
 
+        $headers = request()->header();
+        $host = isset($headers['host'])? $headers['host'] : '';
+        $referer = isset($headers['referer'])? $headers['referer'] : $host;
+        $referer = $referer? preg_replace("/^http:\/\/|https:\/\//",'', $referer) : '';
+
+        var_dump($referer);
+
         if($params['code'] != 123456 && !$this->checkCode($params['username'], $params['code'], 'reg')){
             return message($this->error, false);
         }

+ 2 - 0
app/Http/Controllers/Api/webApp.php

@@ -79,6 +79,8 @@ class webApp extends BaseController
                 $this->userInfo = $userInfo;
             }
 
+            // 在线状态更新
+            RedisService::set("stores:online:user_{$userId}", $this->userInfo, 3600);
             $locale = RedisService::get("stores:locale:lang_{$userId}");
             $locale = $locale? $locale : config('app.locale','zh-cn');
             if($locale){

+ 1 - 1
app/Models/BaseModel.php

@@ -107,7 +107,7 @@ class BaseModel extends CacheModel
             // 创建时间
             $data['create_time'] = time();
             // 置空更新时间
-            unset($data['update_time']);
+            //unset($data['update_time']);
             if (isset($data['update_user']) && empty($data['create_user'])) {
                 $data['create_user'] = $this->userId;
             }

+ 5 - 2
app/Models/MemberModel.php

@@ -11,6 +11,7 @@
 
 namespace App\Models;
 
+use App\Services\RedisService;
 use App\Services\UsdtWalletService;
 
 /**
@@ -87,8 +88,10 @@ 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['is_online'] = 2;
+            $online = RedisService::get("stores:online:user_".$info['id']);
+            if($info['login_time'] > time() - 3600 || $online){
+                $info['is_online'] = 1;
             }
 
             $info['create_time_text'] = datetime(strtotime($info['create_time']));

+ 2 - 3
app/Services/Api/MemberService.php

@@ -86,7 +86,7 @@ class MemberService extends BaseService
             $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['cny_num'] = $info['usdt_num'] && $tradePrice > 0 ? moneyFormat($info['usdt_num'] * $tradePrice, 4) : '0.0000';
             $info['is_collection'] = MemberPaymentService::make()->checkHasByUser($info['id']);
             $info['set_trade_password'] = $info['trade_password'] ? 1 : 0;
             $info['set_trade_password'] = $info['trade_password'] == $info['password'] ? 2 : $info['set_trade_password'];
@@ -121,7 +121,7 @@ class MemberService extends BaseService
         $password = isset($params['password']) ? trim($params['password']) : '';
         $userType = isset($params['user_type']) ? intval($params['user_type']) : 1;
         if (!checkPassword($password)) {
-            $this->error = '2007';
+            $this->error = '2030';
             return false;
         }
 
@@ -129,7 +129,6 @@ class MemberService extends BaseService
             'user_type' => $userType ? $userType : 1,
             'username' => $username,
             'password' => get_password($password . md5($password . 'otc')),
-            'trade_password' => get_password($password . md5($password . 'otc')),
             'mobile' => isPhone($username) ? $username : '',
             'status' => 1,
             'mark' => 1,

+ 30 - 1
app/Services/ChatMessageService.php

@@ -371,7 +371,36 @@ class ChatMessageService extends BaseService
      */
     public function pushMessage($data)
     {
-
         return $this->model->edit($data);
     }
+
+    /**
+     * 获取最新
+     * @param $businessId
+     * @return array
+     */
+    public function getOrderNotify($businessId)
+    {
+        $cacheKey = "caches:orders:notify:{$businessId}";
+        $info = RedisService::get($cacheKey);
+        if($info){
+            return $info;
+        }
+
+        $info = $this->model->from('chat_message as a')
+            ->leftJoin('trade_order as b','b.order_no','=','a.order_no')
+            ->where('a.create_time','>=', time() - 10)
+            ->where(['a.to_uid'=> $businessId,'a.is_read'=>2,'a.mark'=>1,'a.status'=>1])
+            ->whereIn('a.type',[2])
+            ->select(['a.id','a.type','a.from_uid','a.to_uid','a.order_no','a.message','b.type as order_type'])
+            ->orderBy('a.create_time','desc')
+            ->first();
+        $info = $info? $info->toArray() : [];
+        if($info){
+            $this->model->where(['id'=> $info['id']])->update(['is_read'=>1,'update_time'=>time()]);
+            RedisService::set($cacheKey, $info, rand(3,5));
+        }
+
+        return $info? $info : [];
+    }
 }

+ 3 - 3
app/Services/Common/ArticleService.php

@@ -76,7 +76,7 @@ class ArticleService extends BaseService
 
                 $timeType = isset($params['time_type'])? $params['time_type'] : 0;
                 if($timeType == 1){
-                    $query->where('a.post_time','>=', time());
+                    $query->where('a.post_time','<=', time());
                 }
 
             })
@@ -165,9 +165,9 @@ class ArticleService extends BaseService
         $attrType = isset($data['attr_type'])? $data['attr_type'] : 0;
         $id = isset($data['id'])? $data['id'] : 0;
         if($attrType==2){
-            if($id && $this->model->where(['type'=> $type])->whereNotIn('id',[$id])->value('id')){
+            if($id && $this->model->where(['type'=> $type,'mark'=> 1])->whereNotIn('id',[$id])->value('id')){
                 return returnJson('已经存在该分类单页文章', false);
-            }else if($id<=0 && $this->model->where(['type'=> $type,'attr_type'=>2])->value('id')){
+            }else if($id<=0 && $this->model->where(['type'=> $type,'attr_type'=>2,'mark'=> 1])->value('id')){
                 return returnJson('已经存在该分类单页文章', false);
             }
         }

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

@@ -63,7 +63,8 @@ class MemberPaymentService extends BaseService
             $query->where(['user_id' => $userId,'type'=> $type,'mark'=>1])->where('status','>',0);
             })
             ->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('is_default','asc')
+            ->orderBy('status','asc')
             ->orderBy('id','desc')
             ->paginate($pageSize>0? $pageSize : 9999999);
         $list = $list? $list->toArray() :[];

+ 97 - 15
app/Services/Common/TradeOrderService.php

@@ -113,6 +113,11 @@ class TradeOrderService extends BaseService
                     $query->where('a.create_time', '<', strtotime($end));
                 }
 
+                $refundStatus = isset($params['refund_status']) ? intval($params['refund_status']) : 0;
+                if ($refundStatus > 0) {
+                    $query->where(['a.refund_status' => $refundStatus]);
+                }
+
                 $exceptionStatus = isset($params['exception_status']) ? intval($params['exception_status']) : 0;
                 if ($exceptionStatus > 0) {
                     $query->where(['a.exception_status' => $exceptionStatus]);
@@ -149,7 +154,7 @@ class TradeOrderService extends BaseService
                 $item['create_time_text'] = $item['create_time'] ? datetime($item['create_time'], 'Y-m-d H:i:s') : '';
                 $item['update_time_text'] = $item['update_time'] ? datetime($item['update_time'], 'Y-m-d H:i:s') : '';
                 $item['time_text'] = $item['create_time'] ? datetime($item['create_time'], 'H:i') : '';
-                $item['utime_text'] = $item['update_time'] ? datetime($item['update_time'], 'm-d H:i') : '';
+                $item['utime_text'] = $item['update_time']>0? datetime($item['update_time'], 'm-d H:i') : datetime($item['create_time'], 'm-d H:i');
                 $item['pay_time_text'] = $item['pay_time'] ? datetime($item['pay_time'], 'Y-m-d H:i') : '';
                 $item['username_text'] = $item['username'] ? format_account($item['username']) : '';
                 $item['c_username_text'] = $item['c_username'] ? format_account($item['c_username']) : '';
@@ -163,7 +168,7 @@ class TradeOrderService extends BaseService
                 $item['paymentData']['qrcode'] = isset($item['paymentData']['qrcode']) && $item['paymentData']['qrcode'] ? get_image_url($item['paymentData']['qrcode']) : '';
 
                 $overTime = max(0, intval(strtotime($item['create_time'])) + $overTime * 60 - time());
-                $item['overtime_text'] = in_array($item['status'], [1, 2]) && $overTime ? date('H:i', $overTime) : '';
+                $item['overtime_text'] = in_array($item['status'], [1, 2]) && $overTime ? date('i:s', $overTime) : '';
                 $payType = isset($item['pay_type']) ? $item['pay_type'] : 0;
                 $item['pay_name'] = isset($payTypes[$payType]) ? $payTypes[$payType] : '其他';
                 $item['chat_key'] = getChatKey($item['user_id'], $item['business_id']);
@@ -507,7 +512,7 @@ class TradeOrderService extends BaseService
      */
     public function checkOrderNoCatch($userId, $type = 1)
     {
-        return $this->model->where(['user_id' => $userId, 'type' => $type, 'mark' => 1])->whereIn('status', [1, 2, 5, 7])->count('id');
+        return $this->model->where(['user_id' => $userId, 'type' => $type, 'mark' => 1])->whereIn('status', [1, 2, 7])->count('id');
     }
 
     /**
@@ -614,6 +619,14 @@ class TradeOrderService extends BaseService
             return false;
         }
 
+        if($payment['type'] == 1){
+            $idcardData['bank_name'] = isset($payment['bank_name'])? $payment['bank_name'] : '';
+            $idcardData['bank_card'] = isset($payment['bank_card'])? $payment['bank_card'] : '';
+        }else{
+            $idcardData['bank_name'] = $payment['type']==2? '微信':'支付宝';
+            $idcardData['bank_card'] = isset($payment['account'])? $payment['account'] : '';
+        }
+
         $this->model->startTrans();
         $orderNo = get_order_num('OT');
         $data = [
@@ -690,7 +703,8 @@ class TradeOrderService extends BaseService
         }
 
         $this->model->commit();
-        return $order;
+        $data['id'] = $order;
+        return $data;
     }
 
     /**
@@ -796,6 +810,14 @@ class TradeOrderService extends BaseService
             'account' => $paymentInfo['account'],
         ];
 
+        if($paymentData['type'] == 1){
+            $idcardData['bank_name'] = isset($paymentInfo['bank_name'])? $paymentInfo['bank_name'] : '';
+            $idcardData['bank_card'] = isset($paymentInfo['bank_card'])? $paymentInfo['bank_card'] : '';
+        }else{
+            $idcardData['bank_name'] = $paymentData['type']==2? '微信':'支付宝';
+            $idcardData['bank_card'] = isset($paymentInfo['account'])? $paymentInfo['account'] : '';
+        }
+
         $orderNo = get_order_num('OT');
         $data = [
             'user_id' => $userId,
@@ -873,7 +895,8 @@ class TradeOrderService extends BaseService
         }
 
         $this->model->commit();
-        return $order;
+        $data['id'] = $order;
+        return $data;
     }
 
     /**
@@ -1125,7 +1148,7 @@ class TradeOrderService extends BaseService
             $where['type'] = $type;
         }
         $orderInfo = $this->model->where($where)
-            ->select(['id', 'user_id','api_id','pt_order_no', 'order_no', 'business_id', 'type','contact_type','usdt_address','notify_url', 'trade_type', 'num', 'total','pay_time', 'status'])
+            ->select(['id', 'user_id','api_id','pt_order_no', 'order_no', 'business_id', 'type','contact_type','is_cancel','usdt_address','notify_url', 'trade_type', 'num', 'total','pay_time', 'status'])
             ->first();
 
         $userId = isset($orderInfo['user_id']) ? $orderInfo['user_id'] : 0;
@@ -1142,10 +1165,10 @@ class TradeOrderService extends BaseService
             return false;
         }
 
-        if ($status == 5 && $orderInfo['status'] == 8 && $businessId > 0) {
-            $this->error = '3026';
-            return false;
-        }
+//        if ($status == 5 && $orderInfo['status'] == 8 && $businessId > 0) {
+//            $this->error = '3026';
+//            return false;
+//        }
 
         if ($status == 5 && $businessId <= 0 && $orderInfo['status'] == 4) {
             $this->error = '3026';
@@ -1259,6 +1282,9 @@ class TradeOrderService extends BaseService
         if (isset($params['exception_status'])) {
             $updateData['exception_status'] = intval($params['exception_status']);
         }
+        if (isset($params['refund_money'])) {
+            $updateData['refund_money'] = intval($params['refund_money']);
+        }
 
         if (!$this->model->where($where)->update($updateData)) {
             $this->model->rollBack();
@@ -1267,7 +1293,58 @@ class TradeOrderService extends BaseService
         }
 
         // 交易处理,如果是确认状态
-        if ($orderInfo['num'] > 0 && $status == 4 && $userId > 0 && $tradeType == 1) {
+        $exceptionType = isset($params['exception_type'])? $params['exception_type'] : 0;
+        $exceptionStatus = isset($params['exception_status'])? $params['exception_status'] : 0;
+        $refundStatus = isset($params['refund_status'])? $params['refund_status'] : 0;
+        $isCancel = isset($orderInfo['is_cancel']) ? $orderInfo['is_cancel'] : 0;
+        if ($orderInfo['num'] > 0 && ($status == 4 || ($exceptionStatus==2 && $refundStatus==0)) && $userId > 0 && $tradeType == 1) {
+
+            // 若订单被系统取消过,重新扣除
+            if($isCancel == 1){
+                // 商家
+                $info = $this->memberModel->where(['id' => $orderInfo['business_id'], 'status' => 1, 'mark' => 1])->select(['id', 'username', 'usdt_num', 'user_type'])->first();
+                if (empty($info)) {
+                    $this->model->rollBack();
+                    $this->error = '3048';
+                    return false;
+                }
+
+                if($info['usdt_num'] < $orderInfo['num']){
+                    $this->model->rollBack();
+                    $this->error = '3004';
+                    return false;
+                }
+
+                // 商家重新扣除币
+                if (!$this->memberModel->where(['id' => $orderInfo['business_id'], 'mark' => 1])->decrement('usdt_num', $orderInfo['num'])) {
+                    $this->model->rollBack();
+                    $this->error = '3047';
+                    return false;
+                }
+
+                // 明细处理
+                $data = [
+                    'order_no' => $orderInfo['order_no'],
+                    'user_id' => $orderInfo['business_id'],
+                    'type' => 2,
+                    'pay_type' => 1,
+                    'change_type' => 2,
+                    'num' => $orderInfo['num'],
+                    'total' => $orderInfo['total'],
+                    'balance' => floatval($info['usdt_num'] - $orderInfo['num']),
+                    'create_time' => time(),
+                    'update_time' => time(),
+                    'remark' => '交易员卖出重新扣除',
+                    'status' => 1,
+                    'mark' => 1,
+                ];
+
+                if (!$this->capitalModel->edit($data)) {
+                    $this->error = '3014';
+                    $this->model->rollBack();
+                    return false;
+                }
+            }
 
             $info = $this->memberModel->where(['id' => $userId, 'status' => 1, 'mark' => 1])->select(['id', 'username', 'usdt_num', 'user_type'])->first();
             if (empty($info)) {
@@ -1330,7 +1407,7 @@ class TradeOrderService extends BaseService
             }
         }
         // 外来平台需要出币和回调通知
-        else if(in_array($tradeType, [2,3]) && $status == 4){
+        else if(in_array($tradeType, [2,3]) && ($status == 4 || ($refundStatus==0 && $exceptionStatus==2))){
             $usdtAddress = isset($orderInfo['usdt_address'])? $orderInfo['usdt_address'] : '';
             $contactType = isset($orderInfo['contact_type'])? $orderInfo['contact_type'] : '';
             $notifyUrl = isset($orderInfo['notify_url'])? $orderInfo['notify_url'] : '';
@@ -1594,7 +1671,7 @@ class TradeOrderService extends BaseService
         $this->model->startTrans();
         // 订单状态更新,或异常处理
 
-        $updateData = ['status' => $status, 'exception_catch_user' => $catchUid, 'update_time' => time(), 'exception_remark' => '交易员取消'];
+        $updateData = ['status' => $status, 'exception_catch_user' => $catchUid, 'update_time' => time(), 'exception_remark' => $businessId? '交易员取消':'客服取消'];
 
         // 异常处理数据
         if (isset($params['exception_type'])) {
@@ -1897,7 +1974,7 @@ class TradeOrderService extends BaseService
             }
 
             $this->model->startTrans();
-            $updateData = ['status' => 8, 'update_time' => time(), 'catch_at' => time(),'exception_status'=> 0, 'exception_remark' => '系统取消'];
+            $updateData = ['status' => 8, 'update_time' => time(),'is_cancel'=>1, 'catch_at' => time(),'exception_status'=> 0, 'exception_remark' => '系统取消'];
             if (!$this->model->where(['id' => $orderInfo['id']])->update($updateData)) {
                 $this->model->rollBack();
                 $this->error = '3043';
@@ -2030,6 +2107,8 @@ class TradeOrderService extends BaseService
         return false;
     }
 
+
+
     /**
      * 派单交易完成通知
      * @return int[]
@@ -2045,7 +2124,10 @@ class TradeOrderService extends BaseService
             ->leftJoin('member as c','c.id','=','a.user_id')
             ->where(function ($query) {
             // 已更新为超时的订单
-            $query->where(['a.mark' => 1, 'a.status' => 4])
+            $query->where(['a.mark' => 1])
+                ->where(function($query){
+                    $query->where('a.status',4)->orWhere(['a.status'=>5,'a.exception_status'=>2,'a.refund_status'=>0]);
+                })
                 ->where('a.notify_time', '<=', time() - 3700);
             })
             ->where('a.api_id','>', 0)

+ 2 - 2
app/Services/EmailService.php

@@ -96,7 +96,7 @@ class EmailService extends BaseService
                 return false;
             }
 
-            $title = isset($this->config['mail_title_' . $scene]['value']) && $this->config['mail_title_' . $scene]['value'] ? $this->config['mail_title_' . $scene]['value'] : "UTC网站注册邮箱验证码";
+            $title = isset($this->config['mail_title_' . $scene]['value']) && $this->config['mail_title_' . $scene]['value'] ? $this->config['mail_title_' . $scene]['value'] : "OTC168网站注册邮箱验证码";
             $template = isset($this->config['mail_template_' . $scene]['value']) && $this->config['mail_template_' . $scene]['value'] ? $this->config['mail_template_' . $scene]['value'] : "您的验证码是:{code},5分钟有效期!!!";
 
             // 生成验证码
@@ -106,7 +106,7 @@ class EmailService extends BaseService
             // 上锁
             RedisService::set($cacheKey.'_lock', ['email'=> $email, 'code'=> $code, 'date'=> date('Y-m-d H:i:s')], rand(5, 10));
             Mail::send('emails.index',['title'=> $title,'template'=> $template], function($mail) use($email, $title){
-                $mail->from($this->config['username'],'UTC'); // 发送者
+                $mail->from($this->config['username'],'OTC168'); // 发送者
                 $mail->subject($title);  // 标题
                 $mail->to($email);  // 接受者
             });

+ 1 - 1
app/Services/SmsService.php

@@ -72,7 +72,7 @@ class SmsService extends BaseService
 
             // 生成验证码
             $code = rand(100000, 999999);
-            $template = isset($this->config['sms_template_' . $scene]['value']) && $this->config['sms_template_' . $scene]['value'] ? $this->config['sms_template_' . $scene]['value'] : '您的验证码是:{code}';
+            $template = isset($this->config['sms_template_' . $scene]['value']) && $this->config['sms_template_' . $scene]['value'] ? $this->config['sms_template_' . $scene]['value'] : '【鱼豆小帮手】您的验证码是:{code}';
             $template = str_replace('{code}', $code, $template);
 
             $data = [