Files
fastmovieai/fastmovie-admin/plugin/marketing/app/api/controller/UserCouponController.php
T
李建琦 eae151fd57 FastMovieAI AI短剧创作平台 二开基线
- 源码: xhadmincn/FastMovieAI (Apache 2.0)
- 二开: Docker部署, Swoole改Select, route.php修复, 补update/VERSION
- vendor/示例资源已gitignore
2026-08-26 18:37:36 +08:00

80 lines
3.3 KiB
PHP

<?php
namespace plugin\marketing\app\api\controller;
use app\Basic;
use app\expose\enum\State;
use plugin\finance\utils\enum\OrdersType;
use plugin\marketing\app\model\PluginMarketingCoupon;
use plugin\marketing\app\model\PluginMarketingCouponCode;
use plugin\marketing\utils\enum\UseState;
use plugin\marketing\utils\enum\UseType;
use support\Request;
class UserCouponController extends Basic
{
public function index(Request $request)
{
$uid = $request->uid;
$now = date('Y-m-d H:i:s');
$where = [];
$where[] = ['uid', '=', $uid];
$action = $request->get('action');
if ($action) {
switch ($action) {
case 'unused':
$where[] = ['plugin_marketing_coupon_code.state', '=', UseState::ON['value']];
break;
case 'used':
$where[] = ['plugin_marketing_coupon_code.state', 'in', [UseState::USED['value'], UseState::EXPIRE['value']]];
break;
}
}
$model = PluginMarketingCouponCode::where($where);
$server = $request->get('server');
if ($server) {
$codeIds = PluginMarketingCouponCode::alias('plugin_marketing_coupon_code')->where($where)->column('coupon_id');
$codeIds = array_unique($codeIds);
$ids = PluginMarketingCoupon::alias('a')->whereIn('a.id', $codeIds)
->join('plugin_marketing_coupon_server', 'a.id = plugin_marketing_coupon_server.coupon_id', 'left')
->where(function ($query) use ($server) {
$query->where('plugin_marketing_coupon_server.server', '=', $server);
})
->distinct(true)
->field('a.id')
->column('a.id');
$model->whereIn('coupon_id', $ids);
}
$coupon = $model->where(function ($query) use ($now) {
$startTime = [
['start_time', '=', NULL],
['start_time', '<=', $now]
];
$query->whereOr($startTime);
})
->where(function ($query) use ($now) {
$endTime = [
['end_time', '=', NULL],
['end_time', '>=', $now]
];
$query->whereOr($endTime);
})
->with(['coupon' => function ($query) {
$query->field('id,title,coupon_rule,discount,full_price,money,stackable,use_type')->hidden(['id']);
}])
->hasWhere('coupon', ['plugin_marketing_coupon.state' => State::YES['value']])
->order('receive_time desc')
->select()->scene('external')->each(function ($item) {
$item->exclusive = PluginMarketingCoupon::whereIn('id', $item->coupon->exclusiveWith()->column('exclusive_with_id'))->field('id,title')->select()->scene('external');
$server = $item->coupon->server()->column('server');
$item->server = OrdersType::getOptions(function ($value) use ($server) {
return in_array($value['value'], $server);
});
$item->use_type_text = UseType::get($item->coupon->use_type);
$item->state_text = UseState::get($item->state);
});
return $this->resData($coupon);
}
}