Bläddra i källkod

修改 draw controller

maa3606 2 år sedan
förälder
incheckning
5f8699cd60
3 ändrade filer med 61 tillägg och 33 borttagningar
  1. 42 0
      app/Http/Controllers/DrawController.php
  2. 17 25
      resources/js/src/views/lottery/Draw.vue
  3. 2 8
      routes/api.php

+ 42 - 0
app/Http/Controllers/DrawController.php

@@ -6,6 +6,8 @@ use Illuminate\Http\Request;
 
 use App\Models\CheckIn;
 use App\Models\Prize;
+use App\Models\Recipients;
+use App\Models\Activity;
 
 class DrawController extends Controller
 {
@@ -17,4 +19,44 @@ class DrawController extends Controller
             ->get()
             ->random($request->number);
     }
+
+    public function draw(Request $request)
+    {
+        $activity = Activity::where('id', $request->activity_id)->first();
+        $users = CheckIn::where('check_ins.activity_id', $request->activity_id)
+            ->where('is_checked_in', 'true')
+            ->whereTime('check_ins.updated_at', '<=', $activity->deadline)
+            ->whereIn('region', $request->region)
+            ->get()
+            ->random($request->number);
+
+        $prize = Prize::where('id', $request->prize_id)->first();
+        if ($prize->count >= $request->number) {
+            $prize->update([
+                'count' => $prize->count - $request->number,
+                'updated_at' => now(),
+            ]);
+
+            $data = [];
+            $output = [];
+            foreach ($users as $user) {
+                array_push($data, [
+                    'prize_id' => $request->prize_id,
+                    'user_id' => $user->user_id,
+                    'is_claimed' => false,
+                    'created_at' => now(),
+                    'updated_at' => now(),
+                ]);
+                array_push($output, [
+                    'user_id' => $user->user_id,
+                    'user_name' => $user->name,
+                    'department_id' => $user->department_id,
+                ]);
+            }
+
+            Recipients::insert($data);
+            return $output;
+        }
+        return false;
+    }
 }

+ 17 - 25
resources/js/src/views/lottery/Draw.vue

@@ -54,8 +54,8 @@
             <i>0</i>
             <i>0</i>
             <i>0</i>
+            <span :datafinal=item.userName></span>
           </div>
-          <span :datafinal=item.userName></span>
         </div>
 
         <b-button v-ripple.400="'rgba(255, 255, 255, 0.15)'" class="mt-2" variant="outline-primary" block
@@ -223,26 +223,16 @@ export default {
       }
     },
     draw() {
-      useJwt.postData('/api/draw/draw_user', { deadline: this.activity.deadline, region: this.region, number: this.drawNumber }).then(res => {
-        useJwt.postData('/api/prize/prizeDrawable', { prizeId: this.prizeId, number: this.drawNumber }).then(drawable => {
-          if (drawable.data) {
-            var userIdList=[];
-            res.data.forEach(element => {
-              this.drawList.push({ userId: element.user_id, userName: element.name, department: this.departmentList[element.department_id] });
-              userIdList.push(element.user_id);
-            });
-            useJwt.postData('/api/recipients/storePatch', { prizeId: this.prizeId, userIdList: userIdList }).then(r => {
-              console.log(r.data);
-              useJwt.postData('/api/prize/drawPatch', { prizeId: this.prizeId, number: this.drawNumber });
-            });
-            setTimeout(() => {
-              this.count(this.drawList);
-            });
-          } else {
-            this.hideModal();
-            console.log("prize is not available.");
-          }
-        });
+      useJwt.postData('/api/draw/draw', { activity_id: this.activityId, prize_id: this.prizeId, region: this.region, number: this.drawNumber }).then(res => {
+        if(res.data){
+          this.drawList = res.data;
+          setTimeout(() => {
+            this.count();
+          }, 100);
+        } else {
+          this.hideModal();
+          console.log("error");
+        }
       });
     },
     count() {
@@ -251,8 +241,10 @@ export default {
       var string = numbers;
 
       this.drawList.forEach((element, index) => {
+        var departmentName = this.departmentList[element.department_id];
         var deps = document.querySelectorAll(".counter_" + index + " > i");
         var allCounters = document.querySelectorAll(".counter_" + index + " > div > i");
+
         deps.forEach(function (el) {
           var duration = 1000;
           var interval = setInterval(function () {
@@ -260,20 +252,20 @@ export default {
             duration = duration - 50;
             if (duration <= 0) {
               clearInterval(interval);
-              el.innerText = element.department;
+              el.innerText = departmentName;
             }
           }, 50);
         });
         allCounters.forEach((el, i) => {
-          var duration = 2000 + i * 1000;
+          var duration = 500 + i * 1000;
           var interval = setInterval(e => {
             el.innerText = string.charAt(Math.random() * string.length);
             duration = duration - 50;
             if (duration <= 0) {
               clearInterval(interval);
-              el.innerText = element.userId[i];
+              el.innerText = element.user_id[i];
               if (i == 3) {
-                document.querySelectorAll(".counter_" + index + " > span")[0].innerText = element.userName;
+                document.querySelectorAll(".counter_" + index + " > div > span")[0].innerText = element.user_name;
               }
             }
           }, 50);

+ 2 - 8
routes/api.php

@@ -105,24 +105,18 @@ Route::middleware(['auth:sanctum', 'abilities:Admin'])->group(function () {
     Route::post('/check_in/draw', [CheckInController::class, 'draw_user_when_check_in']);
 
     // Draw
-    Route::post('/draw/draw_user', [DrawController::class, 'draw_user_by_region']);
+    Route::post('/draw/draw', [DrawController::class, 'draw']);
 
     // Prize
-    Route::post('/prize/draw', [PrizeController::class, 'draw']);
-    Route::post('/prize/drawPatch', [PrizeController::class, 'draw_patch']);
 
     // Recipients
-    Route::post('/recipients/store', [RecipientsController::class, 'store']);
-    Route::post('/recipients/storePatch', [RecipientsController::class, 'store_patch']);
 
     Route::post('/user/show', [UserController::class, 'show']);
 });
 Route::post('/user/index', [UserController::class, 'index']);
 Route::post('/department/index', [DepartmentController::class, 'index']);
-Route::post('/prize/index', [PrizeController::class, 'index']);
-Route::post('/check_in/index_by_activity', [CheckInController::class, 'index_by_activity']);
 Route::post('/prize/index_by_activity', [PrizeController::class, 'index_by_activity']);
-Route::post('/recipients/index', [RecipientsController::class, 'index']);
+Route::post('/check_in/index_by_activity', [CheckInController::class, 'index_by_activity']);
 Route::post('/recipients/index_by_activity', [RecipientsController::class, 'index_by_activity']);
 
 Route::post('/prize/prizeDrawable', [PrizeController::class, 'prize_is_drawable']);