| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- <?php
- namespace app\common\model;
- use app\common\util\AppAuth;
- use think\Db;
- use think\Exception;
- class EnergyElectricityRecord extends Base {
- public function updates($userId,$type){ //0-总表,1-分表
- $data = request()->post();
- $data['org_id'] = cur_org_id();
- $map[] = $type == 0?['parent_id','=',0]:['parent_id','>',0];
- $ids = Db::name('energy_electricity')
- ->where('org_id',$data['org_id'])
- ->where('del',0)
- ->where($map)
- ->column('number');
- if (!in_array($data['sn'],$ids)){
- $this->error =$type == 0?'表号不存在或非总表表号':'表号不存在或非分表表号';
- return false;
- }
- $result = validate('EnergyElectricityRecord')->check($data,[],'');
- if(true !== $result){
- $this->error = validate('EnergyElectricityRecord')->getError();
- return false;
- }
- $id = $data['id'];
- unset($data['id']);
- $data['read_yyyy'] = date('Y',strtotime($data['read_time']));
- $data['read_yyyymm'] = date('Ym',strtotime($data['read_time']));
- $data['read_yyyymmdd'] = date('Ymd',strtotime($data['read_time']));
- if($id > 0){
- $data['update_time'] = date('Y-m-d H:i:s');
- $ret = $this->allowField(true)->save($data,['id'=>$id]);
- }else{
- $change = Db::name('energy_change_log')
- ->where('org_id',$data['org_id'])
- ->where('sn',$data['sn'])
- ->order('id desc')
- ->value('degree');
- if ($change){
- $data['degree'] = $change + $data['degree'];
- }
- // 查询上次录入
- $re = $this->where('sn',$data['sn'])
- ->order('read_time','desc')
- ->where('del',0)
- ->limit(1)
- ->find();
- if ($re){
- if (intval($data['degree']) < intval($re['degree'])){
- $this->error ='本次抄表度数小于上次录入数据,请检查后重新录入';
- return false;
- }
- }
- $warning = $this->warning('energy_electricity_record',$data);
- $data['create_time'] = date('Y-m-d H:i:s');
- $data['user_id'] = $userId;
- $ret = $this->allowField(true)->save($data);
- }
- if(!$ret){
- $this->error = '操作失败';
- return false;
- }
- return true;
- }
- public function warning ($table,$data){
- $re = Db::name($table)->where('sn',$data['sn'])
- ->order('read_time','desc')
- ->limit(4)
- ->column('degree');
- if (count($re) == 4){
- $degree = array_reverse($re);
- $differences = [];
- foreach ($degree as $index => $value) {
- if ($index < count($degree) - 1) {
- $differences[] = floatval($degree[$index + 1]) - floatval($value);
- }
- }
- $sumOfDifferences = array_sum($differences);
- $averageDifference = sprintf('%.2f',$sumOfDifferences / count($differences));
- $max = ($data['degree']-$re[0]) > $averageDifference * 1.3;
- $min = ($data['degree']-$re[0]) < $averageDifference * 0.7;
- $info= [
- 'sn'=>$data['sn'],
- 'org_id'=>$data['org_id'],
- 'content'=>$max ? '本次录入数据差值高于前三次平均值130%' : '本次录入数据差值低于前三次平均值70%',
- 'read_time'=>$data['read_time'],
- 'type'=>$max ? 1 : 0,
- 'create_time'=>date('Y-m-d H:i:s'),
- ];
- if ($max || $min){
- Db::name('energy_record_warning')->insert($info);
- }
- }
- }
- }
|