WalletLog.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <?php
  2. namespace app\common\model;
  3. use think\Db;
  4. /**
  5. * 会员余额日志模型
  6. */
  7. class WalletLog
  8. {
  9. /**
  10. * 获取交易类型配置
  11. * @return mixed
  12. */
  13. public function getwallettype($type = '')
  14. {
  15. $conf = config('wallet.logtype');
  16. if($type){
  17. return $conf[$type] ?: $type;
  18. }
  19. return $conf;
  20. }
  21. //获取钱包名称
  22. public function getwalletname($name = ''){
  23. $conf = config('wallet.moneyname');
  24. if($name){
  25. return $conf[$name] ?: $name;
  26. }
  27. return $conf;
  28. }
  29. /**
  30. * 获取钱包余额
  31. * @param string $username 用户编号
  32. * @param string $wallet_name 指定钱包名
  33. * @return array|float
  34. */
  35. public function getWallet($id = '', $wallet_name = '')
  36. {
  37. //所有钱包余额
  38. $wallet = Db::name('user')->where(['id' => $id])->field('id,username,money,score')->find();
  39. if(!$wallet) {
  40. abort(500,'钱包余额获取失败');
  41. }
  42. if($wallet_name) { //返回指定钱包
  43. return isset($wallet[$wallet_name]) ? $wallet[$wallet_name] : 0;
  44. } else { //返回所有钱包
  45. return $wallet;
  46. }
  47. }
  48. /**
  49. *
  50. * @param floatval $number 金额(正数进账,负数出账)
  51. * @param $accountType 货币类型,money,score
  52. * @param $logtype 日志的类型
  53. * @param $remark 备注
  54. * @param $user_id 用户id
  55. * @param $table_id 表id
  56. * @param $table 来源表
  57. * @param $isAdmin 是否是管理员处理
  58. * @return array
  59. * @return array[status]
  60. * @return array[msg]
  61. * @return array[log_table]
  62. * @return array[log_id]
  63. */
  64. public function lockChangeAccountRemain($number,$accountType='money',$logtype='',$remark='',$user_id,$table='',$table_id=0,$isAdmin=false)
  65. {
  66. //初始化
  67. $result = array(
  68. 'status'=>false,
  69. 'msg'=>'',
  70. 'log_table' => '',
  71. 'log_id' => '',
  72. );
  73. //获取小数点
  74. bcscale(2);
  75. //钱包名称
  76. $wallet_name = $this->getwalletname($accountType);
  77. $logremark = $this->getwallettype($logtype);
  78. //获取
  79. $number = floatval( $number );
  80. if( $number == 0 )
  81. {
  82. $result['msg'] = '交易金额:0';
  83. return $result;
  84. }
  85. $wallet = Db::name('user')->lock(true)->where(['id'=>$user_id])->find();
  86. //检测
  87. if(!$wallet)
  88. {
  89. $result['msg'] = '不存在的用户';
  90. return $result;
  91. }
  92. if(bccomp(bcadd($wallet[$accountType], $number), 0) === -1)
  93. {
  94. $result['msg'] = $wallet_name.'账户余额不足!';
  95. return $result;
  96. }
  97. else
  98. {
  99. if(0 !== bccomp($number, 0))
  100. {
  101. $remain = bcadd($wallet[$accountType], $number);
  102. //钱币记录
  103. $data = array();
  104. $data['user_id'] = $user_id;
  105. $data['log_type'] = $logtype;
  106. $data['money_type'] = $accountType;
  107. $data['change_value'] = $number;
  108. $data['remain'] = $remain;
  109. $data['table'] = $table;
  110. $data['table_id'] = $table_id;
  111. $data['remark'] = $remark;
  112. $data['createtime'] = time();
  113. $data['updatetime'] = time();
  114. /*$mdata = array();
  115. $mdata[$accountType] =
  116. array('exp', bccomp($number, 0) === 1 ? "{$accountType}+{$number}":"{$accountType}{$number}");
  117. $rs1 = Db::name('wallet')->where(['id'=>$wallet['id']])->update($mdata);*/
  118. //新的方式
  119. if(bccomp($number, 0) === 1){
  120. $rs1 = Db::name('user')->where(['id'=>$wallet['id']])->setInc($accountType,$number);
  121. }else{
  122. $rs1 = Db::name('user')->where(['id'=>$wallet['id']])->setDec($accountType,abs($number));
  123. }
  124. /////////////
  125. $rs2_id = Db::name('user_wallet_log')->insertGetId($data);
  126. if( $rs1 && $rs2_id )
  127. {
  128. //金额变动
  129. /*$params = [
  130. 'msg' => '您的钱包['.$wallet_name.']有变化,请注意查看',
  131. 'description' => '您的钱包['.$wallet_name.']有变化:'.$number.'剩余:'.$data['remain'],
  132. 'content' => '您的钱包['.$wallet_name.']有变化:'.$number.',剩余:'.$data['remain'].',备注:'.$remark,
  133. 'user_id' => $user_id,
  134. 'status' => 1,
  135. 'comefrom' => '系统',
  136. 'type' => '钱包',
  137. 'createtime' => time(),
  138. 'important' => 3,
  139. ];
  140. Db::name('system_msg')->insertGetId($params);*/
  141. $result['status'] = true;
  142. $result['msg'] = '账户余额已更新!';
  143. $result['log_table'] = $accountType.'_log';
  144. $result['log_id'] = $rs2_id;
  145. return $result;
  146. }
  147. else
  148. {
  149. $result['msg'] = '更新财务记录失败!';
  150. return $result;
  151. }
  152. } else {
  153. $result['msg'] = '金额不足0.01';
  154. return $result;
  155. }
  156. }
  157. }
  158. }