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,5 +3,5 @@
3 VUE_CLI_BABEL_TRANSPILE_MODULES = true 3 VUE_CLI_BABEL_TRANSPILE_MODULES = true
4 VUE_APP_BASE_API = 'http://lvqian.antissoft.com' 4 VUE_APP_BASE_API = 'http://lvqian.antissoft.com'
5 # VUE_APP_BASE_API = 'http://erp_test.lvqianmeiye.com' 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 VUE_APP_BASE_WSS = 'ws://192.168.110.45:2011/websocket' 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,72 +11,72 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
11 /// 退卡编号 11 /// 退卡编号
12 /// </summary> 12 /// </summary>
13 public string id { get; set; } 13 public string id { get; set; }
14 - 14 +
15 /// <summary> 15 /// <summary>
16 /// 门店 16 /// 门店
17 /// </summary> 17 /// </summary>
18 public string md { get; set; } 18 public string md { get; set; }
19 - 19 +
20 /// <summary> 20 /// <summary>
21 /// 门店编号 21 /// 门店编号
22 /// </summary> 22 /// </summary>
23 public string mdbh { get; set; } 23 public string mdbh { get; set; }
24 - 24 +
25 /// <summary> 25 /// <summary>
26 /// 门店名称 26 /// 门店名称
27 /// </summary> 27 /// </summary>
28 public string mdmc { get; set; } 28 public string mdmc { get; set; }
29 - 29 +
30 /// <summary> 30 /// <summary>
31 /// 会员 31 /// 会员
32 /// </summary> 32 /// </summary>
33 public string hy { get; set; } 33 public string hy { get; set; }
34 - 34 +
35 /// <summary> 35 /// <summary>
36 /// 会员姓名 36 /// 会员姓名
37 /// </summary> 37 /// </summary>
38 public string hymc { get; set; } 38 public string hymc { get; set; }
39 - 39 +
40 /// <summary> 40 /// <summary>
41 /// 会员账号 41 /// 会员账号
42 /// </summary> 42 /// </summary>
43 public string hyzh { get; set; } 43 public string hyzh { get; set; }
44 - 44 +
45 /// <summary> 45 /// <summary>
46 /// 顾客类型 46 /// 顾客类型
47 /// </summary> 47 /// </summary>
48 public string gklx { get; set; } 48 public string gklx { get; set; }
49 - 49 +
50 /// <summary> 50 /// <summary>
51 /// 退卡总金额 51 /// 退卡总金额
52 /// </summary> 52 /// </summary>
53 public decimal? tkje { get; set; } 53 public decimal? tkje { get; set; }
54 - 54 +
55 /// <summary> 55 /// <summary>
56 /// 手工费用 56 /// 手工费用
57 /// </summary> 57 /// </summary>
58 public decimal? sgfy { get; set; } 58 public decimal? sgfy { get; set; }
59 - 59 +
60 /// <summary> 60 /// <summary>
61 /// 备注 61 /// 备注
62 /// </summary> 62 /// </summary>
63 public string bz { get; set; } 63 public string bz { get; set; }
64 - 64 +
65 /// <summary> 65 /// <summary>
66 /// 退卡时间 66 /// 退卡时间
67 /// </summary> 67 /// </summary>
68 public DateTime? tksj { get; set; } 68 public DateTime? tksj { get; set; }
69 - 69 +
70 /// <summary> 70 /// <summary>
71 /// 操作人员 71 /// 操作人员
72 /// </summary> 72 /// </summary>
73 public string czry { get; set; } 73 public string czry { get; set; }
74 - 74 +
75 /// <summary> 75 /// <summary>
76 /// 退卡状态 76 /// 退卡状态
77 /// </summary> 77 /// </summary>
78 public string tkzt { get; set; } 78 public string tkzt { get; set; }
79 - 79 +
80 /// <summary> 80 /// <summary>
81 /// 退卡原因 81 /// 退卡原因
82 /// </summary> 82 /// </summary>
@@ -86,6 +86,11 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk @@ -86,6 +86,11 @@ namespace NCC.Extend.Entitys.Dto.LqHytkHytk
86 /// 退卡附件 86 /// 退卡附件
87 /// </summary> 87 /// </summary>
88 public string fileUrl { get; set; } 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,5 +61,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
61 /// 创建时间 61 /// 创建时间
62 /// </summary> 62 /// </summary>
63 public DateTime? CreateTime { get; set; } 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,45 +12,50 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
12 /// 业绩编号 12 /// 业绩编号
13 /// </summary> 13 /// </summary>
14 public string id { get; set; } 14 public string id { get; set; }
15 - 15 +
16 /// <summary> 16 /// <summary>
17 /// 关联开单编号 17 /// 关联开单编号
18 /// </summary> 18 /// </summary>
19 public string glkdbh { get; set; } 19 public string glkdbh { get; set; }
20 - 20 +
21 /// <summary> 21 /// <summary>
22 /// 关联开单品项ID 22 /// 关联开单品项ID
23 /// </summary> 23 /// </summary>
24 public string kdpxid { get; set; } 24 public string kdpxid { get; set; }
25 - 25 +
26 /// <summary> 26 /// <summary>
27 /// 健康师ID 27 /// 健康师ID
28 /// </summary> 28 /// </summary>
29 public string jks { get; set; } 29 public string jks { get; set; }
30 - 30 +
31 /// <summary> 31 /// <summary>
32 /// 健康师姓名 32 /// 健康师姓名
33 /// </summary> 33 /// </summary>
34 public string jksxm { get; set; } 34 public string jksxm { get; set; }
35 - 35 +
36 /// <summary> 36 /// <summary>
37 /// 健康师账号 37 /// 健康师账号
38 /// </summary> 38 /// </summary>
39 public string jkszh { get; set; } 39 public string jkszh { get; set; }
40 - 40 +
41 /// <summary> 41 /// <summary>
42 /// 健康师业绩 42 /// 健康师业绩
43 /// </summary> 43 /// </summary>
44 public string jksyj { get; set; } 44 public string jksyj { get; set; }
45 - 45 +
46 /// <summary> 46 /// <summary>
47 /// 业绩时间 47 /// 业绩时间
48 /// </summary> 48 /// </summary>
49 public DateTime? yjsj { get; set; } 49 public DateTime? yjsj { get; set; }
50 - 50 +
51 /// <summary> 51 /// <summary>
52 /// 金三角ID 52 /// 金三角ID
53 /// </summary> 53 /// </summary>
54 public string jsj_id { get; set; } 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,6 +146,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
146 public string F_FIleUrl { get; set; } 146 public string F_FIleUrl { get; set; }
147 147
148 /// <summary> 148 /// <summary>
  149 + /// 营销活动ID
  150 + /// </summary>
  151 + public string activityId { get; set; }
  152 +
  153 + /// <summary>
149 /// 作废关联id 154 /// 作废关联id
150 /// </summary> 155 /// </summary>
151 public string cancelRefId { get; set; } 156 public string cancelRefId { get; set; }
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbInfoOutput.cs
1 using System; 1 using System;
2 using System.Collections.Generic; 2 using System.Collections.Generic;
3 using NCC.Common.Model; 3 using NCC.Common.Model;
  4 +using NCC.Extend.Entitys.Dto.LqKdDeductinfo;
4 5
5 namespace NCC.Extend.Entitys.Dto.LqKdKdjlb 6 namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
6 { 7 {
@@ -151,6 +152,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb @@ -151,6 +152,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
151 public string F_FIleUrl { get; set; } 152 public string F_FIleUrl { get; set; }
152 153
153 /// <summary> 154 /// <summary>
  155 + /// 是否有效
  156 + /// </summary>
  157 + public int IsEffective { get; set; }
  158 +
  159 + /// <summary>
154 /// 健康师业绩 160 /// 健康师业绩
155 /// </summary> 161 /// </summary>
156 public List<LqKdJksyjInfoOutput> lqKdJksyjList { get; set; } 162 public List<LqKdJksyjInfoOutput> lqKdJksyjList { get; set; }
@@ -165,5 +171,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb @@ -165,5 +171,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
165 /// </summary> 171 /// </summary>
166 public List<LqKdPxmxInfoOutput> lqKdPxmxList { get; set; } 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,5 +141,15 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
141 /// 是否有效 141 /// 是否有效
142 /// </summary> 142 /// </summary>
143 public int IsEffective { get; set; } 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,126 +23,131 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
23 /// 开单编号 23 /// 开单编号
24 /// </summary> 24 /// </summary>
25 public string id { get; set; } 25 public string id { get; set; }
26 - 26 +
27 /// <summary> 27 /// <summary>
28 /// 单据门店 28 /// 单据门店
29 /// </summary> 29 /// </summary>
30 public string djmd { get; set; } 30 public string djmd { get; set; }
31 - 31 +
32 /// <summary> 32 /// <summary>
33 /// 金三角 33 /// 金三角
34 /// </summary> 34 /// </summary>
35 public string jsj { get; set; } 35 public string jsj { get; set; }
36 - 36 +
37 /// <summary> 37 /// <summary>
38 /// 开单日期 38 /// 开单日期
39 /// </summary> 39 /// </summary>
40 public string kdrq { get; set; } 40 public string kdrq { get; set; }
41 - 41 +
42 /// <summary> 42 /// <summary>
43 /// 顾客类型 43 /// 顾客类型
44 /// </summary> 44 /// </summary>
45 public string gjlx { get; set; } 45 public string gjlx { get; set; }
46 - 46 +
47 /// <summary> 47 /// <summary>
48 /// 合作机构 48 /// 合作机构
49 /// </summary> 49 /// </summary>
50 public string hgjg { get; set; } 50 public string hgjg { get; set; }
51 - 51 +
52 /// <summary> 52 /// <summary>
53 /// 整单业绩 53 /// 整单业绩
54 /// </summary> 54 /// </summary>
55 public string zdyj { get; set; } 55 public string zdyj { get; set; }
56 - 56 +
57 /// <summary> 57 /// <summary>
58 /// 实付业绩 58 /// 实付业绩
59 /// </summary> 59 /// </summary>
60 public string sfyj { get; set; } 60 public string sfyj { get; set; }
61 - 61 +
62 /// <summary> 62 /// <summary>
63 /// 欠款 63 /// 欠款
64 /// </summary> 64 /// </summary>
65 public string qk { get; set; } 65 public string qk { get; set; }
66 - 66 +
67 /// <summary> 67 /// <summary>
68 /// 储扣方式 68 /// 储扣方式
69 /// </summary> 69 /// </summary>
70 public string ckfs { get; set; } 70 public string ckfs { get; set; }
71 - 71 +
72 /// <summary> 72 /// <summary>
73 /// 付款方式 73 /// 付款方式
74 /// </summary> 74 /// </summary>
75 public string fkfs { get; set; } 75 public string fkfs { get; set; }
76 - 76 +
77 /// <summary> 77 /// <summary>
78 /// 付款医院 78 /// 付款医院
79 /// </summary> 79 /// </summary>
80 public string fkyy { get; set; } 80 public string fkyy { get; set; }
81 - 81 +
82 /// <summary> 82 /// <summary>
83 /// 付款判断 83 /// 付款判断
84 /// </summary> 84 /// </summary>
85 public string fkpd { get; set; } 85 public string fkpd { get; set; }
86 - 86 +
87 /// <summary> 87 /// <summary>
88 /// 客户来源 88 /// 客户来源
89 /// </summary> 89 /// </summary>
90 public string khly { get; set; } 90 public string khly { get; set; }
91 - 91 +
92 /// <summary> 92 /// <summary>
93 /// 推荐人 93 /// 推荐人
94 /// </summary> 94 /// </summary>
95 public string tjr { get; set; } 95 public string tjr { get; set; }
96 - 96 +
97 /// <summary> 97 /// <summary>
98 /// 是否首开订单 98 /// 是否首开订单
99 /// </summary> 99 /// </summary>
100 public string sfskdd { get; set; } 100 public string sfskdd { get; set; }
101 - 101 +
102 /// <summary> 102 /// <summary>
103 /// 简介 103 /// 简介
104 /// </summary> 104 /// </summary>
105 public string jj { get; set; } 105 public string jj { get; set; }
106 - 106 +
107 /// <summary> 107 /// <summary>
108 /// 备注 108 /// 备注
109 /// </summary> 109 /// </summary>
110 public string bz { get; set; } 110 public string bz { get; set; }
111 - 111 +
112 /// <summary> 112 /// <summary>
113 /// 开单会员 113 /// 开单会员
114 /// </summary> 114 /// </summary>
115 public string kdhy { get; set; } 115 public string kdhy { get; set; }
116 - 116 +
117 /// <summary> 117 /// <summary>
118 /// 开单会员名称 118 /// 开单会员名称
119 /// </summary> 119 /// </summary>
120 public string kdhyc { get; set; } 120 public string kdhyc { get; set; }
121 - 121 +
122 /// <summary> 122 /// <summary>
123 /// 开单会员手机号 123 /// 开单会员手机号
124 /// </summary> 124 /// </summary>
125 public string kdhysjh { get; set; } 125 public string kdhysjh { get; set; }
126 - 126 +
127 /// <summary> 127 /// <summary>
128 /// 健康师业绩 128 /// 健康师业绩
129 /// </summary> 129 /// </summary>
130 public string jksyj { get; set; } 130 public string jksyj { get; set; }
131 - 131 +
132 /// <summary> 132 /// <summary>
133 /// 科技部老师业绩 133 /// 科技部老师业绩
134 /// </summary> 134 /// </summary>
135 public string kjblsyj { get; set; } 135 public string kjblsyj { get; set; }
136 - 136 +
137 /// <summary> 137 /// <summary>
138 /// 品项信息 138 /// 品项信息
139 /// </summary> 139 /// </summary>
140 public string pxxx { get; set; } 140 public string pxxx { get; set; }
141 - 141 +
142 /// <summary> 142 /// <summary>
143 /// 方案其他 143 /// 方案其他
144 /// </summary> 144 /// </summary>
145 public string F_FIleUrl { get; set; } 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,6 +12,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
12 /// 开单编号 12 /// 开单编号
13 /// </summary> 13 /// </summary>
14 public string id { get; set; } 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,40 +12,45 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
12 /// 业绩编号 12 /// 业绩编号
13 /// </summary> 13 /// </summary>
14 public string id { get; set; } 14 public string id { get; set; }
15 - 15 +
16 /// <summary> 16 /// <summary>
17 /// 关联开单编号 17 /// 关联开单编号
18 /// </summary> 18 /// </summary>
19 public string glkdbh { get; set; } 19 public string glkdbh { get; set; }
20 - 20 +
21 /// <summary> 21 /// <summary>
22 /// 关联开单品项ID 22 /// 关联开单品项ID
23 /// </summary> 23 /// </summary>
24 public string kdpxid { get; set; } 24 public string kdpxid { get; set; }
25 - 25 +
26 /// <summary> 26 /// <summary>
27 /// 科技部老师ID 27 /// 科技部老师ID
28 /// </summary> 28 /// </summary>
29 public string kjbls { get; set; } 29 public string kjbls { get; set; }
30 - 30 +
31 /// <summary> 31 /// <summary>
32 /// 科技部老师姓名 32 /// 科技部老师姓名
33 /// </summary> 33 /// </summary>
34 public string kjblsxm { get; set; } 34 public string kjblsxm { get; set; }
35 - 35 +
36 /// <summary> 36 /// <summary>
37 /// 科技部老师账号 37 /// 科技部老师账号
38 /// </summary> 38 /// </summary>
39 public string kjblszh { get; set; } 39 public string kjblszh { get; set; }
40 - 40 +
41 /// <summary> 41 /// <summary>
42 /// 科技部老师业绩 42 /// 科技部老师业绩
43 /// </summary> 43 /// </summary>
44 public string kjblsyj { get; set; } 44 public string kjblsyj { get; set; }
45 - 45 +
46 /// <summary> 46 /// <summary>
47 /// 业绩时间 47 /// 业绩时间
48 /// </summary> 48 /// </summary>
49 public DateTime? yjsj { get; set; } 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 using System; 1 using System;
2 using System.Collections.Generic; 2 using System.Collections.Generic;
  3 +using NCC.Extend.Entitys.Dto.LqKdDeductinfo;
3 4
4 namespace NCC.Extend.Entitys.Dto.LqKdKdjlb 5 namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
5 { 6 {
@@ -75,6 +76,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb @@ -75,6 +76,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
75 public string remark { get; set; } 76 public string remark { get; set; }
76 77
77 /// <summary> 78 /// <summary>
  79 + /// 是否有效
  80 + /// </summary>
  81 + public int IsEffective { get; set; }
  82 +
  83 + /// <summary>
78 /// 健康师业绩列表 84 /// 健康师业绩列表
79 /// </summary> 85 /// </summary>
80 public List<LqKdJksyjInfoOutput> lqKdJksyjList { get; set; } 86 public List<LqKdJksyjInfoOutput> lqKdJksyjList { get; set; }
@@ -83,5 +89,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb @@ -83,5 +89,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
83 /// 科技部老师业绩列表 89 /// 科技部老师业绩列表
84 /// </summary> 90 /// </summary>
85 public List<LqKdKjbsyjInfoOutput> lqKdKjbsyjList { get; set; } 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 /// <summary> 5 /// <summary>
7 - /// 营销活动方案列表查询输入 6 + /// 套餐品项明细列表输出
8 /// </summary> 7 /// </summary>
9 - public class LqYxhdfaListQueryInput : PageInputBase 8 + public class LqPackageItemDetailListOutput
10 { 9 {
11 /// <summary> 10 /// <summary>
12 - /// 选择导出数据key 11 + /// 明细ID
13 /// </summary> 12 /// </summary>
14 - public string selectKey { get; set; } 13 + public string Id { get; set; }
15 14
16 /// <summary> 15 /// <summary>
17 - /// 16 + /// 套餐ID
18 /// </summary> 17 /// </summary>
19 - public int dataType { get; set; }  
20 - 18 + public string PackageId { get; set; }
21 19
22 /// <summary> 20 /// <summary>
23 - /// 方案编号 21 + /// 品项ID
24 /// </summary> 22 /// </summary>
25 - public string id { get; set; }  
26 - 23 + public string ItemId { get; set; }
  24 +
27 /// <summary> 25 /// <summary>
28 - /// 营销活动编号 26 + /// 品项数量
29 /// </summary> 27 /// </summary>
30 - public string yxhdbh { get; set; }  
31 - 28 + public int ItemQuantity { get; set; }
  29 +
32 /// <summary> 30 /// <summary>
33 - /// 活动名称 31 + /// 品项金额
34 /// </summary> 32 /// </summary>
35 - public string hdmc { get; set; }  
36 - 33 + public decimal ItemAmount { get; set; }
  34 +
37 /// <summary> 35 /// <summary>
38 - /// 张数奖 36 + /// 排序
39 /// </summary> 37 /// </summary>
40 - public string zsj { get; set; }  
41 - 38 + public int SortOrder { get; set; }
  39 +
42 /// <summary> 40 /// <summary>
43 - /// 金额奖 41 + /// 创建时间
44 /// </summary> 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 /// <summary> 5 /// <summary>
6 - /// 营销活动方案输出参数 6 + /// 套餐品项明细列表查询输入
7 /// </summary> 7 /// </summary>
8 - public class LqYxhdfaInfoOutput 8 + public class LqPackageItemDetailListQueryInput
9 { 9 {
10 /// <summary> 10 /// <summary>
11 - /// 方案编号 11 + /// 套餐ID
12 /// </summary> 12 /// </summary>
13 - public string id { get; set; } 13 + public string PackageId { get; set; }
14 14
15 /// <summary> 15 /// <summary>
16 - /// 营销活动编号 16 + /// 品项ID
17 /// </summary> 17 /// </summary>
18 - public string yxhdbh { get; set; } 18 + public string ItemId { get; set; }
19 19
20 /// <summary> 20 /// <summary>
21 - /// 活动名称 21 + /// 是否有效
22 /// </summary> 22 /// </summary>
23 - public string hdmc { get; set; } 23 + public int? IsEffective { get; set; }
24 24
25 /// <summary> 25 /// <summary>
26 - /// 张数奖 26 + /// 创建时间开始
27 /// </summary> 27 /// </summary>
28 - public string zsj { get; set; } 28 + public DateTime? CreateTimeStart { get; set; }
29 29
30 /// <summary> 30 /// <summary>
31 - /// 金额奖 31 + /// 创建时间结束
32 /// </summary> 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,16 +23,16 @@ namespace NCC.Extend.Entitys.Dto.LqSkzh
23 /// 收款途径编号 23 /// 收款途径编号
24 /// </summary> 24 /// </summary>
25 public string id { get; set; } 25 public string id { get; set; }
26 - 26 +
27 /// <summary> 27 /// <summary>
28 /// 收款途径 28 /// 收款途径
29 /// </summary> 29 /// </summary>
30 public string sktj { get; set; } 30 public string sktj { get; set; }
31 - 31 +
32 /// <summary> 32 /// <summary>
33 /// 收款账号 33 /// 收款账号
34 /// </summary> 34 /// </summary>
35 public string skzh { get; set; } 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,66 +11,71 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk
11 /// 耗卡编号 11 /// 耗卡编号
12 /// </summary> 12 /// </summary>
13 public string id { get; set; } 13 public string id { get; set; }
14 - 14 +
15 /// <summary> 15 /// <summary>
16 /// 门店 16 /// 门店
17 /// </summary> 17 /// </summary>
18 public string md { get; set; } 18 public string md { get; set; }
19 - 19 +
20 /// <summary> 20 /// <summary>
21 /// 门店编号 21 /// 门店编号
22 /// </summary> 22 /// </summary>
23 public string mdbh { get; set; } 23 public string mdbh { get; set; }
24 - 24 +
25 /// <summary> 25 /// <summary>
26 /// 门店名称 26 /// 门店名称
27 /// </summary> 27 /// </summary>
28 public string mdmc { get; set; } 28 public string mdmc { get; set; }
29 - 29 +
30 /// <summary> 30 /// <summary>
31 /// 会员 31 /// 会员
32 /// </summary> 32 /// </summary>
33 public string hy { get; set; } 33 public string hy { get; set; }
34 - 34 +
35 /// <summary> 35 /// <summary>
36 /// 会员账号 36 /// 会员账号
37 /// </summary> 37 /// </summary>
38 public string hyzh { get; set; } 38 public string hyzh { get; set; }
39 - 39 +
  40 + /// <summary>
  41 + /// 会员手机号
  42 + /// </summary>
  43 + public string memberPhone { get; set; }
  44 +
40 /// <summary> 45 /// <summary>
41 /// 会员名称 46 /// 会员名称
42 /// </summary> 47 /// </summary>
43 public string hymc { get; set; } 48 public string hymc { get; set; }
44 - 49 +
45 /// <summary> 50 /// <summary>
46 /// 顾客类型 51 /// 顾客类型
47 /// </summary> 52 /// </summary>
48 public string gklx { get; set; } 53 public string gklx { get; set; }
49 - 54 +
50 /// <summary> 55 /// <summary>
51 /// 消费金额 56 /// 消费金额
52 /// </summary> 57 /// </summary>
53 public string xfje { get; set; } 58 public string xfje { get; set; }
54 - 59 +
55 /// <summary> 60 /// <summary>
56 /// 手工费用 61 /// 手工费用
57 /// </summary> 62 /// </summary>
58 public string sgfy { get; set; } 63 public string sgfy { get; set; }
59 - 64 +
60 /// <summary> 65 /// <summary>
61 /// 是否有科技部 66 /// 是否有科技部
62 /// </summary> 67 /// </summary>
63 public string sfykjb { get; set; } 68 public string sfykjb { get; set; }
64 - 69 +
65 /// <summary> 70 /// <summary>
66 /// 耗卡时间 71 /// 耗卡时间
67 /// </summary> 72 /// </summary>
68 public DateTime? hksj { get; set; } 73 public DateTime? hksj { get; set; }
69 - 74 +
70 /// <summary> 75 /// <summary>
71 /// 操作人员 76 /// 操作人员
72 /// </summary> 77 /// </summary>
73 public string czry { get; set; } 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,7 +65,7 @@
65 - `lq_tkjlb/` - 拓客记录表 65 - `lq_tkjlb/` - 拓客记录表
66 - (已删除) `lq_tk_xsc/` - 拓客记录表 66 - (已删除) `lq_tk_xsc/` - 拓客记录表
67 - `lq_yaoyjl/` - 邀约记录 67 - `lq_yaoyjl/` - 邀约记录
68 -- `lq_yxhdfa/` - 营销活动方案 68 +- (已删除) `lq_yxhdfa/` - 营销活动方案
69 - `lq_yyjl/` - 预约记录 69 - `lq_yyjl/` - 预约记录
70 - `lq_cpxx/` - 产品资料 70 - `lq_cpxx/` - 产品资料
71 - `lq_gz/` - 工资全字段 71 - `lq_gz/` - 工资全字段
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_hytk/LqHytkHytkEntity.cs
1 using NCC.Common.Const; 1 using NCC.Common.Const;
  2 +using NCC.Extend.Entitys.Enum;
2 using SqlSugar; 3 using SqlSugar;
3 using System; 4 using System;
4 5
@@ -16,127 +17,133 @@ namespace NCC.Extend.Entitys.lq_hytk_hytk @@ -16,127 +17,133 @@ namespace NCC.Extend.Entitys.lq_hytk_hytk
16 /// </summary> 17 /// </summary>
17 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)] 18 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18 public string Id { get; set; } 19 public string Id { get; set; }
19 - 20 +
20 /// <summary> 21 /// <summary>
21 /// 门店 22 /// 门店
22 /// </summary> 23 /// </summary>
23 - [SugarColumn(ColumnName = "md")] 24 + [SugarColumn(ColumnName = "md")]
24 public string Md { get; set; } 25 public string Md { get; set; }
25 - 26 +
26 /// <summary> 27 /// <summary>
27 /// 门店编号 28 /// 门店编号
28 /// </summary> 29 /// </summary>
29 - [SugarColumn(ColumnName = "mdbh")] 30 + [SugarColumn(ColumnName = "mdbh")]
30 public string Mdbh { get; set; } 31 public string Mdbh { get; set; }
31 - 32 +
32 /// <summary> 33 /// <summary>
33 /// 门店名称 34 /// 门店名称
34 /// </summary> 35 /// </summary>
35 - [SugarColumn(ColumnName = "mdmc")] 36 + [SugarColumn(ColumnName = "mdmc")]
36 public string Mdmc { get; set; } 37 public string Mdmc { get; set; }
37 - 38 +
38 /// <summary> 39 /// <summary>
39 /// 会员 40 /// 会员
40 /// </summary> 41 /// </summary>
41 - [SugarColumn(ColumnName = "hy")] 42 + [SugarColumn(ColumnName = "hy")]
42 public string Hy { get; set; } 43 public string Hy { get; set; }
43 - 44 +
44 /// <summary> 45 /// <summary>
45 /// 会员姓名 46 /// 会员姓名
46 /// </summary> 47 /// </summary>
47 - [SugarColumn(ColumnName = "hymc")] 48 + [SugarColumn(ColumnName = "hymc")]
48 public string Hymc { get; set; } 49 public string Hymc { get; set; }
49 - 50 +
50 /// <summary> 51 /// <summary>
51 /// 会员账号 52 /// 会员账号
52 /// </summary> 53 /// </summary>
53 - [SugarColumn(ColumnName = "hyzh")] 54 + [SugarColumn(ColumnName = "hyzh")]
54 public string Hyzh { get; set; } 55 public string Hyzh { get; set; }
55 - 56 +
56 /// <summary> 57 /// <summary>
57 /// 顾客类型 58 /// 顾客类型
58 /// </summary> 59 /// </summary>
59 - [SugarColumn(ColumnName = "gklx")] 60 + [SugarColumn(ColumnName = "gklx")]
60 public string Gklx { get; set; } 61 public string Gklx { get; set; }
61 - 62 +
62 /// <summary> 63 /// <summary>
63 /// 退卡总金额 64 /// 退卡总金额
64 /// </summary> 65 /// </summary>
65 - [SugarColumn(ColumnName = "tkje")] 66 + [SugarColumn(ColumnName = "tkje")]
66 public decimal? Tkje { get; set; } 67 public decimal? Tkje { get; set; }
67 - 68 +
68 /// <summary> 69 /// <summary>
69 /// 手工费用 70 /// 手工费用
70 /// </summary> 71 /// </summary>
71 - [SugarColumn(ColumnName = "sgfy")] 72 + [SugarColumn(ColumnName = "sgfy")]
72 public decimal? Sgfy { get; set; } 73 public decimal? Sgfy { get; set; }
73 - 74 +
74 /// <summary> 75 /// <summary>
75 /// 备注 76 /// 备注
76 /// </summary> 77 /// </summary>
77 - [SugarColumn(ColumnName = "bz")] 78 + [SugarColumn(ColumnName = "bz")]
78 public string Bz { get; set; } 79 public string Bz { get; set; }
79 - 80 +
80 /// <summary> 81 /// <summary>
81 /// 退卡时间 82 /// 退卡时间
82 /// </summary> 83 /// </summary>
83 - [SugarColumn(ColumnName = "tksj")] 84 + [SugarColumn(ColumnName = "tksj")]
84 public DateTime? Tksj { get; set; } 85 public DateTime? Tksj { get; set; }
85 - 86 +
86 /// <summary> 87 /// <summary>
87 /// 操作人员 88 /// 操作人员
88 /// </summary> 89 /// </summary>
89 - [SugarColumn(ColumnName = "czry")] 90 + [SugarColumn(ColumnName = "czry")]
90 public string Czry { get; set; } 91 public string Czry { get; set; }
91 - 92 +
92 /// <summary> 93 /// <summary>
93 /// 退卡状态 94 /// 退卡状态
94 /// </summary> 95 /// </summary>
95 - [SugarColumn(ColumnName = "tkzt")] 96 + [SugarColumn(ColumnName = "tkzt")]
96 public string Tkzt { get; set; } 97 public string Tkzt { get; set; }
97 - 98 +
98 /// <summary> 99 /// <summary>
99 /// 退卡原因 100 /// 退卡原因
100 /// </summary> 101 /// </summary>
101 - [SugarColumn(ColumnName = "tkyy")] 102 + [SugarColumn(ColumnName = "tkyy")]
102 public string Tkyy { get; set; } 103 public string Tkyy { get; set; }
103 104
104 105
105 /// <summary> 106 /// <summary>
106 /// 退卡附件 107 /// 退卡附件
107 /// </summary> 108 /// </summary>
108 - [SugarColumn(ColumnName = "F_FileUrl")] 109 + [SugarColumn(ColumnName = "F_FileUrl")]
109 public string FileUrl { get; set; } 110 public string FileUrl { get; set; }
110 - 111 +
111 /// <summary> 112 /// <summary>
112 /// 创建时间 113 /// 创建时间
113 /// </summary> 114 /// </summary>
114 - [SugarColumn(ColumnName = "F_CreateTime")] 115 + [SugarColumn(ColumnName = "F_CreateTime")]
115 public DateTime? F_CreateTime { get; set; } 116 public DateTime? F_CreateTime { get; set; }
116 - 117 +
117 /// <summary> 118 /// <summary>
118 /// 创建用户 119 /// 创建用户
119 /// </summary> 120 /// </summary>
120 - [SugarColumn(ColumnName = "F_CreateUser")] 121 + [SugarColumn(ColumnName = "F_CreateUser")]
121 public string F_CreateUser { get; set; } 122 public string F_CreateUser { get; set; }
122 - 123 +
123 /// <summary> 124 /// <summary>
124 /// 修改时间 125 /// 修改时间
125 /// </summary> 126 /// </summary>
126 - [SugarColumn(ColumnName = "F_ModifyTime")] 127 + [SugarColumn(ColumnName = "F_ModifyTime")]
127 public DateTime? F_ModifyTime { get; set; } 128 public DateTime? F_ModifyTime { get; set; }
128 - 129 +
129 /// <summary> 130 /// <summary>
130 /// 修改用户 131 /// 修改用户
131 /// </summary> 132 /// </summary>
132 - [SugarColumn(ColumnName = "F_ModifyUser")] 133 + [SugarColumn(ColumnName = "F_ModifyUser")]
133 public string F_ModifyUser { get; set; } 134 public string F_ModifyUser { get; set; }
134 - 135 +
135 /// <summary> 136 /// <summary>
136 /// 删除标记 137 /// 删除标记
137 /// </summary> 138 /// </summary>
138 - [SugarColumn(ColumnName = "F_DeleteMark")] 139 + [SugarColumn(ColumnName = "F_DeleteMark")]
139 public int? F_DeleteMark { get; set; } 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 \ No newline at end of file 150 \ No newline at end of file
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs
1 using System; 1 using System;
2 using NCC.Common.Const; 2 using NCC.Common.Const;
  3 +using NCC.Extend.Entitys.Enum;
3 using SqlSugar; 4 using SqlSugar;
4 5
5 namespace NCC.Extend.Entitys.lq_hytk_jksyj 6 namespace NCC.Extend.Entitys.lq_hytk_jksyj
@@ -112,5 +113,11 @@ namespace NCC.Extend.Entitys.lq_hytk_jksyj @@ -112,5 +113,11 @@ namespace NCC.Extend.Entitys.lq_hytk_jksyj
112 /// </summary> 113 /// </summary>
113 [SugarColumn(ColumnName = "F_CardReturn")] 114 [SugarColumn(ColumnName = "F_CardReturn")]
114 public string CardReturn { get; set; } 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 using System; 1 using System;
2 using NCC.Common.Const; 2 using NCC.Common.Const;
  3 +using NCC.Extend.Entitys.Enum;
3 using SqlSugar; 4 using SqlSugar;
4 5
5 namespace NCC.Extend.Entitys.lq_hytk_kjbsyj 6 namespace NCC.Extend.Entitys.lq_hytk_kjbsyj
@@ -106,5 +107,11 @@ namespace NCC.Extend.Entitys.lq_hytk_kjbsyj @@ -106,5 +107,11 @@ namespace NCC.Extend.Entitys.lq_hytk_kjbsyj
106 /// </summary> 107 /// </summary>
107 [SugarColumn(ColumnName = "F_CardReturn")] 108 [SugarColumn(ColumnName = "F_CardReturn")]
108 public string CardReturn { get; set; } 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,5 +114,11 @@ namespace NCC.Extend.Entitys.lq_hytk_mx
114 /// </summary> 114 /// </summary>
115 [SugarColumn(ColumnName = "F_DeleteMark")] 115 [SugarColumn(ColumnName = "F_DeleteMark")]
116 public int? DeleteMark { get; set; } 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,5 +70,11 @@ namespace NCC.Extend.Entitys.lq_kd_jksyj
70 /// </summary> 70 /// </summary>
71 [SugarColumn(ColumnName = "F_IsEffective")] 71 [SugarColumn(ColumnName = "F_IsEffective")]
72 public int IsEffective { get; set; } = 1; 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,5 +217,17 @@ namespace NCC.Extend.Entitys.lq_kd_kdjlb
217 [SugarColumn(ColumnName = "F_CancelRefRemarks")] 217 [SugarColumn(ColumnName = "F_CancelRefRemarks")]
218 public string CancelRefRemarks { get; set; } 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,5 +70,11 @@ namespace NCC.Extend.Entitys.lq_kd_kjbsyj
70 /// </summary> 70 /// </summary>
71 [SugarColumn(ColumnName = "F_IsEffective")] 71 [SugarColumn(ColumnName = "F_IsEffective")]
72 public int IsEffective { get; set; } = 1; 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,5 +101,11 @@ namespace NCC.Extend.Entitys.lq_kd_pxmx
101 /// </summary> 101 /// </summary>
102 [SugarColumn(ColumnName = "F_Remark")] 102 [SugarColumn(ColumnName = "F_Remark")]
103 public string Remark { get; set; } 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 using NCC.Common.Const; 1 using NCC.Common.Const;
3 using SqlSugar; 2 using SqlSugar;
  3 +using System;
4 4
5 namespace NCC.Extend.Entitys.lq_kd_qkbj 5 namespace NCC.Extend.Entitys.lq_kd_qkbj
6 { 6 {
@@ -12,13 +12,13 @@ namespace NCC.Extend.Entitys.lq_kd_qkbj @@ -12,13 +12,13 @@ namespace NCC.Extend.Entitys.lq_kd_qkbj
12 public class LqKdQkbjEntity 12 public class LqKdQkbjEntity
13 { 13 {
14 /// <summary> 14 /// <summary>
15 - /// 主键 15 + /// 补缴记录ID
16 /// </summary> 16 /// </summary>
17 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)] 17 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18 public string Id { get; set; } 18 public string Id { get; set; }
19 19
20 /// <summary> 20 /// <summary>
21 - /// 开单ID 21 + /// 开单记录ID
22 /// </summary> 22 /// </summary>
23 [SugarColumn(ColumnName = "F_BillingId")] 23 [SugarColumn(ColumnName = "F_BillingId")]
24 public string BillingId { get; set; } 24 public string BillingId { get; set; }
@@ -30,40 +30,28 @@ namespace NCC.Extend.Entitys.lq_kd_qkbj @@ -30,40 +30,28 @@ namespace NCC.Extend.Entitys.lq_kd_qkbj
30 public decimal PaymentAmount { get; set; } 30 public decimal PaymentAmount { get; set; }
31 31
32 /// <summary> 32 /// <summary>
33 - /// 补缴方式 33 + /// 付款方式
34 /// </summary> 34 /// </summary>
35 [SugarColumn(ColumnName = "F_PaymentMethod")] 35 [SugarColumn(ColumnName = "F_PaymentMethod")]
36 public string PaymentMethod { get; set; } 36 public string PaymentMethod { get; set; }
37 37
38 /// <summary> 38 /// <summary>
39 - /// 补缴时间 39 + /// 付款日期
40 /// </summary> 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 /// <summary> 44 /// <summary>
45 - /// 补缴操作人 45 + /// 收款人员
46 /// </summary> 46 /// </summary>
47 [SugarColumn(ColumnName = "F_PaymentUser")] 47 [SugarColumn(ColumnName = "F_PaymentUser")]
48 public string PaymentUser { get; set; } 48 public string PaymentUser { get; set; }
49 49
50 /// <summary> 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 /// </summary> 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 /// <summary> 56 /// <summary>
69 /// 创建时间 57 /// 创建时间
@@ -83,4 +71,4 @@ namespace NCC.Extend.Entitys.lq_kd_qkbj @@ -83,4 +71,4 @@ namespace NCC.Extend.Entitys.lq_kd_qkbj
83 [SugarColumn(ColumnName = "F_IsEffective")] 71 [SugarColumn(ColumnName = "F_IsEffective")]
84 public int IsEffective { get; set; } = 1; 72 public int IsEffective { get; set; } = 1;
85 } 73 }
86 -} 74 -}
  75 +}
87 \ No newline at end of file 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,6 +48,12 @@ namespace NCC.Extend.Entitys.lq_xh_hyhk
48 public string Hyzh { get; set; } 48 public string Hyzh { get; set; }
49 49
50 /// <summary> 50 /// <summary>
  51 + /// 会员手机号
  52 + /// </summary>
  53 + [SugarColumn(ColumnName = "F_MemberPhone")]
  54 + public string MemberPhone { get; set; }
  55 +
  56 + /// <summary>
51 /// 会员名称 57 /// 会员名称
52 /// </summary> 58 /// </summary>
53 [SugarColumn(ColumnName = "hymc")] 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 \ No newline at end of file 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 \ No newline at end of file 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 /// <summary> 6 /// <summary>
7 - /// 营销活动方案更新输入参数 7 + /// 营销活动服务接口
8 /// </summary> 8 /// </summary>
9 - public class LqYxhdfaUpInput : LqYxhdfaCrInput 9 + public interface ILqPackageInfoService
10 { 10 {
11 /// <summary> 11 /// <summary>
12 - /// 方案编号 12 + /// 添加营销活动
13 /// </summary> 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,6 +19,7 @@ using NCC.Extend.Entitys.Dto.LqHytkHytk;
19 using NCC.Extend.Entitys.Dto.LqHytkJksyj; 19 using NCC.Extend.Entitys.Dto.LqHytkJksyj;
20 using NCC.Extend.Entitys.Dto.LqHytkKjbsyj; 20 using NCC.Extend.Entitys.Dto.LqHytkKjbsyj;
21 using NCC.Extend.Entitys.Dto.LqHytkMx; 21 using NCC.Extend.Entitys.Dto.LqHytkMx;
  22 +using NCC.Extend.Entitys.Enum;
22 using NCC.Extend.Entitys.lq_hytk_hytk; 23 using NCC.Extend.Entitys.lq_hytk_hytk;
23 using NCC.Extend.Entitys.lq_hytk_jksyj; 24 using NCC.Extend.Entitys.lq_hytk_jksyj;
24 using NCC.Extend.Entitys.lq_hytk_kjbsyj; 25 using NCC.Extend.Entitys.lq_hytk_kjbsyj;
@@ -113,6 +114,7 @@ namespace NCC.Extend.LqHytkHytk @@ -113,6 +114,7 @@ namespace NCC.Extend.LqHytkHytk
113 tksj = it.Tksj, 114 tksj = it.Tksj,
114 czry = it.Czry, 115 czry = it.Czry,
115 fileUrl = it.FileUrl, 116 fileUrl = it.FileUrl,
  117 + isEffective = it.IsEffective,
116 }) 118 })
117 .MergeTable() 119 .MergeTable()
118 .OrderBy(sidx + " " + input.sort) 120 .OrderBy(sidx + " " + input.sort)
@@ -199,6 +201,7 @@ namespace NCC.Extend.LqHytkHytk @@ -199,6 +201,7 @@ namespace NCC.Extend.LqHytkHytk
199 entity.F_CreateTime = DateTime.Now; 201 entity.F_CreateTime = DateTime.Now;
200 entity.F_CreateUser = userInfo.userId; 202 entity.F_CreateUser = userInfo.userId;
201 entity.F_DeleteMark = 0; 203 entity.F_DeleteMark = 0;
  204 + entity.IsEffective = StatusEnum.有效.GetHashCode();
202 entity.Czry = userInfo.userId; 205 entity.Czry = userInfo.userId;
203 206
204 try 207 try
@@ -236,6 +239,7 @@ namespace NCC.Extend.LqHytkHytk @@ -236,6 +239,7 @@ namespace NCC.Extend.LqHytkHytk
236 IsEnabled = item.F_IsEnabled ?? 1, 239 IsEnabled = item.F_IsEnabled ?? 1,
237 SourceType = item.F_SourceType, 240 SourceType = item.F_SourceType,
238 TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)), 241 TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)),
  242 + IsEffective = StatusEnum.有效.GetHashCode(),
239 }; 243 };
240 allMxEntities.Add(lqHytkMxEntity); 244 allMxEntities.Add(lqHytkMxEntity);
241 245
@@ -244,25 +248,25 @@ namespace NCC.Extend.LqHytkHytk @@ -244,25 +248,25 @@ namespace NCC.Extend.LqHytkHytk
244 { 248 {
245 foreach (var ijks_tem in item.lqHytkJksyjList) 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,6 +293,7 @@ namespace NCC.Extend.LqHytkHytk
289 F_CreateUser = userInfo.userId, 293 F_CreateUser = userInfo.userId,
290 F_DeleteMark = 0, 294 F_DeleteMark = 0,
291 CardReturn = lqHytkMxEntity.Id, 295 CardReturn = lqHytkMxEntity.Id,
  296 + IsEffective = StatusEnum.有效.GetHashCode(),
292 } 297 }
293 ); 298 );
294 } 299 }
@@ -474,7 +479,7 @@ namespace NCC.Extend.LqHytkHytk @@ -474,7 +479,7 @@ namespace NCC.Extend.LqHytkHytk
474 } 479 }
475 #endregion 480 #endregion
476 481
477 - #region 删除退卡信息 482 + #region 标记退卡信息为无效
478 /// <summary> 483 /// <summary>
479 /// 删除退卡信息(逻辑删除) 484 /// 删除退卡信息(逻辑删除)
480 /// </summary> 485 /// </summary>
@@ -486,8 +491,11 @@ namespace NCC.Extend.LqHytkHytk @@ -486,8 +491,11 @@ namespace NCC.Extend.LqHytkHytk
486 var entity = await _db.Queryable<LqHytkHytkEntity>().FirstAsync(p => p.Id == id); 491 var entity = await _db.Queryable<LqHytkHytkEntity>().FirstAsync(p => p.Id == id);
487 if (entity != null) 492 if (entity != null)
488 { 493 {
489 - entity.F_DeleteMark = 1; 494 + entity.IsEffective = StatusEnum.无效.GetHashCode();
490 await _lqHytkHytkRepository.UpdateAsync(entity); 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 #endregion 501 #endregion
netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
@@ -17,15 +17,19 @@ using NCC.DataEncryption; @@ -17,15 +17,19 @@ using NCC.DataEncryption;
17 using NCC.Dependency; 17 using NCC.Dependency;
18 using NCC.DynamicApiController; 18 using NCC.DynamicApiController;
19 using NCC.Extend.Entitys.Dto.Common; 19 using NCC.Extend.Entitys.Dto.Common;
  20 +using NCC.Extend.Entitys.Dto.LqKdDeductinfo;
20 using NCC.Extend.Entitys.Dto.LqKdKdjlb; 21 using NCC.Extend.Entitys.Dto.LqKdKdjlb;
21 using NCC.Extend.Entitys.Enum; 22 using NCC.Extend.Entitys.Enum;
  23 +using NCC.Extend.Entitys.lq_hytk_mx;
22 using NCC.Extend.Entitys.lq_jinsanjiao_user; 24 using NCC.Extend.Entitys.lq_jinsanjiao_user;
23 using NCC.Extend.Entitys.lq_kd_deductinfo; 25 using NCC.Extend.Entitys.lq_kd_deductinfo;
24 using NCC.Extend.Entitys.lq_kd_jksyj; 26 using NCC.Extend.Entitys.lq_kd_jksyj;
25 using NCC.Extend.Entitys.lq_kd_kdjlb; 27 using NCC.Extend.Entitys.lq_kd_kdjlb;
26 using NCC.Extend.Entitys.lq_kd_kjbsyj; 28 using NCC.Extend.Entitys.lq_kd_kjbsyj;
27 using NCC.Extend.Entitys.lq_kd_pxmx; 29 using NCC.Extend.Entitys.lq_kd_pxmx;
  30 +using NCC.Extend.Entitys.lq_kd_qkbj;
28 using NCC.Extend.Entitys.lq_khxx; 31 using NCC.Extend.Entitys.lq_khxx;
  32 +using NCC.Extend.Entitys.lq_xh_pxmx;
29 using NCC.Extend.Entitys.lq_xmzl; 33 using NCC.Extend.Entitys.lq_xmzl;
30 using NCC.Extend.Interfaces.LqKdKdjlb; 34 using NCC.Extend.Interfaces.LqKdKdjlb;
31 using NCC.Extend.Utils; 35 using NCC.Extend.Utils;
@@ -118,6 +122,9 @@ namespace NCC.Extend.LqKdKdjlb @@ -118,6 +122,9 @@ namespace NCC.Extend.LqKdKdjlb
118 // 4. 查询科技部老师业绩列表 122 // 4. 查询科技部老师业绩列表
119 var lqKdKjbsyjList = await _db.Queryable<LqKdKjbsyjEntity>().Where(w => w.Glkdbh == entity.Id).ToListAsync(); 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 // 5. 构建品项明细输出,每个品项关联对应的业绩信息 128 // 5. 构建品项明细输出,每个品项关联对应的业绩信息
122 var pxmxOutputList = new List<LqKdPxmxInfoOutput>(); 129 var pxmxOutputList = new List<LqKdPxmxInfoOutput>();
123 foreach (var pxmx in lqKdPxmxList) 130 foreach (var pxmx in lqKdPxmxList)
@@ -137,6 +144,7 @@ namespace NCC.Extend.LqKdKdjlb @@ -137,6 +144,7 @@ namespace NCC.Extend.LqKdKdjlb
137 totalPrice = pxmx.TotalPrice, 144 totalPrice = pxmx.TotalPrice,
138 actualPrice = pxmx.ActualPrice, 145 actualPrice = pxmx.ActualPrice,
139 remark = pxmx.Remark, 146 remark = pxmx.Remark,
  147 + IsEffective = pxmx.IsEffective,
140 }; 148 };
141 149
142 // 关联该品项的健康师业绩 150 // 关联该品项的健康师业绩
@@ -147,6 +155,7 @@ namespace NCC.Extend.LqKdKdjlb @@ -147,6 +155,7 @@ namespace NCC.Extend.LqKdKdjlb
147 var kjbsyjForPx = lqKdKjbsyjList.Where(k => k.Kdpxid == pxmx.Id).ToList(); 155 var kjbsyjForPx = lqKdKjbsyjList.Where(k => k.Kdpxid == pxmx.Id).ToList();
148 pxmxOutput.lqKdKjbsyjList = kjbsyjForPx.Adapt<List<LqKdKjbsyjInfoOutput>>(); 156 pxmxOutput.lqKdKjbsyjList = kjbsyjForPx.Adapt<List<LqKdKjbsyjInfoOutput>>();
149 157
  158 +
150 pxmxOutputList.Add(pxmxOutput); 159 pxmxOutputList.Add(pxmxOutput);
151 } 160 }
152 161
@@ -156,6 +165,8 @@ namespace NCC.Extend.LqKdKdjlb @@ -156,6 +165,8 @@ namespace NCC.Extend.LqKdKdjlb
156 // 7. 设置全局业绩列表(用于兼容性,但主要使用品项关联的业绩) 165 // 7. 设置全局业绩列表(用于兼容性,但主要使用品项关联的业绩)
157 output.lqKdJksyjList = lqKdJksyjList.Adapt<List<LqKdJksyjInfoOutput>>(); 166 output.lqKdJksyjList = lqKdJksyjList.Adapt<List<LqKdJksyjInfoOutput>>();
158 output.lqKdKjbsyjList = lqKdKjbsyjList.Adapt<List<LqKdKjbsyjInfoOutput>>(); 167 output.lqKdKjbsyjList = lqKdKjbsyjList.Adapt<List<LqKdKjbsyjInfoOutput>>();
  168 + // 8. 设置扣款信息列表
  169 + output.lqKdDeductList = lqKdDeductList.Adapt<List<LqKdDeductinfoInfoOutput>>();
159 170
160 return output; 171 return output;
161 } 172 }
@@ -182,6 +193,7 @@ namespace NCC.Extend.LqKdKdjlb @@ -182,6 +193,7 @@ namespace NCC.Extend.LqKdKdjlb
182 DateTime? startKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.First()) : null; 193 DateTime? startKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.First()) : null;
183 DateTime? endKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.Last()) : null; 194 DateTime? endKdrq = queryKdrq != null ? Ext.GetDateTime(queryKdrq.Last()) : null;
184 var data = await _db.Queryable<LqKdKdjlbEntity>() 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 .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) 197 .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
186 .WhereIF(!string.IsNullOrEmpty(input.djmd), p => p.Djmd.Equals(input.djmd)) 198 .WhereIF(!string.IsNullOrEmpty(input.djmd), p => p.Djmd.Equals(input.djmd))
187 .WhereIF(!string.IsNullOrEmpty(input.jsj), p => p.Jsj.Equals(input.jsj)) 199 .WhereIF(!string.IsNullOrEmpty(input.jsj), p => p.Jsj.Equals(input.jsj))
@@ -208,6 +220,7 @@ namespace NCC.Extend.LqKdKdjlb @@ -208,6 +220,7 @@ namespace NCC.Extend.LqKdKdjlb
208 .WhereIF(!string.IsNullOrEmpty(input.kjblsyj), p => p.Kjblsyj.Contains(input.kjblsyj)) 220 .WhereIF(!string.IsNullOrEmpty(input.kjblsyj), p => p.Kjblsyj.Contains(input.kjblsyj))
209 .WhereIF(!string.IsNullOrEmpty(input.pxxx), p => p.Pxxx.Contains(input.pxxx)) 221 .WhereIF(!string.IsNullOrEmpty(input.pxxx), p => p.Pxxx.Contains(input.pxxx))
210 .WhereIF(!string.IsNullOrEmpty(input.F_FIleUrl), p => p.F_FIleUrl.Contains(input.F_FIleUrl)) 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 .Select(it => new LqKdKdjlbListOutput 224 .Select(it => new LqKdKdjlbListOutput
212 { 225 {
213 id = it.Id, 226 id = it.Id,
@@ -236,6 +249,8 @@ namespace NCC.Extend.LqKdKdjlb @@ -236,6 +249,8 @@ namespace NCC.Extend.LqKdKdjlb
236 kjblsyj = it.Kjblsyj, 249 kjblsyj = it.Kjblsyj,
237 pxxx = it.Pxxx, 250 pxxx = it.Pxxx,
238 IsEffective = it.IsEffective, 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 .MergeTable() 255 .MergeTable()
241 .OrderBy(sidx + " " + input.sort) 256 .OrderBy(sidx + " " + input.sort)
@@ -265,26 +280,34 @@ namespace NCC.Extend.LqKdKdjlb @@ -265,26 +280,34 @@ namespace NCC.Extend.LqKdKdjlb
265 //开启事务 280 //开启事务
266 _db.BeginTran(); 281 _db.BeginTran();
267 //判断是否有作废关联id 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 entity.CreateUser = userInfo.userId; 313 entity.CreateUser = userInfo.userId;
@@ -336,6 +359,7 @@ namespace NCC.Extend.LqKdKdjlb @@ -336,6 +359,7 @@ namespace NCC.Extend.LqKdKdjlb
336 ActualPrice = item.actualPrice, 359 ActualPrice = item.actualPrice,
337 Remark = item.remark, 360 Remark = item.remark,
338 IsEffective = StatusEnum.有效.GetHashCode(), 361 IsEffective = StatusEnum.有效.GetHashCode(),
  362 + ActivityId = input.activityId,
339 }; 363 };
340 allPxmxEntities.Add(lqKdPxmxEntity); 364 allPxmxEntities.Add(lqKdPxmxEntity);
341 365
@@ -358,6 +382,7 @@ namespace NCC.Extend.LqKdKdjlb @@ -358,6 +382,7 @@ namespace NCC.Extend.LqKdKdjlb
358 Jsj_id = ijks_tem.jsj_id, 382 Jsj_id = ijks_tem.jsj_id,
359 Kdpxid = lqKdPxmxEntity.Id, 383 Kdpxid = lqKdPxmxEntity.Id,
360 IsEffective = StatusEnum.有效.GetHashCode(), 384 IsEffective = StatusEnum.有效.GetHashCode(),
  385 + ActivityId = input.activityId,
361 }); 386 });
362 } 387 }
363 } 388 }
@@ -367,19 +392,19 @@ namespace NCC.Extend.LqKdKdjlb @@ -367,19 +392,19 @@ namespace NCC.Extend.LqKdKdjlb
367 { 392 {
368 foreach (var ikjbs_tem in item.lqKdKjbsyjList) 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,152 +1115,159 @@ namespace NCC.Extend.LqKdKdjlb
1090 { 1115 {
1091 var entity = input.Adapt<LqKdKdjlbEntity>(); 1116 var entity = input.Adapt<LqKdKdjlbEntity>();
1092 entity.Id = id; // 确保ID正确设置 1117 entity.Id = id; // 确保ID正确设置
1093 -  
1094 try 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 _db.BeginTran(); 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 Id = YitIdHelper.NextId().ToString(), 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 _db.CommitTran(); 1272 _db.CommitTran();
1241 } 1273 }
@@ -1248,61 +1280,98 @@ namespace NCC.Extend.LqKdKdjlb @@ -1248,61 +1280,98 @@ namespace NCC.Extend.LqKdKdjlb
1248 } 1280 }
1249 #endregion 1281 #endregion
1250 1282
  1283 +
  1284 +
  1285 +
  1286 +
1251 #region 作废开单记录 1287 #region 作废开单记录
1252 /// <summary> 1288 /// <summary>
1253 /// 作废开单记录 1289 /// 作废开单记录
1254 /// </summary> 1290 /// </summary>
1255 - /// <param name="id">开单记录主键ID</param> 1291 + /// <param name="input">作废开单记录输入</param>
1256 /// <returns>无返回值</returns> 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 /// <response code="200">作废成功</response> 1308 /// <response code="200">作废成功</response>
1258 /// <response code="400">参数错误,开单记录ID不能为空</response> 1309 /// <response code="400">参数错误,开单记录ID不能为空</response>
1259 /// <response code="404">开单记录不存在</response> 1310 /// <response code="404">开单记录不存在</response>
1260 /// <response code="500">服务器内部错误</response> 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 throw NCCException.Oh("开单记录ID不能为空"); 1317 throw NCCException.Oh("开单记录ID不能为空");
1267 } 1318 }
1268 -  
1269 try 1319 try
1270 { 1320 {
1271 //开启事务 1321 //开启事务
1272 _db.BeginTran(); 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 if (entity == null) 1332 if (entity == null)
1277 { 1333 {
1278 throw NCCException.Oh("开单记录不存在"); 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 await _db.Updateable(entity).ExecuteCommandAsync(); 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 _db.CommitTran(); 1368 _db.CommitTran();
1300 } 1369 }
1301 - catch (Exception) 1370 + catch (Exception ex)
1302 { 1371 {
1303 //回滚事务 1372 //回滚事务
1304 _db.RollbackTran(); 1373 _db.RollbackTran();
1305 - throw NCCException.Oh(ErrorCode.COM1001); 1374 + throw NCCException.Oh($"作废开单记录失败: {ex.Message}");
1306 } 1375 }
1307 } 1376 }
1308 #endregion 1377 #endregion
@@ -1482,5 +1551,218 @@ namespace NCC.Extend.LqKdKdjlb @@ -1482,5 +1551,218 @@ namespace NCC.Extend.LqKdKdjlb
1482 } 1551 }
1483 } 1552 }
1484 #endregion 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,7 +344,6 @@ namespace NCC.Extend.LqKhxx
344 { 344 {
345 throw NCCException.Oh("客户ID不能为空"); 345 throw NCCException.Oh("客户ID不能为空");
346 } 346 }
347 -  
348 // 查询客户是否存在 347 // 查询客户是否存在
349 var customerExists = await _db.Queryable<LqKhxxEntity>().Where(c => c.Id == customerId).AnyAsync(); 348 var customerExists = await _db.Queryable<LqKhxxEntity>().Where(c => c.Id == customerId).AnyAsync();
350 349
@@ -352,13 +351,10 @@ namespace NCC.Extend.LqKhxx @@ -352,13 +351,10 @@ namespace NCC.Extend.LqKhxx
352 { 351 {
353 throw NCCException.Oh("客户不存在"); 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 var hasOrderRecord = orderCount > 0; 356 var hasOrderRecord = orderCount > 0;
360 var orderType = hasOrderRecord ? "repeat_order" : "first_order"; 357 var orderType = hasOrderRecord ? "repeat_order" : "first_order";
361 -  
362 return new LqKhxxOrderTypeOutput 358 return new LqKhxxOrderTypeOutput
363 { 359 {
364 CustomerId = customerId, 360 CustomerId = customerId,
@@ -546,6 +542,7 @@ namespace NCC.Extend.LqKhxx @@ -546,6 +542,7 @@ namespace NCC.Extend.LqKhxx
546 // 先查询基础品项数据 542 // 先查询基础品项数据
547 var baseItems = await _db.Queryable<LqKdPxmxEntity>() 543 var baseItems = await _db.Queryable<LqKdPxmxEntity>()
548 .Where(x => x.MemberId == memberId) 544 .Where(x => x.MemberId == memberId)
  545 + .Where(x => x.IsEffective == StatusEnum.有效.GetHashCode())
549 .Select(x => new 546 .Select(x => new
550 { 547 {
551 x.Id, 548 x.Id,
@@ -560,6 +557,7 @@ namespace NCC.Extend.LqKhxx @@ -560,6 +557,7 @@ namespace NCC.Extend.LqKhxx
560 // 查询消费数据 557 // 查询消费数据
561 var consumedData = await _db.Queryable<LqXhPxmxEntity>() 558 var consumedData = await _db.Queryable<LqXhPxmxEntity>()
562 .Where(x => baseItems.Select(b => b.Id).Contains(x.BillingItemId)) 559 .Where(x => baseItems.Select(b => b.Id).Contains(x.BillingItemId))
  560 + .Where(x => x.IsEffective == StatusEnum.有效.GetHashCode())
563 .GroupBy(x => x.BillingItemId) 561 .GroupBy(x => x.BillingItemId)
564 .Select(x => new 562 .Select(x => new
565 { 563 {
@@ -571,6 +569,7 @@ namespace NCC.Extend.LqKhxx @@ -571,6 +569,7 @@ namespace NCC.Extend.LqKhxx
571 // 查询退卡数据 569 // 查询退卡数据
572 var refundedData = await _db.Queryable<LqHytkMxEntity>() 570 var refundedData = await _db.Queryable<LqHytkMxEntity>()
573 .Where(x => baseItems.Select(b => b.Id).Contains(x.BillingItemId)) 571 .Where(x => baseItems.Select(b => b.Id).Contains(x.BillingItemId))
  572 + // .Where(x => x.IsEffective == StatusEnum.有效.GetHashCode())
574 .GroupBy(x => x.BillingItemId) 573 .GroupBy(x => x.BillingItemId)
575 .Select(x => new 574 .Select(x => new
576 { 575 {
@@ -582,6 +581,7 @@ namespace NCC.Extend.LqKhxx @@ -582,6 +581,7 @@ namespace NCC.Extend.LqKhxx
582 //查询储扣数据 581 //查询储扣数据
583 var deductData = await _db.Queryable<LqKdDeductinfoEntity>() 582 var deductData = await _db.Queryable<LqKdDeductinfoEntity>()
584 .Where(x => baseItems.Select(b => b.Id).Contains(x.DeductId)) 583 .Where(x => baseItems.Select(b => b.Id).Contains(x.DeductId))
  584 + .Where(x => x.IsEffective == StatusEnum.有效.GetHashCode())
585 .GroupBy(x => x.DeductId) 585 .GroupBy(x => x.DeductId)
586 .Select(x => new 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,6 +175,7 @@ namespace NCC.Extend.LqXhHyhk
175 DateTime? startHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.First()) : null; 175 DateTime? startHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.First()) : null;
176 DateTime? endHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.Last()) : null; 176 DateTime? endHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.Last()) : null;
177 var data = await _db.Queryable<LqXhHyhkEntity>() 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 .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) 179 .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
179 .WhereIF(!string.IsNullOrEmpty(input.md), p => p.Md.Equals(input.md)) 180 .WhereIF(!string.IsNullOrEmpty(input.md), p => p.Md.Equals(input.md))
180 .WhereIF(!string.IsNullOrEmpty(input.mdbh), p => p.Mdbh.Contains(input.mdbh)) 181 .WhereIF(!string.IsNullOrEmpty(input.mdbh), p => p.Mdbh.Contains(input.mdbh))
@@ -183,9 +184,6 @@ namespace NCC.Extend.LqXhHyhk @@ -183,9 +184,6 @@ namespace NCC.Extend.LqXhHyhk
183 .WhereIF(!string.IsNullOrEmpty(input.hyzh), p => p.Hyzh.Contains(input.hyzh)) 184 .WhereIF(!string.IsNullOrEmpty(input.hyzh), p => p.Hyzh.Contains(input.hyzh))
184 .WhereIF(!string.IsNullOrEmpty(input.hymc), p => p.Hymc.Contains(input.hymc)) 185 .WhereIF(!string.IsNullOrEmpty(input.hymc), p => p.Hymc.Contains(input.hymc))
185 .WhereIF(!string.IsNullOrEmpty(input.gklx), p => p.Gklx.Equals(input.gklx)) 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 .WhereIF(!string.IsNullOrEmpty(input.sfykjb), p => p.Sfykjb.Equals(input.sfykjb)) 187 .WhereIF(!string.IsNullOrEmpty(input.sfykjb), p => p.Sfykjb.Equals(input.sfykjb))
190 .WhereIF(queryHksj != null, p => p.Hksj >= new DateTime(startHksj.ToDate().Year, startHksj.ToDate().Month, startHksj.ToDate().Day, 0, 0, 0)) 188 .WhereIF(queryHksj != null, p => p.Hksj >= new DateTime(startHksj.ToDate().Year, startHksj.ToDate().Month, startHksj.ToDate().Day, 0, 0, 0))
191 .WhereIF(queryHksj != null, p => p.Hksj <= new DateTime(endHksj.ToDate().Year, endHksj.ToDate().Month, endHksj.ToDate().Day, 23, 59, 59)) 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,6 +203,7 @@ namespace NCC.Extend.LqXhHyhk
205 sfykjb = it.Sfykjb, 203 sfykjb = it.Sfykjb,
206 hksj = it.Hksj, 204 hksj = it.Hksj,
207 czry = it.Czry, 205 czry = it.Czry,
  206 + memberPhone = it.MemberPhone,
208 }) 207 })
209 .MergeTable() 208 .MergeTable()
210 .OrderBy(sidx + " " + input.sort) 209 .OrderBy(sidx + " " + input.sort)
@@ -262,6 +261,7 @@ namespace NCC.Extend.LqXhHyhk @@ -262,6 +261,7 @@ namespace NCC.Extend.LqXhHyhk
262 var entity = input.Adapt<LqXhHyhkEntity>(); 261 var entity = input.Adapt<LqXhHyhkEntity>();
263 entity.Id = YitIdHelper.NextId().ToString(); 262 entity.Id = YitIdHelper.NextId().ToString();
264 entity.Czry = _userManager.UserId; 263 entity.Czry = _userManager.UserId;
  264 + entity.MemberPhone = _db.Queryable<LqKhxxEntity>().Where(w => w.Id == entity.Hy).First().Sjh;
265 entity.CreateTime = DateTime.Now; 265 entity.CreateTime = DateTime.Now;
266 try 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 -}