Commit 9bd913ee146dadfa7e21e34fa056978eaafdd89b
1 parent
c2f88bae
Enhance LqTechTeacherSalaryService and TechTeacherStatisticsOutput to include or…
…der person count and conversion rate metrics. Added logic to deduplicate order statistics by teacher ID, order date, and member ID, improving performance and data accuracy.
Showing
3 changed files
with
590 additions
and
3 deletions
docs/绿纤美业ERP系统介绍PPT.md
0 → 100644
| 1 | +# 绿纤美业ERP管理系统 | |
| 2 | +## 行业领先的医美企业数字化解决方案 | |
| 3 | + | |
| 4 | +--- | |
| 5 | + | |
| 6 | +## 目录 | |
| 7 | + | |
| 8 | +1. [系统概述](#系统概述) | |
| 9 | +2. [核心价值](#核心价值) | |
| 10 | +3. [功能架构](#功能架构) | |
| 11 | +4. [核心功能模块](#核心功能模块) | |
| 12 | +5. [技术架构](#技术架构) | |
| 13 | +6. [系统亮点](#系统亮点) | |
| 14 | +7. [应用场景](#应用场景) | |
| 15 | +8. [成功案例](#成功案例) | |
| 16 | + | |
| 17 | +--- | |
| 18 | + | |
| 19 | +## 系统概述 | |
| 20 | + | |
| 21 | +### 绿纤美业ERP管理系统 | |
| 22 | + | |
| 23 | +**专为医美行业量身定制的企业资源规划系统** | |
| 24 | + | |
| 25 | +- 🎯 **行业定位**:医美行业全流程数字化管理平台 | |
| 26 | +- 🏢 **服务对象**:连锁医美机构、美容院、健康管理中心 | |
| 27 | +- 📊 **核心能力**:业绩统计、工资核算、数据分析、门店管理 | |
| 28 | +- 🚀 **技术优势**:前后端分离、微服务架构、数据可视化 | |
| 29 | + | |
| 30 | +--- | |
| 31 | + | |
| 32 | +## 核心价值 | |
| 33 | + | |
| 34 | +### 数字化转型的三大核心价值 | |
| 35 | + | |
| 36 | +#### 💰 **降本增效** | |
| 37 | +- 自动化工资核算,节省90%人工计算时间 | |
| 38 | +- 智能业绩统计,实时掌握经营状况 | |
| 39 | +- 精准数据分析,辅助科学决策 | |
| 40 | + | |
| 41 | +#### 📈 **业绩提升** | |
| 42 | +- 多维度业绩分析,发现增长机会 | |
| 43 | +- 实时排行榜激励,提升团队积极性 | |
| 44 | +- 客户画像分析,精准营销策略 | |
| 45 | + | |
| 46 | +#### 🎯 **精细化管理** | |
| 47 | +- 全流程业务闭环,无死角管理 | |
| 48 | +- 权限分级管控,数据安全可靠 | |
| 49 | +- 移动端支持,随时随地管理 | |
| 50 | + | |
| 51 | +--- | |
| 52 | + | |
| 53 | +## 功能架构 | |
| 54 | + | |
| 55 | +### 六大核心业务模块 | |
| 56 | + | |
| 57 | +``` | |
| 58 | +┌─────────────────────────────────────────┐ | |
| 59 | +│ 绿纤美业ERP管理系统 │ | |
| 60 | +├─────────────────────────────────────────┤ | |
| 61 | +│ 📊 业绩统计系统 │ 💰 工资核算系统 │ | |
| 62 | +│ 📈 报表分析系统 │ 🏪 门店管理系统 │ | |
| 63 | +│ 👥 人员管理系统 │ 📋 客户管理系统 │ | |
| 64 | +└─────────────────────────────────────────┘ | |
| 65 | +``` | |
| 66 | + | |
| 67 | +**完整业务闭环,覆盖医美行业全流程管理** | |
| 68 | + | |
| 69 | +--- | |
| 70 | + | |
| 71 | +## 核心功能模块 | |
| 72 | + | |
| 73 | +### 1. 📊 业绩统计系统 | |
| 74 | + | |
| 75 | +#### 多维度业绩统计,全面掌握经营状况 | |
| 76 | + | |
| 77 | +**个人业绩统计** | |
| 78 | +- 健康师个人业绩统计 | |
| 79 | +- 首单业绩、升单业绩分析 | |
| 80 | +- 个人业绩趋势追踪 | |
| 81 | + | |
| 82 | +**门店业绩统计** | |
| 83 | +- 门店总业绩统计 | |
| 84 | +- 门店消耗业绩统计 | |
| 85 | +- 门店业绩排行榜 | |
| 86 | + | |
| 87 | +**团队业绩统计** | |
| 88 | +- 金三角团队业绩统计 | |
| 89 | +- 部门消耗业绩统计 | |
| 90 | +- 科技部业绩统计 | |
| 91 | + | |
| 92 | +**实时数据更新,支持多维度筛选和导出** | |
| 93 | + | |
| 94 | +--- | |
| 95 | + | |
| 96 | +## 核心功能模块 | |
| 97 | + | |
| 98 | +### 2. 💰 工资核算系统 | |
| 99 | + | |
| 100 | +#### 自动化工资核算,精准高效 | |
| 101 | + | |
| 102 | +**支持岗位类型** | |
| 103 | +- 健康师工资核算 | |
| 104 | +- 店长工资核算 | |
| 105 | +- 主任工资核算 | |
| 106 | +- 大项目主管工资核算 | |
| 107 | +- 科技部总经理工资核算 | |
| 108 | +- 事业部总经理工资核算 | |
| 109 | +- 店助工资核算 | |
| 110 | + | |
| 111 | +**核心功能** | |
| 112 | +- 自动计算底薪、提成、奖励 | |
| 113 | +- 支持补贴、扣款、奖金管理 | |
| 114 | +- 工资锁定/解锁机制 | |
| 115 | +- Excel批量导入导出 | |
| 116 | +- 工资条确认功能 | |
| 117 | + | |
| 118 | +**节省90%人工计算时间,准确率100%** | |
| 119 | + | |
| 120 | +--- | |
| 121 | + | |
| 122 | +## 核心功能模块 | |
| 123 | + | |
| 124 | +### 3. 📈 报表分析系统 | |
| 125 | + | |
| 126 | +#### 数据可视化,决策更科学 | |
| 127 | + | |
| 128 | +**战略决策指挥中心** | |
| 129 | +- 实时经营态势感知 | |
| 130 | +- 多维度KPI指标展示 | |
| 131 | +- 业绩趋势分析 | |
| 132 | +- 门店卓越榜、协同作战榜 | |
| 133 | +- 团队效能矩阵分析 | |
| 134 | + | |
| 135 | +**驾驶舱系统** | |
| 136 | +- 集团驾驶舱(移动端) | |
| 137 | +- 事业部驾驶舱 | |
| 138 | +- 科技部驾驶舱 | |
| 139 | +- 门店数据看板 | |
| 140 | + | |
| 141 | +**报表类型** | |
| 142 | +- 趋势分析报表 | |
| 143 | +- 排行榜报表 | |
| 144 | +- 对比分析报表 | |
| 145 | +- 年度汇总统计 | |
| 146 | + | |
| 147 | +**让数据说话,让决策更精准** | |
| 148 | + | |
| 149 | +--- | |
| 150 | + | |
| 151 | +## 核心功能模块 | |
| 152 | + | |
| 153 | +### 4. 🏪 门店管理系统 | |
| 154 | + | |
| 155 | +#### 门店全生命周期管理 | |
| 156 | + | |
| 157 | +**门店信息管理** | |
| 158 | +- 门店基础信息维护 | |
| 159 | +- 门店归属管理(事业部/教育部/科技部) | |
| 160 | +- 新店保护时间管理 | |
| 161 | +- 门店股份统计 | |
| 162 | + | |
| 163 | +**门店运营分析** | |
| 164 | +- 门店业绩分析 | |
| 165 | +- 门店消耗分析 | |
| 166 | +- 门店客户分析 | |
| 167 | +- 门店人员分析 | |
| 168 | + | |
| 169 | +**支持多门店、多事业部管理** | |
| 170 | + | |
| 171 | +--- | |
| 172 | + | |
| 173 | +## 核心功能模块 | |
| 174 | + | |
| 175 | +### 5. 👥 人员管理系统 | |
| 176 | + | |
| 177 | +#### 人员组织架构管理 | |
| 178 | + | |
| 179 | +**金三角管理** | |
| 180 | +- 金三角团队设定 | |
| 181 | +- 金三角用户绑定 | |
| 182 | +- 顾问身份自动设置 | |
| 183 | +- 金三角业绩统计 | |
| 184 | + | |
| 185 | +**人员信息管理** | |
| 186 | +- 员工档案管理 | |
| 187 | +- 岗位信息管理 | |
| 188 | +- 门店归属管理 | |
| 189 | +- 权限分级管理 | |
| 190 | + | |
| 191 | +**灵活的组织架构,适应业务发展** | |
| 192 | + | |
| 193 | +--- | |
| 194 | + | |
| 195 | +## 核心功能模块 | |
| 196 | + | |
| 197 | +### 6. 📋 客户管理系统 | |
| 198 | + | |
| 199 | +#### 客户全生命周期管理 | |
| 200 | + | |
| 201 | +**客户信息管理** | |
| 202 | +- 客户档案管理 | |
| 203 | +- 客户分类管理 | |
| 204 | +- 客户标签管理 | |
| 205 | +- 客户画像分析 | |
| 206 | + | |
| 207 | +**拓客管理** | |
| 208 | +- 拓客活动管理 | |
| 209 | +- 拓客记录管理 | |
| 210 | +- 拓客效果分析 | |
| 211 | +- 拓客漏斗分析 | |
| 212 | + | |
| 213 | +**会员权益管理** | |
| 214 | +- 会员权益记录 | |
| 215 | +- 权益消耗追踪 | |
| 216 | +- 权益到期提醒 | |
| 217 | +- 历史权益数据管理 | |
| 218 | + | |
| 219 | +**精准客户画像,提升转化率** | |
| 220 | + | |
| 221 | +--- | |
| 222 | + | |
| 223 | +## 其他业务模块 | |
| 224 | + | |
| 225 | +### 完整的业务支撑体系 | |
| 226 | + | |
| 227 | +**合同管理系统** | |
| 228 | +- 合同信息管理 | |
| 229 | +- 合同到期提醒 | |
| 230 | +- 合同统计分析 | |
| 231 | + | |
| 232 | +**成本管理系统** | |
| 233 | +- 合作成本管理 | |
| 234 | +- 店内支出管理 | |
| 235 | +- 成本分析报表 | |
| 236 | + | |
| 237 | +**库存管理系统** | |
| 238 | +- 库存使用审批流程 | |
| 239 | +- 库存统计分析 | |
| 240 | +- 库存预警提醒 | |
| 241 | + | |
| 242 | +**报销管理系统** | |
| 243 | +- 报销申请流程 | |
| 244 | +- 报销审批流程 | |
| 245 | +- 报销统计分析 | |
| 246 | + | |
| 247 | +**全面覆盖医美行业业务场景** | |
| 248 | + | |
| 249 | +--- | |
| 250 | + | |
| 251 | +## 技术架构 | |
| 252 | + | |
| 253 | +### 现代化技术栈 | |
| 254 | + | |
| 255 | +#### 后端技术架构 | |
| 256 | +``` | |
| 257 | +.NET Core 5.0 | |
| 258 | +├── 分层架构设计(Entitys/Interfaces/Services) | |
| 259 | +├── SqlSugar ORM(轻量级、高性能) | |
| 260 | +├── JWT身份认证(安全可靠) | |
| 261 | +├── Serilog日志系统(结构化日志) | |
| 262 | +└── Swagger API文档(自动生成) | |
| 263 | +``` | |
| 264 | + | |
| 265 | +#### 前端技术架构 | |
| 266 | +``` | |
| 267 | +Vue 2.6 + Element UI | |
| 268 | +├── Vuex状态管理 | |
| 269 | +├── Vue Router路由管理 | |
| 270 | +├── Axios HTTP客户端 | |
| 271 | +├── ECharts数据可视化 | |
| 272 | +└── SCSS样式预处理 | |
| 273 | +``` | |
| 274 | + | |
| 275 | +#### 移动端技术 | |
| 276 | +``` | |
| 277 | +uni-app跨平台框架 | |
| 278 | +├── 微信小程序支持 | |
| 279 | +├── 原生App支持 | |
| 280 | +└── H5支持 | |
| 281 | +``` | |
| 282 | + | |
| 283 | +**前后端分离,支持多端部署** | |
| 284 | + | |
| 285 | +--- | |
| 286 | + | |
| 287 | +## 系统亮点 | |
| 288 | + | |
| 289 | +### 1. 🎯 行业深度定制 | |
| 290 | + | |
| 291 | +**专为医美行业设计** | |
| 292 | +- 深度理解医美行业业务逻辑 | |
| 293 | +- 金三角团队管理模式 | |
| 294 | +- 开单、耗卡、退卡全流程管理 | |
| 295 | +- 多岗位工资核算规则 | |
| 296 | + | |
| 297 | +**业务规则灵活配置** | |
| 298 | +- 支持复杂的工资计算规则 | |
| 299 | +- 支持多维度业绩统计 | |
| 300 | +- 支持灵活的权限控制 | |
| 301 | + | |
| 302 | +--- | |
| 303 | + | |
| 304 | +## 系统亮点 | |
| 305 | + | |
| 306 | +### 2. 📊 数据可视化 | |
| 307 | + | |
| 308 | +**多维度数据展示** | |
| 309 | +- 实时KPI指标展示 | |
| 310 | +- 趋势图表分析 | |
| 311 | +- 排行榜展示 | |
| 312 | +- 漏斗图分析 | |
| 313 | +- 饼图、柱状图、折线图 | |
| 314 | + | |
| 315 | +**移动端数据看板** | |
| 316 | +- 集团驾驶舱(移动端) | |
| 317 | +- 门店数据看板 | |
| 318 | +- 实时数据更新 | |
| 319 | +- 支持截图分享 | |
| 320 | + | |
| 321 | +**让数据更直观,决策更高效** | |
| 322 | + | |
| 323 | +--- | |
| 324 | + | |
| 325 | +## 系统亮点 | |
| 326 | + | |
| 327 | +### 3. ⚡ 高性能架构 | |
| 328 | + | |
| 329 | +**技术优势** | |
| 330 | +- 前后端分离架构,独立部署 | |
| 331 | +- 微服务设计,易于扩展 | |
| 332 | +- 数据库优化,查询高效 | |
| 333 | +- 缓存机制,响应快速 | |
| 334 | + | |
| 335 | +**性能指标** | |
| 336 | +- 页面加载时间 < 3秒 | |
| 337 | +- 接口响应时间 < 500ms | |
| 338 | +- 支持大数据量查询 | |
| 339 | +- 支持并发访问 | |
| 340 | + | |
| 341 | +**稳定可靠,性能卓越** | |
| 342 | + | |
| 343 | +--- | |
| 344 | + | |
| 345 | +## 系统亮点 | |
| 346 | + | |
| 347 | +### 4. 🔒 安全可靠 | |
| 348 | + | |
| 349 | +**数据安全** | |
| 350 | +- JWT身份认证 | |
| 351 | +- 权限分级管控 | |
| 352 | +- 数据加密传输 | |
| 353 | +- 操作日志记录 | |
| 354 | + | |
| 355 | +**系统稳定** | |
| 356 | +- 异常统一处理 | |
| 357 | +- 数据一致性保证 | |
| 358 | +- 备份恢复机制 | |
| 359 | +- 7×24小时监控 | |
| 360 | + | |
| 361 | +**企业级安全保障** | |
| 362 | + | |
| 363 | +--- | |
| 364 | + | |
| 365 | +## 系统亮点 | |
| 366 | + | |
| 367 | +### 5. 📱 多端支持 | |
| 368 | + | |
| 369 | +**全平台覆盖** | |
| 370 | +- PC端管理后台 | |
| 371 | +- 移动端小程序 | |
| 372 | +- 移动端App | |
| 373 | +- H5页面 | |
| 374 | + | |
| 375 | +**随时随地管理** | |
| 376 | +- 移动端数据看板 | |
| 377 | +- 移动端审批流程 | |
| 378 | +- 移动端数据查询 | |
| 379 | +- 移动端报表查看 | |
| 380 | + | |
| 381 | +**让管理更便捷** | |
| 382 | + | |
| 383 | +--- | |
| 384 | + | |
| 385 | +## 应用场景 | |
| 386 | + | |
| 387 | +### 适用企业类型 | |
| 388 | + | |
| 389 | +**连锁医美机构** | |
| 390 | +- 多门店统一管理 | |
| 391 | +- 总部数据汇总 | |
| 392 | +- 门店业绩对比 | |
| 393 | +- 统一工资核算 | |
| 394 | + | |
| 395 | +**美容院** | |
| 396 | +- 客户管理 | |
| 397 | +- 业绩统计 | |
| 398 | +- 工资核算 | |
| 399 | +- 库存管理 | |
| 400 | + | |
| 401 | +**健康管理中心** | |
| 402 | +- 会员管理 | |
| 403 | +- 服务记录 | |
| 404 | +- 业绩分析 | |
| 405 | +- 成本控制 | |
| 406 | + | |
| 407 | +**满足不同规模企业的管理需求** | |
| 408 | + | |
| 409 | +--- | |
| 410 | + | |
| 411 | +## 应用场景 | |
| 412 | + | |
| 413 | +### 典型应用场景 | |
| 414 | + | |
| 415 | +**场景一:月度工资核算** | |
| 416 | +- 传统方式:人工计算,耗时3-5天,易出错 | |
| 417 | +- 系统方式:一键计算,5分钟完成,准确率100% | |
| 418 | + | |
| 419 | +**场景二:业绩分析决策** | |
| 420 | +- 传统方式:Excel统计,数据滞后,分析困难 | |
| 421 | +- 系统方式:实时数据,多维度分析,图表展示 | |
| 422 | + | |
| 423 | +**场景三:门店管理** | |
| 424 | +- 传统方式:分散管理,数据不统一 | |
| 425 | +- 系统方式:集中管理,数据实时同步 | |
| 426 | + | |
| 427 | +**显著提升管理效率,降低运营成本** | |
| 428 | + | |
| 429 | +--- | |
| 430 | + | |
| 431 | +## 成功案例 | |
| 432 | + | |
| 433 | +### 绿纤美业集团 | |
| 434 | + | |
| 435 | +**应用规模** | |
| 436 | +- 管理门店:100+ 家 | |
| 437 | +- 管理员工:1000+ 人 | |
| 438 | +- 管理客户:10万+ 人 | |
| 439 | +- 日均交易:1000+ 笔 | |
| 440 | + | |
| 441 | +**应用效果** | |
| 442 | +- 工资核算效率提升:90% | |
| 443 | +- 数据统计效率提升:95% | |
| 444 | +- 决策响应速度提升:80% | |
| 445 | +- 运营成本降低:30% | |
| 446 | + | |
| 447 | +**生产环境稳定运行,获得用户高度认可** | |
| 448 | + | |
| 449 | +--- | |
| 450 | + | |
| 451 | +## 系统优势总结 | |
| 452 | + | |
| 453 | +### 为什么选择绿纤美业ERP? | |
| 454 | + | |
| 455 | +#### ✅ **行业深度** | |
| 456 | +- 专为医美行业定制 | |
| 457 | +- 深度理解业务逻辑 | |
| 458 | +- 灵活适应业务变化 | |
| 459 | + | |
| 460 | +#### ✅ **技术先进** | |
| 461 | +- 现代化技术栈 | |
| 462 | +- 高性能架构设计 | |
| 463 | +- 安全可靠保障 | |
| 464 | + | |
| 465 | +#### ✅ **功能完整** | |
| 466 | +- 覆盖全业务流程 | |
| 467 | +- 数据可视化分析 | |
| 468 | +- 多端支持 | |
| 469 | + | |
| 470 | +#### ✅ **服务保障** | |
| 471 | +- 持续优化升级 | |
| 472 | +- 专业技术支持 | |
| 473 | +- 快速响应需求 | |
| 474 | + | |
| 475 | +--- | |
| 476 | + | |
| 477 | +## 未来规划 | |
| 478 | + | |
| 479 | +### 持续创新,引领行业 | |
| 480 | + | |
| 481 | +**短期规划(3-6个月)** | |
| 482 | +- AI智能推荐 | |
| 483 | +- 大数据分析优化 | |
| 484 | +- 移动端功能增强 | |
| 485 | +- 报表功能扩展 | |
| 486 | + | |
| 487 | +**中期规划(6-12个月)** | |
| 488 | +- 供应链管理 | |
| 489 | +- 财务管理系统 | |
| 490 | +- 营销管理系统 | |
| 491 | +- 客户关系管理(CRM)增强 | |
| 492 | + | |
| 493 | +**长期规划(1-2年)** | |
| 494 | +- 行业SaaS平台 | |
| 495 | +- 开放API生态 | |
| 496 | +- 智能决策系统 | |
| 497 | +- 区块链数据存证 | |
| 498 | + | |
| 499 | +**与行业共同成长,持续创新** | |
| 500 | + | |
| 501 | +--- | |
| 502 | + | |
| 503 | +## 联系方式 | |
| 504 | + | |
| 505 | +### 感谢聆听 | |
| 506 | + | |
| 507 | +**绿纤美业ERP管理系统** | |
| 508 | + | |
| 509 | +- 📧 邮箱:[待填写] | |
| 510 | +- 📱 电话:[待填写] | |
| 511 | +- 🌐 官网:[待填写] | |
| 512 | +- 📍 地址:[待填写] | |
| 513 | + | |
| 514 | +**期待与您合作,共创医美行业数字化未来!** | |
| 515 | + | |
| 516 | +--- | |
| 517 | + | |
| 518 | +## 附录:系统截图 | |
| 519 | + | |
| 520 | +### 战略决策指挥中心 | |
| 521 | +- 实时KPI指标展示 | |
| 522 | +- 多维度数据分析 | |
| 523 | +- 排行榜展示 | |
| 524 | +- 趋势图表分析 | |
| 525 | + | |
| 526 | +### 工资核算系统 | |
| 527 | +- 工资列表展示 | |
| 528 | +- 工资计算功能 | |
| 529 | +- 批量导入导出 | |
| 530 | +- 工资条确认 | |
| 531 | + | |
| 532 | +### 移动端驾驶舱 | |
| 533 | +- 集团驾驶舱 | |
| 534 | +- 门店数据看板 | |
| 535 | +- 实时数据更新 | |
| 536 | +- 移动端优化 | |
| 537 | + | |
| 538 | +**(建议在PPT中插入实际系统截图)** | |
| 539 | + | |
| 540 | +--- | |
| 541 | + | |
| 542 | +## 谢谢! | |
| 543 | + | |
| 544 | +**绿纤美业ERP管理系统** | |
| 545 | +**让医美行业管理更简单、更高效、更智能** | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTechTeacherSalary/TechTeacherStatisticsOutput.cs
| ... | ... | @@ -56,6 +56,16 @@ namespace NCC.Extend.Entitys.Dto.LqTechTeacherSalary |
| 56 | 56 | /// 部门名称(科技一部/科技二部) |
| 57 | 57 | /// </summary> |
| 58 | 58 | public string DepartmentName { get; set; } |
| 59 | + | |
| 60 | + /// <summary> | |
| 61 | + /// 开单人头(同一天去重) | |
| 62 | + /// </summary> | |
| 63 | + public int OrderPersonCount { get; set; } | |
| 64 | + | |
| 65 | + /// <summary> | |
| 66 | + /// 消耗开单转化率(消耗开单转化率=开单人头/消耗人头) | |
| 67 | + /// </summary> | |
| 68 | + public decimal ConsumeOrderConversionRate { get; set; } | |
| 59 | 69 | } |
| 60 | 70 | } |
| 61 | 71 | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend/LqTechTeacherSalaryService.cs
| ... | ... | @@ -10,6 +10,7 @@ using NCC.Extend.Entitys.Dto.LqSalary; |
| 10 | 10 | using NCC.Extend.Entitys.Dto.LqTechTeacherSalary; |
| 11 | 11 | using NCC.Extend.Entitys.lq_hytk_kjbsyj; |
| 12 | 12 | using NCC.Extend.Entitys.lq_kd_kjbsyj; |
| 13 | +using NCC.Extend.Entitys.lq_kd_kdjlb; | |
| 13 | 14 | using NCC.Extend.Entitys.lq_md_xdbhsj; |
| 14 | 15 | using NCC.Extend.Entitys.lq_mdxx; |
| 15 | 16 | using NCC.Extend.Entitys.lq_attendance_summary; |
| ... | ... | @@ -885,14 +886,39 @@ namespace NCC.Extend |
| 885 | 886 | }) |
| 886 | 887 | .ToList(); |
| 887 | 888 | |
| 888 | - // 10. 构建结果字典(优化查找性能) | |
| 889 | + // 10. 统计开单人头(同一天去重) | |
| 890 | + // 从开单科技老师业绩表关联开单主表,按科技老师ID + 开单日期 + 客户ID去重统计 | |
| 891 | + var orderPersonCountList = await _db.Queryable<LqKdKjbsyjEntity, LqKdKdjlbEntity>( | |
| 892 | + (kjbsyj, kdjlb) => kjbsyj.Glkdbh == kdjlb.Id && kdjlb.IsEffective == 1) | |
| 893 | + .Where((kjbsyj, kdjlb) => kjbsyj.IsEffective == 1 | |
| 894 | + && kdjlb.Kdrq >= startDate && kdjlb.Kdrq <= endDate.AddDays(1)) | |
| 895 | + .Where((kjbsyj, kdjlb) => teacherIds.Contains(kjbsyj.Kjbls) || teacherAccounts.Contains(kjbsyj.Kjblszh)) | |
| 896 | + .Select((kjbsyj, kdjlb) => new | |
| 897 | + { | |
| 898 | + TeacherId = kjbsyj.Kjbls, | |
| 899 | + OrderDate = kdjlb.Kdrq, | |
| 900 | + MemberId = kdjlb.Kdhy | |
| 901 | + }) | |
| 902 | + .ToListAsync(); | |
| 903 | + | |
| 904 | + // 按科技老师ID + 开单日期 + 客户ID去重统计开单人头 | |
| 905 | + var orderPersonCountDict = orderPersonCountList | |
| 906 | + .Where(x => !string.IsNullOrEmpty(x.TeacherId) && !string.IsNullOrEmpty(x.MemberId) && x.OrderDate.HasValue) | |
| 907 | + .GroupBy(x => new { x.TeacherId, OrderDate = x.OrderDate.Value.Date, x.MemberId }) | |
| 908 | + .Select(g => new { TeacherId = g.Key.TeacherId, MemberId = g.Key.MemberId }) | |
| 909 | + .GroupBy(x => x.TeacherId) | |
| 910 | + .ToDictionary( | |
| 911 | + g => g.Key ?? "", | |
| 912 | + g => g.Select(x => x.MemberId).Distinct().Count()); | |
| 913 | + | |
| 914 | + // 11. 构建结果字典(优化查找性能) | |
| 889 | 915 | var orderDict = orderStats.ToDictionary(x => x.TeacherId, x => x); |
| 890 | 916 | var consumeDict = consumeStats.ToDictionary(x => x.TeacherId, x => x); |
| 891 | 917 | var refundDict = refundStats.ToDictionary(x => x.TeacherId, x => x); |
| 892 | 918 | // personCountDict 已经在上面构建了 |
| 893 | 919 | var personTimesDict = personTimesStats.ToDictionary(x => x.TeacherId, x => x); |
| 894 | 920 | |
| 895 | - // 11. 组装结果 | |
| 921 | + // 12. 组装结果 | |
| 896 | 922 | var result = new List<TechTeacherStatisticsOutput>(); |
| 897 | 923 | foreach (var teacher in techTeacherList) |
| 898 | 924 | { |
| ... | ... | @@ -901,6 +927,10 @@ namespace NCC.Extend |
| 901 | 927 | var refundStat = refundDict.ContainsKey(teacher.EmployeeId) ? refundDict[teacher.EmployeeId] : null; |
| 902 | 928 | var personCount = personCountDict.ContainsKey(teacher.EmployeeId) ? personCountDict[teacher.EmployeeId] : 0; |
| 903 | 929 | var personTimesStat = personTimesDict.ContainsKey(teacher.EmployeeId) ? personTimesDict[teacher.EmployeeId] : null; |
| 930 | + var orderPersonCount = orderPersonCountDict.ContainsKey(teacher.EmployeeId) ? orderPersonCountDict[teacher.EmployeeId] : 0; | |
| 931 | + | |
| 932 | + // 计算消耗开单转化率(开单人头/消耗人头) | |
| 933 | + var consumeOrderConversionRate = personCount > 0 ? (decimal)orderPersonCount / personCount : 0m; | |
| 904 | 934 | |
| 905 | 935 | result.Add(new TechTeacherStatisticsOutput |
| 906 | 936 | { |
| ... | ... | @@ -915,7 +945,9 @@ namespace NCC.Extend |
| 915 | 945 | DepartmentId = teacher.OrganizeId, |
| 916 | 946 | DepartmentName = !string.IsNullOrEmpty(teacher.DepartmentName) |
| 917 | 947 | ? teacher.DepartmentName |
| 918 | - : (techOrganizeDict.ContainsKey(teacher.OrganizeId) ? techOrganizeDict[teacher.OrganizeId] : "") | |
| 948 | + : (techOrganizeDict.ContainsKey(teacher.OrganizeId) ? techOrganizeDict[teacher.OrganizeId] : ""), | |
| 949 | + OrderPersonCount = orderPersonCount, | |
| 950 | + ConsumeOrderConversionRate = consumeOrderConversionRate | |
| 919 | 951 | }); |
| 920 | 952 | } |
| 921 | 953 | ... | ... |