开发一个前后端分离的webgis城市共享单车投放管理系统(4)

文章同步更新于我的个人博客:松果猿的博客,欢迎访问获取更多技术分享。

同时,您也可以关注我的微信公众号:松果猿的代码工坊,获取最新文章推送和编程技巧。

前言

通过前三期我们已经实现了这个共享单车管理系统的一部分功能,下面我们这一期实现单车投放区域查询

后端接口开发

毕竟我们这只是一个简单的系统,就不写这些复杂的业务逻辑了,后端的逻辑代码都是简化的,我们也不是写什么企业级的代码,就一切从简了。

我们需要安装PostGIS扩展来管理我们的地理数据,我们通过如下的SQL建表:

-- 启用PostGIS扩展
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

-- 区域表
CREATE TABLE regions (
    id BIGSERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,           -- 区域名称
    rno VARCHAR(50) UNIQUE NOT NULL,      -- 区域编号
    capacity INTEGER NOT NULL,            -- 区域单车容量
    exist INTEGER DEFAULT 0,              -- 当前存量
    geometry GEOMETRY(Polygon, 4326) NOT NULL  -- 地理边界
);

-- 单车表
CREATE TABLE bikes (
    id BIGSERIAL PRIMARY KEY,
    bno VARCHAR(50) UNIQUE NOT NULL,      -- 单车编号
    regionid BIGINT,                      -- 区域ID(逻辑外键)
    location GEOMETRY(Point, 4326) NOT NULL -- 当前位置
);

-- 区域空间索引
CREATE INDEX idx_regions_geometry ON regions USING GIST(geometry);

-- 单车位置索引
CREATE INDEX idx_bikes_location ON bikes USING GIST(location);

-- 单车区域索引
CREATE INDEX idx_bikes_regionid ON bikes(regionid);

现在我们已经创建了region单车投放区域表以及单车位置bikes

我们需要一个统一的响应体类,我直接把苍穹外卖的弄过来(CV大法):

Result.java

package com.beson.result;

import lombok.Data;

import java.io.Serializable;

/**
 * 后端统一返回结果
 * @param <T>
 */
@Data
public class Result<T> implements Serializable {
   

    private Integer code; //编码:1成功,0和其它数字为失败
    private String msg; //错误信息
    private T data; //数据

    public static <T> Result<T> success() {
   
        Result<T> result = new Result<T>();
        result.code = 1;
        return result;
    }

    public static <T> Result<T> success(T object) {
   
        Result<T> result = new Result<T>();
        result.data = object;
        result.code = 1;
        return result;
    }

    public static <T> Result<T> error(String msg) {
   
        Result result = new Result();
        result.msg = msg;
        result.code = 0;
        return result;
    }

}

PageResult.java

package com.beson.result;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.List;

/**
 * 封装分页查询结果
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageResult implements Serializable {
   

    private long total; //总记录数

    private List records; //当前页数据集合

}

再来新建一个接收前端参数的DTO类以及Region的一个模型数据类:

RegionPageQueryDTO.java

package com.beson.DTO;

import lombok.Data;

@Data
public class RegionPageQueryDTO {
   
    //页码
    private int page;

    //每页显示记录数
    private int pageSize;
}

Region.java

package com.beson.model;

import lombok.Data;

@Data
public class Region {
   
    private Long id;
    private String name;
    private String rno;
    private Integer capacity;
    private Integer exist;
    private String geometry; // WKT格式
}

我们使用PageHelper这个工具,简化一下分页逻辑代码:

引入依赖

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.6</version>
</dependency>

下面就是MVC三层架构了,懂得都懂:

RegionController.java(省略了包声明导入语句,不然太赘述)


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值