diff --git a/module-map/pom.xml b/module-map/pom.xml new file mode 100644 index 00000000..d4565dec --- /dev/null +++ b/module-map/pom.xml @@ -0,0 +1,23 @@ + + + + wg-basic + ink.wgink + 1.0-SNAPSHOT + + 4.0.0 + + module-map + 地图模块 + + + + ink.wgink + common + 1.0-SNAPSHOT + + + + \ No newline at end of file diff --git a/module-map/src/main/java/ink/wgink/module/map/dao/grid/IGridDao.java b/module-map/src/main/java/ink/wgink/module/map/dao/grid/IGridDao.java new file mode 100644 index 00000000..0b370b1e --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/dao/grid/IGridDao.java @@ -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 params) throws SaveException; + + /** + * 删除网格 + * + * @param params + * @throws RemoveException + */ + void delete(Map params) throws RemoveException; + + /** + * 获取网格列表 + * + * @param params + * @return + * @throws SearchException + */ + List list(Map params) throws SearchException; + + /** + * 网格列表group + * + * @param params + * @return + * @throws SearchException + */ + List listGroup(Map params) throws SearchException; + +} diff --git a/module-map/src/main/java/ink/wgink/module/map/dao/grid/IGridPointDao.java b/module-map/src/main/java/ink/wgink/module/map/dao/grid/IGridPointDao.java new file mode 100644 index 00000000..721fe29d --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/dao/grid/IGridPointDao.java @@ -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 params) throws SaveException; + + /** + * 删除网格点 + * + * @param params + * @throws RemoveException + */ + void delete(Map params) throws RemoveException; + + /** + * 获取网格点列表 + * + * @param params + * @return + * @throws SearchException + */ + List list(Map params) throws SearchException; + +} diff --git a/module-map/src/main/java/ink/wgink/module/map/dao/grid/IGridRelationDao.java b/module-map/src/main/java/ink/wgink/module/map/dao/grid/IGridRelationDao.java new file mode 100644 index 00000000..f9acf8be --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/dao/grid/IGridRelationDao.java @@ -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 params) throws SaveException; + + /** + * 删除网格关联关系 + * + * @param params + * @throws RemoveException + */ + void delete(Map params) throws RemoveException; + + /** + * 网关关联列表 + * + * @param params + * @return + * @throws SearchException + */ + List list(Map params) throws SearchException; + +} diff --git a/module-map/src/main/java/ink/wgink/module/map/pojo/dto/grid/GridDTO.java b/module-map/src/main/java/ink/wgink/module/map/pojo/dto/grid/GridDTO.java new file mode 100644 index 00000000..8afa36b4 --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/pojo/dto/grid/GridDTO.java @@ -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 relationIdArray; + @ApiModelProperty(name = "pointArray", value = "网格点列表") + private List 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 getRelationIdArray() { + if (relationIdArray == null) { + return new ArrayList<>(); + } + return relationIdArray; + } + + public void setRelationIdArray(List relationIdArray) { + this.relationIdArray = relationIdArray; + } + + public List getPointArray() { + if (pointArray == null) { + return new ArrayList<>(); + } + return pointArray; + } + + public void setPointArray(List 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(); + } +} diff --git a/module-map/src/main/java/ink/wgink/module/map/pojo/dto/grid/GridPointDTO.java b/module-map/src/main/java/ink/wgink/module/map/pojo/dto/grid/GridPointDTO.java new file mode 100644 index 00000000..1863b53f --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/pojo/dto/grid/GridPointDTO.java @@ -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(); + } +} diff --git a/module-map/src/main/java/ink/wgink/module/map/pojo/dto/grid/GridRelationDTO.java b/module-map/src/main/java/ink/wgink/module/map/pojo/dto/grid/GridRelationDTO.java new file mode 100644 index 00000000..7a7c4fcf --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/pojo/dto/grid/GridRelationDTO.java @@ -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(); + } +} diff --git a/module-map/src/main/java/ink/wgink/module/map/pojo/vo/grid/GridPointVO.java b/module-map/src/main/java/ink/wgink/module/map/pojo/vo/grid/GridPointVO.java new file mode 100644 index 00000000..282f93ec --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/pojo/vo/grid/GridPointVO.java @@ -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(); + } +} diff --git a/module-map/src/main/java/ink/wgink/module/map/pojo/vo/grid/GridVO.java b/module-map/src/main/java/ink/wgink/module/map/pojo/vo/grid/GridVO.java new file mode 100644 index 00000000..25285ced --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/pojo/vo/grid/GridVO.java @@ -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 relationIdArray; + @ApiModelProperty(name = "pointArray", value = "网格点列表") + private List 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 getRelationIdArray() { + if (relationIdArray == null) { + return new ArrayList<>(); + } + return relationIdArray; + } + + public void setRelationIdArray(List relationIdArray) { + this.relationIdArray = relationIdArray; + } + + public List getPointArray() { + if (pointArray == null) { + return new ArrayList<>(); + } + return pointArray; + } + + public void setPointArray(List 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(); + } +} diff --git a/module-map/src/main/java/ink/wgink/module/map/service/grid/IGridPointService.java b/module-map/src/main/java/ink/wgink/module/map/service/grid/IGridPointService.java new file mode 100644 index 00000000..8d541bd4 --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/service/grid/IGridPointService.java @@ -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 pointArray); + + /** + * 删除网格点 + * + * @param gridIds 网格ID列表 + * @throws RemoveException + */ + void deleteByGridIds(List gridIds); + + /** + * 更新网格数组 + * + * @param gridId 网格ID + * @param pointArray 点数组 + * @throws Exception + */ + void updatePointArrayByGridId(String gridId, List pointArray) throws Exception; + + /** + * 网格点列表 + * + * @param params + * @return + */ + List list(Map params); + + /** + * 网格点列表 + * + * @param gridId 网格ID + * @return + */ + List list(String gridId); + + /** + * 网格点列表 + * + * @param gridIds 网格ID列表 + * @return + */ + List list(List gridIds); +} diff --git a/module-map/src/main/java/ink/wgink/module/map/service/grid/IGridRelationService.java b/module-map/src/main/java/ink/wgink/module/map/service/grid/IGridRelationService.java new file mode 100644 index 00000000..455907c8 --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/service/grid/IGridRelationService.java @@ -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 relationIdArray); + + /** + * 删除网格 + * + * @param gridId 网格ID + * @param relationId 关联ID + */ + void delete(String gridId, String relationId); + + /** + * 删除网格关联 + * + * @param gridIds 网格ID列表 + */ + void deleteByGridIds(List gridIds); + + /** + * 删除网格关联 + * + * @param relationId 关联ID + */ + void deleteByRelationId(String relationId); + + /** + * 获取网格关联列表 + * + * @param params + * @return + */ + List list(Map params); + + /** + * 获取网格关系列表 + * + * @param relationId 关联ID + * @return + */ + List listByRelationId(String relationId); + + /** + * 获取网格关系列表 + * + * @param relationIds 关联ID列表 + * @return + */ + List listByRelationIds(List relationIds); + + /** + * 获取网格关系列表 + * + * @param gridId 网格ID + * @return + */ + List listByGridId(String gridId); + + /** + * 获取网格关系列表 + * + * @param gridIds 网格ID列表 + * @return + */ + List listByGridIds(List gridIds); + + /** + * 获取网格ID列表 + * + * @param relationId 关联ID + * @return + */ + List listGridId(String relationId); + + /** + * 获取网格ID列表 + * + * @param relationIds 关联ID列表 + * @return + */ + List listGridId(List relationIds); +} diff --git a/module-map/src/main/java/ink/wgink/module/map/service/grid/IGridService.java b/module-map/src/main/java/ink/wgink/module/map/service/grid/IGridService.java new file mode 100644 index 00000000..6a15333c --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/service/grid/IGridService.java @@ -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 gridIds); + + /** + * 删除空网格(没有节点的网格) + * + * @param gridIds + */ + void deleteEmpty(List gridIds); + + /** + * 网格列表 + * + * @param params + * @return + */ + List list(Map params); + + /** + * 网格列表 + * + * @param gridIds 网格ID + * @return + */ + List list(List gridIds); + + /** + * 获取网格列表 + * + * @param relationId 关联ID + * @return + */ + List listByRelationId(String relationId); + + /** + * 获取网格列表 + * + * @param relationIds 关联ID列表 + * @return + */ + List listGroupByRelationIds(List relationIds); + + /** + * 获取全部网格列表 + * + * @param relationIds + * @return + * @throws SearchException + */ + List listByRelationIds(List relationIds); + + /** + * 获取网格分页列表 + * + * @param relationIds + * @return + */ + SuccessResultList> listPageByRelationIds(ListPage page, List relationIds); + + +} diff --git a/module-map/src/main/java/ink/wgink/module/map/service/grid/impl/GridPointServiceImpl.java b/module-map/src/main/java/ink/wgink/module/map/service/grid/impl/GridPointServiceImpl.java new file mode 100644 index 00000000..fd73a521 --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/service/grid/impl/GridPointServiceImpl.java @@ -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 pointArray) { + if (pointArray == null || pointArray.isEmpty()) { + return; + } + Map 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 gridIds) throws RemoveException { + Map params = getHashMap(2); + params.put("gridIds", gridIds); + gridPointDao.delete(params); + } + + @Override + public void updatePointArrayByGridId(String gridId, List pointArray) throws Exception { + // 删除原有网格数组 + Map 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 list(Map params) { + return gridPointDao.list(params); + } + + @Override + public List list(String gridId) { + Map params = getHashMap(2); + params.put("gridId", gridId); + return list(params); + } + + @Override + public List list(List gridIds) { + Map params = getHashMap(2); + params.put("gridIds", gridIds); + return list(params); + } +} diff --git a/module-map/src/main/java/ink/wgink/module/map/service/grid/impl/GridRelationServiceImpl.java b/module-map/src/main/java/ink/wgink/module/map/service/grid/impl/GridRelationServiceImpl.java new file mode 100644 index 00000000..fe72d073 --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/service/grid/impl/GridRelationServiceImpl.java @@ -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 relationIdArray) { + if (relationIdArray == null || relationIdArray.isEmpty()) { + return; + } + Map 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 params = getHashMap(4); + params.put("gridId", gridId); + params.put("relationId", relationId); + gridRelationDao.delete(params); + } + + @Override + public void deleteByGridIds(List gridIds) { + Map params = getHashMap(2); + params.put("gridIds", gridIds); + gridRelationDao.delete(params); + } + + @Override + public void deleteByRelationId(String relationId) { + Map params = getHashMap(2); + params.put("relationId", relationId); + gridRelationDao.delete(params); + } + + @Override + public List listByRelationId(String relationId) { + Map params = getHashMap(2); + params.put("relationId", relationId); + return gridRelationDao.list(params); + } + + @Override + public List list(Map params) { + return gridRelationDao.list(params); + } + + @Override + public List listByRelationIds(List relationIds) { + Map params = getHashMap(2); + params.put("relationIds", relationIds); + return list(params); + } + + @Override + public List listByGridId(String gridId) { + Map params = getHashMap(2); + params.put("gridId", gridId); + return list(params); + } + + @Override + public List listByGridIds(List gridIds) { + Map params = getHashMap(2); + params.put("gridIds", gridIds); + return list(params); + } + + @Override + public List listGridId(String relationId) { + List gridRelationDTOs = listByRelationId(relationId); + return listGridIdByGridRelation(gridRelationDTOs); + } + + @Override + public List listGridId(List relationIds) { + List gridRelationDTOs = listByRelationIds(relationIds); + return listGridIdByGridRelation(gridRelationDTOs); + } + + /** + * 获取网格ID列表 + * + * @param gridRelationDTOs + * @return + */ + private List listGridIdByGridRelation(List gridRelationDTOs) { + if (gridRelationDTOs.isEmpty()) { + return new ArrayList<>(); + } + Set gridIdSet = new HashSet<>(); + gridRelationDTOs.forEach(gridRelationDTO -> { + gridIdSet.add(gridRelationDTO.getGridId()); + }); + return new ArrayList<>(gridIdSet); + } + +} diff --git a/module-map/src/main/java/ink/wgink/module/map/service/grid/impl/GridServiceImpl.java b/module-map/src/main/java/ink/wgink/module/map/service/grid/impl/GridServiceImpl.java new file mode 100644 index 00000000..6dc38b6c --- /dev/null +++ b/module-map/src/main/java/ink/wgink/module/map/service/grid/impl/GridServiceImpl.java @@ -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 relationIdArray = gridVO.getRelationIdArray(); + List pointArray = gridVO.getPointArray(); + // 保存网格 + Map 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 gridIds = gridRelationService.listGridId(relationId); + if (gridIds.isEmpty()) { + return; + } + Map params = getHashMap(2); + params.put("gridIds", gridIds); + // 删除网格 + gridDao.delete(params); + // 删除网格点 + gridPointService.deleteByGridIds(gridIds); + // 删除关联关系 + gridRelationService.deleteByRelationId(relationId); + } + + @Override + public void deleteByGridIds(List gridIds) { + if (gridIds == null || gridIds.isEmpty()) { + return; + } + // 删除网格 + Map params = getHashMap(2); + params.put("gridIds", gridIds); + gridDao.delete(params); + // 删除点数组 + gridPointService.deleteByGridIds(gridIds); + // 删除关联 + gridRelationService.deleteByGridIds(gridIds); + } + + @Override + public void deleteEmpty(List gridIds) { + if (gridIds == null || gridIds.isEmpty()) { + return; + } + // 所有的网格和人员关联关系列表 + List gridRelationDTOs = gridRelationService.listByGridIds(gridIds); + // 得到为空的网格 + List 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 list(Map params) { + return gridDao.list(params); + } + + @Override + public List list(List gridIds) { + Map params = getHashMap(2); + params.put("gridIds", gridIds); + return list(params); + } + + @Override + public List listByRelationId(String relationId) throws SearchException { + if (StringUtils.isBlank(relationId)) { + return new ArrayList<>(); + } + List gridIds = gridRelationService.listGridId(relationId); + if (gridIds.isEmpty()) { + return new ArrayList<>(); + } + List gridDTOs = list(gridIds); + for (GridDTO gridDTO : gridDTOs) { + List gridPointDTOs = gridPointService.list(gridDTO.getGridId()); + gridDTO.setPointArray(gridPointDTOs); + } + return gridDTOs; + } + + @Override + public List listGroupByRelationIds(List relationIds) throws SearchException { + if (relationIds == null || relationIds.size() == 0) { + return new ArrayList<>(); + } + List gridIds = gridRelationService.listGridId(relationIds); + if (gridIds.isEmpty()) { + return new ArrayList<>(); + } + List gridDTOs = list(gridIds); + if (gridDTOs.isEmpty()) { + return gridDTOs; + } + // 聚合后的网格 + List 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 listByRelationIds(List relationIds) throws SearchException { + if (relationIds == null || relationIds.size() == 0) { + return new ArrayList<>(); + } + List gridIds = gridRelationService.listGridId(relationIds); + if (gridIds.isEmpty()) { + return new ArrayList<>(); + } + List gridDTOs = list(gridIds); + if (gridDTOs.isEmpty()) { + return gridDTOs; + } + setGridPoints(gridDTOs); + return gridDTOs; + } + + @Override + public SuccessResultList> listPageByRelationIds(ListPage page, List relationIds) { + if (relationIds == null || relationIds.size() == 0) { + return new SuccessResultList<>(new ArrayList<>(), 1, 0L); + } + List gridIds = gridRelationService.listGridId(relationIds); + if (gridIds.isEmpty()) { + return new SuccessResultList<>(new ArrayList<>(), 1, 0L); + } + PageHelper.startPage(page.getPage(), page.getRows()); + List gridDTOs = list(relationIds); + PageInfo pageInfo = new PageInfo<>(gridDTOs); + return new SuccessResultList<>(gridDTOs, pageInfo.getPageNum(), pageInfo.getTotal()); + } + + + /** + * 设置网格点 + * + * @param gridDTOs + */ + private void setGridPoints(List gridDTOs) { + if (gridDTOs.isEmpty()) { + return; + } + List gridIds = new ArrayList<>(); + for (GridDTO gridDTO : gridDTOs) { + gridIds.add(gridDTO.getGridId()); + } + // 获取所有点 + List gridPointDTOs = gridPointService.list(gridIds); + if (gridPointDTOs.isEmpty()) { + return; + } + // 构建所有点 + for (GridDTO gridDTO : gridDTOs) { + List 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 listGridGroup(List gridDTOs) { + Map gridMap = new HashMap<>(16); + for (GridDTO gridDTO : gridDTOs) { + GridDTO grid = gridMap.get(gridDTO.getGridId()); + if (grid == null) { + grid = gridDTO; + List getRelationIdArray = new ArrayList<>(); + getRelationIdArray.add(gridDTO.getRelationId()); + gridDTO.setRelationIdArray(getRelationIdArray); + gridMap.put(gridDTO.getGridId(), gridDTO); + } + // 合并relationId + grid.getRelationIdArray().add(gridDTO.getRelationId()); + } + List gridGroups = new ArrayList<>(); + for (Map.Entry kv : gridMap.entrySet()) { + GridDTO gridDTO = kv.getValue(); + Collections.sort(gridDTO.getRelationIdArray()); + gridDTO.setRelationId(gridDTO.getRelationIdArray().toString()); + gridGroups.add(gridDTO); + } + return gridGroups; + } + +} diff --git a/module-map/src/main/resources/mybatis/mapper/grid/grid-mapper.xml b/module-map/src/main/resources/mybatis/mapper/grid/grid-mapper.xml new file mode 100644 index 00000000..dc7c5c0b --- /dev/null +++ b/module-map/src/main/resources/mybatis/mapper/grid/grid-mapper.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + 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='网格'; + + + + + 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} + ) + + + + + DELETE FROM + map_grid + WHERE + + grid_id = #{gridId} + + + grid_id IN + + #{gridIds[${index}]} + + + + + + + + + + + + + + \ No newline at end of file diff --git a/module-map/src/main/resources/mybatis/mapper/grid/grid-point-mapper.xml b/module-map/src/main/resources/mybatis/mapper/grid/grid-point-mapper.xml new file mode 100644 index 00000000..e215c11d --- /dev/null +++ b/module-map/src/main/resources/mybatis/mapper/grid/grid-point-mapper.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + 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='网格点'; + + + + + INSERT INTO map_grid_point( + grid_id, + lng, + lat + ) VALUES( + #{gridId}, + #{lng}, + #{lat} + ) + + + + + DELETE FROM + map_grid_point + WHERE + + grid_id = #{gridId} + + + grid_id IN + + #{gridIds[${index}]} + + + + + + + + \ No newline at end of file diff --git a/module-map/src/main/resources/mybatis/mapper/grid/grid-relation-mapper.xml b/module-map/src/main/resources/mybatis/mapper/grid/grid-relation-mapper.xml new file mode 100644 index 00000000..520f0e00 --- /dev/null +++ b/module-map/src/main/resources/mybatis/mapper/grid/grid-relation-mapper.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + 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='网格与关联'; + + + + + INSERT INTO map_grid_relation( + grid_id, + relation_id + ) VALUES( + #{gridId}, + #{relationId} + ) + + + + + DELETE FROM + map_grid_relation + + + grid_id = #{gridId} + + + AND + grid_id IN + + #{gridIds[${index}]} + + + + AND + relation_id = #{relationId} + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0e4c63a6..bab33824 100644 --- a/pom.xml +++ b/pom.xml @@ -35,6 +35,7 @@ module-sms register-wechat module-file-media + module-map pom