Esempio n. 1
0
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;
        }
    }
}
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
 /**
  * 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'];
 }
Esempio n. 4
0
 /**
  * 更新产品线(补充产品线名称)
  *
  * @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;
 }