From d5cfbee4969745ec2340eb8a6e1e684fb63329c2 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 26 八月 2026 18:11:04 +0800
Subject: [PATCH] feat: add charging card management
---
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TChargingCardController.java | 33 ++++++++
ruoyi-service/ruoyi-account/src/main/resources/mapper/account/TChargingCardMapper.xml | 28 +++++++
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TChargingCardServiceImpl.java | 21 +++++
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TChargingCard.java | 53 +++++++++++++
sql/20260826_charging_card.sql | 56 ++++++++++++++
ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/ChargingCardQueryDTO.java | 19 ++++
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TChargingCardService.java | 11 ++
ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/TChargingCardMapper.java | 14 +++
8 files changed, 235 insertions(+), 0 deletions(-)
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/ChargingCardQueryDTO.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/ChargingCardQueryDTO.java
new file mode 100644
index 0000000..cf7ef4b
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/dto/ChargingCardQueryDTO.java
@@ -0,0 +1,19 @@
+package com.ruoyi.account.api.dto;
+
+import com.ruoyi.common.core.web.page.BasePage;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel(value = "充电卡分页查询参数")
+public class ChargingCardQueryDTO extends BasePage {
+
+ @ApiModelProperty(value = "卡号")
+ private String cardNo;
+
+ @ApiModelProperty(value = "状态:1启用,2禁用")
+ private Integer status;
+}
diff --git a/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TChargingCard.java b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TChargingCard.java
new file mode 100644
index 0000000..c52f380
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-account/src/main/java/com/ruoyi/account/api/model/TChargingCard.java
@@ -0,0 +1,53 @@
+package com.ruoyi.account.api.model;
+
+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 com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("t_charging_card")
+@ApiModel(value = "充电卡")
+public class TChargingCard implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(value = "id", type = IdType.AUTO)
+ @ApiModelProperty(value = "主键ID")
+ private Long id;
+
+ @ApiModelProperty(value = "卡号")
+ private String cardNo;
+
+ @ApiModelProperty(value = "卡余额")
+ private BigDecimal balance;
+
+ @ApiModelProperty(value = "状态:1启用,2禁用")
+ private Integer status;
+
+ @TableLogic
+ @ApiModelProperty(value = "删除状态:0正常,2删除")
+ private Integer delFlag;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @ApiModelProperty(value = "添加时间")
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "添加人ID")
+ private Long createBy;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @ApiModelProperty(value = "修改时间")
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty(value = "修改人ID")
+ private Long updateBy;
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TChargingCardController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TChargingCardController.java
new file mode 100644
index 0000000..b601ae6
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/TChargingCardController.java
@@ -0,0 +1,33 @@
+package com.ruoyi.account.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ruoyi.account.api.dto.ChargingCardQueryDTO;
+import com.ruoyi.account.api.model.TChargingCard;
+import com.ruoyi.account.service.TChargingCardService;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.security.annotation.Logical;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+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;
+
+@Api(tags = "卡片管理")
+@RestController
+@RequestMapping("/t-charging-card")
+public class TChargingCardController extends BaseController {
+
+ @Autowired
+ private TChargingCardService chargingCardService;
+
+ @ApiOperation(value = "分页查询卡片列表")
+ @RequiresPermissions(value = {"/chargingCard/list"}, logical = Logical.OR)
+ @PostMapping("/page")
+ public R<IPage<TChargingCard>> page(@RequestBody ChargingCardQueryDTO query) {
+ return R.ok(chargingCardService.selectCardPage(query));
+ }
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/TChargingCardMapper.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/TChargingCardMapper.java
new file mode 100644
index 0000000..a6a960d
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/mapper/TChargingCardMapper.java
@@ -0,0 +1,14 @@
+package com.ruoyi.account.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.account.api.dto.ChargingCardQueryDTO;
+import com.ruoyi.account.api.model.TChargingCard;
+import org.apache.ibatis.annotations.Param;
+
+public interface TChargingCardMapper extends BaseMapper<TChargingCard> {
+
+ IPage<TChargingCard> selectCardPage(Page<TChargingCard> page,
+ @Param("query") ChargingCardQueryDTO query);
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TChargingCardService.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TChargingCardService.java
new file mode 100644
index 0000000..44d216d
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/TChargingCardService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.account.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.account.api.dto.ChargingCardQueryDTO;
+import com.ruoyi.account.api.model.TChargingCard;
+
+public interface TChargingCardService extends IService<TChargingCard> {
+
+ IPage<TChargingCard> selectCardPage(ChargingCardQueryDTO query);
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TChargingCardServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TChargingCardServiceImpl.java
new file mode 100644
index 0000000..7e82e03
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/TChargingCardServiceImpl.java
@@ -0,0 +1,21 @@
+package com.ruoyi.account.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.account.api.dto.ChargingCardQueryDTO;
+import com.ruoyi.account.api.model.TChargingCard;
+import com.ruoyi.account.mapper.TChargingCardMapper;
+import com.ruoyi.account.service.TChargingCardService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TChargingCardServiceImpl extends ServiceImpl<TChargingCardMapper, TChargingCard>
+ implements TChargingCardService {
+
+ @Override
+ public IPage<TChargingCard> selectCardPage(ChargingCardQueryDTO query) {
+ Page<TChargingCard> page = new Page<>(query.getPageCurr(), query.getPageSize());
+ return baseMapper.selectCardPage(page, query);
+ }
+}
diff --git a/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/TChargingCardMapper.xml b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/TChargingCardMapper.xml
new file mode 100644
index 0000000..7694318
--- /dev/null
+++ b/ruoyi-service/ruoyi-account/src/main/resources/mapper/account/TChargingCardMapper.xml
@@ -0,0 +1,28 @@
+<?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="com.ruoyi.account.mapper.TChargingCardMapper">
+
+ <select id="selectCardPage" resultType="com.ruoyi.account.api.model.TChargingCard">
+ SELECT id,
+ card_no,
+ balance,
+ status,
+ del_flag,
+ create_time,
+ create_by,
+ update_time,
+ update_by
+ FROM t_charging_card
+ WHERE del_flag = 0
+ <if test="query.cardNo != null and query.cardNo != ''">
+ AND card_no LIKE CONCAT('%', #{query.cardNo}, '%')
+ </if>
+ <if test="query.status != null">
+ AND status = #{query.status}
+ </if>
+ ORDER BY create_time DESC, id DESC
+ </select>
+
+</mapper>
diff --git a/sql/20260826_charging_card.sql b/sql/20260826_charging_card.sql
new file mode 100644
index 0000000..6c04bf9
--- /dev/null
+++ b/sql/20260826_charging_card.sql
@@ -0,0 +1,56 @@
+-- 卡片管理:充电卡业务表、一级菜单、查询权限和超级管理员授权。
+-- 请使用具备 charging_pile_account、charging_pile_other 库权限的账号执行。
+
+USE charging_pile_account;
+
+CREATE TABLE IF NOT EXISTS `t_charging_card` (
+ `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+ `card_no` varchar(64) NOT NULL COMMENT '卡号',
+ `balance` decimal(12,2) NOT NULL DEFAULT '0.00' COMMENT '卡余额',
+ `status` tinyint NOT NULL DEFAULT '1' COMMENT '状态:1启用,2禁用',
+ `del_flag` tinyint NOT NULL DEFAULT '0' COMMENT '删除状态:0正常,2删除',
+ `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间',
+ `create_by` bigint DEFAULT NULL COMMENT '添加人ID',
+ `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+ `update_by` bigint DEFAULT NULL COMMENT '修改人ID',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `uk_card_no` (`card_no`),
+ KEY `idx_status_del_flag` (`status`, `del_flag`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='充电卡';
+
+USE charging_pile_other;
+
+INSERT INTO sys_menu
+ (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache,
+ menu_type, visible, status, perms, icon, create_by, create_time, remark)
+SELECT '卡片管理', 0, 10, '/card', 'card', NULL, 1, 0,
+ 'C', '0', 0, '/chargingCard/list', 'credit-card', 'admin', NOW(), '卡片管理一级菜单'
+WHERE NOT EXISTS (
+ SELECT 1 FROM sys_menu WHERE parent_id = 0 AND path = '/card'
+);
+
+SET @charging_card_menu_id := (
+ SELECT menu_id
+ FROM sys_menu
+ WHERE parent_id = 0 AND path = '/card'
+ ORDER BY menu_id
+ LIMIT 1
+);
+
+UPDATE sys_menu
+SET menu_name = '卡片管理',
+ parent_id = 0,
+ order_num = 10,
+ component = 'card',
+ menu_type = 'C',
+ visible = '0',
+ status = 0,
+ perms = '/chargingCard/list',
+ icon = 'credit-card',
+ update_time = NOW(),
+ remark = '卡片管理一级菜单'
+WHERE menu_id = @charging_card_menu_id;
+
+INSERT IGNORE INTO sys_role_menu (role_id, menu_id)
+SELECT 1, @charging_card_menu_id
+WHERE @charging_card_menu_id IS NOT NULL;
--
Gitblit v1.7.1