Coupon.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  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\store\model;
  13. use app\api\service\user\Avatar;
  14. use app\common\enum\coupon\CouponType;
  15. use app\common\library\helper;
  16. use app\common\model\Coupon as CouponModel;
  17. // use app\common\model\CouponRefuse as CouponRefuseModel;
  18. use app\store\model\CouponGood as CouponGoodModel;
  19. use app\store\model\CouponRefuse as CouponRefuseModel;
  20. use app\store\model\member\MemberCardsAction;
  21. /**
  22. * 优惠券模型
  23. * Class Coupon
  24. * @package app\store\model
  25. */
  26. class Coupon extends CouponModel
  27. {
  28. /**
  29. * 获取器:格式化折扣率
  30. * @param $value
  31. * @return mixed
  32. */
  33. public function getDiscountAttr($value)
  34. {
  35. return $value / 10;
  36. }
  37. /**
  38. * 修改器:格式化折扣率
  39. * @param $value
  40. * @return mixed
  41. */
  42. public function setDiscountAttr($value)
  43. {
  44. return $value * 10;
  45. }
  46. /**
  47. * 获取列表记录
  48. * @param array $param
  49. * @return \think\Paginator
  50. * @throws \think\db\exception\DbException
  51. */
  52. public function getCouponGroupBuyLbPagelist(array $param = []){
  53. $f[] = ['status','=',1];
  54. $f[] = ['audit_status','=',10];
  55. $f[] = ['activity_type','=',2];
  56. // 查询列表数据
  57. $query = $this->with([])->where($f);
  58. //有效
  59. $now = Date("Y-m-d H:i:s",time());
  60. $query->where('IF ( `expire_type` = 20,`expire_time` > "'.$now.'", `end_time`>"'.$now.'" )');
  61. return $query->where('is_delete', '=', 0)->order(['coupon_id' => 'desc'])->paginate(15);
  62. }
  63. // /**
  64. // * 获取列表记录
  65. // * @param array $param
  66. // * @return \think\Paginator
  67. // * @throws \think\db\exception\DbException
  68. // */
  69. // public function getCouponGroupBuyLblist(array $param = []){
  70. // $f[] = ['status','=',1];
  71. // $f[] = ['audit_status','=',10];
  72. // $f[] = ['activity_type','=',2];
  73. // $f = array_merge($f,$param);
  74. // // 查询列表数据
  75. // $query = $this->with([])->where($f);
  76. // //有效
  77. // $now = Date("Y-m-d H:i:s",time());
  78. // $query->where('IF ( `expire_type` = 20,`expire_time` > "'.$now.'", `end_time`>"'.$now.'" )');
  79. // return $query->where('is_delete', '=', 0)
  80. // ->order(['coupon_id' => 'desc'])
  81. // ->select();
  82. // }
  83. /**
  84. * 获取列表记录
  85. * @param array $param
  86. * @return \think\Paginator
  87. * @throws \think\db\exception\DbException
  88. */
  89. public function getList(array $param = [])
  90. {
  91. // 检索查询条件
  92. $filter = $this->getFilter($param);
  93. // 查询列表数据
  94. $query = $this->with(['refuse','qrcode'])->where($filter);
  95. if(isset($param['open_status'])){
  96. //有效
  97. $now = Date("Y-m-d H:i:s",time());
  98. if($param['open_status']==1){
  99. // $query->where('IF ( `limit_total_type` = 10,`receive_num` <= `total_num`, `total_num`=0 )');
  100. //固定时间
  101. // expire_type 20 固定截止时间 10 顺延固定天数过期
  102. $query->where('IF ( `expire_type` = 20,`expire_time` > "'.$now.'", `end_time`>"'.$now.'" )');
  103. $f[] = ['status','=',1];
  104. $query->where($f);
  105. }
  106. //失效
  107. if($param['open_status']==2){
  108. // $query->whereOr('status','=',0);
  109. // $query->whereOr('IF ( `expire_type` = 20,`expire_time` < "'.$now.'", `end_time`<"'.$now.'" )');
  110. $query->where(function($query)use($now){
  111. $query->whereOr('status','=',0);
  112. $query->whereOr('IF ( `expire_type` = 20,`expire_time` < "'.$now.'", `end_time`<"'.$now.'" )');
  113. });
  114. }
  115. }
  116. return $query->where('is_delete', '=', 0)
  117. ->order(['coupon_id' => 'desc'])
  118. ->paginate(15);
  119. }
  120. public function getMemTypeList($params){
  121. //$now = Date("Y-m-d H:i:s",time());
  122. $filter[] = ['is_delete','=',0];
  123. $filter[] = ['end_time','>',date('Y-m-d H:i:s')];
  124. $filter[] = ['start_time','<',date('Y-m-d H:i:s')];
  125. $filter[] = ['audit_status','=',10];
  126. if (!empty($params['couponId'])){
  127. $filter[] = ['coupon_id','=',$params['couponId']];
  128. }
  129. if (!empty($params['name'])){
  130. $filter[] = ['name','like','%'.$params['name'].'%'];
  131. }
  132. return $this->where('coupon_type',self::MEMBER_COUPON)
  133. ->where('expire_type', '=',10)
  134. ->where($filter)
  135. ->where('status',1)
  136. ->where('receive_type',10)
  137. ->field('coupon_id,name,coupon_type,reduce_price,min_price,expire_type,expire_day,start_time,end_time,total_num,limit_receive_cnt,audit_status,status,limit_total_type,limit_receive_type')
  138. ->order(['coupon_id' => 'desc'])
  139. ->paginate(15);
  140. }
  141. /**
  142. * 启用 禁用
  143. * @param array $data
  144. * @return bool
  145. */
  146. public function status(array $data): bool
  147. {
  148. $this->transaction(function () use ($data) {
  149. $coupon_id = (int)$this['coupon_id'];
  150. $this->save($data);
  151. });
  152. return true;
  153. }
  154. /**
  155. * 审核
  156. * @param array $data
  157. * @return bool
  158. */
  159. public function audit(array $data): bool
  160. {
  161. if ($data['audit_status'] == 20) {
  162. $data['status'] =-1;
  163. }
  164. $memberAction = false;
  165. if(isset($data['coupon_type'])){
  166. if ($data['coupon_type'] == self::MEMBER_COUPON || $data['coupon_type'] == self::MEMBER_BIRTH_COUPON){
  167. $memberAction = true;
  168. }
  169. }
  170. $this->transaction(function () use ($data,$memberAction) {
  171. $coupon_id = (int)$this['coupon_id'];
  172. $this->save($data);
  173. if($data['audit_status'] == 20){
  174. $refuse['coupon_id'] = $coupon_id;
  175. $refuse['refuse_desc'] = $data['refuse_desc'];
  176. $refuse['audit_time'] = Date("Y-m-d H:i:s",time());
  177. $refuse['audit_user'] = $data['audit_user'];
  178. $refuseModel = new CouponRefuseModel;
  179. $refuseModel->save($refuse);
  180. }
  181. if ($memberAction){
  182. $acts['audit_user'] = $data['audit_user']?:'';
  183. $acts['audit_admin_id'] = $data['audit_admin_id'];
  184. $acts['audit_status'] = $data['audit_status']==10?1:2;
  185. $acts['audit_reason'] = $data['refuse_desc']??'';
  186. $acts['target_type'] = 6;
  187. (new MemberCardsAction())->add($this->coupon_id, $acts);
  188. }
  189. });
  190. return true;
  191. }
  192. /**
  193. * 检索查询条件
  194. * @param array $param
  195. * @return array
  196. */
  197. private function getFilter(array $param = []): array
  198. {
  199. // 默认查询条件
  200. $param = $this->setQueryDefaultValue($param, ['audit_status'=>-1,'status'=>-1,'coupon_type'=>0,'coupon_id'=>0,'send_type'=>0]);
  201. // 检索查询条件
  202. $filter = [];
  203. if(isset($param['show_type']) && $param['show_type'] == 2){
  204. $filter[] = ['coupon_type','>=',self::MEMBER_COUPON];
  205. if (!empty($param['name'])){
  206. $filter[] = ['name|coupon_id','like','%'.$param['name'].'%'];
  207. }
  208. }else{
  209. $filter[] = ['coupon_type','<',self::MEMBER_COUPON];
  210. !empty($param['name']) && $filter[] = ['name', 'like', "%{$param['name']}%"];
  211. }
  212. //!empty($param['name']) && $filter[] = ['name', 'like', "%{$param['name']}%"];
  213. if($param['status']>-1){
  214. $filter[] = ['status','=',$param['status']];
  215. }
  216. if($param['audit_status']>-1){
  217. $filter[] = ['audit_status','=',$param['audit_status']];
  218. }
  219. !empty($param['create_user']) && $filter[] = ['create_user', 'like', "%{$param['create_user']}%"];
  220. if($param['coupon_type']>0){
  221. $filter[] = ['coupon_type','=',$param['coupon_type']];
  222. }
  223. if($param['coupon_id']>0){
  224. $filter[] = ['coupon_id','=',$param['coupon_id']];
  225. }
  226. if(!empty($param['audit_start_time'])) {
  227. $audit_start_time = str2time_date($param['audit_start_time']);
  228. $filter[] = ['audit_time', '>=', $audit_start_time];
  229. }
  230. if(!empty($param['audit_end_time'])) {
  231. $audit_end_time = str2time_date($param['audit_end_time']);
  232. $filter[] = ['audit_time', '<', $audit_end_time];
  233. }
  234. if(!empty($param['create_start_time'])) {
  235. $create_start_time = str2time_date($param['create_start_time']);
  236. $filter[] = ['create_time', '>=', $create_start_time];
  237. }
  238. if(!empty($param['create_end_time'])) {
  239. $create_end_time = str2time_date($param['create_end_time']);
  240. $filter[] = ['create_time', '<', $create_end_time];
  241. }
  242. // 审核时间
  243. if (!empty($param['auditTime'])) {
  244. $times = between_time($param['auditTime']);
  245. //$filter[] = ['audit_time', '>=', $times['start_time']];
  246. $filter[] = ['audit_time', '>=', date('Y-m-d 00:00:00', $times['start_time'])];
  247. //$filter[] = ['audit_time', '<', $times['end_time'] + 86400];
  248. $filter[] = ['audit_time', '<', date('Y-m-d 00:00:00', $times['end_time']+86400)];
  249. }
  250. // 创建时间
  251. if (!empty($param['createTime'])) {
  252. $times = between_time($param['createTime']);
  253. $filter[] = ['create_time', '>=', $times['start_time']];
  254. $filter[] = ['create_time', '<', $times['end_time'] + 86400];
  255. }
  256. if($param['send_type']>0){
  257. $filter[] = ['send_type','=',$param['send_type']];
  258. }
  259. //活动来源
  260. if(isset($param['activity_type'])&&$param['activity_type']>0){
  261. $filter[] = ['activity_type','=',$param['activity_type']];
  262. }
  263. //活动ID
  264. if(isset($param['activity_id'])&&$param['activity_id']>0){
  265. $filter[] = ['activity_id','=',$param['activity_id']];
  266. }
  267. //是否允许叠加其他优惠
  268. if (isset($param['overlay_discount']) && $param['overlay_discount'] > 0) {
  269. $filter[] = ['exp', "FIND_IN_SET({$param['overlay_discount']}, 'overlay_discount')"];
  270. }
  271. return $filter;
  272. }
  273. /**
  274. * 新增记录
  275. * @param array $data
  276. * @return bool
  277. */
  278. public function addOne(array $data)
  279. {
  280. $memberAction = false;
  281. if ($data['coupon_type'] == self::MEMBER_COUPON){
  282. $data['start_time'] = date('Y-m-d H:i:s',strtotime($data['start_time']));
  283. $nextM = mktime(0,0,0,date('m',strtotime($data['end_time'])) +1,1,intval(date('Y',strtotime($data['end_time']))));
  284. $data['end_time'] = date('Y-m-d H:i:s',$nextM - 1 );
  285. //$data['end_time'] = date('Y-m-d H:i:s',strtotime($data['end_time']));
  286. $memberAction = true;
  287. }
  288. if ($data['coupon_type'] == self::MEMBER_BIRTH_COUPON){
  289. $data['start_time'] = $data['start_time'].'-01-01 00:00:00';
  290. $data['end_time'] = $data['end_time'].'-12-31 23:59:59';
  291. $memberAction = true;
  292. }
  293. if ($data['coupon_type'] == self::ManJian || $data['coupon_type'] == self::DISCOUNT){
  294. if ($data['role'] == 1){
  295. $data['status'] = 1;
  296. $data['audit_time'] = Date("Y-m-d H:i:s",time());
  297. $data['audit_user'] = $data['create_user'];
  298. $data['audit_admin_id'] = $data['audit_admin_id']?:'';
  299. $data['audit_status'] = 10;
  300. }
  301. }
  302. $this->transaction(function () use ($data,$memberAction) {
  303. // 新增记录
  304. $data['overlay_discount'] = $data['overlay_discount'] ?? [];
  305. $data['avaiable_num'] = $data['total_num'] ?? 0;
  306. $data['max_discount_price'] = $data['max_discount_price'] ?? 0;
  307. // $data['start_time'] = Date("Y-m-d H:i:s",str2time_date($data['start_time']));
  308. // $data['end_time'] = Date("Y-m-d H:i:s",str2time_date($data['end_time']));
  309. if(isset($data['expire_time'])){
  310. // $data['expire_time'] = Date("Y-m-d H:i:s",str2time_date($data['expire_time']));
  311. }
  312. $data['is_limit_hour'] = 0;
  313. if(!empty($data['start_hour'])&&!empty($data['end_hour'])){
  314. $data['is_limit_hour'] = 1;//有限时间段
  315. }else{
  316. $data['is_limit_hour'] = 0;//有限时间段
  317. }
  318. $this->save($data);
  319. // 优惠券 除外商品-满减券
  320. $couponGoodModel = new CouponGoodModel();
  321. $couponGoodModel->add($this->coupon_id, CouponGoodModel::EXCEPT_YES, $data['coupon_goods_expect']??[]);
  322. if ($memberAction){
  323. $acts['audit_user'] = $data['create_user']?:'';
  324. $acts['audit_admin_id'] = $data['audit_admin_id'];
  325. $acts['audit_status'] = 0;
  326. $acts['target_type'] = 6;
  327. (new MemberCardsAction())->add($this->coupon_id, $acts);
  328. }
  329. // 生成优惠券小程序码
  330. $qrcodeId = $this->genQrcode($this->coupon_id);
  331. $this->where('coupon_id',$this->coupon_id)->update(['qrcode_id' => $qrcodeId]);
  332. });
  333. return true;
  334. }
  335. /**
  336. * 新增记录
  337. * @param array $data
  338. * @return bool
  339. */
  340. public function updateOne(array $data)
  341. {
  342. //会员卡行为
  343. $memberAction = false;
  344. if ($data['coupon_type'] == self::MEMBER_COUPON){
  345. $data['start_time'] = date('Y-m-d H:i:s',strtotime($data['start_time']));
  346. $data['end_time'] = date('Y-m-d H:i:s',strtotime($data['end_time']));
  347. $memberAction = true;
  348. }
  349. if ($data['coupon_type'] == self::MEMBER_BIRTH_COUPON){
  350. $data['start_time'] = date('Y-01-01 00:00:00',strtotime($data['start_time']));
  351. $data['end_time'] = date('Y-12-31 23:59:59',strtotime($data['end_time']));
  352. $memberAction = true;
  353. }
  354. $this->transaction(function () use ($data,$memberAction) {
  355. // 新增记录
  356. // $data['start_time'] = Date("Y-m-d H:i:s",str2time_date($data['start_time']));
  357. // $data['end_time'] = Date("Y-m-d H:i:s",str2time_date($data['end_time']));
  358. if(isset($data['expire_time'])){
  359. // $data['expire_time'] = Date("Y-m-d H:i:s",str2time_date($data['expire_time']));
  360. }
  361. $coupon_id = $data['coupon_id'];
  362. // unset($data['coupon_id']);
  363. $coupon_goods_expect = $data['coupon_goods_expect']??[];
  364. $data['status'] =-1;
  365. $data['audit_status'] =0;
  366. $data['create_time'] = time();
  367. unset($data['coupon_goods_expect']);
  368. if(!empty($data['start_hour'])&&!empty($data['end_hour'])){
  369. $data['is_limit_hour'] = 1;//有限时间段
  370. }
  371. $data['max_discount_price'] = $data['max_discount_price'] ?? 0;
  372. // if (!empty($data['overlay_discount'])) {
  373. // $data['overlay_discount'] = implode(',', $data['overlay_discount']);
  374. // } else {
  375. // $data['overlay_discount'] = '';
  376. // }
  377. $this->save($data);
  378. // 优惠券 除外商品-满减券
  379. $couponGoodModel = new CouponGoodModel();
  380. $couponGoodModel->add($coupon_id, CouponGoodModel::EXCEPT_YES, $coupon_goods_expect);
  381. if ($memberAction){
  382. $acts['audit_user'] = $data['audit_user']?:'';
  383. $acts['audit_admin_id'] = $data['audit_admin_id'];
  384. $acts['audit_status'] = 0;
  385. $acts['target_type'] = 6;
  386. (new MemberCardsAction())->add($this->coupon_id, $acts);
  387. }
  388. });
  389. return true;
  390. }
  391. /**
  392. * 添加新记录
  393. * @param array $data
  394. * @return false|int
  395. */
  396. public function add(array $data)
  397. {
  398. $data['store_id'] = self::$storeId;
  399. return $this->save($this->createData($data));
  400. }
  401. /**
  402. * 更新记录
  403. * @param array $data
  404. * @return bool|int
  405. */
  406. public function edit(array $data)
  407. {
  408. return $this->save($this->createData($data)) !== false;
  409. }
  410. /**
  411. * 创建数据
  412. * @param array $data
  413. * @return array
  414. */
  415. private function createData(array $data): array
  416. {
  417. // 折扣券记录有效期
  418. // 领取后生效
  419. if ($data['expire_type'] == ExpireTypeEnum::RECEIVE) {
  420. $data['start_time'] = $data['end_time'] = 0;
  421. } // 固定时间
  422. elseif ($data['expire_type'] == ExpireTypeEnum::FIXED_TIME) {
  423. $times = between_time($data['betweenTime']);
  424. $data['start_time'] = $times['start_time'];
  425. $data['end_time'] = $times['end_time'];
  426. $data['expire_day'] = 0;
  427. }
  428. // 适用范围
  429. if ($data['apply_range'] == ApplyRangeEnum::ALL) {
  430. $data['apply_range_config'] = [];
  431. }
  432. return $data;
  433. }
  434. /**
  435. * 删除记录 (软删除)
  436. * @return bool|int
  437. */
  438. public function setDelete()
  439. {
  440. return $this->save(['is_delete' => 1]) !== false;
  441. }
  442. public function getStatisticList($params){
  443. $where = $this->getStatisticFilter($params);
  444. //dd($where);
  445. $list = $this->where('is_delete',0);
  446. if (count($where)){
  447. $list = $list->where($where);
  448. }
  449. //券状态
  450. if (isset($params['open_status']) && $params['open_status'] >= 0){
  451. if($params['open_status'] == 1){
  452. $list = $list->where('status',1)->whereRaw('expire_type=10 or (expire_type =20 and unix_timestamp(expire_time) > unix_timestamp(NOW()))');
  453. }else{
  454. $list = $list->whereRaw('status=0 or (expire_type =20 and unix_timestamp(expire_time) < unix_timestamp(NOW()))');
  455. }
  456. }
  457. $list = $list->field('coupon_id,name,coupon_type,reduce_price,min_price,expire_day,status,expire_time,expire_type,total_num,receive_num,start_time,end_time,audit_status,
  458. discount_type,max_discount_price,overlay_discount,discount')
  459. ->order('coupon_id','desc')
  460. ->paginate(15)->each(function($item){
  461. $item->open_status_o = 0;//券状态
  462. if ($item->status == 1){
  463. if ($item->expire_type == 10){//到期类型(10领取后生效 20固定时间)
  464. $item->open_status_o = 1;
  465. }elseif ($item->expire_type == 20 && strtotime($item->expire_time) > time()){//
  466. $item->open_status_o = 1;
  467. }else{
  468. $item->open_status_o = 0;
  469. }
  470. }
  471. $item->real_draw = UserCoupon::countACouponUser($item->coupon_id);
  472. $item->real_used = UserCoupon::countACouponUser($item->coupon_id,['is_use'=>1]);
  473. $item->coupon_use_money = UserCoupon::countMoneyCouponUser($item->coupon_id,['is_use'=>1]);
  474. $item->use_rate = $item->real_draw>0? helper::bcdiv($item->real_used*100,$item->real_draw) : '0.00';
  475. $filter[] = ['is_use', '=', 0];
  476. $filter[] = ['expire_time', '<', date('Y-m-d H:i:s')];
  477. $item->expire_count = UserCoupon::countACouponUser($item->coupon_id,$filter);
  478. })->toArray();
  479. return $list;
  480. }
  481. public function getMemberStatisticList($params){
  482. $where = [];
  483. //券名称.券ID
  484. if (isset($params['name']) && $params['name']){
  485. $where[] = ['name|coupon_id', 'like', '%'.$params['name'].'%'];
  486. }
  487. //券类型
  488. if (isset($params['coupon_type']) && in_array($params['coupon_type'],[90,100])){
  489. $where[] = ['coupon_type', '=', $params['coupon_type']];
  490. }else{
  491. $where[] = ['coupon_type', '>=', 90];
  492. }
  493. $list = $this->where('is_delete',0);
  494. if (count($where)){
  495. $list = $list->where($where);
  496. }
  497. //券状态
  498. if (isset($params['open_status']) && $params['open_status'] >= 0){
  499. if($params['open_status'] == 1){
  500. $list = $list->where('status',1)->whereRaw('expire_type=10 or (expire_type =20 and unix_timestamp(expire_time) > unix_timestamp(NOW()))');
  501. }else{
  502. $list = $list->whereRaw('status=0 or (expire_type =20 and unix_timestamp(expire_time) < unix_timestamp(NOW()))');
  503. }
  504. }
  505. $list = $list->field('coupon_id,name,coupon_type,reduce_price,min_price,expire_day,status,expire_time,
  506. expire_type,receive_num,audit_status,status,start_time,end_time,discount_type,discount')
  507. ->order('coupon_id','desc')
  508. ->paginate(15)->each(function($item){
  509. $item->open_status_o = 0;//券状态
  510. if ($item->status == 1){
  511. if ($item->expire_type == 10){//到期类型(10领取后生效 20固定时间)
  512. $item->open_status_o = 1;
  513. }elseif ($item->expire_type == 20 && strtotime($item->expire_time) > time()){//
  514. $item->open_status_o = 1;
  515. }else{
  516. $item->open_status_o = 0;
  517. }
  518. }
  519. $item->real_draw = UserCoupon::countACouponUser($item->coupon_id);
  520. $item->real_used = UserCoupon::countACouponUser($item->coupon_id,['is_use'=>1]);
  521. $filter[] = ['is_use', '=', 0];
  522. $filter[] = ['expire_time', '<', date('Y-m-d H:i:s')];
  523. $item->expire_count = UserCoupon::countACouponUser($item->coupon_id,$filter);
  524. })->toArray();
  525. return $list;
  526. }
  527. /**
  528. * 检索查询条件
  529. * @param array $param
  530. * @return array
  531. */
  532. private function getStatisticFilter(array $param = []): array
  533. {
  534. // 检索查询条件
  535. $filter = [];
  536. //券名称
  537. if (isset($param['name']) && $param['name']){
  538. $filter[] = ['name', 'like', '%'.$param['name'].'%'];
  539. }
  540. //券ID
  541. if (isset($param['coupon_id']) && $param['coupon_id']){
  542. $filter[] = ['coupon_id', 'like', $param['coupon_id'].'%'];
  543. }
  544. //券类型
  545. if (isset($param['coupon_type']) && $param['coupon_type']>=0){
  546. $filter[] = ['coupon_type', '=', $param['coupon_type']];
  547. }
  548. return $filter;
  549. }
  550. /**
  551. * 获取优惠券落地页小程序码
  552. *
  553. * @return string
  554. */
  555. public static function genQrcode($couponId)
  556. {
  557. $path = "/pages/index/pages/couponShare/couponShare?id=$couponId"; // 优惠券落地页
  558. $qrcode = request()->domain()."/api/mp_wx/qrcode?path=".urlencode($path);
  559. $qrcodeId = (new Avatar())->party($qrcode, 'qrcode');
  560. return $qrcodeId;
  561. }
  562. }