IndexForm.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\plugins\integral\models\client;
  8. use app\models\AccountLog;
  9. use app\models\Goods;
  10. use app\models\SaasUser;
  11. use app\models\User;
  12. use app\plugins\integral\models\form\GoodsForm;
  13. use app\plugins\integral\models\SaasIntegralGoods;
  14. use app\plugins\integral\models\SaasIntegralOrder;
  15. use app\utils\OrderNo;
  16. use yii\base\BaseObject;
  17. use yii\base\Model;
  18. class IndexForm extends Model
  19. {
  20. public $id;
  21. public $store_id;
  22. /**
  23. * @var SaasUser $user
  24. */
  25. public $user;
  26. public function getGoodsDetail() {
  27. $integral_goods = SaasIntegralGoods::find()->where(['id' => $this->id, 'is_delete' => 0, 'status' => 1])->one();
  28. if (!$integral_goods) {
  29. return [
  30. 'code' => 1,
  31. 'msg' => '未找到该商品'
  32. ];
  33. }
  34. $attr = json_decode($integral_goods['attr'], true);
  35. $count = count($attr);
  36. $str = '';
  37. foreach ($attr as $key => &$value) {
  38. $attr_group = GoodsForm::getAttrGroupByAttId($value['attr_id']);
  39. $t = $value['attr_name'];
  40. unset($value['attr_name']);
  41. $value['attr_group_name'] = $attr_group ? $attr_group->attr_group_name : null;
  42. $value['attr_name'] = $t;
  43. $str .= $value['attr_group_name'] . ':' . $t;
  44. if ($key < $count - 1) {
  45. $str .= ',';
  46. }
  47. }
  48. $goods = Goods::findOne($integral_goods->goods_id);
  49. $result = [
  50. 'id' => $integral_goods->id,
  51. 'goods_id' => $integral_goods->goods_id,
  52. 'name' => !empty($integral_goods->name) ? $integral_goods->name : $goods->name,
  53. 'pic' => $goods->cover_pic,
  54. 'integral' => $integral_goods->integral,
  55. 'sales' => $integral_goods->sales,
  56. 'detail' => $integral_goods->detail,
  57. 'attr_str' => $str
  58. ];
  59. return [
  60. 'code' => 0,
  61. 'msg' => 'success',
  62. 'data' => $result
  63. ];
  64. }
  65. public function pay() {
  66. $integral_goods = SaasIntegralGoods::find()->where(['id' => $this->id, 'is_delete' => 0, 'status' => 1])->one();
  67. if (!$integral_goods) {
  68. return [
  69. 'code' => 1,
  70. 'msg' => '未找到该商品'
  71. ];
  72. }
  73. if ($this->user->integral < $integral_goods->integral) {
  74. return [
  75. 'code' => 1,
  76. 'msg' => '积分不足以兑换商品'
  77. ];
  78. }
  79. if ($integral_goods->goods_count < 1) {
  80. return [
  81. 'code' => 1,
  82. 'msg' => '积分商品库存不足'
  83. ];
  84. }
  85. $count = SaasIntegralOrder::find()->where(['store_id' => $integral_goods->store_id, 'integral_goods_id' => $integral_goods->id, 'user_id' => $this->user->id])->count();
  86. if ($count >= $integral_goods->user_num) {
  87. return [
  88. 'code' => 1,
  89. 'msg' => '超出本商品限制每人兑换数量'
  90. ];
  91. }
  92. $name = Goods::findOne($integral_goods->goods_id)->name;
  93. $name = mb_substr($name, 0, 16, 'utf-8') . '...';
  94. $t = \Yii::$app->db->beginTransaction();
  95. $before = $this->user->integral;
  96. $this->user->integral -= $integral_goods->integral;
  97. if (!$this->user->save()) {
  98. $t->rollBack();
  99. return [
  100. 'code' => 1,
  101. 'msg' => $this->user->errors[0]
  102. ];
  103. }
  104. $order = new SaasIntegralOrder();
  105. $order->store_id = $integral_goods->store_id;
  106. $order->goods_id = $integral_goods->goods_id;
  107. $order->integral_goods_id = $integral_goods->id;
  108. $order->cost = $integral_goods->integral;
  109. $order->order_no = OrderNo::getOrderNo(OrderNo::ORDER_SAAS_INTEGRAL);
  110. $order->user_id = $this->user->id;
  111. $order->created_at = time();
  112. if (!$order->save()) {
  113. $t->rollBack();
  114. return [
  115. 'code' => 1,
  116. 'msg' => $order->errors[0]
  117. ];
  118. }
  119. $log = new AccountLog();
  120. $log->store_id = $integral_goods->store_id;
  121. $log->user_id = $this->user->id;
  122. $log->type = AccountLog::TYPE_INTEGRAL;
  123. $log->amount = $order->cost;
  124. $log->log_type = AccountLog::LOG_TYPE_EXPEND;
  125. $log->desc = '兑换积分商品: ' . $name;
  126. $log->before = $before;
  127. $log->after = $this->user->integral;
  128. $log->operator = '';
  129. $log->operator_id = 0;
  130. $log->operator_type = AccountLog::TYPE_OPERATOR_NORMAL;
  131. $log->created_at = time();
  132. $log->order_id = $order->id;
  133. $log->order_type = AccountLog::TYPE_SAAS_INTEGRAL_ORDER;
  134. if (!$log->save()) {
  135. $t->rollBack();
  136. return [
  137. 'code' => 1,
  138. 'msg' => $log->errors[0]
  139. ];
  140. }
  141. $t->commit();
  142. return [
  143. 'code' => 0,
  144. 'msg' => '兑换成功'
  145. ];
  146. }
  147. }