Просмотр исходного кода

会员身份过期计划任务

gorden 4 месяцев назад
Родитель
Сommit
11f95d78c8
2 измененных файлов с 47 добавлено и 6 удалено
  1. 45 6
      app/admin/service/member/MemberService.php
  2. 2 0
      process/Task.php

+ 45 - 6
app/admin/service/member/MemberService.php

@@ -519,19 +519,19 @@ class MemberService
 
         if (!empty($member['member_partner_json'])) {
             $partnerJson = json_decode($member['member_partner_json'], true);
-            if (isset($partnerJson['duedate'])){
+            if (isset($partnerJson['duedate'])) {
                 $member['partner_info'] = [
-                    'surplus' => ceil((strtotime($partnerJson['duedate'].' 23:59:59') - time())/(3600*24)),
-                    'dates' => date('Y/m/d 00:00:00',strtotime($partnerJson['datetime'])).'-'.date('Y/m/d 23:59:59',strtotime($partnerJson['duedate']))
+                    'surplus' => ceil((strtotime($partnerJson['duedate'] . ' 23:59:59') - time()) / (3600 * 24)),
+                    'dates' => date('Y/m/d 00:00:00', strtotime($partnerJson['datetime'])) . '-' . date('Y/m/d 23:59:59', strtotime($partnerJson['duedate']))
                 ];
             }
         }
         if (!empty($member['member_referrer_json'])) {
             $referrerJson = json_decode($member['member_referrer_json'], true);
-            if (isset($referrerJson['duedate'])){
+            if (isset($referrerJson['duedate'])) {
                 $member['referrer_info'] = [
-                    'surplus' => ceil((strtotime($referrerJson['duedate'].' 23:59:59') - time())/(3600*24)),
-                    'dates' => date('Y/m/d 00:00:00',strtotime($referrerJson['datetime'])).'-'.date('Y/m/d 23:59:59',strtotime($referrerJson['duedate']))
+                    'surplus' => ceil((strtotime($referrerJson['duedate'] . ' 23:59:59') - time()) / (3600 * 24)),
+                    'dates' => date('Y/m/d 00:00:00', strtotime($referrerJson['datetime'])) . '-' . date('Y/m/d 23:59:59', strtotime($referrerJson['duedate']))
                 ];
             }
         }
@@ -1892,4 +1892,43 @@ class MemberService
             Log::info("会员【" . $member['member_id'] . '】康养推荐官身份已过期', $referrerJson);
         }
     }
+
+    /**
+     * @Desc 会员等级变更计划任务
+     * @Author Gorden
+     * @Date 2024/10/16 14:46
+     *
+     * @return void
+     */
+    public static function roleExpired()
+    {
+        $members = Member::where('join_member_role_id', '<>', '')->get()->toArray();
+        foreach ($members as $member) {
+            if (empty($member['member_role_begintime'])){
+                continue;
+            }
+            $endDateTime = date('Y-m-d 23:59:59', strtotime($member['member_role_begintime'] . ' +364 days'));
+            if (strtotime($endDateTime) > time()) {
+                continue;
+            }
+            $memberUpdate = [
+                'join_member_role_id' => '',
+                'member_role_begintime' => '',
+                'member_role_config_json'=>'[]'
+            ];
+            if (!empty($member['member_role_config_json'])) {
+                $roleConfigJson = json_decode($member['member_role_config_json'], true);
+                if (!empty($roleConfigJson['next'])) {
+                    $memberUpdate['join_member_role_id'] = $roleConfigJson['next'][0]['member_role_id'];
+                    $memberUpdate['member_role_begintime'] = $roleConfigJson['next'][0]['member_role_begintime'];
+                    unset($roleConfigJson['next'][0]);
+                    $memberUpdate['member_role_config_json'] = json_encode($roleConfigJson);
+                }
+            }
+
+            Member::where('member_id', $member['member_id'])->update($memberUpdate);
+
+            Log::info("会员过期", ['member_id' => $member['member_id'], 'role_id' => $member['join_member_role_id']]);
+        }
+    }
 }

+ 2 - 0
process/Task.php

@@ -41,6 +41,8 @@ class Task
             MemberService::partnerExpired();
             // 康养推荐官自动过期
             MemberService::referrerExpired();
+            // 会员身份过期
+            MemberService::roleExpired();
         });
 
         // 每天的2点执行,注意这里省略了秒位