Coupon.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273
  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\common\model;
  13. use app\common\library\helper;
  14. use app\common\model\CouponRefuse;
  15. /**
  16. * 优惠券模型
  17. * Class Coupon
  18. * @package app\common\model
  19. */
  20. class Coupon extends BaseModel
  21. {
  22. // 定义表名
  23. protected $name = 'coupon';
  24. // 定义主键
  25. protected $pk = 'coupon_id';
  26. // 允许叠加其他优惠
  27. const OVERLAY_DISCOUNT = [
  28. 1 => '分销员商品折扣',
  29. ];
  30. /**
  31. * 追加字段
  32. * @var array
  33. */
  34. protected $append = ['state','fmt_expire_time','open_status','overlay_discount_text'];
  35. //满减券
  36. const ManJian = 20;
  37. //折扣券
  38. const DISCOUNT = 50;
  39. //会员专享优惠券
  40. const MEMBER_COUPON = 90;
  41. //会员生日礼券
  42. const MEMBER_BIRTH_COUPON = 100;
  43. /**
  44. * 允许叠加其他优惠
  45. *
  46. * @param $value
  47. * @param $data
  48. * @return string
  49. */
  50. public function getOverlayDiscountTextAttr($value, $data)
  51. {
  52. $overlay_discount = !empty($data['overlay_discount']) ? explode(',', $data['overlay_discount']) : [];
  53. if (empty($overlay_discount)) {
  54. return '无';
  55. }
  56. $res = [];
  57. foreach ($overlay_discount as $item) {
  58. if (isset(self::OVERLAY_DISCOUNT[$item])) {
  59. $res[] = self::OVERLAY_DISCOUNT[$item];
  60. }
  61. }
  62. return implode(',', $res);
  63. }
  64. public function getOverlayDiscountAttr($value)
  65. {
  66. return $value ? explode(',', $value) : [];
  67. }
  68. public function setOverlayDiscountAttr($value)
  69. {
  70. return $value ? implode(',', $value) : '';
  71. }
  72. //有效状态
  73. public function getOpenStatusAttr($value,$data){
  74. $now = Date("Y-m-d H:i:s",time());
  75. if(!isset($data['status'])||!isset($data['end_time'])){
  76. return ['text'=>'失效','value'=>2];
  77. }
  78. if(isset($data['audit_status'])&&$data['audit_status']!=10){
  79. return ['text'=>'失效','value'=>2];
  80. }
  81. //到期类型(20固定时间)
  82. if($data['expire_type']==20){
  83. if(isset($data['audit_status'])&&$data['status']&&$data['status']==1&&$data['expire_time']>$now){
  84. return ['text'=>'有效','value'=>1];
  85. }
  86. if(isset($data['status'])&&isset($data['expire_time'])&&$data['status']==0||$data['expire_time']<$now){
  87. return ['text'=>'失效','value'=>2];
  88. }
  89. }
  90. //到期类型(10领取后生效)
  91. if($data['expire_type']==10){
  92. //未到开始时间的失效
  93. if(isset($data['audit_status'])&&$data['status']&&$data['status']==1&&strtotime($data['start_time'])>time()){
  94. return ['text'=>'失效','value'=>2];
  95. }
  96. if(isset($data['audit_status'])&&$data['status']&&$data['status']==1&&$data['end_time']>$now){
  97. return ['text'=>'有效','value'=>1];
  98. }
  99. if(isset($data['status'])&&isset($data['end_time'])&&$data['status']==0||$data['end_time']<$now){
  100. return ['text'=>'失效','value'=>2];
  101. }
  102. }
  103. return ['text'=>'失效','value'=>2];
  104. }
  105. public function getFmtExpireTimeAttr($value,$data){
  106. if(isset($data['expire_type'])&&$data['expire_type']==10){
  107. if($data['expire_day']>1){
  108. $d = $data['expire_day'] -1;
  109. $expire_time = date('Y-m-d',strtotime('+'.$d.' day')). ' 23:59:59' ;
  110. }else{
  111. $expire_time = date("Y-m-d",time()).' 23:59:59';
  112. }
  113. return $expire_time;
  114. }
  115. return $data['expire_time']??'';
  116. }
  117. // /**
  118. // * 优惠券状态 (是否可领取)
  119. // * @param $value
  120. // * @param $data
  121. // * @return array
  122. // */
  123. // public function getStateAttr($value, $data)
  124. // {
  125. // if (isset($data['is_receive']) && $data['is_receive']) {
  126. // return ['text' => '已领取', 'value' => 0];
  127. // }
  128. // if (isset($data['limit_total_type'])&&$data['limit_total_type']==10&&isset($data['total_num'])&&$data['total_num'] > -1 && $data['receive_num'] >= $data['total_num']) {
  129. // return ['text' => '领完啦', 'value' => -1];
  130. // }
  131. // return ['text' => '正常', 'value' => 1];
  132. // }
  133. /**
  134. * 获取器:格式化折扣率
  135. * @param $value
  136. * @return mixed
  137. */
  138. // public function getDiscountAttr($value)
  139. // {
  140. // return $value / 10;
  141. // }
  142. /**
  143. * 获取器:开始时间
  144. * @param $value
  145. * @return string
  146. */
  147. public function getStartTimeAttr($value)
  148. {
  149. return $value;
  150. // return date('Y/m/d', $value);
  151. }
  152. /**
  153. * 获取器:结束时间
  154. * @param $value
  155. * @return string
  156. */
  157. public function getEndTimeAttr($value)
  158. {
  159. return $value;
  160. // return date('Y/m/d', $value);
  161. }
  162. /**
  163. * 获取器:适用范围配置
  164. * @param $value
  165. * @return mixed
  166. */
  167. public function getApplyRangeConfigAttr($value)
  168. {
  169. return $value ? helper::jsonDecode($value) : [];
  170. }
  171. /**
  172. * 修改器:格式化折扣率
  173. * @param $value
  174. * @return mixed
  175. */
  176. // public function setDiscountAttr($value)
  177. // {
  178. // return $value * 10;
  179. // }
  180. /**
  181. * 修改器:适用范围配置
  182. * @param $array
  183. * @return mixed
  184. */
  185. public function setApplyRangeConfigAttr($array)
  186. {
  187. return helper::jsonEncode($array);
  188. }
  189. /**
  190. * 优惠券详情
  191. * @param int $couponId
  192. * @return null|static
  193. */
  194. public static function detail(int $couponId,$with =[])
  195. {
  196. return self::get($couponId,$with);
  197. }
  198. /**
  199. * 关联小程序码
  200. * @return \think\model\relation\HasOne
  201. */
  202. public function qrcode()
  203. {
  204. return $this->hasOne(UploadFile::class, 'file_id', 'qrcode_id');
  205. }
  206. /**
  207. * 一对多关联 优惠券除外商品表
  208. */
  209. public function goodsExcept()
  210. {
  211. return $this->hasMany('CouponGood', 'coupon_id')->where('is_except', CouponGood::EXCEPT_YES)
  212. ->order('id', 'desc');
  213. }
  214. /**
  215. * 一对多关联 拒绝原因
  216. */
  217. public function refuse(){
  218. return $this->hasMany('CouponRefuse', 'coupon_id')
  219. ->order('id', 'desc');
  220. }
  221. /**
  222. * 获取列表记录
  223. * @param array $param
  224. * @return \think\Paginator
  225. * @throws \think\db\exception\DbException
  226. */
  227. public function getCouponGroupBuyLblist(array $param = []){
  228. $f[] = ['status','=',1];
  229. $f[] = ['audit_status','=',10];
  230. $f[] = ['activity_type','=',2];
  231. $f = array_merge($f,$param);
  232. // 查询列表数据
  233. $query = $this->with([])->where($f);
  234. //有效
  235. $now = Date("Y-m-d H:i:s",time());
  236. $query->where('IF ( `expire_type` = 20,`expire_time` > "'.$now.'", `end_time`>"'.$now.'" )');
  237. return $query->where('is_delete', '=', 0)
  238. ->order(['coupon_id' => 'desc'])
  239. ->select();
  240. }
  241. }