Browse Source

[feat]

1、开发部门区域相关功能。
pull/1/head
杨威 4 months ago
parent
commit
7a939e2c8b
  1. 2
      dk-api/api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java
  2. 21
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java
  3. 43
      dk-modules/business/src/main/java/org/dromara/business/controller/BusinessDepartBoundaryController.java
  4. 6
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java
  5. 9
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessDepartBoundary.java
  6. 5
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessGeospatialVectors.java
  7. 5
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessVectorDict.java
  8. 5
      dk-modules/business/src/main/java/org/dromara/business/domain/BusinessVectorDictItem.java
  9. 5
      dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java
  10. 31
      dk-modules/business/src/main/java/org/dromara/business/domain/enums/AlertTypeEnum.java
  11. 7
      dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java
  12. 2
      dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessDepartBoundaryMapper.java
  13. 5
      dk-modules/business/src/main/java/org/dromara/business/service/BusinessAlertStatisticsService.java
  14. 11
      dk-modules/business/src/main/java/org/dromara/business/service/IBusinessDepartBoundaryService.java
  15. 20
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java
  16. 41
      dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessDepartBoundaryServiceImpl.java
  17. 39
      dk-modules/business/src/main/java/org/dromara/business/utils/BatchProcessorUtil.java
  18. 36
      dk-modules/business/src/main/resources/mapper/business/BusinessDepartBoundaryMapper.xml
  19. 4
      dk-modules/business/src/main/resources/mapper/business/BusinessVectorDictMapper.xml
  20. 2
      dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java
  21. 2
      dk-modules/system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java
  22. 2
      dk-modules/system/src/main/java/org/dromara/system/service/ISysDeptService.java
  23. 2
      dk-modules/system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java
  24. 20
      dk-modules/system/src/main/resources/mapper/system/SysDeptMapper.xml
  25. 2
      dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

2
dk-api/api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java

@ -24,6 +24,6 @@ public interface RemoteDeptService {
RemoteDeptVo selectDeptById(Long deptId);
List<Map<String,String>> getNamePathList();
List<Map<String,Object>> getNamePathList();
}

21
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessAlertStatisticsController.java

@ -0,0 +1,21 @@
package org.dromara.business.controller;
import lombok.RequiredArgsConstructor;
import org.dromara.business.service.BusinessAlertStatisticsService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 预警统计相关服务
*/
@RequiredArgsConstructor
@RestController
@RequestMapping("/alert/statistics")
public class BusinessAlertStatisticsController {
private final BusinessAlertStatisticsService statisticsService;
}

43
dk-modules/business/src/main/java/org/dromara/business/controller/BusinessDepartBoundaryController.java

@ -8,9 +8,26 @@ import org.dromara.business.service.IBusinessDepartBoundaryService;
import org.dromara.common.core.domain.R;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.geotools.geometry.jts.JTS;
import org.locationtech.jts.geom.Polygon;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.geotools.data.DataStore;
import org.geotools.data.DataStoreFinder;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.geotools.data.simple.SimpleFeatureIterator;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryFactory;
import org.locationtech.jts.geom.MultiPolygon;
/**
* 部门区域
*/
@ -18,11 +35,12 @@ import org.springframework.web.multipart.MultipartFile;
@RequestMapping("/depart/boundary")
@Slf4j
@RequiredArgsConstructor
public class BusinessDepartBoundaryController {
public class BusinessDepartBoundaryController extends BaseController {
private final IBusinessDepartBoundaryService departBoundaryService;
/**
* 分页查询部门区域列表
* @return
*/
@RequestMapping(value = "/page", method = RequestMethod.GET)
@ -31,19 +49,18 @@ public class BusinessDepartBoundaryController {
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public R<Void> addDepartBoundary(@RequestBody BusinessDepartBoundary departBoundary) {
return toAjax(departBoundaryService.addDepartBoundary(departBoundary));
}
/**
* 解析shp文件
* @return
*/
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public void uploadShpFile(@RequestParam("file") MultipartFile file) {
try {
departBoundaryService.uploadShpFile(file);
R.ok("操作成功!");
} catch (Exception e) {
log.error(e.getMessage(), e);
R.fail("操作失败");
}
public R<Void> uploadShpFile(@RequestParam("file") MultipartFile file) {
return toAjax(departBoundaryService.uploadShpFile(file));
}
/**
@ -53,8 +70,8 @@ public class BusinessDepartBoundaryController {
* @return
*/
@RequestMapping(value = "/update", method = RequestMethod.POST)
public R<BusinessDepartBoundary> updateDepartBoundary(@RequestBody BusinessDepartBoundary departBoundary) {
return departBoundaryService.updateDepartBoundary(departBoundary)?R.ok("编辑成功!"):R.fail("编辑失败!");
public R<Void> updateDepartBoundary(@RequestBody BusinessDepartBoundary departBoundary) {
return toAjax(departBoundaryService.updateDepartBoundary(departBoundary));
}
@ -65,7 +82,7 @@ public class BusinessDepartBoundaryController {
* @return
*/
@RequestMapping(value = "/delete", method = RequestMethod.DELETE)
public R<BusinessDepartBoundary> delete(@RequestParam(name = "id") String id) {
return departBoundaryService.deleteDepartBoundary(id)?R.ok("删除成功!"):R.fail("删除失败!");
public R<Void> deleteDepartBoundary(@RequestParam(name = "id") String id) {
return toAjax(departBoundaryService.deleteDepartBoundary(id));
}
}

6
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessAlert.java

@ -1,5 +1,6 @@
package org.dromara.business.domain;
import org.dromara.business.domain.enums.AlertTypeEnum;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
@ -63,6 +64,11 @@ public class BusinessAlert extends BaseEntity {
*/
private String images;
/**
* 预警类型
*/
private AlertTypeEnum alertType;
/**
* 纬度
*/

9
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessDepartBoundary.java

@ -8,6 +8,8 @@ import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.io.Serial;
/**
* 部门区域边界表
*/
@ -16,11 +18,18 @@ import org.jeecgframework.poi.excel.annotation.Excel;
@TableName("business_depart_boundary")
public class BusinessDepartBoundary extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**ID*/
@TableId(type = IdType.AUTO)
private String id;
/**
* 租户Id
*/
private String tenantId;
/**机构ID*/
private String deptId;
/**机构/部门名称*/

5
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessGeospatialVectors.java

@ -25,6 +25,11 @@ public class BusinessGeospatialVectors {
@TableId(type = IdType.AUTO)
private String id;
/**
* 租户Id
*/
private String tenantId;
// 1. 图形基础属性
private String landCategories; // 几何信息

5
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessVectorDict.java

@ -26,6 +26,11 @@ public class BusinessVectorDict extends BaseEntity {
@TableId(type = IdType.ASSIGN_ID)
private String id;
/**
* 租户Id
*/
private String tenantId;
/**
* 字段名称
*/

5
dk-modules/business/src/main/java/org/dromara/business/domain/BusinessVectorDictItem.java

@ -23,6 +23,11 @@ public class BusinessVectorDictItem extends BaseEntity {
@TableId(type = IdType.ASSIGN_ID)
private String id;
/**
* 租户Id
*/
private String tenantId;
/**
* 字段名称
*/

5
dk-modules/business/src/main/java/org/dromara/business/domain/bo/BusinessAlertBo.java

@ -45,6 +45,11 @@ public class BusinessAlertBo extends BaseEntity {
*/
private String images;
/**
* 预警类型
*/
private String alertType;
/**
* 纬度
*/

31
dk-modules/business/src/main/java/org/dromara/business/domain/enums/AlertTypeEnum.java

@ -0,0 +1,31 @@
package org.dromara.business.domain.enums;
import cn.hutool.core.util.StrUtil;
import lombok.Getter;
import java.util.Arrays;
/**
* 预警类型枚举类
*/
@Getter
public enum AlertTypeEnum {
;
private String code;
private String description;
public static AlertTypeEnum getTypeByCode(String code){
if(StrUtil.isNotEmpty(code)){
return Arrays.stream(values()).filter(p -> StrUtil.equals(p.name(),code.toUpperCase())).findAny().orElse(null);
}
return null;
}
}

7
dk-modules/business/src/main/java/org/dromara/business/domain/vo/BusinessAlertVo.java

@ -5,6 +5,7 @@ import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.business.domain.BusinessAlert;
import org.dromara.business.domain.enums.AlertTypeEnum;
import org.dromara.common.core.enums.BusinessStatusEnum;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
@ -59,6 +60,12 @@ public class BusinessAlertVo implements Serializable {
@ExcelProperty(value = "图片文件")
private String images;
/**
* 预警类型
*/
private String alertType;
/**
* 纬度
*/

2
dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessDepartBoundaryMapper.java

@ -21,4 +21,6 @@ public interface BusinessDepartBoundaryMapper extends BaseMapper<BusinessDepartB
*/
List<BusinessDepartBoundary> queryByDeptId(@Param("deptId") String deptId);
void saveBatchBoundary(@Param("list") List<BusinessDepartBoundary> boundaryList);
}

5
dk-modules/business/src/main/java/org/dromara/business/service/BusinessAlertStatisticsService.java

@ -0,0 +1,5 @@
package org.dromara.business.service;
public interface BusinessAlertStatisticsService {
}

11
dk-modules/business/src/main/java/org/dromara/business/service/IBusinessDepartBoundaryService.java

@ -9,12 +9,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* <p>
* 部门表 服务实现类
* <p>
*
* @Author:Steve
* @Since 2019-01-22
* 部门区域 服务实现类
*/
public interface IBusinessDepartBoundaryService extends IService<BusinessDepartBoundary>{
TableDataInfo<BusinessDepartBoundary> listSysDepartBoundary(PageQuery page, BusinessDepartBoundary departBoundary);
@ -23,9 +18,11 @@ public interface IBusinessDepartBoundaryService extends IService<BusinessDepartB
List<BusinessDepartBoundary> queryByDeptId(String deptId);
void uploadShpFile(MultipartFile file);
boolean uploadShpFile(MultipartFile file);
boolean deleteDepartBoundary(String id);
boolean updateDepartBoundary(BusinessDepartBoundary departBoundary);
boolean addDepartBoundary(BusinessDepartBoundary departBoundary);
}

20
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessAlertStatisticsServiceImpl.java

@ -0,0 +1,20 @@
package org.dromara.business.service.impl;
import lombok.RequiredArgsConstructor;
import org.dromara.business.service.BusinessAlertStatisticsService;
import org.springframework.stereotype.Service;
/**
*
*预警统计Service业务层处理
*/
@RequiredArgsConstructor
@Service
public class BusinessAlertStatisticsServiceImpl implements BusinessAlertStatisticsService {
}

41
dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessDepartBoundaryServiceImpl.java

@ -1,6 +1,7 @@
package org.dromara.business.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
@ -12,6 +13,7 @@ import org.dromara.business.domain.BusinessVectorDict;
import org.dromara.business.mapper.BusinessDepartBoundaryMapper;
import org.dromara.business.service.IBusinessDepartBoundaryService;
import org.dromara.business.service.IBusinessVectorDictService;
import org.dromara.business.utils.BatchProcessorUtil;
import org.dromara.business.utils.ShpAnalysisUtil;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.mybatis.core.page.PageQuery;
@ -58,8 +60,8 @@ public class BusinessDepartBoundaryServiceImpl extends ServiceImpl<BusinessDepar
}
@Override
public List<BusinessDepartBoundary> listSysDepartBoundaryGeomFromText(BusinessDepartBoundary sysDepartBoundary) {
return baseMapper.listSysDepartBoundaryGeomFromText(sysDepartBoundary);
public List<BusinessDepartBoundary> listSysDepartBoundaryGeomFromText(BusinessDepartBoundary departBoundary) {
return baseMapper.listSysDepartBoundaryGeomFromText(departBoundary);
}
@Override
@ -69,7 +71,7 @@ public class BusinessDepartBoundaryServiceImpl extends ServiceImpl<BusinessDepar
@Override
@Transactional(rollbackFor = Exception.class)
public void uploadShpFile(MultipartFile file) {
public boolean uploadShpFile(MultipartFile file) {
List<BusinessGeospatialVectors> geospatialVectorsList = new ArrayList<>();
try {
//1、首先调用解析工具拿到解析的字段集合
@ -135,10 +137,22 @@ public class BusinessDepartBoundaryServiceImpl extends ServiceImpl<BusinessDepar
//6、生成新的对象集合存储数据表中
List<BusinessDepartBoundary> boundaryList = buildBusinessDepartBoundary(geospatialVectorsList);
// 分批处理
int startIndex = 0; // 从第 0 条开始
int batchSize = 2000; // 每批处理 2000 条
boolean flag = BatchProcessorUtil.processBatches(boundaryList, batchSize, startIndex, batch -> {
//批量新增部门区域数据
this.saveBatch(boundaryList);
this.baseMapper.saveBatchBoundary(batch);
});
if (flag) {
System.out.println("所有数据处理完成!");
}
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
@ -151,6 +165,11 @@ public class BusinessDepartBoundaryServiceImpl extends ServiceImpl<BusinessDepar
return this.updateById(departBoundary);
}
@Override
public boolean addDepartBoundary(BusinessDepartBoundary departBoundary) {
return this.saveOrUpdate(departBoundary);
}
@Override
public boolean deleteDepartBoundary(String id) {
BusinessDepartBoundary departBoundary = this.baseMapper.selectById(id);
@ -171,16 +190,20 @@ public class BusinessDepartBoundaryServiceImpl extends ServiceImpl<BusinessDepar
private List<BusinessDepartBoundary> buildBusinessDepartBoundary(List<BusinessGeospatialVectors> geospatialVectorsList) {
List<BusinessDepartBoundary> resultList = new ArrayList<>();
List<Map<String,String>> namePathList = remoteDeptService.getNamePathList();
Map<String, List<Map<String, String>>> namePathMap = namePathList.stream().collect(Collectors.groupingBy(item -> item.get("shpNo")));
List<Map<String,Object>> namePathList = remoteDeptService.getNamePathList();
Map<String, List<Map<String, Object>>> namePathMap = namePathList.stream()
.filter(item -> item.containsKey("shpNo"))
.collect(Collectors.groupingBy(item -> item.get("shpNo").toString()));
geospatialVectorsList.forEach(param->{
BusinessDepartBoundary businessDepartBoundary = new BusinessDepartBoundary();
businessDepartBoundary.setBoundary(param.getLandCategories());
businessDepartBoundary.setDeptName(param.getLandUnitName());
businessDepartBoundary.setShpNo(param.getLandUnitCode());
if (ObjectUtil.isNotEmpty(namePathMap.get(param.getLandUnitCode()))){
businessDepartBoundary.setDeptId(namePathMap.get(param.getLandUnitCode()).get(0).get("deptId"));
businessDepartBoundary.setCommunityName(namePathMap.get(param.getLandUnitCode()).get(0).get("namePath"));
businessDepartBoundary.setDeptName(namePathMap.get(param.getLandUnitCode()).get(0).get("deptName") + "");
businessDepartBoundary.setDeptId(namePathMap.get(param.getLandUnitCode()).get(0).get("deptId") + "");
businessDepartBoundary.setCommunityName(namePathMap.get(param.getLandUnitCode()).get(0).get("namePath") + "");
resultList.add(businessDepartBoundary);
}

39
dk-modules/business/src/main/java/org/dromara/business/utils/BatchProcessorUtil.java

@ -0,0 +1,39 @@
package org.dromara.business.utils;
import java.util.List;
import java.util.function.Consumer;
/**
* 分批处理工具类
*/
public class BatchProcessorUtil {
/**
* 分批处理数据
*
* @param dataList 数据集合
* @param batchSize 每批处理的数据量
* @param startIndex 起始位置
* @param batchHandler 每批数据的处理逻辑
* @return 下一次的起始位置
*/
public static <T> boolean processBatches(List<T> dataList, int batchSize, int startIndex, Consumer<List<T>> batchHandler) {
if (dataList == null || dataList.isEmpty()) {
return true; // 数据为空,直接返回当前起始位置
}
int totalSize = dataList.size();
while (startIndex < totalSize) {
int endIndex = Math.min(startIndex + batchSize, totalSize);
List<T> batch = dataList.subList(startIndex, endIndex);
// 处理当前批次的数据
batchHandler.accept(batch);
// 更新起始位置
startIndex = endIndex;
}
return startIndex >= totalSize; // 返回下一次的起始位置
}
}

36
dk-modules/business/src/main/resources/mapper/business/BusinessDepartBoundaryMapper.xml

@ -75,4 +75,40 @@
WHERE d.id = #{deptId}
</select>
<insert id="saveBatchBoundary">
INSERT INTO business_depart_boundary (
dept_id,
dept_name,
community_name,
boundary,
perimeter,
area,
area_mu,
shp_no,
village_type,
create_by,
create_time,
update_by,
update_time,
create_dept
)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.deptId},
#{item.deptName},
#{item.communityName},
ST_GeomFromText(#{item.boundary}),
#{item.perimeter},
#{item.area},
#{item.areaMu},
#{item.shpNo},
#{item.villageType},
#{item.createBy},
#{item.createTime},
#{item.updateBy},
#{item.updateTime},
#{item.createDept})
</foreach>
</insert>
</mapper>

4
dk-modules/business/src/main/resources/mapper/business/BusinessVectorDictMapper.xml

@ -20,9 +20,9 @@
m.id AS dictItemId,
m.item_value AS mappingValue
FROM
vector_field_dict f
business_vector_dict f
LEFT JOIN
vector_field_dict_item m ON f.id = m.dict_id
business_vector_dict_item m ON f.id = m.dict_id
</select>
</mapper>

2
dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java

@ -50,7 +50,7 @@ public class RemoteDeptServiceImpl implements RemoteDeptService {
}
@Override
public List<Map<String,String>> getNamePathList() {
public List<Map<String,Object>> getNamePathList() {
return sysDeptService.getNamePathList();
}
}

2
dk-modules/system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java

@ -70,6 +70,6 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDept, SysDeptVo> {
})
Page<SysDeptVo> selectPageDeptList(@Param("page") Page<SysDeptVo> page, @Param(Constants.WRAPPER) Wrapper<SysDept> queryWrapper);
List<Map<String,String>> getNamePathList();
List<Map<String,Object>> getNamePathList();
}

2
dk-modules/system/src/main/java/org/dromara/system/service/ISysDeptService.java

@ -144,6 +144,6 @@ public interface ISysDeptService {
* 查询每个部门的所属的部门全路径
* @return
*/
List<Map<String,String>> getNamePathList();
List<Map<String,Object>> getNamePathList();
}

2
dk-modules/system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java

@ -357,7 +357,7 @@ public class SysDeptServiceImpl implements ISysDeptService {
@Override
public List<Map<String,String>> getNamePathList() {
public List<Map<String,Object>> getNamePathList() {
return baseMapper.getNamePathList();
}

20
dk-modules/system/src/main/resources/mapper/system/SysDeptMapper.xml

@ -48,21 +48,25 @@
WITH RECURSIVE DeptPath AS (
-- 基础查询:选择根部门(没有父部门的部门)
SELECT
dept_id deptId,
CAST(dept_name AS CHAR(500)) AS namePath,
shp_no shpNo
sd.dept_id deptId,
sd.dept_name deptName,
CAST(sd.dept_name AS CHAR(500)) AS namePath,
sd.shp_no shpNo,
sd.tenant_id
FROM
sys_dept
sys_dept sd
WHERE
parent_id = 0
sd.parent_id = 0
UNION ALL
-- 递归查询:选择子部门并构建路径
SELECT
d.dept_id deptId,
d.dept_name deptName,
CONCAT(dp.namePath, '', d.dept_name) AS namePath,
shp_no shpNo
d.shp_no shpNo,
d.tenant_id
FROM
sys_dept d
INNER JOIN
@ -71,7 +75,9 @@
SELECT
deptId,
namePath,
shpNo
shpNo,
deptName,
tenant_id
FROM
DeptPath
ORDER BY

2
dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

@ -146,7 +146,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
dto.setTaskId(taskList.get(0).getId());
//创建任务
// executeTask(taskList.get(0).getId());
executeTask(taskList.get(0).getId());
return dto;
}

Loading…
Cancel
Save