From 1c66e38246d965db61c187555e21541e93fd39db Mon Sep 17 00:00:00 2001 From: xjs <1294405880@qq.com> Date: Wed, 23 Mar 2022 19:00:31 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=8C=BA=E5=9F=9F=E7=BC=96=E7=A0=81?= =?UTF-8?q?=20=E4=BB=93=E5=BA=93=E6=9C=8D=E5=8A=A1=20=E8=BF=9C=E7=A8=8B?= =?UTF-8?q?=E8=B0=83=E7=94=A8=202=E3=80=81=E4=BB=93=E5=BA=93=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E9=A1=B5=E9=9D=A2=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=EF=BC=8C=E8=B0=83=E7=94=A8=E5=8C=BA=E5=9F=9F?= =?UTF-8?q?=E7=BC=96=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xjs/business/api/RemoteAreaFeign.java | 31 +++++ .../com/xjs/business/api/domain/Area.java | 69 ++++++++++ .../api/factory/RemoteAreaFactory.java | 37 ++++++ ruoyi-ui/src/api/mall/ware/ware-info.js | 15 +++ .../ware/wareinfo/wareinfo-add-or-update.vue | 124 ++++++++++++++++-- .../xjs/area/controller/AreaController.java | 17 +++ .../ware/controller/WareInfoController.java | 20 ++- .../mall/ware/service/WareInfoService.java | 15 +++ .../service/impl/WareInfoServiceImpl.java | 28 ++++ 9 files changed, 345 insertions(+), 11 deletions(-) create mode 100644 ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/RemoteAreaFeign.java create mode 100644 ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/domain/Area.java create mode 100644 ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/factory/RemoteAreaFactory.java diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/RemoteAreaFeign.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/RemoteAreaFeign.java new file mode 100644 index 00000000..90ca60bd --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/RemoteAreaFeign.java @@ -0,0 +1,31 @@ +package com.xjs.business.api; + +import com.ruoyi.common.core.constant.ServiceNameConstants; +import com.ruoyi.common.core.domain.R; +import com.xjs.business.api.domain.Area; +import com.xjs.business.api.factory.RemoteAreaFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import java.util.List; + +/** + * 调用openapi服务AreaController feign + * + * @author xiejs + * @since 2022-03-23 + */ +@FeignClient(contextId = "remoteAreaFeign", + value = ServiceNameConstants.BUSINESS_OPENAPI_SERVICE, + fallbackFactory = RemoteAreaFactory.class) +public interface RemoteAreaFeign { + + @GetMapping("/area/getProvinceAreaForRPC") + R> getProvinceAreaForRPC(); + + + @GetMapping("/area/getAreaByParentIdForRPC/{pid}") + R> getAreaByParentIdForRPC(@PathVariable("pid") Long pid); + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/domain/Area.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/domain/Area.java new file mode 100644 index 00000000..6c2d11cc --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/domain/Area.java @@ -0,0 +1,69 @@ +package com.xjs.business.api.domain; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 区域编码实体类 + * + * @author xiejs + * @since 2022-03-22 + */ +@Data +public class Area implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 主键id + */ + private Long id; + + /** + * 父id + */ + private Long parentId; + + /** + * 城市编码 + */ + private String citycode; + + /** + * 区域编码 + */ + private String adcode; + + /** + * 行政区名称 + */ + private String name; + + /** + * 区域中心点 + */ + private String center; + + /** + * 行政区划级别 + *
+ * country:国家 + *
+ * province:省份(直辖市会在province和city显示) + *
+ * city:市(直辖市会在province和city显示) + *
+ * district:区县 + *
+ * street:街道 + */ + private String level; + + /** + * 嵌套自身 + */ + private List districts; + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/factory/RemoteAreaFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/factory/RemoteAreaFactory.java new file mode 100644 index 00000000..78b16bab --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/api/factory/RemoteAreaFactory.java @@ -0,0 +1,37 @@ +package com.xjs.business.api.factory; + +import com.ruoyi.common.core.domain.R; +import com.xjs.business.api.RemoteAreaFeign; +import com.xjs.business.api.domain.Area; +import lombok.extern.log4j.Log4j2; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * RemoteAreaFeign降级 + * + * @author xiejs + * @since 2022-03-23 + */ +@Component +@Log4j2 +public class RemoteAreaFactory implements FallbackFactory { + @Override + public RemoteAreaFeign create(Throwable cause) { + return new RemoteAreaFeign() { + @Override + public R> getProvinceAreaForRPC() { + log.error("API模块获取区域信息降级" + cause.getMessage()); + return R.fail("API模块获取区域信息降级"); + } + + @Override + public R> getAreaByParentIdForRPC(Long pid) { + log.error("API模块根据id获取区域信息降级" + cause.getMessage()); + return R.fail("API模块根据id获取区域信息降级"); + } + }; + } +} diff --git a/ruoyi-ui/src/api/mall/ware/ware-info.js b/ruoyi-ui/src/api/mall/ware/ware-info.js index d8c8c515..b75982cf 100644 --- a/ruoyi-ui/src/api/mall/ware/ware-info.js +++ b/ruoyi-ui/src/api/mall/ware/ware-info.js @@ -44,5 +44,20 @@ export function editWareInfo(data) { }) } +// 获取所有省级区域 +export function getProvinceArea(data) { + return request({ + url: `/mall-ware/ware/wareinfo/getProvinceArea`, + method: 'get', + }) +} + +// 根据父ID获取区域 +export function getAreaByParentId(pid) { + return request({ + url: `/mall-ware/ware/wareinfo/getAreaByParentId/${pid}`, + method: 'get', + }) +} diff --git a/ruoyi-ui/src/views/mall/ware/wareinfo/wareinfo-add-or-update.vue b/ruoyi-ui/src/views/mall/ware/wareinfo/wareinfo-add-or-update.vue index 04014a79..893bc9c4 100644 --- a/ruoyi-ui/src/views/mall/ware/wareinfo/wareinfo-add-or-update.vue +++ b/ruoyi-ui/src/views/mall/ware/wareinfo/wareinfo-add-or-update.vue @@ -1,6 +1,7 @@ diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/area/controller/AreaController.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/area/controller/AreaController.java index 28cd3f38..cdc80ace 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/area/controller/AreaController.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/area/controller/AreaController.java @@ -1,5 +1,6 @@ package com.xjs.area.controller; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.security.annotation.RequiresPermissions; import com.xjs.area.domain.Area; @@ -58,4 +59,20 @@ public class AreaController extends MyBaseController { } + //--------------------------------------远程调用------------------------------------------ + @GetMapping("getProvinceAreaForRPC") + @ApiOperation("获取所有省级区域ForRPC") + public R> getProvinceAreaForRPC() { + List areaList = areaService.getProvinceArea(); + return R.ok(areaList); + } + + @GetMapping("getAreaByParentIdForRPC/{pid}") + @ApiOperation("根据父ID获取区域ForRPC") + public R> getAreaByParentIdForRPC(@PathVariable Long pid) { + List areaList = areaService.getAreaByParentId(pid); + return R.ok(areaList); + } + + } diff --git a/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/controller/WareInfoController.java b/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/controller/WareInfoController.java index d391b5c7..a0634a15 100644 --- a/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/controller/WareInfoController.java +++ b/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/controller/WareInfoController.java @@ -1,9 +1,10 @@ package com.xjs.mall.ware.controller; +import com.xjs.business.api.domain.Area; +import com.xjs.mall.other.R; import com.xjs.mall.ware.entity.WareInfoEntity; import com.xjs.mall.ware.service.WareInfoService; import com.xjs.utils.PageUtils; -import com.xjs.mall.other.R; import com.xjs.validation.group.AddGroup; import com.xjs.validation.group.UpdateGroup; import com.xjs.web.MyBaseController; @@ -14,6 +15,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.Arrays; +import java.util.List; import java.util.Map; @@ -31,6 +33,20 @@ public class WareInfoController extends MyBaseController { @Autowired private WareInfoService wareInfoService; + @GetMapping("getProvinceArea") + @ApiOperation("获取所有省级区域") + public R getProvinceArea() { + List areaList = wareInfoService.getProvinceArea(); + return R.ok().put("data", areaList); + } + + @GetMapping("getAreaByParentId/{pid}") + @ApiOperation("根据父ID获取区域") + public R getAreaByParentId(@PathVariable Long pid) { + List areaList = wareInfoService.getAreaByParentId(pid); + return R.ok().put("data", areaList); + } + /** * 列表 */ @@ -88,4 +104,6 @@ public class WareInfoController extends MyBaseController { return R.ok(); } + + } diff --git a/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/service/WareInfoService.java b/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/service/WareInfoService.java index 3df08fff..fb08b59a 100644 --- a/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/service/WareInfoService.java +++ b/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/service/WareInfoService.java @@ -1,9 +1,11 @@ package com.xjs.mall.ware.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.xjs.business.api.domain.Area; import com.xjs.mall.ware.entity.WareInfoEntity; import com.xjs.utils.PageUtils; +import java.util.List; import java.util.Map; /** @@ -16,5 +18,18 @@ import java.util.Map; public interface WareInfoService extends IService { PageUtils queryPage(Map params); + + /** + * 获取所有省级区域 + * @return list + */ + List getProvinceArea(); + + /** + * 根据父ID获取区域 + * @param pid 父id + * @return list + */ + List getAreaByParentId(Long pid); } diff --git a/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/service/impl/WareInfoServiceImpl.java b/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/service/impl/WareInfoServiceImpl.java index 2da8db56..284e9ca0 100644 --- a/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/service/impl/WareInfoServiceImpl.java +++ b/xjs-business/xjs-project-mall/mall-ware/src/main/java/com/xjs/mall/ware/service/impl/WareInfoServiceImpl.java @@ -3,7 +3,11 @@ package com.xjs.mall.ware.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.constant.HttpStatus; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.StringUtils; +import com.xjs.business.api.RemoteAreaFeign; +import com.xjs.business.api.domain.Area; import com.xjs.mall.ware.dao.WareInfoDao; import com.xjs.mall.ware.entity.WareInfoEntity; import com.xjs.mall.ware.service.WareInfoService; @@ -11,12 +15,18 @@ import com.xjs.utils.PageUtils; import com.xjs.utils.Query; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.List; import java.util.Map; @Service("wareInfoService") public class WareInfoServiceImpl extends ServiceImpl implements WareInfoService { + @Resource + private RemoteAreaFeign remoteAreaFeign; + @Override public PageUtils queryPage(Map params) { String key = (String) params.get(Query.KEY_NAME); @@ -34,4 +44,22 @@ public class WareInfoServiceImpl extends ServiceImpl getProvinceArea() { + R> r = remoteAreaFeign.getProvinceAreaForRPC(); + if (r.getCode() == HttpStatus.SUCCESS) { + return r.getData(); + } + return new ArrayList<>(); + } + + @Override + public List getAreaByParentId(Long pid) { + R> r = remoteAreaFeign.getAreaByParentIdForRPC(pid); + if (r.getCode() == HttpStatus.SUCCESS) { + return r.getData(); + } + return new ArrayList<>(); + } + }