www.gusucode.com > iWebshop开源PHP商城系统 v2.8源码程序 > iwebshop/classes/accountlog.php
<?php /** * @copyright (c) 2011 jooyea.cn * @file accountlog.php * @brief 账户日志管理 * @author walu * @date 2011-02-14 * @version 0.6 */ /** * 将对用户余额进行的操作记入account_log表 * * $user_id = 用户id * * $log = new AccountLog($user_id); * $config=array( * 'admin_id'=>管理员的id, //如果需要的话 * 'event'=>操作类别, withdraw:提现,pay:余额支付,recharge:充值,drawback:退款到余额 * 'note'=>备注信息,//如果不设置的话则根据event类型自动生成,如果设置了则不再对数据完整性进行检测,比如是否设置了管理员id、订单信息等 * 'num'=> 金额 , //整形或者浮点,正为增加,负为减少 * 'order_no' =>订单号 // drawback类型的log需要这个值 * ); * $re = $log->write($config); * * 如果$re===true,记录成功,如果$re是数组,里面存着的则是错误信息 * * @author walu */ class AccountLog { private $user = array('id'=>0,'username'=>''); private $admin = array('id'=>0,'admin_name'=>''); private $time = null; private $_note = null; private $config = null; private $event = null; private $allow_event = array( 'recharge'=>1, //充值到余额 'withdraw'=>2, //从余额提现 'pay'=>3, //从余额支付 'drawback'=>4 //退款到余额 ); private $error = array(); /** * 构造函数 * * @param int $user_id 用户id */ public function __construct($user_id=false) { if($user_id!==false) { $this->setUser($user_id); } } private function setUser($user_id) { $user_id = intval($user_id); $query = new IQuery("user AS u"); $query->join = "left join member AS m ON u.id = m.user_id"; $query->where = "u.id = {$user_id} "; $user = $query->find(); if(!$user) { $this->error[]="没有id为{$user_id}的用户"; } else { $user = end($user); $this->user = $user; $this->time = date('Y-m-d H:i:s'); } } /** * log的写方法 * * $log=array( * 'user_id'=>用户id * 'admin_id'=>管理员的id, //如果需要的话 * 'event'=>操作类别, * 'note'=>备注信息,//如果不设置的话则根据event类型自动生成 * 'num'=> 金额 //整形或者浮点,正为增加,负为减少 * ); * * @param array $log * @return array|bool */ public function write($log) { if(!isset($log['user_id'])) { return array('没有设置用户id'); } $this->setUser($log['user_id']); if(!isset($log['num'])) { return array('没有设置金额'); } if(isset($log['admin_id'])) { $this->setAdmin($log['admin_id']); } if(isset($log['event'])) { $this->setEvent($log['event']); } if(isset($log['note'])) { $this->note($log['note']); } $this->config = $log; return $this->log($log['num']); } /** * 设置管理员信息 * * @param int $admin_id * @return Object */ private function setAdmin($admin_id) { $admin_id = intval($admin_id); $tb_admin = new IModel("admin"); $admin = $tb_admin->getObj(" id = {$admin_id} "); if(!$admin) { $this->error[] = "没有id为{$admin_id}的用户"; } else { $this->admin = $admin; } return $this; } /** * 设置操作类别 * * @param string $event_key * @return Object */ private function setEvent($event_key) { if(!isset($this->allow_event[$event_key])) { $this->error[] = "错误的用户余额日志类型"; } else { $this->event = $event_key; } return $this; } /** * 生成note信息 */ private function note($str=false) { if($str!==false) { $this->_note = $str; return; } $note = ""; $num = $this->num; if($this->user['id']==0) { $this->error[] = "未设置用户信息"; } switch($this->event) { case 'withdraw': if($this->admin['id']==0 ) $this->error[] = "未设值管理员信息"; $note = "管理员[{$this->admin['id']}]给用户[{$this->user['id']}]{$this->user['username']}提现,金额:{$num}元"; break; case 'pay': $note = "用户[{$this->user['id']}]{$this->user['username']}通过余额支付用于购买,金额:{$num}元"; break; case 'recharge': if($this->admin['id']==0) { $this->error[] = "未设置管理员信息"; } $note = "管理员[{$this->admin['id']}]给用户[{$this->user['id']}]{$this->user['username']}充值,金额:{$num}元"; break; case 'drawback': if(!isset($this->config['order_no'])) { $this->error[] = "未设置订单id"; } $note = "订单[{$this->config['order_no']}],退款到用户[{$this->user['id']}]{$this->user['username']}余额,金额:{$num}元"; break; default: $this->error[] = "未设置的内容"; } return $this->_note=$note; } /** * 操作数据库 * * @param float $num 操作金额 * @return bool|array 返回true代表成功,返回array代表着本次操作的错误信息 */ private function log($num) { if( !is_numeric($num) ) { $this->error[] = "错误的操作金额:{$num}"; return $this->error; } $num = sprintf("%.2f",$num); $this->num = $num; if($this->_note===null) { $this->note(); } if($this->error) { return $this->error; } $tb_account_log = new IModel("account_log"); $arr = array(); $arr['admin_id'] = $this->admin['id']; $arr['user_id'] = $this->user['id']; $arr['event'] = $this->allow_event[$this->event]; $arr['note'] = IFilter::act($this->_note,'text'); $arr['amount'] = $num; $arr['amount_log'] = $this->user['balance']; $arr['type'] = $num>=0 ? 0 : 1 ; $arr['time'] = $this->time; $tb_account_log->setData($arr); $tb_account_log->add(); //后台管理员操作记录 if($arr['admin_id']) { $logObj = new Log(); $logObj->write('operation',array("管理员:".ISafe::get('admin_name'),"对账户金额进行了修改",$arr['note'])); } return true; } /** * @brief 商户结算单模板 * @param array $data 替换的数据 */ public static function sellerBillTemplate($data = null) { $templateString = "结算起止时间:{startTime} 到 {endTime},商品销售量:{goodsNums} 件,商品销售总价:{goodsSums} 元,运费总价:{deliveryPrice} 元,商品保价:{protectedPrice} 元,商品税金总价:{taxPrice} 元,总计:{totalSum} 元"; return strtr($templateString,$data); } }