Commit a8089ee36df6f3f3accba64c3f9d0629fd33b2d9

Authored by 李宇
2 parents f6f91b12 dfe6188b

Merge branch 'master' of http://39.98.150.180/antissoft/lvqianmeiye_ERP

Showing 33 changed files with 995 additions and 109 deletions
netcore/src/Application/NCC.API/appsettings.json
... ... @@ -29,7 +29,7 @@
29 29 "AllowedHosts": "*",
30 30 "ConnectionStrings": {
31 31 "ConfigId": "db",
32   - "DBName": "lqerp",
  32 + "DBName": "lqerp_test",
33 33 "DBType": "MySql", //MySql;SqlServer;Oracle;PostgreSQL;Dm;Kdbndp;
34 34 //SqlServer
35 35 // "DefaultConnection": "Data Source=localhost;Initial Catalog={0};User ID=sqladmin;Password=P@ssw0rd;MultipleActiveResultSets=true"
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventCrInput.cs
... ... @@ -86,5 +86,10 @@ namespace NCC.Extend.Entitys.Dto.LqEvent
86 86 /// 每个成员包含:用户ID、部门ID、战队名称等信息
87 87 /// </remarks>
88 88 public List<LqEventUserCrInput> Members { get; set; } = new List<LqEventUserCrInput>();
  89 +
  90 + /// <summary>
  91 + /// 推送URL
  92 + /// </summary>
  93 + public string PushUrl { get; set; }
89 94 }
90 95 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventInfoOutput.cs
... ... @@ -46,6 +46,11 @@ namespace NCC.Extend.Entitys.Dto.LqEvent
46 46 public int eventType { get; set; }
47 47  
48 48 /// <summary>
  49 + /// 推送URL
  50 + /// </summary>
  51 + public string pushUrl { get; set; }
  52 +
  53 + /// <summary>
49 54 /// 拓客活动成员列表
50 55 /// </summary>
51 56 public List<LqEventUserInfoOutput> Members { get; set; } = new List<LqEventUserInfoOutput>();
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoCrInput.cs
... ... @@ -17,10 +17,10 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
17 17 /// 扣减类型
18 18 /// </summary>
19 19 [Required(ErrorMessage = "扣减类型不能为空")]
20   - public int? DeductType { get; set; }
  20 + public string DeductType { get; set; }
21 21  
22 22 /// <summary>
23   - /// 扣减关联ID
  23 + /// 扣减品项关联ID
24 24 /// </summary>
25 25 [Required(ErrorMessage = "扣减关联ID不能为空")]
26 26 public string DeductId { get; set; }
... ... @@ -28,7 +28,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
28 28 /// <summary>
29 29 /// 开单id
30 30 /// </summary>
31   - [Required(ErrorMessage = "开单id不能为空")]
32 31 public string BillingId { get; set; }
33 32  
34 33 /// <summary>
... ... @@ -37,5 +36,35 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
37 36 [Required(ErrorMessage = "合计金额不能为空")]
38 37 [Range(0.01, 999999.99, ErrorMessage = "合计金额必须在0.01到999999.99之间")]
39 38 public decimal? Amount { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 是否有效
  42 + /// </summary>
  43 + public int? IsEffective { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 单价
  47 + /// </summary>
  48 + public decimal? UnitPrice { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 品项名称
  52 + /// </summary>
  53 + public string ItemName { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 品项id
  57 + /// </summary>
  58 + public string ItemId { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 品项次数
  62 + /// </summary>
  63 + public decimal? ProjectNumber { get; set; }
  64 +
  65 + /// <summary>
  66 + /// 创建时间
  67 + /// </summary>
  68 + public DateTime? CreateTime { get; set; }
40 69 }
41 70 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoInfoOutput.cs
... ... @@ -15,7 +15,7 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
15 15 /// <summary>
16 16 /// 扣减类型
17 17 /// </summary>
18   - public int? DeductType { get; set; }
  18 + public string DeductType { get; set; }
19 19  
20 20 /// <summary>
21 21 /// 扣减类型名称
... ... @@ -36,5 +36,30 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
36 36 /// 合计金额
37 37 /// </summary>
38 38 public decimal? Amount { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 是否有效
  42 + /// </summary>
  43 + public int? IsEffective { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 单价
  47 + /// </summary>
  48 + public decimal? UnitPrice { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 品项名称
  52 + /// </summary>
  53 + public string ItemName { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 品项id
  57 + /// </summary>
  58 + public string ItemId { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 创建时间
  62 + /// </summary>
  63 + public DateTime? CreateTime { get; set; }
39 64 }
40 65 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoListOutput.cs
... ... @@ -15,7 +15,7 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
15 15 /// <summary>
16 16 /// 扣减类型
17 17 /// </summary>
18   - public int? DeductType { get; set; }
  18 + public string DeductType { get; set; }
19 19  
20 20 /// <summary>
21 21 /// 扣减类型名称
... ... @@ -36,5 +36,30 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
36 36 /// 合计金额
37 37 /// </summary>
38 38 public decimal? Amount { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 是否有效
  42 + /// </summary>
  43 + public int? IsEffective { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 单价
  47 + /// </summary>
  48 + public decimal? UnitPrice { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 品项名称
  52 + /// </summary>
  53 + public string ItemName { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 品项id
  57 + /// </summary>
  58 + public string ItemId { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 创建时间
  62 + /// </summary>
  63 + public DateTime? CreateTime { get; set; }
39 64 }
40 65 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoListQueryInput.cs
... ... @@ -10,7 +10,7 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
10 10 /// <summary>
11 11 /// 扣减类型
12 12 /// </summary>
13   - public int? DeductType { get; set; }
  13 + public string DeductType { get; set; }
14 14  
15 15 /// <summary>
16 16 /// 扣减关联ID
... ... @@ -31,5 +31,40 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo
31 31 /// 最大金额
32 32 /// </summary>
33 33 public decimal? MaxAmount { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 是否有效
  37 + /// </summary>
  38 + public int? IsEffective { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 品项名称
  42 + /// </summary>
  43 + public string ItemName { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 品项id
  47 + /// </summary>
  48 + public string ItemId { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 最小单价
  52 + /// </summary>
  53 + public decimal? MinUnitPrice { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 最大单价
  57 + /// </summary>
  58 + public decimal? MaxUnitPrice { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 开始创建时间
  62 + /// </summary>
  63 + public DateTime? StartCreateTime { get; set; }
  64 +
  65 + /// <summary>
  66 + /// 结束创建时间
  67 + /// </summary>
  68 + public DateTime? EndCreateTime { get; set; }
34 69 }
35 70 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbCrInput.cs
... ... @@ -146,6 +146,16 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
146 146 public string F_FIleUrl { get; set; }
147 147  
148 148 /// <summary>
  149 + /// 作废关联id
  150 + /// </summary>
  151 + public string cancelRefId { get; set; }
  152 +
  153 + /// <summary>
  154 + /// 作废关联备注
  155 + /// </summary>
  156 + public string cancelRefRemarks { get; set; }
  157 +
  158 + /// <summary>
149 159 /// 扣款信息
150 160 /// </summary>
151 161 public List<LqKdDeductinfoCrInput> lqKdKdjlbDeductList { get; set; }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbInfoOutput.cs
... ... @@ -59,10 +59,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
59 59 /// </summary>
60 60 public string ckfs { get; set; }
61 61  
  62 +
62 63 /// <summary>
63   - /// 储扣明细
  64 + /// 储扣总金额
64 65 /// </summary>
65   - public string ckmx { get; set; }
  66 + public decimal deductAmount { get; set; }
66 67  
67 68 /// <summary>
68 69 /// 付款方式
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxCrInput.cs
... ... @@ -54,14 +54,14 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
54 54 public decimal projectNumber { get; set; }
55 55  
56 56 /// <summary>
57   - /// 是否有效
  57 + /// 来源类型
58 58 /// </summary>
59   - public int? isEnabled { get; set; } = 0;
  59 + public string sourceType { get; set; }
60 60  
61 61 /// <summary>
62   - /// 来源类型
  62 + /// 备注
63 63 /// </summary>
64   - public string sourceType { get; set; }
  64 + public string remark { get; set; }
65 65  
66 66 /// <summary>
67 67 /// 健康师业绩
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxInfoOutput.cs
... ... @@ -68,6 +68,12 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
68 68 /// </summary>
69 69 public decimal actualPrice { get; set; }
70 70  
  71 +
  72 + /// <summary>
  73 + /// 备注
  74 + /// </summary>
  75 + public string remark { get; set; }
  76 +
71 77 /// <summary>
72 78 /// 健康师业绩列表
73 79 /// </summary>
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjCrInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqKdQkbj
  5 +{
  6 + /// <summary>
  7 + /// 开单欠款补缴记录创建输入
  8 + /// </summary>
  9 + public class LqKdQkbjCrInput
  10 + {
  11 + /// <summary>
  12 + /// 开单ID
  13 + /// </summary>
  14 + [Required(ErrorMessage = "开单ID不能为空")]
  15 + public string BillingId { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 补缴金额
  19 + /// </summary>
  20 + [Required(ErrorMessage = "补缴金额不能为空")]
  21 + [Range(0.01, 999999.99, ErrorMessage = "补缴金额必须在0.01到999999.99之间")]
  22 + public decimal PaymentAmount { get; set; }
  23 +
  24 + /// <summary>
  25 + /// 补缴方式
  26 + /// </summary>
  27 + [Required(ErrorMessage = "补缴方式不能为空")]
  28 + public string PaymentMethod { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 补缴时间
  32 + /// </summary>
  33 + [Required(ErrorMessage = "补缴时间不能为空")]
  34 + public DateTime PaymentTime { get; set; }
  35 +
  36 + /// <summary>
  37 + /// 补缴操作人
  38 + /// </summary>
  39 + public string PaymentUser { get; set; }
  40 +
  41 + /// <summary>
  42 + /// 补缴账户
  43 + /// </summary>
  44 + public string PaymentAccount { get; set; }
  45 +
  46 + /// <summary>
  47 + /// 补缴凭证号
  48 + /// </summary>
  49 + public string PaymentReference { get; set; }
  50 +
  51 + /// <summary>
  52 + /// 补缴备注
  53 + /// </summary>
  54 + [StringLength(500, ErrorMessage = "补缴备注不能超过500个字符")]
  55 + public string Remark { get; set; }
  56 + }
  57 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjInfoOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqKdQkbj
  4 +{
  5 + /// <summary>
  6 + /// 开单欠款补缴记录详情输出
  7 + /// </summary>
  8 + public class LqKdQkbjInfoOutput
  9 + {
  10 + /// <summary>
  11 + /// 主键
  12 + /// </summary>
  13 + public string Id { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 开单ID
  17 + /// </summary>
  18 + public string BillingId { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 补缴金额
  22 + /// </summary>
  23 + public decimal PaymentAmount { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 补缴方式
  27 + /// </summary>
  28 + public string PaymentMethod { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 补缴方式名称
  32 + /// </summary>
  33 + public string PaymentMethodName { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 补缴时间
  37 + /// </summary>
  38 + public DateTime PaymentTime { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 补缴操作人
  42 + /// </summary>
  43 + public string PaymentUser { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 补缴操作人姓名
  47 + /// </summary>
  48 + public string PaymentUserName { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 补缴账户
  52 + /// </summary>
  53 + public string PaymentAccount { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 补缴凭证号
  57 + /// </summary>
  58 + public string PaymentReference { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 补缴备注
  62 + /// </summary>
  63 + public string Remark { get; set; }
  64 +
  65 + /// <summary>
  66 + /// 创建时间
  67 + /// </summary>
  68 + public DateTime CreateTime { get; set; }
  69 +
  70 + /// <summary>
  71 + /// 更新时间
  72 + /// </summary>
  73 + public DateTime UpdateTime { get; set; }
  74 +
  75 + /// <summary>
  76 + /// 是否有效
  77 + /// </summary>
  78 + public int IsEffective { get; set; }
  79 + }
  80 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjListOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqKdQkbj
  4 +{
  5 + /// <summary>
  6 + /// 开单欠款补缴记录列表输出
  7 + /// </summary>
  8 + public class LqKdQkbjListOutput
  9 + {
  10 + /// <summary>
  11 + /// 主键
  12 + /// </summary>
  13 + public string Id { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 开单ID
  17 + /// </summary>
  18 + public string BillingId { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 补缴金额
  22 + /// </summary>
  23 + public decimal PaymentAmount { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 补缴方式
  27 + /// </summary>
  28 + public string PaymentMethod { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 补缴方式名称
  32 + /// </summary>
  33 + public string PaymentMethodName { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 补缴时间
  37 + /// </summary>
  38 + public DateTime PaymentTime { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 补缴操作人
  42 + /// </summary>
  43 + public string PaymentUser { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 补缴操作人姓名
  47 + /// </summary>
  48 + public string PaymentUserName { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 补缴账户
  52 + /// </summary>
  53 + public string PaymentAccount { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 补缴凭证号
  57 + /// </summary>
  58 + public string PaymentReference { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 补缴备注
  62 + /// </summary>
  63 + public string Remark { get; set; }
  64 +
  65 + /// <summary>
  66 + /// 创建时间
  67 + /// </summary>
  68 + public DateTime CreateTime { get; set; }
  69 +
  70 + /// <summary>
  71 + /// 是否有效
  72 + /// </summary>
  73 + public int IsEffective { get; set; }
  74 + }
  75 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjListQueryInput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqKdQkbj
  4 +{
  5 + /// <summary>
  6 + /// 开单欠款补缴记录列表查询输入
  7 + /// </summary>
  8 + public class LqKdQkbjListQueryInput
  9 + {
  10 + /// <summary>
  11 + /// 开单ID
  12 + /// </summary>
  13 + public string BillingId { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 补缴方式
  17 + /// </summary>
  18 + public string PaymentMethod { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 补缴操作人
  22 + /// </summary>
  23 + public string PaymentUser { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 最小补缴金额
  27 + /// </summary>
  28 + public decimal? MinPaymentAmount { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 最大补缴金额
  32 + /// </summary>
  33 + public decimal? MaxPaymentAmount { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 开始补缴时间
  37 + /// </summary>
  38 + public DateTime? StartPaymentTime { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 结束补缴时间
  42 + /// </summary>
  43 + public DateTime? EndPaymentTime { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 是否有效
  47 + /// </summary>
  48 + public int? IsEffective { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 补缴凭证号
  52 + /// </summary>
  53 + public string PaymentReference { get; set; }
  54 + }
  55 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjUpInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqKdQkbj
  5 +{
  6 + /// <summary>
  7 + /// 开单欠款补缴记录更新输入
  8 + /// </summary>
  9 + public class LqKdQkbjUpInput : LqKdQkbjCrInput
  10 + {
  11 + /// <summary>
  12 + /// 主键
  13 + /// </summary>
  14 + [Required(ErrorMessage = "主键不能为空")]
  15 + public string Id { get; set; }
  16 + }
  17 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/MemberRemainingItemsOutput.cs
... ... @@ -92,6 +92,13 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk
92 92 public decimal RefundedCount { get; set; }
93 93  
94 94 /// <summary>
  95 + /// 已储扣数量
  96 + /// </summary>
  97 + /// <remarks>该品项已储扣的次数</remarks>
  98 + /// <example>0</example>
  99 + public decimal DeductCount { get; set; }
  100 +
  101 + /// <summary>
95 102 /// 剩余数量
96 103 /// </summary>
97 104 /// <remarks>总购买数量减去已消费数量减去已退卡数量</remarks>
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_event/LqEventEntity.cs
... ... @@ -50,5 +50,11 @@ namespace NCC.Extend.Entitys.lq_event
50 50 /// </summary>
51 51 [SugarColumn(ColumnName = "F_EventType")]
52 52 public int EventType { get; set; }
  53 +
  54 + /// <summary>
  55 + /// 推送URL
  56 + /// </summary>
  57 + [SugarColumn(ColumnName = "F_PushUrl")]
  58 + public string PushUrl { get; set; }
53 59 }
54 60 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_deductinfo/LqKdDeductinfoEntity.cs
... ... @@ -20,7 +20,7 @@ namespace NCC.Extend.Entitys.lq_kd_deductinfo
20 20 /// 扣减类型
21 21 /// </summary>
22 22 [SugarColumn(ColumnName = "F_DeductType")]
23   - public int? DeductType { get; set; }
  23 + public string DeductType { get; set; }
24 24  
25 25 /// <summary>
26 26 /// 扣减关联ID
... ... @@ -40,5 +40,41 @@ namespace NCC.Extend.Entitys.lq_kd_deductinfo
40 40 /// </summary>
41 41 [SugarColumn(ColumnName = "F_Amount")]
42 42 public decimal? Amount { get; set; }
  43 +
  44 + /// <summary>
  45 + /// 是否有效
  46 + /// </summary>
  47 + [SugarColumn(ColumnName = "F_IsEffective")]
  48 + public int? IsEffective { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 单价
  52 + /// </summary>
  53 + [SugarColumn(ColumnName = "F_UnitPrice")]
  54 + public decimal? UnitPrice { get; set; }
  55 +
  56 + /// <summary>
  57 + /// 品项名称
  58 + /// </summary>
  59 + [SugarColumn(ColumnName = "F_ItemName")]
  60 + public string ItemName { get; set; }
  61 +
  62 + /// <summary>
  63 + /// 品项id
  64 + /// </summary>
  65 + [SugarColumn(ColumnName = "F_ItemId")]
  66 + public string ItemId { get; set; }
  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_ProjectNumber")]
  78 + public decimal? ProjectNumber { get; set; }
43 79 }
44 80 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs
... ... @@ -204,5 +204,18 @@ namespace NCC.Extend.Entitys.lq_kd_kdjlb
204 204 [SugarColumn(ColumnName = "F_IsEffective")]
205 205 public int IsEffective { get; set; } = 1;
206 206  
  207 +
  208 + /// <summary>
  209 + /// 作废关联id
  210 + /// </summary>
  211 + [SugarColumn(ColumnName = "F_CancelRefId")]
  212 + public string CancelRefId { get; set; }
  213 +
  214 + /// <summary>
  215 + /// 作废关联备注
  216 + /// </summary>
  217 + [SugarColumn(ColumnName = "F_CancelRefRemarks")]
  218 + public string CancelRefRemarks { get; set; }
  219 +
207 220 }
208 221 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_pxmx/LqKdPxmxEntity.cs
... ... @@ -60,9 +60,6 @@ namespace NCC.Extend.Entitys.lq_kd_pxmx
60 60 [SugarColumn(ColumnName = "F_CreateTIme")]
61 61 public DateTime? CreateTIme { get; set; }
62 62  
63   -
64   -
65   -
66 63 /// <summary>
67 64 /// 项目次数
68 65 /// </summary>
... ... @@ -98,5 +95,11 @@ namespace NCC.Extend.Entitys.lq_kd_pxmx
98 95 /// </summary>
99 96 [SugarColumn(ColumnName = "F_IsEffective")]
100 97 public int IsEffective { get; set; } = 1;
  98 +
  99 + /// <summary>
  100 + /// 备注
  101 + /// </summary>
  102 + [SugarColumn(ColumnName = "F_Remark")]
  103 + public string Remark { get; set; }
101 104 }
102 105 }
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_qkbj/LqKdQkbjEntity.cs 0 → 100644
  1 +using System;
  2 +using NCC.Common.Const;
  3 +using SqlSugar;
  4 +
  5 +namespace NCC.Extend.Entitys.lq_kd_qkbj
  6 +{
  7 + /// <summary>
  8 + /// 开单欠款补缴记录表
  9 + /// </summary>
  10 + [SugarTable("lq_kd_qkbj")]
  11 + [Tenant(ClaimConst.TENANT_ID)]
  12 + public class LqKdQkbjEntity
  13 + {
  14 + /// <summary>
  15 + /// 主键
  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_BillingId")]
  24 + public string BillingId { get; set; }
  25 +
  26 + /// <summary>
  27 + /// 补缴金额
  28 + /// </summary>
  29 + [SugarColumn(ColumnName = "F_PaymentAmount")]
  30 + public decimal PaymentAmount { get; set; }
  31 +
  32 + /// <summary>
  33 + /// 补缴方式
  34 + /// </summary>
  35 + [SugarColumn(ColumnName = "F_PaymentMethod")]
  36 + public string PaymentMethod { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 补缴时间
  40 + /// </summary>
  41 + [SugarColumn(ColumnName = "F_PaymentTime")]
  42 + public DateTime PaymentTime { get; set; }
  43 +
  44 + /// <summary>
  45 + /// 补缴操作人
  46 + /// </summary>
  47 + [SugarColumn(ColumnName = "F_PaymentUser")]
  48 + public string PaymentUser { get; set; }
  49 +
  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 + /// 补缴备注
  64 + /// </summary>
  65 + [SugarColumn(ColumnName = "F_Remark")]
  66 + public string Remark { get; set; }
  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_IsEffective")]
  84 + public int IsEffective { get; set; } = 1;
  85 + }
  86 +}
... ...
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/StatusEnum.cs
... ... @@ -8,16 +8,16 @@ namespace NCC.Extend.Entitys.Enum
8 8 public enum StatusEnum
9 9 {
10 10 /// <summary>
11   - ///
  11 + ///
12 12 /// </summary>
13   - [Description("有效")]
14   - 有效 = 0,
  13 + [Description("无效")]
  14 + 无效 = -1,
15 15  
16 16 /// <summary>
17   - ///
  17 + ///
18 18 /// </summary>
19   - [Description("无效")]
20   - 无效 = 1,
  19 + [Description("有效")]
  20 + 有效 = 1,
21 21  
22 22 /// <summary>
23 23 /// 删除
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqEventService.cs
... ... @@ -150,6 +150,7 @@ namespace NCC.Extend.LqEvent
150 150 eventCoordinator = entity.EventCoordinator,
151 151 eventNumber = entity.EventNumber,
152 152 eventType = entity.EventType,
  153 + pushUrl = entity.PushUrl,
153 154 };
154 155  
155 156 // 3. 获取拓客活动成员信息
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqJdqdService.cs
... ... @@ -28,7 +28,7 @@ namespace NCC.Extend.LqJdqd
28 28 /// <summary>
29 29 /// 进店渠道服务
30 30 /// </summary>
31   - [ApiDescriptionSettings(Tag = "Extend",Name = "LqJdqd", Order = 200)]
  31 + [ApiDescriptionSettings(Tag = "Extend", Name = "LqJdqd", Order = 200)]
32 32 [Route("api/Extend/[controller]")]
33 33 public class LqJdqdService : ILqJdqdService, IDynamicApiController, ITransient
34 34 {
... ... @@ -43,7 +43,7 @@ namespace NCC.Extend.LqJdqd
43 43 ISqlSugarRepository<LqJdqdEntity> lqJdqdRepository,
44 44 IUserManager userManager)
45 45 {
46   - _lqJdqdRepository = lqJdqdRepository;
  46 + _lqJdqdRepository = lqJdqdRepository;
47 47 _db = _lqJdqdRepository.Context;
48 48 _userManager = userManager;
49 49 }
... ... @@ -73,12 +73,12 @@ namespace NCC.Extend.LqJdqd
73 73 var data = await _db.Queryable<LqJdqdEntity>()
74 74 .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
75 75 .WhereIF(!string.IsNullOrEmpty(input.qdmc), p => p.Qdmc.Contains(input.qdmc))
76   - .Select(it=> new LqJdqdListOutput
  76 + .Select(it => new LqJdqdListOutput
77 77 {
78 78 id = it.Id,
79   - qdmc=it.Qdmc,
80   - }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
81   - return PageResult<LqJdqdListOutput>.SqlSugarPageResult(data);
  79 + qdmc = it.Qdmc,
  80 + }).MergeTable().OrderBy(sidx + " " + input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
  81 + return PageResult<LqJdqdListOutput>.SqlSugarPageResult(data);
82 82 }
83 83  
84 84 /// <summary>
... ... @@ -108,12 +108,12 @@ namespace NCC.Extend.LqJdqd
108 108 var data = await _db.Queryable<LqJdqdEntity>()
109 109 .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id))
110 110 .WhereIF(!string.IsNullOrEmpty(input.qdmc), p => p.Qdmc.Contains(input.qdmc))
111   - .Select(it=> new LqJdqdListOutput
  111 + .Select(it => new LqJdqdListOutput
112 112 {
113 113 id = it.Id,
114   - qdmc=it.Qdmc,
115   - }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync();
116   - return data;
  114 + qdmc = it.Qdmc,
  115 + }).MergeTable().OrderBy(sidx + " " + input.sort).ToListAsync();
  116 + return data;
117 117 }
118 118  
119 119 /// <summary>
... ... @@ -135,7 +135,7 @@ namespace NCC.Extend.LqJdqd
135 135 {
136 136 exportData = await this.GetNoPagingList(input);
137 137 }
138   - List<ParamsModel> paramList = "[{\"value\":\"渠道编号\",\"field\":\"id\"},{\"value\":\"渠道名称\",\"field\":\"qdmc\"},]".ToList<ParamsModel>();
  138 + List<ParamsModel> paramList = "[{\"value\":\"渠道编号\",\"field\":\"id\"},{\"value\":\"渠道名称\",\"field\":\"qdmc\"},]".ToList<ParamsModel>();
139 139 ExcelConfig excelconfig = new ExcelConfig();
140 140 excelconfig.FileName = "进店渠道.xls";
141 141 excelconfig.HeadFont = "微软雅黑";
... ... @@ -178,7 +178,7 @@ namespace NCC.Extend.LqJdqd
178 178 //开启事务
179 179 _db.BeginTran();
180 180 //批量删除进店渠道
181   - await _db.Deleteable<LqJdqdEntity>().In(d => d.Id,ids).ExecuteCommandAsync();
  181 + await _db.Deleteable<LqJdqdEntity>().In(d => d.Id, ids).ExecuteCommandAsync();
182 182 //关闭事务
183 183 _db.CommitTran();
184 184 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
... ... @@ -136,6 +136,7 @@ namespace NCC.Extend.LqKdKdjlb
136 136 createTime = pxmx.CreateTIme,
137 137 totalPrice = pxmx.TotalPrice,
138 138 actualPrice = pxmx.ActualPrice,
  139 + remark = pxmx.Remark,
139 140 };
140 141  
141 142 // 关联该品项的健康师业绩
... ... @@ -258,6 +259,233 @@ namespace NCC.Extend.LqKdKdjlb
258 259 entity.Id = YitIdHelper.NextId().ToString();
259 260 entity.CreateTime = DateTime.Now;
260 261 entity.UpdateTime = DateTime.Now;
  262 + entity.IsEffective = StatusEnum.有效.GetHashCode();
  263 + try
  264 + {
  265 + //开启事务
  266 + _db.BeginTran();
  267 + //判断是否有作废关联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 + }
  288 +
  289 + //新增开单记录表记录
  290 + entity.CreateUser = userInfo.userId;
  291 + entity.DeductAmount = input.lqKdKdjlbDeductList.Sum(x => x.Amount ?? 0);//计算储扣总金额
  292 + var newEntity = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnEntityAsync();
  293 + //循环品相信息
  294 + // 收集所有需要插入的实体,然后批量插入
  295 + var allPxmxEntities = new List<LqKdPxmxEntity>();
  296 + var allJksyjEntities = new List<LqKdJksyjEntity>();
  297 + var allKjbsyjEntities = new List<LqKdKjbsyjEntity>();
  298 + var allDeductEntities = new List<LqKdDeductinfoEntity>();
  299 + // 处理扣款信息列表
  300 + foreach (var item in input.lqKdKdjlbDeductList)
  301 + {
  302 + var lqKdDeductEntity = new LqKdDeductinfoEntity
  303 + {
  304 + Id = YitIdHelper.NextId().ToString(),
  305 + BillingId = newEntity.Id,
  306 + DeductId = item.DeductId,
  307 + DeductType = item.DeductType,
  308 + Amount = item.Amount,
  309 + ProjectNumber = item.ProjectNumber,
  310 + UnitPrice = item.UnitPrice,
  311 + ItemName = item.ItemName,
  312 + ItemId = item.ItemId,
  313 + IsEffective = StatusEnum.有效.GetHashCode(), // 设置为有效
  314 + CreateTime = DateTime.Now, // 设置创建时间
  315 + };
  316 + allDeductEntities.Add(lqKdDeductEntity);
  317 + }
  318 + // 处理品项明细列表
  319 + foreach (var item in input.lqKdPxmxList)
  320 + {
  321 + // 创建品项明细实体
  322 + var lqKdPxmxEntity = new LqKdPxmxEntity
  323 + {
  324 + Id = YitIdHelper.NextId().ToString(),
  325 + Glkdbh = newEntity.Id,
  326 + Yjsj = input.kdrq,
  327 + CreateTIme = DateTime.Now,
  328 + MemberId = entity.Kdhy,
  329 + IsEnabled = StatusEnum.有效.GetHashCode(),
  330 + ProjectNumber = item.projectNumber,
  331 + TotalPrice = (decimal)(item.pxjg * item.projectNumber),
  332 + Px = item.px,
  333 + Pxmc = item.pxmc,
  334 + Pxjg = item.pxjg,
  335 + SourceType = item.sourceType,
  336 + ActualPrice = item.actualPrice,
  337 + Remark = item.remark,
  338 + IsEffective = StatusEnum.有效.GetHashCode(),
  339 + };
  340 + allPxmxEntities.Add(lqKdPxmxEntity);
  341 +
  342 + // 收集该品项关联的健康师业绩
  343 + if (item.lqKdJksyjList != null && item.lqKdJksyjList.Any())
  344 + {
  345 + //把jksxm保存到HealthInstructorNames
  346 + foreach (var ijks_tem in item.lqKdJksyjList)
  347 + {
  348 + HealthInstructorNames += ijks_tem.jksxm + ",";
  349 + allJksyjEntities.Add(new LqKdJksyjEntity
  350 + {
  351 + Id = YitIdHelper.NextId().ToString(),
  352 + Glkdbh = newEntity.Id,
  353 + Jks = ijks_tem.jks,
  354 + Jksxm = ijks_tem.jksxm,
  355 + Jkszh = ijks_tem.jkszh,
  356 + Jksyj = ijks_tem.jksyj,
  357 + Yjsj = input.kdrq,
  358 + Jsj_id = ijks_tem.jsj_id,
  359 + Kdpxid = lqKdPxmxEntity.Id,
  360 + IsEffective = StatusEnum.有效.GetHashCode(),
  361 + });
  362 + }
  363 + }
  364 +
  365 + // 收集该品项关联的科技部老师业绩
  366 + if (item.lqKdKjbsyjList != null && item.lqKdKjbsyjList.Any())
  367 + {
  368 + foreach (var ikjbs_tem in item.lqKdKjbsyjList)
  369 + {
  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 + }
  383 + );
  384 + }
  385 + }
  386 + }
  387 +
  388 +
  389 +
  390 + //通过会员id查询会员信息
  391 + var memberInfo = await _db.Queryable<LqKhxxEntity>().Where(u => u.Id == entity.Kdhy).FirstAsync();
  392 + //通过开单记录表查询这个会员开单金额
  393 + var kdAmount = await _db.Queryable<LqKdKdjlbEntity>().Where(u => u.Kdhy == entity.Kdhy).SumAsync(u => u.Sfyj);
  394 + //如果开单金额小于500,为散客,如果大于500,为会员
  395 + if (kdAmount < 500)
  396 + {
  397 + memberInfo.Khlx = MemberTypeEnum.散客.GetHashCode().ToString();
  398 + }
  399 + else
  400 + {
  401 + memberInfo.Khlx = MemberTypeEnum.会员.GetHashCode().ToString();
  402 + }
  403 + await _db.Updateable(memberInfo).ExecuteCommandAsync();
  404 + // 批量插入扣款信息
  405 + if (allDeductEntities.Any())
  406 + {
  407 + await _db.Insertable(allDeductEntities).ExecuteCommandAsync();
  408 + }
  409 + // 批量插入品项明细
  410 + if (allPxmxEntities.Any())
  411 + {
  412 + await _db.Insertable(allPxmxEntities).ExecuteCommandAsync();
  413 + }
  414 + // 批量插入健康师业绩
  415 + if (allJksyjEntities.Any())
  416 + {
  417 + await _db.Insertable(allJksyjEntities).ExecuteCommandAsync();
  418 + }
  419 + // 批量插入科技部老师业绩
  420 + if (allKjbsyjEntities.Any())
  421 + {
  422 + await _db.Insertable(allKjbsyjEntities).ExecuteCommandAsync();
  423 + }
  424 +
  425 + //关闭事务
  426 + _db.CommitTran();
  427 +
  428 + // 生成开单记录字符串并发送到企业微信
  429 + try
  430 + {
  431 + var entityInfo = await GetInfo(newEntity.Id);
  432 + if (entityInfo != null)
  433 + {
  434 + var orderRecordString = _stringGenerator.GenerateOrderRecordString(entityInfo, HealthInstructorNames);
  435 + Console.WriteLine("开单记录字符串生成成功:");
  436 + Console.WriteLine(orderRecordString);
  437 +
  438 + // 发送到企业微信群
  439 + try
  440 + {
  441 + var sendResult = await _weChatBotService.SendOrderRecordMessage(orderRecordString);
  442 + if (sendResult)
  443 + {
  444 + Console.WriteLine("开单记录已成功发送到企业微信群");
  445 + }
  446 + else
  447 + {
  448 + Console.WriteLine("开单记录发送到企业微信群失败");
  449 + }
  450 + }
  451 + catch (Exception wechatEx)
  452 + {
  453 + Console.WriteLine($"发送企业微信消息异常: {wechatEx.Message}");
  454 + }
  455 + }
  456 + }
  457 + catch (Exception ex)
  458 + {
  459 + // 字符串生成失败不影响主流程,只记录日志
  460 + Console.WriteLine($"生成开单记录字符串失败: {ex.Message}");
  461 + }
  462 + }
  463 + catch (Exception ex)
  464 + {
  465 + //回滚事务
  466 + _db.RollbackTran();
  467 + Console.WriteLine($"开单创建失败: {ex.Message}");
  468 + Console.WriteLine($"异常堆栈: {ex.StackTrace}");
  469 + throw NCCException.Oh(ErrorCode.COM1000);
  470 + }
  471 + }
  472 + #endregion
  473 +
  474 + #region 新建开单记录表_备份
  475 + /// <summary>
  476 + /// 新建开单记录表_备份
  477 + /// </summary>
  478 + /// <param name="input">参数</param>
  479 + /// <returns></returns>
  480 + [HttpPost("Create_Bak")]
  481 + public async Task Create_Bak([FromBody] LqKdKdjlbCrInput input)
  482 + {
  483 + var userInfo = await _userManager.GetUserInfo();
  484 + var entity = input.Adapt<LqKdKdjlbEntity>();
  485 + var HealthInstructorNames = "";
  486 + entity.Id = YitIdHelper.NextId().ToString();
  487 + entity.CreateTime = DateTime.Now;
  488 + entity.UpdateTime = DateTime.Now;
261 489 try
262 490 {
263 491 //开启事务
... ... @@ -1065,10 +1293,12 @@ namespace NCC.Extend.LqKdKdjlb
1065 1293 await _db.Updateable<LqKdJksyjEntity>().SetColumns(it => new LqKdJksyjEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync();
1066 1294 // 标记科技部老师业绩为无效
1067 1295 await _db.Updateable<LqKdKjbsyjEntity>().SetColumns(it => new LqKdKjbsyjEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync();
  1296 + // 标记开单_储扣详细表为无效
  1297 + await _db.Updateable<LqKdDeductinfoEntity>().SetColumns(it => new LqKdDeductinfoEntity { IsEffective = 0 }).Where(it => it.BillingId == id).ExecuteCommandAsync();
1068 1298 //关闭事务
1069 1299 _db.CommitTran();
1070 1300 }
1071   - catch (Exception ex) when (!(ex is NCCException))
  1301 + catch (Exception)
1072 1302 {
1073 1303 //回滚事务
1074 1304 _db.RollbackTran();
... ... @@ -1141,65 +1371,94 @@ namespace NCC.Extend.LqKdKdjlb
1141 1371 int errorCount = 0;
1142 1372 var errorMessages = new List<string>();
1143 1373  
1144   - // 2. 逐条处理历史会员权益数据
1145   - foreach (var item in historyData)
  1374 + // 2. 批量处理数据,每批1000条
  1375 + const int batchSize = 1000;
  1376 + var totalBatches = (int)Math.Ceiling((double)historyData.Count / batchSize);
  1377 +
  1378 + for (int batchIndex = 0; batchIndex < totalBatches; batchIndex++)
1146 1379 {
1147   - try
1148   - {
1149   - // 3. 生成开单记录ID
1150   - string kdjlbId = YitIdHelper.NextId().ToString();
  1380 + var batchData = historyData.Skip(batchIndex * batchSize).Take(batchSize).ToList();
1151 1381  
1152   - // 4. 创建开单记录
1153   - var kdjlbEntity = new LqKdKdjlbEntity
  1382 + var kdjlbEntities = new List<LqKdKdjlbEntity>();
  1383 + var pxmxEntities = new List<LqKdPxmxEntity>();
  1384 +
  1385 + foreach (var item in batchData)
  1386 + {
  1387 + try
1154 1388 {
1155   - Id = kdjlbId,
1156   - Djmd = item.F_StoreId, // 直接使用F_StoreId
1157   - Kdhy = item.F_MemberId,
1158   - Kdhyc = item.会员名称,
1159   - Jsj = "暂无",
1160   - Kdhysjh = item.会员电话,
1161   - Kdrq = fixedDateTime,
1162   - Zdyj = Convert.ToDecimal(item.整单业绩 ?? 0),
1163   - Sfyj = Convert.ToDecimal(item.实付业绩 ?? 0),
1164   - Qk = Convert.ToDecimal(item.欠款 ?? 0),
1165   - CreateTime = fixedDateTime,
1166   - UpdateTime = fixedDateTime,
1167   - Sfskdd = "否",
1168   - IsEffective = 1,
1169   - Bz = "导入历史会员权益数据"
1170   - };
  1389 + // 3. 生成开单记录ID
  1390 + string kdjlbId = YitIdHelper.NextId().ToString();
  1391 +
  1392 + // 4. 创建开单记录
  1393 + var kdjlbEntity = new LqKdKdjlbEntity
  1394 + {
  1395 + Id = kdjlbId,
  1396 + Djmd = (string)item.F_StoreId, // 直接使用F_StoreId
  1397 + Kdhy = (string)item.F_MemberId,
  1398 + Kdhyc = (string)item.会员名称,
  1399 + Jsj = "暂无",
  1400 + Kdhysjh = (string)item.会员电话,
  1401 + Kdrq = fixedDateTime,
  1402 + Zdyj = Convert.ToDecimal(item.整单业绩 ?? 0),
  1403 + Sfyj = Convert.ToDecimal(item.实付业绩 ?? 0),
  1404 + Qk = Convert.ToDecimal(item.欠款 ?? 0),
  1405 + CreateTime = fixedDateTime,
  1406 + UpdateTime = fixedDateTime,
  1407 + Sfskdd = "否",
  1408 + IsEffective = 1,
  1409 + Bz = "导入历史会员权益数据"
  1410 + };
1171 1411  
1172   - await _db.Insertable(kdjlbEntity).ExecuteCommandAsync();
  1412 + kdjlbEntities.Add(kdjlbEntity);
1173 1413  
1174   - // 5. 创建品项明细
1175   - string pxmxId = YitIdHelper.NextId().ToString();
  1414 + // 5. 创建品项明细
  1415 + string pxmxId = YitIdHelper.NextId().ToString();
1176 1416  
1177   - var pxmxEntity = new LqKdPxmxEntity
  1417 + var pxmxEntity = new LqKdPxmxEntity
  1418 + {
  1419 + Id = pxmxId,
  1420 + Glkdbh = kdjlbId,
  1421 + Px = (string)item.F_ProjectId,
  1422 + Pxmc = (string)item.品项名称,
  1423 + Pxjg = Convert.ToDecimal(item.品项价格 ?? 0) / Convert.ToDecimal(item.品项次数 ?? 0),
  1424 + ProjectNumber = Convert.ToDecimal(item.品项次数 ?? 0),
  1425 + SourceType = (string)item.来源,
  1426 + MemberId = (string)item.F_MemberId,
  1427 + Yjsj = fixedDateTime,
  1428 + CreateTIme = fixedDateTime,
  1429 + IsEffective = 1,
  1430 + IsEnabled = 0,
  1431 + TotalPrice = Convert.ToDecimal(item.品项价格 ?? 0),
  1432 + ActualPrice = Convert.ToDecimal(item.品项价格 ?? 0)
  1433 + };
  1434 +
  1435 + pxmxEntities.Add(pxmxEntity);
  1436 +
  1437 + successCount++;
  1438 + }
  1439 + catch (Exception ex)
1178 1440 {
1179   - Id = pxmxId,
1180   - Glkdbh = kdjlbId,
1181   - Px = item.F_ProjectId,
1182   - Pxmc = item.品项名称,
1183   - Pxjg = Convert.ToDecimal(item.品项价格 ?? 0),
1184   - ProjectNumber = Convert.ToDecimal(item.品项次数 ?? 0),
1185   - SourceType = item.来源,
1186   - MemberId = item.F_MemberId,
1187   - Yjsj = fixedDateTime,
1188   - CreateTIme = fixedDateTime,
1189   - IsEffective = 1,
1190   - IsEnabled = 0,
1191   - TotalPrice = Convert.ToDecimal(item.品项价格 ?? 0) * Convert.ToDecimal(item.品项次数 ?? 0),
1192   - ActualPrice = Convert.ToDecimal(item.品项价格 ?? 0) * Convert.ToDecimal(item.品项次数 ?? 0)
1193   - };
  1441 + errorCount++;
  1442 + errorMessages.Add($"处理记录 {(string)item.会员编号}-{(string)item.品项名称} 时出错: {ex.Message}");
  1443 + }
  1444 + }
1194 1445  
1195   - await _db.Insertable(pxmxEntity).ExecuteCommandAsync();
  1446 + // 6. 批量插入开单记录
  1447 + if (kdjlbEntities.Any())
  1448 + {
  1449 + await _db.Insertable(kdjlbEntities).ExecuteCommandAsync();
  1450 + }
1196 1451  
1197   - successCount++;
  1452 + // 7. 批量插入品项明细
  1453 + if (pxmxEntities.Any())
  1454 + {
  1455 + await _db.Insertable(pxmxEntities).ExecuteCommandAsync();
1198 1456 }
1199   - catch (Exception ex)
  1457 +
  1458 + // 8. 显示进度
  1459 + if (batchIndex % 10 == 0)
1200 1460 {
1201   - errorCount++;
1202   - errorMessages.Add($"处理记录 {item.会员编号}-{item.品项名称} 时出错: {ex.Message}");
  1461 + Console.WriteLine($"已处理 {batchIndex + 1}/{totalBatches} 批次,成功 {successCount} 条,失败 {errorCount} 条");
1203 1462 }
1204 1463 }
1205 1464  
... ... @@ -1216,13 +1475,12 @@ namespace NCC.Extend.LqKdKdjlb
1216 1475 importTime = DateTime.Now
1217 1476 };
1218 1477 }
1219   - catch (Exception ex) when (!(ex is NCCException))
  1478 + catch (Exception ex)
1220 1479 {
1221 1480 _db.RollbackTran();
1222 1481 throw NCCException.Oh($"导入历史会员权益数据失败: {ex.Message}");
1223 1482 }
1224 1483 }
1225 1484 #endregion
1226   -
1227 1485 }
1228 1486 }
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs
... ... @@ -34,6 +34,7 @@ using NCC.FriendlyException;
34 34 using NCC.JsonSerialization;
35 35 using SqlSugar;
36 36 using Yitter.IdGenerator;
  37 +using NCC.Extend.Entitys.lq_kd_deductinfo;
37 38  
38 39 namespace NCC.Extend.LqKhxx
39 40 {
... ... @@ -578,6 +579,17 @@ namespace NCC.Extend.LqKhxx
578 579 })
579 580 .ToListAsync();
580 581  
  582 + //查询储扣数据
  583 + var deductData = await _db.Queryable<LqKdDeductinfoEntity>()
  584 + .Where(x => baseItems.Select(b => b.Id).Contains(x.DeductId))
  585 + .GroupBy(x => x.DeductId)
  586 + .Select(x => new
  587 + {
  588 + BillingItemId = x.DeductId,
  589 + TotalDeduct = SqlFunc.AggregateSum(x.Amount)
  590 + })
  591 + .ToListAsync();
  592 +
581 593 // 组装结果
582 594 var remainingItems = baseItems.Select(item => new RemainingItemInfo
583 595 {
... ... @@ -589,12 +601,13 @@ namespace NCC.Extend.LqKhxx
589 601 TotalPurchased = item.ProjectNumber,
590 602 ConsumedCount = consumedData.FirstOrDefault(c => c.BillingItemId == item.Id)?.TotalConsumed ?? 0,
591 603 RefundedCount = refundedData.FirstOrDefault(r => r.BillingItemId == item.Id)?.TotalRefunded ?? 0,
  604 + DeductCount = deductData.FirstOrDefault(d => d.BillingItemId == item.Id)?.TotalDeduct ?? 0,
592 605 }).ToList();
593 606  
594 607 // 计算剩余数量
595 608 foreach (var item in remainingItems)
596 609 {
597   - item.RemainingCount = item.TotalPurchased - item.ConsumedCount - item.RefundedCount;
  610 + item.RemainingCount = item.TotalPurchased - item.ConsumedCount - item.RefundedCount - item.DeductCount;
598 611 }
599 612 return new MemberRemainingItemsOutput
600 613 {
... ... @@ -719,7 +732,7 @@ namespace NCC.Extend.LqKhxx
719 732 Lxdz = "", // 联系地址
720 733 Bz = "历史潜客导入",
721 734 CreateTime = DateTime.Now,
722   - ExpandUser = (string)item.拓客员工, // 拓客人员
  735 + ExpandUser = (string)item.F_UserId, // 拓客人员
723 736 MainHealthUser = null,
724 737 SubHealthUser = null
725 738 };
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs
... ... @@ -1464,7 +1464,7 @@ namespace NCC.Extend.LqStatistics
1464 1464 SUM(CAST(jksyj.jksyj AS DECIMAL(18,2))) as order_performance
1465 1465 FROM lq_kd_jksyj jksyj
1466 1466 INNER JOIN lq_kd_pxmx pxmx ON jksyj.F_kdpxid = pxmx.F_Id AND pxmx.F_IsEffective = 1
1467   - INNER JOIN lq_kd_kdjlb kd ON jksyj.glkdbh = kd.F_Id
  1467 + INNER JOIN lq_kd_kdjlb kd ON jksyj.glkdbh COLLATE utf8mb4_general_ci = kd.F_Id COLLATE utf8mb4_general_ci
1468 1468 WHERE jksyj.yjsj IS NOT NULL
1469 1469 AND jksyj.jksyj IS NOT NULL
1470 1470 AND jksyj.jksyj != ''
... ... @@ -2529,7 +2529,7 @@ namespace NCC.Extend.LqStatistics
2529 2529 SUM(CASE WHEN kd.sfskdd = '是' THEN COALESCE(kd.zdyj, 0) ELSE 0 END) as F_FirstOrderPerformance,
2530 2530 SUM(CASE WHEN kd.sfskdd = '否' THEN COALESCE(kd.zdyj, 0) ELSE 0 END) as F_UpgradeOrderPerformance
2531 2531 FROM lq_kd_kdjlb kd
2532   - LEFT JOIN lq_mdxx md ON kd.djmd = md.F_Id
  2532 + LEFT JOIN lq_mdxx md ON kd.djmd COLLATE utf8mb4_general_ci = md.F_Id COLLATE utf8mb4_general_ci
2533 2533 WHERE kd.F_IsEffective = 1
2534 2534 AND DATE_FORMAT(kd.kdrq, '%Y%m') = @statisticsMonth
2535 2535 GROUP BY kd.djmd, md.dm
... ... @@ -2539,7 +2539,7 @@ namespace NCC.Extend.LqStatistics
2539 2539 kd.djmd as F_StoreId,
2540 2540 COUNT(pxmx.F_ProjectNumber) as F_ItemQuantity
2541 2541 FROM lq_kd_kdjlb kd
2542   - LEFT JOIN lq_kd_pxmx pxmx ON kd.F_Id = pxmx.glkdbh AND pxmx.F_IsEffective = 1
  2542 + LEFT JOIN lq_kd_pxmx pxmx ON kd.F_Id COLLATE utf8mb4_general_ci = pxmx.glkdbh COLLATE utf8mb4_general_ci AND pxmx.F_IsEffective = 1
2543 2543 WHERE kd.F_IsEffective = 1
2544 2544 AND DATE_FORMAT(kd.kdrq, '%Y%m') = @statisticsMonth
2545 2545 GROUP BY kd.djmd
... ... @@ -2924,7 +2924,7 @@ namespace NCC.Extend.LqStatistics
2924 2924 var personalPerformanceSql = @"
2925 2925 UPDATE lq_salary_statistics s
2926 2926 INNER JOIN lq_statistics_personal_performance p
2927   - ON s.F_EmployeeId COLLATE utf8mb4_unicode_ci = p.F_EmployeeId COLLATE utf8mb4_unicode_ci
  2927 + ON s.F_EmployeeId COLLATE utf8mb4_general_ci = p.F_EmployeeId COLLATE utf8mb4_general_ci
2928 2928 AND s.F_StatisticsMonth = p.F_StatisticsMonth
2929 2929 SET
2930 2930 s.F_TotalPerformance = p.F_TotalPerformance,
... ... @@ -2944,7 +2944,7 @@ namespace NCC.Extend.LqStatistics
2944 2944 var storePerformanceSql = @"
2945 2945 UPDATE lq_salary_statistics s
2946 2946 INNER JOIN lq_statistics_store_total_performance st
2947   - ON s.F_StoreId COLLATE utf8mb4_unicode_ci = st.F_StoreId COLLATE utf8mb4_unicode_ci
  2947 + ON s.F_StoreId COLLATE utf8mb4_general_ci = st.F_StoreId COLLATE utf8mb4_general_ci
2948 2948 AND s.F_StatisticsMonth = st.F_StatisticsMonth
2949 2949 SET
2950 2950 s.F_StoreTotalPerformance = st.F_TotalOrderPerformance
... ... @@ -2960,7 +2960,7 @@ namespace NCC.Extend.LqStatistics
2960 2960 var teamPerformanceSql = @"
2961 2961 UPDATE lq_salary_statistics s
2962 2962 INNER JOIN lq_statistics_gold_triangle gt
2963   - ON s.F_GoldTriangleId COLLATE utf8mb4_unicode_ci = gt.F_GoldTriangleId COLLATE utf8mb4_unicode_ci
  2963 + ON s.F_GoldTriangleId COLLATE utf8mb4_general_ci = gt.F_GoldTriangleId COLLATE utf8mb4_general_ci
2964 2964 AND s.F_StatisticsMonth = gt.F_StatisticsMonth
2965 2965 SET
2966 2966 s.F_TeamPerformance = gt.F_TotalPerformance
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs
... ... @@ -190,10 +190,7 @@ namespace NCC.Extend.LqTkjlb
190 190 //找到input.expansionUserId的用户信息
191 191 var userInfo = await _db.Queryable<UserEntity>().Where(u => u.Id == input.expansionUserId).FirstAsync();
192 192 //判断 岗位是否为健康师,如果是健康师,则设置拓客人员是健康师
193   - if (userInfo.Gw == "健康师")
194   - {
195   - MemberInfo.ExpandUser = input.expansionUserId;
196   - }
  193 + MemberInfo.ExpandUser = input.expansionUserId;
197 194 MemberInfo.Gsmd = eventUserInfo.StoreId;
198 195 var memberResult = await _db.Insertable(MemberInfo).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
199 196 if (!(memberResult > 0))
... ...
netcore/src/Modularity/Extend/NCC.Extend/LqYcsdJsjService.cs
... ... @@ -237,7 +237,7 @@ namespace NCC.Extend.LqYcsdJsj
237 237 var month = input.DateTime.ToString("yyyyMM");
238 238  
239 239 // 先查询用户的金三角关联信息
240   - var jsjUser = await _db.Queryable<NCC.Extend.Entitys.lq_jinsanjiao_user.LqJinsanjiaoUserEntity>().Where(x => x.UserId == input.UserId && x.DeleteMark == 0).FirstAsync();
  240 + var jsjUser = await _db.Queryable<LqJinsanjiaoUserEntity>().Where(x => x.UserId == input.UserId && x.DeleteMark == 0 && x.Month == month).FirstAsync();
241 241  
242 242 if (jsjUser == null)
243 243 {
... ...
netcore/src/Modularity/Extend/NCC.Extend/Utils/LqKdKdjlbStringGenerator.cs
... ... @@ -51,29 +51,21 @@ namespace NCC.Extend.Utils
51 51  
52 52 // 活动方案:532工程
53 53 sb.AppendLine($"⏩活动方案:{entity.pxxx ?? "无"}");
54   -
55 54 // 跟单配合:王经理 竹主任 陈思思老师
56 55 var techTeachers = GetTechTeachers(entity.lqKdKjbsyjList);
57 56 sb.AppendLine($"⏩跟单配合:{techTeachers}");
58   -
59 57 // 业绩:4800
60 58 sb.AppendLine($"⏩业绩:{entity.zdyj}");
61   -
62 59 // 实付:4800
63 60 sb.AppendLine($"⏩实付:{entity.sfyj}");
64   -
65 61 // 欠款:
66 62 sb.AppendLine($"⏩欠款: {entity.qk}");
67   -
68 63 // 抵扣:
69   - sb.AppendLine($"⏩抵扣:{entity.ckmx ?? "无"}");
70   -
  64 + sb.AppendLine($"⏩抵扣:{entity.deductAmount}");
71 65 // 来源:售后
72 66 sb.AppendLine($"⏩来源:{entity.khly ?? "无"}");
73   -
74 67 // 是否属于升单:
75 68 sb.AppendLine($"⏩是否属于升单:{entity.sfskdd ?? "无"}");
76   -
77 69 // 简介:高姐是我们的老客,今天邀约到犀浦店做532,维维全程陪同,陈思思老师在操作过程中给姐姐分享企业文化,找到顾客需求、邀请王经理 竹主任 给到顾客福利、顾客爽快成交,私密档案已了解到70%,感谢顾客的信任与支持 ,王经理 竹主任 陈老师辛苦了[玫瑰]维维真棒[强]龙城国际店加油!我们还在努力中!家人们给我们打气加油👏👏👏👏等待我们的捷报👍👍
78 70 sb.AppendLine($"⏩简介:{entity.jj ?? "无"}");
79 71  
... ...
netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotTestController.cs
... ... @@ -78,7 +78,6 @@ namespace NCC.Extend.Utils
78 78 zdyj = 1000,
79 79 sfyj = 1000,
80 80 qk = 0,
81   - ckmx = "无",
82 81 khly = "测试来源",
83 82 sfskdd = "无",
84 83 jj = "这是一条测试开单记录",
... ...
修复排序规则冲突_精简版.sql 0 → 100644
  1 +-- 修复排序规则冲突 - 精简版
  2 +-- 只更新报错的相关表
  3 +
  4 +-- 1. 统一 BASE_USER 表的所有字段排序规则
  5 +ALTER TABLE BASE_USER CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  6 +
  7 +-- 2. 统一 lq_mdxx 表的所有字段排序规则
  8 +ALTER TABLE lq_mdxx CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  9 +
  10 +-- 3. 统一 lq_zjl_mdsmxsz 表的所有字段排序规则
  11 +ALTER TABLE lq_zjl_mdsmxsz CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  12 +
  13 +-- 4. 统一 lq_ycsd_jsj 表的所有字段排序规则
  14 +ALTER TABLE lq_ycsd_jsj CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  15 +
  16 +-- 5. 统一 lq_kd_jksyj 表的所有字段排序规则
  17 +ALTER TABLE lq_kd_jksyj CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  18 +
  19 +-- 6. 统一 lq_statistics_gold_triangle 表的所有字段排序规则
  20 +ALTER TABLE lq_statistics_gold_triangle CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  21 +
  22 +-- 7. 统一 lq_jinsanjiao_user 表的所有字段排序规则
  23 +ALTER TABLE lq_jinsanjiao_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  24 +
  25 +-- 8. 统一 lq_salary_statistics 表的所有字段排序规则
  26 +ALTER TABLE lq_salary_statistics CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  27 +
  28 +-- 9. 统一 lq_kd_pxmx 表的所有字段排序规则
  29 +ALTER TABLE lq_kd_pxmx CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  30 +
  31 +-- 10. 跳过 lq_kd_kdjlb 表(表太大,无法转换)
  32 +-- ALTER TABLE lq_kd_kdjlb CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  33 +
  34 +-- 11. 统一 lq_xmzl 表的所有字段排序规则
  35 +ALTER TABLE lq_xmzl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  36 +
  37 +-- 12. 统一 lq_statistics_personal_performance 表的所有字段排序规则
  38 +ALTER TABLE lq_statistics_personal_performance CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  39 +
  40 +-- 13. 统一 lq_statistics_store_total_performance 表的所有字段排序规则
  41 +ALTER TABLE lq_statistics_store_total_performance CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  42 +
  43 +-- 验证排序规则是否统一
  44 +SELECT
  45 + TABLE_NAME,
  46 + TABLE_COLLATION
  47 +FROM INFORMATION_SCHEMA.TABLES
  48 +WHERE TABLE_SCHEMA = DATABASE()
  49 + AND TABLE_NAME IN ('BASE_USER', 'lq_mdxx', 'lq_zjl_mdsmxsz', 'lq_ycsd_jsj', 'lq_kd_jksyj', 'lq_statistics_gold_triangle', 'lq_jinsanjiao_user', 'lq_salary_statistics', 'lq_kd_pxmx', 'lq_xmzl', 'lq_statistics_personal_performance', 'lq_statistics_store_total_performance')
  50 +ORDER BY TABLE_NAME;
... ...