Files
OMS/app/archive/lib/transformocs/archiveorders.php
2025-12-28 23:13:25 +08:00

422 lines
18 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* Copyright © ShopeX http://www.shopex.cn. All rights reserved.
* See LICENSE file for license details.
*/
class archive_transformocs_archiveorders extends archive_transformocs_abstract
{
static public $products = array();
function do_exec($filter)
{
$wheresql = array();
$sqlstr = '';
if ($filter['shop_id']) {
$wheresql[]= 'shop_id in(\''.implode('\',\'',$filter['shop_id']).'\')';
}
if ($wheresql) {
$sqlstr.=" WHERE ".implode(' AND ',$wheresql);
}
$SQL = "SELECT count(order_id) as _count FROM sdb_ome_orders".$sqlstr;
//取订单
$query = mysql_query($SQL,$this->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.'<br>';
echo '失败'.$fail.'<br>';
}
/**
* 转换订单.
* @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'],
);
}
}
?>