/* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.grid.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springblade.common.utils.NodeTreeUtil; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.modules.doorplateAddress.entity.DoorplateAddressEntity; import org.springblade.modules.doorplateAddress.service.IDoorplateAddressService; import org.springblade.modules.grid.entity.GridEntity; import org.springblade.modules.grid.entity.GridRangeEntity; import org.springblade.modules.grid.entity.GridmanEntity; import org.springblade.modules.grid.excel.GridExcel; import org.springblade.modules.grid.mapper.GridMapper; import org.springblade.modules.grid.service.IGridRangeService; import org.springblade.modules.grid.service.IGridService; import org.springblade.modules.grid.vo.GridVO; import org.springblade.modules.place.vo.PlaceVO; import org.springblade.modules.system.entity.Dept; import org.springblade.modules.system.entity.Region; import org.springblade.modules.system.service.IDeptService; import org.springblade.modules.system.service.IRegionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; /** * 网格表 服务实现类 * * @author BladeX * @since 2023-10-28 */ @Service public class GridServiceImpl extends ServiceImpl implements IGridService { @Autowired private IRegionService regionService; @Autowired private IDoorplateAddressService doorplateAddressService; @Autowired private IGridRangeService gridRangeService; @Autowired private IDeptService deptService; @Override public IPage selectGridPage(IPage page, GridVO grid) { return page.setRecords(baseMapper.selectGridPage(page, grid)); } /** * 网格数导入 * @param data * @param isCovered */ @Override public void importGrid(List data, Boolean isCovered) { List list = new ArrayList<>(); // 遍历 for (GridExcel gridExcel : data) { // 取出名称分隔 String[] split = gridExcel.getGridName().split("居民委员会"); GridEntity gridEntity = new GridEntity(); String communityName = split[0] + "居民委员会"; gridEntity.setCommunityName(communityName); // 通过社区名称查询对应的社区编号 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("name",split[0]); Region region = regionService.getOne(wrapper); if (null!=region){ gridEntity.setCommunityCode(region.getCode()); } // 比对网格是否存在,如果已存在则更新,否则则新增 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("is_deleted",0) .eq("grid_name",split[1]) .eq("community_code",region.getCode()); GridEntity one = getOne(queryWrapper); if (null!=one){ one.setGridCode(gridExcel.getGridCode()); one.setGridName(split[1]); one.setGeom(gridExcel.getGeom()); one.setUpdateUser(AuthUtil.getUserId()); one.setUpdateTime(new Date()); // 更新 updateById(one); }else { // 设置网格数据 gridEntity.setGridCode(gridExcel.getGridCode()); gridEntity.setGridName(split[1]); gridEntity.setGeom(gridExcel.getGeom()); gridEntity.setCreateUser(AuthUtil.getUserId()); gridEntity.setCreateTime(new Date()); gridEntity.setUpdateUser(AuthUtil.getUserId()); gridEntity.setUpdateTime(new Date()); list.add(gridEntity); } } // 批量导入 saveBatch(list); } /** * 根据地址编号查询网格数据 * @param houseCode * @return */ @Override public GridVO getGridDetailByHouseCode(String houseCode) { return baseMapper.getGridDetailByHouseCode(houseCode); } /** * 根据用户id(网格员)查询对应的房屋地址code * @param userId * @return */ @Override public List getAddressCodeListByUserId(Long userId) { return baseMapper.getAddressCodeListByUserId(userId); } /** * 空间分析 mysql 5.7 */ @Override @Transactional(rollbackFor = Exception.class) public Object spatialAnalysis() { // 按社区 String name = null; // String name = "茶山路社区居民委员会"; //查询社区信息 List doorplateAddressEntities = doorplateAddressService.getAllDoorplateAddress(name); //遍历 for (DoorplateAddressEntity doorplateAddressEntity : doorplateAddressEntities) { //点坐标解析 String point = "'POINT(" + doorplateAddressEntity.getX84() + " " + doorplateAddressEntity.getY84() +")'"; // String point = "'POINT(" + villageInfoExcel.getLatitude() + " " + villageInfoExcel.getLongitude() +")'"; GridEntity gridEntity = baseMapper.spatialAnalysis(point); if (null!=gridEntity){ QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("grid_id",gridEntity.getId()).eq("house_code",doorplateAddressEntity.getAddressCode()); GridRangeEntity one = gridRangeService.getOne(queryWrapper); if (null==one) { GridRangeEntity gridRangeEntity = new GridRangeEntity(); gridRangeEntity.setGridId(gridEntity.getId()); gridRangeEntity.setHouseCode(doorplateAddressEntity.getAddressCode()); gridRangeEntity.setDistrictCode(doorplateAddressEntity.getAoiCode()); gridRangeEntity.setDistrictName(doorplateAddressEntity.getAoiName()); // 保存 gridRangeService.save(gridRangeEntity); } } } return null; } /** * 根据参数查询网格数据 * @param place * @return */ @Override public GridVO getGridDetailByParam(PlaceVO place) { return baseMapper.getGridDetailByParam(place); } /** * 网格表 自定义详情 * @param grid * @return */ @Override public GridVO getGridDetail(GridVO grid) { return baseMapper.getGridDetail(grid); } /** * 网格表 自定义新增或修改 */ @Override @Transactional(rollbackFor = Exception.class) public boolean saveOrUpdateGrid(GridEntity grid) { boolean flag = false; // 先查询当前网格社区对应的机构id QueryWrapper regionWrapper = new QueryWrapper<>(); regionWrapper.eq("code",grid.getCommunityCode()); Region region = regionService.getOne(regionWrapper); // 查询父机构 QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("dept_name",region.getName()) .eq("is_deleted",0); Dept dept = deptService.getOne(wrapper); // 查询当前网格在机构中是否存在,存在不做操作,否则则新增 QueryWrapper wrapperChild = new QueryWrapper<>(); wrapperChild.eq("dept_name",grid.getGridName()) .eq("is_deleted",0) .eq("id",dept.getId()); Dept deptChild = deptService.getOne(wrapperChild); if (null==deptChild){ Dept deptInfo = new Dept(); deptInfo.setParentId(dept.getId()); deptInfo.setFullName(grid.getGridName()); deptInfo.setDeptName(grid.getGridName()); deptInfo.setDeptCategory(1); deptInfo.setTenantId("000000"); // 新增 deptService.save(deptInfo); // 查询网格是否已存在(社区编号-网格名称),已存在更新,不存在插入新的 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("grid_name",grid.getGridName()) .eq("is_deleted",0) .eq("community_code",grid.getCommunityCode()); GridEntity one = getOne(queryWrapper); if (null!=one){ grid.setId(one.getId()); grid.setDeptId(deptInfo.getId()); if (null!= grid.getGeom() && grid.getGeom().equals("")){ grid.setGeom(null); } // 更新 flag = updateById(grid); }else { grid.setDeptId(deptInfo.getId()); grid.setGeom(null); // 插入 flag = save(grid); } } return flag; } /** * 网格数据同步处理 */ @Override public Object asyncGridDept() { List list = baseMapper.selectGridAll(); for (GridEntity gridEntity : list) { saveOrUpdateGrid(gridEntity); } return null; } /** * 网格树 * * @param grid * @return */ @Override public Object getGridTree(GridVO grid) { return NodeTreeUtil.getStringNodeTree(baseMapper.getGridTree()); } @Override public Object gridInfoByHouseCode(String houseCode) { Map objectObjectHashMap = new HashMap<>(); List gridmanEntities = baseMapper.gridInfo(houseCode); Integer id = gridmanEntities.get(0).getId(); objectObjectHashMap.put("grid", gridmanEntities); List result = baseMapper.gridAoiName(id); objectObjectHashMap.put("doorplateAddress", result); return objectObjectHashMap; } /** * 网格集合查询 * @param grid * @return */ @Override public Object getGridList(GridVO grid) { return baseMapper.getGridList(grid); } }