From 6b449d657c33eed09afc427cb3eb3e96f2b38d36 Mon Sep 17 00:00:00 2001 From: “wangming” <“wangming@antissoft.com”> Date: Mon, 10 Nov 2025 11:06:42 +0800 Subject: [PATCH] 合并代码 --- antis-ncc-admin/.env.development | 4 ++-- netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetCrInput.cs | 5 +++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetInfoOutput.cs | 5 +++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetListOutput.cs | 5 +++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetUpInput.cs | 5 +++++ netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_md_target/LqMdTargetEntity.cs | 6 ++++++ netcore/src/Modularity/Extend/NCC.Extend/LqDailyReportService.cs | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------------------------- netcore/src/Modularity/Extend/NCC.Extend/LqMdTargetService.cs | 1 + 8 files changed, 90 insertions(+), 47 deletions(-) diff --git a/antis-ncc-admin/.env.development b/antis-ncc-admin/.env.development index 4c02e12..e9a4583 100644 --- a/antis-ncc-admin/.env.development +++ b/antis-ncc-admin/.env.development @@ -2,6 +2,6 @@ VUE_CLI_BABEL_TRANSPILE_MODULES = true # VUE_APP_BASE_API = 'https://erp.lvqianmeiye.com' -VUE_APP_BASE_API = 'http://erp_test.lvqianmeiye.com' -# VUE_APP_BASE_API = 'http://localhost:2011' +# VUE_APP_BASE_API = 'http://erp_test.lvqianmeiye.com' +VUE_APP_BASE_API = 'http://localhost:2011' VUE_APP_BASE_WSS = 'ws://192.168.110.45:2011/websocket' diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetCrInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetCrInput.cs index b08d789..cf25315 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetCrInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetCrInput.cs @@ -57,6 +57,11 @@ namespace NCC.Extend.Entitys.Dto.LqMdTarget public decimal educationDepartmentTarget { get; set; } = 0; /// + /// 大项目部业绩目标 + /// + public decimal majorProjectDepartmentTarget { get; set; } = 0; + + /// /// 事业部总经理 /// public string businessUnitGeneralManager { get; set; } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetInfoOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetInfoOutput.cs index 4815f50..9e1edc7 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetInfoOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetInfoOutput.cs @@ -58,6 +58,11 @@ namespace NCC.Extend.Entitys.Dto.LqMdTarget public decimal educationDepartmentTarget { get; set; } /// + /// 大项目部业绩目标 + /// + public decimal majorProjectDepartmentTarget { get; set; } + + /// /// 事业部总经理 /// public string businessUnitGeneralManager { get; set; } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetListOutput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetListOutput.cs index 9c43a9c..f30ee1e 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetListOutput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetListOutput.cs @@ -58,6 +58,11 @@ namespace NCC.Extend.Entitys.Dto.LqMdTarget public decimal educationDepartmentTarget { get; set; } /// + /// 大项目部业绩目标 + /// + public decimal majorProjectDepartmentTarget { get; set; } + + /// /// 事业部总经理 /// public string businessUnitGeneralManager { get; set; } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetUpInput.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetUpInput.cs index 39e2295..e2620c0 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetUpInput.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/Dto/LqMdTarget/LqMdTargetUpInput.cs @@ -57,6 +57,11 @@ namespace NCC.Extend.Entitys.Dto.LqMdTarget public decimal educationDepartmentTarget { get; set; } = 0; /// + /// 大项目部业绩目标 + /// + public decimal majorProjectDepartmentTarget { get; set; } = 0; + + /// /// 事业部总经理 /// public string businessUnitGeneralManager { get; set; } diff --git a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_md_target/LqMdTargetEntity.cs b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_md_target/LqMdTargetEntity.cs index bbc7f65..7af08e6 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_md_target/LqMdTargetEntity.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_md_target/LqMdTargetEntity.cs @@ -72,6 +72,12 @@ namespace NCC.Extend.Entitys.lq_md_target public decimal EducationDepartmentTarget { get; set; } = 0; /// + /// 大项目部业绩目标 + /// + [SugarColumn(ColumnName = "F_MajorProjectDepartmentTarget")] + public decimal MajorProjectDepartmentTarget { get; set; } = 0; + + /// /// 事业部总经理 /// [SugarColumn(ColumnName = "F_BusinessUnitGeneralManager")] diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqDailyReportService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqDailyReportService.cs index e204504..fe5f308 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqDailyReportService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqDailyReportService.cs @@ -191,7 +191,7 @@ namespace NCC.Extend /// 返回说明: /// - StoreId: 门店ID /// - StoreName: 门店名称 - /// - TargetPerformance: 目标业绩(生命线,来自门店信息表) + /// - TargetPerformance: 目标业绩(门店目标业绩,来自门店目标表lq_md_target的F_StoreTarget字段,根据开始时间所在月份获取,如果未查询到则为0) /// - BillingPerformance: 开单业绩(开单业绩总和) /// - RefundPerformance: 退款业绩(退卡业绩总和) /// - ActualPerformance: 实际业绩(开单业绩 - 退款业绩) @@ -210,6 +210,9 @@ namespace NCC.Extend // 获取时间范围 var (startDate, endDate) = GetTimeRange(input.StartTime, input.EndTime); + // 根据开始时间确定月份(YYYYMM格式) + var month = startDate.ToString("yyyyMM"); + // 构建门店过滤条件 var storeFilter = ""; if (input.StoreIds != null && input.StoreIds.Any()) @@ -223,8 +226,8 @@ namespace NCC.Extend SELECT store.F_Id as StoreId, store.dm as StoreName, - -- 目标业绩(生命线) - COALESCE(store.xsyj, 0) as TargetPerformance, + -- 目标业绩(门店目标业绩,来自门店目标表) + COALESCE(target.F_StoreTarget, 0) as TargetPerformance, -- 开单业绩总和 COALESCE(( SELECT SUM(billing.sfyj) @@ -244,6 +247,7 @@ namespace NCC.Extend AND DATE(refund.tksj) <= '{endDate:yyyy-MM-dd}' ), 0) as RefundPerformance FROM lq_mdxx store + LEFT JOIN lq_md_target target ON target.F_StoreId = store.F_Id AND target.F_Month = '{month}' WHERE 1=1 {storeFilter} ORDER BY (BillingPerformance - RefundPerformance) DESC"; @@ -298,10 +302,10 @@ namespace NCC.Extend /// 返回说明: /// - BusinessUnitId: 事业部ID /// - BusinessUnitName: 事业部名称 - /// - TargetPerformance: 目标业绩(管理门店的生命线总和) + /// - TargetPerformance: 目标业绩(来自门店目标表lq_md_target的F_BusinessUnitTarget字段,根据开始时间所在月份获取,通过F_BusinessUnit字段关联,如果未查询到则为0) /// - CompletedPerformance: 完成业绩(指定时间范围内的开单业绩总和) /// - CompletionRate: 完成率(百分比,CompletedPerformance / TargetPerformance * 100) - /// - StoreCount: 门店数量 + /// - StoreCount: 门店数量(根据门店目标表中归属该事业部的门店数统计) /// /// 查询参数 /// 事业部业绩完成情况列表 @@ -315,6 +319,9 @@ namespace NCC.Extend // 获取时间范围 var (startDate, endDate) = GetTimeRange(input.StartTime, input.EndTime); + // 根据开始时间确定月份(YYYYMM格式) + var month = startDate.ToString("yyyyMM"); + // 构建事业部过滤条件 var businessUnitFilter = ""; if (input.BusinessUnitIds != null && input.BusinessUnitIds.Any()) @@ -329,10 +336,10 @@ namespace NCC.Extend SELECT o.F_Id as BusinessUnitId, o.F_FullName as BusinessUnitName, - COALESCE(SUM(store.xsyj), 0) as TargetPerformance, - COUNT(DISTINCT store.F_Id) as StoreCount + COALESCE(SUM(target.F_BusinessUnitTarget), 0) as TargetPerformance, + COUNT(DISTINCT target.F_StoreId) as StoreCount FROM base_organize o - LEFT JOIN lq_mdxx store ON store.syb = o.F_Id + LEFT JOIN lq_md_target target ON target.F_BusinessUnit = o.F_Id AND target.F_Month = '{month}' WHERE o.F_Category = 'department' AND (o.F_DeleteMark IS NULL OR o.F_DeleteMark != 1) AND o.F_FullName IN ('事业一部', '事业二部', '事业三部', '事业四部', '事业五部', '事业六部') @@ -432,10 +439,10 @@ namespace NCC.Extend /// 返回说明: /// - DepartmentId: 部门ID /// - DepartmentName: 部门名称(教育一部、教育二部、科技一部、科技二部、大项目一部、大项目二部) - /// - TargetPerformance: 目标业绩(管理门店的生命线总和) + /// - TargetPerformance: 目标业绩(来自门店目标表lq_md_target,根据部门类型使用对应字段:教育部使用F_EducationDepartmentTarget,科技部使用F_TechDepartmentTarget,大项目部使用F_MajorProjectDepartmentTarget,根据开始时间所在月份获取,通过对应归属字段关联,如果未查询到则为0) /// - CompletedPerformance: 完成业绩(指定时间范围内的开单业绩总和) /// - CompletionRate: 完成率(百分比,CompletedPerformance / TargetPerformance * 100) - /// - StoreCount: 门店数量 + /// - StoreCount: 门店数量(根据门店目标表中归属该部门的门店数统计) /// /// 查询参数 /// 天王团业绩完成情况列表 @@ -449,6 +456,9 @@ 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()) @@ -457,12 +467,12 @@ namespace NCC.Extend departmentFilter = $"AND o.F_Id IN ('{filterDeptIdsStr}')"; } - // 天王团部门信息(字段名和部门名称的映射) - var tianwangDepartments = new Dictionary + // 天王团部门信息(字段名、目标字段名和部门名称的映射) + var tianwangDepartments = new Dictionary { - { "jyb", ("jyb", new[] { "教育一部", "教育二部" }) }, - { "kjb", ("kjb", new[] { "科技一部", "科技二部" }) }, - { "dxmb", ("dxmb", new[] { "大项目一部", "大项目二部" }) } + { "jyb", ("F_EducationDepartment", "F_EducationDepartmentTarget", new[] { "教育一部", "教育二部" }) }, + { "kjb", ("F_TechDepartment", "F_TechDepartmentTarget", new[] { "科技一部", "科技二部" }) }, + { "dxmb", ("F_MajorProjectDepartment", "F_MajorProjectDepartmentTarget", new[] { "大项目一部", "大项目二部" }) } }; // 分步查询,提高效率 @@ -480,10 +490,10 @@ namespace NCC.Extend SELECT o.F_Id as DepartmentId, o.F_FullName as DepartmentName, - COALESCE(SUM(store.xsyj), 0) as TargetPerformance, - COUNT(DISTINCT store.F_Id) as StoreCount + COALESCE(SUM(target.{deptType.Value.targetFieldName}), 0) as TargetPerformance, + COUNT(DISTINCT target.F_StoreId) as StoreCount FROM base_organize o - LEFT JOIN lq_mdxx store ON store.{deptType.Key} = o.F_Id + LEFT JOIN lq_md_target target ON target.{deptType.Value.fieldName} = o.F_Id AND target.F_Month = '{month}' WHERE o.F_Category = 'department' AND (o.F_DeleteMark IS NULL OR o.F_DeleteMark != 1) AND o.F_FullName IN ('{deptNamesStr}') @@ -608,7 +618,7 @@ namespace NCC.Extend /// - ManagerId: 经理用户ID /// - ManagerName: 经理姓名 /// - StoreId/StoreName: 门店信息 - /// - Target1/2/3: 目标业绩一/二/三阶段(smx1/smx2/smx3) + /// - Target1/2/3: 目标业绩一/二/三阶段(来自门店总经理生命线设置表lq_md_general_manager_lifeline的F_Lifeline1/F_Lifeline2/F_Lifeline3字段,根据开始时间所在月份获取,如果未查询到则为0) /// - CompletedPerformance: 完成业绩(指定时间范围内的开单业绩总和) /// - CompletionRate1/2/3: 完成率各阶段(百分比) /// @@ -624,38 +634,41 @@ namespace NCC.Extend // 获取时间范围 var (startDate, endDate) = GetTimeRange(input.StartTime, input.EndTime); + // 根据开始时间确定月份(YYYYMM格式) + var month = startDate.ToString("yyyyMM"); + // 构建经理过滤条件 var managerFilter = ""; if (!string.IsNullOrWhiteSpace(input.ManagerId)) { - managerFilter = $"AND target.zjl_userid = '{input.ManagerId}'"; + managerFilter = $"AND target.F_GeneralManagerId = '{input.ManagerId}'"; } // SQL查询:获取经理在各门店的目标业绩和完成业绩 var sql = $@" SELECT - target.zjl_userid as ManagerId, + target.F_GeneralManagerId as ManagerId, u.F_RealName as ManagerName, - target.md_id as StoreId, + target.F_StoreId as StoreId, store.dm as StoreName, - target.smx1 as Target1, - target.smx2 as Target2, - target.smx3 as Target3, + target.F_Lifeline1 as Target1, + target.F_Lifeline2 as Target2, + target.F_Lifeline3 as Target3, -- 完成业绩 COALESCE(( SELECT SUM(billing.sfyj) FROM lq_kd_kdjlb billing - WHERE billing.djmd = target.md_id + WHERE billing.djmd = target.F_StoreId AND billing.F_IsEffective = 1 AND DATE(billing.kdrq) >= '{startDate:yyyy-MM-dd}' AND DATE(billing.kdrq) <= '{endDate:yyyy-MM-dd}' ), 0) as CompletedPerformance - FROM lq_zjl_mdsmxsz target - INNER JOIN BASE_USER u ON target.zjl_userid = u.F_Id - INNER JOIN lq_mdxx store ON target.md_id = store.F_Id - WHERE target.deletemark = 0 + FROM lq_md_general_manager_lifeline target + INNER JOIN BASE_USER u ON target.F_GeneralManagerId = u.F_Id + INNER JOIN lq_mdxx store ON target.F_StoreId = store.F_Id + WHERE target.F_Month = '{month}' {managerFilter} - ORDER BY target.zjl_userid, store.dm"; + ORDER BY target.F_GeneralManagerId, store.dm"; var result = await _db.Ado.SqlQueryAsync(sql); @@ -712,10 +725,10 @@ namespace NCC.Extend /// 返回说明: /// - ManagerId: 经理用户ID /// - ManagerName: 经理姓名 - /// - TotalTarget1/2/3: 总目标业绩一/二/三阶段 + /// - TotalTarget1/2/3: 总目标业绩一/二/三阶段(来自门店总经理生命线设置表lq_md_general_manager_lifeline的F_Lifeline1/F_Lifeline2/F_Lifeline3字段,根据开始时间所在月份获取并汇总) /// - TotalCompletedPerformance: 总完成业绩(指定时间范围内的开单业绩总和) /// - TotalCompletionRate1/2/3: 总完成率各阶段 - /// - StoreCount: 管理门店数量 + /// - StoreCount: 管理门店数量(根据门店总经理生命线设置表中归属该经理的门店数统计) /// /// 查询参数 /// 经理汇总业绩完成情况列表 @@ -729,37 +742,40 @@ namespace NCC.Extend // 获取时间范围 var (startDate, endDate) = GetTimeRange(input.StartTime, input.EndTime); + // 根据开始时间确定月份(YYYYMM格式) + var month = startDate.ToString("yyyyMM"); + // 构建经理过滤条件 var managerFilter = ""; if (!string.IsNullOrWhiteSpace(input.ManagerId)) { - managerFilter = $"AND target.zjl_userid = '{input.ManagerId}'"; + managerFilter = $"AND target.F_GeneralManagerId = '{input.ManagerId}'"; } // SQL查询:获取经理汇总业绩 var sql = $@" SELECT - target.zjl_userid as ManagerId, + target.F_GeneralManagerId as ManagerId, u.F_RealName as ManagerName, - SUM(target.smx1) as TotalTarget1, - COALESCE(SUM(target.smx2), 0) as TotalTarget2, - COALESCE(SUM(target.smx3), 0) as TotalTarget3, - COUNT(DISTINCT target.md_id) as StoreCount, + SUM(target.F_Lifeline1) as TotalTarget1, + COALESCE(SUM(target.F_Lifeline2), 0) as TotalTarget2, + COALESCE(SUM(target.F_Lifeline3), 0) as TotalTarget3, + COUNT(DISTINCT target.F_StoreId) as StoreCount, -- 总完成业绩 SUM(COALESCE(( SELECT SUM(billing.sfyj) FROM lq_kd_kdjlb billing - WHERE billing.djmd = target.md_id + WHERE billing.djmd = target.F_StoreId AND billing.F_IsEffective = 1 AND DATE(billing.kdrq) >= '{startDate:yyyy-MM-dd}' AND DATE(billing.kdrq) <= '{endDate:yyyy-MM-dd}' ), 0)) as TotalCompletedPerformance - FROM lq_zjl_mdsmxsz target - INNER JOIN BASE_USER u ON target.zjl_userid = u.F_Id - INNER JOIN lq_mdxx store ON target.md_id = store.F_Id - WHERE target.deletemark = 0 + FROM lq_md_general_manager_lifeline target + INNER JOIN BASE_USER u ON target.F_GeneralManagerId = u.F_Id + INNER JOIN lq_mdxx store ON target.F_StoreId = store.F_Id + WHERE target.F_Month = '{month}' {managerFilter} - GROUP BY target.zjl_userid, u.F_RealName + GROUP BY target.F_GeneralManagerId, u.F_RealName ORDER BY TotalCompletedPerformance DESC"; var result = await _db.Ado.SqlQueryAsync(sql); diff --git a/netcore/src/Modularity/Extend/NCC.Extend/LqMdTargetService.cs b/netcore/src/Modularity/Extend/NCC.Extend/LqMdTargetService.cs index 6723656..67f6751 100644 --- a/netcore/src/Modularity/Extend/NCC.Extend/LqMdTargetService.cs +++ b/netcore/src/Modularity/Extend/NCC.Extend/LqMdTargetService.cs @@ -88,6 +88,7 @@ namespace NCC.Extend.LqMdTarget businessUnitTarget = it.BusinessUnitTarget, techDepartmentTarget = it.TechDepartmentTarget, educationDepartmentTarget = it.EducationDepartmentTarget, + majorProjectDepartmentTarget = it.MajorProjectDepartmentTarget, businessUnitGeneralManager = it.BusinessUnitGeneralManager, businessUnitManager = it.BusinessUnitManager, storeTarget = it.StoreTarget, -- libgit2 0.21.4