UserPayMonth.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. <?php
  2. /**
  3. * 厦门云联储网络科技有限公司
  4. * https://www.baokuaiyun.com
  5. * Copyright (c) 2023 爆块云 All rights reserved.
  6. */
  7. namespace app\models;
  8. use Yii;
  9. use yii\behaviors\TimestampBehavior;
  10. use yii\db\ActiveRecord;
  11. /**
  12. * This is the model class for table "{{%user_pay_month}}".
  13. *
  14. * @property integer $id
  15. */
  16. class UserPayMonth extends \yii\db\ActiveRecord
  17. {
  18. const TYPE_ORDER = 0; //商城订单
  19. const TYPE_REFUND = 1; //订单退款
  20. const TYPE_REPAY = 2; //还款
  21. /**
  22. * @inheritdoc
  23. */
  24. public static function tableName()
  25. {
  26. return '{{%user_pay_month}}';
  27. }
  28. public function behaviors()
  29. {
  30. return [
  31. [
  32. 'class' => TimestampBehavior::class,
  33. ]
  34. ];
  35. }
  36. public static function saveLog($user_id, $money, $type = self::TYPE_ORDER, $order_id = 0, $order_no = '', $desc = "")
  37. {
  38. $t = \Yii::$app->db->beginTransaction();
  39. try{
  40. $form = new self();
  41. $user_info = User::findOne($user_id);
  42. $form->store_id = $user_info->store_id;
  43. $form->user_id = $user_id;
  44. $form->money = $money;
  45. $form->type = $type;
  46. $form->before = $user_info->money_month - $user_info->money_month_used;
  47. $form->after = $form->before - $form->money;
  48. $form->order_id = $order_id;
  49. $form->order_no = $order_no;
  50. $form->desc = $desc;
  51. $admin = get_admin();
  52. if($admin){
  53. $form->operator = get_admin()->name;
  54. $form->operator_id = get_admin()->id;
  55. }
  56. if($type == self::TYPE_ORDER){
  57. if($form->after < 0){
  58. throw new \Exception('操作失败,额度不足');
  59. }
  60. }
  61. if (!$form->save()) {
  62. \Yii::error([__METHOD__, $user_info->getErrors()]);
  63. throw new \Exception('操作失败,' . array_shift($form->getFirstErrors()));
  64. }
  65. $user_info->money_month_used += $money;
  66. if(!$user_info->save()){
  67. \Yii::error([__METHOD__, $user_info->getErrors()]);
  68. throw new \Exception('操作失败,' . array_shift($user_info->getFirstErrors()));
  69. }
  70. $t->commit();
  71. return [
  72. 'code' => 0,
  73. 'msg' => '操作成功',
  74. 'data' => $form,
  75. 'user_info' => $user_info,
  76. ];
  77. } catch (\Exception $ex) {
  78. \Yii::error($ex);
  79. $t->rollBack();
  80. return [
  81. 'code' => 1,
  82. 'msg' => $ex->getMessage(),
  83. ];
  84. }
  85. }
  86. public static function addPay($user_id, $order, $desc = '') {
  87. try{
  88. if(!is_object($order)){
  89. $order = Order::findOne($order);
  90. }
  91. if(!$order){
  92. throw new \Exception('操作失败,订单信息获取失败');
  93. }
  94. $money = $order->pay_price;
  95. $res = self::saveLog($user_id, $money, self::TYPE_ORDER, $order->id, $order->order_no, $desc);
  96. return $res;
  97. } catch (\Exception $ex) {
  98. \Yii::error($ex);
  99. return [
  100. 'code' => 1,
  101. 'msg' => $ex->getMessage(),
  102. ];
  103. }
  104. }
  105. public static function refund($user_id, $order, $money, $desc = '') {
  106. try{
  107. if(!is_object($order)){
  108. $order = Order::findOne($order);
  109. }
  110. if(!$order){
  111. throw new \Exception('操作失败,订单信息获取失败');
  112. }
  113. $res = self::saveLog($user_id, -$money, self::TYPE_REFUND, $order->id, $order->order_no, $desc);
  114. return $res;
  115. } catch (\Exception $ex) {
  116. \Yii::error($ex);
  117. return [
  118. 'code' => 1,
  119. 'msg' => $ex->getMessage(),
  120. ];
  121. }
  122. }
  123. public static function repay($user_id, $money, $desc = '') {
  124. try{
  125. $res = self::saveLog($user_id, -$money, self::TYPE_REPAY, 0, '', $desc);
  126. return $res;
  127. } catch (\Exception $ex) {
  128. \Yii::error($ex);
  129. return [
  130. 'code' => 1,
  131. 'msg' => $ex->getMessage(),
  132. ];
  133. }
  134. }
  135. public static function getPayByOrderId($store_id, $order_id) {
  136. $model = self::find()->where(['store_id' => $store_id, 'order_id' => $order_id, 'type' => self::TYPE_ORDER])->orderBy('id DESC')->one();
  137. return $model;
  138. }
  139. }