$dly){ foreach($dly['orders'] as $ok=> $order){ foreach($order['order_objects'] as $ook=>$ordobj){ $now_obj_items_num = 0; foreach($ordobj['order_items'] as $oik=>$orditem){ if($orditem['delete'] == 'false'){ $now_obj_items_num += $orditem['nums']; } } $deliverys[$dk]['orders'][$ok]['order_objects'][$ook]['obj_item_num_sum'] = $now_obj_items_num; } } } } //获取平摊的优惠金额 /** * 获取PmtPrice * @param mixed $orders orders * @return mixed 返回结果 */ public function getPmtPrice($orders){ $pmt_order = array(); foreach($orders as $ok=>$order){ foreach($order['order_objects'] as $ook=>$ordobj){ $pvg_price = 0; if($ordobj['obj_type']!='goods' && $ordobj['obj_item_num_sum'] > 0){ $pvg_price = round($ordobj['pmt_price']/$ordobj['obj_item_num_sum'],2); } foreach($ordobj['order_items'] as $k1=>$v1){ $item_pmt_price=0; $item_pmt_price=$pvg_price*$v1['nums']; if(isset($pmt_order[$v1['bn']])){ $pmt_order[$v1['bn']]['pmt_price'] += $v1['pmt_price']+$item_pmt_price; }else{ $pmt_order[$v1['bn']]['pmt_price'] = $v1['pmt_price']+$item_pmt_price; } } } } return $pmt_order; } //获取平台的销售价格 function getSalePrice($orders){ $sale_order = array(); foreach($orders as $ok=>$order){ foreach($order['order_objects'] as $ook=>$ordobj){ $pvg_price = 0; if($ordobj['obj_type']=='pkg' || $ordobj['obj_type']=='gift' || $ordobj['obj_type']=='giftpackage'){ if($ordobj['obj_item_num_sum'] > 0) { $pvg_price = round($ordobj['sale_price']/$ordobj['obj_item_num_sum'],2); foreach($ordobj['order_items'] as $k1=>$v1){ if(isset($sale_order[$v1['bn']])){ $sale_order[$v1['bn']]['obj_quantity'] += $v1['nums']; $sale_order[$v1['bn']]['obj_sale_price'] += ($v1['nums']*$pvg_price); }else{ $sale_order[$v1['bn']]['obj_quantity'] = $v1['nums']; $sale_order[$v1['bn']]['obj_sale_price'] = ($v1['nums']*$pvg_price); } } } } else { foreach( $ordobj['order_items'] as $k1=>$v1 ){ if ( isset( $sale_order[$v1['bn']]) ){ $sale_order[$v1['bn']]['quantity'] += $v1['nums']; $sale_order[$v1['bn']]['sale_price'] += $v1['sale_price']; }else{ $sale_order[$v1['bn']]['quantity'] = $v1['nums']; $sale_order[$v1['bn']]['sale_price'] = $v1['sale_price']; } } } } } $sale_price = array(); foreach($sale_order as $k=>$v){ $price = ($v['obj_sale_price']+$v['sale_price']); $quantity = $v['quantity']+$v['obj_quantity']; $sale_price[$k]=round($price/$quantity,2); } return $sale_price; } /** * format * @param mixed $print_data 数据 * @param mixed $sku sku * @param mixed $_err _err * @param mixed $mode mode * @return mixed 返回值 */ public function format($print_data, $sku,&$_err,$mode='old') { $basicMaterialLib = kernel::single('material_basic_material'); $basicMaterialBarcode = kernel::single('material_basic_material_barcode'); $libBranchProductPos = kernel::single('ome_branch_product_pos'); if ($print_data['ids']) { $orderObj = app::get('ome')->model('orders'); $orderExtendObj = app::get('ome')->model('order_extend'); $basicMObj = app::get('material')->model('basic_material'); $basicMExtObj = app::get('material')->model('basic_material_ext'); $didObj = app::get('ome')->model('delivery_items_detail'); $orderObjectObj = app::get('ome')->model('order_objects'); $dlyorderObj = app::get('ome')->model('delivery_order'); $brandObj = app::get('ome')->model('brand'); $goodsTypeObj = app::get('ome')->model('goods_type'); $tbitemObj = app::get('ome')->model('tbfx_order_items'); $dlyObj = app::get('ome')->model('delivery'); //备注显示方式 $markShowMethod = app::get('ome')->getConf('ome.order.mark'); $delivery_cfg = app::get('wms')->getConf('wms.delivery.status.cfg'); //获取仓库名称 $branchObj = app::get('ome')->model('branch'); $branch_list = array(); $kmtmp_shopInfo = array(); $km_pd = array(); $km_gds = array(); $km_position = array(); $km_brand = array(); $km_gtype = array(); $km_member = array(); $logi_name = ''; foreach ($print_data['deliverys'] as $k => $dly) { if(!isset($branch_list[$dly['branch_id']])){ $branch = $branchObj->dump(array('branch_id'=>$dly['branch_id']),'name'); if($branch){ $branch_list[$dly['branch_id']] = $branch['name']; } } // 加密地址处理 $consigneeCols = array ('ship_name', 'ship_addr', 'ship_tel', 'ship_mobile'); foreach ($consigneeCols as $col) { $csIndex = strpos($dly[$col], '>>'); if ($csIndex !== false){ $dly[$col] = substr($dly[$col], 0, $csIndex); } } foreach ($dly['consignee'] as $dkk => $dkv) { $csIndex = strpos($dkv, '>>'); if ($csIndex !== false){ $dly['consignee'][$dkk] = substr($dkv, 0, $csIndex); } } $pmt_orders = $this->getPmtPrice($dly['orders']); $sale_orders = $this->getSalePrice($dly['orders']); //当前发货单信息 $data = $dly; //订单数量 $data['order_number'] = count($dly['delivery_order']); if ($data) { # 批次号 $allItems[$data['delivery_id']] = $data; //多条发货单减少查询次数 if(!isset($kmtmp_shopInfo[$data['shop_id']])){ $shop = $dlyObj->getShopInfo($data['shop_id']); $data['shop_name'] = $shop['name']; #新增收货人信息 $data['sender_name'] = $shop['default_sender']; $data['sender_mobile'] = $shop['mobile']; $data['sender_tel'] = $shop['tel']; $data['sender_addr'] = $shop['addr']; $sender_area = $shop['area']; kernel::single('ome_func')->split_area($sender_area); $data['sender_area'] = implode('-',$sender_area); $kmtmp_shopInfo[$data['shop_id']] = array( 'shop_name'=>$data['shop_name'], 'sender_name'=>$data['sender_name'], 'sender_mobile'=>$data['sender_mobile'], 'sender_tel'=>$data['sender_tel'], 'sender_addr'=>$data['sender_addr'], 'sender_area'=>$data['sender_area'] ); }else{ $data = array_merge($data,$kmtmp_shopInfo[$data['shop_id']]); } $pmt_order_total=0; $objIds = array(); $store_position = 0; foreach ($data['delivery_items'] as $k => $item) { if(!isset($km_pd[$item['bn']])) { $p = $basicMaterialLib->getBasicMaterialBybn($item['bn']); #查询关联的条形码 $p['barcode'] = $basicMaterialBarcode->getBarcodeById($p['bm_id']); $km_pd[$item['bn']] = $p; }else{ $p = $km_pd[$item['bn']]; } //区分货品 $data['delivery_items'][$k]['bncode'] = md5($item['shop_id'].trim($item['bn'])); if(!isset($km_position[$item['product_id']."_km_".$data['branch_id']])){ $store_position = $libBranchProductPos->get_product_pos($item['product_id'], $data['branch_id']); $km_position[$item['product_id']."_km_".$data['branch_id']] = $store_position; }else{ $store_position = $km_position[$item['product_id']."_km_".$data['branch_id']]; } #start新增PKG类型展示 $data['delivery_items'][$k]['item_type'] = $item['item_type']; $data['delivery_items'][$k]['order_obj_id'] = $item['order_obj_id']; $data['delivery_items'][$k]['order_item_id'] = $item['order_item_id']; #end //$data['delivery_items'][$k]['picurl'] = $picurl; $data['delivery_items'][$k]['spec_info'] = $p['specifications']; $data['delivery_items'][$k]['name'] = $p['material_name']; $data['delivery_items'][$k]['store_position'] = $store_position; $data['delivery_items'][$k]['addon'] = $p['specifications']; $data['delivery_items'][$k]['pmt_price'] = $pmt_orders[$item['bn']]['pmt_price']; $data['delivery_items'][$k]['barcode'] = $p['barcode']; //商品条形码 //$data['delivery_items'][$k]['goods_bn'] = $goods['bn'];//商品编码 $data['delivery_items'][$k]['product_weight'] = $p['weight'];//商品重量 $data['delivery_items'][$k]['unit'] = $p['unit'];//商品单位 if($item['order_source'] == 'tbdx' && $item['shop_type'] == 'taobao'){ $tbfx_filter = array('obj_id'=>$item['order_obj_id'],'item_id'=>$item['order_item_id']); $ext_item_info = $tbitemObj->getOrderByOrderId($tbfx_filter); $data['delivery_items'][$k]['price'] = round(($ext_item_info[0]['buyer_payment']/$item['number']),2); $data['delivery_items'][$k]['amount'] = $ext_item_info[0]['buyer_payment']; $data['delivery_items'][$k]['sale_price'] = $ext_item_info[0]['buyer_payment']; }else{ $data['delivery_items'][$k]['price'] = $item['price']; $data['delivery_items'][$k]['amount'] = $item['amount']; $data['delivery_items'][$k]['sale_price'] = ($sale_orders[$item['bn']]*$item['number']); } } if(!isset($km_member[$data['member_id']])){ $tmp = app::get('ome')->model('members')->dump($data['member_id'], 'uname,name,mobile,tel'); $data['member_name'] = $tmp['account']['uname']; $t_tel = array(); if ($tmp['contact']['phone']['telephone']) { $t_tel[] = $tmp['contact']['phone']['telephone']; } if ($tmp['contact']['phone']['mobile']) { $t_tel[] = $tmp['contact']['phone']['mobile']; } $km_member[$data['member_id']] = array('uname'=>$data['member_name'],'phone'=>array($tmp['contact']['phone']['telephone'],$tmp['contact']['phone']['mobile'])); }else{ $data['member_name'] = $km_member[$data['member_id']]['uname']; $t_tel = $km_member[$data['member_id']]['phone']; } $order_bn = array(); $shop_type = array(); $order_source = array(); if ($data['orders']){ $total_receivable = 0; foreach ($data['orders'] as $odk => $order) { if( $order['order_source'] == 'tbdx' && $order['shop_type'] == 'taobao' ){ $cost_item = $tbitemObj->getCostitemByOrderId($order['order_id']); $data['order_cost_item'] += $cost_item[0]['cost_items']; }else{ $data['order_cost_item'] += $order['cost_item']; } $pmt_order_total+=$order['pmt_order']; $data['front_cost_freight'] += $order['shipping']['cost_shipping']; if ($order['custom_mark']) { $mark = unserialize($order['custom_mark']); if (is_array($mark) || !empty($mark)){ if($markShowMethod == 'all'){ foreach ($mark as $im) { $data['buyWord'] .= $im['op_content'] . " " . $im['op_time'] ."\r\n"; } }else{ $tmp_mark = array_pop($mark); $data['buyWord'] .= $tmp_mark['op_content'] . " " . $tmp_mark['op_time'] ."\r\n"; } $data['buyWord'] = trim($data['buyWord'], "\r\n"); } } if ($order['mark_text']) { $mark = ''; $mark_text = unserialize($order['mark_text']); if (is_array($mark_text) || !empty($mark_text)){ if($markShowMethod == 'all'){ foreach ($mark_text as $im) { $data['orderMark'] .= $im['op_content'] . " " . $im['op_time'] ."\r\n"; } }else{ $tmp_mark = array_pop($mark_text); $data['orderMark'] .= $tmp_mark['op_content'] . " " . $tmp_mark['op_time'] ."\r\n"; } $data['orderMark'] = trim($data['orderMark'], "\r\n"); } } if($order['tax_no'] || $order['tax_title']){ $data['_tax_info'][] = array( 'order_bn'=>$order['order_bn'], 'tax_no'=>$order['tax_no'], 'tax_title'=>$order['tax_title'], ); } $order_bn[] = $order['order_bn']; if(!in_array($order['shop_type'],$shop_type)){ $shop_type[] = $order['shop_type']; } if(!in_array($order['order_source'],$order_source)){ $order_source[] = $order['order_source']; } if($order['shipping']['is_cod'] == 'true'){ $extendInfo = array(); $extendInfo = $orderExtendObj->dump($order['order_id']); $total_receivable += $extendInfo['receivable']; } if(!empty($order['paytime'])){ $data['paytime'] = date('Y-m-d H:i:s',$order['paytime']); } } } $data['total_receivable'] = $total_receivable; $data['order_bn'] = implode(" , ", $order_bn); //有两级价格的发货单不显示价格 $show_delivery_price = true; //all:代表一张发货关联多个前端店铺 $data['shop_type'] = 'all'; $data['order_source'] = 'all'; if(count($shop_type) == 1 && count($order_source) == 1){ $data['shop_type'] = $shop_type[0]; $data['order_source'] = $order_source[0]; if($shop_type[0] == 'shopex_b2b'){ $arr = array('fxjl','b2c','taofenxiao'); if(in_array($order_source[0], $arr)){ $show_delivery_price = false; } } } $show_delivery_price = true;#有两级价格的,显示价格 $data['show_delivery_price'] = $show_delivery_price; if ($t_tel) $data['member_tel'] = implode(" / ", $t_tel); //去除多余的三级区域 $reg = preg_quote(trim($data['consignee']['province'])); if (!empty($data['consignee']['city'])) { $reg .= '.*?' . preg_quote(trim($data['consignee']['city'])); } if (!empty($data['consignee']['district'])) { $reg .= '.*?' . preg_quote(trim($data['consignee']['district'])); } $data['consignee']['addr'] = preg_replace('/' . $reg . '/is', '', $data['consignee']['addr']); $data['shopname'] = $data['shop_name'];#因京东会直接替掉,所以新增显示 #分销王订单新增代销人收货信息 if($shop['node_type'] == 'shopex_b2b'){ #开启分销王代销人发货信息 if($delivery_cfg['set']['wms_delivery_sellagent']){ foreach($data['delivery_order'] as $val){ //订单代销人会员信息 $oSellagent = app::get('ome')->model('order_selling_agent'); $sellagent_detail = $oSellagent->dump(array('order_id'=>$val['order_id'])); #订单扩展表上的状态是1 (只有发货人与发货地址都存在,状态才会是1) if($sellagent_detail['print_status'] == '1'){ $data['shop_name'] = $sellagent_detail['website']['name']; $data['seller_name'] = $sellagent_detail['seller']['seller_name']; $data['seller_mobile'] = $sellagent_detail['seller']['seller_mobile']; $data['seller_phone'] = $sellagent_detail['seller']['seller_phone']; $data['seller_address'] = $sellagent_detail['seller']['seller_address']; $data['seller_area'] = $sellagent_detail['seller']['seller_area']; } } } } //京东订单添加打印标示 if($data['shop_type']=='360buy'){ $logo_url = kernel::base_url(1)."/app/wms/statics/360buylogo.png"; $data['shop_name'] = '京东商城 '; $data['shop_logo_url'] = $logo_url; $data['shop_logo_html'] = '京东商城'; } //物流信息 if ($logi_name == '') { $logi_name = $data['logi_name']; } $batch_number = $print_data['identInfo']['items'][$data['delivery_id']]; $data['batch_number'] = $batch_number ? $batch_number : '';//$data['delivery_id'] $items[] = $data; //$this->checkOrderSendnum($id); } else { $_err = 'true'; } } unset($kmtmp_shopInfo,$km_pd,$km_gds,$km_position,$km_brand,$km_gtype,$km_member); } function cmp($a, $b) { return strcmp($a["store_position"], $b["store_position"]); } $deliCfgLib = kernel::single('wms_delivery_cfg'); $is_print_front = (1 == $deliCfgLib->getValue('wms_delivery_is_printdelivery',$sku)) ? true : false; foreach ($items as $k => $item) { usort($item['delivery_items'], "cmp"); if (!$is_print_front) { foreach ($item['delivery_items'] as $i => $di) { $item['delivery_items'][$i]['product_name'] = $di['name']; } } $items[$k] = $item; } //商品名称和规格取前台,是合并发货单,取第一个订单的货品名称 if ($print_data['ids'] && $is_print_front) { $arrPrintProductName = $dlyObj->getPrintOrderName($items); if (!empty($arrPrintProductName)) { $productPos = $dlyObj->getPrintProductPos($items); foreach ($items as $k => $rows) { foreach ($rows['delivery_items'] as $k2 => $v) { $rows['delivery_items'][$k2]['name'] = $arrPrintProductName[$rows['delivery_id']][$v['bn']]['name']; $rows['delivery_items'][$k2]['product_name'] = $arrPrintProductName[$rows['delivery_id']][$v['bn']]['name']; $rows['delivery_items'][$k2]['addon'] = $arrPrintProductName[$rows['delivery_id']][$v['bn']]['addon']; $rows['delivery_items'][$k2]['spec_info'] = $arrPrintProductName[$rows['delivery_id']][$v['bn']]['addon']; $rows['delivery_items'][$k2]['store_position'] = $productPos[$v['product_id']]; } $items[$k] = $rows; } } } if ($print_data['ids']) $vid = implode(',', $print_data['ids']); foreach ($items as $k => $rows) { $pmt_order_total=0; $pmt_order_discount = 0; foreach($rows['orders'] as $order){ $pmt_order_total+=$order['pmt_order']; $pmt_order_total+=$order['pmt_goods']; $pmt_order_discount+=$order['discount']; } $delivery_total_nums = 0; $goods_num = 0; $sum_sale_price =0; foreach ($rows['delivery_items'] as $v) { $delivery_total_nums += $v['number']; $sum_sale_price = $v['sale_price']; $goods_num++; } $rows['goods_num'] = $goods_num; $rows['delivery_total_nums'] = $delivery_total_nums; $rows['pmt_order_total'] = $pmt_order_total; //订单折扣金额 $rows['pmt_order_discount'] = $pmt_order_discount; //有两级价格的发货单不显示价格 if(!$rows['show_delivery_price']){ foreach ($rows['delivery_items'] as $kk => $item) { $rows['delivery_items'][$kk]['price'] = '-'; } $rows['order_total_amount'] = '-'; $rows['order_cost_item'] = '-'; }else{ #add taobao fenxiao if($rows['order_source'] == 'tbdx' && $rows['shop_type'] == 'taobao'){ $rows['order_total_amount'] = $rows['front_cost_freight'] + $rows['order_cost_item']; $rows['order_sales_price'] = $dlyObj->getAllTotalAmountByDelivery($rows['delivery_order']);#代销类型订单,增加字段,订单实际总额 }else{ $rows['order_total_amount'] = $dlyObj->getAllTotalAmountByDelivery($rows['delivery_order']); } } $items[$k] = $rows; } #添加打印模式 #获取当前设置打印版本$deliCfgLib $print_version = $deliCfgLib->getprintversion(); #获取当前打印模式 $print_style = $deliCfgLib->getprintstyle(); #打印订单将捆绑商品分类展示 #根据版本标识 foreach($items as $k=>$v){ //格式化销售模式的数据 if ($print_style == '1'){ $items[$k]['delivery_items'] = ['goods' => [['order_items'=>$v['delivery_items']]]]; } else { $items[$k] = $this->formatSaleStyleData($v); } #判断是否开启按货位排序 if($delivery_cfg['set']['print_order'] == 1){ if(is_array($items[$k]['delivery_items']['goods'])){ uasort($items[$k]['delivery_items']['goods'], 'cmp'); } } } //打印输出保质期信息按item层输出 foreach($items as $k1=>$v1){ if(isset($v1['expire_bns'])){ foreach($v1['delivery_items'] as $k2=>$v2){ foreach($v1['expire_bns'] as $ek => $info){ if($v2['wms_item_id'] == $info['item_id']){ $items[$k1]['delivery_items'][$k2]['expire_bns'][] = $info['expire_bn']; } } if($items[$k1]['delivery_items'][$k2]['expire_bns']){ $items[$k1]['delivery_items'][$k2]['expire_bn'] = implode('\n',$items[$k1]['delivery_items'][$k2]['expire_bns']); } } } } return array( 'items' => $items, 'allItems' => $allItems, 'branch_list' => $branch_list, 'vid' => $vid, 'print_style' => $print_style, 'logi_name' => $logi_name, ); } /** * arrayToJson * @param mixed $deliverys deliverys * @return mixed 返回值 */ public function arrayToJson($deliverys) { $nbsp = " "; $this->covertNullToString($deliverys); return json_encode($deliverys); } }