Commit 0ef471940284ab1bd1c589f0becc0583a33a0fb4

Authored by “wangming”
1 parent 61e869f0

Refactor LqHytkHytkService and related DTOs to improve clarity and structure; up…

…date multiple .DS_Store files for project consistency.
Showing 34 changed files with 1868 additions and 458 deletions
.DS_Store
No preview for this file type
netcore/netcore/.DS_Store
No preview for this file type
netcore/src/.DS_Store
No preview for this file type
netcore/src/Application/.DS_Store
No preview for this file type
netcore/src/Application/NCC.API/.DS_Store
No preview for this file type
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventCrInput.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.ComponentModel.DataAnnotations;
  4 +using NCC.Extend.Entitys.Dto.LqEventUser;
  5 +
  6 +namespace NCC.Extend.Entitys.Dto.LqEvent
  7 +{
  8 + /// <summary>
  9 + /// 拓客活动创建输入参数
  10 + /// </summary>
  11 + /// <remarks>
  12 + /// 用于创建新拓客活动的参数类,包含活动基础信息和参与成员列表。
  13 + /// 系统会自动生成活动ID,无需手动指定。
  14 + /// </remarks>
  15 + public class LqEventCrInput
  16 + {
  17 + /// <summary>
  18 + /// 活动名称
  19 + /// </summary>
  20 + /// <remarks>
  21 + /// 拓客活动的名称,必填字段
  22 + /// 最大长度:255个字符
  23 + /// 示例:春节拓客活动、夏季促销活动
  24 + /// </remarks>
  25 + [Required(ErrorMessage = "活动名称不能为空")]
  26 + [StringLength(255, ErrorMessage = "活动名称长度不能超过255个字符")]
  27 + public string EventName { get; set; }
  28 +
  29 + /// <summary>
  30 + /// 开始时间
  31 + /// </summary>
  32 + /// <remarks>
  33 + /// 拓客活动的开始时间,可选字段
  34 + /// 格式:yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd
  35 + /// 示例:2024-01-15 09:00:00
  36 + /// </remarks>
  37 + public DateTime? StartTime { get; set; }
  38 +
  39 + /// <summary>
  40 + /// 结束时间
  41 + /// </summary>
  42 + /// <remarks>
  43 + /// 拓客活动的结束时间,可选字段
  44 + /// 格式:yyyy-MM-dd HH:mm:ss 或 yyyy-MM-dd
  45 + /// 示例:2024-01-20 18:00:00
  46 + /// 建议:结束时间应晚于开始时间
  47 + /// </remarks>
  48 + public DateTime? EndTime { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 活动负责人
  52 + /// </summary>
  53 + /// <remarks>
  54 + /// 拓客活动的负责人id
  55 + /// 最大长度:255个字符
  56 + /// </remarks>
  57 + [StringLength(255, ErrorMessage = "活动负责人长度不能超过255个字符")]
  58 + public string EventCoordinator { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 活动编号
  62 + /// </summary>
  63 + /// <remarks>
  64 + /// 拓客活动的编号,可选字段
  65 + /// 最大长度:255个字符
  66 + /// 建议格式:TK + 年份 + 序号,如:TK2024001
  67 + /// </remarks>
  68 + [StringLength(255, ErrorMessage = "活动编号长度不能超过255个字符")]
  69 + public string EventNumber { get; set; }
  70 +
  71 + /// <summary>
  72 + /// 拓客活动成员列表
  73 + /// </summary>
  74 + /// <remarks>
  75 + /// 参与拓客活动的成员列表,可选字段
  76 + /// 可以为空,表示暂时不添加成员
  77 + /// 每个成员包含:用户ID、部门ID、战队名称等信息
  78 + /// </remarks>
  79 + public List<LqEventUserCrInput> Members { get; set; } = new List<LqEventUserCrInput>();
  80 + }
  81 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventInfoOutput.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using NCC.Extend.Entitys.Dto.LqEventUser;
  4 +
  5 +namespace NCC.Extend.Entitys.Dto.LqEvent
  6 +{
  7 + /// <summary>
  8 + /// 拓客活动详情输出
  9 + /// </summary>
  10 + public class LqEventInfoOutput
  11 + {
  12 + /// <summary>
  13 + /// 主键ID
  14 + /// </summary>
  15 + public string id { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 活动名称
  19 + /// </summary>
  20 + public string eventName { get; set; }
  21 +
  22 + /// <summary>
  23 + /// 开始时间
  24 + /// </summary>
  25 + public DateTime? startTime { get; set; }
  26 +
  27 + /// <summary>
  28 + /// 结束时间
  29 + /// </summary>
  30 + public DateTime? endTime { get; set; }
  31 +
  32 + /// <summary>
  33 + /// 活动负责人
  34 + /// </summary>
  35 + public string eventCoordinator { get; set; }
  36 +
  37 + /// <summary>
  38 + /// 活动编号
  39 + /// </summary>
  40 + public string eventNumber { get; set; }
  41 +
  42 + /// <summary>
  43 + /// 拓客活动成员列表
  44 + /// </summary>
  45 + public List<LqEventUserInfoOutput> Members { get; set; } = new List<LqEventUserInfoOutput>();
  46 + }
  47 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventListOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqEvent
  4 +{
  5 + /// <summary>
  6 + /// 拓客活动列表输出
  7 + /// </summary>
  8 + public class LqEventListOutput
  9 + {
  10 + /// <summary>
  11 + /// 主键ID
  12 + /// </summary>
  13 + public string id { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 活动名称
  17 + /// </summary>
  18 + public string eventName { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 开始时间
  22 + /// </summary>
  23 + public DateTime? startTime { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 结束时间
  27 + /// </summary>
  28 + public DateTime? endTime { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 活动负责人
  32 + /// </summary>
  33 + public string eventCoordinator { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 活动编号
  37 + /// </summary>
  38 + public string eventNumber { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 成员数量
  42 + /// </summary>
  43 + public int memberCount { get; set; }
  44 + }
  45 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventListQueryInput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqEvent
  4 +{
  5 + /// <summary>
  6 + /// 拓客活动列表查询输入参数
  7 + /// </summary>
  8 + /// <remarks>
  9 + /// 用于拓客活动列表查询的参数类,支持分页、排序和多条件筛选。
  10 + /// 所有筛选条件都是可选的,支持模糊查询和时间范围查询。
  11 + /// </remarks>
  12 + public class LqEventListQueryInput
  13 + {
  14 + /// <summary>
  15 + /// 拓客活动ID
  16 + /// </summary>
  17 + /// <remarks>
  18 + /// 精确匹配查询,用于根据特定ID查询活动
  19 + /// </remarks>
  20 + public string Id { get; set; }
  21 +
  22 + /// <summary>
  23 + /// 活动名称
  24 + /// </summary>
  25 + /// <remarks>
  26 + /// 模糊查询,支持部分匹配活动名称
  27 + /// 示例:输入"春节"可以匹配"春节拓客活动"
  28 + /// </remarks>
  29 + public string EventName { get; set; }
  30 +
  31 + /// <summary>
  32 + /// 活动编号
  33 + /// </summary>
  34 + /// <remarks>
  35 + /// 模糊查询,支持部分匹配活动编号
  36 + /// 示例:输入"TK2024"可以匹配"TK2024001"
  37 + /// </remarks>
  38 + public string EventNumber { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 活动负责人
  42 + /// </summary>
  43 + /// <remarks>
  44 + /// 模糊查询,支持部分匹配负责人姓名
  45 + /// 示例:输入"张"可以匹配"张三"
  46 + /// </remarks>
  47 + public string EventCoordinator { get; set; }
  48 +
  49 + /// <summary>
  50 + /// 排序字段
  51 + /// </summary>
  52 + /// <remarks>
  53 + /// 指定按哪个字段排序,支持以下字段:
  54 + /// - Id: 活动ID
  55 + /// - EventName: 活动名称
  56 + /// - EventNumber: 活动编号
  57 + /// - EventCoordinator: 活动负责人
  58 + /// - StartTime: 开始时间
  59 + /// - EndTime: 结束时间
  60 + /// 默认为"Id"
  61 + /// </remarks>
  62 + public string sidx { get; set; }
  63 +
  64 + /// <summary>
  65 + /// 排序方式
  66 + /// </summary>
  67 + /// <remarks>
  68 + /// 指定排序方向:
  69 + /// - asc: 升序(从小到大)
  70 + /// - desc: 降序(从大到小)
  71 + /// 默认为"desc"
  72 + /// </remarks>
  73 + public string sord { get; set; }
  74 +
  75 + /// <summary>
  76 + /// 页码
  77 + /// </summary>
  78 + /// <remarks>
  79 + /// 分页查询的页码,从1开始
  80 + /// 默认为1
  81 + /// </remarks>
  82 + public int page { get; set; } = 1;
  83 +
  84 + /// <summary>
  85 + /// 每页记录数
  86 + /// </summary>
  87 + /// <remarks>
  88 + /// 每页返回的记录数量
  89 + /// 默认为10,建议范围:1-100
  90 + /// </remarks>
  91 + public int rows { get; set; } = 10;
  92 + }
  93 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventUpInput.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.ComponentModel.DataAnnotations;
  4 +using NCC.Extend.Entitys.Dto.LqEventUser;
  5 +
  6 +namespace NCC.Extend.Entitys.Dto.LqEvent
  7 +{
  8 + /// <summary>
  9 + /// 拓客活动更新输入参数
  10 + /// </summary>
  11 + public class LqEventUpInput : LqEventCrInput
  12 + {
  13 + /// <summary>
  14 + /// 主键ID
  15 + /// </summary>
  16 + [Required(ErrorMessage = "活动ID不能为空")]
  17 + public new int? Id { get; set; }
  18 +
  19 + /// <summary>
  20 + /// 活动名称
  21 + /// </summary>
  22 + [Required(ErrorMessage = "活动名称不能为空")]
  23 + [StringLength(255, ErrorMessage = "活动名称长度不能超过255个字符")]
  24 + public new string EventName { get; set; }
  25 + }
  26 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventUserEventOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqEvent
  4 +{
  5 + /// <summary>
  6 + /// 用户参与的拓客活动输出
  7 + /// </summary>
  8 + public class LqEventUserEventOutput
  9 + {
  10 + /// <summary>
  11 + /// 活动ID
  12 + /// </summary>
  13 + public string EventId { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 活动名称
  17 + /// </summary>
  18 + public string EventName { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 活动编号
  22 + /// </summary>
  23 + public string EventNumber { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 活动负责人
  27 + /// </summary>
  28 + public string EventCoordinator { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 开始时间
  32 + /// </summary>
  33 + public DateTime? StartTime { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 结束时间
  37 + /// </summary>
  38 + public DateTime? EndTime { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 用户ID
  42 + /// </summary>
  43 + public string UserId { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 部门ID
  47 + /// </summary>
  48 + public string DepId { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 战队名称
  52 + /// </summary>
  53 + public string TeamName { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 拓客目标数量
  57 + /// </summary>
  58 + public int EventTarget { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 创建时间
  62 + /// </summary>
  63 + public DateTime? CreationTime { get; set; }
  64 +
  65 + /// <summary>
  66 + /// 创建用户
  67 + /// </summary>
  68 + public string CreationUser { get; set; }
  69 + }
  70 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserCrInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqEventUser
  5 +{
  6 + /// <summary>
  7 + /// 拓客活动用户创建输入参数
  8 + /// </summary>
  9 + public class LqEventUserCrInput
  10 + {
  11 + /// <summary>
  12 + /// 主键
  13 + /// </summary>
  14 + public string Id { get; set; }
  15 +
  16 + /// <summary>
  17 + /// 拓客活动ID
  18 + /// </summary>
  19 + public string EventId { get; set; }
  20 +
  21 + /// <summary>
  22 + /// 用户ID
  23 + /// </summary>
  24 + [Required(ErrorMessage = "用户ID不能为空")]
  25 + public string UserId { get; set; }
  26 +
  27 + /// <summary>
  28 + /// 部门ID
  29 + /// </summary>
  30 + public string DepId { get; set; }
  31 +
  32 + /// <summary>
  33 + /// 战队名称
  34 + /// </summary>
  35 + public string TeamName { get; set; }
  36 + }
  37 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserInfoOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqEventUser
  4 +{
  5 + /// <summary>
  6 + /// 拓客活动用户详情输出
  7 + /// </summary>
  8 + public class LqEventUserInfoOutput
  9 + {
  10 + /// <summary>
  11 + /// 主键
  12 + /// </summary>
  13 + public string id { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 拓客活动ID
  17 + /// </summary>
  18 + public string eventId { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 用户ID
  22 + /// </summary>
  23 + public string userId { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 部门ID
  27 + /// </summary>
  28 + public string depId { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 战队名称
  32 + /// </summary>
  33 + public string teamName { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 创建时间
  37 + /// </summary>
  38 + public DateTime? creationTime { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 创建用户
  42 + /// </summary>
  43 + public string creationUser { get; set; }
  44 + }
  45 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserListOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqEventUser
  4 +{
  5 + /// <summary>
  6 + /// 拓客活动用户列表输出
  7 + /// </summary>
  8 + public class LqEventUserListOutput
  9 + {
  10 + /// <summary>
  11 + /// 主键
  12 + /// </summary>
  13 + public string Id { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 拓客活动ID
  17 + /// </summary>
  18 + public string EventId { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 用户ID
  22 + /// </summary>
  23 + public string UserId { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 部门ID
  27 + /// </summary>
  28 + public string DepId { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 战队名称
  32 + /// </summary>
  33 + public string TeamName { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 创建时间
  37 + /// </summary>
  38 + public DateTime? CreationTime { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 创建用户
  42 + /// </summary>
  43 + public string CreationUser { get; set; }
  44 + }
  45 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserListQueryInput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqEventUser
  4 +{
  5 + /// <summary>
  6 + /// 拓客活动用户列表查询输入
  7 + /// </summary>
  8 + public class LqEventUserListQueryInput
  9 + {
  10 + /// <summary>
  11 + /// 主键
  12 + /// </summary>
  13 + public string Id { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 拓客活动ID
  17 + /// </summary>
  18 + public string EventId { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 用户ID
  22 + /// </summary>
  23 + public string UserId { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 部门ID
  27 + /// </summary>
  28 + public string DepId { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 战队名称
  32 + /// </summary>
  33 + public string TeamName { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 创建时间(开始)
  37 + /// </summary>
  38 + public DateTime? CreationTimeBegin { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 创建时间(结束)
  42 + /// </summary>
  43 + public DateTime? CreationTimeEnd { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 排序字段
  47 + /// </summary>
  48 + public string sidx { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 排序方式
  52 + /// </summary>
  53 + public string sord { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 页码
  57 + /// </summary>
  58 + public int page { get; set; } = 1;
  59 +
  60 + /// <summary>
  61 + /// 每页数量
  62 + /// </summary>
  63 + public int rows { get; set; } = 10;
  64 + }
  65 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserUpInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqEventUser
  5 +{
  6 + /// <summary>
  7 + /// 拓客活动用户更新输入参数
  8 + /// </summary>
  9 + public class LqEventUserUpInput : LqEventUserCrInput
  10 + {
  11 + /// <summary>
  12 + /// 主键
  13 + /// </summary>
  14 + [Required(ErrorMessage = "主键不能为空")]
  15 + public new string Id { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 拓客活动ID
  19 + /// </summary>
  20 + [Required(ErrorMessage = "拓客活动ID不能为空")]
  21 + public new string EventId { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 用户ID
  25 + /// </summary>
  26 + [Required(ErrorMessage = "用户ID不能为空")]
  27 + public new string UserId { get; set; }
  28 + }
  29 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkCrInput.cs
1 1 using System;
2 2 using System.Collections.Generic;
3   -using NCC.Extend.Entitys.Dto.LqHytkMx;
4 3 using NCC.Extend.Entitys.Dto.LqHytkJksyj;
5 4 using NCC.Extend.Entitys.Dto.LqHytkKjbsyj;
  5 +using NCC.Extend.Entitys.Dto.LqHytkMx;
6 6  
7 7 namespace NCC.Extend.Entitys.Dto.LqHytkHytk
8 8 {
... ... @@ -15,72 +15,72 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
15 15 /// 退卡编号
16 16 /// </summary>
17 17 public string id { get; set; }
18   -
  18 +
19 19 /// <summary>
20 20 /// 门店
21 21 /// </summary>
22 22 public string md { get; set; }
23   -
  23 +
24 24 /// <summary>
25 25 /// 门店编号
26 26 /// </summary>
27 27 public string mdbh { get; set; }
28   -
  28 +
29 29 /// <summary>
30 30 /// 门店名称
31 31 /// </summary>
32 32 public string mdmc { get; set; }
33   -
  33 +
34 34 /// <summary>
35 35 /// 会员
36 36 /// </summary>
37 37 public string hy { get; set; }
38   -
  38 +
39 39 /// <summary>
40 40 /// 会员姓名
41 41 /// </summary>
42 42 public string hymc { get; set; }
43   -
  43 +
44 44 /// <summary>
45 45 /// 会员账号
46 46 /// </summary>
47 47 public string hyzh { get; set; }
48   -
  48 +
49 49 /// <summary>
50 50 /// 顾客类型
51 51 /// </summary>
52 52 public string gklx { get; set; }
53   -
  53 +
54 54 /// <summary>
55 55 /// 退卡总金额
56 56 /// </summary>
57 57 public decimal? tkje { get; set; }
58   -
  58 +
59 59 /// <summary>
60 60 /// 手工费用
61 61 /// </summary>
62 62 public decimal? sgfy { get; set; }
63   -
  63 +
64 64 /// <summary>
65 65 /// 备注
66 66 /// </summary>
67 67 public string bz { get; set; }
68   -
  68 +
69 69 /// <summary>
70 70 /// 退卡时间
71 71 /// </summary>
72 72 public DateTime? tksj { get; set; }
73   -
  73 +
74 74 /// <summary>
75 75 /// 操作人员
76 76 /// </summary>
77 77 public string czry { get; set; }
78   -
  78 +
79 79 /// <summary>
80 80 /// 退卡状态
81 81 /// </summary>
82 82 public string tkzt { get; set; }
83   -
  83 +
84 84 /// <summary>
85 85 /// 退卡原因
86 86 /// </summary>
... ... @@ -90,21 +90,20 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
90 90 /// 退卡附件
91 91 /// </summary>
92 92 public string fileUrl { get; set; }
93   -
  93 +
94 94 /// <summary>
95 95 /// 退卡品项明细列表
96 96 /// </summary>
97 97 public List<LqHytkMxCrInput> lqHytkMxList { get; set; }
98   -
  98 +
99 99 /// <summary>
100 100 /// 退卡健康师业绩列表
101 101 /// </summary>
102 102 public List<LqHytkJksyjCrInput> lqHytkJksyjList { get; set; }
103   -
  103 +
104 104 /// <summary>
105 105 /// 退卡科技部老师业绩列表
106 106 /// </summary>
107 107 public List<LqHytkKjbsyjCrInput> lqHytkKjbsyjList { get; set; }
108   -
109 108 }
110 109 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkJksyj/LqHytkJksyjCrInput.cs
... ... @@ -11,56 +11,55 @@ namespace NCC.Extend.Entitys.Dto.LqHytkJksyj
11 11 /// 业绩编号
12 12 /// </summary>
13 13 public string id { get; set; }
14   -
  14 +
15 15 /// <summary>
16 16 /// 关联退卡编号
17 17 /// </summary>
18 18 public string gltkbh { get; set; }
19   -
  19 +
20 20 /// <summary>
21 21 /// 健康师
22 22 /// </summary>
23 23 public string jks { get; set; }
24   -
  24 +
25 25 /// <summary>
26 26 /// 健康师姓名
27 27 /// </summary>
28 28 public string jksxm { get; set; }
29   -
  29 +
30 30 /// <summary>
31 31 /// 健康师账号
32 32 /// </summary>
33 33 public string jkszh { get; set; }
34   -
  34 +
35 35 /// <summary>
36 36 /// 健康师业绩
37 37 /// </summary>
38 38 public decimal? jksyj { get; set; }
39   -
  39 +
40 40 /// <summary>
41 41 /// 退卡时间
42 42 /// </summary>
43 43 public DateTime? tksj { get; set; }
44   -
  44 +
45 45 /// <summary>
46 46 /// 金三角id
47 47 /// </summary>
48 48 public string F_jsjid { get; set; }
49   -
  49 +
50 50 /// <summary>
51 51 /// 关联项目资料表ID
52 52 /// </summary>
53 53 public string F_tkpxid { get; set; }
54   -
  54 +
55 55 /// <summary>
56 56 /// 手工费
57 57 /// </summary>
58 58 public decimal? F_LaborCost { get; set; }
59   -
  59 +
60 60 /// <summary>
61 61 /// 退卡品项次数
62 62 /// </summary>
63 63 public decimal? F_tkpxNumber { get; set; }
64   -
65 64 }
66 65 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxCrInput.cs
... ... @@ -14,61 +14,60 @@ namespace NCC.Extend.Entitys.Dto.LqHytkMx
14 14 /// 明细编号
15 15 /// </summary>
16 16 public string id { get; set; }
17   -
  17 +
18 18 /// <summary>
19 19 /// 关联退卡编号
20 20 /// </summary>
21 21 public string gltkbh { get; set; }
22   -
  22 +
23 23 /// <summary>
24 24 /// 品项
25 25 /// </summary>
26 26 public string px { get; set; }
27   -
  27 +
28 28 /// <summary>
29 29 /// 品项名称
30 30 /// </summary>
31 31 public string pxmc { get; set; }
32   -
  32 +
33 33 /// <summary>
34 34 /// 品项价格
35 35 /// </summary>
36 36 public decimal? pxjg { get; set; }
37   -
  37 +
38 38 /// <summary>
39 39 /// 退款金额
40 40 /// </summary>
41 41 public decimal? tkje { get; set; }
42   -
  42 +
43 43 /// <summary>
44 44 /// 项目次数
45 45 /// </summary>
46 46 public int? F_ProjectNumber { get; set; }
47   -
  47 +
48 48 /// <summary>
49 49 /// 是否有效
50 50 /// </summary>
51 51 public int? F_IsEnabled { get; set; }
52   -
  52 +
53 53 /// <summary>
54 54 /// 来源类型
55 55 /// </summary>
56 56 public string F_SourceType { get; set; }
57   -
  57 +
58 58 /// <summary>
59 59 /// 合计金额
60 60 /// </summary>
61 61 public decimal? F_TotalPrice { get; set; }
62   -
  62 +
63 63 /// <summary>
64 64 /// 退卡健康师业绩列表
65 65 /// </summary>
66 66 public List<LqHytkJksyjCrInput> lqHytkJksyjList { get; set; }
67   -
  67 +
68 68 /// <summary>
69 69 /// 退卡科技部老师业绩列表
70 70 /// </summary>
71 71 public List<LqHytkKjbsyjCrInput> lqHytkKjbsyjList { get; set; }
72   -
73 72 }
74 73 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxInfoOutput.cs
... ... @@ -14,47 +14,47 @@ namespace NCC.Extend.Entitys.Dto.LqHytkMx
14 14 /// 明细编号
15 15 /// </summary>
16 16 public string id { get; set; }
17   -
  17 +
18 18 /// <summary>
19 19 /// 关联退卡编号
20 20 /// </summary>
21 21 public string gltkbh { get; set; }
22   -
  22 +
23 23 /// <summary>
24 24 /// 品项编号
25 25 /// </summary>
26 26 public string px { get; set; }
27   -
  27 +
28 28 /// <summary>
29 29 /// 品项名称
30 30 /// </summary>
31 31 public string pxmc { get; set; }
32   -
  32 +
33 33 /// <summary>
34 34 /// 品项价格
35 35 /// </summary>
36 36 public decimal? pxjg { get; set; }
37   -
  37 +
38 38 /// <summary>
39 39 /// 退款金额
40 40 /// </summary>
41 41 public decimal? tkje { get; set; }
42   -
  42 +
43 43 /// <summary>
44 44 /// 项目次数
45 45 /// </summary>
46 46 public int? F_ProjectNumber { get; set; }
47   -
  47 +
48 48 /// <summary>
49 49 /// 是否有效
50 50 /// </summary>
51 51 public int? F_IsEnabled { get; set; }
52   -
  52 +
53 53 /// <summary>
54 54 /// 来源类型(开卡/赠送/其他)
55 55 /// </summary>
56 56 public string F_SourceType { get; set; }
57   -
  57 +
58 58 /// <summary>
59 59 /// 合计金额(品项价格 × 项目次数)
60 60 /// </summary>
... ... @@ -69,6 +69,5 @@ namespace NCC.Extend.Entitys.Dto.LqHytkMx
69 69 /// 科技部老师业绩列表
70 70 /// </summary>
71 71 public List<LqHytkKjbsyjInfoOutput> lqHytkKjbsyjList { get; set; }
72   -
73 72 }
74   -}
75 73 \ No newline at end of file
  74 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaCrInput.cs
1 1 using System;
2   -using System.Collections.Generic;
  2 +using System.ComponentModel.DataAnnotations;
3 3  
4 4 namespace NCC.Extend.Entitys.Dto.LqYxhdfa
5 5 {
6 6 /// <summary>
7   - /// 营销活动方案修改输入参数
  7 + /// 营销活动方案创建输入参数
8 8 /// </summary>
9 9 public class LqYxhdfaCrInput
10 10 {
... ... @@ -12,26 +12,28 @@ namespace NCC.Extend.Entitys.Dto.LqYxhdfa
12 12 /// 方案编号
13 13 /// </summary>
14 14 public string id { get; set; }
15   -
  15 +
16 16 /// <summary>
17 17 /// 营销活动编号
18 18 /// </summary>
  19 + [Required(ErrorMessage = "营销活动编号不能为空")]
19 20 public string yxhdbh { get; set; }
20   -
  21 +
21 22 /// <summary>
22 23 /// 活动名称
23 24 /// </summary>
  25 + [Required(ErrorMessage = "活动名称不能为空")]
  26 + [StringLength(200, ErrorMessage = "活动名称长度不能超过200个字符")]
24 27 public string hdmc { get; set; }
25   -
  28 +
26 29 /// <summary>
27 30 /// 张数奖
28 31 /// </summary>
29 32 public string zsj { get; set; }
30   -
  33 +
31 34 /// <summary>
32 35 /// 金额奖
33 36 /// </summary>
34 37 public string jej { get; set; }
35   -
36 38 }
37 39 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaInfoOutput.cs
1 1 using System;
2   -using System.Collections.Generic;
3 2  
4 3 namespace NCC.Extend.Entitys.Dto.LqYxhdfa
5 4 {
... ... @@ -12,26 +11,25 @@ namespace NCC.Extend.Entitys.Dto.LqYxhdfa
12 11 /// 方案编号
13 12 /// </summary>
14 13 public string id { get; set; }
15   -
  14 +
16 15 /// <summary>
17 16 /// 营销活动编号
18 17 /// </summary>
19 18 public string yxhdbh { get; set; }
20   -
  19 +
21 20 /// <summary>
22 21 /// 活动名称
23 22 /// </summary>
24 23 public string hdmc { get; set; }
25   -
  24 +
26 25 /// <summary>
27 26 /// 张数奖
28 27 /// </summary>
29 28 public string zsj { get; set; }
30   -
  29 +
31 30 /// <summary>
32 31 /// 金额奖
33 32 /// </summary>
34 33 public string jej { get; set; }
35   -
36 34 }
37 35 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_event/LqEventEntity.cs 0 → 100644
  1 +using System;
  2 +using SqlSugar;
  3 +
  4 +namespace NCC.Extend.Entitys.lq_event
  5 +{
  6 + /// <summary>
  7 + /// 活动事件表
  8 + /// </summary>
  9 + [SugarTable("lq_Event")]
  10 + public class LqEventEntity
  11 + {
  12 + /// <summary>
  13 + /// 主键ID
  14 + /// </summary>
  15 + [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
  16 + public string Id { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 活动名称
  20 + /// </summary>
  21 + [SugarColumn(ColumnName = "F_EventName")]
  22 + public string EventName { get; set; }
  23 +
  24 + /// <summary>
  25 + /// 开始时间
  26 + /// </summary>
  27 + [SugarColumn(ColumnName = "F_StartTime")]
  28 + public DateTime? StartTime { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 结束时间
  32 + /// </summary>
  33 + [SugarColumn(ColumnName = "F_EndTime")]
  34 + public DateTime? EndTime { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 活动负责人
  38 + /// </summary>
  39 + [SugarColumn(ColumnName = "F_EventCoordinator")]
  40 + public string EventCoordinator { get; set; }
  41 +
  42 + /// <summary>
  43 + /// 活动编号
  44 + /// </summary>
  45 + [SugarColumn(ColumnName = "F_EventNumber")]
  46 + public string EventNumber { get; set; }
  47 + }
  48 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_eventuser/LqEventUserEntity.cs 0 → 100644
  1 +using System;
  2 +using SqlSugar;
  3 +
  4 +namespace NCC.Extend.Entitys.lq_eventuser
  5 +{
  6 + /// <summary>
  7 + /// 拓客活动用户表
  8 + /// </summary>
  9 + [SugarTable("lq_eventuser")]
  10 + public class LqEventUserEntity
  11 + {
  12 + /// <summary>
  13 + /// 主键
  14 + /// </summary>
  15 + [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
  16 + public string Id { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 拓客活动ID
  20 + /// </summary>
  21 + [SugarColumn(ColumnName = "F_EventId")]
  22 + public string EventId { get; set; }
  23 +
  24 + /// <summary>
  25 + /// 用户ID
  26 + /// </summary>
  27 + [SugarColumn(ColumnName = "F_UserId")]
  28 + public string UserId { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 部门ID
  32 + /// </summary>
  33 + [SugarColumn(ColumnName = "F_DepId")]
  34 + public string DepId { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 战队名称
  38 + /// </summary>
  39 + [SugarColumn(ColumnName = "F_TeamName")]
  40 + public string TeamName { get; set; }
  41 +
  42 + /// <summary>
  43 + /// 创建时间
  44 + /// </summary>
  45 + [SugarColumn(ColumnName = "F_CreationTime")]
  46 + public DateTime? CreationTime { get; set; }
  47 +
  48 + /// <summary>
  49 + /// 创建用户
  50 + /// </summary>
  51 + [SugarColumn(ColumnName = "F_CreationUser")]
  52 + public string CreationUser { get; set; }
  53 +
  54 + /// <summary>
  55 + /// 拓客目标数量
  56 + /// </summary>
  57 + [SugarColumn(ColumnName = "F_EventTarget")]
  58 + public int EventTarget { get; set; }
  59 + }
  60 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs
  1 +using System;
1 2 using NCC.Common.Const;
2 3 using SqlSugar;
3   -using System;
4 4  
5 5 namespace NCC.Extend.Entitys.lq_hytk_jksyj
6 6 {
... ... @@ -16,96 +16,101 @@ namespace NCC.Extend.Entitys.lq_hytk_jksyj
16 16 /// </summary>
17 17 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18 18 public string Id { get; set; }
19   -
  19 +
20 20 /// <summary>
21 21 /// 关联退卡编号
22 22 /// </summary>
23   - [SugarColumn(ColumnName = "gltkbh")]
  23 + [SugarColumn(ColumnName = "gltkbh")]
24 24 public string Gltkbh { get; set; }
25   -
  25 +
26 26 /// <summary>
27 27 /// 健康师
28 28 /// </summary>
29   - [SugarColumn(ColumnName = "jks")]
  29 + [SugarColumn(ColumnName = "jks")]
30 30 public string Jks { get; set; }
31   -
  31 +
32 32 /// <summary>
33 33 /// 健康师姓名
34 34 /// </summary>
35   - [SugarColumn(ColumnName = "jksxm")]
  35 + [SugarColumn(ColumnName = "jksxm")]
36 36 public string Jksxm { get; set; }
37   -
  37 +
38 38 /// <summary>
39 39 /// 健康师账号
40 40 /// </summary>
41   - [SugarColumn(ColumnName = "jkszh")]
  41 + [SugarColumn(ColumnName = "jkszh")]
42 42 public string Jkszh { get; set; }
43   -
  43 +
44 44 /// <summary>
45 45 /// 健康师业绩
46 46 /// </summary>
47   - [SugarColumn(ColumnName = "jksyj")]
  47 + [SugarColumn(ColumnName = "jksyj")]
48 48 public decimal? Jksyj { get; set; }
49   -
  49 +
50 50 /// <summary>
51 51 /// 退卡时间
52 52 /// </summary>
53   - [SugarColumn(ColumnName = "tksj")]
  53 + [SugarColumn(ColumnName = "tksj")]
54 54 public DateTime? Tksj { get; set; }
55   -
  55 +
56 56 /// <summary>
57 57 /// 金三角id
58 58 /// </summary>
59   - [SugarColumn(ColumnName = "F_jsjid")]
  59 + [SugarColumn(ColumnName = "F_jsjid")]
60 60 public string F_jsjid { get; set; }
61   -
  61 +
62 62 /// <summary>
63 63 /// 关联项目资料表ID
64 64 /// </summary>
65   - [SugarColumn(ColumnName = "F_tkpxid")]
  65 + [SugarColumn(ColumnName = "F_tkpxid")]
66 66 public string F_tkpxid { get; set; }
67   -
  67 +
68 68 /// <summary>
69 69 /// 手工费
70 70 /// </summary>
71   - [SugarColumn(ColumnName = "F_LaborCost")]
  71 + [SugarColumn(ColumnName = "F_LaborCost")]
72 72 public decimal? F_LaborCost { get; set; }
73   -
  73 +
74 74 /// <summary>
75 75 /// 退卡品项次数
76 76 /// </summary>
77   - [SugarColumn(ColumnName = "F_tkpxNumber")]
  77 + [SugarColumn(ColumnName = "F_tkpxNumber")]
78 78 public decimal? F_tkpxNumber { get; set; }
79   -
  79 +
80 80 /// <summary>
81 81 /// 创建时间
82 82 /// </summary>
83   - [SugarColumn(ColumnName = "F_CreateTime")]
  83 + [SugarColumn(ColumnName = "F_CreateTime")]
84 84 public DateTime? F_CreateTime { get; set; }
85   -
  85 +
86 86 /// <summary>
87 87 /// 创建用户
88 88 /// </summary>
89   - [SugarColumn(ColumnName = "F_CreateUser")]
  89 + [SugarColumn(ColumnName = "F_CreateUser")]
90 90 public string F_CreateUser { get; set; }
91   -
  91 +
92 92 /// <summary>
93 93 /// 修改时间
94 94 /// </summary>
95   - [SugarColumn(ColumnName = "F_ModifyTime")]
  95 + [SugarColumn(ColumnName = "F_ModifyTime")]
96 96 public DateTime? F_ModifyTime { get; set; }
97   -
  97 +
98 98 /// <summary>
99 99 /// 修改用户
100 100 /// </summary>
101   - [SugarColumn(ColumnName = "F_ModifyUser")]
  101 + [SugarColumn(ColumnName = "F_ModifyUser")]
102 102 public string F_ModifyUser { get; set; }
103   -
  103 +
104 104 /// <summary>
105 105 /// 删除标记
106 106 /// </summary>
107   - [SugarColumn(ColumnName = "F_DeleteMark")]
  107 + [SugarColumn(ColumnName = "F_DeleteMark")]
108 108 public int? F_DeleteMark { get; set; }
109   -
  109 +
  110 + /// <summary>
  111 + /// 退卡品项明细id
  112 + /// </summary>
  113 + [SugarColumn(ColumnName = "F_CardReturn")]
  114 + public string CardReturn { get; set; }
110 115 }
111 116 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_kjbsyj/LqHytkKjbsyjEntity.cs
  1 +using System;
1 2 using NCC.Common.Const;
2 3 using SqlSugar;
3   -using System;
4 4  
5 5 namespace NCC.Extend.Entitys.lq_hytk_kjbsyj
6 6 {
... ... @@ -16,90 +16,95 @@ namespace NCC.Extend.Entitys.lq_hytk_kjbsyj
16 16 /// </summary>
17 17 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18 18 public string Id { get; set; }
19   -
  19 +
20 20 /// <summary>
21 21 /// 关联退卡编号
22 22 /// </summary>
23   - [SugarColumn(ColumnName = "gltkbh")]
  23 + [SugarColumn(ColumnName = "gltkbh")]
24 24 public string Gltkbh { get; set; }
25   -
  25 +
26 26 /// <summary>
27 27 /// 科技部老师
28 28 /// </summary>
29   - [SugarColumn(ColumnName = "kjbls")]
  29 + [SugarColumn(ColumnName = "kjbls")]
30 30 public string Kjbls { get; set; }
31   -
  31 +
32 32 /// <summary>
33 33 /// 科技部老师姓名
34 34 /// </summary>
35   - [SugarColumn(ColumnName = "kjblsxm")]
  35 + [SugarColumn(ColumnName = "kjblsxm")]
36 36 public string Kjblsxm { get; set; }
37   -
  37 +
38 38 /// <summary>
39 39 /// 科技部老师账号
40 40 /// </summary>
41   - [SugarColumn(ColumnName = "kjblszh")]
  41 + [SugarColumn(ColumnName = "kjblszh")]
42 42 public string Kjblszh { get; set; }
43   -
  43 +
44 44 /// <summary>
45 45 /// 科技部老师业绩
46 46 /// </summary>
47   - [SugarColumn(ColumnName = "kjblsyj")]
  47 + [SugarColumn(ColumnName = "kjblsyj")]
48 48 public decimal? Kjblsyj { get; set; }
49   -
  49 +
50 50 /// <summary>
51 51 /// 退卡时间
52 52 /// </summary>
53   - [SugarColumn(ColumnName = "tksj")]
  53 + [SugarColumn(ColumnName = "tksj")]
54 54 public DateTime? Tksj { get; set; }
55   -
  55 +
56 56 /// <summary>
57 57 /// 关联项目资料表ID
58 58 /// </summary>
59   - [SugarColumn(ColumnName = "F_tkpxid")]
  59 + [SugarColumn(ColumnName = "F_tkpxid")]
60 60 public string F_tkpxid { get; set; }
61   -
  61 +
62 62 /// <summary>
63 63 /// 手工费
64 64 /// </summary>
65   - [SugarColumn(ColumnName = "F_LaborCost")]
  65 + [SugarColumn(ColumnName = "F_LaborCost")]
66 66 public decimal? F_LaborCost { get; set; }
67   -
  67 +
68 68 /// <summary>
69 69 /// 退卡品项次数
70 70 /// </summary>
71   - [SugarColumn(ColumnName = "F_tkpxNumber")]
  71 + [SugarColumn(ColumnName = "F_tkpxNumber")]
72 72 public decimal? F_tkpxNumber { get; set; }
73   -
  73 +
74 74 /// <summary>
75 75 /// 创建时间
76 76 /// </summary>
77   - [SugarColumn(ColumnName = "F_CreateTime")]
  77 + [SugarColumn(ColumnName = "F_CreateTime")]
78 78 public DateTime? F_CreateTime { get; set; }
79   -
  79 +
80 80 /// <summary>
81 81 /// 创建用户
82 82 /// </summary>
83   - [SugarColumn(ColumnName = "F_CreateUser")]
  83 + [SugarColumn(ColumnName = "F_CreateUser")]
84 84 public string F_CreateUser { get; set; }
85   -
  85 +
86 86 /// <summary>
87 87 /// 修改时间
88 88 /// </summary>
89   - [SugarColumn(ColumnName = "F_ModifyTime")]
  89 + [SugarColumn(ColumnName = "F_ModifyTime")]
90 90 public DateTime? F_ModifyTime { get; set; }
91   -
  91 +
92 92 /// <summary>
93 93 /// 修改用户
94 94 /// </summary>
95   - [SugarColumn(ColumnName = "F_ModifyUser")]
  95 + [SugarColumn(ColumnName = "F_ModifyUser")]
96 96 public string F_ModifyUser { get; set; }
97   -
  97 +
98 98 /// <summary>
99 99 /// 删除标记
100 100 /// </summary>
101   - [SugarColumn(ColumnName = "F_DeleteMark")]
  101 + [SugarColumn(ColumnName = "F_DeleteMark")]
102 102 public int? F_DeleteMark { get; set; }
103   -
  103 +
  104 + /// <summary>
  105 + /// 退卡品项明细id
  106 + /// </summary>
  107 + [SugarColumn(ColumnName = "F_CardReturn")]
  108 + public string CardReturn { get; set; }
104 109 }
105 110 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_tkjlb/LqTkjlbEntity.cs
1   -using NCC.Common.Const;
  1 +using System;
2 2 using SqlSugar;
3   -using System;
4 3  
5 4 namespace NCC.Extend.Entitys.lq_tkjlb
6 5 {
7 6 /// <summary>
8   - /// 拓客管理
  7 + /// 拓客基础信息表
9 8 /// </summary>
10 9 [SugarTable("lq_tkjlb")]
11   - [Tenant(ClaimConst.TENANT_ID)]
12 10 public class LqTkjlbEntity
13 11 {
14 12 /// <summary>
... ... @@ -16,66 +14,65 @@ namespace NCC.Extend.Entitys.lq_tkjlb
16 14 /// </summary>
17 15 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18 16 public string Id { get; set; }
19   -
  17 +
20 18 /// <summary>
21 19 /// 拓客时间
22 20 /// </summary>
23   - [SugarColumn(ColumnName = "tksj")]
  21 + [SugarColumn(ColumnName = "tksj")]
24 22 public DateTime? Tksj { get; set; }
25   -
  23 +
26 24 /// <summary>
27 25 /// 拓客人员
28 26 /// </summary>
29   - [SugarColumn(ColumnName = "tkry")]
  27 + [SugarColumn(ColumnName = "tkry")]
30 28 public string Tkry { get; set; }
31   -
  29 +
32 30 /// <summary>
33 31 /// 顾客姓名
34 32 /// </summary>
35   - [SugarColumn(ColumnName = "gkxm")]
  33 + [SugarColumn(ColumnName = "gkxm")]
36 34 public string Gkxm { get; set; }
37   -
  35 +
38 36 /// <summary>
39 37 /// 电话号码
40 38 /// </summary>
41   - [SugarColumn(ColumnName = "dhhm")]
  39 + [SugarColumn(ColumnName = "dhhm")]
42 40 public string Dhhm { get; set; }
43   -
  41 +
44 42 /// <summary>
45 43 /// 购买张数
46 44 /// </summary>
47   - [SugarColumn(ColumnName = "gmzs")]
  45 + [SugarColumn(ColumnName = "gmzs")]
48 46 public int? Gmzs { get; set; }
49   -
  47 +
50 48 /// <summary>
51 49 /// 支付方式
52 50 /// </summary>
53   - [SugarColumn(ColumnName = "zffs")]
  51 + [SugarColumn(ColumnName = "zffs")]
54 52 public string Zffs { get; set; }
55   -
  53 +
56 54 /// <summary>
57 55 /// 是否加微信
58 56 /// </summary>
59   - [SugarColumn(ColumnName = "sfjwx")]
  57 + [SugarColumn(ColumnName = "sfjwx")]
60 58 public string Sfjwx { get; set; }
61   -
  59 +
62 60 /// <summary>
63 61 /// 备注
64 62 /// </summary>
65   - [SugarColumn(ColumnName = "bz")]
  63 + [SugarColumn(ColumnName = "bz")]
66 64 public string Bz { get; set; }
67   -
  65 +
68 66 /// <summary>
69 67 /// 所属门店
70 68 /// </summary>
71   - [SugarColumn(ColumnName = "ssmd")]
  69 + [SugarColumn(ColumnName = "ssmd")]
72 70 public string Ssmd { get; set; }
73   -
  71 +
74 72 /// <summary>
75 73 /// 所属战队
76 74 /// </summary>
77   - [SugarColumn(ColumnName = "sszd")]
  75 + [SugarColumn(ColumnName = "sszd")]
78 76 public string Sszd { get; set; }
79   -
80 77 }
81   -}
82 78 \ No newline at end of file
  79 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Interfaces/LqEvent/ILqEventService.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.Threading.Tasks;
  4 +using NCC.Common.Filter;
  5 +using NCC.Extend.Entitys.Dto.LqEvent;
  6 +
  7 +namespace NCC.Extend.Interfaces.LqEvent
  8 +{
  9 + /// <summary>
  10 + /// 拓客活动服务接口
  11 + /// </summary>
  12 + /// <remarks>
  13 + /// 提供拓客活动的完整管理功能,包括活动基础信息和成员管理。
  14 + /// 支持创建、查询、更新、删除拓客活动,以及管理每个活动的参与成员。
  15 + /// </remarks>
  16 + public interface ILqEventService
  17 + {
  18 + /// <summary>
  19 + /// 获取拓客活动列表
  20 + /// </summary>
  21 + /// <remarks>
  22 + /// 分页查询拓客活动列表,支持多条件筛选和排序。
  23 + /// 返回结果包含每个活动的成员数量统计。
  24 + ///
  25 + /// 示例请求:
  26 + /// ```json
  27 + /// {
  28 + /// "page": 1,
  29 + /// "rows": 10,
  30 + /// "sidx": "Id",
  31 + /// "sord": "desc",
  32 + /// "eventName": "春节拓客活动",
  33 + /// "eventNumber": "TK2024001",
  34 + /// "eventCoordinator": "张三",
  35 + /// "startTimeBegin": "2024-01-01",
  36 + /// "startTimeEnd": "2024-12-31"
  37 + /// }
  38 + /// ```
  39 + ///
  40 + /// 参数说明:
  41 + /// - page: 页码,从1开始
  42 + /// - rows: 每页记录数
  43 + /// - sidx: 排序字段(Id、EventName、EventNumber、EventCoordinator、StartTime、EndTime)
  44 + /// - sord: 排序方向(asc、desc)
  45 + /// - eventName: 活动名称(模糊查询)
  46 + /// - eventNumber: 活动编号(模糊查询)
  47 + /// - eventCoordinator: 活动负责人(模糊查询)
  48 + /// - startTimeBegin: 开始时间范围-开始
  49 + /// - startTimeEnd: 开始时间范围-结束
  50 + /// - endTimeBegin: 结束时间范围-开始
  51 + /// - endTimeEnd: 结束时间范围-结束
  52 + /// </remarks>
  53 + /// <param name="input">查询参数</param>
  54 + /// <returns>分页的拓客活动列表,包含成员数量统计</returns>
  55 + /// <response code="200">成功返回拓客活动列表</response>
  56 + /// <response code="400">请求参数错误</response>
  57 + /// <response code="500">服务器内部错误</response>
  58 + Task<dynamic> GetList(LqEventListQueryInput input);
  59 +
  60 + /// <summary>
  61 + /// 获取拓客活动详情
  62 + /// </summary>
  63 + /// <remarks>
  64 + /// 根据活动ID获取拓客活动的详细信息,包括基础信息和所有参与成员列表。
  65 + ///
  66 + /// 示例请求:
  67 + /// GET /api/Extend/LqEvent/1234567890123456789
  68 + ///
  69 + /// 返回数据包含:
  70 + /// - 活动基础信息(名称、编号、负责人、时间等)
  71 + /// - 成员列表(用户ID、部门ID、战队名称等)
  72 + /// </remarks>
  73 + /// <param name="id">拓客活动ID</param>
  74 + /// <returns>拓客活动详情,包含成员信息</returns>
  75 + /// <response code="200">成功返回拓客活动详情</response>
  76 + /// <response code="404">拓客活动不存在</response>
  77 + /// <response code="500">服务器内部错误</response>
  78 + Task<dynamic> GetInfo(string id);
  79 +
  80 + /// <summary>
  81 + /// 创建拓客活动
  82 + /// </summary>
  83 + /// <remarks>
  84 + /// 创建新的拓客活动,可以同时添加参与成员。
  85 + /// 系统会自动生成活动ID,并记录创建用户信息。
  86 + ///
  87 + /// 示例请求:
  88 + /// ```json
  89 + /// {
  90 + /// "eventName": "春节拓客活动",
  91 + /// "eventNumber": "TK2024001",
  92 + /// "eventCoordinator": "张三",
  93 + /// "startTime": "2024-01-15T09:00:00",
  94 + /// "endTime": "2024-01-20T18:00:00",
  95 + /// "members": [
  96 + /// {
  97 + /// "userId": "user001",
  98 + /// "depId": "dept001",
  99 + /// "teamName": "第一战队"
  100 + /// },
  101 + /// {
  102 + /// "userId": "user002",
  103 + /// "depId": "dept001",
  104 + /// "teamName": "第二战队"
  105 + /// }
  106 + /// ]
  107 + /// }
  108 + /// ```
  109 + ///
  110 + /// 参数说明:
  111 + /// - eventName: 活动名称(必填)
  112 + /// - eventNumber: 活动编号(可选)
  113 + /// - eventCoordinator: 活动负责人(可选)
  114 + /// - startTime: 开始时间(可选)
  115 + /// - endTime: 结束时间(可选)
  116 + /// - members: 参与成员列表(可选)
  117 + /// - userId: 用户ID(必填)
  118 + /// - depId: 部门ID(可选)
  119 + /// - teamName: 战队名称(可选)
  120 + /// </remarks>
  121 + /// <param name="input">创建参数</param>
  122 + /// <returns>无返回值</returns>
  123 + /// <response code="200">拓客活动创建成功</response>
  124 + /// <response code="400">请求参数错误或验证失败</response>
  125 + /// <response code="500">服务器内部错误</response>
  126 + Task Create(LqEventCrInput input);
  127 +
  128 + /// <summary>
  129 + /// 更新拓客活动
  130 + /// </summary>
  131 + /// <remarks>
  132 + /// 更新拓客活动信息,包括基础信息和成员列表。
  133 + /// 更新时会先删除原有成员,再添加新成员。
  134 + ///
  135 + /// 示例请求:
  136 + /// ```json
  137 + /// {
  138 + /// "id": "1234567890123456789",
  139 + /// "eventName": "春节拓客活动(更新)",
  140 + /// "eventNumber": "TK2024001",
  141 + /// "eventCoordinator": "李四",
  142 + /// "startTime": "2024-01-15T09:00:00",
  143 + /// "endTime": "2024-01-25T18:00:00",
  144 + /// "members": [
  145 + /// {
  146 + /// "userId": "user003",
  147 + /// "depId": "dept002",
  148 + /// "teamName": "精英战队"
  149 + /// }
  150 + /// ]
  151 + /// }
  152 + /// ```
  153 + ///
  154 + /// 参数说明:
  155 + /// - id: 拓客活动ID(必填)
  156 + /// - eventName: 活动名称(必填)
  157 + /// - eventNumber: 活动编号(可选)
  158 + /// - eventCoordinator: 活动负责人(可选)
  159 + /// - startTime: 开始时间(可选)
  160 + /// - endTime: 结束时间(可选)
  161 + /// - members: 参与成员列表(可选,为空则清空所有成员)
  162 + /// </remarks>
  163 + /// <param name="input">更新参数</param>
  164 + /// <returns>无返回值</returns>
  165 + /// <response code="200">拓客活动更新成功</response>
  166 + /// <response code="400">请求参数错误或验证失败</response>
  167 + /// <response code="404">拓客活动不存在</response>
  168 + /// <response code="500">服务器内部错误</response>
  169 + Task Update(LqEventUpInput input);
  170 +
  171 + /// <summary>
  172 + /// 删除拓客活动
  173 + /// </summary>
  174 + /// <remarks>
  175 + /// 删除指定的拓客活动,会同时删除该活动的所有成员记录。
  176 + /// 删除操作不可恢复,请谨慎使用。
  177 + ///
  178 + /// 示例请求:
  179 + /// DELETE /api/Extend/LqEvent/1234567890123456789
  180 + ///
  181 + /// 删除顺序:
  182 + /// 1. 先删除所有相关成员记录
  183 + /// 2. 再删除拓客活动记录
  184 + /// </remarks>
  185 + /// <param name="id">拓客活动ID</param>
  186 + /// <returns>无返回值</returns>
  187 + /// <response code="200">拓客活动删除成功</response>
  188 + /// <response code="404">拓客活动不存在</response>
  189 + /// <response code="500">服务器内部错误</response>
  190 + Task Delete(string id);
  191 +
  192 + /// <summary>
  193 + /// 根据用户ID获取参与的拓客活动
  194 + /// </summary>
  195 + /// <remarks>
  196 + /// 根据用户ID查询该用户参与的所有拓客活动,支持时间范围筛选。
  197 + /// 返回结果包含活动基础信息和用户在该活动中的详细信息。
  198 + ///
  199 + /// 示例请求:
  200 + /// GET /api/Extend/LqEvent/user/user001?startTime=2024-01-01&endTime=2024-12-31
  201 + ///
  202 + /// 参数说明:
  203 + /// - userId: 用户ID(必填)
  204 + /// - startTime: 开始时间(可选),查询在此时间之后开始的活动
  205 + /// - endTime: 结束时间(可选),查询在此时间之前结束的活动
  206 + ///
  207 + /// 返回数据包含:
  208 + /// - 活动基础信息(ID、名称、编号、负责人、开始时间、结束时间)
  209 + /// - 用户参与信息(部门ID、战队名称、目标数量等)
  210 + /// </remarks>
  211 + /// <param name="userId">用户ID</param>
  212 + /// <param name="startTime">开始时间(可选)</param>
  213 + /// <param name="endTime">结束时间(可选)</param>
  214 + /// <returns>用户参与的拓客活动列表</returns>
  215 + /// <response code="200">成功返回用户参与的拓客活动列表</response>
  216 + /// <response code="400">请求参数错误</response>
  217 + /// <response code="500">服务器内部错误</response>
  218 + Task<List<LqEventUserEventOutput>> GetUserEvents(string userId, DateTime? startTime = null, DateTime? endTime = null);
  219 + }
  220 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqEventService.cs 0 → 100644
  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.Common.Core.Manager;
  8 +using NCC.Common.Filter;
  9 +using NCC.Dependency;
  10 +using NCC.DynamicApiController;
  11 +using NCC.Extend.Entitys.Dto.LqEvent;
  12 +using NCC.Extend.Entitys.Dto.LqEventUser;
  13 +using NCC.Extend.Entitys.lq_event;
  14 +using NCC.Extend.Entitys.lq_eventuser;
  15 +using NCC.Extend.Interfaces.LqEvent;
  16 +using NCC.FriendlyException;
  17 +using SqlSugar;
  18 +using Yitter.IdGenerator;
  19 +
  20 +namespace NCC.Extend.LqEvent
  21 +{
  22 + /// <summary>
  23 + /// 拓客活动服务
  24 + /// </summary>
  25 + [ApiDescriptionSettings(Tag = "绿纤拓客活动服务", Name = "LqEvent", Order = 200)]
  26 + [Route("api/Extend/[controller]")]
  27 + [ApiController]
  28 + public class LqEventService : ILqEventService, IDynamicApiController, ITransient
  29 + {
  30 + private readonly ISqlSugarClient _db;
  31 + private readonly IUserManager _userManager;
  32 +
  33 + public LqEventService(ISqlSugarClient db, IUserManager userManager)
  34 + {
  35 + _db = db;
  36 + _userManager = userManager;
  37 + }
  38 +
  39 + #region 获取拓客活动列表
  40 + /// <summary>
  41 + /// 获取拓客活动列表
  42 + /// </summary>
  43 + /// <remarks>
  44 + /// 分页查询拓客活动列表,支持多条件筛选和排序。
  45 + /// 返回结果包含每个活动的成员数量统计。
  46 + ///
  47 + /// 示例请求:
  48 + /// GET /api/Extend/LqEvent?page=1&amp;rows=10&amp;sidx=Id&amp;sord=desc&amp;eventName=春节拓客活动
  49 + ///
  50 + /// 支持的条件筛选:
  51 + /// - 活动名称模糊查询
  52 + /// - 活动编号模糊查询
  53 + /// - 活动负责人模糊查询
  54 + /// - 开始时间范围查询
  55 + /// - 结束时间范围查询
  56 + ///
  57 + /// 支持的排序字段:
  58 + /// - Id: 活动ID
  59 + /// - EventName: 活动名称
  60 + /// - EventNumber: 活动编号
  61 + /// - EventCoordinator: 活动负责人
  62 + /// - StartTime: 开始时间
  63 + /// - EndTime: 结束时间
  64 + /// </remarks>
  65 + /// <param name="input">查询参数</param>
  66 + /// <returns>分页的拓客活动列表,包含成员数量统计</returns>
  67 + [HttpGet("")]
  68 + public async Task<dynamic> GetList([FromQuery] LqEventListQueryInput input)
  69 + {
  70 + var sidx = input.sidx == null ? "id" : input.sidx;
  71 + var sord = input.sord == null ? "desc" : input.sord;
  72 + // 先查询活动列表
  73 + var Data = await _db.Queryable<LqEventEntity>()
  74 + .WhereIF(!string.IsNullOrEmpty(input.EventName), e => e.EventName.Contains(input.EventName))
  75 + .WhereIF(!string.IsNullOrEmpty(input.EventNumber), e => e.EventNumber.Contains(input.EventNumber))
  76 + .Select(e => new LqEventListOutput
  77 + {
  78 + id = e.Id,
  79 + eventName = e.EventName,
  80 + startTime = e.StartTime,
  81 + endTime = e.EndTime,
  82 + eventCoordinator = e.EventCoordinator,
  83 + eventNumber = e.EventNumber,
  84 + memberCount = SqlFunc.Subqueryable<LqEventUserEntity>().Where(u => u.EventId == e.Id).Count(),
  85 + })
  86 + .MergeTable()
  87 + .OrderBy(sidx + " " + sord)
  88 + .ToPagedListAsync(input.page, input.rows);
  89 + return PageResult<LqEventListOutput>.SqlSugarPageResult(Data);
  90 + }
  91 + #endregion
  92 +
  93 + #region 获取拓客活动详情
  94 +
  95 + /// <summary>
  96 + /// 获取拓客活动详情
  97 + /// </summary>
  98 + /// <remarks>
  99 + /// 根据活动ID获取拓客活动的详细信息,包括基础信息和所有参与成员列表。
  100 + ///
  101 + /// 示例请求:
  102 + /// GET /api/Extend/LqEvent/1234567890123456789
  103 + ///
  104 + /// 返回数据包含:
  105 + /// - 活动基础信息(ID、名称、编号、负责人、开始时间、结束时间)
  106 + /// - 成员列表(用户ID、部门ID、战队名称、创建时间、创建用户)
  107 + ///
  108 + /// 如果活动不存在,将返回404错误。
  109 + /// </remarks>
  110 + /// <param name="id">拓客活动ID</param>
  111 + /// <returns>拓客活动详情,包含成员信息</returns>
  112 + /// <response code="200">成功返回拓客活动详情</response>
  113 + /// <response code="404">拓客活动不存在</response>
  114 + /// <response code="500">服务器内部错误</response>
  115 + [HttpGet("{id}")]
  116 + public async Task<dynamic> GetInfo(string id)
  117 + {
  118 + // 1. 获取拓客活动基本信息
  119 + var entity = await _db.Queryable<LqEventEntity>().FirstAsync(p => p.Id == id);
  120 + if (entity == null)
  121 + {
  122 + throw NCCException.Oh("拓客活动不存在");
  123 + }
  124 +
  125 + var output = entity.Adapt<LqEventInfoOutput>();
  126 +
  127 + // 2. 获取拓客活动成员信息
  128 + var members = await _db.Queryable<LqEventUserEntity>().Where(u => u.EventId == id.ToString()).ToListAsync();
  129 +
  130 + // 3. 转换为输出格式
  131 + output.Members = members.Adapt<List<LqEventUserInfoOutput>>();
  132 +
  133 + return output;
  134 + }
  135 + #endregion
  136 +
  137 + #region 创建拓客活动
  138 + /// <summary>
  139 + /// 创建拓客活动
  140 + /// </summary>
  141 + /// <remarks>
  142 + /// 创建新的拓客活动,可以同时添加参与成员。
  143 + /// 系统会自动生成活动ID,并记录创建用户信息。
  144 + ///
  145 + /// 示例请求:
  146 + /// POST /api/Extend/LqEvent
  147 + /// Content-Type: application/json
  148 + ///
  149 + /// ```json
  150 + /// {
  151 + /// "eventName": "春节拓客活动",
  152 + /// "eventNumber": "TK2024001",
  153 + /// "eventCoordinator": "张三",
  154 + /// "startTime": "2024-01-15T09:00:00",
  155 + /// "endTime": "2024-01-20T18:00:00",
  156 + /// "members": [
  157 + /// {
  158 + /// "userId": "user001",
  159 + /// "depId": "dept001",
  160 + /// "teamName": "第一战队"
  161 + /// },
  162 + /// {
  163 + /// "userId": "user002",
  164 + /// "depId": "dept001",
  165 + /// "teamName": "第二战队"
  166 + /// }
  167 + /// ]
  168 + /// }
  169 + /// ```
  170 + ///
  171 + /// 参数验证:
  172 + /// - eventName: 必填,最大长度255字符
  173 + /// - eventNumber: 可选,最大长度255字符
  174 + /// - eventCoordinator: 可选,最大长度255字符
  175 + /// - members: 可选,成员列表
  176 + /// - userId: 必填
  177 + /// - depId: 可选
  178 + /// - teamName: 可选
  179 + ///
  180 + /// 创建流程:
  181 + /// 1. 生成新的活动ID
  182 + /// 2. 插入拓客活动记录
  183 + /// 3. 插入成员记录(如果有)
  184 + /// </remarks>
  185 + /// <param name="input">创建参数</param>
  186 + /// <returns>无返回值</returns>
  187 + /// <response code="200">拓客活动创建成功</response>
  188 + /// <response code="400">请求参数错误或验证失败</response>
  189 + /// <response code="500">服务器内部错误</response>
  190 + [HttpPost("")]
  191 + public async Task Create([FromBody] LqEventCrInput input)
  192 + {
  193 + var userInfo = await _userManager.GetUserInfo();
  194 + var entity = input.Adapt<LqEventEntity>();
  195 +
  196 + // 生成新的ID
  197 + entity.Id = YitIdHelper.NextId().ToString();
  198 +
  199 + // 插入拓客活动
  200 + var isOk = await _db.Insertable(entity).ExecuteCommandAsync();
  201 + if (!(isOk > 0))
  202 + throw NCCException.Oh("创建拓客活动失败");
  203 +
  204 + // 插入拓客活动成员
  205 + if (input.Members != null && input.Members.Count > 0)
  206 + {
  207 + var memberEntities = new List<LqEventUserEntity>();
  208 + foreach (var member in input.Members)
  209 + {
  210 + memberEntities.Add(
  211 + new LqEventUserEntity
  212 + {
  213 + Id = YitIdHelper.NextId().ToString(),
  214 + EventId = entity.Id.ToString(),
  215 + UserId = member.UserId,
  216 + DepId = member.DepId,
  217 + TeamName = member.TeamName,
  218 + CreationTime = DateTime.Now,
  219 + CreationUser = userInfo?.userName,
  220 + }
  221 + );
  222 + }
  223 +
  224 + await _db.Insertable(memberEntities).ExecuteCommandAsync();
  225 + }
  226 + }
  227 + #endregion
  228 +
  229 + #region 更新拓客活动
  230 + /// <summary>
  231 + /// 更新拓客活动
  232 + /// </summary>
  233 + /// <remarks>
  234 + /// 更新拓客活动信息,包括基础信息和成员列表。
  235 + /// 更新时会先删除原有成员,再添加新成员。
  236 + ///
  237 + /// 示例请求:
  238 + /// PUT /api/Extend/LqEvent
  239 + /// Content-Type: application/json
  240 + ///
  241 + /// ```json
  242 + /// {
  243 + /// "id": "1234567890123456789",
  244 + /// "eventName": "春节拓客活动(更新)",
  245 + /// "eventNumber": "TK2024001",
  246 + /// "eventCoordinator": "李四",
  247 + /// "startTime": "2024-01-15T09:00:00",
  248 + /// "endTime": "2024-01-25T18:00:00",
  249 + /// "members": [
  250 + /// {
  251 + /// "userId": "user003",
  252 + /// "depId": "dept002",
  253 + /// "teamName": "精英战队"
  254 + /// }
  255 + /// ]
  256 + /// }
  257 + /// ```
  258 + ///
  259 + /// 参数验证:
  260 + /// - id: 必填,拓客活动ID
  261 + /// - eventName: 必填,最大长度255字符
  262 + /// - eventNumber: 可选,最大长度255字符
  263 + /// - eventCoordinator: 可选,最大长度255字符
  264 + /// - members: 可选,成员列表(为空则清空所有成员)
  265 + ///
  266 + /// 更新流程:
  267 + /// 1. 更新拓客活动记录
  268 + /// 2. 删除原有成员记录
  269 + /// 3. 插入新成员记录(如果有)
  270 + /// </remarks>
  271 + /// <param name="input">更新参数</param>
  272 + /// <returns>无返回值</returns>
  273 + /// <response code="200">拓客活动更新成功</response>
  274 + /// <response code="400">请求参数错误或验证失败</response>
  275 + /// <response code="404">拓客活动不存在</response>
  276 + /// <response code="500">服务器内部错误</response>
  277 + [HttpPut("")]
  278 + public async Task Update([FromBody] LqEventUpInput input)
  279 + {
  280 + var userInfo = await _userManager.GetUserInfo();
  281 + var entity = input.Adapt<LqEventEntity>();
  282 +
  283 + // 更新拓客活动
  284 + var isOk = await _db.Updateable(entity).ExecuteCommandAsync();
  285 + if (!(isOk > 0))
  286 + throw NCCException.Oh("更新拓客活动失败");
  287 +
  288 + // 删除原有成员
  289 + await _db.Deleteable<LqEventUserEntity>().Where(u => u.EventId == entity.Id.ToString()).ExecuteCommandAsync();
  290 +
  291 + // 插入新成员
  292 + if (input.Members != null && input.Members.Count > 0)
  293 + {
  294 + var memberEntities = new List<LqEventUserEntity>();
  295 + foreach (var member in input.Members)
  296 + {
  297 + memberEntities.Add(
  298 + new LqEventUserEntity
  299 + {
  300 + Id = YitIdHelper.NextId().ToString(),
  301 + EventId = entity.Id.ToString(),
  302 + UserId = member.UserId,
  303 + DepId = member.DepId,
  304 + TeamName = member.TeamName,
  305 + CreationTime = DateTime.Now,
  306 + CreationUser = userInfo?.userName,
  307 + }
  308 + );
  309 + }
  310 +
  311 + await _db.Insertable(memberEntities).ExecuteCommandAsync();
  312 + }
  313 + }
  314 + #endregion
  315 +
  316 + #region 删除拓客活动
  317 + /// <summary>
  318 + /// 删除拓客活动
  319 + /// </summary>
  320 + /// <remarks>
  321 + /// 删除指定的拓客活动,会同时删除该活动的所有成员记录。
  322 + /// 删除操作不可恢复,请谨慎使用。
  323 + ///
  324 + /// 示例请求:
  325 + /// DELETE /api/Extend/LqEvent/1234567890123456789
  326 + ///
  327 + /// 删除顺序:
  328 + /// 1. 先删除所有相关成员记录
  329 + /// 2. 再删除拓客活动记录
  330 + ///
  331 + /// 注意事项:
  332 + /// - 删除操作不可恢复
  333 + /// - 会级联删除所有相关成员记录
  334 + /// - 如果活动不存在,将返回404错误
  335 + /// - 建议在删除前先查询确认活动信息
  336 + /// </remarks>
  337 + /// <param name="id">拓客活动ID</param>
  338 + /// <returns>无返回值</returns>
  339 + /// <response code="200">拓客活动删除成功</response>
  340 + /// <response code="404">拓客活动不存在</response>
  341 + /// <response code="500">服务器内部错误</response>
  342 + [HttpDelete("{id}")]
  343 + public async Task Delete(string id)
  344 + {
  345 + // 删除拓客活动成员
  346 + await _db.Deleteable<LqEventUserEntity>().Where(u => u.EventId == id.ToString()).ExecuteCommandAsync();
  347 +
  348 + // 删除拓客活动
  349 + var isOk = await _db.Deleteable<LqEventEntity>().Where(p => p.Id == id).ExecuteCommandAsync();
  350 +
  351 + if (!(isOk > 0))
  352 + throw NCCException.Oh("删除拓客活动失败");
  353 + }
  354 + #endregion
  355 +
  356 + #region 更新拓客目标数量
  357 + /// <summary>
  358 + /// 更新拓客目标数量
  359 + /// </summary>
  360 + /// <param name="id">拓客活动ID</param>
  361 + /// <param name="target">拓客目标数量</param>
  362 + /// <returns></returns>
  363 + [HttpPut("{id}/target")]
  364 + public async Task UpdateTarget(string id, int target)
  365 + {
  366 + var isOk = await _db.Updateable<LqEventUserEntity>().SetColumns(it => new LqEventUserEntity { EventTarget = target }).Where(x => x.EventId == id).ExecuteCommandAsync();
  367 + if (!(isOk > 0))
  368 + throw NCCException.Oh("更新拓客目标数量失败");
  369 + }
  370 + #endregion
  371 +
  372 + #region 获取拓客目标数量
  373 + /// <summary>
  374 + /// 获取拓客目标数量
  375 + /// </summary>
  376 + /// <param name="id">拓客活动ID</param>
  377 + /// <returns></returns>
  378 + [HttpGet("{id}/target")]
  379 + public async Task<int> GetTarget(string id)
  380 + {
  381 + return await _db.Queryable<LqEventUserEntity>().Where(x => x.EventId == id).Select(x => x.EventTarget).FirstAsync();
  382 + }
  383 + #endregion
  384 +
  385 + #region 根据用户ID获取参与的拓客活动
  386 +
  387 + /// <summary>
  388 + /// 根据用户ID获取参与的拓客活动
  389 + /// </summary>
  390 + /// <remarks>
  391 + /// 根据用户ID查询该用户参与的所有拓客活动,支持时间范围筛选。
  392 + /// 返回结果包含活动基础信息和用户在该活动中的详细信息。
  393 + ///
  394 + /// 示例请求:
  395 + /// GET /api/Extend/LqEvent/user/user001?startTime=2024-01-01&amp;endTime=2024-12-31
  396 + ///
  397 + /// 参数说明:
  398 + /// - userId: 用户ID(必填)
  399 + /// - startTime: 开始时间(可选),查询在此时间之后开始的活动
  400 + /// - endTime: 结束时间(可选),查询在此时间之前结束的活动
  401 + ///
  402 + /// 返回数据包含:
  403 + /// - 活动基础信息(ID、名称、编号、负责人、开始时间、结束时间)
  404 + /// - 用户参与信息(部门ID、战队名称、目标数量等)
  405 + /// </remarks>
  406 + /// <param name="userId">用户ID</param>
  407 + /// <param name="startTime">开始时间(可选)</param>
  408 + /// <param name="endTime">结束时间(可选)</param>
  409 + /// <returns>用户参与的拓客活动列表</returns>
  410 + /// <response code="200">成功返回用户参与的拓客活动列表</response>
  411 + /// <response code="400">请求参数错误</response>
  412 + /// <response code="500">服务器内部错误</response>
  413 + [HttpGet("user/{userId}")]
  414 + [ProducesResponseType(typeof(List<LqEventUserEventOutput>), 200)]
  415 + [ProducesResponseType(400)]
  416 + [ProducesResponseType(500)]
  417 + public async Task<List<LqEventUserEventOutput>> GetUserEvents(string userId, [FromQuery] DateTime? startTime = null, [FromQuery] DateTime? endTime = null)
  418 + {
  419 + try
  420 + {
  421 + // 先测试简单的查询
  422 + var eventUsers = await _db.Queryable<LqEventUserEntity>().Where(u => u.UserId == userId).ToListAsync();
  423 +
  424 + if (!eventUsers.Any())
  425 + {
  426 + return new List<LqEventUserEventOutput>();
  427 + }
  428 +
  429 + var eventIds = eventUsers.Select(u => u.EventId).ToList();
  430 +
  431 + // 查询活动信息
  432 + var events = await _db.Queryable<LqEventEntity>().Where(e => eventIds.Contains(e.Id)).ToListAsync();
  433 +
  434 + // 时间范围筛选
  435 + if (startTime.HasValue)
  436 + {
  437 + events = events.Where(e => e.StartTime >= startTime.Value).ToList();
  438 + }
  439 +
  440 + if (endTime.HasValue)
  441 + {
  442 + events = events.Where(e => e.EndTime <= endTime.Value).ToList();
  443 + }
  444 +
  445 + // 构建结果
  446 + var result = new List<LqEventUserEventOutput>();
  447 + foreach (var eventUser in eventUsers)
  448 + {
  449 + var eventInfo = events.FirstOrDefault(e => e.Id == eventUser.EventId);
  450 + if (eventInfo != null)
  451 + {
  452 + result.Add(
  453 + new LqEventUserEventOutput
  454 + {
  455 + // 活动基础信息
  456 + EventId = eventInfo.Id,
  457 + EventName = eventInfo.EventName,
  458 + EventNumber = eventInfo.EventNumber,
  459 + EventCoordinator = eventInfo.EventCoordinator,
  460 + StartTime = eventInfo.StartTime,
  461 + EndTime = eventInfo.EndTime,
  462 + // 用户参与信息
  463 + UserId = eventUser.UserId,
  464 + DepId = eventUser.DepId,
  465 + TeamName = eventUser.TeamName,
  466 + EventTarget = eventUser.EventTarget,
  467 + CreationTime = eventUser.CreationTime,
  468 + CreationUser = eventUser.CreationUser,
  469 + }
  470 + );
  471 + }
  472 + }
  473 +
  474 + // 按开始时间降序排列
  475 + return result.OrderByDescending(x => x.StartTime).ToList();
  476 + }
  477 + catch (Exception ex)
  478 + {
  479 + throw NCCException.Oh("获取用户参与的拓客活动失败", ex);
  480 + }
  481 + }
  482 + #endregion
  483 + }
  484 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs
... ... @@ -64,6 +64,7 @@ namespace NCC.Extend.LqHytkHytk
64 64 _userManager = userManager;
65 65 }
66 66  
  67 + #region 获取退卡信息列表
67 68 /// <summary>
68 69 /// 获取退卡信息列表
69 70 /// </summary>
... ... @@ -73,8 +74,7 @@ namespace NCC.Extend.LqHytkHytk
73 74 public async Task<dynamic> GetList([FromQuery] LqHytkHytkListQueryInput input)
74 75 {
75 76 var sidx = input.sidx == null ? "id" : input.sidx;
76   - List<string> queryTksj =
77   - input.tksj != null ? input.tksj.Split(',').ToObeject<List<string>>() : null;
  77 + List<string> queryTksj = input.tksj != null ? input.tksj.Split(',').ToObeject<List<string>>() : null;
78 78 DateTime? startTksj = queryTksj != null ? Ext.GetDateTime(queryTksj.First()) : null;
79 79 DateTime? endTksj = queryTksj != null ? Ext.GetDateTime(queryTksj.Last()) : null;
80 80 var data = await _db.Queryable<LqHytkHytkEntity>()
... ... @@ -91,36 +91,9 @@ namespace NCC.Extend.LqHytkHytk
91 91 .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz))
92 92 .WhereIF(!string.IsNullOrEmpty(input.tkzt), p => p.Tkzt.Contains(input.tkzt))
93 93 .WhereIF(!string.IsNullOrEmpty(input.tkyy), p => p.Tkyy.Contains(input.tkyy))
94   - .WhereIF(
95   - !string.IsNullOrEmpty(input.fileUrl),
96   - p => p.FileUrl.Contains(input.fileUrl)
97   - )
98   - .WhereIF(
99   - queryTksj != null,
100   - p =>
101   - p.Tksj
102   - >= new DateTime(
103   - startTksj.ToDate().Year,
104   - startTksj.ToDate().Month,
105   - startTksj.ToDate().Day,
106   - 0,
107   - 0,
108   - 0
109   - )
110   - )
111   - .WhereIF(
112   - queryTksj != null,
113   - p =>
114   - p.Tksj
115   - <= new DateTime(
116   - endTksj.ToDate().Year,
117   - endTksj.ToDate().Month,
118   - endTksj.ToDate().Day,
119   - 23,
120   - 59,
121   - 59
122   - )
123   - )
  94 + .WhereIF(!string.IsNullOrEmpty(input.fileUrl), p => p.FileUrl.Contains(input.fileUrl))
  95 + .WhereIF(queryTksj != null, p => p.Tksj >= new DateTime(startTksj.ToDate().Year, startTksj.ToDate().Month, startTksj.ToDate().Day, 0, 0, 0))
  96 + .WhereIF(queryTksj != null, p => p.Tksj <= new DateTime(endTksj.ToDate().Year, endTksj.ToDate().Month, endTksj.ToDate().Day, 23, 59, 59))
124 97 .WhereIF(!string.IsNullOrEmpty(input.czry), p => p.Czry.Equals(input.czry))
125 98 .Select(it => new LqHytkHytkListOutput
126 99 {
... ... @@ -146,7 +119,9 @@ namespace NCC.Extend.LqHytkHytk
146 119 .ToPagedListAsync(input.currentPage, input.pageSize);
147 120 return PageResult<LqHytkHytkListOutput>.SqlSugarPageResult(data);
148 121 }
  122 + #endregion
149 123  
  124 + #region 创建退卡信息及其关联的品项明细、健康师业绩、科技部老师业绩信息
150 125 /// <summary>
151 126 /// 创建退卡信息及其关联的品项明细、健康师业绩、科技部老师业绩信息
152 127 /// </summary>
... ... @@ -233,9 +208,7 @@ namespace NCC.Extend.LqHytkHytk
233 208 _db.BeginTran();
234 209  
235 210 // 新增退卡主表记录
236   - var newEntity = await _db.Insertable(entity)
237   - .IgnoreColumns(ignoreNullColumn: true)
238   - .ExecuteReturnEntityAsync();
  211 + var newEntity = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnEntityAsync();
239 212  
240 213 // 收集所有需要插入的实体,然后批量插入
241 214 var allMxEntities = new List<LqHytkMxEntity>();
... ... @@ -262,8 +235,7 @@ namespace NCC.Extend.LqHytkHytk
262 235 F_ProjectNumber = item.F_ProjectNumber ?? 1,
263 236 F_IsEnabled = item.F_IsEnabled ?? 1,
264 237 F_SourceType = item.F_SourceType,
265   - F_TotalPrice =
266   - item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
  238 + F_TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
267 239 };
268 240 allMxEntities.Add(lqHytkMxEntity);
269 241  
... ... @@ -289,6 +261,7 @@ namespace NCC.Extend.LqHytkHytk
289 261 F_CreateTime = DateTime.Now,
290 262 F_CreateUser = userInfo.userId,
291 263 F_DeleteMark = 0,
  264 + CardReturn = lqHytkMxEntity.Id,
292 265 }
293 266 );
294 267 }
... ... @@ -315,6 +288,7 @@ namespace NCC.Extend.LqHytkHytk
315 288 F_CreateTime = DateTime.Now,
316 289 F_CreateUser = userInfo.userId,
317 290 F_DeleteMark = 0,
  291 + CardReturn = lqHytkMxEntity.Id,
318 292 }
319 293 );
320 294 }
... ... @@ -349,7 +323,9 @@ namespace NCC.Extend.LqHytkHytk
349 323 throw NCCException.Oh(ErrorCode.COM1005, ex.Message);
350 324 }
351 325 }
  326 + #endregion
352 327  
  328 + #region 更新退卡信息及其关联的品项明细、健康师业绩、科技部老师业绩信息
353 329 /// <summary>
354 330 /// 更新退卡信息及其关联的品项明细、健康师业绩、科技部老师业绩信息
355 331 /// </summary>
... ... @@ -381,15 +357,9 @@ namespace NCC.Extend.LqHytkHytk
381 357 await _db.Updateable(entity).IgnoreColumns(true).ExecuteCommandAsync();
382 358  
383 359 // 删除原有的关联数据
384   - await _db.Deleteable<LqHytkMxEntity>()
385   - .Where(x => x.Gltkbh == id)
386   - .ExecuteCommandAsync();
387   - await _db.Deleteable<LqHytkJksyjEntity>()
388   - .Where(x => x.Gltkbh == id)
389   - .ExecuteCommandAsync();
390   - await _db.Deleteable<LqHytkKjbsyjEntity>()
391   - .Where(x => x.Gltkbh == id)
392   - .ExecuteCommandAsync();
  360 + await _db.Deleteable<LqHytkMxEntity>().Where(x => x.Gltkbh == id).ExecuteCommandAsync();
  361 + await _db.Deleteable<LqHytkJksyjEntity>().Where(x => x.Gltkbh == id).ExecuteCommandAsync();
  362 + await _db.Deleteable<LqHytkKjbsyjEntity>().Where(x => x.Gltkbh == id).ExecuteCommandAsync();
393 363  
394 364 // 收集所有需要插入的实体,然后批量插入
395 365 var allMxEntities = new List<LqHytkMxEntity>();
... ... @@ -416,8 +386,7 @@ namespace NCC.Extend.LqHytkHytk
416 386 F_ProjectNumber = item.F_ProjectNumber ?? 1,
417 387 F_IsEnabled = item.F_IsEnabled ?? 1,
418 388 F_SourceType = item.F_SourceType,
419   - F_TotalPrice =
420   - item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
  389 + F_TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
421 390 };
422 391 allMxEntities.Add(lqHytkMxEntity);
423 392  
... ... @@ -501,7 +470,9 @@ namespace NCC.Extend.LqHytkHytk
501 470 throw NCCException.Oh(ErrorCode.COM1005, ex.Message);
502 471 }
503 472 }
  473 + #endregion
504 474  
  475 + #region 删除退卡信息
505 476 /// <summary>
506 477 /// 删除退卡信息
507 478 /// </summary>
... ... @@ -517,7 +488,9 @@ namespace NCC.Extend.LqHytkHytk
517 488 await _lqHytkHytkRepository.UpdateAsync(entity);
518 489 }
519 490 }
  491 + #endregion
520 492  
  493 + #region 获取退卡信息详情
521 494 /// <summary>
522 495 /// 获取退卡信息详情
523 496 /// </summary>
... ... @@ -551,19 +524,13 @@ namespace NCC.Extend.LqHytkHytk
551 524 var output = entity.Adapt<LqHytkHytkInfoOutput>();
552 525  
553 526 // 2. 查询品项明细列表
554   - var lqHytkMxList = await _db.Queryable<LqHytkMxEntity>()
555   - .Where(w => w.Gltkbh == entity.Id)
556   - .ToListAsync();
  527 + var lqHytkMxList = await _db.Queryable<LqHytkMxEntity>().Where(w => w.Gltkbh == entity.Id).ToListAsync();
557 528  
558 529 // 3. 查询健康师业绩列表
559   - var lqHytkJksyjList = await _db.Queryable<LqHytkJksyjEntity>()
560   - .Where(w => w.Gltkbh == entity.Id)
561   - .ToListAsync();
  530 + var lqHytkJksyjList = await _db.Queryable<LqHytkJksyjEntity>().Where(w => w.Gltkbh == entity.Id).ToListAsync();
562 531  
563 532 // 4. 查询科技部老师业绩列表
564   - var lqHytkKjbsyjList = await _db.Queryable<LqHytkKjbsyjEntity>()
565   - .Where(w => w.Gltkbh == entity.Id)
566   - .ToListAsync();
  533 + var lqHytkKjbsyjList = await _db.Queryable<LqHytkKjbsyjEntity>().Where(w => w.Gltkbh == entity.Id).ToListAsync();
567 534  
568 535 // 5. 构建品项明细输出,每个品项关联对应的业绩信息
569 536 var mxOutputList = new List<LqHytkMxInfoOutput>();
... ... @@ -584,11 +551,11 @@ namespace NCC.Extend.LqHytkHytk
584 551 };
585 552  
586 553 // 关联该品项的健康师业绩
587   - var jksyjForMx = lqHytkJksyjList.Where(j => j.F_tkpxid == mx.Id).ToList();
  554 + var jksyjForMx = lqHytkJksyjList.Where(j => j.CardReturn == mx.Id).ToList();
588 555 mxOutput.lqHytkJksyjList = jksyjForMx.Adapt<List<LqHytkJksyjInfoOutput>>();
589 556  
590 557 // 关联该品项的科技部老师业绩
591   - var kjbsyjForMx = lqHytkKjbsyjList.Where(k => k.F_tkpxid == mx.Id).ToList();
  558 + var kjbsyjForMx = lqHytkKjbsyjList.Where(k => k.CardReturn == mx.Id).ToList();
592 559 mxOutput.lqHytkKjbsyjList = kjbsyjForMx.Adapt<List<LqHytkKjbsyjInfoOutput>>();
593 560  
594 561 mxOutputList.Add(mxOutput);
... ... @@ -608,5 +575,6 @@ namespace NCC.Extend.LqHytkHytk
608 575 throw NCCException.Oh(ErrorCode.COM1000, "获取退卡记录失败");
609 576 }
610 577 }
  578 + #endregion
611 579 }
612 580 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqJlmxbService.cs
1   -using NCC.Common.Core.Manager;
  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;
2 10 using NCC.Common.Enum;
3 11 using NCC.Common.Extension;
4 12 using NCC.Common.Filter;
  13 +using NCC.Common.Helper;
  14 +using NCC.Common.Model.NPOI;
  15 +using NCC.DataEncryption;
5 16 using NCC.Dependency;
6 17 using NCC.DynamicApiController;
7   -using NCC.FriendlyException;
  18 +using NCC.Extend.Entitys.Dto.LqJlmxb;
  19 +using NCC.Extend.Entitys.lq_jlmxb;
8 20 using NCC.Extend.Interfaces.LqJlmxb;
9   -using Mapster;
10   -using Microsoft.AspNetCore.Mvc;
  21 +using NCC.FriendlyException;
  22 +using NCC.JsonSerialization;
11 23 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_jlmxb;
17   -using NCC.Extend.Entitys.Dto.LqJlmxb;
18 24 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 25  
26 26 namespace NCC.Extend.LqJlmxb
27 27 {
28 28 /// <summary>
29 29 /// 奖励统计表服务
30 30 /// </summary>
31   - [ApiDescriptionSettings(Tag = "Extend",Name = "LqJlmxb", Order = 200)]
  31 + [ApiDescriptionSettings(Tag = "Extend", Name = "LqJlmxb", Order = 200)]
32 32 [Route("api/Extend/[controller]")]
33 33 public class LqJlmxbService : ILqJlmxbService, IDynamicApiController, ITransient
34 34 {
... ... @@ -39,11 +39,9 @@ namespace NCC.Extend.LqJlmxb
39 39 /// <summary>
40 40 /// 初始化一个<see cref="LqJlmxbService"/>类型的新实例
41 41 /// </summary>
42   - public LqJlmxbService(
43   - ISqlSugarRepository<LqJlmxbEntity> lqJlmxbRepository,
44   - IUserManager userManager)
  42 + public LqJlmxbService(ISqlSugarRepository<LqJlmxbEntity> lqJlmxbRepository, IUserManager userManager)
45 43 {
46   - _lqJlmxbRepository = lqJlmxbRepository;
  44 + _lqJlmxbRepository = lqJlmxbRepository;
47 45 _db = _lqJlmxbRepository.Context;
48 46 _userManager = userManager;
49 47 }
... ... @@ -62,10 +60,10 @@ namespace NCC.Extend.LqJlmxb
62 60 }
63 61  
64 62 /// <summary>
65   - /// 获取奖励统计表列表
66   - /// </summary>
67   - /// <param name="input">请求参数</param>
68   - /// <returns></returns>
  63 + /// 获取奖励统计表列表
  64 + /// </summary>
  65 + /// <param name="input">请求参数</param>
  66 + /// <returns></returns>
69 67 [HttpGet("")]
70 68 public async Task<dynamic> GetList([FromQuery] LqJlmxbListQueryInput input)
71 69 {
... ... @@ -87,26 +85,29 @@ namespace NCC.Extend.LqJlmxb
87 85 .WhereIF(!string.IsNullOrEmpty(input.hj), p => p.Hj.Contains(input.hj))
88 86 .WhereIF(!string.IsNullOrEmpty(input.kcmx), p => p.Kcmx.Contains(input.kcmx))
89 87 .WhereIF(!string.IsNullOrEmpty(input.bhjb), p => p.Bhjb.Contains(input.bhjb))
90   - .Select(it=> new LqJlmxbListOutput
  88 + .Select(it => new LqJlmxbListOutput
91 89 {
92 90 id = it.Id,
93   - mdbh=it.Mdbh,
94   - mdmc=it.Mdmc,
95   - gw=it.Gw,
96   - jks=it.Jks,
97   - ymmsk=it.Ymmsk,
98   - kjbmsk=it.Kjbmsk,
99   - cjj=it.Cjj,
100   - pk=it.Pk,
101   - ty=it.Ty,
102   - db=it.Db,
103   - cs=it.Cs,
104   - jb=it.Jb,
105   - hj=it.Hj,
106   - kcmx=it.Kcmx,
107   - bhjb=it.Bhjb,
108   - }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
109   - return PageResult<LqJlmxbListOutput>.SqlSugarPageResult(data);
  91 + mdbh = it.Mdbh,
  92 + mdmc = it.Mdmc,
  93 + gw = it.Gw,
  94 + jks = it.Jks,
  95 + ymmsk = it.Ymmsk,
  96 + kjbmsk = it.Kjbmsk,
  97 + cjj = it.Cjj,
  98 + pk = it.Pk,
  99 + ty = it.Ty,
  100 + db = it.Db,
  101 + cs = it.Cs,
  102 + jb = it.Jb,
  103 + hj = it.Hj,
  104 + kcmx = it.Kcmx,
  105 + bhjb = it.Bhjb,
  106 + })
  107 + .MergeTable()
  108 + .OrderBy(sidx + " " + input.sort)
  109 + .ToPagedListAsync(input.currentPage, input.pageSize);
  110 + return PageResult<LqJlmxbListOutput>.SqlSugarPageResult(data);
110 111 }
111 112  
112 113 /// <summary>
... ... @@ -121,14 +122,15 @@ namespace NCC.Extend.LqJlmxb
121 122 var entity = input.Adapt<LqJlmxbEntity>();
122 123 entity.Id = YitIdHelper.NextId().ToString();
123 124 var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
124   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000);
  125 + if (!(isOk > 0))
  126 + throw NCCException.Oh(ErrorCode.COM1000);
125 127 }
126 128  
127 129 /// <summary>
128   - /// 获取奖励统计表无分页列表
129   - /// </summary>
130   - /// <param name="input">请求参数</param>
131   - /// <returns></returns>
  130 + /// 获取奖励统计表无分页列表
  131 + /// </summary>
  132 + /// <param name="input">请求参数</param>
  133 + /// <returns></returns>
132 134 [NonAction]
133 135 public async Task<dynamic> GetNoPagingList([FromQuery] LqJlmxbListQueryInput input)
134 136 {
... ... @@ -150,33 +152,36 @@ namespace NCC.Extend.LqJlmxb
150 152 .WhereIF(!string.IsNullOrEmpty(input.hj), p => p.Hj.Contains(input.hj))
151 153 .WhereIF(!string.IsNullOrEmpty(input.kcmx), p => p.Kcmx.Contains(input.kcmx))
152 154 .WhereIF(!string.IsNullOrEmpty(input.bhjb), p => p.Bhjb.Contains(input.bhjb))
153   - .Select(it=> new LqJlmxbListOutput
  155 + .Select(it => new LqJlmxbListOutput
154 156 {
155 157 id = it.Id,
156   - mdbh=it.Mdbh,
157   - mdmc=it.Mdmc,
158   - gw=it.Gw,
159   - jks=it.Jks,
160   - ymmsk=it.Ymmsk,
161   - kjbmsk=it.Kjbmsk,
162   - cjj=it.Cjj,
163   - pk=it.Pk,
164   - ty=it.Ty,
165   - db=it.Db,
166   - cs=it.Cs,
167   - jb=it.Jb,
  158 + mdbh = it.Mdbh,
  159 + mdmc = it.Mdmc,
  160 + gw = it.Gw,
  161 + jks = it.Jks,
  162 + ymmsk = it.Ymmsk,
  163 + kjbmsk = it.Kjbmsk,
  164 + cjj = it.Cjj,
  165 + pk = it.Pk,
  166 + ty = it.Ty,
  167 + db = it.Db,
  168 + cs = it.Cs,
  169 + jb = it.Jb,
168 170 hj = it.Hj,
169   - kcmx=it.Kcmx,
170   - bhjb=it.Bhjb,
171   - }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync();
172   - return data;
  171 + kcmx = it.Kcmx,
  172 + bhjb = it.Bhjb,
  173 + })
  174 + .MergeTable()
  175 + .OrderBy(sidx + " " + input.sort)
  176 + .ToListAsync();
  177 + return data;
173 178 }
174 179  
175 180 /// <summary>
176   - /// 导出奖励统计表
177   - /// </summary>
178   - /// <param name="input">请求参数</param>
179   - /// <returns></returns>
  181 + /// 导出奖励统计表
  182 + /// </summary>
  183 + /// <param name="input">请求参数</param>
  184 + /// <returns></returns>
180 185 [HttpGet("Actions/Export")]
181 186 public async Task<dynamic> Export([FromQuery] LqJlmxbListQueryInput input)
182 187 {
... ... @@ -191,7 +196,8 @@ namespace NCC.Extend.LqJlmxb
191 196 {
192 197 exportData = await this.GetNoPagingList(input);
193 198 }
194   - List<ParamsModel> paramList = "[{\"value\":\"奖励编号\",\"field\":\"id\"},{\"value\":\"门店编号\",\"field\":\"mdbh\"},{\"value\":\"门店名称\",\"field\":\"mdmc\"},{\"value\":\"岗位\",\"field\":\"gw\"},{\"value\":\"健康师\",\"field\":\"jks\"},{\"value\":\"医美秒杀卡\",\"field\":\"ymmsk\"},{\"value\":\"科技部秒杀卡\",\"field\":\"kjbmsk\"},{\"value\":\"成交奖\",\"field\":\"cjj\"},{\"value\":\"PK\",\"field\":\"pk\"},{\"value\":\"体验\",\"field\":\"ty\"},{\"value\":\"打版\",\"field\":\"db\"},{\"value\":\"沉睡\",\"field\":\"cs\"},{\"value\":\"嘉宾\",\"field\":\"jb\"},{\"value\":\"合计\",\"field\":\"hj\"},{\"value\":\"扣除明细\",\"field\":\"kcmx\"},{\"value\":\"不含嘉宾\",\"field\":\"bhjb\"},]".ToList<ParamsModel>();
  199 + List<ParamsModel> paramList =
  200 + "[{\"value\":\"奖励编号\",\"field\":\"id\"},{\"value\":\"门店编号\",\"field\":\"mdbh\"},{\"value\":\"门店名称\",\"field\":\"mdmc\"},{\"value\":\"岗位\",\"field\":\"gw\"},{\"value\":\"健康师\",\"field\":\"jks\"},{\"value\":\"医美秒杀卡\",\"field\":\"ymmsk\"},{\"value\":\"科技部秒杀卡\",\"field\":\"kjbmsk\"},{\"value\":\"成交奖\",\"field\":\"cjj\"},{\"value\":\"PK\",\"field\":\"pk\"},{\"value\":\"体验\",\"field\":\"ty\"},{\"value\":\"打版\",\"field\":\"db\"},{\"value\":\"沉睡\",\"field\":\"cs\"},{\"value\":\"嘉宾\",\"field\":\"jb\"},{\"value\":\"合计\",\"field\":\"hj\"},{\"value\":\"扣除明细\",\"field\":\"kcmx\"},{\"value\":\"不含嘉宾\",\"field\":\"bhjb\"},]".ToList<ParamsModel>();
195 201 ExcelConfig excelconfig = new ExcelConfig();
196 202 excelconfig.FileName = "奖励统计表.xls";
197 203 excelconfig.HeadFont = "微软雅黑";
... ... @@ -210,11 +216,7 @@ namespace NCC.Extend.LqJlmxb
210 216 var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
211 217 ExcelExportHelper<LqJlmxbListOutput>.Export(exportData, excelconfig, addPath);
212 218 var fileName = _userManager.UserId + "|" + addPath + "|xls";
213   - var output = new
214   - {
215   - name = excelconfig.FileName,
216   - url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC")
217   - };
  219 + var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
218 220 return output;
219 221 }
220 222  
... ... @@ -234,7 +236,7 @@ namespace NCC.Extend.LqJlmxb
234 236 //开启事务
235 237 _db.BeginTran();
236 238 //批量删除奖励统计表
237   - await _db.Deleteable<LqJlmxbEntity>().In(d => d.Id,ids).ExecuteCommandAsync();
  239 + await _db.Deleteable<LqJlmxbEntity>().In(d => d.Id, ids).ExecuteCommandAsync();
238 240 //关闭事务
239 241 _db.CommitTran();
240 242 }
... ... @@ -258,7 +260,8 @@ namespace NCC.Extend.LqJlmxb
258 260 {
259 261 var entity = input.Adapt<LqJlmxbEntity>();
260 262 var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
261   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001);
  263 + if (!(isOk > 0))
  264 + throw NCCException.Oh(ErrorCode.COM1001);
262 265 }
263 266  
264 267 /// <summary>
... ... @@ -271,7 +274,8 @@ namespace NCC.Extend.LqJlmxb
271 274 var entity = await _db.Queryable<LqJlmxbEntity>().FirstAsync(p => p.Id == id);
272 275 _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
273 276 var isOk = await _db.Deleteable<LqJlmxbEntity>().Where(d => d.Id == id).ExecuteCommandAsync();
274   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1002);
  277 + if (!(isOk > 0))
  278 + throw NCCException.Oh(ErrorCode.COM1002);
275 279 }
276 280 }
277 281 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs
1   -using NCC.Common.Core.Manager;
  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;
2 10 using NCC.Common.Enum;
3 11 using NCC.Common.Extension;
4 12 using NCC.Common.Filter;
  13 +using NCC.Common.Helper;
  14 +using NCC.Common.Model.NPOI;
  15 +using NCC.DataEncryption;
5 16 using NCC.Dependency;
6 17 using NCC.DynamicApiController;
7   -using NCC.FriendlyException;
8   -using NCC.Extend.Interfaces.LqTkjlb;
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_tkjlb;
17   -using NCC.Extend.Entitys.lq_ryzl;
18 18 using NCC.Extend.Entitys.Dto.LqTkjlb;
19   -using Yitter.IdGenerator;
20   -using NCC.Common.Helper;
  19 +using NCC.Extend.Entitys.lq_ryzl;
  20 +using NCC.Extend.Entitys.lq_tkjlb;
  21 +using NCC.Extend.Interfaces.LqTkjlb;
  22 +using NCC.FriendlyException;
21 23 using NCC.JsonSerialization;
22   -using NCC.Common.Model.NPOI;
23   -using NCC.Common.Configuration;
24   -using NCC.DataEncryption;
25   -using NCC.ClayObject;
26 24 using NCC.System.Entitys.Permission;
  25 +using SqlSugar;
  26 +using Yitter.IdGenerator;
27 27  
28 28 namespace NCC.Extend.LqTkjlb
29 29 {
30 30 /// <summary>
31 31 /// 拓客管理服务
32 32 /// </summary>
33   - [ApiDescriptionSettings(Tag = "Extend",Name = "LqTkjlb", Order = 200)]
  33 + [ApiDescriptionSettings(Tag = "Extend", Name = "LqTkjlb", Order = 200)]
34 34 [Route("api/Extend/[controller]")]
35 35 public class LqTkjlbService : ILqTkjlbService, IDynamicApiController, ITransient
36 36 {
... ... @@ -41,15 +41,14 @@ namespace NCC.Extend.LqTkjlb
41 41 /// <summary>
42 42 /// 初始化一个<see cref="LqTkjlbService"/>类型的新实例
43 43 /// </summary>
44   - public LqTkjlbService(
45   - ISqlSugarRepository<LqTkjlbEntity> lqTkjlbRepository,
46   - IUserManager userManager)
  44 + public LqTkjlbService(ISqlSugarRepository<LqTkjlbEntity> lqTkjlbRepository, IUserManager userManager)
47 45 {
48   - _lqTkjlbRepository = lqTkjlbRepository;
  46 + _lqTkjlbRepository = lqTkjlbRepository;
49 47 _db = _lqTkjlbRepository.Context;
50 48 _userManager = userManager;
51 49 }
52 50  
  51 + #region 获取拓客管理
53 52 /// <summary>
54 53 /// 获取拓客管理
55 54 /// </summary>
... ... @@ -62,12 +61,14 @@ namespace NCC.Extend.LqTkjlb
62 61 var output = entity.Adapt<LqTkjlbInfoOutput>();
63 62 return output;
64 63 }
  64 + #endregion
  65 + #region 获取拓客管理列表
65 66  
66 67 /// <summary>
67   - /// 获取拓客管理列表
68   - /// </summary>
69   - /// <param name="input">请求参数</param>
70   - /// <returns></returns>
  68 + /// 获取拓客管理列表
  69 + /// </summary>
  70 + /// <param name="input">请求参数</param>
  71 + /// <returns></returns>
71 72 [HttpGet("")]
72 73 public async Task<dynamic> GetList([FromQuery] LqTkjlbListQueryInput input)
73 74 {
... ... @@ -88,25 +89,29 @@ namespace NCC.Extend.LqTkjlb
88 89 .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz))
89 90 .WhereIF(!string.IsNullOrEmpty(input.ssmd), p => p.Ssmd.Contains(input.ssmd))
90 91 .WhereIF(!string.IsNullOrEmpty(input.sszd), p => p.Sszd.Contains(input.sszd))
91   - .Select(it=> new LqTkjlbListOutput
  92 + .Select(it => new LqTkjlbListOutput
92 93 {
93 94 id = it.Id,
94   - tksj=it.Tksj,
95   - // tkry=it.Tkry,
  95 + tksj = it.Tksj,
  96 + // tkry=it.Tkry,
96 97 tkry = SqlFunc.Subqueryable<UserEntity>().Where(u => u.MobilePhone == it.Tkry).Select(u => u.RealName),
97 98  
98   - gkxm=it.Gkxm,
99   - dhhm=it.Dhhm,
100   - gmzs=it.Gmzs,
101   - zffs=it.Zffs,
102   - sfjwx=it.Sfjwx,
103   - bz=it.Bz,
104   - ssmd=it.Ssmd,
105   - sszd=it.Sszd,
106   - }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
107   - return PageResult<LqTkjlbListOutput>.SqlSugarPageResult(data);
  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 + ssmd = it.Ssmd,
  106 + sszd = it.Sszd,
  107 + })
  108 + .MergeTable()
  109 + .OrderBy(sidx + " " + input.sort)
  110 + .ToPagedListAsync(input.currentPage, input.pageSize);
  111 + return PageResult<LqTkjlbListOutput>.SqlSugarPageResult(data);
108 112 }
109   -
  113 + #endregion
  114 + #region 新建拓客管理
110 115 /// <summary>
111 116 /// 新建拓客管理
112 117 /// </summary>
... ... @@ -127,14 +132,16 @@ namespace NCC.Extend.LqTkjlb
127 132 }
128 133  
129 134 var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
130   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000);
  135 + if (!(isOk > 0))
  136 + throw NCCException.Oh(ErrorCode.COM1000);
131 137 }
132   -
  138 + #endregion
  139 + #region 获取拓客管理无分页列表
133 140 /// <summary>
134   - /// 获取拓客管理无分页列表
135   - /// </summary>
136   - /// <param name="input">请求参数</param>
137   - /// <returns></returns>
  141 + /// 获取拓客管理无分页列表
  142 + /// </summary>
  143 + /// <param name="input">请求参数</param>
  144 + /// <returns></returns>
138 145 [NonAction]
139 146 public async Task<dynamic> GetNoPagingList([FromQuery] LqTkjlbListQueryInput input)
140 147 {
... ... @@ -155,28 +162,32 @@ namespace NCC.Extend.LqTkjlb
155 162 .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz))
156 163 .WhereIF(!string.IsNullOrEmpty(input.ssmd), p => p.Ssmd.Contains(input.ssmd))
157 164 .WhereIF(!string.IsNullOrEmpty(input.sszd), p => p.Sszd.Contains(input.sszd))
158   - .Select(it=> new LqTkjlbListOutput
  165 + .Select(it => new LqTkjlbListOutput
159 166 {
160 167 id = it.Id,
161   - tksj=it.Tksj,
162   - tkry=it.Tkry,
163   - gkxm=it.Gkxm,
164   - dhhm=it.Dhhm,
165   - gmzs=it.Gmzs,
166   - zffs=it.Zffs,
167   - sfjwx=it.Sfjwx,
168   - bz=it.Bz,
169   - ssmd=it.Ssmd,
170   - sszd=it.Sszd,
171   - }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync();
172   - return data;
  168 + tksj = it.Tksj,
  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 + ssmd = it.Ssmd,
  177 + sszd = it.Sszd,
  178 + })
  179 + .MergeTable()
  180 + .OrderBy(sidx + " " + input.sort)
  181 + .ToListAsync();
  182 + return data;
173 183 }
174   -
  184 + #endregion
  185 + #region 导出拓客管理
175 186 /// <summary>
176   - /// 导出拓客管理
177   - /// </summary>
178   - /// <param name="input">请求参数</param>
179   - /// <returns></returns>
  187 + /// 导出拓客管理
  188 + /// </summary>
  189 + /// <param name="input">请求参数</param>
  190 + /// <returns></returns>
180 191 [HttpGet("Actions/Export")]
181 192 public async Task<dynamic> Export([FromQuery] LqTkjlbListQueryInput input)
182 193 {
... ... @@ -191,7 +202,8 @@ namespace NCC.Extend.LqTkjlb
191 202 {
192 203 exportData = await this.GetNoPagingList(input);
193 204 }
194   - List<ParamsModel> paramList = "[{\"value\":\"拓客编号\",\"field\":\"id\"},{\"value\":\"拓客人员\",\"field\":\"tkry\"},{\"value\":\"拓客时间\",\"field\":\"tksj\"},{\"value\":\"顾客姓名\",\"field\":\"gkxm\"},{\"value\":\"电话号码\",\"field\":\"dhhm\"},{\"value\":\"购买张数\",\"field\":\"gmzs\"},{\"value\":\"支付方式\",\"field\":\"zffs\"},{\"value\":\"是否加微信\",\"field\":\"sfjwx\"},{\"value\":\"备注\",\"field\":\"bz\"},{\"value\":\"所属门店\",\"field\":\"ssmd\"},{\"value\":\"所属战队\",\"field\":\"sszd\"},]".ToList<ParamsModel>();
  205 + List<ParamsModel> paramList =
  206 + "[{\"value\":\"拓客编号\",\"field\":\"id\"},{\"value\":\"拓客人员\",\"field\":\"tkry\"},{\"value\":\"拓客时间\",\"field\":\"tksj\"},{\"value\":\"顾客姓名\",\"field\":\"gkxm\"},{\"value\":\"电话号码\",\"field\":\"dhhm\"},{\"value\":\"购买张数\",\"field\":\"gmzs\"},{\"value\":\"支付方式\",\"field\":\"zffs\"},{\"value\":\"是否加微信\",\"field\":\"sfjwx\"},{\"value\":\"备注\",\"field\":\"bz\"},{\"value\":\"所属门店\",\"field\":\"ssmd\"},{\"value\":\"所属战队\",\"field\":\"sszd\"},]".ToList<ParamsModel>();
195 207 ExcelConfig excelconfig = new ExcelConfig();
196 208 excelconfig.FileName = "拓客管理.xls";
197 209 excelconfig.HeadFont = "微软雅黑";
... ... @@ -210,13 +222,11 @@ namespace NCC.Extend.LqTkjlb
210 222 var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
211 223 ExcelExportHelper<LqTkjlbListOutput>.Export(exportData, excelconfig, addPath);
212 224 var fileName = _userManager.UserId + "|" + addPath + "|xls";
213   - var output = new
214   - {
215   - name = excelconfig.FileName,
216   - url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC")
217   - };
  225 + var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
218 226 return output;
219 227 }
  228 + #endregion
  229 + #region 批量删除拓客管理
220 230  
221 231 /// <summary>
222 232 /// 批量删除拓客管理
... ... @@ -234,7 +244,7 @@ namespace NCC.Extend.LqTkjlb
234 244 //开启事务
235 245 _db.BeginTran();
236 246 //批量删除拓客管理
237   - await _db.Deleteable<LqTkjlbEntity>().In(d => d.Id,ids).ExecuteCommandAsync();
  247 + await _db.Deleteable<LqTkjlbEntity>().In(d => d.Id, ids).ExecuteCommandAsync();
238 248 //关闭事务
239 249 _db.CommitTran();
240 250 }
... ... @@ -246,7 +256,8 @@ namespace NCC.Extend.LqTkjlb
246 256 }
247 257 }
248 258 }
249   -
  259 + #endregion
  260 + #region 更新拓客管理
250 261 /// <summary>
251 262 /// 更新拓客管理
252 263 /// </summary>
... ... @@ -258,9 +269,11 @@ namespace NCC.Extend.LqTkjlb
258 269 {
259 270 var entity = input.Adapt<LqTkjlbEntity>();
260 271 var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
261   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001);
  272 + if (!(isOk > 0))
  273 + throw NCCException.Oh(ErrorCode.COM1001);
262 274 }
263   -
  275 + #endregion
  276 + #region 删除拓客管理
264 277 /// <summary>
265 278 /// 删除拓客管理
266 279 /// </summary>
... ... @@ -271,9 +284,11 @@ namespace NCC.Extend.LqTkjlb
271 284 var entity = await _db.Queryable<LqTkjlbEntity>().FirstAsync(p => p.Id == id);
272 285 _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
273 286 var isOk = await _db.Deleteable<LqTkjlbEntity>().Where(d => d.Id == id).ExecuteCommandAsync();
274   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1002);
  287 + if (!(isOk > 0))
  288 + throw NCCException.Oh(ErrorCode.COM1002);
275 289 }
276   -
  290 + #endregion
  291 + #region 获取拓客排行榜
277 292 /// <summary>
278 293 /// 获取拓客排行榜
279 294 /// </summary>
... ... @@ -281,14 +296,7 @@ namespace NCC.Extend.LqTkjlb
281 296 [HttpGet("Actions/GetRanking")]
282 297 public async Task<dynamic> GetRanking()
283 298 {
284   - var data = await _db.Queryable<LqTkjlbEntity>()
285   - .GroupBy(it => it.Sszd)
286   - .Select(it => new LqTkjlbRankingOutput
287   - {
288   - sszd = it.Sszd,
289   - tkrs = SqlFunc.AggregateCount(it.Id)
290   - })
291   - .ToListAsync();
  299 + var data = await _db.Queryable<LqTkjlbEntity>().GroupBy(it => it.Sszd).Select(it => new LqTkjlbRankingOutput { sszd = it.Sszd, tkrs = SqlFunc.AggregateCount(it.Id) }).ToListAsync();
292 300  
293 301 // 在内存中排序并添加排名
294 302 var sortedData = data.OrderByDescending(it => it.tkrs).ToList();
... ... @@ -299,7 +307,8 @@ namespace NCC.Extend.LqTkjlb
299 307  
300 308 return sortedData;
301 309 }
302   -
  310 + #endregion
  311 + #region 获取战队人员详细报表
303 312 /// <summary>
304 313 /// 获取战队人员详细报表
305 314 /// </summary>
... ... @@ -310,10 +319,7 @@ namespace NCC.Extend.LqTkjlb
310 319 var result = new List<LqTkjlbTeamDetailOutput>();
311 320  
312 321 // 获取所有战队
313   - var teams = await _db.Queryable<LqTkjlbEntity>()
314   - .GroupBy(it => it.Sszd)
315   - .Select(it => it.Sszd)
316   - .ToListAsync();
  322 + var teams = await _db.Queryable<LqTkjlbEntity>().GroupBy(it => it.Sszd).Select(it => it.Sszd).ToListAsync();
317 323  
318 324 foreach (var team in teams)
319 325 {
... ... @@ -323,15 +329,15 @@ namespace NCC.Extend.LqTkjlb
323 329 .GroupBy(it => it.Tkry)
324 330 .Select(it => new
325 331 {
326   - // tkry = it.Tkry,
327   - tkry = SqlFunc.Subqueryable<UserEntity>().Where(u => u.MobilePhone == it.Tkry).Select(u => u.RealName),
328   - tkrs = SqlFunc.AggregateCount(it.Id)
  332 + // tkry = it.Tkry,
  333 + tkry = SqlFunc.Subqueryable<UserEntity>().Where(u => u.MobilePhone == it.Tkry).Select(u => u.RealName),
  334 + tkrs = SqlFunc.AggregateCount(it.Id),
329 335 })
330 336 .ToListAsync();
331 337  
332 338 // 按拓客数量排序
333 339 var sortedMembers = teamMembers.OrderByDescending(m => m.tkrs).ToList();
334   -
  340 +
335 341 // 计算战队总拓客数量
336 342 var totalCount = sortedMembers.Sum(m => m.tkrs);
337 343  
... ... @@ -340,7 +346,7 @@ namespace NCC.Extend.LqTkjlb
340 346 {
341 347 sszd = team,
342 348 totalCount = totalCount,
343   - members = new List<TeamMemberDetail>()
  349 + members = new List<TeamMemberDetail>(),
344 350 };
345 351  
346 352 // 添加成员详情
... ... @@ -348,14 +354,16 @@ namespace NCC.Extend.LqTkjlb
348 354 {
349 355 var member = sortedMembers[i];
350 356 var percentage = totalCount > 0 ? (int)Math.Round((double)member.tkrs / totalCount * 100) : 0;
351   -
352   - teamDetail.members.Add(new TeamMemberDetail
353   - {
354   - tkry = member.tkry,
355   - tkrs = member.tkrs,
356   - teamRanking = i + 1,
357   - percentage = percentage
358   - });
  357 +
  358 + teamDetail.members.Add(
  359 + new TeamMemberDetail
  360 + {
  361 + tkry = member.tkry,
  362 + tkrs = member.tkrs,
  363 + teamRanking = i + 1,
  364 + percentage = percentage,
  365 + }
  366 + );
359 367 }
360 368  
361 369 result.Add(teamDetail);
... ... @@ -364,5 +372,6 @@ namespace NCC.Extend.LqTkjlb
364 372 // 按战队总拓客数量排序
365 373 return result.OrderByDescending(t => t.totalCount).ToList();
366 374 }
  375 + #endregion
367 376 }
368 377 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqYxhdfaService.cs
1   -using NCC.Common.Core.Manager;
  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;
2 10 using NCC.Common.Enum;
3 11 using NCC.Common.Extension;
4 12 using NCC.Common.Filter;
  13 +using NCC.Common.Helper;
  14 +using NCC.Common.Model.NPOI;
  15 +using NCC.DataEncryption;
5 16 using NCC.Dependency;
6 17 using NCC.DynamicApiController;
7   -using NCC.FriendlyException;
  18 +using NCC.Extend.Entitys.Dto.LqYxhdfa;
  19 +using NCC.Extend.Entitys.lq_yxhdfa;
8 20 using NCC.Extend.Interfaces.LqYxhdfa;
9   -using Mapster;
10   -using Microsoft.AspNetCore.Mvc;
  21 +using NCC.FriendlyException;
  22 +using NCC.JsonSerialization;
11 23 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_yxhdfa;
17   -using NCC.Extend.Entitys.Dto.LqYxhdfa;
18 24 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 25  
26 26 namespace NCC.Extend.LqYxhdfa
27 27 {
28 28 /// <summary>
29 29 /// 营销活动方案服务
30 30 /// </summary>
31   - [ApiDescriptionSettings(Tag = "Extend",Name = "LqYxhdfa", Order = 200)]
  31 + [ApiDescriptionSettings(Tag = "Extend", Name = "LqYxhdfa", Order = 200)]
32 32 [Route("api/Extend/[controller]")]
33 33 public class LqYxhdfaService : ILqYxhdfaService, IDynamicApiController, ITransient
34 34 {
... ... @@ -39,11 +39,9 @@ namespace NCC.Extend.LqYxhdfa
39 39 /// <summary>
40 40 /// 初始化一个<see cref="LqYxhdfaService"/>类型的新实例
41 41 /// </summary>
42   - public LqYxhdfaService(
43   - ISqlSugarRepository<LqYxhdfaEntity> lqYxhdfaRepository,
44   - IUserManager userManager)
  42 + public LqYxhdfaService(ISqlSugarRepository<LqYxhdfaEntity> lqYxhdfaRepository, IUserManager userManager)
45 43 {
46   - _lqYxhdfaRepository = lqYxhdfaRepository;
  44 + _lqYxhdfaRepository = lqYxhdfaRepository;
47 45 _db = _lqYxhdfaRepository.Context;
48 46 _userManager = userManager;
49 47 }
... ... @@ -62,10 +60,10 @@ namespace NCC.Extend.LqYxhdfa
62 60 }
63 61  
64 62 /// <summary>
65   - /// 获取营销活动方案列表
66   - /// </summary>
67   - /// <param name="input">请求参数</param>
68   - /// <returns></returns>
  63 + /// 获取营销活动方案列表
  64 + /// </summary>
  65 + /// <param name="input">请求参数</param>
  66 + /// <returns></returns>
69 67 [HttpGet("")]
70 68 public async Task<dynamic> GetList([FromQuery] LqYxhdfaListQueryInput input)
71 69 {
... ... @@ -76,15 +74,18 @@ namespace NCC.Extend.LqYxhdfa
76 74 .WhereIF(!string.IsNullOrEmpty(input.hdmc), p => p.Hdmc.Contains(input.hdmc))
77 75 .WhereIF(!string.IsNullOrEmpty(input.zsj), p => p.Zsj.Contains(input.zsj))
78 76 .WhereIF(!string.IsNullOrEmpty(input.jej), p => p.Jej.Contains(input.jej))
79   - .Select(it=> new LqYxhdfaListOutput
  77 + .Select(it => new LqYxhdfaListOutput
80 78 {
81 79 id = it.Id,
82   - yxhdbh=it.Yxhdbh,
83   - hdmc=it.Hdmc,
84   - zsj=it.Zsj,
85   - jej=it.Jej,
86   - }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
87   - return PageResult<LqYxhdfaListOutput>.SqlSugarPageResult(data);
  80 + yxhdbh = it.Yxhdbh,
  81 + hdmc = it.Hdmc,
  82 + zsj = it.Zsj,
  83 + jej = it.Jej,
  84 + })
  85 + .MergeTable()
  86 + .OrderBy(sidx + " " + input.sort)
  87 + .ToPagedListAsync(input.currentPage, input.pageSize);
  88 + return PageResult<LqYxhdfaListOutput>.SqlSugarPageResult(data);
88 89 }
89 90  
90 91 /// <summary>
... ... @@ -99,14 +100,15 @@ namespace NCC.Extend.LqYxhdfa
99 100 var entity = input.Adapt<LqYxhdfaEntity>();
100 101 entity.Id = YitIdHelper.NextId().ToString();
101 102 var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
102   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000);
  103 + if (!(isOk > 0))
  104 + throw NCCException.Oh(ErrorCode.COM1000);
103 105 }
104 106  
105 107 /// <summary>
106   - /// 获取营销活动方案无分页列表
107   - /// </summary>
108   - /// <param name="input">请求参数</param>
109   - /// <returns></returns>
  108 + /// 获取营销活动方案无分页列表
  109 + /// </summary>
  110 + /// <param name="input">请求参数</param>
  111 + /// <returns></returns>
110 112 [NonAction]
111 113 public async Task<dynamic> GetNoPagingList([FromQuery] LqYxhdfaListQueryInput input)
112 114 {
... ... @@ -117,22 +119,25 @@ namespace NCC.Extend.LqYxhdfa
117 119 .WhereIF(!string.IsNullOrEmpty(input.hdmc), p => p.Hdmc.Contains(input.hdmc))
118 120 .WhereIF(!string.IsNullOrEmpty(input.zsj), p => p.Zsj.Contains(input.zsj))
119 121 .WhereIF(!string.IsNullOrEmpty(input.jej), p => p.Jej.Contains(input.jej))
120   - .Select(it=> new LqYxhdfaListOutput
  122 + .Select(it => new LqYxhdfaListOutput
121 123 {
122 124 id = it.Id,
123   - yxhdbh=it.Yxhdbh,
124   - hdmc=it.Hdmc,
125   - zsj=it.Zsj,
126   - jej=it.Jej,
127   - }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync();
128   - return data;
  125 + yxhdbh = it.Yxhdbh,
  126 + hdmc = it.Hdmc,
  127 + zsj = it.Zsj,
  128 + jej = it.Jej,
  129 + })
  130 + .MergeTable()
  131 + .OrderBy(sidx + " " + input.sort)
  132 + .ToListAsync();
  133 + return data;
129 134 }
130 135  
131 136 /// <summary>
132   - /// 导出营销活动方案
133   - /// </summary>
134   - /// <param name="input">请求参数</param>
135   - /// <returns></returns>
  137 + /// 导出营销活动方案
  138 + /// </summary>
  139 + /// <param name="input">请求参数</param>
  140 + /// <returns></returns>
136 141 [HttpGet("Actions/Export")]
137 142 public async Task<dynamic> Export([FromQuery] LqYxhdfaListQueryInput input)
138 143 {
... ... @@ -147,7 +152,8 @@ namespace NCC.Extend.LqYxhdfa
147 152 {
148 153 exportData = await this.GetNoPagingList(input);
149 154 }
150   - List<ParamsModel> paramList = "[{\"value\":\"方案编号\",\"field\":\"id\"},{\"value\":\"营销活动编号\",\"field\":\"yxhdbh\"},{\"value\":\"活动名称\",\"field\":\"hdmc\"},{\"value\":\"张数奖\",\"field\":\"zsj\"},{\"value\":\"金额奖\",\"field\":\"jej\"},]".ToList<ParamsModel>();
  155 + List<ParamsModel> paramList =
  156 + "[{\"value\":\"方案编号\",\"field\":\"id\"},{\"value\":\"营销活动编号\",\"field\":\"yxhdbh\"},{\"value\":\"活动名称\",\"field\":\"hdmc\"},{\"value\":\"张数奖\",\"field\":\"zsj\"},{\"value\":\"金额奖\",\"field\":\"jej\"},]".ToList<ParamsModel>();
151 157 ExcelConfig excelconfig = new ExcelConfig();
152 158 excelconfig.FileName = "营销活动方案.xls";
153 159 excelconfig.HeadFont = "微软雅黑";
... ... @@ -166,11 +172,7 @@ namespace NCC.Extend.LqYxhdfa
166 172 var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
167 173 ExcelExportHelper<LqYxhdfaListOutput>.Export(exportData, excelconfig, addPath);
168 174 var fileName = _userManager.UserId + "|" + addPath + "|xls";
169   - var output = new
170   - {
171   - name = excelconfig.FileName,
172   - url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC")
173   - };
  175 + var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
174 176 return output;
175 177 }
176 178  
... ... @@ -190,7 +192,7 @@ namespace NCC.Extend.LqYxhdfa
190 192 //开启事务
191 193 _db.BeginTran();
192 194 //批量删除营销活动方案
193   - await _db.Deleteable<LqYxhdfaEntity>().In(d => d.Id,ids).ExecuteCommandAsync();
  195 + await _db.Deleteable<LqYxhdfaEntity>().In(d => d.Id, ids).ExecuteCommandAsync();
194 196 //关闭事务
195 197 _db.CommitTran();
196 198 }
... ... @@ -214,7 +216,8 @@ namespace NCC.Extend.LqYxhdfa
214 216 {
215 217 var entity = input.Adapt<LqYxhdfaEntity>();
216 218 var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
217   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001);
  219 + if (!(isOk > 0))
  220 + throw NCCException.Oh(ErrorCode.COM1001);
218 221 }
219 222  
220 223 /// <summary>
... ... @@ -227,7 +230,8 @@ namespace NCC.Extend.LqYxhdfa
227 230 var entity = await _db.Queryable<LqYxhdfaEntity>().FirstAsync(p => p.Id == id);
228 231 _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
229 232 var isOk = await _db.Deleteable<LqYxhdfaEntity>().Where(d => d.Id == id).ExecuteCommandAsync();
230   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1002);
  233 + if (!(isOk > 0))
  234 + throw NCCException.Oh(ErrorCode.COM1002);
231 235 }
232 236 }
233 237 }
... ...
项目信息-薪酬规则与名词解释.md
... ... @@ -50,14 +50,17 @@
50 50  
51 51 ### 门店相关
52 52 17. **门店分类**:门店分为A、B、C类,不同类别有不同的底薪
53   -18. **新店**:在门店信息中设置时间段,在该时间段内按新店薪酬规则计算
54   -19. **老店**:不在新店时间段内,按老店薪酬规则计算
55   -20. **门店生命线**:每个门店的生命线不一样,对所有角色生效
56   -21. **金三角(战队)**:每月初由不同健康师组成战队,单人也可形成战队
  53 +18. **门店类别**:门店分为200平或旗舰店两种类型(仅在新店时设置)
  54 + - **200平门店**:标准门店类型,按正常薪酬规则计算
  55 + - **旗舰店**:特殊门店类型,需要扣除负奖励800元
  56 +19. **新店**:在门店信息中设置时间段,在该时间段内按新店薪酬规则计算
  57 +20. **老店**:不在新店时间段内,按老店薪酬规则计算
  58 +21. **门店生命线**:每个门店的生命线不一样,对所有角色生效
  59 +22. **金三角(战队)**:每月初由不同健康师组成战队,单人也可形成战队
57 60  
58 61 ### 其他
59   -22. **毛利**:销售业绩 - 产品物料 - 合作项目成本 - 店内支出 - 洗毛巾
60   -23. **总经理保底**:总经理工资在一年里可以有一个月保底8000元,保底寒假月份(春节)不能使用
  62 +23. **毛利**:销售业绩 - 产品物料 - 合作项目成本 - 店内支出 - 洗毛巾
  63 +24. **总经理保底**:总经理工资在一年里可以有一个月保底8000元,保底寒假月份(春节)不能使用
61 64  
62 65 ---
63 66  
... ... @@ -70,13 +73,32 @@
70 73  
71 74 ### 健康师薪酬规则
72 75  
73   -#### 底薪规则
  76 +#### 老店健康师底薪规则
74 77 - **一星**:月消耗达到10000元 且 项目数达到96个 → 底薪2000元
75 78 - **二星**:月消耗达到20000元 且 项目数达到126个 → 底薪2200元
76 79 - **三星**:月消耗达到40000元 且 项目数达到156个 → 底薪2400元
77 80 - **0星**:月消耗未达到10000元 且 项目数未达到96个 → 底薪1800元
78 81 - **特殊情况**:月消耗或项目数中有一个为0星(未达到最低标准),底薪为一星(2000元)
79 82  
  83 +#### 新店健康师薪酬规则
  84 +**重要说明**:新店不考核消耗,健康师分成3个阶段:
  85 +
  86 +**第一阶段:新客转化阶段**
  87 +- 主要考核新客转化率
  88 +- 提成主要来源于新客转化业绩
  89 +
  90 +**第二阶段:升单人头阶段**
  91 +- 主要考核升单人头数
  92 +- 提成主要来源于升单业绩
  93 +
  94 +**第三阶段:业绩和项目数阶段**
  95 +- 无新客转化和升单人头提成
  96 +- 业绩主要计算提成
  97 +- 项目数主要计算底薪
  98 +
  99 +**旗舰店特殊规则**:
  100 +- 旗舰店类型门店需要扣除负奖励800元
  101 +
80 102 ### 金三角(战队)提成规则
81 103  
82 104 #### 3人战队
... ... @@ -159,6 +181,8 @@
159 181  
160 182 #### 新店店长(底薪4000元)
161 183  
  184 +**重要说明**:新店店长涉及全部阶段,都有负奖励机制
  185 +
162 186 **考核指标**:
163 187 - 生命线-业绩、人头-固定
164 188 - 一个指标未达到:扣800元
... ... @@ -170,6 +194,9 @@
170 194  
171 195 **提成计算**:毛利 × 业绩提成比例
172 196  
  197 +**旗舰店特殊规则**:
  198 +- 旗舰店类型门店需要扣除负奖励800元
  199 +
173 200 ### 主任薪酬规则
174 201  
175 202 #### 老店主任(底薪3500元)
... ...