From 5a479af1300c6900809e9d2bd7d17128972810cb Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Mon, 04 Dec 2023 18:14:22 +0800
Subject: [PATCH] 楼栋排序问题,网格查询修改
---
src/main/java/org/springblade/modules/grid/service/impl/GridServiceImpl.java | 32 ++++++++--
src/main/java/org/springblade/modules/grid/excel/GridExcel.java | 5 +
src/main/java/org/springblade/common/utils/ComplexNumberStringComparator.java | 41 +++++++++++++
src/main/java/org/springblade/modules/doorplateAddress/service/impl/DoorplateAddressServiceImpl.java | 33 ++++++++--
src/main/java/org/springblade/modules/grid/entity/GridEntity.java | 10 +-
5 files changed, 102 insertions(+), 19 deletions(-)
diff --git a/src/main/java/org/springblade/common/utils/ComplexNumberStringComparator.java b/src/main/java/org/springblade/common/utils/ComplexNumberStringComparator.java
new file mode 100644
index 0000000..2542563
--- /dev/null
+++ b/src/main/java/org/springblade/common/utils/ComplexNumberStringComparator.java
@@ -0,0 +1,41 @@
+package org.springblade.common.utils;
+
+public class ComplexNumberStringComparator{
+
+ public static int compare(String s1, String s2) {
+ int i1 = 0, i2 = 0;
+ while (i1 < s1.length() && i2 < s2.length()) {
+ char c1 = s1.charAt(i1);
+ char c2 = s1.charAt(i2);
+ if (Character.isDigit(c1) && Character.isDigit(c2)) {
+ //比较数字大小
+ int num1 = getNumber(s1, i1);
+ int num2 = getNumber(s2, i2);
+ if (num1 != num2) {
+ return Integer.compare(num1, num2);
+ }
+ //相同数字时继续比较下一位
+ i1 += Integer.toString(num1).length();
+ i2 += Integer.toString(num2).length();
+ } else {
+ //普通字符按照字典排序
+ if (c1 != c2) {
+ return Character.compare(c1, c2);
+ }
+ i1++;
+ i2++;
+ }
+ }
+ //如果前缀相同,则长度短的字符串排在前面
+ return Integer.compare(s1.length(), s2.length());
+ }
+
+ private static int getNumber(String s, int start) {
+ int end = start;
+ while (end < s.length() && Character.isDigit(s.charAt(end))) {
+ end++;
+ }
+ return Integer.parseInt(s.substring(start, end));
+ }
+
+}
diff --git a/src/main/java/org/springblade/modules/doorplateAddress/service/impl/DoorplateAddressServiceImpl.java b/src/main/java/org/springblade/modules/doorplateAddress/service/impl/DoorplateAddressServiceImpl.java
index 5f54f07..d86a864 100644
--- a/src/main/java/org/springblade/modules/doorplateAddress/service/impl/DoorplateAddressServiceImpl.java
+++ b/src/main/java/org/springblade/modules/doorplateAddress/service/impl/DoorplateAddressServiceImpl.java
@@ -24,6 +24,7 @@
import org.apache.logging.log4j.util.Strings;
import org.springblade.common.constant.DictConstant;
import org.springblade.common.node.TreeStringNode;
+import org.springblade.common.utils.ComplexNumberStringComparator;
import org.springblade.common.utils.NodeTreeUtil;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.modules.category.dto.CategoryLabelDTO;
@@ -37,7 +38,9 @@
import org.springblade.modules.doorplateAddress.vo.DoorplateAddressVOTree;
import org.springblade.modules.doorplateAddress.vo.FuncNode;
import org.springblade.modules.grid.entity.GridEntity;
+import org.springblade.modules.grid.entity.GridmanEntity;
import org.springblade.modules.grid.service.IGridService;
+import org.springblade.modules.grid.service.IGridmanService;
import org.springblade.modules.house.entity.HouseEntity;
import org.springblade.modules.house.service.IHouseRentalService;
import org.springblade.modules.house.service.IHouseService;
@@ -47,6 +50,8 @@
import org.springblade.modules.house.vo.HouseholdVO;
import org.springblade.modules.place.entity.PlaceEntity;
import org.springblade.modules.place.service.IPlaceService;
+import org.springblade.modules.system.entity.Region;
+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;
@@ -77,6 +82,12 @@
@Autowired
private IGridService gridService;
+
+ @Autowired
+ private IGridmanService gridmanService;
+
+ @Autowired
+ private IRegionService regionService;
@Autowired
private IDistrictService districtService;
@@ -236,14 +247,17 @@
*/
private void getGridInfoByGridman(HouseParam houseParam) {
if (houseParam.getRoleName().equals("网格员")) {
- QueryWrapper<GridEntity> wrapper = new QueryWrapper<>();
+ QueryWrapper<GridmanEntity> wrapper = new QueryWrapper<>();
wrapper.eq("is_deleted", 0)
.eq("user_id", AuthUtil.getUserId());
- List<GridEntity> list = gridService.list(wrapper);
+ List<GridmanEntity> list = gridmanService.list(wrapper);
if (list.size() > 0) {
- GridEntity gridEntity = list.get(0);
- if (!Strings.isBlank(gridEntity.getCommunityName())) {
- houseParam.setCommunityName(gridEntity.getCommunityName().split("居民委员会")[0]);
+ GridmanEntity gridmanEntity = list.get(0);
+ GridEntity gridEntity = gridService.getById(gridmanEntity.getGridId());
+ // 查询居委会
+ Region region = regionService.getById(gridEntity.getCommunityCode());
+ if (null != region) {
+ houseParam.setCommunityName(region.getName());
}
if (!Strings.isBlank(gridEntity.getGridName())) {
houseParam.setGridName(gridEntity.getGridName());
@@ -325,10 +339,15 @@
List<TreeStringNode> aoiList = new ArrayList<>();
List<TreeStringNode> shopList = new ArrayList<>();
// 根据社区名称查询楼栋或者商铺的集合
-
List<TreeStringNode> list = baseMapper.getBuildingList(houseParam, stringList);
// 排序 StringUtils.getDigits(X.getName()) 取出数字排序
- List<TreeStringNode> sortList = list.stream().sorted(Comparator.comparing(X -> StringUtils.getDigits(X.getName()))).collect(Collectors.toList());
+ List<TreeStringNode> sortList = list.stream().
+ sorted(new Comparator<TreeStringNode>() {
+ @Override
+ public int compare(TreeStringNode o1, TreeStringNode o2) {
+ return ComplexNumberStringComparator.compare(o1.getName(),o2.getName());
+ }
+ }).collect(Collectors.toList());
if (list.size() > 0) {
for (TreeStringNode treeNode : sortList) {
if (treeNode.getAddressType() == 1) {
diff --git a/src/main/java/org/springblade/modules/grid/entity/GridEntity.java b/src/main/java/org/springblade/modules/grid/entity/GridEntity.java
index 5181bb4..e0f7078 100644
--- a/src/main/java/org/springblade/modules/grid/entity/GridEntity.java
+++ b/src/main/java/org/springblade/modules/grid/entity/GridEntity.java
@@ -53,6 +53,11 @@
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
+ * 网格编号
+ */
+ @ApiModelProperty(value = "网格编号")
+ private String gridCode;
+ /**
* 机构id
*/
@ApiModelProperty(value = "机构id")
@@ -72,11 +77,6 @@
*/
@ApiModelProperty(value = "网格名称")
private String gridName;
- /**
- * 负责人ID
- */
- @ApiModelProperty(value = "负责人ID")
- private Long userId;
/**
* 负责人名称
*/
diff --git a/src/main/java/org/springblade/modules/grid/excel/GridExcel.java b/src/main/java/org/springblade/modules/grid/excel/GridExcel.java
index 1ece26f..af400e4 100644
--- a/src/main/java/org/springblade/modules/grid/excel/GridExcel.java
+++ b/src/main/java/org/springblade/modules/grid/excel/GridExcel.java
@@ -5,6 +5,7 @@
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
+import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@@ -24,6 +25,10 @@
@ExcelProperty("社区网格名称")
private String gridName;
+ @ColumnWidth(15)
+ @ExcelProperty("网格编号")
+ private String gridCode;
+
@ColumnWidth(100)
@ExcelProperty("区域")
private String geom;
diff --git a/src/main/java/org/springblade/modules/grid/service/impl/GridServiceImpl.java b/src/main/java/org/springblade/modules/grid/service/impl/GridServiceImpl.java
index b03c1d9..e3be78d 100644
--- a/src/main/java/org/springblade/modules/grid/service/impl/GridServiceImpl.java
+++ b/src/main/java/org/springblade/modules/grid/service/impl/GridServiceImpl.java
@@ -95,13 +95,31 @@
if (null!=region){
gridEntity.setCommunityCode(region.getCode());
}
- 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);
+ // 比对网格是否存在,如果已存在则更新,否则则新增
+ QueryWrapper<GridEntity> 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);
--
Gitblit v1.9.3