-1, 'id' => -1, 'name' => '未分配供货商', ); $this->assign_store($data, $goods, $source, $order, $shop); $this->assign_factory($data, $goods, $source, $order, $shop); if ($state) { return array($data, $source); } return $data; } private function assign_store(&$data, &$goods, &$source, $order, $shop) { $shop_store = Dever::db('shop/store')->select(array('shop_id' => $shop['id'])); $store = array(); $distance = array(); # 按照距离排序 if ($shop_store) { foreach ($shop_store as $k => $v) { $info = Dever::db('store/info')->find($v['store_id']); if ($info && $info['status'] == 1) { $distance[] = $info['distance'] = Dever::distance($shop['lng'], $shop['lat'], $info['lng'], $info['lat']); $store[] = $info; } } if ($store) { array_multisort($distance, SORT_ASC, SORT_NUMERIC, $store); foreach ($store as $k => $v) { $store[$k]['type'] = 2; //$source[] = $store[$k]; if ($goods) { foreach ($goods as $gk => $gv) { $where = array(); $where['store_id'] = $v['id']; $where['goods_id'] = $gv['goods_id']; $where['sku_id'] = ($gv['sku_id'] && $gv['sku_id'] > 0) ? $gv['sku_id'] : -1; $sku = Dever::db('store/goods_sku')->getOne($where); if ($sku) { $source[$v['id']] = $store[$k]; if ($gv['num'] <= $sku['total']) { # 库存符合 $data['2_' . $v['id']][] = array ( 'area' => $shop['area'], 'order_id' => $order['id'], 'order_type' => $order['type'], 'order_num' => $order['order_num'], 'order_index' => $order['order_index'], 'type' => 1, 'type_id' => $shop['id'], 'source_type' => 2, 'source_id' => $v['id'], 'source_name' => $v['name'], 'order_goods_id' => $gv['id'], 'goods_id' => $where['goods_id'], 'sku_id' => $where['sku_id'], 'price' => $gv['price'], 'p_price' => $gv['price'], 'num' => $gv['num'], ); unset($goods[$gk]); } } } } } } return $store; } return false; } private function assign_factory(&$data, &$goods, &$source, $order, $shop) { $where = array('shop_id' => $shop['id']); $lng = $shop['lng']; $lat = $shop['lat']; $address = array(); if (isset($order['parent_type'])) { if ($order['parent_type'] == 2) { # 平台商城 $sell_order = Dever::db('shop/sell_order')->find($order['parent_order_id']); if ($sell_order) { $address = Dever::db('passport/address')->find($sell_order['address_id']); } } elseif ($order['parent_type'] == 3) { # 代理商下单 $dh_order = Dever::db('agent/dh_order')->find($order['parent_order_id']); if ($dh_order) { $address = Dever::db('agent/member_address')->find($dh_order['address_id']); } } } elseif (isset($order['type'])) { if ($order['type'] == 2) { # 平台商城 $address = Dever::db('passport/address')->find($order['address_id']); } elseif ($order['type'] == 3) { # 代理商下单 $address = Dever::db('agent/member_address')->find($order['address_id']); } } $w = array(); $state = false; if ($goods) { foreach ($goods as $gk => $gv) { if ($gv['goods_id'] == 10000289) { $state = true; } } } if ($state && $address && $address['province'] && $address['city']) { $area_ship = Dever::db('shop/area_ship')->find(array('area' => $address['province'] . ',' . $address['city'])); if (!$area_ship) { $area_ship = Dever::db('shop/area_ship')->find(array('area' => $address['province'] . ',-1')); } if ($area_ship) { $w['area_ship'] = $area_ship['area_id']; } } $shop_factory = Dever::db('shop/factory')->select($where); $factory = array(); $distance = array(); # 按照距离排序 if ($shop_factory && $goods) { foreach ($shop_factory as $k => $v) { $w['id'] = $v['factory_id']; $info = Dever::db('factory/info')->find($w); if ($info && $info['status'] == 1) { $distance[] = $info['distance'] = Dever::distance($lng, $lat, $info['lng'], $info['lat']); $factory[] = $info; } } if ($factory) { array_multisort($distance, SORT_ASC, SORT_NUMERIC, $factory); foreach ($factory as $k => $v) { $factory[$k]['type'] = 3; //$source[] = $factory[$k]; if ($goods) { foreach ($goods as $gk => $gv) { $where = array(); $where['factory_id'] = $v['id']; $where['goods_id'] = $gv['goods_id']; $where['sku_id'] = ($gv['sku_id'] && $gv['sku_id'] > 0) ? $gv['sku_id'] : -1; $sku = Dever::db('factory/goods_sku')->getOne($where); if ($sku) { $source[$v['id']] = $factory[$k]; $data['3_' . $v['id']][] = array ( 'area' => $shop['area'], 'order_id' => $order['id'], 'order_type' => $order['type'], 'order_num' => $order['order_num'], 'order_index' => $order['order_index'], 'type' => 1, 'type_id' => $shop['id'], 'source_type' => 3, 'source_id' => $v['id'], 'source_name' => $v['name'], 'source_info_type' => $v['type'], 'source_info_shopinfo' => $v['shopinfo'], 'order_goods_id' => $gv['id'], 'goods_id' => $where['goods_id'], 'sku_id' => $where['sku_id'], 'price' => $gv['price'], 'p_price' => $sku['p_price'], 'num' => $gv['num'], ); unset($goods[$gk]); } } } } } return $factory; } return false; } }