数据库说明.md 53.2 KB

绿纤美业ERP系统 - 数据库说明

📋 目录


数据库基本信息

  • 数据库类型: MySQL
  • 数据库名称: lqerp
  • 字符集: utf8
  • 表总数: 约100+张表
  • 命名规范: 业务前缀 lq_ + 功能名称

表关系图

核心业务流程图

门店信息 (lq_mdxx) ← 门店房间 (lq_md_room,预约可选)
    ↓
用户信息 (BASE_USER) ← 人员资料 (lq_ryzl) [已弃用]
    ↓
金三角设定 (lq_ycsd_jsj) ← 金三角用户绑定 (lq_jinsanjiao_user)
    ↓
开单记录 (lq_kd_kdjlb) ← 预约记录 (lq_yyjl)
    ↓
├── 开单品项明细 (lq_kd_pxmx) ← 项目资料 (lq_xmzl)
├── 开单健康师业绩 (lq_kd_jksyj)
├── 开单科技部老师业绩 (lq_kd_kjbsyj)
└── 业绩明细 (lq_yjmxb)

耗卡业务
    ↓
耗卡记录 (lq_xh_hyhk)
    ↓
├── 耗卡品项明细 (lq_xh_pxmx)
├── 耗卡健康师业绩 (lq_xh_jksyj)
└── 耗卡科技部老师业绩 (lq_xh_kjbsyj)

核心业务表关系

1. 门店与人员关系

  • 门店信息表: lq_mdxx (门店基础信息)
  • 门店主档时点版本(规划/R-003): lq_store_profile_versionF_ValidFrom/F_ValidTo 记录门店属性历史,用于考勤规则回看与算薪按日/按月取 F_StoreTypeF_StoreCategoryzxztdhhm 等;与 lq_mdxx 当前行双写。建表脚本:项目文档相关/sql/2026-4-3/R-003_门店主档版本快照表_lq_store_profile_version.sql;说明见 用户主档与薪酬考勤改造记录.md(R-003)。
    • longitude (DECIMAL): 经度
    • latitude (DECIMAL): 纬度
    • fence_polygons (JSON): 电子围栏多边形坐标,格式 [[{lng,lat},...]]
    • F_AttendanceCheckFence (INT,可空): 正常打卡是否启用电子围栏校验(1-是,0-否;可空:空表示沿用历史默认「有围栏则校验」)
    • F_AttendanceCheckWifi (INT,可空): 正常打卡是否启用 Wi-Fi 校验(1-是,0-否)
    • F_AttendanceWifiPairs (VARCHAR): Wi-Fi 成对白名单,JSON 数组,如 [{"ssid":"门店5G","bssid":"aa:bb:cc:dd:ee:ff"}]
    • F_AttendanceWifiVerifyPair (INT,可空,默认 0): 是否校验 SSID 与 BSSID 为同一 AP1:端上能拿到 BSSID 时必须与某行 SSID+BSSID 同时一致;端上 拿不到 BSSID 时须 在电子围栏内 且 SSID 与某行一致(防同名热点)。0:不强制同 AP,只要当前 SSID 或 BSSID 命中任意一行中的字段 即可(仍按行维护,但校验为「或」)
    • F_AttendanceWifiSsids / `F_AttendanceWifiBssids:已删除,统一使用 F_AttendanceWifiPairs(脚本:项目文档相关/sql/2026-4-3/门店考勤_围栏与WiFi打卡配置.sql`)
    • F_BusinessHours (TEXT): 营业时间设置
    • F_TrafficTips (TEXT): 交通提示
    • F_AttendanceGroupId (VARCHAR,可空): 门店默认考勤分组,对应 lq_attendance_group.F_Id;员工作为团队成员时,上下班时间以此门店默认班次为准(人员表不存考勤分组列)。
  • 门店房间表: lq_md_room(门店下可预约/可排程房间,一对多lq_mdxx)。管理端在「门店信息」弹窗「房间信息」页签维护。建表脚本:项目文档相关/sql/2026-05-09/lq_md_room_门店房间.sql
    • F_Id:主键(雪花字符串)
    • F_StoreId:门店 ID,关联 lq_mdxx.F_Id
    • F_RoomName:房间名称(必填)
    • F_SortNo:排序号(越小越靠前)
    • F_Enabled:是否启用(1 启用 / 0 停用)
    • F_RoomType:房间类型,与后端枚举 LqStoreRoomTypeEnum 一致(护理室=1、咨询室=2、其他=9)
    • F_Capacity:可容纳人数(可空,供预约参考)
    • F_Remark:备注
    • F_CreateTime / F_LastModifyTime:创建与最后修改时间
    • 接口GET /api/Extend/LqMdRoom/GetByStoreId?storeId= 列表;POST /api/Extend/LqMdRoom/SaveByStore 整单保存(请求体中未包含的已有房间行将删除);GET /api/Extend/LqMdRoom/Selector/RoomType 类型下拉。后续预约在 lq_yyjl 等表上可增加 F_RoomId 关联本表 F_Id
  • 人员信息: BASE_USER (系统用户表,包含门店ID等扩展字段)
  • 员工档案扩展: lq_employee_profileBASE_USER.F_Id 一对一;入职日期仍用 F_ENTRYDATE,扩展用工/银行/教育/经历字段
  • 扫码入职待审: lq_employee_profile_submission 匿名填报快照,审核通过后才写主档(见 项目文档相关/sql/2026-07-18/员工档案扩展与扫码入职申请表.sql
  • 用户主档时点全量版本(R-004): lq_user_profile_versionF_ValidFrom/F_ValidTo 记录脱敏后的完整主档 JSON(F_FullSnapshotJson,不含密码/密钥),与字段级审计 lq_user_profile_audit 双轨;算薪按统计月末时点优先用本表覆盖主档,再叠加门店切段 lq_employee_store_assignment 覆盖 F_Mdid。建表脚本:项目文档相关/sql/2026-04-04/R-004_用户主档全量时点版本_lq_user_profile_version.sql
  • 关联字段: BASE_USER.F_MDIDlq_mdxx.F_Id
  • 员工门店归属快照(规划): lq_employee_store_assignment 按时间段记录 F_EmployeeIdF_StoreId,与当前 F_Mdid 双写;算薪/补录按业务日优先读快照(见改造记录与 R-002 脚本)。
  • 月度业务事实人员(逻辑口径,无新表): 某自然月「有事实」的员工集合由后端 LqMonthlyEmployeeFactHelper 汇总(考勤汇总/切段、打卡明细、人头人次、金三角当月绑定、健康师/科技部业绩与退卡、各岗位工资归档月份等),jkszh/kjblszh 等通过 BASE_USER.F_IdF_ACCOUNT 解析;算薪加载 BASE_USER 时对 当月有事实 的用户允许在 F_ENABLEDMARK=0 时仍参与计算(未软删)。仅 SQL 核对:项目文档相关/sql/2026-04-05/查询_指定年月有业务事实的用户_BASE_USER.sql。API:GET /api/Extend/LqMonthlyEmployeeFact/employees/employee-ids

2. 金三角管理关系

  • 金三角设定: lq_ycsd_jsj (金三角基础信息)
  • 金三角用户绑定: lq_jinsanjiao_user (金三角与用户绑定关系)
  • 用户信息: BASE_USER (系统用户表)
  • 关联字段:
    • lq_ycsd_jsj.F_Idlq_jinsanjiao_user.jsj_id
    • lq_jinsanjiao_user.user_idBASE_USER.F_Id

3. 开单业务关系

  • 开单记录: lq_kd_kdjlb (核心业务表)
  • 开单品项明细: lq_kd_pxmx (品项明细)
  • 开单健康师业绩: lq_kd_jksyj (健康师业绩)
  • 开单科技部老师业绩: lq_kd_kjbsyj (科技部老师业绩)
  • 项目资料: lq_xmzl (项目基础信息)
  • 合作机构资料: lq_hzf(开单合作机构、结算机构名称)
    • status:状态,1 有效、-1 无效(标记删除),NULL 视为有效
  • 关联字段:
    • lq_kd_kdjlb.F_Idlq_kd_pxmx.glkdbh
    • lq_kd_kdjlb.F_Idlq_kd_jksyj.glkdbh
    • lq_kd_kdjlb.F_Idlq_kd_kjbsyj.glkdbh
    • lq_kd_pxmx.pxlq_xmzl.F_Id
    • lq_kd_jksyj.F_kdpxidlq_kd_pxmx.F_Id
    • lq_kd_kjbsyj.F_kdpxidlq_kd_pxmx.F_Id
    • lq_kd_kdjlb.hgjglq_hzf.F_Id(合作机构)
    • lq_kd_kdjlb.fkyylq_hzf.F_Id(结算机构/付款医院)
  • 支付方式配置表: lq_payment_method(开单付款方式 fkfs 可配置项;历史开单 lq_kd_kdjlb.fkfs 存中文名称字符串,非本表主键)
    • F_Id:主键
    • F_Name:支付方式名称(未删除范围内唯一;开单写入 fkfs 的值)
    • F_SortCode:排序
    • F_EnabledMark(INT,可空,默认 1):启用标记(1 启用,0 停用,null 视为启用);管理列表 List 包含停用项,下拉 Selector 仅返回启用项
    • F_DeleteMark(INT,可空):删除标记(null0 正常,1 已删除);禁止物理删除,历史开单 fkfs 不受删除影响
    • F_Remark:备注
    • 审计:F_CreateTime / F_CreateUserIdF_LastModifyTime / F_LastModifyUserId / F_LastModifyUserNameF_DeleteTime / F_DeleteUserId
    • API 前缀:/api/Extend/LqPaymentMethodList 管理列表、Selector 下拉、SetEnabled 启停)
    • 建表/种子脚本:项目文档相关/sql/2026-08-06/创建支付方式配置表_lq_payment_method.sql项目文档相关/sql/2026-08-06/支付方式初始数据.sql

4. 耗卡业务关系

  • 耗卡记录: lq_xh_hyhk (耗卡记录表)
  • 耗卡品项明细: lq_xh_pxmx (耗卡品项明细)
  • 耗卡健康师业绩: lq_xh_jksyj (耗卡健康师业绩)
  • 耗卡科技部老师业绩: lq_xh_kjbsyj (耗卡科技部老师业绩)
  • 关联字段:
    • lq_xh_hyhk.F_Idlq_xh_pxmx.glkdbh (耗卡记录关联品项明细)
    • lq_xh_hyhk.F_Idlq_xh_jksyj.glkdbh (耗卡记录关联健康师业绩)
    • lq_xh_hyhk.F_Idlq_xh_kjbsyj.glkdbh (耗卡记录关联科技部老师业绩)
    • lq_xh_jksyj.F_kdpxidlq_xh_pxmx.F_Id (健康师业绩关联品项明细)
    • lq_xh_kjbsyj.F_hkpxidlq_xh_pxmx.F_Id (科技部老师业绩关联品项明细)
  • 沉睡回店统计索引(建议,见 项目文档相关/sql/2026-07-23/优化沉睡回店统计索引.sql:
    • idx_xh_hyhk_effective_hksj_hy_md (F_IsEffective, hksj, hy, md):周期候选聚合 + 门店筛选
    • 已有 idx_xh_hyhk_member_effective (hy, F_IsEffective, hksj)idx_xh_hyhk_effective_date (F_IsEffective, hksj) 可支撑 MAX 上一到店日

5. 退卡业务关系

  • 退卡记录: lq_hytk_hytk (退卡记录表)
  • 退卡品项明细: lq_hytk_mx (退卡品项明细)
  • 退卡健康师业绩: lq_hytk_jksyj (退卡健康师业绩)
  • 退卡科技部老师业绩: lq_hytk_kjbsyj (退卡科技部老师业绩)
  • 关联字段:
    • lq_hytk_hytk.F_Idlq_hytk_mx.F_RefundInfoId (退卡记录关联品项明细)
    • lq_hytk_hytk.F_Idlq_hytk_jksyj.gltkbh (退卡记录关联健康师业绩)
    • lq_hytk_hytk.F_Idlq_hytk_kjbsyj.gltkbh (退卡记录关联科技部老师业绩)
    • lq_hytk_mx.F_BillingItemIdlq_kd_pxmx.F_Id (退卡明细关联开单品项明细)
    • lq_hytk_mx.F_MemberIdlq_khxx.F_Id (退卡明细关联会员,通过会员ID)
    • lq_hytk_hytk.hylq_khxx.F_Id (退卡记录关联会员)
  • 退款机构反查: 退卡表不直接保存合作/结算机构;通过 lq_hytk_mx.F_BillingItemId → lq_kd_pxmx.F_Id → lq_kd_pxmx.glkdbh → lq_kd_kdjlb.F_Id 反查原开单的 hgjg(合作机构)与 fkyy(结算机构)。历史明细缺少 F_BillingItemId 时机构显示为空。

5.1 大项目部老师月度门店归属

  • 归属表: lq_md_major_project_teacher_assignment
  • 人员来源: F_TeacherIdF_EducationTeacherId 均关联 BASE_USER.F_Id,禁止使用已弃用的 lq_ryzl
  • 门店来源: F_StoreId 关联 lq_mdxx.F_Id
  • 月份字段: F_Year(yyyy)+ F_Month(MM)
  • 归属粒度: 同一门店、同一月份可配置多名老师;同一老师同月也可负责多个门店
  • 唯一约束: (F_StoreId, F_Year, F_Month, F_TeacherId)
  • 用途: 大项目老师工资、手机端“大项目老师明细”等按老师本人限制可见门店范围;无当月归属时必须返回空,不得退化为全门店
  • 与门店组织归属的区别: lq_md_target.F_MajorProjectDepartment 表示门店当月归属的大项目组织,不表示具体老师;老师人员归属以本表为准

6. 报销申请与流程配置关系

  • 报销申请表: lq_reimbursement_application
  • 购买记录表: lq_purchase_records
  • 流程配置表: lq_reimbursement_workflow_config
  • 编号序列表: lq_reimbursement_application_sequence
  • 关联字段: lq_reimbursement_application.F_WorkflowConfigIdlq_reimbursement_workflow_config.F_Id(可选,用于返回流程名称 workflowName)
  • 购买记录关联: lq_purchase_records.F_ApplicationIdlq_reimbursement_application.F_Id
  • 收款人字段: lq_purchase_records.F_PayeeNamevarchar(100),可空以兼容历史数据;新建或编辑购买记录时业务校验必填)
  • 业务编号: lq_reimbursement_application.F_ApplicationNovarchar(32),唯一索引;格式 ZC-yyyy-M-序号,如 ZC-2026-7-001
  • 月度序列: lq_reimbursement_application_sequence.F_Period(主键,格式 yyyy-M)记录每个自然月的 F_CurrentValue;创建申请时在同一事务内原子递增,保证并发编号不重复
  • 报销分类表: lq_reimbursement_category(费用分类管理;店内支出等下拉选用)
    • F_Id:主键
    • F_Level1Name / F_Level1Code:一级名称 / 编号
    • F_TypeName / F_Level2Code:二级名称 / 编号
    • F_Implement:权责收付实现
    • F_CostsRecorded:费用计入
    • F_DeleteMark(INT,可空):删除标记(null0 正常,1 已删除);管理列表/下拉排除已删,历史统计 JOIN 不排除
    • F_EnabledMark(INT,可空,默认 1):启用标记(1 启用,0 停用,null 视为启用兼容旧数据);管理列表 GetList 包含停用项,下拉 Actions/GetNoPagingList 排除停用;通过 PUT {id}/Actions/SetEnabled 切换,不走 Update 接口
    • 建表/补列脚本:项目文档相关/sql/2026-08-04/报销分类表增加标记删除字段_F_DeleteMark.sql项目文档相关/sql/2026-08-04/报销分类表增加启用停用字段_F_EnabledMark.sql

7. 考勤设置关系

  • 考勤设置主表: lq_attendance_setting
  • 公休日期表: lq_attendance_holiday
  • 考勤分组表: lq_attendance_group班次(上下班时间、上午下班/下午上班半天边界F_AmWorkEndTimeF_PmWorkStartTime)、启用、备注、解锁场景下的迟到/早退容忍等);F_DefaultRestGroupId 指向本条班次绑定的默认应休分组lq_attendance_rest_group)。F_MonthlyRestDays / F_HalfDaySplitRestDays / F_RestUnlockCycle 已从本表删除,迁出至应休表(脚本:项目文档相关/sql/2026-05-06/2026-05-06_考勤扩展_全量合并.sql(节 B))。半天时段字段脚本:项目文档相关/sql/2026-07-30/lq_attendance_group_半天时段字段.sql
  • 应休分组表: lq_attendance_rest_group(员工可选绑定 BASE_USER.F_AttendanceRestGroupId 覆盖默认;未绑定时休假额度使用门店默认班次对应考勤分组上的 F_DefaultRestGroupId 所指应休分组;与班次上下班时间解耦)
  • 外勤规则表: lq_attendance_field_work_rule(维护外勤打卡标准上下班时间 F_WorkStartTime/F_WorkEndTime,格式 HH:mm;员工绑定 BASE_USER.F_FieldWorkRuleId,未绑定则不允许外勤打卡;外勤侧迟到/早退按此外勤规则判定,与门店班次可混合打卡)
  • 免考勤人员表: lq_attendance_exempt_user
  • 额外假期表: lq_attendance_extra_leave
  • 婚假规则表: lq_attendance_marriage_leave_rule
  • 丧假规则表: lq_attendance_funeral_leave_rule
  • 年假规则表: lq_attendance_annual_leave_rule
  • 产假规则表: lq_attendance_maternity_leave_rule
  • 迟到 / 早退规则表: lq_attendance_late_rule
  • 缺卡规则表: lq_attendance_missing_card_rule
  • 旷工规则表: lq_attendance_absenteeism_rule
  • 配置历史表: lq_attendance_config_history
  • 人员信息来源: BASE_USER(司龄按 BASE_USER.F_ENTRYDATE 计算;上下班班次以用户主门店 F_MDID 对应 lq_mdxx.F_AttendanceGroupId 为准)
  • **BASE_USER.F_LeaveDate**(DATETIME,可空):离职日期;主档「在职/离职」为离职时必填,在职时应为空。员工花名册无当月考勤汇总时:「入职≤查询月末」且(无离职日或「离职日≥查询月1日」)——当月离职仍出现在当月;查下一自然月时因不满足「离职≥下月1日」,上月已离职者不再出现;不依赖当前 F_IsOnJob。有汇总时以 lq_attendance_summary.F_EmployeeStatus 为准。建表/补列脚本:项目文档相关/sql/2026-04-06/BASE_USER_增加离职日期_F_LeaveDate.sql
  • 统一历史字段(除历史表外,所有考勤配置表均已补齐):
    • F_DeleteMark: 逻辑删除标记(0-正常,1-已删除)
    • F_VersionNo: 当前版本号
    • F_LastModifyUserId: 最后修改人ID
    • F_LastModifyUserName: 最后修改人姓名
    • F_LastModifyTime: 最后修改时间
  • 关联字段:
    • BASE_USER.F_AttendanceGroupId:已从人员表删除;班次仅以门店 lq_mdxx.F_AttendanceGroupId 为准(迁移脚本:项目文档相关/sql/2026-05-06/2026-05-06_考勤扩展_全量合并.sql 末节 DROP COLUMN
    • BASE_USER.F_PunchAllowedStoreIds(TEXT,可空):可正常打卡的门店 ID 列表,JSON 数组字符串如 ["id1","id2"];空表示未单独配置,打卡白名单兜底为主门店 F_MDID。合并 DDL 见:项目文档相关/sql/2026-05-06/2026-05-06_考勤扩展_全量合并.sql
    • BASE_USER.F_AttendanceRestGroupIdlq_attendance_rest_group.F_Id(可选:应休福利分组;空则使用门店默认班次对应 lq_attendance_group.F_DefaultRestGroupId 所指应休分组的月应休/半天拆分/解锁周期)
    • BASE_USER.F_FieldWorkRuleIdlq_attendance_field_work_rule.F_Id(可选:外勤规则;空则外勤打卡被拦截;外勤打卡迟到/早退按此外勤规则时间判定,正常打卡仍走门店班次)
    • lq_attendance_group.F_DefaultRestGroupIdlq_attendance_rest_group.F_Id(每条班次的默认应休口径;保存班次设置时由后端同步维护对应应休行)
    • lq_attendance_exempt_user.F_UserIdBASE_USER.F_Id(免考勤人员)
    • lq_attendance_extra_leave.F_UserIdBASE_USER.F_Id(员工额外假期额度配置)
    • lq_attendance_config_history.F_BizId ↔ 各考勤配置表 F_Id(按 F_ModuleType 区分模块)
    • WFORM_LEAVEAPPLY.F_FUNERALRELATIONTYPE(丧假关系类型:1-直系亲属,2-非直系亲属,不再从请假原因文本识别)
    • WFORM_LEAVEAPPLY.F_APPLYDEPTIDBASE_ORGANIZE.F_Id(申请部门组织 ID,取用户所属组织本级,与 F_APPLYDEPT 名称一致)。DDL:项目文档相关/sql/2026-6-12/wform_leaveapply_增加申请部门ID_F_APPLYDEPTID.sql
    • 销假流程表 WFORM_LEAVE_CANCEL_APPLY:字段含 F_FLOWIDF_BILLNOF_ATTENDANCERECORDID(待销假的 lq_attendance_record.F_Id)、F_CANCELREASON 等;流程通过后由工作流钩子调用考勤销假。
    • 补卡流程表 WFORM_ATTENDANCE_PUNCH_APPLY:字段含 F_PUNCHTARGETSJSON(补卡目标 JSON:date / punchIn / punchOut)、F_APPLYREASON 等;流程通过后按考勤组标准上下班时间写入打卡。
    • 单据规则 BASE_BILLRULE:销假/补卡流程取号依赖编码 WF_LeaveCancelApplyNoWF_AttendancePunchApplyNo;未配置时取号结果为「单据规则不存在」。初始化脚本:项目文档相关/sql/2026-4-2/单据规则_BASE_BILLRULE_销假与补卡.sql

8. 考勤打卡记录表说明

  • 表名: lq_attendance_record
  • 用途: 存储员工每日真实打卡结果,供“打卡记录”页面按月生成矩阵视图,并同时固化“命中的规则快照”和“打卡当时整套考勤规则快照”。
  • 核心字段:
    • F_UserId: 员工ID
    • F_EmployeeName: 员工姓名快照
    • F_StoreId / F_StoreName: 门店快照
    • F_AttendanceGroupId / F_AttendanceGroupName: 考勤分组快照
    • F_AttendanceDate: 打卡日期
    • F_PunchInTime / F_PunchOutTime: 上下班打卡时间
    • F_PunchInType / F_PunchOutType: 上下班打卡类型(1正常上班,2外勤)
    • F_PunchInLongitude / F_PunchInLatitude / F_PunchInAddress: 上班打卡定位与地址
    • F_PunchOutLongitude / F_PunchOutLatitude / F_PunchOutAddress: 下班打卡定位与地址
    • F_PunchInPhotoUploadRecordId / F_PunchOutPhotoUploadRecordId: 上下班打卡照片在 lq_upload_record 中的记录 ID(与直传确认接口返回的 uploadRecordId 一致);对外展示用访问地址由 lq_upload_record.F_AccessUrl 解析,不在本表存 URL
    • F_IsPunchInFenceValid / F_IsPunchOutFenceValid: 上下班围栏校验结果(1围栏内,0围栏外,null未校验)
    • F_Status: 打卡状态(1正常,2迟到,3休息,4请假,5病假,6缺卡,7旷工,8待考勤;8 表示考勤日晚于当前日期且尚无打卡,界面展示「暂无打卡」,不计入缺卡类异常统计)
    • F_LateMinutes: 迟到分钟数
    • F_EarlyLeaveMinutes: 早退分钟数
    • F_IsManual: 是否手动补录
    • F_Remark: 备注
    • F_RuleSnapshotJson: 规则快照JSON(保存打卡当日命中的班次考勤组、迟到早退规则等;其中月应休相关字段可与独立 restGroup 节点同时存在,汇总优先读快照内应休分组)
    • F_AllRuleSnapshotJson: 全量考勤规则快照JSON(保存打卡当时整套考勤设置,包括基础扣款倍率、公休、假期规则、缺卡/旷工/迟到早退规则、当前员工相关免考勤与额外假期配置等)
    • F_SupplementRemark: 补卡备注
    • F_SupplementOperatorId / F_SupplementOperatorName / F_SupplementTime: 补卡操作信息
    • F_SupplementWorkflowId: 关联补卡流程ID(可空)
    • F_SupplementCountAsNormal: 补卡是否按正常考勤计入全勤(1=是,0/null=否);流程/后台补卡写入时默认 0;管理员可在打卡详情放行。当月任一未放行补卡日则整月非全勤
    • F_AdjustDetailJson: 最近一次后台补卡调整快照 JSON(含调整前/后打卡时间与状态、备注、操作人),供「考勤调整记录」列表展示
    • F_RelatedWorkflowsJson: 关联流程 JSON(数组,记录与该日考勤相关的请假/补卡等流程,含类型、表单主键、单号、假种等,便于详情展示与追溯)
  • 索引说明:
    • uk_attendance_record_user_date: 保证同一员工同一天只有一条有效记录
    • idx_attendance_record_month_group: 支持按月份、分组快速查询月度矩阵
  • 库表升级:补上传记录列见 项目文档相关/sql/2026-04-13/lq_attendance_record_打卡照片上传记录ID.sql;删除冗余照片 URL 列见同目录 lq_attendance_record_移除打卡照片URL列.sql(按需执行);补卡计入全勤开关见 项目文档相关/sql/2026-07-24/lq_attendance_record_补卡是否按正常考勤算.sql;后台补卡调整快照见 项目文档相关/sql/2026-08-03/考勤记录增加调整快照字段_F_AdjustDetailJson.sql
  • 关联字段:
    • lq_attendance_record.F_UserIdBASE_USER.F_Id(打卡员工)
    • lq_attendance_record.F_StoreIdlq_mdxx.F_Id(打卡时门店快照)
    • lq_attendance_record.F_AttendanceGroupIdlq_attendance_group.F_Id(打卡时考勤分组快照)
    • lq_attendance_record.F_PunchInPhotoUploadRecordId / F_PunchOutPhotoUploadRecordIdlq_upload_record.F_Id(打卡照片上传记录)

考勤汇总表 lq_attendance_summary

  • 用途:按月存放员工出勤/请假/休息等汇总天数,供算薪、花名册「有汇总时以汇总员工状态为准」等使用。
  • 与打卡关系:可通过接口 POST /api/Extend/LqAttendanceSummary/SyncFromAttendanceRecords/{year}/{month} lq_attendance_record 重算(删除该月全部汇总行后重建)。人选与月度考勤矩阵、花名册「当月在职」一致(见 Skill historical-on-job-inference / 代码 AttendanceMonthOnJobUserQuery);按自然日取该日最新一条打卡记录的状态:正常+迟到→F_WorkDays,请假+病假→F_LeaveDays,休息→F_RestDays;生成行 F_EmployeeStatus=1(在职)。未来月不允许从打卡生成。
  • 当月考勤组展示:管理端「考勤汇总列表」「月度考勤矩阵」中的考勤组文案按该自然月内有效打卡记录上的 F_AttendanceGroupName 快照聚合(月中换组时展示为「甲→乙」);若当月无打卡快照则回退为用户主门店lq_mdxx 上当前默认考勤分组名称,便于与后续按考勤组规则扣款口径对齐。
  • 汇总列表扩展列(实时自打卡)GET /api/Extend/LqAttendanceSummary 在分页结果上按人、按自然月从 lq_attendance_record 折叠为「每日一条」后计算:应休(F_RuleSnapshotJsonrestGroup.monthlyRestDays 优先,其次 attendanceGroup.monthlyRestDays 快照字段,否则主档:F_AttendanceRestGroupId 应休表优先,再否则门店班次绑定的 F_DefaultRestGroupId 应休表)、到岗(状态正常+迟到)、工作天数=应休+到岗、带薪请假(请假状态且假种非事假/病假)、请假合计(请假+病假)、迟到早退天数(迟到或早退分钟大于 0)、旷工天数、补卡天数、未放行补卡天数、是否全勤(补卡维度:无未放行补卡日即为是);扣款额为规则「固定金额」时自 F_RuleSnapshotJson/F_AllRuleSnapshotJson 汇总(迟到+早退合并一列金额);请假扣款为日薪×baseSetting 倍率,未传员工日薪时金额为 0(后续可与薪酬日薪对接)。
  • 数据来源:打卡同步(备注含「系统按考勤打卡汇总生成」)与 Excel 导入(备注前缀 [Excel导入],可选列 F_DataSource=2)互斥展示;算薪 WorkingDays 对导入行取 F_WorkDays(出勤天数),对同步行取打卡汇总。脚本:项目文档相关/sql/2026-6-12/lq_attendance_summary_增加数据来源_F_DataSource.sql
  • 主要字段F_UserIdF_YearF_MonthF_EmployeeStatus(1 在职,2 离职,3 停薪留职)、F_WorkDaysF_LeaveDaysF_RestDaysF_DataSourceF_IsEffective

通用业务操作日志 lq_business_operation_log

  • 用途: 跨模块记录「谁、何时、对哪条业务、执行何种动作」,扩展信息放 F_DetailJson(JSON)。当前用于「取消流程补卡」等;后续订单、库存等可复用同一表与服务。
  • 主要字段: F_ModuleCode(如 ATTENDANCE)、F_ActionCode(如 CANCEL_WORKFLOW_SUPPLEMENT)、F_BizType / F_BizIdF_SummaryF_DetailJsonF_OperatorUserIdF_OperatorUserNameF_OperateTime
  • 建表脚本: 项目文档相关/sql/2026-4-2/创建业务操作日志表_lq_business_operation_log.sql

用户主档变更审计 lq_user_profile_audit(规划/R-001)

  • 用途: 记录 BASE_USER 字段级变更(何人、何时、何种动作、何字段、旧值→新值),用于算薪/考勤纠纷追溯;敏感字段按规范脱敏或不存明文。
  • 主要字段: F_TargetUserId(被改用户)、F_OperatorUserId / F_OperatorUserName / F_OperateTimeF_Action(如 PROFILE_UPDATEADMIN_RESET_PASSWORD)、F_BatchId(同次请求)、F_FieldKey / F_FieldLabelF_OldValue / F_NewValueF_SourceF_ClientIp / F_UserAgent(可选)、F_Remark(可选)。
  • 设计文档: 项目文档相关/docs/用户主档与薪酬考勤改造记录.md(R-001 详细设计)。
  • 建表脚本: 项目文档相关/sql/2026-4-3/R-001_用户主档变更审计表_lq_user_profile_audit.sql
  • 说明: 可选方案为复用 lq_business_operation_logF_BizType=base_user),见 R-001 脚本内注释。

员工门店归属快照 lq_employee_store_assignment(规划/R-002)

  • 用途: 按日切段记录员工归属门店,支撑历史月工资与补录按「发生日」取门店,减少对当前 BASE_USER.F_Mdid 的依赖。
  • 主要字段: F_EmployeeIdF_StoreIdF_StoreNameF_YearF_MonthF_StatisticsMonthF_StartDateF_EndDateF_IsEffective(软删)、F_Remark 及创建/更新人、时间。
  • 关联: F_EmployeeIdBASE_USER.F_IdF_StoreIdlq_mdxx.F_Id
  • 建表脚本: 项目文档相关/sql/2026-4-3/R-002_员工门店归属快照表_lq_employee_store_assignment.sql
  • 设计文档: 项目文档相关/docs/员工门店归属快照表方案详细设计.md用户主档与薪酬考勤改造记录.md

门店主档时点版本 lq_store_profile_version(规划/R-003)

  • 用途: 门店资料变更形成时点版本,支撑考勤「当时打卡规则」回看与算薪按历史取 F_StoreType/F_StoreCategory/zxzt/dhhm 等。
  • 主要字段: F_StoreIdF_VersionNoF_ValidFrom/F_ValidTo、操作人、F_AttendanceSnapshotJsonF_StoreTypeF_StoreCategoryF_ZxztF_DhhmF_StatusF_DmF_FullExtensionJson(可选)。
  • 关联: F_StoreIdlq_mdxx.F_Id
  • 建表脚本: 项目文档相关/sql/2026-4-3/R-003_门店主档版本快照表_lq_store_profile_version.sql
  • 设计文档: 项目文档相关/docs/用户主档与薪酬考勤改造记录.md(R-003)。

用户主档时点全量版本 lq_user_profile_version(R-004)

  • 用途: 用户主档变更形成时点全量快照(与 R-001 字段 diff 互补),便于按任意月末时点还原业务主档用于算薪/统计;JSON 内为脱敏 UserEntity(密码、密钥清空)。
  • 主要字段: F_TargetUserIdF_VersionNoF_ValidFrom/F_ValidToF_OperatorUserIdF_OperatorUserNameF_ChangeTrigger、冗余 F_Mdid/F_Gw/F_OrganizeIdF_FullSnapshotJson
  • 关联: F_TargetUserIdBASE_USER.F_Id
  • 建表脚本: 项目文档相关/sql/2026-04-04/R-004_用户主档全量时点版本_lq_user_profile_version.sql

员工档案扩展 lq_employee_profile

  • 用途: 与 BASE_USER 一对一扩展员工档案字段;姓名、手机、身份证、入职时间等主档字段仍在 BASE_USERF_ENTRYDATE 为考勤/算薪/司龄唯一口径,本表不重复存储)。
  • 关联: F_UserIdBASE_USER.F_Id(唯一索引 UK_lq_employee_profile_UserId)。
  • 主要字段:
    • 用工档案:F_MaritalStatusF_PoliticalStatusF_HouseholdTypeF_CurrentAddressF_EmployeeNo(可空、非空唯一)、F_EmployeeType(全职/实习/其他)、F_EmployeeStatus(正式/试用/待离职,与 F_IsOnJob 分离)、F_ProbationMonths(3/6)、F_RegularizationDateF_RecruitmentType
    • 银行:F_BankNameF_BankCardCipher(密文,禁止明文列)、F_BankAccountName(开户实名)
    • 身份证材料:F_IdCardAddress(完整地址,独立于 BASE_USER.F_NATIVEPLACE)、F_IdCardFrontUrlF_IdCardBackUrl
    • 教育/经历:F_GraduateSchoolF_EnrollmentDateF_GraduationDateF_MajorF_PreviousCompanyF_PreviousPositionF_PreviousStartDateF_PreviousEndDate
    • 紧急联系人扩展:F_EmergencyContactRelationF_EmergencyContactAddress(姓名/电话仍在 BASE_USER.F_URGENTCONTACTS / F_URGENTTELEPHONE
    • 审计:F_CreateTime/F_UpdateTime/F_CreateUser/F_UpdateUserF_LastReviewUserId/F_LastReviewUserName/F_LastReviewTime
  • 派生字段(不落库): 年龄按身份证出生日期实时计算;司龄按 BASE_USER.F_ENTRYDATE 实时计算。
  • 索引: UK_lq_employee_profile_UserIdUK_lq_employee_profile_EmployeeNo(可空)。
  • 建表脚本: 项目文档相关/sql/2026-07-18/员工档案扩展与扫码入职申请表.sql
  • 实体: NCC.Extend.Entitys.lq_employee_profile.LqEmployeeProfileEntity

员工档案匿名提交 lq_employee_profile_submission

  • 用途: 通用二维码匿名填报的待审核区;审核通过后才事务写入 BASE_USER + lq_employee_profile;禁止匿名接口直接建号。
  • 状态枚举: 待审核(1)、已通过(2)、已驳回(3)、已作废(4)。
  • 关联: 审核通过后 F_LinkedUserIdBASE_USER.F_Id
  • 敏感字段: F_IdCardCipher / F_BankCardCipher 存密文;F_IdCardHash(char(64))用于身份证查重索引,不对密文建唯一;列表/接口默认脱敏。
  • 主档快照列: F_RealNameF_MobilePhoneF_GenderF_BirthdayF_NationF_NativePlaceF_EducationF_EntryDate(申请入职日,通过后写 BASE_USER.F_ENTRYDATE)、组织/门店/岗位、F_UrgentContacts/F_UrgentTelePhone/F_PostalAddress 等;证件类型固定身份证,不重复存储。
  • 档案扩展快照列: 与 lq_employee_profile 同名字段(含 F_BankAccountNameF_IdCardAddressF_IdCardFrontUrlF_IdCardBackUrl)+ F_FormSnapshotJson(身份证、银行卡仅保存脱敏值的 JSON 备份)。
  • 流程字段: F_SubmissionNo(申请编号,唯一)、F_StatusF_RejectReasonF_ReviewUserId/F_ReviewUserName/F_ReviewTimeF_SubmitSource/F_SubmitIp/F_SubmitTime/F_UserAgentF_VoidUserId/F_VoidTime
  • 索引: UK_lq_employee_profile_submission_NoIDX_lq_employee_profile_submission_Status_SubmitTimeIDX_lq_employee_profile_submission_IdCardHashIDX_lq_employee_profile_submission_MobilePhone
  • 建表脚本: 项目文档相关/sql/2026-07-18/员工档案扩展与扫码入职申请表.sql
  • 实体: NCC.Extend.Entitys.lq_employee_profile_submission.LqEmployeeProfileSubmissionEntity

人事调动/离职填报 lq_personnel_report

  • 用途: 门店端提交调动/离职人事填报的独立待办区;不联动更新 BASE_USERlq_employee_profile、流程、考勤、算薪等主业务表。
  • 类型枚举: 调动(1)、离职(2)。
  • 处理状态: 待处理(0)、已处理(1);恢复待处理时清空处理人/处理时间。
  • 快照字段: 来源组织/门店、提交人、被填报员工姓名/手机、目标门店名称等均由服务端从当前用户或被填报人快照写入。
  • 关联: F_ApplicantUserIdBASE_USER.F_Id(只读校验,不写回);F_SourceMdid/F_TargetMdidlq_mdxx.F_Id(快照名称)。
  • 流程字段: F_ReportNo(填报编号,唯一)、F_SubmitTimeF_HandleUserId/F_HandleUserName/F_HandleTime/F_HandleRemark
  • 索引: UK_lq_personnel_report_NoIDX_lq_personnel_report_Handle_SubmitTimeIDX_lq_personnel_report_SourceOrg_SubmitTimeIDX_lq_personnel_report_Type_HandleIDX_lq_personnel_report_ApplicantUserId
  • 建表脚本: 项目文档相关/sql/2026-07-18/人事调动离职填报表.sql
  • 实体: NCC.Extend.Entitys.lq_personnel_report.LqPersonnelReportEntity
  • API: LqPersonnelReportService,前缀 /api/Extend/LqPersonnelReport

员工到院转化登记 lq_member_arrival_record

  • 用途与边界: 员工确认会员已到院后的独立登记、见诊/成交结果维护及转化统计。模块只读 lq_khxxBASE_USER、组织和门店;不回写会员主档、FirstVisitTime、预约、沟通、开单、耗卡、工资及人头自动统计表。
  • 主键与编号: F_Id(应用层 YitIdHelper.NextId().ToString());F_RecordNo(对外登记编号,唯一);F_RecordKey(有效记录唯一键,格式 门店ID_会员ID_yyyyMMdd,作废时置空,使同门店+会员+自然日仅一条有效记录且作废后可重新登记)。
  • 会员快照字段: F_MemberIdF_MemberNameF_MemberMobileF_MemberId 只读关联 lq_khxx.F_Id,提交时校验 lq_khxx.gsmd = F_SourceMdid。手机号在企业内部接口完整返回,但业务操作日志不得记录手机号。
  • 来源快照字段: F_SourceOrganizeIdF_SourceOrganizeNameF_SourceMdidF_SourceMdName,均由服务端按登记人当前 BASE_USER、组织、lq_mdxx 快照生成,不接受前端指定门店。
  • 到院与结果字段: F_ArrivalTypeF_ArrivalTimeF_ConsultationStatusF_ConsultationTimeF_DealStatusF_DealTime。到院类型枚举:售前(1)、售后(2);见诊/成交状态枚举:待确认(0)、是(1)、否(2)。成交=是时见诊必须=是;见诊改为否时成交规范化为待确认;状态时间在状态变更时设置,恢复待确认时清空。
  • 登记与修改字段: F_RecorderUserIdF_RecorderUserNameF_LastModifyUserIdF_LastModifyUserNameF_RemarkF_VersionF_CreateTimeF_UpdateTimeF_Version 从 1 开始,用于更新结果和作废的乐观锁。
  • 有效与作废字段: F_IsEffective(1有效、0作废)、F_VoidReasonF_VoidUserIdF_VoidUserNameF_VoidTime。作废为软作废,同时将 F_RecordKey 置空、版本加一;作废记录不参与统计。
  • 统计口径: 所有筛选均按 F_ArrivalTime;只统计有效记录;所选范围内按 F_MemberId 去重,同一会员有多条记录时以最后一次到院记录决定售前/售后以及最终见诊/成交状态,因此售前人头+售后人头=总人头;recordCount 为筛选范围内未去重的有效登记数。
  • 索引: 主键 PRIMARY(F_Id);唯一索引 UK_lq_member_arrival_record_No(F_RecordNo)UK_lq_member_arrival_record_RecordKey(F_RecordKey);查询索引 IDX_lq_member_arrival_ArrivalTime_Effective(F_ArrivalTime,F_IsEffective)IDX_lq_member_arrival_SourceOrg_ArrivalTime(F_SourceOrganizeId,F_ArrivalTime)IDX_lq_member_arrival_SourceMd_ArrivalTime(F_SourceMdid,F_ArrivalTime)IDX_lq_member_arrival_Member_ArrivalTime(F_MemberId,F_ArrivalTime)IDX_lq_member_arrival_Recorder_ArrivalTime(F_RecorderUserId,F_ArrivalTime)IDX_lq_member_arrival_Type_Status(F_ArrivalType,F_ConsultationStatus,F_DealStatus)
  • 建表脚本: 项目文档相关/sql/2026-07-20/员工到院转化记录表.sql;菜单与权限脚本:项目文档相关/sql/2026-07-20/员工到院转化菜单与权限.sql
  • 实体: NCC.Extend.Entitys.lq_member_arrival_record.LqMemberArrivalRecordEntity
  • API: LqMemberArrivalService,前缀 /api/Extend/LqMemberArrival;写操作及导出写入 lq_business_operation_log,模块编码为“员工到院信息”。

会员自定义标签 lq_member_tag / lq_member_tag_rel

  • 用途: 全公司共用标签库;会员通过关联表打标,标签名 ≤5 字、支持 F_Color;单会员标签上限由 sys_config.memberCustomTagMaxCount 配置(默认 5)。
  • 主要字段(lq_member_tag:
    • F_Id:主键(YitIdHelper
    • F_TagName:标签名,全库唯一
    • F_Color:颜色 hex,默认 #409EFF
    • F_CreateTime / F_CreatorUserId / F_LastModifyTime / F_LastModifyUserId
  • 主要字段(lq_member_tag_rel:
    • F_Id:主键
    • F_MemberIdlq_khxx.F_Id
    • F_TagIdlq_member_tag.F_Id(唯一约束:会员+标签)
    • F_Source:1 管理后台 / 2 门店 PC / 3 员工小程序
    • F_CreateTime / F_CreatorUserId
  • 删除规则: 物理删除标签时级联删除全部 lq_member_tag_rel;取消会员标签仅删关联。
  • 建表脚本: 项目文档相关/sql/2026-07-30/创建会员自定义标签表_lq_member_tag.sql
  • 接口: LqMemberTagService,前缀 /api/Extend/LqMemberTag

9. 业绩统计关系

  • 业绩明细: lq_yjmxb (业绩统计表)
  • 关联字段:
    • lq_yjmxb.jksBASE_USER.F_REALNAME (健康师姓名)
    • lq_yjmxb.mdbhlq_mdxx.mdbm (门店编号)
    • lq_yjmxb.xmbhlq_xmzl.xmbh (项目编号)

已弃用表变更记录

⚠️ 重要变更

1. 人员资料表弃用 (2024年)

  • 弃用表: lq_ryzl (人员资料表)
  • 替代方案: 使用系统用户表 BASE_USER
  • 迁移字段:
    • lq_ryzl.dmBASE_USER.F_MDID (门店ID)
    • lq_ryzl.zwBASE_USER.F_ZW (职位)
    • lq_ryzl.gwfl1BASE_USER.F_GWFL (岗位分类)
    • lq_ryzl.xmBASE_USER.F_REALNAME (姓名)
    • lq_ryzl.sjhBASE_USER.F_MobilePhone (手机号)
  • 业务影响: 所有人员相关查询必须使用 BASE_USER

2. 门店归属表弃用 (2024年)

  • 弃用表: lq_mdxx_mdgs (门店归属表)
  • 替代方案: 归属信息整合到 lq_mdxx
  • 迁移字段:
    • syb (事业部)
    • jyb (教育部)
    • kjb (科技部)
    • dxmb (大项目部)
    • gsqssj (归属起始时间)
    • gszzsj (归属终止时间)
    • status (状态)
  • 业务影响: 门店归属信息现在直接在 lq_mdxx 表中管理

3. 门店目标设定表弃用 (2024年)

  • 弃用表: lq_ycsd_mdmbsd (门店目标设定表)
  • 替代方案: 目标信息整合到 lq_mdxx
  • 迁移字段:
    • xsyj (目标-门店生命线)
    • xhyj (目标-消耗业绩)
    • xms (目标-项目数)
    • rt1 (目标-人头1)
    • rt2 (目标-人头2)
    • rc (目标-人次)

重要业务规则

1. 删除标记规则

  • base_organize 表: DeleteMarknull 表示未删除,为 0 或其他值表示已删除
  • 其他表: 通常使用 deletemark 字段,0 表示未删除,1 表示已删除

2. ID生成规则

  • 主键字段: 统一使用 F_Id (varchar类型)

3. 金额字段规则

  • 存储类型: 所有金额字段使用 varchar 类型存储
  • 计算注意: 查询时需要转换为 decimal 类型进行计算
  • 精度要求: 金额计算保留2位小数

4. 时间字段规则

  • 存储类型: 统一使用 datetime 类型
  • 时区处理: 注意时区转换问题
  • 查询格式: 使用 yyyy-MM-dd HH:mm:ss 格式

5. 考勤配置规则

  • 司龄来源: 考勤相关司龄一律使用 BASE_USER.F_ENTRYDATE 计算,不再依赖 lq_ryzl 或其他历史人员表
  • 区间规则: 婚假、丧假、年假、产假、迟到、缺卡、旷工规则统一按“最小值包含、最大值不包含”处理,最大值留空表示无上限
  • 人员归属: 员工上下班班次以主门店 lq_mdxx.F_AttendanceGroupId 为准;可打卡门店范围见 BASE_USER.F_PunchAllowedStoreIds(空则仅主门店)。免考勤人员使用 lq_attendance_exempt_user 独立维护
  • 额外假期: 员工奖励假、旅游假等额外休假额度单独存储在 lq_attendance_extra_leave,按“员工 + 年份 + 假期名称”维度配置,可配置多条

数据字典

门店状态 (lq_mdxx.zxzt)

  • 待补充具体枚举值

岗位分类 (BASE_USER.F_GWFL, F_GW)

  • 待补充具体枚举值

项目资料分类字段 (lq_xmzl)

字段 含义 状态 / 用途
fl1 原分类①汇总·板块 已废弃(阶段一产品不再维护;库列暂留,阶段二可 DROP)
fl2 原分类②汇总·业态 已废弃(同上;业态业务认 qt2,不认 fl2)
fl3 分类③工资用 在用:基础业绩 / 合作业绩;开单耗卡写入业绩类型,算薪依赖
fl4 原分类④统计品项用 已废弃(同上)
qt1 其它1·板块/卡类 在用:储值卡判定固定认 qt1 = 储值
qt2 其它2·业态大类 在用:生美/医美/科美/合作等;开单耗卡 F_ItemCategory 来源

备份参考:ExportFiles/lq_xmzl_backup_fl1234_20260729.csv;DROP 脚本(勿擅自执行):项目文档相关/sql/2026-07-29/lq_xmzl_DROP_fl1_fl2_fl4_阶段二待执行.sql

金三角状态 (lq_jinsanjiao_user.status)

  • ACTIVE: 活跃
  • INACTIVE: 非活跃

预约状态 (lq_yyjl.F_Status)

  • 存储:字符串(中文),存量默认视为「已预约」。
  • 取值已预约服务中已转耗卡已完成已取消(详见后端枚举 LqYyjlStatusEnum / LqYyjlStatusTexts)。

预约计划品项 (lq_yyjl_px)

  • 用途:预约主表 lq_yyjl 的计划品项子表;仅 F_Px 有值的行写入;F_IsEffective=1 有效,0 为软删历史。
  • 主要字段F_IdF_YyjlIdF_PxF_PxmcF_PxjgF_ProjectNumberF_SourceTypeF_BillingItemIdF_JksF_JksxmF_RemarkF_SortNoF_IsEffectiveF_CreateTimeF_LastModifyTime

  • 系统参数BASE_SYSCONFIGCategory=SysConfig):

    • consumeEditableDays:小程序端耗卡可修改/作废/重开单天数,默认 3
    • consumeAllowCrossMonthEdit:小程序端是否允许跨月修改/作废/重开单,1=允许 / 0=不允许,默认 0;关闭时耗卡月份与当前月不同即禁止(即使仍在可修改天数内)。
    • adminConsumeVoidEditableDays:管理后台作废耗卡允许天数,默认 0(0=不限制);按钮权限 btn_cancel
    • adminConsumeDeleteEditableDays:管理后台删除耗卡允许天数,默认 0;按钮权限 btn_remove
    • 已废弃合并项 adminConsumeCancelEditableDays(读取天数时兼容)。

预约计划品项-计划健康师 (lq_yyjl_px_jks)

  • 用途:挂在 lq_yyjl_px 下的计划层多健康师(不参与业绩);转耗卡时由前端带入 lqXhJksyjList 雏形。
  • 约束:同一 F_YyjlPxIdF_Jks 不可重复;跨品项允许同人。
  • 主要字段F_IdF_YyjlIdF_YyjlPxIdF_JksF_JksxmF_SortNoF_IsEffectiveF_CreateTimeF_LastModifyTime
  • 冗余lq_yyjl_px.F_Jks / F_Jksxm 存该行计划健康师首位(与 jksList 首项一致时可由服务端写入)。

沟通记录 (lq_yaoyjl)

  • lxjl:联系记录文字
  • lxjl_voice:联系记录语音附件(与 OssDirectUpload/ConfirmUpload 返回的 url 一致,可为站点根相对路径;小程序播放时需拼 API 域名)。变更脚本:项目文档相关/sql/2026-04-28/lq_yaoyjl_联系记录语音_lxjl_voice.sql

开发注意事项

1. 查询优化

  • 所有列表查询必须支持分页
  • 关键字段建立索引
  • 避免 N+1 查询,使用 JOIN 优化

2. 数据一致性

  • 统计接口与列表接口使用相同的过滤条件
  • 所有数据查询必须添加园区权限过滤
  • DTO字段名称、大小写必须完全一致

3. 业务逻辑

  • 开单记录表是核心业务表,所有业务操作都围绕开单进行
  • 人员信息已迁移到系统用户表,查询时使用 BASE_USER
  • 门店归属信息现在直接在 lq_mdxx 表中管理

4. 字段映射

  • 数据库字段使用拼音首字母命名
  • 实体类字段使用驼峰命名
  • 查询时注意字段名映射关系

5. 权限控制

  • 所有数据查询必须添加园区权限过滤
  • 使用 base_organize.DeleteMark 过滤已删除数据
  • 接口必须校验 JWT Token

OSS 直传与图片审核

lq_upload_record(上传记录 / 异步审核)

  • 用途:前端直传 OSS 后 ConfirmUpload 落库,Hangfire 队列执行 ImageAuditJob 做应用侧绿网审核。
  • 兼容:历史行 F_AccessUrl / F_ThumbnailPublicUrl 为空时,列表仍按 F_ObjectKey + AliyunOSS:CustomDomainLocalFileBaseUrl+/api/File/Image/... 拼带域名 URL。
  • 主要字段
    • F_Id:上传记录主键(可与业务表「仅绑图片记录 ID」方案关联)。
    • F_ObjectKey:OSS 完整对象键。
    • F_FileType:文件类型目录(如 annexpicattendancepic)。
    • F_AuditStatus:0 待审 / 1 通过 / 2 违规 / 3 审核失败。
    • F_AccessUrl:图片原图对外完整 URL(须带域名);ConfirmUpload 时写入 OSS 地址;违规落盘后改为 {LocalFileBaseUrl}/api/Extend/OssDirectUpload/IllegalImage/{F_Id}
    • F_ThumbnailPublicUrl:缩略图对外完整 URL(须带域名),与 OSS 图片样式参数一致;违规落盘后可与 F_AccessUrl 相同。
    • F_IllegalLocalPath:审核不通过时,文件落在 **NCC_App:SystemPath + IllegalImage/** 下的绝对物理路径(不再使用独立 IllegalImages 配置节)。
    • F_AuditRawResponse:内容安全接口原始响应(TEXT,可截断)。

库表升级F_AuditRawResponse项目文档相关/sql/2026-04-13/lq_upload_record_图片审核字段.sqlF_ThumbnailPublicUrl 与字段长度见同目录 lq_upload_record_缩略图URL与字段长度.sql

配置说明NCC_App:ImageModeration:Enabled=true**SyncOnUpload=false(推荐)时,FileService 服务端上传 OSS 不再同步调绿网;直传场景由 ConfirmUpload 后 Hangfire 调用 ImageAuditJob 审核并写回 F_AuditReason / F_AuditRawResponse。若需恢复旧版「上传即审」,将 `SyncOnUpload** 设为true`。

品项分类配置 lq_item_category_config

  • 用途: 品项分类「内部编码 → 可变显示名/颜色」映射;内部编码与 lq_xmzl.qt2 及 11 张明细表 F_ItemCategory 保持一致(中文,零迁移),仅通过本表改显示名。
  • 主要字段:
    • F_Id:主键
    • F_Code:内部编码(如「医美」,唯一、不可变)
    • F_DisplayName:显示名称(初始等于 F_Code
    • F_Color:颜色 hex(列表图标/图表)
    • F_Sort:排序
    • F_Enabled:是否启用(1 启用 / 0 停用)
    • F_CreatorTime / F_CreatorUserId / F_LastModifyTime / F_LastModifyUserId / F_DeleteMark:审计字段(F_DeleteMarknull 表示未删除)
  • 种子数据: 生美、医美、科美、合作、其他、产品(各 6 条,F_DisplayName 初始等于 F_Code
  • 建表脚本: 项目文档相关/sql/2026-07-06/创建品项分类配置表_lq_item_category_config.sql

短信模板 lq_sms_template

  • 用途: 阿里云短信模板管理,按业务场景编码(如 Birthday / Login / Register / VerifyCode)绑定模板 CODE 与签名,可继续扩展新场景。
  • 主要字段:
    • F_Id:主键(YitIdHelper
    • F_Name:模板名称
    • F_TemplateCode:阿里云模板 CODE(如 SMS_503595047
    • F_SignName:签名(默认「绿纤聚财」)
    • F_TemplateType:类型(1 验证码 / 2 推广短信 / 3 通知短信)
    • F_SceneCode:业务场景编码(未删除记录内建议唯一,由服务校验)
    • F_ParamTemplate:参数 JSON 模板(占位符如 {name} / {code}
    • F_Enabled:1 启用 / 0 停用
    • F_Sort / F_Remark:排序、备注
    • F_CreatorTime / F_CreatorUserId / F_LastModifyTime / F_LastModifyUserId / F_DeleteMark:审计(F_DeleteMarknull 表示未删除)
  • 种子数据: 生日提醒 SMS_503595047、用于登录 SMS_489770174、用于注册 SMS_489645186、验证码短信 SMS_321375912
  • 建表脚本: 项目文档相关/sql/2026-07-23/创建短信模板与发送日志表_lq_sms.sql

短信发送日志 lq_sms_send_log

  • 用途: 记录短信发送结果(成功/失败/防重跳过);手机号默认存明文 + 哈希,接口返回时按系统隐私开关决定是否脱敏。
  • 主要字段:
    • F_Id:主键
    • F_SceneCode / F_TemplateId / F_TemplateCode / F_SignName:场景与模板
    • F_MobileMasked:手机号(默认明文;历史版本可能为脱敏值)
    • F_MobileHash:手机号哈希(防重比对)
    • F_MemberId / F_MemberName:会员(生日等业务)
    • F_TemplateParam:实际参数 JSON
    • F_SendContent:发送内容摘要(签名 + 模板名称/CODE + 参数,便于日志查看)
    • F_Status:0 失败 / 1 成功 / 2 跳过
    • F_ProviderResult:厂商返回说明
    • F_BizDate:业务日期(生日防重按日)
    • F_IsTest:是否测试发送
    • F_CreatorTime / F_CreatorUserId:发送时间与操作人
  • 配置: BASE_SYSCONFIGF_CATEGORY=SmsConfigsmskeyid / smskeysecret / smssignname / smscompany / smsendpoint / smspreventduplicate);可回退读取历史 SysConfig 同名键。AccessKey 未在 SmsConfig 单独配置时,发送自动复用 appsettingsNCC_App:AliyunOSS(与 OSS 同源)
  • 隐私开关: BASE_SYSCONFIGF_CATEGORY=SysConfigF_KEY=privacymobilemask(对应前端字段 privacyMobileMask):0 默认明文展示,1 开启后发送日志/短信相关接口脱敏返回
  • 建表脚本: 同上 创建短信模板与发送日志表_lq_sms.sql

培训签到

动态令牌 lq_training_checkin_token

  • 用途: 教室投屏页动态二维码令牌;短生命周期,到期自动轮换。
  • 主要字段:
    • F_Id:主键(YitIdHelper
    • token_hash:令牌 SHA256 哈希(校验用)
    • plain_token:令牌明文(仅供投屏展示,短生命周期)
    • expire_time:过期时间
    • create_time:创建时间
  • 配置: BASE_SYSCONFIG / SysConfigtrainingCheckinQrRotateMinutes(默认 3 分钟,范围 1–60)
  • 建表脚本: 项目文档相关/sql/2026-07-30-培训签到表.sql

签到记录 lq_training_checkin_record

  • 用途: 匿名培训签到/签退记录;管理端列表查询与导出。
  • 主要字段:
    • F_Id:主键
    • real_name:姓名
    • mobile_phone:手机号
    • checkin_type:1 签到 / 2 签退
    • checkin_time:打卡时间
    • submit_ip:提交 IP
    • token_id:关联 lq_training_checkin_token.F_Id(可选审计)
    • create_time:创建时间

视图说明

业绩统计视图

  • v_jsj_monthly_performance: 金三角月度业绩统计
  • v_jsj_monthly_summary: 金三角月度业绩汇总
  • v_personal_monthly_performance: 个人业绩月度统计

开单相关视图

  • v_order_detail_simple: 开单详细记录视图