北京经济技术开发区经开区虚拟城市项目-【后端】-服务,Poi,企业,地块等定制接口
13693261870
2023-10-06 e6c4ff41f4b65dd1d925215f3019164ad31021b4
src/main/java/com/smartearth/poiexcel/controller/EntController.java
@@ -1,19 +1,30 @@
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.util.StringUtils;
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;
/**
 * 企业控制器
@@ -26,6 +37,15 @@
public class EntController extends BaseController {
    @Resource
    EntService entService;
    @Resource
    EntMapper entMapper;
    @Resource
    QiYeMapper qiYeMapper;
    @Value("${address.code.url}")
    private String addressCodeUrl;
    @ApiOperation(value = "查询令牌")
    @GetMapping({"/selectToken"})
@@ -71,4 +91,150 @@
            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<Object> 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<EntEntity> 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<Object> 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<EntEntity> 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<Object> 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<EntEntity> 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[1]));
            ent.setY(Double.parseDouble(split[0]));
        } 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<String, String> headers = new HashMap<>();
        headers.put("Authorization", "Basic " + Base64.getUrlEncoder().encodeToString(("jjjskfq" + ":" + "Jjjskfq@2022").getBytes()));
        // 执行请求
        return HttpUtils.get(sb.toString(), null, headers);
    }
}