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 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;
|
|
/**
|
* <p>
|
* 省市管理 前端控制器
|
* </p>
|
*
|
*/
|
@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")
|
public R<List<List<XpRegion>>> geXpRegion() {
|
return R.ok(regionService.getXpRegion());
|
}
|
|
|
/*
|
* 查询市
|
*/
|
@ApiOperation(value = "查询市",tags = {"小程序-查询市"},response = XpRegion.class)
|
@PostMapping(value = "/base/v1/mini-program/open/t-region/getProvince")
|
public R<List<XpRegion>> getProvince(@RequestBody getProvinceQuery query) {
|
// 缓存数据
|
List<Object> cacheList = redisService.getCacheList(CacheConstants.XP_REGION_CITY);
|
List<XpRegion> 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<XpOpenCity> openCities = openCityService.list(new LambdaQueryWrapper<XpOpenCity>().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<List<RegionCascaderVO>> getRegionCascader() {
|
return R.ok(regionService.getRegionCascader());
|
}
|
}
|