/** * @brief 保存添加订单 * */ public function order_update() { //获取post参数-----order表中 $user_id = IFilter::act(IReq::get('user_id'), 'int'); $payment = IFilter::act(IReq::get('payment'), 'int'); $payable_amount = IFilter::act(IReq::get('total'), 'float'); $real_amount = IFilter::act(IReq::get('real_total'), 'float'); $payable_freight = IFilter::act(IReq::get('delivery_price'), 'float'); $real_freight = IFilter::act(IReq::get('real_freight'), 'float'); $taxes = IFilter::act(IReq::get('taxes'), 'float'); $pay_fee = IFilter::act(IReq::get('pay_fee'), 'float'); $order_no = block::createOrderNum(); //获得货到付款 $pay_type = IFilter::act(IReq::get('pay_type')); if ($pay_type == 1) { $payment = IFilter::act(IReq::get('paymen'), 'int'); } //获得order表对象 $tb_order = new IModel('order'); $tb_order->setData(array('user_id' => $user_id, 'accept_name' => IFilter::act(IReq::get('accept_name')), 'pay_code' => IFilter::act(IReq::get('pay_code')), 'distribution' => IFilter::act(IReq::get('delivery'), 'int'), 'pay_type' => $payment, 'status' => 1, 'pay_status' => 0, 'distribution_status' => 0, 'postcode' => IFilter::act(IReq::get('postcode')), 'telphone' => IFilter::act(IReq::get('telphone')), 'province' => IFilter::act(IReq::get('province'), 'int'), 'city' => IFilter::act(IReq::get('city'), 'int'), 'area' => IFilter::act(IReq::get('area'), 'int'), 'mobile' => IFilter::act(IReq::get('mobile')), 'address' => IFilter::act(IReq::get('address')), 'postscript' => IFilter::act(IReq::get('postscript')), 'create_time' => date('Y-m-d H:i:s'), 'payable_amount' => $payable_amount, 'real_amount' => $real_amount, 'payable_freight' => $payable_freight, 'real_freight' => $real_freight, 'order_no' => $order_no, 'invoice' => IFilter::act(IReq::get('invoice'), 'int'), 'invoice_title' => IFilter::act(IReq::get('invoice_title')), 'promotions' => $payable_amount - $real_amount, 'taxes' => $taxes, 'pay_fee' => $pay_fee, 'order_amount' => $real_amount + $real_freight + $taxes + $pay_fee, 'accept_time' => '任意')); //保存order数据,并且获得order_id $order_id = $tb_order->add(); //实付总金额 $real_amount = 0; //第二步获得order_goods表的内容,包括order_id,goods_id,products_id等主要项目 $goods_id = IFilter::act(IReq::get('goods_id')); $product_id = IFilter::act(IReq::get('p_id')); $goods_price = IFilter::act(IReq::get('price')); $real_price = IFilter::act(IReq::get('real_price')); $goods_nums = IFilter::act(IReq::get('number')); $goods_weight = IFilter::act(IReq::get('weight')); $g_id_arr = explode(',', $goods_id); $p_id_arr = explode(',', $product_id); $g_pr_arr = explode(',', $goods_price); $r_pr_arr = explode(',', $real_price); $g_nu_arr = explode(',', $goods_nums); $g_we_arr = explode(',', $goods_weight); $point = 0; $exp = 0; //循环保存order_goods表中数据 $tb_goods = new IModel('goods'); $tb_order_goods = new IModel('order_goods'); $tb_products = new IModel('products'); foreach ($g_id_arr as $key => $value) { //根据会员组获得产品的实际价格 $tb_order_goods->setData(array('order_id' => $order_id, 'goods_id' => $g_id_arr[$key], 'product_id' => $p_id_arr[$key], 'goods_price' => $g_pr_arr[$key], 'real_price' => $r_pr_arr[$key], 'goods_nums' => $g_nu_arr[$key], 'goods_weight' => $g_we_arr[$key])); $og_id = $tb_order_goods->add(); $ids = array(); $ids['name'] = ''; $info = $tb_goods->query('id=' . $g_id_arr[$key]); if (count($info) > 0) { $ids['name'] = $info[0]['name']; //计算积分 $point += $g_nu_arr[$key] * $info[0]['point']; $exp += $g_nu_arr[$key] * $info[0]['exp']; } $ids['value'] = ''; $p_info = $tb_products->query('id=' . $p_id_arr[$key]); if (count($p_info) > 0) { $spec_array = Block::show_spec($p_info[0]['spec_array']); foreach ($spec_array as $ky => $vaa) { $ids['value'] .= $ky . ':' . $vaa . ','; } } $tb_order_goods->setData(array('goods_array' => serialize($ids))); $tb_order_goods->update('id=' . $og_id); //减goods表中以及products中的库存 Block::updateStore($order_id, $type = 'reduce'); //计算实付总金额 $real_amount = $real_amount + $real_price * $g_nu_arr[$key]; } if ($point) { //更新积分 $tb_order->setData(array('point' => $point, 'exp' => $exp)); $tb_order->update('id=' . $order_id); } //获取post值,看用户是否要保存收货地址 $if_save = IReq::get('if_save'); if ($if_save) { $tb_address = new IModel('address'); $tb_address->setData(array('user_id' => $user_id, 'accept_name' => IFilter::act(IReq::get('accept_name')), 'zip' => IFilter::act(IReq::get('postcode')), 'telphone' => IFilter::act(IReq::get('telphone')), 'province' => IFilter::act(IReq::get('province'), 'int'), 'city' => IFilter::act(IReq::get('city'), 'int'), 'area' => IFilter::act(IReq::get('area'), 'int'), 'address' => IFilter::act(IReq::get('address')), 'mobile' => IFilter::act(IReq::get('mobile')), 'default' => 0)); $tb_address->add(); } //生成订单日志 $tb_order_log = new IModel('order_log'); $tb_order_log->setData(array('order_id' => $order_id, 'user' => $this->admin['admin_id'], 'action' => '添加', 'result' => '成功', 'note' => '订单【' . $order_no . '】创建', 'addtime' => date('Y-m-d H:i:s'))); $tb_order_log->add(); $logObj = new log('db'); $logObj->write('operation', array("管理员:" . ISafe::get('admin_name'), "生成了新订单", '订单号:' . $order_no)); $this->redirect('order_list'); }
function cart3() { $accept_name = IFilter::act(IReq::get('accept_name')); $province = IFilter::act(IReq::get('province'), 'int'); $city = IFilter::act(IReq::get('city'), 'int'); $area = IFilter::act(IReq::get('area'), 'int'); $address = IFilter::act(IReq::get('address')); $mobile = IFilter::act(IReq::get('mobile')); $telphone = IFilter::act(IReq::get('telphone')); $zip = IFilter::act(IReq::get('zip')); $delivery_id = IFilter::act(IReq::get('delivery_id'), 'int'); $accept_time_radio = IFilter::act(IReq::get('accept_time_radio'), 'int'); $accept_time = IFilter::act(IReq::get('accept_time')); $payment = IFilter::act(IReq::get('payment'), 'int'); $order_message = IFilter::act(IReq::get('message')); $ticket_id = IFilter::act(IReq::get('ticket_id'), 'int'); $is_tax = IFilter::act(IReq::get('is_tax'), 'int'); $tax_title = IFilter::act(IReq::get('tax_title'), 'text'); $gid = intval(IReq::get('direct_gid')); $num = intval(IReq::get('direct_num')); $type = IFilter::act(IReq::get('direct_type')); //商品或者货品 $promo = IFilter::act(IReq::get('direct_promo')); $active_id = intval(IReq::get('direct_active_id')); $tourist = IReq::get('tourist'); //游客方式购物 $order_no = block::createOrderNum(); $order_type = 0; $is_protectPrice = IFilter::act(IReq::get('protect_price')); $dataArray = array(); //防止表单重复提交 if (IReq::get('timeKey') != null) { if (ISafe::get('timeKey') == IReq::get('timeKey')) { IError::show(403, '订单数据不能被重复提交'); exit; } else { ISafe::set('timeKey', IReq::get('timeKey')); } } if ($province == 0 || $city == 0 || $area == 0) { IError::show(403, '请填写收货地址的省市地区'); } if ($delivery_id == 0) { IError::show(403, '请选择配送方式'); } $user_id = $this->user['user_id'] == null ? 0 : $this->user['user_id']; //活动特殊处理 if ($promo != '' && $active_id != '') { //团购 if ($promo == 'groupon') { $hashId = $user_id ? $user_id : ICookie::get("regiment_{$active_id}"); //此团购还存在已经报名但是未付款的情况 if (regiment::hasJoined($active_id, $hashId) == true) { IError::show(403, '您已经参加过此次团购,请先完成支付'); exit; } //团购已经达到限定的人数 if (regiment::isFull($active_id) == true) { IError::show(403, '此团购的参加人数已满'); exit; } $order_type = 1; //团购开始报名 $joinUserId = $user_id ? $user_id : null; $resultData = regiment::join($active_id, $joinUserId); $is_success = ''; if ($resultData['flag'] == true) { $regimentRelationObj = new IModel('regiment_user_relation'); $regimentRelationObj->setData(array('order_no' => $order_no)); $is_success = $regimentRelationObj->update('id = ' . $resultData['relation_id']); } if ($is_success == '' || $resultData['flag'] == false) { $errorMsg = isset($resultData['data']) && $resultData['data'] != '' ? $resultData['data'] : '团购报名失败'; IError::show(403, $errorMsg); exit; } } else { if ($promo == 'time') { $order_type = 2; } } } //付款方式,判断是否为货到付款 $deliveryObj = new IModel('delivery'); $deliveryRow = $deliveryObj->getObj('id = ' . $delivery_id, 'type'); if ($deliveryRow['type'] == 0 && $payment == 0) { IError::show(403, '请选择支付方式'); } else { if ($deliveryRow['type'] == 1) { $payment = 0; } } $countSumObj = new CountSum(); //直接购买商品方式 if ($type != '' && $gid != 0) { //计算$gid商品 $goodsResult = $countSumObj->direct_count($gid, $type, $num, $promo, $active_id); } else { //计算购物车中的商品价格$goodsResult $goodsResult = $countSumObj->cart_count(); //清空购物车 $cartObj = new Cart(); $cartObj->clear(); } //判断商品商品是否存在 if (empty($goodsResult['goodsList']) && empty($goodsResult['productList'])) { IError::show(403, '商品数据不存在'); exit; } $sum_r = $goodsResult['sum']; $proReduce_r = $goodsResult['proReduce']; $reduce_r = $goodsResult['reduce']; $final_sum_r = $goodsResult['final_sum']; $freeFreight_r = $goodsResult['freeFreight']; $point_r = $goodsResult['point']; $exp_r = $goodsResult['exp']; //计算运费$deliveryPrice和保价$protect_price $deliveryList = Delivery::getDelivery($province, $goodsResult['weight'], $final_sum_r); $deliveryPrice = $deliveryList[$delivery_id]['price']; if ($is_protectPrice == null) { $protect_price = 0; $if_insured = 0; } else { $protect_price = $deliveryList[$delivery_id]['protect_price']; $if_insured = 1; } if ($freeFreight_r == true) { $deliveryPrice_r = 0; } else { $deliveryPrice_r = $deliveryPrice; } //获取红包减免金额 if ($ticket_id != '') { $memberObj = new IModel('member'); $memberRow = $memberObj->getObj('user_id = ' . $user_id, 'prop,custom'); if (ISafe::get('ticket_' . $ticket_id) == $ticket_id || stripos(',' . trim($memberRow['prop'], ',') . ',', ',' . $ticket_id . ',') !== false) { $propObj = new IModel('prop'); $ticketRow = $propObj->getObj('id = ' . $ticket_id . ' and NOW() between start_time and end_time and type = 0 and is_close = 0 and is_userd = 0 and is_send = 1'); if (!empty($ticketRow)) { $ticket_value = $ticketRow['value']; $reduce_r += $ticket_value; $final_sum_r -= $ticket_value; $dataArray['prop'] = $ticket_id; } //锁定红包状态 $propObj->setData(array('is_close' => 2)); $propObj->update('id = ' . $ticket_id); } } //获取税率$tax if ($is_tax == 1) { $siteConfigObj = new Config("site_config"); $site_config = $siteConfigObj->getInfo(); $tax_per = isset($site_config['tax']) ? $site_config['tax'] : 0; $tax = $final_sum_r * ($tax_per / 100); } else { $tax = 0; } //货到付款的方式 if ($payment == 0) { $paymentName = '货到付款'; $payment_fee = 0; $paymentType = 0; $paymentNote = ''; } else { //计算支付手续费 $paymentObj = new IModel('payment'); $paymentRow = $paymentObj->getObj('id = ' . $payment, 'type,poundage,poundage_type,name,note'); $paymentName = $paymentRow['name']; $paymentType = $paymentRow['type']; $paymentNote = $paymentRow['note']; if ($paymentRow['poundage_type'] == 1) { $payment_fee = ($final_sum_r + $tax + $deliveryPrice_r + $protect_price) * ($paymentRow['poundage'] / 100); } else { $payment_fee = $paymentRow['poundage']; } } //最终订单金额计算 $order_amount = $final_sum_r + $deliveryPrice_r + $payment_fee + $tax + $protect_price; $order_amount = $order_amount <= 0 ? 0 : round($order_amount, 2); //生成的订单数据 $dataArray = array('order_no' => $order_no, 'user_id' => $user_id, 'accept_name' => $accept_name, 'pay_type' => $payment, 'distribution' => $delivery_id, 'status' => 1, 'pay_status' => 0, 'distribution_status' => 0, 'postcode' => $zip, 'telphone' => $telphone, 'province' => $province, 'city' => $city, 'area' => $area, 'address' => $address, 'mobile' => $mobile, 'create_time' => ITime::getDateTime(), 'invoice' => $is_tax, 'postscript' => $order_message, 'invoice_title' => $tax_title, 'accept_time' => $accept_time, 'exp' => $exp_r, 'point' => $point_r, 'type' => $order_type, 'prop' => isset($dataArray['prop']) ? $dataArray['prop'] : null, 'payable_amount' => $goodsResult['sum'], 'real_amount' => $goodsResult['final_sum'], 'payable_freight' => $deliveryPrice, 'real_freight' => $deliveryPrice_r, 'pay_fee' => $payment_fee, 'taxes' => $tax, 'promotions' => $proReduce_r + $reduce_r, 'order_amount' => $order_amount, 'if_insured' => $if_insured, 'insured' => $protect_price); $orderObj = new IModel('order'); $orderObj->setData($dataArray); $this->order_id = $orderObj->add(); if ($this->order_id == false) { IError::show(403, '订单生成错误'); } /*将订单中的商品插入到order_goods表*/ $orderGoodsObj = new IModel('order_goods'); $goodsArray = array('order_id' => $this->order_id); $findType = array('goods' => 'goodsList', 'product' => 'productList'); foreach ($findType as $key => $list) { if (isset($goodsResult[$list]) && count($goodsResult[$list]) > 0) { foreach ($goodsResult[$list] as $k => $val) { //拼接商品名称和规格数据 $specArray = array('name' => $val['name'], 'value' => ''); if ($key == 'product') { $goodsArray['product_id'] = $val['id']; $goodsArray['goods_id'] = $val['goods_id']; $spec = block::show_spec($val['spec_array']); foreach ($spec as $skey => $svalue) { $specArray['value'] .= $skey . ':' . $svalue . ' , '; } } else { $goodsArray['goods_id'] = $val['id']; $goodsArray['product_id'] = 0; } $specArray = serialize($specArray); $goodsArray['goods_price'] = $val['sell_price']; $goodsArray['real_price'] = $val['sell_price'] - $val['reduce']; $goodsArray['goods_nums'] = $val['count']; $goodsArray['goods_weight'] = $val['weight']; $goodsArray['goods_array'] = $specArray; $orderGoodsObj->setData($goodsArray); $orderGoodsObj->add(); } } } //更改购买商品的库存数量 Block::updateStore($this->order_id, 'reduce'); //记录用户默认习惯的数据 if (!isset($memberRow['custom'])) { $memberObj = new IModel('member'); $memberRow = $memberObj->getObj('user_id = ' . $user_id, 'custom'); } $memberData = array('custom' => serialize(array('payment' => $payment, 'delivery' => $delivery_id))); $memberObj->setData($memberData); $memberObj->update('user_id = ' . $user_id); //收货地址的处理 if ($user_id) { $addressObj = new IModel('address'); //如果用户之前没有收货地址,那么会自动记录此次的地址信息并且为默认 $addressRow = $addressObj->getObj('user_id = ' . $user_id); if (empty($addressRow)) { $addressData = array('default' => '1', 'user_id' => $user_id, 'accept_name' => $accept_name, 'province' => $province, 'city' => $city, 'area' => $area, 'address' => $address, 'zip' => $zip, 'telphone' => $telphone, 'mobile' => $mobile); $addressObj->setData($addressData); $addressObj->add(); } else { //如果用户有收货地址,但是没有设置默认项,那么会自动设置此次地址信息为默认 $radio_address = intval(IReq::get('radio_address')); if ($radio_address != 0) { $addressDefRow = $addressObj->getObj('user_id = ' . $user_id . ' and `default` = 1'); if (empty($addressDefRow)) { $addressData = array('default' => 1); $addressObj->setData($addressData); $addressObj->update('user_id = ' . $user_id . ' and id = ' . $radio_address); } } } } //获取备货时间 $siteConfigObj = new Config("site_config"); $site_config = $siteConfigObj->getInfo(); $this->stockup_time = isset($site_config['stockup_time']) ? $site_config['stockup_time'] : 2; //数据渲染 $this->order_num = $dataArray['order_no']; $this->final_sum = $dataArray['order_amount']; $this->payment_fee = $payment_fee; $this->payment = $paymentName; $this->delivery = $deliveryList[$delivery_id]['name']; $this->tax_title = $tax_title; $this->deliveryType = $deliveryRow['type']; $this->paymentType = $paymentType; $this->paymentNote = $paymentNote; //订单金额为0时,订单自动完成 if ($this->final_sum <= 0) { $order_id = payment::updateOrder($dataArray['order_no']); if ($order_id != '') { if ($user_id) { $this->redirect('/site/success/message/' . urlencode("订单确认成功,等待发货") . '/?callback=ucenter/order_detail/id/' . $order_id); } else { $this->redirect('/site/success/message/' . urlencode("订单确认成功,等待发货")); } } else { IError::show(403, '订单修改失败'); } } else { $this->redirect('cart3'); } }