From c4aa721a61edb5ff4502d621897c266b98ef3d1c Mon Sep 17 00:00:00 2001 From: baizonghao <1719256278@qq.com> Date: 星期五, 24 二月 2023 11:18:58 +0800 Subject: [PATCH] 按报警点位统计,按区域统计 --- ycl-platform/src/main/java/com/ycl/mapper/unlawful/UnlawfulMapper.java | 28 +++ ycl-platform/src/main/resources/mapper/unlawful/UnlawfulMapper.xml | 150 +++++++++++++++++++- ycl-platform/src/main/java/com/ycl/controller/intelligentPatrol/StatisticsController.java | 62 +++++++- ycl-platform/src/main/java/com/ycl/service/unlawful/UnlawfulService.java | 16 ++ ycl-platform/src/main/java/com/ycl/service/unlawful/impl/UnlawfulServiceImpl.java | 121 ++++++++++++---- 5 files changed, 319 insertions(+), 58 deletions(-) diff --git a/ycl-platform/src/main/java/com/ycl/controller/intelligentPatrol/StatisticsController.java b/ycl-platform/src/main/java/com/ycl/controller/intelligentPatrol/StatisticsController.java index 467a9b9..f37dedc 100644 --- a/ycl-platform/src/main/java/com/ycl/controller/intelligentPatrol/StatisticsController.java +++ b/ycl-platform/src/main/java/com/ycl/controller/intelligentPatrol/StatisticsController.java @@ -82,18 +82,29 @@ return CommonResult.success(page); } - /*@GetMapping("/unlawful/point") + @GetMapping("/unlawful/point") @ApiOperation("鎸夌偣浣嶇粺璁�") @LogSave(operationType = "鎸夌偣浣嶇粺璁�", contain = "鏌ヨ") public CommonResult<IPage<UnlawfulDto>> searchByPoint(@RequestParam(required = true) Integer currentPage, @RequestParam(required = true) Integer pageSize, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime beginTime, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime) { + DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String startTime = null; + String endTime1 = null; + if (beginTime != null){ + startTime = beginTime.format(fmt); + } + if (endTime != null){ + endTime1 = beginTime.format(fmt); + } IPage<UnlawfulDto> page = new Page<>(); - page.setTotal(ls.size()); - page.setRecords(ls); + List<UnlawfulDto> unlawfulByType = unlawfulService.getUnlawfulBySite((currentPage - 1) * pageSize, pageSize, startTime, endTime1); + + page.setTotal(unlawfulByType.size()); + page.setRecords(unlawfulByType); return CommonResult.success(page); - }*/ + } /*@GetMapping("/unlawful/time") @ApiOperation("鎸夋椂闂寸粺璁�") @@ -108,18 +119,29 @@ return CommonResult.success(page); }*/ - /*@GetMapping("/unlawful/area") + @GetMapping("/unlawful/area") @ApiOperation("鎸夊尯鍩熺粺璁�") @LogSave(operationType = "鎸夊尯鍩熺粺璁�", contain = "鏌ヨ") public CommonResult<IPage<UnlawfulDto>> searchByArea(@RequestParam(required = true) Integer currentPage, @RequestParam(required = true) Integer pageSize, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime beginTime, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime) { + DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + String startTime = null; + String endTime1 = null; + if (beginTime != null){ + startTime = beginTime.format(fmt); + } + if (endTime != null){ + endTime1 = beginTime.format(fmt); + } IPage<UnlawfulDto> page = new Page<>(); - page.setTotal(ls.size()); - page.setRecords(ls); + List<UnlawfulDto> unlawfulByType = unlawfulService.getUnlawfulBySite((currentPage - 1) * pageSize, pageSize, startTime, endTime1); + + page.setTotal(unlawfulByType.size()); + page.setRecords(unlawfulByType); return CommonResult.success(page); - }*/ + } /*@GetMapping("/unlawful/shop") @ApiOperation("闂ㄥ墠涓夊寘缁熻") @@ -156,6 +178,30 @@ EasyExcelUtils.export(response, sheetName, UnlawfulDto.class, unlawfulByTypeExport); } + @PostMapping("/export/unlawful/type") + @ApiOperation("鎸夊悇绉嶇粺璁℃柟寮�-瀵煎嚭") + public void exportType(HttpServletResponse response) { + List<UnlawfulDto> unlawfulByTypeExport = unlawfulService.getUnlawfulByTypeExport(); + String sheetName = "鎸夌粺璁℃柟寮�"; + EasyExcelUtils.export(response, sheetName, UnlawfulDto.class, unlawfulByTypeExport); + } + + @PostMapping("/export/unlawful/street") + @ApiOperation("鎸夊悇绉嶇粺璁℃柟寮�-瀵煎嚭") + public void exportStreet(HttpServletResponse response) { + List<UnlawfulDto> unlawfulByStreetExport = unlawfulService.getUnlawfulByStreetExport(); + String sheetName = "鎸夌粺璁℃柟寮�"; + EasyExcelUtils.export(response, sheetName, UnlawfulDto.class, unlawfulByStreetExport); + } + + @PostMapping("/export/unlawful/site") + @ApiOperation("鎸夊悇绉嶇粺璁℃柟寮�-瀵煎嚭") + public void exportSite(HttpServletResponse response) { + List<UnlawfulDto> unlawfulBySiteExport = unlawfulService.getUnlawfulBySiteExport(); + String sheetName = "鎸夌粺璁℃柟寮�"; + EasyExcelUtils.export(response, sheetName, UnlawfulDto.class, unlawfulBySiteExport); + } + /*@PostMapping("/export/shop") @ApiOperation("闂ㄥ墠涓夊寘-瀵煎嚭") public void exportShop(HttpServletResponse response) { diff --git a/ycl-platform/src/main/java/com/ycl/mapper/unlawful/UnlawfulMapper.java b/ycl-platform/src/main/java/com/ycl/mapper/unlawful/UnlawfulMapper.java index 380972d..5b5d63e 100644 --- a/ycl-platform/src/main/java/com/ycl/mapper/unlawful/UnlawfulMapper.java +++ b/ycl-platform/src/main/java/com/ycl/mapper/unlawful/UnlawfulMapper.java @@ -6,10 +6,34 @@ import java.util.List; public interface UnlawfulMapper { + /** + * 鑾峰彇鎬昏繚瑙勬暟閲� + */ + Integer getTotal(); + + /** + * 鎸夌収杩濊绫诲瀷缁熻 + */ List<CategoryDto> getDataByType(Integer currentPage, Integer pageSize, String startTime, String endTime); StatusDto getStatusDataByType(String startTime, String endTime, Integer dictionaryId); - List<CategoryDto> getDataByTypeExp(); - Integer getTotal(); + /** + * 鎸夌収鍖哄煙缁熻 + */ + List<CategoryDto> getDataByStreet(Integer currentPage, Integer pageSize, String startTime, String endTime); + StatusDto getStatusDataByStreet(String startTime, String endTime, Integer streetId); + List<CategoryDto> getDataByStreetExp(); + + /** + * 鎸夌偣浣嶇粺璁� + */ + List<String> getDataBySite(Integer currentPage, Integer pageSize, String startTime, String endTime); + StatusDto getStatusDataBySite(String startTime, String endTime, String site); + List<String> getDataBySiteExp(); + + + + + } diff --git a/ycl-platform/src/main/java/com/ycl/service/unlawful/UnlawfulService.java b/ycl-platform/src/main/java/com/ycl/service/unlawful/UnlawfulService.java index c6963b0..410e527 100644 --- a/ycl-platform/src/main/java/com/ycl/service/unlawful/UnlawfulService.java +++ b/ycl-platform/src/main/java/com/ycl/service/unlawful/UnlawfulService.java @@ -7,7 +7,21 @@ public interface UnlawfulService { + /** + * 鎸夌被鍨� + */ public List<UnlawfulDto> getUnlawfulByType(Integer currentPage, Integer pageSize, String startTime, String endTime); - public List<UnlawfulDto> getUnlawfulByTypeExport(); + + /** + * 鎸夊尯鍩� + */ + public List<UnlawfulDto> getUnlawfulByStreet(Integer currentPage, Integer pageSize, String startTime, String endTime); + public List<UnlawfulDto> getUnlawfulByStreetExport(); + + /** + * 鎸夋姤璀︾偣浣� + */ + public List<UnlawfulDto> getUnlawfulBySite(Integer currentPage, Integer pageSize, String startTime, String endTime); + public List<UnlawfulDto> getUnlawfulBySiteExport(); } diff --git a/ycl-platform/src/main/java/com/ycl/service/unlawful/impl/UnlawfulServiceImpl.java b/ycl-platform/src/main/java/com/ycl/service/unlawful/impl/UnlawfulServiceImpl.java index 9c21b2c..16b8cdc 100644 --- a/ycl-platform/src/main/java/com/ycl/service/unlawful/impl/UnlawfulServiceImpl.java +++ b/ycl-platform/src/main/java/com/ycl/service/unlawful/impl/UnlawfulServiceImpl.java @@ -12,61 +12,84 @@ import java.text.NumberFormat; import java.util.ArrayList; import java.util.List; -import java.util.function.Consumer; @Service public class UnlawfulServiceImpl implements UnlawfulService { + + private List<UnlawfulDto> res = new ArrayList<>(); @Resource private UnlawfulMapper unlawfuldao; + /** + * 鎸夌被鍨� + */ @Override public List<UnlawfulDto> getUnlawfulByType(Integer currentPage, Integer pageSize, String startTime, String endTime) { - List<UnlawfulDto> res = new ArrayList<>(); Double total = unlawfuldao.getTotal().doubleValue(); List<CategoryDto> data = unlawfuldao.getDataByType(currentPage, pageSize, startTime, endTime); data.forEach(categoryDto -> { - Double checkedRatio; //瀹℃牳鐜� - Double registerRatio; //绔嬫鐜� StatusDto statusData = unlawfuldao.getStatusDataByType(startTime, endTime, categoryDto.getId()); - UnlawfulDto build = new UnlawfulDto().builder().name(categoryDto.getName()) //绫诲瀷鍚嶇О - .count(statusData.getTotal()) //浜嬩欢鎬绘暟 - .ratio(changeFormat(statusData.getTotal().doubleValue() / total)) //鍗犳瘮 - .register(statusData.getRegister()) //绔嬫 - .notRegister(statusData.getNotRegister()) //鏆備笉绔嬫 - .closing(statusData.getClosing()) //缁撴 - .relearn(statusData.getRelearn()) //鍦ㄥ涔� - .checked(statusData.getChecked()) //宸插鏍� - .checkedRatio(changeFormat(statusData.getChecked().doubleValue() / statusData.getTotal().doubleValue())) //瀹℃牳鐜� - .registerRatio(changeFormat(statusData.getRegister().doubleValue() / statusData.getTotal().doubleValue())) //绔嬫鐜� - .build(); - res.add(build); + format(res, total, categoryDto, statusData); + }); + return res; + } + @Override + public List<UnlawfulDto> getUnlawfulByTypeExport() { + Double total = unlawfuldao.getTotal().doubleValue(); + List<CategoryDto> data = unlawfuldao.getDataByTypeExp(); + data.forEach(categoryDto -> { + StatusDto statusData = unlawfuldao.getStatusDataByType(null, null, categoryDto.getId()); + format(res, total, categoryDto, statusData); }); return res; } + /** + * 鎸夊尯鍩� + */ @Override - public List<UnlawfulDto> getUnlawfulByTypeExport() { - List<UnlawfulDto> res = new ArrayList<>(); + public List<UnlawfulDto> getUnlawfulByStreet(Integer currentPage, Integer pageSize, String startTime, String endTime) { Double total = unlawfuldao.getTotal().doubleValue(); - List<CategoryDto> data = unlawfuldao.getDataByTypeExp(); + List<CategoryDto> data = unlawfuldao.getDataByStreet(currentPage, pageSize, startTime, endTime); data.forEach(categoryDto -> { - Double checkedRatio; //瀹℃牳鐜� - Double registerRatio; //绔嬫鐜� - StatusDto statusData = unlawfuldao.getStatusDataByType(null, null, categoryDto.getId()); - UnlawfulDto build = new UnlawfulDto().builder().name(categoryDto.getName()) //绫诲瀷鍚嶇О - .count(statusData.getTotal()) //浜嬩欢鎬绘暟 - .ratio(changeFormat(statusData.getTotal().doubleValue() / total)) //鍗犳瘮 - .register(statusData.getRegister()) //绔嬫 - .notRegister(statusData.getNotRegister()) //鏆備笉绔嬫 - .closing(statusData.getClosing()) //缁撴 - .relearn(statusData.getRelearn()) //鍦ㄥ涔� - .checked(statusData.getChecked()) //宸插鏍� - .checkedRatio(changeFormat(statusData.getChecked().doubleValue() / statusData.getTotal().doubleValue())) //瀹℃牳鐜� - .registerRatio(changeFormat(statusData.getRegister().doubleValue() / statusData.getTotal().doubleValue())) //绔嬫鐜� - .build(); - res.add(build); + StatusDto statusData = unlawfuldao.getStatusDataByStreet(startTime, endTime, categoryDto.getId()); + format(res, total, categoryDto, statusData); + }); + return res; + } + @Override + public List<UnlawfulDto> getUnlawfulByStreetExport() { + Double total = unlawfuldao.getTotal().doubleValue(); + List<CategoryDto> data = unlawfuldao.getDataByStreetExp(); + data.forEach(categoryDto -> { + StatusDto statusData = unlawfuldao.getStatusDataByStreet(null, null, categoryDto.getId()); + format(res, total, categoryDto, statusData); + }); + return res; + } + + /** + * 鎸夋姤璀︾偣浣� + */ + @Override + public List<UnlawfulDto> getUnlawfulBySite(Integer currentPage, Integer pageSize, String startTime, String endTime) { + Double total = unlawfuldao.getTotal().doubleValue(); + List<String> data = unlawfuldao.getDataBySite(currentPage, pageSize, startTime, endTime); + data.forEach(site -> { + StatusDto statusData = unlawfuldao.getStatusDataBySite(startTime, endTime, site); + format1(res, total, site, statusData); + }); + return res; + } + @Override + public List<UnlawfulDto> getUnlawfulBySiteExport() { + Double total = unlawfuldao.getTotal().doubleValue(); + List<String> data = unlawfuldao.getDataBySiteExp(); + data.forEach(site -> { + StatusDto statusData = unlawfuldao.getStatusDataBySite(null, null, site); + format1(res, total, site, statusData); }); return res; } @@ -78,4 +101,34 @@ String format = numberInstance.format(previous); return Double.parseDouble(format); } + + private void format(List<UnlawfulDto> res, Double total, CategoryDto categoryDto, StatusDto statusData) { + UnlawfulDto build = UnlawfulDto.builder().name(categoryDto.getName()) //绫诲瀷鍚嶇О + .count(statusData.getTotal()) //浜嬩欢鎬绘暟 + .ratio(changeFormat(statusData.getTotal().doubleValue() / total)) //鍗犳瘮 + .register(statusData.getRegister()) //绔嬫 + .notRegister(statusData.getNotRegister()) //鏆備笉绔嬫 + .closing(statusData.getClosing()) //缁撴 + .relearn(statusData.getRelearn()) //鍦ㄥ涔� + .checked(statusData.getChecked()) //宸插鏍� + .checkedRatio(changeFormat(statusData.getChecked().doubleValue() / statusData.getTotal().doubleValue())) //瀹℃牳鐜� + .registerRatio(changeFormat(statusData.getRegister().doubleValue() / statusData.getTotal().doubleValue())) //绔嬫鐜� + .build(); + res.add(build); + } + + private void format1(List<UnlawfulDto> res, Double total, String site, StatusDto statusData) { + UnlawfulDto build = UnlawfulDto.builder().name(site) //绫诲瀷鍚嶇О + .count(statusData.getTotal()) //浜嬩欢鎬绘暟 + .ratio(changeFormat(statusData.getTotal().doubleValue() / total)) //鍗犳瘮 + .register(statusData.getRegister()) //绔嬫 + .notRegister(statusData.getNotRegister()) //鏆備笉绔嬫 + .closing(statusData.getClosing()) //缁撴 + .relearn(statusData.getRelearn()) //鍦ㄥ涔� + .checked(statusData.getChecked()) //宸插鏍� + .checkedRatio(changeFormat(statusData.getChecked().doubleValue() / statusData.getTotal().doubleValue())) //瀹℃牳鐜� + .registerRatio(changeFormat(statusData.getRegister().doubleValue() / statusData.getTotal().doubleValue())) //绔嬫鐜� + .build(); + res.add(build); + } } diff --git a/ycl-platform/src/main/resources/mapper/unlawful/UnlawfulMapper.xml b/ycl-platform/src/main/resources/mapper/unlawful/UnlawfulMapper.xml index 55a42be..c729847 100644 --- a/ycl-platform/src/main/resources/mapper/unlawful/UnlawfulMapper.xml +++ b/ycl-platform/src/main/resources/mapper/unlawful/UnlawfulMapper.xml @@ -1,6 +1,22 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ycl.mapper.unlawful.UnlawfulMapper"> +<!-- 鑾峰彇鎬绘暟--> + <select id="getTotal" resultType="java.lang.Integer"> + SELECT + count(*) + FROM + `ums_base_case` AS ubc + JOIN ums_violations AS uv ON ubc.id = uv.id + LEFT JOIN ums_data_dictionary AS t3 ON uv.category_id = t3.id + LEFT JOIN ums_data_dictionary AS t4 ON uv.type_id = t4.id + LEFT JOIN ums_sccg_region t5 ON ubc.street_id = t5.id + WHERE + ubc.category = 1 + AND t4.`name` IS NOT NULL + </select> + +<!-- 鎸夌収杩濊绫诲瀷缁熻--> <select id="getDataByType" resultType="com.ycl.dto.statistics.CategoryDto"> SELECT t4.id id, @@ -38,24 +54,12 @@ WHERE ubc.category =1 and t4.`id` = #{dictionaryId} + and t4.`name` IS NOT NULL <if test="startTime !='' and endTime !='' and startTime!=null and endTime !=null"> and ubc.create_time between #{startTime} and #{endTime} </if> </select> - <select id="getTotal" resultType="java.lang.Integer"> - SELECT - count(*) - FROM - `ums_base_case` AS ubc - JOIN ums_violations AS uv ON ubc.id = uv.id - LEFT JOIN ums_data_dictionary AS t3 ON uv.category_id = t3.id - LEFT JOIN ums_data_dictionary AS t4 ON uv.type_id = t4.id - LEFT JOIN ums_sccg_region t5 ON ubc.street_id = t5.id - WHERE - ubc.category = 1 - AND t4.`name` IS NOT NULL - </select> <select id="getDataByTypeExp" resultType="com.ycl.dto.statistics.CategoryDto"> SELECT t4.id id, @@ -72,4 +76,124 @@ group by t4.id </select> + + + + +<!-- 鎸夌収鍖哄煙缁熻--> + <select id="getDataByStreet" resultType="com.ycl.dto.statistics.CategoryDto"> + SELECT + ubc.community_id id, + t5.region_name name + FROM + `ums_base_case` AS ubc + JOIN ums_violations AS uv ON ubc.id = uv.id + LEFT JOIN ums_data_dictionary AS t3 ON uv.category_id = t3.id + LEFT JOIN ums_data_dictionary AS t4 ON uv.type_id = t4.id + LEFT JOIN ums_sccg_region t5 ON ubc.street_id = t5.id + WHERE + ubc.category = 1 + AND t4.`name` IS NOT NULL + <if test="startTime !='' and endTime !='' and startTime!=null and endTime !=null"> + and ubc.create_time between #{startTime} and #{endTime} + </if> + GROUP BY + ubc.community_id + limit #{currentPage}, #{pageSize} + </select> + <select id="getStatusDataByStreet" resultType="com.ycl.dto.statistics.StatusDto"> + SELECT + count( 1 ) total, + sum( CASE WHEN ubc.state = 5 THEN 1 ELSE 0 END ) register, + sum( CASE WHEN ubc.state = 4 THEN 1 ELSE 0 END ) notRegister, + sum( CASE WHEN ubc.state = 9 THEN 1 ELSE 0 END ) closing, + sum( CASE WHEN ubc.state = 3 THEN 1 ELSE 0 END ) relearn, + sum( CASE WHEN ubc.state = 8 THEN 1 ELSE 0 END ) checked + FROM + `ums_base_case` AS ubc + JOIN ums_violations AS uv ON ubc.id = uv.id + LEFT JOIN ums_data_dictionary AS t3 ON uv.category_id = t3.id + LEFT JOIN ums_data_dictionary AS t4 ON uv.type_id = t4.id + LEFT JOIN ums_sccg_region t5 ON ubc.street_id = t5.id + WHERE + ubc.category = 1 + AND ubc.`community_id` = #{streetId} + AND t4.`name` IS NOT NULL + <if test="startTime !='' and endTime !='' and startTime!=null and endTime !=null"> + and ubc.create_time between #{startTime} and #{endTime} + </if> + </select> + <select id="getDataByStreetExp" resultType="com.ycl.dto.statistics.CategoryDto"> + SELECT + ubc.community_id id, + t5.region_name NAME + FROM + `ums_base_case` AS ubc + JOIN ums_violations AS uv ON ubc.id = uv.id + LEFT JOIN ums_data_dictionary AS t3 ON uv.category_id = t3.id + LEFT JOIN ums_data_dictionary AS t4 ON uv.type_id = t4.id + LEFT JOIN ums_sccg_region t5 ON ubc.street_id = t5.id + WHERE + ubc.category =1 + and t4.`name` is NOT NULL + group by + ubc.community_id + </select> + + + +<!-- 鎸夌偣浣嶇粺璁�--> + <select id="getDataBySite" resultType="java.lang.String"> + SELECT + ubc.site + FROM + `ums_base_case` AS ubc + JOIN ums_violations AS uv ON ubc.id = uv.id + LEFT JOIN ums_data_dictionary AS t3 ON uv.category_id = t3.id + LEFT JOIN ums_data_dictionary AS t4 ON uv.type_id = t4.id + LEFT JOIN ums_sccg_region t5 ON ubc.street_id = t5.id + WHERE + ubc.category = 1 + AND t4.`name` IS NOT NULL + <if test="startTime !='' and endTime !='' and startTime!=null and endTime !=null"> + and ubc.create_time between #{startTime} and #{endTime} + </if> + GROUP BY + ubc.site + limit #{currentPage}, #{pageSize} + </select> + <select id="getStatusDataBySite" resultType="com.ycl.dto.statistics.StatusDto"> + SELECT + count( 1 ) total, + sum( CASE WHEN ubc.state = 5 THEN 1 ELSE 0 END ) register, + sum( CASE WHEN ubc.state = 4 THEN 1 ELSE 0 END ) notRegister, + sum( CASE WHEN ubc.state = 9 THEN 1 ELSE 0 END ) closing, + sum( CASE WHEN ubc.state = 3 THEN 1 ELSE 0 END ) relearn, + sum( CASE WHEN ubc.state = 8 THEN 1 ELSE 0 END ) checked + FROM + `ums_base_case` AS ubc + JOIN ums_violations AS uv ON ubc.id = uv.id + LEFT JOIN ums_data_dictionary AS t3 ON uv.category_id = t3.id + LEFT JOIN ums_data_dictionary AS t4 ON uv.type_id = t4.id + LEFT JOIN ums_sccg_region t5 ON ubc.street_id = t5.id + WHERE + ubc.category = 1 + AND t4.`name` IS NOT NULL + AND ubc.site = #{site} + </select> + <select id="getDataBySiteExp" resultType="java.lang.String"> + SELECT + ubc.site + FROM + `ums_base_case` AS ubc + JOIN ums_violations AS uv ON ubc.id = uv.id + LEFT JOIN ums_data_dictionary AS t3 ON uv.category_id = t3.id + LEFT JOIN ums_data_dictionary AS t4 ON uv.type_id = t4.id + LEFT JOIN ums_sccg_region t5 ON ubc.street_id = t5.id + WHERE + ubc.category = 1 + AND t4.`name` IS NOT NULL + GROUP BY + ubc.site + </select> </mapper> \ No newline at end of file -- Gitblit v1.8.0