大家好!我是岛上程序猿,感谢您阅读本文,欢迎一键三连哦。

🎀 Python毕业设计

精彩专栏推荐👇🏻👇🏻👇🏻

💞当前专栏:Java毕业设计
🌎微信小程序毕业设计

开发环境

  • 开发语言:Python
  • 框架:flask
  • Python版本:python3.7.7
  • 数据库:mysql 5.7
  • 数据库工具:Navicat11
  • 开发软件:PyCharm
  • 浏览器:谷歌浏览器

演示视频

python207基于人脸识别的停车场管理系统

论文目录

【如需全文请按文末获取联系】

在这里插入图片描述
在这里插入图片描述

一、项目简介

本论文采用人脸识别技术设计并实现了一套停车场管理系统。以方便管理、科技进步为理念,选择Python作为开发语言,MySQL作为后台数据库,PyCharm和VSCode作为开发环境。借助OpenCV人脸识别库和Flask微框架,系统充分运用人工智能技术,实现对停车场用户的高效识别和管理,使用户在无需携带物理凭证的情况下迅速进出停车场,提高了停车的便捷性和效率。

二、系统设计

2.1软件功能模块设计

3.3.1 用户角色
用户注册,登录:注册时候,调用电脑的摄像头,进行人脸录入注册,输入车牌号,手机号,姓名,账号,身份证等。
车位查看:查看车位状态,是空的还是被占用。
刷脸停车:人脸刷脸,然后成功后开始计时,是电脑当前系统时间,停车前20分钟不收费,21分钟到1小时,按1小时算。
点击离开:点击按钮离场,结算费用,点击时候,离开时间是电脑系统的时间。
在线支付:按照系统进行时间计算的费用支付。
3.3.2 管理员角色
管理员信息管理:可以对登录后的管理员进行自主的信息管理,可以更改一些信息,例如账号密码等等。
注册用户管理,审核:对是该平台的用户进行管理,可以给用户进行增删改除等等操作。
车位信息管理:对车位的信息进行管理。
停车费设置:设置1小时多少钱。
停车信息管理:某个用户,停车多久,费用多少,停车时间,离开时间。
在线支付管理:可以对系统内用户产生的一系列多个的支付信息进行一系列的管理。
支付信息统计:对已经支付的信息进行可视化的展示。

2.2数据库设计

在进行分析后得出本次需要的表大致如下所示:
用户表:存放用户的个人信息,其中包括用户在注册时的各项内容,以及用户的人脸信息,否则没办法进行识别。
车位表:储存的就是车位的信息,几号车位,听了哪个车等等。
停车记录表:记录停车的一些具体信息,例如哪个车停的,时间是多少。
管理员表:存放管理员的个人信息,例如账号密码,姓名年龄等等信息。
注册用户审核表:用于审核注册用户的信息,包括用户在注册时的各项内容,以及用户的人脸信息。
停车费设置表:停车时长等等信息计算停车费。
在线支付管理表:记录用户的在线支付信息。
支付信息统计表:用于统计支付信息。
根据以上信息做出了对应的数据库表er结构,具体如图所示:
在这里插入图片描述

三、系统项目部分截图

3.1用户模块的实现

(1)注册:在该模块可以进行注册,包括填写信息身份证姓名等等信息。
在这里插入图片描述
(2)登录:注册时候便可以进行登陆操作。
在这里插入图片描述
(3)用户首页:在这里可以选择对应的停车位进行停车。
在这里插入图片描述

3.2管理员模块的实现

(1)管理员登录:管理员进行登录后可以对信息进行管理操作。
在这里插入图片描述
(2)管理员首页:在这里可以大致的了解有的功能。
在这里插入图片描述
(3)停车场管理:可以对停车场车位情况价格担当进行管理。
在这里插入图片描述

四、部分核心代码

import csv
import datetime
import os
import random
import re
import sys
import time
from io import BytesIO

from utils.paginater import Paginater
from flask import Blueprint, request, jsonify, render_template, session, redirect, Response
from werkzeug.utils import secure_filename

workdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, workdir)
from logger import Logger
from exts import db
from .models import *

PAGE_SIZE = 5

bp = Blueprint('', '__name__', url_prefix='')
logger = Logger(logname='inference_views.log', loglevel=5, logger='inference').getlog()


@bp.route('/index', methods=['GET'])
def index():
    """
    :return:
    """
    # for i in range(1,101):
    #     c = Car_manage(carport=i,genre=0)
    #     db.session.add(c)
    #     db.session.commit()
    user_num = User.query.count()
    all_carport = Car_manage.query.count()
    remain_carport = 0
    for c in Car_manage.query.all():
        # 如果停车位的车牌为空
        if not c.carnum:
            remain_carport += 1
    # 获取每日的收入
    money_day = 0
    charge_obj = Charge.query.all()
    for c in charge_obj:
        if c.pay_time.date() == datetime.datetime.now().date():
            money_day += c.money
    # 记录数
    car_manage_count = Car_record.query.count()
    # 环形图数据
    # A区总共车位
    A_cars = Car_manage.query.filter(Car_manage.carport >= 1, Car_manage.carport <= 25)
    A_cars_use = 0
    Asum = 0
    # A区使用中车位
    for c in A_cars:
        if c.carnum:
            A_cars_use += 1
        Asum += 1
    A_remain = Asum - A_cars_use
    B_cars = Car_manage.query.filter(Car_manage.carport >= 26, Car_manage.carport <= 50)
    B_cars_use = 0
    Bsum = 0
    for c in B_cars:
        if c.carnum:
            B_cars_use += 1
        Bsum += 1
    B_remain = Bsum - B_cars_use
    C_cars = Car_manage.query.filter(Car_manage.carport >= 51, Car_manage.carport <= 75)
    C_cars_use = 0
    Csum = 0
    for c in C_cars:
        if c.carnum:
            C_cars_use += 1
        Csum += 1
    C_remain = Csum - C_cars_use
    D_cars = Car_manage.query.filter(Car_manage.carport >= 76, Car_manage.carport <= 100)
    D_cars_use = 0
    Dsum = 0
    for c in D_cars:
        if c.carnum:
            D_cars_use += 1
        Dsum += 1
    D_remain = Dsum - D_cars_use
    # 柱状图数据
    today = datetime.datetime.now()
    day1 = today - datetime.timedelta(days=6)
    day2 = today - datetime.timedelta(days=5)
    day3 = today - datetime.timedelta(days=4)
    day4 = today - datetime.timedelta(days=3)
    day5 = today - datetime.timedelta(days=2)
    day6 = today - datetime.timedelta(days=1)
    car_record_obj = Car_record.query.filter(Car_record.genre == 1).all()
    day1_in = 0
    day1_out = 0
    day2_in = 0
    day2_out = 0
    day3_in = 0
    day3_out = 0
    day4_in = 0
    day4_out = 0
    day5_in = 0
    day5_out = 0
    day6_in = 0
    day6_out = 0
    today_in = 0
    today_out = 0
    for c in car_record_obj:
        if c.begintime.month == day1.month and c.begintime.day == day1.day:
            day1_in += 1
        elif c.begintime.month == day2.month and c.begintime.day == day2.day:
            day2_in += 1
        elif c.begintime.month == day3.month and c.begintime.day == day3.day:
            day3_in += 1
        elif c.begintime.month == day4.month and c.begintime.day == day4.day:
            day4_in += 1
        elif c.begintime.month == day5.month and c.begintime.day == day5.day:
            day5_in += 1
        elif c.begintime.month == day6.month and c.begintime.day == day6.day:
            day6_in += 1
        elif c.begintime.month == today.month and c.begintime.day == today.day:
            today_in += 1
        else:
            pass
        if c.endtime.month == day1.month and c.endtime.day == day1.day:
            day1_out += 1
        elif c.endtime.month == day2.month and c.endtime.day == day2.day:
            day2_out += 1
        elif c.endtime.month == day3.month and c.endtime.day == day3.day:
            day3_out += 1
        elif c.endtime.month == day4.month and c.endtime.day == day4.day:
            day4_out += 1
        elif c.endtime.month == day5.month and c.endtime.day == day5.day:
            day5_out += 1
        elif c.endtime.month == day6.month and c.endtime.day == day6.day:
            day6_out += 1
        elif c.endtime.month == today.month and c.endtime.day == today.day:
            today_out += 1
        else:
            pass
    # 还有今日停入未离开,暂时未被记录
    car_manage_obj = Car_manage.query.filter(Car_manage.genre == 1)
    for c in car_manage_obj:
        # 判断同一个月
        if c.begintime.month == today.month and c.begintime.day == today.day:
            today_in += 1
        elif c.begintime.month == day1.month and c.begintime.day == day1.day:
            day1_in += 1
        elif c.begintime.month == day2.month and c.begintime.day == day2.day:
            day2_in += 1
        elif c.begintime.month == day3.month and c.begintime.day == day3.day:
            day3_in += 1
        elif c.begintime.month == day4.month and c.begintime.day == day4.day:
            day4_in += 1
        elif c.begintime.month == day5.month and c.begintime.day == day5.day:
            day5_in += 1
        elif c.begintime.month == day6.month and c.begintime.day == day6.day:
            day6_in += 1
        else:
            pass
    today = today.strftime('%m-%d')
    day1 = day1.strftime('%m-%d')
    day2 = day2.strftime('%m-%d')
    day3 = day3.strftime('%m-%d')
    day4 = day4.strftime('%m-%d')
    day5 = day5.strftime('%m-%d')
    day6 = day6.strftime('%m-%d')
    price = Price.query.filter(Price.id == 1).first()

    return render_template('index.html', user_num=user_num, all_carport=all_carport,
                           remain_carport=remain_carport, money_day=money_day,
                           car_manage_count=car_manage_count, A_remian=A_remain,
                           B_remian=B_remain, C_remian=C_remain, D_remian=D_remain,
                           today=today, day1=day1, day2=day2, day3=day3, day4=day4,
                           day5=day5, day6=day6, day1_in=day1_in, day2_in=day2_in,
                           day3_in=day3_in, day4_in=day4_in, day5_in=day5_in,
                           day6_in=day6_in,price=price,
                           today_in=today_in, day1_out=day1_out, day2_out=day2_out,
                           day3_out=day3_out, day4_out=day4_out, day5_out=day5_out,
                           day6_out=day6_out, today_out=today_out)


@bp.route('/user_info', methods=['GET'])
def user_info():
    return redirect('/user_paging')


def chargecount(start_time, end_time):
    """
    车费计算
    :param start_time:
    :param end_time:
    :return:
    """
    price = Price.query.filter(Price.id==1).first()
    baitian = price.day
    wanshang = price.night
    top_price = price.top
    start_seconds = time.mktime(start_time.timetuple()) * 1000 + start_time.microsecond / 1000
    end_seconds = time.mktime(end_time.timetuple()) * 1000 + end_time.microsecond / 1000
    time_span = end_seconds - start_seconds
    day_span = int(time_span / 1000 / 3600 / 24)
    hour_span = int(time_span / 1000 / 3600 % 24)
    minute_span = int(time_span / 1000 / 60 % 60)
    # 判断是否为同一天
    if start_time.date() == end_time.date():
        money = 0
        # 同一天
        # 判断是否只停车半小时
        if hour_span == 0 and minute_span < 30:
            print(start_time, end_time, day_span, hour_span, minute_span, money)
            return money
        else:
            # 超过半小时
            # 判断是早晨还是晚上
            if 7 <= start_time.hour < 19:
                # 早晨停车
                if 7 <= end_time.hour < 19:
                    # 在晚间之前离开
                    if minute_span != 0:
                        money = baitian * (hour_span + 1)
                    else:
                        money = baitian * hour_span
                else:
                    # 在晚间离开
                    if minute_span != 0:
                        money = (18 - start_time.hour) * baitian + (hour_span - 17 + start_time.hour) * wanshang
                    else:
                        money = (18 - start_time.hour) * baitian + (hour_span - 18 + start_time.hour) * wanshang
            elif start_time.hour >= 19:
                # 晚上停车
                if minute_span != 0:
                    money = wanshang * (hour_span + 1)
                else:
                    money = wanshang * hour_span
            else:
                if end_time.hour < 7:
                    if minute_span != 0:
                        money = wanshang * (hour_span + 1)
                    else:
                        money = wanshang * hour_span
                elif 7 <= end_time.hour < 16:
                    if minute_span != 0:
                        money = (6 - start_time.hour) * wanshang + baitian * (1 + start_time.hour)
                    else:
                        money = (6 - start_time.hour) * wanshang + baitian * (1 + start_time.hour)
                    pass
                else:
                    money = top_price
        if money > top_price:
            money = top_price
            print(start_time, end_time, day_span, hour_span, minute_span, money)
            return money
        else:
            print(start_time, end_time, day_span, hour_span, minute_span, money)
            return money
    else:
        # 非同一天
        money = 0
        money_day = 0
        if day_span > 0:
            # 停留超过24h
            new_start_time = start_time + datetime.timedelta(days=day_span)
            print(new_start_time)
            money_day = top_price * day_span
            # 在判断离开时超过24h收费的部分
            if 7 <= new_start_time.hour < 19:
                if 7 <= end_time.hour < 19:
                    if minute_span != 0:
                        money = baitian * (hour_span + 1)
                        print(1)
                    else:
                        money = baitian * hour_span
                        print(2)
                elif 0 <= end_time.hour < 7 or 19 <= end_time.hour <= 23:
                    if minute_span != 0:
                        money = (18 - new_start_time.hour) * baitian + (hour_span - 17 + start_time.hour) * wanshang
                        print(3)
                    else:
                        money = (18 - new_start_time.hour) * baitian + (hour_span - 18 + start_time.hour) * wanshang
                        print(4)

            elif new_start_time.hour >= 19:
                if minute_span != 0:
                    money = wanshang * (hour_span + 1)
                    print(5)
                else:
                    money = wanshang * hour_span
                    print(6)
            else:
                if end_time.hour < 7:
                    if minute_span != 0:
                        money = wanshang * (hour_span + 1)
                        print(7)
                    else:
                        money = wanshang * hour_span
                        print(8)
                elif 7 <= end_time.hour < 16:
                    if minute_span != 0:
                        money = (6 - new_start_time.hour) * wanshang + baitian * (1 + hour_span)
                        print(9)
                    else:
                        money = (6 - new_start_time.hour) * wanshang + baitian * hour_span
                        print(10)
                    pass
                else:
                    money = top_price
            if money > top_price:
                money = top_price + money_day
                print(start_time, end_time, day_span, hour_span, minute_span, money)
                return money
            else:
                money += money_day
                print(start_time, end_time, day_span, hour_span, minute_span, money)
                return money
        else:
            # 未超过24h,但不是同一天
            if hour_span == 0 and minute_span < 30:
                print(start_time, end_time, day_span, hour_span, minute_span, money)
                return money
            else:
                if start_time.hour <= 18:
                    money = top_price
                else:
                    if end_time.hour >= 5:
                        money = top_price
                    else:
                        if minute_span != 0:
                            money = wanshang * (hour_span + 1)
                        else:
                            money = wanshang * hour_span
            if money > top_price:
                money = top_price
                print(start_time, end_time, day_span, hour_span, minute_span, money)
                return money
            else:
                print(start_time, end_time, day_span, hour_span, minute_span, money)
                return money


@bp.route('/user_add', methods=['GET', 'POST'])
def user_add():
    if request.method == 'POST':
        name = request.form.get('name')
        phone = request.form.get('phone')
        carnum = request.form.get('carnum')
        level = request.form.get('vip-radios')
        begintime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        pattern = re.compile(r'^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$')
        result = pattern.match(phone)
        print(name, phone, carnum, level)
        is_exists = User.query.filter(User.carnum == carnum).first()
        print(is_exists)
        if name and phone and carnum and level:
            # 判断手机号是否合法
            if not result:
                return render_template('user_add.html', error3='请输入正确的手机号')
            # 判断车牌号是否存在
            elif is_exists:
                return render_template('user_add.html', error1='该车牌号已存在')
            else:
                level = int(level)
                if level == 1:
                    endtime = (datetime.datetime.now() + datetime.timedelta(days=31)).strftime("%Y-%m-%d %H:%M:%S")
                    charge = Charge(pay_time=datetime.datetime.now(), money=150)

                elif level == 2:
                    endtime = (datetime.datetime.now() + datetime.timedelta(days=93)).strftime("%Y-%m-%d %H:%M:%S")
                    charge = Charge(pay_time=datetime.datetime.now(), money=425)
                elif level == 3:
                    endtime = (datetime.datetime.now() + datetime.timedelta(days=186)).strftime("%Y-%m-%d %H:%M:%S")
                    charge = Charge(pay_time=datetime.datetime.now(), money=810)
                elif level == 4:
                    endtime = (datetime.datetime.now() + datetime.timedelta(days=365)).strftime("%Y-%m-%d %H:%M:%S")
                    charge = Charge(pay_time=datetime.datetime.now(), money=1530)
                else:
                    pass
                db.session.add(charge)
                db.session.commit()
                user = User(name=name, carnum=carnum, phone=phone, level=level, begintime=begintime, sfz='1',
                            face_id='',
                            endtime=endtime, password='123')
                db.session.add(user)
                db.session.commit()
                # 如果车辆先停入,之后再办理会员
                try:
                    car_obj = Car_manage.query.get(carnum=carnum)
                    car_obj.genre = 1
                    db.session.commit()
                    money = chargecount(car_obj.begintime, datetime.datetime.now())
                    # 办理会员前需要支付的费用
                    if not Extra_charge.query.filter(carnum=carnum):
                        extra_charge = Extra_charge(carnum=carnum,
                                                    vip_begintime=car_obj.begintime.strftime(
                                                        "%Y-%m-%d %H:%M:%S"),
                                                    vip_deadline=datetime.datetime.now().strftime(
                                                        "%Y-%m-%d %H:%M:%S"), is_valid=1,
                                                    money=money)
                        db.session.add(extra_charge)
                        db.session.commit()
                    else:
                        extra_charge = Extra_charge.query.filter(Extra_charge.carnum == carnum).first()
                        extra_charge.vip_begintime = car_obj.begintime.strftime("%Y-%m-%d %H:%M:%S")
                        extra_charge.vip_deadline = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                        extra_charge.is_valid = True
                        extra_charge.money = money
                        db.session.commit()
                except Exception as e:
                    pass
                time.sleep(2)
                return redirect('/user_paging')
        else:
            print('error')
            return render_template('user_add.html', error2='请填写完整!')
    else:
        return render_template('user_add.html')


@bp.route('/', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        # 处理POST请求的逻辑
        # 获取到用户提交的用户名和密码
        account = request.form.get('account')
        pwd = request.form.get('pwd')
        print(account, pwd)
        if not account or not pwd:
            return render_template('login.html', error='账号密码不能为空!')
        else:
            try:
                check = db.session.query(Administrator).filter(Administrator.account == account).first()
                if check.password == pwd:
                    session['is_login'] = 1
                    return redirect('/index')
                else:
                    return render_template('login.html', error='输入账号密码错误!')
            except Exception as e:
                print(e)
                return render_template('login.html', error='输入账号密码错误!')


@bp.route('/index2', methods=['GET', 'POST'])
def index2():
    total_car = Car_manage.query.filter(Car_manage.genre == 0).count()
    A_cars = Car_manage.query.filter(Car_manage.carport >= 1, Car_manage.carport <= 25).all()
    B_cars = Car_manage.query.filter(Car_manage.carport >= 26, Car_manage.carport <= 50).all()
    C_cars = Car_manage.query.filter(Car_manage.carport >= 51, Car_manage.carport <= 75).all()
    D_cars = Car_manage.query.filter(Car_manage.carport >= 76, Car_manage.carport <= 100).all()
    return render_template('index2.html', A_cars=A_cars, B_cars=B_cars, C_cars=C_cars, D_cars=D_cars,
                           total_car=total_car)


@bp.route('/face/<leibie>', methods=['GET', 'POST'])
def face(leibie):
    return render_template('face.html', leibie=leibie)


@bp.route('/register_user', methods=['GET', 'POST'])
def register_user():
    if request.method == 'GET':
        current_face_id = User.query.order_by(User.id.desc())[0].face_id
        face_id = int(current_face_id) + 1
        return render_template('userRegister.html', face_id=face_id)
    else:
        name = request.form.get('name')
        password = request.form.get('password')
        sfz = request.form.get('sfz')
        phone = request.form.get('phone')
        card = request.form.get('card')
        face_id = request.form.get('face_id')
        user_obj = User(name=name, password=password, sfz=sfz, phone=phone, carnum=card, face_id=face_id)
        db.session.add(user_obj)
        db.session.commit()
        return redirect('/login_user')


@bp.route('/login_user', methods=['GET', 'POST'])
def login2():
    if request.method == 'GET':
        return render_template('userLogin.html')
    else:
        # 处理POST请求的逻辑
        # 获取到用户提交的用户名和密码
        account = request.form.get('account')
        pwd = request.form.get('pwd')
        print(account, pwd)
        if not account or not pwd:
            return render_template('userLogin.html', error='账号密码不能为空!')
        else:
            try:
                check = db.session.query(User).filter(User.name == account).first()
                if check.password == pwd:
                    session['is_login'] = 1
                    session['username'] = account
                    return redirect('/index2')
                else:
                    return render_template('userLogin.html', error='输入账号密码错误!')
            except Exception as e:
                print(e)
                return render_template('userLogin.html', error='输入账号密码错误!')


@bp.route('/user_del', methods=['GET', 'POST'])
def user_del():
    id = request.form.get('id')
    # 如果车辆在停车场内,需要将记录改为临时用户
    car_obj = User.query.filter(User.id == id).first()
    carnum = car_obj.carnum
    # 判断该车是否在停车场中
    try:
        # 存在
        car = Car_manage.query.filter(Car_manage.carnum == carnum).first()
        car.genre = 2
        db.session.commit()
    except Exception as e:
        # 不存在
        pass
    finally:
        db.session.delete(car_obj)
        db.session.commit()


@bp.route('/user_edit', methods=['GET', 'POST'])
def user_edit():
    # 查询要编辑对象的id
    id = request.args.get('id')
    # 根据id查到要编辑对象
    user_obj = User.query.filter(User.id == id).first()
    if request.method == 'POST':
        name = request.form.get('name')
        phone = request.form.get('phone')
        carnum = request.form.get('carnum')
        pattern = re.compile(r'^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$')
        result = pattern.match(phone)
        if name and phone and carnum:
            # 判断手机号是否合法
            if not result:
                return render_template('user_edit.html', error1='请输入正确的手机号')
            else:
                # 讨论修改车牌号带来的影响
                # 未更改车牌号
                if user_obj.carnum == carnum:
                    user_obj.name = name
                    user_obj.phone = phone
                    user_obj.carnum = carnum
                    db.session.commit()
                    return redirect('/user_paging')
                else:
                    # 更改了车牌号
                    # 判断车牌号是否已经存在
                    count = User.query.filter(carnum=carnum).count()
                    if count == 1:
                        # 已有用户有该车牌
                        print(count)
                        return render_template('user_edit.html', error2='该车牌号已存在')
                    else:
                        # 可以更改
                        # 判断更换的车牌号是否已经在停车场
                        car = Car_manage.query.filter(carnum=carnum)
                        if not car:
                            # 不在停车场
                            # 判断原车牌号车是否在停车场
                            try:
                                car_obj = Car_manage.query.get(carnum=user_obj.carnum)
                                car_obj.carnum = carnum
                                db.session.commit()
                                # 注意需要去admin手动添加车牌图片
                            except Exception as e:
                                # 不在停车场
                                pass
                            finally:
                                # 将该车牌从license_plate表中移除
                                License_plate.query.filter(car_num=user_obj.carnum).delete()
                                user_obj.name = name
                                user_obj.phone = phone
                                user_obj.carnum = carnum
                                db.session.commit()
                                time.sleep(2)
                                return redirect('/user_paging')
                        else:
                            # 需要更换的车牌号已经在停车场了(为临时车而非其他用户)
                            return render_template('user_edit.html', error2='该车牌号已存在')
    else:
        return render_template('user_edit.html', user_obj=user_obj)


@bp.route('/user_renewal', methods=['GET', 'POST'])
def user_renewal():
    id = request.args.get('id')
    user_obj = User.query.filter(User.id == id).first()
    carnum = user_obj.carnum
    formertime = user_obj.endtime
    if request.method == 'POST':
        level = request.form.get('vip-radios')
        if not level:
            return render_template('user_renewal.html', error='选择不能为空!')
        else:
            if user_obj.level != 0:
                if level == "1":
                    newtime = (formertime + datetime.timedelta(days=31)).strftime("%Y-%m-%d %H:%M:%S")
                    charge = Charge(pay_time=datetime.datetime.now(), money=150)
                elif level == "2":
                    newtime = (formertime + datetime.timedelta(days=93)).strftime("%Y-%m-%d %H:%M:%S")
                    charge = Charge(pay_time=datetime.datetime.now(), money=425)
                elif level == "3":
                    newtime = (formertime + datetime.timedelta(days=186)).strftime("%Y-%m-%d %H:%M:%S")
                    charge = Charge(pay_time=datetime.datetime.now(), money=810)
                else:
                    newtime = (formertime + datetime.timedelta(days=365)).strftime("%Y-%m-%d %H:%M:%S")
                    charge = Charge(pay_time=datetime.datetime.now(), money=1530)
            else:
                if level == "1":
                    newtime = (datetime.datetime.now() + datetime.timedelta(days=31)).strftime("%Y-%m-%d %H:%M:%S")
                    charge = Charge(pay_time=datetime.datetime.now(), money=150)
                elif level == "2":
                    newtime = (datetime.datetime.now() + datetime.timedelta(days=93)).strftime("%Y-%m-%d %H:%M:%S")
                    charge = Charge(pay_time=datetime.datetime.now(), money=425)
                elif level == "3":
                    newtime = (datetime.datetime.now() + datetime.timedelta(days=186)).strftime("%Y-%m-%d %H:%M:%S")
                    charge = Charge(pay_time=datetime.datetime.now(), money=810)
                else:
                    newtime = (datetime.datetime.now() + datetime.timedelta(days=365)).strftime("%Y-%m-%d %H:%M:%S")
                    charge = Charge(pay_time=datetime.datetime.now(), money=1530)
            db.session.add(charge)
            db.session.commit()
            user_obj.level = level
            user_obj.begintime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
            user_obj.endtime = newtime
            db.session.commit()
            try:
                car_obj = Car_manage.query.get(carnum=carnum)
                car_obj.genre = 1
                db.session.commit()
                now_time = datetime.datetime.now()
                if now_time > formertime:
                    # 过期
                    if car_obj.begintime > formertime:
                        # 在到期后停进来
                        money = chargecount(car_obj.begintime, datetime.datetime.now())
                        if not Extra_charge.query.filter(carnum=carnum):
                            extra_charge = Extra_charge(carnum=carnum,
                                                        vip_begintime=car_obj.begintime.strftime("%Y-%m-%d %H:%M:%S"),
                                                        vip_deadline=datetime.datetime.now().strftime(
                                                            "%Y-%m-%d %H:%M:%S"), is_valid=True, money=money)
                            db.session.add(extra_charge)
                            db.session.commit()
                        else:
                            Extra_charge.query.filter(carnum=carnum).update(
                                vip_begintime=car_obj.begintime.strftime("%Y-%m-%d %H:%M:%S"),
                                vip_deadline=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), is_valid=True,
                                money=money)
                    else:
                        # 在到期前进来
                        money = chargecount(formertime, datetime.datetime.now())
                        if not Extra_charge.query.filter(carnum=carnum):
                            extra_charge = Extra_charge(carnum=carnum,
                                                        vip_begintime=formertime.strftime("%Y-%m-%d %H:%M:%S"),
                                                        vip_deadline=datetime.datetime.now().strftime(
                                                            "%Y-%m-%d %H:%M:%S"), is_valid=True, money=money)
                            db.session.add(extra_charge)
                            db.session.commit()
                        else:
                            Extra_charge.query.filter(carnum=carnum).update(
                                vip_begintime=formertime.strftime("%Y-%m-%d %H:%M:%S"),
                                vip_deadline=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), is_valid=True,
                                money=money)
                else:
                    # 没过期
                    pass
            except Exception as e:
                pass
            return redirect('/user_info')
    else:
        return render_template('user_renewal.html', user_obj=user_obj)


@bp.route('/user_paging', methods=['GET', 'POST'])
def user_paging():
    # 从URL中取参数page,这个参数与pageinanter.py生成的HTML代码片段有关
    cur_page_num = request.args.get('page')
    if not cur_page_num:
        cur_page_num = "1"
    # 取得总记录数
    total_count = User.query.count()
    # 设定每一页显示多少条记录
    one_page_lines = 6
    # 页面上共展示多少页码标签
    page_maxtag = 9
    # 生成Paginater类的实例化对象
    page_obj = Paginater(url_address='/user_paging/', cur_page_num=cur_page_num, total_rows=total_count,
                         one_page_lines=one_page_lines, page_maxtag=page_maxtag)
    # 对表中的数据进行切片,取出属于本页的记录
    all_users = User.query.all()[page_obj.data_start:page_obj.data_end]
    if request.method == 'POST':
        dropown = request.form.get('search_field')
        if dropown == 'user_name':
            keyword = request.form.get('keyword')
            all_users = User.query.filter(name=keyword)
            if not all_users:
                # 空
                error = '未查询到相关内容!'
                return render_template('user_info.html', error=error)
            else:
                return render_template('user_info.html', all_users=all_users)
        if dropown == 'car_num':
            keyword = request.form.get('keyword')
            all_users = User.query.filter(carnum=keyword)
            if not all_users:
                # 空
                error = '未查询到相关内容!'
                return render_template('user_info.html', error=error)
            else:
                return render_template('user_info.html', all_users=all_users)
    else:
        return render_template('user_info.html', all_users=all_users, page_nav=page_obj.html_page())


@bp.route('/car_import', methods=['GET', 'POST'])
def car_import():
    # 显示车牌图片
    # 没有入库的车辆列表
    # car_list = []
    # outside_obj = License_plate.query.filter(is_inside=False)
    # for o in outside_obj:
    #     car_list.append(o.car_img)
    # 获取刚刚进来的车辆
    carnum = session.get('carnum', '沪E12345')

    # 存放空停车位的列表
    remain_list = []
    # 获取停车场空余车位
    remain_obj = Car_manage.query.filter(carnum__isnull=True)
    for r in remain_obj:
        remain_list.append(r.carport)

    # 从在外车辆中随机选择一个
    # car = random.choice(car_list)
    # 读取图片
    def get_file_content(filePath):
        with open(filePath, 'rb') as fp:
            return fp.read()

    url = './media/' + str(new_car.car_img)
    image = get_file_content(url)
    if request.method == 'POST':
        carnum = request.form.get('carnum')
        new_car.car_num = carnum
        db.session.commit()
        # 从剩余车位中随机选择一个
        carport = random.choice(remain_list)
        begintime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        try:
            is_user = User.query.get(carnum=carnum)
            if is_user:
                # 还要判断是否过期
                if is_user.level != 0:
                    genre = 1
                else:
                    genre = 2
        except Exception as e:
            genre = 2
        finally:
            carport_obj = Car_manage.query.get(carport=carport)
            carport_obj.carnum = carnum
            carport_obj.begintime = begintime
            carport_obj.genre = genre
            db.session.commit()
        message = '{}刚刚停入{}号车位中'.format(carport_obj.carnum, carport_obj.carport)
        session['message'] = message
        # 将该车辆设为车场内车辆
        try:
            car_obj = License_plate.query.get(car_img=new_car.car_img)
            car_obj.is_inside = True
            cir = Car_in_record(carnum=carnum, begintime=begintime, carport=carport)
            db.session.add(cir)
            db.session.commit()
            # 将图片放入carport_imgs
            path = './media/carport_imgs/' + str(new_car.car_img).split('/')[1]
            with open(path, 'wb') as f:
                f.write(image)
                f.close()
        except Exception as e:
            pass
        return redirect('/car_port/')
    else:
        try:
            res = Park_discern(image)
            carnum = res['words_result']['number']
            return render_template('car_import.html', carport_url=new_car.car_img, carnum=carnum)
        except Exception as e:
            print(e)
            return Response('识别发生错误!')


@bp.route('/car_exit', methods=['GET', 'POST'])
def car_exit():
    """
    车辆离场
    :return:
    """
    # 获取出行的车辆
    carnum = session.get('carnum', '沪E12345')
    if request.method == 'GET':
        car_obj = Car_manage.query.filter(Car_manage.carnum == carnum).first()
        begintime = car_obj.begintime
        money = chargecount(begintime, datetime.datetime.now())
        print(money)
        global deadline
        deadline = None
        level = '临时用户'
        is_vip = 0
        start_seconds = time.mktime(begintime.timetuple()) * 1000 + begintime.microsecond / 1000
        end_seconds = time.mktime(
            datetime.datetime.now().timetuple()) * 1000 + datetime.datetime.now().microsecond / 1000
        time_span = end_seconds - start_seconds
        day_span = int(time_span / 1000 / 3600 / 24)
        hour_span = int(time_span / 1000 / 3600 % 24)
        minute_span = int(time_span / 1000 / 60 % 60)
        park_time = str(day_span) + '天' + str(hour_span) + '小时' + str(minute_span) + '分钟'
        session['payment'] = {'carnum': carnum, 'money': money, 'level': level, 'park_time': park_time,
                              'deadline': deadline, 'is_vip': is_vip}
        return redirect('/pay')


@bp.route('/car_port', methods=['GET', 'POST'])
def car_port():
    # A区总共车位
    A_cars = Car_manage.query.filter(Car_manage.carport >= 1, Car_manage.carport <= 25)
    A_cars_use = 0
    Asum = 0
    # A区使用中车位
    for c in A_cars:
        if c.carnum:
            A_cars_use += 1
        Asum += 1

    B_cars = Car_manage.query.filter(Car_manage.carport >= 26, Car_manage.carport <= 50)
    B_cars_use = 0
    Bsum = 0
    for c in B_cars:
        if c.carnum:
            B_cars_use += 1
        Bsum += 1

    C_cars = Car_manage.query.filter(Car_manage.carport >= 51, Car_manage.carport <= 75)
    C_cars_use = 0
    Csum = 0
    for c in C_cars:
        if c.carnum:
            C_cars_use += 1
        Csum += 1

    D_cars = Car_manage.query.filter(Car_manage.carport >= 76, Car_manage.carport <= 100)
    D_cars_use = 0
    Dsum = 0
    for c in D_cars:
        if c.carnum:
            D_cars_use += 1
        Dsum += 1
    message = session.get('message')
    car_in_record = Car_in_record.query.order_by(Car_in_record.id.desc())[:5]
    car_out_record = Car_out_record.query.order_by(Car_out_record.id.desc())[:5]

    # 如果message为空
    if not message:
        is_message = 0
        session['message'] = None
        return render_template('car_port.html',
                               Asum=Asum, A_cars_use=A_cars_use, Bsum=Bsum, B_cars_use=B_cars_use, Csum=Csum,
                               C_cars_use=C_cars_use, Dsum=Dsum, D_cars_use=D_cars_use, is_message=is_message,
                               car_in_record=car_in_record, car_out_record=car_out_record)
    else:
        is_message = 1
        session['message'] = None
        return render_template('car_port.html',
                               Asum=Asum, A_cars_use=A_cars_use, Bsum=Bsum, B_cars_use=B_cars_use, Csum=Csum,
                               C_cars_use=C_cars_use, Dsum=Dsum, D_cars_use=D_cars_use, is_message=
                               is_message, message=message, car_in_record=car_in_record, car_out_record=car_out_record)


@bp.route('/car_record', methods=['GET', 'POST'])
def car_record():
    return redirect('/car_record_paging')


@bp.route('/car_port_pagingA', methods=['GET', 'POST'])
def car_port_pagingA():
    # 从URL中取参数page,这个参数与pageinanter.py生成的HTML代码片段有关
    cur_page_num = request.args.get('page')
    if not cur_page_num:
        cur_page_num = "1"
    # 取得总记录数
    total_count = Car_manage.query.filter(carport__range=[1, 25], carnum__isnull=False).count()
    # 设定每一页显示多少条记录
    one_page_lines = 5
    # 页面上共展示多少页码标签
    page_maxtag = 6
    # 生成Paginater类的实例化对象
    page_obj = Paginater(url_address='/car_port_pagingA', cur_page_num=cur_page_num, total_rows=total_count,
                         one_page_lines=one_page_lines, page_maxtag=page_maxtag)
    # 对表中的数据进行切片,取出属于本页的记录
    all_cars = Car_manage.query.filter(carport__range=[1, 25], carnum__isnull=False).order_by('carport')[
               page_obj.data_start:page_obj.data_end]
    return render_template('car_port_info.html', all_cars=all_cars, page_nav=page_obj.html_page())


@bp.route('/car_port_pagingB', methods=['GET', 'POST'])
def car_port_pagingB():
    # 从URL中取参数page,这个参数与pageinanter.py生成的HTML代码片段有关
    cur_page_num = request.args.get('page')
    if not cur_page_num:
        cur_page_num = "1"
    # 取得总记录数
    total_count = Car_manage.query.filter(Car_manage.carport > 26, Car_manage.carport < 50,
                                          Car_manage.carnum is not None).count()
    # 设定每一页显示多少条记录
    one_page_lines = 5
    # 页面上共展示多少页码标签
    page_maxtag = 6
    # 生成Paginater类的实例化对象
    page_obj = Paginater(url_address='/car_port_pagingB/', cur_page_num=cur_page_num, total_rows=total_count,
                         one_page_lines=one_page_lines, page_maxtag=page_maxtag)
    # 对表中的数据进行切片,取出属于本页的记录
    all_cars = Car_manage.query.filter(carport__range=[26, 50], carnum__isnull=False).order_by('carport')[
               page_obj.data_start:page_obj.data_end]
    return render_template('car_port_info.html', all_cars=all_cars, page_nav=page_obj.html_page())


@bp.route('/car_port_pagingC', methods=['GET', 'POST'])
def car_port_pagingC():
    # 从URL中取参数page,这个参数与pageinanter.py生成的HTML代码片段有关
    cur_page_num = request.args.get('page')
    if not cur_page_num:
        cur_page_num = "1"
    # 取得总记录数
    total_count = Car_manage.query.filter(Car_manage.carport > 51, Car_manage.carport < 75,
                                          Car_manage.carnum is not None).count()
    # 设定每一页显示多少条记录
    one_page_lines = 5
    # 页面上共展示多少页码标签
    page_maxtag = 6
    # 生成Paginater类的实例化对象
    page_obj = Paginater(url_address='/car_port_pagingC/', cur_page_num=cur_page_num, total_rows=total_count,
                         one_page_lines=one_page_lines, page_maxtag=page_maxtag)
    # 对表中的数据进行切片,取出属于本页的记录
    all_cars = Car_manage.query.filter(carport__range=[51, 75], carnum__isnull=False).order_by('carport')[
               page_obj.data_start:page_obj.data_end]
    return render_template('car_port_info.html', all_cars=all_cars, page_nav=page_obj.html_page())


@bp.route('/car_port_pagingD', methods=['GET', 'POST'])
def car_port_pagingD():
    # 从URL中取参数page,这个参数与pageinanter.py生成的HTML代码片段有关
    cur_page_num = request.GET.get('page')
    if not cur_page_num:
        cur_page_num = "1"
    # 取得总记录数
    total_count = Car_manage.query.filter(carport__range=[76, 100], carnum__isnull=False).count()
    # 设定每一页显示多少条记录
    one_page_lines = 5
    # 页面上共展示多少页码标签
    page_maxtag = 6
    # 生成Paginater类的实例化对象
    page_obj = Paginater(url_address='/car_port_pagingD/', cur_page_num=cur_page_num, total_rows=total_count,
                         one_page_lines=one_page_lines, page_maxtag=page_maxtag)
    # 对表中的数据进行切片,取出属于本页的记录
    all_cars = Car_manage.query.filter(carport__range=[76, 100], carnum__isnull=False).order_by('carport')[
               page_obj.data_start:page_obj.data_end]
    return render_template('car_port_info.html', {'all_cars': all_cars, 'page_nav': page_obj.html_page()})


@bp.route('/car_port_info/<id>', methods=['GET', 'POST'])
def car_port_info(id):
    if id == "1":
        return redirect('/car_port_pagingA')
    elif id == "2":
        return redirect('/car_port_pagingB')
    elif id == "3":
        return redirect('/car_port_pagingC')
    else:
        return redirect('/car_port_pagingD')


@bp.route('/car_record_paging', methods=['GET', 'POST'])
def car_record_paging():
    # 从URL中取参数page,这个参数与pageinanter.py生成的HTML代码片段有关
    cur_page_num = request.args.get('page')
    if not cur_page_num:
        cur_page_num = "1"
    # 取得总记录数
    total_count = Car_record.query.count()
    # 设定每一页显示多少条记录
    one_page_lines = 10
    # 页面上共展示多少页码标签
    page_maxtag = 6
    # 生成Paginater类的实例化对象
    page_obj = Paginater(url_address='/car_record_paging/', cur_page_num=cur_page_num, total_rows=total_count,
                         one_page_lines=one_page_lines, page_maxtag=page_maxtag)
    # 对表中的数据进行切片,取出属于本页的记录
    all_cars = Car_record.query.all()[page_obj.data_start:page_obj.data_end]
    return render_template('car_record.html', all_cars=all_cars, page_nav=page_obj.html_page())


@bp.route('/chefei', methods=['GET', 'POST'])
def chefei():
    if request.method == 'GET':
        price = Price.query.filter(Price.id == 1).first()
        return render_template('car_import.html', price=price)
    else:
        day = request.form.get('day')
        night = request.form.get('night')
        top = request.form.get('top')
        price = Price.query.filter(Price.id == 1).first()
        price.day = day
        price.night = night
        price.top = top
        db.session.commit()
        return redirect('/chefei')


@bp.route('/pay', methods=['GET', 'POST'])
def pay():
    if request.method == 'GET':
        carnum = session.get('payment')['carnum']
        money = session.get('payment')['money']
        level = session.get('payment')['level']
        if session.get('payment')['is_vip'] == 1:
            deadline = session.get('payment')['deadline']
        else:
            deadline = None
        park_time = session.get('payment')['park_time']
        return render_template('pay.html', carnum=carnum, money=money, level=level, park_time=park_time,
                               deadline=deadline)
    else:
        # 添加车流纪录信息
        carnum = request.form.get('carnum')
        car_obj = Car_manage.query.filter(Car_manage.carnum == carnum).first()
        begintime = car_obj.begintime
        endtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        genre = car_obj.genre
        money = session.get('payment')['money']
        try:
            User.query.get(carnum=carnum)
            money = 0
        except Exception as e:
            pass
        carport_obj = Car_manage.query.filter(Car_manage.carnum == carnum).first()
        cr = Car_record(carnum=carnum, begintime=begintime, endtime=endtime, genre=genre, money=money)
        cor = Car_out_record(carnum=carnum, endtime=endtime, carport=carport_obj.carport)
        db.session.add(cr)
        db.session.add(cor)

        db.session.commit()
        # 将此车位清空
        session['is_in'] = '0'
        carport = carport_obj.carport
        carport_obj.carnum = None
        carport_obj.begintime = None
        carport_obj.endtime = None
        carport_obj.genre = 0
        db.session.commit()
        # 将收入写入表中
        c = Charge(pay_time=datetime.datetime.now(), money=money)
        db.session.add(c)
        db.session.commit()
        # 将该车辆设为车场外车辆
        try:
            # car_obj = License_plate.query.filter(License_plate.car_num==carnum).first()
            # car_obj.is_inside = False
            # db.session.commit()
            # 将carport_imgs对应图片删除
            path = './media/carport_imgs/' + str(car_obj.car_img).split('/')[1]
            if os.path.exists(path):
                os.remove(path)
            cor = Car_out_record(carnum=carnum, endtime=endtime, carport=carport)
            db.session.add(cor)
            db.session.commit()
        except Exception as e:
            return Response('发生未知错误!')
        finally:
            time.sleep(2)
            return redirect('/index')


# test

@bp.route('/test', methods=['GET', 'POST'])
def test():
    if request.method == 'GET':
        return render_template('test.html')
    else:
        try:
            img = request.FILES.get('car_img')
            if img is None:
                # 没有选择图片,而直接点击检测
                error = '请选择一张图片!'
                return render_template('test.html', error=error)
            else:
                # 先需要判断该车牌是否已经存在
                is_exist = License_plate.query.filter(car_img='car_imgs/' + str(img)).count()
                # 如果不存在
                if is_exist == 0:
                    new_car = License_plate(car_img=img, is_inside=False)
                    db.session.add(new_car)
                    db.session.commit()
                    session['id'] = new_car.id
                    time.sleep(2)
                    return redirect('/car_import/')
                else:
                    # 如果存在,要判断该车应该是在内还是在外
                    is_inside = License_plate.query.get(car_img='car_imgs/' + str(img)).is_inside
                    # 内
                    if is_inside == True:
                        error = '该车已经在停车场中!'
                        return render_template('test.html', error=error)
                    # 外
                    else:
                        out_car = License_plate.query.get(car_img='car_imgs/' + str(img))
                        session['id'] = out_car.id
                        return redirect('/car_import/')
        except Exception as e:
            error = '未知错误'
            return render_template('test.html', error=error)


@bp.route('/test2', methods=['GET', 'POST'])
def test2():
    if request.method == 'GET':
        return render_template('test2.html')
    else:
        try:
            img = request.FILES.get('car_img')
            # 先需要判断该车牌是否已经存在
            is_exist = License_plate.query.filter(car_img='car_imgs/' + str(img)).count()
            # 如果不存在
            if is_exist == 0:
                error = '未检测到该车!'
                return render_template('test2.html', error=error)
            else:
                # 如果存在,要判断该车应该是在内还是在外
                is_inside = License_plate.query.get(car_img='car_imgs/' + str(img)).is_inside
                # 内
                if is_inside == True:
                    in_car = License_plate.query.get(car_img='car_imgs/' + str(img))
                    session['id'] = in_car.id
                    return redirect('/car_exit/')
                # 外
                else:
                    error = '未检测到该车!'
                    return render_template('test2.html', error=error)
        except Exception as e:
            # 没有选择图片,而直接点击检测
            error = '请选择一张图片!'


@bp.route('/analysis', methods=['GET'])
def analysis():
    """
    :return:
    """
    return render_template('analysis.html')


@bp.route('/movies', methods=['get'])
def movies():
    return render_template('movies.html')


@bp.route('/user', methods=['get'])
def user():
    return render_template('user.html')


@bp.route('/text', methods=['get'])
def texts():
    return render_template('text.html')


@bp.route('/login_out', methods=['get'])
def login_out():
    """
    注销登录
    :return:
    """
    # 删除session
    if session.get("username"):
        del session["username"]
    return redirect('/')


@bp.route('/collect_face', methods=['POST'])
def collect_face():
    print("开始采集人脸")
    face_id = request.form.get('face_id')
    name = request.form.get('name')
    print(name)
    user_obj = User.query.filter(User.name == name).first()
    if user_obj:
        return jsonify({'msg': '人脸已存在,无须重复录入!', 'statusCode': '500'})
    time.sleep(1)
    from .recognize_face.workAttendanceSystem import WAS
    frame = WAS()
    result = frame.register_cap(name, face_id)
    # user_obj.face_id = face_id
    # db.session.commit()
    return jsonify({'msg': 'ok', 'statusCode': '200'})


@bp.route('/detection', methods=['POST'])
def detection():
    from .recognize_face.workAttendanceSystem import WAS
    frame = WAS()
    file = request.files['file']
    leibie = request.form.get('leibie')
    filename = secure_filename(file.filename)
    file_path = os.path.join(workdir, 'static/upload', filename)
    file.save(file_path)
    print("开始验证")
    face_id = frame.punchcard_cap(file_path)
    print("人脸ID", face_id)
    if not face_id:
        return jsonify({'msg': '识别失败,未识别到人脸!', 'statusCode': '500'})
    user_obj = User.query.filter(User.face_id == face_id).first()
    is_exists = Car_manage.query.filter(Car_manage.carnum == user_obj.carnum).first()
    if is_exists:
        return jsonify({'msg': '{}已经进场, 无需重复进场!'.format(user_obj.carnum), 'statusCode': '500'})
    if leibie == 'car1':
        chewei = Car_manage.query.filter(Car_manage.carport >= 1, Car_manage.carport <= 25).all()[0]
    elif leibie == 'car2':
        chewei = Car_manage.query.filter(Car_manage.carport >= 26, Car_manage.carport <= 50).all()[0]
    elif leibie == 'car3':
        chewei = Car_manage.query.filter(Car_manage.carport >= 51, Car_manage.carport <= 75).all()[0]
    else:
        chewei = Car_manage.query.filter(Car_manage.carport >= 76, Car_manage.carport <= 100).all()[0]
    cir = Car_in_record(carnum=user_obj.carnum, carport=chewei.carport)
    chewei.genre = 1
    chewei.begintime = datetime.datetime.now()
    chewei.carnum = user_obj.carnum
    session['is_in'] = '1'
    session['carnum'] = user_obj.carnum
    db.session.add(cir)
    db.session.commit()
    return jsonify({'msg': '{}停车成功!'.format(user_obj.carnum), 'statusCode': '200'})

获取源码或论文

如需对应的论文或源码,以及其他定制需求,也可以下方微信联系我。

更多推荐