Browse Source

add trans

stanley-king 8 years atrás
parent
commit
adbe0f7d40

+ 13 - 12
admin/control/predeposit.php

@@ -91,8 +91,8 @@ class predepositControl extends SystemControl{
         $log_msg = L('admin_predeposit_recharge_edit_state').','.L('admin_predeposit_sn').':'.$info['pdr_sn'];
 
 		try {
-		    $model_pd->beginTransaction();
-		    //更改充值状态
+            $trans = new trans_wapper($model_pd,__METHOD__);
+            //更改充值状态
 		    $state = $model_pd->editPdRecharge($update,$condition);
 		    if (!$state) {
 		        throw Exception(Language::get('predeposit_payment_pay_fail'));
@@ -105,11 +105,11 @@ class predepositControl extends SystemControl{
 		    $data['pdr_sn'] = $info['pdr_sn'];
 		    $data['admin_name'] = $this->admin_info['name'];
 		    $model_pd->changePd('recharge',$data);
-		    $model_pd->commit();
+            $trans->commit();
 		    $this->log($log_msg,1);
 		    showMessage(Language::get('admin_predeposit_recharge_edit_success'),'index.php?act=predeposit&op=predeposit');
 		} catch (Exception $e) {
-		    $model_pd->rollback();
+            $trans->rollback();
 		    $this->log($log_msg,0);
 		    showMessage($e->getMessage(),'index.php?act=predeposit&op=predeposit','html','error');
 		}
@@ -281,7 +281,7 @@ class predepositControl extends SystemControl{
         $log_msg = L('admin_predeposit_cash_edit_state').','.L('admin_predeposit_cs_sn').':'.$info['pdc_sn'];
 
         try {
-            $model_pd->beginTransaction();
+            $trans = new trans_wapper($model_pd,__METHOD__);
             $result = $model_pd->editPdCash($update,$condition);
             if (!$result) {
                 throw new Exception(Language::get('admin_predeposit_cash_edit_fail'));
@@ -294,11 +294,11 @@ class predepositControl extends SystemControl{
             $data['order_sn'] = $info['pdc_sn'];
             $data['admin_name'] = $admininfo['name'];
             $model_pd->changePd('cash_pay',$data);
-            $model_pd->commit();
+            $trans->commit();
             $this->log($log_msg,1);
             showMessage(Language::get('admin_predeposit_cash_edit_success'),'index.php?act=predeposit&op=pd_cash_list');
         } catch (Exception $e) {
-            $model_pd->rollback();
+            $trans->rollback();
             $this->log($log_msg,0);
             showMessage($e->getMessage(),'index.php?act=predeposit&op=pd_cash_list','html','error');
         }
@@ -686,9 +686,10 @@ class predepositControl extends SystemControl{
 					showMessage('操作失败','index.php?act=predeposit&op=pd_log_list');
 					break;  
 			}
-			try {
-				$model_pd->beginTransaction();
-				//扣除冻结的预存款
+			try
+            {
+                $trans = new trans_wapper($model_pd,__METHOD__);
+                //扣除冻结的预存款
 				$data = array();
 				$data['member_id'] = $member_info['member_id'];
 				$data['member_name'] = $member_info['member_name'];
@@ -698,11 +699,11 @@ class predepositControl extends SystemControl{
 				$data['pdr_sn'] = $order_sn;
 				$data['lg_desc'] = $memo;
 				$model_pd->changePd($admin_act,$data);
-				$model_pd->commit();
+                $trans->commit();
 				$this->log($log_msg,1);
 				showMessage('操作成功','index.php?act=predeposit&op=pd_log_list');
 			} catch (Exception $e) {
-				$model_pd->rollback();
+                $trans->rollback();
 				$this->log($log_msg,0);
 				showMessage($e->getMessage(),'index.php?act=predeposit&op=pd_log_list','html','error');
 			}

+ 1 - 1
admin/templates/default/bill.show_store_month_order.php

@@ -111,7 +111,7 @@
 	        if (!empty($order['bundling_id'])) echo '[组合]';
         ?>
         </td>
-        <td class="align-center"><?php echo $order['buyer_name'];?></rd>
+          <td class="align-center"><?php echo $order['buyer_name'];?></td>
         <td>
         <a href="index.php?act=order&op=show_order&order_id=<?php echo $order['order_id'];?>"><?php echo $lang['nc_view'];?></a>
         </td>

+ 49 - 6
core/framework/libraries/model.php

@@ -4,22 +4,65 @@
  *
  * 模型类
  */
-class trans_log
+class trans_wapper
 {
+    private $mMod;
     private $mName;
     private $mStart;
-    public function __construct($name)
+    private $mState;
+
+    public function __construct($mod,$name)
     {
-        $this->mStart = microtime(true);
         $this->mName = $name;
-        Log::record("trans_log start {$name}");
+        $this->mMod = $mod;
+        $this->mState = 0;
+
+        $this->begin();
     }
 
-    public function __destruct()
+    private function begin()
+    {
+        $this->mState |= 0x0001;
+        $this->mStart = microtime(true);
+        if($this->mMod == null) {
+            Db::beginTransaction();
+        } else {
+            $this->mMod->beginTransaction();
+        }
+        Log::record("trans_log begin {$this->mName}");
+    }
+    public function commit()
+    {
+        $this->mState |= 0x0010;
+        $this->mStart = microtime(true);
+        if($this->mMod == null) {
+            Db::commit();
+        } else {
+            $this->mMod->commit();
+        }
+        $msg = sprintf("trans_log commit {$this->mName} use_time=%.6f",microtime(true) - $this->mStart);
+        Log::record($msg);
+    }
+    public function rollback()
     {
-        $msg = sprintf("trans_log end {$this->mName} use_time=%.6f",microtime(true) - $this->mStart);
+        $this->mState |= 0x0100;
+        $this->mStart = microtime(true);
+        if($this->mMod == null) {
+            Db::commit();
+        } else {
+            $this->mMod->commit();
+        }
+        $msg = sprintf("trans_log rollback {$this->mName} use_time=%.6f",microtime(true) - $this->mStart);
         Log::record($msg);
     }
+
+    public function __destruct()
+    {
+        if($this->mState <= 1) {
+            $msg = sprintf("trans_log uncommit or unrollback {$this->mName} state={$this->mState} use_time=%.6f",microtime(true) - $this->mStart);
+            Log::record($msg);
+        }
+    }
 }
 
 class Model

+ 66 - 53
crontab/control/control.php

@@ -51,36 +51,42 @@ class BaseCronControl
             if ($_break) {
                 break;
             }
-            $model_order->beginTransaction();
-            $goods_list = $model_order->getOrderGoodsList(array('commis_rate' => 200), 'rec_id,goods_id,store_id,gc_id', 100, null, '');
-            if (!empty($goods_list))
+
+            try
             {
-                //$commis_rate_list : store_id => array(gc_id => commis_rate)
-                $commis_rate_list = $store_bind_class->getStoreGcidCommisRateList($goods_list);
-                //更新订单商品佣金值
-                foreach ($goods_list as $v) {
-                    //如果未查到店铺或分类ID,则佣金置0
-                    if (!isset($commis_rate_list[$v['store_id']][$v['gc_id']])) {
-                        $commis_rate = 0;
-                    } else {
-                        $commis_rate = $commis_rate_list[$v['store_id']][$v['gc_id']];
-                    }
-                    $update = $model_order->editOrderGoods(array('commis_rate' => $commis_rate),array('rec_id' => $v['rec_id']));
-                    if (!$update) {
-                        $this->log('更新实物订单商品佣金值失败'); $_break = true; break;
+                $trans = new trans_wapper($model_order,__METHOD__);
+                $goods_list = $model_order->getOrderGoodsList(array('commis_rate' => 200), 'rec_id,goods_id,store_id,gc_id', 100, null, '');
+                if (!empty($goods_list))
+                {
+                    //$commis_rate_list : store_id => array(gc_id => commis_rate)
+                    $commis_rate_list = $store_bind_class->getStoreGcidCommisRateList($goods_list);
+                    //更新订单商品佣金值
+                    foreach ($goods_list as $v) {
+                        //如果未查到店铺或分类ID,则佣金置0
+                        if (!isset($commis_rate_list[$v['store_id']][$v['gc_id']])) {
+                            $commis_rate = 0;
+                        } else {
+                            $commis_rate = $commis_rate_list[$v['store_id']][$v['gc_id']];
+                        }
+                        $update = $model_order->editOrderGoods(array('commis_rate' => $commis_rate),array('rec_id' => $v['rec_id']));
+                        if (!$update) {
+                            $this->log('更新实物订单商品佣金值失败'); $_break = true; break;
+                        }
+                        $update = $model_refund_return->editRefundReturn(array('store_id'=>$v['store_id'],'goods_id'=>$v['goods_id']),array('commis_rate' => $commis_rate));
+                        if (!$update) {
+                            $this->log('更新实物订单退款佣金值失败'); $_break = true; break;
+                        }
                     }
-                    $update = $model_refund_return->editRefundReturn(array('store_id'=>$v['store_id'],'goods_id'=>$v['goods_id']),array('commis_rate' => $commis_rate));
-                    if (!$update) {
-                        $this->log('更新实物订单退款佣金值失败'); $_break = true; break;
-                    }                  
+                } else {
+                    break;
                 }
-            } else {
-                break;
+                $trans->commit();
+            }
+            catch (Exception $ex) {
+                $trans->rollback();
             }
-            $model_order->commit();
         }
-        $model_order->commit();
-    
+
         //虚拟订单,每次最多处理50W个商品佣金
         $_break = false;
         $model_order = Model('vr_order');
@@ -91,40 +97,47 @@ class BaseCronControl
             if ($_break) {
                 break;
             }
-            $model_order->beginTransaction();
-            $goods_list = $model_order->getOrderList(array('commis_rate' => 200),'', 'order_id,store_id,gc_id', '',100);
-            if (!empty($goods_list))
+            try
             {
-                //$commis_rate_list : store_id => array(gc_id => commis_rate)
-                $commis_rate_list = $store_bind_class->getStoreGcidCommisRateList($goods_list);
-                //更新订单商品佣金值
-                foreach ($goods_list as $v)
+                $trans = new trans_wapper($model_order,__METHOD__);
+                $goods_list = $model_order->getOrderList(array('commis_rate' => 200),'', 'order_id,store_id,gc_id', '',100);
+                if (!empty($goods_list))
                 {
-                    //如果未查到店铺或分类ID,则佣金置0
-                    if (!isset($commis_rate_list[$v['store_id']][$v['gc_id']])) {
-                        $commis_rate = 0;
-                    } else {
-                        $commis_rate = $commis_rate_list[$v['store_id']][$v['gc_id']];
-                    }
-                    $update = $model_order->editOrder(array('commis_rate' => $commis_rate),array('order_id' => $v['order_id']));
-                    if (!$update) {
-                        $this->log('更新虚拟订单商品佣金值失败'); $_break = true; break;
-                    }
-                    $update = $model_order->editOrderCode(array('commis_rate' => $commis_rate),array('order_id' => $v['order_id']));
-                    if (!$update) {
-                        $this->log('更新虚拟订单兑换码佣金值失败'); $_break = true; break;
-                    }
-                    $update = $model_vr_refund->editRefund(array('order_id' => $v['order_id']),array('commis_rate' => $commis_rate));
-                    if (!$update) {
-                        $this->log('更新虚拟订单商品退款佣金值失败'); $_break = true; break;
+                    //$commis_rate_list : store_id => array(gc_id => commis_rate)
+                    $commis_rate_list = $store_bind_class->getStoreGcidCommisRateList($goods_list);
+                    //更新订单商品佣金值
+                    foreach ($goods_list as $v)
+                    {
+                        //如果未查到店铺或分类ID,则佣金置0
+                        if (!isset($commis_rate_list[$v['store_id']][$v['gc_id']])) {
+                            $commis_rate = 0;
+                        } else {
+                            $commis_rate = $commis_rate_list[$v['store_id']][$v['gc_id']];
+                        }
+                        $update = $model_order->editOrder(array('commis_rate' => $commis_rate),array('order_id' => $v['order_id']));
+                        if (!$update) {
+                            $this->log('更新虚拟订单商品佣金值失败'); $_break = true; break;
+                        }
+                        $update = $model_order->editOrderCode(array('commis_rate' => $commis_rate),array('order_id' => $v['order_id']));
+                        if (!$update) {
+                            $this->log('更新虚拟订单兑换码佣金值失败'); $_break = true; break;
+                        }
+                        $update = $model_vr_refund->editRefund(array('order_id' => $v['order_id']),array('commis_rate' => $commis_rate));
+                        if (!$update) {
+                            $this->log('更新虚拟订单商品退款佣金值失败'); $_break = true; break;
+                        }
                     }
                 }
+                else {
+                    break;
+                }
+                $trans->commit();
+
             }
-            else {
-                break;
+            catch (Exception $ex)
+            {
+                $trans->rollback();
             }
-            $model_order->commit();
         }
-        $model_order->commit();
     }
 }

+ 6 - 6
crontab/control/month.php

@@ -27,21 +27,21 @@ class monthControl extends BaseCronControl
 
         //实物订单结算
         try {
-            $model->beginTransaction();
+            $trans = new trans_wapper($model,__METHOD__);
             $this->_real_order();
-            $model->commit();
+            $trans->commit();
         } catch (Exception $e) {
-            $model->rollback();
+            $trans->rollback();
             $this->log('实物账单:'.$e->getMessage());
         }
 
         //虚拟订单结算
         try {
-            $model->beginTransaction();
+            $trans = new trans_wapper($model,__METHOD__);
             $this->_vr_order();
-            $model->commit();
+            $trans->commit();
         } catch (Exception $e) {
-            $model->rollback();
+            $trans->rollback();
             $this->log('虚拟账单:'.$e->getMessage());
         }
 

+ 3 - 3
data/logic/buy.logic.php

@@ -251,7 +251,7 @@ class buyLogic
         try
         {
             $model = Model('order');
-            $model->beginTransaction();
+            $trans = new trans_wapper($model,__METHOD__);
             //第1步 表单验证
             $this->_createOrderStep1();
             //第2步 得到购买商品信息
@@ -262,11 +262,11 @@ class buyLogic
             $this->_createOrderStep4();
             //第5步 处理预存款
             $this->_createOrderStep5();
-            $model->commit();
+            $trans->commit();
         }
         catch (Exception $e)
         {
-            $model->rollback();
+            $trans->rollback();
             return callback(false, $e->getMessage());
         }
         //第6步 订单后续处理

+ 3 - 3
data/logic/buy_virtual.logic.php

@@ -104,7 +104,7 @@ class buy_virtualLogic {
         {
             $model_goods = Model('goods');
             //开始事务
-            $model_goods->beginTransaction();
+            $trans = new trans_wapper($model_goods,__METHOD__);
             //生成订单
             $order_info = $this->_createOrder($input,$goods_info,$member_info);
 
@@ -121,11 +121,11 @@ class buy_virtualLogic {
                 }
             }
             //提交事务
-            $model_goods->commit();
+            $trans->commit();
         }
         catch (Exception $e)
         {
-            $model_goods->rollback();
+            $trans->rollback();
             return callback(false, $e->getMessage());
         }
 

+ 13 - 12
data/logic/order.logic.php

@@ -24,9 +24,9 @@ class orderLogic
     {
         try {
             $model_order = Model('order');
-            $model_order->beginTransaction();
-            $order_id = $order_info['order_id'];
+            $trans = new trans_wapper($model_order,__METHOD__);
 
+            $order_id = $order_info['order_id'];
             //库存销量变更
             $goods_list = $model_order->getOrderGoodsList(array('order_id'=>$order_id));
             $data = array();
@@ -82,12 +82,11 @@ class orderLogic
             }
             $data['log_orderstate'] = ORDER_STATE_CANCEL;
             $model_order->addOrderLog($data);
-            $model_order->commit();
+            $trans->commit();
 
             return callback(true,'操作成功');
-
         } catch (Exception $e) {
-            $this->rollback();
+            $trans->rollback();
             return callback(false,'操作失败');
         }
     }
@@ -247,8 +246,10 @@ class orderLogic
     {
         $order_id = $order_info['order_id'];
         $model_order = Model('order');
-		try {
-            $model_order->beginTransaction();
+		try
+        {
+            $trans = new trans_wapper($model_order,__METHOD__);
+
             $data = array();
             $data['reciver_name'] = $post['reciver_name'];
             $data['reciver_info'] = $post['reciver_info'];
@@ -276,9 +277,9 @@ class orderLogic
             if (!$update) {
                 throw new Exception('操作失败');
             }
-            $model_order->commit();
+            $trans->commit();
 		} catch (Exception $e) {
-		    $model_order->rollback();
+            $trans->rollback();
 		    return callback(false,$e->getMessage());
 		}
 
@@ -326,7 +327,7 @@ class orderLogic
         $model_order = Model('order');
 
         try {
-            $model_order->beginTransaction();
+            $trans = new trans_wapper($model_order,__METHOD__);
 
             $data = array();
             $data['api_pay_state'] = 1;
@@ -375,9 +376,9 @@ class orderLogic
             if (!$update) {
                 throw new Exception('操作失败');
             }
-            $model_order->commit();
+            $trans->commit();
         } catch (Exception $e) {
-            $model_order->rollback();
+            $trans->rollback();
             return callback(false,$e->getMessage());
         }
 

+ 9 - 6
data/logic/payment.logic.php

@@ -69,7 +69,7 @@ class paymentLogic
             $pd_amount = intval($pd_amount * 100 + 0.5);
             foreach ($order_list as $order_info)
             {
-                DB::beginTransaction();
+                $trans = new trans_wapper(null,__METHOD__);
 
                 $order_pd_amount = $pred->calc_pred($order_info,$pd_amount,$no_cash,$rates);
                 if(!empty($rates)) {
@@ -111,7 +111,7 @@ class paymentLogic
                     if (0 == $ret) {
                         throw new Exception("订单更新失败");
                     }
-                    DB::commit();
+                    $trans->commit();
                 }
                 QueueClient::push('onPredeposit',
                     array('change_type' => $change_type,'buyer_id'=>$member_id,'order_sn'=>$order_info['order_sn']));
@@ -120,7 +120,7 @@ class paymentLogic
             return true;
         }
         catch (Exception $e) {
-            DB::rollback();
+            $trans->rollback();
             return false;
         }
     }
@@ -293,7 +293,8 @@ class paymentLogic
 
         $model_pd = Model('predeposit');
         try {
-            $model_pd->beginTransaction();
+            $trans = new trans_wapper($model_pd,__METHOD__);
+
             $pdnum = $model_pd->getPdRechargeCount(array('pdr_sn' => $recharge_info['pdr_sn'], 'pdr_payment_state' => 1));
             if (intval($pdnum) > 0) {
                 throw new Exception('订单已经处理');
@@ -310,10 +311,12 @@ class paymentLogic
             $data['amount'] = $recharge_info['pdr_amount'];
             $data['pdr_sn'] = $recharge_info['pdr_sn'];
             $model_pd->changePd('recharge', $data);
-            $model_pd->commit();
+            $trans->commit();
+
             return callback(true);
         } catch (Exception $e) {
-            $model_pd->rollback();
+            $trans->rollback();
+
             return callback(false, $e->getMessage());
         }
     }

+ 8 - 7
data/logic/vr_order.logic.php

@@ -20,7 +20,7 @@ class vr_orderLogic {
         try
         {
             $model_vr_order = Model('vr_order');
-            $model_vr_order->beginTransaction();
+            $trans = new trans_wapper($model_vr_order,__METHOD__);
 
             //库存、销量变更
             if ($if_queue) {
@@ -65,10 +65,10 @@ class vr_orderLogic {
                 throw new Exception('保存失败');
             }
 
-            $model_vr_order->commit();
+            $trans->commit();
             return callback(true,'更新成功');
         } catch (Exception $e) {
-            $model_vr_order->rollback();
+            $trans->rollback();
             return callback(false,$e->getMessage());
         }
     }
@@ -85,7 +85,7 @@ class vr_orderLogic {
         try
         {
             $model_vr_order = Model('vr_order');
-            $model_vr_order->beginTransaction();
+            $trans = new trans_wapper($model_vr_order,__METHOD__);
 
             $model_pd = Model('predeposit');
             //下单,支付被冻结的充值卡
@@ -143,11 +143,12 @@ class vr_orderLogic {
             $param['store_id'] = $order_info['store_id'];
             $param['param'] = array('order_sn' => $order_info['order_sn']);
             QueueClient::push('sendStoreMsg', $param);
-            
-            $model_vr_order->commit();
+
+            $trans->commit();
+
             return callback(true,'更新成功');
         } catch (Exception $e) {
-            $model_vr_order->rollback();
+            $trans->rollback();
             return callback(false,$e->getMessage());
         }
     }

+ 3 - 4
data/model/buy.model.php

@@ -1149,7 +1149,7 @@ class buyModel {
 
         try {
             //开始事务
-            $model_cart->beginTransaction();
+            $trans = new trans_wapper($model_cart,__METHOD__);
             //生成订单
             list($pay_sn,$order_list) = $this->createOrder($input, $member_id, $member_name, $member_email);
             //记录订单日志
@@ -1159,11 +1159,10 @@ class buyModel {
             //使用预存款支付
             $this->pdPay($order_list, $post, $member_id, $member_name);
             //提交事务
-            $model_cart->commit();
+            $trans->commit();
         }
         catch (Exception $e){
-            //回滚事务
-            $model_cart->rollback();
+            $trans->rollback();
             return array('error' => $e->getMessage());
         }
 

+ 26 - 26
data/model/member.model.php

@@ -265,35 +265,35 @@ class memberModel extends Model
             return false;
         }
 
-        try
+        $info = $this->empty_model();
+        foreach ($param as $key => $value)
         {
-            $info = $this->empty_model();
-            foreach ($param as $key => $value)
-            {
-                if ($key == 'member_passwd') {
-                    $passwd = trim($param['member_passwd']);
-                    $info['member_passwd'] = empty($passwd) ? $passwd : md5($passwd);
-                } elseif ($key == 'member_time') {
-                    $info['member_time'] = time();
-                } elseif ($key == 'member_login_time') {
-                    $info['member_login_time'] = time();
-                } elseif ($key == 'member_login_ip') {
-                    $info['member_login_ip'] = getIp();
-                } else {
-                    $info[$key] = $value;
-                }
+            if ($key == 'member_passwd') {
+                $passwd = trim($param['member_passwd']);
+                $info['member_passwd'] = empty($passwd) ? $passwd : md5($passwd);
+            } elseif ($key == 'member_time') {
+                $info['member_time'] = time();
+            } elseif ($key == 'member_login_time') {
+                $info['member_login_time'] = time();
+            } elseif ($key == 'member_login_ip') {
+                $info['member_login_ip'] = getIp();
+            } else {
+                $info[$key] = $value;
             }
+        }
 
-            if(is_mobile())
-            {
-                $mobile = $info['member_mobile'];
-                if(empty($mobile)) return false;
+        if(is_mobile())
+        {
+            $mobile = $info['member_mobile'];
+            if(empty($mobile)) return false;
 
-                $member = $this->getMemberInfo(array('member_mobile' => $mobile));
-                if(!empty($member)) return false;
-            }
+            $member = $this->getMemberInfo(array('member_mobile' => $mobile));
+            if(!empty($member)) return false;
+        }
 
-            $this->beginTransaction();
+        try
+        {
+            $trans = new trans_wapper($this,__METHOD__);
             $insert_id = $this->table('member')->insert($info);
             if (!$insert_id) {
                 throw new Exception();
@@ -302,10 +302,10 @@ class memberModel extends Model
             if (!$insert) {
                 throw new Exception();
             }
-            $this->commit();
+            $trans->commit();
             return $insert_id;
         } catch (Exception $e) {
-            $this->rollback();
+            $trans->rollback();
             return false;
         }
     }

+ 4 - 6
data/model/predeposit.model.php

@@ -41,16 +41,15 @@ class predepositModel extends Model {
         $card['member_name'] = $memberName;
 
         try {
-            $this->beginTransaction();
-
+            $trans = new trans_wapper($this,__METHOD__);
             $rechargecard_model->setRechargeCardUsedById($card['id'], $memberId, $memberName);
 
             $card['amount'] = $card['denomination'];
             $this->changeRcb('recharge', $card);
 
-            $this->commit();
+            $trans->commit();
         } catch (Exception $e) {
-            $this->rollback();
+            $trans->rollback();
             throw $e;
         }
     }
@@ -252,7 +251,7 @@ class predepositModel extends Model {
     public function changePd($change_type,$data = array())
     {
         $data_log = array();
-        $data_pd = array();
+        $data_pd  = array();
         $data_msg = array();
 
         $data_log['lg_member_id'] = $data['member_id'];
@@ -500,7 +499,6 @@ class predepositModel extends Model {
         }
 
         $update = Model('member')->editMember(array('member_id'=>$data['member_id']),$data_pd);
-
         if (!$update) {
             throw new Exception('操作失败');
         }

+ 7 - 4
data/model/refund_return.model.php

@@ -148,8 +148,10 @@ class refund_returnModel extends Model
             $order = $model_order->getOrderInfo(array('order_id' => $order_id), array(), $field);
 
             $model_predeposit = Model('predeposit');
-            try {
-                $this->beginTransaction();
+            try
+            {
+                $trans = new trans_wapper($this,__METHOD__);
+
                 $order_amount = $order['order_amount'];//订单金额
                 $rcb_amount = $order['rcb_amount'];//充值卡支付金额
                 $predeposit_amount = $order_amount - $order['refund_amount'] - $rcb_amount;//可退预存款金额
@@ -196,10 +198,11 @@ class refund_returnModel extends Model
                 if ($state && $refund['order_lock'] == '2') {
                     $state = $this->editOrderUnlock($order_id);//订单解锁
                 }
-                $this->commit();
+                $trans->commit();
                 return $state;
             } catch (Exception $e) {
-                $this->rollback();
+                $trans->rollback();
+
                 return false;
             }
         }

+ 3 - 3
data/model/transport.model.php

@@ -61,15 +61,15 @@ class transportModel extends Model
 	 */
 	public function delTansport($condition){
 	    try {
-            $this->beginTransaction();
+            $trans = new trans_wapper($this,__METHOD__);
             $delete = $this->table('transport')->where($condition)->delete();
             if ($delete) {
                 $delete = $this->table('transport_extend')->where(array('transport_id'=>$condition['id']))->delete();
             }
             if (!$delete) throw new Exception();
-            $this->commit();
+            $trans->commit();
         }catch (Exception $e){
-            $this->rollback();
+            $trans->rollback();
             return false;
         }
         return true;

+ 10 - 8
data/model/vr_refund.model.php

@@ -38,15 +38,15 @@ class vr_refundModel extends Model{
 	    $refund_array['refund_sn'] = $this->getRefundsn($refund_array['store_id']);
 
 	    try {
-	        $this->beginTransaction();
+            $trans = new trans_wapper($this,__METHOD__);
     		$refund_id = $this->table('vr_refund')->insert($refund_array);
     		$code_array = explode(',', $refund_array['code_sn']);
     		$model_vr_order = Model('vr_order');
     		$model_vr_order->editOrderCode(array('refund_lock'=> 1),array('vr_code'=> array('in',$code_array)));//退款锁定
-    		$this->commit();
+            $trans->commit();
     		return $refund_id;
 		} catch (Exception $e) {
-		    $this->rollback();
+            $trans->rollback();
 		    return false;
 		}
 	}
@@ -61,9 +61,10 @@ class vr_refundModel extends Model{
 		$refund_id = $refund['refund_id'];
 		$refund_lock = '0';//退款锁定状态:0为正常,1为锁定,2为同意
 		$model_vr_order = Model('vr_order');
-	    try {
-	        $this->beginTransaction();
-    		$state = $this->editRefund(array('refund_id'=> $refund_id),$refund);////更新退款
+	    try
+        {
+            $trans = new trans_wapper($this,__METHOD__);
+            $state = $this->editRefund(array('refund_id'=> $refund_id),$refund);////更新退款
 			if ($state && $refund['admin_state'] == '2') {//审核状态:1为待审核,2为同意,3为不同意
 				$refund_lock = '2';
 				$order_id = $refund['order_id'];//订单编号
@@ -112,10 +113,11 @@ class vr_refundModel extends Model{
     		        Logic('vr_order')->changeOrderStateSuccess($order_id);//更新订单状态
     		    }
 			}
-			$this->commit();
+            $trans->commit();
+
     		return $state;
 		} catch (Exception $e) {
-		    $this->rollback();
+            $trans->rollback();
 		    return false;
 		}
 	}

+ 3 - 6
helper/bonus/grab.php

@@ -61,10 +61,9 @@ class general_grab extends IGrab
             $user_bonus = user_bonus::create_by_param($bonus);
             try
             {
-                Db::beginTransaction();
+                $trans = new trans_wapper(null,__METHOD__);
                 if($is_new_grab && $is_new_bind)
                 {
-                    Log::record("general_grab->get_bonus 1");
                     $bonus_val = $user_bonus->bonus_value();
                     Model('bonus_type')->edit(array('type_id' => $type_id),
                         array('grabed_num'    => array('exp', 'grabed_num+1'),
@@ -73,21 +72,19 @@ class general_grab extends IGrab
                 }
                 else if($is_new_bind)
                 {
-                    Log::record("general_grab->get_bonus 2");
                     $bonus_val = $user_bonus->bonus_value();
                     Model('bonus_type')->edit(array('type_id' => $type_id),
                         array('binded_num'    => array('exp', 'binded_num+1'),
                             'remain_amount' => array('exp', "remain_amount-{$bonus_val}")));
                 }
                 else if($is_new_grab) {
-                    Log::record("general_grab->get_bonus 2");
                     Model('bonus_type')->edit(array('type_id' => $type_id), array('grabed_num' => array('exp', 'grabed_num+1')));
                 }
-                Db::commit();
+                $trans->commit();
                 Log::record("general_grab->get_bonus end with one bonus.");
                 return $user_bonus;
             } catch (Exception $ex) {
-                Db::rollback();
+                $trans->rollback();
                 return array();
             }
         }

+ 3 - 4
helper/bonus/manager.php

@@ -329,17 +329,16 @@ class manager
             {
                 //bind 一个新红包
                 $bonus_val = $user_bonus->bonus_value();
-
-                Db::beginTransaction();
+                $trans = new trans_wapper(null,__METHOD__);
                 Model('bonus_type')->edit(array('type_id' => $type_id),
                     array('binded_num' => array('exp', 'binded_num+1'),
                         'remain_amount' => array('exp', "remain_amount-" . "{$bonus_val}")));
-                Db::commit();
+                $trans->commit();
 
                 $this->clear_session($bonus_sn);
                 dcache($user_bonus->type_sn(),self::type_prefix);
             } catch (Exception $ex) {
-                Db::rollback();
+                $trans->rollback();
                 return false;
             }
         }

+ 3 - 3
helper/bonus/shaker.php

@@ -28,7 +28,7 @@ class shaker
             if($bonus_status != 1 && $bonus_status != 2) return false;
 
             $bonus_val = $bonus_valin;
-            Db::beginTransaction();
+            $trans = new trans_wapper(null,__METHOD__);
 
             $mod_bonus = Model('user_bonus');
             $min_amount = self::min_amount;
@@ -94,12 +94,12 @@ class shaker
                 }
             }
 
-            Db::commit();
+            $trans->commit();
             $bonus_valin = $bonus_val;
             return true;
         }
         catch (Exception $ex) {
-            Db::rollback();
+            $trans->rollback();
             return false;
         }
     }

+ 4 - 3
helper/notify_helper.php

@@ -103,7 +103,8 @@ class notify_helper
             try
             {
                 $pred = new predeposit_helper($type['sender_id']);
-                Model::beginTransaction();
+                $trans = new trans_wapper(null,__METHOD__);
+
                 $bonus_type->edit(array('type_id' =>$type['type_id']),array('is_refund' => 1,'refund_time' => time()));
                 if ($bonus_type->affected_rows() <= 0) {
                     $sresult = implode(',',$type);
@@ -113,11 +114,11 @@ class notify_helper
                     $condition = array('type_id' =>$type['type_id'],'bonus_status' => array('in','0,1'));
                     Model('user_bonus')->where($condition)->delete();
                 }
-                Model::commit();
+                $trans->commit();
             }
             catch (Exception $e)
             {
-                Model::rollback();
+                $trans->rollback();
                 $sresult = implode(',',$type);
                 Log::record('bonus refund : error:' . $e->getMessage() . " result:{$sresult}.");
             }

+ 14 - 11
shop/control/h5_hb.php

@@ -97,7 +97,6 @@ class h5_hbControl extends BaseH5Control
     public function getOneBonus($type_id, $phone_num)
     {
         try {
-            Model::beginTransaction();
             // 查找一条记录
             $condition['status'] = 0;
             $condition['type_id'] = $type_id;
@@ -105,8 +104,7 @@ class h5_hbControl extends BaseH5Control
             // 此时记得加载lock
             $result = Model()->table('user_bonus')->where($condition)->limit(1)->lock(true)->order('bonus_id asc')->select();
             if (empty($result)) {
-                 Model::rollback();
-                    return null;
+                return null;
             }
 
             // 更新掉
@@ -114,18 +112,23 @@ class h5_hbControl extends BaseH5Control
             $update_info['get_time'] = time();
             $update_info['user_mobile'] = $phone_num;
             $update_info['status'] = 1;
+
+            $trans = new trans_wapper(null,__METHOD__);
             $ret = Model()->table('user_bonus')->where($cond2)->update($update_info);
-            if (0 == $ret) {
-                Model::rollback();
+            $trans->commit();
+
+            if($ret == false) {
                 return null;
             }
-            Model::commit();
-            $return_value['bonus_value'] = $result[0]['bonus_value'];
-            return $return_value;
-        } catch (Exception $e) {
-            Model::rollback();
+            else {
+                $return_value['bonus_value'] = $result[0]['bonus_value'];
+                return $return_value;
+            }
+        }
+        catch (Exception $e) {
+            $trans->rollback();
+            return null;
         }
-        return null;
     }
 
     // 获取红包最后一步

+ 4 - 4
shop/control/predeposit.php

@@ -196,8 +196,8 @@ class predepositControl extends BaseMemberControl {
 				showDialog(Language::get('predeposit_cash_shortprice_error'),'index.php?act=predeposit&op=pd_cash_list','error');
 			}
 			try {
-			    $model_pd->beginTransaction();
-			    $pdc_sn = $model_pd->makeSn();
+                $trans = new trans_wapper($model_pd,__METHOD__);
+                $pdc_sn = $model_pd->makeSn();
     			$data = array();
     			$data['pdc_sn'] = $pdc_sn;
     			$data['pdc_member_id'] = $_SESSION['member_id'];
@@ -219,10 +219,10 @@ class predepositControl extends BaseMemberControl {
     			$data['amount'] = $pdc_amount;
     			$data['order_sn'] = $pdc_sn;
     			$model_pd->changePd('cash_apply',$data);
-    			$model_pd->commit();
+                $trans->commit();
     			showDialog(Language::get('predeposit_cash_add_success'),'index.php?act=predeposit&op=pd_cash_list','succ','CUR_DIALOG.close()');
 			} catch (Exception $e) {
-			    $model_pd->rollback();
+                $trans->rollback();
 			    showDialog($e->getMessage(),'index.php?act=predeposit&op=pd_cash_list','error');
 			}
 		}

+ 3 - 3
shop/control/store_goods_online.php

@@ -386,7 +386,7 @@ class store_goods_onlineControl extends BaseSellerControl {
         $update_common['is_own_shop']        = in_array($_SESSION['store_id'], model('store')->getOwnShopIds()) ? 1 : 0;
 
         // 开始事务
-        Model()->beginTransaction();
+        $trans = new trans_wapper(null,__METHOD__);
         $model_gift = Model('goods_gift');
         // 清除原有规格数据
         $model_type = Model('type');
@@ -649,11 +649,11 @@ class store_goods_onlineControl extends BaseSellerControl {
         $return = $model_goods->editGoodsCommon($update_common, array('goods_commonid' => $common_id, 'store_id' => $_SESSION['store_id']));
         if ($return) {
             //提交事务
-            Model()->commit();
+            $trans->commit();
             showDialog(L('nc_common_op_succ'), $_POST['ref_url'], 'succ');
         } else {
             //回滚事务
-            Model()->rollback();
+            $trans->rollback();
             showDialog(L('store_goods_index_goods_edit_fail'), urlShop('store_goods_online', 'index'));
         }
     }

+ 3 - 3
shop/control/store_transport.php

@@ -136,7 +136,7 @@ class store_transportControl extends BaseSellerControl {
 		$transport['update_time'] = time();
 
 	    try {
-            $model_transport->beginTransaction();
+            $trans = new trans_wapper($model_transport,__METHOD__);
             $insert = $model_transport->addTransport($transport);
             if ($insert) {
         		$extend	= $model_transport->getExtendList(array('transport_id'=>$id));
@@ -149,10 +149,10 @@ class store_transportControl extends BaseSellerControl {
         		$insert = $model_transport->addExtend($extend);
             }
             if (!$insert) throw new Exception(Language::get('transport_op_fail'));
-            $model_transport->commit();
+            $trans->commit();
             header('location: '.$_SERVER['HTTP_REFERER']);exit;
         }catch (Exception $e){
-            $model_transport->rollback();
+            $trans->rollback();
             showMessage($e->getMessage(),$_SERVER['HTTP_REFERER'],'html','error');
         }
 	}

+ 16 - 5
test/DBTest.php

@@ -18,6 +18,10 @@ class DBTest extends PHPUnit_Framework_TestCase
         Base::run_util();
     }
 
+    public function testTranslog()
+    {
+    }
+
     public function testQuery()
     {
 
@@ -50,11 +54,18 @@ class DBTest extends PHPUnit_Framework_TestCase
     }
     public function testTransaction()
     {
-        $mod_member = Model('member');
-        $mod_member->beginTransaction();
-        $mod_member->where(array('member_id' => 36490))->update(array('member_name' => '江南舟子F2'));
-        $affect_rows_a = $mod_member->affected_rows();
-        $mod_member->commit();
+        try
+        {
+            $mod_member = Model('member');
+            $trans = new trans_wapper(null,__METHOD__);
+            $mod_member->where(array('member_id' => 36490))->update(array('member_name' => '江南舟子F2'));
+            $affect_rows_a = $mod_member->affected_rows();
+            $trans->commit();
+            throw new Exception("xxxx");
+        }
+        catch (Exception $ex) {
+            $trans->rollback();
+        }
     }
 
     public function testMaster()