StoreCouponIssue.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <?php
  2. /**
  3. *
  4. * @author: xaboy<365615158@qq.com>
  5. * @day: 2018/01/18
  6. */
  7. namespace app\ebapi\model\store;
  8. use basic\ModelBasic;
  9. use traits\ModelTrait;
  10. class StoreCouponIssue extends ModelBasic
  11. {
  12. use ModelTrait;
  13. public static function getIssueCouponList($uid,$limit,$page=0)
  14. {
  15. $model = self::validWhere('A')->join('__STORE_COUPON__ B','A.cid = B.id')
  16. ->field('A.*,B.coupon_price,B.use_min_price')->order('B.sort DESC,A.id DESC');
  17. if($page) $list=$model->page((int)$page,(int)$limit)->select()->toArray()?:[];
  18. else $list=$model->limit($limit)->select()->toArray()?:[];
  19. foreach ($list as &$v){
  20. $v['is_use'] = StoreCouponIssueUser::be(['uid'=>$uid,'issue_coupon_id'=>$v['id']]);
  21. if(!$v['is_use']){
  22. $v['is_use']=$v['remain_count'] <= 0 && !$v['is_permanent'] ? 2 : $v['is_use'];
  23. }
  24. $v['add_time']=date('Y/m/d',$v['add_time']);
  25. $v['end_time']=$v['end_time'] ? date('Y/m/d',$v['end_time']) : date('Y/m/d',time()+86400);
  26. $v['coupon_price']=(int)$v['coupon_price'];
  27. }
  28. return $list;
  29. }
  30. /**
  31. * @param string $prefix
  32. * @return $this
  33. */
  34. public static function validWhere($prefix = '')
  35. {
  36. $model = new self;
  37. if($prefix){
  38. $model->alias($prefix);
  39. $prefix .= '.';
  40. }
  41. $newTime = time();
  42. return $model->where("{$prefix}status",1)
  43. ->where(function($query) use($newTime,$prefix){
  44. $query->where(function($query) use($newTime,$prefix){
  45. $query->where("{$prefix}start_time",'<',$newTime)->where("{$prefix}end_time",'>',$newTime);
  46. })->whereOr(function ($query) use($prefix){
  47. $query->where("{$prefix}start_time",0)->where("{$prefix}end_time",0);
  48. });
  49. })->where("{$prefix}is_del",0);
  50. }
  51. public static function issueUserCoupon($id,$uid)
  52. {
  53. $issueCouponInfo = self::validWhere()->where('id',$id)->find();
  54. if(!$issueCouponInfo) return self::setErrorInfo('领取的优惠劵已领完或已过期!');
  55. if(StoreCouponIssueUser::be(['uid'=>$uid,'issue_coupon_id'=>$id]))
  56. return self::setErrorInfo('已领取过该优惠劵!');
  57. if($issueCouponInfo['remain_count'] <= 0 && !$issueCouponInfo['is_permanent']) return self::setErrorInfo('抱歉优惠卷已经领取完了!');
  58. self::beginTrans();
  59. $res1 = false != StoreCouponUser::addUserCoupon($uid,$issueCouponInfo['cid']);
  60. $res2 = false != StoreCouponIssueUser::addUserIssue($uid,$id);
  61. $res3 = true;
  62. if($issueCouponInfo['total_count'] > 0){
  63. $issueCouponInfo['remain_count'] -= 1;
  64. $res3 = false !== $issueCouponInfo->save();
  65. }
  66. $res = $res1 && $res2 && $res3;
  67. self::checkTrans($res);
  68. return $res;
  69. }
  70. }