Usercoupon.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. namespace app\common\model\coupon;
  3. use app\common\library\helper;
  4. use think\facade\Db;
  5. use app\common\model\BaseModel;
  6. use app\common\model\User;
  7. use app\common\model\coupon\Usercoupondetail;
  8. use app\common\model\GoodsSku as GoodsSkuModel;
  9. use app\common\model\Goods as GoodsModel;
  10. /**
  11. * 用户优惠券模型 已废弃
  12. * @package app\common\model
  13. */
  14. class Usercoupon extends BaseModel
  15. {
  16. const COUPON_TYPE = [ 1=>'电子卡', 2=>'实体卡'];
  17. const COUPON_CATEGORY = [1=>'兑换卡', 2=>'储值卡'];
  18. // const activation_state
  19. const ACTIVATION_STATE = [0=>'未激活',1=>'已激活'];
  20. const FROZEN_STATE = [0=>'未冻结',1=>'已冻结'];
  21. protected $name = 'user_coupons';
  22. protected $append = ['coupon_type_text','coupon_category_text','state_text'];
  23. public function getStateTextAttr(){
  24. if($this->activation_state==0){
  25. return '';
  26. }
  27. $now = Date("Y-m-d H:i:s",time());
  28. if($this->avaiable_good_num>0&&$this->effect_state==1&&$now<$this->deadline_at){
  29. return '可使用';
  30. }
  31. if($this->avaiable_good_num==0){
  32. $good_num = Usercoupondetail::where("user_coupon_id",$this->id)->sum('good_num');
  33. if($this->good_num==$good_num){
  34. return '已使用';
  35. }
  36. }
  37. $coupon = Usercoupon::where("parent_id",$this->id)->where("isall_trans",1)->where('user_id','>',0)->find();
  38. if($coupon){
  39. return '已转赠';
  40. }
  41. if($now>$this->deadline_at){
  42. return '已过期';
  43. }
  44. return '';
  45. }
  46. public function getCouponTypeTextAttr(){
  47. return self::COUPON_TYPE[$this->coupon_type]??'';
  48. }
  49. public function getCouponCategoryTextAttr(){
  50. return self::COUPON_CATEGORY[$this->coupon_category]??'';
  51. }
  52. /**
  53. * 米卡列表
  54. * @param string $dataType 订单类型
  55. * @param array $param
  56. * @return mixed
  57. */
  58. public function getAllList(array $param = [])
  59. {
  60. // $goodsku = GoodsSkuModel::where('goods_sku_id',10001)->where('goods_id',10001)->find();
  61. // return $goodsku->goods_props[0]['value']['name']??'';
  62. // 检索查询条件
  63. $filter = $this->getQueryFilter($param);
  64. // 获取数据列表
  65. $query = $this->with([])->where($filter)
  66. ->leftJoin('user', 'user.user_id = coupon.user_id')
  67. ->alias('coupon')
  68. ->field('coupon.*,user.mobile,user.nick_name');
  69. $list = $query->order(['coupon.id' => 'desc'])->paginate(15);
  70. foreach($list as $row){
  71. // $row->user = User::field('mobile,nick_name')->where("user_id",$row->user_id)->find();
  72. $detail = Usercoupondetail::where('user_coupon_id',$row->id)->select();
  73. $row->exchange_cnt = count($detail);
  74. $row->late_user = null;
  75. if($row->exchange_cnt>0){
  76. $user_id = $detail[0]['user_id'];
  77. $row->late_user = User::field('mobile,nick_name')->where("user_id",$user_id)->find();
  78. }
  79. $goodsku = GoodsSkuModel::where('goods_sku_id',$row->good_sku_id)->where('goods_id',$row->good_id)->find();
  80. $goods = GoodsModel::field('goods_name')->where("goods_id",$row->good_id)->find();
  81. $row->sku_name = $goodsku->goods_props[0]['value']['name']??'';
  82. $row->good_name = $goods->goods_name??'';
  83. }
  84. return $list;
  85. }
  86. //查询
  87. public function getQueryFilter($param){
  88. return ['coupon.is_delete'=>0];
  89. }
  90. /**
  91. * 获取优惠券列表
  92. * @param int|null $limit 获取的数量
  93. * @param bool $onlyReceive 只显示可领取
  94. * @return \think\Collection
  95. * @throws BaseException
  96. * @throws \think\db\exception\DataNotFoundException
  97. * @throws \think\db\exception\DbException
  98. * @throws \think\db\exception\ModelNotFoundException
  99. */
  100. public function getList(int $user_id, int $type = 0,int $limit = 15){
  101. // 查询构造器
  102. $query = $this->getNewQuery();
  103. // 只显示可领取(未过期,未发完)的优惠券
  104. $query->where('user_id',$user_id);
  105. $query->where("coupon.is_delete",0);
  106. $now = Date("Y-m-d H:i:s",time());
  107. if($type==1){
  108. // $query->where("deadline_at",">",$now);
  109. $query->where('effect_state','in',[0,1])->where("deadline_at",">",$now);
  110. }
  111. if($type==2){
  112. $query->where(function($query)use($now){
  113. $query->whereOr('effect_state',2)->whereOr("deadline_at","<",$now);
  114. ;
  115. });
  116. }
  117. //查询数量
  118. $limit > 0 && $query->limit($limit);
  119. // 优惠券列表
  120. $couponList = $query->alias('coupon')->where('activation_state', '=', 1)->where("frozen_state",0)
  121. ->order(['get_at' => 'desc'])
  122. ->select();
  123. if($type==0){
  124. $newarr = [];
  125. foreach($couponList as $row){
  126. if($row->state_text=='已转赠'){
  127. // unset($row);
  128. } else{
  129. $newarr[] = $row;
  130. }
  131. }
  132. return $newarr;
  133. }
  134. return $couponList;
  135. }
  136. //用户
  137. public function user(){
  138. return $this->hasOne(User::class,'user_id','user_id');
  139. }
  140. }