Index.php 50 KB

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