success('请求成功'); } /** * vocs * 创建 */ public function vocs() { $req=$this->request->param(); $time = date('Y/m/d H:i:s'); $rows = $req; $lx = explode(',',$req[0]); if(count($lx)>1){ $res['company'] = $lx[1]; $res['machine_no'] = $lx[2]; } if($lx[0]=='C'){ //查询匹配主表数据 foreach($rows as $k=>$v){ preg_match('/数据文件/', $v, $matches); if(count($matches)){ $res['data_txt_name'] = trim(substr($v,strripos($v,'\\')+1)); unset($rows[$k]); break; } } // //判断数据是否是ABCD开头 // preg_match('/^[A,B,C,D]/', $res['data_txt_name'], $matches); // if(!count($matches)){ // Log::init([ // // 日志记录方式,支持 file socket // 'type' => 'File',//type的值为test时临时关闭日志写入 // //日志保存目录 // 'path' => APP_PATH.'../runtime/log/notABCD/', // //单个日志文件的大小限制,超过后会自动记录到第二个文件 // 'file_size' =>2097152, // //日志的时间格式,默认是` c ` // 'time_format' =>'c', // 'level' => ['log'], // ]); // Log::record(['失败'=>'样品编号为'.$res['data_txt_name'].'数据插入失败','原因'=>'该文件编号不以ABCD开头']); // return $this->success('数据文件不以A、B、C、D开头,已记录日志',$req,0); // } foreach($rows as $k=>$v){ preg_match('/样品名称/', $v, $matches); if(count($matches)){ $res['name'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/仪器/', $v, $matches); if(count($matches)){ $res['remak'] = trim($v); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/操作者/', $v, $matches); if(count($matches)){ $res['author'] = trim(substr($v,stripos($v,':')+1,strripos($v,'序列号')-1-stripos($v,':'))); $res['line'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/仪器/', $v, $matches); if(count($matches)){ $res['instrument'] = trim(substr($v,stripos($v,':')+1,strripos($v,'位置')-1-stripos($v,':'))); $res['position'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/进样日期/', $v, $matches); if(count($matches)){ $res['in_date'] = trim(substr($v,stripos($v,':')+1,strripos($v,'进样次数')-1-stripos($v,':'))); $res['in_times'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/进样量/', $v, $matches); if(count($matches)){ $res['in_type'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/采集方法/', $v, $matches); if(count($matches)){ $res['gather_method'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); foreach($rows as $k=>$v){ preg_match('/最后修改/', $v, $matches); if(count($matches)){ $res['update_date_one'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/分析方法/', $v, $matches); if(count($matches)){ $res['analysis_method'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/最后修改/', $v, $matches); if(count($matches)){ $res['update_date_two'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/方法信息/', $v, $matches); if(count($matches)){ $res['method_info'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/附加信息/', $v, $matches); if(count($matches)){ $res['add_info'] = trim(mb_substr($v,5)); unset($rows[$k]); break; } } break; } } foreach($rows as $k=>$v){ preg_match('/序列文件/', $v, $matches); if(count($matches)){ $res['sequence_file'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); foreach($rows as $k=>$v){ preg_match('/方法/', $v, $matches); if(count($matches)){ $res['method'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/最后修改/', $v, $matches); if(count($matches)){ $res['update_date_two'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/方法信息/', $v, $matches); if(count($matches)){ $res['method_info'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/附加信息/', $v, $matches); if(count($matches)){ $res['add_info'] = trim(mb_substr($v,5)); unset($rows[$k]); break; } } break; } } foreach($rows as $k=>$v){ preg_match('/排序/', $v, $matches); if(count($matches)){ $res['sort'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/校正数据修改时间/', $v, $matches); if(count($matches)){ $res['check_data_time'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/乘积因子/', $v, $matches); if(count($matches)){ $res['sample_product_factor'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/稀释因子/', $v, $matches); if(count($matches)){ $res['dilution_factor'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/信号/', $v, $matches); if(count($matches)){ $res['signal_one'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } $res['machine'] = 'GC'; $res['create'] = $time; //查询记录是否存在 $bool = db()->name('gather_txt_gc')->where('data_txt_name',$res['data_txt_name'])->find(); if($bool){ return '已存在'; } //开启事务 db()->startTrans(); try { //连接数据库, 将数据插入主表gather_txt_gc取得pid $pid = db()->name('gather_txt_gc')->insertGetId($res); //获取子表开始结束索引 $srart = $end = 0; $rows = array_values($rows); foreach($rows as $k=>$v){ preg_match('/-------/', $v, $matches); if(count($matches)){ $srart = $k; break; } } foreach($rows as $k=>$v){ preg_match('/总量/', $v, $matches); if(count($matches)){ $end = $k; break; } } //截取数据 $arr = array_slice($rows,$srart+1,$end-$srart-1); foreach($arr as $k=>$v){ preg_match('/\?/', $v, $matches); if(count($matches)){ unset($arr[$k]); }else{ $arr[$k] = preg_split('/\s+/', $v); } } $arr = array_values($arr); //处理数据 $row = []; foreach ($arr as $k=>$v){ if (count($v)==6){ $row[$k]['pid'] = $pid; $row[$k]['time'] = $v[0]; $row[$k]['type'] = $v[1]; $row[$k]['peak_area'] = $v[2]; ($v[2] == '-')?$row[$k]['peak_area'] = '-':$row[$k]['peak_area'] = floatval($v[2]); ($v[3] == '-')?$row[$k]['val'] = '-':$row[$k]['val'] = floatval($v[3]); ($v[4] == '-')?$row[$k]['potency'] = '-':$row[$k]['potency'] = floatval($v[4]); preg_match('/邻(-)?二甲苯$/', $v[5], $matches); if(count($matches)){ $row[$k]['chemical_compound'] = '邻-二甲苯'; } preg_match('/间(、)?对二甲苯$/', $v[5], $matches); if(count($matches)){ $row[$k]['chemical_compound'] = '间对二甲苯'; } if(!array_key_exists('chemical_compound',$row[$k])){ $row[$k]['chemical_compound'] = $v[5]; } $row[$k]['create'] = $time; }else{ $row[$k]['pid'] = $pid; $row[$k]['time'] = $v[0]; $row[$k]['type'] = ''; ($v[1] == '-')?$row[$k]['peak_area'] = '-':$row[$k]['peak_area'] = floatval($v[1]); ($v[2] == '-')?$row[$k]['val'] = '-':$row[$k]['val'] = floatval($v[2]); ($v[3] == '-')?$row[$k]['potency'] = '-':$row[$k]['potency'] = floatval($v[3]); preg_match('/邻(-)?二甲苯$/', $v[4], $matches); if(count($matches)){ $row[$k]['chemical_compound'] = '邻-二甲苯'; } preg_match('/间(、)?对二甲苯$/', $v[4], $matches); if(count($matches)){ $row[$k]['chemical_compound'] = '间对二甲苯'; } if(!array_key_exists('chemical_compound',$row[$k])){ $row[$k]['chemical_compound'] = $v[4]; } $row[$k]['create'] = $time; } } //将检测数据插入子表gather_txt_check_gc db()->name('gather_txt_check_gc')->insertAll($row); //去除数据文件名称后面的字母和. $sample_no = preg_replace('/[a-zA-Z\.]+\s*$/', '', $res['data_txt_name']); //查询entrust表中是否存在, 如果存在修改状态 if(db()->name('entrust')->where('sample_no',$sample_no)->find()){ db()->name('entrust')->where('sample_no',$sample_no)->update(['data_status'=>1]); } //提交事务 db()->commit(); Log::record(['成功'=>'样品编号为'.$res['data_txt_name'].'数据插入成功']); return json_encode(['code'=>'0','msg'=>'成功','time'=>$time,'data'=>[$res,$row]]); } catch (\Exception $e){ //失败回滚 db()->rollback(); Log::record(['失败'=>'样品编号为'.$res['data_txt_name'].'数据插入失败','原因'=>$e->getMessage()]); return $e->getMessage(); } }else{ foreach($rows as $k=>$v){ preg_match('/样品/', $v, $matches); if(count($matches)){ $bach = ''; $string = trim(substr($v,stripos($v,':')+1)); if (preg_match('/\w*\d+-?\d?\.?\d*$/', $string, $matches)) { $bach = $matches[0]; } $name = str_replace($bach,'',$string); $res['name'] = $name; $res['bach'] = $bach; unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/数据路径/', $v, $matches); if(count($matches)){ $res['data_txt_path'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/数据文件/', $v, $matches); if(count($matches)){ $res['data_txt_name'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/采集/', $v, $matches); if(count($matches)){ $res['gather_time'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/操作者/', $v, $matches); if(count($matches)){ $res['author'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/其他/', $v, $matches); if(count($matches)){ $res['other'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/样品瓶/', $v, $matches); if(count($matches)){ $res['ALS'] = trim(substr($v,stripos($v,':')+1,strripos($v,'样品乘积因子')-1-stripos($v,':'))); $res['sample_product_factor'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/定量时间/', $v, $matches); if(count($matches)){ $res['quantify_time'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/定量方法标题/', $v, $matches); if(count($matches)){ $res['title'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/定量方法/', $v, $matches); if(count($matches)){ $res['quantify_method'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/上一次定量更新/', $v, $matches); if(count($matches)){ $res['last_quantify_time'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/响应方式/', $v, $matches); if(count($matches)){ $res['response'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } $res['machine'] = 'GCMS'; $res['create'] = $time; //查询记录是否存在 $bool = db()->name('gather_txt_gcms')->where('data_txt_name',$res['data_txt_name'])->find(); if($bool){ return '已存在'; } //开启事务 db()->startTrans(); try { //连接数据库, 将数据插入主表gather_txt_gc取得pid $pid = db()->name('gather_txt_gcms')->insertGetId($res); //获取子表开始结束索引 $srart = $end = 0; $rows = array_values($rows); foreach($rows as $k=>$v){ preg_match('/-------/', $v, $matches); if(count($matches)){ $srart = $k; break; } } foreach($rows as $k=>$v){ preg_match('/--------/', $v, $matches); if(count($matches)){ $end = $k; break; } } //截取数据 $arr = array_slice($rows,$srart+1,$end-$srart-1); foreach($arr as $k=>$v){ $v = trim($v); preg_match('/^\d/', $v, $matches); if(count($matches)){ $arr[$k] = preg_split('/\s+/', $v); }else{ unset($arr[$k]); } } $arr = array_values($arr); //处理数据 $row = []; foreach ($arr as $k=>$v){ if (count($v)==8){ $row[$k]['pid'] = $pid; $row[$k]['chemical_compound'] = $v[1]; $row[$k]['persist_time'] = $v[2]; $row[$k]['quantitative_ion'] = $v[3]; $row[$k]['response_value'] = $v[4]; $row[$k]['potency'] = $v[5]; preg_match('/#/', $v[6], $matches); if(count($matches)){ $unit = str_replace('#', '', $v[6]); $row[$k]['unit'] = $unit; $row[$k]['deviation'] = '#'; }else{ $row[$k]['unit'] = $v[6]; $row[$k]['deviation'] = ''; } $row[$k]['quanlitative_ion'] = $v[7]; $row[$k]['create'] = $time; }else{ $row[$k]['pid'] = $pid; $row[$k]['chemical_compound'] = $v[1]; $row[$k]['persist_time'] = $v[2]; $row[$k]['quantitative_ion'] = $v[3]; $row[$k]['response_value'] = $v[3]; $row[$k]['potency'] = $v[3]; $row[$k]['unit'] = $v[3]; $row[$k]['deviation'] = ''; $row[$k]['quanlitative_ion'] = $v[3]; $row[$k]['create'] = $time; } } //将检测数据插入子表gather_txt_check_gc db()->name('gather_txt_check_gcms')->insertAll($row); //去除数据文件名称后面的字母和. $sample_no = preg_replace('/[a-zA-Z\.]+\s*$/', '', $res['data_txt_name']); //查询entrust表中是否存在, 如果存在修改状态 if(db()->name('entrust')->where('sample_no',$sample_no)->find()){ db()->name('entrust')->where('sample_no',$sample_no)->update(['data_status'=>1]); } //提交事务 db()->commit(); Log::record(['成功'=>'样品编号为'.$res['data_txt_name'].'数据插入成功']); return json_encode(['code'=>'0','msg'=>'成功','time'=>$time,'data'=>[$res,$row]]); } catch (\Exception $e){ //失败回滚 db()->rollback(); Log::record(['失败'=>'样品编号为'.$res['data_txt_name'].'数据插入失败','原因'=>$e->getMessage()]); return $e->getMessage(); } } } /** * vocs * 修改 */ public function updateVocs() { $req=$this->request->param(); $time = date('Y/m/d H:i:s'); $rows = $req; $lx = explode(',',$req[0]); if(count($lx)>1){ $res['company'] = $lx[1]; $res['machine_no'] = $lx[2]; } if($lx[0]=='C'){ //查询匹配主表数据 foreach($rows as $k=>$v){ preg_match('/数据文件/', $v, $matches); if(count($matches)){ $res['data_txt_name'] = trim(substr($v,strripos($v,'\\')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/样品名称/', $v, $matches); if(count($matches)){ $res['name'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/仪器/', $v, $matches); if(count($matches)){ $res['remak'] = trim($v); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/操作者/', $v, $matches); if(count($matches)){ $res['author'] = trim(substr($v,stripos($v,':')+1,strripos($v,'序列号')-1-stripos($v,':'))); $res['line'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/仪器/', $v, $matches); if(count($matches)){ $res['instrument'] = trim(substr($v,stripos($v,':')+1,strripos($v,'位置')-1-stripos($v,':'))); $res['position'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/进样日期/', $v, $matches); if(count($matches)){ $res['in_date'] = trim(substr($v,stripos($v,':')+1,strripos($v,'进样次数')-1-stripos($v,':'))); $res['in_times'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/进样量/', $v, $matches); if(count($matches)){ $res['in_type'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/采集方法/', $v, $matches); if(count($matches)){ $res['gather_method'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); foreach($rows as $k=>$v){ preg_match('/最后修改/', $v, $matches); if(count($matches)){ $res['update_date_one'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/分析方法/', $v, $matches); if(count($matches)){ $res['analysis_method'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/最后修改/', $v, $matches); if(count($matches)){ $res['update_date_two'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/方法信息/', $v, $matches); if(count($matches)){ $res['method_info'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/附加信息/', $v, $matches); if(count($matches)){ $res['add_info'] = trim(mb_substr($v,5)); unset($rows[$k]); break; } } break; } } foreach($rows as $k=>$v){ preg_match('/序列文件/', $v, $matches); if(count($matches)){ $res['sequence_file'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); foreach($rows as $k=>$v){ preg_match('/方法/', $v, $matches); if(count($matches)){ $res['method'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/最后修改/', $v, $matches); if(count($matches)){ $res['update_date_two'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/方法信息/', $v, $matches); if(count($matches)){ $res['method_info'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/附加信息/', $v, $matches); if(count($matches)){ $res['add_info'] = trim(mb_substr($v,5)); unset($rows[$k]); break; } } break; } } foreach($rows as $k=>$v){ preg_match('/排序/', $v, $matches); if(count($matches)){ $res['sort'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/校正数据修改时间/', $v, $matches); if(count($matches)){ $res['check_data_time'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/乘积因子/', $v, $matches); if(count($matches)){ $res['sample_product_factor'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/稀释因子/', $v, $matches); if(count($matches)){ $res['dilution_factor'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/信号/', $v, $matches); if(count($matches)){ $res['signal_one'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } $res['machine'] = 'GC'; $res['create'] = $time; //查询gc表 $id1 = db()->name('gather_txt_gc')->where('data_txt_name',$res['data_txt_name'])->find(); if($id1){ //删除gc表 db()->name('gather_txt_gc')->where('data_txt_name',$res['data_txt_name'])->delete(); //删除子表 db()->name('gather_txt_check_gc')->where('pid',$id1['id'])->delete(); } //查询gcms表 $id2 = db()->name('gather_txt_gcms')->where('data_txt_name',$res['data_txt_name'])->find(); if($id2){ //删除gcms表 db()->name('gather_txt_gcms')->where('data_txt_name',$res['data_txt_name'])->delete(); //删除子表 db()->name('gather_txt_check_gcms')->where('pid',$id2['id'])->delete(); } if($id1 || $id2){ //开启事务 db()->startTrans(); try { //新增 $pid = db()->name('gather_txt_gc')->insertGetId($res); if($pid){ //获取子表开始结束索引 $srart = $end = 0; $rows = array_values($rows); foreach($rows as $k=>$v){ preg_match('/-------/', $v, $matches); if(count($matches)){ $srart = $k; break; } } foreach($rows as $k=>$v){ preg_match('/总量/', $v, $matches); if(count($matches)){ $end = $k; break; } } //截取数据 $arr = array_slice($rows,$srart+1,$end-$srart-1); foreach($arr as $k=>$v){ preg_match('/\?/', $v, $matches); if(count($matches)){ unset($arr[$k]); }else{ $arr[$k] = preg_split('/\s+/', $v); } } $arr = array_values($arr); //处理数据 $row = []; foreach ($arr as $k=>$v){ if (count($v)==6){ $row[$k]['pid'] = $pid; $row[$k]['time'] = $v[0]; $row[$k]['type'] = $v[1]; $row[$k]['peak_area'] = $v[2]; ($v[2] == '-')?$row[$k]['peak_area'] = '-':$row[$k]['peak_area'] = floatval($v[2]); ($v[3] == '-')?$row[$k]['val'] = '-':$row[$k]['val'] = floatval($v[3]); ($v[4] == '-')?$row[$k]['potency'] = '-':$row[$k]['potency'] = floatval($v[4]); preg_match('/邻(-)?二甲苯$/', $v[5], $matches); if(count($matches)){ $row[$k]['chemical_compound'] = '邻-二甲苯'; } preg_match('/间(、)?对二甲苯$/', $v[5], $matches); if(count($matches)){ $row[$k]['chemical_compound'] = '间对二甲苯'; } if(!array_key_exists('chemical_compound',$row[$k])){ $row[$k]['chemical_compound'] = $v[5]; } $row[$k]['create'] = $time; }else{ $row[$k]['pid'] = $pid; $row[$k]['time'] = $v[0]; $row[$k]['type'] = ''; ($v[1] == '-')?$row[$k]['peak_area'] = '-':$row[$k]['peak_area'] = floatval($v[1]); ($v[2] == '-')?$row[$k]['val'] = '-':$row[$k]['val'] = floatval($v[2]); ($v[3] == '-')?$row[$k]['potency'] = '-':$row[$k]['potency'] = floatval($v[3]); preg_match('/邻(-)?二甲苯$/', $v[4], $matches); if(count($matches)){ $row[$k]['chemical_compound'] = '邻-二甲苯'; } preg_match('/间(、)?对二甲苯$/', $v[4], $matches); if(count($matches)){ $row[$k]['chemical_compound'] = '间对二甲苯'; } if(!array_key_exists('chemical_compound',$row[$k])){ $row[$k]['chemical_compound'] = $v[4]; } $row[$k]['create'] = $time; } } //将检测数据插入子表gather_txt_check_gc db()->name('gather_txt_check_gc')->insertAll($row); //去除数据文件名称后面的字母和. $sample_no = preg_replace('/[a-zA-Z\.]+\s*$/', '', $res['data_txt_name']); //查询entrust表中是否存在, 如果存在修改状态 if(db()->name('entrust')->where('sample_no',$sample_no)->find()){ db()->name('entrust')->where('sample_no',$sample_no)->update(['data_status'=>1]); } //提交事务 db()->commit(); Log::record(['成功'=>'样品编号为'.$res['data_txt_name'].'数据修改成功']); return json_encode(['code'=>'0','msg'=>'修改成功','time'=>$time,'data'=>[$res,$row]]); } } catch (\Exception $e){ //失败回滚 db()->rollback(); Log::record(['失败'=>'样品编号为'.$res['data_txt_name'].'数据修改失败','原因'=>$e->getMessage()]); return $e->getMessage(); } }else{ return '找不到记录'; } }else{ foreach($rows as $k=>$v){ preg_match('/样品/', $v, $matches); if(count($matches)){ $bach = ''; $string = trim(substr($v,stripos($v,':')+1)); if (preg_match('/\w*\d+-?\d?\.?\d*$/', $string, $matches)) { $bach = $matches[0]; } $name = str_replace($bach,'',$string); $res['name'] = $name; $res['bach'] = $bach; unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/数据路径/', $v, $matches); if(count($matches)){ $res['data_txt_path'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/数据文件/', $v, $matches); if(count($matches)){ $res['data_txt_name'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/采集/', $v, $matches); if(count($matches)){ $res['gather_time'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/操作者/', $v, $matches); if(count($matches)){ $res['author'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/其他/', $v, $matches); if(count($matches)){ $res['other'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/样品瓶/', $v, $matches); if(count($matches)){ $res['ALS'] = trim(substr($v,stripos($v,':')+1,strripos($v,'样品乘积因子')-1-stripos($v,':'))); $res['sample_product_factor'] = trim(substr($v,strripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/定量时间/', $v, $matches); if(count($matches)){ $res['quantify_time'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/定量方法标题/', $v, $matches); if(count($matches)){ $res['title'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/定量方法/', $v, $matches); if(count($matches)){ $res['quantify_method'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/上一次定量更新/', $v, $matches); if(count($matches)){ $res['last_quantify_time'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } foreach($rows as $k=>$v){ preg_match('/响应方式/', $v, $matches); if(count($matches)){ $res['response'] = trim(substr($v,stripos($v,':')+1)); unset($rows[$k]); break; } } $res['machine'] = 'GCMS'; $res['create'] = $time; //查询gc表 $id1 = db()->name('gather_txt_gc')->where('data_txt_name',$res['data_txt_name'])->find(); if($id1){ //删除gc表 db()->name('gather_txt_gc')->where('data_txt_name',$res['data_txt_name'])->delete(); //删除子表 db()->name('gather_txt_check_gc')->where('pid',$id1['id'])->delete(); } //查询gcms表 $id2 = db()->name('gather_txt_gcms')->where('data_txt_name',$res['data_txt_name'])->find(); if($id2){ //删除gcms表 db()->name('gather_txt_gcms')->where('data_txt_name',$res['data_txt_name'])->delete(); //删除子表 db()->name('gather_txt_check_gcms')->where('pid',$id2['id'])->delete(); } if($id1 || $id2){ //开启事务 db()->startTrans(); try { //新增 $pid = db()->name('gather_txt_gcms')->insertGetId($res); if($pid) { //获取子表开始结束索引 $srart = $end = 0; $rows = array_values($rows); foreach($rows as $k=>$v){ preg_match('/-------/', $v, $matches); if(count($matches)){ $srart = $k; break; } } foreach($rows as $k=>$v){ preg_match('/--------/', $v, $matches); if(count($matches)){ $end = $k; break; } } //截取数据 $arr = array_slice($rows,$srart+1,$end-$srart-1); foreach($arr as $k=>$v){ $v = trim($v); preg_match('/^\d/', $v, $matches); if(count($matches)){ $arr[$k] = preg_split('/\s+/', $v); }else{ unset($arr[$k]); } } $arr = array_values($arr); //处理数据 $row = []; foreach ($arr as $k=>$v){ if (count($v)==8){ $row[$k]['pid'] = $pid; $row[$k]['chemical_compound'] = $v[1]; $row[$k]['persist_time'] = $v[2]; $row[$k]['quantitative_ion'] = $v[3]; $row[$k]['response_value'] = $v[4]; $row[$k]['potency'] = $v[5]; preg_match('/#/', $v[6], $matches); if(count($matches)){ $unit = str_replace('#', '', $v[6]); $row[$k]['unit'] = $unit; $row[$k]['deviation'] = '#'; }else{ $row[$k]['unit'] = $v[6]; $row[$k]['deviation'] = ''; } $row[$k]['quanlitative_ion'] = $v[7]; $row[$k]['create'] = $time; }else{ $row[$k]['pid'] = $pid; $row[$k]['chemical_compound'] = $v[1]; $row[$k]['persist_time'] = $v[2]; $row[$k]['quantitative_ion'] = $v[3]; $row[$k]['response_value'] = $v[3]; $row[$k]['potency'] = $v[3]; $row[$k]['unit'] = $v[3]; $row[$k]['deviation'] = ''; $row[$k]['quanlitative_ion'] = $v[3]; $row[$k]['create'] = $time; } } //将检测数据插入子表gather_txt_check_gc db()->name('gather_txt_check_gcms')->insertAll($row); //去除数据文件名称后面的字母和. $sample_no = preg_replace('/[a-zA-Z\.]+\s*$/', '', $res['data_txt_name']); //查询entrust表中是否存在, 如果存在修改状态 if(db()->name('entrust')->where('sample_no',$sample_no)->find()){ db()->name('entrust')->where('sample_no',$sample_no)->update(['data_status'=>1]); } //提交事务 db()->commit(); Log::record(['成功'=>'样品编号为'.$res['data_txt_name'].'数据修改成功']); return json_encode(['code'=>'0','msg'=>'修改成功','time'=>$time,'data'=>[$res,$row]]); } } catch (\Exception $e){ //失败回滚 db()->rollback(); Log::record(['失败'=>'样品编号为'.$res['data_txt_name'].'数据修改失败','原因'=>$e->getMessage()]); return $e->getMessage(); } }else{ return '找不到记录'; } } } }