123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- <?php
- // +----------------------------------------------------------------------
- // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
- // +----------------------------------------------------------------------
- // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
- // +----------------------------------------------------------------------
- // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
- // +----------------------------------------------------------------------
- // | Author: 萤火科技 <admin@yiovo.com>
- // +----------------------------------------------------------------------
- declare (strict_types = 1);
- namespace app\store\model;
- use app\common\model\UserCoupon as UserCouponModel;
- use think\facade\Db;
- /**
- * 用户优惠券模型
- * Class UserCoupon
- * @package app\store\model
- */
- class UserCoupon extends UserCouponModel
- {
- /**
- * 获取列表记录
- * @param array $param
- * @return mixed
- */
- public function getList(array $param = [])
- {
- // 设置查询条件
- $filter = $this->getFilter($param);
- // 获取列表数据
- return $this->with(['user.avatar'])
- ->alias('m')
- ->field('m.*')
- ->join('user', 'user.user_id = m.user_id')
- ->where($filter)
- ->order(['m.create_time' => 'desc', $this->getPk()])
- ->paginate(15);
- }
- public function getUseTimeAttr($value)
- {
- if ($value > 0 ){
- return date('Y-m-d H:i:s',$value);
- }
- return '';
- }
- /**
- * 设置查询条件
- * @param array $param
- * @return array
- */
- private function getFilter(array $param): array
- {
- // 设置默认的检索数据
- $params = $this->setQueryDefaultValue($param, [
- 'userId' => 0, // 会员ID
- 'couponName' => '', // 优惠券名称
- 'nickName' => '', // 会员昵称
- 'betweenTime' => [], // 起止时间
- ]);
- // 检索查询条件
- $filter = [];
- // 用户ID
- $params['userId'] > 0 && $filter[] = ['m.user_id', '=', $params['userId']];
- //优惠券ID
- $params['couponId'] > 0 && $filter[] = ['m.coupon_id', '=', $params['couponId']];
- //用户手机号
- !empty($params['mobile']) && $filter[] = ['user.mobile', 'like', '%'.$params['mobile'].'%'];
- // 会员昵称
- !empty($params['couponName']) && $filter[] = ['m.name', 'like', "%{$params['couponName']}%"];
- // 会员昵称
- !empty($params['nickName']) && $filter[] = ['user.nick_name', 'like', "%{$params['nickName']}%"];
- // 起止时间
- if (!empty($params['betweenTime'])) {
- $times = between_time($params['betweenTime']);
- $filter[] = ['m.create_time', '>=', $times['start_time']];
- $filter[] = ['m.create_time', '<', $times['end_time'] + 86400];
- }
- // 使用时间
- if (!empty($params['useTime'])) {
- $times = between_time($params['useTime']);
- $filter[] = ['m.use_time', '>=', $times['start_time']];
- $filter[] = ['m.use_time', '<', $times['end_time'] + 86400];
- }
- if (isset($params['used']) && boolval($params['used'])){
- $filter[] = ['m.is_use','=',1];
- }
- return $filter;
- }
- /**
- * 统计优惠券领取数量
- * @param $couponId
- * @param array $where
- * @return int
- */
- public static function countACouponUser($couponId,$where = []){
- $m = self::where('coupon_id',$couponId);
- if (count($where)){
- $m = $m->where($where);
- }
- return $m->count('user_coupon_id');
- }
- /**
- * 统计使用了优惠券的订单实际支付总金额
- * @param $couponId
- * @param array $where
- * @return int
- */
- public static function countMoneyCouponUser($couponId,$where = []){
- $m = self::where('coupon_id',$couponId);
- if (count($where)){
- $m = $m->where($where);
- }
- $user_coupon_ids = $m->column('user_coupon_id');
- $volume = Order::whereIn('coupon_id',$user_coupon_ids)->field(Db::raw('(sum(pay_price) + sum(rice_card_money)) as volume'))->find();
- return $volume->volume??0;
- }
- public function getStatisticDetail($param){
- // 设置查询条件
- $filter = $this->getFilter($param);
- //dd($filter);
- // 获取列表数据
- return $this
- ->alias('m')
- ->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,
- coupon.discount_type,coupon.max_discount_price,coupon.overlay_discount,coupon.discount,m.is_use,m.is_expire,m.expire_time')
- ->leftJoin('user', 'user.user_id = m.user_id')
- ->leftJoin('coupon', 'm.coupon_id = coupon.coupon_id')
- ->where($filter)
- ->order(['m.create_time' => 'desc', $this->getPk()])
- ->paginate(15)->each(function ($item) {
- $item->overlay_discount = $item->overlay_discount ? explode(',', $item->overlay_discount) : [];
- $item->overlay_discount_text = '无';
- $od_res = [];
- if (!empty($item->overlay_discount)) {
- foreach ($item->overlay_discount as $od) {
- if (isset(Coupon::OVERLAY_DISCOUNT[$od])) {
- $od_res[] = Coupon::OVERLAY_DISCOUNT[$od];
- }
- }
- $item->overlay_discount_text = implode(',', $od_res);
- }
- $item->discount = $item->discount / 10;
- });
- }
- }
|