智能停车场一期核心代码

停车场一期:
主要功能:采集把停车场地磁采集过来,后端进行判断是否有车,并把停车信息存入数据库。并把消息实时推送给前端
数据库主要字段:
地磁管理:idsparkspace所属停车场,connectedparkingspace关联停车位,state状态
停车信息:paymentstate缴费情况,parkinglotbelong所属停车场,parkingtime停车用时,parkingfee停车费用,platenumber车牌号
主要流程:

ParkAction:getParkMsg()  
    前端获取mac,status,再根据mac获取地磁信息.保存停车信息,存入redis
ParkUtils.saveParkmsg2redis(parkingspace所属停车场, mac, status, patrol,connectedparkingspace关联停车位)
    根据状态对比存入车辆离开或车辆进入信息,再推送消息给前端
redis存入值:redisval = status + "," + 扫描时间 + "," + 车辆进出时间 + "," +停车信息id+ "," + "pk";
public static void saveParkmsg2redis(String parkingspace, String mac, String status, String patrol,
            String connectedparkingspace) {
        ParkDao parkdao = new ParkDaoImpl();
        String parkplace = parkdao.getsparkplace(mac);
        Jedis jedis = RedisConnection.getJedis();
        jedis.select(2);
        Long starttime = System.currentTimeMillis();
        String key = "parkingmsessage:" + mac;
        String oldredisval = jedis.get("parkingmsessage:" + mac);
        String redisval = "";
        if (null != oldredisval && !"".equals(oldredisval)) {
            String[] split = oldredisval.split(",");
            String oldstatus = split[0];
            String scantime = StringUtil.isnull(split[1]);

            if ("1".equals(oldstatus) && "0".equals(status)) {
                // 说明是车辆离开,信息存入sqlserver数据库
                ParkMsg parkmsg = new ParkMsg();
                parkmsg.setParkinglotbelong(parkplace);
                String stringDate = getStringDate(starttime);
                Long cartime = Long.parseLong(StringUtil.isnull(split[2]));
                String msgid = StringUtil.isnull(split[3]);
                ParkMsg oldparkmsg = parkdao.getParkMessageById(msgid);
                // 计算停车用时
                Long parktime = (starttime - cartime) / (1000 * 60);
                // 计算停车费用
                Double settlementParkPay = SettlementParkPay(parktime);
                oldparkmsg.setParkingtime(parktime);
                oldparkmsg.setParkingfee(settlementParkPay);
                oldparkmsg.setEndtime(stringDate);
                oldparkmsg.setParkingspace(connectedparkingspace);
                oldparkmsg.setParkinglotbelong(parkplace);
                oldparkmsg.setIdowner(patrol);
                oldparkmsg.setId(msgid);
                // 缴费状态枚举值
                // TODO Auto-generated catch block
                String paystatus = "0";// 先设置为未缴费
                String paymentstate = getStateEnum(paystatus, "paymentstate", "parkingmessage");
                // 所属停车场枚举值
                String parspacestate = getStateEnum(status, "sparkspacestate", "parkspacemanage");
                oldparkmsg.setPaymentstate(paymentstate);
                // 存储新的停车信息
                parkdao.UpdateParkmsg(oldparkmsg);
                // 更新车位
                Boolean reflashPKS = parkdao.updataParkingspace(connectedparkingspace, parspacestate);
                redisval = status + "," + scantime + "," + "," + "," + "pk";
                // 推送消息

            } else if ("0".equals(oldstatus) && "1".equals(status)) {
                // 说明是车辆停入车位,信息存入sqlserver数据库
                ParkMsg parkmsg = new ParkMsg();
                parkmsg.setParkinglotbelong(parkplace);
                // Date changeTime2Date = changeTime2Date(starttime);
                String stringDate = getStringDate(starttime);
                System.out.println(stringDate);
                SystemDao sd = new SystemDaoImpl();
                String newId = sd.getNewId();
                parkmsg.setId(newId);
                parkmsg.setIdowner(patrol);
                parkmsg.setStarttime(stringDate);
                parkmsg.setParkingspace(connectedparkingspace);
                // 缴费状态枚举值
                String paystatus = "0";// 先设置为未缴费
                String paymentstate = getStateEnum(paystatus, "paymentstate", "parkingmessage");
                // 所属停车场枚举值
                String parspacestate = getStateEnum(status, "sparkspacestate", "parkspacemanage");
                parkmsg.setPaymentstate(paymentstate);
                parkdao.InsertParkmsg(parkmsg);
                Boolean reflashPKS = parkdao.updataParkingspace(connectedparkingspace, parspacestate);
                redisval = status + "," + scantime + "," + starttime.toString() + "," + newId + "," + "pk";
                // 推送消息
                Operation2umDao umDao = new Operation2umDaoImpl();
                Operation2um o2 = umDao.getOperation2umById("b5856391a3164ff2a8e3d56ce9bc5811", "geomagneticmonitor");
                String iddata = "";
                String ummsg = ""+"有车子停入了";
                pushMessage("geomagneticmanage", iddata, "1B7AED0CEB5F4C669E5ED5F88C069B21", o2);
            } else {
                String cartime = StringUtil.isnull(split[2]);
                String messageid = StringUtil.isnull(split[3]);
                redisval = status + "," + scantime + "," + cartime.toString() + "," + messageid + "," + "pk";
            }
        } else {
            redisval = status + "," + starttime.toString() + "," + starttime.toString() + "," + "," + "pk";
        }
        // 更新redis的 mac状态
        jedis.set(key, redisval);
    }
### 基于车联网的智能停车场管理系统设计方案 #### 1. 系统概述 基于车联网技术的智能停车场管理系统旨在通过物联网、云计算以及移动互联网等先进技术,提升停车场管理效率和服务质量。该系统不仅能够解决传统停车场存在的低效问题,还能够提供更加智能化的服务体验[^1]。 此系统的核心目标在于利用车联网技术实现车辆与停车场之间的实时通信,从而优化车位分配流程并减少人工干预。管理员可以通过后台轻松管理车辆出入记录、收费情况以及其他运营数据,而车主则可通过手机端快速查询剩余车位状态,并提前预约停车位[^3]。 #### 2. 技术架构 为了满足功能需求和技术可行性,建议采用B/S架构作为开发模式之一。前端界面可选用HTML5/CSS3/JavaScript构建响应式页面;后端服务层可以选择Spring MVC框架配合MyBatis持久化工具完成业务逻辑处理;数据库方面推荐MySQL5.7版本存储各类基础信息表单如用户账号密码、订单详情等重要资源。 此外,在网络协议层面需考虑支持TCP/IP标准以便与其他设备互联互通;同时引入RESTful API接口方便第三方调用扩展更多增值服务选项比如电子支付平台对接等功能模块集成进来形成完整的解决方案体系结构图如下所示: ```plaintext +-------------------+ | 用户终端 | | (App/Web/Mobile) | +-------+-----------+ | v +-------+-----------+ | 应用服务器 | | (Spring Boot + MyBatis)| +-------+-----------+ | v +-------+-----------+ | 数据库服务器 | | (MySQL 5.7+) | +--------------------+ ``` #### 3. 功能模块划分 根据实际应用场景分析得出以下主要组成部分及其相应职责描述: - **车位监控子系统**: 负责采集各个区域内的空闲泊位数量并通过传感器上传至云端供后续决策参考. - **导航指引组件**: 结合GIS地理信息系统绘制地图展示路径规划结果帮助驾驶者迅速找到指定位置. - **在线预订机制**: 支持远程预定特定时间段内的专属停车空间避免高峰期拥堵现象发生. - **无人值守出口闸机**: 利用人脸识别或者车牌号扫描验证身份合法性进而自动抬杆放行缩短等待时间提高通行速度. - **数据分析报表生成器**: 定期汇总统计每日收益状况、高峰时段分布规律等相关指标辅助管理者制定更合理的经营策略.[^1] #### 4. 开发环境配置指南 以下是针对不同角色所需安装的基础软硬件清单列表仅供参考调整适配个人偏好即可: ##### 对于开发者而言: - JDK8及以上版本确保兼容最新特性; - Eclipse/Idea IDE简化编码过程加快进度 ; - Maven依赖管理工具统一协调项目构件关系 ; ##### 部署运维人员需要注意事项 : - Linux操作系统稳定性强优先选择CentOS系列发行版 ; - Nginx反向代理负载均衡分担请求压力 ; - Redis缓存加速热点读取降低延迟 . #### 5. 测试计划概览 在整个生命周期内持续关注产品质量至关重要因此制定了详尽的测试方案覆盖单元级联回归等多个维度全面评估各项性能参数是否达到预期效果 . --- ### 示例代码片段 下面给出一段简单的登录校验伪代码用于说明如何保护敏感操作防止未授权访问 : ```java // 登录认证方法示例 public boolean authenticate(String username, String password){ User user = userDao.findByUsername(username); if(user != null && encoder.matches(password,user.getPassword())){ return true; // 认证成功返回True }else{ throw new AuthenticationException("用户名或密码错误!"); } } ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值