購物流程:
生成訂單 --> 支付訂單 --> 商家發貨 --> 確認收貨 --> 評價訂單
1.買家在生成訂單之后,支付訂單之前可以取消訂單
2.買家在支付訂單之后,商家發貨之前可以申請退款
3.買家在確認收貨之后可以申請退貨
#### 1.生成訂單
文件路徑:\shop\controllers\Buyer\OrderCtl.php
控制器:Buyer_OrderCtl
方法:addOrder()
判斷選項的支付方式是否合法
~~~
/**
* 如果不是選 在線支付 或 貨到付款 ,則提示錯誤
*/
if(!in_array($pay_way_id, [1,2])){
$data = [];
$status = 250;
$msg = "操作錯誤,請刷新當前頁面!";
return $this->data->addBody(-140, $data, $msg, $status);
}
~~~
檢測是否存在加價購商品,若存在則檢測加價購商品信息是否正確。檢測加價購商品正確性后重組加價購商品的活動規則,查找出活動中所有規則下的加價購商品信息
~~~
if($increase_arr)
{
//檢驗加價購商品信息是否正確
$increase_price_info = $this->checkIncreaseGoods($increase_arr, $cart_id);
if(!$increase_price_info)
{
return $this->data->addBody(-140, array('code'=>1), 'failure1', 250);
}
$increase_goods_id = array_column($increase_arr, 'increase_goods_id');
}
~~~
判斷訂單來源
~~~
//wap端下單
$order_from = Order_StateModel::FROM_WAP;
//pc端下單
$order_from = Order_StateModel::FROM_PC;
~~~
判斷支付方式為在線支付還是貨到付款,如果是貨到付款則訂單狀態直接為待發貨狀態,如果是在線支付則訂單狀態為待付款
~~~
if($pay_way_id == PaymentChannlModel::PAY_ONLINE)
{
$order_status = Order_StateModel::ORDER_WAIT_PAY;
}
if($pay_way_id == PaymentChannlModel::PAY_CONFIRM)
{
$order_status = Order_StateModel::ORDER_WAIT_PREPARE_GOODS;
}
~~~
獲取用戶的平臺折扣信息
~~~
$user_info = $User_InfoModel->getOne($user_id);
~~~
判斷是否使用了代金券,如果使用了代金券,則處理代金券的信息
~~~
if ($voucher_id)
{
//查找代金券的信息
$Voucher_BaseModel = new Voucher_BaseModel();
$voucher_cond_row['voucher_id:IN'] = $voucher_id;
$voucher_row = $Voucher_BaseModel->getByWhere($voucher_cond_row);
$shop_voucher_row = array();
foreach ($voucher_row as $voukey => $vouval)
{
$shop_voucher_row[$vouval['voucher_shop_id']] = $vouval;
}
}
~~~
根據cart_id查找出購物車中的商品信息
~~~
$data = $CartModel->getCardList($cond_row, $order_row);
~~~
計算購物車中每件商品的最后優惠的實際價格
1.店鋪商品總價 = 加價購商品總價 + 購物車商品總價(按照限時折扣和團購價計算)
2.判斷平臺是否開啟會員折扣只限自營店鋪使用。如果是平臺自營店鋪需要計算會員折扣,非平臺自營不需要計算折扣
3.計算每個商品訂單實際支付的金額,以及每件商品的實際支付單價為多少
4.平臺紅包的使用情況
查找收貨地址,計算運費
~~~
$User_AddressModel = new User_AddressModel();
$city_id = 0;
if($address_id)
{
$user_address = $User_AddressModel->getOne($address_id);
$city_id = $user_address['user_address_city_id'];
}
$Transport_TemplateModel = new Transport_TemplateModel();
$transport_cost = $Transport_TemplateModel->cartTransportCost($city_id, $cart_id);
~~~
生成訂單(order_base)
~~~
//生成訂單號
$prefix = sprintf('%s-%s-', Yf_Registry::get('shop_app_id'), date('YmdHis'));
$order_number = $Number_SeqModel->createSeq($prefix);
$order_id = sprintf('%s-%s-%s-%s', 'DD', $val['shop_user_id'], $key, $order_number);
//生成訂單發票信息
$Order_InvoiceModel = new Order_InvoiceModel();
$order_invoice_id = $Order_InvoiceModel->getOrderInvoiceId($invoice_id,$invoice_title,$invoice_content,$order_id);
//生成訂單
$flag1 = $this->tradeOrderModel->addBase($order_row);
//修改用戶使用的紅包信息
if($rpacket_id)
{
if(isset($rpacket_id[$key]))
{
$redPacket_BaseModel = new RedPacket_BaseModel();
$field_row = array();
$field_row['redpacket_state'] = RedPacket_BaseModel::USED;
$field_row['redpacket_order_id'] = $order_id;
$flag5 = $redPacket_BaseModel->editRedPacket($rpacket_id[$key], $field_row);
$flag = $flag && $flag5;
}
}
//修改用戶使用的代金券信息
if($val['voucher_id'])
{
if(isset($shop_voucher_row[$key]))
{
$Voucher_BaseModel = new Voucher_BaseModel();
$flag6 = $Voucher_BaseModel->changeVoucherState($val['voucher_id'], $order_id);
//代金券使用提醒
$message = new MessageModel();
$message->sendMessage('The use of vouchers to remind', Perm::$userId, Perm::$row['user_account'], NULL, $shop_name = NULL, 0, MessageModel::USER_MESSAGE);
$flag = $flag && $flag6;
}
}
//生成訂單商品信息(order_goods)
$flag2 = $Order_GoodsModel->addGoods($order_goods_row);
//生成交易快照
$Order_GoodsSnapshot->addSnapshot($order_goods_snapshot_add_row);
//刪除商品庫存
$Goods_BaseModel->delStock($v['goods_id'], $v['goods_num']);
//從購物車中刪除已生成訂單的商品
$CartModel->removeCart($v['cart_id']);
~~~
加價購、滿即送等活動商品信息插入訂單商品表
將單個店鋪訂單信息同步到paycenter中,并將paycenter中生成的支付單號寫入訂單表中
~~~
//支付中心生成訂單
$key = Yf_Registry::get('shop_api_key');
$url = Yf_Registry::get('paycenter_api_url');
$shop_app_id = Yf_Registry::get('shop_app_id');
$formvars = array();
$formvars['app_id'] = $shop_app_id;
$formvars['from_app_id'] = Yf_Registry::get('shop_app_id');
$formvars['consume_trade_id'] = $order_row['order_id'];
$formvars['order_id'] = $order_row['order_id'];
$formvars['buy_id'] = Perm::$userId;
$formvars['buyer_name'] = Perm::$row['user_account'];
$formvars['seller_id'] = $order_row['seller_user_id'];
$formvars['seller_name'] = $order_row['seller_user_name'];
$formvars['order_state_id'] = $order_row['order_status'];
$formvars['order_payment_amount'] = $order_row['order_payment_amount'];
$formvars['order_commission_fee'] = $order_row['order_commission_fee'];
$formvars['trade_remark'] = $order_row['order_message'];
$formvars['trade_create_time'] = $order_row['order_create_time'];
$formvars['trade_title'] = $trade_title; //商品名稱 - 標題
$rs = get_url_with_encrypt($key, sprintf('%s?ctl=Api_Pay_Pay&met=addConsumeTrade&typ=json',$url), $formvars);
~~~
生成合并支付訂單
~~~
//生成合并支付訂單
$key = Yf_Registry::get('shop_api_key');
$url = Yf_Registry::get('paycenter_api_url');
$shop_app_id = Yf_Registry::get('shop_app_id');
$formvars = array();
$formvars['inorder'] = $inorder;
$formvars['uprice'] = $uprice;
$formvars['buyer'] = Perm::$userId;
$formvars['trade_title'] = $utrade_title;
$formvars['buyer_name'] = Perm::$row['user_account'];
$formvars['app_id'] = $shop_app_id;
$formvars['from_app_id'] = Yf_Registry::get('shop_app_id');
$rs = get_url_with_encrypt($key, sprintf('%s?ctl=Api_Pay_Pay&met=addUnionOrder&typ=json', $url), $formvars);
~~~
判斷訂單生成是否成功,如果成功則將信息推送到統計中心添加訂單統計,將下單成功信息通過IM推送給商家。訂單提交失敗,將paycenter中生成的訂單刪除。
#### 2.支付訂單
支付單與訂單說明:
用戶在店鋪A和店鋪B中購買了100元的商品a和50元的商品b。這兩件商品在結算時同時結算,生成訂單Oa和訂單Ob。Paycenter中生成150元的合并支付單Uab,100元的合并支付訂單Ua,50元的合并支付訂單Ub。
用戶在店鋪C中購買10元的商品c。結算生成訂單Oc。Paycenter中生成10元的合并支付訂單Uc1(相當于上個例子中的Uab),生成10元的合并支付訂單Uc2(相當于上個例子中的Ua或者Ub)。
頁面顯示
文件路徑:\paycenter\controllers\InfoCtl.php
控制器:InfoCtl
方法:pay()
視圖文件:\paycenter\views\default\InfoCtl\pay.php
~~~
//判斷用戶選擇哪種支付方式,如果選擇在線支付則調用相應的方法,如果選擇賬戶余額支付則調用money方法
if(online_payway)
{
window.location.href = SITE_URL + "?ctl=Pay&met=" + online_payway + "&trade_id=" + uorder_id;
}
else
{
$.post(SITE_URL + "?ctl=Pay&met=money&typ=json" ,{trade_id:uorder_id},function(data){
if(data.status == 200)
{
window.location.href = data.data.return_app_url + '?ctl=Buyer_Order&met=<?=$order_g_type?>';
}
else
{
$(".loading-msg").html('支付失敗,請重新支付!');
window.location.reload();
}
})
}
~~~
文件路徑:\paycenter\controllers\PayCtl.php
控制器:PayCtl.php
方法:money()
~~~
//獲取合并訂單號的信息
$uorder = $Union_OrderModel->getOne($trade_id);
//判斷訂單狀態是否為等待付款狀態
if($uorder['order_state_id'] == Order_StateModel::ORDER_WAIT_PAY)
{
$pay_flag = false;
$pay_user_id = 0;
//判斷當前用戶是否是下單者,并且訂單狀態是否是待付款狀態
if($uorder['buyer_id'] == Perm::$userId)
{
$pay_flag = true;
$pay_user_id = $uorder['buyer_id'];
}
else
{
//判斷當前用戶是否是下單者的主管賬戶
$key = Yf_Registry::get('shop_api_key');
$url = Yf_Registry::get('shop_api_url');
$shop_app_id = Yf_Registry::get('shop_app_id');
$formvars = array();
$formvars['app_id'] = $shop_app_id;
$formvars['user_id'] = Perm::$userId;
$formvars['sub_user_id'] = $uorder['buyer_id'];
$sub_user = get_url_with_encrypt($key, sprintf('%s?ctl=Api_User_Info&met=checkSubUser&typ=json',$url), $formvars);
if(!empty($sub_user['data']) && $sub_user['status'] == 200)
{
$pay_flag = true;
$pay_user_id = Perm::$userId;
}
}
if($pay_flag)
{
//修改訂單表中的各種狀態
$flag = $Consume_DepositModel->notifyShop($trade_id,$pay_user_id);
if ($flag['status'] == 200)
{
//查找回調地址
$User_AppModel = new User_AppModel();
$user_app = $User_AppModel->getOne($uorder['app_id']);
$return_app_url = $user_app['app_url'];
$data['return_app_url'] = $return_app_url;
$msg = 'success';
$status = 200;
}
else
{
$msg = _('failure');
$status = 250;
}
}
else
{
$msg = _('failure');
$status = 250;
}
}
~~~
文件路徑:\paycenter\controllers\PayCtl.php
控制器:PayCtl.php
方法:alipay()
~~~
//判斷訂單狀態是否為等待付款狀態
if($trade_row['order_state_id'] == Order_StateModel::ORDER_WAIT_PAY)
{
$pay_flag = false;
$pay_user_id = 0;
//判斷當前用戶是否是下單者,并且訂單狀態是否是待付款狀態
if($trade_row['buyer_id'] == Perm::$userId)
{
$pay_flag = true;
$pay_user_id = $trade_row['buyer_id'];
}
else
{
//判斷當前用戶是否是下單者的主管賬戶
$key = Yf_Registry::get('shop_api_key');
$url = Yf_Registry::get('shop_api_url');
$shop_app_id = Yf_Registry::get('shop_app_id');
$formvars = array();
$formvars['app_id'] = $shop_app_id;
$formvars['user_id'] = Perm::$userId;
$formvars['sub_user_id'] = $trade_row['buyer_id'];
$sub_user = get_url_with_encrypt($key, sprintf('%s?ctl=Api_User_Info&met=checkSubUser&typ=json',$url), $formvars);
if(!empty($sub_user['data']) && $sub_user['status'] == 200)
{
$pay_flag = true;
$pay_user_id = Perm::$userId;
}
}
//ignore 給webpos使用
if($pay_flag || $_GET['ignore']=='abc' )
{
if ($trade_row)
{
$Payment = PaymentModel::create('alipay');
$Payment->pay($trade_row);
}
else
{
echo"<script>alert('支付失敗,請重新支付');history.go(-1);</script>";
}
}
else
{
echo"<script>alert('支付失敗,請重新支付');history.go(-1);</script>";
}
}
~~~
文件路徑:F:\www\paycenter\paycenter\models\Consume\DepositModel.php
方法:notifyShop($order_id = null,$user_id = null)
1.修改paycenter中訂單的信息
~~~
//修改合并訂單中的訂單支付狀態
//獲取合并支付訂單信息
$union_order = $Union_OrderModel->getOne($order_id);
//判斷該訂單是否是白條支付
$bt_flag = $this->checkBt(array('trade_payment_amount'=>$union_order['trade_payment_amount'],'payment_channel_id'=>$union_order['payment_channel_id']));
//檢測支付金額是否正確,判斷該訂單是否是白條支付
if (($union_order['trade_payment_amount'] == $union_order['union_online_pay_amount'] + $union_order['union_money_pay_amount'] + $union_order['union_cards_pay_amount']) || $bt_flag)
{
略
}
~~~
如果是合并支付的訂單,則需要將屬于它的單個合并支付單修改狀態
~~~
if(count($order_id) > 1)
{
//修改單個合并訂單狀態
$uorder_row = $Union_OrderModel->getByWhere(array('inorder:IN' => $order_id));
$uorder_id_row = array_column($uorder_row,'union_order_id');
$edit_uorder_row = array();
$edit_uorder_row['order_state_id'] = Order_StateModel::ORDER_PAYED;
$edit_uorder_row['pay_time'] = date('Y-m-d H:i:s');
check_rs($Union_OrderModel->editUnionOrder($uorder_id_row,$edit_uorder_row), $rs_row);
}
~~~
修改訂單表中的交易狀態
修改交易明細中的訂單狀態
根據支付情況修改用戶資金信息
~~~
if($union_order['union_money_pay_amount'] > 0)
{
//修改用戶的資源狀態
$User_ResourceModel = new User_ResourceModel();
//1.用戶資源中訂單金額凍結(現金)
$flag = $User_ResourceModel->frozenUserMoney($user_id,$union_order['union_money_pay_amount']);
check_rs($flag, $rs_row);
}
if($union_order['union_cards_pay_amount'] > 0)
{
$User_ResourceModel = new User_ResourceModel();
//2.用戶資源中訂單金額凍結(卡)
$flag = $User_ResourceModel->frozenUserCards($user_id,$union_order['union_cards_pay_amount']);
check_rs($flag, $rs_row);
}
//修改白條余額
if($bt_flag)
{
$User_ResourceModel = new User_ResourceModel();
$user_credit_availability = $union_order['trade_payment_amount']*(-1);
$flag = $User_ResourceModel->editResource($user_id,array('user_credit_availability'=>$user_credit_availability),true);
check_rs($flag, $rs_row);
}
~~~
2.paycenter中訂單修改完成后,修改shop中的訂單信息
付款成功后對買家極光推送
訂單付款成功后對賣家進行極光推送
~~~
//根據訂單來源,修改shop訂單狀態
$consume_record = $Consume_TradeModel->getOne($order_id);
$app_id = $consume_record['app_id'];
$User_AppModel = new User_AppModel();
$app_row = $User_AppModel->getOne($app_id);
$key = $app_row['app_key'];
$url = $app_row['app_url'];
$shop_app_id = $app_id;
$formvars = array();
$formvars = $_POST;
$formvars['app_id'] = $shop_app_id;
$formvars['order_id'] = $order_id;
$formvars['uorder_id'] = $uorder_id;
if($consume_record['payment_channel_id'] == Payment_ChannelModel::BAITIAO){
$formvars['payment_channel_code'] = 'baitiao';
}else{
$formvars['payment_channel_code'] = '';
}
$rs = get_url_with_encrypt($key, sprintf('%s?ctl=Api_Trade_Order&met=editOrderRowSatus&typ=json', $url), $formvars);
return $rs;
~~~
#### 3.商家發貨
地址鏈接:/index.php?ctl=Seller_Trade_Order&met=send&typ=e&order_id=訂單編號
文件路徑:\shop\controllers\Seller\Trade\OrderCtl.php
控制器:OrderCtl
方法:send()
視圖文件:\shop\views\default\Seller\Trade\OrderCtl\send.php
根據typ判斷該方法是用來顯示頁面,還是修改訂單狀態。
~~~
if ($typ == 'e')
{
顯示頁面
}
else
{
修改訂單狀態
}
~~~
顯示頁面部分
~~~
$condi['order_id'] = $order_id;
$data = $Order_BaseModel->getOrderList($condi);
$data = pos($data['items']);
//默認物流公司 url
$default_express_url = Yf_Registry::get('url') . '?ctl=Seller_Trade_Deliver&met=express&typ=e';
//打印運單URL
$print_tpl_url = Yf_Registry::get('url') . '?ctl=Seller_Trade_Waybill&met=printTpl&typ=e&order_id=' . $order_id;
//默認物流公司
$express_list = $Shop_ExpressModel->getDefaultShopExpress();
if(is_array($express_list) && $express_list){
$express_list = array_values($express_list);
}
include $this->view->getView();
~~~
修改訂單狀態部分
~~~
//判斷該筆訂單是否是自己的單子
$order_base = $Order_BaseModel->getOne($order_id);
//判斷賬號是否可以發貨
$check_send = $this->checkSend($order_base['seller_user_id'],$order_base['shop_id']);
if($check_send && $order_base['order_status'] < Order_StateModel::ORDER_RECEIVED)
{
//將發貨信息添加到訂單表中
$edit_flag = $Order_BaseModel->editBase($order_id, $update_data);
//修改訂單商品信息
$order_list = $Order_GoodsModel -> getByWhere(array('order_id' => $order_base['order_source_id'],'order_goods_source_id' => ''));
if(!empty($order_list) && $order_base['order_source_id']){
foreach ($order_list as $key => $value) {
$edit_flag1 = $Order_GoodsModel -> editGoods($key,array('order_goods_source_ship' => $update_data['order_shipping_code'].'-'.$update_data['order_shipping_express_id']));
check_rs($edit_flag1,$rs_row);
}
}
//遠程修改paycenter中的訂單信息
$key = Yf_Registry::get('shop_api_key');
$url = Yf_Registry::get('paycenter_api_url');
$shop_app_id = Yf_Registry::get('shop_app_id');
$formvars = array();
$formvars['order_id'] = $order_id;
$formvars['app_id'] = $shop_app_id;
$rs = get_url_with_encrypt($key, sprintf('%s?ctl=Api_Pay_Pay&met=sendOrderGoods&typ=json', $url), $formvars);
}
~~~
如果訂單信息修改正確,發送站內信。
#### 4.確認收貨
地址路徑:index.php?ctl=Buyer_Order&met=confirmOrder&user=buyer
控制器文件路徑:\shop\controllers\Buyer\OrderCtl.php
控制器:Buyer_OrderCtl
方法:confirmOrder()
判斷下單者是否是當前用戶,訂單狀態是否為已發貨狀態
~~~
$order_base['buyer_user_id'] == Perm::$userId && $order_base['order_status'] == Order_StateModel::ORDER_WAIT_CONFIRM_GOODS
~~~
判斷是否是貨到付款訂單,如果是貨到付款訂單,則將支付時間改為確認收貨時間
~~~
if($order_base['payment_id'] == PaymentChannlModel::PAY_CONFIRM)
{
$condition['payment_time'] = get_date_time();
}
~~~
修改訂單商品表中的訂單狀態
~~~
$edit_row['order_goods_status'] = Order_StateModel::ORDER_FINISH;
$order_goods_id = $Order_GoodsModel->getKeyByWhere(array('order_id' => $order_id));
$edit_flag1 = $Order_GoodsModel->editGoods($order_goods_id, $edit_row);
~~~
貨到付款修改商品銷量
修改paycenter中的訂單狀態
~~~
$key = Yf_Registry::get('shop_api_key');
$url = Yf_Registry::get('paycenter_api_url');
$shop_app_id = Yf_Registry::get('shop_app_id');
$formvars = array();
$formvars['order_id'] = $order_id;
$formvars['app_id'] = $shop_app_id;
$formvars['from_app_id'] = Yf_Registry::get('shop_app_id');
//判斷訂單是否是貨到付款訂單,貨到付款訂單不需要修改賣家資金
if($order_base['payment_id'] == PaymentChannlModel::PAY_CONFIRM)
{
$formvars['payment'] = 0;
}
$rs = get_url_with_encrypt($key, sprintf('%s?ctl=Api_Pay_Pay&met=confirmOrder&typ=json', $url), $formvars);
~~~
判斷用戶該筆訂單是否存在退款,如果有的話添加商家的退款流水
~~~
$rs = get_url_with_encrypt($key, sprintf('%s?ctl=Api_Pay_Pay&met=refundShopTransfer&typ=json', $url), $formvars);
~~~
計算本次確認收貨,用戶將獲取的積分與成長值
判斷用戶是否需要升級
~~~
$res_flag = $User_GradeModel->upGrade(Perm::$userId, $resource_row['user_growth']);
~~~
修改用戶積分與成長值之后添加記錄
~~~
//積分
$points_row['user_id'] = Perm::$userId;
$points_row['user_name'] = Perm::$row['user_account'];
$points_row['class_id'] = Points_LogModel::ONBUY;
$points_row['points_log_points'] = $user_points;
$points_row['points_log_time'] = get_date_time();
$points_row['points_log_desc'] = '確認收貨';
$points_row['points_log_flag'] = 'confirmorder';
$Points_LogModel = new Points_LogModel();
$Points_LogModel->addLog($points_row);
//成長值
$grade_row['user_id'] = Perm::$userId;
$grade_row['user_name'] = Perm::$row['user_account'];
$grade_row['class_id'] = Grade_LogModel::ONBUY;
$grade_row['grade_log_grade'] = $user_grade;
$grade_row['grade_log_time'] = get_date_time();
$grade_row['grade_log_desc'] = '確認收貨';
$grade_row['grade_log_flag'] = 'confirmorder';
$Grade_LogModel = new Grade_LogModel;
$Grade_LogModel->addLog($grade_row);
~~~
確認收貨成功之后,將信息添加到統計中心。
#### 5.評價訂單
頁面鏈接:/index.php?ctl=Buyer_Order&met=evaluation&act=add&order_id=訂單編號
控制器文件路徑:\shop\controllers\Buyer\OrderCtl.php
控制器:Buyer_OrderCtl
方法:evaluation()
根據傳遞的參數act,判斷是追加評價,初次評價還是顯示評價列表頁
~~~
if ($act == 'again')
{
//追加評價
//獲取已評價信息
$data = $Goods_EvaluationModel->getOne($evaluation_goods_id);
//商品信息
$data['goods_base'] = current($Order_GoodsModel->getByWhere(array('goods_id'=>$data['goods_id'],'order_id'=>$data['order_id'])));
//訂單信息
$data['order_base'] = $Order_BaseModel->getOne($data['order_id']);
//評價用戶的信息
$data['user_info'] = $User_InfoModel->getOne($data['order_base']['buyer_user_id']);
if ('json' == $this->typ)
{
return $this->data->addBody(-140, $data);
}
else
{
$this->view->setMet('evalagain');
}
}
elseif ($act == 'add')
{
//初次評價
//訂單信息
$data['order_base'] = $Order_BaseModel->getOne($order_id);
//評價用戶的信息
$data['user_info'] = $User_InfoModel->getOne($data['order_base']['buyer_user_id']);
//店鋪信息
$data['shop_base'] = $Shop_BaseModel->getOne($data['order_base']['shop_id']);
//查找出訂單中的商品
$order_goods_id_row = $Order_GoodsModel->getKeyByWhere(array('order_id' => $order_id));
//商品信息
foreach ($order_goods_id_row as $ogkey => $order_good_id)
{
$data['order_goods'][] = $Order_GoodsModel->getOne($order_good_id);
}
if ('json' == $this->typ)
{
return $this->data->addBody(-140, $data);
}
else
{
$this->view->setMet('evaladd');
}
}
else
{
//顯示評價列表頁面
//獲取買家的所有評論
$user_id = Perm::$userId;
$goods_evaluation_row = array();
$goods_evaluation_row['user_id'] = $user_id;
$data = $Goods_EvaluationModel->getEvaluationByUser($goods_evaluation_row, array(), $page, $rows);
}
~~~
1.初次評價
方法鏈接:index.php?ctl=Goods_Evaluation&met=addGoodsEvaluation&typ=json
控制器文件:\shop\controllers\Goods\EvaluationCtl.php
控制器:Goods_EvaluationCtl
方法:addGoodsEvaluation()
循環商品評價
~~~
foreach($evaluation as $key => $val)
{
//訂單商品信息
$order_goods = $Order_GoodsModel->getOne($val[0]);
//商品信息
$goods_base = $Goods_BaseModel->getOne($order_goods['goods_id']);
//訂單信息
$order_base = $Order_BaseModel->getOne($order_goods['order_id']);
//有違禁詞
if (Text_Filter::checkBanned($val[3], $matche_row))
{
$data = array();
$msg = __('含有違禁詞');
$status = 250;
$this->data->addBody(-140, array(), $msg, $status);
return false;
}
//修改商品的評價
$evaluation_num = $this->goodsEvaluationModel->countGoodsEvaluation($order_goods['goods_id']);
//星級好評數
$goods_evaluation_good_star = ceil(($evaluation_num * $goods_base['goods_evaluation_good_star'] + $val[1]) / ($evaluation_num * 1 + 1));
$goods_evaluation_count = $evaluation_num * 1 + 1;
$edit_row = array();
$edit_row['goods_evaluation_good_star'] = $goods_evaluation_good_star;
$edit_row['goods_evaluation_count'] = $goods_evaluation_count;
$Goods_BaseModel->editBaseFalse($order_goods['goods_id'], $edit_row);
//修改商品common表中的評論數量
$edit_common_row['common_evaluate'] = 1;
$Goods_CommonModel->editCommonTrue($order_goods['common_id'],$edit_common_row);
//插入商品評價表
$flag = $this->goodsEvaluationModel->addEvalution($add_row);
if($flag)
{
/********************************************************/
//評價成功添加數據到統計中心 商品評分
$analytics_data = array(
'product_id'=>$goods_base['goods_id'],
'shop_id'=>$goods_base['shop_id'],
'score'=>$goods_evaluation_good_star,
);
Yf_Plugin_Manager::getInstance()->trigger('analyticsScore',$analytics_data);
/********************************************************/
}
//修改訂單商品表
$edit_order_goods['order_goods_evaluation_status'] = Order_GoodsModel::EVALUATION_YES;
$Order_GoodsModel->editGoods($val[0], $edit_order_goods);
}
~~~
添加店鋪評價
~~~
$Shop_EvaluationModel->addEvaluation($add_shop_row);
/********************************************************/
//評價成功添加數據到統計中心 店鋪評分
$analytics_data = array(
'shop_id'=>$order_base['shop_id']
);
Yf_Plugin_Manager::getInstance()->trigger('analyticsShopCredit',$analytics_data);
/********************************************************/
//修改訂單中的評價信息
$edit_order['order_buyer_evaluation_status'] = Order_BaseModel::BUYER_EVALUATE_YES;
$edit_order['order_buyer_evaluation_time'] = get_date_time();
$Order_BaseModel->editBase($order_base['order_id'], $edit_order);
~~~
評價成功后,修改用戶的積分及成長值。
2.追加評價
方法鏈接:index.php?ctl=Goods_Evaluation&met=againGoodsEvaluation&typ=json
控制器文件:\shop\controllers\Goods\EvaluationCtl.php
控制器:Goods_EvaluationCtl
方法:againGoodsEvaluation()
獲取追加評價的商品的初次評價信息
~~~
$evaluation_base = $this->goodsEvaluationModel->getOne($evaluation_goods_id);
~~~
判斷是否存在違禁詞
~~~
if (Text_Filter::checkBanned($content, $matche_row))
{
$data = array();
$msg = __('含有違禁詞');
$status = 250;
$this->data->addBody(-140, array(), $msg, $status);
return false;
}
~~~
修改商品評價數
~~~
$edit_row['goods_evaluation_count'] = $goods_evaluation_count;
$Goods_BaseModel = new Goods_BaseModel();
$edit_flag = $Goods_BaseModel->editBase($goods_id, $edit_row);
~~~
插入商品評價表
~~~
$add_flag = $this->goodsEvaluationModel->addEvalution($add_row);
~~~
修改訂單商品表中商品的評價狀態
~~~
$og_update_flag = $order_goods_model->editGoods($order_goods_id, ['order_goods_evaluation_status'=> Order_GoodsModel::EVALUATION_AGAIN]);
~~~
追加評價成功后,修改用戶的積分及成長值。
#### 5.買家取消訂單
方法路徑:index.php?ctl=Buyer_Order&met=orderCancel&user=buyer
文件路徑:\shop\controllers\Buyer\OrderCtl.php
控制器:Buyer_OrderCtl
方法:orderCancel()
根據typ判斷是顯示頁面,還是操作
~~~
if ($typ == 'e')
{
//顯示頁面
$cancel_row['cancel_identity'] = Order_CancelReasonModel::CANCEL_BUYER;
//獲取取消原因
$Order_CancelReasonModel = new Order_CancelReasonModel;
$reason = array_values($Order_CancelReasonModel->getByWhere($cancel_row));
include $this->view->getView();
}
else
{
處理取消訂單
}
~~~
處理取消訂單
獲取訂單詳情,判斷訂單的狀態與下單者是否是當前用戶
~~~
$order_base = $Order_BaseModel->getOne($order_id);
//加入貨到付款訂單取消功能
if( ($order_base['payment_id'] == PaymentChannlModel::PAY_CONFIRM
&& $order_base['order_status'] == Order_StateModel::ORDER_WAIT_PREPARE_GOODS) //貨到付款+等待發貨
|| $order_base['order_status'] == Order_StateModel::ORDER_WAIT_PAY
&& $order_base['buyer_user_id'] == Perm::$userId)
{
}
~~~
修改訂單信息
~~~
//訂單狀態
$condition['order_status'] = Order_StateModel::ORDER_CANCEL;
//訂單取消原因
$condition['order_cancel_reason'] = addslashes($state_info);
//訂單取消者身份
$condition['order_cancel_identity'] = Order_BaseModel::IS_BUYER_CANCEL;
//訂單取消時間
$condition['order_cancel_date'] = get_date_time();
$edit_flag = $Order_BaseModel->editBase($order_id, $condition);
~~~
修改訂單商品信息
~~~
//訂單商品狀態
$edit_row['order_goods_status'] = Order_StateModel::ORDER_CANCEL;
$order_goods_id = $Order_GoodsModel->getKeyByWhere(array('order_id' => $order_id));
$edit_flag1 = $Order_GoodsModel->editGoods($order_goods_id, $edit_row);
~~~
修改商品庫存
修改paycenter中的訂單狀態
~~~
$rs = get_url_with_encrypt($key, sprintf('%s?ctl=Api_Pay_Pay&met=cancelOrder&typ=json', $url), $formvars);
~~~
判斷訂單是否使用平臺紅包,如果使用,將平臺紅包狀態改為未使用
~~~
//判斷訂單是否使用平臺紅包,如果使用,將平臺紅包狀態改為未使用
$RedPacket_BaseModel = new RedPacket_BaseModel();
$red_data = $RedPacket_BaseModel->getOneByWhere(['redpacket_order_id'=>$order_base['order_id']]);
if($red_data)
{
$red_flag = $RedPacket_BaseModel->editRedPacket($red_data['redpacket_id'], ['redpacket_state'=>RedPacket_BaseModel::UNUSED]);
}
~~~
訂單取消成功,加入統計中心
- 序言
- 系統要求
- 版本更新日志
- 遠豐商城技術對接說明
- 開發指導
- 系統架構
- 負載集群
- 云存儲
- 框架內容
- 基礎
- 開發規范
- 目錄結構
- 架構
- 架構總覽
- 數據庫
- 數據庫連接
- 基本使用
- 緩存
- 配置
- 路由
- 數據字典
- ucenter
- shop
- paycenter
- ucenter_admin
- shop_admin
- paycenter_admin
- shop1
- shop2
- shop3
- 通訊內容
- 商家中心
- 頂部導航欄
- 店鋪信息欄
- 店鋪及商品提示欄
- 交易提示欄
- 銷售情況統計欄
- 集群架構圖
- 單品銷量排行欄
- 店鋪運營推廣欄
- 平臺聯系方式欄
- 訂單物流
- 商品
- 商品列表
- 商品詳情
- 商品發布與編輯
- 分銷商品
- 關聯版式
- 商品規格
- 圖片空間
- 淘寶導入
- 訂單流程
- 交易訂單
- 訂單退款/退貨
- 促銷
- 團購管理
- 加價購
- 限時折扣
- 滿即送
- 代金券管理
- 分銷
- 店鋪
- 店鋪設置
- 自銷產品供應商
- 實體店鋪
- 品牌申請
- 店鋪信息
- 消費者保障服務
- 門店賬號
- 分銷商--產品供應商
- 分銷明細
- 批發市場
- 商家微信公眾號
- 售后服務
- 咨詢管理
- 投訴管理
- 退款管理
- 退貨管理
- 雜項
- 遠程上傳圖片
- 接口(廢棄,參考最外層接口項)
- 接口說明
- 品牌
- 商品規格
- 商品類型
- 商品分類
- 商品
- 訂單
- 商品/店鋪收藏
- 足跡
- 退款及退貨
- 商家店鋪
- 會員
- 入駐協議
- 訂單接口
- 商品接口
- 訂單物流接口
- 商家中心接口
- 促銷接口
- 快遞鳥物流接口
- 代金券接口
- 首頁版塊
- 團購
- 平臺紅包
- 限時折扣接口
- 拼團接口
- wap首頁模板
- JS
- 銀聯支付
- 多語言
- 商品評分
- 圖片加載
- 買家申請退款退貨
- 商家退款退貨
- 平臺退款退貨
- 添加發票
- 提交訂單
- 確認訂單
- 運費銷售區域
- 獲取會員地址
- 充值
- 導出XLS
- 商城系統集成
- 多語言實現
- 三級分銷推廣鏈接發展推廣員
- app.ini.php
- 去分銷
- 版本更新
- 物流支持
- 運營人員建議
- 業務邏輯
- 統計結算
- 客服消息
- 賬號
- 三級分銷
- IM
- 配置
- 平臺帳號
- 活動數據表說明
- 接口
- 數據庫中間鍵
- MyCat的優勢
- 概念說明
- Mycat的下載及安裝
- 參數配置案列
- Mycat讀寫分離
- 基本命令
- 常見錯誤