卷宗物证柜

聚澜智能,作为业内领先的卷宗物证柜源头生产厂家,深刻洞察全国各省法院系统在卷宗管理中的共性需求与个性化挑战。无论是北京、上海的超大案件量压力,还是新疆、西藏等地的特殊气候环境,聚澜智能均能提供定制化的智慧解决方案。公司依托强大的技术研发团队,深度融合物联网、大数据、人工智能及RFID射频识别技术,成功研发出集智能存取、实时盘点、安全监控、全程追溯于一体的智慧卷宗物证柜。

智能卷宗柜-1

在产品层面,聚澜智能不仅关注功能的实现,更以精湛的生产工艺确保每一台设备的质量。从优质冷轧钢板的选材,到精密钣金的加工,再到环保喷涂工艺的应用,每一个环节都经过严苛的质量把控。柜体结构坚固耐用,具备优异的防潮、防火、防尘性能,能够为珍贵卷宗与物证提供物理层面的极致守护。智能化方面,通过人脸识别、指纹解锁等多重认证方式,确保权限安全;智能引导灯光与系统联动,实现卷宗“秒级”定位,彻底解放法官与档案员的生产力。

除了卓越的产品,聚澜智能更以高效的售后服务团队赢得了全国客户的信赖。公司建立了覆盖31个省市自治区的服务网络,配备专业工程师团队,提供从方案设计、设备安装到系统调试、日常维护的全流程服务。无论客户身处何地,聚澜智能均承诺7x24小时快速响应,确保司法业务运行零障碍。
核心API接口
卷宗物证柜API接口服务
基于Flask框架实现RESTful API
支持RFID识别、智能存取、全程留痕等核心功能
"""

from flask import Flask, request, jsonify, g
from flask_restful import Api, Resource
from flask_sqlalchemy import SQLAlchemy
from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity
from datetime import datetime, timedelta
import uuid
import hashlib
import logging
from functools import wraps

初始化应用

app = Flask(name)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/cabinet_db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['JWT_SECRET_KEY'] = 'your-secret-key-change-in-production'
app.config['JWT_ACCESS_TOKEN_EXPIRES'] = timedelta(hours=8)

初始化扩展

db = SQLAlchemy(app)
jwt = JWTManager(app)
api = Api(app)

配置日志

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(name)

==================== 数据库模型定义 ====================

class User(db.Model):
"""用户表 - 存储操作人员信息"""
tablename = 'users'

id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
username = db.Column(db.String(50), unique=True, nullable=False)
password_hash = db.Column(db.String(128), nullable=False)
real_name = db.Column(db.String(50), nullable=False)
department = db.Column(db.String(100))
role = db.Column(db.String(20), default='operator')  # admin, operator, inspector
fingerprint_id = db.Column(db.String(50), unique=True)  # 指纹识别ID
card_id = db.Column(db.String(50), unique=True)  # IC卡ID
face_feature = db.Column(db.Text)  # 人脸特征数据
created_at = db.Column(db.DateTime, default=datetime.now)
last_login = db.Column(db.DateTime)
is_active = db.Column(db.Boolean, default=True)

class Cabinet( db.Model):
"""柜体表 - 存储柜体信息"""
tablename = 'cabinets'

id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
cabinet_code = db.Column(db.String(20), unique=True, nullable=False)  # 柜体编号
cabinet_name = db.Column(db.String(50))
cabinet_type = db.Column(db.String(20))  # main: 主柜, sub: 副柜
location = db.Column(db.String(100))  # 安装位置
ip_address = db.Column(db.String(15))  # IP地址
status = db.Column(db.String(10), default='online')  # online, offline, maintenance
total_compartments = db.Column(db.Integer, default=0)  # 总格口数
created_at = db.Column(db.DateTime, default=datetime.now)
last_heartbeat = db.Column(db.DateTime)  # 最后心跳时间

class Compartment(db.Model):
"""格口表 - 存储柜体格口信息"""
tablename = 'compartments'

id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
cabinet_id = db.Column(db.String(36), db.ForeignKey('cabinets.id'))
compartment_no = db.Column(db.String(10))  # 格口号,如 A01
compartment_type = db.Column(db.String(20))  # standard, large, extra_large
rfid_antenna_id = db.Column(db.String(20))  # RFID天线ID
status = db.Column(db.String(10), default='empty')  # empty, occupied, locked, disabled
current_case_id = db.Column(db.String(36), db.ForeignKey('cases.id'), nullable=True)
last_updated = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now)

__table_args__ = (db.UniqueConstraint('cabinet_id', 'compartment_no'),)

class Case(db.Model):
"""案卷表 - 存储卷宗信息"""
tablename = 'cases'

id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
case_number = db.Column(db.String(50), unique=True, nullable=False)  # 案号
case_name = db.Column(db.String(200), nullable=False)  # 案件名称
case_type = db.Column(db.String(50))  # 案件类型
rfid_tag = db.Column(db.String(50), unique=True, nullable=False)  # RFID标签ID [citation:2]
barcode = db.Column(db.String(50), unique=True)  # 条形码
location_code = db.Column(db.String(50))  # 存放位置编码
status = db.Column(db.String(20), default='in_storage')  # in_storage, borrowed, archived, destroyed
current_compartment_id = db.Column(db.String(36), db.ForeignKey('compartments.id'), nullable=True)
created_by = db.Column(db.String(36), db.ForeignKey('users.id'))
created_at = db.Column(db.DateTime, default=datetime.now)
last_accessed = db.Column(db.DateTime)
access_count = db.Column(db.Integer, default=0)
remarks = db.Column(db.Text)

class OperationLog(db.Model):
"""操作日志表 - 记录所有操作,实现全程留痕 [citation:2][citation:4]"""
tablename = 'operation_logs'

id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
operation_type = db.Column(db.String(20))  # store, retrieve, move, audit, open
user_id = db.Column(db.String(36), db.ForeignKey('users.id'))
case_id = db.Column(db.String(36), db.ForeignKey('cases.id'), nullable=True)
cabinet_id = db.Column(db.String(36), db.ForeignKey('cabinets.id'))
compartment_no = db.Column(db.String(10))
rfid_tag = db.Column(db.String(50))  # RFID标签 [citation:2]
auth_method = db.Column(db.String(20))  # fingerprint, face, card, password
result = db.Column(db.String(10))  # success, failed
fail_reason = db.Column(db.String(200))
operation_time = db.Column(db.DateTime, default=datetime.now)
ip_address = db.Column(db.String(15))
camera_url = db.Column(db.String(200))  # 操作抓拍照片URL [citation:2]

__table_args__ = (
    db.Index('idx_operation_time', 'operation_time'),
    db.Index('idx_case_id', 'case_id'),
)

==================== 辅助函数 ====================

def verify_password(password, password_hash):
"""密码验证"""
return hashlib.sha256(password.encode()).hexdigest() == password_hash

def hash_password(password):
"""密码哈希"""
return hashlib.sha256(password.encode()).hexdigest()

def log_operation(operation_type, user_id, cabinet_id, compartment_no=None,
case_id=None, rfid_tag=None, auth_method=None,
result='success', fail_reason=None):
"""记录操作日志"""
try:
log = OperationLog(
operation_type=operation_type,
user_id=user_id,
case_id=case_id,
cabinet_id=cabinet_id,
compartment_no=compartment_no,
rfid_tag=rfid_tag,
auth_method=auth_method,
result=result,
fail_reason=fail_reason,
ip_address=request.remote_addr
)
db.session.add(log)
db.session.commit()
logger.info(f"操作日志记录成功: {operation_type} - {user_id}")
except Exception as e:
logger.error(f"操作日志记录失败: {str(e)}")
db.session.rollback()

posted @ 2026-03-03 15:41  聚澜智能  阅读(0)  评论(0)    收藏  举报