diff --git a/netcore/src/Application/NCC.API/appsettings.json b/netcore/src/Application/NCC.API/appsettings.json index d3d8657..a074cfe 100644 --- a/netcore/src/Application/NCC.API/appsettings.json +++ b/netcore/src/Application/NCC.API/appsettings.json @@ -29,7 +29,7 @@ "AllowedHosts": "*", "ConnectionStrings": { "ConfigId": "db", - "DBName": "lqerp", + "DBName": "lqerp_test", "DBType": "MySql", //MySql;SqlServer;Oracle;PostgreSQL;Dm;Kdbndp; //SqlServer // "DefaultConnection": "Data Source=localhost;Initial Catalog={0};User ID=sqladmin;Password=P@ssw0rd;MultipleActiveResultSets=true" diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventCrInput.cs index 9120030..6681439 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventCrInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventCrInput.cs @@ -86,5 +86,10 @@ namespace NCC.Extend.Entitys.Dto.LqEvent /// 每个成员包含:用户ID、部门ID、战队名称等信息 /// public List Members { get; set; } = new List(); + + /// + /// 推送URL + /// + public string PushUrl { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventInfoOutput.cs index 355f67c..05e6688 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventInfoOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventInfoOutput.cs @@ -46,6 +46,11 @@ namespace NCC.Extend.Entitys.Dto.LqEvent public int eventType { get; set; } /// + /// 推送URL + /// + public string pushUrl { get; set; } + + /// /// 拓客活动成员列表 /// public List Members { get; set; } = new List(); diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoCrInput.cs index 9be1f65..61e1480 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoCrInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoCrInput.cs @@ -17,10 +17,10 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo /// 扣减类型 /// [Required(ErrorMessage = "扣减类型不能为空")] - public int? DeductType { get; set; } + public string DeductType { get; set; } /// - /// 扣减关联ID + /// 扣减品项关联ID /// [Required(ErrorMessage = "扣减关联ID不能为空")] public string DeductId { get; set; } @@ -28,7 +28,6 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo /// /// 开单id /// - [Required(ErrorMessage = "开单id不能为空")] public string BillingId { get; set; } /// @@ -37,5 +36,35 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo [Required(ErrorMessage = "合计金额不能为空")] [Range(0.01, 999999.99, ErrorMessage = "合计金额必须在0.01到999999.99之间")] public decimal? Amount { get; set; } + + /// + /// 是否有效 + /// + public int? IsEffective { get; set; } + + /// + /// 单价 + /// + public decimal? UnitPrice { get; set; } + + /// + /// 品项名称 + /// + public string ItemName { get; set; } + + /// + /// 品项id + /// + public string ItemId { get; set; } + + /// + /// 品项次数 + /// + public decimal? ProjectNumber { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreateTime { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoInfoOutput.cs index 29ef734..2863795 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoInfoOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoInfoOutput.cs @@ -15,7 +15,7 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo /// /// 扣减类型 /// - public int? DeductType { get; set; } + public string DeductType { get; set; } /// /// 扣减类型名称 @@ -36,5 +36,30 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo /// 合计金额 /// public decimal? Amount { get; set; } + + /// + /// 是否有效 + /// + public int? IsEffective { get; set; } + + /// + /// 单价 + /// + public decimal? UnitPrice { get; set; } + + /// + /// 品项名称 + /// + public string ItemName { get; set; } + + /// + /// 品项id + /// + public string ItemId { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreateTime { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoListOutput.cs index fcd8bcf..bce12b3 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoListOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoListOutput.cs @@ -15,7 +15,7 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo /// /// 扣减类型 /// - public int? DeductType { get; set; } + public string DeductType { get; set; } /// /// 扣减类型名称 @@ -36,5 +36,30 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo /// 合计金额 /// public decimal? Amount { get; set; } + + /// + /// 是否有效 + /// + public int? IsEffective { get; set; } + + /// + /// 单价 + /// + public decimal? UnitPrice { get; set; } + + /// + /// 品项名称 + /// + public string ItemName { get; set; } + + /// + /// 品项id + /// + public string ItemId { get; set; } + + /// + /// 创建时间 + /// + public DateTime? CreateTime { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoListQueryInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoListQueryInput.cs index 6565663..9f9dc60 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoListQueryInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdDeductinfo/LqKdDeductinfoListQueryInput.cs @@ -10,7 +10,7 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo /// /// 扣减类型 /// - public int? DeductType { get; set; } + public string DeductType { get; set; } /// /// 扣减关联ID @@ -31,5 +31,40 @@ namespace NCC.Extend.Entitys.Dto.LqKdDeductinfo /// 最大金额 /// public decimal? MaxAmount { get; set; } + + /// + /// 是否有效 + /// + public int? IsEffective { get; set; } + + /// + /// 品项名称 + /// + public string ItemName { get; set; } + + /// + /// 品项id + /// + public string ItemId { get; set; } + + /// + /// 最小单价 + /// + public decimal? MinUnitPrice { get; set; } + + /// + /// 最大单价 + /// + public decimal? MaxUnitPrice { get; set; } + + /// + /// 开始创建时间 + /// + public DateTime? StartCreateTime { get; set; } + + /// + /// 结束创建时间 + /// + public DateTime? EndCreateTime { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbCrInput.cs index d389f03..5f846b8 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbCrInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbCrInput.cs @@ -146,6 +146,16 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb public string F_FIleUrl { get; set; } /// + /// 作废关联id + /// + public string cancelRefId { get; set; } + + /// + /// 作废关联备注 + /// + public string cancelRefRemarks { get; set; } + + /// /// 扣款信息 /// public List lqKdKdjlbDeductList { get; set; } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbInfoOutput.cs index 8a59841..7887b9b 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbInfoOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbInfoOutput.cs @@ -59,10 +59,11 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb /// public string ckfs { get; set; } + /// - /// 储扣明细 + /// 储扣总金额 /// - public string ckmx { get; set; } + public decimal deductAmount { get; set; } /// /// 付款方式 diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxCrInput.cs index 8cf281d..ece452d 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxCrInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxCrInput.cs @@ -54,14 +54,14 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb public decimal projectNumber { get; set; } /// - /// 是否有效 + /// 来源类型 /// - public int? isEnabled { get; set; } = 0; + public string sourceType { get; set; } /// - /// 来源类型 + /// 备注 /// - public string sourceType { get; set; } + public string remark { get; set; } /// /// 健康师业绩 diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxInfoOutput.cs index a044f1d..ef17a42 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxInfoOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxInfoOutput.cs @@ -68,6 +68,12 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb /// public decimal actualPrice { get; set; } + + /// + /// 备注 + /// + public string remark { get; set; } + /// /// 健康师业绩列表 /// diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjCrInput.cs new file mode 100644 index 0000000..072114e --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjCrInput.cs @@ -0,0 +1,57 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace NCC.Extend.Entitys.Dto.LqKdQkbj +{ + /// + /// 开单欠款补缴记录创建输入 + /// + public class LqKdQkbjCrInput + { + /// + /// 开单ID + /// + [Required(ErrorMessage = "开单ID不能为空")] + public string BillingId { get; set; } + + /// + /// 补缴金额 + /// + [Required(ErrorMessage = "补缴金额不能为空")] + [Range(0.01, 999999.99, ErrorMessage = "补缴金额必须在0.01到999999.99之间")] + public decimal PaymentAmount { get; set; } + + /// + /// 补缴方式 + /// + [Required(ErrorMessage = "补缴方式不能为空")] + public string PaymentMethod { get; set; } + + /// + /// 补缴时间 + /// + [Required(ErrorMessage = "补缴时间不能为空")] + public DateTime PaymentTime { get; set; } + + /// + /// 补缴操作人 + /// + public string PaymentUser { get; set; } + + /// + /// 补缴账户 + /// + public string PaymentAccount { get; set; } + + /// + /// 补缴凭证号 + /// + public string PaymentReference { get; set; } + + /// + /// 补缴备注 + /// + [StringLength(500, ErrorMessage = "补缴备注不能超过500个字符")] + public string Remark { get; set; } + } +} diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjInfoOutput.cs new file mode 100644 index 0000000..3437564 --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjInfoOutput.cs @@ -0,0 +1,80 @@ +using System; + +namespace NCC.Extend.Entitys.Dto.LqKdQkbj +{ + /// + /// 开单欠款补缴记录详情输出 + /// + public class LqKdQkbjInfoOutput + { + /// + /// 主键 + /// + public string Id { get; set; } + + /// + /// 开单ID + /// + public string BillingId { get; set; } + + /// + /// 补缴金额 + /// + public decimal PaymentAmount { get; set; } + + /// + /// 补缴方式 + /// + public string PaymentMethod { get; set; } + + /// + /// 补缴方式名称 + /// + public string PaymentMethodName { get; set; } + + /// + /// 补缴时间 + /// + public DateTime PaymentTime { get; set; } + + /// + /// 补缴操作人 + /// + public string PaymentUser { get; set; } + + /// + /// 补缴操作人姓名 + /// + public string PaymentUserName { get; set; } + + /// + /// 补缴账户 + /// + public string PaymentAccount { get; set; } + + /// + /// 补缴凭证号 + /// + public string PaymentReference { get; set; } + + /// + /// 补缴备注 + /// + public string Remark { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } + + /// + /// 更新时间 + /// + public DateTime UpdateTime { get; set; } + + /// + /// 是否有效 + /// + public int IsEffective { get; set; } + } +} diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjListOutput.cs new file mode 100644 index 0000000..0e6a76d --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjListOutput.cs @@ -0,0 +1,75 @@ +using System; + +namespace NCC.Extend.Entitys.Dto.LqKdQkbj +{ + /// + /// 开单欠款补缴记录列表输出 + /// + public class LqKdQkbjListOutput + { + /// + /// 主键 + /// + public string Id { get; set; } + + /// + /// 开单ID + /// + public string BillingId { get; set; } + + /// + /// 补缴金额 + /// + public decimal PaymentAmount { get; set; } + + /// + /// 补缴方式 + /// + public string PaymentMethod { get; set; } + + /// + /// 补缴方式名称 + /// + public string PaymentMethodName { get; set; } + + /// + /// 补缴时间 + /// + public DateTime PaymentTime { get; set; } + + /// + /// 补缴操作人 + /// + public string PaymentUser { get; set; } + + /// + /// 补缴操作人姓名 + /// + public string PaymentUserName { get; set; } + + /// + /// 补缴账户 + /// + public string PaymentAccount { get; set; } + + /// + /// 补缴凭证号 + /// + public string PaymentReference { get; set; } + + /// + /// 补缴备注 + /// + public string Remark { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } + + /// + /// 是否有效 + /// + public int IsEffective { get; set; } + } +} diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjListQueryInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjListQueryInput.cs new file mode 100644 index 0000000..8f45140 --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjListQueryInput.cs @@ -0,0 +1,55 @@ +using System; + +namespace NCC.Extend.Entitys.Dto.LqKdQkbj +{ + /// + /// 开单欠款补缴记录列表查询输入 + /// + public class LqKdQkbjListQueryInput + { + /// + /// 开单ID + /// + public string BillingId { get; set; } + + /// + /// 补缴方式 + /// + public string PaymentMethod { get; set; } + + /// + /// 补缴操作人 + /// + public string PaymentUser { get; set; } + + /// + /// 最小补缴金额 + /// + public decimal? MinPaymentAmount { get; set; } + + /// + /// 最大补缴金额 + /// + public decimal? MaxPaymentAmount { get; set; } + + /// + /// 开始补缴时间 + /// + public DateTime? StartPaymentTime { get; set; } + + /// + /// 结束补缴时间 + /// + public DateTime? EndPaymentTime { get; set; } + + /// + /// 是否有效 + /// + public int? IsEffective { get; set; } + + /// + /// 补缴凭证号 + /// + public string PaymentReference { get; set; } + } +} diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjUpInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjUpInput.cs new file mode 100644 index 0000000..1f35e7c --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdQkbj/LqKdQkbjUpInput.cs @@ -0,0 +1,17 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace NCC.Extend.Entitys.Dto.LqKdQkbj +{ + /// + /// 开单欠款补缴记录更新输入 + /// + public class LqKdQkbjUpInput : LqKdQkbjCrInput + { + /// + /// 主键 + /// + [Required(ErrorMessage = "主键不能为空")] + public string Id { get; set; } + } +} diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/MemberRemainingItemsOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/MemberRemainingItemsOutput.cs index 83144e0..2ab5392 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/MemberRemainingItemsOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/MemberRemainingItemsOutput.cs @@ -92,6 +92,13 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk public decimal RefundedCount { get; set; } /// + /// 已储扣数量 + /// + /// 该品项已储扣的次数 + /// 0 + public decimal DeductCount { get; set; } + + /// /// 剩余数量 /// /// 总购买数量减去已消费数量减去已退卡数量 diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_event/LqEventEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_event/LqEventEntity.cs index b5f5023..8eba20d 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_event/LqEventEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_event/LqEventEntity.cs @@ -50,5 +50,11 @@ namespace NCC.Extend.Entitys.lq_event /// [SugarColumn(ColumnName = "F_EventType")] public int EventType { get; set; } + + /// + /// 推送URL + /// + [SugarColumn(ColumnName = "F_PushUrl")] + public string PushUrl { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_deductinfo/LqKdDeductinfoEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_deductinfo/LqKdDeductinfoEntity.cs index 22a02eb..3a94f44 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_deductinfo/LqKdDeductinfoEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_deductinfo/LqKdDeductinfoEntity.cs @@ -20,7 +20,7 @@ namespace NCC.Extend.Entitys.lq_kd_deductinfo /// 扣减类型 /// [SugarColumn(ColumnName = "F_DeductType")] - public int? DeductType { get; set; } + public string DeductType { get; set; } /// /// 扣减关联ID @@ -40,5 +40,41 @@ namespace NCC.Extend.Entitys.lq_kd_deductinfo /// [SugarColumn(ColumnName = "F_Amount")] public decimal? Amount { get; set; } + + /// + /// 是否有效 + /// + [SugarColumn(ColumnName = "F_IsEffective")] + public int? IsEffective { get; set; } + + /// + /// 单价 + /// + [SugarColumn(ColumnName = "F_UnitPrice")] + public decimal? UnitPrice { get; set; } + + /// + /// 品项名称 + /// + [SugarColumn(ColumnName = "F_ItemName")] + public string ItemName { get; set; } + + /// + /// 品项id + /// + [SugarColumn(ColumnName = "F_ItemId")] + public string ItemId { get; set; } + + /// + /// 创建时间 + /// + [SugarColumn(ColumnName = "F_CreateTime")] + public DateTime? CreateTime { get; set; } + + /// + /// 项目数量 + /// + [SugarColumn(ColumnName = "F_ProjectNumber")] + public decimal? ProjectNumber { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs index 309e905..a7e1062 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs @@ -204,5 +204,18 @@ namespace NCC.Extend.Entitys.lq_kd_kdjlb [SugarColumn(ColumnName = "F_IsEffective")] public int IsEffective { get; set; } = 1; + + /// + /// 作废关联id + /// + [SugarColumn(ColumnName = "F_CancelRefId")] + public string CancelRefId { get; set; } + + /// + /// 作废关联备注 + /// + [SugarColumn(ColumnName = "F_CancelRefRemarks")] + public string CancelRefRemarks { get; set; } + } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_pxmx/LqKdPxmxEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_pxmx/LqKdPxmxEntity.cs index 4877810..bc62ca2 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_pxmx/LqKdPxmxEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_pxmx/LqKdPxmxEntity.cs @@ -60,9 +60,6 @@ namespace NCC.Extend.Entitys.lq_kd_pxmx [SugarColumn(ColumnName = "F_CreateTIme")] public DateTime? CreateTIme { get; set; } - - - /// /// 项目次数 /// @@ -98,5 +95,11 @@ namespace NCC.Extend.Entitys.lq_kd_pxmx /// [SugarColumn(ColumnName = "F_IsEffective")] public int IsEffective { get; set; } = 1; + + /// + /// 备注 + /// + [SugarColumn(ColumnName = "F_Remark")] + public string Remark { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_qkbj/LqKdQkbjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_qkbj/LqKdQkbjEntity.cs new file mode 100644 index 0000000..952ddc8 --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_qkbj/LqKdQkbjEntity.cs @@ -0,0 +1,86 @@ +using System; +using NCC.Common.Const; +using SqlSugar; + +namespace NCC.Extend.Entitys.lq_kd_qkbj +{ + /// + /// 开单欠款补缴记录表 + /// + [SugarTable("lq_kd_qkbj")] + [Tenant(ClaimConst.TENANT_ID)] + public class LqKdQkbjEntity + { + /// + /// 主键 + /// + [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)] + public string Id { get; set; } + + /// + /// 开单ID + /// + [SugarColumn(ColumnName = "F_BillingId")] + public string BillingId { get; set; } + + /// + /// 补缴金额 + /// + [SugarColumn(ColumnName = "F_PaymentAmount")] + public decimal PaymentAmount { get; set; } + + /// + /// 补缴方式 + /// + [SugarColumn(ColumnName = "F_PaymentMethod")] + public string PaymentMethod { get; set; } + + /// + /// 补缴时间 + /// + [SugarColumn(ColumnName = "F_PaymentTime")] + public DateTime PaymentTime { get; set; } + + /// + /// 补缴操作人 + /// + [SugarColumn(ColumnName = "F_PaymentUser")] + public string PaymentUser { get; set; } + + /// + /// 补缴账户 + /// + [SugarColumn(ColumnName = "F_PaymentAccount")] + public string PaymentAccount { get; set; } + + /// + /// 补缴凭证号 + /// + [SugarColumn(ColumnName = "F_PaymentReference")] + public string PaymentReference { get; set; } + + /// + /// 补缴备注 + /// + [SugarColumn(ColumnName = "F_Remark")] + public string Remark { get; set; } + + /// + /// 创建时间 + /// + [SugarColumn(ColumnName = "F_CreateTime")] + public DateTime CreateTime { get; set; } + + /// + /// 更新时间 + /// + [SugarColumn(ColumnName = "F_UpdateTime")] + public DateTime UpdateTime { get; set; } + + /// + /// 是否有效 + /// + [SugarColumn(ColumnName = "F_IsEffective")] + public int IsEffective { get; set; } = 1; + } +} diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/StatusEnum.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/StatusEnum.cs index c71b3da..b2b34c5 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/StatusEnum.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/StatusEnum.cs @@ -8,16 +8,16 @@ namespace NCC.Extend.Entitys.Enum public enum StatusEnum { /// - /// 有效 + /// 无效 /// - [Description("有效")] - 有效 = 0, + [Description("无效")] + 无效 = -1, /// - /// 无效 + /// 有效 /// - [Description("无效")] - 无效 = 1, + [Description("有效")] + 有效 = 1, /// /// 删除 diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqEventService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqEventService.cs index 78364c4..333e74d 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqEventService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqEventService.cs @@ -150,6 +150,7 @@ namespace NCC.Extend.LqEvent eventCoordinator = entity.EventCoordinator, eventNumber = entity.EventNumber, eventType = entity.EventType, + pushUrl = entity.PushUrl, }; // 3. 获取拓客活动成员信息 diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqJdqdService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqJdqdService.cs index ca2428f..7f6b1cb 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqJdqdService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqJdqdService.cs @@ -28,7 +28,7 @@ namespace NCC.Extend.LqJdqd /// /// 进店渠道服务 /// - [ApiDescriptionSettings(Tag = "Extend",Name = "LqJdqd", Order = 200)] + [ApiDescriptionSettings(Tag = "Extend", Name = "LqJdqd", Order = 200)] [Route("api/Extend/[controller]")] public class LqJdqdService : ILqJdqdService, IDynamicApiController, ITransient { @@ -43,7 +43,7 @@ namespace NCC.Extend.LqJdqd ISqlSugarRepository lqJdqdRepository, IUserManager userManager) { - _lqJdqdRepository = lqJdqdRepository; + _lqJdqdRepository = lqJdqdRepository; _db = _lqJdqdRepository.Context; _userManager = userManager; } @@ -73,12 +73,12 @@ namespace NCC.Extend.LqJdqd var data = await _db.Queryable() .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) .WhereIF(!string.IsNullOrEmpty(input.qdmc), p => p.Qdmc.Contains(input.qdmc)) - .Select(it=> new LqJdqdListOutput + .Select(it => new LqJdqdListOutput { id = it.Id, - qdmc=it.Qdmc, - }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize); - return PageResult.SqlSugarPageResult(data); + qdmc = it.Qdmc, + }).MergeTable().OrderBy(sidx + " " + input.sort).ToPagedListAsync(input.currentPage, input.pageSize); + return PageResult.SqlSugarPageResult(data); } /// @@ -108,12 +108,12 @@ namespace NCC.Extend.LqJdqd var data = await _db.Queryable() .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) .WhereIF(!string.IsNullOrEmpty(input.qdmc), p => p.Qdmc.Contains(input.qdmc)) - .Select(it=> new LqJdqdListOutput + .Select(it => new LqJdqdListOutput { id = it.Id, - qdmc=it.Qdmc, - }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync(); - return data; + qdmc = it.Qdmc, + }).MergeTable().OrderBy(sidx + " " + input.sort).ToListAsync(); + return data; } /// @@ -135,7 +135,7 @@ namespace NCC.Extend.LqJdqd { exportData = await this.GetNoPagingList(input); } - List paramList = "[{\"value\":\"渠道编号\",\"field\":\"id\"},{\"value\":\"渠道名称\",\"field\":\"qdmc\"},]".ToList(); + List paramList = "[{\"value\":\"渠道编号\",\"field\":\"id\"},{\"value\":\"渠道名称\",\"field\":\"qdmc\"},]".ToList(); ExcelConfig excelconfig = new ExcelConfig(); excelconfig.FileName = "进店渠道.xls"; excelconfig.HeadFont = "微软雅黑"; @@ -178,7 +178,7 @@ namespace NCC.Extend.LqJdqd //开启事务 _db.BeginTran(); //批量删除进店渠道 - await _db.Deleteable().In(d => d.Id,ids).ExecuteCommandAsync(); + await _db.Deleteable().In(d => d.Id, ids).ExecuteCommandAsync(); //关闭事务 _db.CommitTran(); } diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs index 4433755..5f9fa48 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs @@ -136,6 +136,7 @@ namespace NCC.Extend.LqKdKdjlb createTime = pxmx.CreateTIme, totalPrice = pxmx.TotalPrice, actualPrice = pxmx.ActualPrice, + remark = pxmx.Remark, }; // 关联该品项的健康师业绩 @@ -258,6 +259,233 @@ namespace NCC.Extend.LqKdKdjlb entity.Id = YitIdHelper.NextId().ToString(); entity.CreateTime = DateTime.Now; entity.UpdateTime = DateTime.Now; + entity.IsEffective = StatusEnum.有效.GetHashCode(); + try + { + //开启事务 + _db.BeginTran(); + //判断是否有作废关联id + if (!string.IsNullOrEmpty(input.cancelRefId)) + { + //查询作废关联id + var cancelRefEntity = await _db.Queryable().FirstAsync(p => p.Id == input.cancelRefId); + if (cancelRefEntity == null) + { + throw NCCException.Oh("作废关联id不存在"); + } + //将作废关联id的IsEffective设置为0 + cancelRefEntity.IsEffective = StatusEnum.无效.GetHashCode(); + await _db.Updateable(cancelRefEntity).ExecuteCommandAsync(); + //把品项明细表的IsEffective设置为0 + await _db.Updateable().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdPxmxEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync(); + //把健康师业绩表的IsEffective设置为0 + await _db.Updateable().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdJksyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync(); + //把科技部老师业绩表的IsEffective设置为0 + await _db.Updateable().Where(p => p.Glkdbh == input.cancelRefId).UpdateColumns(p => new LqKdKjbsyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync(); + //把扣款信息表的IsEffective设置为0 + await _db.Updateable().Where(p => p.BillingId == input.cancelRefId).UpdateColumns(p => new LqKdDeductinfoEntity { IsEffective = StatusEnum.无效.GetHashCode() }).ExecuteCommandAsync(); + } + + //新增开单记录表记录 + entity.CreateUser = userInfo.userId; + entity.DeductAmount = input.lqKdKdjlbDeductList.Sum(x => x.Amount ?? 0);//计算储扣总金额 + var newEntity = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteReturnEntityAsync(); + //循环品相信息 + // 收集所有需要插入的实体,然后批量插入 + var allPxmxEntities = new List(); + var allJksyjEntities = new List(); + var allKjbsyjEntities = new List(); + var allDeductEntities = new List(); + // 处理扣款信息列表 + foreach (var item in input.lqKdKdjlbDeductList) + { + var lqKdDeductEntity = new LqKdDeductinfoEntity + { + Id = YitIdHelper.NextId().ToString(), + BillingId = newEntity.Id, + DeductId = item.DeductId, + DeductType = item.DeductType, + Amount = item.Amount, + ProjectNumber = item.ProjectNumber, + UnitPrice = item.UnitPrice, + ItemName = item.ItemName, + ItemId = item.ItemId, + IsEffective = StatusEnum.有效.GetHashCode(), // 设置为有效 + CreateTime = DateTime.Now, // 设置创建时间 + }; + allDeductEntities.Add(lqKdDeductEntity); + } + // 处理品项明细列表 + foreach (var item in input.lqKdPxmxList) + { + // 创建品项明细实体 + var lqKdPxmxEntity = new LqKdPxmxEntity + { + Id = YitIdHelper.NextId().ToString(), + Glkdbh = newEntity.Id, + Yjsj = input.kdrq, + CreateTIme = DateTime.Now, + MemberId = entity.Kdhy, + IsEnabled = StatusEnum.有效.GetHashCode(), + ProjectNumber = item.projectNumber, + TotalPrice = (decimal)(item.pxjg * item.projectNumber), + Px = item.px, + Pxmc = item.pxmc, + Pxjg = item.pxjg, + SourceType = item.sourceType, + ActualPrice = item.actualPrice, + Remark = item.remark, + IsEffective = StatusEnum.有效.GetHashCode(), + }; + allPxmxEntities.Add(lqKdPxmxEntity); + + // 收集该品项关联的健康师业绩 + if (item.lqKdJksyjList != null && item.lqKdJksyjList.Any()) + { + //把jksxm保存到HealthInstructorNames + foreach (var ijks_tem in item.lqKdJksyjList) + { + HealthInstructorNames += ijks_tem.jksxm + ","; + allJksyjEntities.Add(new LqKdJksyjEntity + { + Id = YitIdHelper.NextId().ToString(), + Glkdbh = newEntity.Id, + Jks = ijks_tem.jks, + Jksxm = ijks_tem.jksxm, + Jkszh = ijks_tem.jkszh, + Jksyj = ijks_tem.jksyj, + Yjsj = input.kdrq, + Jsj_id = ijks_tem.jsj_id, + Kdpxid = lqKdPxmxEntity.Id, + IsEffective = StatusEnum.有效.GetHashCode(), + }); + } + } + + // 收集该品项关联的科技部老师业绩 + if (item.lqKdKjbsyjList != null && item.lqKdKjbsyjList.Any()) + { + foreach (var ikjbs_tem in item.lqKdKjbsyjList) + { + allKjbsyjEntities.Add( + new LqKdKjbsyjEntity + { + Id = YitIdHelper.NextId().ToString(), + Glkdbh = newEntity.Id, + Kjbls = ikjbs_tem.kjbls, + Kjblsxm = ikjbs_tem.kjblsxm, + Kjblszh = ikjbs_tem.kjblszh, + Kjblsyj = ikjbs_tem.kjblsyj, + Yjsj = input.kdrq, + Kdpxid = lqKdPxmxEntity.Id, + IsEffective = StatusEnum.有效.GetHashCode(), + } + ); + } + } + } + + + + //通过会员id查询会员信息 + var memberInfo = await _db.Queryable().Where(u => u.Id == entity.Kdhy).FirstAsync(); + //通过开单记录表查询这个会员开单金额 + var kdAmount = await _db.Queryable().Where(u => u.Kdhy == entity.Kdhy).SumAsync(u => u.Sfyj); + //如果开单金额小于500,为散客,如果大于500,为会员 + if (kdAmount < 500) + { + memberInfo.Khlx = MemberTypeEnum.散客.GetHashCode().ToString(); + } + else + { + memberInfo.Khlx = MemberTypeEnum.会员.GetHashCode().ToString(); + } + await _db.Updateable(memberInfo).ExecuteCommandAsync(); + // 批量插入扣款信息 + if (allDeductEntities.Any()) + { + await _db.Insertable(allDeductEntities).ExecuteCommandAsync(); + } + // 批量插入品项明细 + if (allPxmxEntities.Any()) + { + await _db.Insertable(allPxmxEntities).ExecuteCommandAsync(); + } + // 批量插入健康师业绩 + if (allJksyjEntities.Any()) + { + await _db.Insertable(allJksyjEntities).ExecuteCommandAsync(); + } + // 批量插入科技部老师业绩 + if (allKjbsyjEntities.Any()) + { + await _db.Insertable(allKjbsyjEntities).ExecuteCommandAsync(); + } + + //关闭事务 + _db.CommitTran(); + + // 生成开单记录字符串并发送到企业微信 + try + { + var entityInfo = await GetInfo(newEntity.Id); + if (entityInfo != null) + { + var orderRecordString = _stringGenerator.GenerateOrderRecordString(entityInfo, HealthInstructorNames); + Console.WriteLine("开单记录字符串生成成功:"); + Console.WriteLine(orderRecordString); + + // 发送到企业微信群 + try + { + var sendResult = await _weChatBotService.SendOrderRecordMessage(orderRecordString); + if (sendResult) + { + Console.WriteLine("开单记录已成功发送到企业微信群"); + } + else + { + Console.WriteLine("开单记录发送到企业微信群失败"); + } + } + catch (Exception wechatEx) + { + Console.WriteLine($"发送企业微信消息异常: {wechatEx.Message}"); + } + } + } + catch (Exception ex) + { + // 字符串生成失败不影响主流程,只记录日志 + Console.WriteLine($"生成开单记录字符串失败: {ex.Message}"); + } + } + catch (Exception ex) + { + //回滚事务 + _db.RollbackTran(); + Console.WriteLine($"开单创建失败: {ex.Message}"); + Console.WriteLine($"异常堆栈: {ex.StackTrace}"); + throw NCCException.Oh(ErrorCode.COM1000); + } + } + #endregion + + #region 新建开单记录表_备份 + /// + /// 新建开单记录表_备份 + /// + /// 参数 + /// + [HttpPost("Create_Bak")] + public async Task Create_Bak([FromBody] LqKdKdjlbCrInput input) + { + var userInfo = await _userManager.GetUserInfo(); + var entity = input.Adapt(); + var HealthInstructorNames = ""; + entity.Id = YitIdHelper.NextId().ToString(); + entity.CreateTime = DateTime.Now; + entity.UpdateTime = DateTime.Now; try { //开启事务 @@ -1065,10 +1293,12 @@ namespace NCC.Extend.LqKdKdjlb await _db.Updateable().SetColumns(it => new LqKdJksyjEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync(); // 标记科技部老师业绩为无效 await _db.Updateable().SetColumns(it => new LqKdKjbsyjEntity { IsEffective = 0 }).Where(it => it.Glkdbh == id).ExecuteCommandAsync(); + // 标记开单_储扣详细表为无效 + await _db.Updateable().SetColumns(it => new LqKdDeductinfoEntity { IsEffective = 0 }).Where(it => it.BillingId == id).ExecuteCommandAsync(); //关闭事务 _db.CommitTran(); } - catch (Exception ex) when (!(ex is NCCException)) + catch (Exception) { //回滚事务 _db.RollbackTran(); @@ -1141,65 +1371,94 @@ namespace NCC.Extend.LqKdKdjlb int errorCount = 0; var errorMessages = new List(); - // 2. 逐条处理历史会员权益数据 - foreach (var item in historyData) + // 2. 批量处理数据,每批1000条 + const int batchSize = 1000; + var totalBatches = (int)Math.Ceiling((double)historyData.Count / batchSize); + + for (int batchIndex = 0; batchIndex < totalBatches; batchIndex++) { - try - { - // 3. 生成开单记录ID - string kdjlbId = YitIdHelper.NextId().ToString(); + var batchData = historyData.Skip(batchIndex * batchSize).Take(batchSize).ToList(); - // 4. 创建开单记录 - var kdjlbEntity = new LqKdKdjlbEntity + var kdjlbEntities = new List(); + var pxmxEntities = new List(); + + foreach (var item in batchData) + { + try { - Id = kdjlbId, - Djmd = item.F_StoreId, // 直接使用F_StoreId - Kdhy = item.F_MemberId, - Kdhyc = item.会员名称, - Jsj = "暂无", - Kdhysjh = item.会员电话, - Kdrq = fixedDateTime, - Zdyj = Convert.ToDecimal(item.整单业绩 ?? 0), - Sfyj = Convert.ToDecimal(item.实付业绩 ?? 0), - Qk = Convert.ToDecimal(item.欠款 ?? 0), - CreateTime = fixedDateTime, - UpdateTime = fixedDateTime, - Sfskdd = "否", - IsEffective = 1, - Bz = "导入历史会员权益数据" - }; + // 3. 生成开单记录ID + string kdjlbId = YitIdHelper.NextId().ToString(); + + // 4. 创建开单记录 + var kdjlbEntity = new LqKdKdjlbEntity + { + Id = kdjlbId, + Djmd = (string)item.F_StoreId, // 直接使用F_StoreId + Kdhy = (string)item.F_MemberId, + Kdhyc = (string)item.会员名称, + Jsj = "暂无", + Kdhysjh = (string)item.会员电话, + Kdrq = fixedDateTime, + Zdyj = Convert.ToDecimal(item.整单业绩 ?? 0), + Sfyj = Convert.ToDecimal(item.实付业绩 ?? 0), + Qk = Convert.ToDecimal(item.欠款 ?? 0), + CreateTime = fixedDateTime, + UpdateTime = fixedDateTime, + Sfskdd = "否", + IsEffective = 1, + Bz = "导入历史会员权益数据" + }; - await _db.Insertable(kdjlbEntity).ExecuteCommandAsync(); + kdjlbEntities.Add(kdjlbEntity); - // 5. 创建品项明细 - string pxmxId = YitIdHelper.NextId().ToString(); + // 5. 创建品项明细 + string pxmxId = YitIdHelper.NextId().ToString(); - var pxmxEntity = new LqKdPxmxEntity + var pxmxEntity = new LqKdPxmxEntity + { + Id = pxmxId, + Glkdbh = kdjlbId, + Px = (string)item.F_ProjectId, + Pxmc = (string)item.品项名称, + Pxjg = Convert.ToDecimal(item.品项价格 ?? 0) / Convert.ToDecimal(item.品项次数 ?? 0), + ProjectNumber = Convert.ToDecimal(item.品项次数 ?? 0), + SourceType = (string)item.来源, + MemberId = (string)item.F_MemberId, + Yjsj = fixedDateTime, + CreateTIme = fixedDateTime, + IsEffective = 1, + IsEnabled = 0, + TotalPrice = Convert.ToDecimal(item.品项价格 ?? 0), + ActualPrice = Convert.ToDecimal(item.品项价格 ?? 0) + }; + + pxmxEntities.Add(pxmxEntity); + + successCount++; + } + catch (Exception ex) { - Id = pxmxId, - Glkdbh = kdjlbId, - Px = item.F_ProjectId, - Pxmc = item.品项名称, - Pxjg = Convert.ToDecimal(item.品项价格 ?? 0), - ProjectNumber = Convert.ToDecimal(item.品项次数 ?? 0), - SourceType = item.来源, - MemberId = item.F_MemberId, - Yjsj = fixedDateTime, - CreateTIme = fixedDateTime, - IsEffective = 1, - IsEnabled = 0, - TotalPrice = Convert.ToDecimal(item.品项价格 ?? 0) * Convert.ToDecimal(item.品项次数 ?? 0), - ActualPrice = Convert.ToDecimal(item.品项价格 ?? 0) * Convert.ToDecimal(item.品项次数 ?? 0) - }; + errorCount++; + errorMessages.Add($"处理记录 {(string)item.会员编号}-{(string)item.品项名称} 时出错: {ex.Message}"); + } + } - await _db.Insertable(pxmxEntity).ExecuteCommandAsync(); + // 6. 批量插入开单记录 + if (kdjlbEntities.Any()) + { + await _db.Insertable(kdjlbEntities).ExecuteCommandAsync(); + } - successCount++; + // 7. 批量插入品项明细 + if (pxmxEntities.Any()) + { + await _db.Insertable(pxmxEntities).ExecuteCommandAsync(); } - catch (Exception ex) + + // 8. 显示进度 + if (batchIndex % 10 == 0) { - errorCount++; - errorMessages.Add($"处理记录 {item.会员编号}-{item.品项名称} 时出错: {ex.Message}"); + Console.WriteLine($"已处理 {batchIndex + 1}/{totalBatches} 批次,成功 {successCount} 条,失败 {errorCount} 条"); } } @@ -1216,13 +1475,12 @@ namespace NCC.Extend.LqKdKdjlb importTime = DateTime.Now }; } - catch (Exception ex) when (!(ex is NCCException)) + catch (Exception ex) { _db.RollbackTran(); throw NCCException.Oh($"导入历史会员权益数据失败: {ex.Message}"); } } #endregion - } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs index a16c2fe..a30ca78 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqKhxxService.cs @@ -34,6 +34,7 @@ using NCC.FriendlyException; using NCC.JsonSerialization; using SqlSugar; using Yitter.IdGenerator; +using NCC.Extend.Entitys.lq_kd_deductinfo; namespace NCC.Extend.LqKhxx { @@ -578,6 +579,17 @@ namespace NCC.Extend.LqKhxx }) .ToListAsync(); + //查询储扣数据 + var deductData = await _db.Queryable() + .Where(x => baseItems.Select(b => b.Id).Contains(x.DeductId)) + .GroupBy(x => x.DeductId) + .Select(x => new + { + BillingItemId = x.DeductId, + TotalDeduct = SqlFunc.AggregateSum(x.Amount) + }) + .ToListAsync(); + // 组装结果 var remainingItems = baseItems.Select(item => new RemainingItemInfo { @@ -589,12 +601,13 @@ namespace NCC.Extend.LqKhxx TotalPurchased = item.ProjectNumber, ConsumedCount = consumedData.FirstOrDefault(c => c.BillingItemId == item.Id)?.TotalConsumed ?? 0, RefundedCount = refundedData.FirstOrDefault(r => r.BillingItemId == item.Id)?.TotalRefunded ?? 0, + DeductCount = deductData.FirstOrDefault(d => d.BillingItemId == item.Id)?.TotalDeduct ?? 0, }).ToList(); // 计算剩余数量 foreach (var item in remainingItems) { - item.RemainingCount = item.TotalPurchased - item.ConsumedCount - item.RefundedCount; + item.RemainingCount = item.TotalPurchased - item.ConsumedCount - item.RefundedCount - item.DeductCount; } return new MemberRemainingItemsOutput { @@ -719,7 +732,7 @@ namespace NCC.Extend.LqKhxx Lxdz = "", // 联系地址 Bz = "历史潜客导入", CreateTime = DateTime.Now, - ExpandUser = (string)item.拓客员工, // 拓客人员 + ExpandUser = (string)item.F_UserId, // 拓客人员 MainHealthUser = null, SubHealthUser = null }; diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs index 855f676..8e50319 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs @@ -1464,7 +1464,7 @@ namespace NCC.Extend.LqStatistics SUM(CAST(jksyj.jksyj AS DECIMAL(18,2))) as order_performance FROM lq_kd_jksyj jksyj INNER JOIN lq_kd_pxmx pxmx ON jksyj.F_kdpxid = pxmx.F_Id AND pxmx.F_IsEffective = 1 - INNER JOIN lq_kd_kdjlb kd ON jksyj.glkdbh = kd.F_Id + INNER JOIN lq_kd_kdjlb kd ON jksyj.glkdbh COLLATE utf8mb4_general_ci = kd.F_Id COLLATE utf8mb4_general_ci WHERE jksyj.yjsj IS NOT NULL AND jksyj.jksyj IS NOT NULL AND jksyj.jksyj != '' @@ -2529,7 +2529,7 @@ namespace NCC.Extend.LqStatistics SUM(CASE WHEN kd.sfskdd = '是' THEN COALESCE(kd.zdyj, 0) ELSE 0 END) as F_FirstOrderPerformance, SUM(CASE WHEN kd.sfskdd = '否' THEN COALESCE(kd.zdyj, 0) ELSE 0 END) as F_UpgradeOrderPerformance FROM lq_kd_kdjlb kd - LEFT JOIN lq_mdxx md ON kd.djmd = md.F_Id + LEFT JOIN lq_mdxx md ON kd.djmd COLLATE utf8mb4_general_ci = md.F_Id COLLATE utf8mb4_general_ci WHERE kd.F_IsEffective = 1 AND DATE_FORMAT(kd.kdrq, '%Y%m') = @statisticsMonth GROUP BY kd.djmd, md.dm @@ -2539,7 +2539,7 @@ namespace NCC.Extend.LqStatistics kd.djmd as F_StoreId, COUNT(pxmx.F_ProjectNumber) as F_ItemQuantity FROM lq_kd_kdjlb kd - LEFT JOIN lq_kd_pxmx pxmx ON kd.F_Id = pxmx.glkdbh AND pxmx.F_IsEffective = 1 + 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 WHERE kd.F_IsEffective = 1 AND DATE_FORMAT(kd.kdrq, '%Y%m') = @statisticsMonth GROUP BY kd.djmd @@ -2924,7 +2924,7 @@ namespace NCC.Extend.LqStatistics var personalPerformanceSql = @" UPDATE lq_salary_statistics s INNER JOIN lq_statistics_personal_performance p - ON s.F_EmployeeId COLLATE utf8mb4_unicode_ci = p.F_EmployeeId COLLATE utf8mb4_unicode_ci + ON s.F_EmployeeId COLLATE utf8mb4_general_ci = p.F_EmployeeId COLLATE utf8mb4_general_ci AND s.F_StatisticsMonth = p.F_StatisticsMonth SET s.F_TotalPerformance = p.F_TotalPerformance, @@ -2944,7 +2944,7 @@ namespace NCC.Extend.LqStatistics var storePerformanceSql = @" UPDATE lq_salary_statistics s INNER JOIN lq_statistics_store_total_performance st - ON s.F_StoreId COLLATE utf8mb4_unicode_ci = st.F_StoreId COLLATE utf8mb4_unicode_ci + ON s.F_StoreId COLLATE utf8mb4_general_ci = st.F_StoreId COLLATE utf8mb4_general_ci AND s.F_StatisticsMonth = st.F_StatisticsMonth SET s.F_StoreTotalPerformance = st.F_TotalOrderPerformance @@ -2960,7 +2960,7 @@ namespace NCC.Extend.LqStatistics var teamPerformanceSql = @" UPDATE lq_salary_statistics s INNER JOIN lq_statistics_gold_triangle gt - ON s.F_GoldTriangleId COLLATE utf8mb4_unicode_ci = gt.F_GoldTriangleId COLLATE utf8mb4_unicode_ci + ON s.F_GoldTriangleId COLLATE utf8mb4_general_ci = gt.F_GoldTriangleId COLLATE utf8mb4_general_ci AND s.F_StatisticsMonth = gt.F_StatisticsMonth SET s.F_TeamPerformance = gt.F_TotalPerformance diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs index 3bc9e1c..767a81d 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs @@ -190,10 +190,7 @@ namespace NCC.Extend.LqTkjlb //找到input.expansionUserId的用户信息 var userInfo = await _db.Queryable().Where(u => u.Id == input.expansionUserId).FirstAsync(); //判断 岗位是否为健康师,如果是健康师,则设置拓客人员是健康师 - if (userInfo.Gw == "健康师") - { - MemberInfo.ExpandUser = input.expansionUserId; - } + MemberInfo.ExpandUser = input.expansionUserId; MemberInfo.Gsmd = eventUserInfo.StoreId; var memberResult = await _db.Insertable(MemberInfo).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync(); if (!(memberResult > 0)) diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqYcsdJsjService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqYcsdJsjService.cs index 6333c0d..8194187 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqYcsdJsjService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqYcsdJsjService.cs @@ -237,7 +237,7 @@ namespace NCC.Extend.LqYcsdJsj var month = input.DateTime.ToString("yyyyMM"); // 先查询用户的金三角关联信息 - var jsjUser = await _db.Queryable().Where(x => x.UserId == input.UserId && x.DeleteMark == 0).FirstAsync(); + var jsjUser = await _db.Queryable().Where(x => x.UserId == input.UserId && x.DeleteMark == 0 && x.Month == month).FirstAsync(); if (jsjUser == null) { diff --git a/netcore/src/Modularity/Extend/NCC.Extend/Utils/LqKdKdjlbStringGenerator.cs b/netcore/src/Modularity/Extend/NCC.Extend/Utils/LqKdKdjlbStringGenerator.cs index 39bb54f..876fff8 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/Utils/LqKdKdjlbStringGenerator.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/Utils/LqKdKdjlbStringGenerator.cs @@ -51,29 +51,21 @@ namespace NCC.Extend.Utils // 活动方案:532工程 sb.AppendLine($"⏩活动方案:{entity.pxxx ?? "无"}"); - // 跟单配合:王经理 竹主任 陈思思老师 var techTeachers = GetTechTeachers(entity.lqKdKjbsyjList); sb.AppendLine($"⏩跟单配合:{techTeachers}"); - // 业绩:4800 sb.AppendLine($"⏩业绩:{entity.zdyj}"); - // 实付:4800 sb.AppendLine($"⏩实付:{entity.sfyj}"); - // 欠款: sb.AppendLine($"⏩欠款: {entity.qk}"); - // 抵扣: - sb.AppendLine($"⏩抵扣:{entity.ckmx ?? "无"}"); - + sb.AppendLine($"⏩抵扣:{entity.deductAmount}"); // 来源:售后 sb.AppendLine($"⏩来源:{entity.khly ?? "无"}"); - // 是否属于升单: sb.AppendLine($"⏩是否属于升单:{entity.sfskdd ?? "无"}"); - // 简介:高姐是我们的老客,今天邀约到犀浦店做532,维维全程陪同,陈思思老师在操作过程中给姐姐分享企业文化,找到顾客需求、邀请王经理 竹主任 给到顾客福利、顾客爽快成交,私密档案已了解到70%,感谢顾客的信任与支持 ,王经理 竹主任 陈老师辛苦了[玫瑰]维维真棒[强]龙城国际店加油!我们还在努力中!家人们给我们打气加油👏👏👏👏等待我们的捷报👍👍 sb.AppendLine($"⏩简介:{entity.jj ?? "无"}"); diff --git a/netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotTestController.cs b/netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotTestController.cs index 3fc0d7e..f3630e1 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotTestController.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/Utils/WeChatBotTestController.cs @@ -78,7 +78,6 @@ namespace NCC.Extend.Utils zdyj = 1000, sfyj = 1000, qk = 0, - ckmx = "无", khly = "测试来源", sfskdd = "无", jj = "这是一条测试开单记录", diff --git a/修复排序规则冲突_精简版.sql b/修复排序规则冲突_精简版.sql new file mode 100644 index 0000000..60ef96a --- /dev/null +++ b/修复排序规则冲突_精简版.sql @@ -0,0 +1,50 @@ +-- 修复排序规则冲突 - 精简版 +-- 只更新报错的相关表 + +-- 1. 统一 BASE_USER 表的所有字段排序规则 +ALTER TABLE BASE_USER CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 2. 统一 lq_mdxx 表的所有字段排序规则 +ALTER TABLE lq_mdxx CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 3. 统一 lq_zjl_mdsmxsz 表的所有字段排序规则 +ALTER TABLE lq_zjl_mdsmxsz CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 4. 统一 lq_ycsd_jsj 表的所有字段排序规则 +ALTER TABLE lq_ycsd_jsj CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 5. 统一 lq_kd_jksyj 表的所有字段排序规则 +ALTER TABLE lq_kd_jksyj CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 6. 统一 lq_statistics_gold_triangle 表的所有字段排序规则 +ALTER TABLE lq_statistics_gold_triangle CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 7. 统一 lq_jinsanjiao_user 表的所有字段排序规则 +ALTER TABLE lq_jinsanjiao_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 8. 统一 lq_salary_statistics 表的所有字段排序规则 +ALTER TABLE lq_salary_statistics CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 9. 统一 lq_kd_pxmx 表的所有字段排序规则 +ALTER TABLE lq_kd_pxmx CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 10. 跳过 lq_kd_kdjlb 表(表太大,无法转换) +-- ALTER TABLE lq_kd_kdjlb CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 11. 统一 lq_xmzl 表的所有字段排序规则 +ALTER TABLE lq_xmzl CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 12. 统一 lq_statistics_personal_performance 表的所有字段排序规则 +ALTER TABLE lq_statistics_personal_performance CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 13. 统一 lq_statistics_store_total_performance 表的所有字段排序规则 +ALTER TABLE lq_statistics_store_total_performance CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; + +-- 验证排序规则是否统一 +SELECT + TABLE_NAME, + TABLE_COLLATION +FROM INFORMATION_SCHEMA.TABLES +WHERE TABLE_SCHEMA = DATABASE() + 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') +ORDER BY TABLE_NAME;