From e58078bc75960af819597e79a1bd622d8e3c329d Mon Sep 17 00:00:00 2001 From: zhangheng Date: Fri, 10 Oct 2025 18:04:31 +0800 Subject: [PATCH] =?UTF-8?q?##=20=E8=A1=8C=E6=94=BF=E5=8C=BA=E5=88=92?= =?UTF-8?q?=E6=96=B0=E5=A2=9E(=E7=99=BE=E5=BA=A6api)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzs/system/base/IBdAreaNewServiceApi.java | 17 +++ .../system/base/mapper/BdAreaNewMapper.java | 16 ++ .../provider/BdAreaNewServiceProvider.java | 139 ++++++++++++++++++ .../base/service/IBdAreaNewService.java | 16 ++ .../service/impl/BdAreaNewServiceImpl.java | 20 +++ .../mapper/system/base/BdAreaNewMapper.xml | 5 + .../common/domain/system/base/BdAreaNew.java | 56 +++++++ .../main/java/com/hzs/third/job/MapJob.java | 52 +++++++ .../com.hzs.common.domain/BdAreaNewMapper.xml | 34 +++++ 9 files changed, 355 insertions(+) create mode 100644 bd-api/bd-api-system/src/main/java/com/hzs/system/base/IBdAreaNewServiceApi.java create mode 100644 bd-business/bd-business-system/src/main/java/com/hzs/system/base/mapper/BdAreaNewMapper.java create mode 100644 bd-business/bd-business-system/src/main/java/com/hzs/system/base/provider/BdAreaNewServiceProvider.java create mode 100644 bd-business/bd-business-system/src/main/java/com/hzs/system/base/service/IBdAreaNewService.java create mode 100644 bd-business/bd-business-system/src/main/java/com/hzs/system/base/service/impl/BdAreaNewServiceImpl.java create mode 100644 bd-business/bd-business-system/src/main/resources/mapper/system/base/BdAreaNewMapper.xml create mode 100644 bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/system/base/BdAreaNew.java create mode 100644 bd-third/src/main/java/com/hzs/third/job/MapJob.java create mode 100644 code-util/src/main/resources/mapper/com.hzs.common.domain/BdAreaNewMapper.xml diff --git a/bd-api/bd-api-system/src/main/java/com/hzs/system/base/IBdAreaNewServiceApi.java b/bd-api/bd-api-system/src/main/java/com/hzs/system/base/IBdAreaNewServiceApi.java new file mode 100644 index 00000000..474a447b --- /dev/null +++ b/bd-api/bd-api-system/src/main/java/com/hzs/system/base/IBdAreaNewServiceApi.java @@ -0,0 +1,17 @@ +package com.hzs.system.base; + +import cn.hutool.json.JSONObject; +import com.hzs.common.core.domain.R; + +/** + *

+ * 服务类 + *

+ * + * @author hzs + * @since 2025-10-10 + */ +public interface IBdAreaNewServiceApi { + + R upAreaDate(JSONObject result); +} diff --git a/bd-business/bd-business-system/src/main/java/com/hzs/system/base/mapper/BdAreaNewMapper.java b/bd-business/bd-business-system/src/main/java/com/hzs/system/base/mapper/BdAreaNewMapper.java new file mode 100644 index 00000000..dffbda66 --- /dev/null +++ b/bd-business/bd-business-system/src/main/java/com/hzs/system/base/mapper/BdAreaNewMapper.java @@ -0,0 +1,16 @@ +package com.hzs.system.base.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.hzs.common.domain.system.base.BdAreaNew; + +/** + *

+ * Mapper 接口 + *

+ * + * @author hzs + * @since 2025-10-10 + */ +public interface BdAreaNewMapper extends BaseMapper { + +} diff --git a/bd-business/bd-business-system/src/main/java/com/hzs/system/base/provider/BdAreaNewServiceProvider.java b/bd-business/bd-business-system/src/main/java/com/hzs/system/base/provider/BdAreaNewServiceProvider.java new file mode 100644 index 00000000..64748a22 --- /dev/null +++ b/bd-business/bd-business-system/src/main/java/com/hzs/system/base/provider/BdAreaNewServiceProvider.java @@ -0,0 +1,139 @@ +package com.hzs.system.base.provider; + +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONObject; +import com.hzs.common.core.constant.CountryConstants; +import com.hzs.common.core.constant.MagicNumberConstants; +import com.hzs.common.core.domain.R; +import com.hzs.common.domain.system.base.BdAreaNew; +import com.hzs.system.base.IBdAreaNewServiceApi; +import com.hzs.system.base.service.IBdAreaNewService; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.JdbcTemplate; + +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author hzs + * @since 2025-10-10 + */ + +@Slf4j +@DubboService +public class BdAreaNewServiceProvider implements IBdAreaNewServiceApi { + @Autowired + private IBdAreaNewService iBdAreaNewService; + + @Autowired + private JdbcTemplate jdbcTemplate; + + @Override + public R upAreaDate(JSONObject result) { + + Set allCodesFromApi = new HashSet<>(); + // 最外层,全国,直接过滤 + JSONArray country = result.getJSONArray("districts"); + // 省 + JSONObject provinces = country.getJSONObject(0); + // 省列表 + JSONArray provincesArray = provinces.getJSONArray("districts"); + // 查询所有数据 + List allDbAreas = iBdAreaNewService.list(); + Map dbMap = allDbAreas.stream() + .collect(Collectors.toMap(BdAreaNew::getCode, a -> a)); + + for (int i = 0; i < provincesArray.size(); i++) { + // 迭代处理数据 + parseDistrict(provincesArray.getJSONObject(i), 0L, allCodesFromApi,dbMap); + } + + // 对数据库中未出现的地区进行逻辑删除标记 + for (BdAreaNew bdAreaNew : allDbAreas) { + if (!allCodesFromApi.contains(bdAreaNew.getCode()) && bdAreaNew.getDelFlag() == 0) { + bdAreaNew.setSyncStatus("DELETED"); + iBdAreaNewService.removeById(bdAreaNew); + iBdAreaNewService.updateById(bdAreaNew); + log.info("逻辑删除地区:{}", bdAreaNew.getName()); + } + } + return R.ok(); + } + private void parseDistrict(JSONObject district, Long parentId, Set allCodesFromApi, + Map dbMap) { + if ("4".equals(district.getStr("level")) || "990000".equals(district.getStr("code"))) { + // 第4级行政区划(街道)和990000这个地区不需要 + return; + } + // 操作用户 + Long userId = MagicNumberConstants.PK_ADMIN; + // 所属国家 + Integer pkCountry = CountryConstants.CHINA_COUNTRY; + // 当前时间 + Date nowDate = new Date(); + String name = district.getStr("name"); + String code = district.getStr("code"); + allCodesFromApi.add(code); + + BdAreaNew existing = dbMap.get(code); + + if (existing == null) { + BdAreaNew area = new BdAreaNew(); + Integer newId = getNextSeqId(); + area.setPkId(newId); + area.setName(name); + area.setCode(code); + area.setParent(parentId == null ? 0L : parentId); + area.setEnableState(0); + area.setDelFlag(0); + area.setPkCountry(pkCountry); + area.setPkCreator(userId); + area.setCreationTime(nowDate); + area.setBindNum(1); + area.setSyncStatus("NEW"); + + iBdAreaNewService.save(area); + dbMap.put(code, area); + existing = area; + log.info("新增地区:{} code={} pkId={}", name, code, newId); + } else { + boolean updated = false; + if (!existing.getName().equals(name)) { + existing.setName(name); + updated = true; + } + if (!Objects.equals(existing.getParent(), parentId)) { + existing.setParent(parentId == null ? 0L : parentId); + updated = true; + existing.setSyncStatus("MOVED"); + } + if (updated) { + existing.setModifiedTime(new Date()); + iBdAreaNewService.updateById(existing); + log.info("更新地区:{} code={}", name, code); + } else { + existing.setSyncStatus("NORMAL"); + } + } + + Integer currentParentId = existing.getPkId(); + JSONArray subList = district.getJSONArray("districts"); + if (subList != null && !subList.isEmpty()) { + for (int i = 0; i < subList.size(); i++) { + parseDistrict(subList.getJSONObject(i), Long.valueOf(currentParentId), allCodesFromApi, dbMap); + } + } + } + private Integer getNextSeqId() { + return jdbcTemplate.queryForObject("SELECT BD_AREA_NEW_SEQ.NEXTVAL FROM dual", Integer.class); + } + + +} diff --git a/bd-business/bd-business-system/src/main/java/com/hzs/system/base/service/IBdAreaNewService.java b/bd-business/bd-business-system/src/main/java/com/hzs/system/base/service/IBdAreaNewService.java new file mode 100644 index 00000000..021d630a --- /dev/null +++ b/bd-business/bd-business-system/src/main/java/com/hzs/system/base/service/IBdAreaNewService.java @@ -0,0 +1,16 @@ +package com.hzs.system.base.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.hzs.common.domain.system.base.BdAreaNew; + +/** + *

+ * 服务类 + *

+ * + * @author hzs + * @since 2025-10-10 + */ +public interface IBdAreaNewService extends IService { + +} diff --git a/bd-business/bd-business-system/src/main/java/com/hzs/system/base/service/impl/BdAreaNewServiceImpl.java b/bd-business/bd-business-system/src/main/java/com/hzs/system/base/service/impl/BdAreaNewServiceImpl.java new file mode 100644 index 00000000..cfc808e6 --- /dev/null +++ b/bd-business/bd-business-system/src/main/java/com/hzs/system/base/service/impl/BdAreaNewServiceImpl.java @@ -0,0 +1,20 @@ +package com.hzs.system.base.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.hzs.common.domain.system.base.BdAreaNew; +import com.hzs.system.base.mapper.BdAreaNewMapper; +import com.hzs.system.base.service.IBdAreaNewService; +import org.springframework.stereotype.Service; + +/** + *

+ * 服务实现类 + *

+ * + * @author hzs + * @since 2025-10-10 + */ +@Service +public class BdAreaNewServiceImpl extends ServiceImpl implements IBdAreaNewService { + +} diff --git a/bd-business/bd-business-system/src/main/resources/mapper/system/base/BdAreaNewMapper.xml b/bd-business/bd-business-system/src/main/resources/mapper/system/base/BdAreaNewMapper.xml new file mode 100644 index 00000000..a047d514 --- /dev/null +++ b/bd-business/bd-business-system/src/main/resources/mapper/system/base/BdAreaNewMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/system/base/BdAreaNew.java b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/system/base/BdAreaNew.java new file mode 100644 index 00000000..d4ee327d --- /dev/null +++ b/bd-common/bd-common-domain/src/main/java/com/hzs/common/domain/system/base/BdAreaNew.java @@ -0,0 +1,56 @@ +package com.hzs.common.domain.system.base; + +import com.baomidou.mybatisplus.annotation.*; + +import java.util.Date; + +import com.hzs.common.core.web.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + *

+ * + *

+ * + * @author hzs + * @since 2025-10-10 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Accessors(chain = true) +@TableName("BD_AREA_NEW") +@KeySequence("BD_AREA_NEW_SEQ") +public class BdAreaNew extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @TableField("PK_ID") + @TableId(type = IdType.INPUT) + private Integer pkId; + + @TableField("NAME") + private String name; + + @TableField("CODE") + private String code; + + @TableField("PARENT") + private Long parent; + + @TableField("ENABLE_STATE") + private Integer enableState; + + @TableField("BIND_NUM") + private Integer bindNum; + + @TableField("LAST_SYNC_TIME") + private Date lastSyncTime; + + @TableField("SYNC_STATUS") + private String syncStatus; + + + +} diff --git a/bd-third/src/main/java/com/hzs/third/job/MapJob.java b/bd-third/src/main/java/com/hzs/third/job/MapJob.java new file mode 100644 index 00000000..a5cd8ba4 --- /dev/null +++ b/bd-third/src/main/java/com/hzs/third/job/MapJob.java @@ -0,0 +1,52 @@ +package com.hzs.third.job; + +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSONArray; +import com.hzs.common.core.domain.R; +import com.hzs.common.core.web.domain.AjaxResult; +import com.hzs.system.base.IBdAreaNewServiceApi; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.*; + +@Slf4j +@RestController +@RequestMapping("test-map") +public class MapJob { + + private static final String AK = "k5I8XpHFt78QaQ8GHclQ3wEN57XlvErC"; + + private static final String API_URL = "https://api.map.baidu.com/api_region_search/v1/"; + + @DubboReference(timeout = 60000) + IBdAreaNewServiceApi iBdAreaNewServiceApi; + + @RequestMapping("map-job") + public AjaxResult map() { + + Map params = new HashMap<>(); + params.put("ak", AK); + params.put("keyword", "全国"); + params.put("extensions_code", "1"); + params.put("sub_admin", "3"); + + String resultStr = HttpUtil.get(API_URL, params); + JSONObject result = JSONUtil.parseObj(resultStr); + if (result.getInt("status") != 0) { + log.error("百度地图API请求失败: {}", resultStr); + return AjaxResult.error(); + } + // 对行政区划进行处理 + R R = iBdAreaNewServiceApi.upAreaDate(result); + if (R.isSuccess()) { + return AjaxResult.success(); + } + return AjaxResult.error(); + } + +} diff --git a/code-util/src/main/resources/mapper/com.hzs.common.domain/BdAreaNewMapper.xml b/code-util/src/main/resources/mapper/com.hzs.common.domain/BdAreaNewMapper.xml new file mode 100644 index 00000000..06671225 --- /dev/null +++ b/code-util/src/main/resources/mapper/com.hzs.common.domain/BdAreaNewMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + CREATION_TIME, + MODIFIED_TIME, + DEL_FLAG, + PK_COUNTRY, + PK_CREATOR, + PK_MODIFIED, + PK_ID, NAME, CODE, PARENT, ENABLE_STATE, BIND_NUM, LAST_SYNC_TIME, SYNC_STATUS + + +