Active.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php namespace App\Http\Controllers\Api\Coupon;
  2. use App\Http\Controllers\Api\Api;
  3. use App\Models\Coupon\Active as Model;
  4. use App\Models\Custom;
  5. use App\Http\Requests\Api\Coupon\Active as Request;
  6. use App\Models\City;
  7. use App\Models\Coupon\ActiveCoupon;
  8. use App\Models\CouponProduct;
  9. use App\Models\CouponRebate;
  10. use App\Models\CustomCoupon;
  11. use App\Models\WeiBan\Tags as WeiBanTags;
  12. /**
  13. * 优惠券活动
  14. *
  15. * @author 刘相欣
  16. *
  17. * */
  18. class Active extends Api{
  19. /**
  20. * 获取抽奖配置 /api/coupon_active/get_detail
  21. *
  22. *
  23. * */
  24. public function get_detail(Request $request,Model $Model,Custom $Custom,WeiBanTags $WeiBanTags,City $City,ActiveCoupon $ActiveCoupon,CustomCoupon $CustomCoupon,CouponProduct $CouponProduct,CouponRebate $CouponRebate){
  25. // 接口验签
  26. // $this->verify_sign();
  27. // 验证参数
  28. $request->scene('get_detail')->validate();
  29. // 检查登录
  30. $uid = $this->checkLogin();
  31. // 接收参数
  32. $id = request('id',0);
  33. // 获取客户城市的数据
  34. $data = $Model->getOne($id);
  35. // 如果存在的话
  36. if( !$data ) return json_send(['code'=>'error','msg'=>'暂无活动','data'=>$data]);
  37. // 获取客户信息
  38. $custom = $Custom->getOne($uid);
  39. // 如果存在的话
  40. if( !$custom ) return json_send(['code'=>'no_login','msg'=>'请登录','data'=>['error'=>'无对应客户']]);
  41. // 默认可以参加活动
  42. $data['allow_join'] = 1;
  43. // 判断是不是可以参与
  44. if( $data['tag_scope'] ) {
  45. // 解析数组
  46. $data['tag_scope'] = explode(',',$data['tag_scope']);
  47. // 查询用户标签
  48. $tags = $WeiBanTags->getListByWeibanExtid($custom['weiban_extid']);
  49. // 标签范围限定时,默认不能参与
  50. $data['allow_join'] = 0;
  51. // 判断标签是不是存在
  52. foreach ($tags as $value) {
  53. // 标签范围内,允许参加
  54. if( in_array($value['name'],$data['tag_scope']) ) $data['allow_join'] = 1;
  55. }
  56. // 如果不能参与
  57. if( !$data['allow_join'] ) return json_send(['code'=>'error','msg'=>'账号不在标签范围','data'=>['error'=>'不在标签范围内']]);
  58. }
  59. // 判断是不是可以参与
  60. if( $data['city_ids'] ) {
  61. // 解析数组
  62. $data['city_ids'] = explode(',',$data['city_ids']);
  63. // 如果不在城市范围
  64. if( !in_array($custom['city_id'],$data['city_ids']) ) $data['allow_join'] = 0;
  65. // 如果不能参与
  66. if( !$data['allow_join'] ) return json_send(['code'=>'error','msg'=>'账号不在活动城市','data'=>['error'=>'账号不在活动城市']]);
  67. // 获取城市
  68. foreach ($data['city_ids'] as $key=>$value) {
  69. // 获取值
  70. $value = $City->getOne($value,'name');
  71. // 获取城市名
  72. $data['city_ids'][$key] = $value;
  73. }
  74. // 重组数据
  75. $data['city_ids'] = $data['city_ids'] ? implode('、',$data['city_ids']) : '';
  76. }
  77. // banner图片
  78. $data['banner_img'] = $data['banner_img'] ? path_compat($data['banner_img']) : '';
  79. // 时间处理
  80. $data['start_date'] = date('Y/m/d H:i',$data['start_time']);
  81. // 时间处理
  82. $data['end_date'] = date('Y/m/d H:i',$data['end_time']);
  83. // 获取该活动的匹配的优惠券
  84. $couponList = $ActiveCoupon->getListByActiveId($id);
  85. // 优惠券列表
  86. $couponIds = array_column($couponList,'coupon_id');
  87. // 通过优惠券ID,查询赠品
  88. $rebates = $CouponRebate->getRebatesByCouponIds($couponIds);
  89. // 已领取的优惠券
  90. $haveList = $CustomCoupon->isHaveCoupon($couponIds,$uid);
  91. // 商品范围
  92. $products = $CouponProduct->getProductList($couponIds);
  93. // 循环数据
  94. foreach ($couponList as $key => $value) {
  95. // 如果城市ID存在
  96. if( $value['city_ids'] ) {
  97. // 解析数组
  98. $value['city_ids'] = explode(',',$value['city_ids']);
  99. // 如果在城市范围
  100. if( !in_array($custom['city_id'],$value['city_ids']) ) {
  101. // 如果不在城市范围
  102. unset($couponList[$key]);
  103. continue;
  104. }
  105. }
  106. // 如果还没到开始时间
  107. if( $value['coupon_status'] ){
  108. // 如果不在城市范围
  109. unset($couponList[$key]);
  110. continue;
  111. }
  112. // 赠品范围
  113. $rebateScope = [];
  114. // 获取赠品列表
  115. foreach ($rebates as $vv) {
  116. // 获取优惠券的赠品
  117. if( $vv['coupon_id'] == $value['coupon_id'] ) {
  118. unset($vv['coupon_id']);
  119. // 赠品信息
  120. $rebateScope[] = $vv;
  121. }
  122. }
  123. // 赠品范围
  124. $value['rebate_scope'] = $rebateScope;
  125. // 产品范围
  126. $productScope = [];
  127. // 状态可用 且指定商品
  128. if( $value['type_id'] == 1 ) {
  129. // 获取赠品列表
  130. foreach ($products as $vv) {
  131. // 获取优惠券的赠品
  132. if( $vv['coupon_id'] == $value['coupon_id'] ) {
  133. // 赠品信息
  134. $productScope[] = $vv['product_id'];
  135. }
  136. }
  137. }
  138. // 商品范围
  139. $value['product_scope'] = $productScope;
  140. // 是否已经领取
  141. $value['is_have'] = isset($haveList[$value['coupon_id']]) ? 1 : 0;
  142. // 计算到期时间
  143. $value['exp_time'] = $value['exp_time'] > 1000 ? date('Y/m/d H:i',$value['exp_time']) : '领取后'.$value['exp_time'].'天失效';
  144. // 重组
  145. $couponList[$key] = $value;
  146. }
  147. // 优惠券
  148. $couponList = array_values($couponList);
  149. // 获取优惠券下的所有产品
  150. $productList = $CouponProduct->getProductListByCouponIds(array_column($couponList,'coupon_id'));
  151. // 产品列表
  152. $data['coupon_list'] = $couponList;
  153. $data['product_list'] = $productList;
  154. // 删除不必要的数据
  155. unset($data['tag_scope']);
  156. // 返回结果
  157. return json_send(['code'=>'success','msg'=>'获取成功','data'=>$data]);
  158. }
  159. }