183 lines
5.6 KiB
PHP
Executable File
183 lines
5.6 KiB
PHP
Executable File
<?php
|
||
|
||
namespace app\controller\manager\mall;
|
||
|
||
use app\controller\manager\Base;
|
||
use app\model\Account;
|
||
use app\model\AccountCoupon as AccountCouponModel;
|
||
use app\model\Coupon as CouponModel;
|
||
use app\model\Log;
|
||
use app\service\Math;
|
||
use Exception;
|
||
use think\exception\ValidateException;
|
||
use think\response\Json;
|
||
|
||
class Coupon extends Base
|
||
{
|
||
/**
|
||
* @throws Exception
|
||
*/
|
||
public function index()
|
||
{
|
||
if ($this->request->isPost()) {
|
||
$page = $this->request->param('page/d', 1);
|
||
$size = $this->request->param('size/d', 20);
|
||
|
||
$startAt = $this->request->param('begin_at/s', '');
|
||
$endAt = $this->request->param('end_at/s', '');
|
||
|
||
$whereMap[] = ['deleted_at', '=', null];
|
||
$order = ['sort' => 'desc', 'id' => 'desc'];
|
||
|
||
if (!empty($startAt) && strtotime($startAt)) {
|
||
$whereMap[] = ['begin_at', '>=', $startAt];
|
||
}
|
||
if (!empty($endAt) && strtotime($endAt)) {
|
||
$whereMap[] = ['end_at', '<=', $endAt];
|
||
}
|
||
|
||
$res = CouponModel::findList($whereMap, [], $page, $size, null, $order);
|
||
|
||
$res['list'] = $res['list']->each(function ($item) {
|
||
$item->type_text = CouponModel::typeTextList()[$item->type] ?? '';
|
||
});
|
||
return $this->json(0, 'success', $res);
|
||
}
|
||
|
||
return $this->view();
|
||
}
|
||
|
||
public function add()
|
||
{
|
||
if ($this->request->isPost()) {
|
||
$item = $this->request->param('item/a', []);
|
||
|
||
try {
|
||
$rules = [
|
||
'name|优惠券名称' => 'require',
|
||
'condition|消费额度' => 'float',
|
||
'amount|优惠额度' => 'float',
|
||
'total|发行总量' => 'require|integer|gt:0',
|
||
'begin_at|开始时间' => 'require|date',
|
||
'end_at|截止时间' => 'require|date',
|
||
];
|
||
|
||
$validate = $this->validateByApi($item, $rules);
|
||
if ($validate !== true) {
|
||
return $validate;
|
||
}
|
||
|
||
if ($item['end_at'] <= $item['begin_at']) {
|
||
throw new ValidateException('优惠期限的截止时间必须大于开始时间!');
|
||
}
|
||
|
||
if ($item['is_home'] == CouponModel::COMMON_ON && empty($item['cover'])) {
|
||
throw new ValidateException('推荐首页时必传封面图');
|
||
}
|
||
|
||
$data = arrayKeysFilter($item, [
|
||
'name', 'cover', 'type', 'condition', 'amount', 'begin_at', 'end_at', 'is_home', 'total'
|
||
]);
|
||
|
||
$data['created_at'] = date('Y-m-d H:i:s');
|
||
$data['remain'] = $data['total'];
|
||
CouponModel::create($data);
|
||
} catch (ValidateException $e) {
|
||
return $this->json(4001, $e->getMessage());
|
||
} catch (Exception $e) {
|
||
return $this->json(5000, '新增优惠卷失败!');
|
||
}
|
||
|
||
return $this->json();
|
||
}
|
||
|
||
$this->data['typeList'] = CouponModel::typeTextList();
|
||
|
||
return $this->view();
|
||
}
|
||
|
||
/**
|
||
* @throws Exception
|
||
*/
|
||
public function modify()
|
||
{
|
||
if (!$this->request->isPost()) {
|
||
return $this->json(4000, '非法请求');
|
||
}
|
||
|
||
$item = input('post.');
|
||
$validate = $this->validateByApi($item, [
|
||
'field' => 'require',
|
||
'value' => 'require',
|
||
]);
|
||
|
||
if ($validate !== true) {
|
||
return $validate;
|
||
}
|
||
|
||
if (!$info = CouponModel::findById($item['id'])) {
|
||
return $this->json(4001, '记录不存在');
|
||
}
|
||
|
||
$update = [$item['field'] => $item['value']];
|
||
|
||
try {
|
||
$info->save($update);
|
||
return $this->json();
|
||
} catch (ValidateException $e) {
|
||
return $this->json(4001, $e->getError());
|
||
} catch (Exception $e) {
|
||
return $this->json(5000, '修改失败');
|
||
}
|
||
}
|
||
|
||
|
||
/**
|
||
* 软删除
|
||
*
|
||
* @return Json
|
||
*/
|
||
public function del(): Json
|
||
{
|
||
if (!$this->request->isPost()) {
|
||
return $this->json(4000, '非法请求');
|
||
}
|
||
|
||
$ids = $this->request->param('ids/a', []);
|
||
if (empty($ids)) {
|
||
$ids[] = $this->request->param('id/d', 0);
|
||
$ids = array_filter($ids);
|
||
}
|
||
|
||
if (count($ids)) {
|
||
CouponModel::where('id', 'in', $ids)->save(['deleted_at' => date('Y-m-d H:i:s')]);
|
||
Log::write(get_class(), 'del', '删除了优惠卷信息,涉及到的ID为:'.implode(',', $ids));
|
||
}
|
||
|
||
return $this->json();
|
||
}
|
||
|
||
//用户持有优惠券的列表
|
||
public function accountHasList()
|
||
{
|
||
$id = input("id/d", 0);
|
||
if ($this->request->isPost()) {
|
||
$page = $this->request->param('page/d', 1);
|
||
$size = $this->request->param('size/d', 20);
|
||
|
||
$order = ['id' => 'desc'];
|
||
$res = AccountCouponModel::findList(["coupon_id" => $id], [], $page, $size, function ($q) {
|
||
return $q->with(["coupon", "account"]);
|
||
}, $order);
|
||
$res['list'] = $res['list']->each(function ($item) {
|
||
$item->type_text = CouponModel::typeTextList()[$item->type] ?? '';
|
||
$item->check_by_account = Account::findOne(["id" => $item->check_by,], ["nickname"]);
|
||
});
|
||
return $this->json(0, 'success', $res);
|
||
}
|
||
$this->data["id"] = $id;
|
||
return $this->view();
|
||
}
|
||
|
||
|
||
} |