汪总电商平台
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.
 
 
 
 
 
 

307 lines
9.4 KiB

<?php
namespace app\api\controller\wanlshop;
use app\common\controller\Api;
use fast\Random;
use think\Db;
/**
* WanlShop优惠券接口
*/
class Coupon extends Api
{
protected $noNeedLogin = ['getList', 'query'];
protected $noNeedRight = ['*'];
/**
* 获取优惠券列表
*
* @ApiSummary (WanlShop 优惠券接口获取优惠券列表)
* @ApiMethod (GET)
* 2020年9月15日17:44:57
*
* @param string $type 类型
*/
public function getList($type = null)
{
$list = model('app\api\model\wanlshop\Coupon')
->where([
'type' => $type,
// 'rangetype' => 'all', 1.0.5升级
'invalid' => 0
])
->order('createtime desc')
->paginate()
->each(function($order, $key){
$order['shop'] = $order->shop?$order->shop->visible(['shopname']):[];
return $order;
});
$list?($this->success('ok',$list)):($this->error(__('网络繁忙')));
}
/**
* 查询我的优惠券
*
* @ApiSummary (WanlShop 优惠券接口查询我的优惠券)
* @ApiMethod (GET)
* 2020年9月16日03:32:43
*
* @param string $goods_id 商品ID
* @param string $shop_id 店铺ID
* @param string $shop_category_id 分类ID
* @param string $price 价格
*/
public function query($goods_id = null, $shop_id = null, $shop_category_id = null, $price = null)
{
$user_coupon = [];
if ($this->auth->isLogin()) {
foreach (model('app\api\model\wanlshop\CouponReceive')->where([
'user_id' => $this->auth->id,
'shop_id' => $shop_id,
'limit' => ['<=', intval($price)],
'state' => '1'
])->select() as $row) {
$user_coupon[$row['coupon_id']] = $row;
}
}
// 开始查询 方案一
$list = [];
$goods_id = explode(",",$goods_id);
$shop_category_id = explode(",",$shop_category_id);
//要追加一个排序 选出一个性价比最高的
foreach (model('app\api\model\wanlshop\Coupon')->where([
'shop_id' => $shop_id,
'limit' => ['<=', intval($price)]
])->select() as $row) {
// 筛选出还未开始的
if(!($row['pretype'] == 'fixed' && (strtotime($row['startdate']) >= time() || strtotime($row['enddate']) < time()))){
//追加字段
$row['choice'] = false;
// 检查指定的键名是否存在于数组中
if(array_key_exists($row['id'], $user_coupon)){
$row['invalid'] = 0; // 强制转换优惠券状态
$row['id'] = $user_coupon[$row['id']]['id'];
$row['state'] = true;
}else{
$row['state'] = false;
}
// 排除失效优惠券
if($row['invalid'] == 0){
// 高级查询,比较数组,返回交集(array_intersect)如果和原数据数目相同则加入
if($row['rangetype'] == 'all'){
$list[] = $row;
}
if($row['rangetype'] == 'goods' && count($goods_id) == count(array_intersect($goods_id, explode(",",$row['range'])))){
$list[] = $row;
}
// 1.1.0升级
if($row['rangetype'] == 'category'){
// 判断优化全类目是否在商品类目中,explode(',', $row['range'])[0] 目的向前兼容
if( in_array(explode(',', $row['range'])[0], $shop_category_id) ){
$list[] = $row;
}
}
}
}
}
// 开始查询 二
// $list = [];
// //要追加一个排序 选出一个性价比最高的
// foreach (model('app\api\model\wanlshop\Coupon')->where([
// 'shop_id' => $shop_id,
// 'limit' => ['<=', intval($price)]
// ])->select() as $row) {
// // 如果优惠券状态有效 或 无效且我的列表中存在的
// if($row['invalid'] == 0 || ($row['invalid'] == 1 && array_key_exists($row['id'], $user_coupon))){
// // 筛选出过期的
// if(!($row['pretype'] == 'fixed' && strtotime($row['startdate']) >= time())){
// // 高级查询,比较数组,返回交集如果和原数据数目相同则加入
// if($row['rangetype'] == 'goods'){
// $goods_id = explode(",",$goods_id);
// if(count($goods_id) == count(array_intersect($goods_id, explode(",",$row['range'])))){
// // 检查指定的键名是否存在于数组中
// if(array_key_exists($row['id'], $user_coupon)){
// $row['id'] = $user_coupon[$row['id']]['id'];
// $row['state'] = true;
// }else{
// $row['state'] = false;
// }
// $row['choice'] = false;
// $list[] = $row;
// }
// }else if($row['rangetype'] == 'category'){
// $shop_category_id = explode(",",$shop_category_id);
// if(count($shop_category_id) == count(array_intersect($shop_category_id, explode(",",$row['range'])))){
// if(array_key_exists($row['id'], $user_coupon)){
// $row['id'] = $user_coupon[$row['id']]['id'];
// $row['state'] = true;
// }else{
// $row['state'] = false;
// }
// $row['choice'] = false;
// $list[] = $row;
// }
// }else{
// if(array_key_exists($row['id'], $user_coupon)){
// $row['id'] = $user_coupon[$row['id']]['id'];
// $row['state'] = true;
// }else{
// $row['state'] = false;
// }
// $row['choice'] = false;
// $list[] = $row;
// }
// }
// }
// }
$this->success('ok', $list);
}
/**
* 获取我的优惠券列表
*
* @ApiSummary (WanlShop 优惠券接口获取我的优惠券列表)
* @ApiMethod (GET)
* 2020年9月16日08:09:17
*
* @param string $state 类型
*/
public function getMyList($state = null)
{
$list = model('app\api\model\wanlshop\CouponReceive')
->where([
'state' => $state,
'user_id' => $this->auth->id
])
->order('createtime desc')
->paginate()
->each(function($order, $key){
$order['shop'] = $order->shop?$order->shop->visible(['shopname']):[];
return $order;
});
$list?($this->success('ok',$list)):($this->error(__('网络繁忙')));
}
/**
* 领取优惠券
*
* @ApiSummary (WanlShop 优惠券接口领取优惠券)
* @ApiMethod (POST)
* 2020年9月16日03:32:43
*
* @param string $id 优惠券ID
*/
public function receive()
{
//设置过滤方法
$this->request->filter(['strip_tags']);
if ($this->request->isPost()) {
$id = $this->request->post('id');
$user_id = $this->auth->id;
$coupon = model('app\api\model\wanlshop\Coupon')->get($id);
if(!$coupon){
$this->error(__('网络繁忙或优惠券不存在'));
}
// 查询此ID领取几张
$myCouponCount = model('app\api\model\wanlshop\CouponReceive')
->where(['coupon_id' => $id, 'user_id' => $user_id])
->count();
// 判断是否发完
if($coupon['drawlimit'] != 0){
if($myCouponCount >= $coupon['drawlimit']){
$this->error(__('亲,您已领取了'.$myCouponCount.'张,不能在领了!'));
}
}
// 判断是否超出总数量
if($coupon['grant'] != '-1'){
if($coupon['alreadygrant'] >= intval($coupon['grant']) || $coupon['surplus'] == 0){
$this->error(__('亲,您来晚了,刚刚被抢完!'));
}
}
// 判断优惠券是否过期
if($coupon['pretype'] == 'fixed'){
if(time() > strtotime($coupon['enddate'])){
$this->error(__('此张优惠券已经过期了'));
}
}
// 领取优惠券并保留备份
$result = model('app\api\model\wanlshop\CouponReceive');
$result->state = 1;
$result->coupon_id = $id;
$result->coupon_no = Random::alnum(16);
$result->user_id = $user_id;
$result->shop_id = $coupon['shop_id'];
$result->type = $coupon['type'];
$result->name = $coupon['name'];
$result->userlevel = $coupon['userlevel'];
$result->usertype = $coupon['usertype'];
$result->price = $coupon['price'];
$result->discount = $coupon['discount'];
$result->limit = $coupon['limit'];
$result->rangetype = $coupon['rangetype'];
$result->range = $coupon['range'];
$result->pretype = $coupon['pretype'];
$result->validity = $coupon['validity'];
$result->startdate = $coupon['startdate'];
$result->enddate = $coupon['enddate'];
$result->save();
if($result){
if($coupon['grant'] != '-1'){
// 剩余数量
$data['surplus'] = $coupon['surplus'] - 1;
// 即将过期,强制失效
if($coupon['surplus'] == 1){
$data['invalid'] = 1;
}
}
$data['alreadygrant'] = $coupon['alreadygrant'] + 1;
// 更新优惠券领取+1
$coupon->allowField(true)->save($data);
$this->success(__('ok'),['msg' => '恭喜此券,成功领取第 '.($myCouponCount+1).' 张','id' => $result['id']]);
}else{
$this->error(__('网络繁忙,领取失败'));
}
}
$this->error(__('非法请求'));
}
/**
* 立即使用优惠券
*
* @ApiSummary (WanlShop 优惠券接口立即使用优惠券)
* @ApiMethod (GET)
* 2020年9月16日03:32:43
* 2020年11月6日10:03:08 1.0.2升级
*
* @param string $id 优惠券ID
*/
public function apply($id = null)
{
$coupon = model('app\api\model\wanlshop\CouponReceive')->get($id);
if($coupon){
$where['shop_id'] = $coupon['shop_id'];
$where['price'] = ['EGT', $coupon['limit']];
// 指定商品
if($coupon['rangetype'] == 'goods'){
$where['id'] = ['IN', $coupon['range']];
}
// 指定分类
if($coupon['rangetype'] == 'category'){
// 1.1.2升级
$where[] = ['EXP', Db::raw('FIND_IN_SET('.$coupon->range.', shop_category_id)')];
}
$list = model('app\api\model\wanlshop\Goods')
->where($where)
->order('createtime desc')
->paginate();
foreach ($list as $row) {
$row->shop->visible(['id','avatar','shopname']);
}
$this->success('ok', ['coupon' => $coupon, 'goods' => $list]);
}
$this->error(__('非正常请求'));
}
}