EnergyElectricityRecord.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace app\common\model;
  3. use app\common\util\AppAuth;
  4. use think\Db;
  5. use think\Exception;
  6. class EnergyElectricityRecord extends Base {
  7. public function updates($userId,$type){ //0-总表,1-分表
  8. $data = request()->post();
  9. $data['org_id'] = cur_org_id();
  10. $map[] = $type == 0?['parent_id','=',0]:['parent_id','>',0];
  11. $ids = Db::name('energy_electricity')
  12. ->where('org_id',$data['org_id'])
  13. ->where('del',0)
  14. ->where($map)
  15. ->column('number');
  16. if (!in_array($data['sn'],$ids)){
  17. $this->error =$type == 0?'表号不存在或非总表表号':'表号不存在或非分表表号';
  18. return false;
  19. }
  20. $result = validate('EnergyElectricityRecord')->check($data,[],'');
  21. if(true !== $result){
  22. $this->error = validate('EnergyElectricityRecord')->getError();
  23. return false;
  24. }
  25. $id = $data['id'];
  26. unset($data['id']);
  27. $data['read_yyyy'] = date('Y',strtotime($data['read_time']));
  28. $data['read_yyyymm'] = date('Ym',strtotime($data['read_time']));
  29. $data['read_yyyymmdd'] = date('Ymd',strtotime($data['read_time']));
  30. if($id > 0){
  31. $data['update_time'] = date('Y-m-d H:i:s');
  32. $ret = $this->allowField(true)->save($data,['id'=>$id]);
  33. }else{
  34. $change = Db::name('energy_change_log')
  35. ->where('org_id',$data['org_id'])
  36. ->where('sn',$data['sn'])
  37. ->order('id desc')
  38. ->value('degree');
  39. if ($change){
  40. $data['degree'] = $change + $data['degree'];
  41. }
  42. // 查询上次录入
  43. $re = $this->where('sn',$data['sn'])
  44. ->order('read_time','desc')
  45. ->where('del',0)
  46. ->limit(1)
  47. ->find();
  48. if ($re){
  49. if (intval($data['degree']) < intval($re['degree'])){
  50. $this->error ='本次抄表度数小于上次录入数据,请检查后重新录入';
  51. return false;
  52. }
  53. }
  54. $warning = $this->warning('energy_electricity_record',$data);
  55. $data['create_time'] = date('Y-m-d H:i:s');
  56. $data['user_id'] = $userId;
  57. $ret = $this->allowField(true)->save($data);
  58. }
  59. if(!$ret){
  60. $this->error = '操作失败';
  61. return false;
  62. }
  63. return true;
  64. }
  65. public function warning ($table,$data){
  66. $re = Db::name($table)->where('sn',$data['sn'])
  67. ->order('read_time','desc')
  68. ->limit(4)
  69. ->column('degree');
  70. if (count($re) == 4){
  71. $degree = array_reverse($re);
  72. $differences = [];
  73. foreach ($degree as $index => $value) {
  74. if ($index < count($degree) - 1) {
  75. $differences[] = floatval($degree[$index + 1]) - floatval($value);
  76. }
  77. }
  78. $sumOfDifferences = array_sum($differences);
  79. $averageDifference = sprintf('%.2f',$sumOfDifferences / count($differences));
  80. $max = ($data['degree']-$re[0]) > $averageDifference * 1.3;
  81. $min = ($data['degree']-$re[0]) < $averageDifference * 0.7;
  82. $info= [
  83. 'sn'=>$data['sn'],
  84. 'org_id'=>$data['org_id'],
  85. 'content'=>$max ? '本次录入数据差值高于前三次平均值130%' : '本次录入数据差值低于前三次平均值70%',
  86. 'read_time'=>$data['read_time'],
  87. 'type'=>$max ? 1 : 0,
  88. 'create_time'=>date('Y-m-d H:i:s'),
  89. ];
  90. if ($max || $min){
  91. Db::name('energy_record_warning')->insert($info);
  92. }
  93. }
  94. }
  95. }