MemberWelfareDraw.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. namespace app\api\model\member;
  3. use app\api\model\UserCoupon as UserCouponModel;
  4. use app\common\model\member\MemberWelfareDraw as MemberWelfareDrawModel;
  5. use app\store\model\Coupon;
  6. use app\store\model\member\MemberCooperationCoupon;
  7. use think\facade\Db;
  8. /**
  9. * 会员福利操作模型
  10. * @package app\common\model
  11. */
  12. class MemberWelfareDraw extends MemberWelfareDrawModel
  13. {
  14. protected $append = [];
  15. const TARGET_TYPE_HYZS = 1;//会员专属
  16. const TARGET_TYPE_YYFU = 2;//异业福利
  17. public function drawAction($id,$user){
  18. $w = MemberWelfare::find($id);
  19. //dd($w->draw_amount);
  20. if (empty($w) || $w->use_up == 1){
  21. $this->error = '福利已结束';
  22. return false;
  23. }
  24. $code_id = 0;
  25. $flag = 0;
  26. if($w->target_type == self::TARGET_TYPE_YYFU){
  27. $code = MemberCooperationCoupon::where(['welfare_id'=>$id,'used'=>0])->lock(true)->find();
  28. if (empty($code)){
  29. $this->error = '福利已领完,下次早点来哦';
  30. return false;
  31. }
  32. $code_id = $code->id;
  33. }elseif($w->target_type == self::TARGET_TYPE_HYZS){
  34. $model = new UserCouponModel;
  35. $flag = $model->receive($w->coupon_id,false,true);
  36. //dd($flag);
  37. if ($flag === false){
  38. $this->error = $model->getError();
  39. return false;
  40. }
  41. }
  42. $m = new self();
  43. $data['user_id'] =$user->user_id;
  44. $data['target_type'] =$w->target_type;
  45. $data['target_id'] =$id;
  46. $data['number'] =$w->number;
  47. $data['name'] =$w->name;
  48. $data['cost'] =$w->cost;
  49. $data['amount'] =$w->amount;
  50. $data['start_time'] =$w->start_time;
  51. $data['end_time'] =$w->end_time;
  52. $data['use_start_time'] =$w->use_start_time;
  53. $data['use_end_time'] =$w->use_end_time;
  54. $data['exchange_type'] =$w->exchange_type;
  55. $data['position'] =$w->position;
  56. $data['url'] =$w->url;
  57. $data['img'] =$w->img;
  58. $data['code_id'] =$code_id;
  59. $data['user_coupon_id'] =$flag;
  60. $data['deploy_type'] =$w->deploy_type;
  61. $data['create_time'] =time();
  62. $data['update_time'] =time();
  63. Db::startTrans();
  64. try {
  65. $insertId = $m->insertGetId($data);
  66. if($w->target_type == self::TARGET_TYPE_YYFU) {
  67. $code->where('id',$code_id)->where('used',0)->update(['user_id'=>$user->user_id,'used'=>1]);
  68. }
  69. if($w->target_type == self::TARGET_TYPE_HYZS && $flag){
  70. $model = new UserCouponModel;
  71. $flag = $model->where('user_coupon_id',$flag)->update(['member_welfare_draw_id'=>$insertId]);
  72. //dd($flag);
  73. if ($flag === false){
  74. $this->error = $model->getError();
  75. return false;
  76. }
  77. }
  78. $w->draw_amount = $w->draw_amount+1;
  79. log_record($w->amount.'-----'.$w->draw_amount);
  80. if ($w->amount <= $w->draw_amount){
  81. $w->use_up = 1;
  82. }
  83. $w->save();
  84. // 提交事务
  85. Db::commit();
  86. } catch (\Exception $e) {
  87. // 回滚事务
  88. Db::rollback();
  89. log_record($e->getMessage());
  90. $this->error = '系统繁忙';
  91. return false;
  92. }
  93. return true;
  94. }
  95. /**
  96. * 会员福利领取记录
  97. * @param $userId
  98. * @return \think\Paginator
  99. * @throws \think\db\exception\DbException
  100. */
  101. public function welfareRecords($userId){
  102. $now = time();
  103. return $this->where('user_id',$userId)
  104. ->field('id,user_id,target_id,target_type,name,cost,use_start_time,use_end_time,use_status,create_time,check_status,user_coupon_id')
  105. ->order('id desc')
  106. ->paginate(15)->each(function(&$item) use ($now){
  107. $item['is_expired'] = 0;
  108. $et = 0;
  109. if ($item['target_type'] == self::TARGET_TYPE_YYFU){
  110. $et = strtotime($item['use_end_time']);
  111. }
  112. if ($item['target_type'] == self::TARGET_TYPE_HYZS){
  113. $coupon = MemberWelfare::detail($item['target_id']);
  114. $item['coupon'] = Coupon::where('coupon_id',$coupon['coupon_id'])->field('coupon_id,name,reduce_price,min_price,status,audit_status')->find();
  115. $userCp = UserCouponModel::where('user_coupon_id',$item['user_coupon_id'])->field('user_coupon_id,expire_time')->find();
  116. $et = strtotime($userCp['expire_time']);
  117. }
  118. if ($et < $now){
  119. $item['is_expired'] = 1;
  120. }
  121. });
  122. }
  123. public function myWelfareDetail($id){
  124. $item = $this->with(['checkcode','welfare','user'])->where('id',$id)
  125. ->field('id,user_id,target_id,target_type,name,deploy_type,check_status,check_time,cost,exchange_type,use_start_time,use_end_time,create_time,code_id,check_status,url,user_coupon_id')
  126. ->find();
  127. $item['exchange_type'] = json_decode($item['exchange_type']);
  128. $item['is_expired'] = 0;
  129. //$et = strtotime($item['use_end_time']);
  130. $et = 0;
  131. if ($item['target_type'] == self::TARGET_TYPE_YYFU){
  132. $et = strtotime($item['use_end_time']);
  133. }
  134. if ($item['target_type'] == self::TARGET_TYPE_HYZS){
  135. $userCp = UserCouponModel::where('user_coupon_id',$item['user_coupon_id'])
  136. ->field('user_coupon_id,expire_time')->find();
  137. $et = strtotime($userCp['expire_time']);
  138. }
  139. if ($et < time()){
  140. $item['is_expired'] = 1;
  141. }
  142. return $item;
  143. }
  144. // public function checkcode(){
  145. // return $this->belongsTo(\app\common\model\member\MemberCooperationCoupon::class,'code_id','id')
  146. // ->field('id,coupon_id,welfare_id,code');
  147. //}
  148. //
  149. // public function welfare()
  150. // {
  151. // return $this->belongsTo(MemberWelfare::class, 'target_id', 'id')
  152. // ->field('id,desc,shop_desc');
  153. // }
  154. }