|
|
@@ -0,0 +1,710 @@
|
|
|
+<?php
|
|
|
+namespace app\admin\controller;
|
|
|
+
|
|
|
+use think\Db;
|
|
|
+
|
|
|
+class EnergyStatisticsOld extends Auth
|
|
|
+{
|
|
|
+ //医院每日用电电统计
|
|
|
+ public function dailyElectricity()
|
|
|
+ {
|
|
|
+ $month = input('start',date('Y-m'));
|
|
|
+
|
|
|
+ $data = $this->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<count($newList);$i++){
|
|
|
+ $count = 0;
|
|
|
+ foreach ($newList[$i] as $k2=>$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;
|
|
|
+ }
|
|
|
+}
|