Newer
Older
EMS-WEB-3.0 / src / main / webapp / s / app / task / task-gd.js
/**
 * Created by lenovo on 2016/4/13.
 */
//定义全局变量,缓存组织结构

var TaskGd = function () {

    var map = null;
    var mouseTool = null;
    var taskMarkers = "";
    var drawOverlays = new Array();
    var drawTaskOverlays = new Array();
    var drawEventOverlays = [];
    var taskLists;
    var taskDetailLists = new Array();
    var eventBeanList = [];
    var viewPoints = [];
    var markerData = [];
    var hadRequest = false;

    var blueIcon = new AMap.Icon({
        size: new AMap.Size(25, 34),
        image: $('#context').val() + '/images/drop/0.png'
    });

    var orangeIcon = new AMap.Icon({
        size: new AMap.Size(25, 34),
        image: $('#context').val() + '/images/drop/1.png'
    });

    var redIcon = new AMap.Icon({
        size: new AMap.Size(25, 34),
        image: $('#context').val() + '/images/drop/2.png'
    });

    var blackIcon = new AMap.Icon({
        size: new AMap.Size(25, 34),
        image: $('#context').val() + '/images/drop/3.png'
    });

    var pinkIcon = new AMap.Icon({
        size: new AMap.Size(25, 34),
        image: $('#context').val() + '/images/drop/4.png'
    });

    var yellowIcon = new AMap.Icon({
        size: new AMap.Size(25, 34),
        image: $('#context').val() + '/images/drop/5.png'
    });

    var greenIcon = new AMap.Icon({
        size: new AMap.Size(25, 34),
        image: $('#context').val() + '/images/drop/6.png'
    });

    // 历史工单列表属性
    var options = {
        valueNames: [ 'id', 'patrolerName', 'status', 'deployDate', 'beginDate', 'endDate', 'description', {attr: 'src', name: 'image'} ],
        item: '<li onclick=""><img class="image" src="" style="float: left;width:20px;height:20px">' +
            '<a style="float: left;padding:2px 2px" ><p class="patrolerName"></p>' +
            '<p class="status"></p>' +
            '<p  class="deployDate"></p><p class="time"></p>' +
            '<p  class="beginDate"></p><p class="time"></p>' +
            '<p  class="endDate"></p><p class="time"></p>' +
            '<p class="description"></p>' +
            '<p class="id" style="display:none"></p>' +
            '</a>' +
            '<div style="clear:both"></div>' +
            ' </li>',
        page: 3,
        plugins: [ ListPagination({}) ]
    };

    // 清除所有绘制的区域图层
    function clearAll() {
        for (var i = 0; i < drawOverlays.length; i++) {
            map.remove(drawOverlays[i]);
        }
        drawOverlays.length = 0;
    }

    // 清除工单任务绘制的标识器点
    function clearAllTaskPoint() {
        for (var i = 0; i < drawTaskOverlays.length; i++) {
            map.remove(drawTaskOverlays[i]);
        }
        drawTaskOverlays.length = 0;
        taskDetailLists.length = 0;
    }

    // 清除工单任务绘制的事件点
    function clearAllEventPoint() {
        for (var i = 0; i < drawEventOverlays.length; i++) {
            map.remove(drawEventOverlays[i]);
        }
//        drawEventOverlays.length = 0;
        drawEventOverlays = [];
        eventBeanList = [];
    }

    // 查询巡检任务列表
    function getTaskInfo(patroler) {
        taskLists.clear();
        $.ajax({
            type: "get",
            url: $('#context').val() + "/task/get-task.do",
            dataType: "json",
            cache: false,
            data: {

            },
            success: function (r) {
                if (r.success) {//请求成功
                    for (var data in r.data) {
                        var icon = $('#context').val() + "/images/accidents/worker.png";
                        var id = r.data[data].id;
                        var patrolerName = r.data[data].patrolerName;
                        if (patroler && patrolerName != patroler) {
                            continue;
                        }
                        var description = r.data[data].description;
                        var deployDate = r.data[data].deployDate;
                        var beginDate = r.data[data].beginDate;
                        var endDate = r.data[data].endDate;
                        var status = r.data[data].status;
                        var creatorName = r.data[data].creatorName;
                        var task = new TaskBean(id, icon, patrolerName, description, deployDate, beginDate, endDate, status, creatorName);

                        task.patrolerName = "巡检员:" + task.patrolerName;
                        task.description = "任务描述:" + task.description;
                        task.deployDate = "下发时间:" + task.deployDate;
                        task.beginDate = task.beginDate == null ? "开始时间:" : "开始时间:" + task.beginDate;
                        task.endDate = task.endDate == null ? "完成时间:" : "完成时间:" + task.endDate;
                        task.status = "任务状态:" + task.status;
                        taskLists.add(task);
                    }
                } else {
                    swal("后台数据请求异常", r.message, "error");
                }
            },
            error: function (d) {//请求出错
                swal("后台数据请求出错", d.responseText, "error");
            }
        });
    }

    // 展示事件信息
    function showEventInfo(e) {
        var p = e.target;
        var imgName = p.Tag.imageName;
        var images = imgName.split(",");//图片路径数组
//        alert(images[0]);
        var msg2 = "<strong>事件描述:</strong>" + p.Tag.description + "</br>" +
                   "<strong>上传时间:</strong>" + p.Tag.createTime + "</br>";
        $("#eventImg").children().remove();//avatar1.jpg
        var imageDivs="<div class='row-fluid'>";
//        var imageDivs ="";
        var width = 100/images.length;//动态展示
        $("#viewHelper").children().remove();
        for(var i =0;i<images.length;i++){
            var url = $('#context').val() + "/images/events/" + images[i];
            imageDivs +="<div  class='span4'><div class='item'><a class='fancybox-button' data-rel='fancybox-button' href="+url+">" +
                                            "<div class='zoom'><img src="+ url + " />" +
                                            "<div class='zoom-icon'></div></div></a>" +
//                                            "<div class='details'>"+
//                                                 "<a href='#' class='icon'><i class='icon-paper-clip'></i></a>"+
//                                                    "<a href='#' class='icon'><i class='icon-link'></i></a>"+
//                                                    " <a href='#' class='icon'><i class='icon-pencil'></i></a>"+
//                                                    "<a href='#' class='icon'><i class='icon-remove'></i></a>"+
//                                             "</div>" +
                "</div></div>"

//          imageDivs +="<img height='80%' width='"+width+"%' src="+ url + ">";
        }
        imageDivs+="</div>"
        $(".fancybox-close").die().live("click",function(){
            $('#eventModal').modal('show').css({width: "300px"});
        });
        $(".zoom-icon").die().live("click",function(){
            $('#eventModal').modal('hide');
        });
//        alert(eval(imageDivs))
        $("#eventImg").append(imageDivs)
        $("#eventDescription").html(msg2);
        $('#eventModal').modal('show').css({width: "300px"});
//        alert("showEventInfo:"+images);
//        eventImgPage(images.length, 1, images);

    }

    // 获取标识器点
    function requestMarkers() {
        if (markerData.length == 0&&!hadRequest) {
            hadRequest = true;
            $.ajax({
                type: "get",
                url: $('#context').val() + "/marker/all-point-list.do",
                dataType: "json",
                cache: false,
                success: function (r) {
                    if (r.data) {//请求成功,将获取到的数据加载到地图上
                        //1.解析返回的结果,.设置全局变量data的值
                        markerData = [];//清空原来的数据
                        for (var t = 0; t < r.data.length; t++) {
                            var markerDto = r.data[t];
                            var emsBean = new EMSBean(markerDto.markerObjectType, markerDto.pipeMaterial, markerDto.pipeDiameter, markerDto.layStyle,
                                markerDto.depth, markerDto.belowType, markerDto.belowDepth, markerDto.belowDiameter,
                                markerDto.belowMaterial, markerDto.road, markerDto.constructTime, markerDto.ownerComp,
                                markerDto.markerObjectId, markerDto.markerId, markerDto.markerType, markerDto.markerDepth,
                                markerDto.creator, markerDto.createTime, markerDto.memo, markerDto.latitude, markerDto.longitude,
                                markerDto.recordType, markerDto.id,markerDto.line,markerDto.area, markerDto.colorType);
                            markerData[t] = emsBean;
                        }
                        //2.增加marker
                        TaskGd.addMarker(markerData);
                    }
                    hadRequest = false;
                    map.off("complete", requestMarkers());

                },
                error: function (d) {//请求出错
                    hadRequest = false;
                    map.off("complete", requestMarkers());
                }
            });
        } else if(!hadRequest){
            TaskGd.addMarker(markerData);
        }

    }
    return {

        //添加工单
        selectMarkerCallBack: function () {
            //绘制矩形区域:
            taskMarkers = "";
            if (drawOverlays.length == 0) {
                swal("请先绘制区域", "", "warning");
                return;
            }
            for (var i = 0; i < drawOverlays.length; i++) {
                var layer = drawOverlays[i];
                try {
                    // 生成判断是否在多边形内的数据格式
                    var path = [];
                    for (var k = 0; k < layer.He.path.length; k++) {
                        var pos = [];
                        pos.push(layer.He.path[k].lng, layer.He.path[k].lat);
                        path.push(pos);
                    }

                    for (var j = 0; j < markerData.length; j++) {
                        var emsBean = markerData[j];
                        var point = new AMap.LngLat(emsBean.longitude, emsBean.latitude);
                        var isPointInRing = AMap.GeometryUtil.isPointInRing(point, path);
                        if (isPointInRing) {
                            taskMarkers = taskMarkers + emsBean.id + ",";
                        }
                    }
                } catch (e) {
                    swal("脚本异常", e.message, "error");
                }
            }
            if (taskMarkers == "") {
                swal("请选择标识器点!", "", "error");
                return;
            }

            $('#addTaskModal2').modal('show');
            clearAll();
        },

        //清除
        clearCallBack: function () {
            taskMarkers = "";
            clearAll();
        },

        //上传工单
        uploadTaskCallBack: function (patrolerId, description) {
            $.ajax({
                type: "get",
                url: $('#context').val() + "/task/task-Save.do",
                dataType: "json",
                cache: false,
                data: {
                    markers: taskMarkers,
                    patrolerId: patrolerId,
                    description: description
                },
                success: function (r) {
                    if (r.success) {//请求成功
                        swal({
                            title: "请求成功",
                            text: r.message,
                            type: "success",
                            confirmButtonText: "确认"
                        }, function() {
                            TaskGd.updateList();
                        });
                    } else {
                        swal("请求失败", r.message, "error");
                    }
                },
                error: function (d) {//请求出错
                    swal("请求失败", d.message, "error");
                }
            });
        },

        // 初始化地图
        initMap: function () {

            map = new AMap.Map("container", {
                zoom: 13,
                resizeEnable: true,
                zooms: [4,18],//设置地图级别范围
            });

            //声明全局变量
            if (!markerData || markerData.length == 0) {
                markerData = new Array();
            }

            // 鼠标操作工具栏
            mouseTool = new AMap.MouseTool(map);
            mouseTool.on('draw',function(e){
                drawOverlays.push(e.obj);
            });

            //加载完毕请求标识点信息
            map.on("complete", requestMarkers);
        },

        initList: function () {
            taskLists = new List('worksheets', options);
            TaskGd.updateList();
            //$('.sort').click();
            $('#btnSort').trigger("click");
            $('#btnSort').trigger("click");

            $('#btnSort').css("padding", 0);
            $('#btnSort').css("padding-left", 10);
            $('#btnSort').css("padding-right", 15);
            $('#btnSort').css("margin-bottom", 10);

            TaskGd.bindClickEvent();

            $('#selectPatroler3').live('change', function (e) {//下拉列表更改的时候查询数据,更新列表,待优化为查询条件在后台利用
                TaskGd.updateList($("#selectPatroler3").val());
            });
        },

        // 绑定任务列表单击事件
        bindClickEvent: function () {
            $('#worksheets ul li').live('click', function (e) {
                viewPoints = [];
                if (null == this.getElementsByClassName("id")[0]) {
                    return;
                }
                clearAllTaskPoint();
                clearAllEventPoint();
                var taskId = this.getElementsByClassName("id")[0].innerHTML;
                var i = 0;
                //请求任务
                $.ajax({
                    type: "get",
                    url: $('#context').val() + "/task/get-task-markers.do",
                    dataType: "json",
                    async:false,
                    cache: false,
                    data: {
                        taskId: taskId
                    },
                    success: function (r) {
                        if (r.success) {//请求成功
                            for (var data in r.data) {
                                var id = r.data[data].id;
                                var markerName = r.data[data].markerIdReal;
                                var latitude = r.data[data].latitude;
                                var longitude = r.data[data].longitude;
                                var finishTime = r.data[data].finishTime == null ? "" : r.data[data].finishTime;
                                var description = r.data[data].description == null ? "" : r.data[data].description;
                                var status = r.data[data].isChecked;
                                var icon = "";
                                var isChecked = "";
                                if (status == 0) {
                                    icon = $('#context').val() + "/images/point-task.png";
                                    isChecked = "未巡检";
                                }
                                else {
                                    icon = $('#context').val() + "/images/point.png";
                                    isChecked = "已巡检";
                                }

                                var taskDetailBean = new TaskDetailBean(id, icon, markerName, latitude, longitude, isChecked, finishTime, description);
                                taskDetailLists.push(taskDetailBean);

                            }
                            TaskGd.addTaskDetailMarker(taskDetailLists);
                        }
                        else {
                            alert(r.message);
                        }
                    },
                    error: function (d) {//请求出错
                        alert(d.message);
                    }
                });

                //请求该任务上报的事件
                $.ajax({
                    type: "get",
                    url: $('#context').val() + "/event/get-event-list.do",
                    dataType: "json",
                    cache: false,
                    async:false,
                    data: {
                        taskId: taskId
                    },
                    success: function (r) {
                        if (r.success) {//请求成功
                            for (var data in r.data) {
                                var id = r.data[data].id;
                                var imageName = r.data[data].imageName;
                                var latitude = r.data[data].latitude;
                                var longitude = r.data[data].longitude;
                                var createTime = r.data[data].createTime == null ? "" : r.data[data].createTime;
                                var description = r.data[data].description == null ? "" : r.data[data].description;
                                var status = r.data[data].status;
                                var eventBean = new EventBean(id, imageName, latitude, longitude, description, status, createTime);

                                eventBeanList.push(eventBean);

                            }
                            TaskGd.addEventMarker(eventBeanList);
                        }
                        else {
                            alert(r.message);
                        }
                    },
                    error: function (d) {//请求出错
                        alert(d.message);
                    }
                });

                map.setFitView(viewPoints);

            });

        },

        /*
         * 增加报警信息到列表
         * */
        updateList: function (patroler) {
            getTaskInfo(patroler);
        },

        // 初始化表单操作
        initForm: function () {
            $("#saveTask2").click(function (e) {
                //alert(taskMarkers);
                var patrolerId = $("#selectPatroler2").val();
                var description = $("#description2").val();
                TaskGd.uploadTaskCallBack(patrolerId, description);
                $('#addTaskModal2').modal('hide');
                $("#description2").val("");
            });
        },

        //获取巡检员列表
        initPatrolerArray: function () {

            $.ajax({
                type: "POST",
                url: $('#context').val() + "/user/get-patroler.do",
                data: {},
                dataType: "json",
                success: function (r) {
                    //获取面的列表,将下拉列表初始化
                    if (r.data) {
                        for (var user in r.data) {
                            //alert(r.data[user].id+":"+r.data[user].userName);
                            $("#selectPatroler").append(" <option value=" + r.data[user].id + ">" + r.data[user].userName + "</option>");
                            $("#selectPatroler2").append(" <option value=" + r.data[user].id + ">" + r.data[user].userName + "</option>");
                            $("#selectPatroler3").append(" <option value=" + r.data[user].userName + ">" + r.data[user].userName + "</option>");
                        }
                        $("#selectPatroler").chosen();
                        $("#selectPatroler2").chosen();
                        $("#selectPatroler3").chosen();
                    }
                },
                error: function (d) {
                    //提示错误信息
                    swal("请求巡检员列表出错", d.responseText, "error");
                }
            });

        },

        // 绘制区域矩形框
        drawRect: function () {
            mouseTool.rectangle();
        },

        //取消绘制区域矩形框
        moveMap: function () {
            mouseTool.close(true)//关闭,并清除覆盖物
        },

        //初始化下拉列表框
        initSelect: function () {
            TaskGd.initPatrolerArray();
        },

        // 显示标识器点
        addMarker: function (data) {
            for (var i = 0; i < data.length; i++) {
                var icon = blueIcon;
                var color = data[i].colorType;
                if (color == "1") {
                    icon = orangeIcon;
                } else if (color == "2") {
                    icon = redIcon;
                } else if (color == "3") {
                    icon = blackIcon;
                } else if (color == "4") {
                    icon = pinkIcon;
                } else if (color == "5") {
                    icon = yellowIcon;
                } else if (color == "6") {
                    icon = greenIcon;
                }

                var marker = new AMap.Marker({
                    position: [data[i].longitude, data[i].latitude],
                    icon: icon
                });
                marker.Tag = data[i];

                marker.on("click", function (e) {

                    var emsBean = e.target.Tag;
                    var msg = "";
                    var height = 0;
                    var titleName ="";
                    if (emsBean.recordType == 1) {
                        titleName = "<div class='info-title'>管线</div>";
                        msg = msg + "管线种类:" + emsBean.markerObjectType + "<br/>" +
                            "管线直径(mm):" + emsBean.pipeDiameter + "<br/>" +
                            "管线材质:" + emsBean.pipeMaterial + "<br/>" +
                            "埋设方式:" + emsBean.layStyle + "<br/>" +
                            "管线埋深(mm):" + emsBean.depth + "<br/>";
                        height = 100;
                    } else if (emsBean.recordType == 2) {
                        titleName = "<div class='info-title'>管线附属物</div>";
                        msg = msg + "附属物名称:" + emsBean.markerObjectType + "<br/>" +
                            "井深(mm):" + emsBean.depth + "<br/>";
                        height = 40;
                    } else if (emsBean.recordType == 3) {
                        titleName = "<div class='info-title'>管线特征管点</div>";
                        msg = msg + "管点特征:" + emsBean.markerObjectType + "<br/>" +
                            "特征点埋深(mm):" + emsBean.depth + "<br/>";
                        height = 40;
                    } else {
                        titleName = "<div class='info-title'>交叉穿越点</div>";
                        msg = msg + "上层管种类:" + emsBean.markerObjectType + "<br/>" +
                            "上层管埋深(mm):" + emsBean.depth + "<br/>" +
                            "上层管直径(mm):" + emsBean.pipeDiameter + "<br/>" +
                            "上层管材料:" + emsBean.pipeMaterial + "<br/>" +
                            "下层管种类:" + emsBean.belowType + "<br/>" +
                            "下层管埋深(mm):" + emsBean.belowDepth + "<br/>"+
                            "下层管直径(mm):" + emsBean.belowDiameter + "<br/>" +
                            "下层管材料:" + emsBean.belowMaterial + "<br/>" ;
                        height = 160;
                    }
                    height = height +225;
                    msg = msg + "所属区域:" + emsBean.area + "<br/>" +
                        "所属线路:" + emsBean.line + "<br/>" +
                        "所属道路:" + emsBean.road + "<br/>" +
                        "建设年代:" + emsBean.constructTime + "<br/>" +
                        "权属单位:" + emsBean.ownerComp + "<br/>" +
                        "标识器ID:" + emsBean.markerId + "<br/>" +
                        "标识器类型:" + emsBean.markerType + "<br/>" +
                        "标识器埋深(mm):" + emsBean.markerDepth + "<br/>" +
                        "安装部门:" + emsBean.creator + "<br/>" +
                        "最后修改时间:"+emsBean.createTime + "<br/>" +
                        "备注:" + emsBean.memo + "<br/>";
                    var imgUrl = $('#context').val() + "/images/ems.jpg";
                    var content = titleName + '<div class="info-content">' +
                        '<img src=' + '"' + imgUrl + '"' + ' />' + msg +
                        '</div>';

                    var infowindow = new AMap.AdvancedInfoWindow({
                        content: content,
                        width: 290,             //宽度
                        height: height,         //高度
                        panel: "panel",         //检索结果面板
                        enableAutoPan: true    //自动平移
                    });

                    infowindow.open(map, [e.lnglat.lng, e.lnglat.lat]);
                });

                map.add(marker);
            }
        },

        //增加事件图片的marker
        addEventMarker: function () {
            console.log(eventBeanList);
            for (var i = 0; i < eventBeanList.length; i++) {
                var eventMarker = new AMap.Marker({
                    position: [eventBeanList[i].longitude, eventBeanList[i].latitude],
                    size: new AMap.Size(30, 30),
                    icon: new AMap.Icon({
                        size: new AMap.Size(38, 38),
                        image: $('#context').val() + "/images/events/red_icon.png"
                    })
                });

                var msg = "事件描述:" + eventBeanList[i].description + "\r\n" +
                          "上传时间:" + eventBeanList[i].createTime + "\r\n";
                eventMarker.setTitle(msg);
                eventMarker.Tag = eventBeanList[i];
                viewPoints.push(eventMarker);
                eventMarker.on("click", showEventInfo);
                map.add(eventMarker);              // 将标注添加到地图中
                drawEventOverlays.push(eventMarker);
            }
        },

        // 点击任务列表绘制任务对应的标识器点
        addTaskDetailMarker: function (data) {
            for (var i = 0; i < data.length; i++) {
                var msg = "标识器名称:" + data[i].markerName + "\r\n" +
                          "巡检状态:" + data[i].isChecked + "\r\n" +
                          "巡检时间:" + data[i].finishTime + "\r\n" +
                          "描述:" + data[i].description + "\r\n";

                var marker = new AMap.Marker({
                    position: [data[i].longitude, data[i].latitude],
                    size: new AMap.Size(30, 30),
                    icon: data[i].icon
                });

                marker.setTitle(msg);

                viewPoints.push(marker);
                drawTaskOverlays.push(marker);
                map.add(marker);              // 将标注添加到地图中
            }
        }
    };
}();

TaskBean = function (id, icon, patrolerName, description, deployDate, beginDate, endDate, status, creatorName) {
    this.id = id;
    this.image = icon;
    this.patrolerName = patrolerName;
    this.description = description;
    this.deployDate = deployDate;
    this.beginDate = beginDate;
    this.endDate = endDate;
    this.status = status;
    this.creatorName = creatorName;
};

TaskDetailBean = function (id, icon, markerName, latitude, longitude, isChecked, finishTime, description) {
    this.id = id;
    this.icon = icon;
    this.markerName = markerName;
    this.latitude = latitude;
    this.longitude = longitude;
    this.isChecked = isChecked;
    this.finishTime = finishTime;
    this.description = description;
};

EventBean = function (id, imageName, latitude, longitude, description, status, createTime) {
    this.id = id;
    this.imageName = imageName;
    this.latitude = latitude;
    this.longitude = longitude;
    this.description = description;
    this.status = status;
    this.createTime = createTime;
}