WasteStatistics.php 73 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034
  1. <?php
  2. namespace app\admin\controller;
  3. use think\App;
  4. use think\Db;
  5. class WasteStatistics extends Auth {
  6. public function work() {
  7. $cur = date('Y-m-d');
  8. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  9. $end = input('end', date('Y-m-d'));
  10. $start1 = $start . ' 00:00:00';
  11. $end1 = $end . ' 23:59:59';
  12. $type = input('type');
  13. $typeList = Db::name('waste_type')
  14. ->where('enable', 1)
  15. ->where('del', 0)
  16. //->where('org_id', $this->orgId)
  17. ->select();
  18. $list = $this->workData($start1, $end1, $type);
  19. $this->assign('list', $list);
  20. $this->assign('type', $type);
  21. $this->assign('typeList', $typeList);
  22. $this->assign('start', $start);
  23. $this->assign('end', $end);
  24. return $this->fetch();
  25. }
  26. public function workData($start1, $end1, $type) {
  27. $map1[] = ['create_time', '>=', $start1];
  28. $map1[] = ['create_time', '<=', $end1];
  29. $map1[] = ['org_id', '=', $this->orgId];
  30. if (!empty($type)) {
  31. $map1[] = ['cateid', '=', $type];
  32. }
  33. $list = Db::name('waste_record')
  34. ->where($map1)
  35. ->where('del', 0)
  36. ->group('user_id')
  37. ->select();
  38. foreach ($list as $k => $v) {
  39. $list[$k]['title'] = Db::name('user')
  40. ->where('id', $v['user_id'])
  41. ->value('real_name');
  42. $c = Db::name('waste_record')
  43. ->where($map1)
  44. ->where('del', 0)
  45. ->where('user_id', $v['user_id'])
  46. ->count();
  47. $list[$k]['count'] = $c ? $c : 0;
  48. $weight = Db::name('waste_record')
  49. ->where($map1)
  50. ->where('del', 0)
  51. ->where('user_id', $v['user_id'])
  52. ->sum('weight');
  53. $list[$k]['weight'] = $weight ? round($weight / 1000, 2) : 0;
  54. }
  55. return $list;
  56. }
  57. public function workExport() {
  58. $cur = date('Y-m-d');
  59. $start = input('start', date('Y-m-d', strtotime('' . $cur . ' -1 week')));
  60. $end = input('end', date('Y-m-d'));
  61. $start1 = $start . ' 00:00:00';
  62. $end1 = $end . ' 23:59:59';
  63. $type = input('type');
  64. $ret = $this->workData($start1, $end1, $type);
  65. include_once env('root_path') . '/extend/phpexcel/Classes/PHPExcel.php';
  66. //实例化PHPExcel类
  67. $objPHPExcel = new \PHPExcel();
  68. //激活当前的sheet表
  69. $objPHPExcel->setActiveSheetIndex(0);
  70. //设置表格头(即excel表格的第一行)
  71. $objPHPExcel->setActiveSheetIndex(0)
  72. ->setCellValue('A1', '编号')
  73. ->setCellValue('B1', '姓名')
  74. ->setCellValue('C1', '单数')
  75. ->setCellValue('D1', '重量(kg)');
  76. // 设置表格头水平居中
  77. $objPHPExcel->setActiveSheetIndex(0)->getStyle('A1')->getAlignment()
  78. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  79. $objPHPExcel->setActiveSheetIndex(0)->getStyle('B1')->getAlignment()
  80. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  81. $objPHPExcel->setActiveSheetIndex(0)->getStyle('C1')->getAlignment()
  82. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  83. //设置列水平居中
  84. $objPHPExcel->setActiveSheetIndex(0)->getStyle('A')->getAlignment()
  85. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  86. $objPHPExcel->setActiveSheetIndex(0)->getStyle('B')->getAlignment()
  87. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  88. $objPHPExcel->setActiveSheetIndex(0)->getStyle('C')->getAlignment()
  89. ->setHorizontal(\PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
  90. //设置单元格宽度
  91. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('A')->setWidth(10);
  92. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('B')->setWidth(20);
  93. $objPHPExcel->setActiveSheetIndex(0)->getColumnDimension('C')->setWidth(20);
  94. //循环刚取出来的数组,将数据逐一添加到excel表格。
  95. for ($i = 0; $i < count($ret); $i++) {
  96. $objPHPExcel->getActiveSheet()->setCellValue('A' . ($i + 2), $ret[$i]['user_id']);
  97. $objPHPExcel->getActiveSheet()->setCellValue('B' . ($i + 2), $ret[$i]['title']);
  98. $objPHPExcel->getActiveSheet()->setCellValue('C' . ($i + 2), $ret[$i]['count']);
  99. $objPHPExcel->getActiveSheet()->setCellValue('D' . ($i + 2), $ret[$i]['weight']);
  100. }
  101. //设置保存的Excel表格名称
  102. $filename = '医废工作量统计_' . date('YmdHis', time()) . '.xls';
  103. //设置当前激活的sheet表格名称
  104. $objPHPExcel->getActiveSheet()->setTitle('医废工作量统计');
  105. //设置浏览器窗口下载表格
  106. ob_end_clean();
  107. header("Content-Type: application/force-download");
  108. header("Content-Type: application/octet-stream");
  109. header("Content-Type: application/download");
  110. header('Content-Disposition:inline;filename="' . $filename);
  111. //生成excel文件
  112. $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
  113. //下载文件在浏览器窗口
  114. return $objWriter->save('php://output');
  115. }
  116. // 近两年医废统计
  117. public function waste_year() {
  118. $org_id = $this->orgId;
  119. $year = date('Y');
  120. $qyear = $year - 1;
  121. $arr1 = [$year . '01', $year . '02', $year . '03', $year . '04', $year . '05', $year . '06', $year . '07', $year . '08', $year . '09', $year . '10', $year . '11', $year . '12',];
  122. $arr2 = [$qyear . '01', $qyear . '02', $qyear . '03', $qyear . '04', $qyear . '05', $qyear . '06', $qyear . '07', $qyear . '08', $qyear . '09', $qyear . '10', $qyear . '11', $qyear . '12',];
  123. $arrs = array_merge($arr2, $arr1);
  124. $lists = [];
  125. foreach ($arrs as $k => $v) {
  126. $weight = Db::name('waste_record')
  127. ->where('org_id', $org_id)
  128. ->where('del', 0)
  129. ->where('create_yyyymm', $v)
  130. ->sum('weight');
  131. $lists[] = [
  132. 'month' => $v,
  133. 'month_text' => intval(date('m', strtotime($v . '01'))) . '月',
  134. 'weight' => $weight && !empty($weight) ? round($weight / 1000, 2) : 0
  135. ];
  136. }
  137. $warr = $warr1 = $warr2 = [];
  138. $tmonths = [];
  139. $hb = [];
  140. // 计算环比
  141. foreach ($lists as $k => $v) {
  142. if ($k == 0) {
  143. $lists[$k]['hb'] = 0;
  144. }
  145. else {
  146. if ($lists[$k - 1]['weight'] > 0) {
  147. $lists[$k]['hb'] = round(($v['weight'] - $lists[$k - 1]['weight']) / $lists[$k - 1]['weight'], 3) * 100;
  148. }
  149. else {
  150. $lists[$k]['hb'] = 0;
  151. }
  152. }
  153. if ($k >= 12) {
  154. $warr1[] = $v['weight'];
  155. }
  156. else {
  157. $warr2[] = $v['weight'];
  158. }
  159. $warr[] = $v['weight'];
  160. $tmonths[] = date('Y-m', strtotime($v['month'] . '01'));
  161. $hb[] = $lists[$k]['hb'];
  162. }
  163. //计算同比
  164. $tbarr = [];
  165. foreach ($arr1 as $k => $v) {
  166. $v1 = $lists[$k]['weight'];
  167. $v2 = $lists[$k + 12]['weight'];
  168. if ($v1 > 0) {
  169. $tbarr[] = round(($v2 - $v1) / $v1, 3) * 100;
  170. }
  171. else {
  172. $tbarr[] = 0;
  173. }
  174. }
  175. $data = [
  176. 'lists' => $lists,
  177. 'tb' => $tbarr,
  178. 'months' => ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'],
  179. 'year' => $year,
  180. 'qyear' => $qyear,
  181. 'warr' => $warr,
  182. 'warr1' => $warr1,
  183. 'warr2' => $warr2,
  184. 'tmonths' => $tmonths,
  185. 'hb' => $hb
  186. ];
  187. $this->assign('data', $data);
  188. return $this->fetch();
  189. }
  190. //医疗报表统计
  191. public function view(){
  192. $month = input('month',date('Y-m'));
  193. $dep_id = input('dep_id','');
  194. $addr_id = input('addr_id','');
  195. $type_id = input('type_id','');
  196. $address =(new \app\common\model\Address())->getListByType(7,$this->orgId);
  197. $dep = (new \app\common\model\Dep())->getList($this->orgId);
  198. $typeList = Db::name('waste_type')
  199. ->where('enable', 1)
  200. ->order('create_time','asc')
  201. ->where('del', 0)
  202. // ->where('org_id', $this->orgId)
  203. ->select();
  204. $return = $this->viewData($month,$dep_id,$addr_id,$type_id);
  205. $this->assign('data',$return);
  206. $this->assign('address',$address);
  207. $this->assign('dep',$dep);
  208. $this->assign('typeList',$typeList);
  209. $this->assign('month',$month);
  210. $this->assign('dep_id',$dep_id);
  211. $this->assign('addr_id',$addr_id);
  212. $this->assign('type_id',$type_id);
  213. return $this->fetch();
  214. }
  215. public function viewData($month,$dep_id,$addr_id,$type_id){
  216. $map[] = ['org_id','=',$this->orgId];
  217. $typeMap = [];
  218. if($type_id !=''){
  219. $typeMap[] = ['id','=',$type_id];
  220. }
  221. $typeList = Db::name('waste_type')
  222. ->where('enable', 1)
  223. ->where('del', 0)
  224. ->order('create_time','asc')
  225. ->where($typeMap)
  226. // ->where('org_id', $this->orgId)
  227. ->select();
  228. $recordMap = [];
  229. $depWhere = [];
  230. if($dep_id !=''){
  231. $depWhere[] = ['id','=',$dep_id];
  232. $map[] = ['del','=',0];
  233. $map[] = ['enable','=',1];
  234. $map[] = ['dep_id','=',$dep_id];
  235. $map[]=['','exp',Db::raw("FIND_IN_SET(7,types)")];
  236. $address = Db::name('address')
  237. ->where($map)
  238. ->order('id desc')
  239. ->field('id,title,remark,sn,x,y')
  240. ->select();
  241. if($address){
  242. $recordMap[] = ['waste_device_id','in',array_column($address,'id')];
  243. }else{
  244. $recordMap[] = ['waste_device_id','=',0];
  245. }
  246. }
  247. if($addr_id!=''){
  248. $recordMap[] = ['waste_device_id','=',$addr_id];
  249. }
  250. $name1 = [];
  251. $name2 = [];
  252. $name3 = [];
  253. $data1 = [];
  254. $data2 = [];
  255. $data3 = [];
  256. $data4 = [];
  257. $day = getDay(strtotime($month));
  258. foreach ($day as $k1=>$v){
  259. $name2[] = date('d',strtotime($v));
  260. }
  261. $dep = Db::name('dep')
  262. ->where('del',0)
  263. ->where('org_id',$this->orgId)
  264. ->where('enable',1)
  265. ->where($depWhere)
  266. ->select();
  267. $depList = [];
  268. foreach ($dep as $k=>$v){
  269. $dep_map[] = ['del','=',0];
  270. $dep_map[] = ['enable','=',1];
  271. $dep_map[] = ['dep_id','=',$v['id']];
  272. $dep_map[]=['','exp',Db::raw("FIND_IN_SET(7,types)")];
  273. $address = Db::name('address')
  274. ->where($dep_map)
  275. ->order('id desc')
  276. ->field('id,title,remark,sn,x,y')
  277. ->select();
  278. if($address){
  279. $depList[] = [
  280. 'title'=>$v['title'],
  281. 'ids'=>array_column($address,'id')
  282. ];
  283. }
  284. }
  285. foreach ($depList as $k2=>$v2){
  286. $map = [];
  287. if($month){
  288. $map[] =['create_yyyymm','=',date('Ym',strtotime($month))];
  289. }
  290. $nums1 = Db::name('waste_record')
  291. ->where('org_id',$this->orgId)
  292. ->where('del',0)
  293. ->where($recordMap)
  294. ->where($map)
  295. ->where('waste_device_id','in',$v2['ids'])
  296. ->sum('weight');
  297. $depList[$k2]['total'] = $nums1?round($nums1/1000,2):0;
  298. }
  299. $depList = $depList?list_sort_by($depList,'total','desc'):[];
  300. $name3[] = $depList?array_column($depList,'title'):[];
  301. foreach ($typeList as $k=>$v){
  302. $map = [];
  303. if($month){
  304. $map[] =['create_yyyymm','=',date('Ym',strtotime($month))];
  305. }
  306. $num = Db::name('waste_record')
  307. ->where('org_id',$this->orgId)
  308. ->where('del',0)
  309. ->where('cateid',$v['id'])
  310. ->where($recordMap)
  311. ->where($map)
  312. ->sum('weight');
  313. $total = $num?round($num/1000,2):0;
  314. $name1[] = $v['title'];
  315. $data1[] = $total;
  316. $data2[] =['value'=>$total,'name'=>$v['title']];
  317. $numList = [];
  318. $numList1 = [];
  319. foreach ($day as $k1=>$v1){
  320. $nums = Db::name('waste_record')
  321. ->where('org_id',$this->orgId)
  322. ->where('del',0)
  323. ->where('cateid',$v['id'])
  324. ->where($recordMap)
  325. ->where($map)
  326. ->where('create_yyyymmdd',$v1)
  327. ->sum('weight');
  328. $totals = $nums?round($nums/1000,2):0;
  329. $numList[] = $totals;
  330. }
  331. foreach ($depList as $k2=>$v2){
  332. if($k2<=9){
  333. $nums1 = Db::name('waste_record')
  334. ->where('org_id',$this->orgId)
  335. ->where('del',0)
  336. ->where('cateid',$v['id'])
  337. ->where($map)
  338. ->where('waste_device_id','in',$v2['ids'])
  339. ->sum('weight');
  340. $totals1 = $nums1?round($nums1/1000,2):0;
  341. $numList1[] = $totals1;
  342. }
  343. }
  344. $data3[] = [
  345. 'name'=>$v['title'],
  346. 'type'=>'line',
  347. 'stack'=>'stack',
  348. 'data'=>$numList
  349. ];
  350. $data4[] = [
  351. 'name'=>$v['title'],
  352. 'type'=>'line',
  353. 'stack'=>'stack',
  354. 'data'=>$numList1
  355. ];
  356. }
  357. $return = [
  358. 'name1'=>$name1,
  359. 'name2'=>$name2,
  360. 'name3'=>$name3,
  361. 'data1'=>$data1,
  362. 'data2'=>$data2,
  363. 'data3'=>$data3,
  364. 'data4'=>$data4,
  365. ];
  366. return $return;
  367. }
  368. public function viewExportData($month,$dep_id,$addr_id,$type_id){
  369. $tMap = [];
  370. $tMap[] = ['enable','=',1];
  371. $tMap[] = ['del','=',0];
  372. //$tMap[] = ['org_id','=',$this->orgId];
  373. if($type_id!=''){
  374. $tMap[] = ['id','=',$type_id];
  375. }
  376. $lists = [];
  377. $type = Db::name('waste_type')->where($tMap)->select();
  378. $type = $type?$type:[];
  379. $first = [
  380. 'name' => '类型',
  381. ];
  382. $second = [
  383. 'name' => '重量',
  384. ];
  385. $third = [
  386. 'name' => '比例',
  387. ];
  388. $fourth = [
  389. 'name' => '',
  390. ];
  391. $five = [
  392. 'name' => '按天统计',
  393. ];
  394. $total = 0;
  395. $count = 1;
  396. foreach ($type as $k=>$v){
  397. $count++;
  398. $map = [];
  399. $map[] = ['del','=',0];
  400. $map[] = ['org_id','=',$this->orgId];
  401. $map[] = ['status','in',[0,1,2]];
  402. if($type_id){
  403. $map[] = ['cateid','=',$type_id];
  404. }
  405. if($addr_id){
  406. $map[] = ['waste_device_id','=',$addr_id];
  407. }
  408. if($dep_id){
  409. $addrs = Db::name('address')->where('dep_id',$dep_id)->where('enable',1)->where('del',0)->column('id');
  410. if($addrs){
  411. $map[] = ['waste_device_id','in',$addr_id];
  412. }else{
  413. $map[] = ['waste_device_id','=',-1];
  414. }
  415. }
  416. if($month){
  417. $map[] = ['create_yyyymm','=',str_ireplace('-','',$month)];
  418. }
  419. $weight = Db::name('waste_record')->where($map)->sum('weight');
  420. $total += $weight;
  421. $first['type'.$v['id']] = $v['title'];
  422. $second['type'.$v['id']] = round($weight/1000,2);
  423. $third['type'.$v['id']] = $weight;
  424. $fourth['type'.$v['id']] = '';
  425. $five['type'.$v['id']] = '';
  426. }
  427. foreach ($type as $k=>$v){
  428. $third['type'.$v['id']] = $total>0?round($third['type'.$v['id']]/$total,2):0;
  429. }
  430. $lists[] = $first;
  431. $lists[] = $second;
  432. $lists[] = $third;
  433. $lists[] = $fourth;
  434. $lists[] = $five;
  435. $days = getDay(strtotime($month.'-01'));
  436. foreach ($days as $kk=>$vv){
  437. $arr = [
  438. 'name' => date('Y-m-d',strtotime($vv))
  439. ];
  440. foreach ($type as $k=>$v){
  441. $map = [];
  442. $map[] = ['del','=',0];
  443. $map[] = ['org_id','=',$this->orgId];
  444. $map[] = ['status','in',[0,1,2]];
  445. if($type_id){
  446. $map[] = ['cateid','=',$type_id];
  447. }
  448. if($addr_id){
  449. $map[] = ['waste_device_id','=',$addr_id];
  450. }
  451. if($dep_id){
  452. $addrs = Db::name('address')->where('dep_id',$dep_id)->where('enable',1)->where('del',0)->column('id');
  453. if($addrs){
  454. $map[] = ['waste_device_id','in',$addr_id];
  455. }else{
  456. $map[] = ['waste_device_id','=',-1];
  457. }
  458. }
  459. $map[] = ['create_yyyymmdd','=',$vv];
  460. $weight = Db::name('waste_record')->where($map)->sum('weight');
  461. $arr['type'.$v['id']] = round($weight/1000,2);
  462. }
  463. $lists[] = $arr;
  464. }
  465. $arr2 = [
  466. 'name' => '',
  467. ];
  468. $arr3 = [
  469. 'name' => '按科室统计',
  470. ];
  471. foreach ($type as $k=>$v){
  472. $arr2['type'.$v['id']] = '';
  473. $arr3['type'.$v['id']] = '';
  474. }
  475. $lists[] = $arr2;
  476. $lists[] = $arr3;
  477. $m[] = ['org_id','=',$this->orgId];
  478. $m[] = ['enable','=',1];
  479. $m[] = ['del','=',0];
  480. if($dep_id > 0){
  481. $m[] = ['id','=',$dep_id];
  482. }
  483. $deps = Db::name('dep')->where($m)->select();
  484. $deps = $deps?$deps:[];
  485. foreach ($deps as $kk=>$vv){
  486. $arr = [
  487. 'name' => $vv['title'],
  488. ];
  489. foreach ($type as $k=>$v){
  490. $map = [];
  491. $map[] = ['del','=',0];
  492. $map[] = ['org_id','=',$this->orgId];
  493. $map[] = ['status','in',[0,1,2]];
  494. if($type_id){
  495. $map[] = ['cateid','=',$type_id];
  496. }
  497. if($addr_id){
  498. $map[] = ['waste_device_id','=',$addr_id];
  499. }
  500. if($vv['id']){
  501. $addrs = Db::name('address')->where('dep_id',$dep_id)->where('enable',1)->where('del',0)->column('id');
  502. if($addrs){
  503. $map[] = ['waste_device_id','in',$addr_id];
  504. }else{
  505. $map[] = ['waste_device_id','=',-1];
  506. }
  507. }
  508. $map[] = ['create_yyyymm','=',$month];
  509. $weight = Db::name('waste_record')->where($map)->sum('weight');
  510. $arr['type'.$v['id']] = round($weight/1000,2);
  511. }
  512. $lists[] = $arr;
  513. }
  514. $address = '地点:全部';
  515. if($addr_id){
  516. $address = '地点:'.Db::name('address')->where('id',$addr_id)->value('title');
  517. }
  518. $dep = '科室:全部';
  519. if($dep_id){
  520. $dep = '科室:'.Db::name('dep')->where('id',$dep_id)->value('title');
  521. }
  522. $typestr = '医废类型:全部';
  523. if($type_id){
  524. $typestr = '医废类型:'.Db::name('waste_type')->where('id',$type_id)->value('title');
  525. }
  526. $monthstr = "月份:".$month;
  527. $data = [
  528. 'count' => $count,
  529. 'address' => $address,
  530. 'dep' => $dep,
  531. 'type' => $typestr,
  532. 'types' => $type,
  533. 'monthstr' => $monthstr,
  534. 'lists' => $lists
  535. ];
  536. return $data;
  537. }
  538. public function viewExport(){
  539. $month = input('month',date('Y-m'));
  540. $dep_id = input('dep_id','');
  541. $addr_id = input('addr_id','');
  542. $type_id = input('type_id','');
  543. $data = $this->viewExportData($month,$dep_id,$addr_id,$type_id);
  544. $lists = $data['lists'];
  545. $types = $data['types'];
  546. $char = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
  547. $lins = [];
  548. // 暂时支持2层
  549. for( $i=0;$i<$data['count'];$i++ ){
  550. $r1 = $i%26;
  551. $r2 = floor($i/26);
  552. if($r2 == 0){
  553. $lins[] = $char[$r1];
  554. }else if($r2 == 1){
  555. $lins[] = $char[$r2-1].$char[$r1];
  556. }else if($r2 == 2){
  557. $lins[] = $char[$r2-1].$char[$r1];
  558. }else if($r2 == 3){
  559. $lins[] = $char[$r2-1].$char[$r1];
  560. }
  561. }
  562. $spreadsheet = new Spreadsheet();
  563. $worksheet = $spreadsheet->getActiveSheet();
  564. //设置工作表标题名称
  565. $worksheet->setTitle('医疗废弃物报表');
  566. foreach ($lins as $k=>$v){
  567. $spreadsheet->setActiveSheetIndex(0)->getStyle($v)->getAlignment()->setHorizontal(Alignment::HORIZONTAL_CENTER);
  568. $spreadsheet->setActiveSheetIndex(0)->getColumnDimension($v)->setAutoSize(true);
  569. }
  570. //表头
  571. //设置单元格内容
  572. $worksheet->setCellValueByColumnAndRow(1, 1, $data['address']);
  573. $worksheet->setCellValueByColumnAndRow(2, 1, $data['dep']);
  574. $worksheet->setCellValueByColumnAndRow(3, 1, $data['type']);
  575. $worksheet->setCellValueByColumnAndRow(4, 1, $data['monthstr']);
  576. foreach ($lists as $k=>$v){
  577. $worksheet->setCellValueByColumnAndRow(1, $k+2, $v['name']);
  578. foreach ($types as $kk=>$vv){
  579. $worksheet->setCellValueByColumnAndRow($kk+2, $k+2, $v['type'.$vv['id']]);
  580. }
  581. }
  582. $filename = '医疗废弃物报表'.$month.'.xlsx';
  583. header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
  584. header('Content-Disposition: attachment;filename="'.$filename.'"');
  585. header('Cache-Control: max-age=0');
  586. $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
  587. $writer->save('php://output');
  588. }
  589. // 医废日统计
  590. public function wasteDay() {
  591. $month = input('start',date('Y-m-d'));
  592. $addr_id = input('addr_id','');
  593. $type_id = input('type_id','');
  594. $addressList = (new \app\common\model\Address())->getListByType(7,$this->orgId);
  595. $tMap[] = ['del','=',0];
  596. $tMap[] = ['enable','=',1];
  597. //$tMap[] = ['org_id','=',$this->orgId];
  598. $typeList1 = Db::name('waste_type')
  599. ->where($tMap)
  600. ->field('id,title')
  601. ->order('create_time','asc')
  602. ->select();
  603. if($type_id!=''){
  604. $tMap[] = ['id','in',explode(',',$type_id)];
  605. $typeList = Db::name('waste_type')
  606. ->where($tMap)
  607. ->field('id,title,type')
  608. ->order('create_time','asc')
  609. ->select();
  610. }else{
  611. $typeList = Db::name('waste_type')
  612. ->where($tMap)
  613. ->field('id,title,type')
  614. ->order('create_time','asc')
  615. ->select();
  616. }
  617. $data = $this->wasteDataDay($month,$addr_id,$type_id);
  618. $this->assign('data',$data['list']);
  619. $this->assign('typeList',$typeList);
  620. $this->assign('typeList1',$typeList1);
  621. $this->assign('addressList',$addressList);
  622. $this->assign('start',$month);
  623. $this->assign('addr_id',$addr_id?explode(',',$addr_id):[]);
  624. $this->assign('type_id',$type_id?explode(',',$type_id):[]);
  625. return $this->fetch();
  626. }
  627. public function wasteDataDay($month,$addr_id,$type_id){
  628. $org_id = $this->orgId;
  629. $aMap = [];
  630. if($addr_id!=''){
  631. $aMap[] = ['id','in',explode(',',$addr_id)];
  632. }
  633. $aMap[]=['','exp',Db::raw("FIND_IN_SET(7,types)")];
  634. $dep = Db::name('address')
  635. ->where('org_id',$org_id)
  636. ->where('enable',1)
  637. ->where('del',0)
  638. ->where($aMap)
  639. ->select();
  640. $tMap = [];
  641. if($type_id!=''){
  642. $tMap[] = ['id','in',explode(',',$type_id)];
  643. }
  644. $type = Db::name('waste_type')
  645. ->where($tMap)
  646. ->where('enable',1)
  647. ->where('del',0)
  648. ->order('create_time','asc')
  649. ->select();
  650. $date = date('Ymd',strtotime($month));
  651. $tnum = $tkg = 0;
  652. $records = Db::name('waste_record')
  653. ->where('org_id',$org_id)
  654. ->where('del',0)
  655. ->where('create_yyyymmdd',$date)
  656. ->field('waste_device_id,cateid,weight,num')
  657. ->select();
  658. foreach ($dep as $k=>$v){
  659. $ttkg = $ttnums = 0;
  660. foreach ($type as $k1=>$v1){
  661. $datas = 0;
  662. $totals = 0;
  663. $weight = 0;
  664. $weight2 = 0;
  665. $ttnums = 0;
  666. $totalkg = 0;
  667. $num = '';
  668. $totalNum = 0;
  669. $num2 = '';
  670. $totalNum2 = 0;
  671. foreach ($records as $rk=>$rv){
  672. if($rv['waste_device_id'] == $v['id'] && $rv['cateid'] == $v1['id']){
  673. $datas++;
  674. $weight += $rv['weight'];
  675. // $weight2 += $rv['weight'];
  676. if($v1['type'] == 1){
  677. $totalNum += $rv['num'];
  678. }
  679. }
  680. if($rv['cateid'] == $v1['id']){
  681. if($addr_id!=''){
  682. $addr_ids = explode(',',$addr_id);
  683. if(in_array($rv['waste_device_id'],$addr_ids)){
  684. $totals++;
  685. $weight2 += $rv['weight'];
  686. if($v1['type'] == 1){
  687. $totalNum2 += $rv['num'];
  688. }
  689. }
  690. }else{
  691. $totals++;
  692. $weight2 += $rv['weight'];
  693. if($v1['type'] == 1){
  694. $totalNum2 += $rv['num'];
  695. }
  696. }
  697. }
  698. if($rv['waste_device_id'] == $v['id']){
  699. if($addr_id!=''){
  700. $addr_ids = explode(',',$addr_id);
  701. if(in_array($rv['waste_device_id'],$addr_ids)){
  702. $ttnums++;
  703. $totalkg += $rv['weight'];
  704. if($v1['type'] == 1){
  705. $totalNum2 += $rv['num'];
  706. }
  707. }
  708. }else{
  709. $ttnums++;
  710. $totalkg += $rv['weight'];
  711. if($v1['type'] == 1){
  712. $totalNum2 += $rv['num'];
  713. }
  714. }
  715. }
  716. }
  717. $dep[$k]['data'][] = $datas;
  718. $dep[$k]['total'][] = $totals;
  719. // $dep[$k]['data'][] = $weight?round($weight/1000,2):0;
  720. // $dep[$k]['total'][] = $weight2?round($weight2/1000,2):0;
  721. $dep[$k]['nums'] = $ttnums;
  722. $ttkg = $totalkg?round($totalkg/1000,3):0;
  723. $dep[$k]['totalkg'] = $ttkg;
  724. $we = $weight?round($weight/1000,3):0;
  725. if($totalNum > 0){
  726. $num = '('.$totalNum.$v1['unit'].')';
  727. }
  728. $dep[$k]['data'][] = $we.$num;
  729. $we2 = $weight2?round($weight2/1000,3):0;
  730. if($totalNum2 > 0){
  731. $num2 = '('.$totalNum2.$v1['unit'].')';
  732. }
  733. $dep[$k]['total'][] =$we2.$num2;
  734. // $dep[$k]['total'][] = $we2 > 0 ? $we2 : $totalNum2.$v1['unit'];
  735. }
  736. $tnum += $ttnums;
  737. $tkg += $ttkg;
  738. }
  739. $data = [
  740. 'list'=>$dep,
  741. 'tnum'=>$tnum,
  742. 'tkg'=>$tkg,
  743. ];
  744. return $data;
  745. }
  746. public function wasteDataDayOld($month,$addr_id,$type_id){
  747. $org_id = $this->orgId;
  748. $aMap = [];
  749. if($addr_id!=''){
  750. $aMap[] = ['id','in',explode(',',$addr_id)];
  751. }
  752. $aMap[]=['','exp',Db::raw("FIND_IN_SET(7,types)")];
  753. $dep = Db::name('address')
  754. ->where('org_id',$org_id)
  755. ->where('enable',1)
  756. ->where('del',0)
  757. ->where($aMap)
  758. ->select();
  759. $tMap = [];
  760. if($type_id!=''){
  761. $tMap[] = ['id','in',explode(',',$type_id)];
  762. }
  763. $type = Db::name('waste_type')
  764. ->where('enable',1)
  765. ->where('del',0)
  766. //->where('org_id',$this->orgId)
  767. ->where($tMap)
  768. ->select();
  769. $date = date('Ymd',strtotime($month));
  770. foreach ($dep as $k=>$v){
  771. foreach ($type as $k1=>$v1){
  772. $map = [];
  773. $map[] = ['CREATE_YYYYMMDD','=',$date];
  774. $row = Db::name('waste_record')
  775. ->where('waste_device_id',$v['id'])
  776. ->where('cateid',$v1['id'])
  777. ->where('org_id',$org_id)
  778. ->where('del',0)
  779. ->where($map)
  780. ->count();
  781. $dep[$k]['data'][] = $row;
  782. $map1 = [];
  783. if($addr_id!=''){
  784. $map1[] = ['waste_device_id','in',explode(',',$addr_id)];
  785. }
  786. $dep[$k]['total'][] = Db::name('waste_record')
  787. ->where('cateid',$v1['id'])
  788. ->where('org_id',$org_id)
  789. ->where('del',0)
  790. ->where($map)
  791. ->where($map1)
  792. ->count();
  793. $kg = Db::name('waste_record')
  794. ->where('waste_device_id',$v['id'])
  795. ->where('cateid',$v1['id'])
  796. ->where('org_id',$org_id)
  797. ->where('del',0)
  798. ->where($map)
  799. ->sum('weight');
  800. $we = $kg?round($kg/1000,2):0;
  801. $dep[$k]['data'][] = $we;
  802. $kg = Db::name('waste_record')
  803. ->where('cateid',$v1['id'])
  804. ->where('org_id',$org_id)
  805. ->where('del',0)
  806. ->where($map)
  807. ->where($map1)
  808. ->sum('weight');
  809. $we = $kg?round($kg/1000,2):0;
  810. $dep[$k]['total'][] =$we;
  811. }
  812. }
  813. return $dep;
  814. }
  815. //医废日统计导出
  816. public function wasteDayExport()
  817. {
  818. set_time_limit(0);
  819. ini_set("memory_limit", "1024M");
  820. $month = input('start',date('Y-m-d'));
  821. $addr_id = input('addr_id','');
  822. $type_id = input('type_id','');
  823. $data = $this->wasteDataDay($month,$addr_id,$type_id);
  824. $data = $data['list'];
  825. $tMap[] = ['del','=',0];
  826. $tMap[] = ['enable','=',1];
  827. //$tMap[] = ['org_id','=',$this->orgId];
  828. if($type_id!=''){
  829. $tMap[] = ['id','in',explode(',',$type_id)];
  830. $type = Db::name('waste_type')
  831. ->where($tMap)
  832. ->field('id,title,type')
  833. ->select();
  834. }else{
  835. $type = Db::name('waste_type')
  836. ->where($tMap)
  837. ->field('id,title,type')
  838. ->select();
  839. }
  840. $title = '医废日统计';
  841. if(!empty($month)){
  842. $title = $month.'医废日统计';
  843. }
  844. header("Content-type: application/vnd.ms-excel");
  845. header("Content-Type: application/force-download");
  846. header("Content-Disposition: attachment; filename=".$title.".xls");
  847. header('Expires:0');
  848. header('Pragma:public');
  849. $res = '';
  850. $res.='<table style="border-top: 1px solid #ddd;border-left: 1px solid #ddd;border-spacing: 0;">';
  851. $res.='<tr style="background: #ffffff;">
  852. <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="2">地点</th>';
  853. foreach ($type as $k=>$v){
  854. $res.=' <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" colspan="2">'.$v['title'].'</th>';
  855. }
  856. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="2">备注</th>';
  857. $res.='<tr style="background: #ffffff;">';
  858. foreach ($type as $v){
  859. $res.=' <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">件数/包</th>
  860. <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">重量kg</th>';
  861. }
  862. foreach ($data as $k=>$v){
  863. $res.='<tr style="background: #ffffff;">';
  864. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['title'].'</td>';
  865. foreach ($v['data'] as $k1=>$v1){
  866. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1.'</td>';
  867. }
  868. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd"></td>';
  869. $res.='</tr>';
  870. }
  871. $res.='<tr style="background: #ffffff;">
  872. <td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">共计:</td>';
  873. if(!empty($data)){
  874. foreach ($data[0]['total'] as $k1=>$v1){
  875. $res.=' <td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1.'</td>';
  876. }
  877. }
  878. $res.='<td style="border-bottom: 1px solid #ddd;border-right: 1px solid #ddd"></td>
  879. </tr>';
  880. echo $res;
  881. }
  882. // 医废月统计
  883. public function wasteMonth() {
  884. $month = input('start',date('Y-m'));
  885. $addr_id = input('addr_id','');
  886. $type_id = input('type_id','');
  887. $addressList = (new \app\common\model\Address())->getListByType(7,$this->orgId);
  888. $tMap[] = ['del','=',0];
  889. $tMap[] = ['enable','=',1];
  890. // $tMap[] = ['org_id','=',$this->orgId];
  891. $typeList1 = Db::name('waste_type')
  892. ->where($tMap)
  893. ->field('id,title')
  894. ->order('create_time','asc')
  895. ->select();
  896. if($type_id!=''){
  897. $tMap[] = ['id','in',explode(',',$type_id)];
  898. $typeList = Db::name('waste_type')
  899. ->where($tMap)
  900. ->field('id,title,type')
  901. ->order('create_time','asc')
  902. ->select();
  903. }else{
  904. $typeList = Db::name('waste_type')
  905. ->where($tMap)
  906. ->field('id,title,type')
  907. ->order('create_time','asc')
  908. ->select();
  909. }
  910. $data = $this->wasteMonthData($month,$addr_id,$type_id);
  911. $this->assign('data',$data['res']);
  912. $this->assign('totalData',$data['total']);
  913. $this->assign('typeList',$typeList);
  914. $this->assign('typeList1',$typeList1);
  915. $this->assign('addressList',$addressList);
  916. $this->assign('start',$month);
  917. $this->assign('addr_id',$addr_id?explode(',',$addr_id):[]);
  918. $this->assign('type_id',$type_id?explode(',',$type_id):[]);
  919. return $this->fetch();
  920. }
  921. public function wasteMonthData($month,$addr_id,$type_id){
  922. $org_id = $this->orgId;
  923. $dep = getDay(strtotime($month));
  924. $tMap = [];
  925. if($type_id!=''){
  926. $tMap[] = ['id','in',explode(',',$type_id)];
  927. }
  928. // $type = Db::name('waste_type')
  929. // ->where('enable',1)
  930. // ->where('del',0)
  931. // ->where($tMap)
  932. // ->select();
  933. $type = Db::name('waste_type')
  934. ->where($tMap)
  935. ->where('enable',1)
  936. ->where('del',0)
  937. ->order('create_time','asc')
  938. ->select();
  939. $newTypeIds = array_column($type,'id');
  940. $res = [];
  941. $total = [];
  942. $records = Db::name('waste_record')
  943. ->alias('wr')
  944. ->join('address a','a.id=wr.waste_device_id')
  945. ->join('waste_type wt','wt.id=wr.cateid')
  946. ->where('wr.org_id',$org_id)
  947. ->where('wr.del',0)
  948. ->where('wr.cateid','in',$newTypeIds)
  949. ->where('wr.create_yyyymm',date('Ym',strtotime($month)))
  950. ->field('wr.waste_device_id,wr.cateid,wr.weight,wr.create_yyyymmdd,wr.num')
  951. ->select();
  952. $tnum = $tkg = 0;
  953. foreach ($dep as $k=>$v){
  954. $ttkg = $ttnums = 0;
  955. foreach ($type as $k1=>$v1){
  956. $row = 0;
  957. $row2 = 0;
  958. $kg = 0;
  959. $kg2 = 0;
  960. $num = '';
  961. $totalNum = 0;
  962. $num2 = '';
  963. $totalNum2 = 0;
  964. $ttnums = 0;
  965. $totalkg = 0;
  966. foreach ($records as $rk=>$rv){
  967. if($rv['cateid'] == $v1['id'] && $rv['create_yyyymmdd'] == $v){
  968. if($addr_id!=''){
  969. $addr_ids = explode(',',$addr_id);
  970. if(in_array($rv['waste_device_id'],$addr_ids)){
  971. $row++;
  972. $kg += $rv['weight'];
  973. if($v1['type'] == 1){
  974. $totalNum += $rv['num'];
  975. }
  976. }
  977. }else{
  978. $row++;
  979. $kg += $rv['weight'];
  980. if($v1['type'] == 1){
  981. $totalNum += $rv['num'];
  982. }
  983. }
  984. }
  985. if($rv['create_yyyymmdd'] == $v){
  986. if($addr_id!=''){
  987. $addr_ids = explode(',',$addr_id);
  988. if(in_array($rv['waste_device_id'],$addr_ids)){
  989. $ttnums +=1;
  990. $totalkg += $rv['weight'];
  991. }
  992. }else{
  993. $ttnums +=1;
  994. $totalkg += $rv['weight'];
  995. }
  996. }
  997. if($rv['cateid'] == $v1['id']){
  998. if($addr_id!=''){
  999. $addr_ids = explode(',',$addr_id);
  1000. if(in_array($rv['waste_device_id'],$addr_ids)){
  1001. $row2++;
  1002. $kg2 += $rv['weight'];
  1003. if($v1['type'] == 1){
  1004. $totalNum2 += $rv['num'];
  1005. }
  1006. }
  1007. }else{
  1008. $row2++;
  1009. $kg2 += $rv['weight'];
  1010. if($v1['type'] == 1){
  1011. $totalNum2 += $rv['num'];
  1012. }
  1013. }
  1014. }
  1015. }
  1016. $res[$k]['list'][] = $row;
  1017. $total[$k][] = $row2;
  1018. $res[$k]['nums'] = $ttnums;
  1019. $ttkg = $totalkg?round($totalkg/1000,3):0;
  1020. $res[$k]['totalkg'] = $ttkg;
  1021. $we = $kg?round($kg/1000,2):0;
  1022. // $res[$k]['list'][] = $we > 0 ? $we : $totalNum.$v1['unit'];
  1023. $we2 = $kg2?round($kg2/1000,2):0;
  1024. if($totalNum > 0){
  1025. $num = '('.$totalNum.$v1['unit'].')';
  1026. }
  1027. $res[$k]['list'][] = $we.$num;
  1028. if($totalNum2 > 0){
  1029. $num2 = '('.$totalNum2.$v1['unit'].')';
  1030. }
  1031. $total[$k][] =$we2.$num2;
  1032. // $total[$k][] = $we2 > 0 ? $we2 : $totalNum2.$v1['unit'];
  1033. // $we = $kg?round($kg/1000,2):0;
  1034. // $res[$k][] = $we;
  1035. //
  1036. // $we = $kg2?round($kg2/1000,2):0;
  1037. // $total[$k][] =$we;
  1038. }
  1039. $tnum += $ttnums;
  1040. $tkg += $ttkg;
  1041. }
  1042. return ['res'=>$res,'total'=>$total,'tnum'=>$tnum,'tkg'=>$tkg];
  1043. }
  1044. public function wasteMonthDataOld($month,$addr_id,$type_id){
  1045. $org_id = $this->orgId;
  1046. $dep = getDay(strtotime($month));
  1047. $tMap = [];
  1048. if($type_id!=''){
  1049. $tMap[] = ['id','in',explode(',',$type_id)];
  1050. }
  1051. $type = Db::name('waste_type')
  1052. ->where('enable',1)
  1053. ->where('del',0)
  1054. // ->where('org_id',$this->orgId)
  1055. ->where($tMap)
  1056. ->select();
  1057. $res = [];
  1058. $total = [];
  1059. foreach ($dep as $k=>$v){
  1060. foreach ($type as $k1=>$v1){
  1061. $map = [];
  1062. $map[] = ['CREATE_YYYYMMDD','=',$v];
  1063. $map1 = [];
  1064. if($addr_id!=''){
  1065. $map1[] = ['waste_device_id','in',explode(',',$addr_id)];
  1066. }
  1067. $row = Db::name('waste_record')
  1068. ->where('cateid',$v1['id'])
  1069. ->where('org_id',$org_id)
  1070. ->where('del',0)
  1071. ->where($map)
  1072. ->where($map1)
  1073. ->count();
  1074. $res[$k][] = $row;
  1075. $map2 = [];
  1076. $map2[] = ['CREATE_YYYYMM','=',date('Ym',strtotime($v))];
  1077. $row = Db::name('waste_record')
  1078. ->where('cateid',$v1['id'])
  1079. ->where('org_id',$org_id)
  1080. ->where('del',0)
  1081. ->where($map1)
  1082. ->where($map2)
  1083. ->count();
  1084. $total[$k][] = $row;
  1085. $kg = Db::name('waste_record')
  1086. ->where('cateid',$v1['id'])
  1087. ->where('org_id',$org_id)
  1088. ->where('del',0)
  1089. ->where($map)
  1090. ->where($map1)
  1091. ->sum('weight');
  1092. $we = $kg?round($kg/1000,2):0;
  1093. $res[$k][] = $we;
  1094. $kg = Db::name('waste_record')
  1095. ->where('cateid',$v1['id'])
  1096. ->where('org_id',$org_id)
  1097. ->where('del',0)
  1098. ->where($map1)
  1099. ->where($map2)
  1100. ->sum('weight');
  1101. $we = $kg?round($kg/1000,2):0;
  1102. $total[$k][] =$we;
  1103. }
  1104. }
  1105. return ['res'=>$res,'total'=>$total];
  1106. }
  1107. public function wasteMonthExport(){
  1108. $month = input('start',date('Y-m'));
  1109. $addr_id = input('addr_id','');
  1110. $type_id = input('type_id','');
  1111. set_time_limit(0);
  1112. ini_set("memory_limit", "1024M");
  1113. $tMap[] = ['del','=',0];
  1114. $tMap[] = ['enable','=',1];
  1115. // $tMap[] = ['org_id','=',$this->orgId];
  1116. if($type_id!=''){
  1117. $tMap[] = ['id','in',explode(',',$type_id)];
  1118. $typeList = Db::name('waste_type')
  1119. ->where($tMap)
  1120. ->field('id,title,type')
  1121. ->select();
  1122. }else{
  1123. $typeList = Db::name('waste_type')
  1124. ->where($tMap)
  1125. ->field('id,title,type')
  1126. ->select();
  1127. }
  1128. $data = $this->wasteMonthData($month,$addr_id,$type_id);
  1129. $lists = $data['res'];
  1130. $title = '医废月统计';
  1131. if(!empty($month)){
  1132. $title = $month.'医废月统计';
  1133. }
  1134. header("Content-type: application/vnd.ms-excel");
  1135. header("Content-Type: application/force-download");
  1136. header("Content-Disposition: attachment; filename=".$title.".xls");
  1137. header('Expires:0');
  1138. header('Pragma:public');
  1139. $res = '';
  1140. $res.='<table style="border-top: 1px solid #ddd;border-left: 1px solid #ddd;border-spacing: 0;">';
  1141. $res.='<tr style="background: #ffffff;">
  1142. <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="2">日期</th>';
  1143. foreach ($typeList as $k=>$v){
  1144. $res.=' <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" colspan="2">'.$v['title'].'</th>';
  1145. }
  1146. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="2">备注</th>';
  1147. $res.='<tr style="background: #ffffff;">';
  1148. foreach ($typeList as $v){
  1149. $res.=' <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">件数/包</th>
  1150. <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">重量kg</th>';
  1151. }
  1152. if(isset($lists[0]['list'])){
  1153. foreach ($lists as $k=>$v){
  1154. $res.='<tr style="background: #ffffff;">';
  1155. $kk = $k+1;
  1156. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$kk.'</td>';
  1157. if(isset($v['list'])){
  1158. foreach ($v['list'] as $k1=>$v1){
  1159. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1.'</td>';
  1160. }
  1161. }
  1162. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd"></td>';
  1163. $res.='</tr>';
  1164. }
  1165. }
  1166. $res.='<tr style="background: #ffffff;">
  1167. <td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">共计:</td>';
  1168. if(!empty($data['total'])){
  1169. foreach ($data['total'][0] as $k1=>$v1){
  1170. $res.=' <td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1.'</td>';
  1171. }
  1172. }
  1173. $res.='<td style="border-bottom: 1px solid #ddd;border-right: 1px solid #ddd"></td>
  1174. </tr>';
  1175. echo $res;
  1176. }
  1177. //科室月统计
  1178. public function wasteDeviceMonth() {
  1179. $month = input('start',date('Y-m'));
  1180. $addr_id = input('addr_id','');
  1181. $type_id = input('type_id','');
  1182. $addressList = (new \app\common\model\Address())->getListByType(7,$this->orgId);
  1183. $tMap[] = ['del','=',0];
  1184. $tMap[] = ['enable','=',1];
  1185. //$tMap[] = ['org_id','=',$this->orgId];
  1186. $typeList1 = Db::name('waste_type')
  1187. ->where($tMap)
  1188. ->field('id,title')
  1189. ->order('create_time','asc')
  1190. ->select();
  1191. if($type_id!=''){
  1192. $tMap[] = ['id','in',explode(',',$type_id)];
  1193. $typeList = Db::name('waste_type')
  1194. ->where($tMap)
  1195. ->order('create_time','asc')
  1196. ->field('id,title,type')
  1197. ->select();
  1198. }else{
  1199. $typeList = Db::name('waste_type')
  1200. ->where($tMap)
  1201. ->order('create_time','asc')
  1202. ->field('id,title,type')
  1203. ->select();
  1204. }
  1205. $data = $this->wasteDeviceMonthData($month,$addr_id,$type_id);
  1206. $this->assign('data',$data['list']);
  1207. $this->assign('typeList',$typeList);
  1208. $this->assign('typeList1',$typeList1);
  1209. $this->assign('addressList',$addressList);
  1210. $this->assign('start',$month);
  1211. $this->assign('addr_id',$addr_id?explode(',',$addr_id):[]);
  1212. $this->assign('type_id',$type_id?explode(',',$type_id):[]);
  1213. return $this->fetch();
  1214. }
  1215. public function wasteDeviceMonthData($month,$addr_id,$type_id){
  1216. $org_id = $this->orgId;
  1217. $aMap = [];
  1218. if($addr_id!=''){
  1219. $aMap[] = ['id','in',explode(',',$addr_id)];
  1220. }
  1221. $aMap[]=['','exp',Db::raw("FIND_IN_SET(7,types)")];
  1222. $dep = Db::name('address')
  1223. ->where('org_id',$org_id)
  1224. ->where('enable',1)
  1225. ->where('del',0)
  1226. ->where($aMap)
  1227. ->select();
  1228. $tMap = [];
  1229. if($type_id!=''){
  1230. $tMap[] = ['id','in',explode(',',$type_id)];
  1231. }
  1232. $type = Db::name('waste_type')
  1233. ->where($tMap)
  1234. ->where('enable',1)
  1235. ->order('create_time','asc')
  1236. ->where('del',0)
  1237. ->select();
  1238. $date = date('Ym',strtotime($month));
  1239. $tnum = $tkg = 0;
  1240. $records = Db::name('waste_record')
  1241. ->where('org_id',$org_id)
  1242. ->where('del',0)
  1243. ->where('create_yyyymm',$date)
  1244. ->field('waste_device_id,cateid,weight,num')
  1245. ->select();
  1246. foreach ($dep as $k=>$v){
  1247. $ttkg = $ttnums = 0;
  1248. foreach ($type as $k1=>$v1){
  1249. $datas = 0;
  1250. $totals = 0;
  1251. $weight = 0;
  1252. $weight2 = 0;
  1253. $ttnums = 0;
  1254. $totalkg = 0;
  1255. $num = '';
  1256. $totalNum = 0;
  1257. $num2 = '';
  1258. $totalNum2 = 0;
  1259. foreach ($records as $rk=>$rv){
  1260. if($rv['waste_device_id'] == $v['id'] && $rv['cateid'] == $v1['id']){
  1261. $datas++;
  1262. $weight += $rv['weight'];
  1263. // $weight2 += $rv['weight'];
  1264. if($v1['type'] == 1){
  1265. $totalNum += $rv['num'];
  1266. }
  1267. }
  1268. if($rv['cateid'] == $v1['id']){
  1269. if($addr_id!=''){
  1270. $addr_ids = explode(',',$addr_id);
  1271. if(in_array($rv['waste_device_id'],$addr_ids)){
  1272. $totals++;
  1273. $weight2 += $rv['weight'];
  1274. if($v1['type'] == 1){
  1275. $totalNum2 += $rv['num'];
  1276. }
  1277. }
  1278. }else{
  1279. $totals++;
  1280. $weight2 += $rv['weight'];
  1281. if($v1['type'] == 1){
  1282. $totalNum2 += $rv['num'];
  1283. }
  1284. }
  1285. }
  1286. if($rv['waste_device_id'] == $v['id']){
  1287. if($addr_id!=''){
  1288. $addr_ids = explode(',',$addr_id);
  1289. if(in_array($rv['waste_device_id'],$addr_ids)){
  1290. $ttnums++;
  1291. $totalkg += $rv['weight'];
  1292. if($v1['type'] == 1){
  1293. $totalNum2 += $rv['num'];
  1294. }
  1295. }
  1296. }else{
  1297. $ttnums++;
  1298. $totalkg += $rv['weight'];
  1299. if($v1['type'] == 1){
  1300. $totalNum2 += $rv['num'];
  1301. }
  1302. }
  1303. }
  1304. }
  1305. $dep[$k]['data'][] = $datas;
  1306. $dep[$k]['total'][] = $totals;
  1307. // $dep[$k]['data'][] = $weight?round($weight/1000,2):0;
  1308. // $dep[$k]['total'][] = $weight2?round($weight2/1000,2):0;
  1309. $dep[$k]['nums'] = $ttnums;
  1310. $ttkg = $totalkg?round($totalkg/1000,3):0;
  1311. $dep[$k]['totalkg'] = $ttkg;
  1312. $we = $weight?round($weight/1000,3):0;
  1313. if($totalNum > 0){
  1314. $num = '('.$totalNum.$v1['unit'].')';
  1315. }
  1316. $dep[$k]['data'][] = $we.$num;
  1317. $we2 = $weight2?round($weight2/1000,3):0;
  1318. if($totalNum2 > 0){
  1319. $num2 = '('.$totalNum2.$v1['unit'].')';
  1320. }
  1321. $dep[$k]['total'][] =$we2.$num2;
  1322. // $dep[$k]['total'][] = $we2 > 0 ? $we2 : $totalNum2.$v1['unit'];
  1323. }
  1324. $tnum += $ttnums;
  1325. $tkg += $ttkg;
  1326. }
  1327. $data = [
  1328. 'list'=>$dep,
  1329. 'tnum'=>$tnum,
  1330. 'tkg'=>$tkg,
  1331. ];
  1332. return $data;
  1333. }
  1334. public function wasteDeviceMonthExport()
  1335. {
  1336. set_time_limit(0);
  1337. ini_set("memory_limit", "1024M");
  1338. $month = input('start',date('Y-m-d'));
  1339. $addr_id = input('addr_id','');
  1340. $type_id = input('type_id','');
  1341. $data = $this->wasteDeviceMonthData($month,$addr_id,$type_id);
  1342. $data = $data['list'];
  1343. $tMap[] = ['del','=',0];
  1344. $tMap[] = ['enable','=',1];
  1345. if($type_id!=''){
  1346. $tMap[] = ['id','in',explode(',',$type_id)];
  1347. $type = Db::name('waste_type')
  1348. ->where($tMap)
  1349. ->field('id,title,type')
  1350. ->select();
  1351. }else{
  1352. $type = Db::name('waste_type')
  1353. ->where($tMap)
  1354. ->field('id,title,type')
  1355. ->select();
  1356. }
  1357. $title = '科室月统计';
  1358. if(!empty($month)){
  1359. $title = $month.'科室月统计';
  1360. }
  1361. header("Content-type: application/vnd.ms-excel");
  1362. header("Content-Type: application/force-download");
  1363. header("Content-Disposition: attachment; filename=".$title.".xls");
  1364. header('Expires:0');
  1365. header('Pragma:public');
  1366. $res = '';
  1367. $res.='<table style="border-top: 1px solid #ddd;border-left: 1px solid #ddd;border-spacing: 0;">';
  1368. $res.='<tr style="background: #ffffff;">
  1369. <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="2">地点</th>';
  1370. foreach ($type as $k=>$v){
  1371. $res.=' <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" colspan="2">'.$v['title'].'</th>';
  1372. }
  1373. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="2">备注</th>';
  1374. $res.='<tr style="background: #ffffff;">';
  1375. foreach ($type as $v){
  1376. $res.=' <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">件数/包</th>
  1377. <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">重量kg</th>';
  1378. }
  1379. foreach ($data as $k=>$v){
  1380. $res.='<tr style="background: #ffffff;">';
  1381. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['title'].'</td>';
  1382. foreach ($v['data'] as $k1=>$v1){
  1383. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1.'</td>';
  1384. }
  1385. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd"></td>';
  1386. $res.='</tr>';
  1387. }
  1388. $res.='<tr style="background: #ffffff;">
  1389. <td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">共计:</td>';
  1390. if(!empty($data)){
  1391. foreach ($data[0]['total'] as $k1=>$v1){
  1392. $res.=' <td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1.'</td>';
  1393. }
  1394. }
  1395. $res.='<td style="border-bottom: 1px solid #ddd;border-right: 1px solid #ddd"></td>
  1396. </tr>';
  1397. echo $res;
  1398. }
  1399. // 医废年统计
  1400. public function wasteYears() {
  1401. $month = input('start',date('Y'));
  1402. $addr_id = input('addr_id','');
  1403. $type_id = input('type_id','');
  1404. $addressList = (new \app\common\model\Address())->getListByType(7,$this->orgId);
  1405. $tMap[] = ['del','=',0];
  1406. $tMap[] = ['enable','=',1];
  1407. //$tMap[] = ['org_id','=',$this->orgId];
  1408. $typeList1 = Db::name('waste_type')
  1409. ->where($tMap)
  1410. ->field('id,title')
  1411. ->order('create_time','asc')
  1412. ->select();
  1413. if($type_id!=''){
  1414. $tMap[] = ['id','in',explode(',',$type_id)];
  1415. $typeList = Db::name('waste_type')
  1416. ->where($tMap)
  1417. ->field('id,title,type')
  1418. ->select();
  1419. }else{
  1420. $typeList = Db::name('waste_type')
  1421. ->where($tMap)
  1422. ->field('id,title,type')
  1423. ->order('create_time','asc')
  1424. ->select();
  1425. }
  1426. $data = $this->wasteYearsData($month,$addr_id,$type_id);
  1427. $this->assign('data',$data['list']);
  1428. $this->assign('typeList',$typeList);
  1429. $this->assign('typeList1',$typeList1);
  1430. $this->assign('addressList',$addressList);
  1431. $this->assign('start',$month);
  1432. $this->assign('addr_id',$addr_id?explode(',',$addr_id):[]);
  1433. $this->assign('type_id',$type_id?explode(',',$type_id):[]);
  1434. return $this->fetch();
  1435. }
  1436. public function wasteYearsData($month,$addr_id,$type_id){
  1437. $org_id = $this->orgId;
  1438. $dep = get_month1($month);
  1439. $tMap = [];
  1440. if($type_id!=''){
  1441. $tMap[] = ['id','in',explode(',',$type_id)];
  1442. }
  1443. $type = Db::name('waste_type')
  1444. ->where($tMap)
  1445. ->where('enable',1)
  1446. ->where('del',0)
  1447. ->order('create_time','asc')
  1448. ->select();
  1449. $records = Db::name('waste_record')
  1450. ->where('org_id',$org_id)
  1451. ->where('del',0)
  1452. ->where('create_yyyy',$month)
  1453. ->field('waste_device_id,cateid,weight,create_yyyymm,num')
  1454. ->select();
  1455. $tnum = $tkg = 0;
  1456. foreach ($dep as $k=>$v){
  1457. $ttkg = $ttnums = 0;
  1458. foreach ($type as $k1=>$v1){
  1459. $row = 0;
  1460. $row2 = 0;
  1461. $kg = 0;
  1462. $kg2 = 0;
  1463. $num = '';
  1464. $totalNum = 0;
  1465. $num2 = '';
  1466. $totalNum2 = 0;
  1467. $ttnums = 0;
  1468. $totalkg = 0;
  1469. foreach ($records as $rk=>$rv){
  1470. if($rv['cateid'] == $v1['id'] && $rv['create_yyyymm'] == $v['date']){
  1471. if($addr_id!=''){
  1472. $addr_ids = explode(',',$addr_id);
  1473. if(in_array($rv['waste_device_id'],$addr_ids)){
  1474. $row++;
  1475. $kg += $rv['weight'];
  1476. if($v1['type'] == 1){
  1477. $totalNum += $rv['num'];
  1478. }
  1479. }
  1480. }else{
  1481. $row++;
  1482. $kg += $rv['weight'];
  1483. if($v1['type'] == 1){
  1484. $totalNum += $rv['num'];
  1485. }
  1486. }
  1487. }
  1488. if($rv['create_yyyymm'] == $v['date']){
  1489. if($addr_id!=''){
  1490. $addr_ids = explode(',',$addr_id);
  1491. if(in_array($rv['waste_device_id'],$addr_ids)){
  1492. $ttnums++;
  1493. $totalkg += $rv['weight'];
  1494. }
  1495. }else{
  1496. $ttnums++;
  1497. $totalkg += $rv['weight'];
  1498. }
  1499. }
  1500. if($rv['cateid'] == $v1['id']){
  1501. if($addr_id!=''){
  1502. $addr_ids = explode(',',$addr_id);
  1503. if(in_array($rv['waste_device_id'],$addr_ids)){
  1504. $row2++;
  1505. $kg2 += $rv['weight'];
  1506. if($v1['type'] == 1){
  1507. $totalNum2 += $rv['num'];
  1508. }
  1509. }
  1510. }else{
  1511. $row2++;
  1512. $kg2 += $rv['weight'];
  1513. if($v1['type'] == 1){
  1514. $totalNum2 += $rv['num'];
  1515. }
  1516. }
  1517. }
  1518. }
  1519. $dep[$k]['list'][] = $row;
  1520. $dep[$k]['total'][] = $row2;
  1521. $dep[$k]['nums'] = $ttnums;
  1522. $ttkg = $totalkg?round($totalkg/1000,3):0;
  1523. $dep[$k]['totalkg'] = $ttkg;
  1524. $we = $kg?round($kg/1000,2):0;
  1525. $we2 = $kg2?round($kg2/1000,2):0;
  1526. if($totalNum > 0){
  1527. $num = '('.$totalNum.$v1['unit'].')';
  1528. }
  1529. $dep[$k]['list'][] = $we.$num;
  1530. if($totalNum2 > 0){
  1531. $num2 = '('.$totalNum2.$v1['unit'].')';
  1532. }
  1533. $dep[$k]['total'][] =$we2.$num2;
  1534. }
  1535. $tnum += $ttnums;
  1536. $tkg += $ttkg;
  1537. }
  1538. $data = [
  1539. 'list'=>$dep,
  1540. 'tnum'=>$tnum,
  1541. 'tkg'=>$tkg,
  1542. ];
  1543. return $data;
  1544. }
  1545. public function wasteYearsDataOld($month,$addr_id,$type_id){
  1546. $org_id = $this->orgId;
  1547. $dep = get_month($month);
  1548. $tMap = [];
  1549. if($type_id!=''){
  1550. $tMap[] = ['id','in',explode(',',$type_id)];
  1551. }
  1552. $type = Db::name('waste_type')
  1553. ->where('enable',1)
  1554. ->where('del',0)
  1555. //->where('org_id',$this->orgId)
  1556. ->where($tMap)
  1557. ->select();
  1558. foreach ($dep as $k=>$v){
  1559. foreach ($type as $k1=>$v1){
  1560. $map = [];
  1561. $map[] = ['create_yyyymm','=',$v['date']];
  1562. $map1 = [];
  1563. if($addr_id!=''){
  1564. $map1[] = ['waste_device_id','in',explode(',',$addr_id)];
  1565. }
  1566. $row = Db::name('waste_record')
  1567. ->where('cateid',$v1['id'])
  1568. ->where('org_id',$org_id)
  1569. ->where('del',0)
  1570. ->where($map)
  1571. ->where($map1)
  1572. ->count();
  1573. $dep[$k]['list'][] = $row;
  1574. $map2 = [];
  1575. $map2[] = ['create_yyyy','=',$month];
  1576. $row = Db::name('waste_record')
  1577. ->where('cateid',$v1['id'])
  1578. ->where('org_id',$org_id)
  1579. ->where('del',0)
  1580. ->where($map1)
  1581. ->where($map2)
  1582. ->count();
  1583. $dep[$k]['total'][] = $row;
  1584. $kg = Db::name('waste_record')
  1585. ->where('cateid',$v1['id'])
  1586. ->where('org_id',$org_id)
  1587. ->where('del',0)
  1588. ->where($map)
  1589. ->where($map1)
  1590. ->sum('weight');
  1591. $we = $kg?round($kg/1000,2):0;
  1592. $dep[$k]['list'][] = $we;
  1593. $kg = Db::name('waste_record')
  1594. ->where('cateid',$v1['id'])
  1595. ->where('org_id',$org_id)
  1596. ->where('del',0)
  1597. ->where($map1)
  1598. ->where($map2)
  1599. ->sum('weight');
  1600. $we = $kg?round($kg/1000,2):0;
  1601. $dep[$k]['total'][] = $we;
  1602. }
  1603. }
  1604. return $dep;
  1605. }
  1606. public function wasteYearsExport() {
  1607. $month = input('start',date('Y'));
  1608. $addr_id = input('addr_id','');
  1609. $type_id = input('type_id','');
  1610. set_time_limit(0);
  1611. ini_set("memory_limit", "1024M");
  1612. $tMap[] = ['del','=',0];
  1613. $tMap[] = ['enable','=',1];
  1614. //$tMap[] = ['org_id','=',$this->orgId];
  1615. if($type_id!=''){
  1616. $tMap[] = ['id','in',explode(',',$type_id)];
  1617. $typeList = Db::name('waste_type')
  1618. ->where($tMap)
  1619. ->field('id,title,type')
  1620. ->select();
  1621. }else{
  1622. $typeList = Db::name('waste_type')
  1623. ->where($tMap)
  1624. ->field('id,title,type')
  1625. ->select();
  1626. }
  1627. $data = $this->wasteYearsData($month,$addr_id,$type_id);
  1628. $list = $data['list'];
  1629. $title = '医废年统计';
  1630. if(!empty($month)){
  1631. $title = $month.'医废年统计';
  1632. }
  1633. header("Content-type: application/vnd.ms-excel");
  1634. header("Content-Type: application/force-download");
  1635. header("Content-Disposition: attachment; filename=".$title.".xls");
  1636. header('Expires:0');
  1637. header('Pragma:public');
  1638. $res = '';
  1639. $res.='<table style="border-top: 1px solid #ddd;border-left: 1px solid #ddd;border-spacing: 0;">';
  1640. $res.='<tr style="background: #ffffff;">
  1641. <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="2">日期</th>';
  1642. foreach ($typeList as $k=>$v){
  1643. $res.=' <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" colspan="2">'.$v['title'].'</th>';
  1644. }
  1645. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="2">备注</th>';
  1646. $res.='</tr>';
  1647. $res.='<tr style="background: #ffffff;">';
  1648. foreach ($typeList as $v){
  1649. $res.=' <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">件数/包</th>
  1650. <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">重量kg</th>';
  1651. }
  1652. $res.='</tr>';
  1653. if(isset($list[0]['list'])){
  1654. foreach ($list as $k=>$v){
  1655. $res.='<tr style="background: #ffffff;">';
  1656. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v['key'].'</td>';
  1657. if(isset($v['list'])){
  1658. foreach ($v['list'] as $k1=>$v1){
  1659. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1.'</td>';
  1660. }
  1661. }
  1662. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd"></td>';
  1663. $res.='</tr>';
  1664. }
  1665. }
  1666. $res.='<tr style="background: #ffffff;">
  1667. <td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">共计:</td>';
  1668. if(isset($list[1]['total'])){
  1669. foreach ($list[1]['total'] as $k1=>$v1){
  1670. $res.=' <td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v1.'</td>';
  1671. }
  1672. }
  1673. $res.='<td style="border-bottom: 1px solid #ddd;border-right: 1px solid #ddd"></td>
  1674. </tr>';
  1675. echo $res;
  1676. }
  1677. // 医废暂存统计
  1678. public function wasteZc() {
  1679. $addr_id = input('addr_id','');
  1680. $type_id = input('type_id','');
  1681. $addressList = (new \app\common\model\Address())->getListByType(7,$this->orgId);
  1682. $tMap[] = ['del','=',0];
  1683. $tMap[] = ['enable','=',1];
  1684. // $tMap[] = ['org_id','=',$this->orgId];
  1685. $typeList1 = Db::name('waste_type')
  1686. ->where($tMap)
  1687. ->field('id,title')
  1688. ->order('create_time','asc')
  1689. ->select();
  1690. if($type_id!=''){
  1691. $tMap[] = ['id','in',explode(',',$type_id)];
  1692. $typeList = Db::name('waste_type')
  1693. ->where($tMap)
  1694. ->field('id,title,type')
  1695. ->order('create_time','asc')
  1696. ->select();
  1697. }else{
  1698. $typeList = Db::name('waste_type')
  1699. ->where($tMap)
  1700. ->field('id,title,type')
  1701. ->order('create_time','asc')
  1702. ->select();
  1703. }
  1704. $data = $this->wasteZcData($addr_id,$type_id);
  1705. $this->assign('data',$data);
  1706. $this->assign('typeList',$typeList);
  1707. $this->assign('typeList1',$typeList1);
  1708. $this->assign('addressList',$addressList);
  1709. $this->assign('addr_id',$addr_id?explode(',',$addr_id):[]);
  1710. $this->assign('type_id',$type_id?explode(',',$type_id):[]);
  1711. return $this->fetch();
  1712. }
  1713. public function wasteZcData($addr_id,$type_id){
  1714. $org_id = $this->orgId;
  1715. $tMap = [];
  1716. if($type_id!=''){
  1717. $tMap[] = ['id','in',explode(',',$type_id)];
  1718. }
  1719. $type = Db::name('waste_type')
  1720. ->where('enable',1)
  1721. ->where('del',0)
  1722. ->order('create_time','asc')
  1723. //->where('org_id',$this->orgId)
  1724. ->where($tMap)
  1725. ->select();
  1726. $res = [];
  1727. foreach ($type as $k1=>$v1){
  1728. $map1 = [];
  1729. if($addr_id!=''){
  1730. $map1[] = ['waste_device_id','in',explode(',',$addr_id)];
  1731. }
  1732. $row = Db::name('waste_record')
  1733. ->where('cateid',$v1['id'])
  1734. ->where('org_id',$org_id)
  1735. ->where('del',0)
  1736. ->where($map1)
  1737. ->where(function ($query)
  1738. {
  1739. $query->where('status', 1)->whereor('status', 2);
  1740. })
  1741. ->count();
  1742. $res[]= $row;
  1743. $kg = Db::name('waste_record')
  1744. ->where('cateid',$v1['id'])
  1745. ->where('org_id',$org_id)
  1746. ->where('del',0)
  1747. ->where($map1)
  1748. ->where(function ($query)
  1749. {
  1750. $query->where('status', 1)->whereor('status', 2);
  1751. })
  1752. ->sum('weight');
  1753. $we = $kg?round($kg/1000,2):0;
  1754. $num = Db::name('waste_record')
  1755. ->where('cateid',$v1['id'])
  1756. ->where('org_id',$org_id)
  1757. ->where('del',0)
  1758. ->where($map1)
  1759. ->where(function ($query)
  1760. {
  1761. $query->where('status', 1)->whereor('status', 2);
  1762. })
  1763. ->sum('num');
  1764. if($num > 0){
  1765. $we = $we.'kg'.'('.$num.$v1['unit'].')';
  1766. }
  1767. $res[]= $we;
  1768. }
  1769. return $res;
  1770. }
  1771. // 医废暂存统计导出
  1772. public function wasteZcExport() {
  1773. $addr_id = input('addr_id','');
  1774. $type_id = input('type_id','');
  1775. set_time_limit(0);
  1776. ini_set("memory_limit", "1024M");
  1777. $tMap[] = ['del','=',0];
  1778. $tMap[] = ['enable','=',1];
  1779. //$tMap[] = ['org_id','=',$this->orgId];
  1780. if($type_id!=''){
  1781. $tMap[] = ['id','in',explode(',',$type_id)];
  1782. $typeList = Db::name('waste_type')
  1783. ->where($tMap)
  1784. ->field('id,title,type')
  1785. ->select();
  1786. }else{
  1787. $typeList = Db::name('waste_type')
  1788. ->where($tMap)
  1789. ->field('id,title,type')
  1790. ->select();
  1791. }
  1792. $data = $this->wasteZcData($addr_id,$type_id);
  1793. $title = '医废暂存统计';
  1794. header("Content-type: application/vnd.ms-excel");
  1795. header("Content-Type: application/force-download");
  1796. header("Content-Disposition: attachment; filename=".$title.".xls");
  1797. header('Expires:0');
  1798. header('Pragma:public');
  1799. $res = '';
  1800. $res.='<table style="border-top: 1px solid #ddd;border-left: 1px solid #ddd;border-spacing: 0;">';
  1801. $res.='<tr style="background: #ffffff;">';
  1802. foreach ($typeList as $k=>$v){
  1803. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" colspan="2">'.$v['title'].'</th>';
  1804. }
  1805. $res.='<th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd" rowspan="2">备注</th>';
  1806. $res.='</tr>';
  1807. $res.='<tr style="background: #ffffff;">';
  1808. foreach ($typeList as $v){
  1809. $res.=' <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">件数/包</th>
  1810. <th style="text-align: center;background: #ffffff;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">重量kg</th>';
  1811. }
  1812. $res.='</tr>';
  1813. $res.='<tr style="background: #ffffff;">';
  1814. foreach ($data as $k=>$v){
  1815. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd">'.$v.'</td>';
  1816. }
  1817. $res.='<td style="text-align: center;border-bottom: 1px solid #ddd;border-right: 1px solid #ddd"></td>';
  1818. $res.='</tr>';
  1819. echo $res;
  1820. }
  1821. }