Coupon.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. /**
  3. * 优惠券
  4. */
  5. namespace app\ais\controller\api\v1;
  6. use app\ais\controller\api\Base;
  7. use app\ais\model\AisCoupon;
  8. use app\ais\model\AisStore;
  9. use app\ais\model\AisCouponUser;
  10. use app\ais\model\AisStoreUnion;
  11. use think\Db;
  12. class Coupon extends Base{
  13. /**
  14. * 查询优惠券
  15. * mode(new|hot|max)
  16. * @return void
  17. */
  18. public function index(){
  19. $param['mode'] = $this->request->param('mode/s','new');
  20. $param['page'] = $this->request->param('page/d',1);
  21. $this->apiSign($param);
  22. $validate = $this->validate($param,'Coupon.api');
  23. if(true !== $validate){
  24. return enjson(403,$validate);
  25. }
  26. if($param['mode'] == 'hot'){
  27. $condition = [['c.member_miniapp_id','=',$this->miniapp_id],['c.is_lock','=',0],['c.types','<=',2],['c.is_end','=',0]];
  28. }else{
  29. $condition = [['member_miniapp_id','=',$this->miniapp_id],['is_lock','=',0],['types','<=',2],['is_end','=',0]];
  30. }
  31. //查询语句
  32. $couponSql = AisCoupon::with(['store' => function($query) {
  33. $query->field('id,name,img');
  34. }]);
  35. switch ($param['mode']) {
  36. case 'hot':
  37. $sql = $couponSql->alias('c')->where($condition)->join('AisCouponUser u', 'c.id = u.coupon_id')->where(['u.member_miniapp_id' => $this->miniapp_id])
  38. ->field('c.*,count(coupon_id) as hot')->group('u.coupon_id')->order('hot desc,c.is_top desc,c.sort desc,c.create_time desc');
  39. break;
  40. case 'max':
  41. $sql = $couponSql->where($condition)->field('*,IF(types > 0,howmuch - howmuch * discount/10,price) as money')->order('money desc,is_top desc,sort desc,create_time desc');
  42. break;
  43. default:
  44. $sql = $couponSql->where($condition)->order('is_top desc,sort desc,create_time desc');
  45. break;
  46. }
  47. $coupon = $sql->page($param['page'],10)->select();
  48. if ($coupon->isEmpty()) {
  49. return enjson(204,'没有优惠券');
  50. }
  51. //判断已领取
  52. if ($this->user) {
  53. $coupon_ids = array_column($coupon->toArray(),'id');
  54. $user_coupon = AisCouponUser::where(['coupon_id' => $coupon_ids,'uid' => $this->user->id,'is_end'=> 0])->field('uid,store_id,coupon_id')->select()->toArray();
  55. $user_coupon_id = array_unique(array_column($user_coupon,'coupon_id'));
  56. //给已领取的加状态
  57. foreach ($coupon as $key => $value) {
  58. $coupon[$key]->is_get_coupon = in_array($value['id'],$user_coupon_id) ? 1 : 0;
  59. }
  60. }
  61. return enjson(200,$coupon);
  62. }
  63. /**
  64. * 显示单个优惠券信息
  65. * @return void
  66. */
  67. public function read(){
  68. $param['id'] = $this->request->param('id'); //优惠券id
  69. $this->apiSign($param);
  70. $info = AisCoupon::with(['couponuser' => function($query) {
  71. $query->field('coupon_id,is_end,create_time');
  72. },'store' => function($query) {
  73. $query->field('id,name,address,longitude,latitude,img,telphone');
  74. }])->where(['member_miniapp_id' => $this->miniapp_id,'id' => $param['id']])->find();
  75. if (empty($info)) {
  76. return enjson(404,'未找到优惠券');
  77. }
  78. $info->is_get_coupon = (empty($info->couponuser) || $info->couponuser->is_end == 1) ? 0 : 1;
  79. $info->store->img = $info->store->img;
  80. if(!empty($this->lbs)){
  81. $info->store->distance = getDistance($this->lbs->lng,$this->lbs->lat,$info->store->longitude,$info->store->latitude);
  82. }
  83. return enjson(200,$info);
  84. }
  85. /**
  86. * 指定商家的优惠券
  87. * @return void
  88. */
  89. public function store(){
  90. $param['store_id'] = $this->request->param('store_id'); //商家ID
  91. $param['page'] = $this->request->param('page/d',1); //翻页
  92. $this->apiSign($param);
  93. $coupon = AisCoupon::where(['member_miniapp_id' => $this->miniapp_id,'store_id' => $param['store_id'] ,'is_end' => 0])->where('types','<',3)->order('is_top desc,sort desc,create_time desc')->page($param['page'],10)->select();
  94. if ($coupon->isEmpty()) {
  95. return enjson(204);
  96. }
  97. return enjson(200,$coupon);
  98. }
  99. }