Commit 47d33dcab5b64c9160d9f3d96e7d70d2e4c79cce
1 parent
111b5df6
国庆快乐~
Showing
21 changed files
with
214 additions
and
1656 deletions
README.md
| ... | ... | @@ -2,7 +2,16 @@ |
| 2 | 2 | |
| 3 | 3 | ## 项目简介 |
| 4 | 4 | |
| 5 | -绿纤ERP管理系统是一个基于现代化技术栈开发的企业资源规划系统,专为绿纤行业量身定制。系统采用前后端分离架构,提供完整的生产、销售、库存、财务等业务管理功能。 | |
| 5 | +绿纤ERP管理系统是一个基于现代化技术栈开发的企业资源规划系统,专为绿纤行业量身定制。系统采用前后端分离架构,提供完整的门店管理、业绩统计、工资核算、报表分析等业务管理功能。 | |
| 6 | + | |
| 7 | +## 🎯 核心功能亮点 | |
| 8 | + | |
| 9 | +- **📊 业绩统计系统** - 门店业绩、个人业绩、金三角业绩等多维度统计 | |
| 10 | +- **💰 工资核算系统** - 健康师底薪、提成、奖励等自动计算 | |
| 11 | +- **📈 报表分析系统** - 可视化图表、趋势分析、排行榜展示 | |
| 12 | +- **🏪 门店管理系统** - 门店信息、归属管理、新店保护 | |
| 13 | +- **👥 人员管理系统** - 健康师管理、金三角团队管理 | |
| 14 | +- **📋 客户管理系统** - 客户信息、会员权益、拓客记录 | |
| 6 | 15 | |
| 7 | 16 | ## 技术栈 |
| 8 | 17 | |
| ... | ... | @@ -21,6 +30,7 @@ |
| 21 | 30 | - **Vue Router** - 路由管理 |
| 22 | 31 | - **Axios** - HTTP客户端 |
| 23 | 32 | - **SCSS** - CSS预处理器 |
| 33 | +- **ECharts** - 数据可视化图表库 | |
| 24 | 34 | |
| 25 | 35 | ## 项目结构 |
| 26 | 36 | |
| ... | ... | @@ -46,9 +56,13 @@ lvqianmeiye_ERP/ |
| 46 | 56 | │ │ ├── api/ # API接口 |
| 47 | 57 | │ │ ├── components/ # 公共组件 |
| 48 | 58 | │ │ ├── views/ # 页面视图 |
| 49 | -│ │ │ ├── lqBmzb/ # 部门管理页面 | |
| 50 | -│ │ │ ├── lqCpxx/ # 产品信息页面 | |
| 51 | -│ │ │ ├── lqHygl/ # 会员管理页面 | |
| 59 | +│ │ │ ├── salaryStatistics/ # 工资统计页面 | |
| 60 | +│ │ │ ├── personalPerformanceStatistics/ # 个人业绩统计 | |
| 61 | +│ │ │ ├── storeTotalPerformanceStatistics/ # 门店总业绩统计 | |
| 62 | +│ │ │ ├── departmentConsumePerformanceStatistics/ # 部门消耗业绩统计 | |
| 63 | +│ │ │ ├── techPerformanceStatistics/ # 科技部业绩统计 | |
| 64 | +│ │ │ ├── storeConsumePerformanceStatistics/ # 门店消耗业绩统计 | |
| 65 | +│ │ │ ├── report/ # 报表分析页面 | |
| 52 | 66 | │ │ │ └── ... # 其他业务页面 |
| 53 | 67 | │ │ ├── router/ # 路由配置 |
| 54 | 68 | │ │ └── store/ # 状态管理 |
| ... | ... | @@ -64,33 +78,25 @@ lvqianmeiye_ERP/ |
| 64 | 78 | ### NCC.Extend(业务服务层) |
| 65 | 79 | 包含所有业务服务的具体实现,按功能分类: |
| 66 | 80 | |
| 67 | -#### 📋 基础管理类 | |
| 68 | -- `LqCpxxService` - 产品信息管理服务 | |
| 81 | +#### 📊 业绩统计类 | |
| 82 | +- `LqStatisticsService` - 核心统计服务(个人业绩、门店业绩、金三角业绩等) | |
| 83 | +- `LqReportService` - 报表分析服务(趋势图、排行榜、仪表盘) | |
| 84 | + | |
| 85 | +#### 💰 工资核算类 | |
| 86 | +- `LqGzService` - 工资核算服务(健康师底薪、提成计算) | |
| 87 | + | |
| 88 | +#### 🏪 门店管理类 | |
| 89 | +- `LqMdxxService` - 门店信息管理服务 | |
| 90 | +- `LqMdXdbhsjService` - 门店新店保护时间管理 | |
| 91 | + | |
| 92 | +#### 👥 人员管理类 | |
| 93 | +- `LqYcsdJsjService` - 金三角设定管理服务 | |
| 94 | +- `LqJinsanjiaoUserService` - 金三角用户绑定管理 | |
| 95 | + | |
| 96 | +#### 📋 客户管理类 | |
| 69 | 97 | - `LqKhxxService` - 客户信息管理服务 |
| 70 | -- `LqRyzlService` - 人员资料管理服务 | |
| 71 | - | |
| 72 | -#### 🏭 生产管理类 | |
| 73 | -- `LqJsfaService` - 工艺方案管理服务 | |
| 74 | -- `LqSbtjbService` - 设备统计管理服务 | |
| 75 | -- `LqYcsdJsjService` - 技术数据管理服务 | |
| 76 | -- `LqYcsdJjlftjsService` - 技术方案管理服务 | |
| 77 | -- `LqYcsdMdlbjhsxxService` - 模具管理服务 | |
| 78 | - | |
| 79 | -#### 💰 销售管理类 | |
| 80 | -- `LqXhHyhkService` - 销售回款管理服务 | |
| 81 | -- `LqXhmxbService` - 销售明细管理服务 | |
| 82 | -- `LqTkXscService` - 提成管理服务 | |
| 83 | -- `LqTkjlbService` - 提成记录管理服务 | |
| 84 | - | |
| 85 | -#### 📦 库存管理类 | |
| 86 | -- `LqKqhzbService` - 库存汇总管理服务 | |
| 87 | -- `LqLssjService` - 历史数据管理服务 | |
| 88 | -- `LqYjmxbService` - 原料明细管理服务 | |
| 89 | - | |
| 90 | -#### 📊 财务管理类 | |
| 91 | -- `LqSkzhService` - 收款账户管理服务 | |
| 92 | -- `LqHzfService` - 汇总费用管理服务 | |
| 93 | -- `LqJdqdService` - 季度清单管理服务 | |
| 98 | +- `LqTkjlbService` - 拓客记录管理服务 | |
| 99 | +- `LqEventService` - 拓客活动管理服务 | |
| 94 | 100 | |
| 95 | 101 | #### 🔧 系统工具类 |
| 96 | 102 | - `EmailService` - 邮件服务 |
| ... | ... | @@ -99,9 +105,16 @@ lvqianmeiye_ERP/ |
| 99 | 105 | - `WorkLogService` - 工作日志服务 |
| 100 | 106 | |
| 101 | 107 | ### NCC.Extend.Entitys(实体模型层) |
| 102 | -- **Entity/** - 数据库实体模型(66个实体) | |
| 103 | -- **Dto/** - 数据传输对象(304个DTO) | |
| 104 | -- **Mapper/** - 对象映射配置(50个映射器) | |
| 108 | +- **Entity/** - 数据库实体模型(包含统计表、工资表等核心实体) | |
| 109 | + - `lq_statistics_personal_performance/` - 个人业绩统计实体 | |
| 110 | + - `lq_statistics_store_total_performance/` - 门店总业绩统计实体 | |
| 111 | + - `lq_statistics_gold_triangle/` - 金三角业绩统计实体 | |
| 112 | + - `lq_statistics_department_consume_performance/` - 部门消耗业绩统计实体 | |
| 113 | + - `lq_statistics_tech_performance/` - 科技部业绩统计实体 | |
| 114 | + - `lq_statistics_store_consume_performance/` - 门店消耗业绩统计实体 | |
| 115 | + - `lq_salary_statistics/` - 工资统计实体 | |
| 116 | +- **Dto/** - 数据传输对象(包含统计、报表等DTO) | |
| 117 | +- **Mapper/** - 对象映射配置 | |
| 105 | 118 | - **Model/** - 业务模型类 |
| 106 | 119 | |
| 107 | 120 | ### NCC.Extend.Interfaces(接口定义层) |
| ... | ... | @@ -171,39 +184,44 @@ npm run dev |
| 171 | 184 | |
| 172 | 185 | > 💡 **说明**:所有业务功能的核心代码都位于 `netcore/src/Modularity/Extend/` 模块中 |
| 173 | 186 | |
| 174 | -### 📋 基础管理模块 | |
| 175 | -- **产品信息** (`LqCpxxService`) - 产品档案管理,产品分类维护 | |
| 176 | -- **客户信息** (`LqKhxxService`) - 客户档案管理,客户关系维护 | |
| 177 | -- **人员资料** (`LqRyzlService`) - 员工信息管理,人员档案维护 | |
| 178 | - | |
| 179 | -### 🏭 生产管理模块 | |
| 180 | -- **工艺方案** (`LqJsfaService`) - 生产工艺配置,工艺流程管理 | |
| 181 | -- **设备统计** (`LqSbtjbService`) - 设备使用情况统计,设备维护管理 | |
| 182 | -- **技术数据** (`LqYcsdJsjService`) - 技术参数管理,工艺数据维护 | |
| 183 | -- **技术方案** (`LqYcsdJjlftjsService`) - 技术方案管理,工艺优化 | |
| 184 | -- **模具管理** (`LqYcsdMdlbjhsxxService`) - 模具档案管理,模具维护 | |
| 185 | - | |
| 186 | -### 💰 销售管理模块 | |
| 187 | -- **销售回款** (`LqXhHyhkService`) - 销售回款管理,资金回笼跟踪 | |
| 188 | -- **销售明细** (`LqXhmxbService`) - 销售明细管理,销售数据分析 | |
| 189 | -- **提成管理** (`LqTkXscService`) - 销售提成计算,提成规则维护 | |
| 190 | -- **提成记录** (`LqTkjlbService`) - 提成记录管理,提成发放跟踪 | |
| 191 | - | |
| 192 | -### 📦 库存管理模块 | |
| 193 | -- **库存汇总** (`LqKqhzbService`) - 库存数据分析,库存统计报表 | |
| 194 | -- **历史数据** (`LqLssjService`) - 历史数据管理,数据归档 | |
| 195 | -- **原料明细** (`LqYjmxbService`) - 原料库存管理,原料使用跟踪 | |
| 196 | - | |
| 197 | -### 📊 财务管理模块 | |
| 198 | -- **收款账户** (`LqSkzhService`) - 收款账户管理,资金账户维护 | |
| 199 | -- **汇总费用** (`LqHzfService`) - 费用汇总管理,成本分析 | |
| 200 | -- **季度清单** (`LqJdqdService`) - 季度财务清单,财务报告 | |
| 201 | - | |
| 202 | -### 🔧 系统工具模块 | |
| 203 | -- **邮件服务** (`EmailService`) - 邮件发送,通知提醒 | |
| 204 | -- **文档管理** (`DocumentService`) - 文档存储,文件管理 | |
| 205 | -- **大数据分析** (`BigDataService`) - 数据分析,报表生成 | |
| 206 | -- **工作日志** (`WorkLogService`) - 工作日志记录,操作跟踪 | |
| 187 | +### 📊 业绩统计模块 | |
| 188 | +- **个人业绩统计** (`LqStatisticsService`) - 健康师个人业绩统计,包含首单业绩、升单业绩等 | |
| 189 | +- **门店总业绩统计** (`LqStatisticsService`) - 门店整体业绩统计,包含总业绩、欠款金额等 | |
| 190 | +- **金三角业绩统计** (`LqStatisticsService`) - 金三角团队业绩统计和分析 | |
| 191 | +- **部门消耗业绩统计** (`LqStatisticsService`) - 部门消耗业绩统计,包含人头数、人次等 | |
| 192 | +- **科技部业绩统计** (`LqStatisticsService`) - 科技部老师业绩统计 | |
| 193 | +- **门店消耗业绩统计** (`LqStatisticsService`) - 门店消耗业绩统计 | |
| 194 | + | |
| 195 | +### 💰 工资核算模块 | |
| 196 | +- **工资统计** (`LqGzService`) - 健康师工资核算,包含底薪、提成、奖励等 | |
| 197 | +- **底薪计算** - 根据业绩标准自动计算健康师底薪(一星、二星、三星标准) | |
| 198 | +- **提成计算** - 根据业绩类型计算各类提成(基础业绩、合作业绩、奖励业绩等) | |
| 199 | +- **占比计算** - 队伍业绩与个人总业绩的占比分析 | |
| 200 | + | |
| 201 | +### 📈 报表分析模块 | |
| 202 | +- **门店业绩趋势** (`LqReportService`) - 门店业绩时间趋势分析 | |
| 203 | +- **门店业绩排行榜** (`LqReportService`) - 门店业绩排名统计 | |
| 204 | +- **健康师业绩趋势** (`LqReportService`) - 健康师个人业绩趋势 | |
| 205 | +- **健康师业绩排行榜** (`LqReportService`) - 健康师业绩排名统计 | |
| 206 | +- **金三角业绩趋势** (`LqReportService`) - 金三角团队业绩趋势 | |
| 207 | +- **金三角业绩排行榜** (`LqReportService`) - 金三角团队排名统计 | |
| 208 | +- **综合仪表盘** (`LqReportService`) - 多维度数据汇总展示 | |
| 209 | + | |
| 210 | +### 🏪 门店管理模块 | |
| 211 | +- **门店信息管理** (`LqMdxxService`) - 门店基础信息维护 | |
| 212 | +- **门店归属管理** - 门店归属事业部、教育部、科技部等 | |
| 213 | +- **新店保护时间** (`LqMdXdbhsjService`) - 新店保护期管理 | |
| 214 | + | |
| 215 | +### 👥 人员管理模块 | |
| 216 | +- **金三角设定** (`LqYcsdJsjService`) - 金三角团队配置管理 | |
| 217 | +- **金三角用户绑定** (`LqJinsanjiaoUserService`) - 用户与金三角团队绑定关系 | |
| 218 | +- **顾问身份管理** - 根据金三角绑定自动设置顾问身份 | |
| 219 | + | |
| 220 | +### 📋 客户管理模块 | |
| 221 | +- **客户信息管理** (`LqKhxxService`) - 客户档案管理 | |
| 222 | +- **拓客记录管理** (`LqTkjlbService`) - 拓客活动记录 | |
| 223 | +- **拓客活动管理** (`LqEventService`) - 拓客活动配置 | |
| 224 | +- **会员权益管理** - 历史会员权益数据管理 | |
| 207 | 225 | |
| 208 | 226 | ### ⚙️ 系统管理模块(位于System模块) |
| 209 | 227 | - **用户管理** - 系统用户维护,用户权限管理 |
| ... | ... | @@ -215,60 +233,91 @@ npm run dev |
| 215 | 233 | |
| 216 | 234 | ### 🎯 核心业务开发(Extend模块) |
| 217 | 235 | |
| 218 | -#### 添加新的业务服务 | |
| 219 | -1. **创建实体模型** (`NCC.Extend.Entitys/Entity/`) | |
| 236 | +#### 统计服务开发规范 | |
| 237 | +1. **统计表实体** (`NCC.Extend.Entitys/Entity/lq_statistics_*/`) | |
| 220 | 238 | ```csharp |
| 221 | - [SugarTable("lq_新表名")] | |
| 239 | + [SugarTable("lq_statistics_新统计表")] | |
| 222 | 240 | [Tenant(ClaimConst.TENANT_ID)] |
| 223 | - public class Lq新实体Entity | |
| 241 | + public class LqStatistics新统计Entity | |
| 224 | 242 | { |
| 225 | 243 | [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)] |
| 226 | 244 | public string Id { get; set; } |
| 227 | - // 其他字段... | |
| 245 | + | |
| 246 | + [SugarColumn(ColumnName = "F_StatisticsMonth")] | |
| 247 | + public string StatisticsMonth { get; set; } | |
| 248 | + | |
| 249 | + // 其他统计字段... | |
| 228 | 250 | } |
| 229 | 251 | ``` |
| 230 | 252 | |
| 231 | -2. **创建DTO对象** (`NCC.Extend.Entitys/Dto/`) | |
| 232 | - - `Lq新实体ListQueryInput` - 列表查询输入 | |
| 233 | - - `Lq新实体CrInput` - 创建输入 | |
| 234 | - - `Lq新实体UpInput` - 更新输入 | |
| 235 | - - `Lq新实体InfoOutput` - 详情输出 | |
| 236 | - - `Lq新实体ListOutput` - 列表输出 | |
| 253 | +2. **统计DTO对象** (`NCC.Extend.Entitys/Dto/LqStatistics/`) | |
| 254 | + - `Lq新统计ListQueryInput` - 列表查询输入 | |
| 255 | + - `Lq新统计ListOutput` - 列表输出DTO | |
| 256 | + | |
| 257 | +3. **统计服务实现** (`LqStatisticsService`) | |
| 258 | + ```csharp | |
| 259 | + /// <summary> | |
| 260 | + /// 保存新统计数据 | |
| 261 | + /// </summary> | |
| 262 | + public async Task Save新统计Statistics(string statisticsMonth) | |
| 263 | + { | |
| 264 | + // 统计逻辑实现 | |
| 265 | + } | |
| 266 | + | |
| 267 | + /// <summary> | |
| 268 | + /// 获取新统计列表 | |
| 269 | + /// </summary> | |
| 270 | + public async Task<dynamic> Get新统计StatisticsList(Lq新统计ListQueryInput input) | |
| 271 | + { | |
| 272 | + // 查询逻辑实现 | |
| 273 | + } | |
| 274 | + ``` | |
| 237 | 275 | |
| 238 | -3. **创建接口定义** (`NCC.Extend.Interfaces/`) | |
| 276 | +#### 报表服务开发规范 | |
| 277 | +1. **报表接口定义** (`NCC.Extend.Interfaces/LqReport/`) | |
| 239 | 278 | ```csharp |
| 240 | - public interface ILq新实体Service : ITransient | |
| 279 | + public interface ILqReportService | |
| 241 | 280 | { |
| 242 | - Task<dynamic> GetInfo(string id); | |
| 243 | - Task<dynamic> GetList(Lq新实体ListQueryInput input); | |
| 244 | - Task Create(Lq新实体CrInput input); | |
| 245 | - Task Update(string id, Lq新实体UpInput input); | |
| 246 | - Task Delete(string id); | |
| 281 | + Task<object> Get新报表Data(新报表Input input); | |
| 247 | 282 | } |
| 248 | 283 | ``` |
| 249 | 284 | |
| 250 | -4. **实现业务服务** (`NCC.Extend/`) | |
| 285 | +2. **报表服务实现** (`LqReportService`) | |
| 251 | 286 | ```csharp |
| 252 | - [ApiDescriptionSettings(Tag = "Extend", Name = "Lq新实体", Order = 200)] | |
| 253 | - [Route("api/Extend/[controller]")] | |
| 254 | - public class Lq新实体Service : ILq新实体Service, IDynamicApiController, ITransient | |
| 287 | + [HttpPost("get-新报表-data")] | |
| 288 | + public async Task<object> Get新报表Data(新报表Input input) | |
| 255 | 289 | { |
| 256 | - // 服务实现... | |
| 290 | + // 报表数据查询和格式化 | |
| 257 | 291 | } |
| 258 | 292 | ``` |
| 259 | 293 | |
| 260 | -#### 前端页面开发 | |
| 261 | -1. **创建页面组件** (`antis-ncc-admin/src/views/lq新模块/`) | |
| 262 | - - `index.vue` - 列表页面 | |
| 263 | - - `Form.vue` - 表单页面 | |
| 264 | - - `ExportBox.vue` - 导出组件 | |
| 294 | +#### 前端页面开发规范 | |
| 295 | +1. **统计页面组件** (`antis-ncc-admin/src/views/新统计Statistics/`) | |
| 296 | + - `index.vue` - 统计列表页面 | |
| 297 | + - 使用 `NCC-table` 组件 | |
| 298 | + - 支持分页、筛选、导出功能 | |
| 299 | + | |
| 300 | +2. **报表页面组件** (`antis-ncc-admin/src/views/report/`) | |
| 301 | + - 集成到现有报表页面 | |
| 302 | + - 使用 ECharts 图表组件 | |
| 303 | + - 支持时间筛选、类型切换 | |
| 265 | 304 | |
| 266 | -2. **添加API接口** (`antis-ncc-admin/src/api/extend/`) | |
| 305 | +3. **API接口** (`antis-ncc-admin/src/api/`) | |
| 267 | 306 | ```javascript |
| 268 | - export function getLq新实体List(data) { | |
| 307 | + // 统计接口 | |
| 308 | + export function get新统计StatisticsList(data) { | |
| 269 | 309 | return request({ |
| 270 | - url: '/api/Extend/Lq新实体', | |
| 271 | - method: 'GET', | |
| 310 | + url: '/api/Extend/LqStatistics/get-新统计-statistics-list', | |
| 311 | + method: 'post', | |
| 312 | + data | |
| 313 | + }) | |
| 314 | + } | |
| 315 | + | |
| 316 | + // 报表接口 | |
| 317 | + export function get新报表Data(data) { | |
| 318 | + return request({ | |
| 319 | + url: '/api/Extend/LqReport/get-新报表-data', | |
| 320 | + method: 'post', | |
| 272 | 321 | data |
| 273 | 322 | }) |
| 274 | 323 | } |
| ... | ... | @@ -341,6 +390,30 @@ proxy: { |
| 341 | 390 | 2. 将 `dist` 目录部署到Web服务器 |
| 342 | 391 | 3. 配置Nginx或IIS反向代理 |
| 343 | 392 | |
| 393 | +## 开发规范 | |
| 394 | + | |
| 395 | +### 📋 项目开发规范 | |
| 396 | +- **ID生成规范**: 必须使用 `YitIdHelper.NextId().ToString()` 生成ID,禁止使用 `Guid.NewGuid().ToString()` | |
| 397 | +- **API接口规范**: GET请求使用data字段传参,不使用params | |
| 398 | +- **权限控制**: 所有数据查询必须添加园区权限过滤 | |
| 399 | +- **数据一致性**: 统计数据和列表数据必须使用相同的过滤条件 | |
| 400 | +- **UI一致性**: 所有页面必须使用统一的布局和样式规范 | |
| 401 | +- **性能优化**: 所有列表接口支持分页,避免大数据量查询 | |
| 402 | +- **安全防护**: 使用SqlSugar ORM防止SQL注入 | |
| 403 | + | |
| 404 | +### 🗄️ 数据库规范 | |
| 405 | +- **表命名**: 业务前缀 + 功能名称 (如: lq_) | |
| 406 | +- **字段命名**: 驼峰化 | |
| 407 | +- **时间字段**: 统一使用 DateTime 类型 | |
| 408 | +- **删除标记**: `base_organize.DeleteMark` 为 `null` 表示未删除 | |
| 409 | +- **SQL查询验证**: 对于统计类型的SQL查询,在提交代码前必须先使用MCP MySQL工具执行验证 | |
| 410 | + | |
| 411 | +### 🎨 前端开发规范 | |
| 412 | +- **组件开发**: views 与 components 分离,弹窗、二级页面必须单独创建 Vue 文件 | |
| 413 | +- **文件命名**: 使用 kebab-case (如: user-dialog.vue) | |
| 414 | +- **UI规范**: 统一使用 NCC-table,标签右对齐,卡片高度100px,内边距12px,圆角12px | |
| 415 | +- **性能要求**: 启用懒加载和代码分割,页面加载时间 < 3s | |
| 416 | + | |
| 344 | 417 | ## 常见问题 |
| 345 | 418 | |
| 346 | 419 | ### Q: 前端启动失败 |
| ... | ... | @@ -355,15 +428,53 @@ A: 检查JWT配置和Token有效期设置 |
| 355 | 428 | ### Q: 页面显示异常 |
| 356 | 429 | A: 检查浏览器控制台错误信息和网络请求状态 |
| 357 | 430 | |
| 431 | +### Q: 统计SQL执行失败 | |
| 432 | +A: 使用MCP MySQL工具先验证SQL语法和字段名是否正确 | |
| 433 | + | |
| 434 | +### Q: 报表页面404错误 | |
| 435 | +A: 检查LqReportService是否正确实现ITransient接口并注册到DI容器 | |
| 436 | + | |
| 358 | 437 | ## 技术支持 |
| 359 | 438 | |
| 360 | 439 | 如有技术问题,请联系开发团队或查看项目文档。 |
| 361 | 440 | |
| 441 | +## 📊 已完成功能 | |
| 442 | + | |
| 443 | +### ✅ 核心统计功能 | |
| 444 | +- [x] 个人业绩统计 - 健康师个人业绩统计,包含首单业绩、升单业绩等 | |
| 445 | +- [x] 门店总业绩统计 - 门店整体业绩统计,包含总业绩、欠款金额等 | |
| 446 | +- [x] 金三角业绩统计 - 金三角团队业绩统计和分析 | |
| 447 | +- [x] 部门消耗业绩统计 - 部门消耗业绩统计,包含人头数、人次等 | |
| 448 | +- [x] 科技部业绩统计 - 科技部老师业绩统计 | |
| 449 | +- [x] 门店消耗业绩统计 - 门店消耗业绩统计 | |
| 450 | + | |
| 451 | +### ✅ 工资核算功能 | |
| 452 | +- [x] 工资统计 - 健康师工资核算,包含底薪、提成、奖励等 | |
| 453 | +- [x] 底薪计算 - 根据业绩标准自动计算健康师底薪(一星、二星、三星标准) | |
| 454 | +- [x] 提成计算 - 根据业绩类型计算各类提成(基础业绩、合作业绩、奖励业绩等) | |
| 455 | +- [x] 占比计算 - 队伍业绩与个人总业绩的占比分析 | |
| 456 | + | |
| 457 | +### ✅ 报表分析功能 | |
| 458 | +- [x] 门店业绩趋势 - 门店业绩时间趋势分析 | |
| 459 | +- [x] 门店业绩排行榜 - 门店业绩排名统计 | |
| 460 | +- [x] 健康师业绩趋势 - 健康师个人业绩趋势 | |
| 461 | +- [x] 健康师业绩排行榜 - 健康师业绩排名统计 | |
| 462 | +- [x] 金三角业绩趋势 - 金三角团队业绩趋势 | |
| 463 | +- [x] 金三角业绩排行榜 - 金三角团队排名统计 | |
| 464 | +- [x] 综合仪表盘 - 多维度数据汇总展示 | |
| 465 | + | |
| 466 | +### ✅ 系统优化 | |
| 467 | +- [x] 删除废弃代码 - 清理lq_ryzl、lq_tk_xsc等废弃模块 | |
| 468 | +- [x] 修复SQL语法 - 解决MySQL兼容性问题 | |
| 469 | +- [x] 修复字段映射 - 解决数据库字段名不匹配问题 | |
| 470 | +- [x] 优化前端页面 - 修复布局、分页、样式等问题 | |
| 471 | + | |
| 362 | 472 | ## 版本信息 |
| 363 | 473 | |
| 364 | -- **当前版本**:v1.0.0 | |
| 365 | -- **最后更新**:2024年 | |
| 474 | +- **当前版本**:v2.0.0 | |
| 475 | +- **最后更新**:2024年12月 | |
| 366 | 476 | - **维护状态**:活跃开发中 |
| 477 | +- **主要更新**:完成业绩统计、工资核算、报表分析等核心功能 | |
| 367 | 478 | |
| 368 | 479 | --- |
| 369 | 480 | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqRyzl/LqRyzlCrInput.cs deleted
| 1 | -using System; | |
| 2 | -using System.Collections.Generic; | |
| 3 | - | |
| 4 | -namespace NCC.Extend.Entitys.Dto.LqRyzl | |
| 5 | -{ | |
| 6 | - /// <summary> | |
| 7 | - /// 人员资料修改输入参数 | |
| 8 | - /// </summary> | |
| 9 | - public class LqRyzlCrInput | |
| 10 | - { | |
| 11 | - /// <summary> | |
| 12 | - /// 序号 | |
| 13 | - /// </summary> | |
| 14 | - public string id { get; set; } | |
| 15 | - | |
| 16 | - /// <summary> | |
| 17 | - /// 店名 | |
| 18 | - /// </summary> | |
| 19 | - public string dm { get; set; } | |
| 20 | - | |
| 21 | - /// <summary> | |
| 22 | - /// 职位 | |
| 23 | - /// </summary> | |
| 24 | - public string zw { get; set; } | |
| 25 | - | |
| 26 | - /// <summary> | |
| 27 | - /// 费用分摊 | |
| 28 | - /// </summary> | |
| 29 | - public string fyft { get; set; } | |
| 30 | - | |
| 31 | - /// <summary> | |
| 32 | - /// 岗位分类1 | |
| 33 | - /// </summary> | |
| 34 | - public string gwfl1 { get; set; } | |
| 35 | - | |
| 36 | - /// <summary> | |
| 37 | - /// 姓名 | |
| 38 | - /// </summary> | |
| 39 | - public string xm { get; set; } | |
| 40 | - | |
| 41 | - /// <summary> | |
| 42 | - /// 在职情况 | |
| 43 | - /// </summary> | |
| 44 | - public string zzqk { get; set; } | |
| 45 | - | |
| 46 | - /// <summary> | |
| 47 | - /// 岗位分类2 | |
| 48 | - /// </summary> | |
| 49 | - public string gwfl2 { get; set; } | |
| 50 | - | |
| 51 | - /// <summary> | |
| 52 | - /// 入职时间 | |
| 53 | - /// </summary> | |
| 54 | - public DateTime? rzsj { get; set; } | |
| 55 | - | |
| 56 | - /// <summary> | |
| 57 | - /// 离职时间 | |
| 58 | - /// </summary> | |
| 59 | - public DateTime? lzsj { get; set; } | |
| 60 | - | |
| 61 | - /// <summary> | |
| 62 | - /// 战队 | |
| 63 | - /// </summary> | |
| 64 | - public string zd { get; set; } | |
| 65 | - | |
| 66 | - /// <summary> | |
| 67 | - /// 预留1 | |
| 68 | - /// </summary> | |
| 69 | - public string yl1 { get; set; } | |
| 70 | - | |
| 71 | - /// <summary> | |
| 72 | - /// 预留2 | |
| 73 | - /// </summary> | |
| 74 | - public string yl2 { get; set; } | |
| 75 | - | |
| 76 | - /// <summary> | |
| 77 | - /// 预留3 | |
| 78 | - /// </summary> | |
| 79 | - public string yl3 { get; set; } | |
| 80 | - | |
| 81 | - /// <summary> | |
| 82 | - /// 手机号 | |
| 83 | - /// </summary> | |
| 84 | - public string sjh { get; set; } | |
| 85 | - | |
| 86 | - } | |
| 87 | -} |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqRyzl/LqRyzlInfoOutput.cs deleted
| 1 | -using System; | |
| 2 | -using System.Collections.Generic; | |
| 3 | - | |
| 4 | -namespace NCC.Extend.Entitys.Dto.LqRyzl | |
| 5 | -{ | |
| 6 | - /// <summary> | |
| 7 | - /// 人员资料输出参数 | |
| 8 | - /// </summary> | |
| 9 | - public class LqRyzlInfoOutput | |
| 10 | - { | |
| 11 | - /// <summary> | |
| 12 | - /// 序号 | |
| 13 | - /// </summary> | |
| 14 | - public string id { get; set; } | |
| 15 | - | |
| 16 | - /// <summary> | |
| 17 | - /// 店名 | |
| 18 | - /// </summary> | |
| 19 | - public string dm { get; set; } | |
| 20 | - | |
| 21 | - /// <summary> | |
| 22 | - /// 职位 | |
| 23 | - /// </summary> | |
| 24 | - public string zw { get; set; } | |
| 25 | - | |
| 26 | - /// <summary> | |
| 27 | - /// 费用分摊 | |
| 28 | - /// </summary> | |
| 29 | - public string fyft { get; set; } | |
| 30 | - | |
| 31 | - /// <summary> | |
| 32 | - /// 岗位分类1 | |
| 33 | - /// </summary> | |
| 34 | - public string gwfl1 { get; set; } | |
| 35 | - | |
| 36 | - /// <summary> | |
| 37 | - /// 姓名 | |
| 38 | - /// </summary> | |
| 39 | - public string xm { get; set; } | |
| 40 | - | |
| 41 | - /// <summary> | |
| 42 | - /// 在职情况 | |
| 43 | - /// </summary> | |
| 44 | - public string zzqk { get; set; } | |
| 45 | - | |
| 46 | - /// <summary> | |
| 47 | - /// 岗位分类2 | |
| 48 | - /// </summary> | |
| 49 | - public string gwfl2 { get; set; } | |
| 50 | - | |
| 51 | - /// <summary> | |
| 52 | - /// 入职时间 | |
| 53 | - /// </summary> | |
| 54 | - public DateTime? rzsj { get; set; } | |
| 55 | - | |
| 56 | - /// <summary> | |
| 57 | - /// 离职时间 | |
| 58 | - /// </summary> | |
| 59 | - public DateTime? lzsj { get; set; } | |
| 60 | - | |
| 61 | - /// <summary> | |
| 62 | - /// 战队 | |
| 63 | - /// </summary> | |
| 64 | - public string zd { get; set; } | |
| 65 | - | |
| 66 | - /// <summary> | |
| 67 | - /// 预留1 | |
| 68 | - /// </summary> | |
| 69 | - public string yl1 { get; set; } | |
| 70 | - | |
| 71 | - /// <summary> | |
| 72 | - /// 预留2 | |
| 73 | - /// </summary> | |
| 74 | - public string yl2 { get; set; } | |
| 75 | - | |
| 76 | - /// <summary> | |
| 77 | - /// 预留3 | |
| 78 | - /// </summary> | |
| 79 | - public string yl3 { get; set; } | |
| 80 | - | |
| 81 | - /// <summary> | |
| 82 | - /// 手机号 | |
| 83 | - /// </summary> | |
| 84 | - public string sjh { get; set; } | |
| 85 | - | |
| 86 | - } | |
| 87 | -} |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqRyzl/LqRyzlListOutput.cs deleted
| 1 | -using System; | |
| 2 | - | |
| 3 | -namespace NCC.Extend.Entitys.Dto.LqRyzl | |
| 4 | -{ | |
| 5 | - /// <summary> | |
| 6 | - /// 人员资料输入参数 | |
| 7 | - /// </summary> | |
| 8 | - public class LqRyzlListOutput | |
| 9 | - { | |
| 10 | - /// <summary> | |
| 11 | - /// 序号 | |
| 12 | - /// </summary> | |
| 13 | - public string id { get; set; } | |
| 14 | - | |
| 15 | - /// <summary> | |
| 16 | - /// 店名 | |
| 17 | - /// </summary> | |
| 18 | - public string dm { get; set; } | |
| 19 | - | |
| 20 | - /// <summary> | |
| 21 | - /// 职位 | |
| 22 | - /// </summary> | |
| 23 | - public string zw { get; set; } | |
| 24 | - | |
| 25 | - /// <summary> | |
| 26 | - /// 费用分摊 | |
| 27 | - /// </summary> | |
| 28 | - public string fyft { get; set; } | |
| 29 | - | |
| 30 | - /// <summary> | |
| 31 | - /// 岗位分类1 | |
| 32 | - /// </summary> | |
| 33 | - public string gwfl1 { get; set; } | |
| 34 | - | |
| 35 | - /// <summary> | |
| 36 | - /// 姓名 | |
| 37 | - /// </summary> | |
| 38 | - public string xm { get; set; } | |
| 39 | - | |
| 40 | - /// <summary> | |
| 41 | - /// 在职情况 | |
| 42 | - /// </summary> | |
| 43 | - public string zzqk { get; set; } | |
| 44 | - | |
| 45 | - /// <summary> | |
| 46 | - /// 岗位分类2 | |
| 47 | - /// </summary> | |
| 48 | - public string gwfl2 { get; set; } | |
| 49 | - | |
| 50 | - /// <summary> | |
| 51 | - /// 入职时间 | |
| 52 | - /// </summary> | |
| 53 | - public DateTime? rzsj { get; set; } | |
| 54 | - | |
| 55 | - /// <summary> | |
| 56 | - /// 离职时间 | |
| 57 | - /// </summary> | |
| 58 | - public DateTime? lzsj { get; set; } | |
| 59 | - | |
| 60 | - /// <summary> | |
| 61 | - /// 战队 | |
| 62 | - /// </summary> | |
| 63 | - public string zd { get; set; } | |
| 64 | - | |
| 65 | - /// <summary> | |
| 66 | - /// 预留1 | |
| 67 | - /// </summary> | |
| 68 | - public string yl1 { get; set; } | |
| 69 | - | |
| 70 | - /// <summary> | |
| 71 | - /// 预留2 | |
| 72 | - /// </summary> | |
| 73 | - public string yl2 { get; set; } | |
| 74 | - | |
| 75 | - /// <summary> | |
| 76 | - /// 预留3 | |
| 77 | - /// </summary> | |
| 78 | - public string yl3 { get; set; } | |
| 79 | - | |
| 80 | - /// <summary> | |
| 81 | - /// 手机号 | |
| 82 | - /// </summary> | |
| 83 | - public string sjh { get; set; } | |
| 84 | - | |
| 85 | - } | |
| 86 | -} |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqRyzl/LqRyzlListQueryInput.cs deleted
| 1 | -using NCC.Common.Filter; | |
| 2 | -using System.Collections.Generic; | |
| 3 | - | |
| 4 | -namespace NCC.Extend.Entitys.Dto.LqRyzl | |
| 5 | -{ | |
| 6 | - /// <summary> | |
| 7 | - /// 人员资料列表查询输入 | |
| 8 | - /// </summary> | |
| 9 | - public class LqRyzlListQueryInput : PageInputBase | |
| 10 | - { | |
| 11 | - /// <summary> | |
| 12 | - /// 选择导出数据key | |
| 13 | - /// </summary> | |
| 14 | - public string selectKey { get; set; } | |
| 15 | - | |
| 16 | - /// <summary> | |
| 17 | - /// | |
| 18 | - /// </summary> | |
| 19 | - public int dataType { get; set; } | |
| 20 | - | |
| 21 | - | |
| 22 | - /// <summary> | |
| 23 | - /// 序号 | |
| 24 | - /// </summary> | |
| 25 | - public string id { get; set; } | |
| 26 | - | |
| 27 | - /// <summary> | |
| 28 | - /// 店名 | |
| 29 | - /// </summary> | |
| 30 | - public string dm { get; set; } | |
| 31 | - | |
| 32 | - /// <summary> | |
| 33 | - /// 职位 | |
| 34 | - /// </summary> | |
| 35 | - public string zw { get; set; } | |
| 36 | - | |
| 37 | - /// <summary> | |
| 38 | - /// 费用分摊 | |
| 39 | - /// </summary> | |
| 40 | - public string fyft { get; set; } | |
| 41 | - | |
| 42 | - /// <summary> | |
| 43 | - /// 岗位分类1 | |
| 44 | - /// </summary> | |
| 45 | - public string gwfl1 { get; set; } | |
| 46 | - | |
| 47 | - /// <summary> | |
| 48 | - /// 姓名 | |
| 49 | - /// </summary> | |
| 50 | - public string xm { get; set; } | |
| 51 | - | |
| 52 | - /// <summary> | |
| 53 | - /// 在职情况 | |
| 54 | - /// </summary> | |
| 55 | - public string zzqk { get; set; } | |
| 56 | - | |
| 57 | - /// <summary> | |
| 58 | - /// 岗位分类2 | |
| 59 | - /// </summary> | |
| 60 | - public string gwfl2 { get; set; } | |
| 61 | - | |
| 62 | - /// <summary> | |
| 63 | - /// 入职时间 | |
| 64 | - /// </summary> | |
| 65 | - public string rzsj { get; set; } | |
| 66 | - | |
| 67 | - /// <summary> | |
| 68 | - /// 离职时间 | |
| 69 | - /// </summary> | |
| 70 | - public string lzsj { get; set; } | |
| 71 | - | |
| 72 | - /// <summary> | |
| 73 | - /// 战队 | |
| 74 | - /// </summary> | |
| 75 | - public string zd { get; set; } | |
| 76 | - | |
| 77 | - /// <summary> | |
| 78 | - /// 预留1 | |
| 79 | - /// </summary> | |
| 80 | - public string yl1 { get; set; } | |
| 81 | - | |
| 82 | - /// <summary> | |
| 83 | - /// 预留2 | |
| 84 | - /// </summary> | |
| 85 | - public string yl2 { get; set; } | |
| 86 | - | |
| 87 | - /// <summary> | |
| 88 | - /// 预留3 | |
| 89 | - /// </summary> | |
| 90 | - public string yl3 { get; set; } | |
| 91 | - | |
| 92 | - /// <summary> | |
| 93 | - /// 手机号 | |
| 94 | - /// </summary> | |
| 95 | - public string sjh { get; set; } | |
| 96 | - | |
| 97 | - } | |
| 98 | -} |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqRyzl/LqRyzlUpInput.cs deleted
| 1 | -using System; | |
| 2 | -using System.Collections.Generic; | |
| 3 | - | |
| 4 | -namespace NCC.Extend.Entitys.Dto.LqRyzl | |
| 5 | -{ | |
| 6 | - /// <summary> | |
| 7 | - /// 人员资料更新输入参数 | |
| 8 | - /// </summary> | |
| 9 | - public class LqRyzlUpInput : LqRyzlCrInput | |
| 10 | - { | |
| 11 | - /// <summary> | |
| 12 | - /// 序号 | |
| 13 | - /// </summary> | |
| 14 | - public string id { get; set; } | |
| 15 | - | |
| 16 | - } | |
| 17 | -} |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkXsc/LqTkXscCrInput.cs deleted
| 1 | -using System; | |
| 2 | -using System.Collections.Generic; | |
| 3 | - | |
| 4 | -namespace NCC.Extend.Entitys.Dto.LqTkXsc | |
| 5 | -{ | |
| 6 | - /// <summary> | |
| 7 | - /// 线索池修改输入参数 | |
| 8 | - /// </summary> | |
| 9 | - public class LqTkXscCrInput | |
| 10 | - { | |
| 11 | - /// <summary> | |
| 12 | - /// 客户编号 | |
| 13 | - /// </summary> | |
| 14 | - public string id { get; set; } | |
| 15 | - | |
| 16 | - /// <summary> | |
| 17 | - /// 创建时间 | |
| 18 | - /// </summary> | |
| 19 | - public DateTime? tjsj { get; set; } | |
| 20 | - | |
| 21 | - /// <summary> | |
| 22 | - /// 拓客人员 | |
| 23 | - /// </summary> | |
| 24 | - public string tkry { get; set; } | |
| 25 | - | |
| 26 | - /// <summary> | |
| 27 | - /// 顾客姓名 | |
| 28 | - /// </summary> | |
| 29 | - public string gkxm { get; set; } | |
| 30 | - | |
| 31 | - /// <summary> | |
| 32 | - /// 电话号码 | |
| 33 | - /// </summary> | |
| 34 | - public string dhhm { get; set; } | |
| 35 | - | |
| 36 | - /// <summary> | |
| 37 | - /// 购买张数 | |
| 38 | - /// </summary> | |
| 39 | - public int? gmzs { get; set; } | |
| 40 | - | |
| 41 | - /// <summary> | |
| 42 | - /// 支付方式 | |
| 43 | - /// </summary> | |
| 44 | - public string zffs { get; set; } | |
| 45 | - | |
| 46 | - /// <summary> | |
| 47 | - /// 是否加微信 | |
| 48 | - /// </summary> | |
| 49 | - public string sfjwx { get; set; } | |
| 50 | - | |
| 51 | - /// <summary> | |
| 52 | - /// 备注 | |
| 53 | - /// </summary> | |
| 54 | - public string bz { get; set; } | |
| 55 | - | |
| 56 | - /// <summary> | |
| 57 | - /// 性别 | |
| 58 | - /// </summary> | |
| 59 | - public string xb { get; set; } | |
| 60 | - | |
| 61 | - /// <summary> | |
| 62 | - /// 生日 | |
| 63 | - /// </summary> | |
| 64 | - public DateTime? sr { get; set; } | |
| 65 | - | |
| 66 | - /// <summary> | |
| 67 | - /// 地址 | |
| 68 | - /// </summary> | |
| 69 | - public string dz { get; set; } | |
| 70 | - | |
| 71 | - /// <summary> | |
| 72 | - /// 邮箱 | |
| 73 | - /// </summary> | |
| 74 | - public string yx { get; set; } | |
| 75 | - | |
| 76 | - /// <summary> | |
| 77 | - /// 微信 | |
| 78 | - /// </summary> | |
| 79 | - public string wx { get; set; } | |
| 80 | - | |
| 81 | - } | |
| 82 | -} |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkXsc/LqTkXscInfoOutput.cs deleted
| 1 | -using System; | |
| 2 | -using System.Collections.Generic; | |
| 3 | - | |
| 4 | -namespace NCC.Extend.Entitys.Dto.LqTkXsc | |
| 5 | -{ | |
| 6 | - /// <summary> | |
| 7 | - /// 线索池输出参数 | |
| 8 | - /// </summary> | |
| 9 | - public class LqTkXscInfoOutput | |
| 10 | - { | |
| 11 | - /// <summary> | |
| 12 | - /// 客户编号 | |
| 13 | - /// </summary> | |
| 14 | - public string id { get; set; } | |
| 15 | - | |
| 16 | - /// <summary> | |
| 17 | - /// 创建时间 | |
| 18 | - /// </summary> | |
| 19 | - public DateTime? tjsj { get; set; } | |
| 20 | - | |
| 21 | - /// <summary> | |
| 22 | - /// 拓客人员 | |
| 23 | - /// </summary> | |
| 24 | - public string tkry { get; set; } | |
| 25 | - | |
| 26 | - /// <summary> | |
| 27 | - /// 顾客姓名 | |
| 28 | - /// </summary> | |
| 29 | - public string gkxm { get; set; } | |
| 30 | - | |
| 31 | - /// <summary> | |
| 32 | - /// 电话号码 | |
| 33 | - /// </summary> | |
| 34 | - public string dhhm { get; set; } | |
| 35 | - | |
| 36 | - /// <summary> | |
| 37 | - /// 购买张数 | |
| 38 | - /// </summary> | |
| 39 | - public int? gmzs { get; set; } | |
| 40 | - | |
| 41 | - /// <summary> | |
| 42 | - /// 支付方式 | |
| 43 | - /// </summary> | |
| 44 | - public string zffs { get; set; } | |
| 45 | - | |
| 46 | - /// <summary> | |
| 47 | - /// 是否加微信 | |
| 48 | - /// </summary> | |
| 49 | - public string sfjwx { get; set; } | |
| 50 | - | |
| 51 | - /// <summary> | |
| 52 | - /// 备注 | |
| 53 | - /// </summary> | |
| 54 | - public string bz { get; set; } | |
| 55 | - | |
| 56 | - /// <summary> | |
| 57 | - /// 性别 | |
| 58 | - /// </summary> | |
| 59 | - public string xb { get; set; } | |
| 60 | - | |
| 61 | - /// <summary> | |
| 62 | - /// 生日 | |
| 63 | - /// </summary> | |
| 64 | - public DateTime? sr { get; set; } | |
| 65 | - | |
| 66 | - /// <summary> | |
| 67 | - /// 地址 | |
| 68 | - /// </summary> | |
| 69 | - public string dz { get; set; } | |
| 70 | - | |
| 71 | - /// <summary> | |
| 72 | - /// 邮箱 | |
| 73 | - /// </summary> | |
| 74 | - public string yx { get; set; } | |
| 75 | - | |
| 76 | - /// <summary> | |
| 77 | - /// 微信 | |
| 78 | - /// </summary> | |
| 79 | - public string wx { get; set; } | |
| 80 | - | |
| 81 | - } | |
| 82 | -} |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkXsc/LqTkXscListOutput.cs deleted
| 1 | -using System; | |
| 2 | - | |
| 3 | -namespace NCC.Extend.Entitys.Dto.LqTkXsc | |
| 4 | -{ | |
| 5 | - /// <summary> | |
| 6 | - /// 线索池输入参数 | |
| 7 | - /// </summary> | |
| 8 | - public class LqTkXscListOutput | |
| 9 | - { | |
| 10 | - /// <summary> | |
| 11 | - /// 客户编号 | |
| 12 | - /// </summary> | |
| 13 | - public string id { get; set; } | |
| 14 | - | |
| 15 | - /// <summary> | |
| 16 | - /// 创建时间 | |
| 17 | - /// </summary> | |
| 18 | - public DateTime? tjsj { get; set; } | |
| 19 | - | |
| 20 | - /// <summary> | |
| 21 | - /// 拓客人员 | |
| 22 | - /// </summary> | |
| 23 | - public string tkry { get; set; } | |
| 24 | - | |
| 25 | - /// <summary> | |
| 26 | - /// 顾客姓名 | |
| 27 | - /// </summary> | |
| 28 | - public string gkxm { get; set; } | |
| 29 | - | |
| 30 | - /// <summary> | |
| 31 | - /// 电话号码 | |
| 32 | - /// </summary> | |
| 33 | - public string dhhm { get; set; } | |
| 34 | - | |
| 35 | - /// <summary> | |
| 36 | - /// 购买张数 | |
| 37 | - /// </summary> | |
| 38 | - public int? gmzs { get; set; } | |
| 39 | - | |
| 40 | - /// <summary> | |
| 41 | - /// 支付方式 | |
| 42 | - /// </summary> | |
| 43 | - public string zffs { get; set; } | |
| 44 | - | |
| 45 | - /// <summary> | |
| 46 | - /// 是否加微信 | |
| 47 | - /// </summary> | |
| 48 | - public string sfjwx { get; set; } | |
| 49 | - | |
| 50 | - /// <summary> | |
| 51 | - /// 备注 | |
| 52 | - /// </summary> | |
| 53 | - public string bz { get; set; } | |
| 54 | - | |
| 55 | - /// <summary> | |
| 56 | - /// 性别 | |
| 57 | - /// </summary> | |
| 58 | - public string xb { get; set; } | |
| 59 | - | |
| 60 | - /// <summary> | |
| 61 | - /// 生日 | |
| 62 | - /// </summary> | |
| 63 | - public DateTime? sr { get; set; } | |
| 64 | - | |
| 65 | - /// <summary> | |
| 66 | - /// 地址 | |
| 67 | - /// </summary> | |
| 68 | - public string dz { get; set; } | |
| 69 | - | |
| 70 | - /// <summary> | |
| 71 | - /// 邮箱 | |
| 72 | - /// </summary> | |
| 73 | - public string yx { get; set; } | |
| 74 | - | |
| 75 | - /// <summary> | |
| 76 | - /// 微信 | |
| 77 | - /// </summary> | |
| 78 | - public string wx { get; set; } | |
| 79 | - | |
| 80 | - } | |
| 81 | -} |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkXsc/LqTkXscListQueryInput.cs deleted
| 1 | -using NCC.Common.Filter; | |
| 2 | -using System.Collections.Generic; | |
| 3 | - | |
| 4 | -namespace NCC.Extend.Entitys.Dto.LqTkXsc | |
| 5 | -{ | |
| 6 | - /// <summary> | |
| 7 | - /// 线索池列表查询输入 | |
| 8 | - /// </summary> | |
| 9 | - public class LqTkXscListQueryInput : PageInputBase | |
| 10 | - { | |
| 11 | - /// <summary> | |
| 12 | - /// 选择导出数据key | |
| 13 | - /// </summary> | |
| 14 | - public string selectKey { get; set; } | |
| 15 | - | |
| 16 | - /// <summary> | |
| 17 | - /// | |
| 18 | - /// </summary> | |
| 19 | - public int dataType { get; set; } | |
| 20 | - | |
| 21 | - | |
| 22 | - /// <summary> | |
| 23 | - /// 客户编号 | |
| 24 | - /// </summary> | |
| 25 | - public string id { get; set; } | |
| 26 | - | |
| 27 | - /// <summary> | |
| 28 | - /// 创建时间 | |
| 29 | - /// </summary> | |
| 30 | - public string tjsj { get; set; } | |
| 31 | - | |
| 32 | - /// <summary> | |
| 33 | - /// 拓客人员 | |
| 34 | - /// </summary> | |
| 35 | - public string tkry { get; set; } | |
| 36 | - | |
| 37 | - /// <summary> | |
| 38 | - /// 顾客姓名 | |
| 39 | - /// </summary> | |
| 40 | - public string gkxm { get; set; } | |
| 41 | - | |
| 42 | - /// <summary> | |
| 43 | - /// 电话号码 | |
| 44 | - /// </summary> | |
| 45 | - public string dhhm { get; set; } | |
| 46 | - | |
| 47 | - /// <summary> | |
| 48 | - /// 购买张数 | |
| 49 | - /// </summary> | |
| 50 | - public string gmzs { get; set; } | |
| 51 | - | |
| 52 | - /// <summary> | |
| 53 | - /// 支付方式 | |
| 54 | - /// </summary> | |
| 55 | - public string zffs { get; set; } | |
| 56 | - | |
| 57 | - /// <summary> | |
| 58 | - /// 是否加微信 | |
| 59 | - /// </summary> | |
| 60 | - public string sfjwx { get; set; } | |
| 61 | - | |
| 62 | - /// <summary> | |
| 63 | - /// 备注 | |
| 64 | - /// </summary> | |
| 65 | - public string bz { get; set; } | |
| 66 | - | |
| 67 | - /// <summary> | |
| 68 | - /// 性别 | |
| 69 | - /// </summary> | |
| 70 | - public string xb { get; set; } | |
| 71 | - | |
| 72 | - /// <summary> | |
| 73 | - /// 生日 | |
| 74 | - /// </summary> | |
| 75 | - public string sr { get; set; } | |
| 76 | - | |
| 77 | - /// <summary> | |
| 78 | - /// 地址 | |
| 79 | - /// </summary> | |
| 80 | - public string dz { get; set; } | |
| 81 | - | |
| 82 | - /// <summary> | |
| 83 | - /// 邮箱 | |
| 84 | - /// </summary> | |
| 85 | - public string yx { get; set; } | |
| 86 | - | |
| 87 | - /// <summary> | |
| 88 | - /// 微信 | |
| 89 | - /// </summary> | |
| 90 | - public string wx { get; set; } | |
| 91 | - | |
| 92 | - } | |
| 93 | -} |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkXsc/LqTkXscUpInput.cs deleted
| 1 | -using System; | |
| 2 | -using System.Collections.Generic; | |
| 3 | - | |
| 4 | -namespace NCC.Extend.Entitys.Dto.LqTkXsc | |
| 5 | -{ | |
| 6 | - /// <summary> | |
| 7 | - /// 线索池更新输入参数 | |
| 8 | - /// </summary> | |
| 9 | - public class LqTkXscUpInput : LqTkXscCrInput | |
| 10 | - { | |
| 11 | - /// <summary> | |
| 12 | - /// 客户编号 | |
| 13 | - /// </summary> | |
| 14 | - public string id { get; set; } | |
| 15 | - | |
| 16 | - } | |
| 17 | -} |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/README.md
| ... | ... | @@ -18,7 +18,7 @@ |
| 18 | 18 | - `lq_mdgf/` - 门店股份占比明细 |
| 19 | 19 | |
| 20 | 20 | #### 人员相关表 |
| 21 | -- `lq_ryzl/` - 人员资料 | |
| 21 | +- (已删除) `lq_ryzl/` - 人员资料 | |
| 22 | 22 | |
| 23 | 23 | #### 项目相关表 |
| 24 | 24 | - `lq_xmzl/` - 项目资料 |
| ... | ... | @@ -63,7 +63,7 @@ |
| 63 | 63 | - `lq_sbtjb/` - 社保统计表 |
| 64 | 64 | - `lq_skzh/` - 收款账号 |
| 65 | 65 | - `lq_tkjlb/` - 拓客记录表 |
| 66 | -- `lq_tk_xsc/` - 拓客记录表 | |
| 66 | +- (已删除) `lq_tk_xsc/` - 拓客记录表 | |
| 67 | 67 | - `lq_yaoyjl/` - 邀约记录 |
| 68 | 68 | - `lq_yxhdfa/` - 营销活动方案 |
| 69 | 69 | - `lq_yyjl/` - 预约记录 |
| ... | ... | @@ -80,7 +80,7 @@ |
| 80 | 80 | |
| 81 | 81 | 例如: |
| 82 | 82 | - `NCC.Extend.Entitys.lq_mdxx` - 门店资料 |
| 83 | -- `NCC.Extend.Entitys.lq_ryzl` - 人员资料 | |
| 83 | +- (已删除) `NCC.Extend.Entitys.lq_ryzl` - 人员资料 | |
| 84 | 84 | - `NCC.Extend.Entitys.lq_yjmxb` - 业绩明细表 |
| 85 | 85 | |
| 86 | 86 | ## 使用说明 | ... | ... |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_ryzl/LqRyzlEntity.cs deleted
| 1 | -using NCC.Common.Const; | |
| 2 | -using SqlSugar; | |
| 3 | -using System; | |
| 4 | - | |
| 5 | -namespace NCC.Extend.Entitys.lq_ryzl | |
| 6 | -{ | |
| 7 | - /// <summary> | |
| 8 | - /// 人员资料 | |
| 9 | - /// </summary> | |
| 10 | - [SugarTable("lq_ryzl")] | |
| 11 | - [Tenant(ClaimConst.TENANT_ID)] | |
| 12 | - public class LqRyzlEntity | |
| 13 | - { | |
| 14 | - /// <summary> | |
| 15 | - /// 序号 | |
| 16 | - /// </summary> | |
| 17 | - [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)] | |
| 18 | - public string Id { get; set; } | |
| 19 | - | |
| 20 | - /// <summary> | |
| 21 | - /// 店名 | |
| 22 | - /// </summary> | |
| 23 | - [SugarColumn(ColumnName = "dm")] | |
| 24 | - public string Dm { get; set; } | |
| 25 | - | |
| 26 | - /// <summary> | |
| 27 | - /// 职位 | |
| 28 | - /// </summary> | |
| 29 | - [SugarColumn(ColumnName = "zw")] | |
| 30 | - public string Zw { get; set; } | |
| 31 | - | |
| 32 | - /// <summary> | |
| 33 | - /// 费用分摊 | |
| 34 | - /// </summary> | |
| 35 | - [SugarColumn(ColumnName = "fyft")] | |
| 36 | - public string Fyft { get; set; } | |
| 37 | - | |
| 38 | - /// <summary> | |
| 39 | - /// 岗位分类1 | |
| 40 | - /// </summary> | |
| 41 | - [SugarColumn(ColumnName = "gwfl1")] | |
| 42 | - public string Gwfl1 { get; set; } | |
| 43 | - | |
| 44 | - /// <summary> | |
| 45 | - /// 姓名 | |
| 46 | - /// </summary> | |
| 47 | - [SugarColumn(ColumnName = "xm")] | |
| 48 | - public string Xm { get; set; } | |
| 49 | - | |
| 50 | - /// <summary> | |
| 51 | - /// 在职情况 | |
| 52 | - /// </summary> | |
| 53 | - [SugarColumn(ColumnName = "zzqk")] | |
| 54 | - public string Zzqk { get; set; } | |
| 55 | - | |
| 56 | - /// <summary> | |
| 57 | - /// 岗位分类2 | |
| 58 | - /// </summary> | |
| 59 | - [SugarColumn(ColumnName = "gwfl2")] | |
| 60 | - public string Gwfl2 { get; set; } | |
| 61 | - | |
| 62 | - /// <summary> | |
| 63 | - /// 入职时间 | |
| 64 | - /// </summary> | |
| 65 | - [SugarColumn(ColumnName = "rzsj")] | |
| 66 | - public DateTime? Rzsj { get; set; } | |
| 67 | - | |
| 68 | - /// <summary> | |
| 69 | - /// 离职时间 | |
| 70 | - /// </summary> | |
| 71 | - [SugarColumn(ColumnName = "lzsj")] | |
| 72 | - public DateTime? Lzsj { get; set; } | |
| 73 | - | |
| 74 | - /// <summary> | |
| 75 | - /// 战队 | |
| 76 | - /// </summary> | |
| 77 | - [SugarColumn(ColumnName = "zd")] | |
| 78 | - public string Zd { get; set; } | |
| 79 | - | |
| 80 | - /// <summary> | |
| 81 | - /// 预留1 | |
| 82 | - /// </summary> | |
| 83 | - [SugarColumn(ColumnName = "yl1")] | |
| 84 | - public string Yl1 { get; set; } | |
| 85 | - | |
| 86 | - /// <summary> | |
| 87 | - /// 预留2 | |
| 88 | - /// </summary> | |
| 89 | - [SugarColumn(ColumnName = "yl2")] | |
| 90 | - public string Yl2 { get; set; } | |
| 91 | - | |
| 92 | - /// <summary> | |
| 93 | - /// 预留3 | |
| 94 | - /// </summary> | |
| 95 | - [SugarColumn(ColumnName = "yl3")] | |
| 96 | - public string Yl3 { get; set; } | |
| 97 | - | |
| 98 | - /// <summary> | |
| 99 | - /// 手机号 | |
| 100 | - /// </summary> | |
| 101 | - [SugarColumn(ColumnName = "sjh")] | |
| 102 | - public string Sjh { get; set; } | |
| 103 | - | |
| 104 | - } | |
| 105 | -} | |
| 106 | 0 | \ No newline at end of file |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_tk_xsc/LqTkXscEntity.cs deleted
| 1 | -using NCC.Common.Const; | |
| 2 | -using SqlSugar; | |
| 3 | -using System; | |
| 4 | - | |
| 5 | -namespace NCC.Extend.Entitys.lq_tk_xsc | |
| 6 | -{ | |
| 7 | - /// <summary> | |
| 8 | - /// 线索池 | |
| 9 | - /// </summary> | |
| 10 | - [SugarTable("lq_tk_xsc")] | |
| 11 | - [Tenant(ClaimConst.TENANT_ID)] | |
| 12 | - public class LqTkXscEntity | |
| 13 | - { | |
| 14 | - /// <summary> | |
| 15 | - /// 客户编号 | |
| 16 | - /// </summary> | |
| 17 | - [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)] | |
| 18 | - public string Id { get; set; } | |
| 19 | - | |
| 20 | - /// <summary> | |
| 21 | - /// 创建时间 | |
| 22 | - /// </summary> | |
| 23 | - [SugarColumn(ColumnName = "tjsj")] | |
| 24 | - public DateTime? Tjsj { get; set; } | |
| 25 | - | |
| 26 | - /// <summary> | |
| 27 | - /// 拓客人员 | |
| 28 | - /// </summary> | |
| 29 | - [SugarColumn(ColumnName = "tkry")] | |
| 30 | - public string Tkry { get; set; } | |
| 31 | - | |
| 32 | - /// <summary> | |
| 33 | - /// 顾客姓名 | |
| 34 | - /// </summary> | |
| 35 | - [SugarColumn(ColumnName = "gkxm")] | |
| 36 | - public string Gkxm { get; set; } | |
| 37 | - | |
| 38 | - /// <summary> | |
| 39 | - /// 电话号码 | |
| 40 | - /// </summary> | |
| 41 | - [SugarColumn(ColumnName = "dhhm")] | |
| 42 | - public string Dhhm { get; set; } | |
| 43 | - | |
| 44 | - /// <summary> | |
| 45 | - /// 购买张数 | |
| 46 | - /// </summary> | |
| 47 | - [SugarColumn(ColumnName = "gmzs")] | |
| 48 | - public int? Gmzs { get; set; } | |
| 49 | - | |
| 50 | - /// <summary> | |
| 51 | - /// 支付方式 | |
| 52 | - /// </summary> | |
| 53 | - [SugarColumn(ColumnName = "zffs")] | |
| 54 | - public string Zffs { get; set; } | |
| 55 | - | |
| 56 | - /// <summary> | |
| 57 | - /// 是否加微信 | |
| 58 | - /// </summary> | |
| 59 | - [SugarColumn(ColumnName = "sfjwx")] | |
| 60 | - public string Sfjwx { get; set; } | |
| 61 | - | |
| 62 | - /// <summary> | |
| 63 | - /// 备注 | |
| 64 | - /// </summary> | |
| 65 | - [SugarColumn(ColumnName = "bz")] | |
| 66 | - public string Bz { get; set; } | |
| 67 | - | |
| 68 | - /// <summary> | |
| 69 | - /// 性别 | |
| 70 | - /// </summary> | |
| 71 | - [SugarColumn(ColumnName = "xb")] | |
| 72 | - public string Xb { get; set; } | |
| 73 | - | |
| 74 | - /// <summary> | |
| 75 | - /// 生日 | |
| 76 | - /// </summary> | |
| 77 | - [SugarColumn(ColumnName = "sr")] | |
| 78 | - public DateTime? Sr { get; set; } | |
| 79 | - | |
| 80 | - /// <summary> | |
| 81 | - /// 地址 | |
| 82 | - /// </summary> | |
| 83 | - [SugarColumn(ColumnName = "dz")] | |
| 84 | - public string Dz { get; set; } | |
| 85 | - | |
| 86 | - /// <summary> | |
| 87 | - /// 邮箱 | |
| 88 | - /// </summary> | |
| 89 | - [SugarColumn(ColumnName = "yx")] | |
| 90 | - public string Yx { get; set; } | |
| 91 | - | |
| 92 | - /// <summary> | |
| 93 | - /// 微信 | |
| 94 | - /// </summary> | |
| 95 | - [SugarColumn(ColumnName = "wx")] | |
| 96 | - public string Wx { get; set; } | |
| 97 | - | |
| 98 | - } | |
| 99 | -} | |
| 100 | 0 | \ No newline at end of file |
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Mapper/LqRyzlMapper.cs deleted
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Mapper/LqTkXscMapper.cs deleted
| 1 | -using NCC.Common.Helper; | |
| 2 | -using NCC.Extend.Entitys.Dto.LqTkXsc; | |
| 3 | -using Mapster; | |
| 4 | -using System.Collections.Generic; | |
| 5 | - | |
| 6 | -namespace NCC.Extend.Entitys.Mapper.LqTkXsc | |
| 7 | -{ | |
| 8 | - public class Mapper : IRegister | |
| 9 | - { | |
| 10 | - public void Register(TypeAdapterConfig config) | |
| 11 | - { | |
| 12 | - } | |
| 13 | - } | |
| 14 | -} |
netcore/src/Modularity/Extend/NCC.Extend.Interfaces/ILqRyzlService.cs deleted
netcore/src/Modularity/Extend/NCC.Extend.Interfaces/ILqTkXscService.cs deleted
netcore/src/Modularity/Extend/NCC.Extend/LqRyzlService.cs deleted
| 1 | -using NCC.Common.Core.Manager; | |
| 2 | -using NCC.Common.Enum; | |
| 3 | -using NCC.Common.Extension; | |
| 4 | -using NCC.Common.Filter; | |
| 5 | -using NCC.Dependency; | |
| 6 | -using NCC.DynamicApiController; | |
| 7 | -using NCC.FriendlyException; | |
| 8 | -using NCC.Extend.Interfaces.LqRyzl; | |
| 9 | -using Mapster; | |
| 10 | -using Microsoft.AspNetCore.Mvc; | |
| 11 | -using SqlSugar; | |
| 12 | -using System; | |
| 13 | -using System.Collections.Generic; | |
| 14 | -using System.Linq; | |
| 15 | -using System.Threading.Tasks; | |
| 16 | -using NCC.Extend.Entitys.lq_ryzl; | |
| 17 | -using NCC.Extend.Entitys.Dto.LqRyzl; | |
| 18 | -using Yitter.IdGenerator; | |
| 19 | -using NCC.Common.Helper; | |
| 20 | -using NCC.JsonSerialization; | |
| 21 | -using NCC.Common.Model.NPOI; | |
| 22 | -using NCC.Common.Configuration; | |
| 23 | -using NCC.DataEncryption; | |
| 24 | -using NCC.ClayObject; | |
| 25 | - | |
| 26 | -namespace NCC.Extend.LqRyzl | |
| 27 | -{ | |
| 28 | - /// <summary> | |
| 29 | - /// 人员资料服务 | |
| 30 | - /// </summary> | |
| 31 | - [ApiDescriptionSettings(Tag = "Extend",Name = "LqRyzl", Order = 200)] | |
| 32 | - [Route("api/Extend/[controller]")] | |
| 33 | - public class LqRyzlService : ILqRyzlService, IDynamicApiController, ITransient | |
| 34 | - { | |
| 35 | - private readonly ISqlSugarRepository<LqRyzlEntity> _lqRyzlRepository; | |
| 36 | - private readonly SqlSugarScope _db; | |
| 37 | - private readonly IUserManager _userManager; | |
| 38 | - | |
| 39 | - /// <summary> | |
| 40 | - /// 初始化一个<see cref="LqRyzlService"/>类型的新实例 | |
| 41 | - /// </summary> | |
| 42 | - public LqRyzlService( | |
| 43 | - ISqlSugarRepository<LqRyzlEntity> lqRyzlRepository, | |
| 44 | - IUserManager userManager) | |
| 45 | - { | |
| 46 | - _lqRyzlRepository = lqRyzlRepository; | |
| 47 | - _db = _lqRyzlRepository.Context; | |
| 48 | - _userManager = userManager; | |
| 49 | - } | |
| 50 | - | |
| 51 | - /// <summary> | |
| 52 | - /// 获取人员资料 | |
| 53 | - /// </summary> | |
| 54 | - /// <param name="id">参数</param> | |
| 55 | - /// <returns></returns> | |
| 56 | - [HttpGet("{id}")] | |
| 57 | - public async Task<dynamic> GetInfo(string id) | |
| 58 | - { | |
| 59 | - var entity = await _db.Queryable<LqRyzlEntity>().FirstAsync(p => p.Id == id); | |
| 60 | - var output = entity.Adapt<LqRyzlInfoOutput>(); | |
| 61 | - return output; | |
| 62 | - } | |
| 63 | - | |
| 64 | - /// <summary> | |
| 65 | - /// 获取人员资料列表 | |
| 66 | - /// </summary> | |
| 67 | - /// <param name="input">请求参数</param> | |
| 68 | - /// <returns></returns> | |
| 69 | - [HttpGet("")] | |
| 70 | - public async Task<dynamic> GetList([FromQuery] LqRyzlListQueryInput input) | |
| 71 | - { | |
| 72 | - var sidx = input.sidx == null ? "id" : input.sidx; | |
| 73 | - List<string> queryRzsj = input.rzsj != null ? input.rzsj.Split(',').ToObeject<List<string>>() : null; | |
| 74 | - DateTime? startRzsj = queryRzsj != null ? Ext.GetDateTime(queryRzsj.First()) : null; | |
| 75 | - DateTime? endRzsj = queryRzsj != null ? Ext.GetDateTime(queryRzsj.Last()) : null; | |
| 76 | - List<string> queryLzsj = input.lzsj != null ? input.lzsj.Split(',').ToObeject<List<string>>() : null; | |
| 77 | - DateTime? startLzsj = queryLzsj != null ? Ext.GetDateTime(queryLzsj.First()) : null; | |
| 78 | - DateTime? endLzsj = queryLzsj != null ? Ext.GetDateTime(queryLzsj.Last()) : null; | |
| 79 | - var data = await _db.Queryable<LqRyzlEntity>() | |
| 80 | - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) | |
| 81 | - .WhereIF(!string.IsNullOrEmpty(input.dm), p => p.Dm.Contains(input.dm)) | |
| 82 | - .WhereIF(!string.IsNullOrEmpty(input.zw), p => p.Zw.Contains(input.zw)) | |
| 83 | - .WhereIF(!string.IsNullOrEmpty(input.fyft), p => p.Fyft.Equals(input.fyft)) | |
| 84 | - .WhereIF(!string.IsNullOrEmpty(input.gwfl1), p => p.Gwfl1.Equals(input.gwfl1)) | |
| 85 | - .WhereIF(!string.IsNullOrEmpty(input.xm), p => p.Xm.Contains(input.xm)) | |
| 86 | - .WhereIF(!string.IsNullOrEmpty(input.zzqk), p => p.Zzqk.Equals(input.zzqk)) | |
| 87 | - .WhereIF(!string.IsNullOrEmpty(input.gwfl2), p => p.Gwfl2.Equals(input.gwfl2)) | |
| 88 | - .WhereIF(queryRzsj != null, p => p.Rzsj >= new DateTime(startRzsj.ToDate().Year, startRzsj.ToDate().Month, startRzsj.ToDate().Day, 0, 0, 0)) | |
| 89 | - .WhereIF(queryRzsj != null, p => p.Rzsj <= new DateTime(endRzsj.ToDate().Year, endRzsj.ToDate().Month, endRzsj.ToDate().Day, 23, 59, 59)) | |
| 90 | - .WhereIF(queryLzsj != null, p => p.Lzsj >= new DateTime(startLzsj.ToDate().Year, startLzsj.ToDate().Month, startLzsj.ToDate().Day, 0, 0, 0)) | |
| 91 | - .WhereIF(queryLzsj != null, p => p.Lzsj <= new DateTime(endLzsj.ToDate().Year, endLzsj.ToDate().Month, endLzsj.ToDate().Day, 23, 59, 59)) | |
| 92 | - .WhereIF(!string.IsNullOrEmpty(input.zd), p => p.Zd.Contains(input.zd)) | |
| 93 | - .WhereIF(!string.IsNullOrEmpty(input.yl1), p => p.Yl1.Contains(input.yl1)) | |
| 94 | - .WhereIF(!string.IsNullOrEmpty(input.yl2), p => p.Yl2.Contains(input.yl2)) | |
| 95 | - .WhereIF(!string.IsNullOrEmpty(input.yl3), p => p.Yl3.Contains(input.yl3)) | |
| 96 | - .WhereIF(!string.IsNullOrEmpty(input.sjh), p => p.Sjh.Contains(input.sjh)) | |
| 97 | - .Select(it=> new LqRyzlListOutput | |
| 98 | - { | |
| 99 | - id = it.Id, | |
| 100 | - dm=it.Dm, | |
| 101 | - zw=it.Zw, | |
| 102 | - fyft=it.Fyft, | |
| 103 | - gwfl1=it.Gwfl1, | |
| 104 | - xm=it.Xm, | |
| 105 | - zzqk=it.Zzqk, | |
| 106 | - gwfl2=it.Gwfl2, | |
| 107 | - rzsj=it.Rzsj, | |
| 108 | - lzsj=it.Lzsj, | |
| 109 | - zd=it.Zd, | |
| 110 | - yl1=it.Yl1, | |
| 111 | - yl2=it.Yl2, | |
| 112 | - yl3=it.Yl3, | |
| 113 | - sjh=it.Sjh, | |
| 114 | - }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize); | |
| 115 | - return PageResult<LqRyzlListOutput>.SqlSugarPageResult(data); | |
| 116 | - } | |
| 117 | - | |
| 118 | - /// <summary> | |
| 119 | - /// 新建人员资料 | |
| 120 | - /// </summary> | |
| 121 | - /// <param name="input">参数</param> | |
| 122 | - /// <returns></returns> | |
| 123 | - [HttpPost("")] | |
| 124 | - public async Task Create([FromBody] LqRyzlCrInput input) | |
| 125 | - { | |
| 126 | - var userInfo = await _userManager.GetUserInfo(); | |
| 127 | - var entity = input.Adapt<LqRyzlEntity>(); | |
| 128 | - entity.Id = YitIdHelper.NextId().ToString(); | |
| 129 | - var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync(); | |
| 130 | - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000); | |
| 131 | - } | |
| 132 | - | |
| 133 | - /// <summary> | |
| 134 | - /// 获取人员资料无分页列表 | |
| 135 | - /// </summary> | |
| 136 | - /// <param name="input">请求参数</param> | |
| 137 | - /// <returns></returns> | |
| 138 | - [NonAction] | |
| 139 | - public async Task<dynamic> GetNoPagingList([FromQuery] LqRyzlListQueryInput input) | |
| 140 | - { | |
| 141 | - var sidx = input.sidx == null ? "id" : input.sidx; | |
| 142 | - List<string> queryRzsj = input.rzsj != null ? input.rzsj.Split(',').ToObeject<List<string>>() : null; | |
| 143 | - DateTime? startRzsj = queryRzsj != null ? Ext.GetDateTime(queryRzsj.First()) : null; | |
| 144 | - DateTime? endRzsj = queryRzsj != null ? Ext.GetDateTime(queryRzsj.Last()) : null; | |
| 145 | - List<string> queryLzsj = input.lzsj != null ? input.lzsj.Split(',').ToObeject<List<string>>() : null; | |
| 146 | - DateTime? startLzsj = queryLzsj != null ? Ext.GetDateTime(queryLzsj.First()) : null; | |
| 147 | - DateTime? endLzsj = queryLzsj != null ? Ext.GetDateTime(queryLzsj.Last()) : null; | |
| 148 | - var data = await _db.Queryable<LqRyzlEntity>() | |
| 149 | - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) | |
| 150 | - .WhereIF(!string.IsNullOrEmpty(input.dm), p => p.Dm.Contains(input.dm)) | |
| 151 | - .WhereIF(!string.IsNullOrEmpty(input.zw), p => p.Zw.Contains(input.zw)) | |
| 152 | - .WhereIF(!string.IsNullOrEmpty(input.fyft), p => p.Fyft.Equals(input.fyft)) | |
| 153 | - .WhereIF(!string.IsNullOrEmpty(input.gwfl1), p => p.Gwfl1.Equals(input.gwfl1)) | |
| 154 | - .WhereIF(!string.IsNullOrEmpty(input.xm), p => p.Xm.Contains(input.xm)) | |
| 155 | - .WhereIF(!string.IsNullOrEmpty(input.zzqk), p => p.Zzqk.Equals(input.zzqk)) | |
| 156 | - .WhereIF(!string.IsNullOrEmpty(input.gwfl2), p => p.Gwfl2.Equals(input.gwfl2)) | |
| 157 | - .WhereIF(queryRzsj != null, p => p.Rzsj >= new DateTime(startRzsj.ToDate().Year, startRzsj.ToDate().Month, startRzsj.ToDate().Day, 0, 0, 0)) | |
| 158 | - .WhereIF(queryRzsj != null, p => p.Rzsj <= new DateTime(endRzsj.ToDate().Year, endRzsj.ToDate().Month, endRzsj.ToDate().Day, 23, 59, 59)) | |
| 159 | - .WhereIF(queryLzsj != null, p => p.Lzsj >= new DateTime(startLzsj.ToDate().Year, startLzsj.ToDate().Month, startLzsj.ToDate().Day, 0, 0, 0)) | |
| 160 | - .WhereIF(queryLzsj != null, p => p.Lzsj <= new DateTime(endLzsj.ToDate().Year, endLzsj.ToDate().Month, endLzsj.ToDate().Day, 23, 59, 59)) | |
| 161 | - .WhereIF(!string.IsNullOrEmpty(input.zd), p => p.Zd.Contains(input.zd)) | |
| 162 | - .WhereIF(!string.IsNullOrEmpty(input.yl1), p => p.Yl1.Contains(input.yl1)) | |
| 163 | - .WhereIF(!string.IsNullOrEmpty(input.yl2), p => p.Yl2.Contains(input.yl2)) | |
| 164 | - .WhereIF(!string.IsNullOrEmpty(input.yl3), p => p.Yl3.Contains(input.yl3)) | |
| 165 | - .WhereIF(!string.IsNullOrEmpty(input.sjh), p => p.Sjh.Contains(input.sjh)) | |
| 166 | - .Select(it=> new LqRyzlListOutput | |
| 167 | - { | |
| 168 | - id = it.Id, | |
| 169 | - dm=it.Dm, | |
| 170 | - zw=it.Zw, | |
| 171 | - fyft=it.Fyft, | |
| 172 | - gwfl1=it.Gwfl1, | |
| 173 | - xm=it.Xm, | |
| 174 | - zzqk=it.Zzqk, | |
| 175 | - gwfl2=it.Gwfl2, | |
| 176 | - rzsj=it.Rzsj, | |
| 177 | - lzsj=it.Lzsj, | |
| 178 | - zd=it.Zd, | |
| 179 | - yl1=it.Yl1, | |
| 180 | - yl2=it.Yl2, | |
| 181 | - yl3=it.Yl3, | |
| 182 | - sjh=it.Sjh, | |
| 183 | - }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync(); | |
| 184 | - return data; | |
| 185 | - } | |
| 186 | - | |
| 187 | - /// <summary> | |
| 188 | - /// 导出人员资料 | |
| 189 | - /// </summary> | |
| 190 | - /// <param name="input">请求参数</param> | |
| 191 | - /// <returns></returns> | |
| 192 | - [HttpGet("Actions/Export")] | |
| 193 | - public async Task<dynamic> Export([FromQuery] LqRyzlListQueryInput input) | |
| 194 | - { | |
| 195 | - var userInfo = await _userManager.GetUserInfo(); | |
| 196 | - var exportData = new List<LqRyzlListOutput>(); | |
| 197 | - if (input.dataType == 0) | |
| 198 | - { | |
| 199 | - var data = Clay.Object(await this.GetList(input)); | |
| 200 | - exportData = data.Solidify<PageResult<LqRyzlListOutput>>().list; | |
| 201 | - } | |
| 202 | - else | |
| 203 | - { | |
| 204 | - exportData = await this.GetNoPagingList(input); | |
| 205 | - } | |
| 206 | - List<ParamsModel> paramList = "[{\"value\":\"序号\",\"field\":\"id\"},{\"value\":\"店名\",\"field\":\"dm\"},{\"value\":\"职位\",\"field\":\"zw\"},{\"value\":\"费用分摊\",\"field\":\"fyft\"},{\"value\":\"岗位分类1\",\"field\":\"gwfl1\"},{\"value\":\"姓名\",\"field\":\"xm\"},{\"value\":\"在职情况\",\"field\":\"zzqk\"},{\"value\":\"岗位分类2\",\"field\":\"gwfl2\"},{\"value\":\"入职时间\",\"field\":\"rzsj\"},{\"value\":\"离职时间\",\"field\":\"lzsj\"},{\"value\":\"战队\",\"field\":\"zd\"},{\"value\":\"预留1\",\"field\":\"yl1\"},{\"value\":\"预留2\",\"field\":\"yl2\"},{\"value\":\"预留3\",\"field\":\"yl3\"},{\"value\":\"手机号\",\"field\":\"sjh\"},]".ToList<ParamsModel>(); | |
| 207 | - ExcelConfig excelconfig = new ExcelConfig(); | |
| 208 | - excelconfig.FileName = "人员资料.xls"; | |
| 209 | - excelconfig.HeadFont = "微软雅黑"; | |
| 210 | - excelconfig.HeadPoint = 10; | |
| 211 | - excelconfig.IsAllSizeColumn = true; | |
| 212 | - excelconfig.ColumnModel = new List<ExcelColumnModel>(); | |
| 213 | - List<string> selectKeyList = input.selectKey.Split(',').ToList(); | |
| 214 | - foreach (var item in selectKeyList) | |
| 215 | - { | |
| 216 | - var isExist = paramList.Find(p => p.field == item); | |
| 217 | - if (isExist != null) | |
| 218 | - { | |
| 219 | - excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = isExist.field, ExcelColumn = isExist.value }); | |
| 220 | - } | |
| 221 | - } | |
| 222 | - var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName; | |
| 223 | - ExcelExportHelper<LqRyzlListOutput>.Export(exportData, excelconfig, addPath); | |
| 224 | - var fileName = _userManager.UserId + "|" + addPath + "|xls"; | |
| 225 | - var output = new | |
| 226 | - { | |
| 227 | - name = excelconfig.FileName, | |
| 228 | - url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") | |
| 229 | - }; | |
| 230 | - return output; | |
| 231 | - } | |
| 232 | - | |
| 233 | - /// <summary> | |
| 234 | - /// 批量删除人员资料 | |
| 235 | - /// </summary> | |
| 236 | - /// <param name="ids">主键数组</param> | |
| 237 | - /// <returns></returns> | |
| 238 | - [HttpPost("batchRemove")] | |
| 239 | - public async Task BatchRemove([FromBody] List<string> ids) | |
| 240 | - { | |
| 241 | - var entitys = await _db.Queryable<LqRyzlEntity>().In(it => it.Id, ids).ToListAsync(); | |
| 242 | - if (entitys.Count > 0) | |
| 243 | - { | |
| 244 | - try | |
| 245 | - { | |
| 246 | - //开启事务 | |
| 247 | - _db.BeginTran(); | |
| 248 | - //批量删除人员资料 | |
| 249 | - await _db.Deleteable<LqRyzlEntity>().In(d => d.Id,ids).ExecuteCommandAsync(); | |
| 250 | - //关闭事务 | |
| 251 | - _db.CommitTran(); | |
| 252 | - } | |
| 253 | - catch (Exception) | |
| 254 | - { | |
| 255 | - //回滚事务 | |
| 256 | - _db.RollbackTran(); | |
| 257 | - throw NCCException.Oh(ErrorCode.COM1002); | |
| 258 | - } | |
| 259 | - } | |
| 260 | - } | |
| 261 | - | |
| 262 | - /// <summary> | |
| 263 | - /// 更新人员资料 | |
| 264 | - /// </summary> | |
| 265 | - /// <param name="id">主键</param> | |
| 266 | - /// <param name="input">参数</param> | |
| 267 | - /// <returns></returns> | |
| 268 | - [HttpPut("{id}")] | |
| 269 | - public async Task Update(string id, [FromBody] LqRyzlUpInput input) | |
| 270 | - { | |
| 271 | - var entity = input.Adapt<LqRyzlEntity>(); | |
| 272 | - var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); | |
| 273 | - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001); | |
| 274 | - } | |
| 275 | - | |
| 276 | - /// <summary> | |
| 277 | - /// 删除人员资料 | |
| 278 | - /// </summary> | |
| 279 | - /// <returns></returns> | |
| 280 | - [HttpDelete("{id}")] | |
| 281 | - public async Task Delete(string id) | |
| 282 | - { | |
| 283 | - var entity = await _db.Queryable<LqRyzlEntity>().FirstAsync(p => p.Id == id); | |
| 284 | - _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005); | |
| 285 | - var isOk = await _db.Deleteable<LqRyzlEntity>().Where(d => d.Id == id).ExecuteCommandAsync(); | |
| 286 | - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1002); | |
| 287 | - } | |
| 288 | - } | |
| 289 | -} |
netcore/src/Modularity/Extend/NCC.Extend/LqTkXscService.cs deleted
| 1 | -using System; | |
| 2 | -using System.Collections.Generic; | |
| 3 | -using System.Linq; | |
| 4 | -using System.Threading.Tasks; | |
| 5 | -using Mapster; | |
| 6 | -using Microsoft.AspNetCore.Mvc; | |
| 7 | -using NCC.ClayObject; | |
| 8 | -using NCC.Common.Configuration; | |
| 9 | -using NCC.Common.Core.Manager; | |
| 10 | -using NCC.Common.Enum; | |
| 11 | -using NCC.Common.Extension; | |
| 12 | -using NCC.Common.Filter; | |
| 13 | -using NCC.Common.Helper; | |
| 14 | -using NCC.Common.Model.NPOI; | |
| 15 | -using NCC.DataEncryption; | |
| 16 | -using NCC.Dependency; | |
| 17 | -using NCC.DynamicApiController; | |
| 18 | -using NCC.Extend.Entitys.Dto.LqTkXsc; | |
| 19 | -using NCC.Extend.Entitys.lq_tk_xsc; | |
| 20 | -using NCC.Extend.Interfaces.LqTkXsc; | |
| 21 | -using NCC.FriendlyException; | |
| 22 | -using NCC.JsonSerialization; | |
| 23 | -using SqlSugar; | |
| 24 | -using Yitter.IdGenerator; | |
| 25 | - | |
| 26 | -namespace NCC.Extend.LqTkXsc | |
| 27 | -{ | |
| 28 | - /// <summary> | |
| 29 | - /// 线索池服务 | |
| 30 | - /// </summary> | |
| 31 | - [ApiDescriptionSettings(Tag = "Extend", Name = "LqTkXsc", Order = 200)] | |
| 32 | - [Route("api/Extend/[controller]")] | |
| 33 | - public class LqTkXscService : ILqTkXscService, IDynamicApiController, ITransient | |
| 34 | - { | |
| 35 | - private readonly ISqlSugarRepository<LqTkXscEntity> _lqTkXscRepository; | |
| 36 | - private readonly SqlSugarScope _db; | |
| 37 | - private readonly IUserManager _userManager; | |
| 38 | - | |
| 39 | - /// <summary> | |
| 40 | - /// 初始化一个<see cref="LqTkXscService"/>类型的新实例 | |
| 41 | - /// </summary> | |
| 42 | - public LqTkXscService(ISqlSugarRepository<LqTkXscEntity> lqTkXscRepository, IUserManager userManager) | |
| 43 | - { | |
| 44 | - _lqTkXscRepository = lqTkXscRepository; | |
| 45 | - _db = _lqTkXscRepository.Context; | |
| 46 | - _userManager = userManager; | |
| 47 | - } | |
| 48 | - | |
| 49 | - /// <summary> | |
| 50 | - /// 获取线索池 | |
| 51 | - /// </summary> | |
| 52 | - /// <param name="id">参数</param> | |
| 53 | - /// <returns></returns> | |
| 54 | - [HttpGet("{id}")] | |
| 55 | - public async Task<dynamic> GetInfo(string id) | |
| 56 | - { | |
| 57 | - var entity = await _db.Queryable<LqTkXscEntity>().FirstAsync(p => p.Id == id); | |
| 58 | - var output = entity.Adapt<LqTkXscInfoOutput>(); | |
| 59 | - return output; | |
| 60 | - } | |
| 61 | - | |
| 62 | - /// <summary> | |
| 63 | - /// 获取线索池列表 | |
| 64 | - /// </summary> | |
| 65 | - /// <param name="input">请求参数</param> | |
| 66 | - /// <returns></returns> | |
| 67 | - [HttpGet("")] | |
| 68 | - public async Task<dynamic> GetList([FromQuery] LqTkXscListQueryInput input) | |
| 69 | - { | |
| 70 | - var sidx = input.sidx == null ? "id" : input.sidx; | |
| 71 | - List<string> queryTjsj = input.tjsj != null ? input.tjsj.Split(',').ToObeject<List<string>>() : null; | |
| 72 | - DateTime? startTjsj = queryTjsj != null ? Ext.GetDateTime(queryTjsj.First()) : null; | |
| 73 | - DateTime? endTjsj = queryTjsj != null ? Ext.GetDateTime(queryTjsj.Last()) : null; | |
| 74 | - List<string> querySr = input.sr != null ? input.sr.Split(',').ToObeject<List<string>>() : null; | |
| 75 | - DateTime? startSr = querySr != null ? Ext.GetDateTime(querySr.First()) : null; | |
| 76 | - DateTime? endSr = querySr != null ? Ext.GetDateTime(querySr.Last()) : null; | |
| 77 | - var data = await _db.Queryable<LqTkXscEntity>() | |
| 78 | - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) | |
| 79 | - .WhereIF(queryTjsj != null, p => p.Tjsj >= new DateTime(startTjsj.ToDate().Year, startTjsj.ToDate().Month, startTjsj.ToDate().Day, 0, 0, 0)) | |
| 80 | - .WhereIF(queryTjsj != null, p => p.Tjsj <= new DateTime(endTjsj.ToDate().Year, endTjsj.ToDate().Month, endTjsj.ToDate().Day, 23, 59, 59)) | |
| 81 | - .WhereIF(!string.IsNullOrEmpty(input.tkry), p => p.Tkry.Contains(input.tkry)) | |
| 82 | - .WhereIF(!string.IsNullOrEmpty(input.gkxm), p => p.Gkxm.Contains(input.gkxm)) | |
| 83 | - .WhereIF(!string.IsNullOrEmpty(input.dhhm), p => p.Dhhm.Contains(input.dhhm)) | |
| 84 | - .WhereIF(!string.IsNullOrEmpty(input.gmzs), p => p.Gmzs.Equals(input.gmzs)) | |
| 85 | - .WhereIF(!string.IsNullOrEmpty(input.zffs), p => p.Zffs.Equals(input.zffs)) | |
| 86 | - .WhereIF(!string.IsNullOrEmpty(input.sfjwx), p => p.Sfjwx.Equals(input.sfjwx)) | |
| 87 | - .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz)) | |
| 88 | - .WhereIF(!string.IsNullOrEmpty(input.xb), p => p.Xb.Equals(input.xb)) | |
| 89 | - .WhereIF(querySr != null, p => p.Sr >= new DateTime(startSr.ToDate().Year, startSr.ToDate().Month, startSr.ToDate().Day, 0, 0, 0)) | |
| 90 | - .WhereIF(querySr != null, p => p.Sr <= new DateTime(endSr.ToDate().Year, endSr.ToDate().Month, endSr.ToDate().Day, 23, 59, 59)) | |
| 91 | - .WhereIF(!string.IsNullOrEmpty(input.dz), p => p.Dz.Contains(input.dz)) | |
| 92 | - .WhereIF(!string.IsNullOrEmpty(input.yx), p => p.Yx.Contains(input.yx)) | |
| 93 | - .WhereIF(!string.IsNullOrEmpty(input.wx), p => p.Wx.Contains(input.wx)) | |
| 94 | - .Select(it => new LqTkXscListOutput | |
| 95 | - { | |
| 96 | - id = it.Id, | |
| 97 | - tjsj = it.Tjsj, | |
| 98 | - tkry = it.Tkry, | |
| 99 | - gkxm = it.Gkxm, | |
| 100 | - dhhm = it.Dhhm, | |
| 101 | - gmzs = it.Gmzs, | |
| 102 | - zffs = it.Zffs, | |
| 103 | - sfjwx = it.Sfjwx, | |
| 104 | - bz = it.Bz, | |
| 105 | - xb = it.Xb, | |
| 106 | - sr = it.Sr, | |
| 107 | - dz = it.Dz, | |
| 108 | - yx = it.Yx, | |
| 109 | - wx = it.Wx, | |
| 110 | - }) | |
| 111 | - .MergeTable() | |
| 112 | - .OrderBy(sidx + " " + input.sort) | |
| 113 | - .ToPagedListAsync(input.currentPage, input.pageSize); | |
| 114 | - return PageResult<LqTkXscListOutput>.SqlSugarPageResult(data); | |
| 115 | - } | |
| 116 | - | |
| 117 | - /// <summary> | |
| 118 | - /// 新建线索池 | |
| 119 | - /// </summary> | |
| 120 | - /// <param name="input">参数</param> | |
| 121 | - /// <returns></returns> | |
| 122 | - [HttpPost("")] | |
| 123 | - public async Task Create([FromBody] LqTkXscCrInput input) | |
| 124 | - { | |
| 125 | - var userInfo = await _userManager.GetUserInfo(); | |
| 126 | - var entity = input.Adapt<LqTkXscEntity>(); | |
| 127 | - entity.Id = YitIdHelper.NextId().ToString(); | |
| 128 | - var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync(); | |
| 129 | - if (!(isOk > 0)) | |
| 130 | - throw NCCException.Oh(ErrorCode.COM1000); | |
| 131 | - } | |
| 132 | - | |
| 133 | - /// <summary> | |
| 134 | - /// 获取线索池无分页列表 | |
| 135 | - /// </summary> | |
| 136 | - /// <param name="input">请求参数</param> | |
| 137 | - /// <returns></returns> | |
| 138 | - [NonAction] | |
| 139 | - public async Task<dynamic> GetNoPagingList([FromQuery] LqTkXscListQueryInput input) | |
| 140 | - { | |
| 141 | - var sidx = input.sidx == null ? "id" : input.sidx; | |
| 142 | - List<string> queryTjsj = input.tjsj != null ? input.tjsj.Split(',').ToObeject<List<string>>() : null; | |
| 143 | - DateTime? startTjsj = queryTjsj != null ? Ext.GetDateTime(queryTjsj.First()) : null; | |
| 144 | - DateTime? endTjsj = queryTjsj != null ? Ext.GetDateTime(queryTjsj.Last()) : null; | |
| 145 | - List<string> querySr = input.sr != null ? input.sr.Split(',').ToObeject<List<string>>() : null; | |
| 146 | - DateTime? startSr = querySr != null ? Ext.GetDateTime(querySr.First()) : null; | |
| 147 | - DateTime? endSr = querySr != null ? Ext.GetDateTime(querySr.Last()) : null; | |
| 148 | - var data = await _db.Queryable<LqTkXscEntity>() | |
| 149 | - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) | |
| 150 | - .WhereIF(queryTjsj != null, p => p.Tjsj >= new DateTime(startTjsj.ToDate().Year, startTjsj.ToDate().Month, startTjsj.ToDate().Day, 0, 0, 0)) | |
| 151 | - .WhereIF(queryTjsj != null, p => p.Tjsj <= new DateTime(endTjsj.ToDate().Year, endTjsj.ToDate().Month, endTjsj.ToDate().Day, 23, 59, 59)) | |
| 152 | - .WhereIF(!string.IsNullOrEmpty(input.tkry), p => p.Tkry.Contains(input.tkry)) | |
| 153 | - .WhereIF(!string.IsNullOrEmpty(input.gkxm), p => p.Gkxm.Contains(input.gkxm)) | |
| 154 | - .WhereIF(!string.IsNullOrEmpty(input.dhhm), p => p.Dhhm.Contains(input.dhhm)) | |
| 155 | - .WhereIF(!string.IsNullOrEmpty(input.gmzs), p => p.Gmzs.Equals(input.gmzs)) | |
| 156 | - .WhereIF(!string.IsNullOrEmpty(input.zffs), p => p.Zffs.Equals(input.zffs)) | |
| 157 | - .WhereIF(!string.IsNullOrEmpty(input.sfjwx), p => p.Sfjwx.Equals(input.sfjwx)) | |
| 158 | - .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz)) | |
| 159 | - .WhereIF(!string.IsNullOrEmpty(input.xb), p => p.Xb.Equals(input.xb)) | |
| 160 | - .WhereIF(querySr != null, p => p.Sr >= new DateTime(startSr.ToDate().Year, startSr.ToDate().Month, startSr.ToDate().Day, 0, 0, 0)) | |
| 161 | - .WhereIF(querySr != null, p => p.Sr <= new DateTime(endSr.ToDate().Year, endSr.ToDate().Month, endSr.ToDate().Day, 23, 59, 59)) | |
| 162 | - .WhereIF(!string.IsNullOrEmpty(input.dz), p => p.Dz.Contains(input.dz)) | |
| 163 | - .WhereIF(!string.IsNullOrEmpty(input.yx), p => p.Yx.Contains(input.yx)) | |
| 164 | - .WhereIF(!string.IsNullOrEmpty(input.wx), p => p.Wx.Contains(input.wx)) | |
| 165 | - .Select(it => new LqTkXscListOutput | |
| 166 | - { | |
| 167 | - id = it.Id, | |
| 168 | - tjsj = it.Tjsj, | |
| 169 | - tkry = it.Tkry, | |
| 170 | - gkxm = it.Gkxm, | |
| 171 | - dhhm = it.Dhhm, | |
| 172 | - gmzs = it.Gmzs, | |
| 173 | - zffs = it.Zffs, | |
| 174 | - sfjwx = it.Sfjwx, | |
| 175 | - bz = it.Bz, | |
| 176 | - xb = it.Xb, | |
| 177 | - sr = it.Sr, | |
| 178 | - dz = it.Dz, | |
| 179 | - yx = it.Yx, | |
| 180 | - wx = it.Wx, | |
| 181 | - }) | |
| 182 | - .MergeTable() | |
| 183 | - .OrderBy(sidx + " " + input.sort) | |
| 184 | - .ToListAsync(); | |
| 185 | - return data; | |
| 186 | - } | |
| 187 | - | |
| 188 | - /// <summary> | |
| 189 | - /// 导出线索池 | |
| 190 | - /// </summary> | |
| 191 | - /// <param name="input">请求参数</param> | |
| 192 | - /// <returns></returns> | |
| 193 | - [HttpGet("Actions/Export")] | |
| 194 | - public async Task<dynamic> Export([FromQuery] LqTkXscListQueryInput input) | |
| 195 | - { | |
| 196 | - var userInfo = await _userManager.GetUserInfo(); | |
| 197 | - var exportData = new List<LqTkXscListOutput>(); | |
| 198 | - if (input.dataType == 0) | |
| 199 | - { | |
| 200 | - var data = Clay.Object(await this.GetList(input)); | |
| 201 | - exportData = data.Solidify<PageResult<LqTkXscListOutput>>().list; | |
| 202 | - } | |
| 203 | - else | |
| 204 | - { | |
| 205 | - exportData = await this.GetNoPagingList(input); | |
| 206 | - } | |
| 207 | - List<ParamsModel> paramList = | |
| 208 | - "[{\"value\":\"客户编号\",\"field\":\"id\"},{\"value\":\"创建时间\",\"field\":\"tjsj\"},{\"value\":\"拓客人员\",\"field\":\"tkry\"},{\"value\":\"顾客姓名\",\"field\":\"gkxm\"},{\"value\":\"电话号码\",\"field\":\"dhhm\"},{\"value\":\"购买张数\",\"field\":\"gmzs\"},{\"value\":\"支付方式\",\"field\":\"zffs\"},{\"value\":\"是否加微信\",\"field\":\"sfjwx\"},{\"value\":\"备注\",\"field\":\"bz\"},{\"value\":\"性别\",\"field\":\"xb\"},{\"value\":\"生日\",\"field\":\"sr\"},{\"value\":\"地址\",\"field\":\"dz\"},{\"value\":\"邮箱\",\"field\":\"yx\"},{\"value\":\"微信\",\"field\":\"wx\"},]".ToList<ParamsModel>(); | |
| 209 | - ExcelConfig excelconfig = new ExcelConfig(); | |
| 210 | - excelconfig.FileName = "线索池.xls"; | |
| 211 | - excelconfig.HeadFont = "微软雅黑"; | |
| 212 | - excelconfig.HeadPoint = 10; | |
| 213 | - excelconfig.IsAllSizeColumn = true; | |
| 214 | - excelconfig.ColumnModel = new List<ExcelColumnModel>(); | |
| 215 | - List<string> selectKeyList = input.selectKey.Split(',').ToList(); | |
| 216 | - foreach (var item in selectKeyList) | |
| 217 | - { | |
| 218 | - var isExist = paramList.Find(p => p.field == item); | |
| 219 | - if (isExist != null) | |
| 220 | - { | |
| 221 | - excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = isExist.field, ExcelColumn = isExist.value }); | |
| 222 | - } | |
| 223 | - } | |
| 224 | - var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName; | |
| 225 | - ExcelExportHelper<LqTkXscListOutput>.Export(exportData, excelconfig, addPath); | |
| 226 | - var fileName = _userManager.UserId + "|" + addPath + "|xls"; | |
| 227 | - var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") }; | |
| 228 | - return output; | |
| 229 | - } | |
| 230 | - | |
| 231 | - /// <summary> | |
| 232 | - /// 批量删除线索池 | |
| 233 | - /// </summary> | |
| 234 | - /// <param name="ids">主键数组</param> | |
| 235 | - /// <returns></returns> | |
| 236 | - [HttpPost("batchRemove")] | |
| 237 | - public async Task BatchRemove([FromBody] List<string> ids) | |
| 238 | - { | |
| 239 | - var entitys = await _db.Queryable<LqTkXscEntity>().In(it => it.Id, ids).ToListAsync(); | |
| 240 | - if (entitys.Count > 0) | |
| 241 | - { | |
| 242 | - try | |
| 243 | - { | |
| 244 | - //开启事务 | |
| 245 | - _db.BeginTran(); | |
| 246 | - //批量删除线索池 | |
| 247 | - await _db.Deleteable<LqTkXscEntity>().In(d => d.Id, ids).ExecuteCommandAsync(); | |
| 248 | - //关闭事务 | |
| 249 | - _db.CommitTran(); | |
| 250 | - } | |
| 251 | - catch (Exception) | |
| 252 | - { | |
| 253 | - //回滚事务 | |
| 254 | - _db.RollbackTran(); | |
| 255 | - throw NCCException.Oh(ErrorCode.COM1002); | |
| 256 | - } | |
| 257 | - } | |
| 258 | - } | |
| 259 | - | |
| 260 | - /// <summary> | |
| 261 | - /// 更新线索池 | |
| 262 | - /// </summary> | |
| 263 | - /// <param name="id">主键</param> | |
| 264 | - /// <param name="input">参数</param> | |
| 265 | - /// <returns></returns> | |
| 266 | - [HttpPut("{id}")] | |
| 267 | - public async Task Update(string id, [FromBody] LqTkXscUpInput input) | |
| 268 | - { | |
| 269 | - var entity = input.Adapt<LqTkXscEntity>(); | |
| 270 | - var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); | |
| 271 | - if (!(isOk > 0)) | |
| 272 | - throw NCCException.Oh(ErrorCode.COM1001); | |
| 273 | - } | |
| 274 | - | |
| 275 | - /// <summary> | |
| 276 | - /// 删除线索池 | |
| 277 | - /// </summary> | |
| 278 | - /// <returns></returns> | |
| 279 | - [HttpDelete("{id}")] | |
| 280 | - public async Task Delete(string id) | |
| 281 | - { | |
| 282 | - var entity = await _db.Queryable<LqTkXscEntity>().FirstAsync(p => p.Id == id); | |
| 283 | - _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005); | |
| 284 | - var isOk = await _db.Deleteable<LqTkXscEntity>().Where(d => d.Id == id).ExecuteCommandAsync(); | |
| 285 | - if (!(isOk > 0)) | |
| 286 | - throw NCCException.Oh(ErrorCode.COM1002); | |
| 287 | - } | |
| 288 | - } | |
| 289 | -} |
netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs
| ... | ... | @@ -21,7 +21,6 @@ using NCC.Extend.Entitys.lq_event; |
| 21 | 21 | using NCC.Extend.Entitys.lq_eventuser; |
| 22 | 22 | using NCC.Extend.Entitys.lq_khxx; |
| 23 | 23 | using NCC.Extend.Entitys.lq_mdxx; |
| 24 | -using NCC.Extend.Entitys.lq_ryzl; | |
| 25 | 24 | using NCC.Extend.Entitys.lq_tkjlb; |
| 26 | 25 | using NCC.Extend.Interfaces.LqTkjlb; |
| 27 | 26 | using NCC.FriendlyException; | ... | ... |