Files
jyls_django/数据库模型对比分析.md
2026-01-13 18:29:01 +08:00

10 KiB
Raw Blame History

数据库模型对比分析

一、模型类总结

User 应用模型

  1. Department - 部门表

    • username: 部门名称
    • is_deleted: 软删除标记
  2. Team - 团队表(自定义表名:team

    • name: 团队名称
    • team_type: 团队类型personal/team
    • description: 团队描述
    • approvers: 审核人多对多User
    • is_deleted: 软删除标记
  3. User - 用户表

    • username: 姓名
    • account: 账号
    • password: 密码
    • ethnicity: 民族
    • card: 身份证
    • mobilePhone: 手机号
    • position: 岗位
    • team: 所属团队CharField存储团队名称
    • Dateofjoining: 入职时间
    • Confirmationtime: 转正时间
    • Practicingcertificatetime: 执业证时间
    • Dateofdeparture: 离职时间
    • AcademicResume: 学业简历
    • academic: 学历
    • contract: 合同
    • ApplicationForm: 入职申请表
    • salary: 工资
    • state: 状态
    • token: 令牌
    • is_deleted: 软删除标记
    • department: 归属部门(多对多)
    • role: 角色(多对多)
    • 注意:没有 approvers_order 字段
  4. Approval - 审批记录表

    • title: 标题
    • content: 内容
    • times: 提交时间
    • completeTiem: 完成时间
    • personincharge: 负责人/审批部门
    • state: 状态
    • type: 类别
    • user_id: 事件IDCharField
    • is_deleted: 软删除标记
  5. OperationLog - 操作日志表(自定义表名:operation_log

    • operator: 操作人用户名
    • operator_id: 操作人ID
    • operation_type: 操作类型
    • module: 模块
    • action: 操作描述
    • target_type: 目标类型
    • target_id: 目标ID
    • target_name: 目标名称
    • old_data: 操作前的数据JSON
    • new_data: 操作后的数据JSON
    • ip_address: IP地址
    • user_agent: 用户代理
    • request_path: 请求路径
    • remark: 备注
    • create_time: 操作时间

finance 应用模型

  1. Invoice - 开票申请表

    • ContractNo: 合同号
    • personincharge: 负责人
    • amount: 开票金额
    • type: 开票类型
    • unit: 开票单位全称
    • number: 纳税人识别号
    • address_telephone: 地址/电话
    • bank: 银行卡
    • state: 状态
    • username: 谁提交的
    • times: 提交时间
    • is_deleted: 软删除标记
    • 注意:没有 approvers_order 字段
  2. Income - 收入确认表

    • times: 收款日期
    • ContractNo: 合同号
    • CustomerID: 客户名称
    • amount: 收款金额
    • allocate: 收入分配
    • submit: 谁提交的
    • submit_tiem: 提交时间
    • state: 状态
    • approvers_order: 审核人顺序JSON格式
    • is_deleted: 软删除标记
  3. Accounts - 调账申请表

    • times: 收款日期
    • ContractNo: 合同号
    • CustomerID: 客户名称
    • amount: 收款金额
    • situation: 情况说明
    • submit: 谁提交的
    • submit_tiem: 提交时间
    • state: 状态
    • is_deleted: 软删除标记
    • 注意:没有 approvers_order 字段(调账申请直接抄送财务)
  4. Payment - 付款申请表

    • reason: 付款理由
    • amount: 付款金额
    • times: 付款日期
    • payee: 收款人
    • bankcard: 银行卡
    • BankName: 开户行
    • applicant: 申请人
    • submit_tiem: 提交时间
    • state: 状态
    • approvers_order: 审核人顺序JSON格式
    • is_deleted: 软删除标记
  5. Reimbursement - 报销申请表

    • person: 报销人
    • times: 报销日期
    • reason: 报销理由
    • amount: 报销金额
    • FeeDescription: 费用说明
    • submit_tiem: 提交时间
    • state: 状态
    • approvers_order: 审核人顺序JSON格式
    • is_deleted: 软删除标记
  6. BonusChange - 工资/奖金变更表

    • username: 用户名
    • type: 类型
    • Instructions: 调整说明
    • times: 时间
    • state: 状态
    • submitter: 提交人
    • approvers_order: 审核人顺序JSON格式
    • is_deleted: 软删除标记

business 应用模型

  1. PreFiling - 预立案表

    • times: 预立案时间
    • client_username: 委托人信息
    • party_username: 相对方信息
    • description: 描述
    • Undertaker: 承办人员
    • submit: 谁提交的
    • is_deleted: 软删除标记
  2. ProjectRegistration - 立项登记表

    • user: 外键PreFiling
    • type: 项目类型
    • ContractNo: 合同编号
    • times: 立项日期时间
    • responsiblefor: 负责人
    • charge: 收费情况
    • contract: 合同
    • state: 状态
    • approvers_order: 审核人顺序JSON格式
    • is_deleted: 软删除标记
  3. Bid - 投标登记表

    • user: 外键PreFiling
    • BiddingUnit: 招标单位
    • ProjectName: 项目名称
    • times: 申请日期
    • BiddingAnnouncement: 上传招标公告
    • state: 状态
    • approvers_order: 审核人顺序JSON格式
    • is_deleted: 软删除标记
  4. Case - 案件表

    • user: 外键PreFiling
    • times: 立案时间
    • AgencyContract: 代理合同
    • Contractreturn: 合同返还
    • Closingapplication: 结案申请
    • ChangeRequest: 变更申请
    • paymentcollection: 已收款
    • state: 状态
    • approvers_order: 审核人顺序JSON格式
    • is_deleted: 软删除标记
  5. Invoice - 发票表(注意:与 finance.Invoice 不同)

    • user: 外键PreFiling
    • amount: 金额
    • file: 发票图片或PDF
    • is_deleted: 软删除标记
  6. Caselog - 案件日志表

    • user: 外键PreFiling
    • content: 内容
    • times: 时间
    • username: 提交人
    • file: 文件
    • is_deleted: 软删除标记
  7. SealApplication - 申请用印表

    • Printingpurpose: 用印用途
    • CaseNumber: 案件编号
    • Reason: 用印事由
    • seal_number: 盖章份数
    • seal_type: 盖章类型
    • file: 上传用印文件
    • times: 日期
    • state: 状态
    • username: 提交人
    • approvers_order: 审核人顺序JSON格式
    • is_deleted: 软删除标记
  8. Schedule - 待办表

    • title: 标题
    • tiems: 开始时间
    • end_time: 结束时间
    • remark: 备注
    • state: 状态
    • submit: 提交人
    • approvers_order: 审核人顺序JSON格式
    • is_deleted: 软删除标记
  9. role - 角色表

    • RoleName: 角色名称
    • permissionId: 权限
    • remark: 备注
    • is_deleted: 软删除标记
  10. permission - 权限表

    • permission_name: 权限名称
    • permission_logo: 权限标识
    • parent: 父级
    • is_deleted: 软删除标记
  11. Warehousing - 入库表

    • unit: 单位
    • mark: 入库标的
    • lawyer: 主办律师
    • deadline: 入库期限
    • contract: 入库合同
    • times: 日期
    • is_deleted: 软删除标记
  12. RegisterPlatform - 注册平台表

    • platform: 注册平台
    • number: 注册号码
    • password: 密码
    • username: 注册人员
    • is_deleted: 软删除标记
  13. Announcement - 公告表

    • title: 标题
    • content: 内容
    • times: 提交时间
    • file: 文件
    • username: 提交人
    • state: 状态
    • is_deleted: 软删除标记
  14. LawyerFlie - 律师文件表

    • title: 标题
    • remark: 备注
    • file: 文件
    • times: 时间
    • is_deleted: 软删除标记

二、approvers_order 字段分布

有 approvers_order 字段的模型

  1. Income.approvers_order - 收入确认
  2. Payment.approvers_order - 付款申请
  3. Reimbursement.approvers_order - 报销申请
  4. BonusChange.approvers_order - 工资/奖金变更
  5. ProjectRegistration.approvers_order - 立项登记
  6. Bid.approvers_order - 投标登记
  7. Case.approvers_order - 案件管理
  8. SealApplication.approvers_order - 申请用印
  9. Schedule.approvers_order - 待办

没有 approvers_order 字段的模型

  1. User - 用户表(入职登记和离职登记使用,审核人列表存储在 Approval.content 中)
  2. Invoice (finance) - 开票申请(已废弃审核流程)
  3. Accounts - 调账申请(直接抄送财务,不需要审核人)

三、潜在冲突点

1. Invoice 模型名称冲突

问题finance.Invoicebusiness.Invoice 都叫 Invoice

状态 不冲突

  • 它们在不同的应用中
  • 数据库表名不同:finance_invoicebusiness_invoice
  • 代码中通过 from finance.models import Invoicefrom business.models import Invoice 区分

2. User 模型没有 approvers_order 字段

问题:入职登记和离职登记使用 User 模型,但没有 approvers_order 字段

解决方案

  • 审核人列表存储在 Approval.content 字段中
  • get_approvers_from_record 函数会从 Approval.content 解析审核人列表
  • 这是设计上的考虑,因为 User 不是业务记录

3. 外键关系

需要注意的外键

  • ProjectRegistration.userPreFiling.id
  • Bid.userPreFiling.id
  • Case.userPreFiling.id
  • business.Invoice.userPreFiling.id
  • Caselog.userPreFiling.id

注意:这些外键在 Django 中定义,但数据库可能没有外键约束(需要检查)

四、检查命令使用

1. 检查数据库结构

python manage.py check_database_structure

2. 检查数据一致性

python manage.py check_data_consistency

3. 检查特定应用

python manage.py check_database_structure --app User
python manage.py check_data_consistency --app finance

4. 检查并修复

python manage.py check_database_structure --fix
python manage.py migrate

五、建议

  1. 定期运行检查:在开发过程中定期运行检查命令,确保数据库和模型一致
  2. 迁移前检查:在应用迁移前运行检查,确保没有冲突
  3. 数据导入后检查:在导入数据后运行一致性检查,确保数据完整
  4. 生产环境检查:在生产环境部署前运行完整检查