Activity.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\api\controller\coupon;
  13. use app\api\controller\Controller;
  14. use app\api\model\coupon\CouponActivity as ActivityModel;
  15. use app\api\model\coupon\CouponActivityJoin as CouponActivityJoinModel;
  16. use app\api\model\coupon\CouponActivityStatistics as CouponActivityStatisticsModel;
  17. use app\api\model\coupon\CouponActivityStatisticsRecord as CouponActivityStatisticsRecordModel;
  18. use app\api\model\coupon\CouponActivityHelp as CouponActivityHelpModel;
  19. use app\api\service\User as UserService;
  20. use app\api\model\coupon\CouponActivityCoupon as CouponActivityCouponModel;
  21. use app\api\model\Coupon as CouponModel;
  22. use app\api\model\UserCoupon as UserCouponModel;
  23. /**
  24. * 裂变活动控制器
  25. * Class Article
  26. * @package app\api\controller
  27. */
  28. class Activity extends Controller
  29. {
  30. /**
  31. * 活动详情
  32. * @param int $articleId
  33. * @return array|\think\response\Json
  34. * @throws \app\common\exception\BaseException
  35. */
  36. public function detail(int $id)
  37. {
  38. $activity = ActivityModel::where('id','=',$id)->find();
  39. if(empty($activity)||$activity->audit_status!=1||$activity->status!=1){
  40. return $this->renderError("活动已结束");
  41. }
  42. $userinfo = UserService::getCurrentLoginUser(false);
  43. $user_id = $userinfo->user_id??0;
  44. $join = null;
  45. if($user_id>0){
  46. $join = CouponActivityJoinModel::where('coupon_activity_id',$id)->where("user_id",'=',$user_id)->find();
  47. }
  48. // if(empty($join)){
  49. // $join['coupon_activity_id'] = $id;
  50. // $join['user_id'] = $user_id;
  51. // $join['extend_num'] = $activity->extend_num;
  52. // $join['have_extend_num'] = 0;
  53. // $join['extend_success'] = 0;
  54. // $join['create_time'] = time();
  55. // $join['update_time'] = time();
  56. // $joinModel = new CouponActivityJoinModel;
  57. // $id = $joinModel->save($join);
  58. // $join['id'] = $joinModel->id;
  59. // }
  60. $coupon = null;
  61. $coupon_id_arr = CouponActivityCouponModel::where('coupon_activity_id',$id)->where('type',1)->column('coupon_id');
  62. // 优惠券列表
  63. $now = Date("Y-m-d H:i:s",time());
  64. $query = new CouponModel;
  65. $couponList = $query->where('receive_type','=',10)->where('send_type','=',10)->where('is_delete', '=', 0)->where('audit_status','=',10)->where('status','=',1)->where('start_time','<',$now)->where("end_time",">",$now)->where("coupon_id",'in',$coupon_id_arr)
  66. ->order(['reduce_price'=>'desc', 'create_time' => 'desc'])
  67. ->select();
  68. $activity['fmt_time'] = date("Y年m月d日",strtotime($activity['start_time'])).'至'. date("Y年m月d日",strtotime($activity['end_time']));
  69. $data['activity'] = $activity;
  70. $data['join'] = $join;
  71. $data['coupon'] = $couponList;
  72. return $this->renderSuccess(compact('data'));
  73. }
  74. /**
  75. * 裂变活动埋点接口
  76. * @return array
  77. * @throws \think\db\exception\DataNotFoundException
  78. * @throws \think\db\exception\DbException
  79. * @throws \think\db\exception\ModelNotFoundException
  80. * @author: zjwhust
  81. * @Time: 2022/1/22 18:08
  82. */
  83. public function statistics(){
  84. $param = $this->request->param();
  85. $couponActivityStatisticsModel = CouponActivityStatisticsModel::where(['coupon_activity_id'=>$param['coupon_activity_id']])->find();
  86. $id = $couponActivityStatisticsModel['id'];
  87. $param['coupon_activity_statistics_id'] = $id;
  88. CouponActivityStatisticsRecordModel::create($param);
  89. if($param['type']==2){
  90. CouponActivityStatisticsModel::setIncField($id,'share_nums');
  91. }
  92. if($param['user_id']>0){
  93. if(CouponActivityStatisticsRecordModel::where(['user_id'=>$param['user_id'],'coupon_activity_id'=>$param['coupon_activity_id'],'type'=>$param['type']])->count()<2){
  94. //如果当前用户没有创建的记录,那么久加1
  95. // 1首页 2分享 3被分享页面 4被分享领取 5被分享人二次分享
  96. switch ($param['type']){
  97. case 1:
  98. CouponActivityStatisticsModel::setIncField($id,'home_people');
  99. break;
  100. case 2:
  101. CouponActivityStatisticsModel::setIncField($id,'share_people_nums');
  102. break;
  103. case 3:
  104. CouponActivityStatisticsModel::setIncField($id,'newpage_people_nums');
  105. break;
  106. case 4:
  107. CouponActivityStatisticsModel::setIncField($id,'newpage_share_people_nums');
  108. break;
  109. case 5:
  110. CouponActivityStatisticsModel::setIncField($id,'two_share_people_nums');
  111. break;
  112. }
  113. }
  114. }
  115. return $this->renderSuccess();
  116. }
  117. public function join(int $id){
  118. $activity = ActivityModel::where('id','=',$id)->find();
  119. if(empty($activity)||$activity->audit_status!=1||$activity->status!=1||$activity->activity_status['code']!=1){
  120. return $this->renderError("活动已结束");
  121. }
  122. $userinfo = UserService::getCurrentLoginUser(true);
  123. $user_id = $userinfo->user_id;
  124. $join = null;
  125. $join = CouponActivityJoinModel::where('coupon_activity_id',$id)->where("user_id",'=',$user_id)->find();
  126. if(empty($join)){
  127. $join['coupon_activity_id'] = $id;
  128. $join['user_id'] = $user_id;
  129. $join['extend_num'] = $activity->extend_num;
  130. $join['have_extend_num'] = 0;
  131. $join['extend_success'] = 0;
  132. $join['create_time'] = time();
  133. $join['update_time'] = time();
  134. $joinModel = new CouponActivityJoinModel;
  135. $id = $joinModel->save($join);
  136. $join['id'] = $joinModel->id;
  137. }
  138. return $this->renderSuccess(compact('join'));
  139. }
  140. public function helpinfo($join_id){
  141. $userinfo = UserService::getCurrentLoginUser(false);
  142. $join = CouponActivityJoinModel::where('id',$join_id)->find();
  143. $coupon_id_arr = CouponActivityCouponModel::where('coupon_activity_id',$join->coupon_activity_id)->where('type',2)->column('coupon_id');
  144. // 优惠券列表
  145. $now = Date("Y-m-d H:i:s",time());
  146. $query = new CouponModel;
  147. $couponList = $query->where('receive_type','=',10)->where('send_type','=',10)->where('is_delete', '=', 0)->where('audit_status','=',10)->where('status','=',1)->where('start_time','<',$now)->where("end_time",">",$now)->where("coupon_id",'in',$coupon_id_arr)
  148. ->order(['reduce_price'=>'desc', 'create_time' => 'desc'])
  149. ->select();
  150. $data['is_login'] = false;
  151. $activity = ActivityModel::where('id','=',$join->coupon_activity_id)->find();
  152. $data['activity'] =$activity;
  153. if(empty($activity)||$activity->audit_status!=1||$activity->status!=1||$activity->activity_status['code']!=1){
  154. // return $this->renderError("活动已结束");
  155. }
  156. $data['fmt_time'] = date("Y年m月d日",strtotime($activity['start_time'])).'至'. date("Y年m月d日",strtotime($activity['end_time']));
  157. if(empty($userinfo)){
  158. $data['is_join_self'] = false;
  159. $data['is_help'] = false;
  160. $data['coupon_activity_id'] = $join->coupon_activity_id;
  161. $data['help_coupon'] = $couponList;
  162. return $this->renderSuccess(compact('data'));
  163. }
  164. $data['is_login'] = true;
  165. $user_id = $userinfo->user_id;
  166. $help = CouponActivityHelpModel::where('user_id',$user_id)->where("coupon_activity_join_id",$join_id)->find();
  167. $my_join = CouponActivityJoinModel::where('coupon_activity_id',$join->coupon_activity_id)->where("user_id",'=',$user_id)->find();
  168. $data['is_join_self'] = $user_id ==$join->user_id ?true:false;
  169. $data['is_help'] = $help?true:false;
  170. $data['coupon_activity_id'] = $join->coupon_activity_id;
  171. $data['help_coupon'] = $couponList;
  172. return $this->renderSuccess(compact('data'));
  173. }
  174. //领取
  175. public function tohelp($join_id){
  176. $userinfo = UserService::getCurrentLoginUser(true);
  177. $user_id = $userinfo->user_id;
  178. $join = CouponActivityJoinModel::where('id',$join_id)->find();
  179. if(empty($join)){
  180. return $this->renderError("找不到分享信息");
  181. }
  182. if($join->user_id==$user_id){
  183. return $this->renderError("请邀请好友领取");
  184. }
  185. $activity = ActivityModel::where('id','=',$join->coupon_activity_id)->find();
  186. if(empty($activity)||$activity->audit_status!=1||$activity->status!=1||$activity->activity_status['code']!=1){
  187. return $this->renderError("活动已结束");
  188. }
  189. $user_id = $userinfo->user_id;
  190. $help = CouponActivityHelpModel::where('user_id',$user_id)->where("coupon_activity_join_id",$join_id)->find();
  191. if($help){
  192. return $this->renderError("券包已领取");
  193. }
  194. $activity_id = $join->coupon_activity_id;
  195. $join->have_extend_num = $join->have_extend_num + 1;
  196. if($join->have_extend_num>=$join->extend_num&&$join->extend_success==0){
  197. $join->extend_success = 1;
  198. $this->addCoupon($activity_id,1,$join->user_id);
  199. }
  200. $join->save();
  201. $data['coupon_activity_id'] = $join->coupon_activity_id;
  202. $data['coupon_activity_join_id'] = $join_id;
  203. $data['user_id'] = $user_id;
  204. $data['create_time'] = time();
  205. $data['update_time'] = time();
  206. $helpModel = new CouponActivityHelpModel;
  207. $helpModel->save($data);
  208. $this->addCoupon($activity_id,2,$user_id);
  209. return $this->renderSuccess();
  210. }
  211. public function addCoupon($activity_id,$type,$user_id){
  212. $coupon_id_arr = CouponActivityCouponModel::where('coupon_activity_id',$activity_id)->where('type',$type)->column("coupon_id");
  213. $flag = true;
  214. $coupon_id_suc = [];
  215. log_record("type:".$type." coupon_id".implode(",",$coupon_id_arr));
  216. $list = CouponModel::where('coupon_id','in',$coupon_id_arr)->select();
  217. foreach($list as $row){
  218. $limit_receive_cnt = $row['limit_receive_cnt'];
  219. $coupon_id = $row['coupon_id'];
  220. for($i=0;$i<$limit_receive_cnt;$i++){
  221. $model = new UserCouponModel;
  222. $ok = $model->userreceive($coupon_id,$user_id);
  223. if(!$ok){
  224. $flag = false;
  225. }else{
  226. $coupon_id_suc[] = $coupon_id;
  227. }
  228. }
  229. }
  230. log_record("success:".implode(",",$coupon_id_suc));
  231. $coupon_id_suc[] = $coupon_id;
  232. return $flag;
  233. // foreach($coupon_id_arr as $coupon_id){
  234. // $model = new UserCouponModel;
  235. // $ok = $model->userreceive($coupon_id,$user_id);
  236. // if(!$ok){
  237. // $flag = false;
  238. // }else{
  239. // $coupon_id_suc[] = $coupon_id;
  240. // }
  241. // }
  242. }
  243. }