新增地图网格模块

This commit is contained in:
wanggeng 2021-08-31 14:50:44 +08:00
parent d0a9d76148
commit 731a8bd42c
19 changed files with 1602 additions and 0 deletions

23
module-map/pom.xml Normal file
View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>wg-basic</artifactId>
<groupId>ink.wgink</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>module-map</artifactId>
<description>地图模块</description>
<dependencies>
<dependency>
<groupId>ink.wgink</groupId>
<artifactId>common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,59 @@
package ink.wgink.module.map.dao.grid;
import ink.wgink.exceptions.RemoveException;
import ink.wgink.exceptions.SaveException;
import ink.wgink.exceptions.SearchException;
import ink.wgink.interfaces.init.IInitBaseTable;
import ink.wgink.module.map.pojo.dto.grid.GridDTO;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: IGridDao
* @Description: 网格业务
* @Author: WangGeng
* @Date: 2020/10/21 11:16
* @Version: 1.0
**/
@Repository
public interface IGridDao extends IInitBaseTable {
/**
* 保存网格
*
* @param params
* @throws SaveException
*/
void save(Map<String, Object> params) throws SaveException;
/**
* 删除网格
*
* @param params
* @throws RemoveException
*/
void delete(Map<String, Object> params) throws RemoveException;
/**
* 获取网格列表
*
* @param params
* @return
* @throws SearchException
*/
List<GridDTO> list(Map<String, Object> params) throws SearchException;
/**
* 网格列表group
*
* @param params
* @return
* @throws SearchException
*/
List<GridDTO> listGroup(Map<String, Object> params) throws SearchException;
}

View File

@ -0,0 +1,51 @@
package ink.wgink.module.map.dao.grid;
import ink.wgink.exceptions.RemoveException;
import ink.wgink.exceptions.SaveException;
import ink.wgink.exceptions.SearchException;
import ink.wgink.interfaces.init.IInitBaseTable;
import ink.wgink.module.map.pojo.dto.grid.GridPointDTO;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: IGridDao
* @Description: 网格业务
* @Author: WangGeng
* @Date: 2020/10/21 11:16
* @Version: 1.0
**/
@Repository
public interface IGridPointDao extends IInitBaseTable {
/**
* 保存网格点
*
* @param params
* @throws SaveException
*/
void save(Map<String, Object> params) throws SaveException;
/**
* 删除网格点
*
* @param params
* @throws RemoveException
*/
void delete(Map<String, Object> params) throws RemoveException;
/**
* 获取网格点列表
*
* @param params
* @return
* @throws SearchException
*/
List<GridPointDTO> list(Map<String, Object> params) throws SearchException;
}

View File

@ -0,0 +1,51 @@
package ink.wgink.module.map.dao.grid;
import ink.wgink.exceptions.RemoveException;
import ink.wgink.exceptions.SaveException;
import ink.wgink.exceptions.SearchException;
import ink.wgink.interfaces.init.IInitBaseTable;
import ink.wgink.module.map.pojo.dto.grid.GridRelationDTO;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: IGridDao
* @Description: 网格业务
* @Author: WangGeng
* @Date: 2020/10/21 11:16
* @Version: 1.0
**/
@Repository
public interface IGridRelationDao extends IInitBaseTable {
/**
* 保存网格关联关系
*
* @param params
* @throws SaveException
*/
void save(Map<String, Object> params) throws SaveException;
/**
* 删除网格关联关系
*
* @param params
* @throws RemoveException
*/
void delete(Map<String, Object> params) throws RemoveException;
/**
* 网关关联列表
*
* @param params
* @return
* @throws SearchException
*/
List<GridRelationDTO> list(Map<String, Object> params) throws SearchException;
}

View File

@ -0,0 +1,83 @@
package ink.wgink.module.map.pojo.dto.grid;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.ArrayList;
import java.util.List;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: GridDTO
* @Description: 网格
* @Author: WangGeng
* @Date: 2020/10/21 17:01
* @Version: 1.0
**/
@ApiModel
public class GridDTO extends GridRelationDTO {
@ApiModelProperty(name = "fillColor", value = "填充颜色")
private String fillColor;
@ApiModelProperty(name = "gridName", value = "网格名称")
private String gridName;
@ApiModelProperty(name = "relationIdArray", value = "关联ID列表")
private List<String> relationIdArray;
@ApiModelProperty(name = "pointArray", value = "网格点列表")
private List<GridPointDTO> pointArray;
public String getFillColor() {
return fillColor == null ? "" : fillColor.trim();
}
public void setFillColor(String fillColor) {
this.fillColor = fillColor;
}
public String getGridName() {
return gridName == null ? "" : gridName.trim();
}
public void setGridName(String gridName) {
this.gridName = gridName;
}
public List<String> getRelationIdArray() {
if (relationIdArray == null) {
return new ArrayList<>();
}
return relationIdArray;
}
public void setRelationIdArray(List<String> relationIdArray) {
this.relationIdArray = relationIdArray;
}
public List<GridPointDTO> getPointArray() {
if (pointArray == null) {
return new ArrayList<>();
}
return pointArray;
}
public void setPointArray(List<GridPointDTO> pointArray) {
this.pointArray = pointArray;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("\"fillColor\":\"")
.append(fillColor).append('\"');
sb.append(",\"gridName\":\"")
.append(gridName).append('\"');
sb.append(",\"relationIdArray\":")
.append(relationIdArray);
sb.append(",\"pointArray\":")
.append(pointArray);
sb.append('}');
return sb.toString();
}
}

View File

@ -0,0 +1,65 @@
package ink.wgink.module.map.pojo.dto.grid;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: BaiduGridPointVO
* @Description: 百度地图网格点
* @Author: WangGeng
* @Date: 2020/10/21 11:02
* @Version: 1.0
**/
@ApiModel
public class GridPointDTO implements Serializable {
private static final long serialVersionUID = -2367199018377785048L;
@ApiModelProperty(name = "gridId", value = "网格ID")
private String gridId;
@ApiModelProperty(name = "lng", value = "经度")
private String lng;
@ApiModelProperty(name = "lat", value = "纬度")
private String lat;
public String getGridId() {
return gridId == null ? "" : gridId.trim();
}
public void setGridId(String gridId) {
this.gridId = gridId;
}
public String getLng() {
return lng == null ? "" : lng.trim();
}
public void setLng(String lng) {
this.lng = lng;
}
public String getLat() {
return lat == null ? "" : lat.trim();
}
public void setLat(String lat) {
this.lat = lat;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("\"gridId\":\"")
.append(gridId).append('\"');
sb.append(",\"lng\":\"")
.append(lng).append('\"');
sb.append(",\"lat\":\"")
.append(lat).append('\"');
sb.append('}');
return sb.toString();
}
}

View File

@ -0,0 +1,53 @@
package ink.wgink.module.map.pojo.dto.grid;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: GridRelationDTO
* @Description: 网格关联
* @Author: WangGeng
* @Date: 2020/10/21 12:11
* @Version: 1.0
**/
@ApiModel
public class GridRelationDTO implements Serializable {
private static final long serialVersionUID = 9159203095930603288L;
@ApiModelProperty(name = "gridId", value = "网格ID")
private String gridId;
@ApiModelProperty(name = "relationId", value = "关联ID")
private String relationId;
public String getGridId() {
return gridId == null ? "" : gridId.trim();
}
public void setGridId(String gridId) {
this.gridId = gridId;
}
public String getRelationId() {
return relationId == null ? "" : relationId.trim();
}
public void setRelationId(String relationId) {
this.relationId = relationId;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("\"gridId\":\"")
.append(gridId).append('\"');
sb.append(",\"relationId\":\"")
.append(relationId).append('\"');
sb.append('}');
return sb.toString();
}
}

View File

@ -0,0 +1,62 @@
package ink.wgink.module.map.pojo.vo.grid;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: BaiduGridPointVO
* @Description: 百度地图网格点
* @Author: WangGeng
* @Date: 2020/10/21 11:02
* @Version: 1.0
**/
@ApiModel
public class GridPointVO {
@ApiModelProperty(name = "gridId", value = "网格ID")
private String gridId;
@ApiModelProperty(name = "lng", value = "经度")
private String lng;
@ApiModelProperty(name = "lat", value = "纬度")
private String lat;
public String getGridId() {
return gridId == null ? "" : gridId.trim();
}
public void setGridId(String gridId) {
this.gridId = gridId;
}
public String getLng() {
return lng == null ? "" : lng.trim();
}
public void setLng(String lng) {
this.lng = lng;
}
public String getLat() {
return lat == null ? "" : lat.trim();
}
public void setLat(String lat) {
this.lat = lat;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("\"gridId\":\"")
.append(gridId).append('\"');
sb.append(",\"lng\":\"")
.append(lng).append('\"');
sb.append(",\"lat\":\"")
.append(lat).append('\"');
sb.append('}');
return sb.toString();
}
}

View File

@ -0,0 +1,95 @@
package ink.wgink.module.map.pojo.vo.grid;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.ArrayList;
import java.util.List;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: BaiduGridVO
* @Description: 百度地图网格
* @Author: WangGeng
* @Date: 2020/10/21 11:02
* @Version: 1.0
**/
@ApiModel
public class GridVO {
@ApiModelProperty(name = "id", value = "网格ID")
private String id;
@ApiModelProperty(name = "fillColor", value = "填充颜色")
private String fillColor;
@ApiModelProperty(name = "gridName", value = "网格名称")
private String gridName;
@ApiModelProperty(name = "relationIdArray", value = "关联ID列表")
private List<String> relationIdArray;
@ApiModelProperty(name = "pointArray", value = "网格点列表")
private List<GridPointVO> pointArray;
public String getId() {
return id == null ? "" : id.trim();
}
public void setId(String id) {
this.id = id;
}
public String getFillColor() {
return fillColor == null ? "" : fillColor.trim();
}
public void setFillColor(String fillColor) {
this.fillColor = fillColor;
}
public String getGridName() {
return gridName == null ? "" : gridName.trim();
}
public void setGridName(String gridName) {
this.gridName = gridName;
}
public List<String> getRelationIdArray() {
if (relationIdArray == null) {
return new ArrayList<>();
}
return relationIdArray;
}
public void setRelationIdArray(List<String> relationIdArray) {
this.relationIdArray = relationIdArray;
}
public List<GridPointVO> getPointArray() {
if (pointArray == null) {
return new ArrayList<>();
}
return pointArray;
}
public void setPointArray(List<GridPointVO> pointArray) {
this.pointArray = pointArray;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("{");
sb.append("\"id\":\"")
.append(id).append('\"');
sb.append(",\"fillColor\":\"")
.append(fillColor).append('\"');
sb.append(",\"gridName\":\"")
.append(gridName).append('\"');
sb.append(",\"relationIdArray\":")
.append(relationIdArray);
sb.append(",\"pointArray\":")
.append(pointArray);
sb.append('}');
return sb.toString();
}
}

View File

@ -0,0 +1,67 @@
package ink.wgink.module.map.service.grid;
import ink.wgink.exceptions.RemoveException;
import ink.wgink.module.map.pojo.dto.grid.GridPointDTO;
import ink.wgink.module.map.pojo.vo.grid.GridPointVO;
import java.util.List;
import java.util.Map;
/**
* @ClassName: IGridPointService
* @Description: 网格点业务
* @Author: wanggeng
* @Date: 2021/8/30 10:06 下午
* @Version: 1.0
*/
public interface IGridPointService {
/**
* 保存网格点
*
* @param gridId
* @param pointArray
*/
void save(String gridId, List<GridPointVO> pointArray);
/**
* 删除网格点
*
* @param gridIds 网格ID列表
* @throws RemoveException
*/
void deleteByGridIds(List<String> gridIds);
/**
* 更新网格数组
*
* @param gridId 网格ID
* @param pointArray 点数组
* @throws Exception
*/
void updatePointArrayByGridId(String gridId, List<GridPointVO> pointArray) throws Exception;
/**
* 网格点列表
*
* @param params
* @return
*/
List<GridPointDTO> list(Map<String, Object> params);
/**
* 网格点列表
*
* @param gridId 网格ID
* @return
*/
List<GridPointDTO> list(String gridId);
/**
* 网格点列表
*
* @param gridIds 网格ID列表
* @return
*/
List<GridPointDTO> list(List<String> gridIds);
}

View File

@ -0,0 +1,102 @@
package ink.wgink.module.map.service.grid;
import ink.wgink.module.map.pojo.dto.grid.GridRelationDTO;
import java.util.List;
import java.util.Map;
/**
* @ClassName: IGridRelationService
* @Description: 网格关联业务
* @Author: wanggeng
* @Date: 2021/8/30 10:07 下午
* @Version: 1.0
*/
public interface IGridRelationService {
/**
* 保存关联关系
*
* @param gridId
* @param relationIdArray
*/
void save(String gridId, List<String> relationIdArray);
/**
* 删除网格
*
* @param gridId 网格ID
* @param relationId 关联ID
*/
void delete(String gridId, String relationId);
/**
* 删除网格关联
*
* @param gridIds 网格ID列表
*/
void deleteByGridIds(List<String> gridIds);
/**
* 删除网格关联
*
* @param relationId 关联ID
*/
void deleteByRelationId(String relationId);
/**
* 获取网格关联列表
*
* @param params
* @return
*/
List<GridRelationDTO> list(Map<String, Object> params);
/**
* 获取网格关系列表
*
* @param relationId 关联ID
* @return
*/
List<GridRelationDTO> listByRelationId(String relationId);
/**
* 获取网格关系列表
*
* @param relationIds 关联ID列表
* @return
*/
List<GridRelationDTO> listByRelationIds(List<String> relationIds);
/**
* 获取网格关系列表
*
* @param gridId 网格ID
* @return
*/
List<GridRelationDTO> listByGridId(String gridId);
/**
* 获取网格关系列表
*
* @param gridIds 网格ID列表
* @return
*/
List<GridRelationDTO> listByGridIds(List<String> gridIds);
/**
* 获取网格ID列表
*
* @param relationId 关联ID
* @return
*/
List<String> listGridId(String relationId);
/**
* 获取网格ID列表
*
* @param relationIds 关联ID列表
* @return
*/
List<String> listGridId(List<String> relationIds);
}

View File

@ -0,0 +1,105 @@
package ink.wgink.module.map.service.grid;
import ink.wgink.exceptions.SearchException;
import ink.wgink.module.map.pojo.dto.grid.GridDTO;
import ink.wgink.module.map.pojo.vo.grid.GridVO;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.SuccessResultList;
import java.util.List;
import java.util.Map;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: IGridService
* @Description: 网格业务
* @Author: WangGeng
* @Date: 2020/10/21 11:14
* @Version: 1.0
**/
public interface IGridService {
/**
* 保存网格并返回ID
*
* @param gridVO
* @return
* @throws Exception
*/
void save(GridVO gridVO) throws Exception;
/**
* 删除网格
*
* @param relationId 关联关系
*/
void deleteByRelationId(String relationId);
/**
* 删除网格
*
* @param gridIds 网格ID列表
*/
void deleteByGridIds(List<String> gridIds);
/**
* 删除空网格没有节点的网格
*
* @param gridIds
*/
void deleteEmpty(List<String> gridIds);
/**
* 网格列表
*
* @param params
* @return
*/
List<GridDTO> list(Map<String, Object> params);
/**
* 网格列表
*
* @param gridIds 网格ID
* @return
*/
List<GridDTO> list(List<String> gridIds);
/**
* 获取网格列表
*
* @param relationId 关联ID
* @return
*/
List<GridDTO> listByRelationId(String relationId);
/**
* 获取网格列表
*
* @param relationIds 关联ID列表
* @return
*/
List<GridDTO> listGroupByRelationIds(List<String> relationIds);
/**
* 获取全部网格列表
*
* @param relationIds
* @return
* @throws SearchException
*/
List<GridDTO> listByRelationIds(List<String> relationIds);
/**
* 获取网格分页列表
*
* @param relationIds
* @return
*/
SuccessResultList<List<GridDTO>> listPageByRelationIds(ListPage page, List<String> relationIds);
}

View File

@ -0,0 +1,82 @@
package ink.wgink.module.map.service.grid.impl;
import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.exceptions.RemoveException;
import ink.wgink.module.map.dao.grid.IGridPointDao;
import ink.wgink.module.map.pojo.dto.grid.GridPointDTO;
import ink.wgink.module.map.pojo.vo.grid.GridPointVO;
import ink.wgink.module.map.service.grid.IGridPointService;
import ink.wgink.util.map.HashMapUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* @ClassName: GridPointServiceImpl
* @Description: 网格点
* @Author: wanggeng
* @Date: 2021/8/30 10:07 下午
* @Version: 1.0
*/
@Service
public class GridPointServiceImpl extends DefaultBaseService implements IGridPointService {
@Autowired
private IGridPointDao gridPointDao;
@Override
public void save(String gridId, List<GridPointVO> pointArray) {
if (pointArray == null || pointArray.isEmpty()) {
return;
}
Map<String, Object> params = getHashMap(4);
params.put("gridId", gridId);
for (GridPointVO gridPointVO : pointArray) {
params.put("lng", gridPointVO.getLng());
params.put("lat", gridPointVO.getLat());
gridPointDao.save(params);
}
}
@Override
public void deleteByGridIds(List<String> gridIds) throws RemoveException {
Map<String, Object> params = getHashMap(2);
params.put("gridIds", gridIds);
gridPointDao.delete(params);
}
@Override
public void updatePointArrayByGridId(String gridId, List<GridPointVO> pointArray) throws Exception {
// 删除原有网格数组
Map<String, Object> params = getHashMap(2);
params.put("gridId", gridId);
gridPointDao.delete(params);
// 新增网格数组
for (GridPointVO gridPointVO : pointArray) {
params = HashMapUtil.beanToMap(gridPointVO);
params.put("gridId", gridId);
gridPointDao.save(params);
}
}
@Override
public List<GridPointDTO> list(Map<String, Object> params) {
return gridPointDao.list(params);
}
@Override
public List<GridPointDTO> list(String gridId) {
Map<String, Object> params = getHashMap(2);
params.put("gridId", gridId);
return list(params);
}
@Override
public List<GridPointDTO> list(List<String> gridIds) {
Map<String, Object> params = getHashMap(2);
params.put("gridIds", gridIds);
return list(params);
}
}

View File

@ -0,0 +1,123 @@
package ink.wgink.module.map.service.grid.impl;
import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.exceptions.RemoveException;
import ink.wgink.module.map.dao.grid.IGridRelationDao;
import ink.wgink.module.map.pojo.dto.grid.GridRelationDTO;
import ink.wgink.module.map.service.grid.IGridRelationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* @ClassName: GridRelationServiceImpl
* @Description: 网格关联业务
* @Author: wanggeng
* @Date: 2021/8/30 10:08 下午
* @Version: 1.0
*/
@Service
public class GridRelationServiceImpl extends DefaultBaseService implements IGridRelationService {
@Autowired
private IGridRelationDao gridRelationDao;
@Override
public void save(String gridId, List<String> relationIdArray) {
if (relationIdArray == null || relationIdArray.isEmpty()) {
return;
}
Map<String, Object> params = getHashMap(4);
params.put("gridId", gridId);
for (String relationId : relationIdArray) {
params.put("relationId", relationId);
gridRelationDao.save(params);
}
}
@Override
public void delete(String gridId, String relationId) throws RemoveException {
Map<String, Object> params = getHashMap(4);
params.put("gridId", gridId);
params.put("relationId", relationId);
gridRelationDao.delete(params);
}
@Override
public void deleteByGridIds(List<String> gridIds) {
Map<String, Object> params = getHashMap(2);
params.put("gridIds", gridIds);
gridRelationDao.delete(params);
}
@Override
public void deleteByRelationId(String relationId) {
Map<String, Object> params = getHashMap(2);
params.put("relationId", relationId);
gridRelationDao.delete(params);
}
@Override
public List<GridRelationDTO> listByRelationId(String relationId) {
Map<String, Object> params = getHashMap(2);
params.put("relationId", relationId);
return gridRelationDao.list(params);
}
@Override
public List<GridRelationDTO> list(Map<String, Object> params) {
return gridRelationDao.list(params);
}
@Override
public List<GridRelationDTO> listByRelationIds(List<String> relationIds) {
Map<String, Object> params = getHashMap(2);
params.put("relationIds", relationIds);
return list(params);
}
@Override
public List<GridRelationDTO> listByGridId(String gridId) {
Map<String, Object> params = getHashMap(2);
params.put("gridId", gridId);
return list(params);
}
@Override
public List<GridRelationDTO> listByGridIds(List<String> gridIds) {
Map<String, Object> params = getHashMap(2);
params.put("gridIds", gridIds);
return list(params);
}
@Override
public List<String> listGridId(String relationId) {
List<GridRelationDTO> gridRelationDTOs = listByRelationId(relationId);
return listGridIdByGridRelation(gridRelationDTOs);
}
@Override
public List<String> listGridId(List<String> relationIds) {
List<GridRelationDTO> gridRelationDTOs = listByRelationIds(relationIds);
return listGridIdByGridRelation(gridRelationDTOs);
}
/**
* 获取网格ID列表
*
* @param gridRelationDTOs
* @return
*/
private List<String> listGridIdByGridRelation(List<GridRelationDTO> gridRelationDTOs) {
if (gridRelationDTOs.isEmpty()) {
return new ArrayList<>();
}
Set<String> gridIdSet = new HashSet<>();
gridRelationDTOs.forEach(gridRelationDTO -> {
gridIdSet.add(gridRelationDTO.getGridId());
});
return new ArrayList<>(gridIdSet);
}
}

View File

@ -0,0 +1,284 @@
package ink.wgink.module.map.service.grid.impl;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import ink.wgink.common.base.DefaultBaseService;
import ink.wgink.exceptions.SearchException;
import ink.wgink.module.map.dao.grid.IGridDao;
import ink.wgink.module.map.pojo.dto.grid.GridDTO;
import ink.wgink.module.map.pojo.dto.grid.GridPointDTO;
import ink.wgink.module.map.pojo.dto.grid.GridRelationDTO;
import ink.wgink.module.map.pojo.vo.grid.GridPointVO;
import ink.wgink.module.map.pojo.vo.grid.GridVO;
import ink.wgink.module.map.service.grid.IGridPointService;
import ink.wgink.module.map.service.grid.IGridRelationService;
import ink.wgink.module.map.service.grid.IGridService;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.util.UUIDUtil;
import ink.wgink.util.map.HashMapUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* When you feel like quitting. Think about why you started
* 当你想要放弃的时候想想当初你为何开始
*
* @ClassName: GridServiceImpl
* @Description: 网格业务
* @Author: WangGeng
* @Date: 2020/10/21 11:14
* @Version: 1.0
**/
@Service
public class GridServiceImpl extends DefaultBaseService implements IGridService {
@Autowired
private IGridDao gridDao;
@Autowired
private IGridRelationService gridRelationService;
@Autowired
private IGridPointService gridPointService;
@Override
public void save(GridVO gridVO) throws Exception {
String gridId = UUIDUtil.getUUID();
List<String> relationIdArray = gridVO.getRelationIdArray();
List<GridPointVO> pointArray = gridVO.getPointArray();
// 保存网格
Map<String, Object> params = HashMapUtil.beanToMap(gridVO);
params.put("gridId", gridId);
params.remove("relationIdArray");
params.remove("pointArray");
setSaveInfo(params);
gridDao.save(params);
// 保存拓展属性
gridRelationService.save(gridId, relationIdArray);
gridPointService.save(gridId, pointArray);
}
@Override
public void deleteByRelationId(String relationId) {
List<String> gridIds = gridRelationService.listGridId(relationId);
if (gridIds.isEmpty()) {
return;
}
Map<String, Object> params = getHashMap(2);
params.put("gridIds", gridIds);
// 删除网格
gridDao.delete(params);
// 删除网格点
gridPointService.deleteByGridIds(gridIds);
// 删除关联关系
gridRelationService.deleteByRelationId(relationId);
}
@Override
public void deleteByGridIds(List<String> gridIds) {
if (gridIds == null || gridIds.isEmpty()) {
return;
}
// 删除网格
Map<String, Object> params = getHashMap(2);
params.put("gridIds", gridIds);
gridDao.delete(params);
// 删除点数组
gridPointService.deleteByGridIds(gridIds);
// 删除关联
gridRelationService.deleteByGridIds(gridIds);
}
@Override
public void deleteEmpty(List<String> gridIds) {
if (gridIds == null || gridIds.isEmpty()) {
return;
}
// 所有的网格和人员关联关系列表
List<GridRelationDTO> gridRelationDTOs = gridRelationService.listByGridIds(gridIds);
// 得到为空的网格
List<String> emptyGridIds = new ArrayList<>();
for (String gridId : gridIds) {
boolean isEmpty = true;
for (GridRelationDTO gridRelationDTO : gridRelationDTOs) {
if (StringUtils.equals(gridId, gridRelationDTO.getGridId())) {
isEmpty = false;
break;
}
}
if (isEmpty) {
emptyGridIds.add(gridId);
}
}
// 删除空网格
deleteByGridIds(emptyGridIds);
}
@Override
public List<GridDTO> list(Map<String, Object> params) {
return gridDao.list(params);
}
@Override
public List<GridDTO> list(List<String> gridIds) {
Map<String, Object> params = getHashMap(2);
params.put("gridIds", gridIds);
return list(params);
}
@Override
public List<GridDTO> listByRelationId(String relationId) throws SearchException {
if (StringUtils.isBlank(relationId)) {
return new ArrayList<>();
}
List<String> gridIds = gridRelationService.listGridId(relationId);
if (gridIds.isEmpty()) {
return new ArrayList<>();
}
List<GridDTO> gridDTOs = list(gridIds);
for (GridDTO gridDTO : gridDTOs) {
List<GridPointDTO> gridPointDTOs = gridPointService.list(gridDTO.getGridId());
gridDTO.setPointArray(gridPointDTOs);
}
return gridDTOs;
}
@Override
public List<GridDTO> listGroupByRelationIds(List<String> relationIds) throws SearchException {
if (relationIds == null || relationIds.size() == 0) {
return new ArrayList<>();
}
List<String> gridIds = gridRelationService.listGridId(relationIds);
if (gridIds.isEmpty()) {
return new ArrayList<>();
}
List<GridDTO> gridDTOs = list(gridIds);
if (gridDTOs.isEmpty()) {
return gridDTOs;
}
// 聚合后的网格
List<GridDTO> gridGroupDTOs = listGridGroup(gridDTOs);
// 只能展示包含关联人员列表的网格比如查询AB那么可以展示的应该是AB...而不能是A
for (int i = 0; i < gridGroupDTOs.size(); i++) {
GridDTO gridDTO = gridGroupDTOs.get(i);
// 关联人数多于片区人数排除
if (relationIds.size() > gridDTO.getRelationIdArray().size()) {
gridGroupDTOs.remove(i);
i--;
continue;
}
// 判断关联人是否全部被片区包含
boolean isAllExist = true;
for (String relationId : relationIds) {
if (!gridDTO.getRelationId().contains(relationId)) {
isAllExist = false;
break;
}
}
// 不是全部包含就删除
if (!isAllExist) {
gridGroupDTOs.remove(i);
i--;
continue;
}
}
setGridPoints(gridGroupDTOs);
return gridGroupDTOs;
}
@Override
public List<GridDTO> listByRelationIds(List<String> relationIds) throws SearchException {
if (relationIds == null || relationIds.size() == 0) {
return new ArrayList<>();
}
List<String> gridIds = gridRelationService.listGridId(relationIds);
if (gridIds.isEmpty()) {
return new ArrayList<>();
}
List<GridDTO> gridDTOs = list(gridIds);
if (gridDTOs.isEmpty()) {
return gridDTOs;
}
setGridPoints(gridDTOs);
return gridDTOs;
}
@Override
public SuccessResultList<List<GridDTO>> listPageByRelationIds(ListPage page, List<String> relationIds) {
if (relationIds == null || relationIds.size() == 0) {
return new SuccessResultList<>(new ArrayList<>(), 1, 0L);
}
List<String> gridIds = gridRelationService.listGridId(relationIds);
if (gridIds.isEmpty()) {
return new SuccessResultList<>(new ArrayList<>(), 1, 0L);
}
PageHelper.startPage(page.getPage(), page.getRows());
List<GridDTO> gridDTOs = list(relationIds);
PageInfo<GridDTO> pageInfo = new PageInfo<>(gridDTOs);
return new SuccessResultList<>(gridDTOs, pageInfo.getPageNum(), pageInfo.getTotal());
}
/**
* 设置网格点
*
* @param gridDTOs
*/
private void setGridPoints(List<GridDTO> gridDTOs) {
if (gridDTOs.isEmpty()) {
return;
}
List<String> gridIds = new ArrayList<>();
for (GridDTO gridDTO : gridDTOs) {
gridIds.add(gridDTO.getGridId());
}
// 获取所有点
List<GridPointDTO> gridPointDTOs = gridPointService.list(gridIds);
if (gridPointDTOs.isEmpty()) {
return;
}
// 构建所有点
for (GridDTO gridDTO : gridDTOs) {
List<GridPointDTO> pointArray = new ArrayList<>();
for (GridPointDTO gridPointDTO : gridPointDTOs) {
if (StringUtils.equals(gridDTO.getGridId(), gridPointDTO.getGridId())) {
pointArray.add(gridPointDTO);
}
}
gridDTO.setPointArray(pointArray);
}
}
/**
* 得到聚合后的列表
*
* @param gridDTOs
* @return
*/
private List<GridDTO> listGridGroup(List<GridDTO> gridDTOs) {
Map<String, GridDTO> gridMap = new HashMap<>(16);
for (GridDTO gridDTO : gridDTOs) {
GridDTO grid = gridMap.get(gridDTO.getGridId());
if (grid == null) {
grid = gridDTO;
List<String> getRelationIdArray = new ArrayList<>();
getRelationIdArray.add(gridDTO.getRelationId());
gridDTO.setRelationIdArray(getRelationIdArray);
gridMap.put(gridDTO.getGridId(), gridDTO);
}
// 合并relationId
grid.getRelationIdArray().add(gridDTO.getRelationId());
}
List<GridDTO> gridGroups = new ArrayList<>();
for (Map.Entry<String, GridDTO> kv : gridMap.entrySet()) {
GridDTO gridDTO = kv.getValue();
Collections.sort(gridDTO.getRelationIdArray());
gridDTO.setRelationId(gridDTO.getRelationIdArray().toString());
gridGroups.add(gridDTO);
}
return gridGroups;
}
}

View File

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="ink.wgink.module.map.dao.grid.IGridDao">
<cache/>
<resultMap id="gridDTO" type="ink.wgink.module.map.pojo.dto.grid.GridDTO">
<id column="grid_id" property="gridId"/>
<result column="fill_color" property="fillColor"/>
<result column="grid_name" property="gridName"/>
<result column="relation_id" property="relationId"/>
</resultMap>
<!-- 建表 -->
<update id="createTable">
CREATE TABLE `map_grid` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`grid_id` char(36) NOT NULL,
`grid_name` varchar(255) NOT NULL,
`fill_color` varchar(7) NOT NULL DEFAULT '#000000' COMMENT '颜色',
`gmt_create` datetime DEFAULT NULL,
`creator` char(36) DEFAULT NULL,
`gmt_modified` datetime DEFAULT NULL,
`modifier` char(36) DEFAULT NULL,
`is_delete` int(1) DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `grid_id` (`grid_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='网格';
</update>
<!-- 保存网格 -->
<insert id="save" parameterType="map" flushCache="true">
INSERT INTO map_grid(
grid_id,
grid_name,
fill_color,
gmt_create,
creator,
gmt_modified,
modifier,
is_delete
) VALUES(
#{gridId},
#{gridName},
#{fillColor},
#{gmtCreate},
#{creator},
#{gmtModified},
#{modifier},
#{isDelete}
)
</insert>
<!-- 删除网格 -->
<delete id="delete" parameterType="map" flushCache="true">
DELETE FROM
map_grid
WHERE
<if test="gridId != null and gridId != ''">
grid_id = #{gridId}
</if>
<if test="gridIds != null and gridIds.size > 0">
grid_id IN
<foreach collection="gridIds" index="index" open="(" separator="," close=")">
#{gridIds[${index}]}
</foreach>
</if>
</delete>
<!-- 获取网格列表通过关联ID -->
<select id="listGridByRelationId" parameterType="java.lang.String" resultMap="gridDTO" useCache="true">
SELECT
t1.grid_id,
t1.fill_color,
t1.grid_name,
t2.relation_id
FROM
map_grid t1
LEFT JOIN
map_grid_relation t2
ON
t1.grid_id = t2.grid_id
WHERE
t1.is_delete = 0
AND
t2.relation_id = #{_parameter}
</select>
<!-- 网格列表 -->
<select id="list" parameterType="map" resultMap="gridDTO" useCache="true">
SELECT
t1.grid_id,
t1.fill_color,
t1.grid_name
FROM
map_grid t1
WHERE
t1.is_delete = 0
<if test="gridIds != null and gridIds.size > 0">
AND
t1.grid_id IN
<foreach collection="gridIds" index="index" open="(" separator="," close=")">
#{gridIds[${index}]}
</foreach>
</if>
</select>
<!-- 网格列表group -->
<select id="listGroup" parameterType="map" resultMap="gridDTO" useCache="true">
SELECT
t1.grid_id,
t1.fill_color,
t1.grid_name
FROM
map_grid t1
WHERE
t1.is_delete = 0
<if test="gridIds != null and gridIds.size > 0">
AND
t1.grid_id IN
<foreach collection="gridIds" index="index" open="(" separator="," close=")">
#{gridIds[${index}]}
</foreach>
</if>
GROUP BY
t1.grid_id,
t1.fill_color,
t1.grid_name
</select>
</mapper>

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="ink.wgink.module.map.dao.grid.IGridPointDao">
<cache/>
<resultMap id="gridPointDTO" type="ink.wgink.module.map.pojo.dto.grid.GridPointDTO">
<id column="grid_id" property="gridId"/>
<result column="lng" property="lng"/>
<result column="lat" property="lat"/>
</resultMap>
<!-- 建表 -->
<update id="createTable">
CREATE TABLE `map_grid_point` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`grid_id` char(36) NOT NULL,
`lng` varchar(255) DEFAULT NULL COMMENT '点经度',
`lat` varchar(255) DEFAULT NULL COMMENT '点纬度',
PRIMARY KEY (`id`),
KEY `grid_id` (`grid_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='网格点';
</update>
<!-- 保存网格点 -->
<insert id="save" parameterType="map" flushCache="true">
INSERT INTO map_grid_point(
grid_id,
lng,
lat
) VALUES(
#{gridId},
#{lng},
#{lat}
)
</insert>
<!-- 删除网格点 -->
<delete id="delete" parameterType="map" flushCache="true">
DELETE FROM
map_grid_point
WHERE
<if test="gridId != null and gridId != ''">
grid_id = #{gridId}
</if>
<if test="gridIds != null and gridIds.size > 0">
grid_id IN
<foreach collection="gridIds" index="index" open="(" separator="," close=")">
#{gridIds[${index}]}
</foreach>
</if>
</delete>
<!-- 获取网格点列表通过网格ID -->
<select id="list" parameterType="map" resultMap="gridPointDTO" useCache="true">
SELECT
grid_id,
lng,
lat
FROM
map_grid_point
<where>
<if test="gridId != null and gridId != ''">
grid_id = #{gridId}
</if>
<if test="gridIds != null and gridIds.size > 0">
AND
grid_id IN
<foreach collection="gridIds" index="index" open="(" separator="," close=")">
#{gridIds[${index}]}
</foreach>
</if>
</where>
</select>
</mapper>

View File

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="ink.wgink.module.map.dao.grid.IGridRelationDao">
<cache/>
<resultMap id="gridRelationDTO" type="ink.wgink.module.map.pojo.dto.grid.GridRelationDTO">
<id column="relation_id" property="relationId"/>
<result column="grid_id" property="gridId"/>
</resultMap>
<!-- 建表 -->
<update id="createTable">
CREATE TABLE `map_grid_relation` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`relation_id` char(36) NOT NULL COMMENT '关联ID',
`grid_id` char(36) NOT NULL COMMENT '网格ID',
PRIMARY KEY (`id`,`relation_id`),
KEY `relation_id` (`relation_id`) USING BTREE,
KEY `grid_id` (`grid_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='网格与关联';
</update>
<!-- 保存网格关联关系 -->
<insert id="save" parameterType="map" flushCache="true">
INSERT INTO map_grid_relation(
grid_id,
relation_id
) VALUES(
#{gridId},
#{relationId}
)
</insert>
<!-- 删除网格关联关系 -->
<delete id="delete" parameterType="map" flushCache="true">
DELETE FROM
map_grid_relation
<where>
<if test="gridId != null and gridId != ''">
grid_id = #{gridId}
</if>
<if test="gridIds != null and gridIds.size > 0">
AND
grid_id IN
<foreach collection="gridIds" index="index" open="(" separator="," close=")">
#{gridIds[${index}]}
</foreach>
</if>
<if test="relationId != null and relationId != ''">
AND
relation_id = #{relationId}
</if>
</where>
</delete>
<!-- 获取关联关系列表 -->
<select id="list" parameterType="map" resultMap="gridRelationDTO" useCache="true">
SELECT
relation_id,
grid_id
FROM
map_grid_relation
<where>
<if test="relationId != null">
relation_id = #{relationId}
</if>
<if test="relationIds != null and relationIds.size > 0">
AND
relation_id IN
<foreach collection="relationIds" index="index" open="(" separator="," close=")">
#{relationIds[${index}]}
</foreach>
</if>
<if test="gridId != null and gridId != ''">
AND
grid_id = #{gridId}
</if>
<if test="gridIds != null and gridIds.size > 0">
AND
grid_id IN
<foreach collection="gridIds" index="index" open="(" separator="," close=")">
#{gridIds[${index}]}
</foreach>
</if>
</where>
</select>
</mapper>

View File

@ -35,6 +35,7 @@
<module>module-sms</module>
<module>register-wechat</module>
<module>module-file-media</module>
<module>module-map</module>
</modules>
<packaging>pom</packaging>