You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

CoinLog.php 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?php
  2. namespace app\model\coin;
  3. use app\model\user\User;
  4. use app\model\wechat\WechatUser;
  5. use crmeb\basic\BaseModel;
  6. use crmeb\traits\ModelTrait;
  7. /**
  8. * 币记录
  9. * Class CoinLog
  10. * @package app\model\coin
  11. */
  12. class CoinLog extends BaseModel
  13. {
  14. use ModelTrait;
  15. /**
  16. * 数据表主键
  17. * @var string
  18. */
  19. protected $pk = 'id';
  20. /**
  21. * 模型名称
  22. * @var string
  23. */
  24. protected $name = 'coin_log';
  25. //保存
  26. //$uid 给谁
  27. //$coin
  28. //$level
  29. //$source_uid 来源
  30. public function baocun($uid, $coin, $source_uid)
  31. {
  32. if (empty($uid) || empty($coin) || empty($source_uid)) {
  33. return false;
  34. }
  35. try {
  36. $Coin = new Coin();
  37. $CoinLog = new CoinLog();
  38. $Coin->startTrans();
  39. //开始保存记录
  40. $data['uid'] = $uid;
  41. $data['coin'] = $coin;
  42. $data['source_uid'] = $source_uid;
  43. //开始增加币
  44. $check = $Coin->where('uid', $uid)->field('coin')->find();
  45. if ($check) {
  46. $data['now_coin'] = $coin + $check['coin'];
  47. $data['last_coin'] = $check['coin'];
  48. $Coin->where('uid', $uid)->update(['coin' => $data['now_coin']]);
  49. } else {
  50. //新建
  51. $data['now_coin'] = $coin;
  52. $data2['uid'] = $uid;
  53. $data2['coin'] = $coin;
  54. $data2['create_time'] = date('Y-m-d H:i:s');
  55. $data2['update_time'] = date('Y-m-d H:i:s');
  56. $Coin->save($data2);
  57. }
  58. $CoinLog->save($data);
  59. $Coin->commit();
  60. return true;
  61. } catch (\Exception $e) {
  62. $Coin->rollback();
  63. return false;
  64. } catch (\Throwable $e) {
  65. $Coin->rollback();
  66. return false;
  67. }
  68. }
  69. //微信商品扣款
  70. public function operate($uid = 0, $coin = 0, $type = 0, $oid = 0, $cart_id = 0)
  71. {
  72. if (empty($uid) || empty($coin) || $type === null || $type === '') {
  73. return false;
  74. }
  75. try {
  76. $this->startTrans();
  77. if ($type == 2) {//商品抵扣
  78. //开始保存记录
  79. $data['uid'] = $uid;
  80. $data['coin'] = $coin;
  81. $data['oid'] = $oid;
  82. $data['cart_id'] = $cart_id;
  83. //开始减少币
  84. $Coin = new Coin();
  85. $check = $Coin->where('uid', $uid)->field('coin')->find();
  86. if ($check) {
  87. $data['now_coin'] = $check['coin'] - $coin;
  88. $data['last_coin'] = $check['coin'];
  89. $data['type'] = $type;
  90. $Coin->where('uid', $uid)->update(['coin' => $data['now_coin']]);
  91. $this->save($data);
  92. }
  93. } elseif ($type == 0) {
  94. //开始保存记录
  95. $data['uid'] = $uid;
  96. $data['coin'] = $coin;
  97. //开始增加币
  98. $Coin = new Coin();
  99. $check = $Coin->where('uid', $uid)->field('coin')->find();
  100. if ($check) {
  101. $data['now_coin'] = $coin + $check['coin'];
  102. $data['last_coin'] = $check['coin'];
  103. $Coin->where('uid', $uid)->update(['coin' => $data['now_coin']]);
  104. } else {
  105. //新建
  106. $data2['uid'] = $coin;
  107. $data2['coin'] = $coin;
  108. $Coin->save($data2);
  109. }
  110. $this->save($data);
  111. }
  112. $this->commit();
  113. return true;
  114. } catch (\Exception $e) {
  115. $this->rollback();
  116. return false;
  117. } catch (\Throwable $e) {
  118. $this->rollback();
  119. return false;
  120. }
  121. }
  122. public function getWechatUserOneData()
  123. {
  124. return $this->hasOne(WechatUser::class, 'uid', 'from_uid')->bind(['headimgurl' => 'headimgurl', 'nickname' => 'nickname']);
  125. }
  126. public function getWechatUserOneData2()
  127. {
  128. return $this->hasOne(WechatUser::class, 'uid', 'uid')->bind(['headimgurl2' => 'headimgurl', 'nickname2' => 'nickname']);
  129. }
  130. public function getUserOneData()
  131. {
  132. return $this->hasOne(User::class, 'uid', 'source_uid')->bind(['avatar2' => 'avatar', 'nickname2' => 'nickname']);
  133. }
  134. }