Преглед на файлове

:zap: 完善行政区划基础功能

smallchill преди 6 години
родител
ревизия
7890a26105

+ 56 - 0
src/main/java/org/springblade/common/cache/RegionCache.java

@@ -0,0 +1,56 @@
+/*
+ *      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.common.cache;
+
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.modules.system.entity.Region;
+import org.springblade.modules.system.service.IRegionService;
+
+import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
+
+/**
+ * 行政区划缓存工具类
+ *
+ * @author Chill
+ */
+public class RegionCache {
+	public static final int PROVINCE_LEVEL = 1;
+	public static final int CITY_LEVEL = 2;
+	public static final int DISTRICT_LEVEL = 3;
+	public static final int TOWN_LEVEL = 4;
+	public static final int VILLAGE_LEVEL = 5;
+
+	private static final String REGION_CODE = "region:code:";
+
+	private static final IRegionService regionService;
+
+	static {
+		regionService = SpringUtil.getBean(IRegionService.class);
+	}
+
+	/**
+	 * 获取行政区划实体
+	 *
+	 * @param code 区划编号
+	 * @return Param
+	 */
+	public static Region getByCode(String code) {
+		return CacheUtil.get(SYS_CACHE, REGION_CODE, code, () -> regionService.getById(code));
+	}
+
+}

+ 2 - 2
src/main/java/org/springblade/modules/system/controller/RegionController.java

@@ -55,9 +55,9 @@ public class RegionController extends BladeController {
 	@GetMapping("/detail")
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "详情", notes = "传入region")
-	public R<Region> detail(Region region) {
+	public R<RegionVO> detail(Region region) {
 		Region detail = regionService.getOne(Condition.getQueryWrapper(region));
-		return R.data(detail);
+		return R.data(RegionWrapper.build().entityVO(detail));
 	}
 
 	/**

+ 23 - 1
src/main/java/org/springblade/modules/system/service/impl/RegionServiceImpl.java

@@ -28,6 +28,8 @@ import org.springframework.stereotype.Service;
 import java.util.List;
 import java.util.Map;
 
+import static org.springblade.common.cache.RegionCache.*;
+
 /**
  * 行政区划表 服务实现类
  *
@@ -42,12 +44,32 @@ public class RegionServiceImpl extends ServiceImpl<RegionMapper, Region> impleme
 		if (cnt > 0) {
 			return this.updateById(region);
 		}
+		// 增加省、市、区、镇、村的冗余字段
+		Integer level = region.getLevel();
+		String code = region.getCode();
+		String name = region.getName();
+		if (level == PROVINCE_LEVEL) {
+			region.setProvinceCode(code);
+			region.setProvinceName(name);
+		} else if (level == CITY_LEVEL) {
+			region.setCityCode(code);
+			region.setCityName(name);
+		} else if (level == DISTRICT_LEVEL) {
+			region.setDistrictCode(code);
+			region.setDistrictName(name);
+		} else if (level == TOWN_LEVEL) {
+			region.setTownCode(code);
+			region.setTownName(name);
+		} else if (level == VILLAGE_LEVEL) {
+			region.setVillageCode(code);
+			region.setVillageName(name);
+		}
 		return this.save(region);
 	}
 
 	@Override
 	public boolean removeRegion(String id) {
-		Integer cnt = baseMapper.selectCount(Wrappers.<Region>query().lambda().like(Region::getParentCode, id));
+		Integer cnt = baseMapper.selectCount(Wrappers.<Region>query().lambda().eq(Region::getParentCode, id));
 		if (cnt > 0) {
 			throw new ServiceException("请先删除子节点!");
 		}

+ 5 - 0
src/main/java/org/springblade/modules/system/vo/RegionVO.java

@@ -52,6 +52,11 @@ public class RegionVO extends Region implements INode<RegionVO> {
 	@JsonSerialize(using = ToStringSerializer.class)
 	private Long parentId;
 
+	/**
+	 * 父节点名称
+	 */
+	private String parentName;
+
 	/**
 	 * 是否有子孙节点
 	 */

+ 5 - 1
src/main/java/org/springblade/modules/system/wrapper/RegionWrapper.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.modules.system.wrapper;
 
+import org.springblade.common.cache.RegionCache;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.BeanUtil;
@@ -38,7 +39,10 @@ public class RegionWrapper extends BaseEntityWrapper<Region, RegionVO> {
 
 	@Override
 	public RegionVO entityVO(Region region) {
-		return Objects.requireNonNull(BeanUtil.copy(region, RegionVO.class));
+		RegionVO regionVO = Objects.requireNonNull(BeanUtil.copy(region, RegionVO.class));
+		Region parentRegion = RegionCache.getByCode(region.getParentCode());
+		regionVO.setParentName(parentRegion.getName());
+		return regionVO;
 	}
 
 	public List<RegionVO> listNodeLazyVO(List<RegionVO> list) {