UsageLogController.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. namespace addons\ElectronCoupon\backend\controllers;
  3. use addons\ElectronCoupon\common\models\ElectronCouponCode;
  4. use addons\ElectronCoupon\common\models\ElectronCouponUsageLog;
  5. use addons\ElectronCoupon\common\models\ElectronCouponUserCoupon;
  6. use common\models\user\User;
  7. use Yii;
  8. use common\enums\StatusEnum;
  9. class UsageLogController extends BaseController
  10. {
  11. public $enableCsrfValidation = false;
  12. /**
  13. * 使用记录
  14. *
  15. * @return string
  16. */
  17. public function actionIndex()
  18. {
  19. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  20. $params = Yii::$app->request->post();
  21. $res = Yii::$app->services->validate->validate($params, [
  22. [['page', 'user_id'], 'integer'],
  23. [['user_name', 'e_coupon_name', 'check_user_name'], 'string'],
  24. [['usage_time'], 'safe'],
  25. ]);
  26. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  27. $where = [
  28. ['=', 'mall_id', $this->mall_id],
  29. ['>=', 'status', StatusEnum::DISABLED],
  30. ];
  31. if ($params['user_id']) {
  32. $where[] = ['=', 'user_id', (int)$params['user_id']];
  33. }
  34. // 使用者 昵称、手机号
  35. if ($params['user_name']) {
  36. $user_ids = User::find()
  37. ->orWhere(['like', 'nickname', "%" . $params['user_name'] . "%", false])
  38. ->orWhere(['like', 'mobile', "%" . $params['user_name'] . "%", false])
  39. ->select('id')
  40. ->asArray()
  41. ->column();
  42. $where[] = ['in', 'user_id', $user_ids];
  43. }
  44. // 核销员 昵称、手机号
  45. if ($params['check_user_name']) {
  46. $user_ids = User::find()
  47. ->orWhere(['like', 'nickname', "%" . $params['check_user_name'] . "%", false])
  48. ->orWhere(['like', 'mobile', "%" . $params['check_user_name'] . "%", false])
  49. ->select('id')
  50. ->asArray()
  51. ->column();
  52. $where[] = ['in', 'clerk_user_id', $user_ids];
  53. }
  54. if ($params['e_coupon_name']) {
  55. $where[] = ['like', 'e_coupon_name', "%" . $params['e_coupon_name'] . "%", false];
  56. }
  57. // 使用时间
  58. $start_time = strtotime($params['usage_time'][0] ?? 0);
  59. $end_time = strtotime($params['usage_time'][1] ?? 0);
  60. if ($start_time > 0 && $end_time > 0 && $end_time >= $start_time) {
  61. $where[] = ['>=', 'usage_time', $start_time];
  62. $where[] = ['<=', 'usage_time', $end_time];
  63. }
  64. $condition = ['where' => $where, 'order' => 'id desc'];
  65. $page_data = ElectronCouponUsageLog::listPage($condition, false, true);
  66. $user_id_array1 = array_column($page_data['list'], 'user_id');
  67. $user_id_array2 = array_column($page_data['list'], 'clerk_user_id');
  68. $user_id_array3 = array_column($page_data['list'], 'proper_user_id');
  69. $user_id_array = array_unique(array_filter(array_merge($user_id_array1, $user_id_array2, $user_id_array3)));
  70. $users = User::find()
  71. ->select('id,nickname,avatar_url,mobile')
  72. ->where(['>=', 'status', StatusEnum::DISABLED])
  73. ->where(['mall_id' => $this->mall_id])
  74. ->where(['in', 'id', $user_id_array])
  75. ->asArray()
  76. ->all();
  77. $users_data = array_column($users, null, 'id');
  78. $page_data['list'] = is_array($page_data['list']) ? $page_data['list'] : [];
  79. foreach ($page_data['list'] as $index => $item) {
  80. $item['user'] = $users_data[$item['user_id']] ?? [];
  81. $item['clerk_user'] = $users_data[$item['clerk_user_id']] ?? [];
  82. $item['proper_user'] = $users_data[$item['proper_user_id']] ?? [];
  83. $page_data['list'][$index] = $item;
  84. }
  85. $this->success('获取成功', compact('page_data'));
  86. } else {
  87. return $this->render('index');
  88. }
  89. }
  90. // 电子券核销
  91. public function actionClerkUserCoupon()
  92. {
  93. if (Yii::$app->request->isAjax && Yii::$app->request->isPost) {
  94. $params = Yii::$app->request->post();
  95. $res = Yii::$app->services->validate->validate($params, [
  96. [['clerk_user_id'], 'integer'],
  97. [['code'], 'safe'],
  98. ]);
  99. if($res === false) return $this->error(Yii::$app->services->validate->getErrorMessage());
  100. $admin = Yii::$app->getUser()->identity;
  101. $params['clerk_admin_id'] = $admin->id;
  102. $params['clerk_user_id'] = $params['clerk_user_id'] ?: 0;
  103. $params['mall_id'] = $this->mall_id;
  104. $result = ElectronCouponCode::doClerkCode($params);
  105. if($result == false) return $this->error(ElectronCouponCode::getStaticError());
  106. $this->success('ok', $result);
  107. }
  108. }
  109. }