新需求接口开发

master
liuqingkun 3 years ago
parent 016fef6d86
commit eb3e45c6bd
  1. 171
      src/main/java/org/springblade/modules/business/controller/ReportController.java
  2. 9
      src/main/java/org/springblade/modules/business/entity/DataEntity.java
  3. 25
      src/main/java/org/springblade/modules/business/service/ILargeScreenService.java
  4. 128
      src/main/java/org/springblade/modules/business/service/impl/LargeScreenServiceImpl.java
  5. 1
      src/main/resources/application.yml

@ -19,6 +19,7 @@ package org.springblade.modules.business.controller;
import com.github.xiaoymin.knife4j.annotations.ApiSort;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springblade.common.cache.DictBizCache;
import org.springblade.common.constant.BusinessConstant;
import org.springblade.common.constant.CommonConstant;
@ -27,17 +28,21 @@ import org.springblade.core.mp.support.Condition;
import org.springblade.core.mp.support.Query;
import org.springblade.core.tenant.annotation.TenantDS;
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.DateUtil;
import org.springblade.modules.business.entity.Appeal;
import org.springblade.modules.business.entity.DataEntity;
import org.springblade.modules.business.service.ILargeScreenService;
import org.springblade.modules.business.utils.LocalDateTimeUtils;
import org.springblade.modules.system.entity.DictBiz;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* 控制器
@ -75,7 +80,24 @@ public class ReportController extends BladeController {
*/
@GetMapping("/getAppealList")
public R getAppealList(Integer timeFrame, String startTime, String endTime) {
return R.data(largeScreenService.getAppealList());
LocalDateTime start = null;
LocalDateTime end = null;
if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME);
start = LocalDateTime.parse(startTime, fmt);
end = LocalDateTime.parse(endTime, fmt);
} else if (timeFrame == 1) {
start = LocalDateTimeUtils.monthStartTime();
end = LocalDateTimeUtils.monthEndTime();
} else if (timeFrame == 2) {
start = LocalDateTimeUtils.quarterStartTime();
end = LocalDateTimeUtils.quarterEndTime();
} else {
start = LocalDateTimeUtils.yearStartTime();
end = LocalDateTimeUtils.yearEndTime();
}
return R.data(largeScreenService.getAppealList(start, end));
}
/**
@ -83,7 +105,23 @@ public class ReportController extends BladeController {
*/
@GetMapping("/getAppealByMon")
public R getAppealByMon(Integer timeFrame, String startTime, String endTime) {
return R.data(largeScreenService.getAppealByMon());
LocalDateTime start = null;
LocalDateTime end = null;
if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME);
start = LocalDateTime.parse(startTime, fmt);
end = LocalDateTime.parse(endTime, fmt);
} else if (timeFrame == 1) {
start = LocalDateTimeUtils.monthStartTime();
end = LocalDateTimeUtils.monthEndTime();
} else if (timeFrame == 2) {
start = LocalDateTimeUtils.quarterStartTime();
end = LocalDateTimeUtils.quarterEndTime();
} else {
start = LocalDateTimeUtils.yearStartTime();
end = LocalDateTimeUtils.yearEndTime();
}
return R.data(largeScreenService.getAppealByMon(start, end));
}
/**
@ -91,7 +129,23 @@ public class ReportController extends BladeController {
*/
@GetMapping("/getAppealTypePercent")
public R getAppealTypePercent(Integer timeFrame, String startTime, String endTime) {
return R.data(largeScreenService.getAppealTypePercent());
LocalDateTime start = null;
LocalDateTime end = null;
if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME);
start = LocalDateTime.parse(startTime, fmt);
end = LocalDateTime.parse(endTime, fmt);
} else if (timeFrame == 1) {
start = LocalDateTimeUtils.monthStartTime();
end = LocalDateTimeUtils.monthEndTime();
} else if (timeFrame == 2) {
start = LocalDateTimeUtils.quarterStartTime();
end = LocalDateTimeUtils.quarterEndTime();
} else {
start = LocalDateTimeUtils.yearStartTime();
end = LocalDateTimeUtils.yearEndTime();
}
return R.data(largeScreenService.getAppealTypePercent(start, end));
}
/**
@ -108,7 +162,7 @@ public class ReportController extends BladeController {
*/
@GetMapping("/getAppealFinishCountByLoc")
public R getAppealFinishCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException {
Map<String, Object> dataList = largeScreenService.getAppealFinishCountByLoc(timeFrame, startTime, endTime);
List<DataEntity> dataList = largeScreenService.getAppealFinishCountByLoc(timeFrame, startTime, endTime);
return R.data(getSortAndData(dataList));
}
@ -126,7 +180,23 @@ public class ReportController extends BladeController {
*/
@GetMapping("/getImmediateList")
public R getImmediateList(String streetId, Integer timeFrame, String startTime, String endTime, Query query) {
return R.data(largeScreenService.getImmediateList(streetId, Condition.getPage(query)));
LocalDateTime start = null;
LocalDateTime end = null;
if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME);
start = LocalDateTime.parse(startTime, fmt);
end = LocalDateTime.parse(endTime, fmt);
} else if (timeFrame == 1) {
start = LocalDateTimeUtils.monthStartTime();
end = LocalDateTimeUtils.monthEndTime();
} else if (timeFrame == 2) {
start = LocalDateTimeUtils.quarterStartTime();
end = LocalDateTimeUtils.quarterEndTime();
} else {
start = LocalDateTimeUtils.yearStartTime();
end = LocalDateTimeUtils.yearEndTime();
}
return R.data(largeScreenService.getImmediateList(streetId, start, end, Condition.getPage(query)));
}
/**
@ -134,7 +204,88 @@ public class ReportController extends BladeController {
*/
@GetMapping("/getAppealHot")
public R getAppealHot(Integer timeFrame, String startTime, String endTime) {
return R.data(largeScreenService.getAppealHot());
LocalDateTime start = null;
LocalDateTime end = null;
if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME);
start = LocalDateTime.parse(startTime, fmt);
end = LocalDateTime.parse(endTime, fmt);
} else if (timeFrame == 1) {
start = LocalDateTimeUtils.monthStartTime();
end = LocalDateTimeUtils.monthEndTime();
} else if (timeFrame == 2) {
start = LocalDateTimeUtils.quarterStartTime();
end = LocalDateTimeUtils.quarterEndTime();
} else {
start = LocalDateTimeUtils.yearStartTime();
end = LocalDateTimeUtils.yearEndTime();
}
return R.data(largeScreenService.getAppealHot(start, end));
}
@GetMapping("getReportSort")
public R getReportSort(Integer timeFrame, String startTime, String endTime) {
LocalDateTime start = null;
LocalDateTime end = null;
if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) {
DateTimeFormatter fmt = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME);
start = LocalDateTime.parse(startTime, fmt);
end = LocalDateTime.parse(endTime, fmt);
} else if (timeFrame == 1) {
start = LocalDateTimeUtils.monthStartTime();
end = LocalDateTimeUtils.monthEndTime();
} else if (timeFrame == 2) {
start = LocalDateTimeUtils.quarterStartTime();
end = LocalDateTimeUtils.quarterEndTime();
} else {
start = LocalDateTimeUtils.yearStartTime();
end = LocalDateTimeUtils.yearEndTime();
}
return R.data(largeScreenService.getReportSort(start, end));
}
private Map<String, Object> getSortAndData(List<DataEntity> list) {
// 获取全部街道
List<DictBiz> streetDictList = DictBizCache.getList(BusinessConstant.DICT_KEY_STREET);
// 先将数据根据value做个排名
list.sort((o1, o2) -> o2.getValue() - o1.getValue());
// 构建返回数据
Map<String, Object> levelMap = new HashMap<>();
List<DataEntity> dataList = new ArrayList<>();
for (int idx = 0; idx < list.size(); idx++) {
String streetName = list.get(idx).getName();
Object streetValue = list.get(idx).getValue();
if (idx < 4) {
levelMap.put(streetName, 3);
} else if (idx < 8) {
levelMap.put(streetName, 2);
} else {
levelMap.put(streetName, 1);
}
dataList.add(list.get(idx));
}
// 遍历全部街道列表, 将未添加的街道数据添加上
streetDictList.forEach(street -> {
String streetName = street.getDictValue();
if (!levelMap.containsKey(streetName)) {
levelMap.put(streetName, 1);
DataEntity entity = new DataEntity();
entity.setName(streetName);
entity.setValue(0);
entity.setResolveRate("0");
dataList.add(entity);
}
});
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("levelList", levelMap);
resultMap.put("dataList", dataList);
return resultMap;
}
private Map<String, Map<String, Object>> getSortAndData(Map<String, Object> dataList) {

@ -5,7 +5,12 @@ import lombok.Data;
@Data
public class DataEntity {
private String name;
private String name;
private Integer value;
private Integer value;
/**
* 化解率
*/
private String resolveRate;
}

@ -23,35 +23,38 @@ import org.springblade.modules.business.entity.DataEntity;
import org.springblade.modules.business.excel.AppealExcel;
import java.text.ParseException;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* 服务类
* 服务类
*
* @author BladeX
*/
public interface ILargeScreenService {
Map<String, Object> getMediateFinish();
Map<String, Object> getMediateFinish();
Map<String, Object> getAppealSubmit();
Map<String, Object> getAppealSubmit();
List<Appeal> getAppealList();
List<Appeal> getAppealList(LocalDateTime start, LocalDateTime end);
Map<String, List<Object>> getAppealByMon();
Map<String, List<Object>> getAppealByMon(LocalDateTime start, LocalDateTime end);
List<Map<String, Object>> getAppealTypePercent();
List<Map<String, Object>> getAppealTypePercent(LocalDateTime start, LocalDateTime end);
Map<String, Object> getAppealSubmitCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException;
Map<String, Object> getAppealSubmitCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException;
Map<String, Object> getAppealFinishCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException;
List<DataEntity> getAppealFinishCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException;
Map<String, Object> getImmediateCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException;
Map<String, Object> getImmediateCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException;
Map<String, List<DataEntity>> getAppealHot();
Map<String, List<DataEntity>> getAppealHot(LocalDateTime start, LocalDateTime end);
IPage<Appeal> getImmediateList(String streetId, IPage<Appeal> page);
Map<String, List<DataEntity>> getReportSort(LocalDateTime start, LocalDateTime end);
IPage<Appeal> getImmediateList(String streetId, LocalDateTime start, LocalDateTime end, IPage<Appeal> page);
}

@ -129,7 +129,7 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
}
@Override
public List<Appeal> getAppealList() {
public List<Appeal> getAppealList(LocalDateTime start, LocalDateTime end) {
// 化解成功状态数组
List<Integer> state = new ArrayList<>();
state.add(0);
@ -138,6 +138,7 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
LambdaQueryWrapper<Appeal> wrapper = new LambdaQueryWrapper<>();
// 待处理、正在处理
wrapper.in(Appeal::getStatus, state);
wrapper.between(Appeal::getFirstRegTime, start, end);
// 根据登记时间倒序
wrapper.orderByDesc(Appeal::getFirstRegTime);
List<Appeal> appeals = appealService.list(wrapper);
@ -160,7 +161,7 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
}
@Override
public Map<String, List<Object>> getAppealByMon() {
public Map<String, List<Object>> getAppealByMon(LocalDateTime start, LocalDateTime end) {
Map<String, List<Object>> map = new HashMap<>();
List<Object> dateList = new ArrayList<>();
List<Object> handlerCountList = new ArrayList<>();
@ -193,9 +194,11 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
}
@Override
public List<Map<String, Object>> getAppealTypePercent() {
public List<Map<String, Object>> getAppealTypePercent(LocalDateTime start, LocalDateTime end) {
// 先查所有
List<Appeal> appeals = appealService.list();
LambdaQueryWrapper<Appeal> wrapper = new LambdaQueryWrapper<>();
wrapper.between(Appeal::getFirstRegTime, start, end);
List<Appeal> appeals = appealService.list(wrapper);
appeals.forEach(appeal -> {
String disputeName = Func.isEmpty(appeal.getDisputeName()) ? DictBizCache.getById(appeal.getDisputeId()).getDictValue() : appeal.getDisputeName();
appeal.setDisputeName(disputeName);
@ -294,7 +297,7 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
}
@Override
public Map<String, Object> getAppealFinishCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException {
public List<DataEntity> getAppealFinishCountByLoc(Integer timeFrame, String startTime, String endTime) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 化解成功状态数组
@ -303,7 +306,6 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
state.add(3);
LambdaQueryWrapper<Appeal> wrapper = new LambdaQueryWrapper<>();
wrapper.in(Appeal::getStatus, state);
if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) {
wrapper.between(Appeal::getFirstRegTime, dateFormat.parse(startTime), dateFormat.parse(endTime));
} else if (timeFrame == 1) {
@ -313,21 +315,35 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
} else if (timeFrame == 3) {
wrapper.between(Appeal::getFirstRegTime, LocalDateTimeUtils.yearStartTime(), LocalDateTimeUtils.yearEndTime());
}
List<Appeal> appeals = appealService.list(wrapper);
List<Appeal> appealList = appealService.list(wrapper);
// 过滤掉无街道的, 防止异常
appeals = appeals.stream().filter(appeal -> Func.isNotEmpty(appeal.getStreetId())).collect(Collectors.toList());
appeals.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue()));
appealList = appealList.stream().filter(appeal -> Func.isNotEmpty(appeal.getStreetId())).collect(Collectors.toList());
appealList.forEach(appeal -> appeal.setStreet(DictBizCache.getById(appeal.getStreetId()).getDictValue()));
List<Appeal> resolveList = appealList.stream().filter(appeal -> state.contains(appeal.getStatus())).collect(Collectors.toList());
// 根据街道分组
Map<String, List<Appeal>> collect = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreet));
Map<String, List<Appeal>> reportList = appealList.stream().collect(Collectors.groupingBy(Appeal::getStreet));
Map<String, List<Appeal>> collect = resolveList.stream().collect(Collectors.groupingBy(Appeal::getStreet));
Set<String> names = collect.keySet();
// 街道对应的数量
Map<String, Object> map = new HashMap<>();
List<DataEntity> result = new ArrayList<>();
Map<String, Object> map;
for (String name : names) {
map.put(name, collect.get(name).size());
DataEntity entity = new DataEntity();
entity.setName(name);
entity.setValue(collect.get(name).size());
String resolveRate = "0";
if (entity.getValue() > 0) {
double rate = (entity.getValue() / reportList.get(name).size()) * 100;
resolveRate = calRate(rate);
}
entity.setResolveRate(resolveRate);
result.add(entity);
}
return map;
return result;
}
@Override
@ -362,11 +378,12 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
}
@Override
public IPage<Appeal> getImmediateList(String streetId, IPage<Appeal> page) {
public IPage<Appeal> getImmediateList(String streetId, LocalDateTime start, LocalDateTime end, IPage<Appeal> page) {
LambdaQueryWrapper<Appeal> wrapper = new LambdaQueryWrapper<>();
wrapper.select(Appeal::getId, Appeal::getFirstRegTime, Appeal::getDisputeId, Appeal::getDisputeName);
wrapper.eq(Appeal::getStreetId, streetId);
wrapper.eq(Appeal::getSkipGrant, BusinessConstant.CODE_TRUE);
wrapper.between(Appeal::getFirstRegTime, start, end);
wrapper.orderByDesc(Appeal::getCreateTime);
IPage<Appeal> iPage = appealService.page(page, wrapper);
@ -388,25 +405,31 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
}
@Override
public Map<String, List<DataEntity>> getAppealHot() {
public Map<String, List<DataEntity>> getAppealHot(LocalDateTime start, LocalDateTime end) {
Map<String, List<DataEntity>> map = new HashMap();
// 化解成功状态数组
List<Integer> state = Arrays.asList(BusinessConstant.APPEAL_STATUS_AGREEMENT, BusinessConstant.APPEAL_STATUS_FINISH);
// 获取所有化解成功的诉求记录
LambdaQueryWrapper<Appeal> wrapper = new LambdaQueryWrapper<>();
wrapper.in(Appeal::getStatus, state);
List<Appeal> appeals = appealService.list(wrapper);
wrapper.between(Appeal::getFirstRegTime, start, end);
List<Appeal> appealList = appealService.list(wrapper);
// 过滤掉无街道和处理部门的, 防止异常
appeals = appeals.stream().filter(
appealList = appealList.stream().filter(
appeal -> Func.isNotEmpty(appeal.getStreetId()) && Func.isNotEmpty(appeal.getHandleDept())
).collect(Collectors.toList());
// 获取所有化解成功的诉求记录
List<Appeal> appealFinishList = appealList.stream().filter(
appeal -> state.contains(appeal.getStatus())
).collect(Collectors.toList());
// 获取所有街道
List<DictBiz> dataList = dictService.getList(BusinessConstant.DICT_KEY_STREET);
// 根据街道分组
Map<Long, List<Appeal>> street = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreetId));
Map<Long, List<Appeal>> reportStreetList = appealList.stream().collect(Collectors.groupingBy(Appeal::getStreetId));
Map<Long, List<Appeal>> street = appealFinishList.stream().collect(Collectors.groupingBy(Appeal::getStreetId));
// 封装到数据对象
List<DataEntity> strees = new ArrayList<>();
@ -415,6 +438,12 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
DataEntity entity = new DataEntity();
entity.setName(dictBiz.getDictValue());
entity.setValue(street.containsKey(dictBizId) ? street.get(dictBizId).size() : 0);
String resolveRate = "0";
if (entity.getValue() > 0) {
double rate = (entity.getValue() / reportStreetList.get(dictBizId).size()) * 100;
resolveRate = calRate(rate);
}
entity.setResolveRate(resolveRate);
strees.add(entity);
});
@ -425,7 +454,8 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
// 获取所有部门
List<User> userList = UserCache.getServerWindowList();
// 根据部门分组
Map<Long, List<Appeal>> town = appeals.stream().collect(Collectors.groupingBy(Appeal::getHandleDept));
Map<Long, List<Appeal>> reportTownList = appealList.stream().collect(Collectors.groupingBy(Appeal::getHandleDept));
Map<Long, List<Appeal>> town = appealFinishList.stream().collect(Collectors.groupingBy(Appeal::getHandleDept));
// 封装到数据对象
List<DataEntity> towns = new ArrayList<>();
@ -434,6 +464,16 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
DataEntity entity = new DataEntity();
entity.setName(user.getName());
entity.setValue(town.containsKey(id) ? town.get(id).size() : 0);
String resolveRate = "0";
if (entity.getValue() > 0) {
if (reportTownList.containsKey(id)) {
double rate = (entity.getValue() / reportTownList.get(id).size()) * 100;
resolveRate = calRate(rate);
} else {
resolveRate = "100%";
}
}
entity.setResolveRate(resolveRate);
towns.add(entity);
});
@ -444,6 +484,42 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
return map;
}
@Override
public Map<String, List<DataEntity>> getReportSort(LocalDateTime start, LocalDateTime end) {
Map<String, List<DataEntity>> map = new HashMap();
// 获取所有上报的诉求记录
LambdaQueryWrapper<Appeal> wrapper = new LambdaQueryWrapper<>();
wrapper.between(Appeal::getFirstRegTime, start, end);
List<Appeal> appeals = appealService.list(wrapper);
// 过滤掉无街道的, 防止异常
appeals = appeals.stream().filter(
appeal -> Func.isNotEmpty(appeal.getStreetId())
).collect(Collectors.toList());
// 获取所有街道
List<DictBiz> dataList = dictService.getList(BusinessConstant.DICT_KEY_STREET);
// 根据街道分组
Map<Long, List<Appeal>> street = appeals.stream().collect(Collectors.groupingBy(Appeal::getStreetId));
// 封装到数据对象
List<DataEntity> strees = new ArrayList<>();
dataList.forEach(dictBiz -> {
Long dictBizId = dictBiz.getId();
DataEntity entity = new DataEntity();
entity.setName(dictBiz.getDictValue());
entity.setValue(street.containsKey(dictBizId) ? street.get(dictBizId).size() : 0);
strees.add(entity);
});
// 倒序
List<DataEntity> streeList = strees.stream().sorted(Comparator.comparing(DataEntity::getValue).reversed()).collect(Collectors.toList());
map.put("street", streeList);
return map;
}
private Map<String, List<Object>> getStartAndEndTime(Map<String, List<Object>> map, List<Integer> state, Integer month) {
List<Object> dateList = map.get("dateList");
List<Object> handlerCountList = map.get("handlerCountList");
@ -474,6 +550,18 @@ public class LargeScreenServiceImpl implements ILargeScreenService {
map.put("handlerCountList", handlerCountList);
map.put("finishContList", finishContList);
return map;
}
private String calRate(double rate) {
String resolveRate = String.format("%.2f", rate);
if ("100.00".equalsIgnoreCase(resolveRate)) {
resolveRate = "100";
}
if ("0.00".equalsIgnoreCase(resolveRate)) {
resolveRate = "0";
}
return resolveRate + "%";
}
}

@ -187,6 +187,7 @@ blade:
skip-url:
- /blade-test/**
- /blade-business/report/**
- /blade-business/appealMediate/getLastMediation
- /blade-system/dict/common/getStreetList
#授权认证配置
auth:

Loading…
Cancel
Save