StoreCouponIssue.php 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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. if(!$v['end_time']){
  25. $v['add_time']= '';
  26. $v['end_time'] = '不限时';
  27. }else{
  28. $v['add_time']=date('Y/m/d',$v['add_time']);
  29. $v['end_time']=$v['end_time'] ? date('Y/m/d',$v['end_time']) : date('Y/m/d',time()+86400);
  30. }
  31. $v['coupon_price']=(int)$v['coupon_price'];
  32. }
  33. return $list;
  34. }
  35. /**
  36. * @param string $prefix
  37. * @return $this
  38. */
  39. public static function validWhere($prefix = '')
  40. {
  41. $model = new self;
  42. if($prefix){
  43. $model->alias($prefix);
  44. $prefix .= '.';
  45. }
  46. $newTime = time();
  47. return $model->where("{$prefix}status",1)
  48. ->where(function($query) use($newTime,$prefix){
  49. $query->where(function($query) use($newTime,$prefix){
  50. $query->where("{$prefix}start_time",'<',$newTime)->where("{$prefix}end_time",'>',$newTime);
  51. })->whereOr(function ($query) use($prefix){
  52. $query->where("{$prefix}start_time",0)->where("{$prefix}end_time",0);
  53. });
  54. })->where("{$prefix}is_del",0);
  55. }
  56. public static function issueUserCoupon($id,$uid)
  57. {
  58. $issueCouponInfo = self::validWhere()->where('id',$id)->find();
  59. if(!$issueCouponInfo) return self::setErrorInfo('领取的优惠劵已领完或已过期!');
  60. if(StoreCouponIssueUser::be(['uid'=>$uid,'issue_coupon_id'=>$id]))
  61. return self::setErrorInfo('已领取过该优惠劵!');
  62. if($issueCouponInfo['remain_count'] <= 0 && !$issueCouponInfo['is_permanent']) return self::setErrorInfo('抱歉优惠卷已经领取完了!');
  63. self::beginTrans();
  64. $res1 = false != StoreCouponUser::addUserCoupon($uid,$issueCouponInfo['cid']);
  65. $res2 = false != StoreCouponIssueUser::addUserIssue($uid,$id);
  66. $res3 = true;
  67. if($issueCouponInfo['total_count'] > 0){
  68. $issueCouponInfo['remain_count'] -= 1;
  69. $res3 = false !== $issueCouponInfo->save();
  70. }
  71. $res = $res1 && $res2 && $res3;
  72. self::checkTrans($res);
  73. return $res;
  74. }
  75. }