package com.smartearth.poiexcel.controller; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.smartearth.poiexcel.entity.EntEntity; import com.smartearth.poiexcel.entity.ResponseMsg; import com.smartearth.poiexcel.entity.StaticData; import com.smartearth.poiexcel.mapper.EntMapper; import com.smartearth.poiexcel.mapper.QiYeMapper; import com.smartearth.poiexcel.service.EntService; import com.smartearth.poiexcel.utils.HttpUtils; import com.smartearth.poiexcel.utils.StringHelper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.Base64; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 企业控制器 * @author WWW * @date 2023-10-05 */ @Api(tags = "企业控制器") @RestController @RequestMapping("/ent") @SuppressWarnings("ALL") public class EntController extends BaseController { @Resource EntService entService; @Resource EntMapper entMapper; @Resource QiYeMapper qiYeMapper; @Value("${address.code.url}") private String addressCodeUrl; @ApiOperation(value = "根据名称模糊查询企业") @ApiImplicitParams({ @ApiImplicitParam(name = "name", value = "企业名称或地址", dataType = "String", paramType = "query", example = "") }) @GetMapping({"/selectByName"}) public ResponseMsg selectByName(String name) { try { List list = qiYeMapper.selectByName(StringHelper.getLikeStr(name)); return success(null == list ? 0 : list.size(), list); } catch (Exception ex) { return fail(ex, -1); } } @ApiOperation(value = "查询令牌") @GetMapping({"/selectToken"}) public ResponseMsg selectToken() { try { String token = entService.selectToken(); return success(StringHelper.isEmpty(token) ? 0 : 1, token); } catch (Exception ex) { return fail(ex, -1); } } @ApiOperation(value = "查询企业信息") @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "令牌", dataType = "String", paramType = "query", example = ""), @ApiImplicitParam(name = "startDate", value = "开始日期", dataType = "String", paramType = "query", example = "2023-06-29"), @ApiImplicitParam(name = "endDate", value = "结束日期", dataType = "String", paramType = "query", example = "2023-06-30"), @ApiImplicitParam(name = "qylabel", value = "标签", dataType = "Integer", paramType = "query", example = "开业"), @ApiImplicitParam(name = "showCount", value = "显示记录数", dataType = "Integer", paramType = "query", example = "10"), @ApiImplicitParam(name = "currentPage", value = "当前分页数", dataType = "Integer", paramType = "query", example = "1") }) @GetMapping({"/selectEnts"}) public ResponseMsg selectEnts(String token, String startDate, String endDate, String qylabel, Integer showCount, Integer currentPage) { try { if (StringHelper.isEmpty(token)) { token = entService.selectToken(); } if (StringHelper.isEmpty(token)) { return fail("查询令牌失败"); } if (null == showCount || showCount < 1) { showCount = 10; } if (null == currentPage || currentPage < 1) { currentPage = 1; } List list = entService.selectEnts(token, startDate, endDate, qylabel, showCount, currentPage); return success(null == list || list.isEmpty() ? 0 : list.size(), list); } catch (Exception ex) { return fail(ex, -1); } } @ApiOperation(value = "插入企业") @ApiImplicitParams({ @ApiImplicitParam(name = "token", value = "令牌", dataType = "String", paramType = "query", example = ""), @ApiImplicitParam(name = "startDate", value = "开始日期", dataType = "String", paramType = "query", example = "2023-06-29"), @ApiImplicitParam(name = "endDate", value = "结束日期", dataType = "String", paramType = "query", example = "2023-06-30"), @ApiImplicitParam(name = "qylabel", value = "标签", dataType = "Integer", paramType = "query", example = "开业"), @ApiImplicitParam(name = "showCount", value = "显示记录数", dataType = "Integer", paramType = "query", example = "10"), @ApiImplicitParam(name = "currentPage", value = "当前分页数", dataType = "Integer", paramType = "query", example = "1") }) @GetMapping({"/insertEnts"}) public ResponseMsg insertEnts(String token, String startDate, String endDate, String qylabel, Integer showCount, Integer currentPage) { try { if (StringHelper.isEmpty(token)) { token = entService.selectToken(); } if (StringHelper.isEmpty(token)) { return fail("查询令牌失败"); } if (null == showCount || showCount < 1) { showCount = 10; } if (null == currentPage || currentPage < 1) { currentPage = 1; } List list = entService.selectEnts(token, startDate, endDate, qylabel, showCount, currentPage); if (null == list || list.isEmpty()) { return fail("查询企业为空"); } Integer rows = entService.insertEnts(list); return success(rows); } catch (Exception ex) { return fail(ex, -1); } } @ApiOperation(value = "分页查询企业") @ApiImplicitParams({ @ApiImplicitParam(name = "pageSize", value = "每页条数", dataType = "Integer", paramType = "query", example = "10"), @ApiImplicitParam(name = "pageIndex", value = "分页数(从1开始)", dataType = "Integer", paramType = "query", example = "1") }) @GetMapping(value = "/selectByPage") public ResponseMsg selectByPage(Integer pageSize, Integer pageIndex) { try { if (null == pageSize || pageSize < 1) { pageSize = 10; } if (null == pageIndex || pageIndex < 1) { pageIndex = 1; } int count = qiYeMapper.selectCount(); List list = qiYeMapper.selectByPage(pageSize, StaticData.I100 * (pageIndex - 1)); return success(count, list); } catch (Exception ex) { return fail(ex, -1); } } @ApiOperation(value = "批量更新企业坐标") @GetMapping({"/updateCoords"}) public ResponseMsg updateCoords() { try { int rows = 0; int count = qiYeMapper.selectCount(); if (0 == count) { return success("没有数据需要更新", count); } int pages = (count - 1) / StaticData.I100 + 1; for (int i = 1; i <= pages; i++) { List list = qiYeMapper.selectByPage(StaticData.I100, StaticData.I100 * (i - 1)); if (null == list || list.isEmpty()) { continue; } for (EntEntity ent : list) { if (!StringHelper.isEmpty(ent.getAddress())) { setEntCoord(ent); } } rows += qiYeMapper.updates(list); } return success(rows); } catch (Exception ex) { return fail(ex, -1); } } /** * 设置企业坐标值 */ private void setEntCoord(EntEntity ent) { try { String json = selectAddrCode(ent.getAddress()); if (StringHelper.isEmpty(json)) { return; } JSONObject obj = JSONObject.parseObject(json); if (null == obj || !StaticData.S1.equals(obj.get("status"))) { return; } JSONArray jsonArray = obj.getJSONArray("geocodes"); if (null == jsonArray || jsonArray.isEmpty()) { return; } JSONObject object = jsonArray.getJSONObject(0); /*String addr = object.getString("formatted_address"); if (StringHelper.isEmpty(addr)) { return; } String encoding = StringHelper.getEncoding(addr); if (encoding != null) { addr = new String(addr.getBytes(encoding)); } ent.setAddress(addr);*/ String location = object.getString("location"); String[] split = location.split(","); ent.setX(Double.parseDouble(split[0])); ent.setY(Double.parseDouble(split[1])); } catch (Exception ex) { log.error(ex.getMessage(), ex); } } private String selectAddrCode(String address) throws Exception { StringBuilder sb = new StringBuilder(addressCodeUrl); sb.append("?address=").append(address).append("&output=json&batch=true&coord=cgcs2000&adcode=yes"); // 设置请求头 Map headers = new HashMap<>(); headers.put("Authorization", "Basic " + Base64.getUrlEncoder().encodeToString(("jjjskfq" + ":" + "Jjjskfq@2022").getBytes())); // 执行请求 return HttpUtils.get(sb.toString(), null, headers); } }