diff --git a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java index cc90817..01098ac 100644 --- a/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java +++ b/dk-api/api-system/src/main/java/org/dromara/system/api/RemoteDeptService.java @@ -3,6 +3,7 @@ package org.dromara.system.api; import org.dromara.system.api.domain.vo.RemoteDeptVo; import java.util.List; +import java.util.Map; /** * 部门服务 @@ -22,4 +23,7 @@ public interface RemoteDeptService { List selectDeptsByList(); RemoteDeptVo selectDeptById(Long deptId); + + List> getNamePathList(); + } diff --git a/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessDepartBoundaryController.java b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessDepartBoundaryController.java new file mode 100644 index 0000000..fb07fe0 --- /dev/null +++ b/dk-modules/business/src/main/java/org/dromara/business/controller/BusinessDepartBoundaryController.java @@ -0,0 +1,71 @@ +package org.dromara.business.controller; + + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.business.domain.BusinessDepartBoundary; +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.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +/** + * 部门区域 + */ +@RestController +@RequestMapping("/depart/boundary") +@Slf4j +@RequiredArgsConstructor +public class BusinessDepartBoundaryController { + + private final IBusinessDepartBoundaryService departBoundaryService; + + /** + * @return + */ + @RequestMapping(value = "/page", method = RequestMethod.GET) + public TableDataInfo queryPageList(BusinessDepartBoundary departBoundary, PageQuery pageQuery) { + return departBoundaryService.listSysDepartBoundary(pageQuery, 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("操作失败"); + } + } + + /** + * 编辑 + * + * @param + * @return + */ + @RequestMapping(value = "/update", method = RequestMethod.POST) + public R updateDepartBoundary(@RequestBody BusinessDepartBoundary departBoundary) { + return departBoundaryService.updateDepartBoundary(departBoundary)?R.ok("编辑成功!"):R.fail("编辑失败!"); + } + + + /** + * 通过id删除 + * + * @param id + * @return + */ + @RequestMapping(value = "/delete", method = RequestMethod.DELETE) + public R delete(@RequestParam(name = "id") String id) { + return departBoundaryService.deleteDepartBoundary(id)?R.ok("删除成功!"):R.fail("删除失败!"); + } +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessDepartBoundary.java b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessDepartBoundary.java new file mode 100644 index 0000000..6bff413 --- /dev/null +++ b/dk-modules/business/src/main/java/org/dromara/business/domain/BusinessDepartBoundary.java @@ -0,0 +1,66 @@ +package org.dromara.business.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * 部门区域边界表 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("business_depart_boundary") +public class BusinessDepartBoundary extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /**ID*/ + @TableId(type = IdType.AUTO) + private String id; + /**机构ID*/ + private String deptId; + /**机构/部门名称*/ + @Excel(name="机构/部门名称",width=15) + private String deptName; + + /**是否显示0显示,1不显示*/ + private Integer type; + /**边界*/ + + private String communityName; + /**边界*/ + private String boundary; + + /** + * 周长 + */ + private Double perimeter; + + /** + * 面积平方公里 + */ + private Double area; + + /** + * 面积亩 + */ + private Double areaMu; + + /** + * 编号 + */ + private String shpNo; + + /** + * 0不为村级别,1为村级别 + */ + private Integer villageType; + + /**删除状态(0,正常,1已删除)*/ + private String delFlag; + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessDepartBoundaryMapper.java b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessDepartBoundaryMapper.java new file mode 100644 index 0000000..f2e3c55 --- /dev/null +++ b/dk-modules/business/src/main/java/org/dromara/business/mapper/BusinessDepartBoundaryMapper.java @@ -0,0 +1,24 @@ +package org.dromara.business.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.business.domain.BusinessDepartBoundary; + +import java.util.List; + +/** + * 部门 Mapper 接口 + */ +public interface BusinessDepartBoundaryMapper extends BaseMapper { + Page listSysDepartBoundary(Page page,@Param("condition") BusinessDepartBoundary sysDepartBoundary); + + List listSysDepartBoundaryGeomFromText(@Param("condition") BusinessDepartBoundary sysDepartBoundary); + /** + * 通过部门编码获取部门边界数据 + * @param deptId 部门编码 + * @return String + */ + List queryByDeptId(@Param("deptId") String deptId); + +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessDepartBoundaryService.java b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessDepartBoundaryService.java new file mode 100644 index 0000000..cc2e20c --- /dev/null +++ b/dk-modules/business/src/main/java/org/dromara/business/service/IBusinessDepartBoundaryService.java @@ -0,0 +1,31 @@ +package org.dromara.business.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.business.domain.BusinessDepartBoundary; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; + +/** + *

+ * 部门表 服务实现类 + *

+ * + * @Author:Steve + * @Since: 2019-01-22 + */ +public interface IBusinessDepartBoundaryService extends IService{ + TableDataInfo listSysDepartBoundary(PageQuery page, BusinessDepartBoundary departBoundary); + + List listSysDepartBoundaryGeomFromText(BusinessDepartBoundary departBoundary); + + List queryByDeptId(String deptId); + + void uploadShpFile(MultipartFile file); + + boolean deleteDepartBoundary(String id); + + boolean updateDepartBoundary(BusinessDepartBoundary departBoundary); +} diff --git a/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessDepartBoundaryServiceImpl.java b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessDepartBoundaryServiceImpl.java new file mode 100644 index 0000000..d47c88c --- /dev/null +++ b/dk-modules/business/src/main/java/org/dromara/business/service/impl/BusinessDepartBoundaryServiceImpl.java @@ -0,0 +1,198 @@ +package org.dromara.business.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.business.domain.BusinessDepartBoundary; +import org.dromara.business.domain.BusinessGeospatialVectors; +import org.dromara.business.domain.BusinessPatrolAreas; +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.ShpAnalysisUtil; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.system.api.RemoteDeptService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.datasource.DataSourceUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; + +import javax.sql.DataSource; +import java.io.InputStream; +import java.lang.reflect.Method; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 部门区域 + */ +@Service +@RequiredArgsConstructor +public class BusinessDepartBoundaryServiceImpl extends ServiceImpl implements IBusinessDepartBoundaryService { + + + private final IBusinessVectorDictService vectorDictService; + + @DubboReference + RemoteDeptService remoteDeptService; + + @Override + public TableDataInfo listSysDepartBoundary(PageQuery pageQuery, BusinessDepartBoundary departBoundary) { + Page page = baseMapper.listSysDepartBoundary(pageQuery.build(),departBoundary); + + return TableDataInfo.build(page); + + } + + @Override + public List listSysDepartBoundaryGeomFromText(BusinessDepartBoundary sysDepartBoundary) { + return baseMapper.listSysDepartBoundaryGeomFromText(sysDepartBoundary); + } + + @Override + public List queryByDeptId(String deptId) { + return baseMapper.queryByDeptId(deptId); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void uploadShpFile(MultipartFile file) { + List geospatialVectorsList = new ArrayList<>(); + try { + //1、首先调用解析工具拿到解析的字段集合 + InputStream inputStream = file.getInputStream(); + List> mapList = ShpAnalysisUtil.analysisShpFile(inputStream); + + // 3. 构建字典map + List fieldsInfoList = vectorDictService.listVectorField(); + + Map> dictMap = fieldsInfoList + .stream() + .collect(Collectors.toMap( + BusinessVectorDict::getDictCode, + v -> v.getFieldMappingsList().stream() + .map(mapping -> mapping.getItemValue().toLowerCase()) // 转小写 + .collect(Collectors.toList()) + )); + + // 4. 遍历 mapList,替换映射关系并只保留有效条目 + List> resultList = mapList.stream() + .map(originalMap -> originalMap.entrySet().stream() + .filter(entry -> { + String keyLower = entry.getKey().toLowerCase(); // 将 mapList 中的 key 转换为小写 + // 遍历 dictMap 的所有 List,检查其中是否包含该 key + return dictMap.values().stream() + .anyMatch(list -> list.contains(keyLower)); // 判断 dictMap 中的 List 是否包含该 key + }) + .collect(Collectors.toMap( + entry -> { + // 根据匹配的 key 查找 dictMap 中对应的 key + return dictMap.entrySet().stream() + .filter(mapEntry -> mapEntry.getValue().contains(entry.getKey().toLowerCase())) + .map(Map.Entry::getKey) + .findFirst() + .orElse(""); // 如果没有匹配到,则返回空字符串 + }, + Map.Entry::getValue + )) + ) + .filter(transformedMap -> !transformedMap.isEmpty()) // 过滤空的 Map + .collect(Collectors.toList()); + + + // 5. 通过反射设置 GeospatialVectors 对象的属性 + for (Map transformedMap : resultList) { + BusinessGeospatialVectors geoVector = new BusinessGeospatialVectors(); + + transformedMap.forEach((key, value) -> { + try { + // 尝试通过反射找到相应的Setter方法,并调用 + Method setterMethod = BusinessGeospatialVectors.class.getMethod("set" + capitalizeFirstLetter(key), String.class); + + setterMethod.invoke(geoVector, value); + } catch (Exception e) { + e.printStackTrace(); + } + }); + + geoVector.setCreateTime(new Date()); + geospatialVectorsList.add(geoVector); + } + + //6、生成新的对象集合存储数据表中 + List boundaryList = buildBusinessDepartBoundary(geospatialVectorsList); + + //批量新增部门区域数据 + this.saveBatch(boundaryList); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean updateDepartBoundary(BusinessDepartBoundary departBoundary) { + if (ObjectUtil.isEmpty(departBoundary.getId())) { + throw new ServiceException("【id】参数为空"); + } + + return this.updateById(departBoundary); + } + + @Override + public boolean deleteDepartBoundary(String id) { + BusinessDepartBoundary departBoundary = this.baseMapper.selectById(id); + + if (ObjectUtil.isEmpty(departBoundary)) { + throw new ServiceException("实体不存在!"); + } + + return this.baseMapper.deleteById(departBoundary.getId())>0; + } + + + /** + * 根据解析的shp文件数据,构建部门区域 + * @param geospatialVectorsList + * @return + */ + private List buildBusinessDepartBoundary(List geospatialVectorsList) { + List resultList = new ArrayList<>(); + + List> namePathList = remoteDeptService.getNamePathList(); + Map>> namePathMap = namePathList.stream().collect(Collectors.groupingBy(item -> item.get("shpNo"))); + + geospatialVectorsList.forEach(param->{ + BusinessDepartBoundary businessDepartBoundary = new BusinessDepartBoundary(); + businessDepartBoundary.setBoundary(param.getLandCategories()); + businessDepartBoundary.setDeptName(param.getLandUnitName()); + 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")); + + resultList.add(businessDepartBoundary); + } + }); + return resultList; + } + + + private static String capitalizeFirstLetter(String str) { + if (str == null || str.isEmpty()) { + return str; + } + return str.substring(0, 1).toUpperCase() + str.substring(1); + } +} diff --git a/dk-modules/business/src/main/resources/mapper/business/BusinessDepartBoundaryMapper.xml b/dk-modules/business/src/main/resources/mapper/business/BusinessDepartBoundaryMapper.xml new file mode 100644 index 0000000..9284a14 --- /dev/null +++ b/dk-modules/business/src/main/resources/mapper/business/BusinessDepartBoundaryMapper.xml @@ -0,0 +1,78 @@ + + + + + + + + + + + + diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/SysDept.java b/dk-modules/system/src/main/java/org/dromara/system/domain/SysDept.java index b54dd33..50d5e7b 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/domain/SysDept.java +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/SysDept.java @@ -1,5 +1,6 @@ package org.dromara.system.domain; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; @@ -81,4 +82,9 @@ public class SysDept extends TenantEntity { */ private String ancestors; + /** + * 边界编码 + */ + private String shpNo; + } diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysDeptBo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysDeptBo.java index 5f64d6f..7ec0687 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysDeptBo.java +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/bo/SysDeptBo.java @@ -73,4 +73,9 @@ public class SysDeptBo extends BaseEntity { */ private String status; + /** + * 边界编码 + */ + private String shpNo; + } diff --git a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java index 098b865..722290f 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java +++ b/dk-modules/system/src/main/java/org/dromara/system/domain/vo/SysDeptVo.java @@ -36,6 +36,11 @@ public class SysDeptVo implements Serializable { */ private Long parentId; + /** + * 边界编码 + */ + private String shpNo; + /** * 父部门名称 */ diff --git a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java index 588735d..9bae932 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/dubbo/RemoteDeptServiceImpl.java @@ -10,6 +10,7 @@ import org.apache.dubbo.config.annotation.DubboService; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Map; /** * 部门服务 @@ -47,4 +48,9 @@ public class RemoteDeptServiceImpl implements RemoteDeptService { SysDeptVo sysDeptVo = sysDeptService.selectDeptById(deptId); return BeanUtil.copyProperties(sysDeptVo, RemoteDeptVo.class); } + + @Override + public List> getNamePathList() { + return sysDeptService.getNamePathList(); + } } diff --git a/dk-modules/system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java index 90982d3..0ab593c 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java +++ b/dk-modules/system/src/main/java/org/dromara/system/mapper/SysDeptMapper.java @@ -13,6 +13,7 @@ import org.dromara.system.domain.vo.SysDeptVo; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** * 部门管理 数据层 @@ -69,4 +70,6 @@ public interface SysDeptMapper extends BaseMapperPlus { }) Page selectPageDeptList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + List> getNamePathList(); + } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/ISysDeptService.java b/dk-modules/system/src/main/java/org/dromara/system/service/ISysDeptService.java index b3a2afe..c3df4b8 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/ISysDeptService.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/ISysDeptService.java @@ -5,6 +5,7 @@ import org.dromara.system.domain.bo.SysDeptBo; import org.dromara.system.domain.vo.SysDeptVo; import java.util.List; +import java.util.Map; /** * 部门管理 服务层 @@ -138,4 +139,11 @@ public interface ISysDeptService { * @return 部门列表 */ List selectDeptsSimple(); + + /** + * 查询每个部门的所属的部门全路径 + * @return + */ + List> getNamePathList(); + } diff --git a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java index 262dfd5..1042309 100644 --- a/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java +++ b/dk-modules/system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java @@ -35,6 +35,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; /** * 部门管理 服务实现 @@ -354,4 +355,10 @@ public class SysDeptServiceImpl implements ISysDeptService { .eq(SysDept::getStatus, SystemConstants.NORMAL)); } + + @Override + public List> getNamePathList() { + return baseMapper.getNamePathList(); + } + } diff --git a/dk-modules/system/src/main/resources/mapper/system/SysDeptMapper.xml b/dk-modules/system/src/main/resources/mapper/system/SysDeptMapper.xml index e400192..9e2a94e 100644 --- a/dk-modules/system/src/main/resources/mapper/system/SysDeptMapper.xml +++ b/dk-modules/system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -44,4 +44,38 @@ from sys_dept ${ew.getCustomSqlSegment} + + diff --git a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 40414e5..22f3cbc 100644 --- a/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/dk-modules/workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -725,12 +725,12 @@ public class FlwTaskServiceImpl implements IFlwTaskService { * 初始化流程任务 * @param taskId */ - public void executeTask(Long taskId) { + public boolean executeTask(Long taskId) { CompleteTaskBo completeTaskBo = new CompleteTaskBo(); completeTaskBo.setTaskId(taskId); completeTaskBo.setMessageType(List.of(MessageTypeEnum.SYSTEM_MESSAGE.getCode())); IFlwTaskService service = applicationContext.getBean(IFlwTaskService.class); - service.completeTask(completeTaskBo); + return service.completeTask(completeTaskBo); } }