From e8044ee933b7e2f834855f28ea8575d82eb0eeac Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期五, 20 六月 2025 21:25:13 +0800 Subject: [PATCH] 提现管理 --- ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TSiteController.java | 12 ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_add.html | 44 - ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GaoDeMapUtil.java | 1 ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit1.html | 193 +++++++++ ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html | 43 - ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/electricFence1.js | 329 +++++++++++++++ ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/tSite_info.js | 4 ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java | 86 ++- ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/electricFence.js | 521 +++++++++++------------- 9 files changed, 840 insertions(+), 393 deletions(-) diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TSiteController.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TSiteController.java index a44d3f5..58dfc85 100644 --- a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TSiteController.java +++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/specialTrain/TSiteController.java @@ -153,7 +153,10 @@ tSiteService.insert(tSite); //添加站点区域 - addLocation(subArr,tSite.getId()); + String s = addLocation(subArr, tSite.getId()); + if (s.equals("false")){ + return ResultUtil.error("面积过大,请清除后重新绘制"); + } return ResultUtil.success(); } @@ -162,7 +165,7 @@ * @param subArr * @param id */ - public void addLocation(String subArr,Integer id){ + public String addLocation(String subArr,Integer id){ JSONArray jsonArray = JSON.parseArray(subArr); int size = jsonArray.size(); for (int i = 0; i < size; i++){ @@ -198,6 +201,10 @@ if(type == 2){ List<String> fence = gdMapElectricFenceUtil.createFence(location.getId().toString(), location.getCoordinate()); + if (fence.contains("-1")){ + return "false"; + + } TLocation location1 = itLocationService.selectById(location.getId()); String s = ""; for(String gid : fence){ @@ -208,6 +215,7 @@ itLocationService.updateById(location1); } } + return "success"; } /** diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java index 50732fc..e1234e6 100644 --- a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java +++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java @@ -13,6 +13,8 @@ import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.stereotype.Component; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import java.text.ParseException; @@ -56,51 +58,47 @@ * @return */ public List<String> createFence(String id, String points){ - Calendar calendar = Calendar.getInstance(); - calendar.setTime(new Date()); - calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 35); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); - String format = simpleDateFormat.format(calendar.getTime()); + String ak = key; + List<String> result = new ArrayList<>(); - - //开始调用高德接口创建围栏 + // points格式:lng,lat;lng,lat;... 或 lng,lat;radius(圆形) String[] s = points.split("_"); - List<String> resoult = new ArrayList<>(); - for(int i = 0; i < s.length; i++){ - String[] split = s[i].split(";"); - JSONObject json = new JSONObject(); - json.put("name", "location_" + id); - if(split.length == 2){ - json.put("center", split[0]); - json.put("radius", split[1]); - }else{ - json.put("points", s[i]); + for (String item : s) { + String url; + MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); + params.add("ak", ak); + params.add("service_id", "241187"); + params.add("name", "location_" + id); + + String[] split = item.split(";"); + if (split.length == 2 && split[1].matches("\\d+")) { + // 圆形围栏 + params.add("center", split[0]); + params.add("radius", split[1]); + url = "http://yingyan.baidu.com/api/v3/fence/createcircle"; + } else { + // 多边形围栏 + params.add("vertexes", item); + url = "https://yingyan.baidu.com/api/v3/fence/createpolygonfence"; } - json.put("enable", "true"); - json.put("valid_time", format); - json.put("repeat", "Mon,Tues,Wed,Thur,Fri,Sat,Sun"); - json.put("alert_condition", "enter;leave"); - json.put("desc", id); + + params.add("coord_type", "bd09ll"); // 百度经纬度 + params.add("denoise", "10"); // 去噪 + params.add("alarm_condition", "enter;leave"); // 进出报警 HttpHeaders headers = new HttpHeaders(); - MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); - headers.setContentType(type); - headers.add("Accept", MediaType.APPLICATION_JSON.toString()); - HttpEntity<String> formEntity = new HttpEntity<>(json.toString(), headers); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers); - String url = "https://restapi.amap.com/v4/geofence/meta?key=" + key; - String js = restTemplate.postForObject(url, formEntity, String.class); - JSONObject jsonObject = JSON.parseObject(js); - JSONObject data = jsonObject.getJSONObject("data"); - String status = data.getString("status"); - - gdInterfaceService.saveData("https://restapi.amap.com/v4/geofence/meta", "创建电子围栏"); - - if(status.equals("0")){//创建成功 - resoult.add(data.getString("gid")); + String response = restTemplate.postForObject(url, request, String.class); + JSONObject json = JSON.parseObject(response); + if (json.getIntValue("status") == 0) { + result.add(json.getString("fence_id")); + }else{ + result.add("-1"); } } - return resoult; + return result; } @@ -334,10 +332,18 @@ * @return */ public boolean deleteElectricFenc(String gid){ - restTemplate.delete("https://restapi.amap.com/v4/geofence/meta?key={1}&gid={2}", key, gid); - System.out.println("删除:" ); + MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); + params.add("ak", key); + params.add("service_id", "241187"); + params.add("fence_ids", gid); + System.out.println("删除:"); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers); - gdInterfaceService.saveData("https://restapi.amap.com/v4/geofence/meta", "删除电子围栏"); + String response = restTemplate.postForObject("https://yingyan.baidu.com/api/v3/fence/delete", request, String.class); + System.err.println(response); + gdInterfaceService.saveData("https://yingyan.baidu.com/api/v3/fence/delete", "删除电子围栏"); return true; } diff --git a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GaoDeMapUtil.java b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GaoDeMapUtil.java index 105a191..82b5d7d 100644 --- a/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GaoDeMapUtil.java +++ b/ManagementOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GaoDeMapUtil.java @@ -51,6 +51,7 @@ return positionObj; } + /** * 发送Get请求 * diff --git a/ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_add.html b/ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_add.html index 284514e..0f7a8d3 100644 --- a/ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_add.html +++ b/ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_add.html @@ -83,13 +83,12 @@ <label class="col-sm-2 control-label">电子围栏:</label> <div class="col-sm-8"> <div id="container" style="height: 350px;width: 1000px;"></div> - <div class='info' style="margin-top:10px;position: absolute; z-index: 999; left: 20px; width: 450px;">操作说明:圆和矩形通过拖拽来绘制,其他覆盖物通过点击来绘制</div> + <div class='info' style="margin-top:10px;position: absolute; z-index: 999; left: 20px; width: 450px;"> + 操作说明:双击左键结束绘制 + </div> <div class="input-card" style='margin-top:28px;width: 100rem; z-index: 999; bottom: 20px;'> <div class="input-item"> - <!--<input type="radio" name='func' checked="" value='marker'><span class="input-text">画点</span>--> - <!--<input type="radio" name='func' value='polyline'><span class="input-text">画折线</span> --> <input type="radio" name='func' value='polygon'><span class="input-text" style='width:5rem;'>画多边形</span> - <!--<input type="radio" name='func' value='rectangle'><span class="input-text" style='width:5rem;'>画矩形</span> --> <input type="radio" name='func' value='circle'><span class="input-text" style='width:5rem;'>画圆</span> </div> <div class="input-item"> @@ -99,35 +98,6 @@ <input type="button" class="btn" value="结束编辑" onclick="closeEdit()" /> </div> </div> - </div> - <div class="col-sm-2"> - <div class="form-group"> - <label style='color:grey'>行政区边界查询</label> - <div class="input-group"> - <div class="input-group-btn"> - <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" - type="button">行政级别 - </button> - </div> - <select id="level" class="form-control"> - <option value="district">区</option> - <option value="city">市</option> - <option value="province">省</option> - </select> - - </div> - </div> - <div class="form-group"> - <div class="input-group"> - <div class="input-group-btn"> - <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" - type="button">名称/adcode - </button> - </div> - <input id='district' class="layui-input form-control" type="text" value=''> - </div> - </div> - <input id="find" type="button" class="btn btn-primary btn-sm" value="查询" /> </div> </div> @@ -164,7 +134,13 @@ </div> </div> -<script src="https://webapi.amap.com/maps?v=1.4.15&key=c59c0ec8058a8305009eb315584e07d1&plugin=AMap.MouseTool,AMap.DistrictSearch,AMap.PolyEditor,AMap.RectangleEditor,AMap.CircleEditor"></script> + +<script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=t5pcBZB5G4D11G9MzHq8Kik7jqzlTrAL"></script> +<!-- 百度地图绘制工具库 --> +<script type="text/javascript" src="https://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script> +<link rel="stylesheet" href="https://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" /> +<!-- 百度地图编辑器库 --> +<script type="text/javascript" src="https://api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils_min.js"></script> <script src="${ctxPath}/static/modular/system/tSite/electricFence.js"></script> <script src="${ctxPath}/static/modular/system/tSite/tSite_info.js"></script> @} diff --git a/ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html b/ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html index 319a285..e11ce1e 100644 --- a/ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html +++ b/ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit.html @@ -90,13 +90,12 @@ <label class="col-sm-2 control-label">电子围栏:</label> <div class="col-sm-8"> <div id="container" style="height: 350px;width: 1000px;"></div> - <div class='info' style="margin-top:10px;position: absolute; z-index: 999; left: 20px; width: 450px;">操作说明:圆和矩形通过拖拽来绘制,其他覆盖物通过点击来绘制</div> + <div class='info' style="margin-top:10px;position: absolute; z-index: 999; left: 20px; width: 450px;"> + 操作说明:双击左键结束绘制 + </div> <div class="input-card" style='margin-top:28px;width: 100rem; z-index: 999; bottom: 20px;'> <div class="input-item"> - <!--<input type="radio" name='func' checked="" value='marker'><span class="input-text">画点</span>--> - <!--<input type="radio" name='func' value='polyline'><span class="input-text">画折线</span> --> <input type="radio" name='func' value='polygon'><span class="input-text" style='width:5rem;'>画多边形</span> - <!--<input type="radio" name='func' value='rectangle'><span class="input-text" style='width:5rem;'>画矩形</span> --> <input type="radio" name='func' value='circle'><span class="input-text" style='width:5rem;'>画圆</span> </div> <div class="input-item"> @@ -106,35 +105,6 @@ <input type="button" class="btn" value="结束编辑" onclick="closeEdit()" /> </div> </div> - </div> - <div class="col-sm-2"> - <div class="form-group"> - <label style='color:grey'>行政区边界查询</label> - <div class="input-group"> - <div class="input-group-btn"> - <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" - type="button">行政级别 - </button> - </div> - <select id="level" class="form-control"> - <option value="district">区</option> - <option value="city">市</option> - <option value="province">省</option> - </select> - - </div> - </div> - <div class="form-group"> - <div class="input-group"> - <div class="input-group-btn"> - <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" - type="button">名称/adcode - </button> - </div> - <input id='district' class="layui-input form-control" type="text" value=''> - </div> - </div> - <input id="find" type="button" class="btn btn-primary btn-sm" value="查询" /> </div> </div> <div class="form-group"> @@ -187,7 +157,12 @@ </div> </div> -<script src="https://webapi.amap.com/maps?v=1.4.15&key=c59c0ec8058a8305009eb315584e07d1&plugin=AMap.MouseTool,AMap.DistrictSearch,AMap.PolyEditor,AMap.RectangleEditor,AMap.CircleEditor"></script> +<script type="text/javascript" src="https://api.map.baidu.com/api?v=3.0&ak=t5pcBZB5G4D11G9MzHq8Kik7jqzlTrAL"></script> +<!-- 百度地图绘制工具库 --> +<script type="text/javascript" src="https://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"></script> +<link rel="stylesheet" href="https://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" /> +<!-- 百度地图编辑器库 --> +<script type="text/javascript" src="https://api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils_min.js"></script> <script src="${ctxPath}/static/modular/system/tSite/electricFence.js"></script> <script src="${ctxPath}/static/modular/system/tSite/tSite_info.js"></script> @} diff --git a/ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit1.html b/ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit1.html new file mode 100644 index 0000000..319a285 --- /dev/null +++ b/ManagementOKTravel/guns-admin/src/main/webapp/WEB-INF/view/system/tSite/tSite_edit1.html @@ -0,0 +1,193 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="form-horizontal" id="siteInfoForm"> + <input type="hidden" id="id" name="id" value="${item.id}"> + <div class="row"> + <div class="col-sm-12"> + <div class=""> + <h3 style="margin-left: 100px;">站点信息</h3> + </div> + <div class="form-group"> + <label class="col-sm-2 control-label">站点名称:</label> + <div class="col-sm-6"> + <input type="text" class="form-control" id="name" name="name" value="${item.name}"> + </div> + </div> + <div class="form-group"> + <label class="col-sm-2 control-label">所属城市:</label> + <div class="col-sm-2"> + <select class="form-control" id="provinceCode" onchange="TSiteInfoDlg.provinceChange(this)"> + <option value="">选择省</option> + @for(obj in provinceList){ + <option value="${obj.code}" ${obj.code == item.provinceCode ? 'selected=selected' : ''}>${obj.name}</option> + @} + </select> + </div> + <div class="col-sm-2"> + <select class="form-control" id="cityCode" onchange="TSiteInfoDlg.cityChange(this)"> + <option value="">选择市</option> + @for(obj in cityList){ + <option value="${obj.code}" ${obj.code == item.cityCode ? 'selected=selected' : ''}>${obj.name}</option> + @} + </select> + </div> + <div class="col-sm-2"> + <select class="form-control" id="districtCode"> + <option value="">选择区</option> + @for(obj in areaList){ + <option value="${obj.code}" ${obj.code == item.districtCode ? 'selected=selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + + <div class=""> + <h3 style="margin-left: 100px;margin-top: 70px;">站点区域</h3> + </div> + <div class="form-group"> + <label class="col-sm-2 control-label">区域名称:</label> + <div class="col-sm-2"> + <input type="text" class="form-control" id="areaName" name="areaName"> + </div> + <label class="col-sm-1 control-label">类型:</label> + <div class="col-sm-2" style="display: flex;align-items: center;"> + <div class="radio radio-info radio-inline"> + <input type="radio" id="areaType1" value="1" name="areaType" ${checked1} disabled onclick="TSiteInfoDlg.areaTypeClick(1)"> + <label for="areaType1"> 行政区域 </label> + </div> + <div class="radio radio-success radio-inline"> + <input type="radio" id="areaType2" value="2" name="areaType" ${checked2} disabled onclick="TSiteInfoDlg.areaTypeClick(2)"> + <label for="areaType2"> 电子围栏 </label> + </div> + </div> + <div class="col-sm-2"> + <#button btnCss="info" name="添加" id="ensure" icon="fa-check" clickFun="TSiteInfoDlg.addArea()"/> + </div> + </div> + <div class="form-group" id="areaType1Div" style="display: ${type1};"> + <label class="col-sm-2 control-label">行政区域:</label> + <div class="col-sm-2"> + <select class="form-control" id="provinceCode1" onchange="TSiteInfoDlg.provinceChange1(this)"> + <option value="">选择省</option> + @for(obj in provinceList){ + <option value="${obj.code}">${obj.name}</option> + @} + </select> + </div> + <div class="col-sm-2"> + <select class="form-control" id="cityCode1" onchange="TSiteInfoDlg.cityChange1(this)"> + <option value="">选择市</option> + </select> + </div> + <div class="col-sm-2"> + <select class="form-control" id="districtCode1"> + <option value="">选择区</option> + </select> + </div> + </div> + <div class="form-group" id="areaType2Div" style="display: ${type2};"> + <label class="col-sm-2 control-label">电子围栏:</label> + <div class="col-sm-8"> + <div id="container" style="height: 350px;width: 1000px;"></div> + <div class='info' style="margin-top:10px;position: absolute; z-index: 999; left: 20px; width: 450px;">操作说明:圆和矩形通过拖拽来绘制,其他覆盖物通过点击来绘制</div> + <div class="input-card" style='margin-top:28px;width: 100rem; z-index: 999; bottom: 20px;'> + <div class="input-item"> + <!--<input type="radio" name='func' checked="" value='marker'><span class="input-text">画点</span>--> + <!--<input type="radio" name='func' value='polyline'><span class="input-text">画折线</span> --> + <input type="radio" name='func' value='polygon'><span class="input-text" style='width:5rem;'>画多边形</span> + <!--<input type="radio" name='func' value='rectangle'><span class="input-text" style='width:5rem;'>画矩形</span> --> + <input type="radio" name='func' value='circle'><span class="input-text" style='width:5rem;'>画圆</span> + </div> + <div class="input-item"> + <input id="clear" type="button" class="btn" value="清除" /> + <input id="close" type="button" class="btn" value="关闭绘图" /> + <input type="button" class="btn" value="开始编辑" onclick="editAll()" /> + <input type="button" class="btn" value="结束编辑" onclick="closeEdit()" /> + </div> + </div> + </div> + <div class="col-sm-2"> + <div class="form-group"> + <label style='color:grey'>行政区边界查询</label> + <div class="input-group"> + <div class="input-group-btn"> + <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" + type="button">行政级别 + </button> + </div> + <select id="level" class="form-control"> + <option value="district">区</option> + <option value="city">市</option> + <option value="province">省</option> + </select> + + </div> + </div> + <div class="form-group"> + <div class="input-group"> + <div class="input-group-btn"> + <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" + type="button">名称/adcode + </button> + </div> + <input id='district' class="layui-input form-control" type="text" value=''> + </div> + </div> + <input id="find" type="button" class="btn btn-primary btn-sm" value="查询" /> + </div> + </div> + <div class="form-group"> + <label class="col-sm-2 control-label">已添加区域</label> + <div class="col-sm-6"> + <div style="height: 200px; border: 1px solid #e5e6e7;overflow-y: auto;"> + <table class="table table-striped table-bordered table-hover table-condensed"> + <thead> + <tr> + <th style="width: 300px;text-align: center;">添加时间</th> + <th style="width: 300px;text-align: center;">区域名称</th> + <th style="width: 100px;text-align: center;">操作</th> + </tr> + </thead> + <tbody id="areaValue"> + @for(obj in locationList!){ + <tr class="areaValueClass"> + <td style="text-align: center;"><input type="hidden" id="areaType1" name="areaType1" value="${obj.type}"> + <input type="hidden" id="time" name="time" value="${obj.addTime}">${obj.addTime}</td> + <td style="text-align: center;"> + <input type="hidden" id="id" name="id" value="${obj.id}"> + <input type="hidden" id="name" name="name" value="${obj.name}"> + <input type="hidden" id="provinceCode1" name="provinceCode1" value="${obj.provinceCode}"> + <input type="hidden" id="province1" name="province1" value="${obj.province}"> + <input type="hidden" id="cityCode1" name="cityCode1" value="${obj.cityCode}"> + <input type="hidden" id="city1" name="city1" value="${obj.city}"> + <input type="hidden" id="districtCode1" name="districtCode1" value="${obj.districtCode}"> + <input type="hidden" id="district1" name="district1" value="${obj.district}"> + <input type="hidden" id="coordinate1" name="coordinate1" value="${obj.coordinate}"> + ${obj.name}</td> + <td style="text-align: center;"><button onclick="deleteSub(this)">移除</button></td> + </tr> + @} + </tbody> + </table> + </div> + </div> + </div> + + </div> + </div> + + <div class="row btn-group-m-t"> + <div class="col-sm-10 col-sm-offset-5"> + <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSiteInfoDlg.editSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSiteInfoDlg.close()"/> + </div> + </div> + </div> + + </div> +</div> +<script src="https://webapi.amap.com/maps?v=1.4.15&key=c59c0ec8058a8305009eb315584e07d1&plugin=AMap.MouseTool,AMap.DistrictSearch,AMap.PolyEditor,AMap.RectangleEditor,AMap.CircleEditor"></script> +<script src="${ctxPath}/static/modular/system/tSite/electricFence.js"></script> +<script src="${ctxPath}/static/modular/system/tSite/tSite_info.js"></script> +@} diff --git a/ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/electricFence.js b/ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/electricFence.js index 8881503..083d74c 100644 --- a/ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/electricFence.js +++ b/ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/electricFence.js @@ -1,196 +1,160 @@ -var map = new AMap.Map('container',{ - resizeEnable: true, - zoom:10 -}); +// 初始化地图 +var map = new BMap.Map('container'); +var point = new BMap.Point(114.329123,29.847218); +map.centerAndZoom(point, 10); +map.enableScrollWheelZoom(); - -var value = ""; -map.getCity( - callback=function (result) { - value = result.city; - drawBounds(); - } -); - - -var mouseTool = new AMap.MouseTool(map); -//监听draw事件可获取画好的覆盖物 +// 全局变量 +var coordinate = ''; var overlays = []; -var name = null; -var coordinate = '';//存储坐标 -var objs = {//存储各种类型的覆盖物对象 - "polyline":[], - "polygon":[], - "rectangle":[], - "circle":[] +var objs = { + "polyline": [], + "polygon": [], + "rectangle": [], + "circle": [] }; var editors = []; -mouseTool.on('draw',function(e){ - overlays.push(e.obj); - console.log(e.obj.getPath()); - switch (name) { - case 'polyline':{//折线图 - var polyline = e.obj.getPath(); - getCoordinate(polyline); - objs.polyline.push(e.obj); - break; - } - case 'polygon':{//多边形 - var polygon = e.obj.getPath(); - getCoordinate(polygon); - objs.polygon.push(e.obj); - break; - } - case 'rectangle':{//矩形 - var rectangle = e.obj.getPath(); - getCoordinate(rectangle); - objs.rectangle.push(e.obj); - break; - } - case 'circle':{//圆形 - var center = e.obj.getCenter(); - var radius = e.obj.getRadius(); - if(radius > 5000){ - Feng.error("创建电子围栏失败,圆半径不能大于5000米"); - return; +// 初始化绘图工具 +var drawingManager = new BMapLib.DrawingManager(map, { + isOpen: false, + enableDrawingTool: true, + drawingToolOptions: { + anchor: BMAP_ANCHOR_TOP_RIGHT, + offset: new BMap.Size(5, 5), + drawingModes: [ + 'polygon', // 修改这里 + 'circle' // 修改这里 + ] + }, + polygonOptions: { + strokeColor: "#80d8ff", + fillColor: "#00b0ff", + strokeWeight: 2, + strokeOpacity: 0.8 + }, + circleOptions: { + strokeColor: "#80d8ff", + fillColor: "#00b0ff", + strokeWeight: 2, + strokeOpacity: 0.8 + } +}); + +// 添加提示信息 +function showDrawingTips() { + var tips = document.createElement('div'); + tips.className = 'drawing-tips'; + tips.style.cssText = 'position: absolute; top: 10px; left: 10px; background: rgba(255,255,255,0.8); padding: 5px 10px; border-radius: 4px; z-index: 1000;'; + tips.innerHTML = '提示:双击左键结束绘制'; + document.getElementById('container').appendChild(tips); + + // 3秒后自动消失 + setTimeout(function() { + tips.style.display = 'none'; + }, 3000); +} + +// 监听绘制完成事件 +drawingManager.addEventListener('overlaycomplete', function(e) { + console.log("绘制完成事件触发,类型:", e.type); + var overlay = e.overlay; + overlays.push(overlay); + + try { + // 修改判断条件,使用字符串比较 + if (e.type === 'polygon') { + var path = overlay.getPath(); + console.log("多边形路径点:", path); + + if (path && path.length > 0) { + var str = ''; + for (var i = 0; i < path.length; i++) { + str += path[i].lat + ',' + path[i].lng + ';'; + } + coordinate = str.substring(0, str.length - 1); + objs.polygon.push(overlay); + console.log("多边形绘制完成,当前坐标:", coordinate); + } else { + console.error("多边形路径点为空"); } - coordinate += center.lng + ',' + center.lat + ';' + radius + "_"; - objs.circle.push(e.obj); - break; - } - } - console.log(coordinate); -}) + } else if (e.type === 'circle') { + var center = overlay.getCenter(); + var radius = overlay.getRadius(); + console.log("圆形中心点:", center, "半径:", radius); - -var district = null; -var polygons=[]; -function drawBounds() { - if(value == ''){ - value = '北京市'; - } - - //加载行政区划插件 - if(!district){ - //实例化DistrictSearch - var opts = { - subdistrict: 0, //获取边界不需要返回下级行政区 - extensions: 'all', //返回行政区边界坐标组等具体信息 - level: 'district' //查询行政级别为 市 - }; - district = new AMap.DistrictSearch(opts); - } - //行政区查询 - district.setLevel(document.getElementById('level').value) - district.search(value, function(status, result) { - map.remove(polygons)//清除上次结果 - polygons = []; - var bounds = result.districtList[0].boundaries; - if (bounds) { - for (var i = 0, l = bounds.length; i < l; i++) { - //生成行政区划polygon - var polygon = new AMap.Polygon({ - strokeWeight: 1, - path: bounds[i], - fillOpacity: 0.4, - fillColor: '#80d8ff', - strokeColor: '#0091ea' - }); - polygons.push(polygon); + if (center && radius) { + if (radius > 5000) { + Feng.error("创建电子围栏失败,圆半径不能大于5000米"); + map.removeOverlay(overlay); + return; + } + coordinate = center.lat + ',' + center.lng + ';' + radius; + objs.circle.push(overlay); + console.log("圆形绘制完成,当前坐标:", coordinate); + } else { + console.error("圆形参数不完整"); } } - map.add(polygons) - map.setFitView(polygons);//视口自适应 - }); -} - -document.getElementById('find').onclick = function () { - value = document.getElementById('district').value; - if(value == ''){ - value = "北京市"; + } catch (error) { + console.error("处理绘制完成事件时出错:", error); } - drawBounds() -}; -document.getElementById('district').onkeydown = function(e) { - if (e.keyCode === 13) { - value = document.getElementById('district').value; - if(value == ''){ - value = "北京市"; - } - drawBounds(); - return false; - } - return true; -}; +}); +// 绘制功能 +function draw(type) { + console.log("开始绘制,类型:", type); + // 清除之前的坐标 + coordinate = ''; - - -//处理坐标结果 -function getCoordinate(arr){ - var str = ''; - for(var i = 0; i < arr.length; i++){ - var lng = arr[i].lng; - var lat = arr[i].lat; - str += lng + ',' + lat + ';'; - } - coordinate += str.substring(0, str.length - 1) + "_"; -} - - -function draw(type){ - switch(type){ - case 'marker':{ - mouseTool.marker({ - //同Marker的Option设置 - }); - break; + try { + switch (type) { + case 'polygon': { + drawingManager.setDrawingMode('polygon'); // 修改这里 + drawingManager.open(); + showDrawingTips(); + break; + } + case 'circle': { + drawingManager.setDrawingMode('circle'); // 修改这里 + drawingManager.open(); + break; + } } - case 'polyline':{ - mouseTool.polyline({ - strokeColor:'#80d8ff' - //同Polyline的Option设置 - }); - break; - } - case 'polygon':{ - mouseTool.polygon({ - fillColor:'#00b0ff', - strokeColor:'#80d8ff' - //同Polygon的Option设置 - }); - break; - } - case 'rectangle':{ - mouseTool.rectangle({ - fillColor:'#00b0ff', - strokeColor:'#80d8ff' - //同Polygon的Option设置 - }); - break; - } - case 'circle':{ - mouseTool.circle({ - fillColor:'#00b0ff', - strokeColor:'#80d8ff' - //同Circle的Option设置 - }); - break; - } + } catch (error) { + console.error("设置绘制模式时出错:", error); } } -var radios = document.getElementsByName('func'); -for(var i=0;i<radios.length;i+=1){ - radios[i].onchange = function(e){ - draw(e.target.value) - name = e.target.value; - } -} -// draw('marker') -document.getElementById('clear').onclick = function(){ - map.remove(overlays) + +// 添加一个直接获取坐标的函数 +function getOverlayCoordinate(overlay) { + try { + if (overlay instanceof BMap.Polygon) { + var path = overlay.getPath(); + if (path && path.length > 0) { + var str = ''; + for (var i = 0; i < path.length; i++) { + str += path[i].lat + ',' + path[i].lng + ';'; + } + return str.substring(0, str.length - 1); + } + } else if (overlay instanceof BMap.Circle) { + var center = overlay.getCenter(); + var radius = overlay.getRadius(); + if (center && radius) { + return center.lat + ',' + center.lng + ';' + radius; + } + } + } catch (error) { + console.error("获取坐标时出错:", error); + } + return ''; +} + +// 清除按钮事件 +document.getElementById('clear').onclick = function() { + map.clearOverlays(); overlays = []; coordinate = ''; objs.circle = []; @@ -198,132 +162,125 @@ objs.polygon = []; objs.polyline = []; closeEdit(); + console.log("清除后的坐标:", coordinate); } -document.getElementById('close').onclick = function(){ - mouseTool.close()//关闭,并清除覆盖物 - for(var i=0;i<radios.length;i+=1){ + +// 关闭绘图按钮事件 +document.getElementById('close').onclick = function() { + drawingManager.close(); + for (var i = 0; i < radios.length; i++) { radios[i].checked = false; } closeEdit(); + console.log("关闭后的坐标:", coordinate); } - -//点击提交处理函数 -function submitCoordinate(){ - var name = $('#addressName').val(); - if('' == name){ - Feng.error('请填写地址名称'); - return; - } - if('' == coordinate){ - Feng.error('请在地图上规划区域'); - return; - } - coordinate = coordinate.substring(0, coordinate.length - 1); - -} - +// 编辑所有覆盖物 function editAll() { - coordinate = ''; editors = []; - //折线 - for(var i in objs.polyline){ - var polyline = objs.polyline[i]; - var polyEditor = new AMap.PolyEditor(map, polyline) - polyEditor.on('addnode', function(event) { - // log.info('触发事件:addnode') - }) - polyEditor.on('adjust', function(event) { - // log.info('触发事件:adjust') - }) - - polyEditor.on('removenode', function(event) { - // log.info('触发事件:removenode') - }) - - polyEditor.on('end', function(e) { - var polyline = e.target.getPath(); - getCoordinate(polyline); - }) - editors.push(polyEditor); - polyEditor.open(); - } - - //多边形 - for(var i in objs.polygon){ + // 多边形编辑 + for (var i in objs.polygon) { var polygon = objs.polygon[i]; - var polyEditor = new AMap.PolyEditor(map, polygon) - - polyEditor.on('addnode', function(event) { - // log.info('触发事件:addnode') - }) - - polyEditor.on('adjust', function(event) { - // log.info('触发事件:adjust') - }) - - polyEditor.on('removenode', function(event) { - // log.info('触发事件:removenode') - }) - - polyEditor.on('end', function(e) { - var polygon = e.target.getPath(); - getCoordinate(polygon); - }) - editors.push(polyEditor); - polyEditor.open(); + var polygonEditor = new BMapLib.PolygonEditor(map, polygon); + polygonEditor.addEventListener('drawend', function(e) { + var path = e.overlay.getPath(); + var str = ''; + for (var i = 0; i < path.length; i++) { + str += path[i].lat + ',' + path[i].lng + ';'; + } + coordinate = str.substring(0, str.length - 1); + console.log("编辑后的坐标:", coordinate); + }); + editors.push(polygonEditor); + polygonEditor.open(); } - - //矩形 - for(var i in objs.rectangle){ - var rectangle = objs.rectangle[i]; - var rectangleEditor = new AMap.RectangleEditor(map, rectangle) - - rectangleEditor.on('adjust', function(event) { - // log.info('触发事件:adjust') - }) - - rectangleEditor.on('end', function(e) { - var polygon = e.target.getPath(); - getCoordinate(polygon); - }) - editors.push(rectangleEditor); - rectangleEditor.open(); - } - - //圆形 - for(var i in objs.circle){ + // 圆形编辑 + for (var i in objs.circle) { var circle = objs.circle[i]; - var circleEditor = new AMap.CircleEditor(map, circle) - - circleEditor.on('move', function(event) { - // log.info('触发事件:move') - }) - - circleEditor.on('adjust', function(e) { - var radius = e.target.getRadius(); - if(radius > 5000){ + var circleEditor = new BMapLib.CircleEditor(map, circle); + circleEditor.addEventListener('drawend', function(e) { + var center = e.overlay.getCenter(); + var radius = e.overlay.getRadius(); + if (radius > 5000) { Feng.error("创建电子围栏失败,圆半径不能大于5000米"); return; } - }) - - circleEditor.on('end', function(e) { - var center = e.target.getCenter(); - var radius = e.target.getRadius(); - coordinate += center.lng + ',' + center.lat + ';' + radius + "_"; - }) + coordinate = center.lat + ',' + center.lng + ';' + radius; + console.log("编辑后的坐标:", coordinate); + }); editors.push(circleEditor); circleEditor.open(); } } - +// 关闭编辑 function closeEdit() { - for(var i in editors){ - var editor = editors[i]; - editor.close(); + for (var i = 0; i < editors.length; i++) { + editors[i].close(); } + editors = []; +} + +// 添加提交函数 +function submitCoordinate() { + console.log("提交时的坐标:", coordinate); + if (!coordinate || coordinate.trim() === '') { + Feng.error('请在地图上规划区域'); + return false; + } + return coordinate; +} + +// 测试函数 +// 修改测试函数 +function testCoordinate() { + console.log("当前坐标值:", coordinate); + console.log("当前覆盖物数量:", overlays.length); + console.log("多边形数量:", objs.polygon.length); + console.log("圆形数量:", objs.circle.length); + + // 尝试从最后一个覆盖物获取坐标 + if (overlays.length > 0) { + var lastOverlay = overlays[overlays.length - 1]; + var newCoordinate = getOverlayCoordinate(lastOverlay); + console.log("从最后一个覆盖物获取的坐标:", newCoordinate); + if (newCoordinate) { + coordinate = newCoordinate; + } + } +} + +// 绑定单选按钮事件 +var radios = document.getElementsByName('func'); +for (var i = 0; i < radios.length; i++) { + radios[i].onchange = function(e) { + draw(e.target.value); + } +} + +// 在绘制完成后自动测试 +drawingManager.addEventListener('overlaycomplete', function(e) { + setTimeout(testCoordinate, 10); // 延迟1秒后测试 +}); + +// 页面加载完成后初始化 +$(document).ready(function() { + // 初始化地图 + initMap(); + + // 监听市区选择变化 + $("#areaCode").change(function() { + console.log("市区选择变化,重新获取地图数据"); + getMapData(); + }); +}); + +// 初始化地图 +function initMap() { + // 设置地图中心点和缩放级别 + var point = new BMap.Point(114.329123,29.847218); + map.centerAndZoom(point, 15); + map.enableScrollWheelZoom(); } \ No newline at end of file diff --git a/ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/electricFence1.js b/ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/electricFence1.js new file mode 100644 index 0000000..8881503 --- /dev/null +++ b/ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/electricFence1.js @@ -0,0 +1,329 @@ +var map = new AMap.Map('container',{ + resizeEnable: true, + zoom:10 +}); + + +var value = ""; +map.getCity( + callback=function (result) { + value = result.city; + drawBounds(); + } +); + + +var mouseTool = new AMap.MouseTool(map); +//监听draw事件可获取画好的覆盖物 +var overlays = []; +var name = null; +var coordinate = '';//存储坐标 +var objs = {//存储各种类型的覆盖物对象 + "polyline":[], + "polygon":[], + "rectangle":[], + "circle":[] +}; +var editors = []; +mouseTool.on('draw',function(e){ + overlays.push(e.obj); + console.log(e.obj.getPath()); + + switch (name) { + case 'polyline':{//折线图 + var polyline = e.obj.getPath(); + getCoordinate(polyline); + objs.polyline.push(e.obj); + break; + } + case 'polygon':{//多边形 + var polygon = e.obj.getPath(); + getCoordinate(polygon); + objs.polygon.push(e.obj); + break; + } + case 'rectangle':{//矩形 + var rectangle = e.obj.getPath(); + getCoordinate(rectangle); + objs.rectangle.push(e.obj); + break; + } + case 'circle':{//圆形 + var center = e.obj.getCenter(); + var radius = e.obj.getRadius(); + if(radius > 5000){ + Feng.error("创建电子围栏失败,圆半径不能大于5000米"); + return; + } + coordinate += center.lng + ',' + center.lat + ';' + radius + "_"; + objs.circle.push(e.obj); + break; + } + } + console.log(coordinate); +}) + + +var district = null; +var polygons=[]; +function drawBounds() { + if(value == ''){ + value = '北京市'; + } + + //加载行政区划插件 + if(!district){ + //实例化DistrictSearch + var opts = { + subdistrict: 0, //获取边界不需要返回下级行政区 + extensions: 'all', //返回行政区边界坐标组等具体信息 + level: 'district' //查询行政级别为 市 + }; + district = new AMap.DistrictSearch(opts); + } + //行政区查询 + district.setLevel(document.getElementById('level').value) + district.search(value, function(status, result) { + map.remove(polygons)//清除上次结果 + polygons = []; + var bounds = result.districtList[0].boundaries; + if (bounds) { + for (var i = 0, l = bounds.length; i < l; i++) { + //生成行政区划polygon + var polygon = new AMap.Polygon({ + strokeWeight: 1, + path: bounds[i], + fillOpacity: 0.4, + fillColor: '#80d8ff', + strokeColor: '#0091ea' + }); + polygons.push(polygon); + } + } + map.add(polygons) + map.setFitView(polygons);//视口自适应 + }); +} + +document.getElementById('find').onclick = function () { + value = document.getElementById('district').value; + if(value == ''){ + value = "北京市"; + } + drawBounds() +}; +document.getElementById('district').onkeydown = function(e) { + if (e.keyCode === 13) { + value = document.getElementById('district').value; + if(value == ''){ + value = "北京市"; + } + drawBounds(); + return false; + } + return true; +}; + + + + +//处理坐标结果 +function getCoordinate(arr){ + var str = ''; + for(var i = 0; i < arr.length; i++){ + var lng = arr[i].lng; + var lat = arr[i].lat; + str += lng + ',' + lat + ';'; + } + coordinate += str.substring(0, str.length - 1) + "_"; +} + + +function draw(type){ + switch(type){ + case 'marker':{ + mouseTool.marker({ + //同Marker的Option设置 + }); + break; + } + case 'polyline':{ + mouseTool.polyline({ + strokeColor:'#80d8ff' + //同Polyline的Option设置 + }); + break; + } + case 'polygon':{ + mouseTool.polygon({ + fillColor:'#00b0ff', + strokeColor:'#80d8ff' + //同Polygon的Option设置 + }); + break; + } + case 'rectangle':{ + mouseTool.rectangle({ + fillColor:'#00b0ff', + strokeColor:'#80d8ff' + //同Polygon的Option设置 + }); + break; + } + case 'circle':{ + mouseTool.circle({ + fillColor:'#00b0ff', + strokeColor:'#80d8ff' + //同Circle的Option设置 + }); + break; + } + } +} +var radios = document.getElementsByName('func'); +for(var i=0;i<radios.length;i+=1){ + radios[i].onchange = function(e){ + draw(e.target.value) + name = e.target.value; + } +} +// draw('marker') + +document.getElementById('clear').onclick = function(){ + map.remove(overlays) + overlays = []; + coordinate = ''; + objs.circle = []; + objs.rectangle = []; + objs.polygon = []; + objs.polyline = []; + closeEdit(); +} +document.getElementById('close').onclick = function(){ + mouseTool.close()//关闭,并清除覆盖物 + for(var i=0;i<radios.length;i+=1){ + radios[i].checked = false; + } + closeEdit(); +} + + +//点击提交处理函数 +function submitCoordinate(){ + var name = $('#addressName').val(); + if('' == name){ + Feng.error('请填写地址名称'); + return; + } + if('' == coordinate){ + Feng.error('请在地图上规划区域'); + return; + } + coordinate = coordinate.substring(0, coordinate.length - 1); + +} + +function editAll() { + coordinate = ''; + editors = []; + //折线 + for(var i in objs.polyline){ + var polyline = objs.polyline[i]; + var polyEditor = new AMap.PolyEditor(map, polyline) + polyEditor.on('addnode', function(event) { + // log.info('触发事件:addnode') + }) + + polyEditor.on('adjust', function(event) { + // log.info('触发事件:adjust') + }) + + polyEditor.on('removenode', function(event) { + // log.info('触发事件:removenode') + }) + + polyEditor.on('end', function(e) { + var polyline = e.target.getPath(); + getCoordinate(polyline); + }) + editors.push(polyEditor); + polyEditor.open(); + } + + //多边形 + for(var i in objs.polygon){ + var polygon = objs.polygon[i]; + var polyEditor = new AMap.PolyEditor(map, polygon) + + polyEditor.on('addnode', function(event) { + // log.info('触发事件:addnode') + }) + + polyEditor.on('adjust', function(event) { + // log.info('触发事件:adjust') + }) + + polyEditor.on('removenode', function(event) { + // log.info('触发事件:removenode') + }) + + polyEditor.on('end', function(e) { + var polygon = e.target.getPath(); + getCoordinate(polygon); + }) + editors.push(polyEditor); + polyEditor.open(); + } + + + //矩形 + for(var i in objs.rectangle){ + var rectangle = objs.rectangle[i]; + var rectangleEditor = new AMap.RectangleEditor(map, rectangle) + + rectangleEditor.on('adjust', function(event) { + // log.info('触发事件:adjust') + }) + + rectangleEditor.on('end', function(e) { + var polygon = e.target.getPath(); + getCoordinate(polygon); + }) + editors.push(rectangleEditor); + rectangleEditor.open(); + } + + //圆形 + for(var i in objs.circle){ + var circle = objs.circle[i]; + var circleEditor = new AMap.CircleEditor(map, circle) + + circleEditor.on('move', function(event) { + // log.info('触发事件:move') + }) + + circleEditor.on('adjust', function(e) { + var radius = e.target.getRadius(); + if(radius > 5000){ + Feng.error("创建电子围栏失败,圆半径不能大于5000米"); + return; + } + }) + + circleEditor.on('end', function(e) { + var center = e.target.getCenter(); + var radius = e.target.getRadius(); + coordinate += center.lng + ',' + center.lat + ';' + radius + "_"; + }) + editors.push(circleEditor); + circleEditor.open(); + } +} + + +function closeEdit() { + for(var i in editors){ + var editor = editors[i]; + editor.close(); + } +} \ No newline at end of file diff --git a/ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/tSite_info.js b/ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/tSite_info.js index 320af8b..d91da5d 100644 --- a/ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/tSite_info.js +++ b/ManagementOKTravel/guns-admin/src/main/webapp/static/modular/system/tSite/tSite_info.js @@ -328,7 +328,9 @@ return; } }else if (2 == areaType) { - if("" == coordinate){ + console.log(coordinate) + console.log( editors) + if("" == coordinate && editors.length == 0){ Feng.error('请在地图上规划区域'); return; } -- Gitblit v1.7.1