完整项目源码可以私信
一卡通消费系统,支持人脸、刷码、实体卡。
应用场景
可广泛应用于智慧校园、智慧园区、企事业单位食堂、门禁、门禁、考勤、就餐、消费、停车场出入,巡逻签到、会议签到,电梯使用等场景。系统采用模块化、软硬件分离、前后端分离设计,极大地方便了一卡通系统扩展、升级。
技术选型
- 系统环境
Java EE 8 Servlet 3.0 Apache Maven 3
- 主框架
Spring Boot 2.1 Spring Framework 5.1 Spring Security 5.1
- 持久层
Apache MyBatis 3.4 Hibernate Validation 6.0 Alibaba Druid 1.1
- 视图层
Vue 2.6 Axios 0.18 Element UI 2.11
- 移动端
Uniapp
- 数据库
Mysql 5.7
- 缓存
redis 4.0
界面展示
内置功能
- 账户管理:充值、补贴、冻结、解冻
- 卡管理:挂失、解挂、补卡、注销
- 商户管理:商户、设备、报表
- 交易管理:消费记录、补贴记录、充值记录、交易渠道
- 用户管理:用户是系统操作者,该功能主要完成系统用户配置。
- 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。
- 岗位管理:配置系统用户所属担任职务。
- 菜单管理:配置系统菜单,操作权限,按钮权限标识等。
- 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。
- 字典管理:对系统中经常使用的一些较为固定的数据进行维护。
- 参数设置:对系统中常用参数进行动态配置。
- 通知公告:系统通知公告信息发布维护。
- 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。
- 登录日志:系统登录日志记录查询包含登录异常。
- 在线用户:当前系统中活跃用户状态监控。
- 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。
- 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。
- 系统接口:根据业务代码自动生成相关的api接口文档。
- 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。
- 在线构建器:拖动表单元素生成相应的HTML代码。
- 连接池监视:监视当期系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。
部分代码:
package com.huohuzhihui.web.controller.account;
import java.util.List;
import com.huohuzhihui.common.constant.CardConstants;
import com.huohuzhihui.common.constant.UserConstants;
import com.huohuzhihui.common.core.domain.entity.Card;
import com.huohuzhihui.common.utils.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import com.huohuzhihui.common.annotation.Log;
import com.huohuzhihui.common.core.controller.BaseController;
import com.huohuzhihui.common.core.domain.AjaxResult;
import com.huohuzhihui.common.enums.BusinessType;
import com.huohuzhihui.account.service.IAccCardService;
import com.huohuzhihui.common.utils.poi.ExcelUtil;
import com.huohuzhihui.common.core.page.TableDataInfo;
/**
* 账户下的卡Controller
*
* @author zylu
* @date 2020-11-14
*/
@RestController
@RequestMapping("/account/card")
public class AccCardController extends BaseController
{
@Autowired
private IAccCardService accCardService;
/**
* 查询账户下的卡列表
*/
@PreAuthorize("@ss.hasPermi('account:card:list')")
@GetMapping("/list")
public TableDataInfo list(Card accCard)
{
startPage();
List<Card> list = accCardService.selectAccCardList(accCard);
return getDataTable(list);
}
/**
* 导出账户下的卡列表
*/
@PreAuthorize("@ss.hasPermi('account:card:export')")
@Log(title = "账户下的卡", businessType = BusinessType.EXPORT)
@GetMapping("/export")
public AjaxResult export(Card accCard)
{
List<Card> list = accCardService.selectAccCardList(accCard);
ExcelUtil<Card> util = new ExcelUtil<Card>(Card.class);
return util.exportExcel(list, "card");
}
/**
* 获取账户下的卡详细信息
*/
@PreAuthorize("@ss.hasPermi('account:card:query')")
@GetMapping(value = "/{id}")
public AjaxResult getInfo(@PathVariable("id") Long id)
{
return AjaxResult.success(accCardService.selectAccCardById(id));
}
/**
* 新增账户下的卡
*/
@PreAuthorize("@ss.hasPermi('account:card:add')")
@Log(title = "开卡", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@RequestBody Card accCard)
{
if (CardConstants.NOT_UNIQUE.equals(accCardService.checkCardNoUnique(accCard.getCardNo())))
{
return AjaxResult.error("开卡失败,卡号'"+accCard.getCardNo()+"'已存在");
}
accCard.setCreateBy(SecurityUtils.getUsername());
return toAjax(accCardService.insertAccCard(accCard));
}
/**
* 修改账户下的卡
*/
@PreAuthorize("@ss.hasPermi('account:card:edit')")
@Log(title = "编辑卡", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@RequestBody Card accCard)
{
accCard.setUpdateBy(SecurityUtils.getUsername());
return toAjax(accCardService.updateAccCard(accCard));
}
/**
* 删除账户下的卡
*/
@PreAuthorize("@ss.hasPermi('account:card:remove')")
@Log(title = "账户下的卡", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public AjaxResult remove(@PathVariable Long[] ids)
{
return toAjax(accCardService.deleteAccCardByIds(ids));
}
/**
* 补卡
* @param accCard 卡对象
* @return
*/
@PreAuthorize("@ss.hasPermi('account:card:replace')")
@Log(title = "补卡", businessType = BusinessType.INSERT)
@PostMapping(value = "/replace")
@ResponseBody
public AjaxResult replace(@RequestBody Card accCard)
{
if (CardConstants.NOT_UNIQUE.equals(accCardService.checkCardNoUnique(accCard.getCardNo())))
{
return AjaxResult.error("补卡失败,卡号'"+accCard.getCardNo()+"'已存在");
}
accCard.setUpdateBy(SecurityUtils.getUsername());
return toAjax(accCardService.replaceAccCard(accCard));
}
/**
* 批量挂失卡
* @param ids 卡ID集合
* @return
*/
@PreAuthorize("@ss.hasPermi('account:card:loss')")
@Log(title = "挂失卡", businessType = BusinessType.UPDATE)
@PostMapping(value = "/loss")
@ResponseBody
public AjaxResult loss( Long[] ids)
{
return toAjax(accCardService.lossAccCardByIds(ids));
}
/**
* 批量解挂卡
* @param ids 卡ID集合
* @return
*/
@PreAuthorize("@ss.hasPermi('account:card:unloss')")
@Log(title = "解挂卡", businessType = BusinessType.UPDATE)
@PostMapping(value = "/unloss")
@ResponseBody
public AjaxResult unloss( Long[] ids)
{
return toAjax(accCardService.unlossAccCardByIds(ids));
}
/**
* 批量注销卡
* @param ids 卡ID集合
* @return
*/
@PreAuthorize("@ss.hasPermi('account:card:cancel')")
@Log(title = "注销卡", businessType = BusinessType.UPDATE)
@PostMapping(value = "/cancel")
@ResponseBody
public AjaxResult cancel( Long[] ids)
{
return toAjax(accCardService.cancelAccCardByIds(ids));
}
}