dailyElectricityData($month); $this->assign('data',$data['res']); $this->assign('count',$data['count']); $this->assign('totalData',$data['total']); $this->assign('start',$month); $this->assign('date',date('Y年m月',strtotime($month))); return $this->fetch(); } public function dailyElectricityData($month){ $dep = getDay(strtotime($month)); $lastDayOfLastMonth = date('Ymd', strtotime("-1 day", strtotime(date("Y-m-01", strtotime($month))))); $map[] = ['del','=',0]; $map[] = ['org_id','=',$this->orgId]; $sn = Db::name('energy_electricity') ->where($map) ->where('enable',1) ->where('parent_id',0) ->column('number'); $res = []; $total = 0; foreach ($dep as $k=>$v){ $degree = 0; foreach ($sn as $kk =>$vv){ $row = Db::name('energy_electricity_record') ->where($map) ->where('read_yyyymmdd',$v) ->where('sn',$vv) ->field('sn,rate,degree') ->find(); $res[$k][$kk] = $row; if ($k > 0 && !empty($row)){ // $res[$k][$kk]['real_degree'] = number_format(($res[$k][$kk]['degree'] - $res[$k-1][$kk]['degree']) * $res[$k][$kk]['rate'],2,'.',''); $res[$k][$kk]['real_degree'] = sprintf("%.2f", ($res[$k][$kk]['degree'] - $res[$k-1][$kk]['degree']) * $res[$k][$kk]['rate']); $degree += $res[$k][$kk]['real_degree']; } if($k == 0){ $row2= Db::name('energy_electricity_record') ->where($map) ->where('read_yyyymmdd',$lastDayOfLastMonth) ->where('sn',$vv) ->field('sn,rate,degree') ->find(); // $row2['degree'] = isset($row2['degree'])?$row2['degree']:0; //$res[$k][$kk]['real_degree'] = number_format(($res[$k][$kk]['degree'] - $row2['degree']) * $res[$k][$kk]['rate'],2,'.',''); $res[$k][$kk]['real_degree'] = sprintf("%.2f", ($res[$k][$kk]['degree'] - $row2['degree']) * $res[$k][$kk]['rate']); $degree += $res[$k][$kk]['real_degree']; } } $res[$k]['total'] = sprintf('%.2f',$degree); $total+=$degree; } $total = sprintf('%.2f',$total); return ['res'=>$res,'total'=>$total,'count'=>count($sn)]; } //科室月电度统计 public function monthDepElectricity() { $month = input('start', date('Y')); for ($i = 1; $i < 13; $i++) { $monthList[] = $i.'月份'; } $data = $this->monthDepElectricityData($month); $this->assign('data', $data); $this->assign('monthList', $monthList); $this->assign('start', $month); // halt($data); return $this->fetch(); } public function monthDepElectricityData($month) { $month = $month.'0101'; for ($i = 1; $i < 13; $i++) { if ($i<10){ $date[] = date('Y'.'0'.$i,strtotime($month)); if ($i==1){ $time = strtotime($date[0].'01'); $lastDate[] = date('Ym',strtotime('-1 month',$time)); }else{ $lastDate[] = date('Y'.'0'.($i-1),strtotime($month)); } }else{ $date[] = date('Y'.$i,strtotime($month)); if ($i==10){ $lastDate[] = date('Y'.'0'.($i-1),strtotime($month)); }else{ $lastDate[] = date('Y'.($i-1),strtotime($month)); } } } $map[] = ['del','=',0]; $map[] = ['org_id','=',$this->orgId]; $list = []; $dep = Db::name('energy_dep') ->where($map) ->where('enable',1) ->field('id,name,area,address') ->select(); // halt($dep); foreach ($dep as $item){ $re = Db::name('energy_electricity') ->Where($map) ->where('enable',1) ->Where('dep','like','%'.$item['id'].'%') ->select(); if(!empty($re)){ $list[] = $re; } } $newList = $this->getNewList($list); foreach ($newList as $k => $v){ foreach ($v as $k2=>$v2){ $address = json_decode($v2['address']); $dep_id = json_decode($v2['dep']); $newList[$k][$k2]['info']['floor1'] = Db::name('energy_area')->where('id',$address[1])->value('title'); $newList[$k][$k2]['info']['floor2'] = Db::name('energy_area')->where('id',$address[2])->value('title'); $newList[$k][$k2]['info']['dep'] = Db::name('energy_dep')->where('id',$dep_id[0])->value('name'); $newList[$k][$k2]['info']['type'] = Db::name('energy_sort')->where('id',$v2['type_e'])->value('name'); foreach ($date as $k3=>$v3){ $re = Db::name('energy_electricity_record') ->field('sn,degree,rate,read_yyyymm') ->where($map) ->where('read_yyyymm',$v3) ->where('sn',$v2['number']) ->find(); $re2 = Db::name('energy_electricity_record') ->field('sn,degree') ->where($map) ->where('read_yyyymm',$lastDate[$k3]) ->where('sn',$v2['number']) ->find(); if (isset($re['sn'])){ $newList[$k][$k2]['rate'] = $re['rate']; } if ($re['degree']){ if ($v2['share'] == 1 || (string)$v2['share'] == '0'){ $re['real_degree'] = ($re['degree'] - $re2['degree']) * $re['rate'] * $v2['percent']; }else{ $re['real_degree'] =($re['degree'] - $re2['degree']) * $re['rate']; } } $newList[$k][$k2]['data'][] = $re; } } } foreach ($date as $k=>$v){ for($i =0;$i$v2){ $count += $v2['data'][$k]['real_degree']?$v2['data'][$k]['real_degree']:0; $total[$i][$k]=$count; } } } foreach ($total as $k=>$v){ foreach ($v as $k2=>$v2){ $newList[$k][0]['data'][$k2]['total']=$v2; } } return $newList; } //医院每日用水统计 public function dailyWater() { $month = input('start',date('Y-m')); $data = $this->dailyWaterData($month); $this->assign('data',$data['res']); $this->assign('count',$data['count']); $this->assign('totalData',$data['total']); $this->assign('start',$month); $this->assign('date',date('Y年m月',strtotime($month))); return $this->fetch(); } public function dailyWaterData($month){ $dep = getDay(strtotime($month)); $lastDayOfLastMonth = date('Ymd', strtotime("-1 day", strtotime(date("Y-m-01", strtotime($month))))); $map[] = ['del','=',0]; $map[] = ['org_id','=',$this->orgId]; $sn = Db::name('energy_water') ->where($map) ->where('enable',1) ->where('parent_id',0) ->column('number'); $res = []; $total = 0; foreach ($dep as $k=>$v){ $degree = 0; foreach ($sn as $kk =>$vv){ $row = Db::name('energy_water_record') ->where($map) ->where('read_yyyymmdd',$v) ->where('sn',$vv) ->field('sn,degree') ->find(); $res[$k][$kk] = $row; if ($k > 0 && !empty($row)){ // $res[$k][$kk]['real_degree'] = number_format(($res[$k][$kk]['degree'] - $res[$k-1][$kk]['degree']) ,2,'.',''); $res[$k][$kk]['real_degree'] = sprintf("%.2f", ($res[$k][$kk]['degree'] - $res[$k-1][$kk]['degree'])); $degree += $res[$k][$kk]['real_degree']; } if($k == 0){ $row2= Db::name('energy_water_record') ->where($map) ->where('read_yyyymmdd',$lastDayOfLastMonth) ->where('sn',$vv) ->field('sn,degree') ->find(); // $row2['degree'] = isset($row2['degree'])?$row2['degree']:0; //$res[$k][$kk]['real_degree'] = number_format(($res[$k][$kk]['degree'] - $row2['degree']) ,2,'.',''); $res[$k][$kk]['real_degree'] = sprintf("%.2f", ($res[$k][$kk]['degree'] - $row2['degree'])); $degree += $res[$k][$kk]['real_degree']; } } $res[$k]['total'] = sprintf('%.2f',$degree); $total+=$degree; } $total = sprintf('%.2f',$total); return ['res'=>$res,'total'=>$total,'count'=>count($sn)]; } //科室月冷热水量统计 public function monthDepWater() { $month = input('start', date('Y')); for ($i = 1; $i < 13; $i++) { $monthList[] = $i.'月份'; } $data = $this->monthDepWaterData($month); $this->assign('data', $data); $this->assign('monthList', $monthList); $this->assign('start', $month); // halt($data); return $this->fetch(); } public function monthDepWaterData($month) { $month = $month.'0101'; for ($i = 1; $i < 13; $i++) { if ($i<10){ $date[] = date('Y'.'0'.$i,strtotime($month)); if ($i==1){ $time = strtotime($date[0].'01'); $lastDate[] = date('Ym',strtotime('-1 month',$time)); }else{ $lastDate[] = date('Y'.'0'.($i-1),strtotime($month)); } }else{ $date[] = date('Y'.$i,strtotime($month)); if ($i==10){ $lastDate[] = date('Y'.'0'.($i-1),strtotime($month)); }else{ $lastDate[] = date('Y'.($i-1),strtotime($month)); } } } $map[] = ['del','=',0]; $map[] = ['org_id','=',$this->orgId]; $list = []; $dep = Db::name('energy_dep') ->where($map) ->where('enable',1) ->field('id,name,area,address') ->select(); foreach ($dep as $item){ $re = Db::name('energy_water') ->Where($map) ->where('enable',1) ->Where('dep','like','%'.$item['id'].'%') ->select(); if(!empty($re)){ $list[] = $re; } } if (empty($list)){ return $list; } $newList = $this->getNewList($list); foreach ($newList as $k => $v){ foreach ($v as $k2=>$v2) { $address = json_decode($v2['address']); $dep_id = json_decode($v2['dep']); $newList[$k][$k2]['info']['floor1'] = Db::name('energy_area')->where('id', $address[1])->value('title'); $newList[$k][$k2]['info']['floor2'] = Db::name('energy_area')->where('id', $address[2])->value('title'); $newList[$k][$k2]['info']['dep'] = Db::name('energy_dep')->where('id', $dep_id[0])->value('name'); if ($v2['type_w'] == 0) {//统计冷水 foreach ($date as $k3 => $v3) { $re = Db::name('energy_water_record') ->field('sn,degree,read_yyyymm') ->where($map) ->where('read_yyyymm', $v3) ->where('sn', $v2['number']) ->find(); $re2 = Db::name('energy_water_record') ->field('sn,degree') ->where($map) ->where('read_yyyymm', $lastDate[$k3]) ->where('sn', $v2['number']) ->find(); if ($re['degree']) { if ($v2['share'] == 1 || (string)$v2['share'] == '0'){ $re['cold_degree'] = ($re['degree'] - $re2['degree']) * $v2 ['percent']; }else{ $re['cold_degree'] = ($re['degree'] - $re2['degree']); } } $newList[$k]['sn'] = $v2['number']; $newList[$k]['cold'][] = $re; } } if ($v2['type_w'] == 1) { $hotIn = 0; foreach ($date as $k4 => $v4) { $hotIn = Db::name('energy_water_record') ->field('sn,degree,read_yyyymm') ->where($map) ->where('read_yyyymm', $v4) ->where('sn', $v2['number']) ->sum('degree'); if ($v2['share'] == 1){ $hotIn = $hotIn*$v2['percent']; } $newList[$k]['hotIn'][] = $hotIn; } } if ($v2['type_w'] == 2) { $hotReturn = 0; foreach ($date as $k5 => $v5) { $hotReturn = Db::name('energy_water_record') ->field('sn,degree,read_yyyymm') ->where($map) ->where('read_yyyymm', $v5) ->where('sn', $v2['number']) ->sum('degree'); if ($v2['share'] == 1){ $hotReturn = $hotReturn*$v2['percent']; } $newList[$k]['hotReturn'][] = $hotReturn; } } } } foreach ($newList as $k=> $v){ if (!isset($v['cold'])){ foreach ($date as $k1 => $v1) { $newList[$k]['cold'][] = 0; } } if (!isset($v['hotIn'])){ foreach ($date as $k1 => $v1) { $newList[$k]['hotIn'][] = 0; } } if (!isset($v['hotReturn'])){ foreach ($date as $k1 => $v1) { $newList[$k]['hotReturn'][] = 0; } } } return $newList; } //医院每日燃气用量统计 public function dailyGas() { $month = input('start',date('Y-m')); $data = $this->dailyGasData($month); $this->assign('data',$data['res']); $this->assign('count',$data['count']); $this->assign('totalData',$data['total']); $this->assign('start',$month); $this->assign('date',date('Y年m月',strtotime($month))); return $this->fetch(); } public function dailyGasData($month){ $dep = getDay(strtotime($month)); $lastDayOfLastMonth = date('Ymd', strtotime("-1 day", strtotime(date("Y-m-01", strtotime($month))))); $map[] = ['del','=',0]; $map[] = ['org_id','=',$this->orgId]; $sn = Db::name('energy_gas') ->where($map) ->where('enable',1) ->where('parent_id',0) ->column('number'); $res = []; $total = 0; foreach ($dep as $k=>$v){ $degree = 0; foreach ($sn as $kk =>$vv){ $row = Db::name('energy_gas_record') ->where($map) ->where('read_yyyymmdd',$v) ->where('sn',$vv) ->field('sn,degree') ->find(); $res[$k][$kk] = $row; if ($k > 0 && !empty($row)){ //$res[$k][$kk]['real_degree'] = number_format(($res[$k][$kk]['degree'] - $res[$k-1][$kk]['degree']) ,2,'.',''); $res[$k][$kk]['real_degree'] =sprintf("%.2f", ($res[$k][$kk]['degree'] - $res[$k-1][$kk]['degree'])) ; $degree += $res[$k][$kk]['real_degree']; } if($k == 0){ $row2= Db::name('energy_gas_record') ->where($map) ->where('read_yyyymmdd',$lastDayOfLastMonth) ->where('sn',$vv) ->field('sn,degree') ->find(); // $row2['degree'] = isset($row2['degree'])?$row2['degree']:0; // $res[$k][$kk]['real_degree'] = number_format(($res[$k][$kk]['degree'] - $row2['degree']) ,2,'.',''); $res[$k][$kk]['real_degree'] = sprintf("%.2f", ($res[$k][$kk]['degree'] - $row2['degree'])); $degree += $res[$k][$kk]['real_degree']; } } $res[$k]['total'] = sprintf('%.2f',$degree); $total+=$degree; } $total = sprintf('%.2f',$total); return ['res'=>$res,'total'=>$total,'count'=>count($sn)]; } //科室月燃气用量统计 public function monthDepGas() { $month = input('start', date('Y')); for ($i = 1; $i < 13; $i++) { $monthList[] = $i.'月份'; } $data = $this->monthDepGasData($month); $this->assign('data', $data['newList']); $this->assign('count', $data['count']); $this->assign('total', $data['total']); $this->assign('monthList', $monthList); $this->assign('start', $month); // halt($data); return $this->fetch(); } public function monthDepGasData($month) { $month = $month.'0101'; for ($i = 1; $i < 13; $i++) { if ($i<10){ $date[] = date('Y'.'0'.$i,strtotime($month)); if ($i==1){ $time = strtotime($date[0].'01'); $lastDate[] = date('Ym',strtotime('-1 month',$time)); }else{ $lastDate[] = date('Y'.'0'.($i-1),strtotime($month)); } }else{ $date[] = date('Y'.$i,strtotime($month)); if ($i==10){ $lastDate[] = date('Y'.'0'.($i-1),strtotime($month)); }else{ $lastDate[] = date('Y'.($i-1),strtotime($month)); } } } $map[] = ['del','=',0]; $map[] = ['org_id','=',$this->orgId]; $list = []; $dep = Db::name('energy_dep') ->where($map) ->where('enable',1) ->field('id,name,area,address') ->select(); foreach ($dep as $item){ $re = Db::name('energy_gas') ->Where($map) ->where('enable',1) ->Where('dep','like','%'.$item['id'].'%') ->select(); if(!empty($re)){ $list[] = $re; } } $newList = $this->getNewList($list); foreach ($newList as $k => $v){ foreach ($v as $k2=>$v2){ $address = json_decode($v2['address']); $dep_id = json_decode($v2['dep']); $newList[$k][$k2]['info']['floor1'] = Db::name('energy_area')->where('id',$address[1])->value('title'); $newList[$k][$k2]['info']['floor2'] = Db::name('energy_area')->where('id',$address[2])->value('title'); $newList[$k][$k2]['info']['dep'] = Db::name('energy_dep')->where('id',$dep_id[0])->value('name'); foreach ($date as $k3=>$v3){ $re = Db::name('energy_gas_record') ->field('sn,degree,read_yyyymm') ->where($map) ->where('read_yyyymm',$v3) ->where('sn',$v2['number']) ->find(); $re2 = Db::name('energy_gas_record') ->field('sn,degree') ->where($map) ->where('read_yyyymm',$lastDate[$k3]) ->where('sn',$v2['number']) ->find(); if ($re['degree']){ if ($v2['share'] == 1 || (string)$v2['share'] == '0'){ $re['real_degree'] = $re['degree'] - $re2['degree']*$v2['percent']; }else{ $re['real_degree'] = $re['degree'] - $re2['degree']; } } $newList[$k][$k2]['data'][] = $re; } } } $total = []; foreach ($date as $k=>$v){ $degree = 0; foreach ($newList as $k2 => $v2){ $count=0; foreach ($v2 as $k3=>$v3){ if (!empty($v2[0]['data'][$k])){ $count = $v2[0]['data'][$k]['real_degree']; } $degree+=$count; } $total[$k] = $degree; } } //halt($newList); return ['newList'=>$newList,'count'=>count($newList),'total'=>$total]; } //对取到的数据进行整理,根据地址和科室进行分类整合 public function getNewList($list) { //根据number进行分组 $grouped_array = []; foreach ($list as $group) { foreach ($group as $item) { $number = $item['number']; // 如果这个number还没有分组,则创建一个新的分组 if (!isset($grouped_array[$number])) { $grouped_array[$number] = []; } // 添加元素到对应的分组 $grouped_array[$number][] = $item; } } $grouped_array = array_values($grouped_array); //分配比例 foreach ($grouped_array as $k => $v){ if (count($v)>1){ $index = 0; foreach ($v as $k2=>$v2){ if ($v2['share'] == 1){ //按比例分摊 $dep = json_decode($v2['dep']); $percent = explode(':',$v2['percent']); $m = 0; //分母 foreach ($percent as $k3=>$v3){ $m +=$percent[$k3]; } $p = sprintf("%.2f", $percent[$index]/$m); $grouped_array[$k][$k2]['percent'] = $p ; $grouped_array[$k][$k2]['dep'] = '['.$dep[$index].']' ; $index+=1; } if ((string)$v2['share'] == '0' ){ //按面积分摊 $dep = json_decode($v2['dep']); $ids = []; foreach ($dep as $v3) { $ids[] = $v3; } $areas = Db::name('energy_dep')->where('id', 'in', $ids)->column('area', 'id'); $m = 0;//分母 foreach ($dep as $k3 => $v3) { $m += $areas[$v3]; } $area = $areas[$dep[$index]]; $p = sprintf("%.2f", $area/$m); $grouped_array[$k][$k2]['percent'] = $p ; $grouped_array[$k][$k2]['dep'] = '['.$dep[$index].']' ; $index+=1; } } } } // $modifiedArray = []; // // 遍历数组的每个子数组 // foreach ($grouped_array as $firstKey => $subArray) { // foreach ($subArray as $secondKey => $item) { // // 解析 dep 字段 // $deps = json_decode($item['dep'], true); // if (is_array($deps) && count($deps) > 1) { // // 如果 dep 包含多个元素,为每个元素创建新的数组项 // foreach ($deps as $depValue) { // $newItem = $item; // 复制原数组项 // $newItem['dep'] = json_encode([$depValue]); // 更新 dep 字段 // // 直接替换掉原有的数组项 // $modifiedArray[$firstKey][] = $newItem; // // } // } else { // $modifiedArray[$firstKey][] = $item; // } // } // } // 根据相同地址和科室组合电表 $otherArrays = array_slice($grouped_array, 1); // 合并数组 $list = array_merge($grouped_array[0], ...$otherArrays); // 初始化新数组 $list2 = []; // 遍历原始列表,将每个项目添加到对应的地址和部门组合索引下 foreach ($list as $item) { // 创建组合键 $combinedKey = $item['address'] . '|' . $item['dep']; if (!isset($list2[$combinedKey])) { // 如果这个组合键还不存在,就创建一个新的分组 $list2[$combinedKey] = []; } // 将项目添加到新数组的对应组合键下 $list2[$combinedKey][] = $item; } $list2 = array_values($list2); //对数组进行去重操作 $newList = []; foreach ($list2 as $subArray) { $processedSubArray = []; // 用于存储当前子数组处理后的结果 $seen = []; // 用于记录已经见过的组合 // 遍历子数组的每个项目 foreach ($subArray as $item) { // 解析 dep 字段 $dep = json_decode($item['dep'], true); // 创建一个用于识别的唯一键 $uniqueKey = $item['number'] . '|' . implode(',', $dep); // 如果这个组合还没有被处理过 if (!isset($seen[$uniqueKey])) { // 添加到当前处理后的子数组 $processedSubArray[] = $item; // 标记这个组合为已处理 $seen[$uniqueKey] = true; } } // 将处理后的子数组添加到处理后的数组 $newList[] = $processedSubArray; } return $newList; } }