model('orders')->db_dump(array('order_id'=>$order_id),'order_id,shop_id,process_status,shop_type,is_fail,order_combine_hash,order_combine_idx,op_id,group_id'); //[批量日志]处理中 $deliBatchLog = app::get('ome')->model('batch_log'); $rs = $deliBatchLog->update(array('status'=>'2'),array('log_id'=>$params['log_id'],'status'=>'0')); if(is_bool($rs)) { $error_msg = '队列已经跑过'; return false; } #只处理未确认订单 && 失败订单不处理 if(!$row || !in_array($row['process_status'], array('unconfirmed','confirmed')) || $row['is_fail'] == 'true' || //$row['op_id'] || //$row['group_id'] || !$row['order_combine_hash'] || !$row['order_combine_idx'] ) { //[批量日志]已处理 $fail = 1; $deliBatchLog->update(array('status'=>'1','fail_number'=>$fail),array('log_id'=>$params['log_id'])); $error_msg = '订单状态不对' . var_export($row, 1); return false; } $shop = app::get('ome')->model('shop')->db_dump(['shop_id'=>$row['shop_id']], 'delivery_mode'); if($shop['delivery_mode'] == 'jingxiao') { $fail = 1; $deliBatchLog->update(array('status'=>'1','fail_number'=>$fail),array('log_id'=>$params['log_id'])); $error_msg = '经销店铺订单不增加仓库预占' . var_export($row, 1); return false; } $groups[]['orders'][] = $order_id; //订单预处理 // $preProcessLib = new ome_preprocess_entrance(); // $preProcessLib->process($groups, $msg); //开始选仓预占 $combineObj = new omeauto_auto_combine(); $branchPlugObj = new omeauto_auto_plugin_branch(); $splitStoreObj = new omeauto_split_storemax(); $orderFreeze = app::get('material')->model('basic_material_stock_freeze')->getList('*', array('obj_type'=>1, 'obj_id'=>$order_id)); $orderFreeze = array_column($orderFreeze, null, 'bm_id'); $itemObjects = $combineObj->getItemObject($groups); $item = current($itemObjects); if(!is_object($item)) { $error_msg = '不是对象'; return false; } $orders = $item->getOrders(); foreach ($orders as $orderKey => $orderVal) { $storeCode = []; $storeCodeItems = []; foreach ($orderVal['objects'] as $objectKey => $objVal){ #去掉已经预占仓库的明细 foreach($objVal['items'] as $itemKey => $itemVal) { if($orderFreeze[$itemVal['product_id']]['bill_type'] == material_basic_material_stock_freeze::__ORDER_YOU) { unset($objVal['items'][$itemKey]); continue; } } if(empty($objVal['items'])) { unset($orders[$orderKey]['objects'][$objectKey]); continue; } #筛选出含有预选仓的明细 if ($objVal['store_code']) { $storeCode[] = $objVal['store_code']; $storeCodeItems[$objVal['store_code']] = $storeCodeItems[$objVal['store_code']] ? array_merge($storeCodeItems[$objVal['store_code']], $objVal['items']) : $objVal['items']; unset($orders[$orderKey]['objects'][$objectKey]); continue; } } } $itemBranchStore = []; if($orders[$orderKey]['objects']) { #通过库存就全获取仓库 $item->updateOrderInfo($orders); $branchPlugObj->process($item); $splitStoreObj->splitOrder($item,[]); $branch_id = 0; if(is_array($item->getBranchId())) { $branch_id = current($item->getBranchId()); } if($branch_id) { $orders = $item->getOrders(); foreach ($orders as $orderKey => $orderVal) { foreach ($orderVal['objects'] as $objectKey => $objVal){ foreach($objVal['items'] as $itemKey => $itemVal) { $itemBranchStore[$itemVal['product_id']]['bn'] = $itemVal['bn']; $itemBranchStore[$itemVal['product_id']]['branch'][$branch_id] += $itemVal['nums']; } } } } } if($storeCode) { #通过指定仓获取仓库 $appointBranch = kernel::single('ome_branch_type')->isAppointBranch($orderVal); $arrBranch = kernel::single('ome_branch_type')->getBranchIdByStoreCode($storeCode, $appointBranch); foreach($storeCodeItems as $sc => $items) { $branch_id = $arrBranch[$sc]; if($branch_id) { $storeManage = kernel::single('ome_store_manage'); $storeManage->loadBranch(array('branch_id'=>$branch_id)); foreach($items as $item) { $usable_store = $storeManage->processBranchStore(array( 'node_type' => 'getAvailableStore', 'params' => array( 'branch_id' => $branch_id, 'product_id'=> $item['product_id'], ), ), $err_msg); if($usable_store >= $item['nums']) { $itemBranchStore[$item['product_id']]['bn'] = $item['bn']; $itemBranchStore[$item['product_id']]['branch'][$branch_id] += $item['nums']; } } } } } kernel::single('material_basic_material_stock_freeze')->addOrderBranchFreeze($orderFreeze, $itemBranchStore); //[批量日志]已处理 $deliBatchLog->update(array('status'=>'1','succ_number' => 1),array('log_id'=>$params['log_id'])); return true; } }