| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420 | 
							- <?php
 - 
 - namespace App\Http\Services\Backend\DataManagement;
 - 
 - use App\Http\Services\ConstDef\GeneralConst;
 - use App\Models\Web\Activity;
 - use App\Models\Web\Receipt;
 - use App\Models\Web\Syslogact;
 - 
 - class ActivityManagementService
 - {
 -     // 相關私有 model 調用器宣告
 -     private $activityManagementDb;
 -     private $receiptManagementDb;
 -     private $syslogactManagementDb;
 -     
 -     public function __construct()
 -     {
 -         date_default_timezone_set("Asia/Taipei");
 -         // 建構 model 調用器
 -         $this->activityManagementDb = new Activity();
 -         $this->receiptManagementDb = new Receipt();
 -         $this->syslogactManagementDb = new Syslogact();
 -     }
 -     
 -     public function getActivitys(
 -         &$cnt = 0,
 -         $orderColumn,
 -         $orderDir,
 -         $start,
 -         $length,
 -         $searchValue
 -     )
 -     {
 -         $activity = $this->activityManagementDb
 -             ->select([
 -                 'id',
 -                 \DB::raw("CONCAT('<a href=\"activityManagement/edit/', id, '\">', activityName, '</a>') as activityName"),
 -                 \DB::raw("CONCAT(reqTimeBegin, '<br>', reqTimeFinal) as reqTime"),
 -                 'drawTime',
 -                 \DB::raw("replace(drawNumbers, ',', '<br>') as drawNumbers"),
 -                 \DB::raw("
 -                     (case
 -                         -- 現在時間小於開獎時間 (NOW是+8時區,UNIX_TIMESTAMP之後就變成+0時區)
 -                         when UNIX_TIMESTAMP(NOW()) < UNIX_TIMESTAMP(CONCAT(drawTime, ' 00:00:00'))
 -                         then '尚未到開獎時間'
 -                         -- 現在時間大於開獎時間
 -                         else (case isDraw
 -                             -- 決定顯示出來的開獎按鈕可不可以按
 -                             when '' then CONCAT('<a href=\"#\" onclick=\"confirmUser(''activityManagement/draw/', id, ''')\">點我開獎</a>')
 -                             else '已經開獎'
 -                         end)
 -                     end) as drawBtn
 -                 "),
 -                 \DB::raw("CONCAT(redeemTimeBegin, '<br>', redeemTimeFinal) as redeemTime"),
 -                 \DB::raw("
 -                     (case
 -                         -- 現在時間小於驗證時間首日 (NOW是+8時區,UNIX_TIMESTAMP之後就變成+0時區)
 -                         when UNIX_TIMESTAMP(NOW()) < UNIX_TIMESTAMP(CONCAT(checkTimeBegin, ' 00:00:00'))
 -                         then '尚未到驗證時間'
 -                         -- 現在時間大於驗證時間首日
 -                         else (case isCheckBegin
 -                             -- 決定顯示出來的驗證按鈕可不可以按
 -                             when '' then CONCAT('<a href=\"#\" onclick=\"confirmUser(''activityManagement/check/', id, ''')\">點我啟動驗證流程</a>')
 -                             else '已啟動驗證流程'
 -                         end)
 -                     end) as checkBtn
 -                 "),
 -                 \DB::raw("CONCAT(checkTimeBegin, '<br>', checkTimeFinal) as checkTime"),
 -                 \DB::raw("CONCAT(getTimeBegin, '<br>', getTimeFinal) as getTime"),
 -                 \DB::raw("
 -                     (case
 -                         -- 現在時間小於領獎時間迄日 (NOW是+8時區,UNIX_TIMESTAMP之後就變成+0時區)
 -                         when UNIX_TIMESTAMP(NOW()) < UNIX_TIMESTAMP(CONCAT(getTimeFinal, ' 00:00:00'))
 -                         then '尚未到領獎結束時間'
 -                         -- 現在時間大於領獎時間迄日
 -                         else (case isGetFinal
 -                             -- 決定顯示出來的驗證按鈕可不可以按
 -                             when '' then CONCAT('<a href=\"#\" onclick=\"confirmUser(''activityManagement/get/', id, ''')\">點我關閉領獎活動</a>')
 -                             else '已關閉領獎活動'
 -                         end)
 -                     end) as getBtn
 -                 "),
 -                 'cdate',
 -                 'mdate',
 -                 \DB::raw("(select name from users where id=activity.oid) as oid"),
 -             ]);
 -         // 過濾搜尋條件
 -         // 取總筆數
 -         $cnt = $activity->count();
 -         // 排序
 -         $activity = $activity
 -             ->orderByRaw((int)$orderColumn . ' ' . $orderDir);
 -         // 彙整
 -         // 分頁
 -         $activity = $activity
 -             ->skip($start)->take($length);
 -         // 實際取資料
 -         $activity = $activity
 -             ->get()
 -             ->toArray();
 -         
 -         // 整理返回值並返回
 -         return $activity;
 -     }
 -     
 -     public function getActivityById($id)
 -     {
 -         // 取得參數
 -         // 調用資料庫(或者其他業務邏輯)
 -         $activity = $this->activityManagementDb->select([
 -             'id',
 -             'activityName',
 -             'reqTimeBegin',
 -             'reqTimeFinal',
 -             'drawTime',
 -             'drawNumbers',
 -             'redeemTimeBegin',
 -             'redeemTimeFinal',
 -             'checkTimeBegin',
 -             'checkTimeFinal',
 -             'getTimeBegin',
 -             'getTimeFinal',
 -             'cdate',
 -             'mdate',
 -             \DB::raw("(select name from users where id=activity.oid) as oid"),
 -         ])
 -             ->where('id', $id)
 -             ->first()
 -             ->toArray();
 -         
 -         // 整理返回值並返回
 -         return $activity;
 -     }
 -     
 -     public function insertActivity($activityName, $reqTimeBegin, $reqTimeFinal, $drawTime, $drawNumbers, $redeemTimeBegin, $redeemTimeFinal, $checkTimeBegin, $checkTimeFinal, $getTimeBegin, $getTimeFinal, $oid)
 -     {
 -         // 取得參數
 -         $data = [
 -             'activityName'    => $activityName,
 -             'reqTimeBegin'    => $reqTimeBegin,
 -             'reqTimeFinal'    => $reqTimeFinal,
 -             'drawTime'        => $drawTime,
 -             'drawNumbers'     => $drawNumbers,
 -             'redeemTimeBegin' => $redeemTimeBegin,
 -             'redeemTimeFinal' => $redeemTimeFinal,
 -             'checkTimeBegin'  => $checkTimeBegin,
 -             'checkTimeFinal'  => $checkTimeFinal,
 -             'getTimeBegin'    => $getTimeBegin,
 -             'getTimeFinal'    => $getTimeFinal,
 -             'cdate'           => date('Y-m-d H:i:s'),
 -             'mdate'           => date('Y-m-d H:i:s'),
 -             'oid'             => $oid,
 -         ];
 -         // 調用資料庫(或者其他業務邏輯)
 -         $this->activityManagementDb
 -             ->insert($data);
 -         $id = \DB::getPdo()->lastInsertId();
 -         // syslogact
 -         $this->syslogactManagementDb
 -             ->insert([
 -                 'type'    => GeneralConst::LOG_ADMIN,
 -                 'func'    => __FUNCTION__,
 -                 'k'       => $oid,
 -                 'memoIn'  => json_encode(['data' => $data], JSON_UNESCAPED_UNICODE),
 -                 'memoOut' => json_encode(['id' => $id], JSON_UNESCAPED_UNICODE),
 -                 'cdate'   => date("Y-m-d H:i:s"),
 -             ]);
 -         
 -         // 整理返回值並返回
 -         return $id;
 -     }
 -     
 -     public function modifyActivity($id, $activityName, $reqTimeBegin, $reqTimeFinal, $drawTime, $drawNumbers, $redeemTimeBegin, $redeemTimeFinal, $checkTimeBegin, $checkTimeFinal, $getTimeBegin, $getTimeFinal, $oid)
 -     {
 -         // 取得參數
 -         $data = [
 -             'activityName'    => $activityName,
 -             'reqTimeBegin'    => $reqTimeBegin,
 -             'reqTimeFinal'    => $reqTimeFinal,
 -             'drawTime'        => $drawTime,
 -             'drawNumbers'     => $drawNumbers,
 -             'redeemTimeBegin' => $redeemTimeBegin,
 -             'redeemTimeFinal' => $redeemTimeFinal,
 -             'checkTimeBegin'  => $checkTimeBegin,
 -             'checkTimeFinal'  => $checkTimeFinal,
 -             'getTimeBegin'    => $getTimeBegin,
 -             'getTimeFinal'    => $getTimeFinal,
 -             'mdate'           => date('Y-m-d H:i:s'),
 -             'oid'             => $oid,
 -         ];
 -         // 調用資料庫(或者其他業務邏輯)
 -         $res = $this->activityManagementDb
 -             ->where('id', $id)
 -             ->update($data);
 -         $rc = \DB::select("SELECT ROW_COUNT() AS rc;");
 -         $rc = $rc[0]->rc;
 -         // syslogact
 -         $this->syslogactManagementDb
 -             ->insert([
 -                 'type'    => GeneralConst::LOG_ADMIN,
 -                 'func'    => __FUNCTION__,
 -                 'k'       => $oid,
 -                 'memoIn'  => json_encode(['id' => $id, 'data' => $data], JSON_UNESCAPED_UNICODE),
 -                 'memoOut' => json_encode(['rc' => $rc], JSON_UNESCAPED_UNICODE),
 -                 'cdate'   => date("Y-m-d H:i:s"),
 -             ]);
 -         
 -         // 整理返回值並返回
 -         return $res;
 -     }
 -     
 -     public function draw($id, $oid)
 -     {
 -         // 取得該期獎號
 -         $drawNumbers = $this->activityManagementDb
 -             ->select(['drawNumbers'])
 -             ->where('id', $id)
 -             ->where('isDraw', '') // 尚未開獎
 -             ->where('isCheckBegin', '')
 -             ->where('isGetFinal', '')
 -             ->whereRaw("UNIX_TIMESTAMP(NOW()) >= UNIX_TIMESTAMP(CONCAT(drawTime, ' 00:00:00'))") // 開獎時間再次確認
 -             ->first()->toArray();
 -         $drawNumbers = explode(',', $drawNumbers['drawNumbers']);
 -         // 掃描[該期][狀態=1=未開獎]的訂單編號,並比對獎號更改狀態,應該是兩句 SQL 就夠了
 -         $receipts = $this->receiptManagementDb
 -             ->select([
 -                 'id',
 -                 \DB::raw("FROM_BASE64(AES_DECRYPT(UNHEX(tranOrderNo), \"" . env('KK') . "\")) as tranOrderNo"),
 -             ])
 -             ->where('aid', $id)   // 是指定活動的
 -             ->where('rStatus', GeneralConst::RSTATUS_INIT) // 是初始登錄完畢狀態的
 -             ->where('canGet', '') // 以防萬一連這個欄位也檢查
 -             ->get()->toArray();
 -         $draw_fail = [];
 -         $draw_done = [];
 -         foreach ($receipts as $r) {
 -             if (in_array(substr($r['tranOrderNo'], -3), $drawNumbers)) {
 -                 $draw_done[] = $r['id'];
 -             } else {
 -                 $draw_fail[] = $r['id'];
 -             }
 -         }
 -         $this->receiptManagementDb
 -             ->whereIn('id', $draw_fail)
 -             ->where('aid', $id)   // 是指定活動的
 -             ->where('rStatus', GeneralConst::RSTATUS_INIT) // 是初始登錄完畢狀態的
 -             ->where('canGet', '') // 以防萬一連這個欄位也檢查
 -             ->update([
 -                 'rStatus' => GeneralConst::RSTATUS_DRAW_FAIL,
 -                 'mdate'   => date('Y-m-d H:i:s'),
 -                 'oid'     => $oid,
 -             ]);
 -         $this->receiptManagementDb
 -             ->whereIn('id', $draw_done)
 -             ->where('aid', $id)   // 是指定活動的
 -             ->where('rStatus', GeneralConst::RSTATUS_INIT) // 是初始登錄完畢狀態的
 -             ->where('canGet', '') // 以防萬一連這個欄位也檢查
 -             ->update([
 -                 'rStatus' => GeneralConst::RSTATUS_DRAW_DONE,
 -                 'mdate'   => date('Y-m-d H:i:s'),
 -                 'oid'     => $oid,
 -             ]);
 -         // 更改開獎狀態位
 -         $this->activityManagementDb
 -             ->where('id', $id)
 -             ->where('isDraw', '')
 -             ->where('isCheckBegin', '')
 -             ->where('isGetFinal', '')
 -             ->whereRaw("UNIX_TIMESTAMP(NOW()) >= UNIX_TIMESTAMP(CONCAT(drawTime, ' 00:00:00'))") // 開獎時間再次確認
 -             ->update([
 -                 'isDraw' => 'Y',
 -                 'mdate'  => date('Y-m-d H:i:s'),
 -                 'oid'    => $oid,
 -             ]);
 -         // syslogact
 -         $data = [
 -             'aid'         => $id,
 -             'drawNumbers' => $drawNumbers,
 -             'draw_fail'   => $draw_fail,
 -             'draw_done'   => $draw_done,
 -         ];
 -         $this->syslogactManagementDb
 -             ->insert([
 -                 'type'    => GeneralConst::LOG_ADMIN,
 -                 'func'    => __FUNCTION__,
 -                 'k'       => $oid,
 -                 'memoIn'  => json_encode(['data' => $data], JSON_UNESCAPED_UNICODE),
 -                 'memoOut' => json_encode([], JSON_UNESCAPED_UNICODE),
 -                 'cdate'   => date("Y-m-d H:i:s"),
 -             ]);
 -         
 -         return true;
 -     }
 -     
 -     public function check($id, $oid)
 -     {
 -         // 取得該期ID (有點像脫褲子放屁,但這是為了確認時間是否符合以及各項狀態位的管控)
 -         $chk = $this->activityManagementDb
 -             ->select(['id'])
 -             ->where('id', $id)
 -             ->where('isDraw', 'Y') // 已開獎
 -             ->where('isCheckBegin', '') // 未啟動驗證
 -             ->whereRaw("UNIX_TIMESTAMP(NOW()) >= UNIX_TIMESTAMP(CONCAT(checkTimeBegin, ' 00:00:00'))") // 驗證流程時間再次確認
 -             ->get();
 -         if (count($chk) == 0) return false; // 碰到這種情況按完鈕後不會有反應,且操作人也不知為何,就需要工程師介入
 -         // 取得該期所有狀態位為已中獎但未送出驗證的紀錄
 -         $receipts = $this->receiptManagementDb
 -             ->select([
 -                 'id',
 -             ])
 -             ->where('aid', $id)   // 是指定活動的
 -             ->where('rStatus', GeneralConst::RSTATUS_DRAW_DONE) // 是已中獎但未送出驗證的紀錄的
 -             ->where('canGet', '') // 以防萬一連這個欄位也檢查
 -             ->get()->toArray();
 -         $draw_done_expired = [];
 -         foreach ($receipts as $r) $draw_done_expired[] = $r['id'];
 -         $this->receiptManagementDb
 -             ->whereIn('id', $draw_done_expired)
 -             ->where('aid', $id)   // 是指定活動的
 -             ->where('rStatus', GeneralConst::RSTATUS_DRAW_DONE) // 是已中獎但未送出驗證的紀錄的
 -             ->where('canGet', '') // 以防萬一連這個欄位也檢查
 -             ->update([
 -                 'rStatus' => GeneralConst::RSTATUS_DRAW_DONE_EXPIRED,
 -                 'mdate'   => date('Y-m-d H:i:s'),
 -                 'oid'     => $oid,
 -             ]);
 -         // 更改驗證狀態位
 -         $this->activityManagementDb
 -             ->where('id', $id)
 -             ->where('isDraw', 'Y')
 -             ->where('isCheckBegin', '')
 -             ->whereRaw("UNIX_TIMESTAMP(NOW()) >= UNIX_TIMESTAMP(CONCAT(checkTimeBegin, ' 00:00:00'))") // 開獎時間再次確認
 -             ->update([
 -                 'isCheckBegin' => 'Y',
 -                 'mdate'        => date('Y-m-d H:i:s'),
 -                 'oid'          => $oid,
 -             ]);
 -         // syslogact
 -         $data = [
 -             'aid'               => $id,
 -             'draw_done_expired' => $draw_done_expired,
 -         ];
 -         $this->syslogactManagementDb
 -             ->insert([
 -                 'type'    => GeneralConst::LOG_ADMIN,
 -                 'func'    => __FUNCTION__,
 -                 'k'       => $oid,
 -                 'memoIn'  => json_encode(['data' => $data], JSON_UNESCAPED_UNICODE),
 -                 'memoOut' => json_encode([], JSON_UNESCAPED_UNICODE),
 -                 'cdate'   => date("Y-m-d H:i:s"),
 -             ]);
 -         
 -         return true;
 -     }
 -     
 -     public function get($id, $oid)
 -     {
 -         // 取得該期ID (有點像脫褲子放屁,但這是為了確認時間是否符合以及各項狀態位的管控)
 -         $chk = $this->activityManagementDb
 -             ->select(['id'])
 -             ->where('id', $id)
 -             ->where('isDraw', 'Y') // 已開獎
 -             ->where('isCheckBegin', 'Y') // 已啟動驗證
 -             ->where('isGetFinal', '') // 未關閉活動
 -             ->whereRaw("UNIX_TIMESTAMP(NOW()) >= UNIX_TIMESTAMP(CONCAT(getTimeFinal, ' 00:00:00'))") // 領獎時間再次確認
 -             ->get();
 -         if (count($chk) == 0) return false; // 碰到這種情況按完鈕後不會有反應,且操作人也不知為何,就需要工程師介入
 -         // 取得該期所有狀態位為已中獎但未送出驗證的紀錄
 -         $receipts = $this->receiptManagementDb
 -             ->select([
 -                 'id',
 -             ])
 -             ->where('aid', $id)   // 是指定活動的
 -             ->where('rStatus', GeneralConst::RSTATUS_DRAW_DONE_REDEEM_DONE) // 是已驗證通過但未領取的
 -             ->where('canGet', 'Y') // 以防萬一連這個欄位也檢查
 -             ->get()->toArray();
 -         $get_done_expired = [];
 -         foreach ($receipts as $r) $get_done_expired[] = $r['id'];
 -         $this->receiptManagementDb
 -             ->whereIn('id', $get_done_expired)
 -             ->where('aid', $id)   // 是指定活動的
 -             ->where('rStatus', GeneralConst::RSTATUS_DRAW_DONE_REDEEM_DONE) // 是已驗證通過但未領取的
 -             ->where('canGet', 'Y') // 以防萬一連這個欄位也檢查
 -             ->update([
 -                 'rStatus' => GeneralConst::RSTATUS_DRAW_DONE_REDEEM_DONE_EXPIRED,
 -                 'mdate'   => date('Y-m-d H:i:s'),
 -                 'oid'     => $oid,
 -             ]);
 -         // 更改驗證狀態位
 -         $this->activityManagementDb
 -             ->where('id', $id)
 -             ->where('isDraw', 'Y')
 -             ->where('isCheckBegin', 'Y')
 -             ->where('isGetFinal', '')
 -             ->whereRaw("UNIX_TIMESTAMP(NOW()) >= UNIX_TIMESTAMP(CONCAT(getTimeFinal, ' 00:00:00'))") // 領獎時間再次確認
 -             ->update([
 -                 'isGetFinal' => 'Y',
 -                 'mdate'      => date('Y-m-d H:i:s'),
 -                 'oid'        => $oid,
 -             ]);
 -         // syslogact
 -         $data = [
 -             'aid'                 => $id,
 -             'redeem_done_expired' => $get_done_expired,
 -         ];
 -         $this->syslogactManagementDb
 -             ->insert([
 -                 'type'    => GeneralConst::LOG_ADMIN,
 -                 'func'    => __FUNCTION__,
 -                 'k'       => $oid,
 -                 'memoIn'  => json_encode(['data' => $data], JSON_UNESCAPED_UNICODE),
 -                 'memoOut' => json_encode([], JSON_UNESCAPED_UNICODE),
 -                 'cdate'   => date("Y-m-d H:i:s"),
 -             ]);
 -         
 -         return true;
 -     }
 -     
 - }
 
 
  |