MemberCouponController.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <?php
  2. namespace app\backend\modules\coupon\controllers;
  3. use app\backend\modules\coupon\models\CouponLog;
  4. use app\common\components\BaseController;
  5. use app\common\models\coupon\CouponUseLog;
  6. use app\common\models\coupon\ShoppingShareCouponLog;
  7. use app\backend\modules\coupon\models\MemberCoupon;
  8. class MemberCouponController extends BaseController
  9. {
  10. public function index()
  11. {
  12. if (request()->type) {
  13. return view('coupon.member-unused', [
  14. 'member_id' => request()->member_id,
  15. ])->render();
  16. }
  17. return view('coupon.member')->render();
  18. }
  19. public function getData()
  20. {
  21. $search = request()->search;
  22. $list = MemberCoupon::search($search)
  23. ->select(['yz_member_coupon.uid','used','get_time'])
  24. ->with(['member' => function($query){
  25. return $query->select(['uid','avatar', 'nickname','mobile','realname']);
  26. }])
  27. ->withCount([
  28. //未使用总数
  29. 'self as unused_total'=> function($table){
  30. $table->where(['used'=>0,'is_expired'=>0,'is_member_deleted'=>0])->where('uniacid', \YunShop::app()->uniacid);
  31. },
  32. //已发放总数
  33. 'couponLog as get_total' => function($table){
  34. $table->where('getfrom', 0)->where('uniacid', \YunShop::app()->uniacid);
  35. },
  36. //已领取总数
  37. 'couponLog as get_from_total' => function($table){
  38. $table->where('getfrom', 1)->where('uniacid', \YunShop::app()->uniacid);
  39. },
  40. //分享领取总数
  41. 'shareCouponLog as receive_total' => function($table){
  42. $table->where('uniacid', \YunShop::app()->uniacid);
  43. },
  44. //已使用总数
  45. 'couponUseLog as used_total' => function($table){
  46. $table->where('uniacid', \YunShop::app()->uniacid);
  47. },
  48. ])
  49. ->groupBy('yz_member_coupon.uid')
  50. ->orderBy('uid', 'desc')
  51. ->paginate(15);
  52. $data = [
  53. 'list' => $list,
  54. ];
  55. return $this->successJson('ok', $data);
  56. }
  57. public function deleteCoupon()
  58. {
  59. $coupon_id = (int)request()->id;
  60. $uid = (int)request()->uid;
  61. if (!$coupon_id || !$uid) {
  62. return $this->errorJson('请传入正确参数');
  63. }
  64. $member_coupon = MemberCoupon::uniacid()->where(['coupon_id'=>$coupon_id,'uid'=>$uid])->get();
  65. if ($member_coupon->isEmpty()) {
  66. return $this->errorJson('优惠券不存在');
  67. }
  68. MemberCoupon::uniacid()->where(['coupon_id'=>$coupon_id,'uid'=>$uid])->delete();
  69. foreach ($member_coupon as $item) {
  70. $this->createUseLog($item, $coupon_id);
  71. }
  72. return $this->successJson('删除成功');
  73. }
  74. private function createUseLog($member_coupon, $coupon_id)
  75. {
  76. CouponUseLog::create([
  77. 'uniacid' => \YunShop::app()->uniacid,
  78. 'member_id' => $member_coupon->uid,
  79. 'detail' => '后台作废会员(ID为' . $member_coupon->uid . ')一张(ID为' . $coupon_id . '的优惠券)',
  80. 'coupon_id' => $member_coupon->belongsToCommonCoupon->id,
  81. 'member_coupon_id' => $member_coupon->id,
  82. 'type' => CouponUseLog::TYPE_BACKEND_DEL
  83. ]);
  84. }
  85. public function getUnused()
  86. {
  87. $search = request()->search;
  88. $list = MemberCoupon::search($search)
  89. ->select(['id','uid','used','get_time','coupon_id'])
  90. ->with(['belongsToCoupon' => function($query){
  91. return $query->select(['id','name','display_order']);
  92. }])
  93. ->groupBy('coupon_id')
  94. ->orderBy('coupon_id', 'desc')
  95. ->paginate(15);
  96. $list->map(function ($item) {
  97. $item->unused_total = MemberCoupon::uniacid()
  98. ->where(['uid'=>$item->uid,'coupon_id'=>$item->coupon_id,'used'=>0,'is_expired'=>0,'is_member_deleted'=>0])
  99. ->count();
  100. });
  101. $data = [
  102. 'list' => $list,
  103. ];
  104. return $this->successJson('ok', $data);
  105. }
  106. }