10 KiB
10 KiB
数据库模型对比分析
一、模型类总结
User 应用模型
-
Department - 部门表
username: 部门名称is_deleted: 软删除标记
-
Team - 团队表(自定义表名:
team)name: 团队名称team_type: 团队类型(personal/team)description: 团队描述approvers: 审核人(多对多,User)is_deleted: 软删除标记
-
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字段
-
Approval - 审批记录表
title: 标题content: 内容times: 提交时间completeTiem: 完成时间personincharge: 负责人/审批部门state: 状态type: 类别user_id: 事件ID(CharField)is_deleted: 软删除标记
-
OperationLog - 操作日志表(自定义表名:
operation_log)operator: 操作人用户名operator_id: 操作人IDoperation_type: 操作类型module: 模块action: 操作描述target_type: 目标类型target_id: 目标IDtarget_name: 目标名称old_data: 操作前的数据(JSON)new_data: 操作后的数据(JSON)ip_address: IP地址user_agent: 用户代理request_path: 请求路径remark: 备注create_time: 操作时间
finance 应用模型
-
Invoice - 开票申请表
ContractNo: 合同号personincharge: 负责人amount: 开票金额type: 开票类型unit: 开票单位全称number: 纳税人识别号address_telephone: 地址/电话bank: 银行卡state: 状态username: 谁提交的times: 提交时间is_deleted: 软删除标记- 注意:没有
approvers_order字段
-
Income - 收入确认表
times: 收款日期ContractNo: 合同号CustomerID: 客户名称amount: 收款金额allocate: 收入分配submit: 谁提交的submit_tiem: 提交时间state: 状态approvers_order: 审核人顺序(JSON格式)✅is_deleted: 软删除标记
-
Accounts - 调账申请表
times: 收款日期ContractNo: 合同号CustomerID: 客户名称amount: 收款金额situation: 情况说明submit: 谁提交的submit_tiem: 提交时间state: 状态is_deleted: 软删除标记- 注意:没有
approvers_order字段(调账申请直接抄送财务)
-
Payment - 付款申请表
reason: 付款理由amount: 付款金额times: 付款日期payee: 收款人bankcard: 银行卡BankName: 开户行applicant: 申请人submit_tiem: 提交时间state: 状态approvers_order: 审核人顺序(JSON格式)✅is_deleted: 软删除标记
-
Reimbursement - 报销申请表
person: 报销人times: 报销日期reason: 报销理由amount: 报销金额FeeDescription: 费用说明submit_tiem: 提交时间state: 状态approvers_order: 审核人顺序(JSON格式)✅is_deleted: 软删除标记
-
BonusChange - 工资/奖金变更表
username: 用户名type: 类型Instructions: 调整说明times: 时间state: 状态submitter: 提交人approvers_order: 审核人顺序(JSON格式)✅is_deleted: 软删除标记
business 应用模型
-
PreFiling - 预立案表
times: 预立案时间client_username: 委托人信息party_username: 相对方信息description: 描述Undertaker: 承办人员submit: 谁提交的is_deleted: 软删除标记
-
ProjectRegistration - 立项登记表
user: 外键(PreFiling)type: 项目类型ContractNo: 合同编号times: 立项日期时间responsiblefor: 负责人charge: 收费情况contract: 合同state: 状态approvers_order: 审核人顺序(JSON格式)✅is_deleted: 软删除标记
-
Bid - 投标登记表
user: 外键(PreFiling)BiddingUnit: 招标单位ProjectName: 项目名称times: 申请日期BiddingAnnouncement: 上传招标公告state: 状态approvers_order: 审核人顺序(JSON格式)✅is_deleted: 软删除标记
-
Case - 案件表
user: 外键(PreFiling)times: 立案时间AgencyContract: 代理合同Contractreturn: 合同返还Closingapplication: 结案申请ChangeRequest: 变更申请paymentcollection: 已收款state: 状态approvers_order: 审核人顺序(JSON格式)✅is_deleted: 软删除标记
-
Invoice - 发票表(注意:与 finance.Invoice 不同)
user: 外键(PreFiling)amount: 金额file: 发票图片或PDFis_deleted: 软删除标记
-
Caselog - 案件日志表
user: 外键(PreFiling)content: 内容times: 时间username: 提交人file: 文件is_deleted: 软删除标记
-
SealApplication - 申请用印表
Printingpurpose: 用印用途CaseNumber: 案件编号Reason: 用印事由seal_number: 盖章份数seal_type: 盖章类型file: 上传用印文件times: 日期state: 状态username: 提交人approvers_order: 审核人顺序(JSON格式)✅is_deleted: 软删除标记
-
Schedule - 待办表
title: 标题tiems: 开始时间end_time: 结束时间remark: 备注state: 状态submit: 提交人approvers_order: 审核人顺序(JSON格式)✅is_deleted: 软删除标记
-
role - 角色表
RoleName: 角色名称permissionId: 权限remark: 备注is_deleted: 软删除标记
-
permission - 权限表
permission_name: 权限名称permission_logo: 权限标识parent: 父级is_deleted: 软删除标记
-
Warehousing - 入库表
unit: 单位mark: 入库标的lawyer: 主办律师deadline: 入库期限contract: 入库合同times: 日期is_deleted: 软删除标记
-
RegisterPlatform - 注册平台表
platform: 注册平台number: 注册号码password: 密码username: 注册人员is_deleted: 软删除标记
-
Announcement - 公告表
title: 标题content: 内容times: 提交时间file: 文件username: 提交人state: 状态is_deleted: 软删除标记
-
LawyerFlie - 律师文件表
title: 标题remark: 备注file: 文件times: 时间is_deleted: 软删除标记
二、approvers_order 字段分布
✅ 有 approvers_order 字段的模型
Income.approvers_order- 收入确认Payment.approvers_order- 付款申请Reimbursement.approvers_order- 报销申请BonusChange.approvers_order- 工资/奖金变更ProjectRegistration.approvers_order- 立项登记Bid.approvers_order- 投标登记Case.approvers_order- 案件管理SealApplication.approvers_order- 申请用印Schedule.approvers_order- 待办
❌ 没有 approvers_order 字段的模型
User- 用户表(入职登记和离职登记使用,审核人列表存储在 Approval.content 中)Invoice(finance) - 开票申请(已废弃审核流程)Accounts- 调账申请(直接抄送财务,不需要审核人)
三、潜在冲突点
1. Invoice 模型名称冲突
问题:finance.Invoice 和 business.Invoice 都叫 Invoice
状态:✅ 不冲突
- 它们在不同的应用中
- 数据库表名不同:
finance_invoice和business_invoice - 代码中通过
from finance.models import Invoice或from business.models import Invoice区分
2. User 模型没有 approvers_order 字段
问题:入职登记和离职登记使用 User 模型,但没有 approvers_order 字段
解决方案:
- 审核人列表存储在
Approval.content字段中 get_approvers_from_record函数会从Approval.content解析审核人列表- 这是设计上的考虑,因为 User 不是业务记录
3. 外键关系
需要注意的外键:
ProjectRegistration.user→PreFiling.idBid.user→PreFiling.idCase.user→PreFiling.idbusiness.Invoice.user→PreFiling.idCaselog.user→PreFiling.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
五、建议
- 定期运行检查:在开发过程中定期运行检查命令,确保数据库和模型一致
- 迁移前检查:在应用迁移前运行检查,确保没有冲突
- 数据导入后检查:在导入数据后运行一致性检查,确保数据完整
- 生产环境检查:在生产环境部署前运行完整检查