page($page, $pageSize) ->select() ->toArray(); if (!$bonus) { $bonus = []; } $send_type = [ '1' => '會員發放', '2' => '商品發放', '3' => '訂單方式', '4' => '線下發放', '5' => '線上發放', '6' => '註冊發放', ]; foreach ($bonus as $key => $val) { $bonus[$key]['send_type'] = $send_type[$val['send_type']]; $bonus[$key]['bonus_number'] = Db::name('bonus')->where('bonus_type_id', $val['type_id'])->sum('bonus_number'); $bonus[$key]['remain_number'] = Db::name('bonus')->where('bonus_type_id', $val['type_id'])->sum('remain_number'); } $rtn = [ 'total' => $do->count(), 'data' => $bonus ]; return $this->Success($rtn); } public function getBonus() { $type_id = input('type_id'); $bonus = Db::name('bonus_type') ->field('type_id,type_name,type_money,min_amount,send_type,send_start_date,send_end_date,use_start_date,use_end_date') ->where('type_id', $type_id) ->find(); $bonus['send_start_date'] = $bonus['send_start_date']?date('Y-m-d', $bonus['send_start_date']):''; $bonus['send_end_date'] = $bonus['send_end_date']?date('Y-m-d', $bonus['send_end_date']):''; $bonus['use_start_date'] = $bonus['use_start_date']?date('Y-m-d', $bonus['use_start_date']):''; $bonus['use_end_date'] = $bonus['use_end_date']?date('Y-m-d', $bonus['use_end_date']):''; return $this->Success($bonus); } public function addBonus() { $data = input('post.'); unset($data['act']); $data['send_start_date'] = isset($data['send_start_date']) ? strtotime($data['send_start_date']) : 0; $data['send_end_date'] = isset($data['send_end_date']) ? strtotime($data['send_end_date']) : 0; $data['use_start_date'] = isset($data['use_start_date']) ? strtotime($data['use_start_date']) : 0; $data['use_end_date'] = isset($data['use_end_date']) ? strtotime($data['use_end_date']) : 0; $do = Db::name('bonus_type'); $result = $do->insert($data); if (!$result) { return $this->Error('操作失败'); } return $this->Success('操作成功'); } public function updateBonus() { $data = input('post.'); unset($data['act']); $data['send_start_date'] = !empty($data['send_start_date']) ? strtotime($data['send_start_date']) : 0; $data['send_end_date'] = !empty($data['send_end_date']) ? strtotime($data['send_end_date']) : 0; $data['use_start_date'] = !empty($data['use_start_date']) ? strtotime($data['use_start_date']) : 0; $data['use_end_date'] = !empty($data['use_end_date']) ? strtotime($data['use_end_date']) : 0; try{ Db::name('bonus_type') ->where('type_id', $data['type_id']) ->update($data); }catch(\Exception $e){ return $this->Error('操作失败'); } return $this->Success('操作成功'); } public function deleteBonus() { $id = input('id'); $do = Db::name('bonus_type'); $do->where('type_id', $id)->delete(); return $this->Success('操作成功'); } public function getUseBonusList() { $page = input('page'); $pageSize = input('pageSize'); $do = Db::name('bonus'); $rtn = $do ->page($page, $pageSize) ->select() ->toArray(); if (!$rtn) { $rtn = []; } $send_type = [ '1' => '會員發放', '2' => '商品發放', '3' => '訂單方式', '4' => '線下發放', '5' => '線上發放', '6' => '註冊發放', ]; foreach ($rtn as $key => $val) { if (!empty($val['send_type'])) { $rtn[$key]['send_type'] = $send_type[$val['send_type']]; } else { $rtn[$key]['send_type'] = '未知'; } $rtn[$key]['order_id'] = empty($val['order_id']) ? '' : $val['order_id']; $rtn[$key]['user_id'] = empty($val['user_id']) ? '' : $val['user_id']; $rtn[$key]['used_time'] = empty($val['used_time']) ? '未使用' : $val['used_time']; } $rtn = [ 'total' => $do->count(), 'data' => $rtn ]; return $this->Success($rtn); } public function getUseList() { $result = Db::name('user_bonus') ->alias('ub') ->join('users u', 'ub.user_id = u.user_id') ->join('order_info o', 'ub.order_id = o.order_id') ->field('ub.*,u.sso_user_id,o.order_sn') ->where('ub.bonus_id', input('bonus_id')) ->select() ->toArray(); if (!$result) { $result = []; } foreach ($result as $key => $val) { $result[$key]['used_time'] = empty($val['used_time']) ? '未使用' : date('Y-m-d H:i:s', $val['used_time']); } return $this->Success($result); } public function send() { $data = [ 'bonus_type_id' => input('type_id'), 'create_time' => time() ]; if (empty(input('type_id'))) { return $this->Error('請選擇優惠券'); } try { //如何send_type為1,則產生一組優惠券 if (input('send_type') == 1) { $data['bonus_number'] = input('number'); $data['remain_number'] = input('number'); $data['bonus_sn'] = $this->genBonusSn(); $result = Db::name('bonus')->insert($data); } else { $data['bonus_number'] = 1; $data['remain_number'] = 1; for ($i = 0; $i < input('number'); $i++) { $data['bonus_sn'] = $this->genBonusSn(); $result = Db::name('bonus')->insert($data); } } return $this->Success('操作成功'); } catch (\Exception $e) { return $this->Error($e->getMessage()); } } private function genBonusSn($length = 10) { $characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; $code = ''; for ($i = 0; $i < $length; $i++) { $code .= $characters[rand(0, strlen($characters) - 1)]; } //檢查是否重複 $result = Db::name('user_bonus') ->where('bonus_sn', $code) ->where('used_time', 0) ->find(); //如果重複就重新產生 if ($result) { $code = $this->genBonusSn(); } return $code; } }