Commit 3e508db59ec9caa82ea926b1d9bb061953b7d184

Authored by “wangming”
1 parent 15351286

优化开单记录作废功能:添加详细错误处理和备注字段支持

- 改进Cancel方法的异常处理,提供更详细的错误信息
- 添加CancelRefRemarks字段支持,允许传入作废备注
- 增加空值检查和UpdateTime更新
- 重构CheckBillingCanCancelAsync方法,提取公共逻辑
- 完善作废开单记录的业务逻辑和错误提示
Showing 52 changed files with 2091 additions and 771 deletions
antis-ncc-admin/.env.development
... ... @@ -3,5 +3,5 @@
3 3 VUE_CLI_BABEL_TRANSPILE_MODULES = true
4 4 VUE_APP_BASE_API = 'http://lvqian.antissoft.com'
5 5 # VUE_APP_BASE_API = 'http://erp_test.lvqianmeiye.com'
6   -# VUE_APP_BASE_API = 'http://localhost:2011'
  6 +VUE_APP_BASE_API = 'http://localhost:2011'
7 7 VUE_APP_BASE_WSS = 'ws://192.168.110.45:2011/websocket'
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqHytkHytk/LqHytkHytkListOutput.cs
... ... @@ -11,72 +11,72 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
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 md { get; set; }
19   -
  19 +
20 20 /// <summary>
21 21 /// 门店编号
22 22 /// </summary>
23 23 public string mdbh { get; set; }
24   -
  24 +
25 25 /// <summary>
26 26 /// 门店名称
27 27 /// </summary>
28 28 public string mdmc { get; set; }
29   -
  29 +
30 30 /// <summary>
31 31 /// 会员
32 32 /// </summary>
33 33 public string hy { get; set; }
34   -
  34 +
35 35 /// <summary>
36 36 /// 会员姓名
37 37 /// </summary>
38 38 public string hymc { get; set; }
39   -
  39 +
40 40 /// <summary>
41 41 /// 会员账号
42 42 /// </summary>
43 43 public string hyzh { get; set; }
44   -
  44 +
45 45 /// <summary>
46 46 /// 顾客类型
47 47 /// </summary>
48 48 public string gklx { get; set; }
49   -
  49 +
50 50 /// <summary>
51 51 /// 退卡总金额
52 52 /// </summary>
53 53 public decimal? tkje { get; set; }
54   -
  54 +
55 55 /// <summary>
56 56 /// 手工费用
57 57 /// </summary>
58 58 public decimal? sgfy { get; set; }
59   -
  59 +
60 60 /// <summary>
61 61 /// 备注
62 62 /// </summary>
63 63 public string bz { get; set; }
64   -
  64 +
65 65 /// <summary>
66 66 /// 退卡时间
67 67 /// </summary>
68 68 public DateTime? tksj { get; set; }
69   -
  69 +
70 70 /// <summary>
71 71 /// 操作人员
72 72 /// </summary>
73 73 public string czry { get; set; }
74   -
  74 +
75 75 /// <summary>
76 76 /// 退卡状态
77 77 /// </summary>
78 78 public string tkzt { get; set; }
79   -
  79 +
80 80 /// <summary>
81 81 /// 退卡原因
82 82 /// </summary>
... ... @@ -86,6 +86,11 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
86 86 /// 退卡附件
87 87 /// </summary>
88 88 public string fileUrl { get; set; }
89   -
  89 +
  90 + /// <summary>
  91 + /// 是否有效
  92 + /// </summary>
  93 + public int isEffective { get; set; }
  94 +
90 95 }
91 96 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoInfoOutput.cs
... ... @@ -61,5 +61,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
61 61 /// 创建时间
62 62 /// </summary>
63 63 public DateTime? CreateTime { get; set; }
  64 +
64 65 }
65 66 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdJksyj/LqKdJksyjInfoOutput.cs
... ... @@ -12,45 +12,50 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
12 12 /// 业绩编号
13 13 /// </summary>
14 14 public string id { get; set; }
15   -
  15 +
16 16 /// <summary>
17 17 /// 关联开单编号
18 18 /// </summary>
19 19 public string glkdbh { get; set; }
20   -
  20 +
21 21 /// <summary>
22 22 /// 关联开单品项ID
23 23 /// </summary>
24 24 public string kdpxid { get; set; }
25   -
  25 +
26 26 /// <summary>
27 27 /// 健康师ID
28 28 /// </summary>
29 29 public string jks { get; set; }
30   -
  30 +
31 31 /// <summary>
32 32 /// 健康师姓名
33 33 /// </summary>
34 34 public string jksxm { get; set; }
35   -
  35 +
36 36 /// <summary>
37 37 /// 健康师账号
38 38 /// </summary>
39 39 public string jkszh { get; set; }
40   -
  40 +
41 41 /// <summary>
42 42 /// 健康师业绩
43 43 /// </summary>
44 44 public string jksyj { get; set; }
45   -
  45 +
46 46 /// <summary>
47 47 /// 业绩时间
48 48 /// </summary>
49 49 public DateTime? yjsj { get; set; }
50   -
  50 +
51 51 /// <summary>
52 52 /// 金三角ID
53 53 /// </summary>
54 54 public string jsj_id { get; set; }
  55 +
  56 + /// <summary>
  57 + /// 是否有效
  58 + /// </summary>
  59 + public int IsEffective { get; set; }
55 60 }
56 61 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/CancelBillingInput.cs 0 → 100644
  1 +using System.ComponentModel.DataAnnotations;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
  4 +{
  5 + /// <summary>
  6 + /// 作废开单记录输入
  7 + /// </summary>
  8 + public class CancelBillingInput
  9 + {
  10 + /// <summary>
  11 + /// 开单记录ID
  12 + /// </summary>
  13 + [Required(ErrorMessage = "开单记录ID不能为空")]
  14 + [Display(Name = "开单记录ID", Description = "需要作废的开单记录ID")]
  15 + public string Id { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 作废备注
  19 + /// </summary>
  20 + [Display(Name = "作废备注", Description = "作废开单记录的原因说明")]
  21 + public string Remarks { get; set; }
  22 + }
  23 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/DebtPaymentQueryInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +using NCC.Common.Filter;
  4 +
  5 +namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
  6 +{
  7 + /// <summary>
  8 + /// 补缴欠款记录查询输入
  9 + /// </summary>
  10 + public class DebtPaymentQueryInput : PageInputBase
  11 + {
  12 + /// <summary>
  13 + /// 开单记录ID
  14 + /// </summary>
  15 + [Display(Name = "开单记录ID", Description = "开单记录ID")]
  16 + public string BillingId { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 付款日期开始
  20 + /// </summary>
  21 + [Display(Name = "付款日期开始", Description = "付款日期范围开始")]
  22 + public DateTime? PaymentDateStart { get; set; }
  23 +
  24 + /// <summary>
  25 + /// 付款日期结束
  26 + /// </summary>
  27 + [Display(Name = "付款日期结束", Description = "付款日期范围结束")]
  28 + public DateTime? PaymentDateEnd { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 收款人员
  32 + /// </summary>
  33 + [Display(Name = "收款人员", Description = "收款人员")]
  34 + public string PaymentUser { get; set; }
  35 + }
  36 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/DebtPaymentRecordOutput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
  5 +{
  6 + /// <summary>
  7 + /// 补缴欠款记录输出
  8 + /// </summary>
  9 + public class DebtPaymentRecordOutput
  10 + {
  11 + /// <summary>
  12 + /// 补缴记录ID
  13 + /// </summary>
  14 + [Display(Name = "补缴记录ID", Description = "补缴欠款记录的唯一标识")]
  15 + public string Id { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 开单记录ID
  19 + /// </summary>
  20 + [Display(Name = "开单记录ID", Description = "关联的开单记录ID")]
  21 + public string BillingId { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 补缴金额
  25 + /// </summary>
  26 + [Display(Name = "补缴金额", Description = "客户补缴的欠款金额")]
  27 + public decimal PaymentAmount { get; set; }
  28 +
  29 + /// <summary>
  30 + /// 付款方式
  31 + /// </summary>
  32 + [Display(Name = "付款方式", Description = "客户付款的方式")]
  33 + public string PaymentMethod { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 付款日期
  37 + /// </summary>
  38 + [Display(Name = "付款日期", Description = "客户实际付款的日期")]
  39 + public DateTime PaymentDate { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 收款人员
  43 + /// </summary>
  44 + [Display(Name = "收款人员", Description = "负责收款的工作人员")]
  45 + public string PaymentUser { get; set; }
  46 +
  47 + /// <summary>
  48 + /// 备注
  49 + /// </summary>
  50 + [Display(Name = "备注", Description = "补缴欠款的备注信息")]
  51 + public string Remarks { get; set; }
  52 +
  53 + /// <summary>
  54 + /// 创建时间
  55 + /// </summary>
  56 + [Display(Name = "创建时间", Description = "补缴记录的创建时间")]
  57 + public DateTime CreateTime { get; set; }
  58 + }
  59 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbCrInput.cs
... ... @@ -146,6 +146,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
146 146 public string F_FIleUrl { get; set; }
147 147  
148 148 /// <summary>
  149 + /// 营销活动ID
  150 + /// </summary>
  151 + public string activityId { get; set; }
  152 +
  153 + /// <summary>
149 154 /// 作废关联id
150 155 /// </summary>
151 156 public string cancelRefId { get; set; }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbInfoOutput.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 {
... ... @@ -151,6 +152,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
151 152 public string F_FIleUrl { get; set; }
152 153  
153 154 /// <summary>
  155 + /// 是否有效
  156 + /// </summary>
  157 + public int IsEffective { get; set; }
  158 +
  159 + /// <summary>
154 160 /// 健康师业绩
155 161 /// </summary>
156 162 public List<LqKdJksyjInfoOutput> lqKdJksyjList { get; set; }
... ... @@ -165,5 +171,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
165 171 /// </summary>
166 172 public List<LqKdPxmxInfoOutput> lqKdPxmxList { get; set; }
167 173  
  174 +
  175 + /// <summary>
  176 + /// 扣款信息列表
  177 + /// </summary>
  178 + public List<LqKdDeductinfoInfoOutput> lqKdDeductList { get; set; }
  179 +
168 180 }
169 181 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbListOutput.cs
... ... @@ -141,5 +141,15 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
141 141 /// 是否有效
142 142 /// </summary>
143 143 public int IsEffective { get; set; }
  144 +
  145 + /// <summary>
  146 + /// 开单用户
  147 + /// </summary>
  148 + public string CreateUser { get; set; }
  149 +
  150 + /// <summary>
  151 + /// 开单用户名称
  152 + /// </summary>
  153 + public string CreateUserName { get; set; }
144 154 }
145 155 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbListQueryInput.cs
... ... @@ -23,126 +23,131 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
23 23 /// 开单编号
24 24 /// </summary>
25 25 public string id { get; set; }
26   -
  26 +
27 27 /// <summary>
28 28 /// 单据门店
29 29 /// </summary>
30 30 public string djmd { get; set; }
31   -
  31 +
32 32 /// <summary>
33 33 /// 金三角
34 34 /// </summary>
35 35 public string jsj { get; set; }
36   -
  36 +
37 37 /// <summary>
38 38 /// 开单日期
39 39 /// </summary>
40 40 public string kdrq { get; set; }
41   -
  41 +
42 42 /// <summary>
43 43 /// 顾客类型
44 44 /// </summary>
45 45 public string gjlx { get; set; }
46   -
  46 +
47 47 /// <summary>
48 48 /// 合作机构
49 49 /// </summary>
50 50 public string hgjg { get; set; }
51   -
  51 +
52 52 /// <summary>
53 53 /// 整单业绩
54 54 /// </summary>
55 55 public string zdyj { get; set; }
56   -
  56 +
57 57 /// <summary>
58 58 /// 实付业绩
59 59 /// </summary>
60 60 public string sfyj { get; set; }
61   -
  61 +
62 62 /// <summary>
63 63 /// 欠款
64 64 /// </summary>
65 65 public string qk { get; set; }
66   -
  66 +
67 67 /// <summary>
68 68 /// 储扣方式
69 69 /// </summary>
70 70 public string ckfs { get; set; }
71   -
  71 +
72 72 /// <summary>
73 73 /// 付款方式
74 74 /// </summary>
75 75 public string fkfs { get; set; }
76   -
  76 +
77 77 /// <summary>
78 78 /// 付款医院
79 79 /// </summary>
80 80 public string fkyy { get; set; }
81   -
  81 +
82 82 /// <summary>
83 83 /// 付款判断
84 84 /// </summary>
85 85 public string fkpd { get; set; }
86   -
  86 +
87 87 /// <summary>
88 88 /// 客户来源
89 89 /// </summary>
90 90 public string khly { get; set; }
91   -
  91 +
92 92 /// <summary>
93 93 /// 推荐人
94 94 /// </summary>
95 95 public string tjr { get; set; }
96   -
  96 +
97 97 /// <summary>
98 98 /// 是否首开订单
99 99 /// </summary>
100 100 public string sfskdd { get; set; }
101   -
  101 +
102 102 /// <summary>
103 103 /// 简介
104 104 /// </summary>
105 105 public string jj { get; set; }
106   -
  106 +
107 107 /// <summary>
108 108 /// 备注
109 109 /// </summary>
110 110 public string bz { get; set; }
111   -
  111 +
112 112 /// <summary>
113 113 /// 开单会员
114 114 /// </summary>
115 115 public string kdhy { get; set; }
116   -
  116 +
117 117 /// <summary>
118 118 /// 开单会员名称
119 119 /// </summary>
120 120 public string kdhyc { get; set; }
121   -
  121 +
122 122 /// <summary>
123 123 /// 开单会员手机号
124 124 /// </summary>
125 125 public string kdhysjh { get; set; }
126   -
  126 +
127 127 /// <summary>
128 128 /// 健康师业绩
129 129 /// </summary>
130 130 public string jksyj { get; set; }
131   -
  131 +
132 132 /// <summary>
133 133 /// 科技部老师业绩
134 134 /// </summary>
135 135 public string kjblsyj { get; set; }
136   -
  136 +
137 137 /// <summary>
138 138 /// 品项信息
139 139 /// </summary>
140 140 public string pxxx { get; set; }
141   -
  141 +
142 142 /// <summary>
143 143 /// 方案其他
144 144 /// </summary>
145 145 public string F_FIleUrl { get; set; }
146   -
  146 +
  147 + /// <summary>
  148 + /// 开单用户
  149 + /// </summary>
  150 + public string CreateUser { get; set; }
  151 +
147 152 }
148 153 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbUpInput.cs
... ... @@ -12,6 +12,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
12 12 /// 开单编号
13 13 /// </summary>
14 14 public string id { get; set; }
15   -
  15 +
16 16 }
17 17 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/PayDebtInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
  5 +{
  6 + /// <summary>
  7 + /// 补缴欠款输入
  8 + /// </summary>
  9 + public class PayDebtInput
  10 + {
  11 + /// <summary>
  12 + /// 开单记录ID
  13 + /// </summary>
  14 + [Required(ErrorMessage = "开单记录ID不能为空")]
  15 + [Display(Name = "开单记录ID", Description = "需要补缴欠款的开单记录ID")]
  16 + public string BillingId { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 补缴金额
  20 + /// </summary>
  21 + [Required(ErrorMessage = "补缴金额不能为空")]
  22 + [Range(0.01, double.MaxValue, ErrorMessage = "补缴金额必须大于0")]
  23 + [Display(Name = "补缴金额", Description = "客户补缴的欠款金额")]
  24 + public decimal PaymentAmount { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 付款方式
  28 + /// </summary>
  29 + [Display(Name = "付款方式", Description = "客户付款的方式(现金、刷卡、转账等)")]
  30 + public string PaymentMethod { get; set; }
  31 +
  32 + /// <summary>
  33 + /// 付款日期
  34 + /// </summary>
  35 + [Display(Name = "付款日期", Description = "客户实际付款的日期")]
  36 + public DateTime? PaymentDate { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 收款人员
  40 + /// </summary>
  41 + [Display(Name = "收款人员", Description = "负责收款的工作人员")]
  42 + public string PaymentUser { get; set; }
  43 +
  44 + /// <summary>
  45 + /// 备注
  46 + /// </summary>
  47 + [Display(Name = "备注", Description = "补缴欠款的备注信息")]
  48 + public string Remarks { get; set; }
  49 + }
  50 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKjbsyj/LqKdKjbsyjInfoOutput.cs
... ... @@ -12,40 +12,45 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
12 12 /// 业绩编号
13 13 /// </summary>
14 14 public string id { get; set; }
15   -
  15 +
16 16 /// <summary>
17 17 /// 关联开单编号
18 18 /// </summary>
19 19 public string glkdbh { get; set; }
20   -
  20 +
21 21 /// <summary>
22 22 /// 关联开单品项ID
23 23 /// </summary>
24 24 public string kdpxid { get; set; }
25   -
  25 +
26 26 /// <summary>
27 27 /// 科技部老师ID
28 28 /// </summary>
29 29 public string kjbls { get; set; }
30   -
  30 +
31 31 /// <summary>
32 32 /// 科技部老师姓名
33 33 /// </summary>
34 34 public string kjblsxm { get; set; }
35   -
  35 +
36 36 /// <summary>
37 37 /// 科技部老师账号
38 38 /// </summary>
39 39 public string kjblszh { get; set; }
40   -
  40 +
41 41 /// <summary>
42 42 /// 科技部老师业绩
43 43 /// </summary>
44 44 public string kjblsyj { get; set; }
45   -
  45 +
46 46 /// <summary>
47 47 /// 业绩时间
48 48 /// </summary>
49 49 public DateTime? yjsj { get; set; }
  50 +
  51 + /// <summary>
  52 + /// 是否有效
  53 + /// </summary>
  54 + public int IsEffective { get; set; }
50 55 }
51 56 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxInfoOutput.cs
1 1 using System;
2 2 using System.Collections.Generic;
  3 +using NCC.Extend.Entitys.Dto.LqKdDeductinfo;
3 4  
4 5 namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
5 6 {
... ... @@ -75,6 +76,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
75 76 public string remark { get; set; }
76 77  
77 78 /// <summary>
  79 + /// 是否有效
  80 + /// </summary>
  81 + public int IsEffective { get; set; }
  82 +
  83 + /// <summary>
78 84 /// 健康师业绩列表
79 85 /// </summary>
80 86 public List<LqKdJksyjInfoOutput> lqKdJksyjList { get; set; }
... ... @@ -83,5 +89,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
83 89 /// 科技部老师业绩列表
84 90 /// </summary>
85 91 public List<LqKdKjbsyjInfoOutput> lqKdKjbsyjList { get; set; }
  92 +
86 93 }
87 94 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageInfo/LqPackageInfoCrInput.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.ComponentModel.DataAnnotations;
  4 +
  5 +namespace NCC.Extend.Entitys.Dto.LqPackageInfo
  6 +{
  7 + /// <summary>
  8 + /// 营销活动创建输入
  9 + /// </summary>
  10 + public class LqPackageInfoCrInput
  11 + {
  12 + /// <summary>
  13 + /// 活动名称
  14 + /// </summary>
  15 + [Required(ErrorMessage = "活动名称不能为空")]
  16 + [Display(Name = "活动名称", Description = "营销活动的名称")]
  17 + public string ActivityName { get; set; }
  18 +
  19 + /// <summary>
  20 + /// 活动描述
  21 + /// </summary>
  22 + [Display(Name = "活动描述", Description = "营销活动的详细描述")]
  23 + public string ActivityDesc { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 活动开始时间
  27 + /// </summary>
  28 + [Required(ErrorMessage = "活动开始时间不能为空")]
  29 + [Display(Name = "活动开始时间", Description = "营销活动的开始时间")]
  30 + public DateTime StartTime { get; set; }
  31 +
  32 + /// <summary>
  33 + /// 活动结束时间
  34 + /// </summary>
  35 + [Required(ErrorMessage = "活动结束时间不能为空")]
  36 + [Display(Name = "活动结束时间", Description = "营销活动的结束时间")]
  37 + public DateTime EndTime { get; set; }
  38 +
  39 + /// <summary>
  40 + /// 至少购买品项数量
  41 + /// </summary>
  42 + [Required(ErrorMessage = "至少购买品项数量不能为空")]
  43 + [Range(1, int.MaxValue, ErrorMessage = "至少购买品项数量必须大于0")]
  44 + [Display(Name = "至少购买品项数量", Description = "参与活动需要购买的最少品项数量")]
  45 + public int MinItemQuantity { get; set; } = 1;
  46 +
  47 + /// <summary>
  48 + /// 活动规则说明
  49 + /// </summary>
  50 + [Display(Name = "活动规则说明", Description = "营销活动的规则和说明")]
  51 + public string ActivityRules { get; set; }
  52 +
  53 + /// <summary>
  54 + /// 活动图片(JSON格式)
  55 + /// </summary>
  56 + [Display(Name = "活动图片", Description = "营销活动的图片,JSON格式存储")]
  57 + public string ActivityImages { get; set; }
  58 +
  59 + /// <summary>
  60 + /// 排序
  61 + /// </summary>
  62 + [Display(Name = "排序", Description = "营销活动的显示排序")]
  63 + public int SortOrder { get; set; } = 0;
  64 +
  65 + /// <summary>
  66 + /// 营销活动品项明细列表
  67 + /// </summary>
  68 + [Display(Name = "活动品项明细", Description = "营销活动包含的品项明细列表")]
  69 + public List<MarketingActivityItemDetailInput> ActivityItems { get; set; } = new List<MarketingActivityItemDetailInput>();
  70 + }
  71 +
  72 + /// <summary>
  73 + /// 营销活动品项明细输入
  74 + /// </summary>
  75 + public class MarketingActivityItemDetailInput
  76 + {
  77 + /// <summary>
  78 + /// 品项ID
  79 + /// </summary>
  80 + [Required(ErrorMessage = "品项ID不能为空")]
  81 + [Display(Name = "品项ID", Description = "品项的唯一标识")]
  82 + public string ItemId { get; set; }
  83 +
  84 + /// <summary>
  85 + /// 品项名称
  86 + /// </summary>
  87 + [Display(Name = "品项名称", Description = "品项的名称")]
  88 + public string ItemName { get; set; }
  89 +
  90 + /// <summary>
  91 + /// 品项分类
  92 + /// </summary>
  93 + [Display(Name = "品项分类", Description = "品项的分类")]
  94 + public string ItemCategory { get; set; }
  95 +
  96 + /// <summary>
  97 + /// 品项备注
  98 + /// </summary>
  99 + [Display(Name = "品项备注", Description = "品项的备注信息")]
  100 + public string ItemRemark { get; set; }
  101 + }
  102 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageInfo/LqPackageInfoInfoOutput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqPackageInfo
  5 +{
  6 + /// <summary>
  7 + /// 套餐信息详情输出
  8 + /// </summary>
  9 + public class LqPackageInfoInfoOutput
  10 + {
  11 + /// <summary>
  12 + /// 套餐ID
  13 + /// </summary>
  14 + public string Id { get; set; }
  15 +
  16 + /// <summary>
  17 + /// 套餐编码
  18 + /// </summary>
  19 + public string PackageCode { get; set; }
  20 +
  21 + /// <summary>
  22 + /// 套餐名称
  23 + /// </summary>
  24 + public string PackageName { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 套餐描述
  28 + /// </summary>
  29 + public string PackageDesc { get; set; }
  30 +
  31 + /// <summary>
  32 + /// 套餐价格
  33 + /// </summary>
  34 + public decimal PackagePrice { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 优惠价格
  38 + /// </summary>
  39 + public decimal? DiscountPrice { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 使用状态
  43 + /// </summary>
  44 + public string Status { get; set; }
  45 +
  46 + /// <summary>
  47 + /// 上架状态
  48 + /// </summary>
  49 + public string ShelfStatus { get; set; }
  50 +
  51 + /// <summary>
  52 + /// 套餐类型
  53 + /// </summary>
  54 + public string PackageType { get; set; }
  55 +
  56 + /// <summary>
  57 + /// 创建时间
  58 + /// </summary>
  59 + public DateTime CreateTime { get; set; }
  60 +
  61 + /// <summary>
  62 + /// 更新时间
  63 + /// </summary>
  64 + public DateTime UpdateTime { get; set; }
  65 +
  66 + /// <summary>
  67 + /// 创建人
  68 + /// </summary>
  69 + public string CreateUser { get; set; }
  70 +
  71 + /// <summary>
  72 + /// 更新人
  73 + /// </summary>
  74 + public string UpdateUser { get; set; }
  75 + }
  76 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageInfo/LqPackageInfoListOutput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqPackageInfo
  5 +{
  6 + /// <summary>
  7 + /// 营销活动列表输出
  8 + /// </summary>
  9 + public class LqPackageInfoListOutput
  10 + {
  11 + /// <summary>
  12 + /// 营销活动ID
  13 + /// </summary>
  14 + [Display(Name = "营销活动ID", Description = "营销活动的唯一标识")]
  15 + public string Id { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 活动名称
  19 + /// </summary>
  20 + [Display(Name = "活动名称", Description = "营销活动的名称")]
  21 + public string ActivityName { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 活动描述
  25 + /// </summary>
  26 + [Display(Name = "活动描述", Description = "营销活动的描述")]
  27 + public string ActivityDesc { get; set; }
  28 +
  29 + /// <summary>
  30 + /// 活动开始时间
  31 + /// </summary>
  32 + [Display(Name = "活动开始时间", Description = "营销活动的开始时间")]
  33 + public DateTime StartTime { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 活动结束时间
  37 + /// </summary>
  38 + [Display(Name = "活动结束时间", Description = "营销活动的结束时间")]
  39 + public DateTime EndTime { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 至少购买品项数量
  43 + /// </summary>
  44 + [Display(Name = "至少购买品项数量", Description = "参与活动需要购买的最少品项数量")]
  45 + public int MinItemQuantity { get; set; }
  46 +
  47 + /// <summary>
  48 + /// 活动规则说明
  49 + /// </summary>
  50 + [Display(Name = "活动规则说明", Description = "营销活动的规则说明")]
  51 + public string ActivityRules { get; set; }
  52 +
  53 + /// <summary>
  54 + /// 排序
  55 + /// </summary>
  56 + [Display(Name = "排序", Description = "营销活动的显示排序")]
  57 + public int SortOrder { get; set; }
  58 +
  59 + /// <summary>
  60 + /// 创建时间
  61 + /// </summary>
  62 + [Display(Name = "创建时间", Description = "营销活动的创建时间")]
  63 + public DateTime CreateTime { get; set; }
  64 + }
  65 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageInfo/LqPackageInfoListQueryInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +using NCC.Common.Filter;
  4 +
  5 +namespace NCC.Extend.Entitys.Dto.LqPackageInfo
  6 +{
  7 + /// <summary>
  8 + /// 营销活动列表查询输入
  9 + /// </summary>
  10 + public class LqPackageInfoListQueryInput : PageInputBase
  11 + {
  12 + /// <summary>
  13 + /// 活动名称
  14 + /// </summary>
  15 + [Display(Name = "活动名称", Description = "营销活动名称")]
  16 + public string ActivityName { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 活动描述
  20 + /// </summary>
  21 + [Display(Name = "活动描述", Description = "营销活动描述")]
  22 + public string ActivityDesc { get; set; }
  23 +
  24 + /// <summary>
  25 + /// 活动开始时间开始
  26 + /// </summary>
  27 + [Display(Name = "活动开始时间开始", Description = "活动开始时间范围开始")]
  28 + public DateTime? StartTimeStart { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 活动开始时间结束
  32 + /// </summary>
  33 + [Display(Name = "活动开始时间结束", Description = "活动开始时间范围结束")]
  34 + public DateTime? StartTimeEnd { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 活动结束时间开始
  38 + /// </summary>
  39 + [Display(Name = "活动结束时间开始", Description = "活动结束时间范围开始")]
  40 + public DateTime? EndTimeStart { get; set; }
  41 +
  42 + /// <summary>
  43 + /// 活动结束时间结束
  44 + /// </summary>
  45 + [Display(Name = "活动结束时间结束", Description = "活动结束时间范围结束")]
  46 + public DateTime? EndTimeEnd { get; set; }
  47 +
  48 + /// <summary>
  49 + /// 至少购买品项数量
  50 + /// </summary>
  51 + [Display(Name = "至少购买品项数量", Description = "至少购买品项数量")]
  52 + public int? MinItemQuantity { get; set; }
  53 +
  54 + /// <summary>
  55 + /// 创建时间开始
  56 + /// </summary>
  57 + [Display(Name = "创建时间开始", Description = "创建时间范围开始")]
  58 + public DateTime? CreateTimeStart { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 创建时间结束
  62 + /// </summary>
  63 + [Display(Name = "创建时间结束", Description = "创建时间范围结束")]
  64 + public DateTime? CreateTimeEnd { get; set; }
  65 + }
  66 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageInfo/LqPackageInfoUpInput.cs 0 → 100644
  1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.ComponentModel.DataAnnotations;
  4 +
  5 +namespace NCC.Extend.Entitys.Dto.LqPackageInfo
  6 +{
  7 + /// <summary>
  8 + /// 营销活动更新输入
  9 + /// </summary>
  10 + public class LqPackageInfoUpInput
  11 + {
  12 + /// <summary>
  13 + /// 营销活动ID
  14 + /// </summary>
  15 + [Required(ErrorMessage = "营销活动ID不能为空")]
  16 + [Display(Name = "营销活动ID", Description = "营销活动的唯一标识")]
  17 + public string Id { get; set; }
  18 +
  19 + /// <summary>
  20 + /// 活动名称
  21 + /// </summary>
  22 + [Required(ErrorMessage = "活动名称不能为空")]
  23 + [Display(Name = "活动名称", Description = "营销活动的名称")]
  24 + public string ActivityName { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 活动描述
  28 + /// </summary>
  29 + [Display(Name = "活动描述", Description = "营销活动的详细描述")]
  30 + public string ActivityDesc { get; set; }
  31 +
  32 + /// <summary>
  33 + /// 活动开始时间
  34 + /// </summary>
  35 + [Required(ErrorMessage = "活动开始时间不能为空")]
  36 + [Display(Name = "活动开始时间", Description = "营销活动的开始时间")]
  37 + public DateTime StartTime { get; set; }
  38 +
  39 + /// <summary>
  40 + /// 活动结束时间
  41 + /// </summary>
  42 + [Required(ErrorMessage = "活动结束时间不能为空")]
  43 + [Display(Name = "活动结束时间", Description = "营销活动的结束时间")]
  44 + public DateTime EndTime { get; set; }
  45 +
  46 + /// <summary>
  47 + /// 至少购买品项数量
  48 + /// </summary>
  49 + [Required(ErrorMessage = "至少购买品项数量不能为空")]
  50 + [Range(1, int.MaxValue, ErrorMessage = "至少购买品项数量必须大于0")]
  51 + [Display(Name = "至少购买品项数量", Description = "参与活动需要购买的最少品项数量")]
  52 + public int MinItemQuantity { get; set; } = 1;
  53 +
  54 + /// <summary>
  55 + /// 活动规则说明
  56 + /// </summary>
  57 + [Display(Name = "活动规则说明", Description = "营销活动的规则和说明")]
  58 + public string ActivityRules { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 活动图片(JSON格式)
  62 + /// </summary>
  63 + [Display(Name = "活动图片", Description = "营销活动的图片,JSON格式存储")]
  64 + public string ActivityImages { get; set; }
  65 +
  66 + /// <summary>
  67 + /// 排序
  68 + /// </summary>
  69 + [Display(Name = "排序", Description = "营销活动的显示排序")]
  70 + public int SortOrder { get; set; } = 0;
  71 +
  72 + /// <summary>
  73 + /// 营销活动品项明细列表
  74 + /// </summary>
  75 + [Display(Name = "活动品项明细", Description = "营销活动包含的品项明细列表")]
  76 + public List<MarketingActivityItemDetailInput> ActivityItems { get; set; } = new List<MarketingActivityItemDetailInput>();
  77 + }
  78 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageItemDetail/LqPackageItemDetailCrInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqPackageItemDetail
  5 +{
  6 + /// <summary>
  7 + /// 套餐品项明细创建输入
  8 + /// </summary>
  9 + public class LqPackageItemDetailCrInput
  10 + {
  11 + /// <summary>
  12 + /// 套餐ID
  13 + /// </summary>
  14 + [Required(ErrorMessage = "套餐ID不能为空")]
  15 + public string PackageId { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 品项ID
  19 + /// </summary>
  20 + [Required(ErrorMessage = "品项ID不能为空")]
  21 + public string ItemId { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 品项数量
  25 + /// </summary>
  26 + [Required(ErrorMessage = "品项数量不能为空")]
  27 + [Range(1, int.MaxValue, ErrorMessage = "品项数量必须大于0")]
  28 + public int ItemQuantity { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 品项金额
  32 + /// </summary>
  33 + [Required(ErrorMessage = "品项金额不能为空")]
  34 + [Range(0, double.MaxValue, ErrorMessage = "品项金额必须大于等于0")]
  35 + public decimal ItemAmount { get; set; }
  36 +
  37 + /// <summary>
  38 + /// 品项备注
  39 + /// </summary>
  40 + public string ItemRemark { get; set; }
  41 +
  42 + /// <summary>
  43 + /// 排序
  44 + /// </summary>
  45 + public int SortOrder { get; set; } = 0;
  46 + }
  47 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageItemDetail/LqPackageItemDetailInfoOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqPackageItemDetail
  4 +{
  5 + /// <summary>
  6 + /// 套餐品项明细详情输出
  7 + /// </summary>
  8 + public class LqPackageItemDetailInfoOutput
  9 + {
  10 + /// <summary>
  11 + /// 明细ID
  12 + /// </summary>
  13 + public string Id { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 套餐ID
  17 + /// </summary>
  18 + public string PackageId { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 品项ID
  22 + /// </summary>
  23 + public string ItemId { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 品项数量
  27 + /// </summary>
  28 + public int ItemQuantity { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 品项金额
  32 + /// </summary>
  33 + public decimal ItemAmount { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 品项备注
  37 + /// </summary>
  38 + public string ItemRemark { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 排序
  42 + /// </summary>
  43 + public int SortOrder { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 创建时间
  47 + /// </summary>
  48 + public DateTime CreateTime { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 更新时间
  52 + /// </summary>
  53 + public DateTime UpdateTime { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 是否有效
  57 + /// </summary>
  58 + public int IsEffective { get; set; }
  59 + }
  60 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaListQueryInput.cs renamed to netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageItemDetail/LqPackageItemDetailListOutput.cs
1   -using NCC.Common.Filter;
2   -using System.Collections.Generic;
  1 +using System;
3 2  
4   -namespace NCC.Extend.Entitys.Dto.LqYxhdfa
  3 +namespace NCC.Extend.Entitys.Dto.LqPackageItemDetail
5 4 {
6 5 /// <summary>
7   - /// 营销活动方案列表查询输入
  6 + /// 套餐品项明细列表输出
8 7 /// </summary>
9   - public class LqYxhdfaListQueryInput : PageInputBase
  8 + public class LqPackageItemDetailListOutput
10 9 {
11 10 /// <summary>
12   - /// 选择导出数据key
  11 + /// 明细ID
13 12 /// </summary>
14   - public string selectKey { get; set; }
  13 + public string Id { get; set; }
15 14  
16 15 /// <summary>
17   - ///
  16 + /// 套餐ID
18 17 /// </summary>
19   - public int dataType { get; set; }
20   -
  18 + public string PackageId { get; set; }
21 19  
22 20 /// <summary>
23   - /// 方案编号
  21 + /// 品项ID
24 22 /// </summary>
25   - public string id { get; set; }
26   -
  23 + public string ItemId { get; set; }
  24 +
27 25 /// <summary>
28   - /// 营销活动编号
  26 + /// 品项数量
29 27 /// </summary>
30   - public string yxhdbh { get; set; }
31   -
  28 + public int ItemQuantity { get; set; }
  29 +
32 30 /// <summary>
33   - /// 活动名称
  31 + /// 品项金额
34 32 /// </summary>
35   - public string hdmc { get; set; }
36   -
  33 + public decimal ItemAmount { get; set; }
  34 +
37 35 /// <summary>
38   - /// 张数奖
  36 + /// 排序
39 37 /// </summary>
40   - public string zsj { get; set; }
41   -
  38 + public int SortOrder { get; set; }
  39 +
42 40 /// <summary>
43   - /// 金额奖
  41 + /// 创建时间
44 42 /// </summary>
45   - public string jej { get; set; }
46   -
  43 + public DateTime CreateTime { get; set; }
47 44 }
48 45 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaInfoOutput.cs renamed to netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageItemDetail/LqPackageItemDetailListQueryInput.cs
1   -using System;
  1 +using System;
2 2  
3   -namespace NCC.Extend.Entitys.Dto.LqYxhdfa
  3 +namespace NCC.Extend.Entitys.Dto.LqPackageItemDetail
4 4 {
5 5 /// <summary>
6   - /// 营销活动方案输出参数
  6 + /// 套餐品项明细列表查询输入
7 7 /// </summary>
8   - public class LqYxhdfaInfoOutput
  8 + public class LqPackageItemDetailListQueryInput
9 9 {
10 10 /// <summary>
11   - /// 方案编号
  11 + /// 套餐ID
12 12 /// </summary>
13   - public string id { get; set; }
  13 + public string PackageId { get; set; }
14 14  
15 15 /// <summary>
16   - /// 营销活动编号
  16 + /// 品项ID
17 17 /// </summary>
18   - public string yxhdbh { get; set; }
  18 + public string ItemId { get; set; }
19 19  
20 20 /// <summary>
21   - /// 活动名称
  21 + /// 是否有效
22 22 /// </summary>
23   - public string hdmc { get; set; }
  23 + public int? IsEffective { get; set; }
24 24  
25 25 /// <summary>
26   - /// 张数奖
  26 + /// 创建时间开始
27 27 /// </summary>
28   - public string zsj { get; set; }
  28 + public DateTime? CreateTimeStart { get; set; }
29 29  
30 30 /// <summary>
31   - /// 金额奖
  31 + /// 创建时间结束
32 32 /// </summary>
33   - public string jej { get; set; }
  33 + public DateTime? CreateTimeEnd { get; set; }
34 34 }
35 35 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPackageItemDetail/LqPackageItemDetailUpInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqPackageItemDetail
  5 +{
  6 + /// <summary>
  7 + /// 套餐品项明细更新输入
  8 + /// </summary>
  9 + public class LqPackageItemDetailUpInput
  10 + {
  11 + /// <summary>
  12 + /// 明细ID
  13 + /// </summary>
  14 + [Required(ErrorMessage = "明细ID不能为空")]
  15 + public string Id { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 套餐ID
  19 + /// </summary>
  20 + [Required(ErrorMessage = "套餐ID不能为空")]
  21 + public string PackageId { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 品项ID
  25 + /// </summary>
  26 + [Required(ErrorMessage = "品项ID不能为空")]
  27 + public string ItemId { get; set; }
  28 +
  29 + /// <summary>
  30 + /// 品项数量
  31 + /// </summary>
  32 + [Required(ErrorMessage = "品项数量不能为空")]
  33 + [Range(1, int.MaxValue, ErrorMessage = "品项数量必须大于0")]
  34 + public int ItemQuantity { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 品项金额
  38 + /// </summary>
  39 + [Required(ErrorMessage = "品项金额不能为空")]
  40 + [Range(0, double.MaxValue, ErrorMessage = "品项金额必须大于等于0")]
  41 + public decimal ItemAmount { get; set; }
  42 +
  43 + /// <summary>
  44 + /// 品项备注
  45 + /// </summary>
  46 + public string ItemRemark { get; set; }
  47 +
  48 + /// <summary>
  49 + /// 排序
  50 + /// </summary>
  51 + public int SortOrder { get; set; }
  52 + }
  53 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqSkzh/LqSkzhListQueryInput.cs
... ... @@ -23,16 +23,16 @@ namespace NCC.Extend.Entitys.Dto.LqSkzh
23 23 /// 收款途径编号
24 24 /// </summary>
25 25 public string id { get; set; }
26   -
  26 +
27 27 /// <summary>
28 28 /// 收款途径
29 29 /// </summary>
30 30 public string sktj { get; set; }
31   -
  31 +
32 32 /// <summary>
33 33 /// 收款账号
34 34 /// </summary>
35 35 public string skzh { get; set; }
36   -
  36 +
37 37 }
38 38 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkListOutput.cs
... ... @@ -11,66 +11,71 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk
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 md { get; set; }
19   -
  19 +
20 20 /// <summary>
21 21 /// 门店编号
22 22 /// </summary>
23 23 public string mdbh { get; set; }
24   -
  24 +
25 25 /// <summary>
26 26 /// 门店名称
27 27 /// </summary>
28 28 public string mdmc { get; set; }
29   -
  29 +
30 30 /// <summary>
31 31 /// 会员
32 32 /// </summary>
33 33 public string hy { get; set; }
34   -
  34 +
35 35 /// <summary>
36 36 /// 会员账号
37 37 /// </summary>
38 38 public string hyzh { get; set; }
39   -
  39 +
  40 + /// <summary>
  41 + /// 会员手机号
  42 + /// </summary>
  43 + public string memberPhone { get; set; }
  44 +
40 45 /// <summary>
41 46 /// 会员名称
42 47 /// </summary>
43 48 public string hymc { get; set; }
44   -
  49 +
45 50 /// <summary>
46 51 /// 顾客类型
47 52 /// </summary>
48 53 public string gklx { get; set; }
49   -
  54 +
50 55 /// <summary>
51 56 /// 消费金额
52 57 /// </summary>
53 58 public string xfje { get; set; }
54   -
  59 +
55 60 /// <summary>
56 61 /// 手工费用
57 62 /// </summary>
58 63 public string sgfy { get; set; }
59   -
  64 +
60 65 /// <summary>
61 66 /// 是否有科技部
62 67 /// </summary>
63 68 public string sfykjb { get; set; }
64   -
  69 +
65 70 /// <summary>
66 71 /// 耗卡时间
67 72 /// </summary>
68 73 public DateTime? hksj { get; set; }
69   -
  74 +
70 75 /// <summary>
71 76 /// 操作人员
72 77 /// </summary>
73 78 public string czry { get; set; }
74   -
  79 +
75 80 }
76 81 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaCrInput.cs deleted
1   -using System;
2   -using System.ComponentModel.DataAnnotations;
3   -
4   -namespace NCC.Extend.Entitys.Dto.LqYxhdfa
5   -{
6   - /// <summary>
7   - /// 营销活动方案创建输入参数
8   - /// </summary>
9   - public class LqYxhdfaCrInput
10   - {
11   - /// <summary>
12   - /// 方案编号
13   - /// </summary>
14   - public string id { get; set; }
15   -
16   - /// <summary>
17   - /// 营销活动编号
18   - /// </summary>
19   - [Required(ErrorMessage = "营销活动编号不能为空")]
20   - public string yxhdbh { get; set; }
21   -
22   - /// <summary>
23   - /// 活动名称
24   - /// </summary>
25   - [Required(ErrorMessage = "活动名称不能为空")]
26   - [StringLength(200, ErrorMessage = "活动名称长度不能超过200个字符")]
27   - public string hdmc { get; set; }
28   -
29   - /// <summary>
30   - /// 张数奖
31   - /// </summary>
32   - public string zsj { get; set; }
33   -
34   - /// <summary>
35   - /// 金额奖
36   - /// </summary>
37   - public string jej { get; set; }
38   - }
39   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaListOutput.cs deleted
1   -using System;
2   -
3   -namespace NCC.Extend.Entitys.Dto.LqYxhdfa
4   -{
5   - /// <summary>
6   - /// 营销活动方案输入参数
7   - /// </summary>
8   - public class LqYxhdfaListOutput
9   - {
10   - /// <summary>
11   - /// 方案编号
12   - /// </summary>
13   - public string id { get; set; }
14   -
15   - /// <summary>
16   - /// 营销活动编号
17   - /// </summary>
18   - public string yxhdbh { get; set; }
19   -
20   - /// <summary>
21   - /// 活动名称
22   - /// </summary>
23   - public string hdmc { get; set; }
24   -
25   - /// <summary>
26   - /// 张数奖
27   - /// </summary>
28   - public string zsj { get; set; }
29   -
30   - /// <summary>
31   - /// 金额奖
32   - /// </summary>
33   - public string jej { get; set; }
34   -
35   - }
36   -}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/README.md
... ... @@ -65,7 +65,7 @@
65 65 - `lq_tkjlb/` - 拓客记录表
66 66 - (已删除) `lq_tk_xsc/` - 拓客记录表
67 67 - `lq_yaoyjl/` - 邀约记录
68   -- `lq_yxhdfa/` - 营销活动方案
  68 +- (已删除) `lq_yxhdfa/` - 营销活动方案
69 69 - `lq_yyjl/` - 预约记录
70 70 - `lq_cpxx/` - 产品资料
71 71 - `lq_gz/` - 工资全字段
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_hytk/LqHytkHytkEntity.cs
1 1 using NCC.Common.Const;
  2 +using NCC.Extend.Entitys.Enum;
2 3 using SqlSugar;
3 4 using System;
4 5  
... ... @@ -16,127 +17,133 @@ namespace NCC.Extend.Entitys.lq_hytk_hytk
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 /// 门店
22 23 /// </summary>
23   - [SugarColumn(ColumnName = "md")]
  24 + [SugarColumn(ColumnName = "md")]
24 25 public string Md { get; set; }
25   -
  26 +
26 27 /// <summary>
27 28 /// 门店编号
28 29 /// </summary>
29   - [SugarColumn(ColumnName = "mdbh")]
  30 + [SugarColumn(ColumnName = "mdbh")]
30 31 public string Mdbh { get; set; }
31   -
  32 +
32 33 /// <summary>
33 34 /// 门店名称
34 35 /// </summary>
35   - [SugarColumn(ColumnName = "mdmc")]
  36 + [SugarColumn(ColumnName = "mdmc")]
36 37 public string Mdmc { get; set; }
37   -
  38 +
38 39 /// <summary>
39 40 /// 会员
40 41 /// </summary>
41   - [SugarColumn(ColumnName = "hy")]
  42 + [SugarColumn(ColumnName = "hy")]
42 43 public string Hy { get; set; }
43   -
  44 +
44 45 /// <summary>
45 46 /// 会员姓名
46 47 /// </summary>
47   - [SugarColumn(ColumnName = "hymc")]
  48 + [SugarColumn(ColumnName = "hymc")]
48 49 public string Hymc { get; set; }
49   -
  50 +
50 51 /// <summary>
51 52 /// 会员账号
52 53 /// </summary>
53   - [SugarColumn(ColumnName = "hyzh")]
  54 + [SugarColumn(ColumnName = "hyzh")]
54 55 public string Hyzh { get; set; }
55   -
  56 +
56 57 /// <summary>
57 58 /// 顾客类型
58 59 /// </summary>
59   - [SugarColumn(ColumnName = "gklx")]
  60 + [SugarColumn(ColumnName = "gklx")]
60 61 public string Gklx { get; set; }
61   -
  62 +
62 63 /// <summary>
63 64 /// 退卡总金额
64 65 /// </summary>
65   - [SugarColumn(ColumnName = "tkje")]
  66 + [SugarColumn(ColumnName = "tkje")]
66 67 public decimal? Tkje { get; set; }
67   -
  68 +
68 69 /// <summary>
69 70 /// 手工费用
70 71 /// </summary>
71   - [SugarColumn(ColumnName = "sgfy")]
  72 + [SugarColumn(ColumnName = "sgfy")]
72 73 public decimal? Sgfy { get; set; }
73   -
  74 +
74 75 /// <summary>
75 76 /// 备注
76 77 /// </summary>
77   - [SugarColumn(ColumnName = "bz")]
  78 + [SugarColumn(ColumnName = "bz")]
78 79 public string Bz { get; set; }
79   -
  80 +
80 81 /// <summary>
81 82 /// 退卡时间
82 83 /// </summary>
83   - [SugarColumn(ColumnName = "tksj")]
  84 + [SugarColumn(ColumnName = "tksj")]
84 85 public DateTime? Tksj { get; set; }
85   -
  86 +
86 87 /// <summary>
87 88 /// 操作人员
88 89 /// </summary>
89   - [SugarColumn(ColumnName = "czry")]
  90 + [SugarColumn(ColumnName = "czry")]
90 91 public string Czry { get; set; }
91   -
  92 +
92 93 /// <summary>
93 94 /// 退卡状态
94 95 /// </summary>
95   - [SugarColumn(ColumnName = "tkzt")]
  96 + [SugarColumn(ColumnName = "tkzt")]
96 97 public string Tkzt { get; set; }
97   -
  98 +
98 99 /// <summary>
99 100 /// 退卡原因
100 101 /// </summary>
101   - [SugarColumn(ColumnName = "tkyy")]
  102 + [SugarColumn(ColumnName = "tkyy")]
102 103 public string Tkyy { get; set; }
103 104  
104 105  
105 106 /// <summary>
106 107 /// 退卡附件
107 108 /// </summary>
108   - [SugarColumn(ColumnName = "F_FileUrl")]
  109 + [SugarColumn(ColumnName = "F_FileUrl")]
109 110 public string FileUrl { get; set; }
110   -
  111 +
111 112 /// <summary>
112 113 /// 创建时间
113 114 /// </summary>
114   - [SugarColumn(ColumnName = "F_CreateTime")]
  115 + [SugarColumn(ColumnName = "F_CreateTime")]
115 116 public DateTime? F_CreateTime { get; set; }
116   -
  117 +
117 118 /// <summary>
118 119 /// 创建用户
119 120 /// </summary>
120   - [SugarColumn(ColumnName = "F_CreateUser")]
  121 + [SugarColumn(ColumnName = "F_CreateUser")]
121 122 public string F_CreateUser { get; set; }
122   -
  123 +
123 124 /// <summary>
124 125 /// 修改时间
125 126 /// </summary>
126   - [SugarColumn(ColumnName = "F_ModifyTime")]
  127 + [SugarColumn(ColumnName = "F_ModifyTime")]
127 128 public DateTime? F_ModifyTime { get; set; }
128   -
  129 +
129 130 /// <summary>
130 131 /// 修改用户
131 132 /// </summary>
132   - [SugarColumn(ColumnName = "F_ModifyUser")]
  133 + [SugarColumn(ColumnName = "F_ModifyUser")]
133 134 public string F_ModifyUser { get; set; }
134   -
  135 +
135 136 /// <summary>
136 137 /// 删除标记
137 138 /// </summary>
138   - [SugarColumn(ColumnName = "F_DeleteMark")]
  139 + [SugarColumn(ColumnName = "F_DeleteMark")]
139 140 public int? F_DeleteMark { get; set; }
140   -
  141 +
  142 + /// <summary>
  143 + /// 是否有效
  144 + /// </summary>
  145 + [SugarColumn(ColumnName = "F_IsEffective")]
  146 + public int IsEffective { get; set; } = StatusEnum.有效.GetHashCode();
  147 +
141 148 }
142 149 }
143 150 \ No newline at end of file
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs
1 1 using System;
2 2 using NCC.Common.Const;
  3 +using NCC.Extend.Entitys.Enum;
3 4 using SqlSugar;
4 5  
5 6 namespace NCC.Extend.Entitys.lq_hytk_jksyj
... ... @@ -112,5 +113,11 @@ namespace NCC.Extend.Entitys.lq_hytk_jksyj
112 113 /// </summary>
113 114 [SugarColumn(ColumnName = "F_CardReturn")]
114 115 public string CardReturn { get; set; }
  116 +
  117 + /// <summary>
  118 + /// 是否有效
  119 + /// </summary>
  120 + [SugarColumn(ColumnName = "F_IsEffective")]
  121 + public int IsEffective { get; set; } = StatusEnum.有效.GetHashCode();
115 122 }
116 123 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_kjbsyj/LqHytkKjbsyjEntity.cs
1 1 using System;
2 2 using NCC.Common.Const;
  3 +using NCC.Extend.Entitys.Enum;
3 4 using SqlSugar;
4 5  
5 6 namespace NCC.Extend.Entitys.lq_hytk_kjbsyj
... ... @@ -106,5 +107,11 @@ namespace NCC.Extend.Entitys.lq_hytk_kjbsyj
106 107 /// </summary>
107 108 [SugarColumn(ColumnName = "F_CardReturn")]
108 109 public string CardReturn { get; set; }
  110 +
  111 + /// <summary>
  112 + /// 是否有效
  113 + /// </summary>
  114 + [SugarColumn(ColumnName = "F_IsEffective")]
  115 + public int IsEffective { get; set; } = StatusEnum.有效.GetHashCode();
109 116 }
110 117 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_mx/LqHytkMxEntity.cs
... ... @@ -114,5 +114,11 @@ namespace NCC.Extend.Entitys.lq_hytk_mx
114 114 /// </summary>
115 115 [SugarColumn(ColumnName = "F_DeleteMark")]
116 116 public int? DeleteMark { get; set; }
  117 +
  118 + /// <summary>
  119 + /// 是否有效
  120 + /// </summary>
  121 + [SugarColumn(ColumnName = "F_IsEffective")]
  122 + public int IsEffective { get; set; } = StatusEnum.有效.GetHashCode();
117 123 }
118 124 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs
... ... @@ -70,5 +70,11 @@ namespace NCC.Extend.Entitys.lq_kd_jksyj
70 70 /// </summary>
71 71 [SugarColumn(ColumnName = "F_IsEffective")]
72 72 public int IsEffective { get; set; } = 1;
  73 +
  74 + /// <summary>
  75 + /// 营销活动ID
  76 + /// </summary>
  77 + [SugarColumn(ColumnName = "F_ActivityId")]
  78 + public string ActivityId { get; set; }
73 79 }
74 80 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs
... ... @@ -217,5 +217,17 @@ namespace NCC.Extend.Entitys.lq_kd_kdjlb
217 217 [SugarColumn(ColumnName = "F_CancelRefRemarks")]
218 218 public string CancelRefRemarks { get; set; }
219 219  
  220 +
  221 + /// <summary>
  222 + /// 营销活动ID
  223 + /// </summary>
  224 + [SugarColumn(ColumnName = "F_ActivityId")]
  225 + public string ActivityId { get; set; }
  226 +
  227 + /// <summary>
  228 + /// 已缴欠款
  229 + /// </summary>
  230 + [SugarColumn(ColumnName = "F_PaidDebt")]
  231 + public decimal PaidDebt { get; set; }
220 232 }
221 233 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kjbsyj/LqKdKjbsyjEntity.cs
... ... @@ -70,5 +70,11 @@ namespace NCC.Extend.Entitys.lq_kd_kjbsyj
70 70 /// </summary>
71 71 [SugarColumn(ColumnName = "F_IsEffective")]
72 72 public int IsEffective { get; set; } = 1;
  73 +
  74 + /// <summary>
  75 + /// 营销活动ID
  76 + /// </summary>
  77 + [SugarColumn(ColumnName = "F_ActivityId")]
  78 + public string ActivityId { get; set; }
73 79 }
74 80 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_pxmx/LqKdPxmxEntity.cs
... ... @@ -101,5 +101,11 @@ namespace NCC.Extend.Entitys.lq_kd_pxmx
101 101 /// </summary>
102 102 [SugarColumn(ColumnName = "F_Remark")]
103 103 public string Remark { get; set; }
  104 +
  105 + /// <summary>
  106 + /// 营销活动ID
  107 + /// </summary>
  108 + [SugarColumn(ColumnName = "F_ActivityId")]
  109 + public string ActivityId { get; set; }
104 110 }
105 111 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_qkbj/LqKdQkbjEntity.cs
1   -using System;
2 1 using NCC.Common.Const;
3 2 using SqlSugar;
  3 +using System;
4 4  
5 5 namespace NCC.Extend.Entitys.lq_kd_qkbj
6 6 {
... ... @@ -12,13 +12,13 @@ namespace NCC.Extend.Entitys.lq_kd_qkbj
12 12 public class LqKdQkbjEntity
13 13 {
14 14 /// <summary>
15   - /// 主键
  15 + /// 补缴记录ID
16 16 /// </summary>
17 17 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18 18 public string Id { get; set; }
19 19  
20 20 /// <summary>
21   - /// 开单ID
  21 + /// 开单记录ID
22 22 /// </summary>
23 23 [SugarColumn(ColumnName = "F_BillingId")]
24 24 public string BillingId { get; set; }
... ... @@ -30,40 +30,28 @@ namespace NCC.Extend.Entitys.lq_kd_qkbj
30 30 public decimal PaymentAmount { get; set; }
31 31  
32 32 /// <summary>
33   - /// 补缴方式
  33 + /// 付款方式
34 34 /// </summary>
35 35 [SugarColumn(ColumnName = "F_PaymentMethod")]
36 36 public string PaymentMethod { get; set; }
37 37  
38 38 /// <summary>
39   - /// 补缴时间
  39 + /// 付款日期
40 40 /// </summary>
41   - [SugarColumn(ColumnName = "F_PaymentTime")]
42   - public DateTime PaymentTime { get; set; }
  41 + [SugarColumn(ColumnName = "F_PaymentDate")]
  42 + public DateTime PaymentDate { get; set; }
43 43  
44 44 /// <summary>
45   - /// 补缴操作人
  45 + /// 收款人员
46 46 /// </summary>
47 47 [SugarColumn(ColumnName = "F_PaymentUser")]
48 48 public string PaymentUser { get; set; }
49 49  
50 50 /// <summary>
51   - /// 补缴账户
52   - /// </summary>
53   - [SugarColumn(ColumnName = "F_PaymentAccount")]
54   - public string PaymentAccount { get; set; }
55   -
56   - /// <summary>
57   - /// 补缴凭证号
58   - /// </summary>
59   - [SugarColumn(ColumnName = "F_PaymentReference")]
60   - public string PaymentReference { get; set; }
61   -
62   - /// <summary>
63   - /// 补缴备注
  51 + /// 备注
64 52 /// </summary>
65   - [SugarColumn(ColumnName = "F_Remark")]
66   - public string Remark { get; set; }
  53 + [SugarColumn(ColumnName = "F_Remarks")]
  54 + public string Remarks { get; set; }
67 55  
68 56 /// <summary>
69 57 /// 创建时间
... ... @@ -83,4 +71,4 @@ namespace NCC.Extend.Entitys.lq_kd_qkbj
83 71 [SugarColumn(ColumnName = "F_IsEffective")]
84 72 public int IsEffective { get; set; } = 1;
85 73 }
86 74 -}
  75 +}
87 76 \ No newline at end of file
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_package_info/LqPackageInfoEntity.cs 0 → 100644
  1 +using NCC.Common.Const;
  2 +using SqlSugar;
  3 +using System;
  4 +
  5 +namespace NCC.Extend.Entitys.lq_package_info
  6 +{
  7 + /// <summary>
  8 + /// 营销活动表
  9 + /// </summary>
  10 + [SugarTable("lq_marketing_activity")]
  11 + [Tenant(ClaimConst.TENANT_ID)]
  12 + public class LqPackageInfoEntity
  13 + {
  14 + /// <summary>
  15 + /// 营销活动ID
  16 + /// </summary>
  17 + [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
  18 + public string Id { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 活动名称
  22 + /// </summary>
  23 + [SugarColumn(ColumnName = "F_ActivityName")]
  24 + public string ActivityName { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 活动描述
  28 + /// </summary>
  29 + [SugarColumn(ColumnName = "F_ActivityDesc")]
  30 + public string ActivityDesc { get; set; }
  31 +
  32 + /// <summary>
  33 + /// 活动开始时间
  34 + /// </summary>
  35 + [SugarColumn(ColumnName = "F_StartTime")]
  36 + public DateTime StartTime { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 活动结束时间
  40 + /// </summary>
  41 + [SugarColumn(ColumnName = "F_EndTime")]
  42 + public DateTime EndTime { get; set; }
  43 +
  44 + /// <summary>
  45 + /// 至少购买品项数量
  46 + /// </summary>
  47 + [SugarColumn(ColumnName = "F_MinItemQuantity")]
  48 + public int MinItemQuantity { get; set; } = 1;
  49 +
  50 + /// <summary>
  51 + /// 活动规则说明
  52 + /// </summary>
  53 + [SugarColumn(ColumnName = "F_ActivityRules")]
  54 + public string ActivityRules { get; set; }
  55 +
  56 + /// <summary>
  57 + /// 活动图片(JSON格式)
  58 + /// </summary>
  59 + [SugarColumn(ColumnName = "F_ActivityImages")]
  60 + public string ActivityImages { get; set; }
  61 +
  62 + /// <summary>
  63 + /// 排序
  64 + /// </summary>
  65 + [SugarColumn(ColumnName = "F_SortOrder")]
  66 + public int SortOrder { get; set; } = 0;
  67 +
  68 + /// <summary>
  69 + /// 创建时间
  70 + /// </summary>
  71 + [SugarColumn(ColumnName = "F_CreateTime")]
  72 + public DateTime CreateTime { get; set; }
  73 +
  74 + /// <summary>
  75 + /// 更新时间
  76 + /// </summary>
  77 + [SugarColumn(ColumnName = "F_UpdateTime")]
  78 + public DateTime UpdateTime { get; set; }
  79 +
  80 + /// <summary>
  81 + /// 创建人
  82 + /// </summary>
  83 + [SugarColumn(ColumnName = "F_CreateUser")]
  84 + public string CreateUser { get; set; }
  85 +
  86 + /// <summary>
  87 + /// 更新人
  88 + /// </summary>
  89 + [SugarColumn(ColumnName = "F_UpdateUser")]
  90 + public string UpdateUser { get; set; }
  91 +
  92 + /// <summary>
  93 + /// 是否有效
  94 + /// </summary>
  95 + [SugarColumn(ColumnName = "F_IsEffective")]
  96 + public int IsEffective { get; set; } = 1;
  97 + }
  98 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_package_item_detail/LqPackageItemDetailEntity.cs 0 → 100644
  1 +using NCC.Common.Const;
  2 +using SqlSugar;
  3 +using System;
  4 +
  5 +namespace NCC.Extend.Entitys.lq_package_item_detail
  6 +{
  7 + /// <summary>
  8 + /// 营销活动品项明细表
  9 + /// </summary>
  10 + [SugarTable("lq_marketing_activity_item_detail")]
  11 + [Tenant(ClaimConst.TENANT_ID)]
  12 + public class LqPackageItemDetailEntity
  13 + {
  14 + /// <summary>
  15 + /// 明细ID
  16 + /// </summary>
  17 + [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
  18 + public string Id { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 营销活动ID
  22 + /// </summary>
  23 + [SugarColumn(ColumnName = "F_ActivityId")]
  24 + public string ActivityId { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 品项ID
  28 + /// </summary>
  29 + [SugarColumn(ColumnName = "F_ItemId")]
  30 + public string ItemId { get; set; }
  31 +
  32 + /// <summary>
  33 + /// 品项名称
  34 + /// </summary>
  35 + [SugarColumn(ColumnName = "F_ItemName")]
  36 + public string ItemName { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 品项分类
  40 + /// </summary>
  41 + [SugarColumn(ColumnName = "F_ItemCategory")]
  42 + public string ItemCategory { get; set; }
  43 +
  44 + /// <summary>
  45 + /// 品项备注
  46 + /// </summary>
  47 + [SugarColumn(ColumnName = "F_ItemRemark")]
  48 + public string ItemRemark { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 创建时间
  52 + /// </summary>
  53 + [SugarColumn(ColumnName = "F_CreateTime")]
  54 + public DateTime CreateTime { get; set; }
  55 +
  56 + /// <summary>
  57 + /// 更新时间
  58 + /// </summary>
  59 + [SugarColumn(ColumnName = "F_UpdateTime")]
  60 + public DateTime UpdateTime { get; set; }
  61 +
  62 + /// <summary>
  63 + /// 是否有效
  64 + /// </summary>
  65 + [SugarColumn(ColumnName = "F_IsEffective")]
  66 + public int IsEffective { get; set; } = 1;
  67 + }
  68 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_hyhk/LqXhHyhkEntity.cs
... ... @@ -48,6 +48,12 @@ namespace NCC.Extend.Entitys.lq_xh_hyhk
48 48 public string Hyzh { get; set; }
49 49  
50 50 /// <summary>
  51 + /// 会员手机号
  52 + /// </summary>
  53 + [SugarColumn(ColumnName = "F_MemberPhone")]
  54 + public string MemberPhone { get; set; }
  55 +
  56 + /// <summary>
51 57 /// 会员名称
52 58 /// </summary>
53 59 [SugarColumn(ColumnName = "hymc")]
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_yxhdfa/LqYxhdfaEntity.cs deleted
1   -using NCC.Common.Const;
2   -using SqlSugar;
3   -using System;
4   -
5   -namespace NCC.Extend.Entitys.lq_yxhdfa
6   -{
7   - /// <summary>
8   - /// 营销活动方案
9   - /// </summary>
10   - [SugarTable("lq_yxhdfa")]
11   - [Tenant(ClaimConst.TENANT_ID)]
12   - public class LqYxhdfaEntity
13   - {
14   - /// <summary>
15   - /// 方案编号
16   - /// </summary>
17   - [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18   - public string Id { get; set; }
19   -
20   - /// <summary>
21   - /// 营销活动编号
22   - /// </summary>
23   - [SugarColumn(ColumnName = "yxhdbh")]
24   - public string Yxhdbh { get; set; }
25   -
26   - /// <summary>
27   - /// 活动名称
28   - /// </summary>
29   - [SugarColumn(ColumnName = "hdmc")]
30   - public string Hdmc { get; set; }
31   -
32   - /// <summary>
33   - /// 张数奖
34   - /// </summary>
35   - [SugarColumn(ColumnName = "zsj")]
36   - public string Zsj { get; set; }
37   -
38   - /// <summary>
39   - /// 金额奖
40   - /// </summary>
41   - [SugarColumn(ColumnName = "jej")]
42   - public string Jej { get; set; }
43   -
44   - }
45   -}
46 0 \ No newline at end of file
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Mapper/LqYxhdfaMapper.cs deleted
1   -using NCC.Common.Helper;
2   -using NCC.Extend.Entitys.Dto.LqYxhdfa;
3   -using Mapster;
4   -using System.Collections.Generic;
5   -
6   -namespace NCC.Extend.Entitys.Mapper.LqYxhdfa
7   -{
8   - public class Mapper : IRegister
9   - {
10   - public void Register(TypeAdapterConfig config)
11   - {
12   - }
13   - }
14   -}
netcore/src/Modularity/Extend/NCC.Extend.Interfaces/ILqYxhdfaService.cs deleted
1   -namespace NCC.Extend.Interfaces.LqYxhdfa
2   -{
3   - public interface ILqYxhdfaService
4   - {
5   - }
6   -}
7 0 \ No newline at end of file
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYxhdfa/LqYxhdfaUpInput.cs renamed to netcore/src/Modularity/Extend/NCC.Extend.Interfaces/LqPackageInfo/ILqPackageInfoService.cs
1   -using System;
2   -using System.Collections.Generic;
  1 +using NCC.Extend.Entitys.Dto.LqPackageInfo;
  2 +using System.Threading.Tasks;
3 3  
4   -namespace NCC.Extend.Entitys.Dto.LqYxhdfa
  4 +namespace NCC.Extend.Interfaces.LqPackageInfo
5 5 {
6 6 /// <summary>
7   - /// 营销活动方案更新输入参数
  7 + /// 营销活动服务接口
8 8 /// </summary>
9   - public class LqYxhdfaUpInput : LqYxhdfaCrInput
  9 + public interface ILqPackageInfoService
10 10 {
11 11 /// <summary>
12   - /// 方案编号
  12 + /// 添加营销活动
13 13 /// </summary>
14   - public string id { get; set; }
15   -
  14 + /// <param name="input">营销活动创建输入</param>
  15 + /// <returns>营销活动ID</returns>
  16 + Task<string> CreatePackageInfoAsync(LqPackageInfoCrInput input);
16 17 }
17 18 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs
... ... @@ -19,6 +19,7 @@ using NCC.Extend.Entitys.Dto.LqHytkHytk;
19 19 using NCC.Extend.Entitys.Dto.LqHytkJksyj;
20 20 using NCC.Extend.Entitys.Dto.LqHytkKjbsyj;
21 21 using NCC.Extend.Entitys.Dto.LqHytkMx;
  22 +using NCC.Extend.Entitys.Enum;
22 23 using NCC.Extend.Entitys.lq_hytk_hytk;
23 24 using NCC.Extend.Entitys.lq_hytk_jksyj;
24 25 using NCC.Extend.Entitys.lq_hytk_kjbsyj;
... ... @@ -113,6 +114,7 @@ namespace NCC.Extend.LqHytkHytk
113 114 tksj = it.Tksj,
114 115 czry = it.Czry,
115 116 fileUrl = it.FileUrl,
  117 + isEffective = it.IsEffective,
116 118 })
117 119 .MergeTable()
118 120 .OrderBy(sidx + " " + input.sort)
... ... @@ -199,6 +201,7 @@ namespace NCC.Extend.LqHytkHytk
199 201 entity.F_CreateTime = DateTime.Now;
200 202 entity.F_CreateUser = userInfo.userId;
201 203 entity.F_DeleteMark = 0;
  204 + entity.IsEffective = StatusEnum.有效.GetHashCode();
202 205 entity.Czry = userInfo.userId;
203 206  
204 207 try
... ... @@ -236,6 +239,7 @@ namespace NCC.Extend.LqHytkHytk
236 239 IsEnabled = item.F_IsEnabled ?? 1,
237 240 SourceType = item.F_SourceType,
238 241 TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
  242 + IsEffective = StatusEnum.有效.GetHashCode(),
239 243 };
240 244 allMxEntities.Add(lqHytkMxEntity);
241 245  
... ... @@ -244,25 +248,25 @@ namespace NCC.Extend.LqHytkHytk
244 248 {
245 249 foreach (var ijks_tem in item.lqHytkJksyjList)
246 250 {
247   - allJksyjEntities.Add(
248   - new LqHytkJksyjEntity
249   - {
250   - Id = YitIdHelper.NextId().ToString(),
251   - Gltkbh = newEntity.Id,
252   - Jks = ijks_tem.jks,
253   - Jksxm = ijks_tem.jksxm,
254   - Jkszh = ijks_tem.jkszh,
255   - Jksyj = ijks_tem.jksyj,
256   - Tksj = DateTime.Now,
257   - F_jsjid = ijks_tem.F_jsjid,
258   - F_tkpxid = ijks_tem.F_tkpxid,
259   - F_LaborCost = ijks_tem.F_LaborCost,
260   - F_tkpxNumber = ijks_tem.F_tkpxNumber,
261   - F_CreateTime = DateTime.Now,
262   - F_CreateUser = userInfo.userId,
263   - F_DeleteMark = 0,
264   - CardReturn = lqHytkMxEntity.Id,
265   - }
  251 + allJksyjEntities.Add(new LqHytkJksyjEntity
  252 + {
  253 + Id = YitIdHelper.NextId().ToString(),
  254 + Gltkbh = newEntity.Id,
  255 + Jks = ijks_tem.jks,
  256 + Jksxm = ijks_tem.jksxm,
  257 + Jkszh = ijks_tem.jkszh,
  258 + Jksyj = ijks_tem.jksyj,
  259 + Tksj = DateTime.Now,
  260 + F_jsjid = ijks_tem.F_jsjid,
  261 + F_tkpxid = ijks_tem.F_tkpxid,
  262 + F_LaborCost = ijks_tem.F_LaborCost,
  263 + F_tkpxNumber = ijks_tem.F_tkpxNumber,
  264 + F_CreateTime = DateTime.Now,
  265 + F_CreateUser = userInfo.userId,
  266 + F_DeleteMark = 0,
  267 + CardReturn = lqHytkMxEntity.Id,
  268 + IsEffective = StatusEnum.有效.GetHashCode(),
  269 + }
266 270 );
267 271 }
268 272 }
... ... @@ -289,6 +293,7 @@ namespace NCC.Extend.LqHytkHytk
289 293 F_CreateUser = userInfo.userId,
290 294 F_DeleteMark = 0,
291 295 CardReturn = lqHytkMxEntity.Id,
  296 + IsEffective = StatusEnum.有效.GetHashCode(),
292 297 }
293 298 );
294 299 }
... ... @@ -474,7 +479,7 @@ namespace NCC.Extend.LqHytkHytk
474 479 }
475 480 #endregion
476 481  
477   - #region 删除退卡信息
  482 + #region 标记退卡信息为无效
478 483 /// <summary>
479 484 /// 删除退卡信息(逻辑删除)
480 485 /// </summary>
... ... @@ -486,8 +491,11 @@ namespace NCC.Extend.LqHytkHytk
486 491 var entity = await _db.Queryable<LqHytkHytkEntity>().FirstAsync(p => p.Id == id);
487 492 if (entity != null)
488 493 {
489   - entity.F_DeleteMark = 1;
  494 + entity.IsEffective = StatusEnum.无效.GetHashCode();
490 495 await _lqHytkHytkRepository.UpdateAsync(entity);
  496 + await _db.Updateable<LqHytkMxEntity>().SetColumns(it => new LqHytkMxEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.RefundInfoId == id).ExecuteCommandAsync();
  497 + await _db.Updateable<LqHytkJksyjEntity>().SetColumns(it => new LqHytkJksyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.Gltkbh == id).ExecuteCommandAsync();
  498 + await _db.Updateable<LqHytkKjbsyjEntity>().SetColumns(it => new LqHytkKjbsyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.Gltkbh == id).ExecuteCommandAsync();
491 499 }
492 500 }
493 501 #endregion
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
... ... @@ -17,15 +17,19 @@ using NCC.DataEncryption;
17 17 using NCC.Dependency;
18 18 using NCC.DynamicApiController;
19 19 using NCC.Extend.Entitys.Dto.Common;
  20 +using NCC.Extend.Entitys.Dto.LqKdDeductinfo;
20 21 using NCC.Extend.Entitys.Dto.LqKdKdjlb;
21 22 using NCC.Extend.Entitys.Enum;
  23 +using NCC.Extend.Entitys.lq_hytk_mx;
22 24 using NCC.Extend.Entitys.lq_jinsanjiao_user;
23 25 using NCC.Extend.Entitys.lq_kd_deductinfo;
24 26 using NCC.Extend.Entitys.lq_kd_jksyj;
25 27 using NCC.Extend.Entitys.lq_kd_kdjlb;
26 28 using NCC.Extend.Entitys.lq_kd_kjbsyj;
27 29 using NCC.Extend.Entitys.lq_kd_pxmx;
  30 +using NCC.Extend.Entitys.lq_kd_qkbj;
28 31 using NCC.Extend.Entitys.lq_khxx;
  32 +using NCC.Extend.Entitys.lq_xh_pxmx;
29 33 using NCC.Extend.Entitys.lq_xmzl;
30 34 using NCC.Extend.Interfaces.LqKdKdjlb;
31 35 using NCC.Extend.Utils;
... ... @@ -118,6 +122,9 @@ namespace NCC.Extend.LqKdKdjlb
118 122 // 4. 查询科技部老师业绩列表
119 123 var lqKdKjbsyjList = await _db.Queryable<LqKdKjbsyjEntity>().Where(w => w.Glkdbh == entity.Id).ToListAsync();
120 124  
  125 + // 5. 查询扣款信息列表
  126 + var lqKdDeductList = await _db.Queryable<LqKdDeductinfoEntity>().Where(w => w.BillingId == entity.Id).ToListAsync();
  127 +
121 128 // 5. 构建品项明细输出,每个品项关联对应的业绩信息
122 129 var pxmxOutputList = new List<LqKdPxmxInfoOutput>();
123 130 foreach (var pxmx in lqKdPxmxList)
... ... @@ -137,6 +144,7 @@ namespace NCC.Extend.LqKdKdjlb
137 144 totalPrice = pxmx.TotalPrice,
138 145 actualPrice = pxmx.ActualPrice,
139 146 remark = pxmx.Remark,
  147 + IsEffective = pxmx.IsEffective,
140 148 };
141 149  
142 150 // 关联该品项的健康师业绩
... ... @@ -147,6 +155,7 @@ namespace NCC.Extend.LqKdKdjlb
147 155 var kjbsyjForPx = lqKdKjbsyjList.Where(k => k.Kdpxid == pxmx.Id).ToList();
148 156 pxmxOutput.lqKdKjbsyjList = kjbsyjForPx.Adapt<List<LqKdKjbsyjInfoOutput>>();
149 157  
  158 +
150 159 pxmxOutputList.Add(pxmxOutput);
151 160 }
152 161  
... ... @@ -156,6 +165,8 @@ namespace NCC.Extend.LqKdKdjlb
156 165 // 7. 设置全局业绩列表(用于兼容性,但主要使用品项关联的业绩)
157 166 output.lqKdJksyjList = lqKdJksyjList.Adapt<List<LqKdJksyjInfoOutput>>();
158 167 output.lqKdKjbsyjList = lqKdKjbsyjList.Adapt<List<LqKdKjbsyjInfoOutput>>();
  168 + // 8. 设置扣款信息列表
  169 + output.lqKdDeductList = lqKdDeductList.Adapt<List<LqKdDeductinfoInfoOutput>>();
159 170  
160 171 return output;
161 172 }
... ... @@ -182,6 +193,7 @@ namespace NCC.Extend.LqKdKdjlb
182 193 DateTime? startKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.First()) : null;
183 194 DateTime? endKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.Last()) : null;
184 195 var data = await _db.Queryable<LqKdKdjlbEntity>()
  196 + .WhereIF(!string.IsNullOrEmpty(input.keyword), p => p.Kdhyc.Contains(input.keyword) || p.Kdhysjh.Contains(input.keyword))
185 197 .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
186 198 .WhereIF(!string.IsNullOrEmpty(input.djmd), p => p.Djmd.Equals(input.djmd))
187 199 .WhereIF(!string.IsNullOrEmpty(input.jsj), p => p.Jsj.Equals(input.jsj))
... ... @@ -208,6 +220,7 @@ namespace NCC.Extend.LqKdKdjlb
208 220 .WhereIF(!string.IsNullOrEmpty(input.kjblsyj), p => p.Kjblsyj.Contains(input.kjblsyj))
209 221 .WhereIF(!string.IsNullOrEmpty(input.pxxx), p => p.Pxxx.Contains(input.pxxx))
210 222 .WhereIF(!string.IsNullOrEmpty(input.F_FIleUrl), p => p.F_FIleUrl.Contains(input.F_FIleUrl))
  223 + .WhereIF(!string.IsNullOrEmpty(input.CreateUser), p => p.CreateUser.Equals(input.CreateUser))
211 224 .Select(it => new LqKdKdjlbListOutput
212 225 {
213 226 id = it.Id,
... ... @@ -236,6 +249,8 @@ namespace NCC.Extend.LqKdKdjlb
236 249 kjblsyj = it.Kjblsyj,
237 250 pxxx = it.Pxxx,
238 251 IsEffective = it.IsEffective,
  252 + CreateUser = it.CreateUser,
  253 + CreateUserName = SqlFunc.Subqueryable<UserEntity>().Where(x => x.Id == it.CreateUser).Select(x => x.RealName),
239 254 })
240 255 .MergeTable()
241 256 .OrderBy(sidx + " " + input.sort)
... ... @@ -265,26 +280,34 @@ namespace NCC.Extend.LqKdKdjlb
265 280 //开启事务
266 281 _db.BeginTran();
267 282 //判断是否有作废关联id
268   - if (!string.IsNullOrEmpty(input.cancelRefId))
269   - {
270   - //查询作废关联id
271   - var cancelRefEntity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == input.cancelRefId);
272   - if (cancelRefEntity == null)
273   - {
274   - throw NCCException.Oh("作废关联id不存在");
275   - }
276   - //将作废关联id的IsEffective设置为0
277   - cancelRefEntity.IsEffective = StatusEnum.无效.GetHashCode();
278   - await _db.Updateable(cancelRefEntity).ExecuteCommandAsync();
279   - //把品项明细表的IsEffective设置为0
280   - await _db.Updateable<LqKdPxmxEntity>().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdPxmxEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
281   - //把健康师业绩表的IsEffective设置为0
282   - await _db.Updateable<LqKdJksyjEntity>().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdJksyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
283   - //把科技部老师业绩表的IsEffective设置为0
284   - await _db.Updateable<LqKdKjbsyjEntity>().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdKjbsyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
285   - //把扣款信息表的IsEffective设置为0
286   - await _db.Updateable<LqKdDeductinfoEntity>().Where(p => p.BillingId == input.cancelRefId).UpdateColumns(p => new LqKdDeductinfoEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
287   - }
  283 + //暂时先不需要
  284 + // if (!string.IsNullOrEmpty(input.cancelRefId))
  285 + // {
  286 + // //查询作废关联id
  287 + // var cancelRefEntity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == input.cancelRefId);
  288 + // if (cancelRefEntity == null || cancelRefEntity.IsEffective == StatusEnum.无效.GetHashCode())
  289 + // {
  290 + // throw NCCException.Oh("该开单记录已经作废");
  291 + // }
  292 + // // 检查作废关联记录是否可以作废
  293 + // var (canCancel, errorMessage) = await CheckBillingCanCancelAsync(input.cancelRefId);
  294 + // if (!canCancel)
  295 + // {
  296 + // throw NCCException.Oh(errorMessage);
  297 + // }
  298 +
  299 + // //将作废关联id的IsEffective设置为无效
  300 + // cancelRefEntity.IsEffective = StatusEnum.无效.GetHashCode();
  301 + // await _db.Updateable(cancelRefEntity).ExecuteCommandAsync();
  302 + // //把品项明细表的IsEffective设置为无效
  303 + // await _db.Updateable<LqKdPxmxEntity>().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdPxmxEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
  304 + // //把健康师业绩表的IsEffective设置为无效
  305 + // await _db.Updateable<LqKdJksyjEntity>().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdJksyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
  306 + // //把科技部老师业绩表的IsEffective设置为无效
  307 + // await _db.Updateable<LqKdKjbsyjEntity>().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdKjbsyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
  308 + // //把扣款信息表的IsEffective设置为无效
  309 + // await _db.Updateable<LqKdDeductinfoEntity>().Where(p => p.BillingId == input.cancelRefId).UpdateColumns(p => new LqKdDeductinfoEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync();
  310 + // }
288 311  
289 312 //新增开单记录表记录
290 313 entity.CreateUser = userInfo.userId;
... ... @@ -336,6 +359,7 @@ namespace NCC.Extend.LqKdKdjlb
336 359 ActualPrice = item.actualPrice,
337 360 Remark = item.remark,
338 361 IsEffective = StatusEnum.有效.GetHashCode(),
  362 + ActivityId = input.activityId,
339 363 };
340 364 allPxmxEntities.Add(lqKdPxmxEntity);
341 365  
... ... @@ -358,6 +382,7 @@ namespace NCC.Extend.LqKdKdjlb
358 382 Jsj_id = ijks_tem.jsj_id,
359 383 Kdpxid = lqKdPxmxEntity.Id,
360 384 IsEffective = StatusEnum.有效.GetHashCode(),
  385 + ActivityId = input.activityId,
361 386 });
362 387 }
363 388 }
... ... @@ -367,19 +392,19 @@ namespace NCC.Extend.LqKdKdjlb
367 392 {
368 393 foreach (var ikjbs_tem in item.lqKdKjbsyjList)
369 394 {
370   - allKjbsyjEntities.Add(
371   - new LqKdKjbsyjEntity
372   - {
373   - Id = YitIdHelper.NextId().ToString(),
374   - Glkdbh = newEntity.Id,
375   - Kjbls = ikjbs_tem.kjbls,
376   - Kjblsxm = ikjbs_tem.kjblsxm,
377   - Kjblszh = ikjbs_tem.kjblszh,
378   - Kjblsyj = ikjbs_tem.kjblsyj,
379   - Yjsj = input.kdrq,
380   - Kdpxid = lqKdPxmxEntity.Id,
381   - IsEffective = StatusEnum.有效.GetHashCode(),
382   - }
  395 + allKjbsyjEntities.Add(new LqKdKjbsyjEntity
  396 + {
  397 + Id = YitIdHelper.NextId().ToString(),
  398 + Glkdbh = newEntity.Id,
  399 + Kjbls = ikjbs_tem.kjbls,
  400 + Kjblsxm = ikjbs_tem.kjblsxm,
  401 + Kjblszh = ikjbs_tem.kjblszh,
  402 + Kjblsyj = ikjbs_tem.kjblsyj,
  403 + Yjsj = input.kdrq,
  404 + Kdpxid = lqKdPxmxEntity.Id,
  405 + IsEffective = StatusEnum.有效.GetHashCode(),
  406 + ActivityId = input.activityId,
  407 + }
383 408 );
384 409 }
385 410 }
... ... @@ -1090,152 +1115,159 @@ namespace NCC.Extend.LqKdKdjlb
1090 1115 {
1091 1116 var entity = input.Adapt<LqKdKdjlbEntity>();
1092 1117 entity.Id = id; // 确保ID正确设置
1093   -
1094 1118 try
1095 1119 {
  1120 + //检查开单记录是否可以操作
  1121 + var (canCancel, errorMessage) = await CheckBillingCanCancelAsync(id);
  1122 + if (!canCancel)
  1123 + {
  1124 + throw NCCException.Oh(errorMessage);
  1125 + }
1096 1126 //开启事务
1097 1127 _db.BeginTran();
1098   -
1099 1128 // 更新开单记录主表
1100   - await _db.Updateable(entity)
1101   - .IgnoreColumns(ignoreAllNullColumns: true)
1102   - .IgnoreColumns(x => x.CreateTime) // 不更新创建时间
1103   - .ExecuteCommandAsync();
1104   -
1105   - // 处理品项明细列表 - 更新或插入
1106   - if (input.lqKdPxmxList != null && input.lqKdPxmxList.Any())
  1129 + await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).IgnoreColumns(x => x.CreateTime).ExecuteCommandAsync();
  1130 + //清空原有品项明细
  1131 + await _db.Deleteable<LqKdPxmxEntity>().Where(x => x.Glkdbh == id).ExecuteCommandAsync();
  1132 + //清空原有健康师业绩
  1133 + await _db.Deleteable<LqKdJksyjEntity>().Where(x => x.Glkdbh == id).ExecuteCommandAsync();
  1134 + //清空原有科技部老师业绩
  1135 + await _db.Deleteable<LqKdKjbsyjEntity>().Where(x => x.Glkdbh == id).ExecuteCommandAsync();
  1136 + //清空原有扣款信息
  1137 + await _db.Deleteable<LqKdDeductinfoEntity>().Where(x => x.BillingId == id).ExecuteCommandAsync();
  1138 + //循环品相信息
  1139 + // 收集所有需要插入的实体,然后批量插入
  1140 + var allPxmxEntities = new List<LqKdPxmxEntity>();
  1141 + var allJksyjEntities = new List<LqKdJksyjEntity>();
  1142 + var allKjbsyjEntities = new List<LqKdKjbsyjEntity>();
  1143 + var allDeductEntities = new List<LqKdDeductinfoEntity>();
  1144 + // 处理扣款信息列表
  1145 + foreach (var item in input.lqKdKdjlbDeductList)
1107 1146 {
1108   - foreach (var item in input.lqKdPxmxList)
  1147 + var lqKdDeductEntity = new LqKdDeductinfoEntity
  1148 + {
  1149 + Id = YitIdHelper.NextId().ToString(),
  1150 + BillingId = id,
  1151 + DeductId = item.DeductId,
  1152 + DeductType = item.DeductType,
  1153 + Amount = item.Amount,
  1154 + ProjectNumber = item.ProjectNumber,
  1155 + UnitPrice = item.UnitPrice,
  1156 + ItemName = item.ItemName,
  1157 + ItemId = item.ItemId,
  1158 + IsEffective = StatusEnum.有效.GetHashCode(), // 设置为有效
  1159 + CreateTime = DateTime.Now, // 设置创建时间
  1160 + };
  1161 + allDeductEntities.Add(lqKdDeductEntity);
  1162 + }
  1163 + // 处理品项明细列表
  1164 + foreach (var item in input.lqKdPxmxList)
  1165 + {
  1166 + // 创建品项明细实体
  1167 + var lqKdPxmxEntity = new LqKdPxmxEntity
1109 1168 {
1110   - // 检查品项明细是否已存在
1111   - var existingPxmx = await _db.Queryable<LqKdPxmxEntity>()
1112   - .Where(x => x.Glkdbh == id && x.Px == item.px)
1113   - .FirstAsync();
  1169 + Id = YitIdHelper.NextId().ToString(),
  1170 + Glkdbh = id,
  1171 + Yjsj = input.kdrq,
  1172 + CreateTIme = DateTime.Now,
  1173 + MemberId = entity.Kdhy,
  1174 + IsEnabled = StatusEnum.有效.GetHashCode(),
  1175 + ProjectNumber = item.projectNumber,
  1176 + TotalPrice = (decimal)(item.pxjg * item.projectNumber),
  1177 + Px = item.px,
  1178 + Pxmc = item.pxmc,
  1179 + Pxjg = item.pxjg,
  1180 + SourceType = item.sourceType,
  1181 + ActualPrice = item.actualPrice,
  1182 + Remark = item.remark,
  1183 + IsEffective = StatusEnum.有效.GetHashCode(),
  1184 + ActivityId = input.activityId,
  1185 + };
  1186 + allPxmxEntities.Add(lqKdPxmxEntity);
1114 1187  
1115   - if (existingPxmx != null)
  1188 + // 收集该品项关联的健康师业绩
  1189 + if (item.lqKdJksyjList != null && item.lqKdJksyjList.Any())
  1190 + {
  1191 + //把jksxm保存到HealthInstructorNames
  1192 + foreach (var ijks_tem in item.lqKdJksyjList)
1116 1193 {
1117   - // 更新现有品项明细
1118   - existingPxmx.ProjectNumber = item.projectNumber == 0 ? 1 : item.projectNumber;
1119   - existingPxmx.TotalPrice = (decimal)(item.pxjg * (item.projectNumber == 0 ? 1 : item.projectNumber));
1120   - existingPxmx.Pxmc = item.pxmc;
1121   - existingPxmx.Pxjg = item.pxjg;
1122   - existingPxmx.SourceType = item.sourceType;
1123   - await _db.Updateable(existingPxmx).ExecuteCommandAsync();
1124   -
1125   - // 更新该品项关联的健康师业绩
1126   - if (item.lqKdJksyjList != null && item.lqKdJksyjList.Any())
1127   - {
1128   - // 先删除该品项的所有健康师业绩
1129   - await _db.Deleteable<LqKdJksyjEntity>()
1130   - .Where(x => x.Kdpxid == existingPxmx.Id)
1131   - .ExecuteCommandAsync();
1132   -
1133   - // 重新插入健康师业绩
1134   - var jksyjEntities = item.lqKdJksyjList.Select(ijks_tem => new LqKdJksyjEntity
1135   - {
1136   - Id = YitIdHelper.NextId().ToString(),
1137   - Glkdbh = entity.Id,
1138   - Jks = ijks_tem.jks,
1139   - Jksxm = ijks_tem.jksxm,
1140   - Jkszh = ijks_tem.jkszh,
1141   - Jksyj = ijks_tem.jksyj,
1142   - Yjsj = DateTime.Now,
1143   - Jsj_id = ijks_tem.jsj_id,
1144   - Kdpxid = existingPxmx.Id,
1145   - }).ToList();
1146   -
1147   - if (jksyjEntities.Any())
1148   - {
1149   - await _db.Insertable(jksyjEntities).ExecuteCommandAsync();
1150   - }
1151   - }
1152   -
1153   - // 更新该品项关联的科技部老师业绩
1154   - if (item.lqKdKjbsyjList != null && item.lqKdKjbsyjList.Any())
  1194 + allJksyjEntities.Add(new LqKdJksyjEntity
1155 1195 {
1156   - // 先删除该品项的所有科技部老师业绩
1157   - await _db.Deleteable<LqKdKjbsyjEntity>()
1158   - .Where(x => x.Kdpxid == existingPxmx.Id)
1159   - .ExecuteCommandAsync();
1160   -
1161   - // 重新插入科技部老师业绩
1162   - var kjbsyjEntities = item.lqKdKjbsyjList.Select(ikjbs_tem => new LqKdKjbsyjEntity
1163   - {
1164   - Id = YitIdHelper.NextId().ToString(),
1165   - Glkdbh = entity.Id,
1166   - Kjbls = ikjbs_tem.kjbls,
1167   - Kjblsxm = ikjbs_tem.kjblsxm,
1168   - Kjblszh = ikjbs_tem.kjblszh,
1169   - Kjblsyj = ikjbs_tem.kjblsyj,
1170   - Yjsj = DateTime.Now,
1171   - Kdpxid = existingPxmx.Id,
1172   - }).ToList();
1173   -
1174   - if (kjbsyjEntities.Any())
1175   - {
1176   - await _db.Insertable(kjbsyjEntities).ExecuteCommandAsync();
1177   - }
1178   - }
  1196 + Id = YitIdHelper.NextId().ToString(),
  1197 + Glkdbh = id,
  1198 + Jks = ijks_tem.jks,
  1199 + Jksxm = ijks_tem.jksxm,
  1200 + Jkszh = ijks_tem.jkszh,
  1201 + Jksyj = ijks_tem.jksyj,
  1202 + Yjsj = input.kdrq,
  1203 + Jsj_id = ijks_tem.jsj_id,
  1204 + Kdpxid = lqKdPxmxEntity.Id,
  1205 + IsEffective = StatusEnum.有效.GetHashCode(),
  1206 + ActivityId = input.activityId,
  1207 + });
1179 1208 }
1180   - else
  1209 + }
  1210 +
  1211 + // 收集该品项关联的科技部老师业绩
  1212 + if (item.lqKdKjbsyjList != null && item.lqKdKjbsyjList.Any())
  1213 + {
  1214 + foreach (var ikjbs_tem in item.lqKdKjbsyjList)
1181 1215 {
1182   - // 插入新的品项明细
1183   - var newPxmxEntity = new LqKdPxmxEntity
  1216 + allKjbsyjEntities.Add(new LqKdKjbsyjEntity
1184 1217 {
1185 1218 Id = YitIdHelper.NextId().ToString(),
1186   - Glkdbh = entity.Id,
1187   - CreateTIme = DateTime.Now,
1188   - MemberId = entity.Kdhy,
1189   - IsEnabled = 0,
1190   - ProjectNumber = item.projectNumber == 0 ? 1 : item.projectNumber,
1191   - TotalPrice = (decimal)(item.pxjg * (item.projectNumber == 0 ? 1 : item.projectNumber)),
1192   - Px = item.px,
1193   - Pxmc = item.pxmc,
1194   - Pxjg = item.pxjg,
1195   - SourceType = item.sourceType,
1196   - };
1197   - await _db.Insertable(newPxmxEntity).ExecuteCommandAsync();
1198   -
1199   - // 插入该品项关联的健康师业绩
1200   - if (item.lqKdJksyjList != null && item.lqKdJksyjList.Any())
1201   - {
1202   - var jksyjEntities = item.lqKdJksyjList.Select(ijks_tem => new LqKdJksyjEntity
1203   - {
1204   - Id = YitIdHelper.NextId().ToString(),
1205   - Glkdbh = entity.Id,
1206   - Jks = ijks_tem.jks,
1207   - Jksxm = ijks_tem.jksxm,
1208   - Jkszh = ijks_tem.jkszh,
1209   - Jksyj = ijks_tem.jksyj,
1210   - Yjsj = DateTime.Now,
1211   - Jsj_id = ijks_tem.jsj_id,
1212   - Kdpxid = newPxmxEntity.Id,
1213   - }).ToList();
1214   -
1215   - await _db.Insertable(jksyjEntities).ExecuteCommandAsync();
1216   - }
1217   -
1218   - // 插入该品项关联的科技部老师业绩
1219   - if (item.lqKdKjbsyjList != null && item.lqKdKjbsyjList.Any())
1220   - {
1221   - var kjbsyjEntities = item.lqKdKjbsyjList.Select(ikjbs_tem => new LqKdKjbsyjEntity
1222   - {
1223   - Id = YitIdHelper.NextId().ToString(),
1224   - Glkdbh = entity.Id,
1225   - Kjbls = ikjbs_tem.kjbls,
1226   - Kjblsxm = ikjbs_tem.kjblsxm,
1227   - Kjblszh = ikjbs_tem.kjblszh,
1228   - Kjblsyj = ikjbs_tem.kjblsyj,
1229   - Yjsj = DateTime.Now,
1230   - Kdpxid = newPxmxEntity.Id,
1231   - }).ToList();
1232   -
1233   - await _db.Insertable(kjbsyjEntities).ExecuteCommandAsync();
  1219 + Glkdbh = id,
  1220 + Kjbls = ikjbs_tem.kjbls,
  1221 + Kjblsxm = ikjbs_tem.kjblsxm,
  1222 + Kjblszh = ikjbs_tem.kjblszh,
  1223 + Kjblsyj = ikjbs_tem.kjblsyj,
  1224 + Yjsj = input.kdrq,
  1225 + Kdpxid = lqKdPxmxEntity.Id,
  1226 + IsEffective = StatusEnum.有效.GetHashCode(),
  1227 + ActivityId = input.activityId,
1234 1228 }
  1229 + );
1235 1230 }
1236 1231 }
1237 1232 }
1238 1233  
  1234 +
  1235 +
  1236 + //通过会员id查询会员信息
  1237 + var memberInfo = await _db.Queryable<LqKhxxEntity>().Where(u => u.Id == entity.Kdhy).FirstAsync();
  1238 + //通过开单记录表查询这个会员开单金额
  1239 + var kdAmount = await _db.Queryable<LqKdKdjlbEntity>().Where(u => u.Kdhy == entity.Kdhy).SumAsync(u => u.Sfyj);
  1240 + //如果开单金额小于500,为散客,如果大于500,为会员
  1241 + if (kdAmount < 500)
  1242 + {
  1243 + memberInfo.Khlx = MemberTypeEnum.散客.GetHashCode().ToString();
  1244 + }
  1245 + else
  1246 + {
  1247 + memberInfo.Khlx = MemberTypeEnum.会员.GetHashCode().ToString();
  1248 + }
  1249 + await _db.Updateable(memberInfo).ExecuteCommandAsync();
  1250 + // 批量插入扣款信息
  1251 + if (allDeductEntities.Any())
  1252 + {
  1253 + await _db.Insertable(allDeductEntities).ExecuteCommandAsync();
  1254 + }
  1255 + // 批量插入品项明细
  1256 + if (allPxmxEntities.Any())
  1257 + {
  1258 + await _db.Insertable(allPxmxEntities).ExecuteCommandAsync();
  1259 + }
  1260 + // 批量插入健康师业绩
  1261 + if (allJksyjEntities.Any())
  1262 + {
  1263 + await _db.Insertable(allJksyjEntities).ExecuteCommandAsync();
  1264 + }
  1265 + // 批量插入科技部老师业绩
  1266 + if (allKjbsyjEntities.Any())
  1267 + {
  1268 + await _db.Insertable(allKjbsyjEntities).ExecuteCommandAsync();
  1269 + }
  1270 +
1239 1271 //关闭事务
1240 1272 _db.CommitTran();
1241 1273 }
... ... @@ -1248,61 +1280,98 @@ namespace NCC.Extend.LqKdKdjlb
1248 1280 }
1249 1281 #endregion
1250 1282  
  1283 +
  1284 +
  1285 +
  1286 +
1251 1287 #region 作废开单记录
1252 1288 /// <summary>
1253 1289 /// 作废开单记录
1254 1290 /// </summary>
1255   - /// <param name="id">开单记录主键ID</param>
  1291 + /// <param name="input">作废开单记录输入</param>
1256 1292 /// <returns>无返回值</returns>
  1293 + /// <remarks>
  1294 + /// 作废指定的开单记录,包括相关的品项明细、业绩记录等
  1295 + ///
  1296 + /// 示例请求:
  1297 + /// ```json
  1298 + /// {
  1299 + /// "id": "123456789",
  1300 + /// "remarks": "客户要求作废此订单"
  1301 + /// }
  1302 + /// ```
  1303 + ///
  1304 + /// 参数说明:
  1305 + /// - id: 开单记录主键ID(必填)
  1306 + /// - remarks: 作废备注说明
  1307 + /// </remarks>
1257 1308 /// <response code="200">作废成功</response>
1258 1309 /// <response code="400">参数错误,开单记录ID不能为空</response>
1259 1310 /// <response code="404">开单记录不存在</response>
1260 1311 /// <response code="500">服务器内部错误</response>
1261   - [HttpPut("Cancel/{id}")]
1262   - public async Task Cancel(string id)
  1312 + [HttpPut("Cancel")]
  1313 + public async Task Cancel(CancelBillingInput input)
1263 1314 {
1264   - if (string.IsNullOrEmpty(id))
  1315 + if (string.IsNullOrEmpty(input.Id))
1265 1316 {
1266 1317 throw NCCException.Oh("开单记录ID不能为空");
1267 1318 }
1268   -
1269 1319 try
1270 1320 {
1271 1321 //开启事务
1272 1322 _db.BeginTran();
  1323 + // 检查开单记录是否可以作废
  1324 + var (canCancel, errorMessage) = await CheckBillingCanCancelAsync(input.Id);
  1325 + if (!canCancel)
  1326 + {
  1327 + throw NCCException.Oh(errorMessage);
  1328 + }
1273 1329  
1274 1330 // 查询开单记录
1275   - var entity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == id);
  1331 + var entity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == input.Id);
1276 1332 if (entity == null)
1277 1333 {
1278 1334 throw NCCException.Oh("开单记录不存在");
1279 1335 }
1280 1336  
1281   - // 检查是否已经作废
1282   - if (entity.IsEffective == 0)
1283   - {
1284   - throw NCCException.Oh("该开单记录已经作废");
1285   - }
1286   -
1287   - // 标记开单记录为无效
1288   - entity.IsEffective = 0;
  1337 + // 标记开单记录为无效,并添加作废备注
  1338 + entity.IsEffective = StatusEnum.无效.GetHashCode();
  1339 + entity.CancelRefRemarks = input.Remarks;
  1340 + entity.UpdateTime = DateTime.Now;
1289 1341 await _db.Updateable(entity).ExecuteCommandAsync();
  1342 +
1290 1343 // 标记对应开单明细表为无效
1291   - await _db.Updateable<LqKdPxmxEntity>().SetColumns(it => new LqKdPxmxEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync();
  1344 + await _db.Updateable<LqKdPxmxEntity>()
  1345 + .SetColumns(it => new LqKdPxmxEntity { IsEffective = StatusEnum.无效.GetHashCode() })
  1346 + .Where(it => it.Glkdbh == input.Id)
  1347 + .ExecuteCommandAsync();
  1348 +
1292 1349 // 标记健康师业绩为无效
1293   - await _db.Updateable<LqKdJksyjEntity>().SetColumns(it => new LqKdJksyjEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync();
  1350 + await _db.Updateable<LqKdJksyjEntity>()
  1351 + .SetColumns(it => new LqKdJksyjEntity { IsEffective = StatusEnum.无效.GetHashCode() })
  1352 + .Where(it => it.Glkdbh == input.Id)
  1353 + .ExecuteCommandAsync();
  1354 +
1294 1355 // 标记科技部老师业绩为无效
1295   - await _db.Updateable<LqKdKjbsyjEntity>().SetColumns(it => new LqKdKjbsyjEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync();
  1356 + await _db.Updateable<LqKdKjbsyjEntity>()
  1357 + .SetColumns(it => new LqKdKjbsyjEntity { IsEffective = StatusEnum.无效.GetHashCode() })
  1358 + .Where(it => it.Glkdbh == input.Id)
  1359 + .ExecuteCommandAsync();
  1360 +
1296 1361 // 标记开单_储扣详细表为无效
1297   - await _db.Updateable<LqKdDeductinfoEntity>().SetColumns(it => new LqKdDeductinfoEntity { IsEffective = 0 }).Where(it => it.BillingId == id).ExecuteCommandAsync();
  1362 + await _db.Updateable<LqKdDeductinfoEntity>()
  1363 + .SetColumns(it => new LqKdDeductinfoEntity { IsEffective = StatusEnum.无效.GetHashCode() })
  1364 + .Where(it => it.BillingId == input.Id)
  1365 + .ExecuteCommandAsync();
  1366 +
1298 1367 //关闭事务
1299 1368 _db.CommitTran();
1300 1369 }
1301   - catch (Exception)
  1370 + catch (Exception ex)
1302 1371 {
1303 1372 //回滚事务
1304 1373 _db.RollbackTran();
1305   - throw NCCException.Oh(ErrorCode.COM1001);
  1374 + throw NCCException.Oh($"作废开单记录失败: {ex.Message}");
1306 1375 }
1307 1376 }
1308 1377 #endregion
... ... @@ -1482,5 +1551,218 @@ namespace NCC.Extend.LqKdKdjlb
1482 1551 }
1483 1552 }
1484 1553 #endregion
  1554 +
  1555 + #region 补缴欠款
  1556 + /// <summary>
  1557 + /// 补缴欠款
  1558 + /// </summary>
  1559 + /// <param name="input">补缴欠款输入</param>
  1560 + /// <returns>补缴记录ID</returns>
  1561 + /// <remarks>
  1562 + /// 为客户补缴欠款,记录补缴信息并更新开单记录的已缴欠款金额
  1563 + ///
  1564 + /// 示例请求:
  1565 + /// ```json
  1566 + /// {
  1567 + /// "billingId": "123456789",
  1568 + /// "paymentAmount": 1000.00,
  1569 + /// "paymentMethod": "现金",
  1570 + /// "paymentDate": "2025-01-15T10:30:00",
  1571 + /// "paymentUser": "收款员",
  1572 + /// "remarks": "客户补缴欠款"
  1573 + /// }
  1574 + /// ```
  1575 + ///
  1576 + /// 参数说明:
  1577 + /// - billingId: 开单记录ID(必填)
  1578 + /// - paymentAmount: 补缴金额(必填)
  1579 + /// - paymentMethod: 付款方式
  1580 + /// - paymentDate: 付款日期
  1581 + /// - paymentUser: 收款人员
  1582 + /// - remarks: 备注信息
  1583 + /// </remarks>
  1584 + /// <response code="200">补缴成功,返回补缴记录ID</response>
  1585 + /// <response code="400">请求参数错误</response>
  1586 + /// <response code="404">开单记录不存在</response>
  1587 + /// <response code="500">服务器内部错误</response>
  1588 + [HttpPost("PayDebtAsync")]
  1589 + public async Task<dynamic> PayDebtAsync(PayDebtInput input)
  1590 + {
  1591 + try
  1592 + {
  1593 + // 验证补缴金额
  1594 + if (input.PaymentAmount <= 0)
  1595 + {
  1596 + throw NCCException.Oh("补缴金额必须大于0");
  1597 + }
  1598 +
  1599 + // 检查开单记录是否存在
  1600 + var billingRecord = await _db.Queryable<LqKdKdjlbEntity>().Where(w => w.Id == input.BillingId).FirstAsync();
  1601 + if (billingRecord == null || billingRecord.IsEffective == StatusEnum.无效.GetHashCode())
  1602 + {
  1603 + throw NCCException.Oh("开单记录不存在或已作废");
  1604 + }
  1605 + // 检查补缴金额是否超过欠款金额
  1606 + var remainingDebt = billingRecord.Qk - billingRecord.PaidDebt;
  1607 + if (input.PaymentAmount > remainingDebt)
  1608 + {
  1609 + throw NCCException.Oh($"补缴金额({input.PaymentAmount})不能超过剩余欠款金额({remainingDebt})");
  1610 + }
  1611 + // 开始事务
  1612 + _db.BeginTran();
  1613 + try
  1614 + {
  1615 + // 创建补缴记录
  1616 + var paymentRecord = new LqKdQkbjEntity
  1617 + {
  1618 + Id = YitIdHelper.NextId().ToString(),
  1619 + BillingId = input.BillingId,
  1620 + PaymentAmount = input.PaymentAmount,
  1621 + PaymentMethod = input.PaymentMethod,
  1622 + PaymentDate = input.PaymentDate ?? DateTime.Now,
  1623 + PaymentUser = input.PaymentUser ?? _userManager.UserId,
  1624 + Remarks = input.Remarks,
  1625 + CreateTime = DateTime.Now,
  1626 + UpdateTime = DateTime.Now,
  1627 + IsEffective = StatusEnum.有效.GetHashCode()
  1628 + };
  1629 + // 保存补缴记录
  1630 + await _db.Insertable(paymentRecord).ExecuteCommandAsync();
  1631 +
  1632 + // 更新开单记录的已缴欠款金额
  1633 + await _db.Updateable<LqKdKdjlbEntity>()
  1634 + .SetColumns(it => new LqKdKdjlbEntity
  1635 + {
  1636 + PaidDebt = it.PaidDebt + input.PaymentAmount,
  1637 + UpdateTime = DateTime.Now
  1638 + })
  1639 + .Where(w => w.Id == input.BillingId)
  1640 + .ExecuteCommandAsync();
  1641 +
  1642 + // 提交事务
  1643 + _db.CommitTran();
  1644 + return new
  1645 + {
  1646 + success = true,
  1647 + message = "补缴成功",
  1648 + data = paymentRecord.Id
  1649 + };
  1650 + }
  1651 + catch
  1652 + {
  1653 + // 回滚事务
  1654 + _db.RollbackTran();
  1655 + throw;
  1656 + }
  1657 + }
  1658 + catch (Exception ex)
  1659 + {
  1660 + throw NCCException.Oh($"补缴欠款失败: {ex.Message}");
  1661 + }
  1662 + }
  1663 +
  1664 +
  1665 + #endregion
  1666 +
  1667 + #region 补缴欠款查询
  1668 + /// <summary>
  1669 + /// 获取补缴欠款记录列表
  1670 + /// </summary>
  1671 + /// <param name="input">查询输入</param>
  1672 + /// <returns>补缴记录列表</returns>
  1673 + /// <remarks>
  1674 + /// 获取指定开单记录的补缴欠款历史记录
  1675 + /// </remarks>
  1676 + /// <response code="200">成功获取补缴记录列表</response>
  1677 + /// <response code="400">请求参数错误</response>
  1678 + /// <response code="500">服务器内部错误</response>
  1679 + [HttpGet("GetDebtPaymentRecordsAsync")]
  1680 + public async Task<dynamic> GetDebtPaymentRecordsAsync([FromQuery] DebtPaymentQueryInput input)
  1681 + {
  1682 + try
  1683 + {
  1684 + var sidx = input.sidx == null ? "PaymentDate" : input.sidx;
  1685 + var data = await _db.Queryable<LqKdQkbjEntity>()
  1686 + .WhereIF(!string.IsNullOrEmpty(input.BillingId), w => w.BillingId == input.BillingId)
  1687 + .WhereIF(input.PaymentDateStart.HasValue, w => w.PaymentDate >= input.PaymentDateStart.Value)
  1688 + .WhereIF(input.PaymentDateEnd.HasValue, w => w.PaymentDate <= input.PaymentDateEnd.Value)
  1689 + .WhereIF(!string.IsNullOrEmpty(input.PaymentUser), w => w.PaymentUser.Contains(input.PaymentUser))
  1690 + .Select(it => new DebtPaymentRecordOutput
  1691 + {
  1692 + Id = it.Id,
  1693 + BillingId = it.BillingId,
  1694 + PaymentAmount = it.PaymentAmount,
  1695 + PaymentMethod = it.PaymentMethod,
  1696 + PaymentDate = it.PaymentDate,
  1697 + PaymentUser = it.PaymentUser,
  1698 + Remarks = it.Remarks,
  1699 + CreateTime = it.CreateTime
  1700 + }).MergeTable().OrderBy(sidx + " " + input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
  1701 +
  1702 + return PageResult<DebtPaymentRecordOutput>.SqlSugarPageResult(data);
  1703 + }
  1704 + catch (Exception ex)
  1705 + {
  1706 + throw NCCException.Oh($"获取补缴记录失败: {ex.Message}");
  1707 + }
  1708 + }
  1709 + #endregion
  1710 +
  1711 + #region 私有方法
  1712 + /// <summary>
  1713 + /// 检查开单记录是否可以操作
  1714 + /// </summary>
  1715 + /// <param name="billingId">开单记录ID</param>
  1716 + /// <returns>是否可以作废</returns>
  1717 + private async Task<(bool canCancel, string errorMessage)> CheckBillingCanCancelAsync(string billingId)
  1718 + {
  1719 + try
  1720 + {
  1721 + // 查询开单记录
  1722 + var entity = await _db.Queryable<LqKdKdjlbEntity>().FirstAsync(p => p.Id == billingId);
  1723 + if (entity == null)
  1724 + {
  1725 + return (false, "开单记录不存在");
  1726 + }
  1727 + // 检查是否已经作废
  1728 + if (entity.IsEffective == StatusEnum.无效.GetHashCode())
  1729 + {
  1730 + return (false, "该开单记录已经作废");
  1731 + }
  1732 + // 查询开单记录下的品项明细ID列表
  1733 + var pxmxIdList = await _db.Queryable<LqKdPxmxEntity>().Where(p => p.Glkdbh == billingId).Select(p => p.Id).Distinct().ToListAsync();
  1734 + //判断是否有对应的补缴记录
  1735 + var qkbjList = await _db.Queryable<LqKdQkbjEntity>().Where(p => p.BillingId == billingId).ToListAsync();
  1736 + if (qkbjList.Any())
  1737 + {
  1738 + return (false, "该开单记录有对应的补缴记录,不能进行操作");
  1739 + }
  1740 + // 判断是否有对应的消耗记录
  1741 + var xhPxmxList = await _db.Queryable<LqXhPxmxEntity>().Where(p => pxmxIdList.Contains(p.BillingItemId)).ToListAsync();
  1742 + if (xhPxmxList.Any())
  1743 + {
  1744 + return (false, "该开单记录有对应的消耗记录,不能进行操作");
  1745 + }
  1746 + // 判断是否有退卡记录
  1747 + var hytkMxList = await _db.Queryable<LqHytkMxEntity>().Where(p => pxmxIdList.Contains(p.BillingItemId)).ToListAsync();
  1748 + if (hytkMxList.Any())
  1749 + {
  1750 + return (false, "该开单记录有对应的退卡记录,不能进行操作");
  1751 + }
  1752 + // 判断是否已经有储扣记录
  1753 + var deductInfoList = await _db.Queryable<LqKdDeductinfoEntity>().Where(p => pxmxIdList.Contains(p.DeductId)).ToListAsync();
  1754 + if (deductInfoList.Any())
  1755 + {
  1756 + return (false, "该开单记录有对应的储扣记录,不能进行操作");
  1757 + }
  1758 +
  1759 + return (true, string.Empty);
  1760 + }
  1761 + catch (Exception ex)
  1762 + {
  1763 + return (false, $"检查开单记录状态失败: {ex.Message}");
  1764 + }
  1765 + }
  1766 + #endregion
1485 1767 }
1486 1768 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs
... ... @@ -344,7 +344,6 @@ namespace NCC.Extend.LqKhxx
344 344 {
345 345 throw NCCException.Oh("客户ID不能为空");
346 346 }
347   -
348 347 // 查询客户是否存在
349 348 var customerExists = await _db.Queryable<LqKhxxEntity>().Where(c => c.Id == customerId).AnyAsync();
350 349  
... ... @@ -352,13 +351,10 @@ namespace NCC.Extend.LqKhxx
352 351 {
353 352 throw NCCException.Oh("客户不存在");
354 353 }
355   -
356 354 // 查询开单记录数量
357   - var orderCount = await _db.Queryable<LqKdKdjlbEntity>().Where(o => o.Kdhy == customerId).CountAsync();
358   -
  355 + var orderCount = await _db.Queryable<LqKdKdjlbEntity>().Where(o => o.Kdhy == customerId && o.IsEffective == StatusEnum.有效.GetHashCode()).CountAsync();
359 356 var hasOrderRecord = orderCount > 0;
360 357 var orderType = hasOrderRecord ? "repeat_order" : "first_order";
361   -
362 358 return new LqKhxxOrderTypeOutput
363 359 {
364 360 CustomerId = customerId,
... ... @@ -546,6 +542,7 @@ namespace NCC.Extend.LqKhxx
546 542 // 先查询基础品项数据
547 543 var baseItems = await _db.Queryable<LqKdPxmxEntity>()
548 544 .Where(x => x.MemberId == memberId)
  545 + .Where(x => x.IsEffective == StatusEnum.有效.GetHashCode())
549 546 .Select(x => new
550 547 {
551 548 x.Id,
... ... @@ -560,6 +557,7 @@ namespace NCC.Extend.LqKhxx
560 557 // 查询消费数据
561 558 var consumedData = await _db.Queryable<LqXhPxmxEntity>()
562 559 .Where(x => baseItems.Select(b => b.Id).Contains(x.BillingItemId))
  560 + .Where(x => x.IsEffective == StatusEnum.有效.GetHashCode())
563 561 .GroupBy(x => x.BillingItemId)
564 562 .Select(x => new
565 563 {
... ... @@ -571,6 +569,7 @@ namespace NCC.Extend.LqKhxx
571 569 // 查询退卡数据
572 570 var refundedData = await _db.Queryable<LqHytkMxEntity>()
573 571 .Where(x => baseItems.Select(b => b.Id).Contains(x.BillingItemId))
  572 + // .Where(x => x.IsEffective == StatusEnum.有效.GetHashCode())
574 573 .GroupBy(x => x.BillingItemId)
575 574 .Select(x => new
576 575 {
... ... @@ -582,6 +581,7 @@ namespace NCC.Extend.LqKhxx
582 581 //查询储扣数据
583 582 var deductData = await _db.Queryable<LqKdDeductinfoEntity>()
584 583 .Where(x => baseItems.Select(b => b.Id).Contains(x.DeductId))
  584 + .Where(x => x.IsEffective == StatusEnum.有效.GetHashCode())
585 585 .GroupBy(x => x.DeductId)
586 586 .Select(x => new
587 587 {
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqPackageInfoService.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.LqPackageInfo;
  12 +using NCC.Extend.Entitys.Enum;
  13 +using NCC.Extend.Entitys.lq_package_info;
  14 +using NCC.Extend.Entitys.lq_package_item_detail;
  15 +using NCC.Extend.Interfaces.LqPackageInfo;
  16 +using NCC.FriendlyException;
  17 +using SqlSugar;
  18 +using Yitter.IdGenerator;
  19 +
  20 +namespace NCC.Extend.LqPackageInfo
  21 +{
  22 + /// <summary>
  23 + /// 营销活动服务
  24 + /// </summary>
  25 + [ApiDescriptionSettings(Tag = "绿纤营销活动服务", Name = "LqPackageInfo", Order = 200)]
  26 + [Route("api/Extend/[controller]")]
  27 + public class LqPackageInfoService : ILqPackageInfoService, IDynamicApiController, ITransient
  28 + {
  29 + private readonly ISqlSugarRepository<LqPackageInfoEntity> _packageInfoRepository;
  30 + private readonly SqlSugarScope _db;
  31 + private readonly IUserManager _userManager;
  32 +
  33 + /// <summary>
  34 + /// 构造函数
  35 + /// </summary>
  36 + /// <param name="packageInfoRepository">营销活动仓储</param>
  37 + /// <param name="userManager">用户管理器</param>
  38 + public LqPackageInfoService(ISqlSugarRepository<LqPackageInfoEntity> packageInfoRepository, IUserManager userManager)
  39 + {
  40 + _packageInfoRepository = packageInfoRepository;
  41 + _db = packageInfoRepository.Context;
  42 + _userManager = userManager;
  43 + }
  44 +
  45 + #region 添加营销活动
  46 + /// <summary>
  47 + /// 添加营销活动
  48 + /// </summary>
  49 + /// <param name="input">营销活动创建输入</param>
  50 + /// <returns>营销活动ID</returns>
  51 + /// <remarks>
  52 + /// 创建新的营销活动,包含活动基本信息和品项明细
  53 + ///
  54 + /// 示例请求:
  55 + /// ```json
  56 + /// {
  57 + /// "activityName": "春季护肤优惠活动",
  58 + /// "activityDesc": "春季护肤特惠活动",
  59 + /// "startTime": "2025-03-01T00:00:00",
  60 + /// "endTime": "2025-03-31T23:59:59",
  61 + /// "minItemQuantity": 2,
  62 + /// "activityRules": "活动规则说明",
  63 + /// "activityImages": "[\"image1.jpg\"]",
  64 + /// "sortOrder": 1,
  65 + /// "activityItems": [
  66 + /// {
  67 + /// "itemId": "ITEM001",
  68 + /// "itemName": "面部清洁",
  69 + /// "itemCategory": "基础护理",
  70 + /// "itemRemark": "推荐品项"
  71 + /// }
  72 + /// ]
  73 + /// }
  74 + /// ```
  75 + ///
  76 + /// 参数说明:
  77 + /// - activityName: 营销活动名称
  78 + /// - activityDesc: 营销活动描述
  79 + /// - startTime: 活动开始时间
  80 + /// - endTime: 活动结束时间
  81 + /// - minItemQuantity: 至少购买品项数量
  82 + /// - activityRules: 活动规则说明
  83 + /// - activityImages: 活动图片(JSON格式)
  84 + /// - sortOrder: 排序
  85 + /// - activityItems: 营销活动品项明细列表
  86 + /// </remarks>
  87 + /// <response code="200">成功创建营销活动,返回营销活动ID</response>
  88 + /// <response code="400">请求参数错误</response>
  89 + /// <response code="500">服务器内部错误</response>
  90 + [HttpPost("CreatePackageInfoAsync")]
  91 + public async Task<string> CreatePackageInfoAsync(LqPackageInfoCrInput input)
  92 + {
  93 + try
  94 + {
  95 + // 验证活动时间
  96 + if (input.StartTime >= input.EndTime)
  97 + {
  98 + throw NCCException.Oh("活动开始时间必须小于结束时间");
  99 + }
  100 +
  101 + // 验证品项明细
  102 + if (input.ActivityItems == null || !input.ActivityItems.Any())
  103 + {
  104 + throw NCCException.Oh("营销活动必须包含至少一个品项");
  105 + }
  106 +
  107 + // 验证至少购买品项数量
  108 + if (input.ActivityItems.Count < input.MinItemQuantity)
  109 + {
  110 + throw NCCException.Oh($"品项数量不能少于至少购买品项数量({input.MinItemQuantity})");
  111 + }
  112 +
  113 + // 开始事务
  114 + _db.BeginTran();
  115 +
  116 + try
  117 + {
  118 + // 创建营销活动实体
  119 + var packageInfo = input.Adapt<LqPackageInfoEntity>();
  120 + packageInfo.Id = YitIdHelper.NextId().ToString();
  121 + packageInfo.CreateTime = DateTime.Now;
  122 + packageInfo.UpdateTime = DateTime.Now;
  123 + packageInfo.CreateUser = _userManager.UserId;
  124 + packageInfo.UpdateUser = _userManager.UserId;
  125 + packageInfo.IsEffective = StatusEnum.有效.GetHashCode();
  126 + // 保存营销活动
  127 + await _db.Insertable(packageInfo).ExecuteCommandAsync();
  128 + // 创建营销活动品项明细
  129 + var packageItemDetails = input.ActivityItems.Select(item =>
  130 + {
  131 + var packageItemDetail = item.Adapt<LqPackageItemDetailEntity>();
  132 + packageItemDetail.Id = YitIdHelper.NextId().ToString();
  133 + packageItemDetail.ActivityId = packageInfo.Id;
  134 + packageItemDetail.CreateTime = DateTime.Now;
  135 + packageItemDetail.UpdateTime = DateTime.Now;
  136 + packageItemDetail.IsEffective = StatusEnum.有效.GetHashCode();
  137 + return packageItemDetail;
  138 + }).ToList();
  139 + // 批量保存营销活动品项明细
  140 + if (packageItemDetails.Any())
  141 + {
  142 + await _db.Insertable(packageItemDetails).ExecuteCommandAsync();
  143 + }
  144 + // 提交事务
  145 + _db.CommitTran();
  146 +
  147 + return packageInfo.Id;
  148 + }
  149 + catch
  150 + {
  151 + // 回滚事务
  152 + _db.RollbackTran();
  153 + throw;
  154 + }
  155 + }
  156 + catch (Exception ex)
  157 + {
  158 + throw NCCException.Oh($"添加营销活动失败: {ex.Message}");
  159 + }
  160 + }
  161 + #endregion
  162 +
  163 + #region 获取营销活动列表
  164 + /// <summary>
  165 + /// 获取营销活动列表
  166 + /// </summary>
  167 + /// <param name="input">营销活动列表查询输入</param>
  168 + /// <returns>营销活动列表</returns>
  169 + /// <remarks>
  170 + /// 获取营销活动列表,支持按活动名称、时间范围等条件筛选
  171 + ///
  172 + /// 查询参数说明:
  173 + /// - activityName: 活动名称(模糊查询)
  174 + /// - activityDesc: 活动描述(模糊查询)
  175 + /// - startTimeStart: 活动开始时间范围开始
  176 + /// - startTimeEnd: 活动开始时间范围结束
  177 + /// - endTimeStart: 活动结束时间范围开始
  178 + /// - endTimeEnd: 活动结束时间范围结束
  179 + /// - minItemQuantity: 至少购买品项数量
  180 + /// - createTimeStart: 创建时间范围开始
  181 + /// - createTimeEnd: 创建时间范围结束
  182 + /// </remarks>
  183 + /// <response code="200">成功获取营销活动列表</response>
  184 + /// <response code="400">请求参数错误</response>
  185 + /// <response code="500">服务器内部错误</response>
  186 + [HttpGet("GetPackageInfoListAsync")]
  187 + public async Task<dynamic> GetPackageInfoListAsync([FromQuery] LqPackageInfoListQueryInput input)
  188 + {
  189 + var sidx = input.sidx == null ? "CreateTime" : input.sidx;
  190 + var data = await _db.Queryable<LqPackageInfoEntity>()
  191 + .WhereIF(!string.IsNullOrEmpty(input.ActivityName), w => w.ActivityName.Contains(input.ActivityName))
  192 + .WhereIF(!string.IsNullOrEmpty(input.ActivityDesc), w => w.ActivityDesc.Contains(input.ActivityDesc))
  193 + .WhereIF(input.StartTimeStart.HasValue, w => w.StartTime >= input.StartTimeStart.Value)
  194 + .WhereIF(input.StartTimeEnd.HasValue, w => w.StartTime <= input.StartTimeEnd.Value)
  195 + .WhereIF(input.EndTimeStart.HasValue, w => w.EndTime >= input.EndTimeStart.Value)
  196 + .WhereIF(input.EndTimeEnd.HasValue, w => w.EndTime <= input.EndTimeEnd.Value)
  197 + .WhereIF(input.MinItemQuantity.HasValue, w => w.MinItemQuantity == input.MinItemQuantity.Value)
  198 + .WhereIF(input.CreateTimeStart.HasValue, w => w.CreateTime >= input.CreateTimeStart.Value)
  199 + .WhereIF(input.CreateTimeEnd.HasValue, w => w.CreateTime <= input.CreateTimeEnd.Value)
  200 + .Select(it => new LqPackageInfoListOutput
  201 + {
  202 + Id = it.Id,
  203 + ActivityName = it.ActivityName,
  204 + ActivityDesc = it.ActivityDesc,
  205 + StartTime = it.StartTime,
  206 + EndTime = it.EndTime,
  207 + MinItemQuantity = it.MinItemQuantity,
  208 + ActivityRules = it.ActivityRules,
  209 + SortOrder = it.SortOrder,
  210 + CreateTime = it.CreateTime
  211 + }).MergeTable().OrderBy(sidx + " " + input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
  212 + return PageResult<LqPackageInfoListOutput>.SqlSugarPageResult(data);
  213 + }
  214 + #endregion
  215 +
  216 + #region 获取营销活动详情
  217 + /// <summary>
  218 + /// 获取营销活动详情
  219 + /// </summary>
  220 + /// <param name="id">营销活动ID</param>
  221 + /// <returns>营销活动详情</returns>
  222 + [HttpGet("GetPackageInfoDetailAsync")]
  223 + public async Task<dynamic> GetPackageInfoDetailAsync(string id)
  224 + {
  225 + var data = await _db.Queryable<LqPackageInfoEntity>().Where(w => w.Id == id).FirstAsync();
  226 + var output = data.Adapt<LqPackageInfoListOutput>();
  227 + return output;
  228 + }
  229 + #endregion
  230 +
  231 + #region 更新营销活动
  232 + /// <summary>
  233 + /// 更新营销活动
  234 + /// </summary>
  235 + /// <param name="input">营销活动更新输入</param>
  236 + /// <returns>营销活动ID</returns>
  237 + /// <remarks>
  238 + /// 更新营销活动信息,包括活动基本信息和品项明细
  239 + ///
  240 + /// 示例请求:
  241 + /// ```json
  242 + /// {
  243 + /// "id": "123456789",
  244 + /// "activityName": "春季护肤优惠活动",
  245 + /// "activityDesc": "春季护肤特惠活动",
  246 + /// "startTime": "2025-03-01T00:00:00",
  247 + /// "endTime": "2025-03-31T23:59:59",
  248 + /// "minItemQuantity": 2,
  249 + /// "activityRules": "活动规则说明",
  250 + /// "activityImages": "[\"image1.jpg\"]",
  251 + /// "sortOrder": 1,
  252 + /// "activityItems": [
  253 + /// {
  254 + /// "itemId": "ITEM001",
  255 + /// "itemName": "面部清洁",
  256 + /// "itemCategory": "基础护理",
  257 + /// "itemRemark": "推荐品项"
  258 + /// }
  259 + /// ]
  260 + /// }
  261 + /// ```
  262 + ///
  263 + /// 参数说明:
  264 + /// - id: 营销活动ID(必填)
  265 + /// - activityName: 营销活动名称
  266 + /// - activityDesc: 营销活动描述
  267 + /// - startTime: 活动开始时间
  268 + /// - endTime: 活动结束时间
  269 + /// - minItemQuantity: 至少购买品项数量
  270 + /// - activityRules: 活动规则说明
  271 + /// - activityImages: 活动图片(JSON格式)
  272 + /// - sortOrder: 排序
  273 + /// - activityItems: 营销活动品项明细列表
  274 + /// </remarks>
  275 + /// <response code="200">成功更新营销活动,返回营销活动ID</response>
  276 + /// <response code="400">请求参数错误</response>
  277 + /// <response code="404">营销活动不存在</response>
  278 + /// <response code="500">服务器内部错误</response>
  279 + [HttpPut("UpdatePackageInfoAsync")]
  280 + public async Task<string> UpdatePackageInfoAsync(LqPackageInfoUpInput input)
  281 + {
  282 + try
  283 + {
  284 + // 验证活动时间
  285 + if (input.StartTime >= input.EndTime)
  286 + {
  287 + throw NCCException.Oh("活动开始时间必须小于结束时间");
  288 + }
  289 +
  290 + // 验证品项明细
  291 + if (input.ActivityItems == null || !input.ActivityItems.Any())
  292 + {
  293 + throw NCCException.Oh("营销活动必须包含至少一个品项");
  294 + }
  295 +
  296 + // 验证至少购买品项数量
  297 + if (input.ActivityItems.Count < input.MinItemQuantity)
  298 + {
  299 + throw NCCException.Oh($"品项数量不能少于至少购买品项数量({input.MinItemQuantity})");
  300 + }
  301 +
  302 + // 检查营销活动是否存在
  303 + var existingActivity = await _db.Queryable<LqPackageInfoEntity>()
  304 + .Where(w => w.Id == input.Id)
  305 + .FirstAsync();
  306 +
  307 + if (existingActivity == null)
  308 + {
  309 + throw NCCException.Oh("营销活动不存在");
  310 + }
  311 +
  312 + // 开始事务
  313 + _db.BeginTran();
  314 +
  315 + try
  316 + {
  317 + // 更新营销活动基本信息
  318 + var updateResult = await _db.Updateable<LqPackageInfoEntity>()
  319 + .SetColumns(it => new LqPackageInfoEntity
  320 + {
  321 + ActivityName = input.ActivityName,
  322 + ActivityDesc = input.ActivityDesc,
  323 + StartTime = input.StartTime,
  324 + EndTime = input.EndTime,
  325 + MinItemQuantity = input.MinItemQuantity,
  326 + ActivityRules = input.ActivityRules,
  327 + ActivityImages = input.ActivityImages,
  328 + SortOrder = input.SortOrder,
  329 + UpdateTime = DateTime.Now,
  330 + UpdateUser = _userManager.UserId
  331 + })
  332 + .Where(w => w.Id == input.Id)
  333 + .ExecuteCommandAsync();
  334 +
  335 + if (updateResult <= 0)
  336 + {
  337 + throw NCCException.Oh("更新营销活动失败");
  338 + }
  339 +
  340 + // 删除原有的品项明细
  341 + await _db.Deleteable<LqPackageItemDetailEntity>()
  342 + .Where(w => w.ActivityId == input.Id)
  343 + .ExecuteCommandAsync();
  344 +
  345 + // 创建新的品项明细
  346 + var packageItemDetails = input.ActivityItems.Select(item =>
  347 + {
  348 + var packageItemDetail = item.Adapt<LqPackageItemDetailEntity>();
  349 + packageItemDetail.Id = YitIdHelper.NextId().ToString();
  350 + packageItemDetail.ActivityId = input.Id;
  351 + packageItemDetail.CreateTime = DateTime.Now;
  352 + packageItemDetail.UpdateTime = DateTime.Now;
  353 + packageItemDetail.IsEffective = 1;
  354 + return packageItemDetail;
  355 + }).ToList();
  356 +
  357 + // 批量保存新的品项明细
  358 + if (packageItemDetails.Any())
  359 + {
  360 + await _db.Insertable(packageItemDetails).ExecuteCommandAsync();
  361 + }
  362 +
  363 + // 提交事务
  364 + _db.CommitTran();
  365 +
  366 + return input.Id;
  367 + }
  368 + catch
  369 + {
  370 + // 回滚事务
  371 + _db.RollbackTran();
  372 + throw;
  373 + }
  374 + }
  375 + catch (Exception ex)
  376 + {
  377 + throw NCCException.Oh($"更新营销活动失败: {ex.Message}");
  378 + }
  379 + }
  380 + #endregion
  381 +
  382 + #region 标记删除营销活动
  383 + /// <summary>
  384 + /// 标记删除营销活动
  385 + /// </summary>
  386 + /// <param name="id">营销活动ID</param>
  387 + /// <returns>营销活动ID</returns>
  388 + [HttpDelete("MarkDeletePackageInfoAsync")]
  389 + public async Task<string> MarkDeletePackageInfoAsync(string id)
  390 + {
  391 + var entity = await _db.Queryable<LqPackageInfoEntity>().Where(w => w.Id == id).FirstAsync();
  392 + if (entity == null)
  393 + {
  394 + throw NCCException.Oh("营销活动不存在");
  395 + }
  396 + entity.IsEffective = StatusEnum.无效.GetHashCode();
  397 + await _db.Updateable(entity).ExecuteCommandAsync();
  398 + await _db.Updateable<LqPackageItemDetailEntity>().SetColumns(it => new LqPackageItemDetailEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.ActivityId == id).ExecuteCommandAsync();
  399 + return id;
  400 + }
  401 + #endregion
  402 +
  403 + #region 获取当前时间有效的活动
  404 + /// <summary>
  405 + /// 获取当前时间有效的活动
  406 + /// </summary>
  407 + /// <returns>当前时间有效的活动</returns>
  408 + [HttpGet("GetCurrentTimeEffectiveActivityAsync")]
  409 + public async Task<dynamic> GetCurrentTimeEffectiveActivityAsync()
  410 + {
  411 + var data = await _db.Queryable<LqPackageInfoEntity>().Where(w => w.StartTime <= DateTime.Now && w.EndTime >= DateTime.Now && w.IsEffective == StatusEnum.有效.GetHashCode()).ToListAsync();
  412 + var output = data.Adapt<List<LqPackageInfoListOutput>>();
  413 + return output;
  414 + }
  415 + #endregion
  416 + }
  417 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs
... ... @@ -175,6 +175,7 @@ namespace NCC.Extend.LqXhHyhk
175 175 DateTime? startHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.First()) : null;
176 176 DateTime? endHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.Last()) : null;
177 177 var data = await _db.Queryable<LqXhHyhkEntity>()
  178 + .WhereIF(!string.IsNullOrEmpty(input.keyword), p => p.Hymc.Contains(input.keyword) || p.Hyzh.Contains(input.keyword) || p.MemberPhone.Contains(input.keyword))
178 179 .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
179 180 .WhereIF(!string.IsNullOrEmpty(input.md), p => p.Md.Equals(input.md))
180 181 .WhereIF(!string.IsNullOrEmpty(input.mdbh), p => p.Mdbh.Contains(input.mdbh))
... ... @@ -183,9 +184,6 @@ namespace NCC.Extend.LqXhHyhk
183 184 .WhereIF(!string.IsNullOrEmpty(input.hyzh), p => p.Hyzh.Contains(input.hyzh))
184 185 .WhereIF(!string.IsNullOrEmpty(input.hymc), p => p.Hymc.Contains(input.hymc))
185 186 .WhereIF(!string.IsNullOrEmpty(input.gklx), p => p.Gklx.Equals(input.gklx))
186   - // 注意:xfje 和 sgfy 现在是 decimal 类型,不支持字符串模糊查询
187   - // .WhereIF(!string.IsNullOrEmpty(input.xfje), p => SqlFunc.ToString(p.Xfje).Contains(input.xfje))
188   - // .WhereIF(!string.IsNullOrEmpty(input.sgfy), p => SqlFunc.ToString(p.Sgfy).Contains(input.sgfy))
189 187 .WhereIF(!string.IsNullOrEmpty(input.sfykjb), p => p.Sfykjb.Equals(input.sfykjb))
190 188 .WhereIF(queryHksj != null, p => p.Hksj >= new DateTime(startHksj.ToDate().Year, startHksj.ToDate().Month, startHksj.ToDate().Day, 0, 0, 0))
191 189 .WhereIF(queryHksj != null, p => p.Hksj <= new DateTime(endHksj.ToDate().Year, endHksj.ToDate().Month, endHksj.ToDate().Day, 23, 59, 59))
... ... @@ -205,6 +203,7 @@ namespace NCC.Extend.LqXhHyhk
205 203 sfykjb = it.Sfykjb,
206 204 hksj = it.Hksj,
207 205 czry = it.Czry,
  206 + memberPhone = it.MemberPhone,
208 207 })
209 208 .MergeTable()
210 209 .OrderBy(sidx + " " + input.sort)
... ... @@ -262,6 +261,7 @@ namespace NCC.Extend.LqXhHyhk
262 261 var entity = input.Adapt<LqXhHyhkEntity>();
263 262 entity.Id = YitIdHelper.NextId().ToString();
264 263 entity.Czry = _userManager.UserId;
  264 + entity.MemberPhone = _db.Queryable<LqKhxxEntity>().Where(w => w.Id == entity.Hy).First().Sjh;
265 265 entity.CreateTime = DateTime.Now;
266 266 try
267 267 {
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqYxhdfaService.cs deleted
1   -using System;
2   -using System.Collections.Generic;
3   -using System.Linq;
4   -using System.Threading.Tasks;
5   -using Mapster;
6   -using Microsoft.AspNetCore.Mvc;
7   -using NCC.ClayObject;
8   -using NCC.Common.Configuration;
9   -using NCC.Common.Core.Manager;
10   -using NCC.Common.Enum;
11   -using NCC.Common.Extension;
12   -using NCC.Common.Filter;
13   -using NCC.Common.Helper;
14   -using NCC.Common.Model.NPOI;
15   -using NCC.DataEncryption;
16   -using NCC.Dependency;
17   -using NCC.DynamicApiController;
18   -using NCC.Extend.Entitys.Dto.LqYxhdfa;
19   -using NCC.Extend.Entitys.lq_yxhdfa;
20   -using NCC.Extend.Interfaces.LqYxhdfa;
21   -using NCC.FriendlyException;
22   -using NCC.JsonSerialization;
23   -using SqlSugar;
24   -using Yitter.IdGenerator;
25   -
26   -namespace NCC.Extend.LqYxhdfa
27   -{
28   - /// <summary>
29   - /// 营销活动方案服务
30   - /// </summary>
31   - [ApiDescriptionSettings(Tag = "Extend", Name = "LqYxhdfa", Order = 200)]
32   - [Route("api/Extend/[controller]")]
33   - public class LqYxhdfaService : ILqYxhdfaService, IDynamicApiController, ITransient
34   - {
35   - private readonly ISqlSugarRepository<LqYxhdfaEntity> _lqYxhdfaRepository;
36   - private readonly SqlSugarScope _db;
37   - private readonly IUserManager _userManager;
38   -
39   - /// <summary>
40   - /// 初始化一个<see cref="LqYxhdfaService"/>类型的新实例
41   - /// </summary>
42   - public LqYxhdfaService(ISqlSugarRepository<LqYxhdfaEntity> lqYxhdfaRepository, IUserManager userManager)
43   - {
44   - _lqYxhdfaRepository = lqYxhdfaRepository;
45   - _db = _lqYxhdfaRepository.Context;
46   - _userManager = userManager;
47   - }
48   -
49   - /// <summary>
50   - /// 获取营销活动方案
51   - /// </summary>
52   - /// <param name="id">参数</param>
53   - /// <returns></returns>
54   - [HttpGet("{id}")]
55   - public async Task<dynamic> GetInfo(string id)
56   - {
57   - var entity = await _db.Queryable<LqYxhdfaEntity>().FirstAsync(p => p.Id == id);
58   - var output = entity.Adapt<LqYxhdfaInfoOutput>();
59   - return output;
60   - }
61   -
62   - /// <summary>
63   - /// 获取营销活动方案列表
64   - /// </summary>
65   - /// <param name="input">请求参数</param>
66   - /// <returns></returns>
67   - [HttpGet("")]
68   - public async Task<dynamic> GetList([FromQuery] LqYxhdfaListQueryInput input)
69   - {
70   - var sidx = input.sidx == null ? "id" : input.sidx;
71   - var data = await _db.Queryable<LqYxhdfaEntity>()
72   - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
73   - .WhereIF(!string.IsNullOrEmpty(input.yxhdbh), p => p.Yxhdbh.Contains(input.yxhdbh))
74   - .WhereIF(!string.IsNullOrEmpty(input.hdmc), p => p.Hdmc.Contains(input.hdmc))
75   - .WhereIF(!string.IsNullOrEmpty(input.zsj), p => p.Zsj.Contains(input.zsj))
76   - .WhereIF(!string.IsNullOrEmpty(input.jej), p => p.Jej.Contains(input.jej))
77   - .Select(it => new LqYxhdfaListOutput
78   - {
79   - id = it.Id,
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);
89   - }
90   -
91   - /// <summary>
92   - /// 新建营销活动方案
93   - /// </summary>
94   - /// <param name="input">参数</param>
95   - /// <returns></returns>
96   - [HttpPost("")]
97   - public async Task Create([FromBody] LqYxhdfaCrInput input)
98   - {
99   - var userInfo = await _userManager.GetUserInfo();
100   - var entity = input.Adapt<LqYxhdfaEntity>();
101   - entity.Id = YitIdHelper.NextId().ToString();
102   - var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
103   - if (!(isOk > 0))
104   - throw NCCException.Oh(ErrorCode.COM1000);
105   - }
106   -
107   - /// <summary>
108   - /// 获取营销活动方案无分页列表
109   - /// </summary>
110   - /// <param name="input">请求参数</param>
111   - /// <returns></returns>
112   - [NonAction]
113   - public async Task<dynamic> GetNoPagingList([FromQuery] LqYxhdfaListQueryInput input)
114   - {
115   - var sidx = input.sidx == null ? "id" : input.sidx;
116   - var data = await _db.Queryable<LqYxhdfaEntity>()
117   - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
118   - .WhereIF(!string.IsNullOrEmpty(input.yxhdbh), p => p.Yxhdbh.Contains(input.yxhdbh))
119   - .WhereIF(!string.IsNullOrEmpty(input.hdmc), p => p.Hdmc.Contains(input.hdmc))
120   - .WhereIF(!string.IsNullOrEmpty(input.zsj), p => p.Zsj.Contains(input.zsj))
121   - .WhereIF(!string.IsNullOrEmpty(input.jej), p => p.Jej.Contains(input.jej))
122   - .Select(it => new LqYxhdfaListOutput
123   - {
124   - id = it.Id,
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;
134   - }
135   -
136   - /// <summary>
137   - /// 导出营销活动方案
138   - /// </summary>
139   - /// <param name="input">请求参数</param>
140   - /// <returns></returns>
141   - [HttpGet("Actions/Export")]
142   - public async Task<dynamic> Export([FromQuery] LqYxhdfaListQueryInput input)
143   - {
144   - var userInfo = await _userManager.GetUserInfo();
145   - var exportData = new List<LqYxhdfaListOutput>();
146   - if (input.dataType == 0)
147   - {
148   - var data = Clay.Object(await this.GetList(input));
149   - exportData = data.Solidify<PageResult<LqYxhdfaListOutput>>().list;
150   - }
151   - else
152   - {
153   - exportData = await this.GetNoPagingList(input);
154   - }
155   - List<ParamsModel> paramList =
156   - "[{\"value\":\"方案编号\",\"field\":\"id\"},{\"value\":\"营销活动编号\",\"field\":\"yxhdbh\"},{\"value\":\"活动名称\",\"field\":\"hdmc\"},{\"value\":\"张数奖\",\"field\":\"zsj\"},{\"value\":\"金额奖\",\"field\":\"jej\"},]".ToList<ParamsModel>();
157   - ExcelConfig excelconfig = new ExcelConfig();
158   - excelconfig.FileName = "营销活动方案.xls";
159   - excelconfig.HeadFont = "微软雅黑";
160   - excelconfig.HeadPoint = 10;
161   - excelconfig.IsAllSizeColumn = true;
162   - excelconfig.ColumnModel = new List<ExcelColumnModel>();
163   - List<string> selectKeyList = input.selectKey.Split(',').ToList();
164   - foreach (var item in selectKeyList)
165   - {
166   - var isExist = paramList.Find(p => p.field == item);
167   - if (isExist != null)
168   - {
169   - excelconfig.ColumnModel.Add(new ExcelColumnModel() { Column = isExist.field, ExcelColumn = isExist.value });
170   - }
171   - }
172   - var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
173   - ExcelExportHelper<LqYxhdfaListOutput>.Export(exportData, excelconfig, addPath);
174   - var fileName = _userManager.UserId + "|" + addPath + "|xls";
175   - var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
176   - return output;
177   - }
178   -
179   - /// <summary>
180   - /// 批量删除营销活动方案
181   - /// </summary>
182   - /// <param name="ids">主键数组</param>
183   - /// <returns></returns>
184   - [HttpPost("batchRemove")]
185   - public async Task BatchRemove([FromBody] List<string> ids)
186   - {
187   - var entitys = await _db.Queryable<LqYxhdfaEntity>().In(it => it.Id, ids).ToListAsync();
188   - if (entitys.Count > 0)
189   - {
190   - try
191   - {
192   - //开启事务
193   - _db.BeginTran();
194   - //批量删除营销活动方案
195   - await _db.Deleteable<LqYxhdfaEntity>().In(d => d.Id, ids).ExecuteCommandAsync();
196   - //关闭事务
197   - _db.CommitTran();
198   - }
199   - catch (Exception)
200   - {
201   - //回滚事务
202   - _db.RollbackTran();
203   - throw NCCException.Oh(ErrorCode.COM1002);
204   - }
205   - }
206   - }
207   -
208   - /// <summary>
209   - /// 更新营销活动方案
210   - /// </summary>
211   - /// <param name="id">主键</param>
212   - /// <param name="input">参数</param>
213   - /// <returns></returns>
214   - [HttpPut("{id}")]
215   - public async Task Update(string id, [FromBody] LqYxhdfaUpInput input)
216   - {
217   - var entity = input.Adapt<LqYxhdfaEntity>();
218   - var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
219   - if (!(isOk > 0))
220   - throw NCCException.Oh(ErrorCode.COM1001);
221   - }
222   -
223   - /// <summary>
224   - /// 删除营销活动方案
225   - /// </summary>
226   - /// <returns></returns>
227   - [HttpDelete("{id}")]
228   - public async Task Delete(string id)
229   - {
230   - var entity = await _db.Queryable<LqYxhdfaEntity>().FirstAsync(p => p.Id == id);
231   - _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
232   - var isOk = await _db.Deleteable<LqYxhdfaEntity>().Where(d => d.Id == id).ExecuteCommandAsync();
233   - if (!(isOk > 0))
234   - throw NCCException.Oh(ErrorCode.COM1002);
235   - }
236   - }
237   -}