function array_change_key($arr, $str = 'a', &$new_arr) { foreach ($arr as $k => $v) { if (is_array($v)) { array_change_key($v, $str, $new_arr[$str . $k]); } else { $new_arr[$str . $k] = $v; } } }
function inquiry($supplierId, $orderid, $bns) { if (empty($bns) || !is_array($bns)) { return false; } $api_utility =& $this->system->api_call(PLATFORM, PLATFORM_HOST, PLATFORM_PATH, PLATFORM_PORT, $this->_token); $result_items = array(); $send = array('id' => $supplierId, 'bns' => array_keys($bns)); $inquiry_result = $api_utility->getApiData('inquiry', API_VERSION, $send); $api_utility->trigger_all_errors(); $store_mark = 0; //询价单是否有货 foreach ($inquiry_result as $k => $item) { $result_items[$k] = array('supplier_bn' => $item['bn'], 'po_price' => $item['price'], 'stock' => $item['stock']); if ($item['status'] == 'normal') { if ($item['stock'] === null || $item['store'] === '') { $result_items[$k]['stock_status'] = 0; //库存充足 $store_mark = 1; } else { if ($item['stock'] > $bns[$item['bn']] + $item['threshold']) { //库存充足 $result_items[$k]['stock_status'] = 0; $store_mark = 1; } else { if ($item['stock'] > $bns[$item['bn']]) { //库存紧张 $result_items[$k]['stock_status'] = 1; $store_mark = 1; } else { if ($item['stock'] > 0) { $result_items[$k]['stock_status'] = 2; $store_mark = 1; } else { $result_items[$k]['stock_status'] = 3; } } } } } $result_items[$k]['status'] = $item['status']; } $_s2l_cr = $this->get_s2lBns(array_item($result_items, 'supplier_bn'), true); $_where_bns = array(); // 成本价同步 $oCostSync = $this->system->loadModel('distribution/costsync'); foreach ($result_items as $_k => $_item) { $result_items[$_k]['dealer_bn'] = $_s2l_cr[$_item['supplier_bn']]; $result_items[$_k]['nums'] = $bns[$_item['supplier_bn']]; $_where_bns[] = sprintf('\'%s\'', addslashes($result_items[$_k]['dealer_bn'])); // 获取到货品的goods_id 因为有人来商品链接要用到 2009-12-16 11:12 wubin $sSql = 'SELECT i.name,i.price, i.product_id,p.goods_id FROM sdb_order_items AS i LEFT JOIN sdb_products AS p ON p.product_id = i.product_id WHERE i.bn=\'' . $result_items[$_k]['dealer_bn'] . '\' and i.order_id=' . $orderid; $aProduct = $this->db->selectrow($sSql); // 如果产品被删除除的话 产品信息从sdb_order_items上取 2010-01-26 18:56 wubin if (empty($aProduct)) { $sSql = 'SELECT i.name,i.price, i.product_id,i.bn FROM sdb_order_items AS i LEFT JOIN sdb_supplier_pdtbn AS s ON s.local_bn = i.bn WHERE s.source_bn=\'' . $_item['supplier_bn'] . '\' and i.order_id=' . $orderid; $aProduct = $this->db->selectrow($sSql); // 更新sdb_order_items 2010-01-28 14:46 wubin 将原订单的货BN号更新成最新的BN $sSql = "SELECT product_id FROM sdb_products WHERE bn ='" . $result_items[$_k]['dealer_bn'] . "'"; $aTemp = $this->db->selectrow($sSql); // 如果能在数据库中找到对应的货品数据,将订单的bn,product_id 更新 if ($aTemp) { $aTemp['bn'] = $result_items[$_k]['dealer_bn']; $rs = $this->db->exec("SELECT * FROM sdb_order_items WHERE order_id='" . $orderid . "' AND bn='" . $aProduct['bn'] . "'"); $sSql = $this->db->getUpdateSql($rs, $aTemp); $this->db->exec($sSql); } unset($aProduct['bn']); } $result_items[$_k] = array_merge((array) $aProduct, $result_items[$_k]); // 更新货品成本价 wubin 2009-09-15 14:29:12 $oCostSync->updateAloneProductCost($aProduct['product_id'], $_item['po_price']); } $_sql = sprintf('select bn as dealer_bn,nums,supplier_id from sdb_order_items where order_id=%s and bn in(%s)', $orderid, implode(',', $_where_bns)); $_order_items = $this->db->select($_sql); $_order_items = array_change_key($_order_items, 'dealer_bn'); $result_total_amount = 0; //总价 foreach ($result_items as $_k => $_item) { //如果货品已经指定为某个供应商货品, if ($_order_items[$_item['dealer_bn']]['supplier_id'] !== null) { $result_items[$_k]['store'] += $_order_items[$_item['dealer_bn']]['nums']; } //通过更新的库存计算amount if ($_item['stock'] <= 0) { $result_items[$_k]['stock'] = 0; } $result_items[$_k]['amount'] = $bns[$_item['supplier_bn']] * $_item['po_price']; $result_total_amount += $result_items[$_k]['amount']; //如果库存为''/null 则将库存状态置为-1 if ($_item['stock'] == null || $_item['stock'] == '') { $result_items[$_k]['stock'] = -1; } $_data = array('store' => $result_items[$_k]['stock'] != -1 ? $result_items[$_k]['stock'] : null); $_sql = sprintf('SELECT * FROM sdb_products WHERE bn=\'%s\'', addslashes($_item['dealer_bn'])); $rs = $this->db->exec($_sql); $_sql = $this->db->getUpdateSql($rs, $_data); $this->db->exec($_sql); } $result_items = array_change_key($result_items, 'dealer_bn'); $result = array('items' => $result_items, 'store_status' => $store_mark, 'total_amount' => $result_total_amount); return $result; }
/** * save * 保存订单,用于新建或者修改 * * @param mixed $doCreate 是否为新建订单 * @access public * @return void todo:目前只适用于添加!!! */ function save(&$trading, $doCreate = false, &$postInfo) { $data = $trading; $objDelivery =& $this->system->loadModel('trading/reship'); $oCur =& $this->system->loadModel('system/cur'); $aShipping = $objDelivery->getDlTypeById($trading['shipping_id']); // $aArea = $objDelivery->getDlAreaById($trading['area']); $data['shipping'] = $aShipping['dt_name']; // $data['shipping_area'] = $aArea['name']; 废弃字段 $data['acttime'] = time(); $data['createtime'] = time(); $data['last_change_time'] = time(); $data['ip'] = remote_addr(); $trading['totalPrice'] = $oCur->formatNumber($trading['totalPrice'], false); $trading['pmt_b']['totalPrice'] = $oCur->formatNumber($trading['pmt_b']['totalPrice'], false); $data['total_amount'] = $trading['totalPrice'] + $trading['cost_freight'] + $trading['cost_protect']; $data['pmt_amount'] = $trading['pmt_b']['totalPrice'] - $trading['totalPrice']; $data['cost_item'] = $trading['totalPrice'] + $data['pmt_amount']; if ($trading['is_tax'] && $this->system->getConf('site.trigger_tax')) { $data['is_tax'] = 'true'; $data['cost_tax'] = $trading['totalPrice'] * $this->system->getConf('site.tax_ratio'); $data['cost_tax'] = $oCur->formatNumber($data['cost_tax'], false); $data['total_amount'] += $data['cost_tax']; } if ($trading['payment'] > 0) { if ($data['method']) { $data['cost_payment'] = $data['fee']; } else { $data['cost_payment'] = $data['fee'] * $data['total_amount']; } $data['cost_payment'] = $oCur->formatNumber($data['cost_payment'], false); $data['total_amount'] += $data['cost_payment']; } $newNum = $this->getOrderDecimal($data['total_amount']); $data['discount'] = floatval($data['total_amount'] - $newNum); $data['total_amount'] = $newNum; $data['final_amount'] = $data['total_amount'] * $data['cur_rate']; $data['final_amount'] = $oCur->formatNumber($data['final_amount'], false); $data['score_g'] = intval($data['totalGainScore']); $data['score_u'] = intval($data['totalConsumeScore']); $data['score_e'] = intval($newNum); if ($trading['payment'] != "-1") { //----检测该支付方式是否还有子选项,如快钱选择银行 $payment = $this->system->loadModel('trading/payment'); $payment->recgextend($data, $postInfo, $extendInfo); $data['extend'] = serialize($extendInfo); //------------------------------------------------ } //+判断是否有远端商品 if (true || $this->system->getConf('certificate.distribute')) { //检测付款前的订单状态,如果是刚付款立即发货 if (!empty($trading['products']) && is_array($trading['products'])) { foreach ($trading['products'] as $product) { $_where_bns[] = sprintf('\'%s\'', addslashes($product['bn'])); } $_sql = sprintf('select local_bn,supplier_id from sdb_supplier_pdtbn where local_bn in(%s) and `default`=\'true\'', implode(',', $_where_bns)); $_remote_product = $this->db->select($_sql); $_remote_product = array_change_key($_remote_product, 'local_bn'); if ($_remote_product) { $data['is_has_remote_pdts'] = 'true'; } } } //---------------- $rs = $this->db->exec('SELECT * FROM sdb_orders WHERE order_id=' . $data['order_id']); $sql = $this->db->getUpdateSql($rs, $data, $doCreate); $this->_info['order_id'] = $data['order_id']; //会员id if (!$this->db->exec($sql)) { return false; } elseif ($doCreate) { $this->addLog(__('订单创建'), $this->op_id ? $this->op_id : null, $this->op_name ? $this->op_name : null, __('添加')); } $status =& $this->system->loadModel('system/status'); $status->add('ORDER_NEW'); $status->count_order_to_pay(); $status->count_order_new(); //+商品------------------------------------------------------------ if (!empty($trading['products']) && is_array($trading['products'])) { $objGoods =& $this->system->loadModel('trading/goods'); foreach ($trading['products'] as $product) { $product['order_id'] = $data['order_id']; $product['bn'] = $product['bn']; $product['name'] = $product['name']; $product['addon'] = serialize($product['addon']); $product['minfo'] = serialize($product['minfo']); $product['supplier_id'] = $_remote_product[$product['bn']]['supplier_id']; $rs = $this->db->query('SELECT * FROM sdb_order_items WHERE 0=1'); $sqlString = $this->db->GetInsertSQL($rs, $product); if ($sqlString) { $this->db->exec($sqlString); } $objGoods->updateRank($product['goods_id'], 'buy_count', $product['nums']); //购买次数统计 //冻结库存 if ($this->freez_time() == 'order') { if (intval($product['nums']) >= 0) { $this->db->exec("UPDATE sdb_products SET freez = freez + " . intval($product['nums']) . " WHERE product_id = " . intval($product['product_id'])); } $this->db->exec("UPDATE sdb_products SET freez = " . intval($product['nums']) . " WHERE product_id = " . intval($product['product_id']) . " AND freez IS NULL"); } } } //+捆绑商品------------------------------------------------------------ if (is_array($trading['package']) && count($trading['package'])) { foreach ($trading['package'] as $pkgData) { $pkgData['order_id'] = $data['order_id']; $pkgData['product_id'] = $pkgData['goods_id']; $pkg[] = $pkgData['goods_id']; $pkgData['is_type'] = 'pkg'; $pkgData['addon'] = serialize($pkgData['addon']); $rs = $this->db->query('SELECT * FROM sdb_order_items WHERE order_id=' . $pkgData['order_id'] . ' AND is_type = \'pkg\' AND product_id=' . intval($pkgData['goods_id'])); $sqlString = $this->db->GetUpdateSQL($rs, $pkgData, true); $this->db->exec($sqlString); } $this->db->exec('DELETE FROM sdb_order_items WHERE order_id=' . $pkgData['order_id'] . ' AND is_type = \'pkg\' AND product_id NOT IN(' . implode(',', $pkg) . ')'); } //+促销信息------------------------------------------------------------ if ($trading['pmt_o']['pmt_ids']) { //促销 $sSql = 'INSERT INTO sdb_order_pmt (pmt_id,pmt_describe,order_id) select pmt_id,pmt_describe,\'' . $data['order_id'] . '\' FROM sdb_promotion WHERE pmt_id in(' . implode(',', $trading['pmt_o']['pmt_ids']) . ')'; $this->db->exec($sSql); foreach ($trading['pmt_o']['pmt_ids'] as $k => $pmtId) { $sSql = 'UPDATE sdb_order_pmt SET pmt_amount=' . floatval($trading['pmt_o']['pmt_money'][$k]) . ' WHERE pmt_id=' . intval($pmtId) . ' AND order_id=' . $this->db->quote($data['order_id']); $this->db->exec($sSql); } } if ($trading['products']) { $pre_pmtOrder = array(); foreach ($trading['products'] as $v) { if ($v['pmt_id']) { $pre_pmtOrder[$v['pmt_id']] += $v['price'] - $v['_pmt']['price']; } } $aPmtIds = array_keys($pre_pmtOrder); if (!empty($aPmtIds)) { $sSql = 'SELECT pmt_id,pmt_describe FROM sdb_promotion WHERE pmt_id IN(' . implode(',', $aPmtIds) . ')'; $aPmtOrder = $this->db->select($sSql); foreach ($aPmtOrder as $k => $v) { $v['pmt_amount'] = $pre_pmtOrder[$v['pmt_id']]; $v['order_id'] = $data['order_id']; $rs = $this->db->query('select * from sdb_order_pmt where 0=1'); $sqlString = $this->db->GetInsertSQL($rs, $v); $this->db->exec($sqlString); } } } //+积分处理------------------------------------------------------------ $oMemberPoint =& $this->system->loadModel('trading/memberPoint'); $oGift =& $this->system->loadModel('trading/gift'); $aGiftData = array(); if ($data['score_u'] >= 0) { if (!$oMemberPoint->payAllConsumePoint($data['member_id'], $data['order_id'])) { } else { //+赠品处理------------------------------------------------------------ if (is_array($trading['gift_e']) && count($trading['gift_e'])) { foreach ($trading['gift_e'] as $giftId => $v) { $giftId = $v['gift_id']; $aGiftData[$giftId] = array('gift_id' => $giftId, 'name' => $v['name'], 'nums' => $v['nums'], 'point' => $v['point']); if ($this->freez_time() == 'order') { if (!$oGift->freezStock($v['gift_id'], $v['nums'])) { //兑换赠品缺货 } } } } } } if (is_array($trading['gift_p']) && count($trading['gift_p'])) { foreach ($trading['gift_p'] as $v) { $giftId = $v['gift_id']; if (isset($aGiftData[$giftId])) { $aGiftData[$giftId]['nums'] += $v['nums']; } else { $aGiftData[$giftId] = array('gift_id' => $giftId, 'name' => $v['name'], 'nums' => $v['nums'], 'point' => $v['point']); } } } if ($aGiftData) { foreach ($aGiftData as $item) { $oGift =& $this->system->loadModel('trading/gift'); $item['order_id'] = $data['order_id']; $rs = $this->db->query('select * from sdb_gift_items where 0=1'); $sqlString = $this->db->GetInsertSQL($rs, $item); $this->db->exec($sqlString); } } //+优惠券------------------------------------------------------------ if (is_array($trading['coupon_u']) && !empty($trading['coupon_u'])) { $oCoupon =& $this->system->loadModel('trading/coupon'); foreach ($trading['coupon_u'] as $code => $v) { $aTmp = $this->db->selectRow('select cpns_name from sdb_coupons where cpns_id=' . intval($v['cpns_id'])); $aData = array('order_id' => $data['order_id'], 'cpns_id' => $v['cpns_id'], 'memc_code' => $code, 'cpns_name' => $aTmp['cpns_name'], 'cpns_type' => $v['cpns_type']); $rs = $this->db->query('select * from sdb_coupons_u_items where 0=1'); $sqlString = $this->db->GetInsertSQL($rs, $aData); $this->db->exec($sqlString); $oCoupon->applyMemberCoupon($v['cpns_id'], $code, $data['order_id'], $data['member_id']); } } if (is_array($trading['coupon_p']) && !empty($trading['coupon_p'])) { foreach ($trading['coupon_p'] as $code => $v) { $aData = array('order_id' => $data['order_id'], 'cpns_id' => $v['cpns_id'], 'cpns_name' => $v['cpns_name'], 'nums' => $v['nums']); $rs = $this->db->query('select * from sdb_coupons_p_items where 0=1'); $sqlString = $this->db->GetInsertSQL($rs, $aData); $this->db->exec($sqlString); } } $data['is_tax'] = $data['is_tax'] ? true : false; $this->fireEvent('create', $data, $data['member_id']); //订单生成成功事件 if ($data['total_amount'] == 0) { $pdata['order_id'] = $data['order_id']; $pdata['member_id'] = $data['member_id']; $pdata['money'] = 0; $this->payed($pdata); } return $data['order_id']; }
/** * 更新产品线(补充产品线名称) * * @param int $supplier_id * @param array $aData // 从平台上获取的产品线信息 array( * array( * 'pline_id' => 'xxx', * 'pline_name' => 'xxx', * 'cat_id' => 'xxx', * 'brand_id' => 'xxx', * ... * ), * array(...), * .... * ) * @return array // array( * 'xxx'=>array( // 产品线编号 * 'brand_id' =>'xx', * 'cat_id' =>'xx', * 'pline_name' => 'xx' * ), * ... * ) */ function fillPlineName($supplier_id, $aData) { // 获取产品线数据 $oSupplier = $this->system->loadModel('distribution/supplier'); $aInfo = $oSupplier->getSupplierInfo($supplier_id); $aPline = unserialize($aInfo['supplier_pline']); $aData = array_change_key($aData, 'pline_id'); foreach ($aPline as $key => $row) { $aPline[$key]['pline_name'] = $aData[$key]['pline_name']; } // 更新到供应商列表中 $sPline = serialize($aPline); $sSql = "UPDATE sdb_supplier SET supplier_pline='" . $sPline . "' WHERE supplier_id ='" . $supplier_id . "'"; $this->db->exec($sSql); return $aPline; }