Commit b45d55f7d41e9102d1125da84a00e25409a0bbf8

Authored by “wangming”
1 parent b1e65b28

Refactor LqEventService and related DTOs to enhance event handling; implement ma…

…nual mapping for event output, update member retrieval logic, and streamline event type retrieval. Modify LqHytkHytkService to adjust entity relationships and improve data handling. Introduce deduct information handling in LqKdKdjlbService and update related DTOs for consistency. Enhance LqTkjlbService to improve data retrieval and organization. Update LqXhHyhkService to refine consumption tracking and improve data integrity.
Showing 37 changed files with 1099 additions and 567 deletions
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/EventTypeEnumOutput.cs renamed to netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/Common/EnumOutput.cs
1   -using System.ComponentModel;
2   -
3   -namespace NCC.Extend.Entitys.Dto.LqEvent
  1 +namespace NCC.Extend.Entitys.Dto.Common
4 2 {
5 3 /// <summary>
6   - /// 拓客类型枚举输出
  4 + /// 通用枚举输出
7 5 /// </summary>
8   - public class EventTypeEnumOutput
  6 + public class EnumOutput
9 7 {
10 8 /// <summary>
11 9 /// 枚举值
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventUpInput.cs
... ... @@ -14,7 +14,7 @@ namespace NCC.Extend.Entitys.Dto.LqEvent
14 14 /// 主键ID
15 15 /// </summary>
16 16 [Required(ErrorMessage = "活动ID不能为空")]
17   - public new int? Id { get; set; }
  17 + public new string Id { get; set; }
18 18  
19 19 /// <summary>
20 20 /// 活动名称
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/StoreTeamDataOutput.cs 0 → 100644
  1 +using System.Collections.Generic;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqEvent
  4 +{
  5 + /// <summary>
  6 + /// 门店战队数据输出
  7 + /// </summary>
  8 + public class StoreTeamDataOutput
  9 + {
  10 + /// <summary>
  11 + /// 门店ID
  12 + /// </summary>
  13 + public string StoreId { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 门店名称
  17 + /// </summary>
  18 + public string StoreName { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 战队列表
  22 + /// </summary>
  23 + public List<TeamInfoOutput> TeamList { get; set; } = new List<TeamInfoOutput>();
  24 + }
  25 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/TeamInfoOutput.cs 0 → 100644
  1 +using System.Collections.Generic;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqEvent
  4 +{
  5 + /// <summary>
  6 + /// 战队信息输出
  7 + /// </summary>
  8 + public class TeamInfoOutput
  9 + {
  10 + /// <summary>
  11 + /// 战队名称
  12 + /// </summary>
  13 + public string TeamName { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 战队用户信息列表
  17 + /// </summary>
  18 + public List<TeamUserInfoOutput> TeamUserInfo { get; set; } = new List<TeamUserInfoOutput>();
  19 + }
  20 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/TeamUserInfoOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqEvent
  4 +{
  5 + /// <summary>
  6 + /// 战队用户信息输出
  7 + /// </summary>
  8 + public class TeamUserInfoOutput
  9 + {
  10 + /// <summary>
  11 + /// 拓客用户ID
  12 + /// </summary>
  13 + public string ExpansionUserId { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 拓客用户姓名
  17 + /// </summary>
  18 + public string ExpansionUserName { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 拓客数量
  22 + /// </summary>
  23 + public int ExpansionCount { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 活动目标
  27 + /// </summary>
  28 + public int EventTarget { get; set; }
  29 + }
  30 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserCrInput.cs
... ... @@ -42,6 +42,6 @@ namespace NCC.Extend.Entitys.Dto.LqEventUser
42 42 /// <summary>
43 43 /// 目标张数
44 44 /// </summary>
45   - public int? TargetCount { get; set; }
  45 + public int TargetCount { get; set; } = 0;
46 46 }
47 47 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkCrInput.cs
... ... @@ -95,15 +95,5 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
95 95 /// 退卡品项明细列表
96 96 /// </summary>
97 97 public List<LqHytkMxCrInput> lqHytkMxList { get; set; }
98   -
99   - /// <summary>
100   - /// 退卡健康师业绩列表
101   - /// </summary>
102   - public List<LqHytkJksyjCrInput> lqHytkJksyjList { get; set; }
103   -
104   - /// <summary>
105   - /// 退卡科技部老师业绩列表
106   - /// </summary>
107   - public List<LqHytkKjbsyjCrInput> lqHytkKjbsyjList { get; set; }
108 98 }
109 99 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxCrInput.cs
... ... @@ -16,9 +16,14 @@ namespace NCC.Extend.Entitys.Dto.LqHytkMx
16 16 public string id { get; set; }
17 17  
18 18 /// <summary>
19   - /// 关联退卡编号
  19 + /// 关联退卡Id
20 20 /// </summary>
21   - public string gltkbh { get; set; }
  21 + public string refundInfoId { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 退卡记录Id
  25 + /// </summary>
  26 + public string billingItemId { get; set; }
22 27  
23 28 /// <summary>
24 29 /// 品项
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkMx/LqHytkMxInfoOutput.cs
... ... @@ -16,9 +16,14 @@ namespace NCC.Extend.Entitys.Dto.LqHytkMx
16 16 public string id { get; set; }
17 17  
18 18 /// <summary>
19   - /// 关联退卡编号
  19 + /// 关联退卡Id
20 20 /// </summary>
21   - public string gltkbh { get; set; }
  21 + public string refundInfoId { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 退卡记录Id
  25 + /// </summary>
  26 + public string billingItemId { get; set; }
22 27  
23 28 /// <summary>
24 29 /// 品项编号
... ... @@ -43,22 +48,22 @@ namespace NCC.Extend.Entitys.Dto.LqHytkMx
43 48 /// <summary>
44 49 /// 项目次数
45 50 /// </summary>
46   - public int? F_ProjectNumber { get; set; }
  51 + public int projectNumber { get; set; }
47 52  
48 53 /// <summary>
49 54 /// 是否有效
50 55 /// </summary>
51   - public int? F_IsEnabled { get; set; }
  56 + public int isEnabled { get; set; }
52 57  
53 58 /// <summary>
54 59 /// 来源类型(开卡/赠送/其他)
55 60 /// </summary>
56   - public string F_SourceType { get; set; }
  61 + public string sourceType { get; set; }
57 62  
58 63 /// <summary>
59 64 /// 合计金额(品项价格 × 项目次数)
60 65 /// </summary>
61   - public decimal? F_TotalPrice { get; set; }
  66 + public decimal? totalPrice { get; set; }
62 67  
63 68 /// <summary>
64 69 /// 健康师业绩列表
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoCrInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
  5 +{
  6 + /// <summary>
  7 + /// 开单扣减信息创建输入
  8 + /// </summary>
  9 + public class LqKdDeductinfoCrInput
  10 + {
  11 + /// <summary>
  12 + /// 扣减类型
  13 + /// </summary>
  14 + [Required(ErrorMessage = "扣减类型不能为空")]
  15 + public int? DeductType { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 扣减关联ID
  19 + /// </summary>
  20 + [Required(ErrorMessage = "扣减关联ID不能为空")]
  21 + public string DeductId { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 开单id
  25 + /// </summary>
  26 + [Required(ErrorMessage = "开单id不能为空")]
  27 + public string BillingId { get; set; }
  28 +
  29 + /// <summary>
  30 + /// 合计金额
  31 + /// </summary>
  32 + [Required(ErrorMessage = "合计金额不能为空")]
  33 + [Range(0.01, 999999.99, ErrorMessage = "合计金额必须在0.01到999999.99之间")]
  34 + public decimal? Amount { get; set; }
  35 + }
  36 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoInfoOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
  4 +{
  5 + /// <summary>
  6 + /// 开单扣减信息详情输出
  7 + /// </summary>
  8 + public class LqKdDeductinfoInfoOutput
  9 + {
  10 + /// <summary>
  11 + /// 主键
  12 + /// </summary>
  13 + public string Id { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 扣减类型
  17 + /// </summary>
  18 + public int? DeductType { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 扣减类型名称
  22 + /// </summary>
  23 + public string DeductTypeName { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 扣减关联ID
  27 + /// </summary>
  28 + public string DeductId { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 开单id
  32 + /// </summary>
  33 + public string BillingId { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 合计金额
  37 + /// </summary>
  38 + public decimal? Amount { get; set; }
  39 + }
  40 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoListOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
  4 +{
  5 + /// <summary>
  6 + /// 开单扣减信息列表输出
  7 + /// </summary>
  8 + public class LqKdDeductinfoListOutput
  9 + {
  10 + /// <summary>
  11 + /// 主键
  12 + /// </summary>
  13 + public string Id { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 扣减类型
  17 + /// </summary>
  18 + public int? DeductType { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 扣减类型名称
  22 + /// </summary>
  23 + public string DeductTypeName { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 扣减关联ID
  27 + /// </summary>
  28 + public string DeductId { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 开单id
  32 + /// </summary>
  33 + public string BillingId { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 合计金额
  37 + /// </summary>
  38 + public decimal? Amount { get; set; }
  39 + }
  40 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoListQueryInput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
  4 +{
  5 + /// <summary>
  6 + /// 开单扣减信息列表查询输入
  7 + /// </summary>
  8 + public class LqKdDeductinfoListQueryInput
  9 + {
  10 + /// <summary>
  11 + /// 扣减类型
  12 + /// </summary>
  13 + public int? DeductType { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 扣减关联ID
  17 + /// </summary>
  18 + public string DeductId { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 开单id
  22 + /// </summary>
  23 + public string BillingId { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 最小金额
  27 + /// </summary>
  28 + public decimal? MinAmount { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 最大金额
  32 + /// </summary>
  33 + public decimal? MaxAmount { get; set; }
  34 + }
  35 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoUpInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
  5 +{
  6 + /// <summary>
  7 + /// 开单扣减信息更新输入
  8 + /// </summary>
  9 + public class LqKdDeductinfoUpInput : LqKdDeductinfoCrInput
  10 + {
  11 + /// <summary>
  12 + /// 主键
  13 + /// </summary>
  14 + [Required(ErrorMessage = "主键不能为空")]
  15 + public string Id { get; set; }
  16 + }
  17 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbCrInput.cs
1 1 using System;
2 2 using System.Collections.Generic;
3 3 using NCC.Common.Model;
  4 +using NCC.Extend.Entitys.Dto.LqKdDeductinfo;
4 5  
5 6 namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
6 7 {
... ... @@ -150,6 +151,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
150 151 public string F_FIleUrl { get; set; }
151 152  
152 153 /// <summary>
  154 + /// 扣款信息
  155 + /// </summary>
  156 + public List<LqKdDeductinfoCrInput> lqKdKdjlbDeductList { get; set; }
  157 +
  158 + /// <summary>
153 159 /// 开单_品项明细
154 160 /// </summary>
155 161 public List<LqKdPxmxCrInput> lqKdPxmxList { get; set; }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbCrInput.cs
... ... @@ -16,42 +16,42 @@ namespace NCC.Extend.Entitys.Dto.LqTkjlb
16 16 /// <summary>
17 17 /// 拓客时间
18 18 /// </summary>
19   - public DateTime? tksj { get; set; }
  19 + public DateTime expansionTime { get; set; }
  20 +
  21 + /// <summary>
  22 + /// 拓客人员
  23 + /// </summary>
  24 + public string expansionUserId { get; set; }
20 25  
21 26 /// <summary>
22 27 /// 顾客姓名
23 28 /// </summary>
24   - public string gkxm { get; set; }
  29 + public string customerName { get; set; }
25 30  
26 31 /// <summary>
27   - /// 电话号码
  32 + /// 顾客电话号码
28 33 /// </summary>
29   - public string dhhm { get; set; }
  34 + public string customerPhone { get; set; }
30 35  
31 36 /// <summary>
32 37 /// 购买张数
33 38 /// </summary>
34   - public int? gmzs { get; set; }
  39 + public int buyNumber { get; set; }
35 40  
36 41 /// <summary>
37 42 /// 支付方式
38 43 /// </summary>
39   - public string zffs { get; set; }
  44 + public string paymentMethod { get; set; }
40 45  
41 46 /// <summary>
42 47 /// 是否加微信
43 48 /// </summary>
44   - public string sfjwx { get; set; }
  49 + public string isAddWeChat { get; set; }
45 50  
46 51 /// <summary>
47 52 /// 备注
48 53 /// </summary>
49   - public string bz { get; set; }
50   -
51   - /// <summary>
52   - /// 拓客人员
53   - /// </summary>
54   - public string tkry { get; set; }
  54 + public string remarks { get; set; }
55 55  
56 56 /// <summary>
57 57 /// 拓客活动id
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbInfoOutput.cs
... ... @@ -16,52 +16,57 @@ namespace NCC.Extend.Entitys.Dto.LqTkjlb
16 16 /// <summary>
17 17 /// 拓客时间
18 18 /// </summary>
19   - public DateTime? tksj { get; set; }
  19 + public DateTime expansionTime { get; set; }
20 20  
21 21 /// <summary>
22 22 /// 拓客人员
23 23 /// </summary>
24   - public string tkry { get; set; }
  24 + public string expansionUserId { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 拓客人员
  28 + /// </summary>
  29 + public string expansionUserName { get; set; }
25 30  
26 31 /// <summary>
27 32 /// 顾客姓名
28 33 /// </summary>
29   - public string gkxm { get; set; }
  34 + public string customerName { get; set; }
30 35  
31 36 /// <summary>
32   - /// 电话号码
  37 + /// 顾客电话号码
33 38 /// </summary>
34   - public string dhhm { get; set; }
  39 + public string customerPhone { get; set; }
35 40  
36 41 /// <summary>
37 42 /// 购买张数
38 43 /// </summary>
39   - public int? gmzs { get; set; }
  44 + public int buyNumber { get; set; }
40 45  
41 46 /// <summary>
42 47 /// 支付方式
43 48 /// </summary>
44   - public string zffs { get; set; }
  49 + public string paymentMethod { get; set; }
45 50  
46 51 /// <summary>
47 52 /// 是否加微信
48 53 /// </summary>
49   - public string sfjwx { get; set; }
  54 + public string isAddWeChat { get; set; }
50 55  
51 56 /// <summary>
52 57 /// 备注
53 58 /// </summary>
54   - public string bz { get; set; }
  59 + public string remarks { get; set; }
55 60  
56 61 /// <summary>
57   - /// 所属门店
  62 + /// 所属门店ID
58 63 /// </summary>
59   - public string ssmd { get; set; }
  64 + public string storeId { get; set; }
60 65  
61 66 /// <summary>
62 67 /// 所属战队
63 68 /// </summary>
64   - public string sszd { get; set; }
  69 + public string teamName { get; set; }
65 70  
66 71 /// <summary>
67 72 /// 拓客活动id
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbListOutput.cs
... ... @@ -15,52 +15,57 @@ namespace NCC.Extend.Entitys.Dto.LqTkjlb
15 15 /// <summary>
16 16 /// 拓客时间
17 17 /// </summary>
18   - public DateTime? tksj { get; set; }
  18 + public DateTime expansionTime { get; set; }
19 19  
20 20 /// <summary>
21 21 /// 拓客人员
22 22 /// </summary>
23   - public string tkry { get; set; }
  23 + public string expansionUserId { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 拓客人员
  27 + /// </summary>
  28 + public string expansionUserName { get; set; }
24 29  
25 30 /// <summary>
26 31 /// 顾客姓名
27 32 /// </summary>
28   - public string gkxm { get; set; }
  33 + public string customerName { get; set; }
29 34  
30 35 /// <summary>
31   - /// 电话号码
  36 + /// 顾客电话号码
32 37 /// </summary>
33   - public string dhhm { get; set; }
  38 + public string customerPhone { get; set; }
34 39  
35 40 /// <summary>
36 41 /// 购买张数
37 42 /// </summary>
38   - public int? gmzs { get; set; }
  43 + public int buyNumber { get; set; }
39 44  
40 45 /// <summary>
41 46 /// 支付方式
42 47 /// </summary>
43   - public string zffs { get; set; }
  48 + public string paymentMethod { get; set; }
44 49  
45 50 /// <summary>
46 51 /// 是否加微信
47 52 /// </summary>
48   - public string sfjwx { get; set; }
  53 + public string isAddWeChat { get; set; }
49 54  
50 55 /// <summary>
51 56 /// 备注
52 57 /// </summary>
53   - public string bz { get; set; }
  58 + public string remarks { get; set; }
54 59  
55 60 /// <summary>
56   - /// 所属门店
  61 + /// 所属门店ID
57 62 /// </summary>
58   - public string ssmd { get; set; }
  63 + public string storeId { get; set; }
59 64  
60 65 /// <summary>
61 66 /// 所属战队
62 67 /// </summary>
63   - public string sszd { get; set; }
  68 + public string teamName { get; set; }
64 69  
65 70 /// <summary>
66 71 /// 拓客活动id
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbListQueryInput.cs
1   -using NCC.Common.Filter;
2   -using System.Collections.Generic;
  1 +using System.Collections.Generic;
  2 +using NCC.Common.Filter;
3 3  
4 4 namespace NCC.Extend.Entitys.Dto.LqTkjlb
5 5 {
... ... @@ -14,65 +14,68 @@ namespace NCC.Extend.Entitys.Dto.LqTkjlb
14 14 public string selectKey { get; set; }
15 15  
16 16 /// <summary>
17   - ///
  17 + ///
18 18 /// </summary>
19 19 public int dataType { get; set; }
20 20  
21   -
22 21 /// <summary>
23 22 /// 拓客编号
24 23 /// </summary>
25 24 public string id { get; set; }
26   -
  25 +
27 26 /// <summary>
28 27 /// 拓客时间
29 28 /// </summary>
30   - public string tksj { get; set; }
31   -
  29 + public string expansionTime { get; set; }
  30 +
32 31 /// <summary>
33 32 /// 拓客人员
34 33 /// </summary>
35   - public string tkry { get; set; }
36   -
  34 + public string expansionUserId { get; set; }
  35 +
37 36 /// <summary>
38 37 /// 顾客姓名
39 38 /// </summary>
40   - public string gkxm { get; set; }
41   -
  39 + public string customerName { get; set; }
  40 +
42 41 /// <summary>
43   - /// 电话号码
  42 + /// 顾客电话号码
44 43 /// </summary>
45   - public string dhhm { get; set; }
46   -
  44 + public string customerPhone { get; set; }
  45 +
47 46 /// <summary>
48 47 /// 购买张数
49 48 /// </summary>
50   - public string gmzs { get; set; }
51   -
  49 + public string buyNumber { get; set; }
  50 +
52 51 /// <summary>
53 52 /// 支付方式
54 53 /// </summary>
55   - public string zffs { get; set; }
56   -
  54 + public string paymentMethod { get; set; }
  55 +
57 56 /// <summary>
58 57 /// 是否加微信
59 58 /// </summary>
60   - public string sfjwx { get; set; }
61   -
  59 + public string isAddWeChat { get; set; }
  60 +
62 61 /// <summary>
63 62 /// 备注
64 63 /// </summary>
65   - public string bz { get; set; }
66   -
  64 + public string remarks { get; set; }
  65 +
67 66 /// <summary>
68   - /// 所属门店
  67 + /// 拓客活动id
69 68 /// </summary>
70   - public string ssmd { get; set; }
71   -
  69 + public string eventId { get; set; }
  70 +
  71 + /// <summary>
  72 + /// 所属门店ID
  73 + /// </summary>
  74 + public string storeId { get; set; }
  75 +
72 76 /// <summary>
73 77 /// 所属战队
74 78 /// </summary>
75   - public string sszd { get; set; }
76   -
  79 + public string teamName { get; set; }
77 80 }
78 81 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbRankingOutput.cs
... ... @@ -10,13 +10,13 @@ namespace NCC.Extend.Entitys.Dto.LqTkjlb
10 10 /// <summary>
11 11 /// 所属战队
12 12 /// </summary>
13   - public string sszd { get; set; }
14   -
  13 + public string teamName { get; set; }
  14 +
15 15 /// <summary>
16 16 /// 拓客人数
17 17 /// </summary>
18   - public int tkrs { get; set; }
19   -
  18 + public int expansionUserCount { get; set; }
  19 +
20 20 /// <summary>
21 21 /// 排名
22 22 /// </summary>
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkCrInput.cs
... ... @@ -13,71 +13,70 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk
13 13 /// 耗卡编号
14 14 /// </summary>
15 15 public string id { get; set; }
16   -
  16 +
17 17 /// <summary>
18 18 /// 门店
19 19 /// </summary>
20 20 public string md { get; set; }
21   -
  21 +
22 22 /// <summary>
23 23 /// 门店编号
24 24 /// </summary>
25 25 public string mdbh { get; set; }
26   -
  26 +
27 27 /// <summary>
28 28 /// 门店名称
29 29 /// </summary>
30 30 public string mdmc { get; set; }
31   -
  31 +
32 32 /// <summary>
33 33 /// 会员
34 34 /// </summary>
35 35 public string hy { get; set; }
36   -
  36 +
37 37 /// <summary>
38 38 /// 会员账号
39 39 /// </summary>
40 40 public string hyzh { get; set; }
41   -
  41 +
42 42 /// <summary>
43 43 /// 会员名称
44 44 /// </summary>
45 45 public string hymc { get; set; }
46   -
  46 +
47 47 /// <summary>
48 48 /// 顾客类型
49 49 /// </summary>
50 50 public string gklx { get; set; }
51   -
  51 +
52 52 /// <summary>
53 53 /// 消费金额
54 54 /// </summary>
55 55 public string xfje { get; set; }
56   -
  56 +
57 57 /// <summary>
58 58 /// 手工费用
59 59 /// </summary>
60 60 public string sgfy { get; set; }
61   -
  61 +
62 62 /// <summary>
63 63 /// 是否有科技部
64 64 /// </summary>
65 65 public string sfykjb { get; set; }
66   -
  66 +
67 67 /// <summary>
68 68 /// 耗卡时间
69 69 /// </summary>
70 70 public DateTime? hksj { get; set; }
71   -
  71 +
72 72 /// <summary>
73 73 /// 操作人员
74 74 /// </summary>
75 75 public string czry { get; set; }
76   -
  76 +
77 77 /// <summary>
78 78 /// 耗卡_品项明细
79 79 /// </summary>
80 80 public List<LqXhPxmxCrInput> lqXhPxmxList { get; set; }
81   -
82 81 }
83 82 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/MemberRemainingItemsOutput.cs
... ... @@ -17,13 +17,13 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk
17 17 /// </summary>
18 18 /// <example>GK2025022100004</example>
19 19 public string MemberId { get; set; }
20   -
  20 +
21 21 /// <summary>
22 22 /// 会员姓名
23 23 /// </summary>
24 24 /// <example>张三</example>
25 25 public string MemberName { get; set; }
26   -
  26 +
27 27 /// <summary>
28 28 /// 剩余品项列表
29 29 /// </summary>
... ... @@ -41,51 +41,56 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk
41 41 public class RemainingItemInfo
42 42 {
43 43 /// <summary>
  44 + /// 开单品项id
  45 + /// </summary>
  46 + public string BillingItemId { get; set; }
  47 +
  48 + /// <summary>
44 49 /// 品项ID
45 50 /// </summary>
46 51 /// <example>94</example>
47 52 public string ItemId { get; set; }
48   -
  53 +
49 54 /// <summary>
50 55 /// 品项名称
51 56 /// </summary>
52 57 /// <example>胶原宝宝-单部位</example>
53 58 public string ItemName { get; set; }
54   -
  59 +
55 60 /// <summary>
56 61 /// 品项单价
57 62 /// </summary>
58 63 /// <example>100.00</example>
59 64 public decimal ItemPrice { get; set; }
60   -
  65 +
61 66 /// <summary>
62 67 /// 来源类型
63 68 /// </summary>
64 69 /// <remarks>品项的来源类型,用于区分相同品项的不同来源</remarks>
65 70 /// <example>开卡</example>
66 71 public string SourceType { get; set; }
67   -
  72 +
68 73 /// <summary>
69 74 /// 总购买数量
70 75 /// </summary>
71 76 /// <remarks>该品项的总购买次数</remarks>
72 77 /// <example>3</example>
73 78 public decimal TotalPurchased { get; set; }
74   -
  79 +
75 80 /// <summary>
76 81 /// 已耗卡数量
77 82 /// </summary>
78 83 /// <remarks>该品项已消费的次数</remarks>
79 84 /// <example>1</example>
80 85 public decimal ConsumedCount { get; set; }
81   -
  86 +
82 87 /// <summary>
83 88 /// 已退卡数量
84 89 /// </summary>
85 90 /// <remarks>该品项已退卡的次数</remarks>
86 91 /// <example>0</example>
87 92 public decimal RefundedCount { get; set; }
88   -
  93 +
89 94 /// <summary>
90 95 /// 剩余数量
91 96 /// </summary>
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxCrInput.cs
... ... @@ -14,9 +14,9 @@ namespace NCC.Extend.Entitys.Dto.LqXhPxmx
14 14 public string id { get; set; }
15 15  
16 16 /// <summary>
17   - /// 关联开单编号
  17 + /// 开单品项明细表id
18 18 /// </summary>
19   - public string glkdbh { get; set; }
  19 + public string billingItemId { get; set; }
20 20  
21 21 /// <summary>
22 22 /// 品项
... ... @@ -34,11 +34,6 @@ namespace NCC.Extend.Entitys.Dto.LqXhPxmx
34 34 public decimal pxjg { get; set; }
35 35  
36 36 /// <summary>
37   - /// 是否赠送
38   - /// </summary>
39   - public string xfzs { get; set; }
40   -
41   - /// <summary>
42 37 /// 会员id
43 38 /// </summary>
44 39 public string memberId { get; set; }
... ... @@ -78,4 +73,4 @@ namespace NCC.Extend.Entitys.Dto.LqXhPxmx
78 73 /// </summary>
79 74 public List<LqXhKjbsyj.LqXhKjbsyjCrInput> lqXhKjbsyjList { get; set; }
80 75 }
81   -}
82 76 \ No newline at end of file
  77 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxInfoOutput.cs
... ... @@ -16,9 +16,14 @@ namespace NCC.Extend.Entitys.Dto.LqXhPxmx
16 16 public string id { get; set; }
17 17  
18 18 /// <summary>
19   - /// 关联耗卡编号
  19 + /// 耗卡记录ID
20 20 /// </summary>
21   - public string glkdbh { get; set; }
  21 + public string consumeInfoId { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 开单品项明细表id
  25 + /// </summary>
  26 + public string billingItemId { get; set; }
22 27  
23 28 /// <summary>
24 29 /// 品项编号
... ... @@ -36,11 +41,6 @@ namespace NCC.Extend.Entitys.Dto.LqXhPxmx
36 41 public decimal pxjg { get; set; }
37 42  
38 43 /// <summary>
39   - /// 是否赠送
40   - /// </summary>
41   - public string xfzs { get; set; }
42   -
43   - /// <summary>
44 44 /// 会员ID
45 45 /// </summary>
46 46 public string memberId { get; set; }
... ... @@ -80,4 +80,4 @@ namespace NCC.Extend.Entitys.Dto.LqXhPxmx
80 80 /// </summary>
81 81 public List<LqXhKjbsyjInfoOutput> lqXhKjbsyjList { get; set; }
82 82 }
83   -}
84 83 \ No newline at end of file
  84 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_mx/LqHytkMxEntity.cs
1   -using NCC.Common.Const;
  1 +using System;
  2 +using NCC.Common.Const;
  3 +using NCC.Extend.Entitys.Enum;
2 4 using SqlSugar;
3   -using System;
4 5  
5 6 namespace NCC.Extend.Entitys.lq_hytk_mx
6 7 {
... ... @@ -16,90 +17,95 @@ namespace NCC.Extend.Entitys.lq_hytk_mx
16 17 /// </summary>
17 18 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18 19 public string Id { get; set; }
19   -
  20 +
20 21 /// <summary>
21   - /// 关联退卡编号
  22 + /// 关联退卡Id
22 23 /// </summary>
23   - [SugarColumn(ColumnName = "gltkbh")]
24   - public string Gltkbh { get; set; }
25   -
  24 + [SugarColumn(ColumnName = "F_RefundInfoId")]
  25 + public string RefundInfoId { get; set; }
  26 +
  27 + /// <summary>
  28 + /// 退卡记录Id
  29 + /// </summary>
  30 + [SugarColumn(ColumnName = "F_BillingItemId")]
  31 + public string BillingItemId { get; set; }
  32 +
26 33 /// <summary>
27 34 /// 品项
28 35 /// </summary>
29   - [SugarColumn(ColumnName = "px")]
  36 + [SugarColumn(ColumnName = "px")]
30 37 public string Px { get; set; }
31   -
  38 +
32 39 /// <summary>
33 40 /// 品项名称
34 41 /// </summary>
35   - [SugarColumn(ColumnName = "pxmc")]
  42 + [SugarColumn(ColumnName = "pxmc")]
36 43 public string Pxmc { get; set; }
37   -
  44 +
38 45 /// <summary>
39 46 /// 品项价格
40 47 /// </summary>
41   - [SugarColumn(ColumnName = "pxjg")]
  48 + [SugarColumn(ColumnName = "pxjg")]
42 49 public decimal? Pxjg { get; set; }
43   -
  50 +
44 51 /// <summary>
45 52 /// 退款金额
46 53 /// </summary>
47   - [SugarColumn(ColumnName = "tkje")]
  54 + [SugarColumn(ColumnName = "tkje")]
48 55 public decimal? Tkje { get; set; }
49   -
  56 +
50 57 /// <summary>
51 58 /// 项目次数
52 59 /// </summary>
53   - [SugarColumn(ColumnName = "F_ProjectNumber")]
54   - public int? F_ProjectNumber { get; set; }
55   -
  60 + [SugarColumn(ColumnName = "F_ProjectNumber")]
  61 + public int ProjectNumber { get; set; }
  62 +
56 63 /// <summary>
57 64 /// 是否有效
58 65 /// </summary>
59   - [SugarColumn(ColumnName = "F_IsEnabled")]
60   - public int? F_IsEnabled { get; set; }
61   -
  66 + [SugarColumn(ColumnName = "F_IsEnabled")]
  67 + public int IsEnabled { get; set; } = StatusEnum.有效.GetHashCode();
  68 +
62 69 /// <summary>
63 70 /// 来源类型
64 71 /// </summary>
65   - [SugarColumn(ColumnName = "F_SourceType")]
66   - public string F_SourceType { get; set; }
67   -
  72 + [SugarColumn(ColumnName = "F_SourceType")]
  73 + public string SourceType { get; set; }
  74 +
68 75 /// <summary>
69 76 /// 合计金额
70 77 /// </summary>
71   - [SugarColumn(ColumnName = "F_TotalPrice")]
72   - public decimal? F_TotalPrice { get; set; }
73   -
  78 + [SugarColumn(ColumnName = "F_TotalPrice")]
  79 + public decimal? TotalPrice { get; set; }
  80 +
74 81 /// <summary>
75 82 /// 创建时间
76 83 /// </summary>
77   - [SugarColumn(ColumnName = "F_CreateTime")]
78   - public DateTime? F_CreateTime { get; set; }
79   -
  84 + [SugarColumn(ColumnName = "F_CreateTime")]
  85 + public DateTime? CreateTime { get; set; }
  86 +
80 87 /// <summary>
81 88 /// 创建用户
82 89 /// </summary>
83   - [SugarColumn(ColumnName = "F_CreateUser")]
84   - public string F_CreateUser { get; set; }
85   -
  90 + [SugarColumn(ColumnName = "F_CreateUser")]
  91 + public string CreateUser { get; set; }
  92 +
86 93 /// <summary>
87 94 /// 修改时间
88 95 /// </summary>
89   - [SugarColumn(ColumnName = "F_ModifyTime")]
90   - public DateTime? F_ModifyTime { get; set; }
91   -
  96 + [SugarColumn(ColumnName = "F_ModifyTime")]
  97 + public DateTime? ModifyTime { get; set; }
  98 +
92 99 /// <summary>
93 100 /// 修改用户
94 101 /// </summary>
95   - [SugarColumn(ColumnName = "F_ModifyUser")]
96   - public string F_ModifyUser { get; set; }
97   -
  102 + [SugarColumn(ColumnName = "F_ModifyUser")]
  103 + public string ModifyUser { get; set; }
  104 +
98 105 /// <summary>
99 106 /// 删除标记
100 107 /// </summary>
101   - [SugarColumn(ColumnName = "F_DeleteMark")]
102   - public int? F_DeleteMark { get; set; }
103   -
  108 + [SugarColumn(ColumnName = "F_DeleteMark")]
  109 + public int? DeleteMark { get; set; }
104 110 }
105   -}
106 111 \ No newline at end of file
  112 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_deductinfo/LqKdDeductinfoEntity.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +using SqlSugar;
  4 +
  5 +namespace NCC.Extend.Entitys.lq_kd_deductinfo
  6 +{
  7 + /// <summary>
  8 + /// 开单扣减信息表
  9 + /// </summary>
  10 + [SugarTable("lq_kd_deductinfo")]
  11 + public class LqKdDeductinfoEntity
  12 + {
  13 + /// <summary>
  14 + /// 主键
  15 + /// </summary>
  16 + [SugarColumn(IsPrimaryKey = true, ColumnName = "F_Id")]
  17 + public string Id { get; set; }
  18 +
  19 + /// <summary>
  20 + /// 扣减类型
  21 + /// </summary>
  22 + [SugarColumn(ColumnName = "F_DeductType")]
  23 + public int? DeductType { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 扣减关联ID
  27 + /// </summary>
  28 + [SugarColumn(ColumnName = "F_DeductId")]
  29 + public string DeductId { get; set; }
  30 +
  31 + /// <summary>
  32 + /// 开单id
  33 + /// </summary>
  34 + [SugarColumn(ColumnName = "F_BillingId")]
  35 + [Required]
  36 + public string BillingId { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 合计金额
  40 + /// </summary>
  41 + [SugarColumn(ColumnName = "F_Amount")]
  42 + public decimal? Amount { get; set; }
  43 + }
  44 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_tkjlb/LqTkjlbEntity.cs
... ... @@ -18,50 +18,50 @@ namespace NCC.Extend.Entitys.lq_tkjlb
18 18 /// <summary>
19 19 /// 拓客时间
20 20 /// </summary>
21   - [SugarColumn(ColumnName = "tksj")]
22   - public DateTime? Tksj { get; set; }
  21 + [SugarColumn(ColumnName = "F_ExpansionTime")]
  22 + public DateTime ExpansionTime { get; set; }
23 23  
24 24 /// <summary>
25 25 /// 拓客人员
26 26 /// </summary>
27   - [SugarColumn(ColumnName = "tkry")]
28   - public string Tkry { get; set; }
  27 + [SugarColumn(ColumnName = "F_ExpansionUserId")]
  28 + public string ExpansionUserId { get; set; }
29 29  
30 30 /// <summary>
31 31 /// 顾客姓名
32 32 /// </summary>
33   - [SugarColumn(ColumnName = "gkxm")]
34   - public string Gkxm { get; set; }
  33 + [SugarColumn(ColumnName = "F_CustomerName")]
  34 + public string CustomerName { get; set; }
35 35  
36 36 /// <summary>
37   - /// 电话号码
  37 + /// 顾客电话号码
38 38 /// </summary>
39   - [SugarColumn(ColumnName = "dhhm")]
40   - public string Dhhm { get; set; }
  39 + [SugarColumn(ColumnName = "F_CustomerPhone")]
  40 + public string CustomerPhone { get; set; }
41 41  
42 42 /// <summary>
43 43 /// 购买张数
44 44 /// </summary>
45   - [SugarColumn(ColumnName = "gmzs")]
46   - public int? Gmzs { get; set; }
  45 + [SugarColumn(ColumnName = "F_BuyNumber")]
  46 + public int BuyNumber { get; set; } = 0;
47 47  
48 48 /// <summary>
49 49 /// 支付方式
50 50 /// </summary>
51   - [SugarColumn(ColumnName = "zffs")]
52   - public string Zffs { get; set; }
  51 + [SugarColumn(ColumnName = "F_PaymentMethod")]
  52 + public string PaymentMethod { get; set; }
53 53  
54 54 /// <summary>
55 55 /// 是否加微信
56 56 /// </summary>
57   - [SugarColumn(ColumnName = "sfjwx")]
58   - public string Sfjwx { get; set; }
  57 + [SugarColumn(ColumnName = "F_IsAddWeChat")]
  58 + public string IsAddWeChat { get; set; }
59 59  
60 60 /// <summary>
61 61 /// 备注
62 62 /// </summary>
63   - [SugarColumn(ColumnName = "bz")]
64   - public string Bz { get; set; }
  63 + [SugarColumn(ColumnName = "F_Remarks")]
  64 + public string Remarks { get; set; }
65 65  
66 66 /// <summary>
67 67 /// 拓客活动id
... ... @@ -70,15 +70,27 @@ namespace NCC.Extend.Entitys.lq_tkjlb
70 70 public string EventId { get; set; }
71 71  
72 72 /// <summary>
73   - /// 所属组织
  73 + /// 所属门店ID
74 74 /// </summary>
75   - [SugarColumn(ColumnName = "ssmd")]
76   - public string Ssmd { get; set; }
  75 + [SugarColumn(ColumnName = "F_StoreId")]
  76 + public string StoreId { get; set; }
77 77  
78 78 /// <summary>
79 79 /// 所属战队
80 80 /// </summary>
81   - [SugarColumn(ColumnName = "sszd")]
82   - public string Sszd { get; set; }
  81 + [SugarColumn(ColumnName = "F_TeamName")]
  82 + public string TeamName { get; set; }
  83 +
  84 + /// <summary>
  85 + /// 所属部门id
  86 + /// </summary>
  87 + [SugarColumn(ColumnName = "F_DepId")]
  88 + public string DepId { get; set; }
  89 +
  90 + /// <summary>
  91 + /// 添加时间
  92 + /// </summary>
  93 + [SugarColumn(ColumnName = "F_CreateTime")]
  94 + public DateTime CreateTime { get; set; } = DateTime.Now;
83 95 }
84 96 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_pxmx/LqXhPxmxEntity.cs
1   -using NCC.Common.Const;
  1 +using System;
  2 +using NCC.Common.Const;
2 3 using SqlSugar;
3   -using System;
4 4  
5 5 namespace NCC.Extend.Entitys.lq_xh_pxmx
6 6 {
... ... @@ -16,71 +16,71 @@ namespace NCC.Extend.Entitys.lq_xh_pxmx
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 + /// 耗卡记录ID
22 22 /// </summary>
23   - [SugarColumn(ColumnName = "glkdbh")]
24   - public string Glkdbh { get; set; }
25   -
  23 + [SugarColumn(ColumnName = "F_ConsumeInfoId")]
  24 + public string ConsumeInfoId { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 开单品项明细表id
  28 + /// </summary>
  29 + [SugarColumn(ColumnName = "F_BillingItemId")]
  30 + public string BillingItemId { get; set; }
  31 +
26 32 /// <summary>
27 33 /// 品项
28 34 /// </summary>
29   - [SugarColumn(ColumnName = "px")]
  35 + [SugarColumn(ColumnName = "px")]
30 36 public string Px { get; set; }
31   -
  37 +
32 38 /// <summary>
33 39 /// 品项名称
34 40 /// </summary>
35   - [SugarColumn(ColumnName = "pxmc")]
  41 + [SugarColumn(ColumnName = "pxmc")]
36 42 public string Pxmc { get; set; }
37   -
  43 +
38 44 /// <summary>
39 45 /// 品项价格
40 46 /// </summary>
41   - [SugarColumn(ColumnName = "pxjg")]
  47 + [SugarColumn(ColumnName = "pxjg")]
42 48 public decimal Pxjg { get; set; }
43 49  
44 50 /// <summary>
45   - /// 是否赠送
46   - /// </summary>
47   - [SugarColumn(ColumnName = "xfzs")]
48   - public string Xfzs { get; set; }
49   -
50   - /// <summary>
51 51 /// 会员id
52 52 /// </summary>
53   - [SugarColumn(ColumnName = "F_MemberId")]
  53 + [SugarColumn(ColumnName = "F_MemberId")]
54 54 public string MemberId { get; set; }
55 55  
56 56 /// <summary>
57 57 /// 创建时间
58 58 /// </summary>
59   - [SugarColumn(ColumnName = "F_CreateTIme")]
  59 + [SugarColumn(ColumnName = "F_CreateTIme")]
60 60 public DateTime? CreateTIme { get; set; }
61 61  
62 62 /// <summary>
63 63 /// 项目次数
64 64 /// </summary>
65   - [SugarColumn(ColumnName = "F_ProjectNumber")]
66   - public int? ProjectNumber { get; set; }
  65 + [SugarColumn(ColumnName = "F_ProjectNumber")]
  66 + public int ProjectNumber { get; set; }
67 67  
68 68 /// <summary>
69 69 /// 是否有效
70 70 /// </summary>
71   - [SugarColumn(ColumnName = "F_IsEnabled")]
  71 + [SugarColumn(ColumnName = "F_IsEnabled")]
72 72 public int? IsEnabled { get; set; }
73 73  
74 74 /// <summary>
75 75 /// 来源类型
76 76 /// </summary>
77   - [SugarColumn(ColumnName = "F_SourceType")]
  77 + [SugarColumn(ColumnName = "F_SourceType")]
78 78 public string SourceType { get; set; }
79 79  
80 80 /// <summary>
81 81 /// 合计金额
82 82 /// </summary>
83   - [SugarColumn(ColumnName = "F_TotalPrice")]
  83 + [SugarColumn(ColumnName = "F_TotalPrice")]
84 84 public decimal TotalPrice { get; set; }
85 85 }
86   -}
87 86 \ No newline at end of file
  87 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/DeductTypeEnum.cs 0 → 100644
  1 +using System.ComponentModel;
  2 +
  3 +namespace NCC.Extend.Entitys.Enum
  4 +{
  5 + /// <summary>
  6 + /// 扣款类型
  7 + /// </summary>
  8 + public enum DeductTypeEnum
  9 + {
  10 + /// <summary>
  11 + /// 储值卡
  12 + /// </summary>
  13 + [Description("储值卡")]
  14 + 储值卡 = 1,
  15 +
  16 + /// <summary>
  17 + /// 扣项
  18 + /// </summary>
  19 + [Description("扣项")]
  20 + 扣项 = 2,
  21 +
  22 + /// <summary>
  23 + /// 套餐
  24 + /// </summary>
  25 + [Description("套餐")]
  26 + 套餐 = 3,
  27 + }
  28 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/StatusEnum.cs 0 → 100644
  1 +using System.ComponentModel;
  2 +
  3 +namespace NCC.Extend.Entitys.Enum
  4 +{
  5 + /// <summary>
  6 + /// 状态枚举
  7 + /// </summary>
  8 + public enum StatusEnum
  9 + {
  10 + /// <summary>
  11 + /// 有效
  12 + /// </summary>
  13 + [Description("有效")]
  14 + 有效 = 0,
  15 +
  16 + /// <summary>
  17 + /// 无效
  18 + /// </summary>
  19 + [Description("无效")]
  20 + 无效 = 1,
  21 +
  22 + /// <summary>
  23 + /// 删除
  24 + /// </summary>
  25 + [Description("删除")]
  26 + 删除 = 99,
  27 + }
  28 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqEventService.cs
... ... @@ -9,16 +9,19 @@ using Mapster;
9 9 using Microsoft.AspNetCore.Http;
10 10 using Microsoft.AspNetCore.Mvc;
11 11 using NCC.Common.Core.Manager;
  12 +using NCC.Common.Extension;
12 13 using NCC.Common.Filter;
13 14 using NCC.Common.Helper;
14 15 using NCC.Dependency;
15 16 using NCC.DynamicApiController;
  17 +using NCC.Extend.Entitys.Dto.Common;
16 18 using NCC.Extend.Entitys.Dto.LqEvent;
17 19 using NCC.Extend.Entitys.Dto.LqEventUser;
18 20 using NCC.Extend.Entitys.Enum;
19 21 using NCC.Extend.Entitys.lq_event;
20 22 using NCC.Extend.Entitys.lq_eventuser;
21 23 using NCC.Extend.Entitys.lq_mdxx;
  24 +using NCC.Extend.Entitys.lq_tkjlb;
22 25 using NCC.Extend.Interfaces.LqEvent;
23 26 using NCC.FriendlyException;
24 27 using NCC.System.Entitys.Permission;
... ... @@ -136,13 +139,36 @@ namespace NCC.Extend.LqEvent
136 139 throw NCCException.Oh("拓客活动不存在");
137 140 }
138 141  
139   - var output = entity.Adapt<LqEventInfoOutput>();
140   -
141   - // 2. 获取拓客活动成员信息
142   - var members = await _db.Queryable<LqEventUserEntity>().Where(u => u.EventId == id.ToString()).ToListAsync();
143   -
144   - // 3. 转换为输出格式
145   - output.Members = members.Adapt<List<LqEventUserInfoOutput>>();
  142 + // 2. 手动映射到输出格式
  143 + var output = new LqEventInfoOutput
  144 + {
  145 + id = entity.Id,
  146 + eventName = entity.EventName,
  147 + startTime = entity.StartTime,
  148 + endTime = entity.EndTime,
  149 + eventCoordinator = entity.EventCoordinator,
  150 + eventNumber = entity.EventNumber,
  151 + eventType = entity.EventType,
  152 + };
  153 +
  154 + // 3. 获取拓客活动成员信息
  155 + var members = await _db.Queryable<LqEventUserEntity>().Where(u => u.EventId == id).ToListAsync();
  156 +
  157 + // 4. 手动映射成员信息
  158 + output.Members = members
  159 + .Select(m => new LqEventUserInfoOutput
  160 + {
  161 + id = m.Id,
  162 + eventId = m.EventId,
  163 + userId = m.UserId,
  164 + depId = m.DepId,
  165 + teamName = m.TeamName,
  166 + creationTime = m.CreationTime,
  167 + creationUser = m.CreationUser,
  168 + targetCount = m.EventTarget,
  169 + storeId = m.StoreId,
  170 + })
  171 + .ToList();
146 172  
147 173 return output;
148 174 }
... ... @@ -233,6 +259,7 @@ namespace NCC.Extend.LqEvent
233 259 CreationTime = DateTime.Now,
234 260 CreationUser = userInfo?.userName,
235 261 StoreId = member.StoreId,
  262 + EventTarget = member.TargetCount,
236 263 }
237 264 );
238 265 }
... ... @@ -325,6 +352,7 @@ namespace NCC.Extend.LqEvent
325 352 CreationTime = DateTime.Now,
326 353 CreationUser = userInfo?.userName,
327 354 StoreId = member.StoreId,
  355 + EventTarget = member.TargetCount,
328 356 }
329 357 );
330 358 }
... ... @@ -503,6 +531,188 @@ namespace NCC.Extend.LqEvent
503 531 }
504 532 #endregion
505 533  
  534 + #region 根据用户ID获取当前参与的拓客活动
  535 + /// <summary>
  536 + /// 根据用户ID获取当前参与的拓客活动列表
  537 + /// </summary>
  538 + /// <remarks>
  539 + /// 根据用户ID查询当前正在进行的拓客活动信息
  540 + /// 返回用户参与的所有活动详情,包括活动基本信息、用户目标、门店信息等
  541 + /// 如果没有当前活动,返回空列表
  542 + ///
  543 + /// 示例请求:
  544 + /// ```json
  545 + /// GET /api/Extend/LqEvent/user/{userId}/current
  546 + /// ```
  547 + ///
  548 + /// 参数说明:
  549 + /// - userId: 用户ID,必填参数
  550 + ///
  551 + /// 返回信息包括:
  552 + /// - 活动基本信息(ID、名称、编号、负责人、时间)
  553 + /// - 用户参与信息(用户ID、部门ID、战队名称、目标数量)
  554 + /// - 门店信息(门店ID、门店名称)
  555 + /// - 创建信息(创建时间、创建用户)
  556 + /// </remarks>
  557 + /// <param name="userId">用户ID</param>
  558 + /// <returns>用户当前参与的拓客活动列表,无活动时返回空列表</returns>
  559 + /// <response code="200">成功返回活动列表(可能为空)</response>
  560 + /// <response code="400">参数错误,用户ID不能为空</response>
  561 + [HttpGet("user/{userId}/current")]
  562 + public async Task<dynamic> GetCurrentEvent(string userId)
  563 + {
  564 + if (string.IsNullOrEmpty(userId))
  565 + {
  566 + throw NCCException.Oh("用户ID不能为空");
  567 + }
  568 + try
  569 + {
  570 + var currentTime = DateTime.Now;
  571 + // 先检查用户是否有活动记录
  572 + var userEventCount = await _db.Queryable<LqEventUserEntity>().Where(eu => eu.UserId == userId).CountAsync();
  573 + if (userEventCount == 0)
  574 + {
  575 + return null;
  576 + }
  577 + // 使用内存合并的方式,避免复杂的SqlFunc问题
  578 + // 1. 查询用户参与的活动信息
  579 + var userEvents = await _db.Queryable<LqEventUserEntity>().Where(eventUser => eventUser.UserId == userId).ToListAsync();
  580 +
  581 + if (userEvents == null || userEvents.Count == 0)
  582 + {
  583 + return new List<LqEventUserEventOutput>();
  584 + }
  585 +
  586 + // 2. 查询当前正在进行的活动详情
  587 + var eventIds = userEvents.Select(u => u.EventId).ToList();
  588 + var currentEvents = await _db.Queryable<LqEventEntity>().Where(e => eventIds.Contains(e.Id) && e.StartTime <= currentTime && e.EndTime >= currentTime).ToListAsync();
  589 +
  590 + if (currentEvents == null || currentEvents.Count == 0)
  591 + {
  592 + return new List<LqEventUserEventOutput>();
  593 + }
  594 +
  595 + // 3. 在内存中合并数据
  596 + var eventUsers = userEvents
  597 + .Where(userEvent => currentEvents.Any(e => e.Id == userEvent.EventId))
  598 + .Select(userEvent =>
  599 + {
  600 + var eventInfo = currentEvents.First(e => e.Id == userEvent.EventId);
  601 + return new LqEventUserEventOutput
  602 + {
  603 + EventId = userEvent.EventId,
  604 + EventName = eventInfo.EventName,
  605 + EventNumber = eventInfo.EventNumber,
  606 + EventCoordinator = eventInfo.EventCoordinator,
  607 + StartTime = eventInfo.StartTime,
  608 + EndTime = eventInfo.EndTime,
  609 + UserId = userEvent.UserId,
  610 + DepId = userEvent.DepId,
  611 + TeamName = userEvent.TeamName,
  612 + EventTarget = userEvent.EventTarget,
  613 + CreationTime = userEvent.CreationTime,
  614 + CreationUser = userEvent.CreationUser,
  615 + StoreId = userEvent.StoreId,
  616 + StoreName = null, // 不需要门店信息
  617 + };
  618 + })
  619 + .ToList();
  620 +
  621 + // 如果没有查询到当前活动,返回空列表
  622 + return eventUsers ?? new List<LqEventUserEventOutput>();
  623 + }
  624 + catch (Exception ex)
  625 + {
  626 + throw NCCException.Oh($"查询用户 {userId} 当前活动失败: {ex.Message}", ex);
  627 + }
  628 + }
  629 + #endregion
  630 +
  631 + #region 根据活动ID获取战队统计数据
  632 + /// <summary>
  633 + /// 根据活动ID获取战队统计数据
  634 + /// </summary>
  635 + /// <remarks>
  636 + /// 根据活动ID查询该活动下所有门店和战队的统计数据
  637 + /// 返回按门店和战队分组的拓客数据
  638 + ///
  639 + /// 示例请求:
  640 + /// ```json
  641 + /// GET /api/Extend/LqEvent/team-data/{eventId}
  642 + /// ```
  643 + ///
  644 + /// 参数说明:
  645 + /// - eventId: 活动ID,必填参数
  646 + ///
  647 + /// 返回信息包括:
  648 + /// - 门店信息(门店ID、门店名称)
  649 + /// - 战队信息(战队名称)
  650 + /// - 用户信息(用户ID、用户姓名、拓客数量、活动目标)
  651 + /// </remarks>
  652 + /// <param name="eventId">活动ID</param>
  653 + /// <returns>按门店和战队分组的统计数据</returns>
  654 + /// <response code="200">成功返回统计数据</response>
  655 + /// <response code="400">参数错误,活动ID不能为空</response>
  656 + [HttpGet("team-data/{eventId}")]
  657 + public async Task<dynamic> GetTeamDataByEventId(string eventId)
  658 + {
  659 + if (string.IsNullOrEmpty(eventId))
  660 + {
  661 + throw NCCException.Oh("活动ID不能为空");
  662 + }
  663 +
  664 + try
  665 + {
  666 + // 使用SqlFunc子查询,一次性获取所有需要的数据,避免多次查询和内存合并
  667 + var teamData = await _db.Queryable<LqEventUserEntity>()
  668 + .Where(eventUser => eventUser.EventId == eventId)
  669 + .Select(eventUser => new
  670 + {
  671 + StoreId = eventUser.StoreId,
  672 + StoreName = SqlFunc.Subqueryable<LqMdxxEntity>().Where(md => md.Id == eventUser.StoreId).Select(md => md.Dm),
  673 + TeamName = eventUser.TeamName,
  674 + ExpansionUserId = eventUser.UserId,
  675 + ExpansionUserName = SqlFunc.Subqueryable<UserEntity>().Where(u => u.Id == eventUser.UserId).Select(u => u.RealName),
  676 + EventTarget = eventUser.EventTarget,
  677 + ExpansionCount = SqlFunc.Subqueryable<LqTkjlbEntity>().Where(tkjlb => tkjlb.EventId == eventId && tkjlb.ExpansionUserId == eventUser.UserId).Count(),
  678 + })
  679 + .ToListAsync();
  680 +
  681 + // 按门店和战队分组数据
  682 + var result = teamData
  683 + .GroupBy(x => new { x.StoreId, x.StoreName })
  684 + .Select(storeGroup => new StoreTeamDataOutput
  685 + {
  686 + StoreId = storeGroup.Key.StoreId,
  687 + StoreName = storeGroup.Key.StoreName,
  688 + TeamList = storeGroup
  689 + .GroupBy(x => x.TeamName)
  690 + .Select(teamGroup => new TeamInfoOutput
  691 + {
  692 + TeamName = teamGroup.Key,
  693 + TeamUserInfo = teamGroup
  694 + .Select(user => new TeamUserInfoOutput
  695 + {
  696 + ExpansionUserId = user.ExpansionUserId,
  697 + ExpansionUserName = user.ExpansionUserName,
  698 + ExpansionCount = user.ExpansionCount,
  699 + EventTarget = user.EventTarget,
  700 + })
  701 + .ToList(),
  702 + })
  703 + .ToList(),
  704 + })
  705 + .ToList();
  706 +
  707 + return result;
  708 + }
  709 + catch (Exception ex)
  710 + {
  711 + throw NCCException.Oh($"查询活动 {eventId} 战队统计数据失败: {ex.Message}", ex);
  712 + }
  713 + }
  714 + #endregion
  715 +
506 716 #region Excel导入拓客活动用户
507 717  
508 718 /// <summary>
... ... @@ -698,7 +908,7 @@ namespace NCC.Extend.LqEvent
698 908 // 调试信息:输出每一行读取的数据
699 909 Console.WriteLine($"第{i + 1}行数据: 手机号={mobilePhone}, 姓名={name}, 战队={teamName}, 门店={storeName}, 目标={targetCountStr}");
700 910  
701   - int? targetCount = null;
  911 + int targetCount = 0;
702 912 if (!string.IsNullOrEmpty(targetCountStr) && int.TryParse(targetCountStr, out int target))
703 913 {
704 914 targetCount = target;
... ... @@ -746,7 +956,7 @@ namespace NCC.Extend.LqEvent
746 956 public string Name { get; set; }
747 957 public string TeamName { get; set; }
748 958 public string StoreName { get; set; }
749   - public int? TargetCount { get; set; }
  959 + public int TargetCount { get; set; } = 0;
750 960 }
751 961  
752 962 #endregion
... ... @@ -758,30 +968,16 @@ namespace NCC.Extend.LqEvent
758 968 /// </summary>
759 969 /// <returns>拓客类型枚举列表</returns>
760 970 [HttpGet("event-types")]
761   - public List<EventTypeEnumOutput> GetEventTypes()
  971 + public List<EnumOutput> GetEventTypes()
762 972 {
763   - var result = new List<EventTypeEnumOutput>();
764   -
765   - // 获取所有枚举值
766   - var enumValues = Enum.GetValues<EventType>();
767   -
768   - foreach (var enumValue in enumValues)
769   - {
770   - // 获取枚举的Description特性
771   - var field = enumValue.GetType().GetField(enumValue.ToString());
772   - var descriptionAttribute = field?.GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault() as DescriptionAttribute;
773   -
774   - result.Add(
775   - new EventTypeEnumOutput
776   - {
777   - Value = (int)enumValue,
778   - Name = enumValue.ToString(),
779   - Description = descriptionAttribute?.Description ?? enumValue.ToString(),
780   - }
781   - );
782   - }
783   -
784   - return result;
  973 + return Enum.GetValues<EventType>()
  974 + .Select(e => new EnumOutput
  975 + {
  976 + Value = (int)e,
  977 + Name = e.ToString(),
  978 + Description = e.GetDescription(),
  979 + })
  980 + .ToList();
785 981 }
786 982  
787 983 #endregion
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs
... ... @@ -223,18 +223,19 @@ namespace NCC.Extend.LqHytkHytk
223 223 var lqHytkMxEntity = new LqHytkMxEntity
224 224 {
225 225 Id = YitIdHelper.NextId().ToString(),
226   - Gltkbh = newEntity.Id,
227   - F_CreateTime = DateTime.Now,
228   - F_CreateUser = userInfo.userId,
229   - F_DeleteMark = 0,
  226 + RefundInfoId = newEntity.Id,
  227 + BillingItemId = item.billingItemId,
  228 + CreateTime = DateTime.Now,
  229 + CreateUser = userInfo.userId,
  230 + DeleteMark = 0,
230 231 Px = item.px,
231 232 Pxmc = item.pxmc,
232 233 Pxjg = item.pxjg,
233 234 Tkje = item.tkje,
234   - F_ProjectNumber = item.F_ProjectNumber ?? 1,
235   - F_IsEnabled = item.F_IsEnabled ?? 1,
236   - F_SourceType = item.F_SourceType,
237   - F_TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
  235 + ProjectNumber = item.F_ProjectNumber ?? 1,
  236 + IsEnabled = item.F_IsEnabled ?? 1,
  237 + SourceType = item.F_SourceType,
  238 + TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
238 239 };
239 240 allMxEntities.Add(lqHytkMxEntity);
240 241  
... ... @@ -356,7 +357,7 @@ namespace NCC.Extend.LqHytkHytk
356 357 await _db.Updateable(entity).IgnoreColumns(true).ExecuteCommandAsync();
357 358  
358 359 // 删除原有的关联数据
359   - await _db.Deleteable<LqHytkMxEntity>().Where(x => x.Gltkbh == id).ExecuteCommandAsync();
  360 + await _db.Deleteable<LqHytkMxEntity>().Where(x => x.RefundInfoId == id).ExecuteCommandAsync();
360 361 await _db.Deleteable<LqHytkJksyjEntity>().Where(x => x.Gltkbh == id).ExecuteCommandAsync();
361 362 await _db.Deleteable<LqHytkKjbsyjEntity>().Where(x => x.Gltkbh == id).ExecuteCommandAsync();
362 363  
... ... @@ -374,18 +375,19 @@ namespace NCC.Extend.LqHytkHytk
374 375 var lqHytkMxEntity = new LqHytkMxEntity
375 376 {
376 377 Id = YitIdHelper.NextId().ToString(),
377   - Gltkbh = id,
378   - F_CreateTime = DateTime.Now,
379   - F_CreateUser = userInfo.userId,
380   - F_DeleteMark = 0,
  378 + RefundInfoId = id,
  379 + BillingItemId = item.billingItemId,
  380 + CreateTime = DateTime.Now,
  381 + CreateUser = userInfo.userId,
  382 + DeleteMark = 0,
381 383 Px = item.px,
382 384 Pxmc = item.pxmc,
383 385 Pxjg = item.pxjg,
384 386 Tkje = item.tkje,
385   - F_ProjectNumber = item.F_ProjectNumber ?? 1,
386   - F_IsEnabled = item.F_IsEnabled ?? 1,
387   - F_SourceType = item.F_SourceType,
388   - F_TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
  387 + ProjectNumber = item.F_ProjectNumber ?? 1,
  388 + IsEnabled = item.F_IsEnabled ?? 1,
  389 + SourceType = item.F_SourceType,
  390 + TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
389 391 };
390 392 allMxEntities.Add(lqHytkMxEntity);
391 393  
... ... @@ -523,7 +525,7 @@ namespace NCC.Extend.LqHytkHytk
523 525 var output = entity.Adapt<LqHytkHytkInfoOutput>();
524 526  
525 527 // 2. 查询品项明细列表
526   - var lqHytkMxList = await _db.Queryable<LqHytkMxEntity>().Where(w => w.Gltkbh == entity.Id).ToListAsync();
  528 + var lqHytkMxList = await _db.Queryable<LqHytkMxEntity>().Where(w => w.RefundInfoId == entity.Id).ToListAsync();
527 529  
528 530 // 3. 查询健康师业绩列表
529 531 var lqHytkJksyjList = await _db.Queryable<LqHytkJksyjEntity>().Where(w => w.Gltkbh == entity.Id).ToListAsync();
... ... @@ -538,15 +540,16 @@ namespace NCC.Extend.LqHytkHytk
538 540 var mxOutput = new LqHytkMxInfoOutput
539 541 {
540 542 id = mx.Id,
541   - gltkbh = mx.Gltkbh,
  543 + refundInfoId = mx.RefundInfoId,
  544 + billingItemId = mx.BillingItemId,
542 545 px = mx.Px,
543 546 pxmc = mx.Pxmc,
544 547 pxjg = mx.Pxjg,
545 548 tkje = mx.Tkje,
546   - F_ProjectNumber = mx.F_ProjectNumber,
547   - F_IsEnabled = mx.F_IsEnabled,
548   - F_SourceType = mx.F_SourceType,
549   - F_TotalPrice = mx.F_TotalPrice,
  549 + projectNumber = mx.ProjectNumber,
  550 + isEnabled = mx.IsEnabled,
  551 + sourceType = mx.SourceType,
  552 + totalPrice = mx.TotalPrice,
550 553 };
551 554  
552 555 // 关联该品项的健康师业绩
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
... ... @@ -16,8 +16,11 @@ using NCC.Common.Model.NPOI;
16 16 using NCC.DataEncryption;
17 17 using NCC.Dependency;
18 18 using NCC.DynamicApiController;
  19 +using NCC.Extend.Entitys.Dto.Common;
19 20 using NCC.Extend.Entitys.Dto.LqKdKdjlb;
  21 +using NCC.Extend.Entitys.Enum;
20 22 using NCC.Extend.Entitys.lq_jinsanjiao_user;
  23 +using NCC.Extend.Entitys.lq_kd_deductinfo;
21 24 using NCC.Extend.Entitys.lq_kd_jksyj;
22 25 using NCC.Extend.Entitys.lq_kd_kdjlb;
23 26 using NCC.Extend.Entitys.lq_kd_kjbsyj;
... ... @@ -266,7 +269,20 @@ namespace NCC.Extend.LqKdKdjlb
266 269 var allPxmxEntities = new List<LqKdPxmxEntity>();
267 270 var allJksyjEntities = new List<LqKdJksyjEntity>();
268 271 var allKjbsyjEntities = new List<LqKdKjbsyjEntity>();
269   -
  272 + var allDeductEntities = new List<LqKdDeductinfoEntity>();
  273 + // 处理扣款信息列表
  274 + foreach (var item in input.lqKdKdjlbDeductList)
  275 + {
  276 + var lqKdDeductEntity = new LqKdDeductinfoEntity
  277 + {
  278 + Id = YitIdHelper.NextId().ToString(),
  279 + BillingId = newEntity.Id,
  280 + DeductId = item.DeductId,
  281 + DeductType = item.DeductType,
  282 + Amount = item.Amount,
  283 + };
  284 + allDeductEntities.Add(lqKdDeductEntity);
  285 + }
270 286 // 处理品项明细列表
271 287 foreach (var item in input.lqKdPxmxList)
272 288 {
... ... @@ -331,7 +347,11 @@ namespace NCC.Extend.LqKdKdjlb
331 347 }
332 348 }
333 349 }
334   -
  350 + // 批量插入扣款信息
  351 + if (allDeductEntities.Any())
  352 + {
  353 + await _db.Insertable(allDeductEntities).ExecuteCommandAsync();
  354 + }
335 355 // 批量插入品项明细
336 356 if (allPxmxEntities.Any())
337 357 {
... ... @@ -347,6 +367,7 @@ namespace NCC.Extend.LqKdKdjlb
347 367 {
348 368 await _db.Insertable(allKjbsyjEntities).ExecuteCommandAsync();
349 369 }
  370 +
350 371 //关闭事务
351 372 _db.CommitTran();
352 373  
... ... @@ -755,5 +776,24 @@ namespace NCC.Extend.LqKdKdjlb
755 776 }
756 777 }
757 778 #endregion
  779 +
  780 + #region 获取扣款类型枚举内容
  781 + /// <summary>
  782 + /// 获取扣款类型枚举内容
  783 + /// </summary>
  784 + /// <returns>扣款类型枚举列表</returns>
  785 + [HttpGet("deduct-types")]
  786 + public List<EnumOutput> GetDeductTypes()
  787 + {
  788 + return Enum.GetValues<DeductTypeEnum>()
  789 + .Select(e => new EnumOutput
  790 + {
  791 + Value = (int)e,
  792 + Name = e.ToString(),
  793 + Description = e.GetDescription(),
  794 + })
  795 + .ToList();
  796 + }
  797 + #endregion
758 798 }
759 799 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs
... ... @@ -548,155 +548,34 @@ namespace NCC.Extend.LqKhxx
548 548 {
549 549 throw NCCException.Oh(ErrorCode.COM1000, "会员ID不能为空");
550 550 }
551   -
552 551 try
553 552 {
554   - _logger.LogInformation("开始查询会员剩余品项,会员ID:{MemberId}", memberId);
555   -
556 553 // 1. 查询会员基本信息
557 554 var memberInfo = await _db.Queryable<LqKhxxEntity>().Where(x => x.Id == memberId).FirstAsync();
558   -
559 555 if (memberInfo == null)
560 556 {
561 557 _logger.LogWarning("会员不存在,会员ID:{MemberId}", memberId);
562   - throw NCCException.Oh(ErrorCode.COM1005, "会员不存在");
  558 + throw NCCException.Oh("会员不存在");
563 559 }
564   -
565   - _logger.LogInformation("会员信息查询成功,会员姓名:{MemberName}", memberInfo.Khmc);
566   -
567 560 // 2. 查询开单记录ID列表
568   - _logger.LogInformation("开始查询开单记录ID列表");
569   - var orderIds = await _db.Queryable<LqKdKdjlbEntity>().Where(kd => kd.Kdhy == memberId).Select(kd => kd.Id).ToListAsync();
570   -
571   - _logger.LogInformation("开单记录ID列表查询成功,数量:{Count}", orderIds.Count);
572   -
573   - // 3. 查询开单品项统计(按品项ID、名称、价格和来源类型分组)
574   - _logger.LogInformation("开始查询开单品项统计");
575   - var purchasedItems = new List<dynamic>();
576   - if (orderIds.Any())
577   - {
578   - var tempPurchasedItems = await _db.Queryable<LqKdPxmxEntity>()
579   - .Where(px => orderIds.Contains(px.Glkdbh))
580   - .GroupBy(px => new
581   - {
582   - px.Px,
583   - px.Pxmc,
584   - px.Pxjg,
585   - px.SourceType,
586   - })
587   - .Select(px => new
588   - {
589   - ItemId = px.Px,
590   - ItemName = px.Pxmc,
591   - ItemPrice = px.Pxjg,
592   - SourceType = SqlFunc.IsNull(px.SourceType, "未知"),
593   - TotalPurchased = SqlFunc.AggregateSum(SqlFunc.ToDecimal(px.ProjectNumber)),
594   - })
595   - .ToListAsync();
596   -
597   - purchasedItems = tempPurchasedItems.Cast<dynamic>().ToList();
598   - _logger.LogInformation("开单品项统计查询成功,数量:{Count}", purchasedItems.Count);
599   -
600   - // 调试:输出前几条记录查看SourceType字段
601   - foreach (var item in purchasedItems.Take(3))
602   - {
603   - _logger.LogInformation($"调试 - 品项ID: {item.ItemId}, 品项名称: {item.ItemName}, 来源类型: {item.SourceType}");
604   - }
605   - }
606   -
607   - // 4. 查询耗卡记录ID列表
608   - _logger.LogInformation("开始查询耗卡记录ID列表");
609   - var consumeIds = await _db.Queryable<LqXhHyhkEntity>().Where(hk => hk.Hy == memberId).Select(hk => hk.Id).ToListAsync();
610   -
611   - _logger.LogInformation("耗卡记录ID列表查询成功,数量:{Count}", consumeIds.Count);
612   -
613   - // 5. 查询耗卡品项统计(按品项ID和来源类型分组)
614   - _logger.LogInformation("开始查询耗卡品项统计");
615   - var consumedItems = new List<dynamic>();
616   - if (consumeIds.Any())
617   - {
618   - var tempConsumedItems = await _db.Queryable<LqXhPxmxEntity>()
619   - .Where(px => consumeIds.Contains(px.Glkdbh))
620   - .GroupBy(px => new { px.Px, px.SourceType })
621   - .Select(px => new
622   - {
623   - ItemId = px.Px,
624   - SourceType = SqlFunc.IsNull(px.SourceType, "未知"),
625   - ConsumedCount = SqlFunc.AggregateSum(SqlFunc.ToDecimal(px.ProjectNumber)),
626   - })
627   - .ToListAsync();
628   -
629   - consumedItems = tempConsumedItems.Cast<dynamic>().ToList();
630   - _logger.LogInformation("耗卡品项统计查询成功,数量:{Count}", consumedItems.Count);
631   - }
632   -
633   - // 6. 查询退卡记录ID列表
634   - _logger.LogInformation("开始查询退卡记录ID列表");
635   - var refundIds = await _db.Queryable<LqHytkHytkEntity>().Where(tk => tk.Hy == memberId && tk.F_DeleteMark != 1).Select(tk => tk.Id).ToListAsync();
636   -
637   - _logger.LogInformation("退卡记录ID列表查询成功,数量:{Count}", refundIds.Count);
638   -
639   - // 7. 查询退卡品项统计(按品项ID和来源类型分组)
640   - _logger.LogInformation("开始查询退卡品项统计");
641   - var refundedItems = new List<dynamic>();
642   - if (refundIds.Any())
643   - {
644   - var tempRefundedItems = await _db.Queryable<LqHytkMxEntity>()
645   - .Where(px => refundIds.Contains(px.Gltkbh) && px.F_DeleteMark != 1)
646   - .GroupBy(px => new { px.Px, px.F_SourceType })
647   - .Select(px => new
648   - {
649   - ItemId = px.Px,
650   - SourceType = SqlFunc.IsNull(px.F_SourceType, "未知"),
651   - RefundedCount = SqlFunc.AggregateSum(SqlFunc.ToDecimal(px.F_ProjectNumber)),
652   - })
653   - .ToListAsync();
654   -
655   - refundedItems = tempRefundedItems.Cast<dynamic>().ToList();
656   - _logger.LogInformation("退卡品项统计查询成功,数量:{Count}", refundedItems.Count);
657   - }
658   -
659   - // 8. 合并计算剩余品项(按品项ID和来源类型匹配)
660   - _logger.LogInformation("开始合并计算剩余品项");
661   - var remainingItems = new List<RemainingItemInfo>();
662   -
663   - // 处理有购买记录的品项
664   - foreach (var purchased in purchasedItems)
665   - {
666   - // 按品项ID和来源类型匹配耗卡记录
667   - var consumed = consumedItems.FirstOrDefault(x => x.ItemId == purchased.ItemId && x.SourceType == purchased.SourceType);
668   - var consumedCount = consumed?.ConsumedCount ?? 0;
669   -
670   - // 按品项ID和来源类型匹配退卡记录
671   - var refunded = refundedItems.FirstOrDefault(x => x.ItemId == purchased.ItemId && x.SourceType == purchased.SourceType);
672   - var refundedCount = refunded?.RefundedCount ?? 0;
673   -
674   - // 计算剩余数量:购买数量 - 消费数量 - 退卡数量
675   - var remainingCount = purchased.TotalPurchased - consumedCount - refundedCount;
676   -
677   - if (remainingCount > 0)
  561 + var remainingItems = await _db.Queryable<LqKdPxmxEntity>()
  562 + .Where(x => x.MemberId == memberId)
  563 + .Select(x => new RemainingItemInfo
678 564 {
679   - remainingItems.Add(
680   - new RemainingItemInfo
681   - {
682   - ItemId = purchased.ItemId,
683   - ItemName = purchased.ItemName,
684   - ItemPrice = purchased.ItemPrice,
685   - SourceType = purchased.SourceType?.ToString() ?? "未知",
686   - TotalPurchased = purchased.TotalPurchased,
687   - ConsumedCount = consumedCount,
688   - RefundedCount = refundedCount,
689   - RemainingCount = remainingCount,
690   - }
691   - );
692   - }
693   - }
694   -
695   - // 7. 按剩余数量降序排列
696   - remainingItems = remainingItems.OrderByDescending(x => x.RemainingCount).ToList();
697   -
698   - _logger.LogInformation("剩余品项计算完成,数量:{Count}", remainingItems.Count);
699   -
  565 + BillingItemId = x.Id,
  566 + ItemId = x.Px,
  567 + ItemName = x.Pxmc,
  568 + ItemPrice = x.Pxjg,
  569 + SourceType = x.SourceType,
  570 + TotalPurchased = x.ProjectNumber,
  571 + ConsumedCount = SqlFunc.Subqueryable<LqXhPxmxEntity>().Where(y => y.BillingItemId == x.Id).Sum(y => SqlFunc.ToDecimal(y.ProjectNumber)),
  572 + RefundedCount = SqlFunc.Subqueryable<LqHytkMxEntity>().Where(y => y.BillingItemId == x.Id).Sum(y => SqlFunc.ToDecimal(y.ProjectNumber)),
  573 + RemainingCount =
  574 + x.ProjectNumber
  575 + - SqlFunc.Subqueryable<LqXhPxmxEntity>().Where(y => y.BillingItemId == x.Id).Sum(y => SqlFunc.ToDecimal(y.ProjectNumber))
  576 + - SqlFunc.Subqueryable<LqHytkMxEntity>().Where(y => y.BillingItemId == x.Id).Sum(y => SqlFunc.ToDecimal(y.ProjectNumber)),
  577 + })
  578 + .ToListAsync();
700 579 return new MemberRemainingItemsOutput
701 580 {
702 581 MemberId = memberId,
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs
... ... @@ -33,7 +33,7 @@ namespace NCC.Extend.LqTkjlb
33 33 /// <summary>
34 34 /// 拓客管理服务
35 35 /// </summary>
36   - [ApiDescriptionSettings(Tag = "Extend", Name = "LqTkjlb", Order = 200)]
  36 + [ApiDescriptionSettings(Tag = "绿纤拓客管理服务", Name = "LqTkjlb", Order = 200)]
37 37 [Route("api/Extend/[controller]")]
38 38 public class LqTkjlbService : ILqTkjlbService, IDynamicApiController, ITransient
39 39 {
... ... @@ -60,10 +60,29 @@ namespace NCC.Extend.LqTkjlb
60 60 [HttpGet("{id}")]
61 61 public async Task<dynamic> GetInfo(string id)
62 62 {
63   - var entity = await _db.Queryable<LqTkjlbEntity>().FirstAsync(p => p.Id == id);
64   - var output = entity.Adapt<LqTkjlbInfoOutput>();
65   - output.eventName = SqlFunc.Subqueryable<LqEventEntity>().Where(u => u.Id == entity.EventId).Select(u => u.EventName);
66   - return output;
  63 + // 使用SqlFunc在查询时直接获取用户名和活动名称
  64 + var result = await _db.Queryable<LqTkjlbEntity>()
  65 + .Where(p => p.Id == id)
  66 + .Select(p => new LqTkjlbInfoOutput
  67 + {
  68 + id = p.Id,
  69 + expansionTime = p.ExpansionTime,
  70 + expansionUserId = p.ExpansionUserId,
  71 + expansionUserName = SqlFunc.Subqueryable<UserEntity>().Where(u => u.Id == p.ExpansionUserId).Select(u => u.RealName),
  72 + customerName = p.CustomerName,
  73 + customerPhone = p.CustomerPhone,
  74 + buyNumber = p.BuyNumber,
  75 + paymentMethod = p.PaymentMethod,
  76 + isAddWeChat = p.IsAddWeChat,
  77 + remarks = p.Remarks,
  78 + storeId = p.StoreId,
  79 + teamName = p.TeamName,
  80 + eventId = p.EventId,
  81 + eventName = SqlFunc.Subqueryable<LqEventEntity>().Where(e => e.Id == p.EventId).Select(e => e.EventName),
  82 + })
  83 + .FirstAsync();
  84 +
  85 + return result;
67 86 }
68 87 #endregion
69 88  
... ... @@ -78,36 +97,37 @@ namespace NCC.Extend.LqTkjlb
78 97 public async Task<dynamic> GetList([FromQuery] LqTkjlbListQueryInput input)
79 98 {
80 99 var sidx = input.sidx == null ? "id" : input.sidx;
81   - List<string> queryTksj = input.tksj != null ? input.tksj.Split(',').ToObeject<List<string>>() : null;
  100 + List<string> queryTksj = input.expansionTime != null ? input.expansionTime.Split(',').ToObeject<List<string>>() : null;
82 101 DateTime? startTksj = queryTksj != null ? Ext.GetDateTime(queryTksj.First()) : null;
83 102 DateTime? endTksj = queryTksj != null ? Ext.GetDateTime(queryTksj.Last()) : null;
84 103 var data = await _db.Queryable<LqTkjlbEntity>()
85 104 .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
86   - .WhereIF(queryTksj != null, p => p.Tksj >= new DateTime(startTksj.ToDate().Year, startTksj.ToDate().Month, startTksj.ToDate().Day, 0, 0, 0))
87   - .WhereIF(queryTksj != null, p => p.Tksj <= new DateTime(endTksj.ToDate().Year, endTksj.ToDate().Month, endTksj.ToDate().Day, 23, 59, 59))
88   - .WhereIF(!string.IsNullOrEmpty(input.tkry), p => p.Tkry.Equals(input.tkry))
89   - .WhereIF(!string.IsNullOrEmpty(input.gkxm), p => p.Gkxm.Contains(input.gkxm))
90   - .WhereIF(!string.IsNullOrEmpty(input.dhhm), p => p.Dhhm.Contains(input.dhhm))
91   - .WhereIF(!string.IsNullOrEmpty(input.gmzs), p => p.Gmzs.Equals(input.gmzs))
92   - .WhereIF(!string.IsNullOrEmpty(input.zffs), p => p.Zffs.Equals(input.zffs))
93   - .WhereIF(!string.IsNullOrEmpty(input.sfjwx), p => p.Sfjwx.Equals(input.sfjwx))
94   - .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz))
95   - .WhereIF(!string.IsNullOrEmpty(input.ssmd), p => p.Ssmd.Contains(input.ssmd))
96   - .WhereIF(!string.IsNullOrEmpty(input.sszd), p => p.Sszd.Contains(input.sszd))
  105 + .WhereIF(queryTksj != null, p => p.ExpansionTime >= new DateTime(startTksj.ToDate().Year, startTksj.ToDate().Month, startTksj.ToDate().Day, 0, 0, 0))
  106 + .WhereIF(queryTksj != null, p => p.ExpansionTime <= new DateTime(endTksj.ToDate().Year, endTksj.ToDate().Month, endTksj.ToDate().Day, 23, 59, 59))
  107 + .WhereIF(!string.IsNullOrEmpty(input.expansionUserId), p => p.ExpansionUserId.Equals(input.expansionUserId))
  108 + .WhereIF(!string.IsNullOrEmpty(input.customerName), p => p.CustomerName.Contains(input.customerName))
  109 + .WhereIF(!string.IsNullOrEmpty(input.customerPhone), p => p.CustomerPhone.Contains(input.customerPhone))
  110 + .WhereIF(!string.IsNullOrEmpty(input.buyNumber), p => p.BuyNumber.Equals(input.buyNumber))
  111 + .WhereIF(!string.IsNullOrEmpty(input.paymentMethod), p => p.PaymentMethod.Equals(input.paymentMethod))
  112 + .WhereIF(!string.IsNullOrEmpty(input.isAddWeChat), p => p.IsAddWeChat.Equals(input.isAddWeChat))
  113 + .WhereIF(!string.IsNullOrEmpty(input.remarks), p => p.Remarks.Contains(input.remarks))
  114 + .WhereIF(!string.IsNullOrEmpty(input.storeId), p => p.StoreId.Contains(input.storeId))
  115 + .WhereIF(!string.IsNullOrEmpty(input.teamName), p => p.TeamName.Contains(input.teamName))
  116 + .WhereIF(!string.IsNullOrEmpty(input.eventId), p => p.EventId.Contains(input.eventId))
97 117 .Select(it => new LqTkjlbListOutput
98 118 {
99 119 id = it.Id,
100   - tksj = it.Tksj,
101   - // tkry=it.Tkry,
102   - tkry = SqlFunc.Subqueryable<UserEntity>().Where(u => u.MobilePhone == it.Tkry).Select(u => u.RealName),
103   - gkxm = it.Gkxm,
104   - dhhm = it.Dhhm,
105   - gmzs = it.Gmzs,
106   - zffs = it.Zffs,
107   - sfjwx = it.Sfjwx,
108   - bz = it.Bz,
109   - ssmd = it.Ssmd,
110   - sszd = it.Sszd,
  120 + expansionTime = it.ExpansionTime,
  121 + expansionUserId = it.ExpansionUserId,
  122 + expansionUserName = SqlFunc.Subqueryable<UserEntity>().Where(u => u.MobilePhone == it.ExpansionUserId).Select(u => u.RealName),
  123 + customerName = it.CustomerName,
  124 + customerPhone = it.CustomerPhone,
  125 + buyNumber = it.BuyNumber,
  126 + paymentMethod = it.PaymentMethod,
  127 + isAddWeChat = it.IsAddWeChat,
  128 + remarks = it.Remarks,
  129 + storeId = it.StoreId,
  130 + teamName = it.TeamName,
111 131 eventId = it.EventId,
112 132 eventName = SqlFunc.Subqueryable<LqEventEntity>().Where(u => u.Id == it.EventId).Select(u => u.EventName),
113 133 })
... ... @@ -129,7 +149,7 @@ namespace NCC.Extend.LqTkjlb
129 149 {
130 150 var userInfo = await _userManager.GetUserInfo();
131 151 //通过input.dhhm去查询用户信息
132   - var user = _db.Queryable<LqKhxxEntity>().Where(u => u.Sjh == input.dhhm).Any();
  152 + var user = _db.Queryable<LqKhxxEntity>().Where(u => u.Sjh == input.customerPhone).Any();
133 153 if (user)
134 154 {
135 155 throw NCCException.Oh("该手机号码已存在于会员或线索池中");
... ... @@ -138,7 +158,7 @@ namespace NCC.Extend.LqTkjlb
138 158 var result = await _db.Ado.UseTranAsync(async () =>
139 159 {
140 160 //通过input.eventId去查询拓客活动信息
141   - var eventUserInfoList = await _db.Queryable<LqEventUserEntity>().Where(u => u.EventId == input.eventId && u.UserId == input.tkry).ToListAsync();
  161 + var eventUserInfoList = await _db.Queryable<LqEventUserEntity>().Where(u => u.EventId == input.eventId && u.UserId == input.expansionUserId).ToListAsync();
142 162 if (eventUserInfoList == null || eventUserInfoList.Count == 0)
143 163 {
144 164 throw NCCException.Oh("未找到对应的拓客活动用户信息,请确认活动ID和用户ID是否正确");
... ... @@ -147,15 +167,18 @@ namespace NCC.Extend.LqTkjlb
147 167 // 创建拓客记录
148 168 var entity = input.Adapt<LqTkjlbEntity>();
149 169 entity.Id = YitIdHelper.NextId().ToString();
150   - entity.Sszd = eventUserInfo.TeamName;
  170 + entity.TeamName = eventUserInfo.TeamName;
  171 + entity.StoreId = eventUserInfo.StoreId;
  172 + entity.DepId = eventUserInfo.DepId;
  173 + entity.ExpansionTime = DateTime.Now;
151 174 var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
152 175 if (!(isOk > 0))
153 176 throw NCCException.Oh("创建拓客记录失败");
154 177 // 创建客户信息
155 178 LqKhxxEntity MemberInfo = new LqKhxxEntity();
156 179 MemberInfo.Id = YitIdHelper.NextId().ToString();
157   - MemberInfo.Khmc = entity.Gkxm;
158   - MemberInfo.Sjh = input.dhhm; // 设置手机号
  180 + MemberInfo.Khmc = entity.CustomerName;
  181 + MemberInfo.Sjh = input.customerPhone; // 设置手机号
159 182 MemberInfo.Khmqgs = "线索池";
160 183 MemberInfo.Dah = "GK" + DateTime.Now.ToString("yyyyMMddHHmmss");
161 184 var memberResult = await _db.Insertable(MemberInfo).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
... ... @@ -181,35 +204,42 @@ namespace NCC.Extend.LqTkjlb
181 204 public async Task<dynamic> GetNoPagingList([FromQuery] LqTkjlbListQueryInput input)
182 205 {
183 206 var sidx = input.sidx == null ? "id" : input.sidx;
184   - List<string> queryTksj = input.tksj != null ? input.tksj.Split(',').ToObeject<List<string>>() : null;
185   - DateTime? startTksj = queryTksj != null ? Ext.GetDateTime(queryTksj.First()) : null;
186   - DateTime? endTksj = queryTksj != null ? Ext.GetDateTime(queryTksj.Last()) : null;
  207 + List<string> queryExpansionTime = input.expansionTime != null ? input.expansionTime.Split(',').ToObeject<List<string>>() : null;
  208 + DateTime? startExpansionTime = queryExpansionTime != null ? Ext.GetDateTime(queryExpansionTime.First()) : null;
  209 + DateTime? endExpansionTime = queryExpansionTime != null ? Ext.GetDateTime(queryExpansionTime.Last()) : null;
187 210 var data = await _db.Queryable<LqTkjlbEntity>()
188 211 .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
189   - .WhereIF(queryTksj != null, p => p.Tksj >= new DateTime(startTksj.ToDate().Year, startTksj.ToDate().Month, startTksj.ToDate().Day, 0, 0, 0))
190   - .WhereIF(queryTksj != null, p => p.Tksj <= new DateTime(endTksj.ToDate().Year, endTksj.ToDate().Month, endTksj.ToDate().Day, 23, 59, 59))
191   - .WhereIF(!string.IsNullOrEmpty(input.tkry), p => p.Tkry.Equals(input.tkry))
192   - .WhereIF(!string.IsNullOrEmpty(input.gkxm), p => p.Gkxm.Contains(input.gkxm))
193   - .WhereIF(!string.IsNullOrEmpty(input.dhhm), p => p.Dhhm.Contains(input.dhhm))
194   - .WhereIF(!string.IsNullOrEmpty(input.gmzs), p => p.Gmzs.Equals(input.gmzs))
195   - .WhereIF(!string.IsNullOrEmpty(input.zffs), p => p.Zffs.Equals(input.zffs))
196   - .WhereIF(!string.IsNullOrEmpty(input.sfjwx), p => p.Sfjwx.Equals(input.sfjwx))
197   - .WhereIF(!string.IsNullOrEmpty(input.bz), p => p.Bz.Contains(input.bz))
198   - .WhereIF(!string.IsNullOrEmpty(input.ssmd), p => p.Ssmd.Contains(input.ssmd))
199   - .WhereIF(!string.IsNullOrEmpty(input.sszd), p => p.Sszd.Contains(input.sszd))
  212 + .WhereIF(
  213 + queryExpansionTime != null,
  214 + p => p.ExpansionTime >= new DateTime(startExpansionTime.ToDate().Year, startExpansionTime.ToDate().Month, startExpansionTime.ToDate().Day, 0, 0, 0)
  215 + )
  216 + .WhereIF(queryExpansionTime != null, p => p.ExpansionTime <= new DateTime(endExpansionTime.ToDate().Year, endExpansionTime.ToDate().Month, endExpansionTime.ToDate().Day, 23, 59, 59))
  217 + .WhereIF(!string.IsNullOrEmpty(input.expansionUserId), p => p.ExpansionUserId.Equals(input.expansionUserId))
  218 + .WhereIF(!string.IsNullOrEmpty(input.customerName), p => p.CustomerName.Contains(input.customerName))
  219 + .WhereIF(!string.IsNullOrEmpty(input.customerPhone), p => p.CustomerPhone.Contains(input.customerPhone))
  220 + .WhereIF(!string.IsNullOrEmpty(input.buyNumber), p => p.BuyNumber.ToString().Equals(input.buyNumber))
  221 + .WhereIF(!string.IsNullOrEmpty(input.paymentMethod), p => p.PaymentMethod.Equals(input.paymentMethod))
  222 + .WhereIF(!string.IsNullOrEmpty(input.isAddWeChat), p => p.IsAddWeChat.Equals(input.isAddWeChat))
  223 + .WhereIF(!string.IsNullOrEmpty(input.remarks), p => p.Remarks.Contains(input.remarks))
  224 + .WhereIF(!string.IsNullOrEmpty(input.storeId), p => p.StoreId.Contains(input.storeId))
  225 + .WhereIF(!string.IsNullOrEmpty(input.teamName), p => p.TeamName.Contains(input.teamName))
  226 + .WhereIF(!string.IsNullOrEmpty(input.eventId), p => p.EventId.Equals(input.eventId))
200 227 .Select(it => new LqTkjlbListOutput
201 228 {
202 229 id = it.Id,
203   - tksj = it.Tksj,
204   - tkry = it.Tkry,
205   - gkxm = it.Gkxm,
206   - dhhm = it.Dhhm,
207   - gmzs = it.Gmzs,
208   - zffs = it.Zffs,
209   - sfjwx = it.Sfjwx,
210   - bz = it.Bz,
211   - ssmd = it.Ssmd,
212   - sszd = it.Sszd,
  230 + expansionTime = it.ExpansionTime,
  231 + expansionUserId = it.ExpansionUserId,
  232 + expansionUserName = it.ExpansionUserId, // 这里需要根据实际业务逻辑获取用户名
  233 + customerName = it.CustomerName,
  234 + customerPhone = it.CustomerPhone,
  235 + buyNumber = it.BuyNumber,
  236 + paymentMethod = it.PaymentMethod,
  237 + isAddWeChat = it.IsAddWeChat,
  238 + remarks = it.Remarks,
  239 + storeId = it.StoreId,
  240 + teamName = it.TeamName,
  241 + eventId = it.EventId,
  242 + eventName = it.EventId, // 这里需要根据实际业务逻辑获取活动名称
213 243 })
214 244 .MergeTable()
215 245 .OrderBy(sidx + " " + input.sort)
... ... @@ -336,10 +366,13 @@ namespace NCC.Extend.LqTkjlb
336 366 [HttpGet("Actions/GetRanking")]
337 367 public async Task<dynamic> GetRanking()
338 368 {
339   - var data = await _db.Queryable<LqTkjlbEntity>().GroupBy(it => it.Sszd).Select(it => new LqTkjlbRankingOutput { sszd = it.Sszd, tkrs = SqlFunc.AggregateCount(it.Id) }).ToListAsync();
  369 + var data = await _db.Queryable<LqTkjlbEntity>()
  370 + .GroupBy(it => it.TeamName)
  371 + .Select(it => new LqTkjlbRankingOutput { teamName = it.TeamName, expansionUserCount = SqlFunc.AggregateCount(it.Id) })
  372 + .ToListAsync();
340 373  
341 374 // 在内存中排序并添加排名
342   - var sortedData = data.OrderByDescending(it => it.tkrs).ToList();
  375 + var sortedData = data.OrderByDescending(it => it.expansionUserCount).ToList();
343 376 for (int i = 0; i < sortedData.Count; i++)
344 377 {
345 378 sortedData[i].ranking = i + 1;
... ... @@ -360,18 +393,18 @@ namespace NCC.Extend.LqTkjlb
360 393 var result = new List<LqTkjlbTeamDetailOutput>();
361 394  
362 395 // 获取所有战队
363   - var teams = await _db.Queryable<LqTkjlbEntity>().GroupBy(it => it.Sszd).Select(it => it.Sszd).ToListAsync();
  396 + var teams = await _db.Queryable<LqTkjlbEntity>().GroupBy(it => it.TeamName).Select(it => it.TeamName).ToListAsync();
364 397  
365 398 foreach (var team in teams)
366 399 {
367 400 // 获取该战队所有人员的拓客数据
368 401 var teamMembers = await _db.Queryable<LqTkjlbEntity>()
369   - .Where(it => it.Sszd == team)
370   - .GroupBy(it => it.Tkry)
  402 + .Where(it => it.TeamName == team)
  403 + .GroupBy(it => it.ExpansionUserId)
371 404 .Select(it => new
372 405 {
373 406 // tkry = it.Tkry,
374   - tkry = SqlFunc.Subqueryable<UserEntity>().Where(u => u.MobilePhone == it.Tkry).Select(u => u.RealName),
  407 + tkry = SqlFunc.Subqueryable<UserEntity>().Where(u => u.Id == it.ExpansionUserId).Select(u => u.RealName),
375 408 tkrs = SqlFunc.AggregateCount(it.Id),
376 409 })
377 410 .ToListAsync();
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs
... ... @@ -105,7 +105,7 @@ namespace NCC.Extend.LqXhHyhk
105 105 var output = entity.Adapt<LqXhHyhkInfoOutput>();
106 106  
107 107 // 2. 查询品项明细列表
108   - var lqXhPxmxList = await _db.Queryable<LqXhPxmxEntity>().Where(w => w.Glkdbh == entity.Id).ToListAsync();
  108 + var lqXhPxmxList = await _db.Queryable<LqXhPxmxEntity>().Where(w => w.ConsumeInfoId == entity.Id).ToListAsync();
109 109  
110 110 // 3. 查询健康师业绩列表
111 111 var lqXhJksyjList = await _db.Queryable<LqXhJksyjEntity>().Where(w => w.Glkdbh == entity.Id).ToListAsync();
... ... @@ -120,11 +120,11 @@ namespace NCC.Extend.LqXhHyhk
120 120 var pxmxOutput = new LqXhPxmxInfoOutput
121 121 {
122 122 id = pxmx.Id,
123   - glkdbh = pxmx.Glkdbh,
  123 + consumeInfoId = pxmx.ConsumeInfoId,
  124 + billingItemId = pxmx.BillingItemId,
124 125 px = pxmx.Px,
125 126 pxmc = pxmx.Pxmc,
126 127 pxjg = pxmx.Pxjg,
127   - xfzs = pxmx.Xfzs,
128 128 memberId = pxmx.MemberId,
129 129 createTime = pxmx.CreateTIme,
130 130 projectNumber = pxmx.ProjectNumber,
... ... @@ -281,7 +281,8 @@ namespace NCC.Extend.LqXhHyhk
281 281 var lqXhPxmxEntity = new LqXhPxmxEntity
282 282 {
283 283 Id = YitIdHelper.NextId().ToString(),
284   - Glkdbh = newEntity.Id,
  284 + ConsumeInfoId = newEntity.Id,
  285 + BillingItemId = item.billingItemId,
285 286 CreateTIme = DateTime.Now,
286 287 MemberId = entity.Hy,
287 288 IsEnabled = 0,
... ... @@ -290,7 +291,6 @@ namespace NCC.Extend.LqXhHyhk
290 291 Px = item.px,
291 292 Pxmc = item.pxmc,
292 293 Pxjg = item.pxjg,
293   - Xfzs = item.xfzs,
294 294 SourceType = item.sourceType,
295 295 };
296 296 allPxmxEntities.Add(lqXhPxmxEntity);
... ... @@ -494,7 +494,7 @@ namespace NCC.Extend.LqXhHyhk
494 494 await _db.Deleteable<LqXhKjbsyjEntity>().In(u => u.Glkdbh, ids).ExecuteCommandAsync();
495 495  
496 496 //清空子表数据
497   - await _db.Deleteable<LqXhPxmxEntity>().In(u => u.Glkdbh, ids).ExecuteCommandAsync();
  497 + await _db.Deleteable<LqXhPxmxEntity>().In(u => u.ConsumeInfoId, ids).ExecuteCommandAsync();
498 498 //关闭事务
499 499 _db.CommitTran();
500 500 }
... ... @@ -532,7 +532,7 @@ namespace NCC.Extend.LqXhHyhk
532 532 await _db.Deleteable<LqXhKjbsyjEntity>().Where(u => u.Glkdbh == id).ExecuteCommandAsync();
533 533  
534 534 //清空原有数据
535   - await _db.Deleteable<LqXhPxmxEntity>().Where(u => u.Glkdbh == id).ExecuteCommandAsync();
  535 + await _db.Deleteable<LqXhPxmxEntity>().Where(u => u.ConsumeInfoId == id).ExecuteCommandAsync();
536 536  
537 537 // 收集所有需要插入的实体,然后批量插入
538 538 var allPxmxEntities = new List<LqXhPxmxEntity>();
... ... @@ -548,7 +548,8 @@ namespace NCC.Extend.LqXhHyhk
548 548 var lqXhPxmxEntity = new LqXhPxmxEntity
549 549 {
550 550 Id = YitIdHelper.NextId().ToString(),
551   - Glkdbh = entity.Id,
  551 + ConsumeInfoId = entity.Id,
  552 + BillingItemId = item.billingItemId,
552 553 CreateTIme = DateTime.Now,
553 554 MemberId = entity.Hy,
554 555 IsEnabled = 0,
... ... @@ -557,7 +558,6 @@ namespace NCC.Extend.LqXhHyhk
557 558 Px = item.px,
558 559 Pxmc = item.pxmc,
559 560 Pxjg = item.pxjg,
560   - Xfzs = item.xfzs,
561 561 SourceType = item.sourceType,
562 562 };
563 563 allPxmxEntities.Add(lqXhPxmxEntity);
... ... @@ -664,7 +664,7 @@ namespace NCC.Extend.LqXhHyhk
664 664 await _db.Deleteable<LqXhKjbsyjEntity>().Where(u => u.Glkdbh == id).ExecuteCommandAsync();
665 665  
666 666 //清空子表数据
667   - await _db.Deleteable<LqXhPxmxEntity>().Where(u => u.Glkdbh == id).ExecuteCommandAsync();
  667 + await _db.Deleteable<LqXhPxmxEntity>().Where(u => u.ConsumeInfoId == id).ExecuteCommandAsync();
668 668  
669 669 //关闭事务
670 670 _db.CommitTran();
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqXhmxbService.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.LqXhmxb;
  19 +using NCC.Extend.Entitys.lq_xhmxb;
8 20 using NCC.Extend.Interfaces.LqXhmxb;
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_xhmxb;
17   -using NCC.Extend.Entitys.Dto.LqXhmxb;
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.LqXhmxb
27 27 {
28 28 /// <summary>
29 29 /// 消耗明细表服务
30 30 /// </summary>
31   - [ApiDescriptionSettings(Tag = "Extend",Name = "LqXhmxb", Order = 200)]
  31 + [ApiDescriptionSettings(Tag = "Extend", Name = "LqXhmxb", Order = 200)]
32 32 [Route("api/Extend/[controller]")]
33 33 public class LqXhmxbService : ILqXhmxbService, IDynamicApiController, ITransient
34 34 {
... ... @@ -39,11 +39,9 @@ namespace NCC.Extend.LqXhmxb
39 39 /// <summary>
40 40 /// 初始化一个<see cref="LqXhmxbService"/>类型的新实例
41 41 /// </summary>
42   - public LqXhmxbService(
43   - ISqlSugarRepository<LqXhmxbEntity> lqXhmxbRepository,
44   - IUserManager userManager)
  42 + public LqXhmxbService(ISqlSugarRepository<LqXhmxbEntity> lqXhmxbRepository, IUserManager userManager)
45 43 {
46   - _lqXhmxbRepository = lqXhmxbRepository;
  44 + _lqXhmxbRepository = lqXhmxbRepository;
47 45 _db = _lqXhmxbRepository.Context;
48 46 _userManager = userManager;
49 47 }
... ... @@ -62,10 +60,10 @@ namespace NCC.Extend.LqXhmxb
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] LqXhmxbListQueryInput input)
71 69 {
... ... @@ -85,24 +83,27 @@ namespace NCC.Extend.LqXhmxb
85 83 .WhereIF(!string.IsNullOrEmpty(input.qtsg2), p => p.Qtsg2.Contains(input.qtsg2))
86 84 .WhereIF(!string.IsNullOrEmpty(input.qtsg3), p => p.Qtsg3.Contains(input.qtsg3))
87 85 .WhereIF(!string.IsNullOrEmpty(input.sghj), p => p.Sghj.Contains(input.sghj))
88   - .Select(it=> new LqXhmxbListOutput
  86 + .Select(it => new LqXhmxbListOutput
89 87 {
90 88 id = it.Id,
91   - mdbh=it.Mdbh,
92   - mdmc=it.Mdmc,
93   - bmbh=it.Bmbh,
94   - bmmc=it.Bmmc,
95   - ygbh=it.Ygbh,
96   - ygmc=it.Ygmc,
97   - xms=it.Xms,
98   - xh=it.Xh,
99   - sg=it.Sg,
100   - qtsg1=it.Qtsg1,
101   - qtsg2=it.Qtsg2,
102   - qtsg3=it.Qtsg3,
103   - sghj=it.Sghj,
104   - }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
105   - return PageResult<LqXhmxbListOutput>.SqlSugarPageResult(data);
  89 + mdbh = it.Mdbh,
  90 + mdmc = it.Mdmc,
  91 + bmbh = it.Bmbh,
  92 + bmmc = it.Bmmc,
  93 + ygbh = it.Ygbh,
  94 + ygmc = it.Ygmc,
  95 + xms = it.Xms,
  96 + xh = it.Xh,
  97 + sg = it.Sg,
  98 + qtsg1 = it.Qtsg1,
  99 + qtsg2 = it.Qtsg2,
  100 + qtsg3 = it.Qtsg3,
  101 + sghj = it.Sghj,
  102 + })
  103 + .MergeTable()
  104 + .OrderBy(sidx + " " + input.sort)
  105 + .ToPagedListAsync(input.currentPage, input.pageSize);
  106 + return PageResult<LqXhmxbListOutput>.SqlSugarPageResult(data);
106 107 }
107 108  
108 109 /// <summary>
... ... @@ -117,14 +118,15 @@ namespace NCC.Extend.LqXhmxb
117 118 var entity = input.Adapt<LqXhmxbEntity>();
118 119 entity.Id = YitIdHelper.NextId().ToString();
119 120 var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
120   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000);
  121 + if (!(isOk > 0))
  122 + throw NCCException.Oh(ErrorCode.COM1000);
121 123 }
122 124  
123 125 /// <summary>
124   - /// 获取消耗明细表无分页列表
125   - /// </summary>
126   - /// <param name="input">请求参数</param>
127   - /// <returns></returns>
  126 + /// 获取消耗明细表无分页列表
  127 + /// </summary>
  128 + /// <param name="input">请求参数</param>
  129 + /// <returns></returns>
128 130 [NonAction]
129 131 public async Task<dynamic> GetNoPagingList([FromQuery] LqXhmxbListQueryInput input)
130 132 {
... ... @@ -144,31 +146,34 @@ namespace NCC.Extend.LqXhmxb
144 146 .WhereIF(!string.IsNullOrEmpty(input.qtsg2), p => p.Qtsg2.Contains(input.qtsg2))
145 147 .WhereIF(!string.IsNullOrEmpty(input.qtsg3), p => p.Qtsg3.Contains(input.qtsg3))
146 148 .WhereIF(!string.IsNullOrEmpty(input.sghj), p => p.Sghj.Contains(input.sghj))
147   - .Select(it=> new LqXhmxbListOutput
  149 + .Select(it => new LqXhmxbListOutput
148 150 {
149 151 id = it.Id,
150   - mdbh=it.Mdbh,
151   - mdmc=it.Mdmc,
152   - bmbh=it.Bmbh,
153   - bmmc=it.Bmmc,
154   - ygbh=it.Ygbh,
155   - ygmc=it.Ygmc,
156   - xms=it.Xms,
157   - xh=it.Xh,
158   - sg=it.Sg,
159   - qtsg1=it.Qtsg1,
160   - qtsg2=it.Qtsg2,
161   - qtsg3=it.Qtsg3,
162   - sghj=it.Sghj,
163   - }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync();
164   - return data;
  152 + mdbh = it.Mdbh,
  153 + mdmc = it.Mdmc,
  154 + bmbh = it.Bmbh,
  155 + bmmc = it.Bmmc,
  156 + ygbh = it.Ygbh,
  157 + ygmc = it.Ygmc,
  158 + xms = it.Xms,
  159 + xh = it.Xh,
  160 + sg = it.Sg,
  161 + qtsg1 = it.Qtsg1,
  162 + qtsg2 = it.Qtsg2,
  163 + qtsg3 = it.Qtsg3,
  164 + sghj = it.Sghj,
  165 + })
  166 + .MergeTable()
  167 + .OrderBy(sidx + " " + input.sort)
  168 + .ToListAsync();
  169 + return data;
165 170 }
166 171  
167 172 /// <summary>
168   - /// 导出消耗明细表
169   - /// </summary>
170   - /// <param name="input">请求参数</param>
171   - /// <returns></returns>
  173 + /// 导出消耗明细表
  174 + /// </summary>
  175 + /// <param name="input">请求参数</param>
  176 + /// <returns></returns>
172 177 [HttpGet("Actions/Export")]
173 178 public async Task<dynamic> Export([FromQuery] LqXhmxbListQueryInput input)
174 179 {
... ... @@ -183,7 +188,8 @@ namespace NCC.Extend.LqXhmxb
183 188 {
184 189 exportData = await this.GetNoPagingList(input);
185 190 }
186   - List<ParamsModel> paramList = "[{\"value\":\"消耗编号\",\"field\":\"id\"},{\"value\":\"门店编号\",\"field\":\"mdbh\"},{\"value\":\"门店名称\",\"field\":\"mdmc\"},{\"value\":\"部门编号\",\"field\":\"bmbh\"},{\"value\":\"部门名称\",\"field\":\"bmmc\"},{\"value\":\"员工编号\",\"field\":\"ygbh\"},{\"value\":\"员工名称\",\"field\":\"ygmc\"},{\"value\":\"项目数\",\"field\":\"xms\"},{\"value\":\"消耗\",\"field\":\"xh\"},{\"value\":\"手工\",\"field\":\"sg\"},{\"value\":\"其它手工1\",\"field\":\"qtsg1\"},{\"value\":\"其它手工2\",\"field\":\"qtsg2\"},{\"value\":\"其它手工3\",\"field\":\"qtsg3\"},{\"value\":\"手工合计\",\"field\":\"sghj\"},]".ToList<ParamsModel>();
  191 + List<ParamsModel> paramList =
  192 + "[{\"value\":\"消耗编号\",\"field\":\"id\"},{\"value\":\"门店编号\",\"field\":\"mdbh\"},{\"value\":\"门店名称\",\"field\":\"mdmc\"},{\"value\":\"部门编号\",\"field\":\"bmbh\"},{\"value\":\"部门名称\",\"field\":\"bmmc\"},{\"value\":\"员工编号\",\"field\":\"ygbh\"},{\"value\":\"员工名称\",\"field\":\"ygmc\"},{\"value\":\"项目数\",\"field\":\"xms\"},{\"value\":\"消耗\",\"field\":\"xh\"},{\"value\":\"手工\",\"field\":\"sg\"},{\"value\":\"其它手工1\",\"field\":\"qtsg1\"},{\"value\":\"其它手工2\",\"field\":\"qtsg2\"},{\"value\":\"其它手工3\",\"field\":\"qtsg3\"},{\"value\":\"手工合计\",\"field\":\"sghj\"},]".ToList<ParamsModel>();
187 193 ExcelConfig excelconfig = new ExcelConfig();
188 194 excelconfig.FileName = "消耗明细表.xls";
189 195 excelconfig.HeadFont = "微软雅黑";
... ... @@ -202,11 +208,7 @@ namespace NCC.Extend.LqXhmxb
202 208 var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
203 209 ExcelExportHelper<LqXhmxbListOutput>.Export(exportData, excelconfig, addPath);
204 210 var fileName = _userManager.UserId + "|" + addPath + "|xls";
205   - var output = new
206   - {
207   - name = excelconfig.FileName,
208   - url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC")
209   - };
  211 + var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
210 212 return output;
211 213 }
212 214  
... ... @@ -226,7 +228,7 @@ namespace NCC.Extend.LqXhmxb
226 228 //开启事务
227 229 _db.BeginTran();
228 230 //批量删除消耗明细表
229   - await _db.Deleteable<LqXhmxbEntity>().In(d => d.Id,ids).ExecuteCommandAsync();
  231 + await _db.Deleteable<LqXhmxbEntity>().In(d => d.Id, ids).ExecuteCommandAsync();
230 232 //关闭事务
231 233 _db.CommitTran();
232 234 }
... ... @@ -250,7 +252,8 @@ namespace NCC.Extend.LqXhmxb
250 252 {
251 253 var entity = input.Adapt<LqXhmxbEntity>();
252 254 var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
253   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001);
  255 + if (!(isOk > 0))
  256 + throw NCCException.Oh(ErrorCode.COM1001);
254 257 }
255 258  
256 259 /// <summary>
... ... @@ -263,7 +266,8 @@ namespace NCC.Extend.LqXhmxb
263 266 var entity = await _db.Queryable<LqXhmxbEntity>().FirstAsync(p => p.Id == id);
264 267 _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
265 268 var isOk = await _db.Deleteable<LqXhmxbEntity>().Where(d => d.Id == id).ExecuteCommandAsync();
266   - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1002);
  269 + if (!(isOk > 0))
  270 + throw NCCException.Oh(ErrorCode.COM1002);
267 271 }
268 272 }
269 273 }
... ...