Browse Source

储值卡统计

gorden 3 months ago
parent
commit
1e271934e5

+ 6 - 6
app/admin/controller/finance/CardController.php

@@ -61,9 +61,9 @@ class CardController
                     ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.used_datetime'))) as SIGNED) <= {$times[1]}")
                     ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.used_datetime' )))),'%Y-%m-%d') AS group_by_time");
             })->when($status == 'DONE', function ($query) use ($times) {
-                $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.done_datetime'))) as SIGNED) >= {$times[0]}")
-                    ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.done_datetime'))) as SIGNED) <= {$times[1]}")
-                    ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.done_datetime' )))),'%Y-%m-%d') AS group_by_time");
+                $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.done_time'))) as SIGNED) >= {$times[0]}")
+                    ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.done_time'))) as SIGNED) <= {$times[1]}")
+                    ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.done_time' )))),'%Y-%m-%d') AS group_by_time");
             })->when($status == 'EXPIRED', function ($query) use ($times) {
                 $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.expired_datetime'))) as SIGNED) >= {$times[0]}")
                     ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.expired_datetime'))) as SIGNED) <= {$times[1]}")
@@ -190,9 +190,9 @@ class CardController
                     ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.used_datetime'))) as SIGNED) <= {$times[1]}")
                     ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.used_datetime' )))),'%Y-%m-%d') AS group_by_time");
             })->when($status == 'DONE', function ($query) use ($times) {
-                $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.done_datetime'))) as SIGNED) >= {$times[0]}")
-                    ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.done_datetime'))) as SIGNED) <= {$times[1]}")
-                    ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.done_datetime' )))),'%Y-%m-%d') AS group_by_time");
+                $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.done_time'))) as SIGNED) >= {$times[0]}")
+                    ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.done_time'))) as SIGNED) <= {$times[1]}")
+                    ->selectRaw("DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP( JSON_UNQUOTE( JSON_EXTRACT( card_extend_json, '$.done_time' )))),'%Y-%m-%d') AS group_by_time");
             })->when($status == 'EXPIRED', function ($query) use ($times) {
                 $query->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.expired_datetime'))) as SIGNED) >= {$times[0]}")
                     ->whereRaw("CAST(UNIX_TIMESTAMP(JSON_UNQUOTE(JSON_EXTRACT(card_extend_json,'$.expired_datetime'))) as SIGNED) <= {$times[1]}")

+ 24 - 19
app/admin/controller/order/WholeController.php

@@ -3627,24 +3627,6 @@ class WholeController extends Curd
 
         Db::beginTransaction();
         try {
-            if (!empty($params['card_id'])) {
-                $card = Card::where('card_id', $params['card_id'])->first();
-                if (empty($card)) {
-                    throw new BusinessException("储值卡不存在");
-                }
-                if ($card->card_status != 'WAITING' || $card->is_issue != 'Y') {
-                    throw new BusinessException("储值卡状态异常");
-                }
-                $card->card_status = 'PENDING';
-                // 售卖时间
-                $cardExtendJson = [];
-                if (!empty($card->card_extend_json)) {
-                    $cardExtendJson = json_decode($card->card_extend_json, true);
-                }
-                $cardExtendJson['buy-datetime'] = date('Y-m-d H:i:s');
-                $card->card_extend_json = json_encode($cardExtendJson);
-                $card->save();
-            }
             $expressExtendJson = [];
             if ($params['express_type'] == '自提') {
                 $model = OrderExpress::where('join_express_order_id', $params['order_id'])->first();
@@ -3698,7 +3680,6 @@ class WholeController extends Curd
                     $model = new OrderExpress();
                 }
             }
-
             // 该订单状态
             $orderData['order_update_user_id'] = JwtToken::getCurrentId();
             $orderData['order_updatetimes'] = time();
@@ -3706,6 +3687,30 @@ class WholeController extends Curd
             // 该订单Sheet状态
             OrderSheet::where('join_sheet_order_id', $request->post('order_id'))->update($orderSheetData);
 
+            // 卡发货
+            if (!empty($params['card_id'])) {
+                $card = Card::where('card_id', $params['card_id'])->first();
+                if (empty($card)) {
+                    throw new BusinessException("储值卡不存在");
+                }
+                if ($card->card_status != 'WAITING' || $card->is_issue != 'Y') {
+                    throw new BusinessException("储值卡状态异常");
+                }
+                $order = Order::where('order_id', $request->post('order_id'))->first();
+                $card->card_status = 'PENDING';
+                // 售卖时间
+                $cardExtendJson = [];
+                if (!empty($card->card_extend_json)) {
+                    $cardExtendJson = json_decode($card->card_extend_json, true);
+                }
+                //{"buy_member": "", "buy_datetime": "", "buy_order_id": ""}
+                $cardExtendJson['buy_member'] = $order->join_order_member_id ?? '';
+                $cardExtendJson['buy_datetime'] = date('Y-m-d H:i:s');
+                $cardExtendJson['buy_order_id'] = $order->order_id ?? '';
+                $card->card_extend_json = json_encode($cardExtendJson);
+                $card->save();
+            }
+
             // 入配送记录表            
             $model->join_express_order_id = $params['order_id'];
             if (isset($params['order_express_goods'])) {

+ 34 - 0
app/admin/service/coupon/CardService.php

@@ -2,8 +2,42 @@
 
 namespace app\admin\service\coupon;
 
+use app\model\Card;
+use app\model\MemberAccount;
+use support\Log;
+
 class CardService
 {
+    public static function checkExpired()
+    {
+        $unixTime = time();
+        $cards = Card::whereRaw("CAST(UNIX_TIMESTAMP(card_deadline_datetime) as SIGNED) <= {$unixTime}")
+            ->whereRaw("CAST(UNIX_TIMESTAMP(card_deadline_datetime) as SIGNED) > 0")
+            ->whereIn('card_status', ['INIT', 'WAITING', 'PENDING', 'USED'])
+            ->select('card_id')
+            ->get()
+            ->toArray();
+        foreach ($cards as $card) {
+            // 检查是否关联会员账户
+            $account = MemberAccount::where('member_account_nbr', $card['card_id'])->first();
+            if (!empty($account) && $account->member_account_status == 'ACTIVED') {
+                $account->member_account_status = 'EXPIRED';
+                $account->save();
+            }
+            $cardNow = Card::where('card_id', $card['card_id'])->first();
+            $cardNow->card_status = 'EXPIRED';
+            $cardExtendJson = [];
+            if (!empty($cardNow->card_extend_json)) {
+                $cardExtendJson = json_decode($cardNow->card_extend_json,true);
+            }
+            $cardExtendJson['expired_datetime'] = date('Y-m-d H:i:s');
+            $cardNow->card_extend_json = json_encode($cardExtendJson);
+            $cardNow->save();
+
+            Log::info("储值卡:【".$card['card_id'].'】已过期');
+        }
+    }
+
     public static $status = [
         'INIT' => '待分配',
         'WAITING' => '已分配,待售',

+ 4 - 0
process/Task.php

@@ -4,6 +4,7 @@ namespace process;
 
 use app\admin\controller\notify\RechargeController;
 use app\admin\service\client\MessageService;
+use app\admin\service\coupon\CardService;
 use app\admin\service\coupon\CouponService;
 use app\admin\service\goods\GoodsService;
 use app\admin\service\member\MemberService;
@@ -33,6 +34,9 @@ class Task
 
             // 优惠券自动过期
             CouponService::checkCouponExpired();
+
+            // 储值卡自动过期
+            CardService::checkExpired();
         });
 
         // 每天的0点1分执行,注意这里省略了秒位