CouponUser.php 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 用户优惠券管理
  7. */
  8. namespace app\allwin\model;
  9. use app\allwin\model\CouponLog;
  10. use app\allwin\model\Coupon;
  11. use think\Model;
  12. use think\facade\Log;
  13. class CouponUser extends Model{
  14. protected $pk = 'id';
  15. protected $table = 'ai_allwin_coupon_user';
  16. /**
  17. * 好店
  18. * @return void
  19. */
  20. public function store(){
  21. return $this->hasOne('AllwinStore','id','store_id');
  22. }
  23. /**
  24. * 用户
  25. * @return void
  26. */
  27. public function user(){
  28. return $this->hasOne('app\common\model\SystemUser','id','uid');
  29. }
  30. /**
  31. * 优惠券
  32. * @return void
  33. */
  34. public function coupon(){
  35. return $this->hasOne('Coupon','id','coupon_id');
  36. }
  37. /**
  38. * 用户优惠券减少(支付通知调用本函数)
  39. * @path allwin\controller\v4\Notify\storeWechat();
  40. * @param array $param
  41. * @return void
  42. */
  43. public static function userCouponPay($param){
  44. if(!$param->coupon_price){
  45. return;
  46. }
  47. $coupon = self::where(['id' => $param->coupon_user_id,'uid' => $param->uid,'is_end' => 0])->find();
  48. if(empty($coupon)){
  49. return;
  50. }
  51. $data = [];
  52. if($param->coupon_price <= $coupon->user_size){
  53. $user_size = $coupon->user_size - $param->coupon_price;
  54. $data['user_size'] = $user_size;
  55. }else{
  56. $user_size = 0;
  57. $data['user_size'] = $user_size;
  58. $data['is_end'] = 1;
  59. }
  60. self::where(['id' => $coupon->id])->update($data); //更新状态
  61. $rule = [];
  62. $rule['member_miniapp_id'] = $param->member_miniapp_id;
  63. $rule['uid'] = $param->uid;
  64. $rule['coupon_id'] = $param->coupon_user_id;
  65. $rule['amount'] = $param->coupon_price;
  66. $rule['times'] = $param->paid_time;
  67. return CouponLog::insert($rule);
  68. }
  69. /**
  70. * 单独添加用户优惠券
  71. * @param array $ids 优惠券的ID
  72. * @param integer $uid 用户ID
  73. * @return void
  74. */
  75. public static function createUserCoupon($coupon_id,int $uid){
  76. $coupon = Coupon::where(['id' => $coupon_id])->find();
  77. if(empty($coupon)){
  78. return;
  79. }
  80. $data = [];
  81. $data['uid'] = $uid;
  82. $data['member_miniapp_id'] = $coupon['member_miniapp_id'];
  83. $data['store_id'] = $coupon['store_id'];
  84. $data['coupon_id'] = $coupon['id'];
  85. $data['types'] = $coupon['types'];
  86. $data['name'] = $coupon['name'];
  87. $data['size'] = $coupon['size'];
  88. $data['user_size'] = $coupon['size'];
  89. $data['price'] = $coupon['price'];
  90. $data['discount'] = $coupon['discount'];
  91. $data['weekday'] = $coupon['weekday'];
  92. $data['howmuch'] = $coupon['howmuch'];
  93. $data['starttime'] = $coupon['starttime'];
  94. $data['endtime'] = $coupon['endtime'];
  95. $data['tips'] = $coupon['tips'];
  96. $data['longtime'] = $coupon['longtime'];
  97. $data['daynumss'] = $coupon['daynum'];
  98. $data['ontypes'] = $coupon['ontypes'];
  99. $data['is_end'] = 0;
  100. $data['update_time'] = time();
  101. $data['create_time'] = time();
  102. $coupon->num = ['inc', 1];
  103. $coupon->save();
  104. return CouponUser::create($data);
  105. }
  106. /**
  107. * 批量添加优惠券
  108. * @param array $ids 优惠券的ID
  109. * @param integer $uid 用户ID
  110. * @return void
  111. */
  112. public static function addUserCoupon($ids,int $uid){
  113. $ids = json_decode($ids,true);
  114. if(empty($ids)){
  115. return;
  116. }
  117. $coupon = new Coupon;
  118. $lists = $coupon->where(['id' => $ids])->select();
  119. if(empty($lists)){
  120. return;
  121. }
  122. $data = [];
  123. $coupon_num = [];
  124. foreach ($lists as $key => $value) {
  125. $data[$key]['uid'] = $uid;
  126. $data[$key]['member_miniapp_id'] = $value['member_miniapp_id'];
  127. $data[$key]['store_id'] = $value['store_id'];
  128. $data[$key]['coupon_id'] = $value['id'];
  129. $data[$key]['types'] = $value['types'];
  130. $data[$key]['name'] = $value['name'];
  131. $data[$key]['size'] = $value['size'];
  132. $data[$key]['user_size'] = $value['size'];
  133. $data[$key]['price'] = $value['price'];
  134. $data[$key]['discount'] = $value['discount'];
  135. $data[$key]['weekday'] = $value['weekday'];
  136. $data[$key]['howmuch'] = $value['howmuch'];
  137. $data[$key]['starttime'] = $value['starttime'];
  138. $data[$key]['endtime'] = $value['endtime'];
  139. $data[$key]['tips'] = $value['tips'];
  140. $data[$key]['longtime'] = $value['longtime'];
  141. $data[$key]['daynum'] = $value['daynum'];
  142. $data[$key]['ontypes'] = $value['ontypes'];
  143. $data[$key]['is_end'] = 0;
  144. $data[$key]['update_time'] = time();
  145. $data[$key]['create_time'] = time();
  146. $coupon_num[$key]['num'] = $value['num']-1;
  147. $coupon_num[$key]['id'] = $value['id'];
  148. }
  149. $rel = self::insertAll($data);
  150. if($rel){
  151. return $coupon->saveAll($coupon_num);
  152. }
  153. return;
  154. }
  155. /**
  156. * 返回我所有正常能使用未过期和未使用完的优惠券
  157. * @param integer $uid 用户ID
  158. * @param integer $store_id 店铺ID
  159. * @return array
  160. */
  161. public static function userCouponIds(int $uid,int $coupon_id = 0,int $store_id = 0){
  162. $condition = self::condition($uid,$coupon_id,$store_id);
  163. $coupon = self::where($condition)->field('uid,store_id,coupon_id')->select()->toArray();
  164. return empty($coupon) ? [] : array_unique(array_column($coupon,'coupon_id'));
  165. }
  166. /**
  167. * 统计某个优惠券、某个好店、某个用户正常的优惠券数量
  168. * @param integer $uid
  169. * @param integer $store_id
  170. * @return void
  171. */
  172. public static function userCouponCount(int $uid,int $coupon_id = 0,int $store_id = 0){
  173. $condition = self::condition($uid,$coupon_id,$store_id);
  174. return self::where($condition)->field('uid,store_id,coupon_id')->count();
  175. }
  176. //查询某个用户的优惠券列表(API)
  177. public static function userCoupon(array $condition,int $page = 10){
  178. return self::with('store')->where($condition)->order('id desc')->paginate($page,true);
  179. }
  180. //无翻页
  181. public static function userStoreCoupon(array $condition){
  182. return self::with('store')->where($condition)->select();
  183. }
  184. //查询单个优惠券
  185. public static function getuser(array $condition){
  186. return self::with('store')->where($condition)->find();
  187. }
  188. /**
  189. * #####################################################
  190. * 返回查询条件 function
  191. * @param integer $uid
  192. * @param integer $coupon_id
  193. * @param integer $store_id
  194. * @return array
  195. */
  196. public static function condition(int $uid,int $coupon_id = 0,int $store_id = 0){
  197. $times = time(); //获取现在的时间
  198. $condition = [];
  199. $condition[] = ['uid','=',$uid];
  200. $condition[] = ['endtime','>',$times];
  201. $condition[] = ['is_end','=',0];
  202. $condition[] = ['user_size','>',0];
  203. if($store_id){
  204. $condition[] = ['store_id','=',$store_id];
  205. }
  206. if($coupon_id){
  207. $condition[] = ['coupon_id','=',$coupon_id];
  208. }
  209. return $condition;
  210. }
  211. }