zgg 1 month ago
parent
commit
b56997b9df

+ 0 - 1
.env.example

@@ -1 +0,0 @@
-[APP]
APP_DEBUG = true
[DATABASE]
HOSTNAME = 121.36.46.135
DATABASE = guoyaojiankang_j
USERNAME = guoyaojiankang_j
PASSWORD = 2SCDw8wemWbGRZSP
HOSTPORT = 3306
CHARSET = utf8mb4

[APP]
APP_DEBUG = true
[DATABASE]
HOSTNAME = 127.0.0.1
DATABASE = pangu_jya_tech_c
USERNAME = root
PASSWORD = 123456
HOSTPORT = 3306
CHARSET = utf8mb4









+ 16 - 0
application/admin/controller/Index.php

@@ -1142,6 +1142,22 @@ class Index extends Auth
 
                 //数据返回
                 $totalCount = db('orders')->where($map)->count();
+            }elseif ($orderType == 5){
+                $map[] = ['org_id','=',$this->orgId];
+                $map[] = ['patrol_mode','=',1];
+                $map[] = ['status','=',0];
+                $lists = Db::name('patrol_task_apply')->where($map)
+                    ->limit($start,$length)->order($order)->select();
+                foreach ($lists as $k=>$v){
+                    $taskTitle = Db::name('patrol_task')->where('id',$v['task_id'])->value('title');
+                    $lists[$k]['task_title'] = $taskTitle?$taskTitle:'';
+                    $lists[$k]['uname'] = Db::name('user')->where('id',$v['user_id'])->value('real_name');
+                    $lists[$k]['deal_user'] = '';
+                    if($v['deal_user_id'] > 0){
+                        $lists[$k]['deal_user'] = Db::name('user')->where('id',$v['deal_user_id'])->value('real_name');
+                    }
+                }
+                $totalCount = Db::name('patrol_task_apply')->where($map)->count();
             }
 
 

+ 169 - 0
application/admin/controller/RepairGroup.php

@@ -0,0 +1,169 @@
+<?php
+namespace app\admin\controller;
+
+use app\common\util\ExcelUtil;
+use think\App;
+use think\Db;
+use think\Exception;
+
+class RepairGroup extends Auth
+{
+
+    public function __construct(App $app = null) {
+        parent::__construct($app);
+        $this->table='repair_group';
+        $this->model= new \app\common\model\RepairGroup();
+    }
+    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[] = ['title','like','%'.$title.'%'];
+            }
+            $enable = input('enable','','trim');
+            if($enable != ''){
+                $map[] = ['enable','=',$enable];
+            }
+
+            $map[] = ['del','=',0];
+            $map[] = ['org_id','=',$this->orgId];
+            $map= empty($map) ? true: $map;
+            //数据查询
+            $lists = db($this->table)->where($map)->limit($start,$length)->order($order)->select();
+            $ids = Db::name('roles')
+                ->where('org_id',$this->orgId)
+                ->where('parent_id',7)
+                ->where('del',0)
+                ->where('enable',1)
+                ->column('id');
+            $user = Db::name('user')
+                ->alias('a')
+                ->join('user_org b','a.id = b.user_id')
+                ->join('user_roles c','a.id = c.user_id')
+                ->where('a.del',0)
+                ->where('a.enable',1)
+                ->where('b.org_id',$this->orgId)
+                ->where('c.roles_id','in',$ids)
+                ->column('real_name','a.id');
+            foreach ($lists as $k=>$v){
+                $users = explode(',',$v['users']);
+                foreach ($users as $kk=>$vv){
+                    $users[$kk] = $user[$vv];
+                }
+                $lists[$k]['users'] = implode(',',$users);
+            }
+
+            //数据返回
+            $totalCount = db($this->table)->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($id=0){
+        if(request()->isPost()){
+            $res = $this->model->updates();
+            if($res){
+                $this->success('操作成功',url('index'));
+            }else{
+                $this->error($this->model->getError());
+            }
+        }else{
+            if($id){
+                $info =db($this->table)->where('id',$id)->find();
+                $info['users'] = explode(',',$info['users']);
+                $this->assign('info',$info);
+            }
+            $ids = Db::name('roles')
+                ->where('org_id',$this->orgId)
+                ->where('parent_id',7)
+                ->where('del',0)
+                ->where('enable',1)
+                ->column('id');
+
+            $userList = Db::name('user')
+                ->alias('a')
+                ->join('user_org b','a.id = b.user_id')
+                ->join('user_roles c','a.id = c.user_id')
+                ->where('a.del',0)
+                ->where('a.enable',1)
+                ->where('b.org_id',$this->orgId)
+                ->where('c.roles_id','in',$ids)
+                ->field('a.id,a.real_name as title')
+                ->select();
+            $this->assign('userList',$userList);
+            return $this->fetch();
+        }
+    }
+
+    /**
+     * 删除记录
+     * @param int $id
+     */
+    public function del($id=0){
+        if(!$id){
+            $this->error('参数错误');
+        }
+        $res = db($this->table)->where('id',$id)->setField('del',1);
+        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($this->table)->where('id',$id)->setField($fn,$fv);
+        if($res){
+            $this->success('操作成功');
+        }else{
+            $this->error('操作失败');
+        }
+    }
+
+    /**
+     * 排序
+     * @param int $id
+     * @param int $sort
+     */
+    public function changeSort($id=0,$sort=0){
+        if($id<0||$sort<0){
+            $this->error('参数错误');
+        }
+        $res = db($this->table)->where('id',$id)->setField('sort',$sort);
+        if($res){
+            $this->success('操作成功');
+        }else{
+            $this->error('操作失败');
+        }
+    }
+
+}

+ 16 - 14
application/admin/controller/Statistics.php

@@ -1147,48 +1147,50 @@ class Statistics extends Auth{
         $org_id = $this->orgId;
         $map = [];
         if(!empty($title)){
-            $ks = Db::name('address')
+            $ks = Db::name('dep')
                 ->where('org_id',$org_id)
                 ->where('del',0)
                 ->where('enable',1)
                 ->where('title','like','%'.$title.'%')
                 ->select();
             if(empty($ks)){
-                $map[] = ['a.address_id','=',-1];
+//                $map[] = ['a.address_id','=',-1];
+                $map[] = ['b.dep_id','=',-1];
             }else{
-                $map[] = ['a.address_id','in',array_column($ks,'id')];
+//                $map[] = ['a.address_id','in',array_column($ks,'id')];
+                $map[] = ['b.dep_id','in',array_column($ks,'id')];
             }
         }
         $ret =Db::name('order_repair')
             ->alias('a')
             ->join('orders b','a.order_id=b.id')
             ->where('b.org_id',$org_id)
-            ->where('a.address_id','>',0)
+//            ->where('a.address_id','>',0)
             ->where($map)
-            ->field('a.address_id')
+            ->field('b.dep_id')
             ->distinct(true)
             ->select();
         if(!empty($start)){
-            $map1[] = ['t.create_yyyymmdd','>=',date('Ymd',strtotime($start))];
+            $map1[] = ['a.create_yyyymmdd','>=',date('Ymd',strtotime($start))];
         }
         if(!empty($end)){
-            $map1[] = ['t.create_yyyymmdd','<=',date('Ymd',strtotime($end))];
+            $map1[] = ['a.create_yyyymmdd','<=',date('Ymd',strtotime($end))];
         }
 
-        $map1[] = ['t.del','=',0];
-        $map1[] = ['t.org_id','=',$org_id];
+        $map1[] = ['a.del','=',0];
+        $map1[] = ['a.org_id','=',$org_id];
         foreach ($ret as $k=>$v){
-            $num = Db::name('order_repair')
+            $num = Db::name('orders')
                 ->alias('a')
-                ->join('orders t','a.order_id = t.id')
-                ->where('a.address_id',$v['address_id'])
+                ->join('order_repair t','t.order_id = a.id')
+                ->where('a.dep_id',$v['dep_id'])
                 ->where($map1)
                 ->count();
 
             $ret[$k]['num'] = $num;
 
-            $ret[$k]['title'] = Db::name('address')
-                ->where('id',$v['address_id'])
+            $ret[$k]['title'] = Db::name('dep')
+                ->where('id',$v['dep_id'])
                 ->value('title');
         }
         return $ret;

+ 46 - 0
application/admin/view/common/multiselect2.html

@@ -0,0 +1,46 @@
+<style>
+
+</style>
+<div id="{$name}">
+    <input type="hidden" id="ele-{$name}" name="{$name}" :value="value.join(',')">
+    <el-select
+        v-model="value"
+        multiple
+        clearable
+        filterable
+        size="small"
+        style="width:100%"
+        placeholder="请选择"
+    >
+        <el-option
+                v-for="item in options"
+                :key="item.id"
+                :label="item.title"
+                :value="item.id.toString()">
+        </el-option>
+    </el-select>
+</div>
+<script>
+    new Vue({
+        el: '#{$name}',
+        data: function() {
+            return {
+                options: {:json_encode($lists)},
+                value: {:json_encode($val)}
+            }
+        },
+        watch: {
+            value: function (newVal, oldVal) {
+               $('#ele-{$name}').val(newVal.join(','));
+            }
+        },
+        created(){
+            const vals = this.value;
+            this.value = [];
+            vals.forEach((item) => {
+                this.value.push(item.toString());
+            })
+            console.log('11111',this.value,this.options);
+        }
+    })
+</script>

+ 58 - 0
application/admin/view/index/orders.html

@@ -6,6 +6,7 @@
     <li {if($orderType == 2)}class="active"{/if}><a href="{:url('Index/ordersList',['mode'=>$mode,'orderType'=>2])}">投诉<span id="orderbox2">(0)</span></a></li>
     <li {if($orderType == 3)}class="active"{/if}><a href="{:url('Index/ordersList',['mode'=>$mode,'orderType'=>3])}">隐患<span id="orderbox3">(0)</span></a></li>
     <li {if($orderType == 4)}class="active"{/if}><a href="{:url('Index/ordersList',['mode'=>$mode,'orderType'=>4])}">驳回<span id="orderbox4">(0)</span></a></li>
+    <li {if($orderType == 5)}class="active"{/if}><a href="{:url('Index/ordersList',['mode'=>$mode,'orderType'=>5])}">巡更申诉<span id="orderbox5">(0)</span></a></li>
 </ul>
 
 <div class="ibox">
@@ -57,6 +58,11 @@
             console.log('res',res);
             $('#orderbox4').html('('+res.records+')');
         });
+        let url5 = "{:url('Index/ordersList')}?mode={$mode}&orderType=5";
+        $.post(url5,{},function (res) {
+            console.log('res',res);
+            $('#orderbox5').html('('+res.records+')');
+        });
 
 
         $.jgrid.defaults.styleUI="Bootstrap";
@@ -284,6 +290,58 @@
                },
            });
 
+       }else if(orderType == 5){
+           $("#table").jqGrid({
+               url:"{:url('Index/ordersList')}?mode={$mode}&orderType={$orderType}",
+               datatype: "json",
+               colModel:[
+                   {label:'编号',name:'id',index:'id', width:30,sortable: false},
+                   {label:'申请人',name:'uname',index:'uname', width:60,sortable: false},
+                   {label:'任务名称',name:'task_title',index:'task_title', width:80,sortable: false},
+                   // {label:'延期时间',name:'end_time',index:'end_time', width:70,sortable: false},
+                   {label:'原因',name:'reason',index:'reason', width:70,sortable: false},
+                   {label:'状态',name:'status',index:'status',width:50,editable: false,sortable: false,formatter:function (a,b,c){
+                           if(a==0){
+                               return '<span class="text-primary" title="待审核">待审核</span>';
+                           }else if(a==1) {
+                               return '<span class="text-success" title="已同意">已同意</span>';
+                           }else if(a==2){
+                               return '<span class="text-danger" title="已拒绝">已拒绝</span>';
+                           }else if(a==3){
+                               return '<span class="text-muted" title="已取消">已取消</span>';
+                           }
+                       }},
+                   {label:'申请日期',name:'create_time',index:'create_time', width:80,sortable: false},
+                   {label:'审核人',name:'deal_user',index:'deal_user', width:60,sortable: false},
+                   {label:'审核人意见',name:'remark',index:'remark', width:60,sortable: false},
+                   {label:'操作',width:50,sortable: false,formatter: function (a, b, c) {
+                           var dealurl = "{:url('PatrolTaskApply/deal',[],'')}/id/"+c.id;
+                           var btn = '';
+                           if(c.status == 0){
+                               btn+= '<a url="'+dealurl+'" href="javascript:;" data-title="审核" onclick="layer_open(this,1)"><span class="label label-primary" title="审核">审核</span></a>&nbsp;';
+                           }
+                           return btn;
+                       }},
+               ],
+               rowNum:10,
+               rowList:[10,20,30,50,100],
+               pager: '#pager',
+               sortname: 'id',
+               viewrecords: true,
+               autowidth:true,
+               mtype: 'post',
+               height: 'auto',
+               emptyrecords: "暂无数据",
+               sortorder: "desc",
+               caption:"{$m_name}订单列表",
+               loadComplete: function (xhr) {
+                   if(xhr.code==0){
+                       layer.msg(xhr.msg);
+                       return false;
+                   }
+               },
+           });
+
        }
     });
 

+ 62 - 0
application/admin/view/repair_group/add.html

@@ -0,0 +1,62 @@
+{extend name="common/common2" /}
+{block name="main"}
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+            <div class="ibox-content">
+                <form method="post" action="{:url('add')}" class="form-horizontal">
+                    <input type="hidden" name="id" value="{$info['id']|default='0'}">
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">名称<span class="text-danger">*</span></label>
+                        <div class="col-sm-6">
+                            <input type="text" class="form-control" name="title" value="{$info.title|default=''}">
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">分组成员<span class="text-danger">*</span></label>
+                        <div class="col-sm-6">
+                            {:widget('common/multiselect2',['name'=>'users','lists'=>$userList,'val'=>isset($info)?$info.users:[]])}
+                        </div>
+                    </div>
+
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">排序</label>
+                        <div class="col-sm-6">
+                            <input type="number" class="form-control" name="sort" value="{$info.sort|default='0'}">
+                        </div>
+                    </div>
+
+                    <div class="form-group">
+                        <label class="col-sm-2 control-label">状态</label>
+                        <div class="col-sm-6">
+                            <label class="cr-inline">
+                                <input type="radio" value="1" name="enable">正常&nbsp;&nbsp;
+                            </label>
+                            <label class="cr-inline">
+                                <input type="radio" value="0" name="enable">禁用
+                            </label>
+                        </div>
+                    </div>
+                    <div class="hr-line-dashed"></div>
+                    <div class="form-group">
+                        <div class="col-sm-6 col-sm-offset-2">
+                            <button class="btn btn-primary ajax-post" data-layer_c="1" target-form="form-horizontal" type="submit">确 定</button>
+                            <button  class="btn cancel-btn btn-default" type="button">取 消</button>
+                        </div>
+                    </div>
+                </form>
+            </div>
+        </div>
+    </div>
+</div>
+{/block}
+{block name="script"}
+<script>
+    $(document).ready(function(){
+        formSetValue("enable", {$info.enable|default=1});
+       // formSetValue("cate_id", {$info.cate_id|default=0});
+        formSetValue("is_show", {$info.is_show|default=0});
+    });
+
+</script>
+{/block}

+ 135 - 0
application/admin/view/repair_group/index.html

@@ -0,0 +1,135 @@
+{extend name="common/common2" /}
+{block name="main"}
+<style>
+    .input{
+        max-width: 100px;
+    }
+    .ui-jqgrid tr.jqgrow td {
+        white-space: normal; /* 允许文本换行 */
+        word-wrap: break-word; /* 长单词也可以换行 */
+    }
+</style>
+<div class="ibox">
+    <div class="ibox-content">
+        <div class="row">
+            <div class="col-xs-3">
+                <a href="javascript:;" url="{:url('add')}" data-title="新增部门" onclick="layer_open(this,1)" class="btn btn-sm btn-primary">新增</a>
+            </div>
+            <div class="col-xs-9" style="text-align: right;">
+            <form class="form-inline" id="form-search" action="{:url('index')}">
+                <div class="input-group">
+                    <input type="text" class="form-control" name="title" placeholder="名称">
+                </div>
+                <div class="input-group">
+                    <select name="enable" class="form-control">
+                        <option value="">选择状态</option>
+                        <option value="0">禁用</option>
+                        <option value="1">正常</option>
+                    </select>
+                </div>
+                <div class="input-group">
+                    <span class="input-group-btn">
+                        <button class="btn-sm btn-primary" type="button" id ="search-btn" ><i class="fa fa-search"></i></button>
+                    </span> &nbsp;&nbsp;
+                    <span class="input-group-btn">
+                        <button class="btn-sm btn-warning" type="button" id="search-clear"><i class="fa fa-undo"></i></button>
+                    </span>&nbsp;
+                </div>
+            </form>
+        </div>
+        </div>
+    </div>
+    <div class="ibox-content">
+        <div class="jqGrid_wrapper">
+            <table id="table" style="border-collapse: collapse"></table>
+            <div id="pager"></div>
+        </div>
+    </div>
+</div>
+{/block}
+{block name="script"}
+<script>
+    $(function () {
+
+        $(window).bind("resize",function(){
+            var width=$(".jqGrid_wrapper").width();
+            $("#table").setGridWidth(width);
+        });
+
+        $.jgrid.defaults.styleUI="Bootstrap";
+        $("#table").jqGrid({
+            url:"{:url('index')}",
+            datatype: "json",
+            colModel:[
+                {label:'ID',name:'id',index:'id', width:20,sortable: false},
+                {label:'名称',name:'title',index:'title',width:40,editable: false,sortable: false},
+                {label:'分组成员',name:'users',index:'users',width:200,editable: false,sortable: false},
+                {label:'排序',name:'sort',index:'sort',width:40,sortable: true,formatter: function (a, b, c) {
+                        return '<input class="input" type="number" onchange="updateSort(this)" data-url="{:url('changeSort')}" class="form-control input-sm usersorts" data-id="'+c.id+'" data-old="'+a+'" value="'+a+'" />';
+                    }},
+                {label:'状态',name:'enable',index:'enable',width:20,editable: false,sortable: false,formatter:function (a,b,c){
+                    if(a == 0){
+                        var url = "{:url('changeField',[],'')}/fn/enable/fv/1/id/"+c.id;
+                        return '<a href="'+url+'" class="ajax-get" data-table="1"><span class="label label-danger" title="禁用">禁用</span></a>';
+                    } else{
+                        var url = "{:url('changeField',[],'')}/fn/enable/fv/0/id/"+c.id;
+                        return '<a href="'+url+'" class="ajax-get" data-table="1"><span class="label label-primary" title="正常">正常</span></a>';
+                    }
+                }},
+                {label:'创建时间',name:'create_time',index:'create_time',width:60,editable: false,sortable: false},
+                {label:'操作',width:50,sortable: false,formatter: function (a, b, c) {
+                    var editurl = "{:url('add',[],'')}/id/"+c.id;
+                    var delurl = "{:url('del',[],'')}/id/"+c.id;
+                    var btn = '<a url="'+editurl+'" href="javascript:;" data-title="编辑" onclick="layer_open(this,1)"><span class="label label-primary" title="编辑">编辑</span></a>&nbsp;';
+                    btn += '<a {if !btnAuth(session("user_auth.id"),"Dep/del")} style="display:none"  {/if} href="'+delurl+'" class="confirm ajax-get" data-confirm="确定要删除此记录吗?" data-table="1"><span class="label label-danger" title="删除">删除</span></a>';
+                    return btn;
+                }},
+            ],
+            rowNum:10,
+            rowList:[10,20,30,50,100],
+            pager: '#pager',
+            sortname: 'sort',
+            viewrecords: true,
+            autowidth:true,
+            mtype: 'post',
+            height: 'auto',
+            emptyrecords: "暂无数据",
+            sortorder: "asc",
+            caption:"部门列表",
+            loadComplete: function (xhr) {
+                if(xhr.code==0){
+                    layer.msg(xhr.msg);
+                    return false;
+                }
+            },
+        });
+    });
+
+
+    function batchSorts() {
+        let data = [];
+        $('.usersorts').each(function(){
+            data.push({
+                id: $(this).attr('data-id'),
+                sort: $(this).val(),
+            })
+        });
+        let url = "{:url('Dep/batchSort')}";
+        $.post(url,{data:JSON.stringify(data)},function (res) {
+            if(res.code == 1){
+                updateAlert('操作成功','alert-success');
+                setTimeout(function(){
+                    $('#top-alert').find('button').click();
+                },1500);
+                $("#table").trigger("reloadGrid");
+            }else{
+                updateAlert(data.msg,'alert-danger');
+                setTimeout(function(){
+                    $('#top-alert').find('button').click();
+                },1500);
+            }
+        });
+    }
+
+</script>
+{/block}

+ 1 - 0
application/api/controller/screen/Todo.php

@@ -77,6 +77,7 @@ class Todo extends Index
             'yh'=>$yhCount.'/'.$yhCount2,
             'ys'=>$ysCount.'/'.$ysCount2,
             'ph'=>$phCount.'/'.$phCount2,
+            'total'=>$bjCount+$bxCount+$yhCount+$ysCount,
         ];
         HelpHander::success($data);
     }

+ 38 - 0
application/api/controller/v1/Login.php

@@ -3,6 +3,7 @@ namespace app\api\controller\v1;
 
 use app\hander\HelpHander;
 use think\Controller;
+use think\Db;
 
 class Login extends Controller
 {
@@ -157,4 +158,41 @@ class Login extends Controller
         HelpHander::success($res);
     }
 
+    public function decodePhone()
+    {
+        $code = input('code','','trim');
+
+        $userId = input('userId','','trim');
+        $encryptedData = input('encryptedData','','trim');
+        $iv = input('iv','','trim');
+//        $orgId = input('orgId/d',0);
+//        if($orgId <= 0){
+//            HelpHander::error('请扫描项目二维码进入小程序');
+//        }
+        try{
+            $config = config('app.wx_mini_config');
+            $app = \EasyWeChat\Factory::miniProgram($config);
+            $ret = $app->auth->session($code);
+            if(!isset($ret['openid']) || !$ret['openid']){
+                exception('code失效');
+            }
+
+            $decryptedData = $app->encryptor->decryptData($ret['session_key'], $iv, $encryptedData);
+            if(!isset($decryptedData['phoneNumber']) || !$decryptedData['phoneNumber']){
+                exception('解密失败');
+            }
+
+        }catch (\Exception $e){
+            trace('小程序登录:'.$e->getMessage());
+            HelpHander::error('获取失败',-101);
+        }
+
+        $data = Db::name('User')->where('id',$userId)->update(['mobile'=>$decryptedData['phoneNumber']]);
+        if(!$data){
+            HelpHander::error('更新失败',-101);
+        }
+
+        HelpHander::success($decryptedData['phoneNumber'],'获取成功');
+    }
+
 }

+ 44 - 0
application/api/controller/v1/User.php

@@ -20,6 +20,50 @@ class User extends Base
         }
     }
 
+//维修人员分组列表
+    public function wxGroup(){
+        $list= Db::name('repair_group')
+            ->where([
+                'org_id'=>$this->orgId,
+                'del'=>0,
+                'enable'=>1
+            ])->field('id,title')->select();
+
+        HelpHander::success($list);
+    }
+
+//维修分组人员
+public function wxGroupUser(){
+        $id = input('id/d',0);
+        $userIds = Db::name('repair_group')
+            ->where([
+                'del'=>0,
+                'enable'=>1,
+                'id'=>$id
+            ])
+            ->value('users');
+        $list = explode(',',$userIds);
+        $users = [];
+        $ids = Db::name('roles')
+            ->where('org_id',$this->orgId)
+            ->where('parent_id',7)
+            ->where('del',0)
+            ->where('enable',1)
+            ->column('id');
+        $user = Db::name('user')
+            ->alias('a')
+            ->join('user_org b','a.id = b.user_id')
+            ->join('user_roles c','a.id = c.user_id')
+            ->where('a.del',0)
+            ->where('a.enable',1)
+            ->where('b.org_id',$this->orgId)
+            ->where('c.roles_id','in',$ids)
+            ->column('real_name','a.id');
+        foreach ($list as $k=>$v){
+            $users[] = ['id'=>$v,'real_name'=>$user[$v]];
+        }
+        HelpHander::success($users);
+}
     public function exusers(){
         $id = input('id/d',0);
         $work = input('work/d',1);

+ 13 - 0
application/common/model/Orders.php

@@ -414,6 +414,19 @@ class Orders extends Base {
                     send_jpush([$v['user_id']],AppMsg::PUSH_WORKER_ORDER_SEND,'',['id'=>$v['todo_id']]);
                 }
             }
+            //二级调度
+            $twoDispatchUser = Db::name('user')
+                ->alias('a')
+                ->join('user_roles b','a.id = b.user_id')
+                ->join('user_org c','a.id = c.user_id')
+                ->where('a.del',0)
+                ->where('a.enable',1)
+                ->where('b.roles_id',184)
+                ->where('c.org_id',$data['org_id'])
+                ->column('a.id');
+            if (!empty($twoDispatchUser)) {
+                send_jpush($twoDispatchUser,AppMsg::PUSH_WORKER_ORDER_SEND,'',['id'=>$orderId]);
+            }
             if(empty($sData['informer_user']) && $type == 1 && $data['work_type_mode'] == 15){
                 send_jpush([$sData['informer_user']],AppMsg::PUSH_INFORMER_USER,'您有一个品控订单,请知晓',['id'=>$orderId]);
 

+ 47 - 0
application/common/model/RepairGroup.php

@@ -0,0 +1,47 @@
+<?php
+namespace app\common\model;
+
+use think\Db;
+
+class RepairGroup extends Base
+{
+    protected $createTime = 'create_time';
+    protected $table = 'repair_group';
+    protected $validateName = 'RepairGroup';
+    public function updates(){
+        $data = request()->post();
+        $data['org_id'] =cur_org_id();
+        $result = validate($this->validateName)->check($data,[],'');
+        if(true !== $result){
+            $this->error = validate($this->validateName)->getError();
+            return false;
+        }
+        $id = $data['id'];
+        unset($data['id']);
+        if($id > 0){
+            $ret = $this->allowField(true)->save($data,['id'=>$id]);
+        }else{
+            $data['create_time'] = date('Y-m-d H:i:s');
+            $ret = $this->allowField(true)->save($data);
+        }
+        if(!$ret){
+            $this->error = '操作失败';
+            return false;
+        }
+        return true;
+    }
+    public function getList($orgId=0){
+        if($orgId==0){
+            $orgId = cur_org_id();
+        }
+        $list =$this
+            ->where('org_id',$orgId)
+            ->where('del',0)
+            ->where('enable',1)
+            ->field('id,title')
+            ->select()
+            ->toArray();
+        return $list;
+    }
+
+}

+ 21 - 0
application/common/validate/RepairGroup.php

@@ -0,0 +1,21 @@
+<?php
+namespace app\common\validate;
+
+use think\Validate;
+
+class RepairGroup extends Validate{
+
+    protected $rule = [
+        'title|名称'  =>  'require|length:1,50',
+        'users|分组成员'  => 'require',
+    ];
+
+    protected $message = [
+        'title.length' => '名称必须50字以内',
+    ];
+
+    protected $scene = [
+
+    ];
+
+}

+ 55 - 0
application/cron/OrdersReminder.php

@@ -0,0 +1,55 @@
+<?php
+namespace app\cron;
+
+use app\common\model\Config;
+use app\common\model\Orders as OrderModel;
+use app\common\util\AppMsg;
+use think\Db;
+use yunwuxin\cron\Task;
+
+//订单超过三个小时未完成提醒
+class OrdersReminder extends Task
+{
+    public function configure()
+    {
+        $this->spliceIntoPosition(1, '*/20'); //每20分钟执行一次
+    }
+
+    /**
+     * 执行任务
+     * @return mixed
+     */
+    protected function execute()
+    {
+        try{
+            $this->push();
+        }catch (\Exception $e){
+            trace($e->getMessage());
+        }
+
+    }
+    public function push(){
+        $list= Db::name('orders')
+            ->alias('a')
+            ->join('todo b','a.id = b.order_id')
+            ->where('a.del',0)
+            ->where('b.del',0)
+            ->where('order_mode',4)
+            ->where('todo_mode','in',[1,2])
+            ->field('b.create_time,b.to_user_id')
+            ->select();
+        $ids = [];
+        foreach ($list as $k=>$v){
+            $time = time();
+            $cTime = strtotime($v['create_time']);
+            $diff = $time - $cTime;
+            if ($diff > 60*60*3){
+                $ids[] = $v['to_user_id'];
+            }
+        }
+        $ids = array_unique($ids);
+        if(!empty($ids)){
+            send_jpush($ids,AppMsg::PUSH_WORKER_ORDER_SEND,'您的订单未完成,请及时处理');
+        }
+    }
+}

+ 66 - 1
application/h5/controller/Repair.php

@@ -39,7 +39,8 @@ class Repair extends Controller
 
         $org = Db::name('org')->where('id',$addr['org_id'])->find();
 
-        $this->assign('orgPhone',model('Config')->getConfig('org_phone',$addr['org_id']));
+        $orgPhone = model('Config')->getConfig('org_phone',$addr['org_id']);
+        $this->assign('orgPhone',explode(',',$orgPhone));
 
         $this->assign('orgName',$org['name']);
 
@@ -217,6 +218,70 @@ class Repair extends Controller
         return  $this->fetch();
     }
 
+    public function record()
+    {
+        $addr = Db::name('address')->where('id',$this->addrId)->find();
+        $list = Db::name('patrol_record')
+            ->where('org_id',$addr['org_id'])
+            ->where('patrol_mode',4)
+            ->where('patrol_addr_id',$addr['id'])
+            ->order('id desc')
+            ->paginate(10,true)
+            ->each(function($item,$key){
+                $item['addrName'] = Db::name('address')->where('id',$item['patrol_addr_id'])->value('title');
+                $item['userName'] = Db::name('user')->where('id',$item['user_id'])->value('real_name');
+                $item['create_time'] = date('m-d H:i:s',strtotime($item['create_time']));
+                $status = Db::name('patrol_task')->where('id',$item['patrol_task_id'])->value('status');
+                $item['status'] = $status;
+                $statusTxt = '';
+                if($status == 0){
+                    $statusTxt = '待完成';
+                }elseif ($status == 1){
+                    $statusTxt = '执行中';
+                }elseif ($status == 2){
+                    $statusTxt = '已完成';
+                }elseif ($status == 3){
+                    $statusTxt = '未完成';
+                }elseif ($status == 5){
+                    $statusTxt = '中断';
+                }elseif ($status == 6){
+                    $statusTxt = '已关闭';
+                }
+                $item['statusTxt'] = $statusTxt;
+                return $item;
+            });
+        $page = $list->render();
+//        foreach ($list as $k=>$v){
+//            $list[$k]['addrName'] = Db::name('address')->where('id',$v['patrol_addr_id'])->value('title');
+//            $list[$k]['userName'] = Db::name('user')->where('id',$v['user_id'])->value('real_name');
+//            $status = Db::name('patrol_task')->where('id',$v['patrol_task_id'])->value('status');
+//            $statusTxt = '';
+//            if($status == 0){
+//                $statusTxt = '待完成';
+//            }elseif ($status == 1){
+//                $statusTxt = '执行中';
+//            }elseif ($status == 2){
+//                $statusTxt = '已完成';
+//            }elseif ($status == 3){
+//                $statusTxt = '未完成';
+//            }elseif ($status == 5){
+//                $statusTxt = '中断';
+//            }elseif ($status == 6){
+//                $statusTxt = '已关闭';
+//            }
+//            $list[$k]['statusTxt'] = $statusTxt;
+//            $list[$k]['status'] = $status;
+//            $list[$k]['create_time'] = date('m-d H:i:s',strtotime($v['create_time']));
+//        }
+
+        $this->assign('list',$list);
+        $this->assign('page',$page);
+        $this->assign('title','巡检记录');
+        return  $this->fetch();
+
+
+    }
+
 }
 
 

+ 40 - 3
application/h5/view/repair/index.html

@@ -12,6 +12,18 @@
     <link rel="stylesheet" href="/static/swiper4.5/css/swiper.min.css">
     <title>{$orgName}</title>
 </head>
+<style>
+    .phoneSelect{
+        background-color: #39F;
+        border: 0;
+        margin-left: -20px;
+    }
+    .phone{
+        color: #39F;
+        background-color: #ffffff;
+        margin-top: -5px;
+    }
+</style>
 <body>
     <div class="container">
         <div class="header-box">{$orgName}管理系统 </div>
@@ -27,10 +39,23 @@
         </div>
         <div class="phone-box">
             {if $orgPhone}
-            <a href="tel:{$orgPhone}" style="text-decoration: none;color: #fff">
+            {if count($orgPhone) > 1}
+
+            <a style="text-decoration: none;color: #fff">
                 <img src="/repair/img/callphone.png" alt="">
-                <text>电话:{$orgPhone}</text>
+                <select id="phoneSelect" class="phoneSelect">
+                    {volist name='orgPhone' id='v'}
+                    <option value="{$v}">{$v}</option>
+                    {/volist}
+                </select>
+                <button type="button" class="btn btn-outline-secondary phone btn-sm"  onclick="callSelectedPhone()">拨打</button>
             </a>
+            {else/}
+            <a href="tel:{$orgPhone[0]}" style="text-decoration: none;color: #fff">
+                <img src="/repair/img/callphone.png" alt="">
+                <text>电话:{$orgPhone[0]}</text>
+            </a>
+            {/if}
             {/if}
         </div>
 
@@ -73,6 +98,12 @@
                         <div class="name">微课堂</div>
                     </div>
                 </div>
+                <div class="col-xs-4">
+                    <div class="module-info" onclick="goRecord()">
+                        <img src="/repair/img/yingji.png" alt="">
+                        <div class="name">巡检记录</div>
+                    </div>
+                </div>
             </div>
 
 
@@ -112,7 +143,13 @@
     function goVideo(){
         window.location.href = "{:url('repair/video')}";
     }
-
+    function goRecord(){
+        window.location.href = "{:url('repair/record')}";
+    }
+    function callSelectedPhone() {
+        var phone = document.getElementById('phoneSelect').value;
+        window.location.href = 'tel:' + phone;
+    }
     // function callPhone(){
     //     window.location.href = 'tel:'
     // }

+ 39 - 0
application/h5/view/repair/record.html

@@ -0,0 +1,39 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta name="viewport"
+          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.css">
+    <script type="text/javascript" src="/static/jquery-2.2.4.min.js"></script>
+    <script type="text/javascript" src="/static/layer/layer.js"></script>
+    <link rel="stylesheet" href="/repair/style.css">
+    <title>{$title}</title>
+</head>
+<body>
+    <div class="add-table-record-box">
+        <table class="table table-bordered">
+            <tbody>
+            {if isset($list)}
+            {foreach $list as $k=>$v}
+            <tr>
+                <td>{$v['create_time']}</td>
+                <td>{$v['addrName']}</td>
+                <td>{$v['content']}</td>
+                <td>{$v['statusTxt']}({$v['userName']})</td>
+            </tr>
+            {/foreach}
+            {/if}
+            </tbody>
+        </table>
+        {$page|raw}
+    </div>
+
+
+</body>
+</html>
+<script>
+
+
+</script>

+ 2 - 4
public/.htaccess

@@ -4,8 +4,6 @@
 
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
-#  RewriteRule ^(.*)$ index.html/$1 [QSA,PT,L]
+#  RewriteRule ^(.*)$ daily_electricity.html/$1 [QSA,PT,L]
   RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
-
-  SetEnvIf Authorization ^(.*) HTTP_AUTHORIZATION=$1
-</IfModule>
+</IfModule>