Index.php 44 KB

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