'iso_items'); var $key = 0; var $import_nums = 0; var $import_flag = true; //var $mark = array(); var $defaultOrder = array('create_time DESC ,iso_id DESC'); #导入或导出商品标题格式 static $bill_type = array( 'b2b' => 'B2B出入库单', 'branchinventory' => '大仓盘点调整单', 'storeinventory' => '门店盘点调整单', 'o2otransfer' => '门店调拨单', 'transfer' => '大仓调拨单', 'replenishment' => '门店订货单', 'returnnormal' => '门店退仓单', 'try_drink' => '门店试饮入库单', 'demo' => '门店陈列入库单', 'workorder' => '加工单', 'branchadjust' => '大仓库存调整', 'storeadjust' => '门店库存调整', 'branchadjust_init' => '大仓库存初始化', 'storeadjust_init' => '门店库存初始化', 'headless' => '无头件入库', 'prtostore' => 'PR仓配门店', 'prtoperson' => 'PR仓配个人', 'asn' => 'ASN出入库单', 'oms_reship_diff' => '差异退货入库', 'oms_reshipdiffout' => '差异退货出库', 'vopjitrk' => '唯品会JIT入库单', 'o2oprepayed'=> '门店预订单', 'jdlreturn' => '京东自营', ); #出库模板 private $temple_out = array( '*:单据号' => 'iso_no',//编号关联商品,支持一次导入多张出库单 '*:出库单名称' => 'name',//出入库单名称 '*:是否紧急出库' => 'emergency', '*:供应商' => 'supplier_name', '*:出货仓库' => 'branch_id', '*:出库类型' => 'type_id', '*:出库费用'=>'iso_price', '*:经办人' => 'oper', '*:备注'=>'memo', '*:外部仓库'=>'extrabranch', '*:业务类型'=>'bill_type', '*:业务单号'=>'business_bn', '*:货号' => 'bn', '*:货品名称'=>'product_name', '*:货品条形码'=>'barcode', '*:数量'=>'nums', '*:价格'=>'price', '*:收货地址省份'=>'area_state', '*:收货地址城市'=>'area_city', '*:收货地址区/县'=>'area_district', '*:收货人详细地址'=>'extra_ship_addr', '*:收货人姓名'=>'extra_ship_name', '*:收货人手机'=>'extra_ship_mobile', ); #入库模板 private $temple_in = array( '*:单据号' => 'iso_no',//编号关联商品,支持一次导入多张入库单 '*:入库单名称' => 'name',//出入库单名称 '*:是否紧急入库' => 'emergency', '*:供应商' => 'supplier_name', '*:入库仓库' => 'branch_id', '*:入库类型' => 'type_id', '*:入库费用'=>'iso_price', '*:经办人' => 'oper', '*:备注'=>'memo', '*:外部仓库'=>'extrabranch', '*:业务类型'=>'bill_type', '*:业务单号'=>'business_bn', '*:货号' => 'bn', '*:货品名称'=>'product_name', '*:货品条形码'=>'barcode', '*:数量'=>'nums', '*:价格'=>'price', '*:发货地址省份'=>'area_state', '*:发货地址城市'=>'area_city', '*:发货地址区/县'=>'area_district', '*:发货人详细地址'=>'extra_ship_addr', '*:发货人姓名'=>'extra_ship_name', '*:发货人手机'=>'extra_ship_mobile', ); private $item = array( '*:单据号' => 'iso_no',//编号关联商品,支持一次导入多张单据 '*:货号' => 'bn', '*:货品名称'=>'product_name', '*:货品条形码'=>'barcode', '*:数量'=>'nums', '*:价格'=>'price' ); #这是用来转换数据的属性 private $relation_iso = array( 0=>'name', 1=>'emergency', 2=>'supplier_name', 3=>'branch_id', 4=>'type_id', 5=>'iso_price', 6=>'oper', 7=>'memo', 8=>'extrabranch', ); #这是用来转换数据的属性 private $relation_item = array( 0=>'bn', 1=>'product_name', 2=>'barcode', 3=>'nums', 4=>'price' ); function modifier_bill_type($col, $list, $row){ $itype = app::get('ome')->model('iso_type')->db_dump(['type_id'=>$row['type_id'], 'bill_type'=>$col], 'bill_type_name'); if($itype['bill_type_name']) { return $itype['bill_type_name']; } return self::$bill_type[$col] ? : $col; } /** * */ function iso_items($iso_id) { $eoObj = $this->app->model("iso_items"); $rows['items'] = $eoObj->getList('product_name as name,nums as num,bn,price',array('iso_id'=>$iso_id)); $total_num = 0; $total_price = 0; foreach($rows['items'] as $v){ $total_num += intval($v['num']); $total_price += intval($v['num'])*floatval($v['price']); } $rows['total_num'] = $total_num; $rows['total_price'] = $total_price; return $rows; } #出入库模板 function exportTemplate($filter=null,$iso_type=null){ foreach ($this->io_title($filter) as $v){ $title[] = $v; } return $title; } function io_title( $filter=null,$ioType ='csv'){ if($filter == '1'||$filter == 'temple_in'){ #导出入库模板 $this->oSchema['csv']['iso'] = $this->temple_in; $this->ioTitle[$ioType] = array_keys($this->oSchema['csv']['iso']); }elseif($filter == '0'||$filter == 'temple_out'){ #导出出库模板 $this->oSchema['csv']['iso'] = $this->temple_out; $this->ioTitle[$ioType] = array_keys($this->oSchema['csv']['iso']); }elseif($filter == 'item' ){ #导出出库模板 $this->oSchema['csv']['item'] = $this->item ; $this->ioTitle[$ioType] = array_keys($this->oSchema['csv']['item']); } return $this->ioTitle[$ioType]; } function prepared_import_csv_row($row,$title,&$Tmpl,&$mark,&$newObjFlag,&$msg){ $fileData = $this->import_data; if( !$fileData ){ $fileData = array(); } if(!empty($row)){ //标题栏 $row[0] = trim($row[0]); if(substr($row[0], 0, 2) == '*:'){ if($row[1] == '*:货号'){ $this->import_flag = false; //明细不用判断记录数 } }else{ //一次性最多允许导入100条记录 if($this->import_flag && isset($this->import_nums)){ $this->import_nums++; if($this->import_nums > 100){ unset($this->import_data, $fileData); $error_msg = "导入的数据量过大,请减少到100单或以下!"; echo "";exit; return false; } }elseif($this->import_flag){ $this->import_nums = 0; } } $fileData[ $this->key++] = $row; #获取所有csv导入数据数组 $this->import_data = $fileData; } return null; } function prepared_import_csv_obj($data,&$mark,$Tmpl,&$msg = ''){ return null; } #读取csv数据完成以后处理,处理相关业务, 注意:一次只能一笔出入库 function finish_import_csv() { header("Content-type: text/html; charset=utf-8"); $oBranchProduct = app::get('ome')->model('branch_product'); $ioOrderLib = kernel::single('taoguaniostockorder_iostockorder'); $iso_obj = app::get('taoguaniostockorder')->model('iso'); $item_obj = app::get('taoguaniostockorder')->model('iso_items'); #获取已经定义好的入库数据的标题 if($_GET['io'] == '1'){ $iso_title = $this->temple_in; } #获取已经定义好的出库的标题 if($_GET['io'] == '0'){ $iso_title = $this->temple_out; } #获取所有已读取的csv导入数据 $fileData = $this->import_data; //格式化导入的数据 $dataList = $this->formatImportData($_POST['io'], $fileData, $error_msg); if(!$dataList){ echo "";exit; } //开启事务 kernel::database()->beginTransaction(); foreach ($dataList as $key => $iso_data){ $iso_no = $iso_data['iso_no']; $iso_items = $iso_data['items']; unset($iso_data['iso_no'], $iso_data['items']); //生成出入库单号 // $iostockorder_bn = $ioOrderLib->get_iostockorder_bn($iso_data['type_id']); $iso_data['iso_bn'] = $iso_no; // if(!$iostockorder_bn){ // echo "";exit; // } //insert $this->saveIsoDate($iso_obj, $iso_data); if($iso_data['iso_id']) { //insert items foreach($iso_items as $itemVal){ $itemVal['iso_id'] = $iso_data['iso_id']; $itemVal['iso_bn'] = $iso_data['iso_bn']; unset($itemVal['iso_no']); $result = $item_obj->save($itemVal); if(!$result){ kernel::database()->rollBack(); //回滚 echo "";exit; } } } else { kernel::database()->rollBack(); //回滚 echo "";exit; } } //事务提交 kernel::database()->commit(); unset($fileData, $dataList, $iso_data, $iso_items); return true; } #组织iso数据,并保存数据 function saveIsoDate($iso_obj,&$iso_data){ $iso_data['name'] = $iso_data['name'];#入库单名称 $iso_data['iso_bn'] =$iso_data['iso_bn']; $iso_data['type_id'] = $iso_data['type_id'];#出入库类型 $iso_data['branch_id'] = $iso_data['branch_id'];#出入库仓库 $iso_data['original_bn'] = ''; $iso_data['original_id'] = 0; $iso_data['supplier_id'] = $iso_data['supplier_id']; $iso_data['supplier_name'] = $iso_data['supplier_name'];#供应商 $iso_data['product_cost'] = $iso_data['product_cost'];#商品总额 $iso_data['iso_price'] = $iso_data['iso_price'];#出入库费用 $iso_data['oper'] = $iso_data['oper'];#经办人 $iso_data['create_time'] = time(); $iso_data['operator'] = $iso_data['operator'];#网站操作人员 $iso_data['memo'] = $iso_data['memo'];#备注 $iso_data['emergency'] = $iso_data['emergency'];#是否紧急 $iso_data['bill_type'] = $iso_data['bill_type'];#单据业务类型 $iso_data['business_bn'] = $iso_data['iso_bn'];//导入业务单号使用入库单号 $iso_obj->save($iso_data); return ; } #增加调拨单号的搜索 function searchOptions(){ if($_GET['act'] == 'search_iostockorder' && $_GET['io'] == '1'){ $parentOptions = parent::searchOptions(); $childOptions = array( 'purchase_name'=>app::get('base')->_('采购单名称'), ); return $Options = array_merge($parentOptions,$childOptions); } if($_GET['act'] == 'search_iostockorder' && $_GET['io'] == '0'){ $parentOptions = parent::searchOptions(); $childOptions = array( 'return_name'=>app::get('base')->_('采购退货单名称'), ); return $Options = array_merge($parentOptions,$childOptions); } return parent::searchOptions(); } function _filter($filter,$tableAlias=null,$baseWhere=null){ #采购单名称模糊查询 if(!empty($filter['purchase_name'])){ $purchase_name = trim($filter['purchase_name']); $sql = 'select original_id from sdb_purchase_po po left join sdb_taoguaniostockorder_iso iso on iso.original_id=po.po_id where iso.type_id =\'1\' and po.name like \''.$purchase_name.'%\''; $original_id = $this->db->selectRow($sql); unset($filter['purchase_name']); $where = ' AND type_id=\'1\' and original_id='.$original_id['original_id']; } #采购退货单名称模糊查询 if(!empty($filter['return_name'])){ $name = $filter['return_name']; $sql = 'select original_id from sdb_purchase_returned_purchase returned left join sdb_taoguaniostockorder_iso iso on iso.original_id=returned.rp_id where iso.type_id =\'10\' and returned.name like \''.$name.'%\''; $original_id = $this->db->selectRow($sql); unset($filter['return_name']); $where = ' AND type_id=\'10\' and original_id='.$original_id['original_id']; } if(isset($filter['bn'])){ $itemsObj = app::get('taoguaniostockorder')->model('iso_items'); $items = $itemsObj->getlist('iso_id',array('bn'=>$filter['bn'])); if ($items) $isoId= array_map('current', $items); $isoId[] = 0; $where .= ' AND iso_id IN ('.implode(',', $isoId).')'; unset($filter['bn']); } if($filter['iso_bn'] && is_string($filter['iso_bn']) && strpos($filter['iso_bn'], "\n") !== false){ $filter['iso_bn'] = array_unique(array_map('trim', array_filter(explode("\n", $filter['iso_bn'])))); } if($filter['original_bn'] && is_string($filter['original_bn']) && strpos($filter['original_bn'], "\n") !== false){ $filter['original_bn'] = array_unique(array_map('trim', array_filter(explode("\n", $filter['original_bn'])))); } return parent::_filter($filter,$tableAlias,$baseWhere).$where; } function pre_recycle($data=null) { if (is_array($_POST['iso_id'])) { foreach ($_POST['iso_id'] as $key => $val) { $iso = $this->dump($val, 'check_status'); if ($iso['check_status'] == '2') { $this->recycle_msg = '已审核单据不可以删除'; return false; } } return true; } } public function get_Schema() { if( $_GET['ctl']=='admin_iostockorder' && ($_GET['act']=='allocate_iostock' || $_GET['act']=='other_iostock')){ $data = parent::get_Schema(); $data['columns']['original_bn']['filtertype'] = ''; $data['columns']['original_bn']['filterdefault'] = false; foreach($data['in_list'] as $k=>$v){ if(in_array($v,array('original_bn'))){ //unset($data['in_list'][$k]); } } if(isset($data['deafult_in_list']) && is_array($data['deafult_in_list'])){ foreach($data['deafult_in_list'] as $k1=>$v1){ if(in_array($v1,array('original_bn'))){ //unset($data['deafult_in_list'][$k1]); } } } if ($_GET['act']=='other_iostock' && $_GET['app']=='console') { unset($data['columns']['type_id']['type']); if ($_GET['io'] == '1') { $data['columns']['type_id']['type'] = array( '70'=>'直接入库', '50'=>'残损入库', '200'=>'赠品入库', '400'=>'样品入库', '800'=>'分销入库', '11'=>'调拨入库取消', ); }else{ $data['columns']['type_id']['type'] = array( '7'=>'直接出库', '5'=>'残损出库', '100'=>'赠品出库', '300'=>'样品出库', '700'=>'分销出库', ); } } return $data; }else{ return parent::get_Schema(); } } /** * 获得日志类型(non-PHPdoc) * @see dbeav_model::getLogType() */ public function getLogType($logParams) { $type = $logParams['type']; $logType = 'none'; if ($type == 'export') { $logType = $this->exportLogType($logParams); } elseif ($type == 'import') { $logType = $this->importLogType($logParams); } return $logType; } /** * 导出日志类型 * @param Array $logParams 日志参数 */ public function exportLogType($logParams) { $params = $logParams['params']; $type = 'warehouse'; if ($logParams['app'] == 'taoguaniostockorder' && $logParams['ctl'] == 'admin_iostockorder') { if ($logParams['act'] == 'search_iostockorder') { if ($params['type_id'][0] == 1) { $type .= '_enterManager_enterFind'; } else { $type .= '_outManager_outFind'; } } else { $type .= '_enterManager_other'; } } $type .= '_export'; return $type; } /** * 导入操作日志类型 * @param Array $logParams 日志参数 */ public function importLogType($logParams) { $params = $logParams['params']; $type = 'warehouse'; if ($logParams['app'] == 'taoguaniostockorder' && $logParams['ctl'] == 'admin_iostockorder') { $type .= '_other'; } $type .= '_import'; return $type; } /** * 导出明细 * * @param array $list * @param array $colArray * @return array * */ public function getExportDetailV2($list, $colArray) { $iso_id = array_unique(array_column($list, 'iso_id')); if (!$iso_id) { return [$list, $colArray]; } $colArray['e_item_product_name'] = ['label' => '基础物料名称']; $colArray['e_item_bn'] = ['label' => '基础物料编码']; $colArray['e_item_partcode'] = ['label' => '备件条码']; $colArray['e_item_unit'] = ['label' => '单位']; $colArray['e_item_nums'] = ['label' => '申请数量']; $colArray['e_item_normal_num'] = ['label' => '良品数量']; $colArray['e_item_defective_num'] = ['label' => '不良品数量']; $list = array_column($list, null, 'iso_id'); $mdl = app::get('taoguaniostockorder')->model('iso_items'); $baseMaterialMdl = app::get('material')->model('basic_material'); $isoItemList = $mdl->getList('*', array('iso_id|in' => $iso_id)); $productIds = array_unique(array_column($isoItemList, 'product_id')); $baseMaterialList = $baseMaterialMdl->getList('bm_id,material_bn,material_name', ['bm_id' => $productIds]); $baseMaterialList = array_column($baseMaterialList, null, 'bm_id'); $listV2 = []; foreach ($isoItemList as $item) { $l = array_merge((array)$list[$item['iso_id']], [ 'e_item_product_name' => isset($baseMaterialList[$item['product_id']]) ? $baseMaterialList[$item['product_id']]['material_name'] : '', 'e_item_bn' => $item['bn'], 'e_item_partcode' => $item['partcode'], 'e_item_unit' => $item['unit'], 'e_item_nums' => $item['nums'], 'e_item_normal_num' => $item['normal_num'], 'e_item_defective_num' => $item['defective_num'], ]); // 兼容导出数据,过滤掉特殊符号 // $l = array_map(function($v) { // $v = str_replace([',',"\r\n", "\r", "\n"],[',',' ',' ',' '],$v ); // }, $l); $listV2[] = $l; } return [$listV2, $colArray]; } // public function getexportdetail($fields,$filter,$offset=0,$limit=1,$has_title=false){ // $iso = $this->getList('iso_id,iso_bn', array('iso_id|in'=>$filter['iso_id'])); // $aIso = array(); // foreach($iso as $val){ // $aIso[$val['iso_id']] = $val['iso_bn']; // } // $objItems = $this->app->model('iso_items'); // $items = $objItems->getList('*', array('iso_id|in'=>$filter['iso_id'])); // $inList = $objItems->schema['in_list']; // $data = array(); // foreach($items as $k => $val) { // $data[$k+1] = ''; // foreach($inList as $value){ // if(strpos($val[$value], ',') !== false){ // $val[$value] = str_replace(',', '-', $val[$value]); // } // $data[$k+1] .= mb_convert_encoding($val[$value], 'GBK', 'UTF-8') . ','; // } // trim($data[$k+1], ','); // } // if($data && $has_title){ // $data[0] = ''; // foreach($inList as $value){ // $data[0] .= mb_convert_encoding($objItems->schema['columns'][$value]['label'], 'GBK', 'UTF-8') . ','; // } // trim($data[0], ','); // } // ksort($data); // return $data; // } /** * 格式化导入的数据 */ public function formatImportData($io_type, $fileData, &$error_msg){ $branch_obj = app::get('ome')->model('branch'); $iostock_type_obj = app::get('ome')->model('iostock_type'); $extrabranchObj = app::get('ome')->model('extrabranch'); $supplier_obj = app::get('purchase')->model('supplier'); $oBranchProduct = app::get('ome')->model('branch_product'); $ioOrderLib = kernel::single('taoguaniostockorder_iostockorder'); $productLib = kernel::single('ome_goods_product'); $basicMaterialObj = app::get('material')->model('basic_material'); $basicMaterialExtObj = app::get('material')->model('basic_material_ext'); $basicMaterialBarcode = kernel::single('material_basic_material_barcode'); //操作人员 $operator = kernel::single('desktop_user')->get_name(); //入库类型 $arr_iso_type = $ioOrderLib->get_create_iso_type($io_type, true); //标题 if($io_type == '1'){ $iso_title = $this->temple_in; }else{ $iso_title = $this->temple_out; } //检查第一行标题 if(substr($fileData[0][0], 0, 2) == '*:' ){ if(count($fileData[0]) != count($iso_title)){ $error_msg = '第一行标题列数不正确!'; return false; } //检查csv导入的标题是否存在于已定义的iso标题中 foreach($fileData[0] as $title){ if(!array_key_exists($title, $iso_title)){ $error_msg = '标题错误: ' .$title. '!'; return false; } } }else{ $error_msg = '第一行不是标题!'; return false; } $titleList = $fileData[0]; unset($fileData[0]); //字段名 $relation_iso = array_values($iso_title); //主数据 $iso_data = array(); foreach($fileData as $key => $dataVal){ //遇到货品标题则跳出 if(substr($dataVal[0], 0, 2) == '*:'){ break; } //整理数据 $item = array(); foreach ($dataVal as $key_i => $val) { //格式化字段名对应值 $iso_key = $relation_iso[$key_i]; //过滤空格和全角空格 $val = str_replace(array("\r\n", "\r", "\n", ' ', ' ', "\t"), '', $val); $item[$iso_key] = $val; } unset($val); //单据号 $iso_no = trim($item['iso_no']); //判断单据号 if($iso_data[$iso_no]){ $error_msg = '单据号:'. $iso_no .' 已经存在,请不要重复使用!'; return false; } $iso_data[$iso_no] = $item; //入库类型 $type_id = $iostock_type_obj->getList('type_id', array('type_name'=>$item['type_id'])); if(empty($type_id[0]['type_id'])){ $error_msg = '出入库类型不能为空,单据号:'. $iso_no; return false; } if(false === array_search($type_id[0]['type_id'], $arr_iso_type)){ $error_msg = '出入库类型没有找到,单据号:'. $iso_no; return false; } $iso_data[$iso_no]['type_id'] = $type_id[0]['type_id']; //外部仓库 if(empty($item['extrabranch'])){ $error_msg = '外部仓库不能为空,单据号:'. $iso_no; return false; } $extrabranch = $extrabranchObj->dump(array('name'=>$item['extrabranch']), 'branch_id'); if(!empty($extrabranch)){ $iso_data[$iso_no]['extrabranch_id'] = $extrabranch['branch_id']; } $iso_data[$iso_no]['extrabranch_bn'] = $item['extrabranch']; //供应商(todo:供应商非必填) if(!empty($item['supplier_name'])){ $supplier_id = $supplier_obj->getList('supplier_id', array('name'=>$item['supplier_name'])); if(empty($supplier_id[0]['supplier_id'])){ $error_msg = '供应商没有找到,单据号:'. $iso_no; return false; } $iso_data[$iso_no]['supplier_id'] = $supplier_id[0]['supplier_id']; } //操作人员 $operator = $operator ? $operator : 'system'; $iso_data[$iso_no]['operator'] = $operator; //出入库费用 if(empty($item['iso_price'])){ $iso_data[$iso_no]['iso_price'] = 0; }else{ $_iso_price = $productLib->valiPositive($item['iso_price']); if(!$_iso_price){ $error_msg = '出入库费用必须大于等于0,单据号:'. $iso_no; return false; } } //检测是否紧急数据 if($item['emergency'] == '是'){ $iso_data[$iso_no]['emergency'] = 'true'; }elseif($item['emergency'] == '否'){ $iso_data[$iso_no]['emergency'] = 'false'; }else{ $error_msg = '请填写是否紧急:是/否,单据号:'. $iso_no; return false; } //出入库仓库 $branch_id = $branch_obj->getList('branch_id,type', array('name'=>$item['branch_id'])); if(empty($branch_id[0]['branch_id'])){ $error_msg = '请填写正确的仓库名称,单据号:'. $iso_no; return false; } //判断是否残损 if (in_array($branch_id[0]['type'], array('damaged')) || in_array($type_id[0]['type_id'], array('5', '50'))) { if ($branch_id[0]['type'] == 'damaged' && !in_array($type_id[0]['type_id'], array('5','50'))){ $error_msg = '残损出入库和仓库类型必须一致,单据号:'. $iso_no; return false; } if($branch_id[0]['type'] != 'damaged' && in_array($type_id[0]['type_id'], array('5','50'))) { $error_msg = '残损出入库和仓库类型必须一致,单据号:'. $iso_no; return false; } } $iso_data[$iso_no]['branch_id'] = $branch_id[0]['branch_id']; //单据业务类型 $iso_data[$iso_no]['bill_type'] = $item['bill_type']; unset($fileData[$key]); } //item标题 $item_title = $this->item; $itemTitles = array_shift($fileData); $itemTitles = array_filter($itemTitles); if(substr($itemTitles[0], 0, 2) == '*:' ){ if(count($itemTitles) != count($item_title)){ $error_msg = '货品标题列数不正确!'; return false; } //检查货品标题字段 foreach($itemTitles as $title){ if(!array_key_exists($title, $item_title)){ $error_msg = '货品标题错误: ' .$title. '!'; return false; } } }else{ $error_msg = '货品标题不存在!'; return false; } //item字段名 $relation_item = array_values($item_title); //items明细 foreach($fileData as $key => $dataVal){ //整理数据 $item = array(); $dataVal = array_filter($dataVal); foreach ($dataVal as $key_i => $val){ //格式化字段名对应值 $item_key = $relation_item[$key_i]; $item[$item_key] = $val; } unset($val); $iso_no = trim($item['iso_no']);//单据号 $bn = trim($item['bn']);//货号 //check if(empty($bn)){ $error_msg = '单据号:'. $iso_no .' 货号不能为空!'; return false; } if(empty($iso_data[$iso_no])){ $error_msg = '单据号:'. $iso_no .' 主数据不存在!'; return false; } if ($iso_data[$iso_no]['items'][$bn]) { $error_msg = '单据号:'. $iso_no .',货号: '. $bn .' 已经存在!'; return false; } //基础物料主信息 $productInfo = $basicMaterialObj->dump(array('material_bn'=>$bn), '*'); if(empty($productInfo)){ $error_msg = '单据号:'. $iso_no .',货号: '. $bn .' 不存在!'; return false; } //基础物料扩展信息 $bMaterialRow = $basicMaterialExtObj->dump(array('bm_id'=>$productInfo['bm_id']), 'retail_price'); //基础物料条形码 $productInfo['barcode'] = $basicMaterialBarcode->getBarcodeById($productInfo['bm_id']); $productInfo['price'] = $bMaterialRow['retail_price']; $item['product_id'] = $productInfo['bm_id']; //条形码 if(!empty($item['barcode'])){ if($item['barcode'] != $productInfo['barcode']){ $error_msg = '单据号:'. $iso_no .',货号: '. $bn .' 条形码不存在!'; return false; } }else{ //直接赋值条形码 $item['barcode'] = $productInfo['barcode']; } //数量 $_nums = $productLib->valiPositive($item['nums']); if(!$_nums){ $error_msg = '单据号:'. $iso_no .',货号: '. $bn .' 数量必须大于0!'; return false; } $item['nums'] = intval($item['nums']); //价格 if($item['price']){ $_price = $productLib->valiPositive($item['price']); if(!$_price){ $error_msg = '单据号:'. $iso_no .',货号: '. $bn .' 价格必须大于等于0!'; return false; } }else{ $_price = (float)$productInfo['price']; } $item['price'] = (float)$item['price']; //出库时,检查库存 if($io_type == '0'){ $aRow = $oBranchProduct->dump(array('product_id'=>$productInfo['bm_id'], 'branch_id'=>$iso_data[$iso_no]['branch_id']), 'store'); $store = $aRow['store']; if(empty($store)){ $error_msg = '单据号:'. $iso_no .',货号: '. $bn .' 出库仓库没有该货号库存!'; return false; } if($item['nums'] > $aRow['store']){ $error_msg = '单据号:'. $iso_no .',货号: '. $bn .' 出库数量不能大于库存数: '. $store .'!'; return false; } } //产品价格与数量乘积 if($iso_data[$iso_no]['total_product_cost']){ $iso_data[$iso_no]['total_product_cost'] += ($item['price'] * $item['nums']); }else{ $iso_data[$iso_no]['total_product_cost'] = ($item['price'] * $item['nums']); } //拼接数据 $item['unit'] = ''; $iso_data[$iso_no]['items'][$bn] = $item; unset($fileData[$key]); } return $iso_data; } }