CouponFrom.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. /**
  3. * CouponFrom.php
  4. * todo 文件描述
  5. * Created on 2024/12/4 下午2:26
  6. * @author: hankaige
  7. */
  8. namespace app\modules\client\models\v1\cashier;
  9. use app\models\CashierActionLog;
  10. use app\models\Coupon;
  11. use app\models\Store;
  12. use app\models\User;
  13. use app\models\UserCoupon;
  14. use app\modules\admin\models\CatForm;
  15. use app\modules\admin\models\CouponForm;
  16. use app\modules\admin\models\GoodsForm;
  17. use yii\base\Model;
  18. class CouponFrom extends Model
  19. {
  20. public $store_id;
  21. public $md_id;
  22. public $keyword;
  23. public $user_id;
  24. public $send_coupons;//[['coupon_id'=>1,'number'=>1]]
  25. const COUPON_LIST = 'coupon_list';
  26. const COUPON_SEND = 'coupon_send';
  27. const DISCOUNT_TYPE_TEXT = [
  28. Coupon::DISCOUNT_TYPE_ONE => '折扣',
  29. Coupon::DISCOUNT_TYPE_TWO => '满减'
  30. ];
  31. const EXPIRE_TYPE_TEXT = [
  32. Coupon::EXPIRE_TYPE_DAY => '天数',
  33. Coupon::IS_INTEGRAL_YES => '指定时间'
  34. ];
  35. const IS_JOIN_TEXT = [
  36. Coupon::IS_JOIN_YES => '加入',
  37. Coupon::IS_JOIN_NO => '不加入'
  38. ];
  39. public function rules(): array
  40. {
  41. return [
  42. [['store_id', 'user_id', 'number', 'md_id'], 'integer', 'on' => [self::COUPON_SEND, self::COUPON_LIST]],
  43. ['keyword', 'string', 'on' => [self::COUPON_LIST]],
  44. ['store_id', 'required', 'on' => [self::COUPON_LIST, self::COUPON_SEND]],
  45. [['user_id', 'send_coupons'], 'required', 'on' => [self::COUPON_SEND]],
  46. [['send_coupons'], 'safe', 'on' => [self::COUPON_SEND]]
  47. ];
  48. }
  49. public function attributeLabels(): array
  50. {
  51. return [
  52. 'store_id' => '商城ID',
  53. 'user_id' => '用户ID',
  54. 'send_coupons' => '要发放的优惠券信息',
  55. 'number' => '优惠券数量',
  56. 'keyword' => '搜索关键词'
  57. ];
  58. }
  59. public function couponList(): array
  60. {
  61. $query = Coupon::find()->alias('c');
  62. //is_business 商盟优惠券不展示在店铺优惠券列表
  63. $query->where(['c.is_delete' => Coupon::IS_DELETE_NO])->orderBy("c.sort desc,c.id desc");
  64. if ($this->store_id) {
  65. $query->andWhere(['c.store_id' => $this->store_id]);
  66. }
  67. $query->andWhere(['c.is_alipay_voucher' => 0]);
  68. $query->andWhere(['c.is_business' => 0]);
  69. // 搜索
  70. if ($this->keyword) {
  71. $query->andWhere(['like', 'c.name', $this->keyword]);
  72. }
  73. $list = pagination_make($query);
  74. foreach ($list['list'] as &$val) {
  75. $val['coupon_status'] = 1;
  76. if (intval($val['expire_type']) === 1) {//领取后N天过期
  77. } else {//指定有效期
  78. if (intval($val['begin_time']) > time()) {
  79. $val['coupon_status'] = 0;//未开始
  80. }
  81. if (intval($val['end_time']) < time()) {
  82. $val['coupon_status'] = 2;//已结束
  83. }
  84. }
  85. $val['created_at'] = date('Y-m-d H:i:s', $val['created_at']);
  86. $val['updated_at'] = date('Y-m-d H:i:s', $val['updated_at']);
  87. $val['begin_time'] = date('Y-m-d', $val['begin_time']);
  88. $val['end_time'] = date('Y-m-d', $val['end_time']);
  89. $val['discount_type_text'] = self::DISCOUNT_TYPE_TEXT[$val['discount_type']];
  90. $val['is_join_text'] = self::IS_JOIN_TEXT[$val['is_join']];
  91. // 已领
  92. $val['cat_list'] = CatForm::getCatListById(json_decode($val['cat_id_list']));
  93. $val['goods_list'] = GoodsForm::getGoodsListById(json_decode($val['goods_id_list']));
  94. }
  95. foreach ($list['list'] as $k => $v) {
  96. if (strtotime($v['begin_time']) > time()) {
  97. // 删除不符合条件的数组下标
  98. $list['list'][$k]['coupon_status'] = 0;
  99. }
  100. }
  101. return [
  102. 'code' => 0,
  103. 'msg' => 'success',
  104. 'data' => [
  105. 'is_join_saas' => intval(\Yii::$app->isSaas()),
  106. 'data' => $list['list'],
  107. 'pageNo' => $list['pageNo'],
  108. 'totalCount' => $list['totalCount']
  109. ]
  110. ];
  111. }
  112. public function sendCoupon(): array
  113. {
  114. try {
  115. $this->send_coupons = json_decode($this->send_coupons, TRUE);
  116. if (count($this->send_coupons) <= 0) {
  117. throw new \Exception('请选择要发放的优惠券');
  118. }
  119. $senNum = 0;
  120. foreach ($this->send_coupons as $coupon) {
  121. for ($i = 0; $i < $coupon['number']; $i++) {
  122. $sendRes = CouponForm::userAddCoupon($this->user_id, $coupon['coupon_id']);
  123. $user = User::findOne($this->user_id);
  124. // 生成赠送优惠券的记录
  125. CashierActionLog::setLog($this->store_id,get_user_id(),CashierActionLog::SEND_COUPON,'给'.$user->nickname.'用户赠送优惠券一张', $this->md_id);
  126. if ($sendRes['code'] == 0) {
  127. $senNum++;
  128. }
  129. }
  130. }
  131. if ($senNum == 0) {
  132. return ['code' => 1, 'msg' => '优惠券发放失败'];
  133. } else {
  134. return ['code' => 0, 'msg' => '已成功发放' . $senNum . '张优惠券'];
  135. }
  136. } catch (\Exception $e) {
  137. return ['code' => 1, 'msg' => $e->getMessage()];
  138. }
  139. }
  140. }