UserCoupon.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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\store\model;
  13. use app\common\model\UserCoupon as UserCouponModel;
  14. use think\facade\Db;
  15. /**
  16. * 用户优惠券模型
  17. * Class UserCoupon
  18. * @package app\store\model
  19. */
  20. class UserCoupon extends UserCouponModel
  21. {
  22. /**
  23. * 获取列表记录
  24. * @param array $param
  25. * @return mixed
  26. */
  27. public function getList(array $param = [])
  28. {
  29. // 设置查询条件
  30. $filter = $this->getFilter($param);
  31. // 获取列表数据
  32. return $this->with(['user.avatar'])
  33. ->alias('m')
  34. ->field('m.*')
  35. ->join('user', 'user.user_id = m.user_id')
  36. ->where($filter)
  37. ->order(['m.create_time' => 'desc', $this->getPk()])
  38. ->paginate(15);
  39. }
  40. public function getUseTimeAttr($value)
  41. {
  42. if ($value > 0 ){
  43. return date('Y-m-d H:i:s',$value);
  44. }
  45. return '';
  46. }
  47. /**
  48. * 设置查询条件
  49. * @param array $param
  50. * @return array
  51. */
  52. private function getFilter(array $param): array
  53. {
  54. // 设置默认的检索数据
  55. $params = $this->setQueryDefaultValue($param, [
  56. 'userId' => 0, // 会员ID
  57. 'couponName' => '', // 优惠券名称
  58. 'nickName' => '', // 会员昵称
  59. 'betweenTime' => [], // 起止时间
  60. ]);
  61. // 检索查询条件
  62. $filter = [];
  63. // 用户ID
  64. $params['userId'] > 0 && $filter[] = ['m.user_id', '=', $params['userId']];
  65. //优惠券ID
  66. $params['couponId'] > 0 && $filter[] = ['m.coupon_id', '=', $params['couponId']];
  67. //用户手机号
  68. !empty($params['mobile']) && $filter[] = ['user.mobile', 'like', '%'.$params['mobile'].'%'];
  69. // 会员昵称
  70. !empty($params['couponName']) && $filter[] = ['m.name', 'like', "%{$params['couponName']}%"];
  71. // 会员昵称
  72. !empty($params['nickName']) && $filter[] = ['user.nick_name', 'like', "%{$params['nickName']}%"];
  73. // 起止时间
  74. if (!empty($params['betweenTime'])) {
  75. $times = between_time($params['betweenTime']);
  76. $filter[] = ['m.create_time', '>=', $times['start_time']];
  77. $filter[] = ['m.create_time', '<', $times['end_time'] + 86400];
  78. }
  79. // 使用时间
  80. if (!empty($params['useTime'])) {
  81. $times = between_time($params['useTime']);
  82. $filter[] = ['m.use_time', '>=', $times['start_time']];
  83. $filter[] = ['m.use_time', '<', $times['end_time'] + 86400];
  84. }
  85. if (isset($params['used']) && boolval($params['used'])){
  86. $filter[] = ['m.is_use','=',1];
  87. }
  88. return $filter;
  89. }
  90. /**
  91. * 统计优惠券领取数量
  92. * @param $couponId
  93. * @param array $where
  94. * @return int
  95. */
  96. public static function countACouponUser($couponId,$where = []){
  97. $m = self::where('coupon_id',$couponId);
  98. if (count($where)){
  99. $m = $m->where($where);
  100. }
  101. return $m->count('user_coupon_id');
  102. }
  103. /**
  104. * 统计使用了优惠券的订单实际支付总金额
  105. * @param $couponId
  106. * @param array $where
  107. * @return int
  108. */
  109. public static function countMoneyCouponUser($couponId,$where = []){
  110. $m = self::where('coupon_id',$couponId);
  111. if (count($where)){
  112. $m = $m->where($where);
  113. }
  114. $user_coupon_ids = $m->column('user_coupon_id');
  115. $volume = Order::whereIn('coupon_id',$user_coupon_ids)->field(Db::raw('(sum(pay_price) + sum(rice_card_money)) as volume'))->find();
  116. return $volume->volume??0;
  117. }
  118. public function getStatisticDetail($param){
  119. // 设置查询条件
  120. $filter = $this->getFilter($param);
  121. //dd($filter);
  122. // 获取列表数据
  123. return $this
  124. ->alias('m')
  125. ->field('m.user_coupon_id,m.user_id,m.coupon_id,m.create_time,m.use_time,user.mobile,coupon.name,coupon.coupon_type,coupon.reduce_price,
  126. coupon.discount_type,coupon.max_discount_price,coupon.overlay_discount,coupon.discount,m.is_use,m.is_expire,m.expire_time')
  127. ->leftJoin('user', 'user.user_id = m.user_id')
  128. ->leftJoin('coupon', 'm.coupon_id = coupon.coupon_id')
  129. ->where($filter)
  130. ->order(['m.create_time' => 'desc', $this->getPk()])
  131. ->paginate(15)->each(function ($item) {
  132. $item->overlay_discount = $item->overlay_discount ? explode(',', $item->overlay_discount) : [];
  133. $item->overlay_discount_text = '无';
  134. $od_res = [];
  135. if (!empty($item->overlay_discount)) {
  136. foreach ($item->overlay_discount as $od) {
  137. if (isset(Coupon::OVERLAY_DISCOUNT[$od])) {
  138. $od_res[] = Coupon::OVERLAY_DISCOUNT[$od];
  139. }
  140. }
  141. $item->overlay_discount_text = implode(',', $od_res);
  142. }
  143. $item->discount = $item->discount / 10;
  144. });
  145. }
  146. }