where(['base_game_id' => $order['base_game_id'], 'type' => $order['type'], 'gift_key' => $order['gift_key']])->find(); $hasError = false; $sendResult = ''; if ($gift['game_currency'] > 0) { $result = $this->sendGold($order, $gift['game_currency']); if (!$result['status']) { $hasError = true; } $sendResult .= ($result['message'] ?? '') . ';'; } $giftItems = json_decode($gift['gifts'], true); foreach ($giftItems as $giftItem) { $result = $this->sendGift($order, $giftItem); if (!$result['status']) { $hasError = true; } $sendResult .= ($result['message'] ?? '') . ';'; } M('rebate_orders', 'tab_')->where(['id' => $order['id']])->save([ 'send_status' => $hasError ? 2 : 1, 'send_time' => time(), 'send_result' => $sendResult, ]); } private function getClient($baseGameId) { $client = null; switch ($baseGameId) { case 70: $client = new XyyClient(); break; case 73: $client = new SbcqClient(); break; /* case 9: $client = new SbcqClient(); break; */ default: throw new \Exception('客户端未实现'); break; } return $client; } public function sendGold($order, $gold) { $client = $this->getClient($order['base_game_id']); return $client->sendGold($gold, $order); } public function sendGift($order, $giftItem) { $client = $this->getClient($order['base_game_id']); return $client->sendEmail($giftItem, $order); } public function review(array $ids, $status) { if (!in_array($status, [1, 2])) { throw new \Exception('状态异常'); } if (count($ids) == 0) { throw new \Exception('请选择要操作的记录'); } $orders = M('rebate_orders', 'tab_')->field(['id'])->where(['review_status' => 0, 'id' => ['in', $ids]])->select(); if (count($orders) != count($ids)) { throw new \Exception('含有不存在的记录或者已审核的记录'); } $adminInfo = $_SESSION['onethink_admin']['user_auth']; M('rebate_orders', 'tab_')->where(['review_status' => 0, 'id' => ['in', $ids]])->save([ 'review_status' => $status, 'review_time' => time(), 'reviewer_id' => $adminInfo['uid'], 'reviewer_username' => $adminInfo['username'], ]); } public function sendAll($type) { $orders = M('rebate_orders', 'tab_')->where(['type' => $type, 'review_status' => 1, 'send_status' => 0])->select(); foreach ($orders as $order) { if ($type == 'B') { if (time() < strtotime($order['award_started_at'] . ' 00:00:00') || time() > strtotime($order['award_ended_at'] . ' 23:59:59')) { continue; } } $this->sendByOrder($order); } } public function sendDaily($date) { $map = [ 'type' => 'B', 'review_status' => 1, 'send_status' => 1, 'award_started_at' => ['elt', $date], 'award_ended_at' => ['egt', $date] ]; $orders = M('rebate_orders', 'tab_')->where($map)->select(); foreach ($orders as $order) { $this->sendByOrder($order); } } }