| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 | <?phpnamespace app\common\model;use think\Model;use think\Db;/** * 货币模型 */class Wallet extends Model{    /**     * 获取交易类型配置     * @return mixed     */    public function getlogtype($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($user_id = '', $wallet_name = '')    {        //所有钱包余额        $wallet = Db::name('user_wallet')->lock(true)->where(['user_id' => $user_id])->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 $user_id  用户id     * @param $table  来源表     * @param $data_id  表id     * @param $isAdmin 是否是管理员处理     * @return array     * @return array[status]     * @return array[msg]     * @return array[log_table]     * @return array[log_id]     */    public function lockChangeAccountRemain($user_id,$accountType='money',$number,$logtype='',$remark='',$table='',$table_id=0,$isAdmin=false)    {        //初始化        $result = array(            'status'=>false,            'msg'=>'',            'log_table' => '',            'log_id' => '',        );        //获取小数点        $point = $accountType == 'money' ? 2 : 0;        bcscale($point);        //钱包名称        $wallet_name = $this->getwalletname($accountType);        //检测        $number = floatval( $number );        if( $number == 0 )        {            $result['msg'] = '交易金额:0';            return $result;        }        if(0 === bccomp($number, 0)){            $result['msg'] = '交易金额:0';            return $result;        }        //检测        $wallet = Db::name('user_wallet')->lock(true)->where(['user_id'=>$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))            {                //钱币记录                $data = array();                $data['user_id'] = $user_id;                $data['log_type'] = $logtype;//                $data['money_type'] = $accountType;                $data['before'] = $wallet[$accountType];                $data['change_value'] = $number;                $data['remain'] = bcadd($wallet[$accountType], $number);                $data['table'] = $table;                $data['table_id'] = $table_id;                $data['remark'] = $remark;                $data['createtime'] = time();                $data['updatetime'] = time();                //新的方式                $rs1 = Db::name('user_wallet')->where(['user_id'=>$user_id])->update([$accountType => $data['remain']]);                /////////////                $log_table = 'user_'.$accountType.'_log';                $rs2_id = Db::name($log_table)->insertGetId($data);                if($rs1 === false || $rs2_id === false){                    $result['msg'] = '更新财务记录失败!';                    return $result;                }                if( $rs1 !== false && $rs2_id !== false )                {                    $result['status'] = true;                    $result['msg'] = '账户余额已更新!';                    $result['log_table'] = $log_table;                    $result['log_id'] = $rs2_id;                    return $result;                }                else                {                    $result['msg'] = '更新财务记录失败!';                    return $result;                }            } else {                $result['msg'] = '金额不足0.01';                return $result;            }        }    }}
 |