本文最后更新于 2024-10-23,文章内容可能已经过时。

@Slf4j
@Component
@Profile({"prod", "dev"})
public class BgdcScheduleService {

    @Resource
    private ResultShapeDkService resultShapeDkService;
    @Resource
    private IGisBasicService gisBasicService;
    @Resource
    private DkHttpClient dkHttpClient;

    @Scheduled(cron = "0 42 09 23 * ?")
    public void create() {
        int pageNum = 1;
        int pageSize = 200; // 每页大小
        boolean hasMoreData = true;
        while (hasMoreData) {
            IPage<ResultShapeDk> page = new Page<>(pageNum, pageSize);
            ResultShapeDk shapeDk = new ResultShapeDk();
            IPage<ResultShapeDk> bjfxPages = resultShapeDkService.bjfxPages(page, shapeDk);
            List<ResultShapeDk> shapeDkList = bjfxPages.getRecords();
            if (CollectionUtils.isEmpty(shapeDkList)) {
                hasMoreData = false;
            } else {
                // 处理每一页的数据
                shapeDkList.parallelStream().forEach(dk -> {
                    System.err.println("dk = " + dk);
                    analysis(dk);
                });
                pageNum++;
            }
        }
    }

    public void analysis(ResultShapeDk dk) {
        String token = gisBasicService.getToken();
        String url = "www.blog.nn3n.com";
        Map<String, Object> params = new HashMap<>();
        Map<String, String> headers = new HashMap<>();
        params.put("cacheStatus", 2);
        params.put("dataId", dk.getId() + "");
        params.put("dataType", 1);
        params.put("geomWKT", dk.getGeom());
        params.put("regionCode", 530000);
        params.put("serviceType", "3");
        params.put("themeCode", "H001");
        params.put("unit", "1");
        params.put("groupFields", "dlmc");
        params.put("needGeom", false);
        params.put("version", "2023_2");

        headers.put("token", token);
        HttpResult result = dkHttpClient.jsonPost(url, params, headers);
        if (ObjectUtils.isNotEmpty(result) && result.getStatus() == HttpStatus.SC_OK) {
            System.err.println("result = " + result);
            JsonBgdcRoot jsonBgdcRoot = JSONUtil.toBean(result.getStringEntity(), JsonBgdcRoot.class);
            System.err.println("jsonBgdcRoot = " + jsonBgdcRoot);
            if (ObjectUtils.isNotEmpty(jsonBgdcRoot)) {
                BgdcData data = jsonBgdcRoot.getData();
                if (ObjectUtils.isNotEmpty(data)) {
                    List<Bgdc> list = data.getList();
                    StringBuffer buffer = new StringBuffer();
                    if (CollectionUtils.isNotEmpty(list)) {
                        list.forEach(bgdc -> {
                            String bfb = to4value(4, bgdc.getRateTarget());
                            if (StringUtils.isNotBlank(bfb)) {
                                bfb = to4value(2, Double.parseDouble(bfb) * 100);
                            }
                            buffer.append("占").append(bgdc.getDlmc()).append(to4value(4, bgdc.getSpheroidArea())).append("亩").append(bfb).append("%").append(",");
                        });
                    }
                    if (StringUtils.isNotBlank(buffer.toString())) {
                        buffer.deleteCharAt(buffer.length() - 1);
                        ResultShapeDk shapeDk = new ResultShapeDk();
                        shapeDk.setId(dk.getId());
                        shapeDk.setBgdcAnalysis(buffer.toString());
                        boolean b = resultShapeDkService.updateById(shapeDk);
                        if (b) {
                            System.err.println("更新成功->:b = " + b);
                        }
                    }
                }
            }
        }
    }

    public static String to4value(int scale, Double value) {
        if (ObjectUtils.isEmpty(value)) {
            return "0.0000";
        }
        BigDecimal decimal = new BigDecimal(value);
        // 使用 setScale 方法设置小数点后的位数,并指定四舍五入模式
        BigDecimal roundedValue = decimal.setScale(scale, RoundingMode.HALF_UP);
        return roundedValue.toString();
    }

}