PageRenderTime 45ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/aoliz/core/api/member/2.0/api_b2b_2_0_advance.php

http://phpfor.googlecode.com/
PHP | 251 lines | 159 code | 37 blank | 55 comment | 14 complexity | f17bece2d35cce957de4d85fb1a8d406 MD5 | raw file
  1. <?php
  2. include_once(CORE_DIR.'/api/shop_api_object.php');
  3. class api_b2b_2_0_advance extends shop_api_object {
  4. var $max_number=100;
  5. var $app_error=array(
  6. 'predeposits_is_not_enough'=>array('no'=>'b_advance_001','debug'=>'','level'=>'error','desc'=>'?????????','info'=>''),
  7. 'fail_to_update_predeposits'=>array('no'=>'b_advance_002','debug'=>'','level'=>'error','desc'=>'?????????','info'=>''),
  8. 'payment_is_not_predeposits'=>array('no'=>'b_advance_003','debug'=>'','level'=>'error','desc'=>'?????????','info'=>''),
  9. 'advance_is_not_exist'=>array('no'=>'b_advance_004','debug'=>'','level'=>'error','desc'=>'????????','info'=>''),
  10. 'fail_to_select_advance'=>array('no'=>'b_advance_005','debug'=>'','level'=>'error','desc'=>'?????????','info'=>'')
  11. );
  12. function getColumns(){
  13. $columns=array(
  14. );
  15. return $columns;
  16. }
  17. /**
  18. * add ?????
  19. *
  20. * @param mixed $member_id
  21. * @param mixed $money
  22. * @param mixed $message
  23. * @access public
  24. * @return void
  25. */
  26. function add($member_id,$money,$message, $payment_id='', $order_id='' ,$paymethod='' ,$memo=''){
  27. $error_msg = '';
  28. $this->checkAccount($member_id,0,$rows);
  29. $data=array('advance'=>$rows[0]['advance'] + $money);
  30. $member_advance = $data['advance'];
  31. $rs = $this->db->exec('SELECT * FROM sdb_members WHERE member_id='.intval($member_id));
  32. $sql = $this->db->getUpdateSQL($rs,$data);
  33. if($this->db->exec($sql)){
  34. $this->log($member_id,$money,$message, $payment_id, $order_id ,$paymethod ,$memo ,$member_advance);
  35. }else{
  36. $error_msg = 'fail_to_update_predeposits';
  37. }
  38. if(!empty($error_msg)){
  39. $this->add_application_error($error_msg);
  40. }else{
  41. return true;
  42. }
  43. }
  44. /**
  45. * ??????
  46. * @param array $act
  47. * @param array $aOrder
  48. * @return ??????
  49. */
  50. function checkAccount($member_id,$money=0,&$rows){
  51. $error_msg = '';
  52. if($rs = $this->db->exec('SELECT advance,member_id FROM sdb_members WHERE member_id='.intval($member_id))){
  53. $rows = $this->db->getRows($rs,1);
  54. if(count($rows)>0){
  55. if($money>$rows[0]['advance']){
  56. $error_msg = 'predeposits_is_not_enough';
  57. }
  58. }else{
  59. $error_msg = 'advance_is_not_exist';
  60. }
  61. }else{
  62. $error_msg = 'fail_to_select_advance';
  63. return false;
  64. }
  65. if(!empty($error_msg)){
  66. $this->add_application_error($error_msg);
  67. }else{
  68. return true;
  69. }
  70. }
  71. /**
  72. * ???????????
  73. *
  74. * @param array $data
  75. *
  76. * @return ???????????
  77. */
  78. function deduct_dealer_advance($data){
  79. $dealer_id = $data['dealer_id'];
  80. $order_id = $data['order_id'];
  81. $pay_id = $data['pay_id'];//????ID
  82. $obj_member = $this->load_api_instance('verify_member_valid','2.0');
  83. $obj_member->verify_member_valid($dealer_id,$member);//?????ID?????????
  84. $obj_order = $this->load_api_instance('set_dead_order','2.0');
  85. $obj_order->verify_order_valid($order_id,$order,'*');//???????
  86. $obj_order->checkOrderStatus('pay',$order);//????????????
  87. $obj_order->verify_order_item_valid($order_id,$local_order_item_list);//????????????
  88. $obj_payment_cfg = $this->load_api_instance('search_payment_cfg_list','2.0');
  89. $obj_payment_cfg->verify_paymentcfg_advance_valid($pay_id,$local_payment_cfg);//??????????????
  90. $obj_payment = $this->load_api_instance('search_payments_by_order','2.0');
  91. if($local_payment_cfg['pay_type'] !='deposit'){
  92. $this->add_application_error('payment_is_not_predeposits');
  93. }
  94. $last_cost_payment = empty($order['cost_payment']) ? 0 : $order['cost_payment'];//?????????
  95. $money = $order['total_amount'] - $order['payed'];//?????
  96. $cost_payment = $local_payment_cfg['fee'] * $money;//?????????
  97. $cost_payment = $obj_payment->formatNumber($cost_payment);
  98. $order['total_amount'] = $order['total_amount'] + $cost_payment;//????????
  99. $order['total_amount'] = $obj_payment->getOrderDecimal($order['total_amount']);
  100. $money = $order['total_amount'] - $order['payed'];//???????
  101. $this->advance_is_enough($member['advance'],$money);//??????????
  102. $obj_order->is_payed($money);//??????????????
  103. $obj_order->verify_payed_valid($order,$money);//???????????????
  104. $order_payment = array('order_id'=>$order['order_id'],
  105. 'money'=>$money,
  106. 'paycost'=>$cost_payment,
  107. 'member_id'=>$order['member_id'],
  108. 'currency'=>$order['currency'],
  109. 'payment'=>$order['payment']?$order['payment']:$pay_id //????ID
  110. );
  111. $oOrder = $this->system->loadModel('trading/order');
  112. // ????????????? 2010-03-24 11:31 wubin
  113. if(method_exists($oOrder,'getFreezeStorageStatus')) {
  114. // ????????? 2010-03-01 17:30 wubin
  115. if(!$obj_order->is_freeze_store($order_id)) {
  116. // ???????
  117. if($aTemp = $oOrder->isNotEnoughStore($order_id)) {
  118. $this->api_response('fail','data fail',$result,'????('.$aResult['product']['name'].')???????');
  119. }
  120. // ????
  121. $oOrder->freezeStorage($order_id);
  122. $obj_order->update_order_freeze($order_id);
  123. }
  124. } // ?????????????
  125. $payment_id = $obj_payment->create_payment($pay_id,$order_payment,'deposit');//?????
  126. $obj_payment->verify_payment_valid($payment_id,$payment);
  127. //???????
  128. $objPlatform = &$this->system->loadModel('system/platform');
  129. if($objPlatform->tell_platform('payments',array('pay_id'=>$payment_id)) === false){
  130. $obj_payment->deletePayment($payment_id);
  131. $this->api_response('fail','data fail',$result,$objPlatform->getErrorInfo());
  132. }
  133. $obj_product = $this->load_api_instance('search_product_by_bn','2.0');
  134. // ??????
  135. //$obj_product->update_store_by_orderitem($local_order_item_list);//???????????
  136. $this->deduct_member_advance($member,$money,$payment_id,$order_id);//???????
  137. //????????,?????????
  138. $curr_cost_payment = $last_cost_payment + $cost_payment;
  139. $obj_order->set_order_payment($order_id,$curr_cost_payment);
  140. $obj_order->changeOrderPayment($order_id,$pay_id);//??????
  141. $obj_order->payed($order,$money);//??????
  142. $result['data_info'] = $payment;
  143. $this->api_response('true',false,$result);
  144. }
  145. /**
  146. * ?????????
  147. *
  148. * @param mixed $member_id
  149. * @param mixed $start
  150. * @param mixed $end
  151. * @access public
  152. * @return ?????????
  153. */
  154. function deduct_member_advance($member,$money,$payment_id,$order_id){
  155. $member_id = $member['member_id'];
  156. $data=array('advance'=>$member['advance']-$money);
  157. $message = '????';
  158. $memo = '????';
  159. $paymethod = '?????';
  160. //???????
  161. $member_advance = $data['advance'];
  162. $rs = $this->db->exec('SELECT * FROM sdb_members WHERE member_id='.intval($member_id));
  163. $sql = $this->db->getUpdateSQL($rs,$data);
  164. if(!$sql || $this->db->exec($sql)){
  165. $this->log($member_id,-$money,$message, $payment_id, $order_id ,$paymethod ,$memo ,$member_advance );
  166. }else{
  167. $this->add_application_error('fail_to_update_predeposits');
  168. }
  169. }
  170. /**
  171. * log ????
  172. *
  173. * @param mixed $member_id
  174. * @param mixed $start
  175. * @param mixed $end
  176. * @access public
  177. * @return void
  178. */
  179. function log($member_id,$money,$message, $payment_id='', $order_id='' ,$paymethod='' ,$memo='' ,$member_advance='' ){
  180. $shop_advance = $this->getShopAdvance();
  181. $rs = $this->db->exec('select * from sdb_advance_logs where 0=1');
  182. $sql = $this->db->getInsertSQL($rs,array(
  183. 'member_id'=>$member_id,
  184. 'money'=>$money,
  185. 'mtime'=>time(),
  186. 'message'=>$message,
  187. 'payment_id'=>$payment_id,
  188. 'order_id'=>$order_id,
  189. 'paymethod'=>$paymethod,
  190. 'memo'=>$memo,
  191. 'import_money'=>($money>0?$money:0),
  192. 'explode_money'=>($money<0?-$money:0),
  193. 'member_advance'=>$member_advance,
  194. 'shop_advance'=>$shop_advance
  195. ));
  196. return $this->db->exec($sql);
  197. }
  198. /* ???????????
  199. *
  200. * @param int $member_advance
  201. * @param int $money
  202. * @return ???????????
  203. */
  204. function advance_is_enough($member_advance,$money){
  205. if($money > $member_advance){
  206. $this->add_application_error('predeposits_is_not_enough');
  207. }
  208. return true;
  209. }
  210. function getShopAdvance(){
  211. $row = $this->db->selectrow("SELECT SUM(advance) as sum_advance FROM sdb_members");
  212. return $row['sum_advance'];
  213. }
  214. }