WasteRecord.php 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944
  1. <?php
  2. namespace app\common\model;
  3. use function PHPSTORM_META\map;
  4. use think\Db;
  5. use think\Exception;
  6. class WasteRecord extends Base {
  7. public $table = 'waste_record';
  8. protected $validateName = 'WasteRecord';
  9. public $status = [
  10. '已收取',
  11. '已交接',
  12. '已转运',
  13. '医废异常',
  14. '未转运',
  15. ];
  16. /**
  17. * 医废记录详情
  18. *
  19. * @author wst
  20. * @date 2021/9/8 17:32
  21. * @return array
  22. */
  23. public function info($id,$orgId){
  24. $info = $this->getOne($id,$orgId);
  25. if($info){
  26. $info['real_name'] = Db::name('user')
  27. ->where('id',$info['user_id'])
  28. ->value('real_name');
  29. $info['waste_device'] = Db::name('address')
  30. ->where('id',$info['waste_device_id'])
  31. ->value('title');
  32. $info['cate'] = Db::name('waste_type')
  33. ->where('id',$info['cateid'])
  34. ->value('title');
  35. $info['weight'] =round($info['weight']/1000,2);
  36. $info['status'] =$this->status[$info['status']];
  37. $rlist = Db::name('waste_record_user')
  38. ->alias('waste_record_user')
  39. ->join('user user','user.id = waste_record_user.user_id')
  40. ->where('waste_record_user.waste_record_id',$info['id'])
  41. ->field('waste_record_user.*,user.real_name')
  42. ->order('status', 'asc')
  43. ->select();
  44. $info['rlist'] = $rlist?$rlist:array();
  45. $info = json_decode(json_encode($info),true);
  46. $cate = Db::name('waste_type')->where('id',$info['cateid'])->find();
  47. if($cate['type'] == 1 && $info['num'] > 0){
  48. $tnum = round($info['weight'] / 1000, 2).'kg'.'('.$info['num'].$cate['unit'].')';
  49. }
  50. $info['tum'] = $tnum;
  51. }
  52. return $info;
  53. }
  54. //转运
  55. public function finish($id,$user_id){
  56. $this->startTrans();
  57. try{
  58. $ret = $this
  59. ->where('id', $id)
  60. ->update(['status'=>2]);
  61. if(!$ret){
  62. throw new Exception('更新状态失败');
  63. }
  64. $ret2 = Db::name('waste_record_user')->insert(array(
  65. 'waste_record_id' => $id,
  66. 'user_id' => $user_id,
  67. 'status' => 2,
  68. 'create_time' => getTime()
  69. ));
  70. if(!$ret2){
  71. throw new exception('保存操作记录失败');
  72. }
  73. $this->commit();
  74. return true;
  75. }catch (exception $e){
  76. $this->rollback();
  77. $this->error=$e->getMessage();
  78. return false;
  79. }
  80. }
  81. public function getOne($id,$orgId=0){
  82. $info = $this
  83. ->where('id',$id)
  84. ->where('org_id',$orgId)
  85. ->whereOr('serial_number',$id)
  86. ->find()
  87. ->toArray();
  88. return $info;
  89. }
  90. /*----------------api----------------*/
  91. public function recordInfo($serialNum,$orgId){
  92. $map[] = ['serial_number','=',$serialNum];
  93. $map[] = ['org_id','=',$orgId];
  94. $map[] = ['del','=',0];
  95. $info = $this->field('id,serial_number,org_id,waste_device_id,user_id,cateid,weight,status,create_time,reason,is_print,weight2,num')
  96. ->where($map)->find();
  97. $info = $info?$info->toArray():[];
  98. if(!$info){
  99. $this->error = '记录不存在';
  100. return false;
  101. }
  102. $org = Db::name('org')
  103. ->where('id',$info['org_id'])
  104. ->field('name')->find();
  105. $info['org_name'] = $org?$org['name']:'';
  106. $user = Db::name('user')
  107. ->where('id',$info['user_id'])
  108. ->field('real_name')->find();
  109. $info['real_name'] = $user?$user['real_name']:'';
  110. $wasteDevice = Db::name('address')
  111. ->where('id',$info['waste_device_id'])
  112. ->field('title')
  113. ->find();
  114. $info['title'] = $wasteDevice?$wasteDevice['title']:'';
  115. $info['cate_id'] = $info['cateid'];
  116. $info['cate_name'] =Db::name('waste_type')->where('id',$info['cateid'])->value('title');
  117. $info['unit'] =Db::name('waste_type')->where('id',$info['cateid'])->value('unit');
  118. unset($info['cateid']);
  119. $lists = Db::name('waste_record_user')
  120. ->alias('wru')
  121. ->where('wru.waste_record_id',$info['id'])
  122. ->join('user u','u.id = wru.user_id')
  123. ->field('u.real_name,wru.status,wru.create_time')
  124. ->order('wru.id asc')
  125. ->select();
  126. $data = [
  127. 'type' => 1, // 1=医废记录详情 2=医废包详情
  128. 'info' => $info,
  129. 'status_list' => $lists?$lists:[]
  130. ];
  131. return $data;
  132. }
  133. public function queryIsPrint($id){
  134. $ret=$this
  135. ->where('id',$id)
  136. ->field('is_print')
  137. ->find()->toArray();
  138. return $ret;
  139. }
  140. public function wasteRecordList($orgId,$status,$createTime,$page,$size){
  141. $offset= ($page - 1) * $size;
  142. $starttime=$createTime.' 00:00:00';
  143. $endtime=$createTime.' 23:59:59';
  144. $where[] = ['create_time','between',[$starttime,$endtime]];
  145. $list=$this
  146. ->field('waste_device_id,cateid,create_time,is_print,serial_number,id,weight,num')
  147. ->where([
  148. 'org_id'=>$orgId,
  149. 'status'=>$status,
  150. 'del'=>0,
  151. ])
  152. ->where($where)
  153. ->order('id desc')
  154. ->limit($offset,$size)
  155. ->select()
  156. ->toArray();
  157. $ret['list']=$list;
  158. foreach ($list as $k=>$v){
  159. $title=Db::name('address')
  160. ->where([
  161. 'id'=>$v['waste_device_id'],
  162. 'del'=>0,
  163. 'enable'=>1,
  164. ])->value('title');
  165. $ret['list'][$k]['title']= $title;
  166. $cate = Db::name('waste_type')
  167. ->where('id',$v['cateid'])
  168. ->value('title');
  169. $ret['list'][$k]['cate_title']= $cate;
  170. $ret['list'][$k]['unit']= Db::name('waste_type')
  171. ->where('id',$v['cateid'])
  172. ->value('unit');
  173. }
  174. return $ret;
  175. }
  176. public function unTransportList($orgId,$createTime){
  177. $where = [];
  178. if($createTime){
  179. $starttime=$createTime.' 00:00:00';
  180. $endtime=$createTime.' 23:59:59';
  181. $where[] = ['create_time','between',[$starttime,$endtime]];
  182. }
  183. $list=$this
  184. ->field('waste_device_id,cateid,create_time,is_print,serial_number,id,weight,num')
  185. ->where('org_id',$orgId)
  186. ->where('del',0)
  187. ->where($where)
  188. ->where('status','in',[0,1])
  189. ->order('id','desc')
  190. ->select()
  191. ->toArray();
  192. $ret['list']=$list;
  193. foreach ($list as $k=>$v){
  194. $title=Db::name('address')
  195. ->where([
  196. 'id'=>$v['waste_device_id'],
  197. 'del'=>0,
  198. 'enable'=>1,
  199. ])->value('title');
  200. $ret['list'][$k]['title']= $title;
  201. $cate =Db::name('waste_type')
  202. ->where('id',$v['cateid'])
  203. ->value('title');
  204. $ret['list'][$k]['cate_title']= $cate;
  205. $ret['list'][$k]['unit']= Db::name('waste_type')
  206. ->where('id',$v['cateid'])
  207. ->value('unit');
  208. }
  209. return $ret;
  210. }
  211. public function saveRecord($data){
  212. $curtime = getTime();
  213. $data['serial_number'] = get_unique_id();
  214. // if(!$data['create_time']){
  215. // $data['create_time'] = $curtime;
  216. // }
  217. $data['create_time'] = $curtime;
  218. $data['create_yyyy'] = date('Y',strtotime($data['create_time']));
  219. $data['create_yyyymm'] = date('Ym',strtotime($data['create_time']));
  220. $data['create_yyyymmdd'] = date('Ymd',strtotime($data['create_time']));
  221. $this->startTrans();
  222. try{
  223. $waste_record_id = $this->insertGetId($data);
  224. if (!$waste_record_id) {
  225. throw new Exception('保存记录失败');
  226. }
  227. $sdata = [
  228. 'status' => 0,
  229. 'create_time' => $data['create_time'],
  230. 'user_id' => $data['user_id'],
  231. 'waste_record_id' => $waste_record_id,
  232. ];
  233. $res = Db::name('waste_record_user')->insert($sdata);
  234. if (!$res) {
  235. throw new Exception('保存操作记录失败');
  236. }
  237. $this->commit();
  238. return $waste_record_id;
  239. }catch (Exception $e){
  240. $this->error = $e->getMessage();
  241. $this->rollback();
  242. return false;
  243. }
  244. }
  245. public function saveStatus($data){
  246. $info = $this->
  247. where('serial_number',$data['serialNumber'])
  248. ->find();
  249. if(!$info){
  250. $this->error = '记录不存在';
  251. return false;
  252. }
  253. $curTime = date('Y-m-d H:i:s');
  254. $this->startTrans();
  255. try{
  256. $rdata = [
  257. 'weight2' => isset($data['weight2'])?$data['weight2']:0,
  258. 'status' => $data['status'],
  259. 'reason' => isset($data['reason'])?$data['reason']:'',
  260. 'package_id' => 0 // 有任何变化,都删除与包的关系
  261. ];
  262. $ret = $this
  263. ->where('id',$info['id'])
  264. ->update( $rdata);
  265. if (!$ret) {
  266. \exception('操作失败1');
  267. }
  268. $sdata = [
  269. 'status' => $data['status'],
  270. 'create_time' => $curTime,
  271. 'user_id' => $data['userId'],
  272. 'waste_record_id' => $info['id'],
  273. ];
  274. $res = Db::name('waste_record_user')
  275. ->insert($sdata);
  276. if (!$res) {
  277. \exception('操作失败');
  278. }
  279. // 如果在保内,检查包内是否还有可以记录,没有则删除包记录
  280. if($info['package_id'] > 0){
  281. $count = $this
  282. ->where('package_id',$info['package_id'])
  283. ->where('id','<>',$info['id'])
  284. ->count();
  285. if($count == 0){
  286. $res = Db::name('waste_package')->
  287. where('id',$info['package_id'])
  288. ->update(['del' => 1]);
  289. if (!$res) {
  290. \exception('操作失败');
  291. }
  292. }
  293. }
  294. $this->commit();
  295. }catch (Exception $e){
  296. $this->error = '操作失败'.$e->getMessage();
  297. $this->rollback();
  298. return false;
  299. }
  300. return true;
  301. }
  302. public function lists($orgId,$depId,$date,$page,$size,$userId){
  303. $offset= ($page - 1) * $size;
  304. $map[]= ['wr.org_id','=',$orgId];
  305. $map[]= ['wr.sign','=',0];
  306. $map[]= ['wr.del','=',0];
  307. $map1[]= ['wr.user_id','=',$userId];
  308. if($depId){
  309. $map1[]= ['wd.dep_id','=',$depId];
  310. }
  311. if($date){
  312. $date = date('Ymd',strtotime($date));
  313. $map[]= ['wr.create_yyyymmdd','=',$date];
  314. }
  315. $list = $this
  316. ->alias('wr')
  317. ->join('address wd','wd.id = wr.waste_device_id')
  318. ->where(function ($query) use ($map1) {
  319. $query->whereOr($map1);
  320. })->where($map)->field('wr.waste_device_id,wr.cateid,wr.create_time,wr.is_print,wr.serial_number,wr.id,wr.weight,wr.sign,wr.num')
  321. ->order('wr.id','desc')
  322. ->limit($offset,$size)->select();
  323. $list = $list?$list->toArray():[];
  324. foreach ($list as $k=>$v){
  325. $title=Db::name('address')
  326. ->where('id',$v['waste_device_id'])
  327. ->value('title');
  328. $list[$k]['waste_device_name'] = $title;
  329. $cate = Db::name('waste_type')->where('id',$v['cateid'])->value('title');
  330. $list[$k]['cate_title']= $cate?$cate:'';
  331. $list[$k]['unit']= Db::name('waste_type')->where('id',$v['cateid'])->value('unit');
  332. }
  333. $ret['list']=$list?$list:[];
  334. return $ret;
  335. }
  336. public function savePackage($post){
  337. $curTime =getTime();
  338. $data = [
  339. 'org_id' => $post['org_id'],
  340. 'user_id' => $post['user_id'],
  341. 'ids' => $post['ids'],
  342. 'create_time' => $curTime,
  343. ];
  344. // 检查是否符合要求
  345. $count = Db::name('waste_record')
  346. ->where('del',0)
  347. ->where('status',0)
  348. ->where('package_id',0)
  349. ->where('user_id',$data['user_id'])
  350. ->where('id','in',$data['ids'])
  351. ->count();
  352. if($count != count($data['ids'])){
  353. $this->error = '有不符合要求的医废记录';
  354. return false;
  355. }
  356. $this->startTrans();
  357. try{
  358. $pData = [
  359. 'org_id' => $post['org_id'],
  360. 'user_id' => $post['user_id'],
  361. 'record' => implode(',',$post['ids']),
  362. 'create_time' => $curTime,
  363. 'sn' => get_unique_id2()
  364. ];
  365. $id= Db::name('waste_package')
  366. ->insertGetId($pData);
  367. if (!$id) {
  368. exception('操作失败');
  369. }
  370. $sData = [
  371. 'package_id' => $id,
  372. ];
  373. $res = $this->where('id','in',$data['ids'])
  374. ->update( $sData);
  375. if (!$res) {
  376. exception('操作失败');
  377. }
  378. $this->commit();
  379. }catch (Exception $e){
  380. $this->error = $e->getMessage();
  381. $this->rollback();
  382. return false;
  383. }
  384. return $id;
  385. }
  386. public function packInfo($serialNum,$orgId){
  387. $map[] = ['sn','=',$serialNum];
  388. $map[] = ['org_id','=',$orgId];
  389. $map[] = ['del','=',0];
  390. $info = Db::name('waste_package')
  391. ->where($map)
  392. ->field('id,sn,org_id,user_id,status,create_time,jj_time,zy_time,jj_user_id,zy_user_id')
  393. ->find();
  394. if(!$info){
  395. $this->error = '记录不存在';
  396. return false;
  397. }
  398. $org = Db::name('org')
  399. ->where('id',$info['org_id'])
  400. ->field('name')->find();
  401. $info['org_name'] = $org?$org['name']:'';
  402. $user = Db::name('user')
  403. ->where('id',$info['user_id'])
  404. ->field('real_name')->find();
  405. $info['real_name'] = $user?$user['real_name']:'';
  406. $info['jj_time'] = $info['jj_time']?$info['jj_time']:'';
  407. $info['zy_time'] = $info['zy_time']?$info['zy_time']:'';
  408. if($info['jj_user_id'] > 0){
  409. $user = Db::name('user')
  410. ->where('id',$info['jj_user_id'])
  411. ->field('real_name')->find();
  412. $info['jj_real_name'] = $user?$user['real_name']:'';
  413. }
  414. if($info['zy_user_id'] > 0){
  415. $user = Db::name('user')
  416. ->where('id',$info['zy_user_id'])
  417. ->field('real_name')->find();
  418. $info['zy_real_name'] = $user?$user['real_name']:'';
  419. }
  420. $weight =$this
  421. ->where('package_id',$info['id'])
  422. ->sum('weight');
  423. // $info['weight'] = $weight?round($weight/1000,2):0;
  424. $info['kg'] = $weight?round($weight/1000,2):0;
  425. $info['weight'] = $weight;
  426. $count = $this->where('package_id',$info['id'])
  427. ->count();
  428. $info['count'] = $count?$count:0;
  429. $record = Db::name('waste_record')
  430. ->alias('wr')
  431. ->where('wr.del',0)
  432. ->where('wr.package_id',$info['id'])
  433. ->field('wr.waste_device_id,wr.cateid,wr.create_time,wr.is_print,wr.serial_number,wr.id,wr.weight,wr.sign,wr.num')
  434. ->order('wr.id desc')
  435. ->select();
  436. foreach ($record as $k=>$v){
  437. $title=Db::name('address')
  438. ->field('title')
  439. ->where('id',$v['waste_device_id'])
  440. ->find();
  441. $record[$k]['title'] = $title?$title['title']:'';
  442. $record[$k]['cate_name'] =Db::name('waste_type')
  443. ->where('id',$v['cateid'])->value('title');
  444. // $record[$k]['weight'] = $v['weight']?round($v['weight']/1000,2):0;
  445. $record[$k]['weight'] = $v['weight']?$v['weight']:0;
  446. $record[$k]['kg'] = $v['weight']?round($v['weight']/1000,2):0;
  447. $cate = Db::name('waste_type')->where('id',$v['cateid'])->find();
  448. $record[$k]['unit'] = $cate ? $cate['unit']:'';
  449. $tnum = round($v['weight'] / 1000, 2).'kg';
  450. if($v['num'] >0){
  451. $tnum = round($v['weight'] / 1000, 2).'kg'.'('.$v['num'].$cate['unit'].')';
  452. }
  453. $record[$k]['tum'] = $tnum;
  454. }
  455. $data = [
  456. 'type' => 2,
  457. 'pinfo' => $info,
  458. 'record' => $record?$record:[]
  459. ];
  460. return $data;
  461. }
  462. public function packagesLists($orgId,$page,$size,$userId){
  463. $offset= ($page - 1) * $size;
  464. $map[] = ['org_id','=',$orgId];
  465. $map[] = ['user_id','=',$userId];
  466. $map[] = ['del','=',0];
  467. $list = Db::name('waste_package')
  468. ->field('id,sn,org_id,user_id,status,create_time')
  469. ->order('id desc')
  470. ->where($map)
  471. ->limit($offset,$size)
  472. ->select();
  473. foreach ($list as $k=>$v){
  474. $user = Db::name('user')
  475. ->where('id',$v['user_id'])
  476. ->field('real_name')
  477. ->find();
  478. $list[$k]['real_name'] = $user?$user['real_name']:'';
  479. $weight = $this->where('package_id',$v['id'])
  480. ->sum('weight');
  481. $list[$k]['weight'] = $weight?$weight:0;
  482. $count = $this->where('package_id',$v['id'])
  483. ->count();
  484. $list[$k]['count'] = $count?$count:0;
  485. }
  486. return $list?$list:[];
  487. }
  488. public function delpackage($orgId,$userId,$id,$recordId){
  489. $info = $this
  490. ->where('del',0)
  491. ->where('org_id',$orgId)
  492. ->where('package_id',$id)
  493. ->where('id',$recordId)
  494. ->find();
  495. if(!$info){
  496. $this->error = '记录不存在';
  497. return false;
  498. }
  499. $this->startTrans();
  500. try{
  501. $res = $this->where('id',$recordId)
  502. ->update(['package_id' => 0]);
  503. if (!$res) {
  504. exception('操作失败');
  505. }
  506. // 如果在保内,检查包内是否还有可以记录,没有则删除包记录
  507. if($info['package_id'] > 0){
  508. $count = $this
  509. ->where('package_id',$id)
  510. ->where('id','<>',$recordId)
  511. ->count();
  512. if($count == 0){
  513. $res = Db::name('waste_package')
  514. ->where('id',$id)
  515. ->update(['del' => 1]);
  516. if (!$res) {
  517. exception('操作失败');
  518. }
  519. }
  520. }
  521. $this->commit();
  522. return true;
  523. }catch (Exception $e){
  524. $this->error = '操作失败'.$e->getmessage();
  525. $this->rollback();
  526. return false;
  527. }
  528. }
  529. // 交接
  530. public function jjpackage($orgId,$userId,$id){
  531. $info = Db::name('waste_package')
  532. ->where('del',0)
  533. ->where('org_id',$orgId)
  534. ->where('id',$id)
  535. ->find();
  536. if(!$info){
  537. $this->error = '记录不存在';
  538. return false;
  539. }
  540. if($info['status'] != 0){
  541. $this->error = '无权限操作';
  542. return false;
  543. }
  544. $lists = $this
  545. ->where('package_id',$id)
  546. ->where('del',0)
  547. ->select();
  548. $lists = $lists?$lists->toArray():[];
  549. if(count($lists) == 0){
  550. $this->error = '无可操作的医废记录';
  551. return false;
  552. }
  553. $ids = [];
  554. foreach ($lists as $k=>$v){
  555. $ids[] = $v['id'];
  556. }
  557. $this->startTrans();
  558. try{
  559. $rData = [
  560. 'jj_time' => getTime(),
  561. 'status' => 1,
  562. 'jj_user_id' => $userId,
  563. 'jj_record' => implode(',',$ids)
  564. ];
  565. $ret = Db::name('waste_package')
  566. ->where('id',$id)
  567. ->update($rData);
  568. if (!$ret) {
  569. exception('操作失败1');
  570. }
  571. foreach ($lists as $k=>$v){
  572. $rrData = [
  573. 'weight2' => 0,
  574. 'status' => 1,
  575. 'reason' => '',
  576. ];
  577. $ret = $this
  578. ->where('id',$v['id'])
  579. ->update($rrData);
  580. if (!$ret) {
  581. exception('操作失败');
  582. }
  583. $sData = [
  584. 'status' => 1,
  585. 'create_time' => getTime(),
  586. 'user_id' => $userId,
  587. 'waste_record_id' => $v['id'],
  588. ];
  589. $res = Db::name('waste_record_user')
  590. ->insert($sData);
  591. if (!$res) {
  592. exception('操作失败');
  593. }
  594. }
  595. $this->commit();
  596. return true;
  597. }catch (Exception $e){
  598. $this->error = '操作失败'.$e->getmessage();
  599. $this->rollback();
  600. return false;
  601. }
  602. }
  603. // 转运
  604. public function zypackage($orgId,$userId,$id){
  605. $info = Db::name('waste_package')
  606. ->where('del',0)
  607. ->where('org_id',$orgId)
  608. ->where('id',$id)
  609. ->find();
  610. if(!$info){
  611. $this->error = '记录不存在';
  612. return false;
  613. }
  614. if($info['status'] != 1){
  615. $this->error = '无权限操作';
  616. return false;
  617. }
  618. $lists = $this
  619. ->where('package_id',$id)
  620. ->where('del',0)
  621. ->select();
  622. $lists = $lists?$lists->toArray():[];
  623. if(count($lists) == 0){
  624. $this->error = '无可操作的医废记录';
  625. return false;
  626. }
  627. $ids = [];
  628. foreach ($lists as $k=>$v){
  629. $ids[] = $v['id'];
  630. }
  631. $this->startTrans();
  632. try{
  633. $rData = [
  634. 'zy_time' => date('Y-m-d H:i:s'),
  635. 'status' => 2,
  636. 'zy_user_id' => $userId,
  637. 'zy_record' => implode(',',$ids)
  638. ];
  639. $ret = Db::name('waste_package')
  640. ->where('id',$id)
  641. ->update($rData);
  642. if (!$ret) {
  643. throw new exception('操作失败');
  644. }
  645. foreach ($lists as $k=>$v){
  646. $rrdata = [
  647. 'weight2' => 0,
  648. 'status' => 2,
  649. 'reason' => '',
  650. ];
  651. $ret = $this
  652. ->where('id',$v['id'])
  653. ->update($rrdata);
  654. if (!$ret) {
  655. exception('操作失败');
  656. }
  657. $sdata = [
  658. 'status' => 2,
  659. 'create_time' => getTime(),
  660. 'user_id' => $userId,
  661. 'waste_record_id' => $v['id'],
  662. ];
  663. $res = Db::name('waste_record_user')
  664. ->insert($sdata);
  665. if (!$res) {
  666. exception('操作失败');
  667. }
  668. }
  669. $this->commit();
  670. return true;
  671. }catch (Exception $e){
  672. $this->error = '操作失败'.$e->getmessage();
  673. $this->rollback();
  674. return false;
  675. }
  676. }
  677. public function yflist($orgId,$userId){
  678. $map[] = ['wr.org_id','=',$orgId];
  679. $map[] = ['wr.user_id','=',$userId];
  680. $map[] = ['wr.package_id','=',0];
  681. $map[] = ['wr.del','=',0];
  682. $map[] = ['wr.status','=',0];
  683. $list=$this->alias('wr')
  684. ->where($map)
  685. ->field('wr.waste_device_id,wr.cateid,wr.create_time,wr.is_print,wr.serial_number,wr.id,wr.weight,wr.sign,wr.num')
  686. ->order('wr.id desc')
  687. ->select();
  688. $list = $list?$list->toArray():[];
  689. foreach ($list as $k=>$v){
  690. $title=Db::name('address')
  691. ->field('title')
  692. ->where('id',$v['waste_device_id'])
  693. ->find();
  694. $list[$k]['title'] = $title?$title['title']:'';
  695. $list[$k]['cate_name'] =Db::name('waste_type')->where('id',$v['cateid'])->value('title');
  696. $list[$k]['unit'] =Db::name('waste_type')->where('id',$v['cateid'])->value('unit');
  697. }
  698. return $list?$list:[];
  699. }
  700. public function printList($orgId,$userId){
  701. $title = input('title','');
  702. if($title!=''){
  703. $type = 7;
  704. $map1[]=['','exp',Db::raw("FIND_IN_SET($type,types)")];
  705. $address = Db::name('address')
  706. ->where('del',0)
  707. ->where('enable',1)
  708. ->where('org_id',$orgId)
  709. ->where('title','like','%'.$title.'%')
  710. ->where($map1)
  711. ->column('id');
  712. if($address){
  713. $map[] = ['wr.waste_device_id','in',$address];
  714. }else{
  715. $map[] = ['wr.waste_device_id','=',-1];
  716. }
  717. }
  718. $map[] = ['wr.org_id','=',$orgId];
  719. $map[] = ['wr.user_id','=',$userId];
  720. $map[] = ['wr.del','=',0];
  721. $map[] = ['wr.status','=',0];
  722. $map[] = ['wr.create_yyyymmdd','=',date('Ymd')];
  723. $list=$this->alias('wr')
  724. ->where($map)
  725. ->field('wr.waste_device_id,wr.cateid,wr.create_time,wr.is_print,wr.serial_number,wr.id,wr.weight,wr.sign,wr.num')
  726. ->order('wr.id desc')
  727. ->limit(1000)
  728. ->select();
  729. $list = $list?$list->toArray():[];
  730. foreach ($list as $k=>$v){
  731. $title=Db::name('address')
  732. ->field('title')
  733. ->where('id',$v['waste_device_id'])
  734. ->find();
  735. $list[$k]['title'] = $title?$title['title']:'';
  736. $list[$k]['cate_name'] =Db::name('waste_type')->where('id',$v['cateid'])->value('title');
  737. $list[$k]['unit'] =Db::name('waste_type')->where('id',$v['cateid'])->value('unit');
  738. }
  739. return $list?$list:[];
  740. }
  741. public function recordLists($orgId,$wasteDeviceId,$start,$end,$page,$size,$userId){
  742. $offset= ($page - 1) * $size;
  743. $map[] = ['wr.org_id','=',$orgId];
  744. $map[] = ['wr.del','=',0];
  745. if($wasteDeviceId>0){
  746. $map[] = ['wr.waste_device_id','=',$wasteDeviceId];
  747. }
  748. if($start){
  749. $date = date('Ymd',strtotime($start));
  750. $map[] = ['wr.create_yyyymmdd','>=',$date];
  751. }
  752. if($end){
  753. $date = date('Ymd',strtotime($end));
  754. $map[] = ['wr.create_yyyymmdd','<=',$date];
  755. }
  756. $list=db('waste_record')
  757. ->alias('wr')
  758. ->field('wr.waste_device_id,wr.status,wr.cateid,wr.create_time,wr.is_print,wr.serial_number,wr.id,wr.weight,wr.sign,wr.num')
  759. ->order('wr.id','desc')
  760. ->where($map)
  761. ->limit($offset,$size)
  762. ->select();
  763. foreach ($list as $k=>$v){
  764. $title= Db::name('address')
  765. ->field('title')
  766. ->where('id',$v['waste_device_id'])
  767. ->find();
  768. $list[$k]['title'] = $title?$title['title']:'';
  769. $list[$k]['cate_title'] = $this->getTableField('waste_type',['id'=>$v['cateid']],'title');
  770. $list[$k]['unit'] = $this->getTableField('waste_type',['id'=>$v['cateid']],'unit');
  771. }
  772. $ret=$list?$list:[];
  773. return $ret;
  774. }
  775. public function getByDepDayList($wasteDeviceId,$orgId){
  776. $typeList = model('WasteType')->getList($orgId);
  777. $str ='';
  778. foreach ($typeList as $k=>$v){
  779. $sum = Db::name('waste_record')
  780. ->where('create_yyyymmdd',date('Ymd'))
  781. ->where('org_id',$orgId)
  782. ->where('waste_device_id',$wasteDeviceId)
  783. ->where('cateid',$v['id'])
  784. ->where('del',0)
  785. ->sum('weight');
  786. if($sum >0){
  787. $count = ($sum/1000).'kg';
  788. $str.=$v['title'].':'.$count.';';
  789. }
  790. }
  791. if($str!=''){
  792. $s = explode(';',$str);
  793. unset($s[count($s)-1]);
  794. $str = implode(';',$s);
  795. }
  796. return $str;
  797. }
  798. public function print($ids,$orgId,$userId){
  799. $waste_device_id = [];
  800. $id = explode(',',$ids);
  801. $total = 0;
  802. $cate = [];
  803. foreach ($id as $k=>$v){
  804. $info = Db::name('waste_record')
  805. ->where('id',$v)
  806. ->find();
  807. if(empty($info)){
  808. $this->error='记录id'.$v.'不存在';
  809. return false;
  810. }
  811. if($info['user_id']!=$userId){
  812. $this->error='记录id'.$v.'收取人不是自己';
  813. return false;
  814. }
  815. $cateInfo = Db::name('waste_type')
  816. ->where('id',$info['cateid'])
  817. ->find();
  818. $cate[] = [
  819. 'id'=>$info['cateid'],
  820. 'title'=>$cateInfo['title'],
  821. 'num'=>$info['weight'],
  822. 'count'=>1,
  823. ];
  824. $total+=$info['weight'];
  825. $waste_device_id[] = $info['waste_device_id'];
  826. }
  827. $aa = [];
  828. foreach ($cate as $k=>$v){
  829. if(isset($aa[$v['id']])){
  830. $aa[$v['id']]['num'] = $aa[$v['id']]['num']+$v['num'];
  831. $aa[$v['id']]['count'] = $aa[$v['id']]['count']+1;
  832. }else{
  833. $aa[$v['id']] = $v;
  834. }
  835. }
  836. $ab = [];
  837. foreach ($aa as $k=>$v){
  838. $kg = sprintf("%.2f",$v['num']/1000);
  839. $ab[]=$v['title'].':'.$v['count'].' '.$kg.'kg';
  840. }
  841. if(count(array_unique($waste_device_id)) >1){
  842. $this->error='只能打印同一个科室下的记录';
  843. return false;
  844. }
  845. $address = Db::name('address')
  846. ->where('id',$waste_device_id[0])
  847. ->find();
  848. if(empty($address['user'])){
  849. $this->error='当前科室未绑定负责人';
  850. return false;
  851. }
  852. $amount = $total>0?sprintf("%.2f",$total/1000):"0";
  853. $total_desc = $amount.'kg,'.count($id).'袋';
  854. $a = [
  855. 'org_id'=>$orgId,
  856. 'waste_record_id'=>$ids,
  857. 'address'=>$address['title'],
  858. 'address_user'=>$address['user'],
  859. 'create_time'=>getTime(),
  860. 'total'=>$total_desc,
  861. 'user_id'=>$userId,
  862. 'desc'=>implode(',',$ab),
  863. ];
  864. $r = Db::name('waste_print_log')
  865. ->insertGetId($a);
  866. $a['org_name'] = Db::name('org')
  867. ->where('id',$a['org_id'])
  868. ->value('name');
  869. $a['user_name'] = Db::name('user')
  870. ->where('id',$userId)
  871. ->value('real_name');
  872. unset($a['user_id']);
  873. return $a;
  874. }
  875. }