Add common address module

This commit is contained in:
2026-07-20 13:39:11 +08:00
commit baad9aee5c
8 changed files with 337 additions and 0 deletions

36
sql/common_address.sql Normal file
View File

@@ -0,0 +1,36 @@
CREATE TABLE IF NOT EXISTS blade_common_address (
id BIGINT PRIMARY KEY,
address_no VARCHAR(20) NOT NULL COMMENT '地址编号',
address_name VARCHAR(100) NOT NULL COMMENT '地址名称',
address_type VARCHAR(20) NOT NULL COMMENT '地址类型:NORMAL/PORT/RAIL/AIRPORT',
station_code VARCHAR(50) DEFAULT NULL COMMENT '站点编码',
detail_address VARCHAR(255) DEFAULT NULL COMMENT '详细地址',
region_code VARCHAR(50) DEFAULT NULL COMMENT '行政区划编码',
region_name VARCHAR(255) DEFAULT NULL COMMENT '行政区划名称',
province VARCHAR(50) DEFAULT NULL COMMENT '',
city VARCHAR(50) DEFAULT NULL COMMENT '',
district VARCHAR(50) DEFAULT NULL COMMENT '区县',
longitude DECIMAL(10,6) DEFAULT NULL COMMENT '经度',
latitude DECIMAL(10,6) DEFAULT NULL COMMENT '纬度',
contact_name VARCHAR(50) DEFAULT NULL COMMENT '联系人',
contact_phone VARCHAR(50) DEFAULT NULL COMMENT '联系方式',
org_id VARCHAR(64) DEFAULT NULL COMMENT '组织ID',
org_name VARCHAR(100) DEFAULT NULL COMMENT '组织名称',
remark VARCHAR(500) DEFAULT NULL COMMENT '备注',
is_deleted TINYINT DEFAULT 0 COMMENT '删除标识',
create_user VARCHAR(64) DEFAULT NULL COMMENT '创建人',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_user VARCHAR(64) DEFAULT NULL COMMENT '更新人',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
UNIQUE KEY uk_common_address_no (address_no),
KEY idx_common_address_org (org_id),
KEY idx_common_address_name (address_name),
KEY idx_common_address_type (address_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='常用地址表';
INSERT INTO blade_common_address
(id, address_no, address_name, address_type, station_code, detail_address, region_name, province, city, district, longitude, latitude, contact_name, contact_phone, org_name, remark, is_deleted, create_user, create_time, update_user, update_time)
VALUES
(1, 'DZ12345', 'XX园区', 'NORMAL', '/', '广西壮族自治区/南宁市/江南区', '广西壮族自治区/南宁市/江南区', '广西壮族自治区', '南宁市', '江南区', NULL, NULL, NULL, NULL, '桂物物流', NULL, 0, 'admin', '2025-01-01 00:00:00', 'admin', '2025-01-01 00:00:00'),
(2, 'DZ12346', '舟山港', 'PORT', 'CNNGB', '舟山市普陀区沈家门街道港口大道18号', '浙江省/舟山市/普陀区', '浙江省', '舟山市', '普陀区', 122.320000, 29.988000, '张工', '13800138000', '桂物物流', '港口码头', 0, 'admin', '2025-01-01 00:00:00', 'admin', '2025-01-01 00:00:00'),
(3, 'DZ12347', '成都双流机场', 'AIRPORT', 'CTU', '成都市双流区机场路', '四川省/成都市/双流区', '四川省', '成都市', '双流区', 103.956000, 30.578000, '李工', '13900139000', '桂物物流', '空港机场', 0, 'admin', '2025-01-01 00:00:00', 'admin', '2025-01-01 00:00:00');

View File

@@ -0,0 +1,55 @@
package org.springblade.modules.basic.address.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springblade.modules.basic.address.entity.CommonAddress;
import org.springblade.modules.basic.address.entity.CommonAddressQuery;
import org.springblade.modules.basic.address.service.ICommonAddressService;
import java.util.List;
@RestController
@RequestMapping("/api/basic/common-address")
public class CommonAddressController {
private final ICommonAddressService commonAddressService;
public CommonAddressController(ICommonAddressService commonAddressService) {
this.commonAddressService = commonAddressService;
}
@GetMapping("/page")
public IPage<CommonAddress> page(CommonAddressQuery query) {
return commonAddressService.page(query);
}
@GetMapping("/{id}")
public CommonAddress detail(@PathVariable Long id) {
return commonAddressService.detail(id);
}
@PostMapping("/save")
public boolean save(@RequestBody CommonAddress address) {
return commonAddressService.saveAddress(address);
}
@PostMapping("/update")
public boolean update(@RequestBody CommonAddress address) {
return commonAddressService.updateAddress(address);
}
@PostMapping("/delete")
public boolean delete(@RequestBody List<Long> ids) {
return commonAddressService.removeByIds(ids);
}
@GetMapping("/export")
public List<CommonAddress> export(CommonAddressQuery query) {
return commonAddressService.listForExport(query);
}
}

View File

@@ -0,0 +1,63 @@
package org.springblade.modules.basic.address.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
@TableName("blade_common_address")
public class CommonAddress {
@TableId(value = "id", type = IdType.ASSIGN_ID)
private Long id;
private String addressNo;
private String addressName;
private String addressType;
private String stationCode;
private String detailAddress;
private String regionCode;
private String regionName;
private String province;
private String city;
private String district;
private BigDecimal longitude;
private BigDecimal latitude;
private String contactName;
private String contactPhone;
private String orgId;
private String orgName;
private String remark;
@TableLogic
private Integer isDeleted;
private String createUser;
private LocalDateTime createTime;
private String updateUser;
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,15 @@
package org.springblade.modules.basic.address.entity;
import lombok.Data;
import java.util.List;
@Data
public class CommonAddressQuery extends CommonAddress {
private Long current = 1L;
private Long size = 10L;
private List<Long> ids;
}

View File

@@ -0,0 +1,9 @@
package org.springblade.modules.basic.address.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springblade.modules.basic.address.entity.CommonAddress;
@Mapper
public interface CommonAddressMapper extends BaseMapper<CommonAddress> {
}

View File

@@ -0,0 +1,23 @@
package org.springblade.modules.basic.address.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springblade.modules.basic.address.entity.CommonAddress;
import org.springblade.modules.basic.address.entity.CommonAddressQuery;
import java.util.List;
public interface ICommonAddressService extends IService<CommonAddress> {
IPage<CommonAddress> page(CommonAddressQuery query);
CommonAddress detail(Long id);
boolean saveAddress(CommonAddress address);
boolean updateAddress(CommonAddress address);
boolean removeByIds(List<Long> ids);
List<CommonAddress> listForExport(CommonAddressQuery query);
}

View File

@@ -0,0 +1,106 @@
package org.springblade.modules.basic.address.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import org.springblade.modules.basic.address.entity.CommonAddress;
import org.springblade.modules.basic.address.entity.CommonAddressQuery;
import org.springblade.modules.basic.address.mapper.CommonAddressMapper;
import org.springblade.modules.basic.address.service.ICommonAddressService;
import java.time.LocalDateTime;
import java.util.List;
@Service
public class CommonAddressServiceImpl extends ServiceImpl<CommonAddressMapper, CommonAddress> implements ICommonAddressService {
private static final String NORMAL_TYPE = "NORMAL";
private static final String NORMAL_STATION_CODE = "/";
@Override
public IPage<CommonAddress> page(CommonAddressQuery query) {
Page<CommonAddress> page = new Page<>(query.getCurrent(), query.getSize());
return this.page(page, buildWrapper(query));
}
@Override
public CommonAddress detail(Long id) {
return getById(id);
}
@Override
public boolean saveAddress(CommonAddress address) {
normalize(address);
address.setId(null);
address.setAddressNo(generateAddressNo());
address.setCreateTime(LocalDateTime.now());
address.setUpdateTime(LocalDateTime.now());
if (address.getIsDeleted() == null) {
address.setIsDeleted(0);
}
return save(address);
}
@Override
public boolean updateAddress(CommonAddress address) {
normalize(address);
address.setUpdateTime(LocalDateTime.now());
return updateById(address);
}
public boolean removeByIds(List<Long> ids) {
return super.removeByIds(ids);
}
@Override
public List<CommonAddress> listForExport(CommonAddressQuery query) {
return list(buildWrapper(query));
}
private LambdaQueryWrapper<CommonAddress> buildWrapper(CommonAddressQuery query) {
LambdaQueryWrapper<CommonAddress> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.hasText(query.getOrgId()), CommonAddress::getOrgId, query.getOrgId())
.like(StringUtils.hasText(query.getAddressName()), CommonAddress::getAddressName, query.getAddressName())
.eq(StringUtils.hasText(query.getAddressType()), CommonAddress::getAddressType, query.getAddressType())
.like(StringUtils.hasText(query.getDetailAddress()), CommonAddress::getDetailAddress, query.getDetailAddress())
.like(StringUtils.hasText(query.getRegionName()), CommonAddress::getRegionName, query.getRegionName())
.eq(StringUtils.hasText(query.getStationCode()), CommonAddress::getStationCode, query.getStationCode())
.like(StringUtils.hasText(query.getContactName()), CommonAddress::getContactName, query.getContactName())
.like(StringUtils.hasText(query.getContactPhone()), CommonAddress::getContactPhone, query.getContactPhone())
.orderByDesc(CommonAddress::getUpdateTime);
return wrapper;
}
private String generateAddressNo() {
CommonAddress latest = lambdaQuery()
.likeRight(CommonAddress::getAddressNo, "DZ")
.orderByDesc(CommonAddress::getAddressNo)
.last("limit 1")
.one();
long next = 1L;
if (latest != null && StringUtils.hasText(latest.getAddressNo()) && latest.getAddressNo().length() >= 7) {
String digits = latest.getAddressNo().substring(2);
try {
next = Long.parseLong(digits) + 1L;
} catch (NumberFormatException ignored) {
next = 1L;
}
}
return String.format("DZ%05d", next);
}
private void normalize(CommonAddress address) {
if (address == null) {
return;
}
if (!StringUtils.hasText(address.getAddressType())) {
address.setAddressType(NORMAL_TYPE);
}
if (NORMAL_TYPE.equalsIgnoreCase(address.getAddressType())) {
address.setStationCode(NORMAL_STATION_CODE);
}
}
}

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.springblade.modules.basic.address.mapper.CommonAddressMapper">
<resultMap id="commonAddressMap" type="org.springblade.modules.basic.address.entity.CommonAddress">
<id column="id" property="id"/>
<result column="address_no" property="addressNo"/>
<result column="address_name" property="addressName"/>
<result column="address_type" property="addressType"/>
<result column="station_code" property="stationCode"/>
<result column="detail_address" property="detailAddress"/>
<result column="region_code" property="regionCode"/>
<result column="region_name" property="regionName"/>
<result column="province" property="province"/>
<result column="city" property="city"/>
<result column="district" property="district"/>
<result column="longitude" property="longitude"/>
<result column="latitude" property="latitude"/>
<result column="contact_name" property="contactName"/>
<result column="contact_phone" property="contactPhone"/>
<result column="org_id" property="orgId"/>
<result column="org_name" property="orgName"/>
<result column="remark" property="remark"/>
<result column="is_deleted" property="isDeleted"/>
<result column="create_user" property="createUser"/>
<result column="create_time" property="createTime"/>
<result column="update_user" property="updateUser"/>
<result column="update_time" property="updateTime"/>
</resultMap>
</mapper>