From cb2b42bfbed2ef1d6b104b1aac053ecc132eb90d Mon Sep 17 00:00:00 2001 From: 王彪总 Date: Mon, 22 Jun 2026 17:45:04 +0800 Subject: [PATCH] feat(garden): 优化城市部件导出功能并添加二维码页面 --- docs/城市部件-建表SQL.sql | 6 +++--- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/CityComponentController.java | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/vo/CityComponentExportVO.java | 82 ++++++++++++++++++++++++++++------------------------------------------------------ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/vo/CityComponentRespVO.java | 7 +++---- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/citycomponent/CityComponentDO.java | 6 +++--- urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/citycomponent/CityComponentService.java | 2 ++ urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/citycomponent/CityComponentServiceImpl.java | 29 +++++++++++++++++++---------- 7 files changed, 202 insertions(+), 83 deletions(-) diff --git a/docs/城市部件-建表SQL.sql b/docs/城市部件-建表SQL.sql index 4541fb2..72a3410 100644 --- a/docs/城市部件-建表SQL.sql +++ b/docs/城市部件-建表SQL.sql @@ -168,9 +168,9 @@ CREATE TABLE `garden_city_component` ( `area` varchar(128) DEFAULT NULL COMMENT '所属区域', `road_code` varchar(16) DEFAULT NULL COMMENT '道路编码', `road_name` varchar(128) DEFAULT NULL COMMENT '道路名称', - `x_coord` decimal(12,8) DEFAULT NULL COMMENT 'X坐标(WGS84经度)', - `y_coord` decimal(12,8) DEFAULT NULL COMMENT 'Y坐标(WGS84纬度)', - `z_coord` decimal(10,4) DEFAULT NULL COMMENT 'Z坐标(高程)', + `coordx` decimal(18,8) DEFAULT NULL COMMENT 'X坐标(WGS84经度)', + `coordy` decimal(18,8) DEFAULT NULL COMMENT 'Y坐标(WGS84纬度)', + `coordz` decimal(18,8) DEFAULT NULL COMMENT 'Z坐标(高程)', `longitude_amap` decimal(12,8) DEFAULT NULL COMMENT '高德经度(GCJ02,自动转换)', `latitude_amap` decimal(12,8) DEFAULT NULL COMMENT '高德纬度(GCJ02,自动转换)', `install_orientation` varchar(32) DEFAULT NULL COMMENT '安装方位(人行道/车行道/绿化带)', diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/CityComponentController.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/CityComponentController.java index 569c89f..5e85624 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/CityComponentController.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/CityComponentController.java @@ -1,14 +1,14 @@ package com.zteits.urbanops.module.garden.controller.admin.citycomponent; import cn.idev.excel.FastExcelFactory; +import cn.idev.excel.converters.longconverter.LongStringConverter; import com.zteits.urbanops.framework.excel.core.handler.ColumnWidthMatchStyleStrategy; -import com.zteits.urbanops.framework.excel.core.handler.SelectSheetWriteHandler; -import com.zteits.urbanops.framework.excel.core.util.ExcelUtils; import com.zteits.urbanops.module.garden.controller.admin.citycomponent.vo.*; import com.zteits.urbanops.module.garden.dal.dataobject.citycomponent.CityComponentDO; import com.zteits.urbanops.module.garden.dal.dataobject.citycomponenttype.CityComponentTypeDO; import com.zteits.urbanops.module.garden.dal.mysql.citycomponenttype.CityComponentTypeMapper; import com.zteits.urbanops.module.garden.service.citycomponent.CityComponentService; +import org.apache.poi.ss.usermodel.*; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import jakarta.annotation.Resource; @@ -19,8 +19,13 @@ import io.swagger.v3.oas.annotations.Operation; import jakarta.validation.*; import jakarta.servlet.http.HttpServletResponse; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; import java.math.BigDecimal; +import java.io.ByteArrayOutputStream; +import java.io.ByteArrayInputStream; import java.io.IOException; +import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.time.LocalDate; @@ -89,14 +94,97 @@ public class CityComponentController { List list = cityComponentService.getList(reqVO); List exportList = BeanUtils.toBean(list, CityComponentExportVO.class); String filename = "城市部件" + LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) + ".xlsx"; - response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); - response.setCharacterEncoding("utf-8"); - response.setHeader("Content-disposition", - "attachment;filename*=utf-8''" + URLEncoder.encode(filename, StandardCharsets.UTF_8)); - FastExcelFactory.write(response.getOutputStream(), CityComponentExportVO.class) + + // 三级合并表头(列优先:headList.get(col).get(row)) + List> headList = new ArrayList<>(); + // 资产类型(col 0-2) + headList.add(java.util.Arrays.asList("资产类型", "一级资产类型")); + headList.add(java.util.Arrays.asList("", "二级资产类型")); + headList.add(java.util.Arrays.asList("", "三级资产类型")); + // 基础信息(col 3-10) + headList.add(java.util.Arrays.asList("基础信息", "资产ID")); + headList.add(java.util.Arrays.asList("", "所属区域")); + headList.add(java.util.Arrays.asList("", "X")); + headList.add(java.util.Arrays.asList("", "Y")); + headList.add(java.util.Arrays.asList("", "Z")); + headList.add(java.util.Arrays.asList("", "道路名称")); + headList.add(java.util.Arrays.asList("", "安装方位")); + headList.add(java.util.Arrays.asList("", "所属网格")); + // 规格与设备信息(col 11-25) + headList.add(java.util.Arrays.asList("规格与设备信息", "品牌/厂家")); + headList.add(java.util.Arrays.asList("", "型号规格")); + headList.add(java.util.Arrays.asList("", "材质")); + headList.add(java.util.Arrays.asList("", "长")); + headList.add(java.util.Arrays.asList("", "宽")); + headList.add(java.util.Arrays.asList("", "高")); + headList.add(java.util.Arrays.asList("", "胸径")); + headList.add(java.util.Arrays.asList("", "安装时间/种植时间")); + headList.add(java.util.Arrays.asList("", "资产状态")); + headList.add(java.util.Arrays.asList("", "管理单位")); + headList.add(java.util.Arrays.asList("", "责任人")); + headList.add(java.util.Arrays.asList("", "投入年限")); + headList.add(java.util.Arrays.asList("", "维保到期日")); + headList.add(java.util.Arrays.asList("", "采购批次/项目名称")); + headList.add(java.util.Arrays.asList("", "图片")); + List mergeList = java.util.Arrays.asList( + new org.apache.poi.ss.util.CellRangeAddress(0, 0, 0, 2), + new org.apache.poi.ss.util.CellRangeAddress(0, 0, 3, 10), + new org.apache.poi.ss.util.CellRangeAddress(0, 0, 11, 25) + ); + + // 先写数据到内存(含三级合并表头) + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + FastExcelFactory.write(baos) + .head(headList) .registerWriteHandler(new ColumnWidthMatchStyleStrategy()) - .registerWriteHandler(new SelectSheetWriteHandler(CityComponentExportVO.class)) + .registerWriteHandler(new com.zteits.urbanops.framework.excel.core.handler.HeadMergeHandler( + mergeList.toArray(new org.apache.poi.ss.util.CellRangeAddress[0]))) + .registerConverter(new LongStringConverter()) .sheet("数据").doWrite(exportList); + + // 重新打开 workbook,在"图片"列嵌入图片(列索引 25) + try (Workbook workbook = WorkbookFactory.create(new ByteArrayInputStream(baos.toByteArray()))) { + Sheet sheet = workbook.getSheetAt(0); + int imgCol = 25; // "图片"列固定在第26列(索引25) + if (imgCol >= 0) { + sheet.setColumnWidth(imgCol, 25 * 256); + for (int i = 0; i < exportList.size(); i++) { + String urls = exportList.get(i).getImageUrls(); + if (urls == null || urls.isEmpty()) continue; + String[] parts = urls.split(","); + Row row = sheet.getRow(i + 2); // +2 跳过两行表头 + if (row == null) row = sheet.createRow(i + 2); + row.setHeightInPoints(70); + Cell urlCell = row.getCell(imgCol); + if (urlCell != null) urlCell.setBlank(); + + for (int j = 0; j < Math.min(parts.length, 3); j++) { + try { + BufferedImage img = ImageIO.read(new URL(parts[j].trim())); + if (img == null) continue; + ByteArrayOutputStream ibaos = new ByteArrayOutputStream(); + ImageIO.write(img, "jpg", ibaos); + int picIdx = workbook.addPicture(ibaos.toByteArray(), Workbook.PICTURE_TYPE_JPEG); + + Drawing drawing = sheet.createDrawingPatriarch(); + ClientAnchor anchor = workbook.getCreationHelper().createClientAnchor(); + anchor.setCol1(imgCol + j * 2); + anchor.setRow1(i + 2); + anchor.setDx1(200); anchor.setDy1(200); + anchor.setCol2(imgCol + j * 2 + 2); + anchor.setRow2(i + 3); + anchor.setDx2(-200); anchor.setDy2(-200); + drawing.createPicture(anchor, picIdx); + } catch (Exception ignored) {} + } + } + } + + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", + "attachment;filename*=UTF-8''" + URLEncoder.encode(filename, StandardCharsets.UTF_8)); + workbook.write(response.getOutputStream()); + } } @GetMapping("/generate-qr") @@ -106,6 +194,51 @@ public class CityComponentController { return success(cityComponentService.generateQrCode(id)); } + @GetMapping("/qr-page") + @Operation(summary = "二维码扫码页面(公开)") + @jakarta.annotation.security.PermitAll + public void qrPage(@RequestParam("code") String componentCode, HttpServletResponse response) throws IOException { + CityComponentDO comp = cityComponentService.getByComponentCode(componentCode); + StringBuilder html = new StringBuilder(); + html.append(""); + html.append("").append(comp.getComponentCode()).append(""); + html.append(""); + html.append("
资产信息
"); + html.append("
"); + html.append("
资产ID
").append(nvl(comp.getComponentCode())).append("
"); + html.append("
资产状态
").append(nvl(comp.getAssetStatus())).append("
"); + html.append("
一级类型
").append(nvl(comp.getLevelOneTypeName())).append("
"); + html.append("
二级类型
").append(nvl(comp.getLevelTwoTypeName())).append("
"); + html.append("
三级类型
").append(nvl(comp.getLevelThreeTypeName())).append("
"); + html.append("
所属区域
").append(nvl(comp.getArea())).append("
"); + html.append("
道路名称
").append(nvl(comp.getRoadName())).append("
"); + html.append("
安装方位
").append(nvl(comp.getInstallOrientation())).append("
"); + html.append("
品牌/厂家
").append(nvl(comp.getBrand())).append("
"); + html.append("
型号规格
").append(nvl(comp.getModelSpec())).append("
"); + html.append("
材质
").append(nvl(comp.getMaterial())).append("
"); + html.append("
管理单位
").append(nvl(comp.getManagementUnit())).append("
"); + html.append("
责任人
").append(nvl(comp.getResponsiblePerson())).append("
"); + html.append("
安装时间
").append(comp.getInstallDate()!=null?comp.getInstallDate().toString():"-").append("
"); + html.append("
维保到期日
").append(comp.getMaintenanceDeadline()!=null?comp.getMaintenanceDeadline().toString():"-").append("
"); + html.append("
采购批次
").append(nvl(comp.getProcurementBatch())).append("
"); + html.append("
"); + // 显示图片 + if (comp.getImageUrls() != null && !comp.getImageUrls().isEmpty()) { + html.append("
图片信息
"); + for (String url : comp.getImageUrls().split(",")) { + html.append(""); + } + html.append("
"); + } + html.append(""); + response.setContentType("text/html;charset=UTF-8"); + response.getWriter().write(html.toString()); + } + @GetMapping("/import-template") @Operation(summary = "下载导入模板") @jakarta.annotation.security.PermitAll @@ -122,7 +255,7 @@ public class CityComponentController { @PreAuthorize("@ss.hasPermission('garden:city-component:create')") public CommonResult importExcel(@RequestParam("file") MultipartFile file) throws IOException { List importList = FastExcelFactory.read(file.getInputStream()) - .head(CityComponentImportVO.class).headRowNumber(1).sheet().doReadSync(); + .head(CityComponentImportVO.class).headRowNumber(2).sheet().doReadSync(); List errors = new ArrayList<>(); // 第一遍:全量校验 for (int i = 0; i < importList.size(); i++) { @@ -178,4 +311,6 @@ public class CityComponentController { } return success("成功导入 " + count + " 条记录"); } + + private String nvl(String s) { return s != null ? s : "-"; } } diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/vo/CityComponentExportVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/vo/CityComponentExportVO.java index f0e7bee..4f83a2e 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/vo/CityComponentExportVO.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/vo/CityComponentExportVO.java @@ -1,67 +1,41 @@ package com.zteits.urbanops.module.garden.controller.admin.citycomponent.vo; -import cn.idev.excel.annotation.ExcelIgnoreUnannotated; -import cn.idev.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDate; -import java.time.LocalDateTime; @Schema(description = "城市部件导出 VO") @Data -@ExcelIgnoreUnannotated public class CityComponentExportVO { - @ExcelProperty("资产ID") - private String componentCode; - @ExcelProperty("一级类型") - private String levelOneTypeName; - @ExcelProperty("二级类型") - private String levelTwoTypeName; - @ExcelProperty("三级类型") - private String levelThreeTypeName; - @ExcelProperty("所属区域") - private String area; - @ExcelProperty("道路名称") - private String roadName; - @ExcelProperty("安装方位") - private String installOrientation; - @ExcelProperty("所属网格") - private String grid; - @ExcelProperty("品牌") - private String brand; - @ExcelProperty("型号规格") - private String modelSpec; - @ExcelProperty("材质") - private String material; - @ExcelProperty("安装时间") - private LocalDate installDate; - @ExcelProperty("资产状态") - private String assetStatus; - @ExcelProperty("管理单位") - private String managementUnit; - @ExcelProperty("责任人") - private String responsiblePerson; - @ExcelProperty("维保到期日") - private LocalDate maintenanceDeadline; - @ExcelProperty("巡检周期") - private String inspectionCycle; - @ExcelProperty("最近巡检时间") - private LocalDateTime lastInspectionTime; - @ExcelProperty("巡检结果") - private String inspectionResult; - @ExcelProperty("异常描述") - private String abnormalDescription; - @ExcelProperty("报修工单编号") - private String repairOrderNo; - @ExcelProperty("维修完成时间") - private LocalDateTime repairCompleteTime; - @ExcelProperty("维修单位") - private String repairUnit; - @ExcelProperty("图片信息") - private String imageUrls; - @ExcelProperty("备注") - private String remark; + private String levelOneTypeName; // 1. 一级资产类型 + private String levelTwoTypeName; // 2. 二级资产类型 + private String levelThreeTypeName; // 3. 三级资产类型 + + private String componentCode; // 4. 资产ID + private String area; // 5. 所属区域 + private BigDecimal coordx; // 6. X + private BigDecimal coordy; // 7. Y + private BigDecimal coordz; // 8. Z + private String roadName; // 9. 道路名称 + private String installOrientation; // 10. 安装方位 + private String grid; // 11. 所属网格 + + private String brand; // 12. 品牌/厂家 + private String modelSpec; // 13. 型号规格 + private String material; // 14. 材质 + private BigDecimal length; // 15. 长 + private BigDecimal width; // 16. 宽 + private BigDecimal height; // 17. 高 + private BigDecimal dbh; // 18. 胸径 + private LocalDate installDate; // 19. 安装时间/种植时间 + private String assetStatus; // 20. 资产状态 + private String managementUnit; // 21. 管理单位 + private String responsiblePerson; // 22. 责任人 + private BigDecimal serviceYears; // 23. 投入年限 + private LocalDate maintenanceDeadline; // 24. 维保到期日 + private String procurementBatch; // 25. 采购批次/项目名称 + private String imageUrls; // 26. 图片 } diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/vo/CityComponentRespVO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/vo/CityComponentRespVO.java index fabf14c..2f60cf6 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/vo/CityComponentRespVO.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/controller/admin/citycomponent/vo/CityComponentRespVO.java @@ -43,11 +43,10 @@ public class CityComponentRespVO { private String roadCode; @ExcelProperty("X坐标") - private BigDecimal xCoord; + private BigDecimal coordx; @ExcelProperty("Y坐标") - private BigDecimal yCoord; - - private BigDecimal zCoord; + private BigDecimal coordy; + private BigDecimal coordz; private BigDecimal longitudeAmap; private BigDecimal latitudeAmap; diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/citycomponent/CityComponentDO.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/citycomponent/CityComponentDO.java index 7d3ba08..fd11853 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/citycomponent/CityComponentDO.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/dal/dataobject/citycomponent/CityComponentDO.java @@ -37,9 +37,9 @@ public class CityComponentDO extends BaseDO { private String area; private String roadCode; private String roadName; - private BigDecimal xCoord; - private BigDecimal yCoord; - private BigDecimal zCoord; + private BigDecimal coordx; + private BigDecimal coordy; + private BigDecimal coordz; private BigDecimal longitudeAmap; private BigDecimal latitudeAmap; private String installOrientation; diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/citycomponent/CityComponentService.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/citycomponent/CityComponentService.java index feb9edc..caa504a 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/citycomponent/CityComponentService.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/citycomponent/CityComponentService.java @@ -23,4 +23,6 @@ public interface CityComponentService { List getList(CityComponentPageReqVO reqVO); String generateQrCode(Long id); + + CityComponentDO getByComponentCode(String componentCode); } diff --git a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/citycomponent/CityComponentServiceImpl.java b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/citycomponent/CityComponentServiceImpl.java index 24fdb8a..debf3be 100644 --- a/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/citycomponent/CityComponentServiceImpl.java +++ b/urbanops-module-garden/src/main/java/com/zteits/urbanops/module/garden/service/citycomponent/CityComponentServiceImpl.java @@ -34,9 +34,9 @@ public class CityComponentServiceImpl implements CityComponentService { public Long create(@Valid CityComponentSaveReqVO reqVO) { validateCodeUnique(reqVO.getComponentCode(), null); CityComponentDO comp = BeanUtils.toBean(reqVO, CityComponentDO.class); - if (reqVO.getCoordx() != null) comp.setXCoord(new BigDecimal(reqVO.getCoordx())); - if (reqVO.getCoordy() != null) comp.setYCoord(new BigDecimal(reqVO.getCoordy())); - if (reqVO.getCoordz() != null) comp.setZCoord(new BigDecimal(reqVO.getCoordz())); + if (reqVO.getCoordx() != null) comp.setCoordx(new BigDecimal(reqVO.getCoordx())); + if (reqVO.getCoordy() != null) comp.setCoordy(new BigDecimal(reqVO.getCoordy())); + if (reqVO.getCoordz() != null) comp.setCoordz(new BigDecimal(reqVO.getCoordz())); fillTypeNames(comp); convertCoordinates(comp); cityComponentMapper.insert(comp); @@ -55,9 +55,9 @@ public class CityComponentServiceImpl implements CityComponentService { } validateCodeUnique(reqVO.getComponentCode(), reqVO.getId()); CityComponentDO comp = BeanUtils.toBean(reqVO, CityComponentDO.class); - if (reqVO.getCoordx() != null) comp.setXCoord(new BigDecimal(reqVO.getCoordx())); - if (reqVO.getCoordy() != null) comp.setYCoord(new BigDecimal(reqVO.getCoordy())); - if (reqVO.getCoordz() != null) comp.setZCoord(new BigDecimal(reqVO.getCoordz())); + if (reqVO.getCoordx() != null) comp.setCoordx(new BigDecimal(reqVO.getCoordx())); + if (reqVO.getCoordy() != null) comp.setCoordy(new BigDecimal(reqVO.getCoordy())); + if (reqVO.getCoordz() != null) comp.setCoordz(new BigDecimal(reqVO.getCoordz())); fillTypeNames(comp); convertCoordinates(comp); cityComponentMapper.updateById(comp); @@ -95,12 +95,21 @@ public class CityComponentServiceImpl implements CityComponentService { @Override public String generateQrCode(Long id) { CityComponentDO comp = get(id); - String url = "https://urbanops.zteits.com/component/" + comp.getComponentCode(); + String url = "https://test.jichengshanshui.com.cn:28302/admin-api/garden/city-component/qr-page?code=" + comp.getComponentCode(); comp.setQrCodeUrl(url); cityComponentMapper.updateById(comp); return url; } + @Override + public CityComponentDO getByComponentCode(String componentCode) { + CityComponentDO comp = cityComponentMapper.selectByComponentCode(componentCode); + if (comp == null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.CITY_COMPONENT_NOT_EXISTS); + } + return comp; + } + private void validateCodeUnique(String code, Long excludeId) { if (code == null || code.isEmpty()) return; CityComponentDO exist = cityComponentMapper.selectByComponentCode(code); @@ -125,10 +134,10 @@ public class CityComponentServiceImpl implements CityComponentService { } private void convertCoordinates(CityComponentDO comp) { - if (comp.getXCoord() != null && comp.getYCoord() != null) { + if (comp.getCoordx() != null && comp.getCoordy() != null) { double[] gcj02 = GisCoordinateUtil.wgs84ToGcj02( - comp.getXCoord().doubleValue(), - comp.getYCoord().doubleValue()); + comp.getCoordx().doubleValue(), + comp.getCoordy().doubleValue()); comp.setLongitudeAmap(BigDecimal.valueOf(gcj02[0])); comp.setLatitudeAmap(BigDecimal.valueOf(gcj02[1])); } -- libgit2 0.21.4