基于Python的大健康养老公寓管理系统

作者主页:IT研究室✨
个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。
☑文末获取源码☑
精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

一、开发环境

  • 开发语言:Python
  • 数据库:MySQL
  • 系统架构:B/S
  • 后端:Django
  • 前端:Vue

二、系统功能模块

  • 角色:用户、护工、管理员
  • 功能:
    用户
    收费标准、接待信息、房间信息、入住信息管理、请假信息管理、提醒信息、续住信息管理、护理信息管理、退住信息、公告信息;
    护工
    收费标准、接待信息管理、房间信息管理、入住信息管理、请假信息管理、提醒信息管理、续住信息管理、护理信息管理、退住信息管理、公告信息;
    管理员
    用户管理、护工管理、收费标准管理、接待信息管理、房间类型管理、房间信息管理、入住信息管理、请假信息管理、提醒信息管理、续住信息管理、护理信息管理、退住信息管理、 公告信息管理。

三、系统界面展示

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

四、部分代码设计

def get_all_old():
    return oldperson_info.objects.all()


def insert_oldperson(data):
    # 从data中获取要插入的字段值
    username = data.get('username')
    gender = data.get('gender')
    phone = data.get('phone')
    id_card = data.get('id_card')
    checkin_date = data.get('checkin_date')
    checkout_date = data.get('checkout_date')
    room_number = data.get('room_number')
    guardian_name = data.get('guardian_name')
    guardian_relationship = data.get('guardian_relationship')
    guardian_phone = data.get('guardian_phone')

    # 检查数据库中是否存在相同的id_card记录
    existing_employee = employee_info.objects.filter(id_card=id_card).exists()
    existing_volunteer = volunteer_info.objects.filter(id_card=id_card).exists()
    existing_old = oldperson_info.objects.filter(id_card=id_card).exists()
    if existing_old or existing_employee or existing_volunteer:
        return False

    # 创建并保存模型实例到数据库
    old_person = oldperson_info(
        username=username,
        gender=gender,
        phone=phone,
        id_card=id_card,
        checkin_date=checkin_date,
        checkout_date=checkout_date,
        imgset_dir=id_card,
        room_number=room_number,
        guardian_name=guardian_name,
        guardian_relationship=guardian_relationship,
        guardian_phone=guardian_phone
    )
    old_person.save()
    insert_people_info(id_card, username, "old_people")
    return True


def get_all_volunteers():
    return volunteer_info.objects.all()


def insert_volunteer(data):
    # 从data中获取要插入的字段值
    name = data.get('name')
    gender = data.get('gender')
    phone = data.get('phone')
    id_card = data.get('id_card')
    checkin_date = data.get('checkin_date')
    checkout_date = data.get('checkout_date')

    # 检查数据库中是否存在相同的id_card记录
    existing_employee = employee_info.objects.filter(id_card=id_card).exists()
    existing_volunteer = volunteer_info.objects.filter(id_card=id_card).exists()
    existing_old = oldperson_info.objects.filter(id_card=id_card).exists()
    if existing_old or existing_employee or existing_volunteer:
        return False

    # 创建并保存模型实例到数据库
    volunteer = volunteer_info(
        name=name,
        gender=gender,
        phone=phone,
        id_card=id_card,
        checkin_date=checkin_date,
        checkout_date=checkout_date,
        imgset_dir=id_card,
    )
    volunteer.save()
    insert_people_info(id_card, name, "volunteer")
    return True


def get_all_employees():
    return employee_info.objects.all()


def insert_employee(data):
    # 从data中获取要插入的字段值
    name = data.get('name')
    gender = data.get('gender')
    phone = data.get('phone')
    id_card = data.get('id_card')
    hire_date = data.get('hire_date')
    resign_date = data.get('resign_date')

    # 检查数据库中是否存在相同的id_card记录
    existing_employee = employee_info.objects.filter(id_card=id_card).exists()
    existing_volunteer = volunteer_info.objects.filter(id_card=id_card).exists()
    existing_old = oldperson_info.objects.filter(id_card=id_card).exists()
    if existing_old or existing_employee or existing_volunteer:
        return False

    # 创建并保存模型实例到数据库
    employee = employee_info(
        name=name,
        gender=gender,
        phone=phone,
        id_card=id_card,
        hire_date=hire_date,
        resign_date=resign_date,
        imgset_dir=id_card,
    )
    employee.save()
    insert_people_info(id_card, name, "employee")
    return True


def register(data):
    username = data.get('username')
    password = data.get('password')
    existing_sys_user = sys_user.objects.filter(username=username).exists()
    if existing_sys_user:
        return False
    sys_users = sys_user(
        username=username,
        password=password
    )
    sys_users.save()
    return True


def login(data):
    username = data.get('username')
    password = data.get('password')
    try:
        existing_sys_user = sys_user.objects.get(username=username)
        if existing_sys_user.password == password:
            return True
        else:
            return False
    except sys_user.DoesNotExist:
        return False


def event(event_type, oldperson_id, event_date, event_location, payback_dir):
    # 创建并保存模型实例到数据库
    event = event_info(
        event_type=event_type,
        oldperson_id=oldperson_id,
        event_date=event_date,
        event_location=event_location,
        payback_dir=payback_dir,
    )
    event.save()


def get_events():
    return event_info.objects.all()


# 人脸信息
def get_people_info():
    people_info_queryset = people_info.objects.all()
    # 得到ID->姓名的映射字典
    id_card_to_name = {}
    # 得到ID->职位的映射字典
    id_card_to_type = {}

    for person in people_info_queryset:
        id_card_to_name[person.id_card] = person.name
        id_card_to_type[person.id_card] = person.type

    return id_card_to_name, id_card_to_type


def insert_people_info(id_card, name, type):
    # 创建并保存模型实例到数据库
    people = people_info(
        id_card=id_card,
        name=name,
        type=type,
    )
    people.save()
class VideoStreamView(APIView):
    def get(self, request):
        def gen_display():
            fall_timing = 0  # 计时开始
            fall_start_time = 0  # 开始时间
            fall_limit_time = 1  # if >= 1 seconds, then he/she falls.
            vs = cv2.VideoCapture(0)
            # 加载模型
            model = load_model(model_path)
            # 不断循环
            counter = 0
            while True:
                counter += 1
                # grab the current frame
                (grabbed, image) = vs.read()
                image = cv2.flip(image, 1)
                roi = cv2.resize(image, (TARGET_WIDTH, TARGET_HEIGHT))
                roi = roi.astype("float") / 255.0
                roi = img_to_array(roi)
                roi = np.expand_dims(roi, axis=0)

                # determine facial expression
                (fall, normal) = model.predict(roi, verbose=0)[0]
                label = "Fall (%.2f)" % (fall) if fall > normal else "Normal (%.2f)" % normal

                # display the label and bounding box rectangle on the output frame
                cv2.putText(image, label, (image.shape[1] - 150, 30),
                            cv2.FONT_HERSHEY_SIMPLEX, 0.45, (0, 0, 255), 2)

                if fall > normal:
                    if fall_timing == 0:  # just start timing
                        fall_timing = 1
                        fall_start_time = time.time()
                    else:  # alredy started timing
                        fall_end_time = time.time()
                        difference = fall_end_time - fall_start_time
                        current_time = time.strftime('%Y-%m-%d %H:%M:%S',
                                                     time.localtime(time.time()))
                        if difference < fall_limit_time:
                            print('[INFO] %s, 走廊, 摔倒仅出现 %.1f 秒. 忽略.' % (current_time, difference))
                        else:  # strangers appear
                            event_location = '走廊'
                            print('[EVENT] %s, 走廊, 有人摔倒!!!' % (current_time))
                            cv2.imwrite(
                                os.path.join(output_fall_path, 'snapshot_%s.jpg' % (time.strftime('%Y%m%d_%H%M%S'))),
                                image)
                            # 插入数据库
                            image_dir = 'snapshot_%s.jpg' % (time.strftime('%Y%m%d_%H%M%S'))
                            event(event_location + "有人摔倒", '-1', current_time, event_location,image_dir)
                            fall_timing=0
                ret, encoded_frame = cv2.imencode('.jpeg', image)
                if ret:
                    yield (b'--frame\r\n'
                           b'Content-Type: image/jpeg\r\n\r\n' + encoded_frame.tobytes() + b'\r\n')

        return StreamingHttpResponse(gen_display(), content_type='multipart/x-mixed-replace; boundary=frame')


Video_streamView = VideoStreamView.as_view()
Gitee — 基于 Git 的代码托管和研发协作平台

五、论文参考

在这里插入图片描述

六、系统视频

基于Python的大健康养老公寓管理系统

结语

大家可以帮忙点赞、收藏、关注、评论啦~
源码获取:私信我

精彩专栏推荐⬇⬇⬇
Java项目
Python项目
安卓项目
微信小程序项目

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT研究室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值