Przeglądaj źródła

wesmiler 报恩寺项目

wesmiler 4 lat temu
rodzic
commit
ca3b0260ca

+ 1 - 1
app/Http/Controllers/Api/v1/GongdengController.php

@@ -61,7 +61,7 @@ class GongdengController extends BaseController
      * @return mixed
      */
     public function gdList(){
-        return $this->service->getList();
+        return $this->service->getGdList();
     }
 
     /**

+ 2 - 7
app/Http/Controllers/Api/v1/NotifyController.php

@@ -41,13 +41,8 @@ class NotifyController extends BaseController
         $sign = request()->headers->get('Wechatpay-Signature');
         $nonce = request()->headers->get('Wechatpay-Nonce');
         $timestamp = request()->headers->get('Wechatpay-Timestamp');
-       /* $sign = 'JnLbXF3HLEeAVuyVoyedezPV8+mRZ93+rmlbHOIm1I0+YKboBTUmVNwlV9KKOVPXPBQENxjHqT6fR5Qx326uVZryb\/JM+lTdvl3j+XVD0F5NJWZKGu7Zykf69yYMY3wbe1++em\/iiouZLg8\/5KRp7nvNMLL383gemOMRbsYN3+dZ++62qrmVZxo00fHlK+AjxXmV38KRCLtfLWfIsUXw9Zi8hXqHbf+s\/pBthV+Ouasw0Eit4f4E3aDjp4baFD70s\/RsbcqTn8UqxCurRNgm7kCtLphzStPnEUC1dfvIWZQIuJ+BaAqstj9y7RW5CdF7aZPqhXnPETvB8ZynSTYl3Q==';
-        $timestamp = '1626663968';
-        $nonce = 'yWa6xnLUDyqfVYhjTnWcafDuNzgoXMNa';*/
-        //$body = NotifyService::getBody($this->response);
         $body = file_get_contents('php://input');
         $signStr = "{$timestamp}\n{$nonce}\n{$body}\n";
-        var_dump($signStr);
         $id = isset($postData['id'])? '_'.$postData['id'] : '';
         RedisService::set('caches:payments:'.$scene.':result'.$id.'_'.date('YmdHis'), ['result'=> $postData,'sign'=> $sign,'date'=> date('Y-m-d H:i:s')], 7200);
         $postData = isset($postData['resource'])? $postData['resource'] : [];
@@ -64,7 +59,7 @@ class NotifyController extends BaseController
 
         $postData = WechatService::decryptNotifyData($postData);
         $postData = $postData? json_decode($postData, true) : [];
-        var_dump($postData);
+       // var_dump($postData);
         $outTradeNo = isset($postData['out_trade_no']) ? $postData['out_trade_no'] : '';
         if(empty($postData) || empty($outTradeNo)){
             return NotifyService::make()->rebackMsg('获取解密数据失败');
@@ -72,7 +67,7 @@ class NotifyController extends BaseController
 
         RedisService::set('caches:payments:'.$scene.':result'.$id.'_'.$outTradeNo, ['result'=> $postData], 7200);
         RedisService::set('caches:payments:'.$scene.':check'.$id.'_'.$outTradeNo, ['data'=> $postData,'signStr'=> $signStr,'sign'=> $sign], 3600);
-        if (WechatService::checkJsapiNotifyV3($signStr, $sign, $postData) == true) {
+        if (WechatService::checkJsapiNotifyV3($signStr, $sign, $postData)) {
             switch($scene){
                 case 'index': // 供灯订单
                     return NotifyService::make()->notifyGongdeng($postData, $outTradeNo);

+ 21 - 7
app/Services/DevicesService.php

@@ -13,6 +13,7 @@ namespace App\Services;
 
 use App\Models\DevicesModel;
 use App\Models\GongdengOrderModel;
+use Illuminate\Support\Facades\DB;
 
 /**
  * 供灯设备管理-服务类
@@ -91,7 +92,7 @@ class DevicesService extends BaseService
      * @return array
      */
     public function getDevice(){
-        $datas = $this->model::where(['status'=> 1])->orderRaw("rand()")->first();
+        $datas = $this->model::where(['status'=> 1])->orderBy(DB::raw('RAND()'))->first();
         $datas = $datas? $datas->toArray() : [];
         return $datas;
     }
@@ -113,17 +114,19 @@ class DevicesService extends BaseService
         $cacheKey = "caches:devices:nums_{$deviceCode}";
         $datas = RedisService::get($cacheKey);
         if($datas){
-            shuffle($datas);
             $datas = array_values($datas);
+            shuffle($datas);
             return $datas;
         }
 
-        $deviceNums = range($deviceInfo->start_num, $deviceInfo->end_num);
+        $deviceNums = range($deviceInfo['start_num'], $deviceInfo['end_num']);
         $datas = GongdengOrderModel::where(['status'=> 2, 'lamp_status'=> 2])->pluck('device_num');
         $datas = $datas? $datas->toArray() : [];
-        if($datas && $deviceNums){
-            $datas = array_diff($deviceNums, $datas);
+        if($deviceNums){
+            $datas = $datas? array_diff($deviceNums, $datas) : $deviceNums;
             if($datas){
+                $datas = array_values($datas);
+                shuffle($datas);
                 RedisService::set($cacheKey, $datas, rand(3,5));
             }
         }
@@ -131,14 +134,22 @@ class DevicesService extends BaseService
         return $datas;
     }
 
+    /**
+     * 亮灯处理
+     * @param $orderSn 订单号
+     * @return bool
+     */
     public function catchLamp($orderSn){
         if(empty($orderSn)){
             return false;
         }
 
+        // 验证是否已处理
+
         // 获取可用设备
         $errorKey = "caches:lamps:{$orderSn}";
         $deviceInfo = $this->getDevice();
+
         $deviceCode = isset($deviceInfo['code'])? $deviceInfo['code'] : '';
         $startNum = isset($deviceInfo['start_num'])? $deviceInfo['start_num'] : 0;
         $endNum = isset($deviceInfo['end_num'])? $deviceInfo['end_num'] : 0;
@@ -158,7 +169,7 @@ class DevicesService extends BaseService
 
         // 亮灯处理
         unset($deviceNums[0]);
-        RedisService::set("caches:devices:nums_{$deviceCode}", $deviceNums, rand(3,5));
+        RedisService::set("caches:devices:nums_{$deviceCode}", $deviceNums, rand(10,30));
         $colors = ['黄','红','绿','白'];
         shuffle($colors);
         $data = [
@@ -172,10 +183,13 @@ class DevicesService extends BaseService
         // 调用亮灯接口处理
         $apiUrl = ConfigService::make()->getConfigByCode('gd_api_url');
         RedisService::set($errorKey.':request', ['url'=> $apiUrl,'data'=> $data], 3600);
-        $result = httpRequest($apiUrl, $data);
+        $result = httpRequest($apiUrl, $data,'post','',3);
         RedisService::set($errorKey.':result', $result, 3600);
+        $code = isset($result['code'])? $result['code'] : '';
 
         // 更新灯状态
+        GongdengOrderModel::where('order_sn', $orderSn)->update(['lamp_status'=> 2,'device_num'=> $deviceLampNo,'params'=> json_encode($data, 256)]);
 
+        return true;
     }
 }

+ 37 - 0
app/Services/GongdengOrderService.php

@@ -48,6 +48,43 @@ class GongdengOrderService extends BaseService
         return parent::getList();
     }
 
+    public function getDdList(){
+        $params = request()->all();
+        $page = isset($params['pageSize']) ? intval($params['pageSize']) : PAGE;
+        $pageSize = isset($params['pageSize']) ? intval($params['pageSize']) : PERPAGE;
+
+        $dataList = $this->model::from('gongdeng_orders as a')
+            ->leftJoin('gongdeng_foxiang as gf', 'gf.id', '=', 'a.source_id')
+            ->leftJoin('member as m', 'a.user_id', '=', 'm.id')
+            ->where(['a.mark'=> 1,'a.status'=> 2])
+            ->select(['a.id', 'a.source_id', 'a.user_id', 'a.sf_name','a.qf_content', 'a.pay','a.is_hide', 'gf.name as fx_name', 'm.nickname', 'm.avatar', 'a.status','a.pay_at', 'a.update_time'])
+            ->orderBy('a.pay_at', 'desc')
+            ->orderBy('a.create_time', 'desc')
+            ->paginate($pageSize);
+
+        $dataList = $dataList ? $dataList->toArray() : [];
+        if ($dataList) {
+            foreach ($dataList['data'] as &$item) {
+                $item['avatar'] = $item['avatar'] ? get_image_url($item['avatar']) : '';
+                $item['create_time'] = $item['create_time'] ? datetime($item['create_time'],'Y-m-d H:i:s') : '';
+                $time = $item['pay_at']? $item['pay_at'] : $item['create_time'];
+                $item['time_text'] = $time? format_time(strtotime($time)) : '刚刚';
+                if($item['is_hide']){
+                    $item['nickname'] = formatName($item['nickname']);
+                }
+            }
+            unset($item);
+        }
+
+        return [
+            'code' => 0,
+            'success'=> true,
+            'msg' => '操作成功',
+            'count' => isset($dataList['total']) ? $dataList['total'] : 0,
+            'data' => isset($dataList['data']) ? $dataList['data'] : 0,
+        ];
+    }
+
     /**
      * 供灯下单
      */

+ 4 - 6
app/Services/NotifyService.php

@@ -74,15 +74,13 @@ class NotifyService extends BaseService
         }
 
         // 订单用户
-        $memberInfo = MemberModel::where(['id'=> $userId])->select(['id','openid','nickname','coupon','status'])->first();
+        $memberInfo = MemberModel::where(['id'=> $userId])->select(['id','openid','nickname','balance','coupon','status'])->first();
         if(!$memberInfo){
-            NotifyService::rebackOk();
             return NotifyService::rebackMsg('订单用户不存在', 'success');
         }
 
         // 验证订单状态是否可处理
         if ($orderStatus != 1) {
-            NotifyService::rebackOk();
             return NotifyService::rebackMsg('订单已处理', 'success');
         }
 
@@ -90,7 +88,7 @@ class NotifyService extends BaseService
         $payDebug = config('weixin.payDebug');
         $amount = isset($notifyData['amount'])? $notifyData['amount'] : [];
         $payMoney = isset($amount['total']) ? moneyFormat($amount['total']) : 0;
-        $orderMoney = isset($orderInfo['money']) ? moneyFormat($orderInfo['money']) : 0.00;
+        $orderMoney = isset($orderInfo['total']) ? moneyFormat($orderInfo['total']) : 0.00;
         $orderAmount = moneyFormat($orderMoney);
         if (!$payDebug && intval($orderAmount * 100) != intval($payMoney)) {
             RedisService::set($errorKey.':error_money',['notify'=> $notifyData, 'error'=> '实付金额与订单金额不一致','order'=> $orderInfo
@@ -100,7 +98,7 @@ class NotifyService extends BaseService
 
         // 更新订单数据
         DB::beginTransaction();
-        if(!$this->model::where(['order_sn'=> $outTradeNo])->update(['status'=> 2,'pay_money'=> moneyFormat($payMoney/100),'remark'=> '已支付'])){
+        if(!$this->model::where(['order_sn'=> $outTradeNo])->update(['status'=> 2,'pay_at'=> date('Y-m-d H:i:s'),'pay_money'=> moneyFormat($payMoney/100),'remark'=> '已支付'])){
             RedisService::set($errorKey.':error_update',['notify'=> $notifyData, 'error'=> '更新订单信息失败','order'=> $orderInfo
             ], 3600);
             DB::rollBack();
@@ -115,7 +113,7 @@ class NotifyService extends BaseService
             'pay_type'=> 2,
             'money'=> $payMoney,
             'change_type'=> 2,
-            'balance'=> $memberInfo->balance,
+            'balance'=> $memberInfo->balance? $memberInfo->balance : 0,
             'create_time'=> time(),
             'remark'=> '供灯订单支付',
             'status'=> 1