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;
+