io_title($filter) as $v){ $title[] = kernel::single('base_charset')->utf2local($v); } return $title; } function io_title( $filter, $ioType='csv' ){ switch( $filter ){ case 'main': $this->oSchema[$ioType][$filter] = array( '*:仓库编号' => 'branch_bn', '*:盘点单号' => 'original_bn', '*:经手人' => 'oper', '*:备注' => 'memo', ); break; case 'item': $this->oSchema[$ioType][$filter] = array( '*:货号' => 'bn', '*:盘点数量' => 'nums', '*:单价' => 'price', ); break; } $this->ioTitle[$ioType][$filter] = array_keys( $this->oSchema[$ioType][$filter] ); return $this->ioTitle[$ioType][$filter]; } //判断是否为本操作所需的csv文件 function check_csv($title){ $arrFrom = array_flip(array_filter(array_flip($title))); $this->io_title('main'); $this->io_title('item'); $arrFieldsAll = array_merge($this->oSchema['csv']['main'],$this->oSchema['csv']['item']); $arrResult = array_diff_key($arrFrom,$arrFieldsAll); return empty($arrResult) ? true : false; } function prepared_import_csv(){ $this->ioObj->cacheTime = time(); } function prepared_import_csv_row($row,$title,&$tmpl,&$mark,&$newObjFlag,&$msg){ if (empty($row)){ return false; } $mark = false; $fileData = $this->import_data; if( !$fileData ) $fileData = array(); if( substr($row[0],0,1) == '*' ){ $titleRs = array_flip($row); $mark = 'title'; if(!$this->check_csv($titleRs)){ $msg['error'] = "导入的csv文件字段与本操作所需不符,请使用正确的csv文件。"; } return $titleRs; }else{ //去除空行 if(!count(array_filter($row))){ return false; } if( $row[0] or $row[0]== 0){ if(array_key_exists('*:盘点单号',$title)){ //主表记录 $this->io_title('main'); isset($this->mainItem) ? $this->mainItem++ : $this->mainItem = 0; isset($this->delivery) ? '' : $this->delivery = $row[1]; if($this->mainItem){ $msg['error'] = '主数据不唯一,一次只能有一条主数据'; return false; }elseif(!app::get('ome')->model('branch')->dump(array('branch_bn'=>$row[0]))){ $msg['error'] = $row[0] . "仓库不存在,请重新维护导入数据"; return false; }elseif(strlen($row[1]) > 32){ $msg['error'] = $row[0] . "盘点单号格式有误,数据过长,请重新维护导入数据"; return false; } $this->io_title('main'); foreach(array_values($this->oSchema['csv']['main']) as $key=>$field){ $fileData['main'][$this->mainItem][$field] = $row[$key]; } } elseif(array_key_exists('*:货号',$title)) { //详细记录 if(isset($this->detail_Items)){ $this->detail_Items++; } else { $this->detail_Items = 1; } if(!isset($this->mainItem)){ $msg['error'] = '主数据不能为空,请重新维护数据'; return false; } //校验明细项目数据是否存在 if(!app::get('material')->model('basic_material')->dump(array('material_bn'=>$row[0]))){ //检验盘点商品是否存在 $msg['error'] = ($this->detail_Items+3) . "行货号不存在"; return false; } if(!is_numeric($row[1])){ $msg['error'] = '盘点数量必须为数字'; return false; }elseif($row[1] < 0){ //检验盘点数量是否为负数 $msg['error'] = $row[0] . "商品盘点数量不能为负数,请重新维护数据"; return false; }elseif(intval($row[1])!=$row[1]){ $msg['error'] = "商品盘点数量必须为整数"; return false; } if(empty($row[2])){ $msg['error'] = "商品价格必须存在,且大于零"; return false; }elseif(!is_numeric($row[2])){ $msg['error'] = '商品单价必须为数字'; return false; }elseif($row[2] < 0 ){ //检验单价数据值 $msg['error'] = $row[0] . "商品盘点单价不能为负数,请重新维护数据"; return false; } $this->io_title('item'); foreach(array_values($this->oSchema['csv']['item']) as $key=>$field){ $fileData['item'][($this->detail_Items-1)][$field] = $row[$key]; } } $this->import_data = $fileData; }else{ $msg['error'] = "仓库编号和货号不能为空,请重新维护数据"; return false; } } return null; } function prepared_import_csv_obj($data,$mark,$goodsTmpl,&$msg = ''){ return null; } function finish_import_csv(){ $data = $this->import_data; //事务操作的数据的准备 $iostockData = array(); $iostockLess = array(); $iostockMore = array(); $operator = kernel::single('desktop_user')->get_name();//当前操作用户名 $branch = app::get('ome')->model('branch')->dump(array('branch_bn'=>$data['main'][0]['branch_bn']),'branch_id'); $branch_id = $branch['branch_id']; $basicMaterialObj = app::get('material')->model('basic_material'); $iostockObj = kernel::service('ome.iostock'); $type_less = ome_iostock::INVENTORY;//盘亏 $type_more = ome_iostock::OVERAGE;//盘盈 //事务开启 kernel::single('base_controller')->begin(); foreach($data as $key=>$val){ foreach($val as $item=>$value){ $iostockData[$item]['branch_id'] = $branch_id; $iostockData[$item]['original_bn'] = $data['main'][0]['original_bn']; $iostockData[$item]['oper'] = $data['main'][0]['oper']; $iostockData[$item]['operator'] = $operator; $iostockData[$item]['memo'] = $data['main'][0]['memo']; $iostockData[$item]['bn'] = $data['item'][$item]['bn']; $iostockData[$item]['iostock_price'] = $data['item'][$item]['price']; //判断是盘亏还是盘盈,并分别存储 $product = $basicMaterialObj->dump(array('material_bn'=>$data['item'][$item]['bn']),'bm_id'); $product_id = $product['bm_id']; $store = app::get('ome')->model('branch_product')->dump(array('branch_id'=>$branch_id,'product_id'=>$product_id),'store'); if($store['store'] < $data['item'][$item]['nums'] && $key=='item'){ $iostockData[$item]['nums'] = $data['item'][$item]['nums']-$store['store']; $iostockData[$item]['type_id'] = $type_more; array_push($iostockMore,$iostockData[$item]); }elseif($store['store'] > $data['item'][$item]['nums'] && $key=='item'){ $iostockData[$item]['nums'] = $store['store']-$data['item'][$item]['nums']; $iostockData[$item]['type_id'] = $type_less; array_push($iostockLess,$iostockData[$item]); } } } if(count($iostockLess)){ $iostock_bn_less = $iostockObj->get_iostock_bn($type_less); //当前盘亏操作出入库编号 if(!$iostockObj->set($iostock_bn_less,$iostockLess,$type_less,$msg,0)){ if($msg == ''){ return null; }else{ $msg_arr = implode('\n',$msg); } kernel::single('base_controller')->end(false,app::get('base')->_('出入库事务盘亏操作失败')); header("content-type:text/html; charset=utf-8"); echo ""; } } if(count($iostockMore)){ $iostock_bn_more = $iostockObj->get_iostock_bn($type_more); //当前盘盈操作出入库编号 if(!$iostockObj->set($iostock_bn_more,$iostockMore,$type_more,$msg,1)){ if($msg == ''){ return null; }else{ $msg_arr = implode('\n',$msg); } kernel::single('base_controller')->end(false,app::get('base')->_('出入库事务盘盈操作失败')); header("content-type:text/html; charset=utf-8"); echo ""; } } kernel::single('base_controller')->end(true,app::get('base')->_('成功')); if(empty($msg)){ $_SESSION['bn_more'] = $iostock_bn_more; $_SESSION['bn_less'] = $iostock_bn_less; } return null; } }