TransferBonusForm.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. namespace common\models\forms;
  3. use common\helpers\Cache;
  4. use common\helpers\Date;
  5. use common\components\Model;
  6. use common\helpers\Form;
  7. use common\helpers\user\Balance;
  8. use common\models\Article;
  9. use common\models\ArticleCategory;
  10. use common\models\DealType;
  11. use common\models\Period;
  12. use common\models\Transfer;
  13. use common\models\User;
  14. use common\models\UserBind;
  15. use common\models\UserBonus;
  16. use common\models\UserInfo;
  17. use yii\base\Exception;
  18. /**
  19. * Login form
  20. */
  21. class TransferBonusForm extends Model
  22. {
  23. public $toUserId;
  24. public $amount;
  25. public $fromUserId;
  26. private $_fromUserInfo;
  27. private $_toUserInfo;
  28. /**
  29. * @inheritdoc
  30. */
  31. public function rules()
  32. {
  33. return [
  34. [['toUserId', 'amount', 'fromUserId'], 'trim'],
  35. [['toUserName', 'amount', 'fromUserId'], 'required'],
  36. [['amount'], 'price'],
  37. [['amount'], 'isAmount'],
  38. ];
  39. }
  40. public function attributeLabels()
  41. {
  42. return [
  43. 'toUserId' => '转入会员编号',
  44. 'amount' => '金额',
  45. 'fromUserId' => '转出会员编号',
  46. ];
  47. }
  48. /**
  49. * 归集批量转账
  50. * @param $main_uid
  51. * @return Transfer|null
  52. * @throws \yii\db\Exception
  53. */
  54. public function collectBind($main_uid){
  55. $result = [];
  56. $db = \Yii::$app->db;
  57. $transaction = $db->beginTransaction();
  58. try {
  59. $userBinds = UserBind::findAllAsArray('MAIN_UID=:MAIN_UID AND IS_DEL=0',[':MAIN_UID'=>$main_uid]);
  60. if(!$userBinds){
  61. throw new Exception('不存在点位绑定关系');
  62. }
  63. $period = Period::instance();
  64. $totals=0;
  65. foreach ($userBinds as $value){
  66. if($value['USER_ID']==$main_uid) continue;
  67. $bonus=Balance::getAvailableBalance($value['USER_ID']);
  68. if($bonus<=0) continue;
  69. $totals+=$bonus;
  70. Balance::changeUserBonus($value['USER_ID'], 'bonus', -abs($bonus), ['DEAL_TYPE_ID' => DealType::BIND_TRANSFER_OUT, 'REMARK' => 'To:'.$main_uid]);
  71. Balance::changeUserBonus($main_uid, 'bonus', abs($bonus), ['DEAL_TYPE_ID' => DealType::BIND_TRANSFER_IN, 'REMARK' => 'From:'.$value['USER_ID']]);
  72. $array = [
  73. 'FROM_UID'=>$value['USER_ID'],
  74. 'TO_UID'=>$main_uid,
  75. 'FROM_WALLET'=>'bonus',
  76. 'IN_WALLET'=>'bonus',
  77. 'AMOUNT'=>$bonus,
  78. 'PERIOD_NUM'=>$period->getNowPeriodNum(),
  79. 'CALC_MONTH'=>$period->getNowYearMonth(),
  80. 'CREATED_AT'=>Date::nowTime(),
  81. ];
  82. $result[] = $array;
  83. }
  84. if($result) Transfer::batchInsert($result);
  85. $transaction->commit();
  86. } catch (Exception $e) {
  87. $transaction->rollBack();
  88. $this->addError('edit', $e->getMessage());
  89. return null;
  90. }
  91. unset($parents ,$res ,$model);
  92. return $totals;
  93. }
  94. }