123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649 |
- <?php
- namespace app\admin\controller;
- use app\common\model\DeviceLog;
- use app\common\model\Group;
- use app\temperature\controller\Push;
- use think\App;
- use think\Db;
- require_once $_SERVER['DOCUMENT_ROOT'] . '/../vendor/wenkong/TemperatureDevice.php';
- class TemperatureDevice extends Auth
- {
- protected $abnormal = [
- '正常',
- '设备离线',
- '传感器异常',
- '传感器未连接',
- ];
- public function __construct(App $app) {
- parent::__construct($app);
- $this->api = new Push();
- }
- public function index() {
- if (request()->isAjax()) {
- //分页参数
- $length = input('rows', 10, 'intval'); //每页条数
- $page = input('page', 1, 'intval'); //第几页
- $start = ($page - 1) * $length; //分页开始位置
- //排序
- $sortRow = input('sidx', 'id', 'trim'); //排序列
- $sort = input('sord', 'desc', 'trim'); //排序方式
- $order = $sortRow . ' ' . $sort;
- $title = input('title', '', 'trim');
- if ($title) {
- $map[] = ['dev_name|snaddr', 'like', '%' . $title . '%'];
- }
- $enable = input('enable', '', 'trim');
- if ($enable != '') {
- $map[] = ['enable', '=', $enable];
- }
- $group = input('group_id', '', 'trim');
- if($group!=''){
- $iiDs = Db::name('group_device')
- ->where('org_id',$this->orgId)
- ->where('group_id',$group)
- ->column('device_id');
- if(empty($iiDs)){
- $map[] = ['id', '=', -1];
- }else{
- $map[] = ['id', 'in', $iiDs];
- }
- }else{
- $groupList = (new Group())->getList();
- if(!empty($groupList)){
- $iiDs = Db::name('group_device')
- ->where('org_id',$this->orgId)
- ->where('group_id',$groupList[0]['id'])
- ->column('device_id');
- if(empty($iiDs)){
- $map[] = ['id', '=', -1];
- }else{
- $map[] = ['id', 'in', $iiDs];
- }
- }
- }
- $map[] = ['org_id', '=', $this->orgId];
- $map[] = ['del', '=', 0];
- if($this->userId!==1){
- $ids = Db::name('temperature_auth')
- ->where('user_id',$this->userId)
- ->where('org_id',$this->orgId)
- ->column('temperature_id');
- if(!empty($ids)){
- $map[] = ['id', 'in',$ids];
- }else{
- $map[] = ['id', '=',-1];
- }
- }
- $map = empty($map) ? true : $map;
- //数据查询
- $this->api->getDeviceData();
- $lists = Db::name('temperature_device')
- ->where($map)->limit($start, $length)->order($order)->select();
- foreach ($lists as $k => &$v) {
- $v['tj'] = '';
- $v['abnormal_name'] = $this->abnormal[$v['abnormal']];
- $gd = Db::name('group_device')
- ->where('org_id',$this->orgId)
- ->where('device_id',$v['id'])
- ->column('group_id');
- if(empty($gd)){
- $t = '';
- }else{
- $x = Db::name('group')
- ->where('id','in',$gd)
- ->column('title');
- $t = implode(',',$x);
- }
- $v['gName'] = $t;
- }
- //数据返回
- $totalCount = Db::name('temperature_device')->where($map)->count();
- $totalPage = ceil($totalCount / $length);
- $result['page'] = $page;
- $result['total'] = $totalPage;
- $result['records'] = $totalCount;
- $result['rows'] = $lists;
- return json($result);
- }
- else {
- $group = (new Group())->getList();
- $this->assign('group', $group);
- return $this->fetch();
- }
- }
- /**
- * 新增/编辑
- */
- public function add($id = 0) {
- if (request()->isPost()) {
- $model = new \app\common\model\TemperatureDevice();
- $post = request()->post();
- $data = [
- 'snaddr'=>trim($post['snaddr']),
- 'dev_name'=>$post['dev_name'],
- 'remark'=>$post['remark'],
- 'enable'=>$post['enable'],
- 'org_id'=>$this->orgId,
- 'id'=>$id,
- ];
- $validate = new \app\common\validate\TemperatureDevice();
- $result = $validate->scene('')->check($data,[]);
- if(true !== $result){
- $this->error($validate->getError());
- }
- $log =Db::name('device_log')
- ->where('type',DeviceLog::TYPE5)
- ->where('sn',$data['snaddr'])
- ->where('del',0)
- ->find();
- if(empty($log)){
- $this->error('该设备无法添加');
- }
- unset($data['id']);
- if($id <=0){
- $data['create_time'] = date('Y-m-d H:i:s');
- $res = Db::name('temperature_device')
- ->insertGetId($data);
- $id = $res;
- }else{
- $data['update_time'] = date('Y-m-d H:i:s');
- $res = Db::name('temperature_device')
- ->where('id',$id)
- ->update($data);
- }
- if ($res) {
- Db::name('group_device')
- ->where('org_id',$this->orgId)
- ->where('device_id',$id)
- ->delete();
- $data = request()->post();
- if(isset($data['group_id']) && !empty($data['group_id'])){
- $ids = $data['group_id'];
- $a = [
- 'org_id'=>$this->orgId,
- 'device_id'=>$id,
- 'group_id'=>$ids,
- ];
- Db::name('group_device')
- ->insertGetId($a);
- }
- $this->success('操作成功', url('index'));
- }
- else {
- $this->error($model->getError());
- }
- }
- else {
- $meta_title = '新增设备';
- if ($id) {
- $info = Db::name('temperature_device')->where('id', $id)->find();
- $info['gd'] = Db::name('group_device')
- ->where('org_id',$this->orgId)
- ->where('device_id',$id)
- ->value('group_id');
- $this->assign('info', $info);
- $meta_title = '编辑设备';
- }
- $group = (new Group())->getList();
- $this->assign('meta_title', $meta_title);
- $this->assign('group', $group);
- return $this->fetch();
- }
- }
- /**
- * 删除记录
- * @param int $id
- */
- public function del($id = 0) {
- if (!$id) {
- $this->error('参数错误');
- }
- $res = Db::name('temperature_device')->where('id', $id)->update(['del' => 1]);
- Db::name('group_device')
- ->where('device_id',$id)
- ->where('org_id',$this->orgId)
- ->delete();
- if ($res) {
- $this->success('删除成功');
- }
- else {
- $this->error('删除失败');
- }
- }
- /**
- * 改变字段值
- * @param int $fv
- * @param string $fn
- * @param int $fv
- */
- public function changeField($id = 0, $fn = '', $fv = 0) {
- if (!$fn || !$id) {
- $this->error('参数错误');
- }
- $res = Db::name('temperature_device')->where('id', $id)->update([$fn => $fv]);
- if ($res) {
- $this->success('操作成功');
- }
- else {
- $this->error('操作失败');
- }
- }
- /**
- * 24小时温度图
- *
- * @author wst
- * @date 2021/6/9 10:59
- */
- public function tj1($id) {
- $time = time();
- $timeData = [];
- for ($i = 0; $i <= 23; $i++) {
- if (strlen($i) <= 1) {
- $i = '0' . $i;
- }
- $timeData[] = date('Ymd', $time) . $i;
- }
- $data = [];
- foreach ($timeData as $k => $v) {
- $info = Db::name('temperature_device_data')
- ->where('snaddr', $id)
- ->where('create_ymdh', $v)
- ->where('abnormal', 0)
- ->avg('temp');
- $a = [
- 'name' => substr($v, -2) . ':00',
- 'value' => round($info, 2)
- ];
- $data[] = $a;
- }
- $this->assign('key', array_column($data, 'name'));
- $this->assign('value', array_column($data, 'value'));
- $i = array_chunk($data, 16);
- $this->assign('data', $i);
- return $this->fetch();
- }
- /**
- * 最近七日温度显示
- *
- * @author wst
- * @date 2021/6/9 14:16
- */
- public function tj2($id) {
- $time = time();
- $timeData = [];
- for ($i = 6; $i >= 0; $i--) {
- $timeData[] = date('Ymd', $time - ($i * 86400));
- }
- $data = [];
- foreach ($timeData as $k => $v) {
- $info = Db::name('temperature_device_data')
- ->where('snaddr', $id)
- ->where('create_ymd', $v)
- ->where('abnormal', 0)
- ->avg('temp');
- $a = [
- 'name' => substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, -2),
- 'value' => round($info, 2)
- ];
- $data[] = $a;
- }
- $this->assign('key', array_column($data, 'name'));
- $this->assign('value', array_column($data, 'value'));
- $this->assign('data', $data);
- return $this->fetch();
- }
- /**
- * 最近30日温度显示
- *
- * @author wst
- * @date 2021/6/9 14:16
- */
- public function tj3($id) {
- $time = time();
- $timeData = [];
- for ($i = 29; $i >= 0; $i--) {
- $timeData[] = date('Ymd', $time - ($i * 86400));
- }
- $data = [];
- foreach ($timeData as $k => $v) {
- $info = Db::name('temperature_device_data')
- ->where('snaddr', $id)
- ->where('create_ymd', $v)
- ->where('abnormal', 0)
- ->avg('temp');
- $a = [
- 'name' => substr($v, 0, 4) . '-' . substr($v, 4, 2) . '-' . substr($v, -2),
- 'value' => round($info, 2)
- ];
- $data[] = $a;
- }
- $this->assign('key', array_column($data, 'name'));
- $this->assign('value', array_column($data, 'value'));
- $i = array_chunk($data, 10);
- $this->assign('data', $i);
- return $this->fetch();
- }
- public function auth() {
- if (request()->isAjax()) {
- //分页参数
- $length = input('rows', 10, 'intval'); //每页条数
- $page = input('page', 1, 'intval'); //第几页
- $start = ($page - 1) * $length; //分页开始位置
- //排序
- $sortRow = input('sidx', 'id', 'trim'); //排序列
- $sort = input('sord', 'desc', 'trim'); //排序方式
- $order = $sortRow . ' ' . $sort;
- $title = input('title', '', 'trim');
- if ($title) {
- $map1[] = ['dev_name|snaddr', 'like', '%' . $title . '%'];
- $map1[] = ['org_id', '=', $this->orgId];
- $deviceIds = Db::name('temperature_device')
- ->where($map1)
- ->column('id');
- if (!empty($deviceIds)) {
- $map[] = ['temperature_id', 'in', $deviceIds];
- }
- else {
- $map[] = ['temperature_id', '=', -1];
- }
- }
- $title1 = input('name', '', 'trim');
- if ($title1) {
- $map2[] = ['a.org_id', '=', $this->orgId];
- $map2[] = ['b.real_name', 'like', '%' . $title1 . '%'];
- $userIds = Db::name('user')
- ->alias('b')
- ->join('user_org a', 'b.id=a.user_id')
- ->where($map2)
- ->column('b.id');
- if (!empty($deviceIds)) {
- $map[] = ['user_id', 'in', $userIds];
- }
- else {
- $map[] = ['user_id', '=', -1];
- }
- }
- $map[] = ['org_id', '=', $this->orgId];
- $map = empty($map) ? true : $map;
- //数据查询
- $lists = Db::name('temperature_auth')
- ->where($map)
- ->limit($start, $length)
- ->field('user_id,count(*) as num')
- ->group('user_id')
- ->distinct(true)
- ->order($order)->select();
- foreach ($lists as $k => &$v) {
- $v['nickName'] = Db::name('user')
- ->where('id', $v['user_id'])
- ->value('real_name');
- }
- //数据返回
- $totalCount = Db::name('temperature_auth')
- ->group('user_id')
- ->where($map)->count();
- $totalPage = ceil($totalCount / $length);
- $result['page'] = $page;
- $result['total'] = $totalPage;
- $result['records'] = $totalCount;
- $result['rows'] = $lists;
- return json($result);
- }
- else {
- return $this->fetch();
- }
- }
- public function add_auth() {
- if (request()->isPost()) {
- $data = request()->post();
- if(!isset($data['user_id']) || empty($data['user_id'])){
- $this->error('用户不能为空');
- }
- if(!isset($data['temperature_id']) || empty($data['temperature_id'])){
- $this->error('设备不能为空');
- }
- $ids = explode(',',$data['temperature_id']);
- $ii = [];
- foreach ($ids as $k=>$v) {
- if (strpos($v, 'p') === false && !empty($v)) {
- $aa = explode('-',$v);
- $ii[] = $aa[0];
- }
- }
- $ids = $ii;
- $a = [];
- foreach ($ids as $k=>$v){
- $check = Db::name('temperature_auth')
- ->where('user_id',$data['user_id'])
- ->where('temperature_id',$v)
- ->find();
- if($check){
- $info = Db::name('temperature_device')
- ->where('id',$v)
- ->find();
- $this->error($info['dev_name'].'('.$info['snaddr'].')设备已绑定');
- }
- $a[] = [
- 'user_id'=>$data['user_id'],
- 'temperature_id'=>$v,
- 'org_id'=>$this->orgId
- ];
- }
- $res = Db::name('temperature_auth')
- ->insertAll($a);
- if($res){
- Db::name('user')
- ->where('id',$data['user_id'])
- ->update(['group'=>$data['temperature_id']]);
- $this->success('添加成功', url('auth'));
- }
- $this->error('添加失败');
- }
- else {
- $meta_title = '新增';
- $map[] = ['uo.org_id', '=', $this->orgId];
- $map[] = ['u.del', '=', 0];
- //数据查询
- $lists = Db::name('user')
- ->alias('u')
- ->join('user_org uo', 'uo.user_id = u.id')
- ->join('user_dep ud', 'ud.user_id = u.id', 'left')
- ->join('user_roles ur', 'ur.user_id = u.id', 'left')
- ->where($map)
- ->field('u.id as id,real_name as title')
- ->select();
- $group = Db::name('group')
- ->where('org_id',$this->orgId)
- ->field('id,title as label')
- ->where('enable',1)
- ->select();
- foreach ($group as $k=>$v){
- $group[$k]['children'] = [];
- $deviceId = Db::name('group_device')
- ->where('org_id',$this->orgId)
- ->where('group_id',$v['id'])
- ->column('device_id');
- if($deviceId){
- $device = Db::name('temperature_device')
- ->where('id','in',$deviceId)
- ->where('del', 0)
- ->field('id,dev_name as label,snaddr')
- ->select();
- foreach ($device as $k1 => $v1) {
- $device[$k1]['label'] = $v1['label'] . '(' . $v1['snaddr'] . ')';
- }
- $group[$k]['children'] =$device;
- }
- }
- foreach ($group as $k=>$v){
- $group[$k]['id'] = $v['id'].'-p';
- foreach ($v['children'] as $k1=>$v1){
- $group[$k]['children'][$k1]['id'] = $v1['id'].'-c';
- }
- }
- $this->assign('group', $group);
- $this->assign('user', $lists);
- $this->assign('meta_title', $meta_title);
- return $this->fetch();
- }
- }
- /**
- * 新增/编辑
- */
- public function edit_auth($id = 0) {
- if (request()->isPost()) {
- $data = request()->post();
- if(!isset($data['user_id']) || empty($data['user_id'])){
- $this->error('用户不能为空');
- }
- if(!isset($data['temperature_id']) || empty($data['temperature_id'])){
- $this->error('设备不能为空');
- }
- $ids = explode(',',$data['temperature_id']);
- $ii = [];
- foreach ($ids as $k=>$v) {
- if (strpos($v, 'p') === false && !empty($v)) {
- $aa = explode('-',$v);
- $ii[] = $aa[0];
- }
- }
- $ids = $ii;
- $a = [];
- Db::name('temperature_auth')
- ->where('user_id',$data['user_id'])
- ->delete();
- foreach ($ids as $k=>$v){
- $a[] = [
- 'user_id'=>$data['user_id'],
- 'temperature_id'=>$v,
- 'org_id'=>$this->orgId
- ];
- }
- $res = Db::name('temperature_auth')
- ->insertAll($a);
- if ($res) { Db::name('user')
- ->where('id',$data['user_id'])
- ->update(['group'=>$data['temperature_id']]);
- $this->success('操作成功', url('auth'));
- }
- else {
- $this->error('修改失败');
- }
- }
- else {
- $meta_title = '新增';
- if ($id) {
- // $info = Db::name('temperature_auth')
- // ->where('user_id', $id)->column('temperature_id');
- $iii = Db::name('user')
- ->where('id',$id)
- ->find();
- $info = $iii?explode(',',$iii['group']):[];
- $this->assign('info', $info);
- $meta_title = '编辑';
- }
- $map[] = ['uo.org_id', '=', $this->orgId];
- $map[] = ['u.del', '=', 0];
- //数据查询
- $lists = Db::name('user')
- ->alias('u')
- ->join('user_org uo', 'uo.user_id = u.id')
- ->join('user_dep ud', 'ud.user_id = u.id', 'left')
- ->join('user_roles ur', 'ur.user_id = u.id', 'left')
- ->where($map)
- ->field('u.id as id,real_name as title')
- ->select();
- $group = Db::name('group')
- ->where('org_id',$this->orgId)
- ->field('id,title as label')
- ->where('enable',1)
- ->select();
- foreach ($group as $k=>$v){
- $group[$k]['children'] = [];
- $deviceId = Db::name('group_device')
- ->where('org_id',$this->orgId)
- ->where('group_id',$v['id'])
- ->column('device_id');
- if($deviceId){
- $device = Db::name('temperature_device')
- ->where('id','in',$deviceId)
- ->where('del', 0)
- ->field('id,dev_name as label,snaddr')
- ->select();
- foreach ($device as $k1 => $v1) {
- $device[$k1]['label'] = $v1['label'] . '(' . $v1['snaddr'] . ')';
- }
- $group[$k]['children'] =$device;
- }
- }
- foreach ($group as $k=>$v){
- $group[$k]['id'] = $v['id'].'-p';
- foreach ($v['children'] as $k1=>$v1){
- $group[$k]['children'][$k1]['id'] = $v1['id'].'-c';
- }
- }
- $this->assign('group', $group);
- $this->assign('user', $lists);
- $this->assign('meta_title', $meta_title);
- $this->assign('user_id',$id);
- return $this->fetch();
- }
- }
- /**
- * 删除记录
- * @param int $id
- */
- public function del_auth($id = 0) {
- if (!$id) {
- $this->error('参数错误');
- }
- $res = Db::name('temperature_auth')->where('user_id', $id)->delete();
- if ($res) {
- $this->success('删除成功');
- }
- else {
- $this->error('删除失败');
- }
- }
- public function detail_auth($id){
- $info = Db::name('temperature_auth')
- ->where('user_id', $id)->column('temperature_id');
- $d = Db::name('temperature_device')
- ->where('id','in',$info)
- ->select();
- $this->assign('list',$d);
- return $this->fetch();
- }
- }
|