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

地图详细显示

parent 18de87f1
......@@ -177,7 +177,7 @@ export default {
let markerLabel = {
label: { content: item.siteName, offset: [30, 70] },
position: [item.lng, item.lat],
icon: require("@/assets/images/ego_box_img_normal.png"),
icon: require("@/assets/images/marker-blue.png"),
extData: item,
events: {
click: (e) => {
......@@ -238,7 +238,7 @@ export default {
markers: [],
geocoder: null,
amapManager,
zoom: 8,
zoom: 6,
center: [104.007767, 30.568308],
marker: {},
// events: {
......
......@@ -19,9 +19,7 @@
<div class="tuli1"><slot name="leftTop1"></slot></div>
<div class="tuli"><slot name="leftTop"></slot></div>
<div class="rightTop"><slot name="rightTop"></slot></div>
<!-- <el-amap-search-box :on-search-result="onSearchResult" :events='searchEvents'/> -->
<!--marker -->
<el-amap-marker
......@@ -29,7 +27,7 @@
:key="'marker' + index"
:events="marker.events"
:position="marker.position"
:label="marker.label"
:icon="marker.icon"
:extData="marker"
>
......@@ -71,7 +69,7 @@ export default {
},
},
created() {
this.refresh(this.markersData);
//this.refresh(this.markersData);
},
methods: {
formatterDate,
......@@ -81,63 +79,44 @@ export default {
},
refresh(data) {
console.log("刷新数据", data);
this.markersData = data;
// this.markersGroupData = data;
//this.$refs.map.clear();
this.markersData.map((item) => {
// console.log("marker", item);
//amapManager.getMap.clear();
for(let group of data){
for(let item of group.deviceList){
console.log("marker", item);
this.setMarker(item);
});
}
}
},
relocate(center) {
this.center = [center.lng, center.lat];
this.zoom = 10;
this.zoom = 20;
//重新定位中心点
},
setMarker(item) {
if (!item.lng && !item.lat) return;
//console.log("data",formatterDate(item.createTime))
if (!item.lon && !item.lati) return;
let markerLabel = {
label: { content: item.siteName, offset: [30, 70] },
position: [item.lng, item.lat],
icon: require("@/assets/images/ego_box_img_normal.png"),
label: { content: item.deviceName, offset: [30, 70] },
position: [item.lon, item.lati],
icon: require("@/assets/images/marker-phxt.png"),
extData: item,
events: {
click: (e) => {
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);
},
// 处理搜索结果,定位到中心点
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() {
this.$emit("input", false);
this.$emit("choose", JSON.parse(JSON.stringify(this.mapData)), (val) => {
......@@ -148,17 +127,8 @@ export default {
},
},
data() {
let self = this;
return {
visiblepop: false,
searchEvents: {
init: (e) => {},
},
window: {
position: [104.405994, 30.915378],
visible: false,
content: '<div class="red">Hi! I am here!</div>',
},
markersGroupData:[],
mapData: {},
info: {},
markers: [],
......
......@@ -77,7 +77,11 @@
<el-divider></el-divider>
<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
>
......@@ -102,7 +106,6 @@
v-model="deviceStatus"
placeholder="请选择设备状态"
>
<el-option
v-for="($label, $value) in tableData.dict.deviceStatus"
:key="$value"
......@@ -170,10 +173,11 @@ export default {
console.log("route", this.$route);
let { siteId } = this.$route.query;
this.info = this.$route.query;
// this.$router.push({ query: { siteId, siteId } });
//this.$router.push({ query: {} });
this.query = { siteId, siteId };
this.$nextTick(() => {
this.$refs.map.relocate(this.info);
})
},
methods: {
formatterDate,
......@@ -193,23 +197,21 @@ export default {
},
switchChange(val) {
let arr = [];
for (let item in this.items) {
console.log(this.items[item]);
if (this.items[item] && this.items[item] != 0)
arr.push(this.items[item]);
}
this.query= Object.assign({}, this.query , { productIdList: arr });
let groupList=["productId"]
this.query= Object.assign({}, this.query , { groupList: groupList });
if(arr.length>0){
this.query = Object.assign({}, this.query, { productIdList: arr });
}
this.getData();
},
afterRender(data) {
console.log("tableData", data);
if (!this.sync) {
console.log("sync")
this.$nextTick(() => {
var count = 0;
for (var i in data.dict.productId) {
......@@ -219,6 +221,10 @@ export default {
this.sync = true;
});
}
//刷新地图markers
this.$refs.map.refresh(data.data);
},
/** 重写新增方法 */
toAdd(row) {
......@@ -260,11 +266,11 @@ export default {
},
// 站点树
pageInfo: {
list: "/device/list",
list: "/device/maplist",
},
deviceStatus:null,
deviceCode:null,
deviceStatus: null,
deviceCode: null,
items: {
item0: "",
......
......@@ -103,25 +103,11 @@ export default {
getDetailData(info, callback) {
console.log("info:", info);
this.$router.push({
path: "/sitestat/mapDetail",
query: info,
// 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;
import com.mortals.xhx.common.code.DeviceMethodEnum;
import com.mortals.xhx.module.device.dao.DeviceDao;
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.product.model.ProductEntity;
import com.mortals.xhx.queue.TbQueueCallback;
......@@ -59,7 +60,7 @@ public interface DeviceService extends ICRUDCacheService<DeviceEntity,Long>{
*/
void deviceStat(Context context);
List<DeviceMapEntity> deviceMap(DeviceEntity query, Context context);
......
......@@ -44,6 +44,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.stream.Collectors;
......@@ -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
protected void removeBefore(Long[] ids, Context context) throws AppException {
Arrays.asList(ids).stream().forEach(id -> {
......@@ -548,5 +607,13 @@ public class DeviceServiceImpl extends AbstractCRUDCacheServiceImpl<DeviceDao, D
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;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.mortals.framework.annotation.UnAuth;
import com.mortals.framework.common.Rest;
import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
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.utils.ReflectUtils;
import com.mortals.framework.utils.poi.ExcelUtil;
......@@ -21,8 +25,11 @@ import com.mortals.xhx.common.code.*;
import com.mortals.xhx.common.key.Constant;
import com.mortals.xhx.common.model.DefaultTbQueueMsgHeaders;
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.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.service.DeviceService;
import com.mortals.xhx.module.firm.model.FirmEntity;
......@@ -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.product.model.ProductEntity;
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.TopicPartitionInfo;
import lombok.extern.slf4j.Slf4j;
......@@ -45,6 +54,9 @@ import java.util.stream.Collectors;
import java.util.stream.IntStream;
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
}
@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
public void doImportDataBefore(List<DeviceEntity> list, boolean updateSupport, Context context) throws AppException {
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