'未支付', 1 => '已支付', 2 => '处理中', 3 => '部分付款', 4 => '部分退款', 5 => '全额退款', 6 => '退款申请中', 7 => '退款中', 8 => '支付中', ); /** * 获取_schema * @return mixed 返回结果 */ public function get_schema(){ $schema = array ( 'columns' => array ( 'product_id' => array ( 'type' => 'int unsigned', 'required' => true, 'pkey' => true, 'extra' => 'auto_increment', 'label' => 'ID', 'width' => 110, 'hidden' => true, 'editable' => false, 'orderby'=>false, ), 'bn' => array ( 'type' => 'varchar(50)', 'required' => true, 'default' => 0, 'label' => '货号', 'width' => 120, 'searchtype' => 'has', 'editable' => true, 'filtertype' => 'normal', 'filterdefault' => 'true', 'orderby'=>true, 'realtype' => 'varchar(50)', 'order' => 30, ), 'product_name' => array ( 'type' => 'varchar(200)', 'pkey' => true, 'label' => '货品名称', 'width' => 210, 'searchtype' => 'has', 'editable' => false, 'filtertype' => 'normal', 'filterdefault' => 'true', 'orderby'=>false, 'realtype' => 'varchar(200)', 'order' => 40, ), 'supplier_name' => array ( 'type' => 'varchar(50)', 'default' => 0, 'label' => '供应商', 'width' => 120, 'filtertype' => 'normal', 'filterdefault' => 'true', 'orderby'=>false, 'order' => 60, ), 'order_freeze'=>array( 'type' => 'number', 'label' => '订单预占', 'default' => 0, 'orderby'=>true, 'order' => 70, ), 'enum_store'=>array( 'type' => 'number', 'label' => '库存可用', 'default' => 0, 'orderby'=>true, 'order' => 77, ), 'arrive_enum_store'=>array( 'type' => 'number', 'label' => '库存可用(含在途)', 'default' => 0, 'orderby'=>false, 'order' => 78, ), 'product_lack'=>array( 'type' => 'number', 'label' => '缺货数量', 'default' => 0, 'orderby'=>true, 'order' => 100, ), 'arrive_product_lack'=>array( 'type' => 'number', 'label' => '缺货数量(含在途)', 'default' => 0, 'orderby'=>false, 'order' => 101, ), ), 'idColumn' => 'product_id', 'in_list' => array ( 1 => 'bn', 2 => 'product_name', 3=>'enum_store', 4=>'product_lack', ), 'default_in_list' => array ( 1 => 'bn', 2 => 'product_name', 3=>'enum_store', 4=>'product_lack', ), ); return $schema; } public function getlist($cols='*', $filter=array(), $offset=0, $limit=-1, $orderType=null){ $branch_sql = ''; if ($filter['branch_id']) { $branch_sql.=" WHERE branch_id=".$filter['branch_id']; } $sql = "SELECT i.product_id,i.bn,i.name AS product_name,i.nums AS item_num,IFNULL(IF(bb.sum_store_filter($filter)." GROUP BY i.product_id,i.bn HAVING(order_freeze>enum_store"; //库存可用搜索 if(isset($filter['product_lack']) && $filter['product_lack']!=''){ if($filter['_product_lack_search']=='nequal'){ $sql.=' AND product_lack='.$filter['product_lack'].''; }else if($filter['_product_lack_search']=='than'){ $sql.=' AND product_lack>'.$filter['product_lack'].''; }else if($filter['_product_lack_search']=='lthan'){ $sql.=' AND product_lack<'.$filter['product_lack'].''; } } $sql.=')'; $rows = $this->db->selectLimit($sql,$limit,$offset); $this->tidy_data($rows, $cols); return $rows; } /** * count * @param mixed $filter filter * @return mixed 返回值 */ public function count($filter=null){ $branch_sql = ''; if ($filter['branch_id']) { $branch_sql.=" WHERE branch_id=".$filter['branch_id']; } $sql = "SELECT SUM(i.nums) AS order_freeze,i.nums AS item_num,IFNULL(IF(bb.sum_store_filter($filter)." GROUP BY i.product_id,i.bn HAVING(order_freeze>enum_store"; //库存可用搜索 if(isset($filter['product_lack']) && $filter['product_lack']!=''){ if($filter['_product_lack_search']=='nequal'){ $sql.=' AND product_lack='.$filter['product_lack'].''; }else if($filter['_product_lack_search']=='than'){ $sql.=' AND product_lack>'.$filter['product_lack'].''; }else if($filter['_product_lack_search']=='lthan'){ $sql.=' AND product_lack<'.$filter['product_lack'].''; } } $sql.=')'; $row = $this->db->select($sql); return count($row); } /** * _filter * @param mixed $filter filter * @param mixed $tableAlias tableAlias * @param mixed $baseWhere baseWhere * @return mixed 返回值 */ public function _filter($filter,$tableAlias=null,$baseWhere=null){ $where[] = 1; if ($filter['shop_id']) { $where[] =' o.shop_id="'.$filter['shop_id'].'"'; } if ($filter['filter_sql']) { $where[] = $filter['filter_sql']; } if ($filter['bn']) { $where[] = ' p.material_bn LIKE \''.addslashes($filter['bn']).'%\''; } if ($filter['product_name']) { $where[] = ' p.material_name LIKE \''.addslashes($filter['product_name']).'%\''; } if (!$filter['ifpay']) { $where[] = ' o.pay_status ="1"'; } if (!$filter['failorder']) { $where[] = ' o.is_fail ="false"'; } if (!$filter['abnormalorder']) { $where[] = ' o.abnormal ="false"'; } if ($filter['product_id']) { if (is_array($filter['product_id'])) { $where[] = ' i.product_id in ('.implode(',',$filter['product_id']).')'; } } if ($filter['branch_id']) { $where[] = ' bb.branch_id='.$filter['branch_id']; } //库存可用搜索 if(isset($filter['stock']) && $filter['stock']!=''){ if($filter['_stock_search']=='nequal'){ $where[]=' IFNULL(IF(bb.sum_storedb->select("SELECT bp.store,bp.store_freeze,p.material_name AS product_name,p.material_bn AS bn FROM sdb_ome_branch_product as bp left join sdb_material_basic_material as p on bp.product_id=p.bm_id WHERE bp.product_id=".$product_id." AND bp.store_freeze>bp.store"); $basicMStockFreezeLib = kernel::single('material_basic_material_stock_freeze'); $branch_product = $this->db->select("SELECT bp.product_id, bp.branch_id, bp.store,bp.store_freeze,p.material_name AS product_name,p.material_bn AS bn FROM sdb_ome_branch_product as bp left join sdb_material_basic_material as p on bp.product_id=p.bm_id WHERE bp.product_id=".$product_id); $result = array(); if($branch_product) { foreach ($branch_product as $row) { //根据仓库ID、基础物料ID获取该物料仓库级的预占 $row['store_freeze'] = $basicMStockFreezeLib->getBranchFreeze($row['product_id'], $row['branch_id']); //过滤冻结库存大于总库存的记录 if($row['store_freeze'] > $row['store']) { continue; } $result[] = $row; } } return $result ; } function io_title( $filter, $ioType='csv' ){ switch( $filter ){ case 'order_lack': $this->oSchema['csv'][$filter] = array( '*:货号' => 'bn', '*:货品名称' => 'product_name', //'*:规格' => 'spec_info', //'*:供应商'=>'supplier_name', //'*:商品名称'=>'goods_name', //'*:商品编号'=>'goods_bn', '*:订单预占'=>'order_freeze', '*:库存可用'=>'enum_store', // '*:库存可用(含在途)'=>'arrive_enum_store', '*:缺货数量'=>'product_lack', //'*:缺货数量(含在途)'=>'arrive_product_lack', ); break; } $this->ioTitle[$ioType][$filter] = array_keys( $this->oSchema[$ioType][$filter] ); return $this->ioTitle[$ioType][$filter]; } function fgetlist_csv( &$data,$filter,$offset,$exportType = 1 ){ if( !$data['title']){ $title = array(); foreach($this->io_title('order_lack') as $k => $v ){ $title[] = $this->charset->utf2local($v); } $data['title']['order_lack'] = '"'.implode('","',$title).'"'; } if( !$list=$this->getlist('*',$filter,0,-1) )return false; foreach( $list as $aFilter ){ if ($aFilter['product_lack']<0) { $aFilter['product_lack'] = '-'; } if ($aFilter['arrive_product_lack']<0) { $aFilter['arrive_product_lack'] = '-'; } if(!empty($aFilter['spec_info'])){ $aFilter['spec_info'] = str_replace(array("\r\n","\r","\n"," ",), '', $aFilter['spec_info']); $aFilter['spec_info'] = trim($aFilter['spec_info']); } foreach( $this->oSchema['csv']['order_lack'] as $k => $v ){ $pRow[$k] = utils::apath( $aFilter,explode('/',$v) ); } $data['content']['order_lack'][] =$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); } /** * 获取订单需要库存 * @param * @return * @access public * @author cyyr24@sina.cn */ function get_orderStore($product_id) { $orderstore = $this->get_order($product_id); $store = array(); foreach ($orderstore as $order ) { $store[] = $order['item_num']; } if ($store) { return array_sum($store); } return 0; } /** * 获取缺货订单商品数量 * @param * @return * @access public * @author cyyr24@sina.cn */ function get_order($product_id,$bn,$limit=-1,$offset=0) { $sql = "SELECT i.nums AS item_num,o.order_bn,o.shop_id,o.pay_status,o.createtime,o.pay_status,o.paytime,o.order_limit_time,IFNULL(IF(SUM(bp.store)= 0 || $limit >= 0){ $offset = ($offset >= 0) ? $offset . "," : ''; $limit = ($limit >= 0) ? $limit : '18446744073709551615'; $sql .= ' LIMIT ' . $offset . ' ' . $limit; } $orders = $this->db->select($sql ); return $orders; } /** * 获取冻结订单列表 * @param * @return * @access public * @author cyyr24@sina.cn */ function get_orderlist($product_id,$bn,$start,$limit) { $orders = $this->get_order($product_id,$bn,$start,$limit); foreach ($orders as &$order ) { $order['pay_status'] = self::$pay_status[$order['pay_status']]; $order['shop_name'] = $this->getShop($order['shop_id']); } return $orders; } /** * 获取库存 * @param * @return * @access public * @author cyyr24@sina.cn */ function get_store($product_id) { //$branch_product = $this->db->selectrow("SELECT sum(IF(bp.storedb->select("SELECT product_id, branch_id, store, arrive_store FROM sdb_ome_branch_product WHERE product_id=". intval($product_id)); $result = array('sum_store'=>0, 'sum_arrive_store'=>0); if($branch_product) { foreach ($branch_product as $row) { //根据仓库ID、基础物料ID获取该物料仓库级的预占 $store_freeze = $basicMStockFreezeLib->getBranchFreeze($row['product_id'], $row['branch_id']); $row['store'] = ($row['store'] < $store_freeze) ? 0 : ($row['store'] - $store_freeze); $result['sum_store'] += $row['store']; $result['sum_arrive_store'] += $row['arrive_store']; } } return $result ; } /** * 返回供应商 * @param * @return array * @access public * @author cyyr24@sina.cn */ function getSupplierBygoods($goods_id) { if (!$goods_id) { return ; } $SQL = "SELECT s.name FROM sdb_purchase_supplier_goods as g LEFT JOIN sdb_purchase_supplier as s ON g.supplier_id = s.supplier_id WHERE g.bm_id=".$goods_id; $supplier = $this->db->select($SQL); $supplier_name = array(); foreach ( $supplier as $su ) { $supplier_name[] = $su['name']; } if ($supplier_name) { $supplier_name = implode(',',$supplier_name); return $supplier_name; }else{ return ; } } /** * 获取店铺 * @param varchar $shop_id * @return * @access public * @author cyyr24@sina.cn */ public function getShop($shop_id) { $oShop = $this->app->model('shop'); if (!isset(self::$_shop[$shop_id])) { $shop = $oShop->dump($shop_id,'name'); self::$_shop[$shop_id] = $shop['name']; } return self::$_shop[$shop_id]; } /** * 在途库存 * @param product_id * @return * @access public * @author cyyr24@sina.cn */ function getArrivestore($product_id) { $sql = "SELECT count(*) as _count FROM sdb_purchase_po AS p LEFT JOIN sdb_purchase_po_items AS i ON p.po_id=i.po_id LEFT JOIN (SELECT bp.product_id,bp.branch_id FROM sdb_ome_orders AS o LEFT JOIN sdb_ome_order_items AS oi ON o.order_id=oi.order_id LEFT JOIN sdb_ome_branch_product AS bp ON oi.product_id=bp.product_id WHERE o.ship_status IN('0','2') AND o.status='active' AND o.process_status in ('unconfirmed','confirmed') AND IFNULL(IF(bp.storedb->selectrow($sql); return $arrive_storelist['_count']; } /** * 在途库存 * @param product_id * @return * @access public * @author cyyr24@sina.cn */ function getArrivestorelist($product_id,$pagelimit,$offset) { $sql = "SELECT SUM(i.num-i.in_num) AS arrive_store,p.arrive_time FROM sdb_purchase_po AS p LEFT JOIN sdb_purchase_po_items AS i ON p.po_id=i.po_id LEFT JOIN (SELECT bp.product_id,bp.branch_id FROM sdb_ome_orders AS o LEFT JOIN sdb_ome_order_items AS oi ON o.order_id=oi.order_id LEFT JOIN sdb_ome_branch_product AS bp ON oi.product_id=bp.product_id WHERE o.ship_status IN('0','2') AND o.status='active' AND o.process_status in ('unconfirmed','confirmed') AND IFNULL(IF(bp.storedb->select($sql); return $arrive_storelist; } /** * 缺货数量 * @param int product_lack * @return * @access public * @author cyyr24@sina.cn */ function modifier_product_lack($row) { return "
$row
"; } } ?>