diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbListOutput.cs index 46f5eff..9927f26 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbListOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdKdjlb/LqKdKdjlbListOutput.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using NCC.Extend.Entitys.Dto.LqKdDeductinfo; namespace NCC.Extend.Entitys.Dto.LqKdKdjlb { @@ -189,5 +190,10 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb /// 科技部老师业绩列表 /// public List lqKdKjbsyjList { get; set; } + + /// + /// 储扣扣款信息列表 + /// + public List lqKdDeductList { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPersonTimesRecord/LqPersonTimesRecordCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPersonTimesRecord/LqPersonTimesRecordCrInput.cs new file mode 100644 index 0000000..6f6b509 --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPersonTimesRecord/LqPersonTimesRecordCrInput.cs @@ -0,0 +1,67 @@ +using System; + +namespace NCC.Extend.Entitys.Dto.LqPersonTimesRecord +{ + /// + /// 人次记录创建输入参数 + /// + public class LqPersonTimesRecordCrInput + { + /// + /// 主键ID + /// + public string id { get; set; } + + /// + /// 关联业务记录ID + /// + public string businessId { get; set; } + + /// + /// 业务类型(耗卡/开单) + /// + public string businessType { get; set; } + + /// + /// 人员类型(健康师/科技老师) + /// + public string personType { get; set; } + + /// + /// 人员ID + /// + public string personId { get; set; } + + /// + /// 人员姓名 + /// + public string personName { get; set; } + + /// + /// 客户ID + /// + public string memberId { get; set; } + + /// + /// 客户姓名 + /// + public string memberName { get; set; } + + /// + /// 工作日期(用于人次统计,格式:YYYY-MM-DD) + /// + public DateTime? workDate { get; set; } + + /// + /// 工作月份(用于人头统计,格式:202511) + /// + public string workMonth { get; set; } + + /// + /// 数量 + /// + public decimal? quantity { get; set; } + } +} + + diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPersonTimesRecord/LqPersonTimesRecordInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPersonTimesRecord/LqPersonTimesRecordInfoOutput.cs new file mode 100644 index 0000000..20563cd --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPersonTimesRecord/LqPersonTimesRecordInfoOutput.cs @@ -0,0 +1,77 @@ +using System; + +namespace NCC.Extend.Entitys.Dto.LqPersonTimesRecord +{ + /// + /// 人次记录信息输出参数 + /// + public class LqPersonTimesRecordInfoOutput + { + /// + /// 主键ID + /// + public string id { get; set; } + + /// + /// 关联业务记录ID + /// + public string businessId { get; set; } + + /// + /// 业务类型(耗卡/开单) + /// + public string businessType { get; set; } + + /// + /// 人员类型(健康师/科技老师) + /// + public string personType { get; set; } + + /// + /// 人员ID + /// + public string personId { get; set; } + + /// + /// 人员姓名 + /// + public string personName { get; set; } + + /// + /// 客户ID + /// + public string memberId { get; set; } + + /// + /// 客户姓名 + /// + public string memberName { get; set; } + + /// + /// 工作日期(用于人次统计,格式:YYYY-MM-DD) + /// + public DateTime? workDate { get; set; } + + /// + /// 工作月份(用于人头统计,格式:202511) + /// + public string workMonth { get; set; } + + /// + /// 数量 + /// + public decimal? quantity { get; set; } + + /// + /// 创建时间 + /// + public DateTime? createTime { get; set; } + + /// + /// 是否有效 + /// + public int isEffective { get; set; } + } +} + + diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPersonTimesRecord/LqPersonTimesRecordListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPersonTimesRecord/LqPersonTimesRecordListOutput.cs new file mode 100644 index 0000000..ef3d419 --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPersonTimesRecord/LqPersonTimesRecordListOutput.cs @@ -0,0 +1,77 @@ +using System; + +namespace NCC.Extend.Entitys.Dto.LqPersonTimesRecord +{ + /// + /// 人次记录列表输出参数 + /// + public class LqPersonTimesRecordListOutput + { + /// + /// 主键ID + /// + public string id { get; set; } + + /// + /// 关联业务记录ID + /// + public string businessId { get; set; } + + /// + /// 业务类型(耗卡/开单) + /// + public string businessType { get; set; } + + /// + /// 人员类型(健康师/科技老师) + /// + public string personType { get; set; } + + /// + /// 人员ID + /// + public string personId { get; set; } + + /// + /// 人员姓名 + /// + public string personName { get; set; } + + /// + /// 客户ID + /// + public string memberId { get; set; } + + /// + /// 客户姓名 + /// + public string memberName { get; set; } + + /// + /// 工作日期(用于人次统计,格式:YYYY-MM-DD) + /// + public DateTime? workDate { get; set; } + + /// + /// 工作月份(用于人头统计,格式:202511) + /// + public string workMonth { get; set; } + + /// + /// 数量 + /// + public decimal? quantity { get; set; } + + /// + /// 创建时间 + /// + public DateTime? createTime { get; set; } + + /// + /// 是否有效 + /// + public int isEffective { get; set; } + } +} + + diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPersonTimesRecord/LqPersonTimesRecordUpInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPersonTimesRecord/LqPersonTimesRecordUpInput.cs new file mode 100644 index 0000000..49f8d0c --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqPersonTimesRecord/LqPersonTimesRecordUpInput.cs @@ -0,0 +1,15 @@ +namespace NCC.Extend.Entitys.Dto.LqPersonTimesRecord +{ + /// + /// 人次记录更新输入参数 + /// + public class LqPersonTimesRecordUpInput : LqPersonTimesRecordCrInput + { + /// + /// 主键ID + /// + public string id { get; set; } + } +} + + diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkCrInput.cs index ceb7214..87fa62f 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkCrInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkCrInput.cs @@ -84,6 +84,10 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk /// public decimal? overtimeCoefficient { get; set; } = 0; + /// + /// 预约记录ID + /// + public string appointmentId { get; set; } /// /// 耗卡_品项明细 diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkInfoOutput.cs index db77441..8d8060b 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkInfoOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkInfoOutput.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using NCC.Extend.Entitys.Dto.LqPersonTimesRecord; using NCC.Extend.Entitys.Dto.LqXhJksyj; using NCC.Extend.Entitys.Dto.LqXhKjbsyj; using NCC.Extend.Entitys.Dto.LqXhPxmx; @@ -141,5 +142,15 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk /// public List lqXhPxmxList { get; set; } + /// + /// 预约记录ID + /// + public string appointmentId { get; set; } + + /// + /// 人次记录列表 + /// + public List personTimesRecordList { get; set; } + } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkListOutput.cs index 01c61e3..55b6fb4 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkListOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhHyhk/LqXhHyhkListOutput.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using NCC.Extend.Entitys.Dto.LqPersonTimesRecord; using NCC.Extend.Entitys.Dto.LqXhJksyj; using NCC.Extend.Entitys.Dto.LqXhKjbsyj; using NCC.Extend.Entitys.Dto.LqXhPxmx; +using NCC.Extend.Entitys.Dto.LqYyjl; namespace NCC.Extend.Entitys.Dto.LqXhHyhk { @@ -122,5 +124,15 @@ namespace NCC.Extend.Entitys.Dto.LqXhHyhk /// public List lqXhKjbsyjList { get; set; } + /// + /// 预约记录ID + /// + public string appointmentId { get; set; } + + /// + /// 人次记录列表 + /// + public List personTimesRecordList { get; set; } + } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxCrInput.cs index 3b55700..fc1444c 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxCrInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqXhPxmx/LqXhPxmxCrInput.cs @@ -1,5 +1,7 @@ using System; using System.Collections.Generic; +using NCC.Extend.Entitys.Dto.LqXhJksyj; +using NCC.Extend.Entitys.Dto.LqXhKjbsyj; namespace NCC.Extend.Entitys.Dto.LqXhPxmx { @@ -66,11 +68,11 @@ namespace NCC.Extend.Entitys.Dto.LqXhPxmx /// /// 健康师业绩 /// - public List lqXhJksyjList { get; set; } + public List lqXhJksyjList { get; set; } /// /// 科技部老师业绩 /// - public List lqXhKjbsyjList { get; set; } + public List lqXhKjbsyjList { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYyjl/LqYyjlAddNoDealRemarkInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYyjl/LqYyjlAddNoDealRemarkInput.cs new file mode 100644 index 0000000..2d29e36 --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYyjl/LqYyjlAddNoDealRemarkInput.cs @@ -0,0 +1,19 @@ +namespace NCC.Extend.Entitys.Dto.LqYyjl +{ + /// + /// 添加未成交说明输入参数 + /// + public class LqYyjlAddNoDealRemarkInput + { + /// + /// 预约记录ID + /// + public string id { get; set; } + + /// + /// 未成交说明 + /// + public string noDealRemark { get; set; } + } +} + diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_mx/LqHytkMxEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_mx/LqHytkMxEntity.cs index 75272ee..1d90d14 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_mx/LqHytkMxEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_mx/LqHytkMxEntity.cs @@ -49,6 +49,12 @@ namespace NCC.Extend.Entitys.lq_hytk_mx public string Pxmc { get; set; } /// + /// 品项分类 + /// + [SugarColumn(ColumnName = "F_ItemCategory")] + public string ItemCategory { get; set; } + + /// /// 品项价格 /// [SugarColumn(ColumnName = "pxjg")] 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 3a94f44..ea559d0 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 @@ -66,6 +66,12 @@ namespace NCC.Extend.Entitys.lq_kd_deductinfo public string ItemId { get; set; } /// + /// 品项分类 + /// + [SugarColumn(ColumnName = "F_ItemCategory")] + public string ItemCategory { get; set; } + + /// /// 创建时间 /// [SugarColumn(ColumnName = "F_CreateTime")] 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 735aba4..e7d26c8 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 @@ -36,6 +36,12 @@ namespace NCC.Extend.Entitys.lq_kd_pxmx public string Pxmc { get; set; } /// + /// 品项分类 + /// + [SugarColumn(ColumnName = "F_ItemCategory")] + public string ItemCategory { get; set; } + + /// /// 品项价格 /// [SugarColumn(ColumnName = "pxjg")] diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_person_times_record/LqPersonTimesRecordEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_person_times_record/LqPersonTimesRecordEntity.cs new file mode 100644 index 0000000..c75e06a --- /dev/null +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_person_times_record/LqPersonTimesRecordEntity.cs @@ -0,0 +1,94 @@ +using System; +using NCC.Common.Const; +using NCC.Extend.Entitys.Enum; +using SqlSugar; + +namespace NCC.Extend.Entitys.lq_person_times_record +{ + /// + /// 人次记录表 + /// + [SugarTable("lq_person_times_record")] + [Tenant(ClaimConst.TENANT_ID)] + public class LqPersonTimesRecordEntity + { + /// + /// 主键ID + /// + [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)] + public string Id { get; set; } + + /// + /// 关联业务记录ID + /// + [SugarColumn(ColumnName = "F_BusinessId")] + public string BusinessId { get; set; } + + /// + /// 业务类型(耗卡/开单) + /// + [SugarColumn(ColumnName = "F_BusinessType")] + public string BusinessType { get; set; } + + /// + /// 人员类型(健康师/科技老师) + /// + [SugarColumn(ColumnName = "F_PersonType")] + public string PersonType { get; set; } + + /// + /// 人员ID + /// + [SugarColumn(ColumnName = "F_PersonId")] + public string PersonId { get; set; } + + /// + /// 人员姓名 + /// + [SugarColumn(ColumnName = "F_PersonName")] + public string PersonName { get; set; } + + /// + /// 客户ID + /// + [SugarColumn(ColumnName = "F_MemberId")] + public string MemberId { get; set; } + + /// + /// 客户姓名 + /// + [SugarColumn(ColumnName = "F_MemberName")] + public string MemberName { get; set; } + + /// + /// 工作日期(用于人次统计,格式:YYYY-MM-DD) + /// + [SugarColumn(ColumnName = "F_WorkDate")] + public DateTime? WorkDate { get; set; } + + /// + /// 工作月份(用于人头统计,格式:202511) + /// + [SugarColumn(ColumnName = "F_WorkMonth")] + public string WorkMonth { get; set; } + + /// + /// 数量 + /// + [SugarColumn(ColumnName = "F_Quantity")] + public decimal? Quantity { get; set; } + + /// + /// 创建时间 + /// + [SugarColumn(ColumnName = "F_CreateTime")] + public DateTime? CreateTime { get; set; } + + /// + /// 是否有效 + /// + [SugarColumn(ColumnName = "F_IsEffective")] + public int IsEffective { get; set; } = StatusEnum.有效.GetHashCode(); + } +} + diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_pxmx/LqXhPxmxEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_pxmx/LqXhPxmxEntity.cs index 8e7075e..77a2fd2 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_pxmx/LqXhPxmxEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_pxmx/LqXhPxmxEntity.cs @@ -42,6 +42,12 @@ namespace NCC.Extend.Entitys.lq_xh_pxmx public string Pxmc { get; set; } /// + /// 品项分类 + /// + [SugarColumn(ColumnName = "F_ItemCategory")] + public string ItemCategory { get; set; } + + /// /// 品项价格 /// [SugarColumn(ColumnName = "pxjg")] diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs index 56bd52c..2906262 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs @@ -25,6 +25,7 @@ using NCC.Extend.Entitys.lq_hytk_jksyj; using NCC.Extend.Entitys.lq_hytk_kjbsyj; using NCC.Extend.Entitys.lq_hytk_mx; using NCC.Extend.Entitys.lq_kd_pxmx; +using NCC.Extend.Entitys.lq_xmzl; using NCC.Extend.Interfaces.LqHytkHytk; using NCC.FriendlyException; using NCC.JsonSerialization; @@ -408,6 +409,7 @@ namespace NCC.Extend.LqHytkHytk SourceType = item.F_SourceType, TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)), IsEffective = StatusEnum.有效.GetHashCode(), + ItemCategory = await _db.Queryable().Where(x => x.Id == item.px).Select(x => x.Qt2).FirstAsync(), }; allMxEntities.Add(lqHytkMxEntity); @@ -559,6 +561,7 @@ namespace NCC.Extend.LqHytkHytk ProjectNumber = item.F_ProjectNumber ?? 1, SourceType = item.F_SourceType, TotalPrice = item.F_TotalPrice ?? (item.pxjg * (item.F_ProjectNumber ?? 1)), + ItemCategory = await _db.Queryable().Where(x => x.Id == item.px).Select(x => x.Qt2).FirstAsync(), }; allMxEntities.Add(lqHytkMxEntity); diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs index 8e165ec..ad43a60 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs @@ -363,65 +363,77 @@ namespace NCC.Extend.LqKdKdjlb var jksyjList = new List(); if (billingIds.Any()) { - jksyjList = await _db.Queryable() - .Where(x => billingIds.Contains(x.Glkdbh) && x.IsEffective == StatusEnum.有效.GetHashCode()) - .Select(x => new LqKdJksyjInfoOutput - { - id = x.Id, - glkdbh = x.Glkdbh, - kdpxid = x.Kdpxid, - jks = x.Jks, - jksxm = x.Jksxm, - jkszh = x.Jkszh, - jksyj = x.Jksyj, - yjsj = x.Yjsj, - jsj_id = x.Jsj_id, - isEffective = x.IsEffective - }) - .ToListAsync(); + jksyjList = await _db.Queryable().Where(x => billingIds.Contains(x.Glkdbh) && x.IsEffective == StatusEnum.有效.GetHashCode()).Select(x => new LqKdJksyjInfoOutput + { + id = x.Id, + glkdbh = x.Glkdbh, + kdpxid = x.Kdpxid, + jks = x.Jks, + jksxm = x.Jksxm, + jkszh = x.Jkszh, + jksyj = x.Jksyj, + yjsj = x.Yjsj, + jsj_id = x.Jsj_id, + isEffective = x.IsEffective + }).ToListAsync(); } // 批量查询科技部老师业绩(性能优化:一次性查询所有开单的科技部老师业绩) var kjbsyjList = new List(); if (billingIds.Any()) { - kjbsyjList = await _db.Queryable() - .Where(x => billingIds.Contains(x.Glkdbh) && x.IsEffective == StatusEnum.有效.GetHashCode()) - .Select(x => new LqKdKjbsyjInfoOutput + kjbsyjList = await _db.Queryable().Where(x => billingIds.Contains(x.Glkdbh) && x.IsEffective == StatusEnum.有效.GetHashCode()).Select(x => new LqKdKjbsyjInfoOutput + { + id = x.Id, + glkdbh = x.Glkdbh, + kdpxid = x.Kdpxid, + kjbls = x.Kjbls, + kjblsxm = x.Kjblsxm, + kjblszh = x.Kjblszh, + kjblsyj = x.Kjblsyj, + yjsj = x.Yjsj, + isEffective = x.IsEffective + }) + .ToListAsync(); + } + + // 批量查询储扣扣款信息(性能优化:一次性查询所有开单的储扣扣款信息) + var deductinfoList = new List(); + if (billingIds.Any()) + { + deductinfoList = await _db.Queryable().Where(x => billingIds.Contains(x.BillingId) && x.IsEffective == StatusEnum.有效.GetHashCode()) + .Select(x => new LqKdDeductinfoInfoOutput { id = x.Id, - glkdbh = x.Glkdbh, - kdpxid = x.Kdpxid, - kjbls = x.Kjbls, - kjblsxm = x.Kjblsxm, - kjblszh = x.Kjblszh, - kjblsyj = x.Kjblsyj, - yjsj = x.Yjsj, - isEffective = x.IsEffective + deductType = x.DeductType, + deductId = x.DeductId, + billingId = x.BillingId, + amount = x.Amount, + isEffective = x.IsEffective, + unitPrice = x.UnitPrice, + itemName = x.ItemName, + itemId = x.ItemId, + createTime = x.CreateTime, + projectNumber = x.ProjectNumber, + }) .ToListAsync(); } + // 按开单ID分组储扣扣款信息 + var deductinfoGrouped = deductinfoList.GroupBy(x => x.billingId).ToDictionary(g => g.Key, g => g.ToList()); // 按开单ID分组健康师业绩 - var jksyjGrouped = jksyjList.GroupBy(x => x.glkdbh) - .ToDictionary(g => g.Key, g => g.ToList()); - + var jksyjGrouped = jksyjList.GroupBy(x => x.glkdbh).ToDictionary(g => g.Key, g => g.ToList()); // 按开单ID分组科技部老师业绩 - var kjbsyjGrouped = kjbsyjList.GroupBy(x => x.glkdbh) - .ToDictionary(g => g.Key, g => g.ToList()); + var kjbsyjGrouped = kjbsyjList.GroupBy(x => x.glkdbh).ToDictionary(g => g.Key, g => g.ToList()); // 为每个开单记录分配品项明细、健康师业绩和科技部老师业绩 foreach (var item in data.list) { - item.ItemDetails = itemDetailsGrouped.ContainsKey(item.id) - ? itemDetailsGrouped[item.id] - : new List(); - item.lqKdJksyjList = jksyjGrouped.ContainsKey(item.id) - ? jksyjGrouped[item.id] - : new List(); - item.lqKdKjbsyjList = kjbsyjGrouped.ContainsKey(item.id) - ? kjbsyjGrouped[item.id] - : new List(); + item.ItemDetails = itemDetailsGrouped.ContainsKey(item.id) ? itemDetailsGrouped[item.id] : new List(); + item.lqKdJksyjList = jksyjGrouped.ContainsKey(item.id) ? jksyjGrouped[item.id] : new List(); + item.lqKdKjbsyjList = kjbsyjGrouped.ContainsKey(item.id) ? kjbsyjGrouped[item.id] : new List(); + item.lqKdDeductList = deductinfoGrouped.ContainsKey(item.id) ? deductinfoGrouped[item.id] : new List(); } return PageResult.SqlSugarPageResult(data); @@ -802,6 +814,7 @@ namespace NCC.Extend.LqKdKdjlb ItemId = item.ItemId, IsEffective = StatusEnum.有效.GetHashCode(), // 设置为有效 CreateTime = DateTime.Now, // 设置创建时间 + ItemCategory = await _db.Queryable().Where(x => x.Id == item.ItemId).Select(x => x.Qt2).FirstAsync(), }; allDeductEntities.Add(lqKdDeductEntity); } @@ -827,6 +840,7 @@ namespace NCC.Extend.LqKdKdjlb Remark = item.remark, IsEffective = StatusEnum.有效.GetHashCode(), ActivityId = input.activityId, + ItemCategory = await _db.Queryable().Where(x => x.Id == item.px).Select(x => x.Qt2).FirstAsync(), }; allPxmxEntities.Add(lqKdPxmxEntity); @@ -1546,6 +1560,7 @@ namespace NCC.Extend.LqKdKdjlb ItemId = item.ItemId, IsEffective = StatusEnum.有效.GetHashCode(), // 设置为有效 CreateTime = DateTime.Now, // 设置创建时间 + ItemCategory = await _db.Queryable().Where(x => x.Id == item.DeductId).Select(x => x.Qt2).FirstAsync(), }; allDeductEntities.Add(lqKdDeductEntity); } @@ -1571,6 +1586,7 @@ namespace NCC.Extend.LqKdKdjlb Remark = item.remark, IsEffective = StatusEnum.有效.GetHashCode(), ActivityId = input.activityId, + ItemCategory = await _db.Queryable().Where(x => x.Id == item.px).Select(x => x.Qt2).FirstAsync(), }; allPxmxEntities.Add(lqKdPxmxEntity); diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs index 3870d34..74b003c 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs @@ -16,18 +16,22 @@ using NCC.Common.Model.NPOI; using NCC.DataEncryption; using NCC.Dependency; using NCC.DynamicApiController; +using NCC.Extend.Entitys.Dto.LqPersonTimesRecord; using NCC.Extend.Entitys.Dto.LqXhHyhk; using NCC.Extend.Entitys.Dto.LqXhJksyj; using NCC.Extend.Entitys.Dto.LqXhKjbsyj; using NCC.Extend.Entitys.Dto.LqXhPxmx; +using NCC.Extend.Entitys.Dto.LqYyjl; using NCC.Extend.Entitys.Enum; using NCC.Extend.Entitys.lq_kd_kdjlb; using NCC.Extend.Entitys.lq_kd_pxmx; using NCC.Extend.Entitys.lq_khxx; +using NCC.Extend.Entitys.lq_person_times_record; using NCC.Extend.Entitys.lq_xh_hyhk; using NCC.Extend.Entitys.lq_xh_jksyj; using NCC.Extend.Entitys.lq_xh_kjbsyj; using NCC.Extend.Entitys.lq_xh_pxmx; +using NCC.Extend.Entitys.lq_xmzl; using NCC.Extend.Interfaces.LqXhHyhk; using NCC.FriendlyException; using NCC.JsonSerialization; @@ -111,13 +115,12 @@ namespace NCC.Extend.LqXhHyhk // 2. 查询品项明细列表 var lqXhPxmxList = await _db.Queryable().Where(w => w.ConsumeInfoId == entity.Id).ToListAsync(); - // 3. 查询健康师业绩列表 var lqXhJksyjList = await _db.Queryable().Where(w => w.Glkdbh == entity.Id).ToListAsync(); - // 4. 查询科技部老师业绩列表 var lqXhKjbsyjList = await _db.Queryable().Where(w => w.Glkdbh == entity.Id).ToListAsync(); - + // 获取人次记录列表 + var personTimesRecordList = await _db.Queryable().Where(x => x.BusinessId == entity.Id && x.IsEffective == StatusEnum.有效.GetHashCode()).ToListAsync(); // 5. 构建品项明细输出,每个品项关联对应的业绩信息 var pxmxOutputList = new List(); foreach (var pxmx in lqXhPxmxList) @@ -299,8 +302,7 @@ namespace NCC.Extend.LqXhHyhk // 如果两个都传入了,需要同时JOIN两个表 if (!string.IsNullOrEmpty(input.jksId) && !string.IsNullOrEmpty(input.kjblsId)) { - query = _db.Queryable( - (jksyj, kjbsyj, hyhk) => jksyj.Glkdbh == hyhk.Id && kjbsyj.Glkdbh == hyhk.Id) + query = _db.Queryable((jksyj, kjbsyj, hyhk) => jksyj.Glkdbh == hyhk.Id && kjbsyj.Glkdbh == hyhk.Id) .Where((jksyj, kjbsyj, hyhk) => jksyj.Jkszh == input.jksId && jksyj.IsEffective == StatusEnum.有效.GetHashCode()) .Where((jksyj, kjbsyj, hyhk) => kjbsyj.Kjblszh == input.kjblsId && kjbsyj.IsEffective == StatusEnum.有效.GetHashCode()) .Select((jksyj, kjbsyj, hyhk) => hyhk) @@ -369,6 +371,7 @@ namespace NCC.Extend.LqXhHyhk overtimeCoefficient = it.OvertimeCoefficient, originalSgfy = it.OriginalSgfy, overtimeSgfy = it.OvertimeSgfy, + appointmentId = it.AppointmentId, }) .MergeTable() .OrderBy($"{sidx} {sort}") @@ -517,101 +520,6 @@ namespace NCC.Extend.LqXhHyhk } #endregion - #region 获取会员耗卡列表(备份) - /// - /// 获取会员耗卡列表 - /// - /// 请求参数 - /// - [HttpGet("GetListBak")] - public async Task GetListBak([FromQuery] LqXhHyhkListQueryInput input) - { - var sidx = input.sidx == null ? "id" : input.sidx; - List queryHksj = input.hksj != null ? input.hksj.Split(',').ToObeject>() : null; - DateTime? startHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.First()) : null; - DateTime? endHksj = queryHksj != null ? Ext.GetDateTime(queryHksj.Last()) : null; - var data = await _db.Queryable() - .WhereIF(!string.IsNullOrEmpty(input.keyword), p => p.Hymc.Contains(input.keyword) || p.Hyzh.Contains(input.keyword) || p.MemberPhone.Contains(input.keyword)) - .WhereIF(!string.IsNullOrEmpty(input.id), p => p.Id.Contains(input.id)) - .WhereIF(!string.IsNullOrEmpty(input.md), p => p.Md.Equals(input.md)) - .WhereIF(!string.IsNullOrEmpty(input.mdbh), p => p.Mdbh.Contains(input.mdbh)) - .WhereIF(!string.IsNullOrEmpty(input.mdmc), p => p.Mdmc.Contains(input.mdmc)) - .WhereIF(!string.IsNullOrEmpty(input.hy), p => p.Hy.Equals(input.hy)) - .WhereIF(!string.IsNullOrEmpty(input.hyzh), p => p.Hyzh.Contains(input.hyzh)) - .WhereIF(!string.IsNullOrEmpty(input.hymc), p => p.Hymc.Contains(input.hymc)) - .WhereIF(!string.IsNullOrEmpty(input.gklx), p => p.Gklx.Equals(input.gklx)) - .WhereIF(!string.IsNullOrEmpty(input.sfykjb), p => p.Sfykjb.Equals(input.sfykjb)) - .WhereIF(queryHksj != null, p => p.Hksj >= new DateTime(startHksj.ToDate().Year, startHksj.ToDate().Month, startHksj.ToDate().Day, 0, 0, 0)) - .WhereIF(queryHksj != null, p => p.Hksj <= new DateTime(endHksj.ToDate().Year, endHksj.ToDate().Month, endHksj.ToDate().Day, 23, 59, 59)) - .WhereIF(!string.IsNullOrEmpty(input.czry), p => p.Czry.Equals(input.czry)) - .WhereIF(input.isEffective != 0, p => p.IsEffective == input.isEffective) - .Select(it => new LqXhHyhkListOutput - { - id = it.Id, - md = it.Md, - mdbh = it.Mdbh, - mdmc = it.Mdmc, - hy = it.Hy, - hyzh = it.Hyzh, - hymc = SqlFunc.Subqueryable().Where(w => w.Id == it.Hy).Select(w => w.Khmc), - gklx = it.Gklx, - xfje = SqlFunc.ToString(it.Xfje), - sgfy = SqlFunc.ToString(it.Sgfy), - sfykjb = it.Sfykjb, - hksj = it.Hksj, - czry = it.Czry, - memberPhone = SqlFunc.Subqueryable().Where(w => w.Id == it.Hy).Select(w => w.Sjh), - isEffective = it.IsEffective, - }) - .MergeTable() - .OrderBy(sidx + " " + input.sort) - .ToPagedListAsync(input.currentPage, input.pageSize); - - // 获取当前页的耗卡记录ID列表 - var consumeIds = data.list.Select(x => x.id).ToList(); - - // 批量查询耗卡明细 - var consumeDetails = new List(); - if (consumeIds.Any()) - { - consumeDetails = await _db.Queryable() - .Where(x => consumeIds.Contains(x.ConsumeInfoId) && x.IsEffective == StatusEnum.有效.GetHashCode()) - .Select(x => new LqXhPxmxInfoOutput - { - id = x.Id, - consumeInfoId = x.ConsumeInfoId, - billingItemId = x.BillingItemId, - px = x.Px, - pxmc = x.Pxmc, - pxjg = x.Pxjg, - memberId = x.MemberId, - createTime = x.CreateTIme, - projectNumber = x.ProjectNumber, - originalProjectNumber = x.OriginalProjectNumber, - overtimeProjectNumber = x.OvertimeProjectNumber, - sourceType = x.SourceType, - totalPrice = x.TotalPrice, - isEffective = x.IsEffective, - }) - .ToListAsync(); - } - - // 按耗卡记录ID分组耗卡明细 - var consumeDetailsGrouped = consumeDetails.GroupBy(x => x.consumeInfoId) - .ToDictionary(g => g.Key, g => g.ToList()); - - // 为每个耗卡记录分配耗卡明细 - foreach (var item in data.list) - { - item.ConsumeDetails = consumeDetailsGrouped.ContainsKey(item.id) - ? consumeDetailsGrouped[item.id] - : new List(); - } - - return PageResult.SqlSugarPageResult(data); - } - #endregion - #region 根据健康师ID获取耗卡列表 /// /// 根据健康师ID获取耗卡列表 @@ -670,8 +578,7 @@ namespace NCC.Extend.LqXhHyhk } // 通过健康师业绩表关联查询耗卡记录 - var data = await _db.Queryable( - (jksyj, hyhk) => jksyj.Glkdbh == hyhk.Id) + var data = await _db.Queryable((jksyj, hyhk) => jksyj.Glkdbh == hyhk.Id) .Where((jksyj, hyhk) => jksyj.Jkszh == input.jksId) .WhereIF(input.isEffective != 0, (jksyj, hyhk) => jksyj.IsEffective == input.isEffective && hyhk.IsEffective == input.isEffective) .WhereIF(input.isEffective == 0, (jksyj, hyhk) => jksyj.IsEffective == StatusEnum.有效.GetHashCode() && hyhk.IsEffective == StatusEnum.有效.GetHashCode()) @@ -705,15 +612,41 @@ namespace NCC.Extend.LqXhHyhk .OrderBy($"{sidx} {sort}") .ToPagedListAsync(input.currentPage, input.pageSize); + + // 获取当前页的耗卡记录ID列表 var consumeIds = data.list.Select(x => x.id).ToList(); - + // 获取人次记录列表 + var personTimesRecordList = await _db.Queryable().Where(x => consumeIds.Contains(x.BusinessId) && x.IsEffective == StatusEnum.有效.GetHashCode()) + .Select(x => new LqPersonTimesRecordListOutput + { + id = x.Id, + businessId = x.BusinessId, + businessType = x.BusinessType, + personType = x.PersonType, + personId = x.PersonId, + personName = x.PersonName, + memberId = x.MemberId, + memberName = x.MemberName, + workDate = x.WorkDate, + workMonth = x.WorkMonth, + quantity = x.Quantity, + createTime = x.CreateTime, + isEffective = x.IsEffective, + }) + .ToListAsync(); + // 按耗卡记录ID分组人次记录 + var personTimesRecordGrouped = personTimesRecordList.GroupBy(x => x.businessId).ToDictionary(g => g.Key, g => g.ToList()); + // 为每个耗卡记录分配人次记录 + foreach (var item in data.list) + { + item.personTimesRecordList = personTimesRecordGrouped.ContainsKey(item.id) ? personTimesRecordGrouped[item.id] : new List(); + } // 批量查询耗卡明细 var consumeDetails = new List(); if (consumeIds.Any()) { - consumeDetails = await _db.Queryable() - .Where(x => consumeIds.Contains(x.ConsumeInfoId) && x.IsEffective == StatusEnum.有效.GetHashCode()) + consumeDetails = await _db.Queryable().Where(x => consumeIds.Contains(x.ConsumeInfoId) && x.IsEffective == StatusEnum.有效.GetHashCode()) .Select(x => new LqXhPxmxInfoOutput { id = x.Id, @@ -733,19 +666,13 @@ namespace NCC.Extend.LqXhHyhk }) .ToListAsync(); } - // 按耗卡记录ID分组耗卡明细 - var consumeDetailsGrouped = consumeDetails.GroupBy(x => x.consumeInfoId) - .ToDictionary(g => g.Key, g => g.ToList()); - + var consumeDetailsGrouped = consumeDetails.GroupBy(x => x.consumeInfoId).ToDictionary(g => g.Key, g => g.ToList()); // 为每个耗卡记录分配耗卡明细 foreach (var item in data.list) { - item.ConsumeDetails = consumeDetailsGrouped.ContainsKey(item.id) - ? consumeDetailsGrouped[item.id] - : new List(); + item.ConsumeDetails = consumeDetailsGrouped.ContainsKey(item.id) ? consumeDetailsGrouped[item.id] : new List(); } - return PageResult.SqlSugarPageResult(data); } catch (Exception ex) @@ -956,6 +883,7 @@ namespace NCC.Extend.LqXhHyhk entity.UpdateTime = DateTime.Now; entity.OvertimeCoefficient = input.overtimeCoefficient ?? 0; entity.OriginalSgfy = input.sgfy; + entity.AppointmentId = input.appointmentId; //加班手工费 = 原始手工费 * 加班系数 entity.OvertimeSgfy = entity.OriginalSgfy * entity.OvertimeCoefficient; //最终手工费 = 原始手工费 + 加班手工费 @@ -979,6 +907,7 @@ namespace NCC.Extend.LqXhHyhk var allPxmxEntities = new List(); var allJksyjEntities = new List(); var allKjbsyjEntities = new List(); + var allPersonTimesRecordEntities = new List(); // 处理品项明细列表 if (input.lqXhPxmxList != null && input.lqXhPxmxList.Any()) { @@ -1002,7 +931,7 @@ namespace NCC.Extend.LqXhHyhk Pxjg = item.pxjg, SourceType = item.sourceType, IsEffective = StatusEnum.有效.GetHashCode(), - + ItemCategory = await _db.Queryable().Where(x => x.Id == item.px).Select(x => x.Qt2).FirstAsync(), }; allPxmxEntities.Add(lqXhPxmxEntity); @@ -1074,6 +1003,57 @@ namespace NCC.Extend.LqXhHyhk } } } + //获取这次耗卡有多少个健康师 + var jksCount = allJksyjEntities.GroupBy(x => x.Jks).Count(); + //添加到人次表里面去 + foreach (var item in allJksyjEntities.Select(x => x.Jks).Distinct()) + { + LqPersonTimesRecordEntity personTimesRecordEntity = new LqPersonTimesRecordEntity + { + Id = YitIdHelper.NextId().ToString(), + BusinessId = newEntity.Id, + BusinessType = "耗卡", + PersonType = "健康师", + PersonId = item, + PersonName = allJksyjEntities.Where(x => x.Jks == item).Select(x => x.Jksxm).First(), + MemberId = entity.Hy, + MemberName = memberInfo.Khmc, + WorkDate = input.hksj, + WorkMonth = input.hksj.ToDate().ToString("yyyyMM"), + Quantity = 1 / (decimal)jksCount, + CreateTime = DateTime.Now, + IsEffective = StatusEnum.有效.GetHashCode(), + }; + allPersonTimesRecordEntities.Add(personTimesRecordEntity); + } + //获取这次耗卡有多少个科技部老师 + var kjbCount = allKjbsyjEntities.GroupBy(x => x.Kjbls).Count(); + //添加到人次表里面去 + foreach (var item in allKjbsyjEntities.Select(x => x.Kjbls).Distinct()) + { + LqPersonTimesRecordEntity personTimesRecordEntity = new LqPersonTimesRecordEntity + { + Id = YitIdHelper.NextId().ToString(), + BusinessId = newEntity.Id, + BusinessType = "耗卡", + PersonType = "科技部老师", + PersonId = item, + PersonName = allKjbsyjEntities.Where(x => x.Kjbls == item).Select(x => x.Kjblsxm).First(), + MemberId = entity.Hy, + MemberName = memberInfo.Khmc, + WorkDate = input.hksj, + WorkMonth = input.hksj.ToDate().ToString("yyyyMM"), + Quantity = 1 / (decimal)kjbCount, + CreateTime = DateTime.Now, + IsEffective = StatusEnum.有效.GetHashCode(), + }; + allPersonTimesRecordEntities.Add(personTimesRecordEntity); + } + // 批量插入人次记录 + if (allPersonTimesRecordEntities.Any()) + { + await _db.Insertable(allPersonTimesRecordEntities).ExecuteCommandAsync(); + } // 批量插入品项明细 if (allPxmxEntities.Any()) { @@ -1264,6 +1244,7 @@ namespace NCC.Extend.LqXhHyhk entity.OriginalSgfy = input.sgfy; entity.OvertimeSgfy = (decimal)(entity.OvertimeCoefficient * input.sgfy); entity.Sgfy = entity.OriginalSgfy + entity.OvertimeSgfy; + entity.AppointmentId = input.appointmentId; //更新会员耗卡记录 await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); @@ -1280,10 +1261,12 @@ namespace NCC.Extend.LqXhHyhk await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); await _db.Deleteable().Where(u => u.Glkdbh == id).ExecuteCommandAsync(); await _db.Deleteable().Where(u => u.ConsumeInfoId == id).ExecuteCommandAsync(); + await _db.Deleteable().Where(u => u.BusinessId == id).ExecuteCommandAsync(); // 收集所有需要插入的实体,然后批量插入 var allPxmxEntities = new List(); var allJksyjEntities = new List(); var allKjbsyjEntities = new List(); + var allPersonTimesRecordEntities = new List(); // 处理品项明细列表 if (input.lqXhPxmxList != null && input.lqXhPxmxList.Any()) { @@ -1307,6 +1290,7 @@ namespace NCC.Extend.LqXhHyhk OriginalProjectNumber = item.projectNumber ?? 0, OvertimeProjectNumber = (decimal)(entity.OvertimeCoefficient * (item.projectNumber ?? 0)), ProjectNumber = (decimal)((item.projectNumber ?? 0) + (entity.OvertimeCoefficient * (item.projectNumber ?? 0))), + ItemCategory = await _db.Queryable().Where(x => x.Id == item.px).Select(x => x.Qt2).FirstAsync(), }; allPxmxEntities.Add(lqXhPxmxEntity); @@ -1376,6 +1360,57 @@ namespace NCC.Extend.LqXhHyhk } } } + //获取这次耗卡有多少个健康师 + var jksCount = allJksyjEntities.GroupBy(x => x.Jks).Count(); + //添加到人次表里面去 + foreach (var item in allJksyjEntities.Select(x => x.Jks).Distinct()) + { + LqPersonTimesRecordEntity personTimesRecordEntity = new LqPersonTimesRecordEntity + { + Id = YitIdHelper.NextId().ToString(), + BusinessId = input.id, + BusinessType = "耗卡", + PersonType = "健康师", + PersonId = item, + PersonName = allJksyjEntities.Where(x => x.Jks == item).Select(x => x.Jksxm).First(), + MemberId = entity.Hy, + MemberName = memberInfo.Khmc, + WorkDate = input.hksj, + WorkMonth = input.hksj.ToDate().ToString("yyyyMM"), + Quantity = 1 / (decimal)jksCount, + CreateTime = DateTime.Now, + IsEffective = StatusEnum.有效.GetHashCode(), + }; + allPersonTimesRecordEntities.Add(personTimesRecordEntity); + } + //获取这次耗卡有多少个科技部老师 + var kjbCount = allKjbsyjEntities.GroupBy(x => x.Kjbls).Count(); + //添加到人次表里面去 + foreach (var item in allKjbsyjEntities.Select(x => x.Kjbls).Distinct()) + { + LqPersonTimesRecordEntity personTimesRecordEntity = new LqPersonTimesRecordEntity + { + Id = YitIdHelper.NextId().ToString(), + BusinessId = input.id, + BusinessType = "耗卡", + PersonType = "科技部老师", + PersonId = item, + PersonName = allKjbsyjEntities.Where(x => x.Kjbls == item).Select(x => x.Kjblsxm).First(), + MemberId = entity.Hy, + MemberName = memberInfo.Khmc, + WorkDate = input.hksj, + WorkMonth = input.hksj.ToDate().ToString("yyyyMM"), + Quantity = 1 / (decimal)kjbCount, + CreateTime = DateTime.Now, + IsEffective = StatusEnum.有效.GetHashCode(), + }; + allPersonTimesRecordEntities.Add(personTimesRecordEntity); + } + // 批量插入人次记录 + if (allPersonTimesRecordEntities.Any()) + { + await _db.Insertable(allPersonTimesRecordEntities).ExecuteCommandAsync(); + } // 批量插入品项明细 if (allPxmxEntities.Any()) { @@ -1430,6 +1465,9 @@ namespace NCC.Extend.LqXhHyhk //清空子表数据 await _db.Deleteable().Where(u => u.ConsumeInfoId == id).ExecuteCommandAsync(); + //清空子表数据 + await _db.Deleteable().Where(u => u.BusinessId == id).ExecuteCommandAsync(); + //关闭事务 _db.CommitTran(); } @@ -1550,6 +1588,8 @@ namespace NCC.Extend.LqXhHyhk await _db.Updateable().SetColumns(it => new LqXhJksyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.Glkdbh == id).ExecuteCommandAsync(); //更新科技部老师业绩表状态 await _db.Updateable().SetColumns(it => new LqXhKjbsyjEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.Glkdbh == id).ExecuteCommandAsync(); + //更新人次记录表状态 + await _db.Updateable().SetColumns(it => new LqPersonTimesRecordEntity { IsEffective = StatusEnum.无效.GetHashCode() }).Where(w => w.BusinessId == id).ExecuteCommandAsync(); //关闭事务 _db.CommitTran(); return LqhyhkInfo; diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqYaoyjlService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqYaoyjlService.cs index 4fce802..419c373 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqYaoyjlService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqYaoyjlService.cs @@ -61,7 +61,7 @@ namespace NCC.Extend.LqYaoyjl { var entity = await _db.Queryable().FirstAsync(p => p.Id == id); var output = entity.Adapt(); - output.storeName = SqlFunc.Subqueryable().Where(u => u.Id == entity.StoreId).Select(u => u.Dm); + output.storeName = _db.Queryable().Where(u => u.Id == entity.StoreId).Select(u => u.Dm).First(); return output; } #endregion diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqYyjlService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqYyjlService.cs index 916fa11..89daef9 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqYyjlService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqYyjlService.cs @@ -362,15 +362,14 @@ namespace NCC.Extend.LqYyjl /// /// 添加未成交说明 /// - /// 主键 /// 参数 /// - [HttpPost("AddNoDealRemark/{id}")] - public async Task AddNoDealRemark(string id, [FromBody] string noDealRemark) + [HttpPost("AddNoDealRemark")] + public async Task AddNoDealRemark([FromBody] LqYyjlAddNoDealRemarkInput input) { - var entity = await _db.Queryable().FirstAsync(p => p.Id == id); + var entity = await _db.Queryable().FirstAsync(p => p.Id == input.id); _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005); - entity.NoDealRemark = noDealRemark; + entity.NoDealRemark = input.noDealRemark; var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001); diff --git a/sql/创建人次记录表.sql b/sql/创建人次记录表.sql new file mode 100644 index 0000000..0b4d133 --- /dev/null +++ b/sql/创建人次记录表.sql @@ -0,0 +1,48 @@ +-- ============================================ +-- 创建人次记录表(lq_person_times_record) +-- ============================================ +-- 说明:用于记录耗卡/开单时健康师或科技老师的工作人次 +-- 支持人头统计(按健康师+月份+客户去重累加)和人次统计(按健康师+日期+客户去重累加) +-- +-- 业务场景: +-- 1. 耗卡时记录健康师或科技老师的工作人次 +-- 2. 未来可能记录开单时的工作人次 +-- +-- 统计规则: +-- - 人头统计:按健康师+月份+客户去重,累加数量 +-- - 人次统计:按健康师+日期+客户去重,累加数量 +-- ============================================ + +CREATE TABLE IF NOT EXISTS `lq_person_times_record` ( + `F_Id` VARCHAR(50) NOT NULL COMMENT '主键ID', + `F_BusinessId` VARCHAR(50) NULL COMMENT '关联业务记录ID', + `F_BusinessType` VARCHAR(20) NULL COMMENT '业务类型(耗卡/开单)', + `F_PersonType` VARCHAR(20) NULL COMMENT '人员类型(健康师/科技老师)', + `F_PersonId` VARCHAR(50) NULL COMMENT '人员ID', + `F_PersonName` VARCHAR(100) NULL COMMENT '人员姓名', + `F_MemberId` VARCHAR(50) NULL COMMENT '客户ID', + `F_MemberName` VARCHAR(100) NULL COMMENT '客户姓名', + `F_WorkDate` DATE NULL COMMENT '工作日期(用于人次统计,格式:YYYY-MM-DD)', + `F_WorkMonth` VARCHAR(6) NULL COMMENT '工作月份(用于人头统计,格式:202511)', + `F_Quantity` DECIMAL(10,2) NULL COMMENT '数量', + `F_CreateTime` DATETIME NULL COMMENT '创建时间', + `F_IsEffective` INT NULL DEFAULT 1 COMMENT '是否有效', + PRIMARY KEY (`F_Id`), + INDEX `idx_person_month_member` (`F_PersonId`, `F_WorkMonth`, `F_MemberId`) COMMENT '人头统计索引(健康师+月份+客户)', + INDEX `idx_person_date_member` (`F_PersonId`, `F_WorkDate`, `F_MemberId`) COMMENT '人次统计索引(健康师+日期+客户)', + INDEX `idx_business` (`F_BusinessId`, `F_BusinessType`) COMMENT '业务查询索引' +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='人次记录表'; + +-- ============================================ +-- 验证表结构 +-- ============================================ +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, COLUMN_COMMENT +-- FROM INFORMATION_SCHEMA.COLUMNS +-- WHERE TABLE_NAME = 'lq_person_times_record' +-- ORDER BY ORDINAL_POSITION; + +-- ============================================ +-- 验证索引 +-- ============================================ +-- SHOW INDEX FROM lq_person_times_record; + diff --git a/sql/添加品项分类字段.sql b/sql/添加品项分类字段.sql new file mode 100644 index 0000000..032f26b --- /dev/null +++ b/sql/添加品项分类字段.sql @@ -0,0 +1,68 @@ +-- ============================================ +-- 为品项明细表添加品项分类字段 +-- ============================================ +-- 说明:此脚本为品项明细相关表添加品项分类字段,用于存储品项的分类(医美、科美、生美) +-- +-- 字段说明: +-- F_ItemCategory:品项分类,用于存储"医美"、"科美"、"生美"等分类值 +-- +-- 业务含义: +-- - 品项分类用于区分不同类型的品项,便于统计和分析 +-- - 分类值来源于项目资料表(lq_xmzl)的 qt2 字段 +-- +-- 注意事项: +-- - 字段类型为VARCHAR(20),可存储"医美"、"科美"、"生美"等分类值 +-- - 所有字段允许为NULL,因为历史数据可能没有这些分类信息 +-- - 字段位置:放在品项相关字段(px、pxmc)之后 + +-- ============================================ +-- 1. lq_kd_pxmx(开单品项明细表) - 添加品项分类字段 +-- ============================================ +ALTER TABLE lq_kd_pxmx +ADD COLUMN F_ItemCategory VARCHAR(20) NULL COMMENT '品项分类(医美/科美/生美)' AFTER pxmc; + +-- ============================================ +-- 2. lq_kd_deductinfo(开单扣减信息表) - 添加品项分类字段 +-- ============================================ +ALTER TABLE lq_kd_deductinfo +ADD COLUMN F_ItemCategory VARCHAR(20) NULL COMMENT '品项分类(医美/科美/生美)' AFTER F_ItemName; + +-- ============================================ +-- 3. lq_xh_pxmx(耗卡品项明细表) - 添加品项分类字段 +-- ============================================ +ALTER TABLE lq_xh_pxmx +ADD COLUMN F_ItemCategory VARCHAR(20) NULL COMMENT '品项分类(医美/科美/生美)' AFTER pxmc; + +-- ============================================ +-- 4. lq_hytk_mx(会员退卡明细表) - 添加品项分类字段 +-- ============================================ +ALTER TABLE lq_hytk_mx +ADD COLUMN F_ItemCategory VARCHAR(20) NULL COMMENT '品项分类(医美/科美/生美)' AFTER pxmc; + +-- ============================================ +-- 5. 验证字段创建 +-- ============================================ +-- 验证 lq_kd_pxmx 表 +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_COMMENT +-- FROM INFORMATION_SCHEMA.COLUMNS +-- WHERE TABLE_NAME = 'lq_kd_pxmx' +-- AND COLUMN_NAME = 'F_ItemCategory'; + +-- 验证 lq_kd_deductinfo 表 +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_COMMENT +-- FROM INFORMATION_SCHEMA.COLUMNS +-- WHERE TABLE_NAME = 'lq_kd_deductinfo' +-- AND COLUMN_NAME = 'F_ItemCategory'; + +-- 验证 lq_xh_pxmx 表 +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_COMMENT +-- FROM INFORMATION_SCHEMA.COLUMNS +-- WHERE TABLE_NAME = 'lq_xh_pxmx' +-- AND COLUMN_NAME = 'F_ItemCategory'; + +-- 验证 lq_hytk_mx 表 +-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_COMMENT +-- FROM INFORMATION_SCHEMA.COLUMNS +-- WHERE TABLE_NAME = 'lq_hytk_mx' +-- AND COLUMN_NAME = 'F_ItemCategory'; +