From 7e362a148954e38c500ac53042b64d3eaf5a1e13 Mon Sep 17 00:00:00 2001 From: “wangming” <“wangming@antissoft.com”> Date: Fri, 28 Nov 2025 20:10:55 +0800 Subject: [PATCH] feat: 为业绩表添加门店ID和品项名称字段 --- netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs | 12 ++++++++++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_kjbsyj/LqHytkKjbsyjEntity.cs | 12 ++++++++++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs | 12 ++++++++++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kjbsyj/LqKdKjbsyjEntity.cs | 12 ++++++++++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_jksyj/LqXhJksyjEntity.cs | 12 ++++++++++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_kjbsyj/LqXhKjbsyjEntity.cs | 12 ++++++++++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/ConsumableProductTypeEnum.cs | 206 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- netcore/src/Modularity/Extend/NCC.Extend/LqDailyReportService.cs | 4 ---- netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs | 8 ++++++++ netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------------------- netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs | 299 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs | 2 ++ netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs | 8 ++++++++ sql/删除业绩表部门字段.sql | 21 +++++++++++++++++++++ sql/同步业绩表品项名称字段.sql | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ sql/同步业绩表门店ID字段.sql | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sql/添加业绩表品项名称字段.sql | 21 +++++++++++++++++++++ sql/添加业绩表门店ID字段.sql | 21 +++++++++++++++++++++ 18 files changed, 848 insertions(+), 45 deletions(-) create mode 100644 sql/删除业绩表部门字段.sql create mode 100644 sql/同步业绩表品项名称字段.sql create mode 100644 sql/同步业绩表门店ID字段.sql create mode 100644 sql/添加业绩表品项名称字段.sql create mode 100644 sql/添加业绩表门店ID字段.sql diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs index 6fd7d97..f9deb51 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_jksyj/LqHytkJksyjEntity.cs @@ -125,5 +125,17 @@ namespace NCC.Extend.Entitys.lq_hytk_jksyj /// [SugarColumn(ColumnName = "F_ItemId")] public string ItemId { get; set; } + + /// + /// 门店ID + /// + [SugarColumn(ColumnName = "F_StoreId")] + public string StoreId { get; set; } + + /// + /// 品项名称 + /// + [SugarColumn(ColumnName = "F_ItemName")] + public string ItemName { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_kjbsyj/LqHytkKjbsyjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_kjbsyj/LqHytkKjbsyjEntity.cs index 5cd3173..e03767c 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_kjbsyj/LqHytkKjbsyjEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_hytk_kjbsyj/LqHytkKjbsyjEntity.cs @@ -120,5 +120,17 @@ namespace NCC.Extend.Entitys.lq_hytk_kjbsyj /// [SugarColumn(ColumnName = "F_ItemId")] public string ItemId { get; set; } + + /// + /// 门店ID + /// + [SugarColumn(ColumnName = "F_StoreId")] + public string StoreId { get; set; } + + /// + /// 品项名称 + /// + [SugarColumn(ColumnName = "F_ItemName")] + public string ItemName { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs index 43f808d..dcc15ee 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs @@ -88,5 +88,17 @@ namespace NCC.Extend.Entitys.lq_kd_jksyj /// [SugarColumn(ColumnName = "F_ItemId")] public string ItemId { get; set; } + + /// + /// 门店ID + /// + [SugarColumn(ColumnName = "F_StoreId")] + public string StoreId { get; set; } + + /// + /// 品项名称 + /// + [SugarColumn(ColumnName = "F_ItemName")] + public string ItemName { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kjbsyj/LqKdKjbsyjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kjbsyj/LqKdKjbsyjEntity.cs index 55c506d..50bf738 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kjbsyj/LqKdKjbsyjEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kjbsyj/LqKdKjbsyjEntity.cs @@ -88,5 +88,17 @@ namespace NCC.Extend.Entitys.lq_kd_kjbsyj /// [SugarColumn(ColumnName = "F_ItemId")] public string ItemId { get; set; } + + /// + /// 门店ID + /// + [SugarColumn(ColumnName = "F_StoreId")] + public string StoreId { get; set; } + + /// + /// 品项名称 + /// + [SugarColumn(ColumnName = "F_ItemName")] + public string ItemName { get; set; } } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_jksyj/LqXhJksyjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_jksyj/LqXhJksyjEntity.cs index 29d273a..9614487 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_jksyj/LqXhJksyjEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_jksyj/LqXhJksyjEntity.cs @@ -136,5 +136,17 @@ namespace NCC.Extend.Entitys.lq_xh_jksyj /// [SugarColumn(ColumnName = "F_ItemId")] public string ItemId { get; set; } + + /// + /// 门店ID + /// + [SugarColumn(ColumnName = "F_StoreId")] + public string StoreId { get; set; } + + /// + /// 品项名称 + /// + [SugarColumn(ColumnName = "F_ItemName")] + public string ItemName { get; set; } } } \ No newline at end of file diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_kjbsyj/LqXhKjbsyjEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_kjbsyj/LqXhKjbsyjEntity.cs index d63b339..2a5064e 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_kjbsyj/LqXhKjbsyjEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_kjbsyj/LqXhKjbsyjEntity.cs @@ -118,5 +118,17 @@ namespace NCC.Extend.Entitys.lq_xh_kjbsyj /// [SugarColumn(ColumnName = "F_ItemId")] public string ItemId { get; set; } + + /// + /// 门店ID + /// + [SugarColumn(ColumnName = "F_StoreId")] + public string StoreId { get; set; } + + /// + /// 品项名称 + /// + [SugarColumn(ColumnName = "F_ItemName")] + public string ItemName { get; set; } } } \ No newline at end of file diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/ConsumableProductTypeEnum.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/ConsumableProductTypeEnum.cs index eabc34e..2b5f5b9 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/ConsumableProductTypeEnum.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/ConsumableProductTypeEnum.cs @@ -14,10 +14,10 @@ namespace NCC.Extend.Entitys.Enum 毛巾 = 1, /// - /// 垫子 + /// 床巾 /// - [Description("垫子")] - 垫子 = 2, + [Description("床巾")] + 床巾 = 2, /// /// 浴巾 @@ -38,6 +38,206 @@ namespace NCC.Extend.Entitys.Enum 枕套 = 5, /// + /// 白床毯 + /// + [Description("白床毯")] + 白床毯 = 6, + + + /// + /// 毛线毯 + /// + [Description("毛线毯")] + 毛线毯 = 7, + + + /// + /// 毯被 + /// + [Description("毯被")] + 毯被 = 8, + + /// + /// 面巾 + /// + [Description("面巾")] + 面巾 = 9, + + /// + /// 地巾 + /// + [Description("地巾")] + 地巾 = 10, + + /// + /// 浴袍(衣、裙) + /// + [Description("浴袍衣裙")] + 浴袍衣裙 = 11, + + /// + /// 凳套 + /// + [Description("凳套")] + 凳套 = 12, + + /// + /// 床罩 + /// + [Description("床罩")] + 床罩 = 13, + + /// + /// 桌布 + /// + [Description("桌布")] + 桌布 = 14, + + /// + /// 包头巾 + /// + [Description("包头巾")] + 包头巾 = 15, + + /// + /// 靠枕 + /// + [Description("靠枕")] + 靠枕 = 16, + + /// + /// 束带 + /// + [Description("束带")] + 束带 = 17, + + /// + /// 床上5件套 + /// + [Description("床上5件套")] + 床上5件套 = 18, + + /// + /// 桌旗 + /// + [Description("桌旗")] + 桌旗 = 19, + + /// + /// 床旗 + /// + [Description("床旗")] + 床旗 = 20, + + /// + /// 被套 + /// + [Description("被套")] + 被套 = 21, + + /// + /// 工作服 + /// + [Description("工作服")] + 工作服 = 22, + + /// + /// 头巾 + /// + [Description("头巾")] + 头巾 = 23, + + /// + /// 床套 + /// + [Description("床套")] + 床套 = 24, + + /// + /// 脚套 + /// + [Description("脚套")] + 脚套 = 25, + + /// + /// 登套 + /// + [Description("登套")] + 登套 = 26, + + /// + /// 椅套 + /// + [Description("椅套")] + 椅套 = 27, + + /// + /// 浴衣 + /// + [Description("浴衣")] + 浴衣 = 28, + + /// + /// 浴袍 + /// + [Description("浴袍")] + 浴袍 = 29, + + /// + /// 工衣 + /// + [Description("工衣")] + 工衣 = 30, + + /// + /// 毛毯 + /// + [Description("毛毯")] + 毛毯 = 31, + + /// + /// 针织被 + /// + [Description("针织被")] + 针织被 = 32, + + /// + /// 靠被 + /// + [Description("靠被")] + 靠被 = 33, + + /// + /// 脚枕 + /// + [Description("脚枕")] + 脚枕 = 34, + + /// + /// 垫褥 + /// + [Description("垫褥")] + 垫褥 = 35, + + /// + /// 垫子 + /// + [Description("垫子")] + 垫子 = 36, + + /// + /// 板凳套 + /// + [Description("板凳套")] + 板凳套 = 37, + + /// + /// 针织毯 + /// + [Description("针织毯")] + 针织毯 = 38, + + /// /// 其他 /// [Description("其他")] diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqDailyReportService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqDailyReportService.cs index c23dda0..ef82589 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqDailyReportService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqDailyReportService.cs @@ -542,10 +542,8 @@ namespace NCC.Extend { // 获取时间范围 var (startDate, endDate) = GetTimeRange(input.StartTime, input.EndTime); - // 根据开始时间确定月份(YYYYMM格式) var month = startDate.ToString("yyyyMM"); - // 构建部门过滤条件 var departmentFilter = ""; if (input.DepartmentIds != null && input.DepartmentIds.Any()) @@ -553,7 +551,6 @@ namespace NCC.Extend var filterDeptIdsStr = string.Join("','", input.DepartmentIds); departmentFilter = $"AND o.F_Id IN ('{filterDeptIdsStr}')"; } - // 天王团部门信息(字段名、目标字段名、部门名称和品项分类的映射) var tianwangDepartments = new Dictionary { @@ -561,7 +558,6 @@ namespace NCC.Extend { "kjb", ("F_TechDepartment", "F_TechDepartmentTarget", new[] { "科技一部", "科技二部" }, "科美") }, { "dxmb", ("F_MajorProjectDepartment", "F_MajorProjectDepartmentTarget", new[] { "大项目一部", "大项目二部" }, "医美") } }; - // 分步查询,提高效率 var departmentDict = new Dictionary(); // 记录每个部门ID对应的字段类型(jyb、kjb、dxmb) diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs index adbe367..3c39985 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs @@ -437,6 +437,8 @@ namespace NCC.Extend.LqHytkHytk IsEffective = StatusEnum.有效.GetHashCode(), ItemCategory = lqHytkMxEntity.ItemCategory, ItemId = lqHytkMxEntity.Px, + StoreId = newEntity.Md, + ItemName = lqHytkMxEntity.Pxmc } ); } @@ -466,6 +468,8 @@ namespace NCC.Extend.LqHytkHytk IsEffective = StatusEnum.有效.GetHashCode(), ItemCategory = lqHytkMxEntity.ItemCategory, ItemId = lqHytkMxEntity.Px, + StoreId = newEntity.Md, + ItemName = lqHytkMxEntity.Pxmc } ); } @@ -592,6 +596,8 @@ namespace NCC.Extend.LqHytkHytk F_CreateUser = userInfo.userId, ItemCategory = lqHytkMxEntity.ItemCategory, ItemId = lqHytkMxEntity.Px, + StoreId = entity.Md, + ItemName = lqHytkMxEntity.Pxmc } ); } @@ -619,6 +625,8 @@ namespace NCC.Extend.LqHytkHytk F_CreateUser = userInfo.userId, ItemCategory = lqHytkMxEntity.ItemCategory, ItemId = lqHytkMxEntity.Px, + StoreId = entity.Md, + ItemName = lqHytkMxEntity.Pxmc } ); } diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs index 03c555d..6f18fb7 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs @@ -955,6 +955,8 @@ namespace NCC.Extend.LqKdKdjlb ActivityId = input.activityId, ItemCategory = lqKdPxmxEntity.ItemCategory, ItemId = lqKdPxmxEntity.Px, + ItemName = lqKdPxmxEntity.Pxmc, + StoreId = entity.Djmd }); } } @@ -978,6 +980,8 @@ namespace NCC.Extend.LqKdKdjlb ActivityId = input.activityId, ItemCategory = lqKdPxmxEntity.ItemCategory, ItemId = lqKdPxmxEntity.Px, + ItemName = lqKdPxmxEntity.Pxmc, + StoreId = entity.Djmd } ); } @@ -1425,6 +1429,7 @@ namespace NCC.Extend.LqKdKdjlb Pxmc = item.pxmc, Pxjg = item.pxjg, SourceType = item.sourceType, + ItemCategory = await _db.Queryable().Where(x => x.Id == item.px).Select(x => x.Qt2).FirstAsync(), }; allPxmxEntities.Add(lqKdPxmxEntity); @@ -1433,20 +1438,22 @@ namespace NCC.Extend.LqKdKdjlb { foreach (var ijks_tem in item.lqKdJksyjList) { - allJksyjEntities.Add( - new LqKdJksyjEntity - { - Id = YitIdHelper.NextId().ToString(), - Glkdbh = entity.Id, - Jks = ijks_tem.jks, - Jksxm = ijks_tem.jksxm, - Jkszh = ijks_tem.jkszh, - Jksyj = ijks_tem.jksyj, - Yjsj = DateTime.Now, - Jsj_id = ijks_tem.jsj_id, - Kdpxid = lqKdPxmxEntity.Id, - } - ); + allJksyjEntities.Add(new LqKdJksyjEntity + { + Id = YitIdHelper.NextId().ToString(), + Glkdbh = entity.Id, + Jks = ijks_tem.jks, + Jksxm = ijks_tem.jksxm, + Jkszh = ijks_tem.jkszh, + Jksyj = ijks_tem.jksyj, + Yjsj = DateTime.Now, + Jsj_id = ijks_tem.jsj_id, + Kdpxid = lqKdPxmxEntity.Id, + StoreId = entity.Djmd, + ItemCategory = lqKdPxmxEntity.ItemCategory, + ItemId = lqKdPxmxEntity.Px, + ItemName = lqKdPxmxEntity.Pxmc, + }); } } @@ -1455,19 +1462,21 @@ namespace NCC.Extend.LqKdKdjlb { foreach (var ikjbs_tem in item.lqKdKjbsyjList) { - allKjbsyjEntities.Add( - new LqKdKjbsyjEntity - { - Id = YitIdHelper.NextId().ToString(), - Glkdbh = entity.Id, - Kjbls = ikjbs_tem.kjbls, - Kjblsxm = ikjbs_tem.kjblsxm, - Kjblszh = ikjbs_tem.kjblszh, - Kjblsyj = ikjbs_tem.kjblsyj, - Yjsj = DateTime.Now, - Kdpxid = lqKdPxmxEntity.Id, - } - ); + allKjbsyjEntities.Add(new LqKdKjbsyjEntity + { + Id = YitIdHelper.NextId().ToString(), + Glkdbh = entity.Id, + Kjbls = ikjbs_tem.kjbls, + Kjblsxm = ikjbs_tem.kjblsxm, + Kjblszh = ikjbs_tem.kjblszh, + Kjblsyj = ikjbs_tem.kjblsyj, + Yjsj = DateTime.Now, + Kdpxid = lqKdPxmxEntity.Id, + ItemCategory = lqKdPxmxEntity.ItemCategory, + ItemId = lqKdPxmxEntity.Px, + StoreId = entity.Djmd, + ItemName = lqKdPxmxEntity.Pxmc, + }); } } } @@ -2622,7 +2631,11 @@ namespace NCC.Extend.LqKdKdjlb jksyj = it.Jksyj, kdpxid = it.Kdpxid, yjsj = it.Yjsj, - jsj_id = it.Jsj_id + jsj_id = it.Jsj_id, + itemCategory = it.ItemCategory, + storeId = it.StoreId, + itemId = it.ItemId, + itemName = it.ItemName, }) .ToListAsync(); @@ -2691,7 +2704,11 @@ namespace NCC.Extend.LqKdKdjlb performance = x.jksyj, performanceTime = x.yjsj, itemDetailId = x.kdpxid, - goldTriangleId = x.jsj_id + goldTriangleId = x.jsj_id, + itemCategory = x.itemCategory, + itemId = x.itemId, + storeId = x.storeId, + itemName = x.itemName }).ToList(), // 其他信息 @@ -2937,7 +2954,8 @@ namespace NCC.Extend.LqKdKdjlb ProjectNumber = item.TransferQuantity, SourceType = refundPxmxEntity.SourceType, TotalPrice = totalItemDeduction, - IsEffective = StatusEnum.有效.GetHashCode() + IsEffective = StatusEnum.有效.GetHashCode(), + ItemCategory = await _db.Queryable().Where(x => x.Id == refundPxmxEntity.Px).Select(x => x.Qt2).FirstAsync(), }; refundMxEntities.Add(refundMxEntity); var refundKdyjEntities = _db.Queryable().Where(p => p.Kdpxid == item.BillingItemId).ToList(); @@ -2968,7 +2986,11 @@ namespace NCC.Extend.LqKdKdjlb F_CreateTime = transferTime, F_CreateUser = userInfo.userId, CardReturn = refundMxEntity.Id, - IsEffective = StatusEnum.有效.GetHashCode() + IsEffective = StatusEnum.有效.GetHashCode(), + ItemCategory = refundMxEntity.ItemCategory, + ItemId = refundMxEntity.Px, + StoreId = refundEntity.Md, + ItemName = refundMxEntity.Pxmc }); } //查询科技部老师的业绩 @@ -2991,7 +3013,11 @@ namespace NCC.Extend.LqKdKdjlb F_CreateTime = transferTime, F_CreateUser = userInfo.userId, CardReturn = refundMxEntity.Id, - IsEffective = StatusEnum.有效.GetHashCode() + IsEffective = StatusEnum.有效.GetHashCode(), + ItemCategory = refundMxEntity.ItemCategory, + ItemId = refundMxEntity.Px, + StoreId = refundEntity.Md, + ItemName = refundMxEntity.Pxmc }); } } @@ -3049,7 +3075,8 @@ namespace NCC.Extend.LqKdKdjlb TotalPrice = item.ItemPrice * item.TransferQuantity, ActualPrice = item.ItemPrice * item.TransferQuantity, IsEffective = StatusEnum.有效.GetHashCode(), - Remark = $"从会员 {fromMember.Khmc} 转入" + Remark = $"从会员 {fromMember.Khmc} 转入", + ItemCategory = await _db.Queryable().Where(x => x.Id == refundPxmxEntity.Px).Select(x => x.Qt2).FirstAsync(), }; billingPxmxEntities.Add(billingPxmxEntity); @@ -3066,7 +3093,11 @@ namespace NCC.Extend.LqKdKdjlb Yjsj = transferTime, Jsj_id = jks.F_jsjid, Kdpxid = billingPxmxEntity.Id, - IsEffective = StatusEnum.有效.GetHashCode() + IsEffective = StatusEnum.有效.GetHashCode(), + ItemCategory = billingPxmxEntity.ItemCategory, + ItemId = billingPxmxEntity.Px, + StoreId = billingEntity.Djmd, + ItemName = billingPxmxEntity.Pxmc }); } @@ -3082,7 +3113,11 @@ namespace NCC.Extend.LqKdKdjlb Kjblsyj = kjbs.Kjblsyj.ToString(), Yjsj = transferTime, Kdpxid = billingPxmxEntity.Id, - IsEffective = StatusEnum.有效.GetHashCode() + IsEffective = StatusEnum.有效.GetHashCode(), + ItemCategory = billingPxmxEntity.ItemCategory, + ItemId = billingPxmxEntity.Px, + StoreId = billingEntity.Djmd, + ItemName = billingPxmxEntity.Pxmc }); } } @@ -3100,7 +3135,6 @@ namespace NCC.Extend.LqKdKdjlb Remarks = input.Remarks, CreateTime = DateTime.Now, IsEffective = StatusEnum.有效.GetHashCode() - }; await _db.Insertable(transferLogEntity).ExecuteCommandAsync(); @@ -4128,6 +4162,5 @@ namespace NCC.Extend.LqKdKdjlb } } #endregion - } } diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs index a9cd25a..021a55a 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs @@ -3625,7 +3625,6 @@ namespace NCC.Extend.LqStatistics var result = await _db.Ado.SqlQueryAsync(sql); return Convert.ToDecimal(result.FirstOrDefault()?.LaborCost ?? 0); } - #endregion #region 科技部老师业绩统计 @@ -4250,6 +4249,304 @@ namespace NCC.Extend.LqStatistics } #endregion + #region 线索池客户统计报表 + /// + /// 获取线索池客户统计报表(BAK) + /// + /// + /// 根据拓客记录统计线索池客户的邀约、预约、消耗、开单等信息 + /// + /// 业务链路:拓客 -> 邀约 -> 预约 -> 开单/消耗 + /// + /// 示例请求: + /// ```json + /// { + /// "pageIndex": 1, + /// "pageSize": 20, + /// "startTime": "2025-10-01T00:00:00", + /// "endTime": "2025-10-31T23:59:59", + /// "storeIds": ["store1", "store2"], + /// "eventId": "event123" + /// } + /// ``` + /// + /// 参数说明: + /// - pageIndex: 页码,从1开始 + /// - pageSize: 每页数量 + /// - startTime: 拓客时间范围开始时间 + /// - endTime: 拓客时间范围结束时间 + /// - storeIds: 门店ID列表,可传多个 + /// - eventId: 拓客活动ID + /// + /// 返回数据说明: + /// - LeadCustomerId: 线索池客户(拓客编号) + /// - CustomerName: 客户姓名 + /// - ExpansionTime: 拓客时间 + /// - HasInvite: 是否邀约(是/否),通过拓客编号关联邀约表 + /// - HasAppointment: 是否预约(是/否),只统计通过邀约产生的预约(预约表的F_InviteId关联邀约表) + /// - HasConsume: 是否有消耗(是/否),只统计通过预约产生的耗卡(耗卡表的F_AppointmentId关联预约表) + /// - HasBilling: 是否开单(是/否),只统计通过预约产生的开单(开单表的F_AppointmentId关联预约表) + /// - NoBillingReason: 未开单原因,从预约记录的F_NoDealRemark字段获取 + /// - BillingAmount: 开卡金额,汇总通过预约产生的开单记录的整单业绩(zdyj) + /// - BillingItems: 开卡卡项,汇总通过预约产生的开单品项名称,多个用顿号分隔 + /// - ActualAppointmentCount: 实际预约记录数(不管是否通过邀约产生),用于问题分析 + /// - ActualConsumeCount: 实际消耗记录数(不管是否通过预约产生),用于问题分析 + /// - ActualBillingCount: 实际开单记录数(不管是否通过预约产生),用于问题分析 + /// - Analysis: 问题分析说明,自动分析数据异常情况,如:有预约记录但未通过邀约产生、有消耗记录但未通过预约产生等 + /// + /// 返回示例: + /// ```json + /// { + /// "list": [ + /// { + /// "LeadCustomerId": "751248448816153862", + /// "CustomerName": "王女士", + /// "ExpansionTime": "2025-10-24T03:33:10.000Z", + /// "HasInvite": "否", + /// "HasAppointment": "否", + /// "HasConsume": "否", + /// "HasBilling": "否", + /// "NoBillingReason": null, + /// "BillingAmount": 0, + /// "BillingItems": null, + /// "ActualAppointmentCount": 3, + /// "ActualConsumeCount": 4, + /// "ActualBillingCount": 5, + /// "Analysis": "有3条预约记录,但未通过邀约产生(F_InviteId为null);有4条消耗记录,但未通过预约产生(F_AppointmentId为null或预约未通过邀约产生);有5条开单记录,但未通过预约产生(F_AppointmentId为null或预约未通过邀约产生)" + /// } + /// ], + /// "pagination": { + /// "pageIndex": 1, + /// "pageSize": 20, + /// "total": 1511 + /// } + /// } + /// ``` + /// + /// 查询条件 + /// 线索池客户统计报表列表,包含统计数据和问题分析 + /// 查询成功,返回统计报表列表和分页信息 + /// 参数错误 + /// 服务器内部错误 + [HttpPost("get-lead-customer-statistics-list-bak")] + public async Task GetLeadCustomerStatisticsList_bak([FromBody] LeadCustomerStatisticsListQueryInput input) + { + try + { + // 构建WHERE条件 + var whereConditions = new List(); + var parameters = new List(); + + if (input.StartTime.HasValue) + { + whereConditions.Add("tk.F_ExpansionTime >= @StartTime"); + parameters.Add(new SugarParameter("@StartTime", input.StartTime.Value)); + } + + if (input.EndTime.HasValue) + { + whereConditions.Add("tk.F_ExpansionTime <= @EndTime"); + parameters.Add(new SugarParameter("@EndTime", input.EndTime.Value)); + } + + if (input.StoreIds != null && input.StoreIds.Any()) + { + var storeIdParams = string.Join(",", input.StoreIds.Select((_, i) => $"@StoreId{i}")); + whereConditions.Add($"tk.F_StoreId IN ({storeIdParams})"); + for (int i = 0; i < input.StoreIds.Count; i++) + { + parameters.Add(new SugarParameter($"@StoreId{i}", input.StoreIds[i])); + } + } + + if (!string.IsNullOrEmpty(input.EventId)) + { + whereConditions.Add("tk.F_EventId = @EventId"); + parameters.Add(new SugarParameter("@EventId", input.EventId)); + } + + var whereClause = whereConditions.Any() ? "WHERE " + string.Join(" AND ", whereConditions) : ""; + + // 使用子查询优化性能,避免复杂的JOIN和GROUP BY + var sql = $@" + SELECT + tk.F_Id as LeadCustomerId, + tk.F_CustomerName as CustomerName, + tk.F_ExpansionTime as ExpansionTime, + -- 是否邀约:通过拓客编号关联 + CASE WHEN yaoy_stats.has_invite = 1 THEN '是' ELSE '否' END as HasInvite, + -- 是否预约:通过邀约ID关联(只统计通过邀约产生的预约) + CASE WHEN yy_stats.has_appointment = 1 THEN '是' ELSE '否' END as HasAppointment, + -- 是否有消耗:通过预约ID关联(只统计通过预约产生的耗卡) + CASE WHEN xh_stats.has_consume = 1 THEN '是' ELSE '否' END as HasConsume, + -- 是否开单:通过预约ID关联(只统计通过预约产生的开单) + CASE WHEN kd_stats.has_billing = 1 THEN '是' ELSE '否' END as HasBilling, + -- 未开单原因:从预约记录中获取(只取通过邀约产生的预约) + yy_stats.no_billing_reason as NoBillingReason, + -- 开卡金额:汇总通过预约产生的开单记录 + COALESCE(kd_stats.billing_amount, 0) as BillingAmount, + -- 开卡卡项:汇总通过预约产生的开单品项 + kd_stats.billing_items as BillingItems, + -- 实际预约记录数(不管是否通过邀约产生) + COALESCE(yy_actual.count, 0) as ActualAppointmentCount, + -- 实际消耗记录数(不管是否通过预约产生) + COALESCE(xh_actual.count, 0) as ActualConsumeCount, + -- 实际开单记录数(不管是否通过预约产生) + COALESCE(kd_actual.count, 0) as ActualBillingCount + FROM lq_tkjlb tk + -- 邀约统计子查询 + LEFT JOIN ( + SELECT + yaoy.tkbh as tk_id, + 1 as has_invite + FROM lq_yaoyjl yaoy + GROUP BY yaoy.tkbh + ) yaoy_stats ON yaoy_stats.tk_id = tk.F_Id + -- 预约统计子查询(只统计通过邀约产生的预约) + LEFT JOIN ( + SELECT + tk_inner.F_MemberId as member_id, + 1 as has_appointment, + MAX(yy.F_NoDealRemark) as no_billing_reason + FROM lq_tkjlb tk_inner + INNER JOIN lq_yaoyjl yaoy ON yaoy.tkbh = tk_inner.F_Id + INNER JOIN lq_yyjl yy ON yy.F_InviteId = yaoy.F_Id + GROUP BY tk_inner.F_MemberId + ) yy_stats ON yy_stats.member_id = tk.F_MemberId + -- 消耗统计子查询(只统计通过预约产生的耗卡) + LEFT JOIN ( + SELECT + tk_inner.F_MemberId as member_id, + 1 as has_consume + FROM lq_tkjlb tk_inner + INNER JOIN lq_yaoyjl yaoy ON yaoy.tkbh = tk_inner.F_Id + INNER JOIN lq_yyjl yy ON yy.F_InviteId = yaoy.F_Id + INNER JOIN lq_xh_hyhk xh ON xh.F_AppointmentId = yy.F_Id AND xh.F_IsEffective = 1 + GROUP BY tk_inner.F_MemberId + ) xh_stats ON xh_stats.member_id = tk.F_MemberId + -- 开单统计子查询(只统计通过预约产生的开单,包含金额和品项) + LEFT JOIN ( + SELECT + tk_inner.F_MemberId as member_id, + 1 as has_billing, + SUM(kd.zdyj) as billing_amount, + GROUP_CONCAT(DISTINCT kdpx.pxmc SEPARATOR '、') as billing_items + FROM lq_tkjlb tk_inner + INNER JOIN lq_yaoyjl yaoy ON yaoy.tkbh = tk_inner.F_Id + INNER JOIN lq_yyjl yy ON yy.F_InviteId = yaoy.F_Id + INNER JOIN lq_kd_kdjlb kd ON kd.F_AppointmentId = yy.F_Id AND kd.F_IsEffective = 1 + LEFT JOIN lq_kd_pxmx kdpx ON kdpx.glkdbh = kd.F_Id AND kdpx.F_IsEffective = 1 + GROUP BY tk_inner.F_MemberId + ) kd_stats ON kd_stats.member_id = tk.F_MemberId + -- 实际预约记录数统计(不管是否通过邀约产生) + LEFT JOIN ( + SELECT + yy.gk as member_id, + COUNT(*) as count + FROM lq_yyjl yy + GROUP BY yy.gk + ) yy_actual ON yy_actual.member_id = tk.F_MemberId + -- 实际消耗记录数统计(不管是否通过预约产生) + LEFT JOIN ( + SELECT + xh.hy as member_id, + COUNT(*) as count + FROM lq_xh_hyhk xh + WHERE xh.F_IsEffective = 1 + GROUP BY xh.hy + ) xh_actual ON xh_actual.member_id = tk.F_MemberId + -- 实际开单记录数统计(不管是否通过预约产生) + LEFT JOIN ( + SELECT + kd.kdhy as member_id, + COUNT(*) as count + FROM lq_kd_kdjlb kd + WHERE kd.F_IsEffective = 1 + GROUP BY kd.kdhy + ) kd_actual ON kd_actual.member_id = tk.F_MemberId + {whereClause} + ORDER BY tk.F_ExpansionTime DESC + LIMIT @PageSize OFFSET @Offset"; + + parameters.Add(new SugarParameter("@PageSize", input.PageSize)); + parameters.Add(new SugarParameter("@Offset", (input.PageIndex - 1) * input.PageSize)); + + // 查询总数 + var countSql = $@" + SELECT COUNT(*) + FROM lq_tkjlb tk + {whereClause}"; + + var countParameters = parameters.Where(p => p.ParameterName != "@PageSize" && p.ParameterName != "@Offset").ToList(); + var totalCount = await _db.Ado.GetIntAsync(countSql, countParameters); + + // 执行查询 + var result = await _db.Ado.SqlQueryAsync(sql, parameters); + + // 生成问题分析说明 + foreach (var item in result) + { + var analysisList = new List(); + + if (item.HasInvite == "否" && item.HasAppointment == "否" && item.ActualAppointmentCount > 0) + { + analysisList.Add($"有{item.ActualAppointmentCount}条预约记录,但未通过邀约产生(F_InviteId为null)"); + } + + if (item.HasAppointment == "否" && item.HasConsume == "否" && item.ActualConsumeCount > 0) + { + analysisList.Add($"有{item.ActualConsumeCount}条消耗记录,但未通过预约产生(F_AppointmentId为null或预约未通过邀约产生)"); + } + + if (item.HasAppointment == "否" && item.HasBilling == "否" && item.ActualBillingCount > 0) + { + analysisList.Add($"有{item.ActualBillingCount}条开单记录,但未通过预约产生(F_AppointmentId为null或预约未通过邀约产生)"); + } + + if (item.HasInvite == "是" && item.HasAppointment == "否" && item.ActualAppointmentCount > 0) + { + analysisList.Add($"有邀约记录,有{item.ActualAppointmentCount}条预约记录,但预约记录的F_InviteId未关联到邀约记录"); + } + + if (item.HasAppointment == "是" && item.HasConsume == "否" && item.ActualConsumeCount > 0) + { + analysisList.Add($"有预约记录,有{item.ActualConsumeCount}条消耗记录,但消耗记录的F_AppointmentId未关联到预约记录"); + } + + if (item.HasAppointment == "是" && item.HasBilling == "否" && item.ActualBillingCount > 0) + { + analysisList.Add($"有预约记录,有{item.ActualBillingCount}条开单记录,但开单记录的F_AppointmentId未关联到预约记录"); + } + + if (analysisList.Count == 0) + { + item.Analysis = "数据正常,符合业务链路:拓客 -> 邀约 -> 预约 -> 开单/消耗"; + } + else + { + item.Analysis = string.Join(";", analysisList); + } + } + + return new + { + list = result, + pagination = new + { + pageIndex = input.PageIndex, + pageSize = input.PageSize, + total = totalCount + } + }; + } + catch (Exception ex) + { + _logger.LogError(ex, "获取线索池客户统计报表失败"); + throw NCCException.Oh($"获取线索池客户统计报表失败:{ex.Message}"); + } + } + #endregion + #region 门店统计报表 /// /// 获取门店统计报表 diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs index 7f3a344..962f059 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs @@ -24,6 +24,7 @@ using NCC.Extend.Entitys.lq_kd_pxmx; using NCC.Extend.Entitys.lq_khxx; using NCC.Extend.Entitys.lq_mdxx; using NCC.Extend.Entitys.lq_tkjlb; +using NCC.Extend.Entitys.lq_xmzl; using NCC.Extend.Interfaces.LqTkjlb; using NCC.FriendlyException; using NCC.JsonSerialization; @@ -246,6 +247,7 @@ namespace NCC.Extend.LqTkjlb ActualPrice = 0, IsEffective = StatusEnum.有效.GetHashCode(), CreateTIme = DateTime.Now, + ItemCategory = await _db.Queryable().Where(x => x.Id == "61").Select(x => x.Qt2).FirstAsync(), }; var pxmxResult = await _db.Insertable(pxmxentity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync(); if (!(pxmxResult > 0)) diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs index e6a8089..fe77730 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs @@ -970,6 +970,8 @@ namespace NCC.Extend.LqXhHyhk IsEffective = StatusEnum.有效.GetHashCode(), ItemCategory = lqXhPxmxEntity.ItemCategory, ItemId = lqXhPxmxEntity.Px, + StoreId = entity.Md, + ItemName = lqXhPxmxEntity.Pxmc } ); } @@ -1007,6 +1009,8 @@ namespace NCC.Extend.LqXhHyhk IsEffective = StatusEnum.有效.GetHashCode(), ItemCategory = lqXhPxmxEntity.ItemCategory, ItemId = lqXhPxmxEntity.Px, + StoreId = entity.Md, + ItemName = lqXhPxmxEntity.Pxmc } ); } @@ -1341,6 +1345,8 @@ namespace NCC.Extend.LqXhHyhk AccompaniedProjectNumber = ijks_tem.accompaniedProjectNumber, ItemCategory = lqXhPxmxEntity.ItemCategory, ItemId = lqXhPxmxEntity.Px, + StoreId = entity.Md, + ItemName = lqXhPxmxEntity.Pxmc } ); } @@ -1377,6 +1383,8 @@ namespace NCC.Extend.LqXhHyhk IsEffective = StatusEnum.有效.GetHashCode(), ItemCategory = lqXhPxmxEntity.ItemCategory, ItemId = lqXhPxmxEntity.Px, + StoreId = entity.Md, + ItemName = lqXhPxmxEntity.Pxmc }); } } diff --git a/sql/删除业绩表部门字段.sql b/sql/删除业绩表部门字段.sql new file mode 100644 index 0000000..4c9105b --- /dev/null +++ b/sql/删除业绩表部门字段.sql @@ -0,0 +1,21 @@ +-- 删除6个业绩表的部门字段 +-- 注意:如果字段不存在,执行时会报错,可以忽略该错误继续执行 + +-- 1. 开单健康师业绩表 +ALTER TABLE lq_kd_jksyj DROP COLUMN F_DepartmentId; + +-- 2. 开单科技老师业绩表 +ALTER TABLE lq_kd_kjbsyj DROP COLUMN F_DepartmentId; + +-- 3. 消耗健康师业绩表 +ALTER TABLE lq_xh_jksyj DROP COLUMN F_DepartmentId; + +-- 4. 消耗科技老师业绩表 +ALTER TABLE lq_xh_kjbsyj DROP COLUMN F_DepartmentId; + +-- 5. 退卡健康师业绩表 +ALTER TABLE lq_hytk_jksyj DROP COLUMN F_DepartmentId; + +-- 6. 退卡科技老师业绩表 +ALTER TABLE lq_hytk_kjbsyj DROP COLUMN F_DepartmentId; + diff --git a/sql/同步业绩表品项名称字段.sql b/sql/同步业绩表品项名称字段.sql new file mode 100644 index 0000000..b72beab --- /dev/null +++ b/sql/同步业绩表品项名称字段.sql @@ -0,0 +1,51 @@ +-- 同步6个业绩表的品项名称字段 +-- 通过关联的品项明细表获取品项名称(pxmc字段) + +-- 1. 开单健康师业绩表:从开单品项明细表(lq_kd_pxmx)同步 +UPDATE lq_kd_jksyj kd +INNER JOIN lq_kd_pxmx px ON px.F_Id = kd.F_kdpxid +SET kd.F_ItemName = px.pxmc +WHERE kd.F_kdpxid IS NOT NULL + AND px.pxmc IS NOT NULL + AND px.pxmc != ''; + +-- 2. 开单科技老师业绩表:从开单品项明细表(lq_kd_pxmx)同步 +UPDATE lq_kd_kjbsyj kd +INNER JOIN lq_kd_pxmx px ON px.F_Id = kd.F_kdpxid +SET kd.F_ItemName = px.pxmc +WHERE kd.F_kdpxid IS NOT NULL + AND px.pxmc IS NOT NULL + AND px.pxmc != ''; + +-- 3. 消耗健康师业绩表:从耗卡品项明细表(lq_xh_pxmx)同步 +UPDATE lq_xh_jksyj xh +INNER JOIN lq_xh_pxmx px ON px.F_Id = xh.F_kdpxid +SET xh.F_ItemName = px.pxmc +WHERE xh.F_kdpxid IS NOT NULL + AND px.pxmc IS NOT NULL + AND px.pxmc != ''; + +-- 4. 消耗科技老师业绩表:从耗卡品项明细表(lq_xh_pxmx)同步 +UPDATE lq_xh_kjbsyj xh +INNER JOIN lq_xh_pxmx px ON px.F_Id = xh.F_hkpxid +SET xh.F_ItemName = px.pxmc +WHERE xh.F_hkpxid IS NOT NULL + AND px.pxmc IS NOT NULL + AND px.pxmc != ''; + +-- 5. 退卡健康师业绩表:从退卡品项明细表(lq_hytk_mx)同步 +UPDATE lq_hytk_jksyj tk +INNER JOIN lq_hytk_mx mx ON mx.F_Id = tk.F_CardReturn +SET tk.F_ItemName = mx.pxmc +WHERE tk.F_CardReturn IS NOT NULL + AND mx.pxmc IS NOT NULL + AND mx.pxmc != ''; + +-- 6. 退卡科技老师业绩表:从退卡品项明细表(lq_hytk_mx)同步 +UPDATE lq_hytk_kjbsyj tk +INNER JOIN lq_hytk_mx mx ON mx.F_Id = tk.F_CardReturn +SET tk.F_ItemName = mx.pxmc +WHERE tk.F_CardReturn IS NOT NULL + AND mx.pxmc IS NOT NULL + AND mx.pxmc != ''; + diff --git a/sql/同步业绩表门店ID字段.sql b/sql/同步业绩表门店ID字段.sql new file mode 100644 index 0000000..5b0ab4a --- /dev/null +++ b/sql/同步业绩表门店ID字段.sql @@ -0,0 +1,73 @@ +-- 同步6个业绩表的门店ID字段 +-- 开单和消耗业绩表:通过开单编号(glkdbh)关联开单记录表(lq_kd_kdjlb),获取门店ID(djmd) +-- 退卡业绩表:通过退卡编号(gltkbh)关联退卡表(lq_hytk_hytk),获取门店ID(md) + +-- 给业绩表的关联字段加索引 +-- 注意:如果索引已存在会报错,可以忽略该错误继续执行后续UPDATE语句 +-- 开单健康师业绩表 +CREATE INDEX idx_kd_jksyj_glkdbh ON lq_kd_jksyj(glkdbh); +-- 开单科技老师业绩表 +CREATE INDEX idx_kd_kjbsyj_glkdbh ON lq_kd_kjbsyj(glkdbh); +-- 消耗健康师业绩表 +CREATE INDEX idx_xh_jksyj_glkdbh ON lq_xh_jksyj(glkdbh); +-- 消耗科技老师业绩表 +CREATE INDEX idx_xh_kjbsyj_glkdbh ON lq_xh_kjbsyj(glkdbh); +-- 退卡健康师业绩表 +CREATE INDEX idx_hytk_jksyj_gltkbh ON lq_hytk_jksyj(gltkbh); +-- 退卡科技老师业绩表 +CREATE INDEX idx_hytk_kjbsyj_gltkbh ON lq_hytk_kjbsyj(gltkbh); + +-- 1. 开单健康师业绩表:通过glkdbh关联开单记录表获取门店ID +UPDATE lq_kd_jksyj yj +INNER JOIN lq_kd_kdjlb kd ON yj.glkdbh = kd.F_Id +SET yj.F_StoreId = kd.djmd +WHERE yj.glkdbh IS NOT NULL + AND yj.glkdbh != '' + AND kd.djmd IS NOT NULL + AND kd.djmd != ''; + +-- 2. 开单科技老师业绩表:通过glkdbh关联开单记录表获取门店ID +UPDATE lq_kd_kjbsyj yj +INNER JOIN lq_kd_kdjlb kd ON yj.glkdbh = kd.F_Id +SET yj.F_StoreId = kd.djmd +WHERE yj.glkdbh IS NOT NULL + AND yj.glkdbh != '' + AND kd.djmd IS NOT NULL + AND kd.djmd != ''; + +-- 3. 消耗健康师业绩表:通过glkdbh关联开单记录表获取门店ID +UPDATE lq_xh_jksyj yj +INNER JOIN lq_kd_kdjlb kd ON yj.glkdbh = kd.F_Id +SET yj.F_StoreId = kd.djmd +WHERE yj.glkdbh IS NOT NULL + AND yj.glkdbh != '' + AND kd.djmd IS NOT NULL + AND kd.djmd != ''; + +-- 4. 消耗科技老师业绩表:通过glkdbh关联开单记录表获取门店ID +UPDATE lq_xh_kjbsyj yj +INNER JOIN lq_kd_kdjlb kd ON yj.glkdbh = kd.F_Id +SET yj.F_StoreId = kd.djmd +WHERE yj.glkdbh IS NOT NULL + AND yj.glkdbh != '' + AND kd.djmd IS NOT NULL + AND kd.djmd != ''; + +-- 5. 退卡健康师业绩表:通过gltkbh关联退卡表获取门店ID +UPDATE lq_hytk_jksyj yj +INNER JOIN lq_hytk_hytk tk ON yj.gltkbh = tk.F_Id +SET yj.F_StoreId = tk.md +WHERE yj.gltkbh IS NOT NULL + AND yj.gltkbh != '' + AND tk.md IS NOT NULL + AND tk.md != ''; + +-- 6. 退卡科技老师业绩表:通过gltkbh关联退卡表获取门店ID +UPDATE lq_hytk_kjbsyj yj +INNER JOIN lq_hytk_hytk tk ON yj.gltkbh = tk.F_Id +SET yj.F_StoreId = tk.md +WHERE yj.gltkbh IS NOT NULL + AND yj.gltkbh != '' + AND tk.md IS NOT NULL + AND tk.md != ''; + diff --git a/sql/添加业绩表品项名称字段.sql b/sql/添加业绩表品项名称字段.sql new file mode 100644 index 0000000..d38146b --- /dev/null +++ b/sql/添加业绩表品项名称字段.sql @@ -0,0 +1,21 @@ +-- 为6个业绩表添加品项名称字段 +-- 品项名称字段存储品项名称(从品项明细表的pxmc字段获取) + +-- 1. 开单健康师业绩表 +ALTER TABLE lq_kd_jksyj ADD COLUMN F_ItemName VARCHAR(200) NULL COMMENT '品项名称' AFTER F_ItemId; + +-- 2. 开单科技老师业绩表 +ALTER TABLE lq_kd_kjbsyj ADD COLUMN F_ItemName VARCHAR(200) NULL COMMENT '品项名称' AFTER F_ItemId; + +-- 3. 消耗健康师业绩表 +ALTER TABLE lq_xh_jksyj ADD COLUMN F_ItemName VARCHAR(200) NULL COMMENT '品项名称' AFTER F_ItemId; + +-- 4. 消耗科技老师业绩表 +ALTER TABLE lq_xh_kjbsyj ADD COLUMN F_ItemName VARCHAR(200) NULL COMMENT '品项名称' AFTER F_ItemId; + +-- 5. 退卡健康师业绩表 +ALTER TABLE lq_hytk_jksyj ADD COLUMN F_ItemName VARCHAR(200) NULL COMMENT '品项名称' AFTER F_ItemId; + +-- 6. 退卡科技老师业绩表 +ALTER TABLE lq_hytk_kjbsyj ADD COLUMN F_ItemName VARCHAR(200) NULL COMMENT '品项名称' AFTER F_ItemId; + diff --git a/sql/添加业绩表门店ID字段.sql b/sql/添加业绩表门店ID字段.sql new file mode 100644 index 0000000..3fd6de9 --- /dev/null +++ b/sql/添加业绩表门店ID字段.sql @@ -0,0 +1,21 @@ +-- 为6个业绩表添加门店ID字段 +-- 门店ID字段存储门店ID(从BASE_USER.F_MDID获取,对应lq_mdxx.F_Id) + +-- 1. 开单健康师业绩表 +ALTER TABLE lq_kd_jksyj ADD COLUMN F_StoreId VARCHAR(50) NULL COMMENT '门店ID' AFTER F_ItemId; + +-- 2. 开单科技老师业绩表 +ALTER TABLE lq_kd_kjbsyj ADD COLUMN F_StoreId VARCHAR(50) NULL COMMENT '门店ID' AFTER F_ItemId; + +-- 3. 消耗健康师业绩表 +ALTER TABLE lq_xh_jksyj ADD COLUMN F_StoreId VARCHAR(50) NULL COMMENT '门店ID' AFTER F_ItemId; + +-- 4. 消耗科技老师业绩表 +ALTER TABLE lq_xh_kjbsyj ADD COLUMN F_StoreId VARCHAR(50) NULL COMMENT '门店ID' AFTER F_ItemId; + +-- 5. 退卡健康师业绩表 +ALTER TABLE lq_hytk_jksyj ADD COLUMN F_StoreId VARCHAR(50) NULL COMMENT '门店ID' AFTER F_ItemId; + +-- 6. 退卡科技老师业绩表 +ALTER TABLE lq_hytk_kjbsyj ADD COLUMN F_StoreId VARCHAR(50) NULL COMMENT '门店ID' AFTER F_ItemId; + -- libgit2 0.21.4