科技部驾驶舱GetStatistics接口新增字段可行性分析.md
6.95 KB
科技部驾驶舱 GetStatistics 接口新增字段可行性分析
需求概述
在 api/Extend/LqTechDepartmentDashboard/GetStatistics 接口中增加返回以下字段:
- 开单 - 科美开单金额
- 储扣 - 科美开单的储扣金额
- 退款 - 科美退卡金额
- 消耗 - 科技部老师消耗业绩
- 手工费 - 科技部老师手工费
字段可行性分析
1. 开单(科美开单金额)✅ 可以实现
数据来源:
- 表:
lq_kd_kdjlb(开单记录表) - 字段:
sfyj(实付业绩)
筛选条件:
- 需要筛选科美开单,有两种方式:
- 方式1(推荐):通过关联
lq_kd_kjbsyj(开单科技部老师业绩表),筛选ItemCategory = '科美' - 方式2:通过关联
lq_kd_jksyj(开单金三角业绩表),筛选科美类型
- 方式1(推荐):通过关联
SQL 示例:
SELECT COALESCE(SUM(billing.sfyj), 0) as BillingAmount
FROM lq_kd_kdjlb billing
INNER JOIN lq_kd_kjbsyj kjbsyj ON billing.F_Id = kjbsyj.glkdbh
WHERE billing.F_IsEffective = 1
AND kjbsyj.F_IsEffective = 1
AND kjbsyj.ItemCategory = '科美'
AND billing.djmd IN ('门店ID列表')
AND billing.kdrq >= '开始时间'
AND billing.kdrq <= '结束时间'
参考实现:
- 当前接口已统计溯源和Cell的开单金额,但没有统计总的科美开单金额
- 可以参考
LqStoreDashboardService.GetStatistics中开单业绩的统计方式
2. 储扣(科美开单的储扣金额)✅ 可以实现
数据来源:
- 表:
lq_kd_deductinfo(开单扣减信息表) - 字段:
F_Amount(扣减金额)
筛选条件:
- 关联
lq_kd_kdjlb获取开单信息 - 关联
lq_xmzl(项目资料表)筛选qt2 = '科美' - 筛选条件:
F_IsEffective = 1,门店在指定范围内,时间范围
SQL 示例:
SELECT COALESCE(SUM(deduct.F_Amount), 0) as DeductAmount
FROM lq_kd_deductinfo deduct
INNER JOIN lq_kd_kdjlb billing ON deduct.F_BillingId = billing.F_Id
LEFT JOIN lq_xmzl item ON deduct.F_ItemId = item.F_Id AND item.F_IsEffective = 1
WHERE deduct.F_IsEffective = 1
AND billing.F_IsEffective = 1
AND COALESCE(item.qt2, '其他') = '科美'
AND billing.djmd IN ('门店ID列表')
AND COALESCE(deduct.F_BillingTime, billing.kdrq) >= '开始时间'
AND COALESCE(deduct.F_BillingTime, billing.kdrq) <= '结束时间'
参考实现:
- 可以参考
LqStoreDashboardService.GetStatistics中储扣统计的实现(第244-267行) - 该实现已经包含了按品项分类统计储扣金额的逻辑
3. 退款(科美退卡金额)✅ 可以实现
数据来源:
- 表:
lq_hytk_hytk(退卡记录表) - 字段:
ActualRefundAmount(实际退卡金额)或tkje(退卡金额)
筛选条件:
- 需要筛选科美退卡,通过关联
lq_hytk_kjbsyj(退卡科技部老师业绩表),筛选ItemCategory = '科美' - 或者通过关联
lq_hytk_jksyj(退卡金三角业绩表),筛选科美类型
SQL 示例:
SELECT COALESCE(SUM(COALESCE(refund.ActualRefundAmount, refund.tkje, 0)), 0) as RefundAmount
FROM lq_hytk_hytk refund
INNER JOIN lq_hytk_kjbsyj kjbsyj ON refund.F_Id = kjbsyj.gltkbh
WHERE refund.F_IsEffective = 1
AND kjbsyj.F_IsEffective = 1
AND kjbsyj.ItemCategory = '科美'
AND refund.md IN ('门店ID列表')
AND refund.tksj >= '开始时间'
AND refund.tksj <= '结束时间'
参考实现:
- 当前接口已统计溯源和Cell的退卡金额,但没有统计总的科美退卡金额
- 可以参考
LqShareStatisticsTechDeptService中科美退卡的统计方式(第500-521行)
4. 消耗(科技部老师消耗业绩)✅ 可以实现
数据来源:
- 表:
lq_xh_kjbsyj(耗卡科技部老师业绩表) - 字段:
kjblsyj(科技部老师业绩)
筛选条件:
ItemCategory = '科美'F_IsEffective = 1- 门店在指定范围内
- 时间范围:
yjsj >= 开始时间 AND yjsj <= 结束时间
SQL 示例:
SELECT COALESCE(SUM(kjbsyj.kjblsyj), 0) as ConsumeAmount
FROM lq_xh_kjbsyj kjbsyj
WHERE kjbsyj.F_IsEffective = 1
AND kjbsyj.ItemCategory = '科美'
AND kjbsyj.F_StoreId IN ('门店ID列表')
AND kjbsyj.yjsj >= '开始时间'
AND kjbsyj.yjsj <= '结束时间'
参考实现:
- 可以参考
LqShareStatisticsTechDeptService中消耗业绩的统计方式 - 注意:
lq_xh_kjbsyj表有F_StoreId字段,可以直接筛选门店
5. 手工费(科技部老师手工费)✅ 可以实现
数据来源:
- 表:
lq_xh_kjbsyj(耗卡科技部老师业绩表) - 字段:
F_LaborCost(手工费)
筛选条件:
ItemCategory = '科美'F_IsEffective = 1- 门店在指定范围内
- 时间范围:
yjsj >= 开始时间 AND yjsj <= 结束时间
SQL 示例:
SELECT COALESCE(SUM(kjbsyj.F_LaborCost), 0) as HandworkFee
FROM lq_xh_kjbsyj kjbsyj
WHERE kjbsyj.F_IsEffective = 1
AND kjbsyj.ItemCategory = '科美'
AND kjbsyj.F_StoreId IN ('门店ID列表')
AND kjbsyj.yjsj >= '开始时间'
AND kjbsyj.yjsj <= '结束时间'
参考实现:
- 可以参考
LqShareStatisticsTechDeptService中手工费的统计方式(第316-322行) - 该实现已经包含了科技部手工费的统计逻辑
总结
✅ 所有字段都可以实现
| 字段 | 数据来源表 | 关键字段 | 筛选条件 | 参考实现 |
|---|---|---|---|---|
| 开单 | lq_kd_kdjlb + lq_kd_kjbsyj |
sfyj |
ItemCategory = '科美' |
LqStoreDashboardService |
| 储扣 | lq_kd_deductinfo + lq_kd_kdjlb + lq_xmzl |
F_Amount |
qt2 = '科美' |
LqStoreDashboardService |
| 退款 | lq_hytk_hytk + lq_hytk_kjbsyj |
ActualRefundAmount / tkje |
ItemCategory = '科美' |
LqShareStatisticsTechDeptService |
| 消耗 | lq_xh_kjbsyj |
kjblsyj |
ItemCategory = '科美' |
LqShareStatisticsTechDeptService |
| 手工费 | lq_xh_kjbsyj |
F_LaborCost |
ItemCategory = '科美' |
LqShareStatisticsTechDeptService |
注意事项
- 时间范围:所有统计都使用
startDate到endDateTime的时间范围 - 门店筛选:通过
storeIds列表筛选,这些门店已经通过lq_md_target表确定了科技部归属 - 有效性筛选:所有查询都需要加上
F_IsEffective = 1的条件 - 科美类型判断:
- 开单和退卡:通过关联的业绩表(
lq_kd_kjbsyj、lq_hytk_kjbsyj)的ItemCategory字段判断 - 储扣:通过关联的
lq_xmzl表的qt2字段判断 - 消耗和手工费:直接使用
lq_xh_kjbsyj表的ItemCategory字段判断
- 开单和退卡:通过关联的业绩表(
建议实现顺序
- 先实现消耗和手工费(最简单,直接查询
lq_xh_kjbsyj表) - 再实现开单(需要关联
lq_kd_kjbsyj表) - 然后实现退款(需要关联
lq_hytk_kjbsyj表) - 最后实现储扣(需要关联多个表,逻辑相对复杂)