Index.php 48 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120
  1. <?php
  2. namespace app\api\controller;
  3. use think\Log;
  4. use app\common\controller\Api;
  5. /**
  6. * 首页接口
  7. */
  8. class Index extends Api
  9. {
  10. protected $noNeedLogin = ['*'];
  11. protected $noNeedRight = ['*'];
  12. /**
  13. * 首页
  14. *
  15. */
  16. public function index()
  17. {
  18. $this->success('请求成功');
  19. }
  20. /**
  21. * vocs
  22. * 创建
  23. */
  24. public function vocs()
  25. {
  26. $req=$this->request->param();
  27. $time = date('Y/m/d H:i:s');
  28. $rows = $req;
  29. $lx = explode(',',$req[0]);
  30. if(count($lx)>1){
  31. $res['company'] = $lx[1];
  32. $res['machine_no'] = $lx[2];
  33. }
  34. if($lx[0]=='C'){
  35. //查询匹配主表数据
  36. foreach($rows as $k=>$v){
  37. preg_match('/数据文件/', $v, $matches);
  38. if(count($matches)){
  39. $res['data_txt_name'] = trim(substr($v,strripos($v,'\\')+1));
  40. unset($rows[$k]);
  41. break;
  42. }
  43. }
  44. // //判断数据是否是ABCD开头
  45. // preg_match('/^[A,B,C,D]/', $res['data_txt_name'], $matches);
  46. // if(!count($matches)){
  47. // Log::init([
  48. // // 日志记录方式,支持 file socket
  49. // 'type' => 'File',//type的值为test时临时关闭日志写入
  50. // //日志保存目录
  51. // 'path' => APP_PATH.'../runtime/log/notABCD/',
  52. // //单个日志文件的大小限制,超过后会自动记录到第二个文件
  53. // 'file_size' =>2097152,
  54. // //日志的时间格式,默认是` c `
  55. // 'time_format' =>'c',
  56. // 'level' => ['log'],
  57. // ]);
  58. // Log::record(['失败'=>'样品编号为'.$res['data_txt_name'].'数据插入失败','原因'=>'该文件编号不以ABCD开头']);
  59. // return $this->success('数据文件不以A、B、C、D开头,已记录日志',$req,0);
  60. // }
  61. foreach($rows as $k=>$v){
  62. preg_match('/样品名称/', $v, $matches);
  63. if(count($matches)){
  64. $res['name'] = trim(substr($v,strripos($v,':')+1));
  65. unset($rows[$k]);
  66. break;
  67. }
  68. }
  69. foreach($rows as $k=>$v){
  70. preg_match('/仪器/', $v, $matches);
  71. if(count($matches)){
  72. $res['remak'] = trim($v);
  73. unset($rows[$k]);
  74. break;
  75. }
  76. }
  77. foreach($rows as $k=>$v){
  78. preg_match('/操作者/', $v, $matches);
  79. if(count($matches)){
  80. $res['author'] = trim(substr($v,stripos($v,':')+1,strripos($v,'序列号')-1-stripos($v,':')));
  81. $res['line'] = trim(substr($v,strripos($v,':')+1));
  82. unset($rows[$k]);
  83. break;
  84. }
  85. }
  86. foreach($rows as $k=>$v){
  87. preg_match('/仪器/', $v, $matches);
  88. if(count($matches)){
  89. $res['instrument'] = trim(substr($v,stripos($v,':')+1,strripos($v,'位置')-1-stripos($v,':')));
  90. $res['position'] = trim(substr($v,strripos($v,':')+1));
  91. unset($rows[$k]);
  92. break;
  93. }
  94. }
  95. foreach($rows as $k=>$v){
  96. preg_match('/进样日期/', $v, $matches);
  97. if(count($matches)){
  98. $res['in_date'] = trim(substr($v,stripos($v,':')+1,strripos($v,'进样次数')-1-stripos($v,':')));
  99. $res['in_times'] = trim(substr($v,strripos($v,':')+1));
  100. unset($rows[$k]);
  101. break;
  102. }
  103. }
  104. foreach($rows as $k=>$v){
  105. preg_match('/进样量/', $v, $matches);
  106. if(count($matches)){
  107. $res['in_type'] = trim(substr($v,stripos($v,':')+1));
  108. unset($rows[$k]);
  109. break;
  110. }
  111. }
  112. foreach($rows as $k=>$v){
  113. preg_match('/采集方法/', $v, $matches);
  114. if(count($matches)){
  115. $res['gather_method'] = trim(substr($v,stripos($v,':')+1));
  116. unset($rows[$k]);
  117. foreach($rows as $k=>$v){
  118. preg_match('/最后修改/', $v, $matches);
  119. if(count($matches)){
  120. $res['update_date_one'] = trim(substr($v,stripos($v,':')+1));
  121. unset($rows[$k]);
  122. break;
  123. }
  124. }
  125. foreach($rows as $k=>$v){
  126. preg_match('/分析方法/', $v, $matches);
  127. if(count($matches)){
  128. $res['analysis_method'] = trim(substr($v,stripos($v,':')+1));
  129. unset($rows[$k]);
  130. break;
  131. }
  132. }
  133. foreach($rows as $k=>$v){
  134. preg_match('/最后修改/', $v, $matches);
  135. if(count($matches)){
  136. $res['update_date_two'] = trim(substr($v,stripos($v,':')+1));
  137. unset($rows[$k]);
  138. break;
  139. }
  140. }
  141. foreach($rows as $k=>$v){
  142. preg_match('/方法信息/', $v, $matches);
  143. if(count($matches)){
  144. $res['method_info'] = trim(substr($v,stripos($v,':')+1));
  145. unset($rows[$k]);
  146. break;
  147. }
  148. }
  149. foreach($rows as $k=>$v){
  150. preg_match('/附加信息/', $v, $matches);
  151. if(count($matches)){
  152. $res['add_info'] = trim(mb_substr($v,5));
  153. unset($rows[$k]);
  154. break;
  155. }
  156. }
  157. break;
  158. }
  159. }
  160. foreach($rows as $k=>$v){
  161. preg_match('/序列文件/', $v, $matches);
  162. if(count($matches)){
  163. $res['sequence_file'] = trim(substr($v,stripos($v,':')+1));
  164. unset($rows[$k]);
  165. foreach($rows as $k=>$v){
  166. preg_match('/方法/', $v, $matches);
  167. if(count($matches)){
  168. $res['method'] = trim(substr($v,stripos($v,':')+1));
  169. unset($rows[$k]);
  170. break;
  171. }
  172. }
  173. foreach($rows as $k=>$v){
  174. preg_match('/最后修改/', $v, $matches);
  175. if(count($matches)){
  176. $res['update_date_two'] = trim(substr($v,stripos($v,':')+1));
  177. unset($rows[$k]);
  178. break;
  179. }
  180. }
  181. foreach($rows as $k=>$v){
  182. preg_match('/方法信息/', $v, $matches);
  183. if(count($matches)){
  184. $res['method_info'] = trim(substr($v,stripos($v,':')+1));
  185. unset($rows[$k]);
  186. break;
  187. }
  188. }
  189. foreach($rows as $k=>$v){
  190. preg_match('/附加信息/', $v, $matches);
  191. if(count($matches)){
  192. $res['add_info'] = trim(mb_substr($v,5));
  193. unset($rows[$k]);
  194. break;
  195. }
  196. }
  197. break;
  198. }
  199. }
  200. foreach($rows as $k=>$v){
  201. preg_match('/排序/', $v, $matches);
  202. if(count($matches)){
  203. $res['sort'] = trim(substr($v,stripos($v,':')+1));
  204. unset($rows[$k]);
  205. break;
  206. }
  207. }
  208. foreach($rows as $k=>$v){
  209. preg_match('/校正数据修改时间/', $v, $matches);
  210. if(count($matches)){
  211. $res['check_data_time'] = trim(substr($v,stripos($v,':')+1));
  212. unset($rows[$k]);
  213. break;
  214. }
  215. }
  216. foreach($rows as $k=>$v){
  217. preg_match('/乘积因子/', $v, $matches);
  218. if(count($matches)){
  219. $res['sample_product_factor'] = trim(substr($v,strripos($v,':')+1));
  220. unset($rows[$k]);
  221. break;
  222. }
  223. }
  224. foreach($rows as $k=>$v){
  225. preg_match('/稀释因子/', $v, $matches);
  226. if(count($matches)){
  227. $res['dilution_factor'] = trim(substr($v,strripos($v,':')+1));
  228. unset($rows[$k]);
  229. break;
  230. }
  231. }
  232. foreach($rows as $k=>$v){
  233. preg_match('/信号/', $v, $matches);
  234. if(count($matches)){
  235. $res['signal_one'] = trim(substr($v,stripos($v,':')+1));
  236. unset($rows[$k]);
  237. break;
  238. }
  239. }
  240. $res['machine'] = 'GC';
  241. $res['create'] = $time;
  242. //查询记录是否存在
  243. $bool = db()->name('gather_txt_gc')->where('data_txt_name',$res['data_txt_name'])->find();
  244. if($bool){
  245. return '已存在';
  246. }
  247. //开启事务
  248. db()->startTrans();
  249. try {
  250. //连接数据库, 将数据插入主表gather_txt_gc取得pid
  251. $pid = db()->name('gather_txt_gc')->insertGetId($res);
  252. //获取子表开始结束索引
  253. $srart = $end = 0;
  254. $rows = array_values($rows);
  255. foreach($rows as $k=>$v){
  256. preg_match('/-------/', $v, $matches);
  257. if(count($matches)){
  258. $srart = $k;
  259. break;
  260. }
  261. }
  262. foreach($rows as $k=>$v){
  263. preg_match('/总量/', $v, $matches);
  264. if(count($matches)){
  265. $end = $k;
  266. break;
  267. }
  268. }
  269. //截取数据
  270. $arr = array_slice($rows,$srart+1,$end-$srart-1);
  271. foreach($arr as $k=>$v){
  272. preg_match('/\?/', $v, $matches);
  273. if(count($matches)){
  274. unset($arr[$k]);
  275. }else{
  276. $arr[$k] = preg_split('/\s+/', $v);
  277. }
  278. }
  279. $arr = array_values($arr);
  280. //处理数据
  281. $row = [];
  282. foreach ($arr as $k=>$v){
  283. if (count($v)==6){
  284. $row[$k]['pid'] = $pid;
  285. $row[$k]['time'] = $v[0];
  286. $row[$k]['type'] = $v[1];
  287. $row[$k]['peak_area'] = $v[2];
  288. ($v[2] == '-')?$row[$k]['peak_area'] = '-':$row[$k]['peak_area'] = floatval($v[2]);
  289. ($v[3] == '-')?$row[$k]['val'] = '-':$row[$k]['val'] = floatval($v[3]);
  290. ($v[4] == '-')?$row[$k]['potency'] = '-':$row[$k]['potency'] = floatval($v[4]);
  291. preg_match('/邻(-)?二甲苯$/', $v[5], $matches);
  292. if(count($matches)){
  293. $row[$k]['chemical_compound'] = '邻-二甲苯';
  294. }
  295. preg_match('/间(、)?对二甲苯$/', $v[5], $matches);
  296. if(count($matches)){
  297. $row[$k]['chemical_compound'] = '间对二甲苯';
  298. }
  299. if(!array_key_exists('chemical_compound',$row[$k])){
  300. $row[$k]['chemical_compound'] = $v[5];
  301. }
  302. $row[$k]['create'] = $time;
  303. }else{
  304. $row[$k]['pid'] = $pid;
  305. $row[$k]['time'] = $v[0];
  306. if($v[1]=='-'){
  307. //数据形式为 ' 11.636 - - - 苯 '
  308. $row[$k]['type'] = '';
  309. $row[$k]['peak_area'] = '-';
  310. $row[$k]['val'] = '-';
  311. $row[$k]['potency'] = '-';
  312. }else{
  313. //数据形式为 '16.058 BB 5.14751e-1 1.545917.95757e-1 1-乙氧基-2-丙醇 '
  314. //数据形式为 ' 13.642 BB 6.59774 1.20137e-27.92635e-2 乙酸正丙酯 '
  315. $row[$k]['type'] = $v[1];
  316. $row[$k]['peak_area'] = floatval($v[2]);
  317. $row[$k]['val'] = floatval(substr($v[3],0,strlen($v[3])-10));
  318. $row[$k]['potency'] = floatval(substr($v[3],strlen($v[3])-10,10));
  319. }
  320. preg_match('/邻(-)?二甲苯$/', $v[4], $matches);
  321. if(count($matches)){
  322. $row[$k]['chemical_compound'] = '邻-二甲苯';
  323. }
  324. preg_match('/间(、)?对二甲苯$/', $v[4], $matches);
  325. if(count($matches)){
  326. $row[$k]['chemical_compound'] = '间对二甲苯';
  327. }
  328. if(!array_key_exists('chemical_compound',$row[$k])){
  329. $row[$k]['chemical_compound'] = $v[4];
  330. }
  331. $row[$k]['create'] = $time;
  332. }
  333. }
  334. //将检测数据插入子表gather_txt_check_gc
  335. db()->name('gather_txt_check_gc')->insertAll($row);
  336. //去除数据文件名称后面的字母和.
  337. $sample_no = preg_replace('/[a-zA-Z\.]+\s*$/', '', $res['data_txt_name']);
  338. //查询entrust表中是否存在, 如果存在修改状态
  339. if(db()->name('entrust')->where('sample_no',$sample_no)->find()){
  340. db()->name('entrust')->where('sample_no',$sample_no)->update(['data_status'=>1]);
  341. }
  342. //提交事务
  343. db()->commit();
  344. Log::record(['成功'=>'样品编号为'.$res['data_txt_name'].'数据插入成功']);
  345. return json_encode(['code'=>'0','msg'=>'成功','time'=>$time,'data'=>[$res,$row]]);
  346. } catch (\Exception $e){
  347. //失败回滚
  348. db()->rollback();
  349. Log::record(['失败'=>'样品编号为'.$res['data_txt_name'].'数据插入失败','原因'=>$e->getMessage()]);
  350. return $e->getMessage();
  351. }
  352. }else{
  353. foreach($rows as $k=>$v){
  354. preg_match('/样品/', $v, $matches);
  355. if(count($matches)){
  356. $bach = '';
  357. $string = trim(substr($v,stripos($v,':')+1));
  358. if (preg_match('/\w*\d+-?\d?\.?\d*$/', $string, $matches)) {
  359. $bach = $matches[0];
  360. }
  361. $name = str_replace($bach,'',$string);
  362. $res['name'] = $name;
  363. $res['bach'] = $bach;
  364. unset($rows[$k]);
  365. break;
  366. }
  367. }
  368. foreach($rows as $k=>$v){
  369. preg_match('/数据路径/', $v, $matches);
  370. if(count($matches)){
  371. $res['data_txt_path'] = trim(substr($v,stripos($v,':')+1));
  372. unset($rows[$k]);
  373. break;
  374. }
  375. }
  376. foreach($rows as $k=>$v){
  377. preg_match('/数据文件/', $v, $matches);
  378. if(count($matches)){
  379. $res['data_txt_name'] = trim(substr($v,stripos($v,':')+1));
  380. unset($rows[$k]);
  381. break;
  382. }
  383. }
  384. foreach($rows as $k=>$v){
  385. preg_match('/采集/', $v, $matches);
  386. if(count($matches)){
  387. $res['gather_time'] = trim(substr($v,stripos($v,':')+1));
  388. unset($rows[$k]);
  389. break;
  390. }
  391. }
  392. foreach($rows as $k=>$v){
  393. preg_match('/操作者/', $v, $matches);
  394. if(count($matches)){
  395. $res['author'] = trim(substr($v,stripos($v,':')+1));
  396. unset($rows[$k]);
  397. break;
  398. }
  399. }
  400. foreach($rows as $k=>$v){
  401. preg_match('/其他/', $v, $matches);
  402. if(count($matches)){
  403. $res['other'] = trim(substr($v,stripos($v,':')+1));
  404. unset($rows[$k]);
  405. break;
  406. }
  407. }
  408. foreach($rows as $k=>$v){
  409. preg_match('/样品瓶/', $v, $matches);
  410. if(count($matches)){
  411. $res['ALS'] = trim(substr($v,stripos($v,':')+1,strripos($v,'样品乘积因子')-1-stripos($v,':')));
  412. $res['sample_product_factor'] = trim(substr($v,strripos($v,':')+1));
  413. unset($rows[$k]);
  414. break;
  415. }
  416. }
  417. foreach($rows as $k=>$v){
  418. preg_match('/定量时间/', $v, $matches);
  419. if(count($matches)){
  420. $res['quantify_time'] = trim(substr($v,stripos($v,':')+1));
  421. unset($rows[$k]);
  422. break;
  423. }
  424. }
  425. foreach($rows as $k=>$v){
  426. preg_match('/定量方法标题/', $v, $matches);
  427. if(count($matches)){
  428. $res['title'] = trim(substr($v,stripos($v,':')+1));
  429. unset($rows[$k]);
  430. break;
  431. }
  432. }
  433. foreach($rows as $k=>$v){
  434. preg_match('/定量方法/', $v, $matches);
  435. if(count($matches)){
  436. $res['quantify_method'] = trim(substr($v,stripos($v,':')+1));
  437. unset($rows[$k]);
  438. break;
  439. }
  440. }
  441. foreach($rows as $k=>$v){
  442. preg_match('/上一次定量更新/', $v, $matches);
  443. if(count($matches)){
  444. $res['last_quantify_time'] = trim(substr($v,stripos($v,':')+1));
  445. unset($rows[$k]);
  446. break;
  447. }
  448. }
  449. foreach($rows as $k=>$v){
  450. preg_match('/响应方式/', $v, $matches);
  451. if(count($matches)){
  452. $res['response'] = trim(substr($v,stripos($v,':')+1));
  453. unset($rows[$k]);
  454. break;
  455. }
  456. }
  457. $res['machine'] = 'GCMS';
  458. $res['create'] = $time;
  459. //查询记录是否存在
  460. $bool = db()->name('gather_txt_gcms')->where('data_txt_name',$res['data_txt_name'])->find();
  461. if($bool){
  462. return '已存在';
  463. }
  464. //开启事务
  465. db()->startTrans();
  466. try {
  467. //连接数据库, 将数据插入主表gather_txt_gc取得pid
  468. $pid = db()->name('gather_txt_gcms')->insertGetId($res);
  469. //获取子表开始结束索引
  470. $srart = $end = 0;
  471. $rows = array_values($rows);
  472. foreach($rows as $k=>$v){
  473. preg_match('/-------/', $v, $matches);
  474. if(count($matches)){
  475. $srart = $k;
  476. break;
  477. }
  478. }
  479. foreach($rows as $k=>$v){
  480. preg_match('/--------/', $v, $matches);
  481. if(count($matches)){
  482. $end = $k;
  483. break;
  484. }
  485. }
  486. //截取数据
  487. $arr = array_slice($rows,$srart+1,$end-$srart-1);
  488. foreach($arr as $k=>$v){
  489. $v = trim($v);
  490. preg_match('/^\d/', $v, $matches);
  491. if(count($matches)){
  492. $arr[$k] = preg_split('/\s+/', $v);
  493. }else{
  494. unset($arr[$k]);
  495. }
  496. }
  497. $arr = array_values($arr);
  498. //处理数据
  499. $row = [];
  500. foreach ($arr as $k=>$v){
  501. if (count($v)==8){
  502. $row[$k]['pid'] = $pid;
  503. $row[$k]['chemical_compound'] = $v[1];
  504. $row[$k]['persist_time'] = $v[2];
  505. $row[$k]['quantitative_ion'] = $v[3];
  506. $row[$k]['response_value'] = $v[4];
  507. $row[$k]['potency'] = $v[5];
  508. preg_match('/#/', $v[6], $matches);
  509. if(count($matches)){
  510. $unit = str_replace('#', '', $v[6]);
  511. $row[$k]['unit'] = $unit;
  512. $row[$k]['deviation'] = '#';
  513. }else{
  514. $row[$k]['unit'] = $v[6];
  515. $row[$k]['deviation'] = '';
  516. }
  517. $row[$k]['quanlitative_ion'] = $v[7];
  518. $row[$k]['create'] = $time;
  519. }else{
  520. $row[$k]['pid'] = $pid;
  521. $row[$k]['chemical_compound'] = $v[1];
  522. $row[$k]['persist_time'] = $v[2];
  523. $row[$k]['quantitative_ion'] = $v[3];
  524. $row[$k]['response_value'] = $v[3];
  525. $row[$k]['potency'] = $v[3];
  526. $row[$k]['unit'] = $v[3];
  527. $row[$k]['deviation'] = '';
  528. $row[$k]['quanlitative_ion'] = $v[3];
  529. $row[$k]['create'] = $time;
  530. }
  531. }
  532. //将检测数据插入子表gather_txt_check_gc
  533. db()->name('gather_txt_check_gcms')->insertAll($row);
  534. //去除数据文件名称后面的字母和.
  535. $sample_no = preg_replace('/[a-zA-Z\.]+\s*$/', '', $res['data_txt_name']);
  536. //查询entrust表中是否存在, 如果存在修改状态
  537. if(db()->name('entrust')->where('sample_no',$sample_no)->find()){
  538. db()->name('entrust')->where('sample_no',$sample_no)->update(['data_status'=>1]);
  539. }
  540. //提交事务
  541. db()->commit();
  542. Log::record(['成功'=>'样品编号为'.$res['data_txt_name'].'数据插入成功']);
  543. return json_encode(['code'=>'0','msg'=>'成功','time'=>$time,'data'=>[$res,$row]]);
  544. } catch (\Exception $e){
  545. //失败回滚
  546. db()->rollback();
  547. Log::record(['失败'=>'样品编号为'.$res['data_txt_name'].'数据插入失败','原因'=>$e->getMessage()]);
  548. return $e->getMessage();
  549. }
  550. }
  551. }
  552. /**
  553. * vocs
  554. * 修改
  555. */
  556. public function updateVocs()
  557. {
  558. $req=$this->request->param();
  559. $time = date('Y/m/d H:i:s');
  560. $rows = $req;
  561. $lx = explode(',',$req[0]);
  562. if(count($lx)>1){
  563. $res['company'] = $lx[1];
  564. $res['machine_no'] = $lx[2];
  565. }
  566. if($lx[0]=='C'){
  567. //查询匹配主表数据
  568. foreach($rows as $k=>$v){
  569. preg_match('/数据文件/', $v, $matches);
  570. if(count($matches)){
  571. $res['data_txt_name'] = trim(substr($v,strripos($v,'\\')+1));
  572. unset($rows[$k]);
  573. break;
  574. }
  575. }
  576. foreach($rows as $k=>$v){
  577. preg_match('/样品名称/', $v, $matches);
  578. if(count($matches)){
  579. $res['name'] = trim(substr($v,strripos($v,':')+1));
  580. unset($rows[$k]);
  581. break;
  582. }
  583. }
  584. foreach($rows as $k=>$v){
  585. preg_match('/仪器/', $v, $matches);
  586. if(count($matches)){
  587. $res['remak'] = trim($v);
  588. unset($rows[$k]);
  589. break;
  590. }
  591. }
  592. foreach($rows as $k=>$v){
  593. preg_match('/操作者/', $v, $matches);
  594. if(count($matches)){
  595. $res['author'] = trim(substr($v,stripos($v,':')+1,strripos($v,'序列号')-1-stripos($v,':')));
  596. $res['line'] = trim(substr($v,strripos($v,':')+1));
  597. unset($rows[$k]);
  598. break;
  599. }
  600. }
  601. foreach($rows as $k=>$v){
  602. preg_match('/仪器/', $v, $matches);
  603. if(count($matches)){
  604. $res['instrument'] = trim(substr($v,stripos($v,':')+1,strripos($v,'位置')-1-stripos($v,':')));
  605. $res['position'] = trim(substr($v,strripos($v,':')+1));
  606. unset($rows[$k]);
  607. break;
  608. }
  609. }
  610. foreach($rows as $k=>$v){
  611. preg_match('/进样日期/', $v, $matches);
  612. if(count($matches)){
  613. $res['in_date'] = trim(substr($v,stripos($v,':')+1,strripos($v,'进样次数')-1-stripos($v,':')));
  614. $res['in_times'] = trim(substr($v,strripos($v,':')+1));
  615. unset($rows[$k]);
  616. break;
  617. }
  618. }
  619. foreach($rows as $k=>$v){
  620. preg_match('/进样量/', $v, $matches);
  621. if(count($matches)){
  622. $res['in_type'] = trim(substr($v,stripos($v,':')+1));
  623. unset($rows[$k]);
  624. break;
  625. }
  626. }
  627. foreach($rows as $k=>$v){
  628. preg_match('/采集方法/', $v, $matches);
  629. if(count($matches)){
  630. $res['gather_method'] = trim(substr($v,stripos($v,':')+1));
  631. unset($rows[$k]);
  632. foreach($rows as $k=>$v){
  633. preg_match('/最后修改/', $v, $matches);
  634. if(count($matches)){
  635. $res['update_date_one'] = trim(substr($v,stripos($v,':')+1));
  636. unset($rows[$k]);
  637. break;
  638. }
  639. }
  640. foreach($rows as $k=>$v){
  641. preg_match('/分析方法/', $v, $matches);
  642. if(count($matches)){
  643. $res['analysis_method'] = trim(substr($v,stripos($v,':')+1));
  644. unset($rows[$k]);
  645. break;
  646. }
  647. }
  648. foreach($rows as $k=>$v){
  649. preg_match('/最后修改/', $v, $matches);
  650. if(count($matches)){
  651. $res['update_date_two'] = trim(substr($v,stripos($v,':')+1));
  652. unset($rows[$k]);
  653. break;
  654. }
  655. }
  656. foreach($rows as $k=>$v){
  657. preg_match('/方法信息/', $v, $matches);
  658. if(count($matches)){
  659. $res['method_info'] = trim(substr($v,stripos($v,':')+1));
  660. unset($rows[$k]);
  661. break;
  662. }
  663. }
  664. foreach($rows as $k=>$v){
  665. preg_match('/附加信息/', $v, $matches);
  666. if(count($matches)){
  667. $res['add_info'] = trim(mb_substr($v,5));
  668. unset($rows[$k]);
  669. break;
  670. }
  671. }
  672. break;
  673. }
  674. }
  675. foreach($rows as $k=>$v){
  676. preg_match('/序列文件/', $v, $matches);
  677. if(count($matches)){
  678. $res['sequence_file'] = trim(substr($v,stripos($v,':')+1));
  679. unset($rows[$k]);
  680. foreach($rows as $k=>$v){
  681. preg_match('/方法/', $v, $matches);
  682. if(count($matches)){
  683. $res['method'] = trim(substr($v,stripos($v,':')+1));
  684. unset($rows[$k]);
  685. break;
  686. }
  687. }
  688. foreach($rows as $k=>$v){
  689. preg_match('/最后修改/', $v, $matches);
  690. if(count($matches)){
  691. $res['update_date_two'] = trim(substr($v,stripos($v,':')+1));
  692. unset($rows[$k]);
  693. break;
  694. }
  695. }
  696. foreach($rows as $k=>$v){
  697. preg_match('/方法信息/', $v, $matches);
  698. if(count($matches)){
  699. $res['method_info'] = trim(substr($v,stripos($v,':')+1));
  700. unset($rows[$k]);
  701. break;
  702. }
  703. }
  704. foreach($rows as $k=>$v){
  705. preg_match('/附加信息/', $v, $matches);
  706. if(count($matches)){
  707. $res['add_info'] = trim(mb_substr($v,5));
  708. unset($rows[$k]);
  709. break;
  710. }
  711. }
  712. break;
  713. }
  714. }
  715. foreach($rows as $k=>$v){
  716. preg_match('/排序/', $v, $matches);
  717. if(count($matches)){
  718. $res['sort'] = trim(substr($v,stripos($v,':')+1));
  719. unset($rows[$k]);
  720. break;
  721. }
  722. }
  723. foreach($rows as $k=>$v){
  724. preg_match('/校正数据修改时间/', $v, $matches);
  725. if(count($matches)){
  726. $res['check_data_time'] = trim(substr($v,stripos($v,':')+1));
  727. unset($rows[$k]);
  728. break;
  729. }
  730. }
  731. foreach($rows as $k=>$v){
  732. preg_match('/乘积因子/', $v, $matches);
  733. if(count($matches)){
  734. $res['sample_product_factor'] = trim(substr($v,strripos($v,':')+1));
  735. unset($rows[$k]);
  736. break;
  737. }
  738. }
  739. foreach($rows as $k=>$v){
  740. preg_match('/稀释因子/', $v, $matches);
  741. if(count($matches)){
  742. $res['dilution_factor'] = trim(substr($v,strripos($v,':')+1));
  743. unset($rows[$k]);
  744. break;
  745. }
  746. }
  747. foreach($rows as $k=>$v){
  748. preg_match('/信号/', $v, $matches);
  749. if(count($matches)){
  750. $res['signal_one'] = trim(substr($v,stripos($v,':')+1));
  751. unset($rows[$k]);
  752. break;
  753. }
  754. }
  755. $res['machine'] = 'GC';
  756. $res['create'] = $time;
  757. $id = db()->name('gather_txt_gc')->field('id')->where('data_txt_name',$res['data_txt_name'])->find();
  758. if($id){
  759. //开启事务
  760. db()->startTrans();
  761. try {
  762. //根据id修改主表数据
  763. $bool = db()->name('gather_txt_gc')->where('id',$id['id'])->update($res);
  764. if($bool){
  765. //根据pid删除子表数据
  766. db()->name('gather_txt_check_gc')->where('pid',$id['id'])->delete();
  767. //获取子表开始结束索引
  768. $srart = $end = 0;
  769. $rows = array_values($rows);
  770. foreach($rows as $k=>$v){
  771. preg_match('/-------/', $v, $matches);
  772. if(count($matches)){
  773. $srart = $k;
  774. break;
  775. }
  776. }
  777. foreach($rows as $k=>$v){
  778. preg_match('/总量/', $v, $matches);
  779. if(count($matches)){
  780. $end = $k;
  781. break;
  782. }
  783. }
  784. //截取数据
  785. $arr = array_slice($rows,$srart+1,$end-$srart-1);
  786. foreach($arr as $k=>$v){
  787. preg_match('/\?/', $v, $matches);
  788. if(count($matches)){
  789. unset($arr[$k]);
  790. }else{
  791. $arr[$k] = preg_split('/\s+/', $v);
  792. }
  793. }
  794. $arr = array_values($arr);
  795. //处理数据
  796. $row = [];
  797. foreach ($arr as $k=>$v){
  798. if (count($v)==6){
  799. $row[$k]['pid'] = $id['id'];
  800. $row[$k]['time'] = $v[0];
  801. $row[$k]['type'] = $v[1];
  802. $row[$k]['peak_area'] = $v[2];
  803. ($v[2] == '-')?$row[$k]['peak_area'] = '-':$row[$k]['peak_area'] = floatval($v[2]);
  804. ($v[3] == '-')?$row[$k]['val'] = '-':$row[$k]['val'] = floatval($v[3]);
  805. ($v[4] == '-')?$row[$k]['potency'] = '-':$row[$k]['potency'] = floatval($v[4]);
  806. preg_match('/邻(-)?二甲苯$/', $v[5], $matches);
  807. if(count($matches)){
  808. $row[$k]['chemical_compound'] = '邻-二甲苯';
  809. }
  810. preg_match('/间(、)?对二甲苯$/', $v[5], $matches);
  811. if(count($matches)){
  812. $row[$k]['chemical_compound'] = '间对二甲苯';
  813. }
  814. if(!array_key_exists('chemical_compound',$row[$k])){
  815. $row[$k]['chemical_compound'] = $v[5];
  816. }
  817. $row[$k]['create'] = $time;
  818. }else{
  819. $row[$k]['pid'] = $id['id'];
  820. $row[$k]['time'] = $v[0];
  821. if($v[1]=='-'){
  822. //数据形式为 ' 11.636 - - - 苯 '
  823. $row[$k]['type'] = '';
  824. $row[$k]['peak_area'] = '-';
  825. $row[$k]['val'] = '-';
  826. $row[$k]['potency'] = '-';
  827. }else{
  828. //数据形式为 '16.058 BB 5.14751e-1 1.545917.95757e-1 1-乙氧基-2-丙醇 '
  829. //数据形式为 ' 13.642 BB 6.59774 1.20137e-27.92635e-2 乙酸正丙酯 '
  830. $row[$k]['type'] = $v[1];
  831. $row[$k]['peak_area'] = floatval($v[2]);
  832. $row[$k]['val'] = floatval(substr($v[3],0,strlen($v[3])-10));
  833. $row[$k]['potency'] = floatval(substr($v[3],strlen($v[3])-10,10));
  834. }
  835. preg_match('/邻(-)?二甲苯$/', $v[4], $matches);
  836. if(count($matches)){
  837. $row[$k]['chemical_compound'] = '邻-二甲苯';
  838. }
  839. preg_match('/间(、)?对二甲苯$/', $v[4], $matches);
  840. if(count($matches)){
  841. $row[$k]['chemical_compound'] = '间对二甲苯';
  842. }
  843. if(!array_key_exists('chemical_compound',$row[$k])){
  844. $row[$k]['chemical_compound'] = $v[4];
  845. }
  846. $row[$k]['create'] = $time;
  847. }
  848. }
  849. //将检测数据插入子表gather_txt_check_gc
  850. db()->name('gather_txt_check_gc')->insertAll($row);
  851. //去除数据文件名称后面的字母和.
  852. $sample_no = preg_replace('/[a-zA-Z\.]+\s*$/', '', $res['data_txt_name']);
  853. //查询entrust表中是否存在, 如果存在修改状态
  854. if(db()->name('entrust')->where('sample_no',$sample_no)->find()){
  855. db()->name('entrust')->where('sample_no',$sample_no)->update(['data_status'=>1]);
  856. }
  857. //提交事务
  858. db()->commit();
  859. Log::record(['成功'=>'样品编号为'.$res['data_txt_name'].'数据修改成功']);
  860. return json_encode(['code'=>'0','msg'=>'修改成功','time'=>$time,'data'=>[$res,$row]]);
  861. }
  862. } catch (\Exception $e){
  863. //失败回滚
  864. db()->rollback();
  865. Log::record(['失败'=>'样品编号为'.$res['data_txt_name'].'数据修改失败','原因'=>$e->getMessage()]);
  866. return $e->getMessage();
  867. }
  868. }else{
  869. return '找不到记录';
  870. }
  871. }else{
  872. foreach($rows as $k=>$v){
  873. preg_match('/样品/', $v, $matches);
  874. if(count($matches)){
  875. $bach = '';
  876. $string = trim(substr($v,stripos($v,':')+1));
  877. if (preg_match('/\w*\d+-?\d?\.?\d*$/', $string, $matches)) {
  878. $bach = $matches[0];
  879. }
  880. $name = str_replace($bach,'',$string);
  881. $res['name'] = $name;
  882. $res['bach'] = $bach;
  883. unset($rows[$k]);
  884. break;
  885. }
  886. }
  887. foreach($rows as $k=>$v){
  888. preg_match('/数据路径/', $v, $matches);
  889. if(count($matches)){
  890. $res['data_txt_path'] = trim(substr($v,stripos($v,':')+1));
  891. unset($rows[$k]);
  892. break;
  893. }
  894. }
  895. foreach($rows as $k=>$v){
  896. preg_match('/数据文件/', $v, $matches);
  897. if(count($matches)){
  898. $res['data_txt_name'] = trim(substr($v,stripos($v,':')+1));
  899. unset($rows[$k]);
  900. break;
  901. }
  902. }
  903. foreach($rows as $k=>$v){
  904. preg_match('/采集/', $v, $matches);
  905. if(count($matches)){
  906. $res['gather_time'] = trim(substr($v,stripos($v,':')+1));
  907. unset($rows[$k]);
  908. break;
  909. }
  910. }
  911. foreach($rows as $k=>$v){
  912. preg_match('/操作者/', $v, $matches);
  913. if(count($matches)){
  914. $res['author'] = trim(substr($v,stripos($v,':')+1));
  915. unset($rows[$k]);
  916. break;
  917. }
  918. }
  919. foreach($rows as $k=>$v){
  920. preg_match('/其他/', $v, $matches);
  921. if(count($matches)){
  922. $res['other'] = trim(substr($v,stripos($v,':')+1));
  923. unset($rows[$k]);
  924. break;
  925. }
  926. }
  927. foreach($rows as $k=>$v){
  928. preg_match('/样品瓶/', $v, $matches);
  929. if(count($matches)){
  930. $res['ALS'] = trim(substr($v,stripos($v,':')+1,strripos($v,'样品乘积因子')-1-stripos($v,':')));
  931. $res['sample_product_factor'] = trim(substr($v,strripos($v,':')+1));
  932. unset($rows[$k]);
  933. break;
  934. }
  935. }
  936. foreach($rows as $k=>$v){
  937. preg_match('/定量时间/', $v, $matches);
  938. if(count($matches)){
  939. $res['quantify_time'] = trim(substr($v,stripos($v,':')+1));
  940. unset($rows[$k]);
  941. break;
  942. }
  943. }
  944. foreach($rows as $k=>$v){
  945. preg_match('/定量方法标题/', $v, $matches);
  946. if(count($matches)){
  947. $res['title'] = trim(substr($v,stripos($v,':')+1));
  948. unset($rows[$k]);
  949. break;
  950. }
  951. }
  952. foreach($rows as $k=>$v){
  953. preg_match('/定量方法/', $v, $matches);
  954. if(count($matches)){
  955. $res['quantify_method'] = trim(substr($v,stripos($v,':')+1));
  956. unset($rows[$k]);
  957. break;
  958. }
  959. }
  960. foreach($rows as $k=>$v){
  961. preg_match('/上一次定量更新/', $v, $matches);
  962. if(count($matches)){
  963. $res['last_quantify_time'] = trim(substr($v,stripos($v,':')+1));
  964. unset($rows[$k]);
  965. break;
  966. }
  967. }
  968. foreach($rows as $k=>$v){
  969. preg_match('/响应方式/', $v, $matches);
  970. if(count($matches)){
  971. $res['response'] = trim(substr($v,stripos($v,':')+1));
  972. unset($rows[$k]);
  973. break;
  974. }
  975. }
  976. $res['machine'] = 'GCMS';
  977. $res['create'] = $time;
  978. $id = db()->name('gather_txt_gcms')->field('id')->where('data_txt_name',$res['data_txt_name'])->find();
  979. if($id){
  980. //开启事务
  981. db()->startTrans();
  982. try {
  983. //根据id修改主表数据
  984. $bool = db()->name('gather_txt_gcms')->where('id',$id['id'])->update($res);
  985. if($bool) {
  986. //根据pid删除子表数据
  987. db()->name('gather_txt_check_gcms')->where('pid', $id['id'])->delete();
  988. //获取子表开始结束索引
  989. $srart = $end = 0;
  990. $rows = array_values($rows);
  991. foreach($rows as $k=>$v){
  992. preg_match('/-------/', $v, $matches);
  993. if(count($matches)){
  994. $srart = $k;
  995. break;
  996. }
  997. }
  998. foreach($rows as $k=>$v){
  999. preg_match('/--------/', $v, $matches);
  1000. if(count($matches)){
  1001. $end = $k;
  1002. break;
  1003. }
  1004. }
  1005. //截取数据
  1006. $arr = array_slice($rows,$srart+1,$end-$srart-1);
  1007. foreach($arr as $k=>$v){
  1008. $v = trim($v);
  1009. preg_match('/^\d/', $v, $matches);
  1010. if(count($matches)){
  1011. $arr[$k] = preg_split('/\s+/', $v);
  1012. }else{
  1013. unset($arr[$k]);
  1014. }
  1015. }
  1016. $arr = array_values($arr);
  1017. //处理数据
  1018. $row = [];
  1019. foreach ($arr as $k=>$v){
  1020. if (count($v)==8){
  1021. $row[$k]['pid'] = $id['id'];
  1022. $row[$k]['chemical_compound'] = $v[1];
  1023. $row[$k]['persist_time'] = $v[2];
  1024. $row[$k]['quantitative_ion'] = $v[3];
  1025. $row[$k]['response_value'] = $v[4];
  1026. $row[$k]['potency'] = $v[5];
  1027. preg_match('/#/', $v[6], $matches);
  1028. if(count($matches)){
  1029. $unit = str_replace('#', '', $v[6]);
  1030. $row[$k]['unit'] = $unit;
  1031. $row[$k]['deviation'] = '#';
  1032. }else{
  1033. $row[$k]['unit'] = $v[6];
  1034. $row[$k]['deviation'] = '';
  1035. }
  1036. $row[$k]['quanlitative_ion'] = $v[7];
  1037. $row[$k]['create'] = $time;
  1038. }else{
  1039. $row[$k]['pid'] = $id['id'];
  1040. $row[$k]['chemical_compound'] = $v[1];
  1041. $row[$k]['persist_time'] = $v[2];
  1042. $row[$k]['quantitative_ion'] = $v[3];
  1043. $row[$k]['response_value'] = $v[3];
  1044. $row[$k]['potency'] = $v[3];
  1045. $row[$k]['unit'] = $v[3];
  1046. $row[$k]['deviation'] = '';
  1047. $row[$k]['quanlitative_ion'] = $v[3];
  1048. $row[$k]['create'] = $time;
  1049. }
  1050. }
  1051. //将检测数据插入子表gather_txt_check_gc
  1052. db()->name('gather_txt_check_gcms')->insertAll($row);
  1053. //去除数据文件名称后面的字母和.
  1054. $sample_no = preg_replace('/[a-zA-Z\.]+\s*$/', '', $res['data_txt_name']);
  1055. //查询entrust表中是否存在, 如果存在修改状态
  1056. if(db()->name('entrust')->where('sample_no',$sample_no)->find()){
  1057. db()->name('entrust')->where('sample_no',$sample_no)->update(['data_status'=>1]);
  1058. }
  1059. //提交事务
  1060. db()->commit();
  1061. Log::record(['成功'=>'样品编号为'.$res['data_txt_name'].'数据修改成功']);
  1062. return json_encode(['code'=>'0','msg'=>'修改成功','time'=>$time,'data'=>[$res,$row]]);
  1063. }
  1064. } catch (\Exception $e){
  1065. //失败回滚
  1066. db()->rollback();
  1067. Log::record(['失败'=>'样品编号为'.$res['data_txt_name'].'数据修改失败','原因'=>$e->getMessage()]);
  1068. return $e->getMessage();
  1069. }
  1070. }else{
  1071. return '找不到记录';
  1072. }
  1073. }
  1074. }
  1075. }