'delivery_items', ); var $defaultOrder = array('delivery_id',' ASC'); //是否有导出配置 var $has_export_cnf = true; public $export_name = 'wms发货单'; /** * 须加密字段 * * @var string **/ private $__encrypt_cols = array( 'ship_name' => 'simple', 'ship_tel' => 'phone', 'ship_mobile' => 'phone', 'ship_addr' => 'simple', ); function __construct($app){ if($_GET['status'] == '0' || $_GET['status'] == ''){ $opInfo = kernel::single('ome_func')->getDesktopUser(); if(app::get('ome')->getConf('delivery.bycreatetime'.$opInfo['op_id']) == 1){ $this->defaultOrder = array('order_createtime',' ASC'); }else{ $this->defaultOrder = array('idx_split',' ASC'); } }else{ $this->defaultOrder = array('delivery_id',' DESC'); } parent::__construct($app); } public function _filter($filter,$tableAlias=null,$baseWhere=null){ $baseWhere = (array) $baseWhere; $tPre = ($tableAlias?$tableAlias:'`'.$this->table_name(true).'`').'.'; /////////////////////////// // 加密处理逻辑 2017/5/5 by cp // /////////////////////////// //filter - 加密字段处理 $encryptWhere = kernel::single('ome_filter_encrypt')->encrypt($filter, $this->__encrypt_cols, $tPre, 'delivery'); $baseWhere = array_merge($baseWhere, $encryptWhere); $where = ''; if(isset($filter['ship_tel_mobile'])){ $encryptVal = kernel::single('ome_security_factory')->encryptPublic($filter['ship_tel_mobile'],'phone'); $encryptVal = utils::addslashes_array($encryptVal); $originalVal = utils::addslashes_array($filter['ship_tel_mobile']); $baseWhere[] = "({$tPre}ship_tel IN('".$originalVal."','".$encryptVal."')||{$tPre}ship_mobile IN('".$originalVal."','".$encryptVal."'))"; unset($filter['ship_tel_mobile']); } $deliveryObj = app::get('ome')->model("delivery"); if(isset($filter['extend_delivery_id'])){ $where .= ' OR delivery_id IN ('.implode(',', $filter['extend_delivery_id']).')'; unset($filter['extend_delivery_id']); } if (isset($filter['member_uname'])){ $memberObj = app::get('ome')->model("members"); $rows = $memberObj->getList('member_id',array('uname|has'=>$filter['member_uname'])); $memberId[] = 0; foreach($rows as $row){ $memberId[] = $row['member_id']; } $where .= ' AND member_id IN ('.implode(',', $memberId).')'; unset($filter['member_uname']); } //按订单号搜索 if (isset($filter['order_bn'])){ // 多订单号查询 if(strpos($filter['order_bn'], "\n") !== false){ $filter['order_bn'] = array_unique(array_map('trim', array_filter(explode("\n", $filter['order_bn'])))); } $orderObj = app::get('ome')->model("orders"); $rows = $orderObj->getList('order_id',array('order_bn'=>$filter['order_bn'])); $orderId[] = 0; foreach($rows as $row){ $orderId[] = $row['order_id']; } $deliOrderObj = app::get('ome')->model("delivery_order"); $rows = $deliOrderObj->getList('delivery_id',array('order_id'=>$orderId)); $deliveryId[] = 0; foreach($rows as $row){ $deliveryId[] = $row['delivery_id']; } // $_delivery_bn = $this->_getdelivery_bn($deliveryId); $where .= ' AND outer_delivery_bn IN (\''.implode('\',\'', $_delivery_bn).'\')'; unset($filter['order_bn']); } if(isset($filter['no_logi_no']) && $filter['no_logi_no'] == true){ $rows = $this->db->select("select delivery_id from sdb_wms_delivery_bill where logi_no = '' or logi_no is null"); $deliveryId[] = 0; foreach($rows as $row){ $deliveryId[] = $row['delivery_id']; } $where .= ' AND delivery_id IN ('.implode(',', $deliveryId).')'; unset($filter['no_logi_no']); } if(isset($filter['product_bn']) && $filter['product_bn']){ $where .= ' AND bnsContent like \'%'.utils::addslashes_array($filter['product_bn']).'%\''; unset($filter['product_bn']); } if(isset($filter['product_barcode'])){ $itemsObj = $this->app->model("delivery_items"); $rows = $itemsObj->getDeliveryIdByPbarcode($filter['product_barcode']); $deliveryId[] = 0; foreach($rows as $row){ $deliveryId[] = $row['delivery_id']; } //$_delivery_bn = $this->_getdelivery_bn($deliveryId); $where .= ' AND delivery_id IN (\''.implode('\',\'', $deliveryId).'\')'; unset($filter['product_barcode'],$_delivery_bn); } if(isset($filter['logi_no_ext'])){ $logObj = $this->app->model("delivery_bill"); $rows = $logObj->getlist('delivery_id',array('logi_no'=>$filter['logi_no_ext'])); $deliveryId[] = 0; foreach($rows as $row){ $deliveryId[] = $row['delivery_id']; } $where .= ' AND delivery_id IN ('.implode(',', $deliveryId).')'; unset($filter['logi_no_ext']); } if(isset($filter['addonSQL'])){ $where .= ' AND '.$filter['addonSQL']; unset($filter['addonSQL']); } if (isset($filter['shop_id_in'])) { $where .= ' AND ' . $tPre . 'shop_id in("'.implode('","', $filter['shop_id_in']).'")'; unset($filter['shop_id_in']); } if(isset($filter['delivery_ident'])){ $arr_delivery_ident = explode('_',$filter['delivery_ident']); $mdl_queue = app::get('ome')->model("print_queue"); if(count($arr_delivery_ident) == 2){ $ident_dly = array_pop($arr_delivery_ident); $ident = implode('-',$arr_delivery_ident); $queueItem = $mdl_queue->findQueueItem($ident,$ident_dly); if($queueItem){ $where .= ' AND delivery_id ='.$queueItem['delivery_id'].''; }else{ $where .= ' AND delivery_id IN (0)'; } }else{ $queue = $mdl_queue->findQueueById($filter['delivery_ident']); if($queue){ $where .= ' AND delivery_id IN ('.implode(',', array_map('current', $queue)).')'; }else{ $where .= ' AND delivery_id IN (0)'; } } unset($filter['delivery_ident']); } if($filter['todo']==1){ $where .= " AND ((print_status & 1) !=1 or (print_status & 2) !=2 or (print_status & 4) !=4)"; unset($filter['todo']); } if($filter['todo']==2){ $where .= " AND ((print_status & 1) !=1 or (print_status & 4) !=4)"; unset($filter['todo']); } if($filter['todo']==3){ $where .= " AND ((print_status & 2) !=2 or (print_status & 4) !=4)"; unset($filter['todo']); } if($filter['todo']==4){ $where .= " AND (print_status & 4) !=4"; unset($filter['todo']); } if (isset($filter['print_finish'])) { $where_or = array(); foreach((array)$filter['print_finish'] as $key=> $value){ $or = "(deli_cfg='".$key."'"; switch($value) { case '1_1': $or .= " AND (print_status & 1) =1 and (print_status & 2) =2 "; break; case '1_0': $or .= " AND (print_status & 1) =1 "; break; case '0_1': $or .= " AND (print_status & 2) =2 "; break; case '0_0': break; } $or .= ')'; $where_or[] = $or; } if($where_or){ $where .= ' AND ('.implode(' OR ',$where_or).')'; } unset($filter['print_finish']); } if (isset($filter['ext_branch_id'])) { if (isset($filter['branch_id'])){ $filter['branch_id'] = array_intersect((array)$filter['branch_id'],(array)$filter['ext_branch_id']); $filter['branch_id'] = $filter['branch_id'] ? $filter['branch_id'] : 'false'; }else{ $filter['branch_id'] = $filter['ext_branch_id']; } unset($filter['ext_branch_id']); } #客服备注 if(isset($filter['mark_text']) && $filter['mark_text']){ $mark_text = utils::addslashes_array($filter['mark_text']); $sql = "SELECT do.delivery_id FROM sdb_ome_delivery_order do JOIN sdb_ome_orders o ON do.order_id=o.order_id and o.process_status='splited' and o.mark_text like "."'%{$mark_text}%'"; $_rows = $this->db->select($sql); if(!empty($_rows)){ foreach($_rows as $_orders){ $_delivery[] = $_orders['delivery_id']; } $_delivery_bn = $this->_getdelivery_bn($_delivery); $where .= ' AND outer_delivery_bn IN (\''.implode('\',\'', $_delivery_bn).'\')'; unset($filter['mark_text'],$_delivery,$_delivery_bn); } } #买家留言 if(isset($filter['custom_mark'])){ $custom_mark = utils::addslashes_array($filter['custom_mark']); $sql = "SELECT do.delivery_id FROM sdb_ome_delivery_order do JOIN sdb_ome_orders o ON do.order_id=o.order_id and o.process_status='splited' and o.custom_mark like "."'%{$custom_mark}%'"; $_rows = $this->db->select($sql); if(!empty($_rows)){ foreach($_rows as $_orders){ $_delivery[] = $_orders['delivery_id']; } $_delivery_bn = $this->_getdelivery_bn($_delivery); $where .= ' AND outer_delivery_bn IN (\''.implode('\',\'', $_delivery_bn).'\')'; unset($filter['custom_mark'],$_delivery,$_delivery_bn); } } if (isset($filter['stock_status'])) { if ($filter['stock_status'] == 'true') { $where .= " AND (print_status & 1) =1"; }else{ $where .= " AND (print_status & 1) !=1"; } unset($filter['stock_status']); } if (isset($filter['deliv_status'])) { if ($filter['deliv_status']=='true') { $where .= " AND (print_status & 2) =2"; }else{ $where .= " AND (print_status & 2) !=2"; } unset($filter['deliv_status']); } if (isset($filter['expre_status'])) { if ($filter['expre_status']=='true') { $where .= " AND (print_status & 4) =4"; }else{ $where .= " AND (print_status & 4) !=4"; } unset($filter['expre_status']); } //订单标记 if($filter['order_label']){ $ordLabelObj = app::get('ome')->model('bill_label'); $tempData = $ordLabelObj->getList('bill_id', array('label_id'=>$filter['order_label'], 'bill_type'=>'wms_delivery')); if($tempData){ $orderId = array(); foreach ($tempData as $tempKey => $tempVal) { $temp_order_id = $tempVal['bill_id']; $orderId[$temp_order_id] = $temp_order_id; } $where .= ' AND delivery_id IN ('. implode(',', $orderId) .')'; }else{ $where .= ' AND delivery_id = -1'; } unset($filter['order_label'], $tempData); } return parent::_filter($filter,$tableAlias,$baseWhere).$where; } function searchOptions(){ $parentOptions = parent::searchOptions(); $childOptions = array( 'order_bn'=>app::get('base')->_('订单号'), 'delivery_bn'=>app::get('base')->_('发货单号'), 'member_uname'=>app::get('base')->_('用户名'), 'ship_name'=>app::get('base')->_('收货人'), 'ship_tel_mobile'=>app::get('base')->_('联系电话'), 'product_bn'=>app::get('base')->_('货号'), 'product_barcode'=>app::get('base')->_('条形码'), 'delivery_ident'=>app::get('base')->_('打印批次号'), 'outer_delivery_bn'=>app::get('base')->_('外部发货单号'), 'logi_no_ext'=>app::get('base')->_('物流单号'), ); return array_merge($childOptions,$parentOptions); } public function count_logi_no($filter=null){ if($filter['logi_no'] == 'NULL'){ unset($filter['logi_no']); $row = $this->db->select('SELECT count(*) as _count FROM `'.$this->table_name(1).'` WHERE '.$this->_filter($filter).' AND `logi_no` IS NULL'); }else{ $row = $this->db->select('SELECT count(*) as _count FROM `'.$this->table_name(1).'` WHERE '.$this->_filter($filter)); } return intval($row[0]['_count']); } function getlist_logi_no($cols='*', $filter=array(), $offset=0, $limit=-1, $orderType=null) { if (!$cols) { $cols = $this->defaultCols; } if (!empty($this->appendCols)) { $cols.=',' . $this->appendCols; } if ($this->use_meta) { $meta_info = $this->prepare_select($cols); } $orderType = $orderType ? $orderType : $this->defaultOrder; if ($filter['logi_no'] == 'NULL') { unset($filter['logi_no']); $where = $this->_filter($filter) . ' AND `logi_no` IS NULL'; } else { $where = $this->_filter($filter); } //增加对 idx_split 的 order 排序的支持 $orderType = (is_array($orderType) ? implode(' ', $orderType) : $orderType); $table = $this->table_name(true); if (strpos($orderType, 'idx_split') !== false) { $table .= " LEFT JOIN (SELECT COUNT(idx_split) AS iNum, idx_split AS idx FROM {$table} WHERE {$where} GROUP BY idx_split ) AS i ON i.idx=idx_split"; $orderType = str_replace('`', '', $orderType); $orderType = str_replace('idx_split', 'skuNum, itemNum, iNum DESC, idx_split,delivery_id', $orderType); } $sql = 'SELECT ' . $cols . ' FROM ' . $table . ' WHERE ' . $where; if ($orderType) $sql.=' ORDER BY ' . $orderType; $data = $this->db->selectLimit($sql, $limit, $offset); // 数据解密 foreach ((array) $data as $key => $value) { foreach ($this->__encrypt_cols as $field => $type) { if (isset($value[$field])) { $data[$key][$field] = (string) kernel::single('ome_security_factory')->decryptPublic($value[$field],$type); } } } $this->tidy_data($data, $cols); if ($this->use_meta && count($meta_info['metacols']) && $data) { foreach ($meta_info['metacols'] as $col) { $obj_meta = new dbeav_meta($this->table_name(true), $col, $meta_info['has_pk']); $obj_meta->select($data); } } return $data; } public function update($data, $filter=array(), $mustUpdate = null) { foreach ($this->__encrypt_cols as $field => $type) { if (isset($data[$field])) { $data[$field] = (string) kernel::single('ome_security_factory')->encryptPublic($data[$field],$type); } } //调用原有处理 $result = parent::update($data, $filter, $mustUpdate); return $result; } public function insert(&$data) { foreach ($this->__encrypt_cols as $field => $type) { if (isset($data[$field])) { $data[$field] = (string) kernel::single('ome_security_factory')->encryptPublic($data[$field],$type); } } return parent::insert($data); } public function getList($cols='*', $filter=array(), $offset=0, $limit=-1, $orderType=null) { $data = parent::getList($cols,$filter,$offset,$limit,$orderType); foreach ((array) $data as $key => $value) { foreach ($this->__encrypt_cols as $field => $type) { if (isset($value[$field])) { $data[$key][$field] = (string) kernel::single('ome_security_factory')->decryptPublic($value[$field],$type); } } } return $data; } function modifier_is_cod($row){ if($row == 'true'){ return "
货到付款
"; }else{ return '款到发货'; } } /** * 判断是否已有此物流单号,检验前物流单号可以任意修改 * * @param string $logi_no * @param int $dly_id * @return boolean */ function existExpressNo($logi_no, $dly_id=0){ //更新,conut走架构 $filter['logi_no'] = $logi_no; $filter['delivery_id|noequal'] = $dly_id;//不等于,见dbeav:filter //$filter['verify'] = 'true'; //$filter['status'] = array('progress','succ'); $count = app::get('wms')->model('delivery_bill')->count($filter); //$billrow = $this->db->selectRow('select * from sdb_wms_delivery_bill where logi_no="'.$logi_no.'"'); if ($count > 0) { return true; }else{ return false; } } /** * * 根据主物流单号查找发货单ID */ public function getDeliveryIdByLogiNo($logi_no){ $row = app::get('wms')->model('delivery_bill')->getList('delivery_id',array('logi_no'=>$logi_no),0,1); return isset($row[0]) ? $row[0]['delivery_id'] : null; } /** * 通过发货单号获取发货单详情关联表的对应记录 * * @param bigint $dly_id * * @return array() */ function getItemsByDeliveryId($dly_id){ $dly_itemObj = app::get('wms')->model('delivery_items'); $rows = $dly_itemObj->getList('*', array('delivery_id' => $dly_id),0,-1); return $rows; } //根据发货单id调整打印排序 function printOrderByByIds($ids) { if(!$ids)return false; $table = $this->table_name(true); $where = 'delivery_id in('.implode(',', $ids).')'; $table .= " LEFT JOIN (SELECT COUNT(idx_split) AS iNum, idx_split AS idx FROM {$table} WHERE {$where} GROUP BY idx_split ) AS i ON i.idx=idx_split"; $orderType = 'skuNum, itemNum, iNum DESC, idx_split,delivery_id'; $sql = 'SELECT delivery_id FROM ' . $table . ' WHERE ' . $where.' ORDER BY ' . $orderType; $list = $this->db->select($sql); $delivery_ids = array(); foreach($list as $row){ $delivery_ids[] = $row['delivery_id']; } return $delivery_ids; } function existStockIsPlus($product_id, $store, $item_id, $branch_id, &$err_msg, $bn){ $err_msg = ''; $branch_pObj = app::get('ome')->model('branch_product'); $bp = $branch_pObj->dump(array('branch_id'=>$branch_id,'product_id'=>$product_id),'store'); if ($bp['store'] < $store){ $err_msg = $bn.":此货号商品仓库商品数量不足"; return false; } return true; } //根据wms发货单查询外键关键发货通知单,查询对应的订单号 function getOrderIdByDeliveryId($dly_ids){ $id_arr = $this->getOuterIdsByIds($dly_ids); //print_r($id_arr); $dly_orderObj = app::get('ome')->model('delivery_order'); $filter['delivery_id'] = $id_arr; $data = $dly_orderObj->getList('order_id', $filter); foreach ($data as $item){ $ids[] = $item['order_id']; } //print_r($ids); return $ids; } /** * 获取打印前端商品名 * * @param Array $deliverys 发货单集合 * @return Array * @author **/ public function getPrintOrderName($deliverys) { $data = array(); $order_ids = array(); foreach ((array) $deliverys as $delivery) { foreach ($delivery['delivery_order'] as $delivery_order) { $order_ids[] = $delivery_order['order_id']; } } $orderItemModel = app::get('ome')->model('order_items'); $orderItemList = $orderItemModel->getList('order_id,name,bn,addon',array('order_id' => $order_ids,'delete' => 'false')); $re_orderItemList = array(); foreach ((array) $orderItemList as $order_item) { $order_item['addon'] = ome_order_func::format_order_items_addon($order_item['addon']); $re_orderItemList[$order_item['order_id']][$order_item['bn']] = $order_item; } unset($orderItemList); foreach ((array) $deliverys as $delivery) { $arr = array(); foreach ($delivery['delivery_order'] as $delivery_order) { //$arr = array_merge((array) $arr,(array) $re_orderItemList[$delivery_order['order_id']]); $arr = $arr + (array) $re_orderItemList[$delivery_order['order_id']]; } $data[$delivery['delivery_id']] = $arr; } unset($re_orderItemList); return $data; } /** * 获取打印货品位 * * @param Array $deliverys 发货单集合 * @return void * @author **/ public function getPrintProductPos($deliverys) { $data = array(); $product_ids = array(); foreach ($deliverys as $delivery) { foreach ($delivery['delivery_items'] as $delivery_item) { $product_ids[] = $delivery_item['product_id']; $bpro_key = $delivery['branch_id'].$delivery_item['product_id']; $data[$delivery_item['product_id']] = &$bpro[$bpro_key]; } } // 货品货位有关系 $bppModel = app::get('ome')->model('branch_product_pos'); $bppList = $bppModel->getList('product_id,pos_id,branch_id',array('product_id'=>$product_ids)); // 如果货位存在 if ($bppList) { // 货位信息 $pos_ids = array(); foreach ($bppList as $key=>$value) { $pos_ids[] = $value['pos_id']; } $posModel = app::get('ome')->model('branch_pos'); $posList = $posModel->getList('pos_id,branch_id,store_position',array('pos_id'=>$pos_ids)); foreach ($posList as $key=>$value) { $bpos_key = $value['branch_id'].$value['pos_id']; $bpos[$bpos_key] = $value['store_position']; } unset($posList); foreach ($bppList as $key=>$value) { $bpro_key = $value['branch_id'].$value['product_id']; $bpos_key = $value['branch_id'].$value['pos_id']; $bpro[$bpro_key] = $bpos[$bpos_key]; } unset($bppList); } return $data; } function getAllTotalAmountByDelivery($delivery_order){ $order_total_amount = 0; if(count($delivery_order)>1){//合并 $is_vaild = true; foreach($delivery_order as $deli_order){ $total_amount = $this->getTotalAmountByDelivery($deli_order['order_id'],$deli_order['ome_delivery_id']); if($total_amount){ $order_total_amount += $total_amount; }else{ $is_vaild = false; break; } } if(!$is_vaild){ $order_total_amount = 0; } }else{//单张 $delivery_order = current($delivery_order); $order_total_amount = $this->getTotalAmountByDelivery($delivery_order['order_id'],$delivery_order['ome_delivery_id']); } return $order_total_amount; } function getTotalAmountByDelivery($order_id,$delivery_id){ $order_total_amount = 0; $objOrders = app::get('ome')->model('orders'); $order = $objOrders->order_detail($order_id); if($order['process_status'] == 'splited'){//已拆分 $ids = app::get('ome')->model('delivery')->getDeliverIdByOrderId($order_id); if(count($ids) == 1){//发货单必须是一张 $order_total_amount = $order['total_amount']; } } return $order_total_amount; } /** * 获取发货人信息 * * @param int $dly_id * * @return array() */ function getShopInfo($shop_id){ static $shops; if ($shops[$shop_id]) return $shops[$shop_id]; $shopObj = app::get('ome')->model("shop"); $shops[$shop_id] = $shopObj->dump($shop_id); return $shops[$shop_id]; } /** * 统计商品数量 * * @param array() $dly_ids * * @return array() */ function countProduct($dly_ids=null){ if ($dly_ids){ $sql = "SELECT bn,product_name,SUM(number) AS 'count' FROM sdb_wms_delivery_items WHERE delivery_id IN ($dly_ids) AND number!=0 GROUP BY bn"; $data = $this->db->select($sql); } return $data; } public function getPrintStockPrice($ids){ $tmp_ids = $this->getOuterIdsByIds($ids); $data = array(); $sql = 'SELECT did.bn,SUM(did.amount) AS _amount FROM sdb_ome_delivery_items_detail AS did WHERE did.delivery_id IN('.implode(',',$tmp_ids).') GROUP BY did.bn'; $rows = $this->db->select($sql); foreach ($rows as $row) { $data[$row['bn']] = $row['_amount']; } return $data; } public function getOuterIdsByIds($ids){ $filter['delivery_id'] = $ids; $outer_bns = $this->getList('outer_delivery_bn',$filter); foreach ($outer_bns as $outer_bn){ $delivery_bns[] = $outer_bn['outer_delivery_bn']; } $deliveryObj = app::get('ome')->model('delivery'); $delivery_ids = $deliveryObj->getList('delivery_id', array('delivery_bn'=>$delivery_bns)); foreach ($delivery_ids as $delivery_id){ $id_arr[] = $delivery_id['delivery_id']; } return $id_arr; } public function getOuterIdById($id){ $row = $this->dump($id,'outer_delivery_bn'); $deliveryObj = app::get('ome')->model('delivery'); $deliveryInfo = $deliveryObj->dump(array('delivery_bn'=>$row['outer_delivery_bn']),'delivery_id'); return $deliveryInfo['delivery_id']; } function getProductPosByDeliveryId($dly_id=null){ $dly_id = $this->getOuterIdById($dly_id); if ($dly_id){ // 发货单对应的仓库id $branch_id = app::get('ome')->model('delivery')->dump($dly_id,'branch_id'); $sql = "SELECT di.bn,di.product_name,di.product_id, di.number,delivery_id, bp.store_position, a.bm_id AS goods_id, a.material_name AS name, a.material_bn AS bn FROM sdb_ome_delivery_items di JOIN sdb_material_basic_material a ON a.bm_id=di.product_id LEFT JOIN ( SELECT bpp.* FROM ( SELECT pos_id,product_id FROM sdb_ome_branch_product_pos WHERE branch_id=".$branch_id['branch_id']." )bpp GROUP BY bpp.product_id )bb ON bb.product_id = di.product_id LEFT JOIN sdb_ome_branch_pos bp ON bp.pos_id = bb.pos_id WHERE di.delivery_id = $dly_id AND di.number != 0"; $rows = $this->db->select($sql); } $basicMaterialLib = kernel::single('material_basic_material'); foreach ($rows as $key => $val) { $get_product = $basicMaterialLib->getBasicMaterialExt($val['goods_id']); $val['barcode'] = $get_product['barcode']; $val['weight'] = $get_product['weight']; $val['unit'] = $get_product['unit']; $val['price'] = $get_product['retail_price']; $val['spec_info'] = $get_product['specifications']; $rows[$key] = $val; } return $rows; } //调整获取的数据内容去掉原来goods部分内容 by xiayuanjun function getProductPosInfo($dly_id='',$branch_id='') { $dly_id = $this->getOuterIdById($dly_id); if ($dly_id && $branch_id) { $sql = "SELECT di.item_id, di.bn,di.product_name,di.product_id,bmx.weight,bmx.unit,bmx.specifications, di.number,delivery_id,bmx.retail_price as price, p.material_name as name,p.bm_id, bp.store_position FROM sdb_ome_delivery_items di JOIN sdb_material_basic_material p ON p.bm_id=di.product_id LEFT JOIN sdb_material_basic_material_ext bmx ON bmx.bm_id = p.bm_id LEFT JOIN ( SELECT bpp.* FROM ( SELECT ss.pos_id,ss.product_id FROM sdb_ome_branch_product_pos as ss LEFT JOIN sdb_ome_branch_pos bss on ss.pos_id=bss.pos_id WHERE ss.branch_id=".$branch_id." AND bss.pos_id!='' )bpp GROUP BY bpp.product_id )bb ON bb.product_id = di.product_id LEFT JOIN sdb_ome_branch_pos bp ON bp.pos_id = bb.pos_id WHERE di.delivery_id = $dly_id AND di.number != 0"; $rows = $this->db->select($sql); } return $rows; } function getOrderMemoByDeliveryId($dly_ids=null){ $dly_ids = $this->getOuterIdsByIds($dly_ids); if ($dly_ids){ $sql = "SELECT o.custom_mark FROM sdb_ome_delivery_order do JOIN sdb_ome_orders o ON do.order_id=o.order_id WHERE do.delivery_id IN ($dly_ids) GROUP BY do.order_id "; $rows = $this->db->select($sql); $memo = array(); if ($rows){ foreach ($rows as $v) $memo[] = unserialize($v['custom_mark']); } return serialize($memo); } } /** * 获取订单备注 */ function getOrderMarktextByDeliveryId($dly_ids=null){ $dly_ids = $this->getOuterIdsByIds($dly_ids); if ($dly_ids){ $sql = "SELECT o.mark_text FROM sdb_ome_delivery_order do JOIN sdb_ome_orders o ON do.order_id=o.order_id WHERE do.delivery_id IN ($dly_ids) GROUP BY do.order_id "; $rows = $this->db->select($sql); $memo = array(); if ($rows){ foreach ($rows as $v) $memo[] = unserialize($v['mark_text']); } return serialize($memo); } } public function getPrintProductName($ids){ $ids = $this->getOuterIdsByIds($ids); $printProductNames = array(); $sql = 'SELECT distinct oi.order_id,oi.name,oi.bn,oi.addon,bp.store_position FROM sdb_ome_delivery_order AS d2o LEFT JOIN sdb_ome_order_items AS oi ON d2o.order_id = oi.order_id LEFT JOIN ( SELECT bpp.* FROM ( SELECT pos_id,product_id FROM sdb_ome_branch_product_pos ORDER BY create_time DESC )bpp GROUP BY bpp.product_id )bb ON bb.product_id = oi.product_id LEFT JOIN sdb_ome_branch_pos bp ON bp.pos_id = bb.pos_id WHERE d2o.delivery_id IN('.implode(',',$ids).') ORDER BY d2o.order_id'; $rows = $this->db->select($sql); foreach($rows as $row){ $row['bn'] = trim($row['bn']); if (isset($printProductNames[$row['bn']])) continue; $row['addon'] = ome_order_func::format_order_items_addon($row['addon']); $printProductNames[$row['bn']] = $row; } return $printProductNames; } /** * 找印时获取前端名称 * */ public function getPrintFrontProductName($ids){ $ids = $this->getOuterIdsByIds($ids); $ordersObj = app::get('ome')->model('orders'); $printProductNames = array(); $sql = 'SELECT distinct oi.order_id,oo.name,oi.bn,oi.addon,bp.store_position FROM sdb_ome_delivery_order AS d2o LEFT JOIN sdb_ome_order_items AS oi ON d2o.order_id = oi.order_id LEFT JOIN sdb_ome_order_objects AS oo ON oi.obj_id = oo.obj_id LEFT JOIN ( SELECT bpp.* FROM ( SELECT pos_id,product_id FROM sdb_ome_branch_product_pos ORDER BY create_time DESC )bpp GROUP BY bpp.product_id )bb ON bb.product_id = oi.product_id LEFT JOIN sdb_ome_branch_pos bp ON bp.pos_id = bb.pos_id WHERE d2o.delivery_id IN('.implode(',',$ids).') ORDER BY d2o.order_id'; $rows = $this->db->select($sql); foreach($rows as $row){ $orders = $ordersObj->dump($row['order_id'],'shop_id'); $bncode = md5($orders['shop_id'].trim($row['bn'])); $row['bn'] = $bncode; if (isset($printProductNames[$row['bn']])) continue; $row['addon'] = ome_order_func::format_order_items_addon($row['addon']); $printProductNames[$row['bn']] = $row; } return $printProductNames; } /** * * 统计已打印完成待校验的发货单总数 */ function countNoVerifyDelivery(){ $filter = array( 'status' => 0, 'process_status' => 1, 'disabled' => 'false', ); $oBranch = app::get('ome')->model('branch'); $is_super = kernel::single('desktop_user')->is_super(); if (!$is_super) { $branch_ids = $oBranch->getBranchByUser(true); if ($branch_ids) { $filter['branch_id'] = $branch_ids; } } $num = $this->count_logi_no($filter); return $num; } /** * 统计已校验待发货的发货单总数 */ function countNoProcessDelivery(){ $filter = array( 'status' => 0, 'process_status' => 3, 'disabled' => 'false', ); $oBranch = app::get('ome')->model('branch'); $is_super = kernel::single('desktop_user')->is_super(); if (!$is_super) { $branch_ids = $oBranch->getBranchByUser(true); if ($branch_ids) { $filter['branch_id'] = $branch_ids; } } $num = $this->count($filter); return $num; } /** * 统计子物流表待发货的发货单总数 */ function countNoProcessDeliveryBill(){ $filter = array( 'status' => 0, 'process_status' => 3, 'disabled' => 'false', ); $oBranch = app::get('ome')->model('branch'); $is_super = kernel::single('desktop_user')->is_super(); if (!$is_super) { $branch_ids = $oBranch->getBranchByUser(true); if ($branch_ids) { $filter['branch_id'] = $branch_ids; } } $num = $this->count($filter); $dataDly = $this->getList('delivery_id', $filter, 0, -1); $billObj = app::get('wms')->model('delivery_bill'); foreach($dataDly as $v){ $billFilter = array( 'status' => 0, 'delivery_id'=> $v['delivery_id'], 'type' => 2, ); $num += $billObj->count($billFilter); } return $num; } function io_title( $filter, $ioType='csv' ){ switch( $filter ){ case 'delivery': $this->oSchema['csv'][$filter] = array( '*:订单号' => 'order_bn', '*:来源店铺' => 'shop_name', '*:发票号' => 'tax_no', '*:会员用户名' => 'member_id', '*:物流公司' => 'logi_name', '*:商品货号' => 'bn', '*:商品名称' => 'product_name', '*:购买数量' => 'number', '*:商品单价'=>'price', '*:配送方式'=>'delivery', '*:配送费用'=>'freight', '*:总价'=>'total', '*:物流单号'=>'logi_no', '*:收货地址'=>'ship_addr', '*:收货地区'=>'ship_area', '*:收货人'=>'ship_name', '*:收货人电话'=>'ship_tel', '*:收货人手机'=>'ship_mobile', '*:收货邮编'=>'ship_zip', '*:发货时间'=>'delivery_time', '*:外部发货单号'=>'delivery_bn', '*:发货单号'=>'outer_delivery_bn', '*:发货单明细流水号'=>'item_id', '*:货位'=>'store_position', '*:规格'=>'spec_value',// ); break; } $this->ioTitle[$ioType][$filter] = array_keys( $this->oSchema[$ioType][$filter] ); return $this->ioTitle[$ioType][$filter]; } function fgetlist_csv( &$data,$filter,$offset,$exportType = 1 ) { $basicMaterialLib = kernel::single('material_basic_material'); $oShop = app::get('ome')->model('shop'); $branchObj = app::get('ome')->model('branch'); if( !$data['title']){ $title = array(); foreach($this->io_title('delivery') as $k => $v ){ $title[] = $this->charset->utf2local($v); } $data['title']['delivery'] = '"'.implode('","',$title).'"'; } //$limit =100; foreach ($filter as $fk=>$fv ) { if ($fv=='') { unset($filter[$fk]); } } if( !$list=$this->getlist_logi_no('*',$filter,0,-1) )return false; $outer_delivery = array(); foreach ($list as $k => $row){ $outer_delivery_bn[] = $row['outer_delivery_bn']; $outer_delivery[$row['outer_delivery_bn']] = $row['delivery_bn']; } $sql = 'SELECT DI.item_id, D.delivery_bn, D.delivery_id, D.member_id, D.logi_name, D.logi_no, D.ship_addr, D.ship_area, D.ship_name, D.ship_tel, D.ship_mobile, D.delivery, D.delivery_time, D.ship_zip, DI.bn, a.material_name AS product_name, DI.number as dn FROM sdb_ome_delivery_items AS DI LEFT JOIN sdb_ome_delivery AS D ON D.delivery_id = DI.delivery_id LEFT JOIN sdb_material_basic_material AS a on DI.product_id=a.bm_id where D.delivery_bn in ("'.implode('","',$outer_delivery_bn).'") ORDER BY D.delivery_id DESC'; $rows = $this->db->select($sql); $tmp_delivery_info = array(); $ids = array(); foreach ($rows as $k => $row){ $tmp_delivery_info[$row['delivery_id'].$row['bn']] = $row; $ids[] = $row['delivery_id']; } unset($rows); $sql = 'SELECT O.order_bn,O.shop_id,O.tax_no,O.cost_freight,OI.nums as number,ROUND((OI.sale_price/OI.nums),3) as price,OI.sale_price,DO.delivery_id,OI.bn,OI.product_id,D.branch_id FROM sdb_ome_order_items AS OI LEFT JOIN sdb_ome_orders AS O ON O.order_id = OI.order_id LEFT JOIN sdb_ome_delivery_order AS DO ON DO.order_id = O.order_id LEFT JOIN sdb_ome_delivery AS D ON D.delivery_id = DO.delivery_id where D.delivery_id in ('.implode(',',$ids).') AND OI.delete=\'false\' ORDER BY D.delivery_id DESC, OI.bn ASC'; $rows = $this->db->select($sql); $tmp_order = array(); foreach ($rows as $k => $row){ #同一订单运费只显示一次 if(!isset($tmp_order[$row['order_bn']])){ $tmp_order[$row['order_bn']] = $row['order_bn']; $cost_freight = round(($row['cost_freight']/$row['number'])*$tmp_delivery_info[$row['delivery_id'].$row['bn']]['dn'],3); }else{ $cost_freight = 0; } if(isset($tmp_delivery_info[$row['delivery_id'].$row['bn']])){ $rows[$k] = array_merge($row,$tmp_delivery_info[$row['delivery_id'].$row['bn']]); $rows[$k]['freight'] = $cost_freight; $rows[$k]['total'] = $cost_freight+ROUND($row['sale_price'],3); } #获取所有货位 $_sql = 'select store_position from sdb_ome_branch_pos bpos left join sdb_ome_branch_product_pos ppos on bpos. pos_id=ppos.pos_id where bpos.branch_id='.$row['branch_id'].' and product_id='.$row['product_id']; $_rows = $this->db->select($_sql); $_store_position = null; if(!empty($_rows[0])){ #一个货品有多个货位时,中间要隔开 foreach($_rows as $v){ $_store_position .= $v['store_position'].'|'; } } #切掉尾部符号 $_store_position = substr_replace($_store_position,'',-1,1); $rows[$k]['store_position'] = $_store_position; $product_info = $basicMaterialLib->getBasicMaterialExt($row['product_id']); #处理货品多规格值 $spec_value = ''; if(is_array($product_info['spec_desc']['spec_value']) && !empty($product_info['spec_desc']['spec_value'])){ $spec_value = implode('|',$product_info['spec_desc']['spec_value']); } $rows[$k]['spec_value'] = $spec_value; unset($row,$_rows,$product_info); } foreach($rows as $key=>$row){ $shop = $oShop->dump($row['shop_id'],'name'); $rows[$key]['shop_name'] = $shop['name']; $rows[$key]['delivery_time'] = date('Y-m-d H:i:s',$row['delivery_time']); $ship_addr_arr = explode(':', $row['ship_area']); $rows[$key]['ship_area'] = $ship_addr_arr[1]; $member = array(); $memberObj = app::get('ome')->model('members'); $member = $memberObj->getList('uname',array('member_id'=>$row['member_id']),0,1); $rows[$key]['member_id'] = $member[0]['uname']; $rows[$key]['order_bn'] .= "\t"; $item_id = $row['item_id']; if(isset($item[$item_id])){ $i++; $rows[$key]['item_id']= $item_id.'_'.$i; }else{ $item[$item_id]=$item_id; $rows[$key]['item_id']= $item_id; } $rows[$key]['delivery_bn'] = $rows[$key]['delivery_bn']."\t"; $rows[$key]['outer_delivery_bn'] = $outer_delivery[$row['delivery_bn']]."\t"; } foreach( $rows as $aFilter ){ foreach( $this->oSchema['csv']['delivery'] as $k => $v ){ $pRow[$k] = utils::apath( $aFilter,explode('/',$v) ); } $data['content']['delivery'][] =$this->charset->utf2local('"'.implode( '","', $pRow ).'"'); } return false; } function export_csv($data,$exportType = 1 ){ $output = array(); foreach( $data['title'] as $k => $val ){ $output[] = $val."\n".implode("\n",(array)$data['content'][$k]); } echo implode("\n",$output); } /** * 根据delivery_id返回delivery_bn * @param array $delivery_id description * @return array delivery_bn * @access public * @author cyyr24@sina.cn */ function _getdelivery_bn($delivery_id) { $deliveryObj = app::get('ome')->model("delivery"); $deliverys = $deliveryObj->getList('delivery_bn',array('delivery_id'=>$delivery_id)); $deliverybn[] = 0; foreach ($deliverys as $delivery ) { $deliverybn[] = $delivery['delivery_bn']; } return $deliverybn; } /** * 获取打印状态 * @param $print_status * @return * @access public * @author cyyr24@sina.cn */ function get_printStatus($print_status) { $stock = 'false'; $deliv = 'false'; $expre = 'false'; if(($print_status & 1) == 1){ $stock = 'true'; } if(($print_status & 2) == 2){ $deliv = 'true'; } if(($print_status & 4) == 4){ $expre = 'true'; } $print_status = array('stock'=>$stock,'deliv'=>$deliv ,'expre'=>$expre); return $print_status; } /** * 处理状态 * @param $process_status * @return * @access public * @author cyyr24@sina.cn */ function get_process_status($process_status) { switch($process_status){ case 0: return '处理中'; break; case 1: return '取消'; break; case 2: return '暂停'; break; case 3: return '已完成'; break; } } /** * 根据订单返回发货单详情 * @param $order_id * @return array * @access public * @author cyyr24@sina.cn */ function getDeliveryByOrder($order_id) { $deliOrderObj = app::get('ome')->model("delivery_order"); $oBranch = app::get('ome')->model('branch'); $dlyBillLib = kernel::single('wms_delivery_bill'); $rows = $deliOrderObj->getList('delivery_id',array('order_id'=>$order_id), 0 , -1); foreach($rows as $key => $row){ $delivery_id = $row['delivery_id']; $wms_delivery = $this->_getdelivery_bn($delivery_id); $delivery = $this->getlist('*', array('outer_delivery_bn'=>$wms_delivery[1],'status'=>array(0,3))); foreach($delivery as $k=>$v){ $delivery_arr[$key] = $v; $delivery_arr[$key]['create_time'] = date('Y-m-d H:i:s',$v['create_time']); $logi_no = $dlyBillLib->getPrimaryLogiNoById($v['delivery_id']); $delivery_arr[$key]['logi_no'] = $logi_no; $delivery_arr[$key]['branch_name'] = $oBranch->Get_name($v['branch_id']); $print_status_show = $this->get_printStatus($v['print_status']); $stock = $print_status_show['stock']; $deliv = $print_status_show['deliv']; $expre = $print_status_show['expre']; if ($stock == 'true' && $deliv == 'true' && $expre == 'true') { $delivery_arr[$key]['print_status'] = '已完成打印'; }else if($stock == 'false' && $deliv == 'false' && $expre == 'false'){ $delivery_arr[$key]['print_status'] = '未打印'; }else{ $print_status = array(); if($stock == 'true'){ $print_status[] = '备货单'; } if($deliv == 'true'){ $print_status[] = '清单'; } if($expre == 'true'){ $print_status[] = '快递单'; } $delivery_arr[$key]['print_status'] = implode("/",$print_status)."已打印"; } #重量 $delivery_weight = $dlyBillLib->getDeliveryByBill($v['delivery_id'],$logi_no); $delivery_arr[$key]['weight'] = $delivery_weight['weight']; #处理状态 $delivery_arr[$key]['status_text'] = $this->get_process_status($v['status']); } } return $delivery_arr; } /** * 发货单导出日志类型 * @param $params * @return type * @access public * @author cyyr24@sina.cn */ function getLogType($logParams) { $type = 'selfwms_delivery_export'; return $type; } //逐单发货时,根据发货单id,获取货号、货品名称、数量、重量 function getProcutInfo($delivery_id){ $sql = 'select items.bn,items.product_id,items.product_name,items.number,delivery.net_weight,delivery.delivery_id from sdb_wms_delivery as delivery left join sdb_wms_delivery_items items on items.delivery_id=delivery.delivery_id where delivery.delivery_id='.$delivery_id; $rows = $this->db->select($sql); return $rows; } function array2xml2($data,$root='root'){ $xml='<'.$root.'>'; $this->_array2xml($data,$xml); $xml.=''; return $xml; } function _array2xml(&$data,&$xml){ if(is_array($data)){ foreach($data as $k=>$v){ if(is_numeric($k)){ $xml.=''; $xml.=$this->_array2xml($v,$xml); $xml.=''; }else{ $xml.='<'.$k.'>'; $xml.=$this->_array2xml($v,$xml); $xml.=''; } } }elseif(is_numeric($data)){ $xml.=$data; }elseif(is_string($data)){ $xml.=''; } } //导出扩展字段 function export_extra_cols(){ return array( 'column_delivery_cost_expect' => array('label'=>'预计物流费用','width'=>'100','func_suffix'=>'delivery_cost_expect'), ); } /** * 发货单列表项扩展字段 */ function extra_cols(){ return array( 'column_custom_mark' => array('label'=>'买家留言','width'=>'180','func_suffix'=>'custom_mark'), 'column_mark_text' => array('label'=>'客服备注','width'=>'180','func_suffix'=>'mark_text'), 'column_tax_no' => array('label'=>'发票号','width'=>'180','func_suffix'=>'tax_no'), 'column_ident' => array('label'=>'批次号','width'=>'160','func_suffix'=>'ident','order_field'=>'idx_split'), ); } /** * 买家备注扩展字段格式化 */ function extra_custom_mark($rows){ return kernel::single('wms_extracolumn_delivery_custommark')->process($rows); } /** * 客服备注扩展字段格式化 */ function extra_mark_text($rows){ return kernel::single('wms_extracolumn_delivery_marktext')->process($rows); } /** * 发票号扩展字段格式化 */ function extra_tax_no($rows){ return kernel::single('wms_extracolumn_delivery_taxno')->process($rows); } /** * 批次号扩展字段格式化 */ function extra_ident($rows){ return kernel::single('wms_extracolumn_delivery_ident')->process($rows); } //定义导出明细内容的相关字段 public function get_exp_detail_schema(){ $schema = array ( 'columns' => array ( 'bn' => array( 'type' => 'varchar(30)', 'label' => '商品货号', 'width' => 85, 'editable' => false, ), 'product_name' => array( 'type' => 'varchar(200)', 'required' => true, 'default' => '', 'label' => '商品名称', 'width' => 190, 'editable' => false, ), 'number' => array( 'type' => 'number', 'required' => true, 'default' => 0, 'label' => '购买数量', 'editable' => false, ), 'price' => array( 'type' => 'money', 'default' => '0', 'required' => true, 'label' => '商品单价', 'editable' => false, ), 'avgprice' => array( 'type' => 'money', 'default' => '0', 'required' => true, 'label' => '商品均单价', 'editable' => false, ), 'total' => array( 'type' => 'money', 'default' => '0', 'label' => '总价', 'width' => 70, 'editable' => false, ), 'item_id' => array( 'type' => 'int unsigned', 'label' => '发货单明细流水号', 'comment' => '发货单明细流水号', 'editable' => false, ), 'store_position' => array( 'type' => 'varchar(100)', 'label' => '货位', 'comment' => '货位', 'editable' => false, ), 'spec_value' => array( 'type' => 'varchar(100)', 'label' => '规格', 'comment' => '规格', 'editable' => false, ), ), ); return $schema; } //根据过滤条件获取导出发货单的主键数据数组 public function getPrimaryIdsByCustom($filter, $op_id){ //过滤掉空的查询条件 foreach ($filter as $fk=>$fv ) { if ($fv=='') { unset($filter[$fk]); } } if( !$list=$this->getlist_logi_no('*',$filter,0,-1) )return false; $ids = array(); foreach ($list as $k => $row){ $ids[] = $row['delivery_id']; } return $ids; } //根据主键id获取导出数据 public function getExportDataByCustom($fields, $filter, $has_detail, $curr_sheet, $start, $end, $op_id){ $ids = $filter['delivery_id']; $outer_ids = $this->getOuterIdsByIds($ids); #基础物料 $basicMaterialObj = app::get('material')->model('basic_material'); $basicMaterialLib = kernel::single('material_basic_material'); $obj_queue_items = app::get('ome')->model('print_queue_items'); $oBranch = app::get('ome')->model('branch'); $dlyObj = app::get('ome')->model('delivery'); $dlyorderObj = app::get('ome')->model('delivery_order'); //获取所有仓库名称 $all_branch_info = $oBranch->getList('branch_id,name',array()); $all_branch_name = array(); foreach($all_branch_info as $v){ $all_branch_name[$v['branch_id']] = $v['name']; } unset($all_branch_info); $sql = 'SELECT delivery_bn,outer_delivery_bn,delivery_id,delivery_cost_expect FROM sdb_wms_delivery where delivery_id in ("'.implode('","',$ids).'") ORDER BY delivery_id DESC'; $list = $this->db->select($sql); $outer_delivery = array(); $outer_deliveryIds = array(); foreach ($list as $k => $row){ $outer_delivery[$row['outer_delivery_bn']] = array( "delivery_bn" => $row['delivery_bn'], "delivery_cost_expect" => $row['delivery_cost_expect'], ); $outer_deliveryIds[$row['outer_delivery_bn']] = $row['delivery_id']; } $sql = 'SELECT DI.product_id, DI.item_id, D.branch_id, D.delivery_bn, D.delivery_id, D.member_id, D.logi_name, D.logi_no, D.ship_addr, D.ship_area, D.ship_name, D.ship_tel, D.ship_mobile, D.delivery_time, D.ship_zip, DI.bn, DI.number as dn,D.create_time FROM sdb_ome_delivery_items AS DI LEFT JOIN sdb_ome_delivery AS D ON D.delivery_id = DI.delivery_id where D.delivery_id in ('.implode(',',$outer_ids).') ORDER BY D.delivery_id DESC'; $rows = $this->db->select($sql); $tmp_delivery_info = array(); foreach ($rows as $k => $row) { $product_info = $basicMaterialObj->dump(array('bm_id'=>$row['product_id']), 'material_name'); $row['product_name'] = $product_info['material_name']; $tmp_delivery_info[$row['delivery_id'].$row['bn']] = $row; } unset($rows); //[拆单]获取多个发货单对应订单信息 $sql = "SELECT DI.delivery_id, O.order_bn, O.custom_mark, O.mark_text, O.shop_id, O.tax_no, O.cost_freight, DI.bn, DI.price, DI.amount, DI.number, DI.product_id FROM sdb_ome_delivery_items_detail AS DI LEFT JOIN sdb_ome_orders AS O ON O.order_id = DI.order_id WHERE DI.delivery_id in(".implode(',',$outer_ids).") ORDER BY DI.delivery_id DESC"; $rows = $this->db->select($sql); //备注显示方式 $markShowMethod = app::get('ome')->getConf('ome.order.mark'); $tmp_order = array(); foreach ($rows as $k => $row){ //新增发货单创建时间 $rows[$k]['create_time'] = date('Y-m-d H:i:s',$row['create_time']); //同一订单运费只显示一次 if(!isset($tmp_order[$row['order_bn']])){ $tmp_order[$row['order_bn']] = $row['order_bn']; $cost_freight = round(($row['cost_freight']/$row['number'])*$tmp_delivery_info[$row['delivery_id'].$row['bn']]['dn'],3); }else{ $cost_freight = 0; } if(isset($tmp_delivery_info[$row['delivery_id'].$row['bn']])){ $rows[$k] = array_merge($row,$tmp_delivery_info[$row['delivery_id'].$row['bn']]); $rows[$k]['freight'] = $cost_freight; $rows[$k]['total'] = $cost_freight +(ROUND($row['price'],3) * $row['number']); } //获取仓库branch_id $rows[$k]['branch_id'] = $tmp_delivery_info[$row['delivery_id'].$row['bn']]['branch_id']; $current_branch_id = $rows[$k]['branch_id']; //获取货位用 $rows[$k]['branch_id'] = $all_branch_name[$rows[$k]['branch_id']]?$all_branch_name[$rows[$k]['branch_id']]:'-'; //发货仓库 要显示仓库名称 #获取所有货位 $_sql = 'select store_position from sdb_ome_branch_pos bpos left join sdb_ome_branch_product_pos ppos on bpos. pos_id=ppos.pos_id where bpos.branch_id='.$current_branch_id.' and product_id='.$row['product_id']; $_rows = $this->db->select($_sql); $_store_position = null; if(!empty($_rows[0])){ #一个货品有多个货位时,中间要隔开 foreach($_rows as $v){ $_store_position .= $v['store_position'].'|'; } } #切掉尾部符号 $_store_position = substr_replace($_store_position,'',-1,1); $rows[$k]['store_position'] = $_store_position; //处理商品均单价 $dly_order = $dlyorderObj->getlist('*',array('delivery_id'=>$row['delivery_id']),0,-1); $sale_orders = $dlyObj->getsale_price($dly_order); $rows[$k]['avgprice'] = $sale_orders[$row['bn']]; //处理货品多规格值 $tmp_pdt_spec = array(); if(!isset($tmp_pdt_spec[$row['product_id']])) { $product_info = $basicMaterialLib->getBasicMaterialExt($row['product_id']); $spec_value = ''; if(is_array($product_info['spec_desc']['spec_value']) && !empty($product_info['spec_desc']['spec_value'])){ $spec_value = implode('|',$product_info['spec_desc']['spec_value']); } $tmp_pdt_spec[$row['product_id']] = $spec_value; }else{ $spec_value = $tmp_pdt_spec[$row['product_id']]; } $rows[$k]['spec_value'] = $spec_value; $queue_items = $obj_queue_items->getlist('ident,ident_dly',array('delivery_id'=>$outer_deliveryIds[$rows[$k]['delivery_bn']])); if($queue_items[0]['ident'] && $queue_items[0]['ident_dly']){ $rows[$k]['ident'] = $queue_items[0]['ident'].'_'.$queue_items[0]['ident_dly']; }else{ $rows[$k]['ident'] = '-'; } $str_custom_mark =''; if($row['custom_mark']) { $custom_mark = unserialize($row['custom_mark']); if (is_array($custom_mark) || !empty($custom_mark)){ if($markShowMethod == 'all'){ foreach ($custom_mark as $_custom_mark ) { $str_custom_mark .= $_custom_mark['op_content']; } }else{ $_memo = array_pop($custom_mark); $str_custom_mark = $_memo['op_content']; } } $rows[$k]['custom_mark'] = $str_custom_mark; }else{ $rows[$k]['custom_mark'] = '-'; } $str_mark_text =''; if($row['mark_text']) { $mark_text = unserialize($row['mark_text']); if (is_array($mark_text) || !empty($mark_text)){ if($markShowMethod == 'all'){ foreach ($mark_text as $im) { $str_mark_text .= $im['op_content']; } }else{ $_memo = array_pop($mark_text); $str_mark_text = $_memo['op_content']; } } $rows[$k]['mark_text'] = $str_mark_text; }else{ $rows[$k]['mark_text'] = '-'; } unset($row,$_rows,$product_info); } $item=array(); $i=0; foreach($rows as $key=>$row){ $ship_addr_arr = explode(':', $row['ship_area']); $rows[$key]['ship_area'] = $ship_addr_arr[1]; $member = array(); $memberObj = app::get('ome')->model('members'); $member = $memberObj->getList('uname',array('member_id'=>$row['member_id']),0,1); $rows[$key]['member_id'] = $member[0]['uname']; $rows[$key]['order_bn'] .= "\t"; $rows[$key]['logi_no'] .= "\t"; $item_id = $row['item_id']; if(isset($item[$item_id])){ $i++; $rows[$key]['item_id']= $item_id.'_'.$i; }else{ $item[$item_id]=$item_id; $rows[$key]['item_id']= $item_id; } $rows[$key]['delivery_bn'] = $outer_delivery[$row['delivery_bn']]["delivery_bn"]."\t"; //加上了扩展导出字段delivery_cost_expect预计物流费用 $rows[$key]['delivery_cost_expect'] = $outer_delivery[$row['delivery_bn']]["delivery_cost_expect"]; } //导出数据客户敏感信息处理 $securityLib = kernel::single('ome_security_customer'); $securityLib->check_sensitive_info($rows , 'omedlyexport_mdl_ome_delivery', $op_id); //error_log(var_export($rows,true)."\n\t",3,"/www/be.log"); $crows = $this->convert($rows, $fields, $has_detail); //error_log(var_export($crows,true)."\n\t",3,"/www/af.log"); //使用csv的方式格式化导出数据 $new_rows = $this->formatCsvExport($crows); $export_arr['content']['main'] = array(); //如果是第一分片那么加上标题 if($curr_sheet == 1){ $title = array(); $main_schema = $this->get_schemas(); $detail_schema = $this->get_exp_detail_schema(); //error_log(var_export($new_rows,true)."\n\t",3,"/www/new_rows.log"); foreach (explode(',', $fields) as $key => $col) { if(isset($main_schema['columns'][$col])){ $title[] = "*:".$main_schema['columns'][$col]['label']; } } if($has_detail == 1){ foreach ($detail_schema['columns'] as $key => $col) { $title[] = "*:".$col['label']; } } foreach ((array)$title as $key => $value) { $title[$key] = mb_convert_encoding($value, 'GBK', 'UTF-8'); } $export_arr['content']['main'][0] = implode(',', $title); unset($main_schema, $detail_schema); } $new_line = 1; foreach($new_rows as $row => $content){ $tmp_arr = array(); foreach ($content as $value) { $tmp_arr[] = mb_convert_encoding($value, 'GBK', 'UTF-8'); } $export_arr['content']['main'][$new_line] = implode(',', $tmp_arr); $new_line++; } return $export_arr; } //重写字段方法,导出格式化的时候会调用到,不在名单里的字段直接剔除 public function _exportcolumns(){ $main_schema = $this->get_schemas(); $detail_schema = $this->get_exp_detail_schema(); return array_merge($main_schema['columns'], $detail_schema['columns']); } //格式化输出的内容字段 public function convert($rows, &$fields='', $has_detail=1){ //反转扩展字段 $fields = str_replace('column_custom_mark', 'custom_mark', $fields); $fields = str_replace('column_mark_text', 'mark_text', $fields); $fields = str_replace('column_tax_no', 'tax_no', $fields); $fields = str_replace('column_ident', 'ident', $fields); $fields = str_replace('column_delivery_cost_expect', 'delivery_cost_expect', $fields); $tmp_rows = array(); $schema = $this->get_schemas(); $detail_schema = $this->get_exp_detail_schema(); //针对大而全的数据做格式化过滤,如果包含明细 if($has_detail == 1){ /* //找出不要的字段 foreach($schema['in_list'] as $sk => $col){ //将需要的字段从所有字段数组里去掉 if(strpos($fields, $col) !== false){ unset($schema['in_list'][$sk]); } } foreach($rows as $key=>$row){ foreach ($row as $column => $value) { //不要的字段去掉 if(!in_array($column, $schema['in_list'])){ $tmp_rows[$key][$column] = $value; } } } */ //先处理主数据的排序 foreach (explode(',', $fields) as $k => $col) { foreach ($rows as $key=>$row) { foreach ($row as $cl => $value) { //只保留配置的主字段 if($col == $cl){ $tmp_rows[$key][$col] = $row[$col] ? $row[$col] : '-'; } } } } //继续处理明细数据的排序 foreach ($detail_schema['columns'] as $col => $arr) { foreach ($rows as $key=>$row) { foreach ($row as $cl => $value) { //只保留配置的主字段 if($col == $cl){ $tmp_rows[$key][$col] = $row[$col] ? $row[$col] : '-'; } } } } }else{ //先将数组合并,去掉重复记录 foreach($rows as $key=>$row){ $tmp_deliverys_bn = array(); if(!$tmp_deliverys_bn[$row['delivery_bn']]){ $tmp_deliverys_bn[$row['delivery_bn']] = $row['delivery_bn']; }else{ unset($row[$key]); } } foreach (explode(',', $fields) as $k => $col) { foreach ($rows as $key=>$row) { foreach ($row as $cl => $value) { //只保留配置的主字段 if($col == $cl){ $tmp_rows[$key][$col] = $row[$col]; } } } } } return $tmp_rows; } public function get_schemas(){ $schema = array ( 'columns' => array ( 'order_bn' => array( 'type' => 'varchar(32)', 'required' => true, 'label' => '订单号', 'width' => 125, 'editable' => false, ), 'shop_id' => array( 'type' => 'table:shop@ome', 'label' => '来源店铺', 'width' => 75, 'editable' => false, ), 'tax_no' => array( 'type' => 'varchar(50)', 'label' => '发票号', 'editable' => false, ), 'member_id' => array( 'type' => 'varchar(50)', 'label' => '会员用户名', 'comment' => '订货会员ID', 'editable' => false, 'width' =>75, ), 'logi_name' => array( 'type' => 'varchar(100)', 'label' => '物流公司', 'comment' => '物流公司名称', 'editable' => false, 'width' =>75, ), 'freight' => array( 'type' => 'money', 'default' => '0', 'required' => true, 'label' => '配送费用', 'width' => 70, 'editable' => false, ), 'logi_no' => array( 'type' => 'varchar(50)', 'default' => '0', 'label' => '物流单号', 'width' => 70, 'editable' => false, ), 'ship_addr' => array( 'type' => 'varchar(100)', 'label' => '收货地址', 'comment' => '收货人地址', 'editable' => false, ), 'ship_area' => array( 'type' => 'region', 'label' => '收货地区', 'comment' => '收货人地区', 'editable' => false, ), 'ship_name' => array( 'type' => 'varchar(50)', 'label' => '收货人', 'comment' => '收货人姓名', 'editable' => false, ), 'ship_tel' => array( 'type' => 'varchar(30)', 'label' => '收货人电话', 'comment' => '收货人电话', 'editable' => false, ), 'ship_mobile' => array( 'type' => 'varchar(50)', 'label' => '收货人手机', 'comment' => '收货人手机', 'editable' => false, ), 'ship_zip' => array( 'type' => 'varchar(20)', 'label' => '收货邮编', 'comment' => '收货人邮编', 'editable' => false, ), 'delivery_time' => array( 'type' => 'time', 'label' => '发货时间', 'comment' => '发货时间', 'editable' => false, ), 'delivery_bn' => array( 'type' => 'varchar(32)', 'label' => '发货单号', 'comment' => '配送流水号', 'editable' => false, ), 'ident' => array( 'type' => 'varchar(64)', 'label' => '批次号', 'width' => 70, 'comment' => '本次打印的批次号', 'editable' => false, ), 'custom_mark' => array( 'type' => 'longtext', 'label' => '买家留言', 'editable' => false, ), 'mark_text' => array( 'type' => 'longtext', 'label' => '客服备注', 'editable' => false, ), 'branch_id' => array( 'type' => 'number', 'editable' => false, 'label' => '发货仓库', 'width' => 110, ), 'create_time'=>array ( 'type' => 'time', 'label' => '创建时间', 'editable' => false, ), 'delivery_cost_expect'=>array ( 'type' => 'money', 'label' => '预计物流费用', 'editable' => false, ), ), 'idColumn' => 'bn', 'in_list' => array( 0 => 'order_bn', 1 => 'shop_id', 2 => 'tax_no', 3 => 'member_id', 4 => 'logi_name', //5 => 'bn', //6 => 'product_name', //7 => 'number', //8 => 'price', 9 => 'freight', //10 => 'total', 11 => 'logi_no', 12 => 'ship_addr', 13 => 'ship_area', 14 => 'ship_name', 15 => 'ship_tel', 16 => 'ship_mobile', 17 => 'ship_zip', 18 => 'delivery_time', 19 => 'delivery_bn', //20 => 'item_id', //21=> 'store_position', //22=> 'spec_value', 23=> 'ident', 24=>'custom_mark', 25=>'mark_text', 26=> 'branch_id', 27=>'create_time', 28=>'delivery_cost_expect', ), 'default_in_list' => array( 0 => 'order_bn', 1 => 'shop_id', 2 => 'tax_no', 3 => 'member_id', 4 => 'logi_name', //5 => 'bn', //6 => 'product_name', //7 => 'number', //8 => 'price', 9 => 'freight', //10 => 'total', 11 => 'logi_no', 12 => 'ship_addr', 13 => 'ship_area', 14 => 'ship_name', 15 => 'ship_tel', 16 => 'ship_mobile', 17 => 'ship_zip', 18 => 'delivery_time', 19 => 'delivery_bn', //20 => 'item_id', //21=> 'store_position', //22=> 'spec_value', 23=> 'ident', 24=>'custom_mark', 25=>'mark_text', 26=>'branch_id', 27=>'create_time', 28=>'delivery_cost_expect', ), ); return $schema; } public function disabled_export_cols(&$cols){ $cols['order_bn'] = array( 'type' => 'varchar(32)', 'required' => true, 'label' => '订单号', 'width' => 125, 'editable' => false, ); $cols['logi_no'] = array( 'type' => 'varchar(50)', 'default' => '0', 'label' => '物流单号', 'width' => 70, 'editable' => false, ); unset($cols['is_protect'], $cols['column_ident'],$cols['last_modified'],$cols['memo'],$cols['column_status'],$cols['column_process_status'],$cols['column_print_status'],$cols['column_create'],$cols['column_beartime'],$cols['column_deliveryNumInfo'],$cols['column_content'],$cols['delivery_group'],$cols['sms_group'],$cols['ship_email']); } public function get_Schema() { $data = parent::get_Schema(); $data['columns']['stock_status']= array( 'type' => 'bool', 'filtertype' => 'normal', 'filterdefault' => true, 'default' => 'false', 'comment' => '配货单是否打印', 'label' => '备货单打印', ); $data['columns']['deliv_status']= array( 'type' => 'bool', 'filtertype' => 'normal', 'filterdefault' => true, 'default' => 'false', 'comment' => '商品清单是否打印', 'label' => '发货单打印', ); $data['columns']['expre_status']= array( 'type' => 'bool', 'filtertype' => 'normal', 'filterdefault' => true, 'default' => 'false', 'comment' => '快递单是否打印', 'label' => '快递单打印', ); return $data; } public function modifier_ship_name($ship_name,$list,$row) { if ($this->is_export_data) { if ('false' != app::get('ome')->getConf('ome.sensitive.exportdata.encrypt')) { return kernel::single('ome_view_helper2')->modifier_ciphertext($ship_name,'delivery','ship_name'); } return $ship_name; } $is_encrypt = kernel::single('ome_security_hash')->check_encrypt($ship_name); if (!$is_encrypt) return $ship_name; $base_url = kernel::base_url(1);$delivery_id = $row['delivery_id']; $encryptShipName = kernel::single('ome_view_helper2')->modifier_ciphertext($ship_name,'delivery','ship_name'); $return =<<{$encryptShipName} HTML; return $ship_name?$return:$ship_name; } public function modifier_ship_tel($tel,$list,$row) { if ($this->is_export_data) { if ('false' != app::get('ome')->getConf('ome.sensitive.exportdata.encrypt')) { return kernel::single('ome_view_helper2')->modifier_ciphertext($tel,'delivery','ship_tel'); } return $tel; } $is_encrypt = kernel::single('ome_security_hash')->check_encrypt($tel); if (!$is_encrypt) return $tel; $base_url = kernel::base_url(1);$delivery_id = $row['delivery_id']; $encryptTel = kernel::single('ome_view_helper2')->modifier_ciphertext($tel,'delivery','ship_tel'); $return =<<{$encryptTel} HTML; return $tel?$return:$tel; } public function modifier_ship_mobile($mobile,$list,$row) { if ($this->is_export_data) { if ('false' != app::get('ome')->getConf('ome.sensitive.exportdata.encrypt')) { return kernel::single('ome_view_helper2')->modifier_ciphertext($mobile,'delivery','ship_mobile'); } return $mobile; } $is_encrypt = kernel::single('ome_security_hash')->check_encrypt($mobile); if (!$is_encrypt) return $mobile; $base_url = kernel::base_url(1);$delivery_id = $row['delivery_id']; $encryptMobile = kernel::single('ome_view_helper2')->modifier_ciphertext($mobile,'delivery','ship_mobile'); $return =<<{$encryptMobile} HTML; return $mobile?$return:$mobile; } public function modifier_ship_addr($ship_addr,$list,$row) { if ($this->is_export_data) { if ('false' != app::get('ome')->getConf('ome.sensitive.exportdata.encrypt')) { return kernel::single('ome_view_helper2')->modifier_ciphertext($ship_addr,'delivery','ship_addr'); } return $ship_addr; } $is_encrypt = kernel::single('ome_security_hash')->check_encrypt($ship_addr); if (!$is_encrypt) return $ship_addr; $base_url = kernel::base_url(1);$delivery_id = $row['delivery_id']; $encryptAddr = kernel::single('ome_view_helper2')->modifier_ciphertext($ship_addr,'delivery','ship_addr'); $return =<<{$encryptAddr} HTML; return $ship_addr?$return:$ship_addr; } public function modifier_member_id($member_id,$list,$row) { static $members; if (!$member_id) return ''; if ($members) return $members[$row['delivery_id']]; $members = array (); foreach ($list as $key => $value) { $members[$value['delivery_id']] = $value['member_id']; } $rows = array (); if ($mid = array_filter($members)) { $mdl = app::get('ome')->model('members'); foreach ($mdl->getList('member_id,uname',array('member_id'=>$mid)) as $value) { $rows[$value['member_id']] = $value['uname']; } } foreach ($members as $delivery_id => $value) { $uname = $rows[$value]; $is_encrypt = kernel::single('ome_security_hash')->check_encrypt($uname); if ($is_encrypt) { $encrypt = kernel::single('ome_view_helper2')->modifier_ciphertext($uname,'delivery','uname'); $uname = <<{$encrypt} HTML; } $members[$delivery_id] = $uname; } return $members[$row['delivery_id']]; } } ?>