Bläddra i källkod

钱包操作方法

lizhen_gitee 3 år sedan
förälder
incheckning
0b3384c0e7

+ 0 - 13
application/admin/view/newsmessage/add.html

@@ -40,16 +40,3 @@
         </div>
     </div>
 </form>
-<!--
-<script>
-    $('#c-user_id').selectpage({
-        orderBy : ['id desc'],
-        searchField : 'username',
-        showField : 'username',
-        keyField : 'id',
-        data : '/admin/user/user/index',
-        formatItem : function(data){
-            return data.username + '('+ data.id +')';
-        }
-    })
-</script>-->

+ 183 - 0
application/common/model/WalletLog.php

@@ -0,0 +1,183 @@
+<?php
+
+namespace app\common\model;
+use think\Db;
+
+/**
+ * 会员余额日志模型
+ */
+class WalletLog
+{
+
+    /**
+     * 获取交易类型配置
+     * @return mixed
+     */
+    public function getwallettype($type = '')
+    {
+        $conf = config('wallet.logtype');
+        if($type){
+            return $conf[$type] ?: $type;
+        }
+        return $conf;
+    }
+
+    //获取钱包名称
+    public function getwalletname($name = ''){
+        $conf = config('wallet.moneyname');
+        if($name){
+            return $conf[$name] ?: $name;
+        }
+        return $conf;
+    }
+
+    /**
+     * 获取钱包余额
+     * @param string $username 用户编号
+     * @param string $wallet_name 指定钱包名
+     * @return array|float
+     */
+    public function getWallet($uid = '', $wallet_name = '')
+    {
+        //所有钱包余额
+        $wallet = Db::name('user')->where(['uid' => $uid])->field('uid,username,money,score')->find();
+        if(!$wallet) {
+            abort(500,'钱包余额获取失败');
+        }
+
+        if($wallet_name) { //返回指定钱包
+            return isset($wallet[$wallet_name]) ? $wallet[$wallet_name] : 0;
+        } else { //返回所有钱包
+            return $wallet;
+        }
+    }
+
+    /**
+     *
+     * @param floatval $number 金额(正数进账,负数出账)
+     * @param $accountType 货币类型,money,score
+     * @param $logtype 日志的类型
+     * @param $remark  备注
+     * @param $uid  用户id
+     * @param $data_id  表id
+     * @param $table  来源表
+     * @param $isAdmin 是否是管理员处理
+     * @return array
+     * @return array[status]
+     * @return array[msg]
+     * @return array[log_table]
+     * @return array[log_id]
+     */
+    public function lockChangeAccountRemain($number,$accountType='money',$logtype='',$remark='',$user_id,$table='',$table_id=0,$isAdmin=false)
+    {
+        //初始化
+        $result = array(
+            'status'=>false,
+            'msg'=>'',
+            'log_table' => '',
+            'log_id' => '',
+        );
+
+        //获取小数点
+        bcscale(2);
+
+        //钱包名称
+        $wallet_name = $this->getwalletname($accountType);
+        $logremark      = $this->getwallettype($logtype);
+
+        //获取
+        $number = floatval( $number );
+        if( $number == 0 )
+        {
+            $result['msg'] = '交易金额:0';
+            return $result;
+        }
+        $wallet = Db::name('user')->lock(true)->where(['uid'=>$user_id])->find();
+
+        //检测
+        if(!$wallet)
+        {
+            $result['msg'] = '不存在的用户';
+            return $result;
+        }
+
+        if(bccomp(bcadd($wallet[$accountType], $number), 0) === -1)
+        {
+            $result['msg'] = $wallet_name.'账户余额不足!';
+            return $result;
+        }
+        else
+        {
+            if(0 !== bccomp($number, 0))
+            {
+
+                $remain = bcadd($wallet[$accountType], $number);
+
+                //钱币记录
+                $data = array();
+                $data['uid'] = $user_id;
+                $data['log_type'] = $logtype;
+                $data['money_type'] = $accountType;
+                $data['change_value'] = $number;
+                $data['remain'] = $remain;
+                $data['table'] = $table;
+                $data['table_id'] = $table_id;
+                $data['remark'] = $remark;
+                $data['createtime'] = time();
+                $data['updatetime'] = time();
+
+                /*$mdata = array();
+                $mdata[$accountType] =
+                    array('exp', bccomp($number, 0) === 1 ? "{$accountType}+{$number}":"{$accountType}{$number}");
+
+                $rs1 = Db::name('wallet')->where(['id'=>$wallet['id']])->update($mdata);*/
+
+
+                //新的方式
+                if(bccomp($number, 0) === 1){
+                    $rs1 = Db::name('user')->where(['uid'=>$wallet['uid']])->setInc($accountType,$number);
+                }else{
+                    $rs1 = Db::name('user')->where(['uid'=>$wallet['uid']])->setDec($accountType,abs($number));
+                }
+
+
+                /////////////
+                $rs2_id = Db::name('user_wallet_log')->insertGetId($data);
+                if( $rs1 && $rs2_id )
+                {
+                    //金额变动
+                    /*$params = [
+                        'msg' => '您的钱包['.$wallet_name.']有变化,请注意查看',
+                        'description' => '您的钱包['.$wallet_name.']有变化:'.$number.'剩余:'.$data['remain'],
+                        'content' => '您的钱包['.$wallet_name.']有变化:'.$number.',剩余:'.$data['remain'].',备注:'.$remark,
+                        'user_id' => $user_id,
+                        'status' => 1,
+                        'comefrom' => '系统',
+                        'type' => '钱包',
+                        'createtime' => time(),
+                        'important' => 3,
+                    ];
+                    Db::name('system_msg')->insertGetId($params);*/
+
+                    $result['status'] = true;
+                    $result['msg'] = '账户余额已更新!';
+                    $result['log_table'] = $accountType.'_log';
+                    $result['log_id'] = $rs2_id;
+
+                    return $result;
+                }
+                else
+                {
+                    $result['msg'] = '更新财务记录失败!';
+                    return $result;
+                }
+            } else {
+                $result['msg'] = '金额不足0.01';
+                return $result;
+            }
+        }
+    }
+
+
+
+}

+ 30 - 0
application/extra/wallet.php

@@ -0,0 +1,30 @@
+<?php
+/**
+ * 钱包类型数组
+ */
+return [
+    'logtype' => [
+        1 => '系统调节',
+        2 => '陪玩下单',
+        3 => '陪玩超时退款',
+        4 => '礼物打赏',
+        5 => '陪玩接单',
+        6 => '礼物收赏',
+        7 => '礼物打赏厅主收益',
+        8 => '购买守护',
+        9 => '余额充值',
+        10 => '陪玩订单取消退款',
+        11 => '兑换消耗余额',
+        12 => '兑换增加巧鱼币',
+        13 => '提现',
+        14 => '推广用户充值返利',
+        15 => '提现驳回',
+        16 => '开宝箱',
+        117 => '巧鱼币充值',
+    ],
+    'moneyname' => [
+        'money'    => '余额',
+        'score'    => '金币',
+    ],
+
+];