From e3870f66803ed4ffb118cf812c24c5ed03aa50aa Mon Sep 17 00:00:00 2001 From: fengyarnom Date: Tue, 3 Jun 2025 16:32:51 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=B5=81=E9=87=8F?= =?UTF-8?q?=E5=8D=A1=E7=9B=B8=E5=85=B3=E5=AE=9E=E4=BD=93=E7=B1=BB=20-=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=20TrafficCard=20-=20=E6=96=B0=E5=A2=9E=20Tra?= =?UTF-8?q?fficDeviceMapping=20-=20=E6=96=B0=E5=A2=9E=20TrafficRecord?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/imdroid/secapi/dto/TrafficCard.java | 59 +++++++++++++++++++ .../imdroid/secapi/dto/TrafficCardMapper.java | 37 ++++++++++++ .../secapi/dto/TrafficDeviceMapping.java | 27 +++++++++ .../dto/TrafficDeviceMappingMapper.java | 24 ++++++++ .../com/imdroid/secapi/dto/TrafficRecord.java | 26 ++++++++ .../secapi/dto/TrafficRecordMapper.java | 10 ++++ sec-beidou/src/main/resources/db/schema.sql | 49 +++++++++++++++ 7 files changed, 232 insertions(+) create mode 100644 sec-api/src/main/java/com/imdroid/secapi/dto/TrafficCard.java create mode 100644 sec-api/src/main/java/com/imdroid/secapi/dto/TrafficCardMapper.java create mode 100644 sec-api/src/main/java/com/imdroid/secapi/dto/TrafficDeviceMapping.java create mode 100644 sec-api/src/main/java/com/imdroid/secapi/dto/TrafficDeviceMappingMapper.java create mode 100644 sec-api/src/main/java/com/imdroid/secapi/dto/TrafficRecord.java create mode 100644 sec-api/src/main/java/com/imdroid/secapi/dto/TrafficRecordMapper.java diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficCard.java b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficCard.java new file mode 100644 index 00000000..84972ec2 --- /dev/null +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficCard.java @@ -0,0 +1,59 @@ +package com.imdroid.secapi.dto; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +@Data +@TableName("traffic_cards") +public class TrafficCard { + public static final int STATUS_UNKNOWN = -1; // 未知 + public static final int STATUS_WAIT_ACTIVE = 1; // 待激活 + public static final int STATUS_ACTIVATED = 2; // 已激活 + public static final int STATUS_SUSPENDED = 3; // 停机 + public static final int STATUS_CANCELLED = 4; // 注销 + public static final int STATUS_IN_STOCK = 5; // 库存 + public static final int STATUS_TESTABLE = 6; // 可测试 + public static final int STATUS_INVALID = 7; // 失效 + public static final int STATUS_NOT_EXIST = 99; // 号码不存在 + + // 查询状态常量定义 + public static final int QUERY_STATUS_NORMAL = 0; // 正常状态 + public static final int QUERY_STATUS_NOT_CURRENT_VENDOR = 1; // 非当前卡商 + public static final int QUERY_STATUS_OTHER_ERROR = 2; // 其他错误 + + @TableId(type = IdType.AUTO) + @ExcelProperty("ID") + private Integer id; + + @ExcelProperty("ICCID") + private String iccid; + + @ExcelProperty("物联卡号码") + private String msisdn; + + @ExcelProperty("状态") + private Integer status; + + @ExcelProperty("剩余流量(MB)") + private Integer remaining; + + @ExcelProperty("总流量(MB)") + private Integer total; + + @ExcelProperty("已用流量(MB)") + private Integer used; + + @TableField("update_time") + @ExcelProperty("更新时间") + private Date updateTime; + + @TableField("query_status") + @ExcelProperty("查询状态") + private Integer queryStatus; +} \ No newline at end of file diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficCardMapper.java b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficCardMapper.java new file mode 100644 index 00000000..38babdaf --- /dev/null +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficCardMapper.java @@ -0,0 +1,37 @@ +package com.imdroid.secapi.dto; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; + +@Mapper +public interface TrafficCardMapper extends BaseMapper { + + @Select("select * from traffic_cards where iccid = #{iccid} limit 1") + TrafficCard findByIccid(String iccid); + + @Update("UPDATE traffic_cards SET " + + "update_time = #{updateTime}, " + + "msisdn = #{msisdn}, " + + "status = #{status}, " + + "remaining = #{remaining}, " + + "total = #{total}, " + + "used = #{used} " + + "WHERE iccid = #{iccid}") + int updateCardInfo(TrafficCard trafficCard); + + @Update("UPDATE traffic_cards SET query_status = #{queryStatus} WHERE iccid = #{iccid}") + int updateQueryStatus(String iccid,int queryStatus); + + @Update("UPDATE traffic_cards SET " + + "update_time = #{updateTime}, " + + "remaining = #{remaining}, " + + "total = #{total}, " + + "used = #{used} " + + "WHERE iccid = #{iccid} AND iccid IS NOT NULL AND iccid != ''") + int updateCardTrafficInfo(TrafficCard trafficCard); +} \ No newline at end of file diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficDeviceMapping.java b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficDeviceMapping.java new file mode 100644 index 00000000..c3dc243b --- /dev/null +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficDeviceMapping.java @@ -0,0 +1,27 @@ +package com.imdroid.secapi.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +@Data +@TableName("traffic_device_mappings") +public class TrafficDeviceMapping { + + @TableId(type = IdType.AUTO) + private Integer id; + + private String deviceid; + + private String iccid; + + @TableField("start_time") + private Date startTime; + + @TableField("end_time") + private Date endTime; // 结束使用时间,NULL表示当前正在使用 +} \ No newline at end of file diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficDeviceMappingMapper.java b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficDeviceMappingMapper.java new file mode 100644 index 00000000..097c94e3 --- /dev/null +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficDeviceMappingMapper.java @@ -0,0 +1,24 @@ +package com.imdroid.secapi.dto; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; + +import java.util.List; + +@Mapper +public interface TrafficDeviceMappingMapper extends BaseMapper { + @Select("SELECT * FROM traffic_device_mappings WHERE deviceid = #{deviceId} AND end_time IS NULL LIMIT 1") + TrafficDeviceMapping findActiveByDeviceId(String deviceId); + + @Select("SELECT * FROM traffic_device_mappings WHERE iccid = #{iccid} AND end_time IS NULL LIMIT 1") + TrafficDeviceMapping findActiveByIccid(String iccid); + + @Select("SELECT * FROM traffic_device_mappings WHERE deviceid = #{deviceId} ORDER BY start_time DESC") + List findHistoryByDeviceId(String deviceId); + + @Update("UPDATE traffic_device_mappings SET end_time = NOW() WHERE id = #{id}") + int endMapping(Integer id); +} \ No newline at end of file diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficRecord.java b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficRecord.java new file mode 100644 index 00000000..42da916b --- /dev/null +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficRecord.java @@ -0,0 +1,26 @@ +package com.imdroid.secapi.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.util.Date; + +@Data +@TableName("traffic_records") +public class TrafficRecord { + + @TableId(type = IdType.AUTO) + private Integer id; + + private String iccid; + + @TableField("record_time") + private Date recordTime; + + private Integer remaining; // 剩余流量(MB×1000) + private Integer used; // 已用流量(MB×1000) + private Integer total; // 总流量(MB×1000) +} \ No newline at end of file diff --git a/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficRecordMapper.java b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficRecordMapper.java new file mode 100644 index 00000000..8189105b --- /dev/null +++ b/sec-api/src/main/java/com/imdroid/secapi/dto/TrafficRecordMapper.java @@ -0,0 +1,10 @@ +package com.imdroid.secapi.dto; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Mapper; + + +@Mapper +public interface TrafficRecordMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/sec-beidou/src/main/resources/db/schema.sql b/sec-beidou/src/main/resources/db/schema.sql index 50381969..d77648ef 100644 --- a/sec-beidou/src/main/resources/db/schema.sql +++ b/sec-beidou/src/main/resources/db/schema.sql @@ -396,3 +396,52 @@ CREATE TABLE IF NOT EXISTS `ehmconfig` ( `calcstathours` int DEFAULT NULL COMMENT '数据分析周期', PRIMARY KEY (`updatetime`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +/*** + 流量卡信息表 + */ +CREATE TABLE IF NOT EXISTS `traffic_cards` ( + `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键,自增,唯一', + `iccid` VARCHAR(20) NOT NULL COMMENT 'ICCID号,唯一标识SIM卡', + `msisdn` VARCHAR(20) NOT NULL COMMENT '物联卡号码', + `status` INT DEFAULT -1 COMMENT 'SIM卡状态(-1:未知, 1:待激活, 2:已激活, 3:停机, 4:注销, 5:库存, 6:可测试, 7:失效, 99:号码不存在)', + `remaining` INT DEFAULT 0 COMMENT '剩余流量,单位MB,为避免小数,存储值为实际值的1000倍', + `total` INT DEFAULT 0 COMMENT '总流量,单位MB,同上', + `used` INT DEFAULT 0 COMMENT '已用流量,单位MB,同上', + `update_time` DATETIME DEFAULT NULL COMMENT '最后更新时间', + `query_status` TINYINT DEFAULT 0 COMMENT 'SIM卡查询状态:0=正常,1=非当前卡商,2=其他错误', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_iccid` (`iccid`), + INDEX `idx_status` (`status`), + INDEX `idx_query_status` (`query_status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流量卡信息表'; + +/*** + 设备-SIM卡映射表 + */ +CREATE TABLE IF NOT EXISTS `traffic_device_mappings` ( + `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键,自增,唯一', + `deviceid` VARCHAR(20) NOT NULL COMMENT '设备ID', + `iccid` VARCHAR(20) NOT NULL COMMENT 'SIM卡ICCID', + `start_time` DATETIME NOT NULL COMMENT '开始使用时间', + `end_time` DATETIME DEFAULT NULL COMMENT '结束使用时间,NULL表示当前正在使用', + PRIMARY KEY (`id`), + KEY `idx_deviceid` (`deviceid`), + KEY `idx_iccid` (`iccid`), + KEY `idx_start_time` (`start_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备-SIM卡映射表'; + +/*** + 流量使用记录表 + */ +CREATE TABLE IF NOT EXISTS `traffic_records` ( + `id` INT NOT NULL AUTO_INCREMENT COMMENT '主键,自增,唯一', + `iccid` VARCHAR(20) NOT NULL COMMENT 'SIM卡ICCID', + `record_time` DATETIME NOT NULL COMMENT '记录时间', + `remaining` INT DEFAULT NULL COMMENT '剩余流量,单位MB,为避免小数,存储值为实际值的1000倍', + `used` INT DEFAULT NULL COMMENT '已用流量,单位MB,为避免小数,存储值为实际值的1000倍', + `total` INT DEFAULT NULL COMMENT '总流量,单位MB,为避免小数,存储值为实际值的1000倍', + PRIMARY KEY (`id`), + KEY `idx_iccid` (`iccid`), + KEY `idx_record_time` (`record_time`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='流量使用记录表';