You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

232 lines
7.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?php
namespace app\adminapi\controller\v1;
use app\adminapi\ApiController;
use think\facade\Db;
class Bonus extends ApiController
{
public function getBonusList()
{
$page = input('page');
$pageSize = input('pageSize');
$do = Db::name('bonus_type');
$bonus = $do
->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;
}
}