conn) or die('no query'.$SQL); $orderRow = mysql_fetch_assoc($query); $total =$orderRow['_count']; $pagelimit = 500; $page = ceil($total/$pagelimit); $fail = 0;$succ=0; for($i=1;$i<=$page;$i++){ $offset = $pagelimit*($i-1); $offset = max($offset,0); $keys='order_id,order_bn,relate_order_bn,member_id,confirm,process_status,`status`,pay_status,ship_status,is_delivery,shipping,pay_bn,payment,weight,tostr,itemnum,createtime,download_time,last_modified,shop_id,shop_type,ship_name,ship_area,ship_addr,ship_zip,ship_tel,ship_email,ship_time,ship_mobile,consigner_name,consigner_area,consigner_addr,consigner_zip,consigner_email,consigner_mobile,consigner_tel,cost_item,is_tax,cost_tax,tax_company,cost_freight,is_protect,cost_protect,is_cod,is_fail,edit_status,cost_payment,currency,cur_rate,score_u,score_g,discount,pmt_goods,pmt_order,total_amount,final_amount,payed,custom_mark,mark_text,disabled,mark_type,tax_no,dt_begin,group_id,op_id,dispatch_time,order_limit_time,abnormal,print_finish,source,pause,is_modify,old_amount,order_type'; $querysql = "SELECT ".$keys." FROM sdb_ome_orders ".$sqlstr; $queryrow = mysql_query($querysql." ORDER BY order_id DESC LIMIT $offset,$pagelimit",$this->conn); $order_list = array(); $order_bnlist = array(); $member_list = array(); while ($orderrow =mysql_fetch_assoc($queryrow) ) { $order_id = $orderrow['order_id']; $order_bn = $orderrow['order_bn']; $order_list[$order_id] = $orderrow; $member_list[] = $orderrow['member_id']; $order_bnlist[]=$order_bn; } $ordersdfList = $this->_transOrders($order_list); $deliverysdfList = $this->_tranDeliverys($order_bnlist); foreach ( $ordersdfList as $ordersdf ) { //插入会员 $order_bn = $ordersdf['order_bn']; $this->db->beginTransaction(); $order_result = $this->create_order($ordersdf); if ($order_result) { //生成发货单 $order_id = $ordersdf['order_id']; //根据order_bn $delivery_list = $deliverysdfList[$order_bn]; if ($delivery_list) { $delivery_result = $this->addDelivery($order_id,$delivery_list); if (!$delivery_result) { $fail++; $this->db->rollBack(); } unset($delivery_result); } $this->db->commit(); //成功订单 error_log($order_bn.",",3,DATA_DIR.'.succ.log'); $succ++; }else{ //失败订单 $fail++; $this->db->rollBack(); error_log($order_bn.",",3,DATA_DIR.'.fail.log'); } } unset($ordersdfList); } echo '成功'.$succ.'
'; echo '失败'.$fail.'
'; } /** * 转换订单. * @param * @return * @access public * @author sunjing@shopex.cn */ public function _transOrders($order_list) { $order_ids = array_keys($order_list); //会员 $order_sdfList = array(); $orderObjectList = $this->_getorderObject($order_ids); foreach ($order_list as $orders ) { //转换收件人等信息 $orders['consignee']['name'] = $orders['ship_name']; $orders['consignee']['area'] = $orders['ship_area']; $orders['consignee']['addr'] = $orders['ship_addr']; $orders['consignee']['zip'] = $orders['ship_zip']; $orders['consignee']['telephone'] = $orders['ship_tel']; $orders['consignee']['email'] = $orders['ship_email']; $orders['consignee']['r_time'] = $orders['ship_time']; $orders['consignee']['mobile'] = $orders['ship_mobile']; $orders['shipping']['shipping_name'] = $orders['shipping']; $orders['payinfo']['pay_name'] = $orders['payment']; $orders['consigner'] = $this->getConsigner($orders); $orders['shipping']['is_cod'] = $orders['is_cod']; $orders['payinfo']['cost_payment'] = $orders['cost_payment']; $orders['shipping']['cost_shipping'] = $orders['cost_freight']; $orders['shipping']['is_protect'] = $orders['is_protect']; $orders['shipping']['cost_protect'] = $orders['cost_protect']; $order_id = $orders['order_id']; unset($orders['ship_name'],$orders['ship_area'],$orders['ship_addr'],$orders['ship_zip'],$orders['ship_tel'],$orders['ship_email'],$orders['ship_time'],$orders['ship_mobile'],$orders['shipping'],$orders['payment'],$orders['consigner_name'],$orders['consigner_area'],$orders['consigner_addr'],$orders['consigner_zip'],$orders['consigner_email'],$orders['consigner_mobile'],$orders['consigner_tel'],$orders['is_cod'],$orders['cost_payment'],$orders['cost_freight'],$orders['is_protect'],$orders['cost_protect'],$orders['order_id']); $order_sdf = $orders; $order_objects = $orderObjectList[$order_id]; //格式化货号 foreach ($order_objects as &$objects ) { foreach ($objects['order_items'] as &$items ) { $products = $this->getProduct($items['bn']); $items['product_id'] = $products['product_id']; } $objects['goods_id'] = $products['goods_id']; } $order_sdf['order_objects'] = $order_objects; $order_sdfList[] = $order_sdf; unset($order_sdf,$order_objects); } return $order_sdfList; } /** * _getorderObject * @param mixed $order_ids ID * @return mixed 返回值 */ public function _getorderObject($order_ids) { $order_ids = implode(',',$order_ids); $object_keys = 'obj_id,order_id,oid,obj_type,obj_alias,shop_goods_id,goods_id,bn,`name`,price,amount,quantity,pmt_price,sale_price,weight,score'; $sql = "SELECT ".$object_keys." FROM sdb_ome_order_objects WHERE order_id in (".$order_ids.")"; $objectquery = mysql_query($sql,$this->conn); $item_keys = 'order_id,obj_id,shop_goods_id,product_id,shop_product_id,bn,`name`,cost,price,amount,pmt_price,sale_price,nums,sendnum,item_type,`delete`'; $sql1 = "SELECT ".$item_keys." FROM sdb_ome_order_items WHERE order_id in(".$order_ids.") ORDER BY item_id ASC"; $itemquery = mysql_query($sql1,$this->conn); $order_object = $order_items = array(); while ( $itemrow = mysql_fetch_assoc($itemquery) ) { $order_id = $itemrow['order_id']; $obj_id = $itemrow['obj_id']; unset($itemrow['order_id'],$itemrow['obj_id']); $order_items[$order_id][$obj_id][] = $itemrow; } while ($objectrow = mysql_fetch_assoc($objectquery) ) { $order_id = $objectrow['order_id']; $obj_id = $objectrow['obj_id']; $objectrow['order_items'] = $order_items[$order_id][$obj_id]; unset($objectrow['order_id'],$objectrow['obj_id']); $order_object[$order_id][] = $objectrow; } return $order_object; } /** * 根据订单号获取相应发货单信息 * @param * @return array * @access public * @author sunjing@shopex.cn */ function _tranDeliverys($order_bnlist) { $delivery_list = array(); if ($order_bnlist){ $order_bnlist = array_flip($order_bnlist); $deliveryquery = mysql_query("SELECT d.*,o.order_bn FROM sdb_ome_delivery_order as od LEFT JOIN sdb_ome_delivery as d on od.delivery_id=d.delivery_id LEFT JOIN sdb_ome_orders as o on o.order_id=od.order_id WHERE d.parent_id=0 AND o.order_bn in ('".implode('\',\'',$order_bnlist)."')",$this->conn); $deliveryIds = array(); while($delivery_detail = mysql_fetch_assoc($deliveryquery) ){ if ($delivery_detail) { $order_bn = $delivery_detail['order_bn']; $deliveryIds[] = $delivery_detail['delivery_id']; $delivery_list[$order_bn] = $delivery_detail; } } if ($deliveryIds){ $deliveryIds = array_flip($deliveryIds); $itemsquery = mysql_query("SELECT product_id,shop_product_id,bn,product_name,number,verify,verify_num,delivery_id FROM sdb_ome_delivery_items WHERE delivery_id in(".implode(',',$deliveryIds).")",$this->conn); $items = array(); $delivery_items = array(); while ($item_list = mysql_fetch_assoc($itemsquery) ) { //取product_id $products = $this->getProduct($item_list['bn']); $item_list['product_id'] = $products['product_id']; $delivery_items[$item_list['delivery_id']][] = $item_list; } } foreach($delivery_list as $dk=>$deliverys){ $delivery_id = $deliverys['delivery_id']; unset($delivery_list[$dk]['delivery_id']); $delivery_list[$dk]['delivery_items'] = $delivery_items[$delivery_id]; } } return $delivery_list; } function create_order(&$sdf){ $archiveObj = app::get('archive')->model('orders'); //判断订单号是否重复 if($archiveObj->dump(array('order_bn'=>$sdf['order_bn'],'shop_id'=>$sdf['shop_id']))){ return false; } //保存会员 $member_id = $this->getMemberid($sdf['member_id']); unset($sdf['member_id']); $sdf['member_id'] =$member_id; $regionLib = kernel::single('eccommon_regions'); //收货人/发货人地区转换 $area = $sdf['consignee']['area']; $regionLib->region_validate($area); $sdf['consignee']['area'] = $area; $consigner_area = $sdf['consigner']['area']; $regionLib->region_validate($consigner_area); $sdf['consigner']['area'] = $consigner_area; if(!$archiveObj->save($sdf)) return false; return true; } function addDelivery($order_id,$delivery){ $ardeliveryObj = app::get('archive')->model('delivery'); $delivery_detail = $ardeliveryObj->dump(array('delivery_bn'=>$delivery['delivery_bn'],'shop_id'=>$delivery['shop_id']),'delivery_id'); $data = array(); if($delivery_detail){ $data['delivery_id'] = $delivery_detail['delivery_id']; $result = true; }else{ //判断发货单号是否已存在 $delivery_items_detail = $delivery['delivery_items_detail']; // unset($delivery['delivery_items_detail']); $ship_info = $delivery['consignee'] ; $delivery_bn = $delivery['delivery_bn']; $data['delivery_bn'] = $delivery_bn; $data['parent_id'] = $delivery['parent_id'] ; $data['is_cod'] = $delivery['is_cod'] ; $data['delivery'] = $delivery['delivery']; $data['logi_id'] = $delivery['logi_id']; $data['memo'] = $delivery['memo']; $data['delivery_group'] = $delivery['delivery_group']; $data['sms_group'] = $delivery['sms_group']; $data['branch_id'] = $delivery['branch_id']; $data['type'] = $delivery['type']; $deliverys = $this->db->selectrow("SELECT count(delivery_id) as _count FROM sdb_archive_delivery WHERE logi_no='".$delivery['logi_no']."'"); if ($deliverys['_count']>=1) { $data['logi_no'] = $delivery['logi_no'].'_'.$deliverys['_count']; }else{ $data['logi_no'] = $delivery['logi_no'] ? $delivery['logi_no'] : null; } $data['logi_name'] = $delivery['logi_name']; $data['is_protect'] = $delivery['is_protect'] ; $data['create_time'] = $delivery['create_time'] ; $data['cost_protect'] = $delivery['cost_protect']; $data['net_weight'] = $delivery['weight']; $data['delivery_cost_expect'] = $delivery['delivery_cost_expect']; $data['member_id'] = $this->getMemberid($delivery['member_id']); $data['shop_id'] = $delivery['shop_id']; $data['delivery_items'] = $delivery['delivery_items']; $data['consignee'] = $ship_info; $data['order_createtime'] = $delivery['order_createtime'];#付款时间为空时取创建时间 $data['op_id'] = $delivery['op_id']; $data['op_name'] = $delivery['op_name']; //11.25新增 $data['skuNum'] = $delivery['skuNum']; $data['itemNum'] = $delivery['itemNum']; $data['bnsContent'] = $delivery['bnsContent'] ? $delivery['bnsContent'] : '订单内容'; $data['idx_split'] = $delivery['idx_split']; $data['bind_key'] = $delivery['bind_key']; $data['consignee'] = $this->getConsignee($delivery); $data['status'] = $delivery['status']; $data['process'] = $delivery['process']; $data['stock_status'] = $delivery['stock_status']; $data['deliv_status'] = $delivery['deliv_status']; $data['expre_status'] = $delivery['expre_status']; $data['delivery_time'] = $delivery['delivery_time']; $result = $ardeliveryObj->save($data); } //插关联表 if($data['delivery_id'] && $order_id){ $rs = $this->db->exec('SELECT * FROM sdb_archive_delivery_order WHERE 0=1'); $ins = array('order_id'=>$order_id,'delivery_id'=>$data['delivery_id']); $sql = kernel::single("base_db_tools")->getinsertsql($rs,$ins); $this->db->exec($sql); } unset($data); return $result; } function create_delivery_items_detail($delivery_id,$order_id,$delivery_items_detail){ $didObj = app::get('ome')->model('delivery_items_detail'); $diObj = app::get('ome')->model('delivery_items'); foreach ($delivery_items_detail as $item){ $oi = $di = $di_item = $did = array(); $oi = $this->db->selectrow('SELECT item_id,obj_id FROM sdb_ome_order_items WHERE product_id='.$item['product_id'].' AND order_id='.$order_id); $di = $diObj->dump(array('delivery_id'=>$delivery_id,'product_id'=>$item['product_id'],'number'=>$item['number'])); $item_id = $di['item_id']; //查询是否已有 $di_item = $this->db->selectrow('SELECT delivery_item_id FROM sdb_ome_delivery_items_detail WHERE delivery_id='.$delivery_id.' AND product_id='.$item['product_id'].' AND number='.$item['number']); if($di_item){ $di_item1 = $this->db->selectrow('SELECT item_id FROM sdb_ome_delivery_items WHERE delivery_id='.$delivery_id.' AND product_id='.$item['product_id'].' AND number='.$item['number'].' AND item_id!='.$di_item['delivery_item_id']); $item_id = $di_item1['item_id']; } $did = array( 'delivery_id' => $delivery_id, 'delivery_item_id' => $item_id , 'order_id' => $order_id, 'order_item_id' => $oi['item_id'], 'order_obj_id' => $oi['obj_id'], 'item_type' => $item['item_type'], 'product_id' => $item['product_id'], 'bn' => $item['bn'], 'number' => $item['number'], 'price' => $item['price'], 'amount' => $item['amount'], ); $didObj->save($did); } } /** * 获取发货地址信息 * * @param Array $order 订单数据 * @return Array */ private function getConsignee($delivery) { return array( 'name' => $delivery['ship_name'], 'area' => $delivery['ship_area'], 'province' => $delivery['ship_province'], 'city' => $delivery['ship_city'], 'district' => $delivery['ship_district'], 'addr'=> $delivery['ship_addr'], 'zip'=>$delivery['ship_zip'], 'telephone'=>$delivery['ship_tel'], 'mobile'=>$delivery['ship_mobile'], 'email'=>$delivery['ship_email'], ); } private function getConsigner($orders) { return array( 'addr' => $orders['consigner_addr'], 'area' => $orders['consigner_area'], 'zip' => $orders['consigner_zip'], 'email' => $delivery['consigner_email'], 'mobile' => $delivery['consigner_mobile'], 'tel'=> $delivery['consigner_tel'], ); } } ?>