package com.xiaopeng.operation.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.xiaopeng.api.model.operation.XpOpenCity; import com.xiaopeng.api.model.operation.XpRegion; import com.xiaopeng.common.core.constant.CacheConstants; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.redis.service.RedisService; import com.xiaopeng.operation.query.getProvinceQuery; import com.xiaopeng.operation.service.XpOpenCityService; import com.xiaopeng.operation.service.XpRegionService; import com.xiaopeng.operation.vo.RegionCascaderVO; import com.xiaopeng.unifiedverification.interceptor.XpClientCheck; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; /** *

* 省市管理 前端控制器 *

* */ @Api(tags = "省市管理") @RestController public class XpRegionController { private final XpRegionService regionService; private final RedisService redisService; private final XpOpenCityService openCityService; @Autowired public XpRegionController(XpRegionService regionService, RedisService redisService, XpOpenCityService openCityService) { this.regionService = regionService; this.redisService = redisService; this.openCityService = openCityService; } /** * 查询省市管理 */ @ApiOperation(value = "查询省市管理",tags = {"小程序-省市管理"},response = XpRegion.class) @GetMapping(value = "/base/v1/mini-program/open/t-region/getRegion") @XpClientCheck(checkToken = false, checkOtpToken = true) public R>> geXpRegion() { return R.ok(regionService.getXpRegion()); } /* * 查询市 */ @ApiOperation(value = "查询市",tags = {"小程序-查询市"},response = XpRegion.class) @PostMapping(value = "/base/v1/mini-program/open/t-region/getProvince") public R> getProvince(@RequestBody getProvinceQuery query) { // 缓存数据 List cacheList = redisService.getCacheList(CacheConstants.XP_REGION_CITY); List list = Collections.emptyList(); if (cacheList != null && !cacheList.isEmpty()) { try { list = cacheList.stream() .filter(item -> item instanceof XpRegion) .map(item -> (XpRegion) item) .collect(Collectors.toList()); } catch (ClassCastException e) { // 缓存数据结构异常,重新加载 redisService.deleteObject(CacheConstants.XP_REGION); } }else { list = regionService.list(Wrappers.lambdaQuery(XpRegion.class).ne(XpRegion::getParentId, 0).isNotNull(XpRegion::getInitial).orderByAsc(XpRegion::getInitial)); redisService.setCacheList(CacheConstants.XP_REGION_CITY, list); } List openCities = openCityService.list(new LambdaQueryWrapper().eq(XpOpenCity::getStatus,1)); for (XpRegion xpRegion : list) { for (XpOpenCity openCity : openCities) { if (xpRegion.getCityCode().equals(openCity.getCityCode())) { xpRegion.setIsOpen(1); } } } if (query.getCityName() != null) { list = list.stream().filter(item -> item.getName().contains(query.getCityName()) || item.getInitial().equals(query.getCityName()) || item.getChina().contains(query.getCityName().toLowerCase())).collect(Collectors.toList()); } if (query.getIsOpen() != null) { list = list.stream().filter(item -> item.getIsOpen().equals(query.getIsOpen())).collect(Collectors.toList()); } return R.ok(list); } /** * 管理后台-省市区三级级联查询 */ @ApiOperation(value = "管理后台-省市区三级级联查询", tags = {"管理后台-省市区管理"}) @GetMapping("/api/v1/region/cascader") public R> getRegionCascader() { return R.ok(regionService.getRegionCascader()); } /** * 管理后台-省市区三级级联查询 */ @ApiOperation(value = "管理后台-省市区三级级联查询", tags = {"管理后台-省市区管理无区域"}) @GetMapping("/api/v1/region/cascaderNoArea") public R> getRegionCascaderNoArea() { return R.ok(regionService.getRegionCascaderNoArea()); } }