success('请求成功'); } /** * 定时任务 * 查询是否超时,发送短信 */ public function is_send() { $bool = db()->name('jtbh_log')->where('finish_time','<',date('Y/m/d H:i:s'))->select(); if($bool){ $sample = new Sample(); foreach ($bool as $k=>$v){ if($v['status']==1 && $v['is_send']==0 && $v['phone']){ $name1 = $v['company']; $name2 = $v['name']; $name = $v['company'].$v['name']; $arr = explode(',',$v['phone']); foreach ($arr as $phone){ //发送短息 $mobile = $phone; $sample->send_verify($mobile,$name1,$name2,0,0.5,'SMS_255300044'); } //修改信息 db()->name('jtbh_log')->where('machine_no',$v['machine_no'])->update(['is_send'=>1]); } } } } /** * 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]; //查询数据库是否存在该机台 $bool = db()->name('jtbh_log')->where('machine_no',$lx[2])->find(); if($bool){ //存在,修改时间 db()->name('jtbh_log')->where('machine_no',$lx[2])->update(['is_send'=>0, 'finish_time'=>date('Y/m/d H:i:s',time()+1500)]); }else{ //不存在,添加记录 $data['machine_no'] = $lx[2]; $data['company'] = $lx[1]; $data['finish_time'] = date('Y/m/d H:i:s',time()+1500); db()->name('jtbh_log')->insert($data); } } 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]; if($v[1]=='-'){ //数据形式为 ' 11.636 - - - 苯 ' $row[$k]['type'] = ''; $row[$k]['peak_area'] = '-'; $row[$k]['val'] = '-'; $row[$k]['potency'] = '-'; }else{ //数据形式为 '16.058 BB 5.14751e-1 1.545917.95757e-1 1-乙氧基-2-丙醇 ' //数据形式为 ' 13.642 BB 6.59774 1.20137e-27.92635e-2 乙酸正丙酯 ' $row[$k]['type'] = $v[1]; $row[$k]['peak_area'] = floatval($v[2]); $row[$k]['val'] = floatval(substr($v[3],0,strlen($v[3])-10)); $row[$k]['potency'] = floatval(substr($v[3],strlen($v[3])-10,10)); } 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; $id = db()->name('gather_txt_gc')->field('id')->where('data_txt_name',$res['data_txt_name'])->find(); if($id){ //开启事务 db()->startTrans(); try { //根据id修改主表数据 $bool = db()->name('gather_txt_gc')->where('id',$id['id'])->update($res); if($bool){ //根据pid删除子表数据 db()->name('gather_txt_check_gc')->where('pid',$id['id'])->delete(); //获取子表开始结束索引 $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'] = $id['id']; $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'] = $id['id']; $row[$k]['time'] = $v[0]; if($v[1]=='-'){ //数据形式为 ' 11.636 - - - 苯 ' $row[$k]['type'] = ''; $row[$k]['peak_area'] = '-'; $row[$k]['val'] = '-'; $row[$k]['potency'] = '-'; }else{ //数据形式为 '16.058 BB 5.14751e-1 1.545917.95757e-1 1-乙氧基-2-丙醇 ' //数据形式为 ' 13.642 BB 6.59774 1.20137e-27.92635e-2 乙酸正丙酯 ' $row[$k]['type'] = $v[1]; $row[$k]['peak_area'] = floatval($v[2]); $row[$k]['val'] = floatval(substr($v[3],0,strlen($v[3])-10)); $row[$k]['potency'] = floatval(substr($v[3],strlen($v[3])-10,10)); } 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; $id = db()->name('gather_txt_gcms')->field('id')->where('data_txt_name',$res['data_txt_name'])->find(); if($id){ //开启事务 db()->startTrans(); try { //根据id修改主表数据 $bool = db()->name('gather_txt_gcms')->where('id',$id['id'])->update($res); if($bool) { //根据pid删除子表数据 db()->name('gather_txt_check_gcms')->where('pid', $id['id'])->delete(); //获取子表开始结束索引 $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'] = $id['id']; $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'] = $id['id']; $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 '找不到记录'; } } } }