Commit d72eb3ff authored by 赵啸非's avatar 赵啸非

地图详细显示

parent 18de87f1
...@@ -177,7 +177,7 @@ export default { ...@@ -177,7 +177,7 @@ export default {
let markerLabel = { let markerLabel = {
label: { content: item.siteName, offset: [30, 70] }, label: { content: item.siteName, offset: [30, 70] },
position: [item.lng, item.lat], position: [item.lng, item.lat],
icon: require("@/assets/images/ego_box_img_normal.png"), icon: require("@/assets/images/marker-blue.png"),
extData: item, extData: item,
events: { events: {
click: (e) => { click: (e) => {
...@@ -238,7 +238,7 @@ export default { ...@@ -238,7 +238,7 @@ export default {
markers: [], markers: [],
geocoder: null, geocoder: null,
amapManager, amapManager,
zoom: 8, zoom: 6,
center: [104.007767, 30.568308], center: [104.007767, 30.568308],
marker: {}, marker: {},
// events: { // events: {
......
...@@ -18,18 +18,16 @@ ...@@ -18,18 +18,16 @@
> >
<div class="tuli1"><slot name="leftTop1"></slot></div> <div class="tuli1"><slot name="leftTop1"></slot></div>
<div class="tuli"><slot name="leftTop"></slot></div> <div class="tuli"><slot name="leftTop"></slot></div>
<div class="rightTop"><slot name="rightTop"></slot></div> <div class="rightTop"><slot name="rightTop"></slot></div>
<!-- <el-amap-search-box :on-search-result="onSearchResult" :events='searchEvents'/> -->
<!--marker --> <!--marker -->
<el-amap-marker <el-amap-marker
v-for="(marker, index) in markers" v-for="(marker, index) in markers"
:key="'marker' + index" :key="'marker' + index"
:events="marker.events" :events="marker.events"
:position="marker.position" :position="marker.position"
:label="marker.label"
:icon="marker.icon" :icon="marker.icon"
:extData="marker" :extData="marker"
> >
...@@ -71,7 +69,7 @@ export default { ...@@ -71,7 +69,7 @@ export default {
}, },
}, },
created() { created() {
this.refresh(this.markersData); //this.refresh(this.markersData);
}, },
methods: { methods: {
formatterDate, formatterDate,
...@@ -81,63 +79,44 @@ export default { ...@@ -81,63 +79,44 @@ export default {
}, },
refresh(data) { refresh(data) {
console.log("刷新数据", data); console.log("刷新数据", data);
this.markersData = data; // this.markersGroupData = data;
//this.$refs.map.clear();
this.markersData.map((item) => { //amapManager.getMap.clear();
// console.log("marker", item); for(let group of data){
this.setMarker(item); for(let item of group.deviceList){
}); console.log("marker", item);
this.setMarker(item);
}
}
}, },
relocate(center) { relocate(center) {
this.center = [center.lng, center.lat]; this.center = [center.lng, center.lat];
this.zoom = 10; this.zoom = 20;
//重新定位中心点 //重新定位中心点
}, },
setMarker(item) { setMarker(item) {
if (!item.lng && !item.lat) return; if (!item.lon && !item.lati) return;
//console.log("data",formatterDate(item.createTime))
let markerLabel = { let markerLabel = {
label: { content: item.siteName, offset: [30, 70] }, label: { content: item.deviceName, offset: [30, 70] },
position: [item.lng, item.lat], position: [item.lon, item.lati],
icon: require("@/assets/images/ego_box_img_normal.png"), icon: require("@/assets/images/marker-phxt.png"),
extData: item, extData: item,
events: { events: {
click: (e) => { click: (e) => {
console.log("getExtData", e.target.getExtData()); console.log("getExtData", e.target.getExtData());
let exData = e.target.getExtData();
this.info = exData.extData;
this.window.position = exData.position;
this.$nextTick(() => {
this.window.visible = true; //点击点坐标,出现信息窗体
});
}, },
}, },
}; };
this.markers.push(markerLabel); this.markers.push(markerLabel);
}, },
// 处理搜索结果,定位到中心点
onSearchResult(pois) {
let latSum = 0;
let lngSum = 0;
if (!pois.length) return;
pois.forEach((poi) => {
let { lng, lat } = poi;
lngSum += lng;
latSum += lat;
});
let center = {
lng: lngSum / pois.length,
lat: latSum / pois.length,
};
this.setMarker(center.lng, center.lat, pois[0].name);
this.center = [center.lng, center.lat];
},
choose() { choose() {
this.$emit("input", false); this.$emit("input", false);
this.$emit("choose", JSON.parse(JSON.stringify(this.mapData)), (val) => { this.$emit("choose", JSON.parse(JSON.stringify(this.mapData)), (val) => {
...@@ -148,17 +127,8 @@ export default { ...@@ -148,17 +127,8 @@ export default {
}, },
}, },
data() { data() {
let self = this;
return { return {
visiblepop: false, markersGroupData:[],
searchEvents: {
init: (e) => {},
},
window: {
position: [104.405994, 30.915378],
visible: false,
content: '<div class="red">Hi! I am here!</div>',
},
mapData: {}, mapData: {},
info: {}, info: {},
markers: [], markers: [],
......
...@@ -77,7 +77,11 @@ ...@@ -77,7 +77,11 @@
<el-divider></el-divider> <el-divider></el-divider>
<el-row type="flex" justify="space-around" style="margin-top: 10px"> <el-row type="flex" justify="space-around" style="margin-top: 10px">
<el-button type="primary" @click="switchList" size="mini" icon="el-icon-tickets" <el-button
type="primary"
@click="switchList"
size="mini"
icon="el-icon-tickets"
>列表模式</el-button >列表模式</el-button
> >
...@@ -102,13 +106,12 @@ ...@@ -102,13 +106,12 @@
v-model="deviceStatus" v-model="deviceStatus"
placeholder="请选择设备状态" placeholder="请选择设备状态"
> >
<el-option <el-option
v-for="($label, $value) in tableData.dict.deviceStatus" v-for="($label, $value) in tableData.dict.deviceStatus"
:key="$value" :key="$value"
:label="$label" :label="$label"
:value="$value" :value="$value"
></el-option> ></el-option>
</el-select> </el-select>
<span> </span> <span> </span>
</el-row> </el-row>
...@@ -170,15 +173,16 @@ export default { ...@@ -170,15 +173,16 @@ export default {
console.log("route", this.$route); console.log("route", this.$route);
let { siteId } = this.$route.query; let { siteId } = this.$route.query;
this.info = this.$route.query; this.info = this.$route.query;
// this.$router.push({ query: { siteId, siteId } }); //this.$router.push({ query: {} });
this.query = { siteId, siteId }; this.query = { siteId, siteId };
this.$nextTick(() => {
this.$refs.map.relocate(this.info);
})
}, },
methods: { methods: {
formatterDate, formatterDate,
switchList() { switchList() {
//进入设备列表页面 //进入设备列表页面
this.$router.push({ this.$router.push({
path: "/device/list", path: "/device/list",
query: { query: {
...@@ -186,30 +190,28 @@ export default { ...@@ -186,30 +190,28 @@ export default {
}, },
}); });
}, },
switchStat() { switchStat() {
this.$router.push({ this.$router.push({
path: "/sitestat/maplist", path: "/sitestat/maplist",
}); });
}, },
switchChange(val) { switchChange(val) {
let arr = []; let arr = [];
for (let item in this.items) { for (let item in this.items) {
console.log(this.items[item]); console.log(this.items[item]);
if (this.items[item] && this.items[item] != 0) if (this.items[item] && this.items[item] != 0)
arr.push(this.items[item]); arr.push(this.items[item]);
} }
this.query= Object.assign({}, this.query , { productIdList: arr }); if(arr.length>0){
this.query = Object.assign({}, this.query, { productIdList: arr });
let groupList=["productId"] }
this.query= Object.assign({}, this.query , { groupList: groupList });
this.getData(); this.getData();
}, },
afterRender(data) { afterRender(data) {
console.log("tableData", data); console.log("tableData", data);
if (!this.sync) { if (!this.sync) {
console.log("sync")
this.$nextTick(() => { this.$nextTick(() => {
var count = 0; var count = 0;
for (var i in data.dict.productId) { for (var i in data.dict.productId) {
...@@ -219,6 +221,10 @@ export default { ...@@ -219,6 +221,10 @@ export default {
this.sync = true; this.sync = true;
}); });
} }
//刷新地图markers
this.$refs.map.refresh(data.data);
}, },
/** 重写新增方法 */ /** 重写新增方法 */
toAdd(row) { toAdd(row) {
...@@ -260,11 +266,11 @@ export default { ...@@ -260,11 +266,11 @@ export default {
}, },
// 站点树 // 站点树
pageInfo: { pageInfo: {
list: "/device/list", list: "/device/maplist",
}, },
deviceStatus:null, deviceStatus: null,
deviceCode:null, deviceCode: null,
items: { items: {
item0: "", item0: "",
......
...@@ -103,25 +103,11 @@ export default { ...@@ -103,25 +103,11 @@ export default {
getDetailData(info, callback) { getDetailData(info, callback) {
console.log("info:", info); console.log("info:", info);
this.$router.push({ this.$router.push({
path: "/sitestat/mapDetail", path: "/sitestat/mapDetail",
query: info, query: info,
// query: {id:info.id}, // query: {id:info.id},
}); });
// this.$get("/sitestat/siteInfo", { siteId, siteId }).then((res) => {
// console.log("res",res)
// // if (res.code == 1 && res.data.data.length > 0) {
// // callback(res.data.data[0]);
// // }
// });
//关闭弹窗
// this.$refs.popoverRef.doClose()
//this.$refs.popoverRef.doShow() //开启弹窗
}, },
/** 重写新增方法 */ /** 重写新增方法 */
......
package com.mortals.xhx.module.device.model;
import lombok.Data;
import java.util.List;
/**
* 设备实体对象
*
* @author zxfei
* @date 2022-07-11
*/
@Data
public class DeviceMapEntity {
private Long productId;
private String productCode;
private List<DeviceEntity> deviceList;
}
\ No newline at end of file
...@@ -5,6 +5,7 @@ import com.mortals.xhx.busiz.rsp.ApiResp; ...@@ -5,6 +5,7 @@ import com.mortals.xhx.busiz.rsp.ApiResp;
import com.mortals.xhx.common.code.DeviceMethodEnum; import com.mortals.xhx.common.code.DeviceMethodEnum;
import com.mortals.xhx.module.device.dao.DeviceDao; import com.mortals.xhx.module.device.dao.DeviceDao;
import com.mortals.xhx.module.device.model.DeviceEntity; import com.mortals.xhx.module.device.model.DeviceEntity;
import com.mortals.xhx.module.device.model.DeviceMapEntity;
import com.mortals.xhx.module.platform.model.PlatformEntity; import com.mortals.xhx.module.platform.model.PlatformEntity;
import com.mortals.xhx.module.product.model.ProductEntity; import com.mortals.xhx.module.product.model.ProductEntity;
import com.mortals.xhx.queue.TbQueueCallback; import com.mortals.xhx.queue.TbQueueCallback;
...@@ -59,7 +60,7 @@ public interface DeviceService extends ICRUDCacheService<DeviceEntity,Long>{ ...@@ -59,7 +60,7 @@ public interface DeviceService extends ICRUDCacheService<DeviceEntity,Long>{
*/ */
void deviceStat(Context context); void deviceStat(Context context);
List<DeviceMapEntity> deviceMap(DeviceEntity query, Context context);
......
...@@ -44,6 +44,7 @@ import org.springframework.stereotype.Service; ...@@ -44,6 +44,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -424,6 +425,64 @@ public class DeviceServiceImpl extends AbstractCRUDCacheServiceImpl<DeviceDao, D ...@@ -424,6 +425,64 @@ public class DeviceServiceImpl extends AbstractCRUDCacheServiceImpl<DeviceDao, D
} }
} }
@Override
public List<DeviceMapEntity> deviceMap(DeviceEntity query, Context context) {
Rest<SitePdu> info = siteFeign.info(query.getSiteId());
if (info.getCode() == YesNoEnum.YES.getValue()) {
SitePdu sitePdu = info.getData();
List<DeviceMapEntity> collect = this.find(query, context)
.stream().collect(Collectors.groupingBy(x -> x.getProductId()))
.entrySet()
.stream().map(item -> {
DeviceMapEntity deviceMapEntity = new DeviceMapEntity();
deviceMapEntity.setProductId(item.getKey());
ProductEntity productEntity = productService.get(item.getKey());
deviceMapEntity.setProductCode(productEntity==null?"":productEntity.getProductCode());
if (ObjectUtils.isEmpty(item.getValue())) {
deviceMapEntity.setDeviceList(Collections.EMPTY_LIST);
} else {
deviceMapEntity.setDeviceList(item.getValue());
}
return deviceMapEntity;
}).collect(Collectors.toList());
//更新坐标点 轴步进 0.0001~~11米
BigDecimal lngStep = new BigDecimal(0.0001);
BigDecimal latiStep = new BigDecimal(0.0001);
String longitude = sitePdu.getLongitude();
String latitude = sitePdu.getLatitude();
BigDecimal centerLng = new BigDecimal(longitude);
BigDecimal centerlati = new BigDecimal(latitude);
for (int i = 1; i <= collect.size(); i++) {
BigDecimal curLati = new BigDecimal(latitude);
if (i % 2 == 1) {
curLati = centerlati.subtract(latiStep.multiply(new BigDecimal(i)));
} else {
curLati = centerlati.add(latiStep.multiply(new BigDecimal(i)));
}
for (int j = 1; j <= collect.get(i-1).getDeviceList().size(); j++) {
//偶数加,奇数减
BigDecimal curLng = new BigDecimal(longitude);
if (j % 2 == 1) {
curLng = centerLng.subtract(lngStep.multiply(new BigDecimal(j)));
} else {
curLng = centerLng.add(lngStep.multiply(new BigDecimal(j)));
}
DeviceEntity deviceEntity = collect.get(i-1).getDeviceList().get(j-1);
deviceEntity.setLon(curLng.setScale(6, RoundingMode.HALF_UP).toString());
deviceEntity.setLati(curLati.setScale(6, RoundingMode.HALF_UP).toString());
}
}
return collect;
}
throw new AppException("获取站点信息失败!");
}
@Override @Override
protected void removeBefore(Long[] ids, Context context) throws AppException { protected void removeBefore(Long[] ids, Context context) throws AppException {
Arrays.asList(ids).stream().forEach(id -> { Arrays.asList(ids).stream().forEach(id -> {
...@@ -548,5 +607,13 @@ public class DeviceServiceImpl extends AbstractCRUDCacheServiceImpl<DeviceDao, D ...@@ -548,5 +607,13 @@ public class DeviceServiceImpl extends AbstractCRUDCacheServiceImpl<DeviceDao, D
super.saveBefore(entity, context); super.saveBefore(entity, context);
} }
public static void main(String[] args) {
BigDecimal bigDecimal = new BigDecimal("104.22241");
BigDecimal add = bigDecimal.add(new BigDecimal("0.01"));
System.out.println(add.toString());
}
} }
\ No newline at end of file
package com.mortals.xhx.module.device.web; package com.mortals.xhx.module.device.web;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException; import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context; import com.mortals.framework.model.Context;
import com.mortals.framework.model.OrderCol; import com.mortals.framework.model.OrderCol;
import com.mortals.framework.model.PageInfo;
import com.mortals.framework.model.Result;
import com.mortals.framework.util.FileUtil; import com.mortals.framework.util.FileUtil;
import com.mortals.framework.utils.ReflectUtils; import com.mortals.framework.utils.ReflectUtils;
import com.mortals.framework.utils.poi.ExcelUtil; import com.mortals.framework.utils.poi.ExcelUtil;
...@@ -21,8 +25,11 @@ import com.mortals.xhx.common.code.*; ...@@ -21,8 +25,11 @@ import com.mortals.xhx.common.code.*;
import com.mortals.xhx.common.key.Constant; import com.mortals.xhx.common.key.Constant;
import com.mortals.xhx.common.model.DefaultTbQueueMsgHeaders; import com.mortals.xhx.common.model.DefaultTbQueueMsgHeaders;
import com.mortals.xhx.common.model.MessageHeader; import com.mortals.xhx.common.model.MessageHeader;
import com.mortals.xhx.common.pdu.RespData;
import com.mortals.xhx.common.pdu.site.SitePdu;
import com.mortals.xhx.feign.site.ISiteFeign; import com.mortals.xhx.feign.site.ISiteFeign;
import com.mortals.xhx.module.device.model.DeviceEntity; import com.mortals.xhx.module.device.model.DeviceEntity;
import com.mortals.xhx.module.device.model.DeviceMapEntity;
import com.mortals.xhx.module.device.model.DeviceQuery; import com.mortals.xhx.module.device.model.DeviceQuery;
import com.mortals.xhx.module.device.service.DeviceService; import com.mortals.xhx.module.device.service.DeviceService;
import com.mortals.xhx.module.firm.model.FirmEntity; import com.mortals.xhx.module.firm.model.FirmEntity;
...@@ -31,6 +38,8 @@ import com.mortals.xhx.module.platform.model.PlatformEntity; ...@@ -31,6 +38,8 @@ import com.mortals.xhx.module.platform.model.PlatformEntity;
import com.mortals.xhx.module.platform.service.PlatformService; import com.mortals.xhx.module.platform.service.PlatformService;
import com.mortals.xhx.module.product.model.ProductEntity; import com.mortals.xhx.module.product.model.ProductEntity;
import com.mortals.xhx.module.product.service.ProductService; import com.mortals.xhx.module.product.service.ProductService;
import com.mortals.xhx.module.sitestat.model.SitestatEntity;
import com.mortals.xhx.module.sitestat.model.SitestatQuery;
import com.mortals.xhx.queue.TbQueueMsgHeaders; import com.mortals.xhx.queue.TbQueueMsgHeaders;
import com.mortals.xhx.queue.TopicPartitionInfo; import com.mortals.xhx.queue.TopicPartitionInfo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -45,6 +54,9 @@ import java.util.stream.Collectors; ...@@ -45,6 +54,9 @@ import java.util.stream.Collectors;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import java.util.stream.Stream; import java.util.stream.Stream;
import static com.mortals.framework.ap.SysConstains.MESSAGE_INFO;
import static com.mortals.framework.ap.SysConstains.PAGEINFO_KEY;
/** /**
* 设备 * 设备
* *
...@@ -263,6 +275,26 @@ public class DeviceController extends BaseCRUDJsonBodyMappingController<DeviceSe ...@@ -263,6 +275,26 @@ public class DeviceController extends BaseCRUDJsonBodyMappingController<DeviceSe
} }
@PostMapping(value = "maplist")
@UnAuth
public Rest<Object> maplist(@RequestBody DeviceEntity query) {
Map<String, Object> model = new HashMap<>();
Context context = this.getContext();
String busiDesc = "查询" + this.getModuleDesc();
try {
List<DeviceMapEntity> list = this.service.deviceMap(query, context);
model.put(KEY_RESULT_DATA, list);
recordSysLog(request, busiDesc + " 【成功】");
} catch (Exception e) {
this.doException(request, busiDesc, model, e);
return Rest.fail(e.getMessage());
}
this.init(model, context);
return Rest.ok(model);
}
@Override @Override
public void doImportDataBefore(List<DeviceEntity> list, boolean updateSupport, Context context) throws AppException { public void doImportDataBefore(List<DeviceEntity> list, boolean updateSupport, Context context) throws AppException {
String siteId = request.getParameter("siteId"); String siteId = request.getParameter("siteId");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment