Commit d98270e22aabecd89cefd018b7f4bbfdb4be7870

Authored by “wangming”
1 parent 24425bb1

Enhance LqEventService to include EventType in event creation and update process…

…es; add manual time field settings to preserve time accuracy; implement GetEventTypes endpoint to retrieve event type enumeration; update LqTkjlb DTO to include eventId and eventName for better tracking of related events.
Showing 31 changed files with 1331 additions and 607 deletions
[已用]创建金三角统计视图.sql 0 → 100644
  1 +-- 创建金三角统计视图
  2 +-- 用于统计金三角的订单数量、业绩总额、首次和最后订单日期等信息
  3 +-- 按月份和业绩总额降序排列
  4 +
  5 +CREATE VIEW v_jsj_monthly_performance AS
  6 +SELECT
  7 + `jsj`.`F_Id` AS `jsj_id`,
  8 + `jsj`.`jsj` AS `jsj_name`,
  9 + `jsj`.`yf` AS `month`,
  10 + `jsj`.`md` AS `store_id`,
  11 + `md`.`dm` AS `store_name`,
  12 + count( DISTINCT `jksyj`.`glkdbh` ) AS `order_count`,
  13 + sum(
  14 + cast( `jksyj`.`jksyj` AS DECIMAL ( 18, 2 ) )
  15 + ) AS `total_performance`,
  16 + max( `jksyj`.`yjsj` ) AS `last_order_date`,
  17 + min( `jksyj`.`yjsj` ) AS `first_order_date`
  18 +FROM
  19 + (
  20 + (
  21 + `lq_ycsd_jsj` `jsj`
  22 + LEFT JOIN `lq_kd_jksyj` `jksyj` ON (
  23 + (
  24 + ( `jsj`.`F_Id` = `jksyj`.`jsj_id` )
  25 + AND (
  26 + YEAR ( `jksyj`.`yjsj` ) = substr( `jsj`.`yf`, 1, 4 )
  27 + )
  28 + AND (
  29 + MONTH ( `jksyj`.`yjsj` ) = substr( `jsj`.`yf`, 5, 2 )
  30 + )
  31 + )
  32 + )
  33 + )
  34 + LEFT JOIN `lq_mdxx` `md` ON ( ( `jsj`.`md` = `md`.`F_Id` ) )
  35 + )
  36 +WHERE
  37 + (
  38 + ( `jsj`.`yf` IS NOT NULL )
  39 + AND ( `jksyj`.`yjsj` IS NOT NULL )
  40 + AND ( `jksyj`.`jksyj` IS NOT NULL )
  41 + AND ( `jksyj`.`jksyj` <> '' )
  42 + AND ( `jksyj`.`jksyj` <> '0' )
  43 + )
  44 +GROUP BY
  45 + `jsj`.`F_Id`,
  46 + `jsj`.`jsj`,
  47 + `jsj`.`yf`,
  48 + `jsj`.`md`,
  49 + `md`.`dm`
  50 +ORDER BY
  51 + `jsj`.`yf` DESC,
  52 + `total_performance` DESC;
  53 +
  54 +-- 视图说明:
  55 +-- jsj_id: 金三角ID
  56 +-- jsj_name: 金三角名称
  57 +-- month: 月份(格式:yyyyMM)
  58 +-- store_id: 门店ID
  59 +-- store_name: 门店名称
  60 +-- order_count: 订单数量(去重)
  61 +-- total_performance: 总业绩(转换为DECIMAL类型)
  62 +-- last_order_date: 最后订单日期
  63 +-- first_order_date: 首次订单日期
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/EventTypeEnumOutput.cs 0 → 100644
  1 +using System.ComponentModel;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqEvent
  4 +{
  5 + /// <summary>
  6 + /// 拓客类型枚举输出
  7 + /// </summary>
  8 + public class EventTypeEnumOutput
  9 + {
  10 + /// <summary>
  11 + /// 枚举值
  12 + /// </summary>
  13 + public int Value { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 枚举名称
  17 + /// </summary>
  18 + public string Name { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 中文描述
  22 + /// </summary>
  23 + public string Description { get; set; }
  24 + }
  25 +}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventCrInput.cs
@@ -69,6 +69,15 @@ namespace NCC.Extend.Entitys.Dto.LqEvent @@ -69,6 +69,15 @@ namespace NCC.Extend.Entitys.Dto.LqEvent
69 public string EventNumber { get; set; } 69 public string EventNumber { get; set; }
70 70
71 /// <summary> 71 /// <summary>
  72 + /// 活动类型
  73 + /// </summary>
  74 + /// <remarks>
  75 + /// 活动类型,可选字段
  76 + /// 最大长度:255个字符
  77 + /// </remarks>
  78 + public int EventType { get; set; }
  79 +
  80 + /// <summary>
72 /// 拓客活动成员列表 81 /// 拓客活动成员列表
73 /// </summary> 82 /// </summary>
74 /// <remarks> 83 /// <remarks>
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventInfoOutput.cs
@@ -40,6 +40,11 @@ namespace NCC.Extend.Entitys.Dto.LqEvent @@ -40,6 +40,11 @@ namespace NCC.Extend.Entitys.Dto.LqEvent
40 public string eventNumber { get; set; } 40 public string eventNumber { get; set; }
41 41
42 /// <summary> 42 /// <summary>
  43 + /// 活动类型
  44 + /// </summary>
  45 + public int eventType { get; set; }
  46 +
  47 + /// <summary>
43 /// 拓客活动成员列表 48 /// 拓客活动成员列表
44 /// </summary> 49 /// </summary>
45 public List<LqEventUserInfoOutput> Members { get; set; } = new List<LqEventUserInfoOutput>(); 50 public List<LqEventUserInfoOutput> Members { get; set; } = new List<LqEventUserInfoOutput>();
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventListOutput.cs
@@ -41,5 +41,10 @@ namespace NCC.Extend.Entitys.Dto.LqEvent @@ -41,5 +41,10 @@ namespace NCC.Extend.Entitys.Dto.LqEvent
41 /// 成员数量 41 /// 成员数量
42 /// </summary> 42 /// </summary>
43 public int memberCount { get; set; } 43 public int memberCount { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 活动类型
  47 + /// </summary>
  48 + public int eventType { get; set; }
44 } 49 }
45 } 50 }
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEvent/LqEventUserEventOutput.cs
@@ -66,5 +66,15 @@ namespace NCC.Extend.Entitys.Dto.LqEvent @@ -66,5 +66,15 @@ namespace NCC.Extend.Entitys.Dto.LqEvent
66 /// 创建用户 66 /// 创建用户
67 /// </summary> 67 /// </summary>
68 public string CreationUser { get; set; } 68 public string CreationUser { get; set; }
  69 +
  70 + /// <summary>
  71 + /// 门店ID
  72 + /// </summary>
  73 + public string StoreId { get; set; }
  74 +
  75 + /// <summary>
  76 + /// 门店名称
  77 + /// </summary>
  78 + public string StoreName { get; set; }
69 } 79 }
70 } 80 }
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqEventUser/LqEventUserInfoOutput.cs
@@ -41,5 +41,15 @@ namespace NCC.Extend.Entitys.Dto.LqEventUser @@ -41,5 +41,15 @@ namespace NCC.Extend.Entitys.Dto.LqEventUser
41 /// 创建用户 41 /// 创建用户
42 /// </summary> 42 /// </summary>
43 public string creationUser { get; set; } 43 public string creationUser { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 目标数量
  47 + /// </summary>
  48 + public int targetCount { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 门店ID
  52 + /// </summary>
  53 + public string storeId { get; set; }
44 } 54 }
45 } 55 }
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqKdPxmx/LqKdPxmxInfoOutput.cs
@@ -36,7 +36,7 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb @@ -36,7 +36,7 @@ namespace NCC.Extend.Entitys.Dto.LqKdKdjlb
36 /// <summary> 36 /// <summary>
37 /// 项目次数 37 /// 项目次数
38 /// </summary> 38 /// </summary>
39 - public int? projectNumber { get; set; } 39 + public decimal projectNumber { get; set; }
40 40
41 /// <summary> 41 /// <summary>
42 /// 是否有效 42 /// 是否有效
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbInfoOutput.cs
@@ -12,56 +12,65 @@ namespace NCC.Extend.Entitys.Dto.LqTkjlb @@ -12,56 +12,65 @@ namespace NCC.Extend.Entitys.Dto.LqTkjlb
12 /// 拓客编号 12 /// 拓客编号
13 /// </summary> 13 /// </summary>
14 public string id { get; set; } 14 public string id { get; set; }
15 - 15 +
16 /// <summary> 16 /// <summary>
17 /// 拓客时间 17 /// 拓客时间
18 /// </summary> 18 /// </summary>
19 public DateTime? tksj { get; set; } 19 public DateTime? tksj { get; set; }
20 - 20 +
21 /// <summary> 21 /// <summary>
22 /// 拓客人员 22 /// 拓客人员
23 /// </summary> 23 /// </summary>
24 public string tkry { get; set; } 24 public string tkry { get; set; }
25 - 25 +
26 /// <summary> 26 /// <summary>
27 /// 顾客姓名 27 /// 顾客姓名
28 /// </summary> 28 /// </summary>
29 public string gkxm { get; set; } 29 public string gkxm { get; set; }
30 - 30 +
31 /// <summary> 31 /// <summary>
32 /// 电话号码 32 /// 电话号码
33 /// </summary> 33 /// </summary>
34 public string dhhm { get; set; } 34 public string dhhm { get; set; }
35 - 35 +
36 /// <summary> 36 /// <summary>
37 /// 购买张数 37 /// 购买张数
38 /// </summary> 38 /// </summary>
39 public int? gmzs { get; set; } 39 public int? gmzs { get; set; }
40 - 40 +
41 /// <summary> 41 /// <summary>
42 /// 支付方式 42 /// 支付方式
43 /// </summary> 43 /// </summary>
44 public string zffs { get; set; } 44 public string zffs { get; set; }
45 - 45 +
46 /// <summary> 46 /// <summary>
47 /// 是否加微信 47 /// 是否加微信
48 /// </summary> 48 /// </summary>
49 public string sfjwx { get; set; } 49 public string sfjwx { get; set; }
50 - 50 +
51 /// <summary> 51 /// <summary>
52 /// 备注 52 /// 备注
53 /// </summary> 53 /// </summary>
54 public string bz { get; set; } 54 public string bz { get; set; }
55 - 55 +
56 /// <summary> 56 /// <summary>
57 /// 所属门店 57 /// 所属门店
58 /// </summary> 58 /// </summary>
59 public string ssmd { get; set; } 59 public string ssmd { get; set; }
60 - 60 +
61 /// <summary> 61 /// <summary>
62 /// 所属战队 62 /// 所属战队
63 /// </summary> 63 /// </summary>
64 public string sszd { get; set; } 64 public string sszd { get; set; }
65 - 65 +
  66 + /// <summary>
  67 + /// 拓客活动id
  68 + /// </summary>
  69 + public string eventId { get; set; }
  70 +
  71 + /// <summary>
  72 + /// 拓客活动名称
  73 + /// </summary>
  74 + public string eventName { get; set; }
66 } 75 }
67 } 76 }
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqTkjlb/LqTkjlbListOutput.cs
@@ -11,56 +11,65 @@ namespace NCC.Extend.Entitys.Dto.LqTkjlb @@ -11,56 +11,65 @@ namespace NCC.Extend.Entitys.Dto.LqTkjlb
11 /// 拓客编号 11 /// 拓客编号
12 /// </summary> 12 /// </summary>
13 public string id { get; set; } 13 public string id { get; set; }
14 - 14 +
15 /// <summary> 15 /// <summary>
16 /// 拓客时间 16 /// 拓客时间
17 /// </summary> 17 /// </summary>
18 public DateTime? tksj { get; set; } 18 public DateTime? tksj { get; set; }
19 - 19 +
20 /// <summary> 20 /// <summary>
21 /// 拓客人员 21 /// 拓客人员
22 /// </summary> 22 /// </summary>
23 public string tkry { get; set; } 23 public string tkry { get; set; }
24 - 24 +
25 /// <summary> 25 /// <summary>
26 /// 顾客姓名 26 /// 顾客姓名
27 /// </summary> 27 /// </summary>
28 public string gkxm { get; set; } 28 public string gkxm { get; set; }
29 - 29 +
30 /// <summary> 30 /// <summary>
31 /// 电话号码 31 /// 电话号码
32 /// </summary> 32 /// </summary>
33 public string dhhm { get; set; } 33 public string dhhm { get; set; }
34 - 34 +
35 /// <summary> 35 /// <summary>
36 /// 购买张数 36 /// 购买张数
37 /// </summary> 37 /// </summary>
38 public int? gmzs { get; set; } 38 public int? gmzs { get; set; }
39 - 39 +
40 /// <summary> 40 /// <summary>
41 /// 支付方式 41 /// 支付方式
42 /// </summary> 42 /// </summary>
43 public string zffs { get; set; } 43 public string zffs { get; set; }
44 - 44 +
45 /// <summary> 45 /// <summary>
46 /// 是否加微信 46 /// 是否加微信
47 /// </summary> 47 /// </summary>
48 public string sfjwx { get; set; } 48 public string sfjwx { get; set; }
49 - 49 +
50 /// <summary> 50 /// <summary>
51 /// 备注 51 /// 备注
52 /// </summary> 52 /// </summary>
53 public string bz { get; set; } 53 public string bz { get; set; }
54 - 54 +
55 /// <summary> 55 /// <summary>
56 /// 所属门店 56 /// 所属门店
57 /// </summary> 57 /// </summary>
58 public string ssmd { get; set; } 58 public string ssmd { get; set; }
59 - 59 +
60 /// <summary> 60 /// <summary>
61 /// 所属战队 61 /// 所属战队
62 /// </summary> 62 /// </summary>
63 public string sszd { get; set; } 63 public string sszd { get; set; }
64 - 64 +
  65 + /// <summary>
  66 + /// 拓客活动id
  67 + /// </summary>
  68 + public string eventId { get; set; }
  69 +
  70 + /// <summary>
  71 + /// 拓客活动名称
  72 + /// </summary>
  73 + public string eventName { get; set; }
65 } 74 }
66 } 75 }
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYcsdJsj/LqYcsdJsjByUserMonthInput.cs 0 → 100644
  1 +using System;
  2 +using System.ComponentModel.DataAnnotations;
  3 +
  4 +namespace NCC.Extend.Entitys.Dto.LqYcsdJsj
  5 +{
  6 + /// <summary>
  7 + /// 根据用户和月份获取金三角信息输入参数
  8 + /// </summary>
  9 + public class LqYcsdJsjByUserMonthInput
  10 + {
  11 + /// <summary>
  12 + /// 用户ID
  13 + /// </summary>
  14 + [Required(ErrorMessage = "用户ID不能为空")]
  15 + public string UserId { get; set; }
  16 +
  17 + /// <summary>
  18 + /// 时间(格式:yyyy-MM-dd HH:mm:ss)
  19 + /// </summary>
  20 + [Required(ErrorMessage = "时间不能为空")]
  21 + public DateTime DateTime { get; set; }
  22 + }
  23 +}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYcsdJsj/LqYcsdJsjByUserMonthOutput.cs 0 → 100644
  1 +namespace NCC.Extend.Entitys.Dto.LqYcsdJsj
  2 +{
  3 + /// <summary>
  4 + /// 根据用户和月份获取金三角信息输出参数
  5 + /// </summary>
  6 + public class LqYcsdJsjByUserMonthOutput
  7 + {
  8 + /// <summary>
  9 + /// 金三角ID
  10 + /// </summary>
  11 + public string JsjId { get; set; }
  12 +
  13 + /// <summary>
  14 + /// 金三角名称
  15 + /// </summary>
  16 + public string JsjName { get; set; }
  17 +
  18 + /// <summary>
  19 + /// 月份
  20 + /// </summary>
  21 + public string Month { get; set; }
  22 +
  23 + /// <summary>
  24 + /// 门店ID
  25 + /// </summary>
  26 + public string StoreId { get; set; }
  27 +
  28 + /// <summary>
  29 + /// 门店名称
  30 + /// </summary>
  31 + public string StoreName { get; set; }
  32 +
  33 + /// <summary>
  34 + /// 用户ID
  35 + /// </summary>
  36 + public string UserId { get; set; }
  37 +
  38 + /// <summary>
  39 + /// 用户姓名
  40 + /// </summary>
  41 + public string UserName { get; set; }
  42 +
  43 + /// <summary>
  44 + /// 是否顾问
  45 + /// </summary>
  46 + public int IsLeader { get; set; }
  47 +
  48 + /// <summary>
  49 + /// 状态
  50 + /// </summary>
  51 + public string Status { get; set; }
  52 +
  53 + /// <summary>
  54 + /// 排序
  55 + /// </summary>
  56 + public int SortOrder { get; set; }
  57 + }
  58 +}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYcsdJsj/LqYcsdJsjPerformanceInput.cs 0 → 100644
  1 +using System.ComponentModel.DataAnnotations;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqYcsdJsj
  4 +{
  5 + /// <summary>
  6 + /// 金三角业绩统计查询输入参数
  7 + /// </summary>
  8 + public class LqYcsdJsjPerformanceInput
  9 + {
  10 + /// <summary>
  11 + /// 开始月份(格式:yyyyMM)
  12 + /// </summary>
  13 + public string StartMonth { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 结束月份(格式:yyyyMM)
  17 + /// </summary>
  18 + public string EndMonth { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 金三角ID(可选,用于查询特定金三角)
  22 + /// </summary>
  23 + public string JsjId { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 门店ID(可选,用于查询特定门店)
  27 + /// </summary>
  28 + public string StoreId { get; set; }
  29 + }
  30 +}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Dto/LqYcsdJsj/LqYcsdJsjPerformanceOutput.cs 0 → 100644
  1 +using System;
  2 +
  3 +namespace NCC.Extend.Entitys.Dto.LqYcsdJsj
  4 +{
  5 + /// <summary>
  6 + /// 金三角业绩统计输出参数
  7 + /// </summary>
  8 + public class LqYcsdJsjPerformanceOutput
  9 + {
  10 + /// <summary>
  11 + /// 金三角ID
  12 + /// </summary>
  13 + public string JsjId { get; set; }
  14 +
  15 + /// <summary>
  16 + /// 金三角名称
  17 + /// </summary>
  18 + public string JsjName { get; set; }
  19 +
  20 + /// <summary>
  21 + /// 月份
  22 + /// </summary>
  23 + public string Month { get; set; }
  24 +
  25 + /// <summary>
  26 + /// 门店ID
  27 + /// </summary>
  28 + public string StoreId { get; set; }
  29 +
  30 + /// <summary>
  31 + /// 门店名称
  32 + /// </summary>
  33 + public string StoreName { get; set; }
  34 +
  35 + /// <summary>
  36 + /// 订单数量
  37 + /// </summary>
  38 + public int OrderCount { get; set; }
  39 +
  40 + /// <summary>
  41 + /// 总业绩
  42 + /// </summary>
  43 + public decimal TotalPerformance { get; set; }
  44 +
  45 + /// <summary>
  46 + /// 最后订单日期
  47 + /// </summary>
  48 + public DateTime? LastOrderDate { get; set; }
  49 +
  50 + /// <summary>
  51 + /// 首次订单日期
  52 + /// </summary>
  53 + public DateTime? FirstOrderDate { get; set; }
  54 +
  55 + /// <summary>
  56 + /// 统计类型(ACTIVE-活跃金三角业绩,INACTIVE-单人业绩)
  57 + /// </summary>
  58 + public string StatisticsType { get; set; }
  59 +
  60 + /// <summary>
  61 + /// 成员姓名(仅单人业绩时使用)
  62 + /// </summary>
  63 + public string MemberName { get; set; }
  64 + }
  65 +}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_event/LqEventEntity.cs
@@ -44,5 +44,11 @@ namespace NCC.Extend.Entitys.lq_event @@ -44,5 +44,11 @@ namespace NCC.Extend.Entitys.lq_event
44 /// </summary> 44 /// </summary>
45 [SugarColumn(ColumnName = "F_EventNumber")] 45 [SugarColumn(ColumnName = "F_EventNumber")]
46 public string EventNumber { get; set; } 46 public string EventNumber { get; set; }
  47 +
  48 + /// <summary>
  49 + /// 活动类型
  50 + /// </summary>
  51 + [SugarColumn(ColumnName = "F_EventType")]
  52 + public int EventType { get; set; }
47 } 53 }
48 } 54 }
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_jksyj/LqKdJksyjEntity.cs
1 -using NCC.Common.Const; 1 +using System;
  2 +using NCC.Common.Const;
2 using SqlSugar; 3 using SqlSugar;
3 -using System;  
4 4
5 namespace NCC.Extend.Entitys.lq_kd_jksyj 5 namespace NCC.Extend.Entitys.lq_kd_jksyj
6 { 6 {
@@ -16,55 +16,53 @@ namespace NCC.Extend.Entitys.lq_kd_jksyj @@ -16,55 +16,53 @@ namespace NCC.Extend.Entitys.lq_kd_jksyj
16 /// </summary> 16 /// </summary>
17 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)] 17 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18 public string Id { get; set; } 18 public string Id { get; set; }
19 - 19 +
20 /// <summary> 20 /// <summary>
21 /// 关联开单编号 21 /// 关联开单编号
22 /// </summary> 22 /// </summary>
23 - [SugarColumn(ColumnName = "glkdbh")] 23 + [SugarColumn(ColumnName = "glkdbh")]
24 public string Glkdbh { get; set; } 24 public string Glkdbh { get; set; }
25 - 25 +
26 /// <summary> 26 /// <summary>
27 /// 健康师 27 /// 健康师
28 /// </summary> 28 /// </summary>
29 - [SugarColumn(ColumnName = "jks")] 29 + [SugarColumn(ColumnName = "jks")]
30 public string Jks { get; set; } 30 public string Jks { get; set; }
31 - 31 +
32 /// <summary> 32 /// <summary>
33 /// 健康师姓名 33 /// 健康师姓名
34 /// </summary> 34 /// </summary>
35 - [SugarColumn(ColumnName = "jksxm")] 35 + [SugarColumn(ColumnName = "jksxm")]
36 public string Jksxm { get; set; } 36 public string Jksxm { get; set; }
37 - 37 +
38 /// <summary> 38 /// <summary>
39 /// 健康师账号 39 /// 健康师账号
40 /// </summary> 40 /// </summary>
41 - [SugarColumn(ColumnName = "jkszh")] 41 + [SugarColumn(ColumnName = "jkszh")]
42 public string Jkszh { get; set; } 42 public string Jkszh { get; set; }
43 - 43 +
44 /// <summary> 44 /// <summary>
45 /// 健康师业绩 45 /// 健康师业绩
46 /// </summary> 46 /// </summary>
47 - [SugarColumn(ColumnName = "jksyj")] 47 + [SugarColumn(ColumnName = "jksyj")]
48 public string Jksyj { get; set; } 48 public string Jksyj { get; set; }
49 - 49 +
50 /// <summary> 50 /// <summary>
51 /// 业绩时间 51 /// 业绩时间
52 /// </summary> 52 /// </summary>
53 - [SugarColumn(ColumnName = "yjsj")] 53 + [SugarColumn(ColumnName = "yjsj")]
54 public DateTime? Yjsj { get; set; } 54 public DateTime? Yjsj { get; set; }
55 55
56 /// <summary> 56 /// <summary>
57 /// 金三角id 57 /// 金三角id
58 /// </summary> 58 /// </summary>
59 - [SugarColumn(ColumnName = "jsj_id")] 59 + [SugarColumn(ColumnName = "jsj_id")]
60 public string Jsj_id { get; set; } 60 public string Jsj_id { get; set; }
61 61
62 -  
63 /// <summary> 62 /// <summary>
64 /// 开单品相id 63 /// 开单品相id
65 /// </summary> 64 /// </summary>
66 - [SugarColumn(ColumnName = "F_kdpxid")] 65 + [SugarColumn(ColumnName = "F_kdpxid")]
67 public string Kdpxid { get; set; } 66 public string Kdpxid { get; set; }
68 -  
69 } 67 }
70 -}  
71 \ No newline at end of file 68 \ No newline at end of file
  69 +}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_kd_kdjlb/LqKdKdjlbEntity.cs
@@ -184,5 +184,17 @@ namespace NCC.Extend.Entitys.lq_kd_kdjlb @@ -184,5 +184,17 @@ namespace NCC.Extend.Entitys.lq_kd_kdjlb
184 /// </summary> 184 /// </summary>
185 [SugarColumn(ColumnName = "F_FIleUrl")] 185 [SugarColumn(ColumnName = "F_FIleUrl")]
186 public string F_FIleUrl { get; set; } 186 public string F_FIleUrl { get; set; }
  187 +
  188 + /// <summary>
  189 + /// 创建时间
  190 + /// </summary>
  191 + [SugarColumn(ColumnName = "F_CreateTime")]
  192 + public DateTime CreateTime { get; set; }
  193 +
  194 + /// <summary>
  195 + /// 修改时间
  196 + /// </summary>
  197 + [SugarColumn(ColumnName = "F_UpdateTime")]
  198 + public DateTime UpdateTime { get; set; }
187 } 199 }
188 } 200 }
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Entity/lq_xh_hyhk/LqXhHyhkEntity.cs
1 -using NCC.Common.Const; 1 +using System;
  2 +using NCC.Common.Const;
2 using SqlSugar; 3 using SqlSugar;
3 -using System;  
4 4
5 namespace NCC.Extend.Entitys.lq_xh_hyhk 5 namespace NCC.Extend.Entitys.lq_xh_hyhk
6 { 6 {
@@ -16,96 +16,107 @@ namespace NCC.Extend.Entitys.lq_xh_hyhk @@ -16,96 +16,107 @@ namespace NCC.Extend.Entitys.lq_xh_hyhk
16 /// </summary> 16 /// </summary>
17 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)] 17 [SugarColumn(ColumnName = "F_Id", IsPrimaryKey = true)]
18 public string Id { get; set; } 18 public string Id { get; set; }
19 - 19 +
20 /// <summary> 20 /// <summary>
21 /// 门店 21 /// 门店
22 /// </summary> 22 /// </summary>
23 - [SugarColumn(ColumnName = "md")] 23 + [SugarColumn(ColumnName = "md")]
24 public string Md { get; set; } 24 public string Md { get; set; }
25 - 25 +
26 /// <summary> 26 /// <summary>
27 /// 门店编号 27 /// 门店编号
28 /// </summary> 28 /// </summary>
29 - [SugarColumn(ColumnName = "mdbh")] 29 + [SugarColumn(ColumnName = "mdbh")]
30 public string Mdbh { get; set; } 30 public string Mdbh { get; set; }
31 - 31 +
32 /// <summary> 32 /// <summary>
33 /// 门店名称 33 /// 门店名称
34 /// </summary> 34 /// </summary>
35 - [SugarColumn(ColumnName = "mdmc")] 35 + [SugarColumn(ColumnName = "mdmc")]
36 public string Mdmc { get; set; } 36 public string Mdmc { get; set; }
37 - 37 +
38 /// <summary> 38 /// <summary>
39 /// 会员 39 /// 会员
40 /// </summary> 40 /// </summary>
41 - [SugarColumn(ColumnName = "hy")] 41 + [SugarColumn(ColumnName = "hy")]
42 public string Hy { get; set; } 42 public string Hy { get; set; }
43 - 43 +
44 /// <summary> 44 /// <summary>
45 /// 会员账号 45 /// 会员账号
46 /// </summary> 46 /// </summary>
47 - [SugarColumn(ColumnName = "hyzh")] 47 + [SugarColumn(ColumnName = "hyzh")]
48 public string Hyzh { get; set; } 48 public string Hyzh { get; set; }
49 - 49 +
50 /// <summary> 50 /// <summary>
51 /// 会员名称 51 /// 会员名称
52 /// </summary> 52 /// </summary>
53 - [SugarColumn(ColumnName = "hymc")] 53 + [SugarColumn(ColumnName = "hymc")]
54 public string Hymc { get; set; } 54 public string Hymc { get; set; }
55 - 55 +
56 /// <summary> 56 /// <summary>
57 /// 顾客类型 57 /// 顾客类型
58 /// </summary> 58 /// </summary>
59 - [SugarColumn(ColumnName = "gklx")] 59 + [SugarColumn(ColumnName = "gklx")]
60 public string Gklx { get; set; } 60 public string Gklx { get; set; }
61 - 61 +
62 /// <summary> 62 /// <summary>
63 /// 消费金额 63 /// 消费金额
64 /// </summary> 64 /// </summary>
65 - [SugarColumn(ColumnName = "xfje")] 65 + [SugarColumn(ColumnName = "xfje")]
66 public string Xfje { get; set; } 66 public string Xfje { get; set; }
67 - 67 +
68 /// <summary> 68 /// <summary>
69 /// 手工费用 69 /// 手工费用
70 /// </summary> 70 /// </summary>
71 - [SugarColumn(ColumnName = "sgfy")] 71 + [SugarColumn(ColumnName = "sgfy")]
72 public string Sgfy { get; set; } 72 public string Sgfy { get; set; }
73 - 73 +
74 /// <summary> 74 /// <summary>
75 /// 是否有科技部 75 /// 是否有科技部
76 /// </summary> 76 /// </summary>
77 - [SugarColumn(ColumnName = "sfykjb")] 77 + [SugarColumn(ColumnName = "sfykjb")]
78 public string Sfykjb { get; set; } 78 public string Sfykjb { get; set; }
79 - 79 +
80 /// <summary> 80 /// <summary>
81 /// 健康师业绩 81 /// 健康师业绩
82 /// </summary> 82 /// </summary>
83 - [SugarColumn(ColumnName = "jksyj")] 83 + [SugarColumn(ColumnName = "jksyj")]
84 public string Jksyj { get; set; } 84 public string Jksyj { get; set; }
85 - 85 +
86 /// <summary> 86 /// <summary>
87 /// 科技部业绩 87 /// 科技部业绩
88 /// </summary> 88 /// </summary>
89 - [SugarColumn(ColumnName = "kjbyj")] 89 + [SugarColumn(ColumnName = "kjbyj")]
90 public string Kjbyj { get; set; } 90 public string Kjbyj { get; set; }
91 - 91 +
92 /// <summary> 92 /// <summary>
93 /// 品项信息 93 /// 品项信息
94 /// </summary> 94 /// </summary>
95 - [SugarColumn(ColumnName = "pxxx")] 95 + [SugarColumn(ColumnName = "pxxx")]
96 public string Pxxx { get; set; } 96 public string Pxxx { get; set; }
97 - 97 +
98 /// <summary> 98 /// <summary>
99 /// 耗卡时间 99 /// 耗卡时间
100 /// </summary> 100 /// </summary>
101 - [SugarColumn(ColumnName = "hksj")] 101 + [SugarColumn(ColumnName = "hksj")]
102 public DateTime? Hksj { get; set; } 102 public DateTime? Hksj { get; set; }
103 - 103 +
104 /// <summary> 104 /// <summary>
105 /// 操作人员 105 /// 操作人员
106 /// </summary> 106 /// </summary>
107 - [SugarColumn(ColumnName = "czry")] 107 + [SugarColumn(ColumnName = "czry")]
108 public string Czry { get; set; } 108 public string Czry { get; set; }
109 - 109 +
  110 + /// <summary>
  111 + /// 创建时间
  112 + /// </summary>
  113 + [SugarColumn(ColumnName = "F_CreateTime")]
  114 + public DateTime CreateTime { get; set; }
  115 +
  116 + /// <summary>
  117 + /// 修改时间
  118 + /// </summary>
  119 + [SugarColumn(ColumnName = "F_UpdateTime")]
  120 + public DateTime UpdateTime { get; set; }
110 } 121 }
111 -}  
112 \ No newline at end of file 122 \ No newline at end of file
  123 +}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/Enum/EventType.cs 0 → 100644
  1 +using System.ComponentModel;
  2 +
  3 +namespace NCC.Extend.Entitys.Enum
  4 +{
  5 + /// <summary>
  6 + /// 活动类型
  7 + /// </summary>
  8 + public enum EventType
  9 + {
  10 + /// <summary>
  11 + /// 日常拓客
  12 + /// </summary>
  13 + [Description("日常拓客")]
  14 + 日常拓客 = 1,
  15 +
  16 + /// <summary>
  17 + /// 全员拓客
  18 + /// </summary>
  19 + [Description("全员拓客")]
  20 + 全员拓客 = 3,
  21 + }
  22 +}
netcore/src/Modularity/Extend/NCC.Extend.Entitys/NCC.Extend.Entitys.csproj
1 <Project Sdk="Microsoft.NET.Sdk"> 1 <Project Sdk="Microsoft.NET.Sdk">
2 -  
3 <PropertyGroup> 2 <PropertyGroup>
4 <TargetFramework>net6.0</TargetFramework> 3 <TargetFramework>net6.0</TargetFramework>
5 </PropertyGroup> 4 </PropertyGroup>
6 -  
7 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"> 5 <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
8 <OutputPath /> 6 <OutputPath />
9 <DocumentationFile>bin\Release\NCC.Extend.Entitys.xml</DocumentationFile> 7 <DocumentationFile>bin\Release\NCC.Extend.Entitys.xml</DocumentationFile>
10 </PropertyGroup> 8 </PropertyGroup>
11 -  
12 - <ItemGroup>  
13 - <Compile Remove="Enum\**" />  
14 - <EmbeddedResource Remove="Enum\**" />  
15 - <None Remove="Enum\**" />  
16 - </ItemGroup>  
17 -  
18 <ItemGroup> 9 <ItemGroup>
19 <ProjectReference Include="..\..\..\Infrastructure\NCC.Expand.Thirdparty\NCC.Expand.Thirdparty.csproj" /> 10 <ProjectReference Include="..\..\..\Infrastructure\NCC.Expand.Thirdparty\NCC.Expand.Thirdparty.csproj" />
20 <ProjectReference Include="..\..\Common\NCC.Common\NCC.Common.csproj" /> 11 <ProjectReference Include="..\..\Common\NCC.Common\NCC.Common.csproj" />
21 </ItemGroup> 12 </ItemGroup>
22 -  
23 </Project> 13 </Project>
netcore/src/Modularity/Extend/NCC.Extend/LqEventService.cs
1 using System; 1 using System;
2 using System.Collections.Generic; 2 using System.Collections.Generic;
  3 +using System.ComponentModel;
3 using System.IO; 4 using System.IO;
4 using System.Linq; 5 using System.Linq;
  6 +using System.Reflection;
5 using System.Threading.Tasks; 7 using System.Threading.Tasks;
6 using Mapster; 8 using Mapster;
7 using Microsoft.AspNetCore.Http; 9 using Microsoft.AspNetCore.Http;
@@ -13,6 +15,7 @@ using NCC.Dependency; @@ -13,6 +15,7 @@ using NCC.Dependency;
13 using NCC.DynamicApiController; 15 using NCC.DynamicApiController;
14 using NCC.Extend.Entitys.Dto.LqEvent; 16 using NCC.Extend.Entitys.Dto.LqEvent;
15 using NCC.Extend.Entitys.Dto.LqEventUser; 17 using NCC.Extend.Entitys.Dto.LqEventUser;
  18 +using NCC.Extend.Entitys.Enum;
16 using NCC.Extend.Entitys.lq_event; 19 using NCC.Extend.Entitys.lq_event;
17 using NCC.Extend.Entitys.lq_eventuser; 20 using NCC.Extend.Entitys.lq_eventuser;
18 using NCC.Extend.Entitys.lq_mdxx; 21 using NCC.Extend.Entitys.lq_mdxx;
@@ -92,6 +95,7 @@ namespace NCC.Extend.LqEvent @@ -92,6 +95,7 @@ namespace NCC.Extend.LqEvent
92 eventCoordinator = e.EventCoordinator, 95 eventCoordinator = e.EventCoordinator,
93 eventNumber = e.EventNumber, 96 eventNumber = e.EventNumber,
94 memberCount = SqlFunc.Subqueryable<LqEventUserEntity>().Where(u => u.EventId == e.Id).Count(), 97 memberCount = SqlFunc.Subqueryable<LqEventUserEntity>().Where(u => u.EventId == e.Id).Count(),
  98 + eventType = e.EventType,
95 }) 99 })
96 .MergeTable() 100 .MergeTable()
97 .OrderBy(sidx + " " + sord) 101 .OrderBy(sidx + " " + sord)
@@ -203,6 +207,10 @@ namespace NCC.Extend.LqEvent @@ -203,6 +207,10 @@ namespace NCC.Extend.LqEvent
203 // 生成新的ID 207 // 生成新的ID
204 entity.Id = YitIdHelper.NextId().ToString(); 208 entity.Id = YitIdHelper.NextId().ToString();
205 209
  210 + // 手动设置时间字段,确保时分秒不丢失
  211 + entity.StartTime = input.StartTime;
  212 + entity.EndTime = input.EndTime;
  213 +
206 // 插入拓客活动 214 // 插入拓客活动
207 var isOk = await _db.Insertable(entity).ExecuteCommandAsync(); 215 var isOk = await _db.Insertable(entity).ExecuteCommandAsync();
208 if (!(isOk > 0)) 216 if (!(isOk > 0))
@@ -288,6 +296,10 @@ namespace NCC.Extend.LqEvent @@ -288,6 +296,10 @@ namespace NCC.Extend.LqEvent
288 var userInfo = await _userManager.GetUserInfo(); 296 var userInfo = await _userManager.GetUserInfo();
289 var entity = input.Adapt<LqEventEntity>(); 297 var entity = input.Adapt<LqEventEntity>();
290 298
  299 + // 手动设置时间字段,确保时分秒不丢失
  300 + entity.StartTime = input.StartTime;
  301 + entity.EndTime = input.EndTime;
  302 +
291 // 更新拓客活动 303 // 更新拓客活动
292 var isOk = await _db.Updateable(entity).ExecuteCommandAsync(); 304 var isOk = await _db.Updateable(entity).ExecuteCommandAsync();
293 if (!(isOk > 0)) 305 if (!(isOk > 0))
@@ -352,7 +364,7 @@ namespace NCC.Extend.LqEvent @@ -352,7 +364,7 @@ namespace NCC.Extend.LqEvent
352 public async Task Delete(string id) 364 public async Task Delete(string id)
353 { 365 {
354 // 删除拓客活动成员 366 // 删除拓客活动成员
355 - await _db.Deleteable<LqEventUserEntity>().Where(u => u.EventId == id.ToString()).ExecuteCommandAsync(); 367 + await _db.Deleteable<LqEventUserEntity>().Where(u => u.EventId == id).ExecuteCommandAsync();
356 368
357 // 删除拓客活动 369 // 删除拓客活动
358 var isOk = await _db.Deleteable<LqEventEntity>().Where(p => p.Id == id).ExecuteCommandAsync(); 370 var isOk = await _db.Deleteable<LqEventEntity>().Where(p => p.Id == id).ExecuteCommandAsync();
@@ -475,6 +487,7 @@ namespace NCC.Extend.LqEvent @@ -475,6 +487,7 @@ namespace NCC.Extend.LqEvent
475 EventTarget = eventUser.EventTarget, 487 EventTarget = eventUser.EventTarget,
476 CreationTime = eventUser.CreationTime, 488 CreationTime = eventUser.CreationTime,
477 CreationUser = eventUser.CreationUser, 489 CreationUser = eventUser.CreationUser,
  490 + StoreId = eventUser.StoreId,
478 } 491 }
479 ); 492 );
480 } 493 }
@@ -737,5 +750,40 @@ namespace NCC.Extend.LqEvent @@ -737,5 +750,40 @@ namespace NCC.Extend.LqEvent
737 } 750 }
738 751
739 #endregion 752 #endregion
  753 +
  754 + #region 获取拓客类型枚举内容
  755 +
  756 + /// <summary>
  757 + /// 获取拓客类型枚举内容
  758 + /// </summary>
  759 + /// <returns>拓客类型枚举列表</returns>
  760 + [HttpGet("event-types")]
  761 + public List<EventTypeEnumOutput> GetEventTypes()
  762 + {
  763 + var result = new List<EventTypeEnumOutput>();
  764 +
  765 + // 获取所有枚举值
  766 + var enumValues = Enum.GetValues<EventType>();
  767 +
  768 + foreach (var enumValue in enumValues)
  769 + {
  770 + // 获取枚举的Description特性
  771 + var field = enumValue.GetType().GetField(enumValue.ToString());
  772 + var descriptionAttribute = field?.GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault() as DescriptionAttribute;
  773 +
  774 + result.Add(
  775 + new EventTypeEnumOutput
  776 + {
  777 + Value = (int)enumValue,
  778 + Name = enumValue.ToString(),
  779 + Description = descriptionAttribute?.Description ?? enumValue.ToString(),
  780 + }
  781 + );
  782 + }
  783 +
  784 + return result;
  785 + }
  786 +
  787 + #endregion
740 } 788 }
741 } 789 }
netcore/src/Modularity/Extend/NCC.Extend/LqGzService.cs
1 -using NCC.Common.Core.Manager;  
2 -using NCC.Common.Enum;  
3 -using NCC.Common.Extension;  
4 -using NCC.Common.Filter;  
5 -using NCC.Dependency;  
6 -using NCC.DynamicApiController;  
7 -using NCC.FriendlyException;  
8 -using NCC.Extend.Interfaces.LqGz;  
9 -using Mapster;  
10 -using Microsoft.AspNetCore.Mvc;  
11 -using SqlSugar;  
12 -using System; 1 +using System;
13 using System.Collections.Generic; 2 using System.Collections.Generic;
14 using System.Linq; 3 using System.Linq;
15 using System.Threading.Tasks; 4 using System.Threading.Tasks;
16 -using NCC.Extend.Entitys.lq_gz;  
17 -using Yitter.IdGenerator; 5 +using Mapster;
  6 +using Microsoft.AspNetCore.Mvc;
  7 +using Microsoft.Extensions.Logging;
  8 +using NCC.ClayObject;
  9 +using NCC.Common.Configuration;
  10 +using NCC.Common.Core.Manager;
  11 +using NCC.Common.Enum;
  12 +using NCC.Common.Extension;
  13 +using NCC.Common.Filter;
18 using NCC.Common.Helper; 14 using NCC.Common.Helper;
19 -using NCC.JsonSerialization;  
20 using NCC.Common.Model.NPOI; 15 using NCC.Common.Model.NPOI;
21 -using NCC.Common.Configuration;  
22 using NCC.DataEncryption; 16 using NCC.DataEncryption;
23 -using NCC.ClayObject;  
24 -using NCC.Extend.Entitys.lq_kd_pxmx;  
25 -using NCC.Extend.Entitys.lq_xmzl; 17 +using NCC.Dependency;
  18 +using NCC.DynamicApiController;
  19 +using NCC.Extend.Entitys.Dto.LqGz;
  20 +using NCC.Extend.Entitys.lq_gz;
26 using NCC.Extend.Entitys.lq_jlmxb; 21 using NCC.Extend.Entitys.lq_jlmxb;
27 -using NCC.Extend.Entitys.lq_ycsd_jsj;  
28 -using NCC.Extend.Entitys.lq_mdxx;  
29 -using NCC.Extend.Entitys.lq_kd_kdjlb;  
30 using NCC.Extend.Entitys.lq_kd_jksyj; 22 using NCC.Extend.Entitys.lq_kd_jksyj;
  23 +using NCC.Extend.Entitys.lq_kd_kdjlb;
31 using NCC.Extend.Entitys.lq_kd_kjbsyj; 24 using NCC.Extend.Entitys.lq_kd_kjbsyj;
32 -using Microsoft.Extensions.Logging;  
33 -using NCC.Extend.Entitys.Dto.LqGz; 25 +using NCC.Extend.Entitys.lq_kd_pxmx;
  26 +using NCC.Extend.Entitys.lq_mdxx;
  27 +using NCC.Extend.Entitys.lq_xmzl;
  28 +using NCC.Extend.Entitys.lq_ycsd_jsj;
  29 +using NCC.Extend.Interfaces.LqGz;
  30 +using NCC.FriendlyException;
  31 +using NCC.JsonSerialization;
  32 +using SqlSugar;
  33 +using Yitter.IdGenerator;
34 34
35 namespace NCC.Extend.LqGz 35 namespace NCC.Extend.LqGz
36 { 36 {
37 /// <summary> 37 /// <summary>
38 /// 工资全字段服务 38 /// 工资全字段服务
39 /// </summary> 39 /// </summary>
40 - [ApiDescriptionSettings(Tag = "绿纤工资全字段服务",Name = "LqGz", Order = 200)] 40 + [ApiDescriptionSettings(Tag = "绿纤工资全字段服务", Name = "LqGz", Order = 200)]
41 [Route("api/Extend/[controller]")] 41 [Route("api/Extend/[controller]")]
42 public class LqGzService : ILqGzService, IDynamicApiController, ITransient 42 public class LqGzService : ILqGzService, IDynamicApiController, ITransient
43 { 43 {
@@ -49,12 +49,9 @@ namespace NCC.Extend.LqGz @@ -49,12 +49,9 @@ namespace NCC.Extend.LqGz
49 /// <summary> 49 /// <summary>
50 /// 初始化一个<see cref="LqGzService"/>类型的新实例 50 /// 初始化一个<see cref="LqGzService"/>类型的新实例
51 /// </summary> 51 /// </summary>
52 - public LqGzService(  
53 - ISqlSugarRepository<LqGzEntity> lqGzRepository,  
54 - IUserManager userManager,  
55 - ILogger<LqGzService> logger) 52 + public LqGzService(ISqlSugarRepository<LqGzEntity> lqGzRepository, IUserManager userManager, ILogger<LqGzService> logger)
56 { 53 {
57 - _lqGzRepository = lqGzRepository; 54 + _lqGzRepository = lqGzRepository;
58 _db = _lqGzRepository.Context; 55 _db = _lqGzRepository.Context;
59 _userManager = userManager; 56 _userManager = userManager;
60 _logger = logger; 57 _logger = logger;
@@ -74,10 +71,10 @@ namespace NCC.Extend.LqGz @@ -74,10 +71,10 @@ namespace NCC.Extend.LqGz
74 } 71 }
75 72
76 /// <summary> 73 /// <summary>
77 - /// 获取工资全字段列表  
78 - /// </summary>  
79 - /// <param name="input">请求参数</param>  
80 - /// <returns></returns> 74 + /// 获取工资全字段列表
  75 + /// </summary>
  76 + /// <param name="input">请求参数</param>
  77 + /// <returns></returns>
81 [HttpGet("")] 78 [HttpGet("")]
82 public async Task<dynamic> GetList([FromQuery] LqGzListQueryInput input) 79 public async Task<dynamic> GetList([FromQuery] LqGzListQueryInput input)
83 { 80 {
@@ -182,109 +179,112 @@ namespace NCC.Extend.LqGz @@ -182,109 +179,112 @@ namespace NCC.Extend.LqGz
182 .WhereIF(!string.IsNullOrEmpty(input.dzjfe), p => p.Dzjfe.Equals(input.dzjfe)) 179 .WhereIF(!string.IsNullOrEmpty(input.dzjfe), p => p.Dzjfe.Equals(input.dzjfe))
183 .WhereIF(!string.IsNullOrEmpty(input.bfsy), p => p.Bfsy.Equals(input.bfsy)) 180 .WhereIF(!string.IsNullOrEmpty(input.bfsy), p => p.Bfsy.Equals(input.bfsy))
184 .WhereIF(!string.IsNullOrEmpty(input.dyzfze), p => p.Dyzfze.Equals(input.dyzfze)) 181 .WhereIF(!string.IsNullOrEmpty(input.dyzfze), p => p.Dyzfze.Equals(input.dyzfze))
185 - .Select(it=> new LqGzListOutput 182 + .Select(it => new LqGzListOutput
186 { 183 {
187 id = it.Id, 184 id = it.Id,
188 - md=it.Md,  
189 - hsgw=it.Hsgw,  
190 - xm=it.Xm,  
191 - jsjzd=it.Jsjzd,  
192 - zyj=it.Zyj,  
193 - jcyj=it.Jcyj,  
194 - hzyj=it.Hzyj,  
195 - jlyj=it.Jlyj,  
196 - mdzyj=it.Mdzyj,  
197 - dwyj=it.Dwyj,  
198 - zb=it.Zb,  
199 - xkyj=it.Xkyj,  
200 - xkcjl=it.Xkcjl,  
201 - xktd=it.Xktd,  
202 - sdyj=it.Sdyj,  
203 - sdtd=it.Sdtd,  
204 - syyj=it.Syyj,  
205 - cellyj=it.Cellyj,  
206 - dxmybyj=it.Dxmybyj,  
207 - dxmebyj=it.Dxmebyj,  
208 - dyyj=it.Dyyj,  
209 - wysd=it.Wysd,  
210 - mdzc=it.Mdzc,  
211 - cpwl=it.Cpwl,  
212 - wdcb=it.Wdcb,  
213 - qthzcb=it.Qthzcb,  
214 - xmj=it.Xmj,  
215 - ml=it.Ml,  
216 - zjltce=it.Zjltce,  
217 - jltce=it.Jltce,  
218 - xh=it.Xh,  
219 - xms=it.Xms,  
220 - ddrt=it.Ddrt,  
221 - zdts=it.Zdts,  
222 - qjts=it.Qjts,  
223 - td=it.Td,  
224 - jcyjtc=it.Jcyjtc,  
225 - hzyjtc=it.Hzyjtc,  
226 - gwtc=it.Gwtc,  
227 - mdtqtc=it.Mdtqtc,  
228 - dztc1=it.Dztc1,  
229 - dzzrtc=it.Dzzrtc,  
230 - zrtc=it.Zrtc,  
231 - dztc2=it.Dztc2,  
232 - zjltc=it.Zjltc,  
233 - jltc=it.Jltc,  
234 - yjtc=it.Yjtc,  
235 - xhtc=it.Xhtc,  
236 - kjbzctc=it.Kjbzctc,  
237 - sytc=it.Sytc,  
238 - celltc=it.Celltc,  
239 - dxmbtc=it.Dxmbtc,  
240 - tchj=it.Tchj,  
241 - jksdx=it.Jksdx,  
242 - dzhudx=it.Dzhudx,  
243 - dzhangdx=it.Dzhangdx,  
244 - zrdx=it.Zrdx,  
245 - dzzrdx=it.Dzzrdx,  
246 - zjldx=it.Zjldx,  
247 - jldx=it.Jldx,  
248 - kjblsdx=it.Kjblsdx,  
249 - dxmbdx=it.Dxmbdx,  
250 - dxhj=it.Dxhj,  
251 - sg=it.Sg,  
252 - rtjl=it.Rtjl,  
253 - sjgl=it.Sjgl,  
254 - cb=it.Cb,  
255 - sx=it.Sx,  
256 - qq=it.Qq,  
257 - hsyfgz=it.Hsyfgz,  
258 - bd=it.Bd,  
259 - bdqj=it.Bdqj,  
260 - bddx=it.Bddx,  
261 - bdbc=it.Bdbc,  
262 - zzyfgz=it.Zzyfgz,  
263 - dypxbt=it.Dypxbt,  
264 - dyjtbt=it.Dyjtbt,  
265 - sypxbt=it.Sypxbt,  
266 - syjtbt=it.Syjtbt,  
267 - bthj=it.Bthj,  
268 - qk=it.Qk,  
269 - cd=it.Cd,  
270 - qj=it.Qj,  
271 - ksb=it.Ksb,  
272 - kcjl=it.Kcjl,  
273 - kzs=it.Kzs,  
274 - kxxq=it.Kxxq,  
275 - kgzf=it.Kgzf,  
276 - kkhj=it.Kkhj,  
277 - fjj=it.Fjj,  
278 - tsjyj=it.Tsjyj,  
279 - tzsyj=it.Tzsyj,  
280 - sfgz=it.Sfgz,  
281 - dysfff=it.Dysfff,  
282 - zfje=it.Zfje,  
283 - dzjfe=it.Dzjfe,  
284 - bfsy=it.Bfsy,  
285 - dyzfze=it.Dyzfze,  
286 - }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize);  
287 - return PageResult<LqGzListOutput>.SqlSugarPageResult(data); 185 + md = it.Md,
  186 + hsgw = it.Hsgw,
  187 + xm = it.Xm,
  188 + jsjzd = it.Jsjzd,
  189 + zyj = it.Zyj,
  190 + jcyj = it.Jcyj,
  191 + hzyj = it.Hzyj,
  192 + jlyj = it.Jlyj,
  193 + mdzyj = it.Mdzyj,
  194 + dwyj = it.Dwyj,
  195 + zb = it.Zb,
  196 + xkyj = it.Xkyj,
  197 + xkcjl = it.Xkcjl,
  198 + xktd = it.Xktd,
  199 + sdyj = it.Sdyj,
  200 + sdtd = it.Sdtd,
  201 + syyj = it.Syyj,
  202 + cellyj = it.Cellyj,
  203 + dxmybyj = it.Dxmybyj,
  204 + dxmebyj = it.Dxmebyj,
  205 + dyyj = it.Dyyj,
  206 + wysd = it.Wysd,
  207 + mdzc = it.Mdzc,
  208 + cpwl = it.Cpwl,
  209 + wdcb = it.Wdcb,
  210 + qthzcb = it.Qthzcb,
  211 + xmj = it.Xmj,
  212 + ml = it.Ml,
  213 + zjltce = it.Zjltce,
  214 + jltce = it.Jltce,
  215 + xh = it.Xh,
  216 + xms = it.Xms,
  217 + ddrt = it.Ddrt,
  218 + zdts = it.Zdts,
  219 + qjts = it.Qjts,
  220 + td = it.Td,
  221 + jcyjtc = it.Jcyjtc,
  222 + hzyjtc = it.Hzyjtc,
  223 + gwtc = it.Gwtc,
  224 + mdtqtc = it.Mdtqtc,
  225 + dztc1 = it.Dztc1,
  226 + dzzrtc = it.Dzzrtc,
  227 + zrtc = it.Zrtc,
  228 + dztc2 = it.Dztc2,
  229 + zjltc = it.Zjltc,
  230 + jltc = it.Jltc,
  231 + yjtc = it.Yjtc,
  232 + xhtc = it.Xhtc,
  233 + kjbzctc = it.Kjbzctc,
  234 + sytc = it.Sytc,
  235 + celltc = it.Celltc,
  236 + dxmbtc = it.Dxmbtc,
  237 + tchj = it.Tchj,
  238 + jksdx = it.Jksdx,
  239 + dzhudx = it.Dzhudx,
  240 + dzhangdx = it.Dzhangdx,
  241 + zrdx = it.Zrdx,
  242 + dzzrdx = it.Dzzrdx,
  243 + zjldx = it.Zjldx,
  244 + jldx = it.Jldx,
  245 + kjblsdx = it.Kjblsdx,
  246 + dxmbdx = it.Dxmbdx,
  247 + dxhj = it.Dxhj,
  248 + sg = it.Sg,
  249 + rtjl = it.Rtjl,
  250 + sjgl = it.Sjgl,
  251 + cb = it.Cb,
  252 + sx = it.Sx,
  253 + qq = it.Qq,
  254 + hsyfgz = it.Hsyfgz,
  255 + bd = it.Bd,
  256 + bdqj = it.Bdqj,
  257 + bddx = it.Bddx,
  258 + bdbc = it.Bdbc,
  259 + zzyfgz = it.Zzyfgz,
  260 + dypxbt = it.Dypxbt,
  261 + dyjtbt = it.Dyjtbt,
  262 + sypxbt = it.Sypxbt,
  263 + syjtbt = it.Syjtbt,
  264 + bthj = it.Bthj,
  265 + qk = it.Qk,
  266 + cd = it.Cd,
  267 + qj = it.Qj,
  268 + ksb = it.Ksb,
  269 + kcjl = it.Kcjl,
  270 + kzs = it.Kzs,
  271 + kxxq = it.Kxxq,
  272 + kgzf = it.Kgzf,
  273 + kkhj = it.Kkhj,
  274 + fjj = it.Fjj,
  275 + tsjyj = it.Tsjyj,
  276 + tzsyj = it.Tzsyj,
  277 + sfgz = it.Sfgz,
  278 + dysfff = it.Dysfff,
  279 + zfje = it.Zfje,
  280 + dzjfe = it.Dzjfe,
  281 + bfsy = it.Bfsy,
  282 + dyzfze = it.Dyzfze,
  283 + })
  284 + .MergeTable()
  285 + .OrderBy(sidx + " " + input.sort)
  286 + .ToPagedListAsync(input.currentPage, input.pageSize);
  287 + return PageResult<LqGzListOutput>.SqlSugarPageResult(data);
288 } 288 }
289 289
290 /// <summary> 290 /// <summary>
@@ -299,14 +299,15 @@ namespace NCC.Extend.LqGz @@ -299,14 +299,15 @@ namespace NCC.Extend.LqGz
299 var entity = input.Adapt<LqGzEntity>(); 299 var entity = input.Adapt<LqGzEntity>();
300 entity.Id = YitIdHelper.NextId().ToString(); 300 entity.Id = YitIdHelper.NextId().ToString();
301 var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync(); 301 var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
302 - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000); 302 + if (!(isOk > 0))
  303 + throw NCCException.Oh(ErrorCode.COM1000);
303 } 304 }
304 305
305 /// <summary> 306 /// <summary>
306 - /// 获取工资全字段无分页列表  
307 - /// </summary>  
308 - /// <param name="input">请求参数</param>  
309 - /// <returns></returns> 307 + /// 获取工资全字段无分页列表
  308 + /// </summary>
  309 + /// <param name="input">请求参数</param>
  310 + /// <returns></returns>
310 [NonAction] 311 [NonAction]
311 public async Task<dynamic> GetNoPagingList([FromQuery] LqGzListQueryInput input) 312 public async Task<dynamic> GetNoPagingList([FromQuery] LqGzListQueryInput input)
312 { 313 {
@@ -411,116 +412,119 @@ namespace NCC.Extend.LqGz @@ -411,116 +412,119 @@ namespace NCC.Extend.LqGz
411 .WhereIF(!string.IsNullOrEmpty(input.dzjfe), p => p.Dzjfe.Equals(input.dzjfe)) 412 .WhereIF(!string.IsNullOrEmpty(input.dzjfe), p => p.Dzjfe.Equals(input.dzjfe))
412 .WhereIF(!string.IsNullOrEmpty(input.bfsy), p => p.Bfsy.Equals(input.bfsy)) 413 .WhereIF(!string.IsNullOrEmpty(input.bfsy), p => p.Bfsy.Equals(input.bfsy))
413 .WhereIF(!string.IsNullOrEmpty(input.dyzfze), p => p.Dyzfze.Equals(input.dyzfze)) 414 .WhereIF(!string.IsNullOrEmpty(input.dyzfze), p => p.Dyzfze.Equals(input.dyzfze))
414 - .Select(it=> new LqGzListOutput 415 + .Select(it => new LqGzListOutput
415 { 416 {
416 id = it.Id, 417 id = it.Id,
417 - md=it.Md,  
418 - hsgw=it.Hsgw,  
419 - xm=it.Xm,  
420 - jsjzd=it.Jsjzd,  
421 - zyj=it.Zyj,  
422 - jcyj=it.Jcyj,  
423 - hzyj=it.Hzyj,  
424 - jlyj=it.Jlyj,  
425 - mdzyj=it.Mdzyj,  
426 - dwyj=it.Dwyj,  
427 - zb=it.Zb,  
428 - xkyj=it.Xkyj,  
429 - xkcjl=it.Xkcjl,  
430 - xktd=it.Xktd,  
431 - sdyj=it.Sdyj,  
432 - sdtd=it.Sdtd,  
433 - syyj=it.Syyj,  
434 - cellyj=it.Cellyj,  
435 - dxmybyj=it.Dxmybyj,  
436 - dxmebyj=it.Dxmebyj,  
437 - dyyj=it.Dyyj,  
438 - wysd=it.Wysd,  
439 - mdzc=it.Mdzc,  
440 - cpwl=it.Cpwl,  
441 - wdcb=it.Wdcb,  
442 - qthzcb=it.Qthzcb,  
443 - xmj=it.Xmj,  
444 - ml=it.Ml,  
445 - zjltce=it.Zjltce,  
446 - jltce=it.Jltce,  
447 - xh=it.Xh,  
448 - xms=it.Xms,  
449 - ddrt=it.Ddrt,  
450 - zdts=it.Zdts,  
451 - qjts=it.Qjts,  
452 - td=it.Td,  
453 - jcyjtc=it.Jcyjtc,  
454 - hzyjtc=it.Hzyjtc,  
455 - gwtc=it.Gwtc,  
456 - mdtqtc=it.Mdtqtc,  
457 - dztc1=it.Dztc1,  
458 - dzzrtc=it.Dzzrtc,  
459 - zrtc=it.Zrtc,  
460 - dztc2=it.Dztc2,  
461 - zjltc=it.Zjltc,  
462 - jltc=it.Jltc,  
463 - yjtc=it.Yjtc,  
464 - xhtc=it.Xhtc,  
465 - kjbzctc=it.Kjbzctc,  
466 - sytc=it.Sytc,  
467 - celltc=it.Celltc,  
468 - dxmbtc=it.Dxmbtc,  
469 - tchj=it.Tchj,  
470 - jksdx=it.Jksdx,  
471 - dzhudx=it.Dzhudx,  
472 - dzhangdx=it.Dzhangdx,  
473 - zrdx=it.Zrdx,  
474 - dzzrdx=it.Dzzrdx,  
475 - zjldx=it.Zjldx,  
476 - jldx=it.Jldx,  
477 - kjblsdx=it.Kjblsdx,  
478 - dxmbdx=it.Dxmbdx,  
479 - dxhj=it.Dxhj,  
480 - sg=it.Sg,  
481 - rtjl=it.Rtjl,  
482 - sjgl=it.Sjgl,  
483 - cb=it.Cb,  
484 - sx=it.Sx,  
485 - qq=it.Qq,  
486 - hsyfgz=it.Hsyfgz,  
487 - bd=it.Bd,  
488 - bdqj=it.Bdqj,  
489 - bddx=it.Bddx,  
490 - bdbc=it.Bdbc,  
491 - zzyfgz=it.Zzyfgz,  
492 - dypxbt=it.Dypxbt,  
493 - dyjtbt=it.Dyjtbt,  
494 - sypxbt=it.Sypxbt,  
495 - syjtbt=it.Syjtbt,  
496 - bthj=it.Bthj,  
497 - qk=it.Qk,  
498 - cd=it.Cd,  
499 - qj=it.Qj,  
500 - ksb=it.Ksb,  
501 - kcjl=it.Kcjl,  
502 - kzs=it.Kzs,  
503 - kxxq=it.Kxxq,  
504 - kgzf=it.Kgzf,  
505 - kkhj=it.Kkhj,  
506 - fjj=it.Fjj,  
507 - tsjyj=it.Tsjyj,  
508 - tzsyj=it.Tzsyj,  
509 - sfgz=it.Sfgz,  
510 - dysfff=it.Dysfff,  
511 - zfje=it.Zfje,  
512 - dzjfe=it.Dzjfe,  
513 - bfsy=it.Bfsy,  
514 - dyzfze=it.Dyzfze,  
515 - }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync();  
516 - return data; 418 + md = it.Md,
  419 + hsgw = it.Hsgw,
  420 + xm = it.Xm,
  421 + jsjzd = it.Jsjzd,
  422 + zyj = it.Zyj,
  423 + jcyj = it.Jcyj,
  424 + hzyj = it.Hzyj,
  425 + jlyj = it.Jlyj,
  426 + mdzyj = it.Mdzyj,
  427 + dwyj = it.Dwyj,
  428 + zb = it.Zb,
  429 + xkyj = it.Xkyj,
  430 + xkcjl = it.Xkcjl,
  431 + xktd = it.Xktd,
  432 + sdyj = it.Sdyj,
  433 + sdtd = it.Sdtd,
  434 + syyj = it.Syyj,
  435 + cellyj = it.Cellyj,
  436 + dxmybyj = it.Dxmybyj,
  437 + dxmebyj = it.Dxmebyj,
  438 + dyyj = it.Dyyj,
  439 + wysd = it.Wysd,
  440 + mdzc = it.Mdzc,
  441 + cpwl = it.Cpwl,
  442 + wdcb = it.Wdcb,
  443 + qthzcb = it.Qthzcb,
  444 + xmj = it.Xmj,
  445 + ml = it.Ml,
  446 + zjltce = it.Zjltce,
  447 + jltce = it.Jltce,
  448 + xh = it.Xh,
  449 + xms = it.Xms,
  450 + ddrt = it.Ddrt,
  451 + zdts = it.Zdts,
  452 + qjts = it.Qjts,
  453 + td = it.Td,
  454 + jcyjtc = it.Jcyjtc,
  455 + hzyjtc = it.Hzyjtc,
  456 + gwtc = it.Gwtc,
  457 + mdtqtc = it.Mdtqtc,
  458 + dztc1 = it.Dztc1,
  459 + dzzrtc = it.Dzzrtc,
  460 + zrtc = it.Zrtc,
  461 + dztc2 = it.Dztc2,
  462 + zjltc = it.Zjltc,
  463 + jltc = it.Jltc,
  464 + yjtc = it.Yjtc,
  465 + xhtc = it.Xhtc,
  466 + kjbzctc = it.Kjbzctc,
  467 + sytc = it.Sytc,
  468 + celltc = it.Celltc,
  469 + dxmbtc = it.Dxmbtc,
  470 + tchj = it.Tchj,
  471 + jksdx = it.Jksdx,
  472 + dzhudx = it.Dzhudx,
  473 + dzhangdx = it.Dzhangdx,
  474 + zrdx = it.Zrdx,
  475 + dzzrdx = it.Dzzrdx,
  476 + zjldx = it.Zjldx,
  477 + jldx = it.Jldx,
  478 + kjblsdx = it.Kjblsdx,
  479 + dxmbdx = it.Dxmbdx,
  480 + dxhj = it.Dxhj,
  481 + sg = it.Sg,
  482 + rtjl = it.Rtjl,
  483 + sjgl = it.Sjgl,
  484 + cb = it.Cb,
  485 + sx = it.Sx,
  486 + qq = it.Qq,
  487 + hsyfgz = it.Hsyfgz,
  488 + bd = it.Bd,
  489 + bdqj = it.Bdqj,
  490 + bddx = it.Bddx,
  491 + bdbc = it.Bdbc,
  492 + zzyfgz = it.Zzyfgz,
  493 + dypxbt = it.Dypxbt,
  494 + dyjtbt = it.Dyjtbt,
  495 + sypxbt = it.Sypxbt,
  496 + syjtbt = it.Syjtbt,
  497 + bthj = it.Bthj,
  498 + qk = it.Qk,
  499 + cd = it.Cd,
  500 + qj = it.Qj,
  501 + ksb = it.Ksb,
  502 + kcjl = it.Kcjl,
  503 + kzs = it.Kzs,
  504 + kxxq = it.Kxxq,
  505 + kgzf = it.Kgzf,
  506 + kkhj = it.Kkhj,
  507 + fjj = it.Fjj,
  508 + tsjyj = it.Tsjyj,
  509 + tzsyj = it.Tzsyj,
  510 + sfgz = it.Sfgz,
  511 + dysfff = it.Dysfff,
  512 + zfje = it.Zfje,
  513 + dzjfe = it.Dzjfe,
  514 + bfsy = it.Bfsy,
  515 + dyzfze = it.Dyzfze,
  516 + })
  517 + .MergeTable()
  518 + .OrderBy(sidx + " " + input.sort)
  519 + .ToListAsync();
  520 + return data;
517 } 521 }
518 522
519 /// <summary> 523 /// <summary>
520 - /// 导出工资全字段  
521 - /// </summary>  
522 - /// <param name="input">请求参数</param>  
523 - /// <returns></returns> 524 + /// 导出工资全字段
  525 + /// </summary>
  526 + /// <param name="input">请求参数</param>
  527 + /// <returns></returns>
524 [HttpGet("Actions/Export")] 528 [HttpGet("Actions/Export")]
525 public async Task<dynamic> Export([FromQuery] LqGzListQueryInput input) 529 public async Task<dynamic> Export([FromQuery] LqGzListQueryInput input)
526 { 530 {
@@ -535,7 +539,8 @@ namespace NCC.Extend.LqGz @@ -535,7 +539,8 @@ namespace NCC.Extend.LqGz
535 { 539 {
536 exportData = await this.GetNoPagingList(input); 540 exportData = await this.GetNoPagingList(input);
537 } 541 }
538 - List<ParamsModel> paramList = "[{\"value\":\"主键\",\"field\":\"id\"},{\"value\":\"门店\",\"field\":\"md\"},{\"value\":\"核算岗位\",\"field\":\"hsgw\"},{\"value\":\"姓名\",\"field\":\"xm\"},{\"value\":\"金山角战队\",\"field\":\"jsjzd\"},{\"value\":\"基础业绩\",\"field\":\"jcyj\"},{\"value\":\"合作业绩\",\"field\":\"hzyj\"},{\"value\":\"奖励业绩\",\"field\":\"jlyj\"},{\"value\":\"门店总业绩\",\"field\":\"mdzyj\"},{\"value\":\"队伍业绩\",\"field\":\"dwyj\"},{\"value\":\"占比\",\"field\":\"zb\"},{\"value\":\"新客业绩\",\"field\":\"xkyj\"},{\"value\":\"新客成交率\",\"field\":\"xkcjl\"},{\"value\":\"新客提点\",\"field\":\"xktd\"},{\"value\":\"升单业绩\",\"field\":\"sdyj\"},{\"value\":\"升单提点\",\"field\":\"sdtd\"},{\"value\":\"溯源业绩\",\"field\":\"syyj\"},{\"value\":\"cell业绩\",\"field\":\"cellyj\"},{\"value\":\"项目一部业绩\",\"field\":\"dxmybyj\"},{\"value\":\"项目二部业绩\",\"field\":\"dxmebyj\"},{\"value\":\"当月业绩\",\"field\":\"dyyj\"},{\"value\":\"物业水电\",\"field\":\"wysd\"},{\"value\":\"门店支出\",\"field\":\"mdzc\"},{\"value\":\"产品物料\",\"field\":\"cpwl\"},{\"value\":\"微雕成本\",\"field\":\"wdcb\"},{\"value\":\"其它合作成本\",\"field\":\"qthzcb\"},{\"value\":\"洗毛巾\",\"field\":\"xmj\"},{\"value\":\"毛利\",\"field\":\"ml\"},{\"value\":\"总经理提成额\",\"field\":\"zjltce\"},{\"value\":\"经理提成额\",\"field\":\"jltce\"},{\"value\":\"消耗\",\"field\":\"xh\"},{\"value\":\"项目数\",\"field\":\"xms\"},{\"value\":\"到店人头\",\"field\":\"ddrt\"},{\"value\":\"在店天数\",\"field\":\"zdts\"},{\"value\":\"请假天数\",\"field\":\"qjts\"},{\"value\":\"提点\",\"field\":\"td\"},{\"value\":\"基础业绩提成\",\"field\":\"jcyjtc\"},{\"value\":\"合作业绩提成\",\"field\":\"hzyjtc\"},{\"value\":\"顾问提成\",\"field\":\"gwtc\"},{\"value\":\"门店T区提成\",\"field\":\"mdtqtc\"},{\"value\":\"店助提成\",\"field\":\"dztc1\"},{\"value\":\"店助主任提成\",\"field\":\"dzzrtc\"},{\"value\":\"主任提成\",\"field\":\"zrtc\"},{\"value\":\"店长提成\",\"field\":\"dztc2\"},{\"value\":\"总经理提成\",\"field\":\"zjltc\"},{\"value\":\"经理提成\",\"field\":\"jltc\"},{\"value\":\"业绩提成\",\"field\":\"yjtc\"},{\"value\":\"消耗提成\",\"field\":\"xhtc\"},{\"value\":\"科技部组长提成\",\"field\":\"kjbzctc\"},{\"value\":\"溯源提成\",\"field\":\"sytc\"},{\"value\":\"cell提成\",\"field\":\"celltc\"},{\"value\":\"大项目部提成\",\"field\":\"dxmbtc\"},{\"value\":\"提成合计\",\"field\":\"tchj\"},{\"value\":\"健康师底薪\",\"field\":\"jksdx\"},{\"value\":\"店助底薪\",\"field\":\"dzhudx\"},{\"value\":\"店长底薪\",\"field\":\"dzhangdx\"},{\"value\":\"主任底薪\",\"field\":\"zrdx\"},{\"value\":\"店助主任底薪\",\"field\":\"dzzrdx\"},{\"value\":\"总经理底薪\",\"field\":\"zjldx\"},{\"value\":\"经理底薪\",\"field\":\"jldx\"},{\"value\":\"科技部底薪\",\"field\":\"kjblsdx\"},{\"value\":\"大项目部底薪\",\"field\":\"dxmbdx\"},{\"value\":\"底薪合计\",\"field\":\"dxhj\"},{\"value\":\"手工\",\"field\":\"sg\"},{\"value\":\"人头奖励\",\"field\":\"rtjl\"},{\"value\":\"手机管理\",\"field\":\"sjgl\"},{\"value\":\"车补\",\"field\":\"cb\"},{\"value\":\"少休\",\"field\":\"sx\"},{\"value\":\"全勤\",\"field\":\"qq\"},{\"value\":\"核算应发工资\",\"field\":\"hsyfgz\"},{\"value\":\"保底\",\"field\":\"bd\"},{\"value\":\"保底请假\",\"field\":\"bdqj\"},{\"value\":\"保底底薪\",\"field\":\"bddx\"},{\"value\":\"保底补差\",\"field\":\"bdbc\"},{\"value\":\"最终应发工资\",\"field\":\"zzyfgz\"},{\"value\":\"当月培训补贴\",\"field\":\"dypxbt\"},{\"value\":\"当月交通补贴\",\"field\":\"dyjtbt\"},{\"value\":\"上月培训补贴\",\"field\":\"sypxbt\"},{\"value\":\"上月交通补贴\",\"field\":\"syjtbt\"},{\"value\":\"补贴合计\",\"field\":\"bthj\"},{\"value\":\"缺卡\",\"field\":\"qk\"},{\"value\":\"迟到\",\"field\":\"cd\"},{\"value\":\"请假\",\"field\":\"qj\"},{\"value\":\"扣社保\",\"field\":\"ksb\"},{\"value\":\"扣除奖励\",\"field\":\"kcjl\"},{\"value\":\"扣住宿\",\"field\":\"kzs\"},{\"value\":\"扣学习期\",\"field\":\"kxxq\"},{\"value\":\"扣工作服\",\"field\":\"kgzf\"},{\"value\":\"扣款合计\",\"field\":\"kkhj\"},{\"value\":\"发奖金\",\"field\":\"fjj\"},{\"value\":\"退手机押金\",\"field\":\"tsjyj\"},{\"value\":\"退住宿押金\",\"field\":\"tzsyj\"},{\"value\":\"实发工资\",\"field\":\"sfgz\"},{\"value\":\"当月是否发放\",\"field\":\"dysfff\"},{\"value\":\"支付金额\",\"field\":\"zfje\"},{\"value\":\"待支付金额\",\"field\":\"dzjfe\"},{\"value\":\"补发上月\",\"field\":\"bfsy\"},{\"value\":\"当月支付总额\",\"field\":\"dyzfze\"},{\"value\":\"总业绩\",\"field\":\"zyj\"},]".ToList<ParamsModel>(); 542 + List<ParamsModel> paramList =
  543 + "[{\"value\":\"主键\",\"field\":\"id\"},{\"value\":\"门店\",\"field\":\"md\"},{\"value\":\"核算岗位\",\"field\":\"hsgw\"},{\"value\":\"姓名\",\"field\":\"xm\"},{\"value\":\"金山角战队\",\"field\":\"jsjzd\"},{\"value\":\"基础业绩\",\"field\":\"jcyj\"},{\"value\":\"合作业绩\",\"field\":\"hzyj\"},{\"value\":\"奖励业绩\",\"field\":\"jlyj\"},{\"value\":\"门店总业绩\",\"field\":\"mdzyj\"},{\"value\":\"队伍业绩\",\"field\":\"dwyj\"},{\"value\":\"占比\",\"field\":\"zb\"},{\"value\":\"新客业绩\",\"field\":\"xkyj\"},{\"value\":\"新客成交率\",\"field\":\"xkcjl\"},{\"value\":\"新客提点\",\"field\":\"xktd\"},{\"value\":\"升单业绩\",\"field\":\"sdyj\"},{\"value\":\"升单提点\",\"field\":\"sdtd\"},{\"value\":\"溯源业绩\",\"field\":\"syyj\"},{\"value\":\"cell业绩\",\"field\":\"cellyj\"},{\"value\":\"项目一部业绩\",\"field\":\"dxmybyj\"},{\"value\":\"项目二部业绩\",\"field\":\"dxmebyj\"},{\"value\":\"当月业绩\",\"field\":\"dyyj\"},{\"value\":\"物业水电\",\"field\":\"wysd\"},{\"value\":\"门店支出\",\"field\":\"mdzc\"},{\"value\":\"产品物料\",\"field\":\"cpwl\"},{\"value\":\"微雕成本\",\"field\":\"wdcb\"},{\"value\":\"其它合作成本\",\"field\":\"qthzcb\"},{\"value\":\"洗毛巾\",\"field\":\"xmj\"},{\"value\":\"毛利\",\"field\":\"ml\"},{\"value\":\"总经理提成额\",\"field\":\"zjltce\"},{\"value\":\"经理提成额\",\"field\":\"jltce\"},{\"value\":\"消耗\",\"field\":\"xh\"},{\"value\":\"项目数\",\"field\":\"xms\"},{\"value\":\"到店人头\",\"field\":\"ddrt\"},{\"value\":\"在店天数\",\"field\":\"zdts\"},{\"value\":\"请假天数\",\"field\":\"qjts\"},{\"value\":\"提点\",\"field\":\"td\"},{\"value\":\"基础业绩提成\",\"field\":\"jcyjtc\"},{\"value\":\"合作业绩提成\",\"field\":\"hzyjtc\"},{\"value\":\"顾问提成\",\"field\":\"gwtc\"},{\"value\":\"门店T区提成\",\"field\":\"mdtqtc\"},{\"value\":\"店助提成\",\"field\":\"dztc1\"},{\"value\":\"店助主任提成\",\"field\":\"dzzrtc\"},{\"value\":\"主任提成\",\"field\":\"zrtc\"},{\"value\":\"店长提成\",\"field\":\"dztc2\"},{\"value\":\"总经理提成\",\"field\":\"zjltc\"},{\"value\":\"经理提成\",\"field\":\"jltc\"},{\"value\":\"业绩提成\",\"field\":\"yjtc\"},{\"value\":\"消耗提成\",\"field\":\"xhtc\"},{\"value\":\"科技部组长提成\",\"field\":\"kjbzctc\"},{\"value\":\"溯源提成\",\"field\":\"sytc\"},{\"value\":\"cell提成\",\"field\":\"celltc\"},{\"value\":\"大项目部提成\",\"field\":\"dxmbtc\"},{\"value\":\"提成合计\",\"field\":\"tchj\"},{\"value\":\"健康师底薪\",\"field\":\"jksdx\"},{\"value\":\"店助底薪\",\"field\":\"dzhudx\"},{\"value\":\"店长底薪\",\"field\":\"dzhangdx\"},{\"value\":\"主任底薪\",\"field\":\"zrdx\"},{\"value\":\"店助主任底薪\",\"field\":\"dzzrdx\"},{\"value\":\"总经理底薪\",\"field\":\"zjldx\"},{\"value\":\"经理底薪\",\"field\":\"jldx\"},{\"value\":\"科技部底薪\",\"field\":\"kjblsdx\"},{\"value\":\"大项目部底薪\",\"field\":\"dxmbdx\"},{\"value\":\"底薪合计\",\"field\":\"dxhj\"},{\"value\":\"手工\",\"field\":\"sg\"},{\"value\":\"人头奖励\",\"field\":\"rtjl\"},{\"value\":\"手机管理\",\"field\":\"sjgl\"},{\"value\":\"车补\",\"field\":\"cb\"},{\"value\":\"少休\",\"field\":\"sx\"},{\"value\":\"全勤\",\"field\":\"qq\"},{\"value\":\"核算应发工资\",\"field\":\"hsyfgz\"},{\"value\":\"保底\",\"field\":\"bd\"},{\"value\":\"保底请假\",\"field\":\"bdqj\"},{\"value\":\"保底底薪\",\"field\":\"bddx\"},{\"value\":\"保底补差\",\"field\":\"bdbc\"},{\"value\":\"最终应发工资\",\"field\":\"zzyfgz\"},{\"value\":\"当月培训补贴\",\"field\":\"dypxbt\"},{\"value\":\"当月交通补贴\",\"field\":\"dyjtbt\"},{\"value\":\"上月培训补贴\",\"field\":\"sypxbt\"},{\"value\":\"上月交通补贴\",\"field\":\"syjtbt\"},{\"value\":\"补贴合计\",\"field\":\"bthj\"},{\"value\":\"缺卡\",\"field\":\"qk\"},{\"value\":\"迟到\",\"field\":\"cd\"},{\"value\":\"请假\",\"field\":\"qj\"},{\"value\":\"扣社保\",\"field\":\"ksb\"},{\"value\":\"扣除奖励\",\"field\":\"kcjl\"},{\"value\":\"扣住宿\",\"field\":\"kzs\"},{\"value\":\"扣学习期\",\"field\":\"kxxq\"},{\"value\":\"扣工作服\",\"field\":\"kgzf\"},{\"value\":\"扣款合计\",\"field\":\"kkhj\"},{\"value\":\"发奖金\",\"field\":\"fjj\"},{\"value\":\"退手机押金\",\"field\":\"tsjyj\"},{\"value\":\"退住宿押金\",\"field\":\"tzsyj\"},{\"value\":\"实发工资\",\"field\":\"sfgz\"},{\"value\":\"当月是否发放\",\"field\":\"dysfff\"},{\"value\":\"支付金额\",\"field\":\"zfje\"},{\"value\":\"待支付金额\",\"field\":\"dzjfe\"},{\"value\":\"补发上月\",\"field\":\"bfsy\"},{\"value\":\"当月支付总额\",\"field\":\"dyzfze\"},{\"value\":\"总业绩\",\"field\":\"zyj\"},]".ToList<ParamsModel>();
539 ExcelConfig excelconfig = new ExcelConfig(); 544 ExcelConfig excelconfig = new ExcelConfig();
540 excelconfig.FileName = "工资全字段.xls"; 545 excelconfig.FileName = "工资全字段.xls";
541 excelconfig.HeadFont = "微软雅黑"; 546 excelconfig.HeadFont = "微软雅黑";
@@ -554,11 +559,7 @@ namespace NCC.Extend.LqGz @@ -554,11 +559,7 @@ namespace NCC.Extend.LqGz
554 var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName; 559 var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
555 ExcelExportHelper<LqGzListOutput>.Export(exportData, excelconfig, addPath); 560 ExcelExportHelper<LqGzListOutput>.Export(exportData, excelconfig, addPath);
556 var fileName = _userManager.UserId + "|" + addPath + "|xls"; 561 var fileName = _userManager.UserId + "|" + addPath + "|xls";
557 - var output = new  
558 - {  
559 - name = excelconfig.FileName,  
560 - url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC")  
561 - }; 562 + var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
562 return output; 563 return output;
563 } 564 }
564 565
@@ -578,7 +579,7 @@ namespace NCC.Extend.LqGz @@ -578,7 +579,7 @@ namespace NCC.Extend.LqGz
578 //开启事务 579 //开启事务
579 _db.BeginTran(); 580 _db.BeginTran();
580 //批量删除工资全字段 581 //批量删除工资全字段
581 - await _db.Deleteable<LqGzEntity>().In(d => d.Id,ids).ExecuteCommandAsync(); 582 + await _db.Deleteable<LqGzEntity>().In(d => d.Id, ids).ExecuteCommandAsync();
582 //关闭事务 583 //关闭事务
583 _db.CommitTran(); 584 _db.CommitTran();
584 } 585 }
@@ -602,7 +603,8 @@ namespace NCC.Extend.LqGz @@ -602,7 +603,8 @@ namespace NCC.Extend.LqGz
602 { 603 {
603 var entity = input.Adapt<LqGzEntity>(); 604 var entity = input.Adapt<LqGzEntity>();
604 var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); 605 var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
605 - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001); 606 + if (!(isOk > 0))
  607 + throw NCCException.Oh(ErrorCode.COM1001);
606 } 608 }
607 609
608 /// <summary> 610 /// <summary>
@@ -615,7 +617,8 @@ namespace NCC.Extend.LqGz @@ -615,7 +617,8 @@ namespace NCC.Extend.LqGz
615 var entity = await _db.Queryable<LqGzEntity>().FirstAsync(p => p.Id == id); 617 var entity = await _db.Queryable<LqGzEntity>().FirstAsync(p => p.Id == id);
616 _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005); 618 _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
617 var isOk = await _db.Deleteable<LqGzEntity>().Where(d => d.Id == id).ExecuteCommandAsync(); 619 var isOk = await _db.Deleteable<LqGzEntity>().Where(d => d.Id == id).ExecuteCommandAsync();
618 - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1002); 620 + if (!(isOk > 0))
  621 + throw NCCException.Oh(ErrorCode.COM1002);
619 } 622 }
620 623
621 #region 业绩计算相关方法 624 #region 业绩计算相关方法
@@ -625,14 +628,14 @@ namespace NCC.Extend.LqGz @@ -625,14 +628,14 @@ namespace NCC.Extend.LqGz
625 /// </summary> 628 /// </summary>
626 /// <remarks> 629 /// <remarks>
627 /// 根据薪酬规则计算个人的基础业绩、合作业绩、奖励业绩、门店总业绩、队伍业绩等 630 /// 根据薪酬规则计算个人的基础业绩、合作业绩、奖励业绩、门店总业绩、队伍业绩等
628 - /// 631 + ///
629 /// 计算逻辑: 632 /// 计算逻辑:
630 /// 1. 基础业绩:从开单品项明细表中统计,基于项目资料中的基础服务提成 633 /// 1. 基础业绩:从开单品项明细表中统计,基于项目资料中的基础服务提成
631 /// 2. 合作业绩:从开单品项明细表中统计,基于项目资料中的合作项目设置 634 /// 2. 合作业绩:从开单品项明细表中统计,基于项目资料中的合作项目设置
632 /// 3. 奖励业绩:从奖励明细表中统计 635 /// 3. 奖励业绩:从奖励明细表中统计
633 /// 4. 门店总业绩:该员工所在门店的所有业绩总和 636 /// 4. 门店总业绩:该员工所在门店的所有业绩总和
634 /// 5. 队伍业绩:该员工所在金三角战队的所有业绩总和 637 /// 5. 队伍业绩:该员工所在金三角战队的所有业绩总和
635 - /// 638 + ///
636 /// 示例请求: 639 /// 示例请求:
637 /// ```json 640 /// ```json
638 /// { 641 /// {
@@ -641,7 +644,7 @@ namespace NCC.Extend.LqGz @@ -641,7 +644,7 @@ namespace NCC.Extend.LqGz
641 /// "calculationMonth": "2025-01" 644 /// "calculationMonth": "2025-01"
642 /// } 645 /// }
643 /// ``` 646 /// ```
644 - /// 647 + ///
645 /// 参数说明: 648 /// 参数说明:
646 /// - employeeId: 员工ID(必填) 649 /// - employeeId: 员工ID(必填)
647 /// - storeId: 门店ID(必填) 650 /// - storeId: 门店ID(必填)
@@ -663,30 +666,29 @@ namespace NCC.Extend.LqGz @@ -663,30 +666,29 @@ namespace NCC.Extend.LqGz
663 { 666 {
664 EmployeeId = input.EmployeeId, 667 EmployeeId = input.EmployeeId,
665 StoreId = input.StoreId, 668 StoreId = input.StoreId,
666 - CalculationMonth = input.CalculationMonth 669 + CalculationMonth = input.CalculationMonth,
667 }; 670 };
668 671
669 // 1. 计算基础业绩 672 // 1. 计算基础业绩
670 result.BasicPerformance = await CalculateBasicPerformance(input.EmployeeId, input.StoreId, input.CalculationMonth); 673 result.BasicPerformance = await CalculateBasicPerformance(input.EmployeeId, input.StoreId, input.CalculationMonth);
671 - 674 +
672 // 2. 计算合作业绩 675 // 2. 计算合作业绩
673 result.CooperationPerformance = await CalculateCooperationPerformance(input.EmployeeId, input.StoreId, input.CalculationMonth); 676 result.CooperationPerformance = await CalculateCooperationPerformance(input.EmployeeId, input.StoreId, input.CalculationMonth);
674 - 677 +
675 // 3. 计算奖励业绩 678 // 3. 计算奖励业绩
676 result.RewardPerformance = await CalculateRewardPerformance(input.EmployeeId, input.StoreId, input.CalculationMonth); 679 result.RewardPerformance = await CalculateRewardPerformance(input.EmployeeId, input.StoreId, input.CalculationMonth);
677 - 680 +
678 // 4. 计算总业绩 681 // 4. 计算总业绩
679 result.TotalPerformance = result.BasicPerformance + result.CooperationPerformance + result.RewardPerformance; 682 result.TotalPerformance = result.BasicPerformance + result.CooperationPerformance + result.RewardPerformance;
680 - 683 +
681 // 5. 计算门店总业绩 684 // 5. 计算门店总业绩
682 result.StoreTotalPerformance = await CalculateStoreTotalPerformance(input.StoreId, input.CalculationMonth); 685 result.StoreTotalPerformance = await CalculateStoreTotalPerformance(input.StoreId, input.CalculationMonth);
683 - 686 +
684 // 6. 计算队伍业绩 687 // 6. 计算队伍业绩
685 result.TeamPerformance = await CalculateTeamPerformance(input.EmployeeId, input.StoreId, input.CalculationMonth); 688 result.TeamPerformance = await CalculateTeamPerformance(input.EmployeeId, input.StoreId, input.CalculationMonth);
686 - 689 +
687 // 7. 计算占比 690 // 7. 计算占比
688 - result.PerformanceRatio = result.StoreTotalPerformance > 0 ?  
689 - Math.Round(result.TotalPerformance / result.StoreTotalPerformance * 100, 2) : 0; 691 + result.PerformanceRatio = result.StoreTotalPerformance > 0 ? Math.Round(result.TotalPerformance / result.StoreTotalPerformance * 100, 2) : 0;
690 692
691 _logger.LogInformation($"业绩计算完成 - 员工ID: {input.EmployeeId}, 总业绩: {result.TotalPerformance}, 门店总业绩: {result.StoreTotalPerformance}"); 693 _logger.LogInformation($"业绩计算完成 - 员工ID: {input.EmployeeId}, 总业绩: {result.TotalPerformance}, 门店总业绩: {result.StoreTotalPerformance}");
692 694
@@ -711,11 +713,7 @@ namespace NCC.Extend.LqGz @@ -711,11 +713,7 @@ namespace NCC.Extend.LqGz
711 var basicPerformance = await _db.Queryable<LqKdPxmxEntity>() 713 var basicPerformance = await _db.Queryable<LqKdPxmxEntity>()
712 .LeftJoin<LqXmzlEntity>((px, xm) => px.Px == xm.Xmbh) 714 .LeftJoin<LqXmzlEntity>((px, xm) => px.Px == xm.Xmbh)
713 .LeftJoin<LqKdKdjlbEntity>((px, xm, kd) => px.Glkdbh == kd.Id) 715 .LeftJoin<LqKdKdjlbEntity>((px, xm, kd) => px.Glkdbh == kd.Id)
714 - .Where((px, xm, kd) =>  
715 - kd.Djmd == storeId &&  
716 - kd.Kdrq >= startDate &&  
717 - kd.Kdrq <= endDate &&  
718 - (px.Px == employeeId || px.Px.Contains(employeeId))) // 根据实际情况调整匹配条件 716 + .Where((px, xm, kd) => kd.Djmd == storeId && kd.Kdrq >= startDate && kd.Kdrq <= endDate && (px.Px == employeeId || px.Px.Contains(employeeId))) // 根据实际情况调整匹配条件
719 .SumAsync((px, xm, kd) => px.Pxjg * xm.Jcfwtc / 100); 717 .SumAsync((px, xm, kd) => px.Pxjg * xm.Jcfwtc / 100);
720 718
721 return basicPerformance; 719 return basicPerformance;
@@ -733,12 +731,16 @@ namespace NCC.Extend.LqGz @@ -733,12 +731,16 @@ namespace NCC.Extend.LqGz
733 var cooperationPerformance = await _db.Queryable<LqKdPxmxEntity>() 731 var cooperationPerformance = await _db.Queryable<LqKdPxmxEntity>()
734 .LeftJoin<LqXmzlEntity>((px, xm) => px.Px == xm.Xmbh) 732 .LeftJoin<LqXmzlEntity>((px, xm) => px.Px == xm.Xmbh)
735 .LeftJoin<LqKdKdjlbEntity>((px, xm, kd) => px.Glkdbh == kd.Id) 733 .LeftJoin<LqKdKdjlbEntity>((px, xm, kd) => px.Glkdbh == kd.Id)
736 - .Where((px, xm, kd) =>  
737 - kd.Djmd == storeId &&  
738 - kd.Kdrq >= startDate &&  
739 - kd.Kdrq <= endDate &&  
740 - kd.Hgjg != null && kd.Hgjg != "" && // 有合作机构  
741 - (px.Px == employeeId || px.Px.Contains(employeeId))) 734 + .Where(
  735 + (px, xm, kd) =>
  736 + kd.Djmd == storeId
  737 + && kd.Kdrq >= startDate
  738 + && kd.Kdrq <= endDate
  739 + && kd.Hgjg != null
  740 + && kd.Hgjg != ""
  741 + && // 有合作机构
  742 + (px.Px == employeeId || px.Px.Contains(employeeId))
  743 + )
742 .SumAsync((px, xm, kd) => px.Pxjg * 0.65m); // 合作业绩按65%计算 744 .SumAsync((px, xm, kd) => px.Pxjg * 0.65m); // 合作业绩按65%计算
743 745
744 return cooperationPerformance; 746 return cooperationPerformance;
@@ -751,10 +753,7 @@ namespace NCC.Extend.LqGz @@ -751,10 +753,7 @@ namespace NCC.Extend.LqGz
751 { 753 {
752 // 从奖励明细表中统计奖励业绩 754 // 从奖励明细表中统计奖励业绩
753 var rewardPerformance = await _db.Queryable<LqJlmxbEntity>() 755 var rewardPerformance = await _db.Queryable<LqJlmxbEntity>()
754 - .Where(jl =>  
755 - jl.Mdbh == storeId &&  
756 - jl.Jks == employeeId &&  
757 - jl.Hj != null && jl.Hj != "") 756 + .Where(jl => jl.Mdbh == storeId && jl.Jks == employeeId && jl.Hj != null && jl.Hj != "")
758 .SumAsync(jl => Convert.ToDecimal(jl.Hj)); 757 .SumAsync(jl => Convert.ToDecimal(jl.Hj));
759 758
760 return rewardPerformance; 759 return rewardPerformance;
@@ -769,12 +768,7 @@ namespace NCC.Extend.LqGz @@ -769,12 +768,7 @@ namespace NCC.Extend.LqGz
769 var endDate = startDate.AddMonths(1).AddDays(-1); 768 var endDate = startDate.AddMonths(1).AddDays(-1);
770 769
771 // 从开单记录表中统计门店总业绩 770 // 从开单记录表中统计门店总业绩
772 - var storeTotalPerformance = await _db.Queryable<LqKdKdjlbEntity>()  
773 - .Where(kd =>  
774 - kd.Djmd == storeId &&  
775 - kd.Kdrq >= startDate &&  
776 - kd.Kdrq <= endDate)  
777 - .SumAsync(kd => kd.Zdyj); 771 + var storeTotalPerformance = await _db.Queryable<LqKdKdjlbEntity>().Where(kd => kd.Djmd == storeId && kd.Kdrq >= startDate && kd.Kdrq <= endDate).SumAsync(kd => kd.Zdyj);
778 772
779 return storeTotalPerformance; 773 return storeTotalPerformance;
780 } 774 }
@@ -785,12 +779,7 @@ namespace NCC.Extend.LqGz @@ -785,12 +779,7 @@ namespace NCC.Extend.LqGz
785 private async Task<decimal> CalculateTeamPerformance(string employeeId, string storeId, string calculationMonth) 779 private async Task<decimal> CalculateTeamPerformance(string employeeId, string storeId, string calculationMonth)
786 { 780 {
787 // 先获取员工所在的金三角战队 781 // 先获取员工所在的金三角战队
788 - var goldenTriangle = await _db.Queryable<LqYcsdJsjEntity>()  
789 - .Where(jsj =>  
790 - jsj.Md == storeId &&  
791 - jsj.Yf == calculationMonth &&  
792 - jsj.Jsj.Contains(employeeId))  
793 - .FirstAsync(); 782 + var goldenTriangle = await _db.Queryable<LqYcsdJsjEntity>().Where(jsj => jsj.Md == storeId && jsj.Yf == calculationMonth && jsj.Jsj.Contains(employeeId)).FirstAsync();
794 783
795 if (goldenTriangle == null) 784 if (goldenTriangle == null)
796 { 785 {
@@ -802,11 +791,7 @@ namespace NCC.Extend.LqGz @@ -802,11 +791,7 @@ namespace NCC.Extend.LqGz
802 791
803 // 统计该战队所有成员的业绩 792 // 统计该战队所有成员的业绩
804 var teamPerformance = await _db.Queryable<LqKdKdjlbEntity>() 793 var teamPerformance = await _db.Queryable<LqKdKdjlbEntity>()
805 - .Where(kd =>  
806 - kd.Djmd == storeId &&  
807 - kd.Kdrq >= startDate &&  
808 - kd.Kdrq <= endDate &&  
809 - goldenTriangle.Jsj.Contains(kd.Jsj)) 794 + .Where(kd => kd.Djmd == storeId && kd.Kdrq >= startDate && kd.Kdrq <= endDate && goldenTriangle.Jsj.Contains(kd.Jsj))
810 .SumAsync(kd => kd.Zdyj); 795 .SumAsync(kd => kd.Zdyj);
811 796
812 return teamPerformance; 797 return teamPerformance;
@@ -817,7 +802,7 @@ namespace NCC.Extend.LqGz @@ -817,7 +802,7 @@ namespace NCC.Extend.LqGz
817 /// </summary> 802 /// </summary>
818 /// <remarks> 803 /// <remarks>
819 /// 批量更新指定月份所有员工的业绩数据 804 /// 批量更新指定月份所有员工的业绩数据
820 - /// 805 + ///
821 /// 示例请求: 806 /// 示例请求:
822 /// ```json 807 /// ```json
823 /// { 808 /// {
@@ -825,7 +810,7 @@ namespace NCC.Extend.LqGz @@ -825,7 +810,7 @@ namespace NCC.Extend.LqGz
825 /// "storeIds": ["门店ID1", "门店ID2"] 810 /// "storeIds": ["门店ID1", "门店ID2"]
826 /// } 811 /// }
827 /// ``` 812 /// ```
828 - /// 813 + ///
829 /// 参数说明: 814 /// 参数说明:
830 /// - calculationMonth: 计算月份,格式:YYYYMM(必填) 815 /// - calculationMonth: 计算月份,格式:YYYYMM(必填)
831 /// - storeIds: 门店ID列表(可选,为空则更新所有门店) 816 /// - storeIds: 门店ID列表(可选,为空则更新所有门店)
@@ -846,9 +831,7 @@ namespace NCC.Extend.LqGz @@ -846,9 +831,7 @@ namespace NCC.Extend.LqGz
846 var errorCount = 0; 831 var errorCount = 0;
847 832
848 // 获取需要更新的工资记录 833 // 获取需要更新的工资记录
849 - var salaryRecords = await _db.Queryable<LqGzEntity>()  
850 - .WhereIF(input.StoreIds != null && input.StoreIds.Any(), gz => input.StoreIds.Contains(gz.Md))  
851 - .ToListAsync(); 834 + var salaryRecords = await _db.Queryable<LqGzEntity>().WhereIF(input.StoreIds != null && input.StoreIds.Any(), gz => input.StoreIds.Contains(gz.Md)).ToListAsync();
852 835
853 foreach (var record in salaryRecords) 836 foreach (var record in salaryRecords)
854 { 837 {
@@ -859,7 +842,7 @@ namespace NCC.Extend.LqGz @@ -859,7 +842,7 @@ namespace NCC.Extend.LqGz
859 { 842 {
860 EmployeeId = record.Xm, // 使用姓名作为员工标识 843 EmployeeId = record.Xm, // 使用姓名作为员工标识
861 StoreId = record.Md, 844 StoreId = record.Md,
862 - CalculationMonth = input.CalculationMonth 845 + CalculationMonth = input.CalculationMonth,
863 }; 846 };
864 847
865 var performance = await CalculatePerformance(performanceInput); 848 var performance = await CalculatePerformance(performanceInput);
@@ -874,9 +857,15 @@ namespace NCC.Extend.LqGz @@ -874,9 +857,15 @@ namespace NCC.Extend.LqGz
874 record.Zb = performance.PerformanceRatio; 857 record.Zb = performance.PerformanceRatio;
875 858
876 await _db.Updateable(record) 859 await _db.Updateable(record)
877 - .UpdateColumns(gz => new {  
878 - gz.Jcyj, gz.Hzyj, gz.Jlyj, gz.Zyj,  
879 - gz.Mdzyj, gz.Dwyj, gz.Zb 860 + .UpdateColumns(gz => new
  861 + {
  862 + gz.Jcyj,
  863 + gz.Hzyj,
  864 + gz.Jlyj,
  865 + gz.Zyj,
  866 + gz.Mdzyj,
  867 + gz.Dwyj,
  868 + gz.Zb,
880 }) 869 })
881 .ExecuteCommandAsync(); 870 .ExecuteCommandAsync();
882 871
@@ -896,7 +885,7 @@ namespace NCC.Extend.LqGz @@ -896,7 +885,7 @@ namespace NCC.Extend.LqGz
896 Success = true, 885 Success = true,
897 UpdatedCount = updatedCount, 886 UpdatedCount = updatedCount,
898 ErrorCount = errorCount, 887 ErrorCount = errorCount,
899 - Message = $"成功更新 {updatedCount} 条记录,失败 {errorCount} 条记录" 888 + Message = $"成功更新 {updatedCount} 条记录,失败 {errorCount} 条记录",
900 }; 889 };
901 } 890 }
902 catch (Exception ex) 891 catch (Exception ex)
netcore/src/Modularity/Extend/NCC.Extend/LqHytkHytkService.cs
@@ -199,7 +199,6 @@ namespace NCC.Extend.LqHytkHytk @@ -199,7 +199,6 @@ namespace NCC.Extend.LqHytkHytk
199 entity.F_CreateTime = DateTime.Now; 199 entity.F_CreateTime = DateTime.Now;
200 entity.F_CreateUser = userInfo.userId; 200 entity.F_CreateUser = userInfo.userId;
201 entity.F_DeleteMark = 0; 201 entity.F_DeleteMark = 0;
202 - entity.Tksj = DateTime.Now;  
203 entity.Czry = userInfo.userId; 202 entity.Czry = userInfo.userId;
204 203
205 try 204 try
netcore/src/Modularity/Extend/NCC.Extend/LqKdKdjlbService.cs
@@ -252,6 +252,8 @@ namespace NCC.Extend.LqKdKdjlb @@ -252,6 +252,8 @@ namespace NCC.Extend.LqKdKdjlb
252 var userInfo = await _userManager.GetUserInfo(); 252 var userInfo = await _userManager.GetUserInfo();
253 var entity = input.Adapt<LqKdKdjlbEntity>(); 253 var entity = input.Adapt<LqKdKdjlbEntity>();
254 entity.Id = YitIdHelper.NextId().ToString(); 254 entity.Id = YitIdHelper.NextId().ToString();
  255 + entity.CreateTime = DateTime.Now;
  256 + entity.UpdateTime = DateTime.Now;
255 try 257 try
256 { 258 {
257 //开启事务 259 //开启事务
@@ -300,7 +302,7 @@ namespace NCC.Extend.LqKdKdjlb @@ -300,7 +302,7 @@ namespace NCC.Extend.LqKdKdjlb
300 Jksxm = ijks_tem.jksxm, 302 Jksxm = ijks_tem.jksxm,
301 Jkszh = ijks_tem.jkszh, 303 Jkszh = ijks_tem.jkszh,
302 Jksyj = ijks_tem.jksyj, 304 Jksyj = ijks_tem.jksyj,
303 - Yjsj = DateTime.Now, 305 + Yjsj = input.kdrq,
304 Jsj_id = ijks_tem.jsj_id, 306 Jsj_id = ijks_tem.jsj_id,
305 Kdpxid = lqKdPxmxEntity.Id, 307 Kdpxid = lqKdPxmxEntity.Id,
306 } 308 }
@@ -322,7 +324,7 @@ namespace NCC.Extend.LqKdKdjlb @@ -322,7 +324,7 @@ namespace NCC.Extend.LqKdKdjlb
322 Kjblsxm = ikjbs_tem.kjblsxm, 324 Kjblsxm = ikjbs_tem.kjblsxm,
323 Kjblszh = ikjbs_tem.kjblszh, 325 Kjblszh = ikjbs_tem.kjblszh,
324 Kjblsyj = ikjbs_tem.kjblsyj, 326 Kjblsyj = ikjbs_tem.kjblsyj,
325 - Yjsj = DateTime.Now, 327 + Yjsj = input.kdrq,
326 Kdpxid = lqKdPxmxEntity.Id, 328 Kdpxid = lqKdPxmxEntity.Id,
327 } 329 }
328 ); 330 );
@@ -634,8 +636,8 @@ namespace NCC.Extend.LqKdKdjlb @@ -634,8 +636,8 @@ namespace NCC.Extend.LqKdKdjlb
634 CreateTIme = DateTime.Now, 636 CreateTIme = DateTime.Now,
635 MemberId = entity.Kdhy, 637 MemberId = entity.Kdhy,
636 IsEnabled = 0, 638 IsEnabled = 0,
637 - ProjectNumber = item.projectNumber ?? 1,  
638 - TotalPrice = (decimal)(item.pxjg * (item.projectNumber ?? 1)), 639 + ProjectNumber = item.projectNumber == 0 ? 1 : item.projectNumber,
  640 + TotalPrice = (decimal)(item.pxjg * (item.projectNumber == 0 ? 1 : item.projectNumber)),
639 Px = item.px, 641 Px = item.px,
640 Pxmc = item.pxmc, 642 Pxmc = item.pxmc,
641 Pxjg = item.pxjg, 643 Pxjg = item.pxjg,
netcore/src/Modularity/Extend/NCC.Extend/LqStatisticsService.cs
@@ -13,11 +13,15 @@ using NCC.Dependency; @@ -13,11 +13,15 @@ using NCC.Dependency;
13 using NCC.DynamicApiController; 13 using NCC.DynamicApiController;
14 using NCC.Extend.Entitys.Dto.LqMdxx; 14 using NCC.Extend.Entitys.Dto.LqMdxx;
15 using NCC.Extend.Entitys.Dto.LqStatistics; 15 using NCC.Extend.Entitys.Dto.LqStatistics;
  16 +using NCC.Extend.Entitys.Dto.LqYcsdJsj;
16 using NCC.Extend.Entitys.lq_hytk_kjbsyj; 17 using NCC.Extend.Entitys.lq_hytk_kjbsyj;
  18 +using NCC.Extend.Entitys.lq_jinsanjiao_user;
  19 +using NCC.Extend.Entitys.lq_kd_jksyj;
17 using NCC.Extend.Entitys.lq_kd_kdjlb; 20 using NCC.Extend.Entitys.lq_kd_kdjlb;
18 using NCC.Extend.Entitys.lq_kd_kjbsyj; 21 using NCC.Extend.Entitys.lq_kd_kjbsyj;
19 using NCC.Extend.Entitys.lq_mdxx; 22 using NCC.Extend.Entitys.lq_mdxx;
20 using NCC.Extend.Entitys.lq_xh_kjbsyj; 23 using NCC.Extend.Entitys.lq_xh_kjbsyj;
  24 +using NCC.Extend.Entitys.lq_ycsd_jsj;
21 using NCC.Extend.Entitys.lq_yjmxb; 25 using NCC.Extend.Entitys.lq_yjmxb;
22 using NCC.Extend.Entitys.v_tech_teacher_flow; 26 using NCC.Extend.Entitys.v_tech_teacher_flow;
23 using NCC.Extend.Interfaces.LqStatistics; 27 using NCC.Extend.Interfaces.LqStatistics;
@@ -1041,6 +1045,140 @@ namespace NCC.Extend.LqStatistics @@ -1041,6 +1045,140 @@ namespace NCC.Extend.LqStatistics
1041 } 1045 }
1042 1046
1043 #endregion 1047 #endregion
  1048 +
  1049 + #region 金三角业绩统计
  1050 + /// <summary>
  1051 + /// 查询所有金三角的业绩统计
  1052 + /// </summary>
  1053 + /// <remarks>
  1054 + /// 根据金三角成员状态进行不同的统计方式:
  1055 + /// 1. 活跃成员:业绩计入金三角总业绩
  1056 + /// 2. 非活跃成员:按单人业绩统计,金三角名称为"门店名+姓名"
  1057 + ///
  1058 + /// 示例请求:
  1059 + /// GET /api/Extend/LqStatistics/GetJsjPerformance?startMonth=202401&amp;endMonth=202412
  1060 + ///
  1061 + /// 参数说明:
  1062 + /// - startMonth: 开始月份,格式为yyyyMM,可选
  1063 + /// - endMonth: 结束月份,格式为yyyyMM,可选
  1064 + /// - jsjId: 金三角ID,可选
  1065 + /// - storeId: 门店ID,可选
  1066 + ///
  1067 + /// 返回信息包括:
  1068 + /// - 金三角基本信息(ID、名称、月份、门店)
  1069 + /// - 业绩统计(订单数量、总业绩、首次/最后订单日期)
  1070 + /// - 统计类型(ACTIVE-活跃金三角业绩,INACTIVE-单人业绩)
  1071 + /// - 成员姓名(仅单人业绩时使用)
  1072 + /// </remarks>
  1073 + /// <param name="input">查询参数</param>
  1074 + /// <returns>金三角业绩统计列表</returns>
  1075 + /// <response code="200">查询成功</response>
  1076 + /// <response code="400">参数错误</response>
  1077 + [HttpGet("GetJsjPerformance")]
  1078 + public async Task<List<LqYcsdJsjPerformanceOutput>> GetJsjPerformance([FromQuery] LqYcsdJsjPerformanceInput input)
  1079 + {
  1080 + var result = new List<LqYcsdJsjPerformanceOutput>();
  1081 +
  1082 + try
  1083 + {
  1084 + // 1. 查询活跃金三角成员的业绩(计入金三角总业绩)
  1085 + var activePerformanceQuery = _db.Queryable<LqYcsdJsjEntity>()
  1086 + .LeftJoin<LqJinsanjiaoUserEntity>((jsj, user) => jsj.Id == user.JsjId && user.Status == "ACTIVE" && user.DeleteMark == 0)
  1087 + .LeftJoin<LqKdJksyjEntity>((jsj, user, jksyj) => jsj.Id == jksyj.Jsj_id && user.UserId == jksyj.Jkszh)
  1088 + .LeftJoin<LqMdxxEntity>((jsj, user, jksyj, md) => jsj.Md == md.Id)
  1089 + .Where((jsj, user, jksyj, md) => jsj.Yf != null && jksyj.Yjsj != null && jksyj.Jksyj != null && jksyj.Jksyj != "" && jksyj.Jksyj != "0")
  1090 + .WhereIF(!string.IsNullOrEmpty(input.StartMonth), (jsj, user, jksyj, md) => jsj.Yf.CompareTo(input.StartMonth) >= 0)
  1091 + .WhereIF(!string.IsNullOrEmpty(input.EndMonth), (jsj, user, jksyj, md) => jsj.Yf.CompareTo(input.EndMonth) <= 0)
  1092 + .WhereIF(!string.IsNullOrEmpty(input.JsjId), (jsj, user, jksyj, md) => jsj.Id == input.JsjId)
  1093 + .WhereIF(!string.IsNullOrEmpty(input.StoreId), (jsj, user, jksyj, md) => jsj.Md == input.StoreId)
  1094 + .GroupBy(
  1095 + (jsj, user, jksyj, md) =>
  1096 + new
  1097 + {
  1098 + jsj.Id,
  1099 + jsj.Jsj,
  1100 + jsj.Yf,
  1101 + jsj.Md,
  1102 + md.Dm,
  1103 + }
  1104 + )
  1105 + .Select(
  1106 + (jsj, user, jksyj, md) =>
  1107 + new LqYcsdJsjPerformanceOutput
  1108 + {
  1109 + JsjId = jsj.Id,
  1110 + JsjName = jsj.Jsj,
  1111 + Month = jsj.Yf,
  1112 + StoreId = jsj.Md,
  1113 + StoreName = md.Dm,
  1114 + OrderCount = SqlFunc.AggregateCount(jksyj.Glkdbh),
  1115 + TotalPerformance = SqlFunc.AggregateSum(SqlFunc.ToDecimal(jksyj.Jksyj)),
  1116 + LastOrderDate = SqlFunc.AggregateMax(jksyj.Yjsj),
  1117 + FirstOrderDate = SqlFunc.AggregateMin(jksyj.Yjsj),
  1118 + StatisticsType = "ACTIVE",
  1119 + MemberName = null,
  1120 + }
  1121 + );
  1122 +
  1123 + var activeResults = await activePerformanceQuery.ToListAsync();
  1124 + result.AddRange(activeResults);
  1125 +
  1126 + // 2. 查询非活跃金三角成员的业绩(按单人业绩统计)
  1127 + var inactivePerformanceQuery = _db.Queryable<LqJinsanjiaoUserEntity>()
  1128 + .LeftJoin<LqYcsdJsjEntity>((user, jsj) => user.JsjId == jsj.Id)
  1129 + .LeftJoin<LqKdJksyjEntity>((user, jsj, jksyj) => user.UserId == jksyj.Jkszh)
  1130 + .LeftJoin<LqMdxxEntity>((user, jsj, jksyj, md) => jsj.Md == md.Id)
  1131 + .Where(
  1132 + (user, jsj, jksyj, md) =>
  1133 + user.Status == "INACTIVE" && user.DeleteMark == 0 && jsj.Yf != null && jksyj.Yjsj != null && jksyj.Jksyj != null && jksyj.Jksyj != "" && jksyj.Jksyj != "0"
  1134 + )
  1135 + .WhereIF(!string.IsNullOrEmpty(input.StartMonth), (user, jsj, jksyj, md) => jsj.Yf.CompareTo(input.StartMonth) >= 0)
  1136 + .WhereIF(!string.IsNullOrEmpty(input.EndMonth), (user, jsj, jksyj, md) => jsj.Yf.CompareTo(input.EndMonth) <= 0)
  1137 + .WhereIF(!string.IsNullOrEmpty(input.JsjId), (user, jsj, jksyj, md) => jsj.Id == input.JsjId)
  1138 + .WhereIF(!string.IsNullOrEmpty(input.StoreId), (user, jsj, jksyj, md) => jsj.Md == input.StoreId)
  1139 + .GroupBy(
  1140 + (user, jsj, jksyj, md) =>
  1141 + new
  1142 + {
  1143 + user.Id,
  1144 + user.UserName,
  1145 + jsjId = jsj.Id,
  1146 + jsj.Yf,
  1147 + jsj.Md,
  1148 + md.Dm,
  1149 + }
  1150 + )
  1151 + .Select(
  1152 + (user, jsj, jksyj, md) =>
  1153 + new LqYcsdJsjPerformanceOutput
  1154 + {
  1155 + JsjId = user.Id, // 使用用户ID作为标识
  1156 + JsjName = md.Dm + "-" + user.UserName, // 门店名+姓名
  1157 + Month = jsj.Yf,
  1158 + StoreId = jsj.Md,
  1159 + StoreName = md.Dm,
  1160 + OrderCount = SqlFunc.AggregateCount(jksyj.Glkdbh),
  1161 + TotalPerformance = SqlFunc.AggregateSum(SqlFunc.ToDecimal(jksyj.Jksyj)),
  1162 + LastOrderDate = SqlFunc.AggregateMax(jksyj.Yjsj),
  1163 + FirstOrderDate = SqlFunc.AggregateMin(jksyj.Yjsj),
  1164 + StatisticsType = "INACTIVE",
  1165 + MemberName = user.UserName,
  1166 + }
  1167 + );
  1168 +
  1169 + var inactiveResults = await inactivePerformanceQuery.ToListAsync();
  1170 + result.AddRange(inactiveResults);
  1171 +
  1172 + // 3. 按月份和业绩排序
  1173 + return result.OrderByDescending(x => x.Month).ThenByDescending(x => x.TotalPerformance).ToList();
  1174 + }
  1175 + catch (Exception ex)
  1176 + {
  1177 + _logger.LogError(ex, "查询金三角业绩统计时发生错误");
  1178 + throw NCCException.Oh(ErrorCode.COM1001, "查询金三角业绩统计失败");
  1179 + }
  1180 + }
  1181 + #endregion
1044 } 1182 }
1045 1183
1046 /// <summary> 1184 /// <summary>
netcore/src/Modularity/Extend/NCC.Extend/LqTkjlbService.cs
@@ -16,6 +16,7 @@ using NCC.DataEncryption; @@ -16,6 +16,7 @@ using NCC.DataEncryption;
16 using NCC.Dependency; 16 using NCC.Dependency;
17 using NCC.DynamicApiController; 17 using NCC.DynamicApiController;
18 using NCC.Extend.Entitys.Dto.LqTkjlb; 18 using NCC.Extend.Entitys.Dto.LqTkjlb;
  19 +using NCC.Extend.Entitys.lq_event;
19 using NCC.Extend.Entitys.lq_eventuser; 20 using NCC.Extend.Entitys.lq_eventuser;
20 using NCC.Extend.Entitys.lq_khxx; 21 using NCC.Extend.Entitys.lq_khxx;
21 using NCC.Extend.Entitys.lq_ryzl; 22 using NCC.Extend.Entitys.lq_ryzl;
@@ -61,6 +62,7 @@ namespace NCC.Extend.LqTkjlb @@ -61,6 +62,7 @@ namespace NCC.Extend.LqTkjlb
61 { 62 {
62 var entity = await _db.Queryable<LqTkjlbEntity>().FirstAsync(p => p.Id == id); 63 var entity = await _db.Queryable<LqTkjlbEntity>().FirstAsync(p => p.Id == id);
63 var output = entity.Adapt<LqTkjlbInfoOutput>(); 64 var output = entity.Adapt<LqTkjlbInfoOutput>();
  65 + output.eventName = SqlFunc.Subqueryable<LqEventEntity>().Where(u => u.Id == entity.EventId).Select(u => u.EventName);
64 return output; 66 return output;
65 } 67 }
66 #endregion 68 #endregion
@@ -98,7 +100,6 @@ namespace NCC.Extend.LqTkjlb @@ -98,7 +100,6 @@ namespace NCC.Extend.LqTkjlb
98 tksj = it.Tksj, 100 tksj = it.Tksj,
99 // tkry=it.Tkry, 101 // tkry=it.Tkry,
100 tkry = SqlFunc.Subqueryable<UserEntity>().Where(u => u.MobilePhone == it.Tkry).Select(u => u.RealName), 102 tkry = SqlFunc.Subqueryable<UserEntity>().Where(u => u.MobilePhone == it.Tkry).Select(u => u.RealName),
101 -  
102 gkxm = it.Gkxm, 103 gkxm = it.Gkxm,
103 dhhm = it.Dhhm, 104 dhhm = it.Dhhm,
104 gmzs = it.Gmzs, 105 gmzs = it.Gmzs,
@@ -107,6 +108,8 @@ namespace NCC.Extend.LqTkjlb @@ -107,6 +108,8 @@ namespace NCC.Extend.LqTkjlb
107 bz = it.Bz, 108 bz = it.Bz,
108 ssmd = it.Ssmd, 109 ssmd = it.Ssmd,
109 sszd = it.Sszd, 110 sszd = it.Sszd,
  111 + eventId = it.EventId,
  112 + eventName = SqlFunc.Subqueryable<LqEventEntity>().Where(u => u.Id == it.EventId).Select(u => u.EventName),
110 }) 113 })
111 .MergeTable() 114 .MergeTable()
112 .OrderBy(sidx + " " + input.sort) 115 .OrderBy(sidx + " " + input.sort)
@@ -135,7 +138,12 @@ namespace NCC.Extend.LqTkjlb @@ -135,7 +138,12 @@ namespace NCC.Extend.LqTkjlb
135 var result = await _db.Ado.UseTranAsync(async () => 138 var result = await _db.Ado.UseTranAsync(async () =>
136 { 139 {
137 //通过input.eventId去查询拓客活动信息 140 //通过input.eventId去查询拓客活动信息
138 - var eventUserInfo = await _db.Queryable<LqEventUserEntity>().Where(u => u.EventId == input.eventId && u.UserId == input.tkry).FirstAsync(); 141 + var eventUserInfoList = await _db.Queryable<LqEventUserEntity>().Where(u => u.EventId == input.eventId && u.UserId == input.tkry).ToListAsync();
  142 + if (eventUserInfoList == null || eventUserInfoList.Count == 0)
  143 + {
  144 + throw NCCException.Oh("未找到对应的拓客活动用户信息,请确认活动ID和用户ID是否正确");
  145 + }
  146 + var eventUserInfo = eventUserInfoList.First();
139 // 创建拓客记录 147 // 创建拓客记录
140 var entity = input.Adapt<LqTkjlbEntity>(); 148 var entity = input.Adapt<LqTkjlbEntity>();
141 entity.Id = YitIdHelper.NextId().ToString(); 149 entity.Id = YitIdHelper.NextId().ToString();
netcore/src/Modularity/Extend/NCC.Extend/LqXhHyhkService.cs
1 -using NCC.Common.Core.Manager; 1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.Linq;
  4 +using System.Threading.Tasks;
  5 +using Mapster;
  6 +using Microsoft.AspNetCore.Mvc;
  7 +using Microsoft.Extensions.Logging;
  8 +using NCC.ClayObject;
  9 +using NCC.Common.Configuration;
  10 +using NCC.Common.Core.Manager;
2 using NCC.Common.Enum; 11 using NCC.Common.Enum;
3 using NCC.Common.Extension; 12 using NCC.Common.Extension;
4 using NCC.Common.Filter; 13 using NCC.Common.Filter;
  14 +using NCC.Common.Helper;
  15 +using NCC.Common.Model.NPOI;
  16 +using NCC.DataEncryption;
5 using NCC.Dependency; 17 using NCC.Dependency;
6 using NCC.DynamicApiController; 18 using NCC.DynamicApiController;
7 -using NCC.FriendlyException;  
8 -using NCC.Extend.Interfaces.LqXhHyhk;  
9 using NCC.Extend.Entitys.Dto.LqXhHyhk; 19 using NCC.Extend.Entitys.Dto.LqXhHyhk;
10 -using Mapster;  
11 -using Microsoft.AspNetCore.Mvc;  
12 -using SqlSugar;  
13 -using System;  
14 -using System.Collections.Generic;  
15 -using System.Linq;  
16 -using System.Threading.Tasks; 20 +using NCC.Extend.Entitys.Dto.LqXhJksyj;
  21 +using NCC.Extend.Entitys.Dto.LqXhKjbsyj;
  22 +using NCC.Extend.Entitys.Dto.LqXhPxmx;
  23 +using NCC.Extend.Entitys.lq_kd_kdjlb;
  24 +using NCC.Extend.Entitys.lq_kd_pxmx;
  25 +using NCC.Extend.Entitys.lq_khxx;
17 using NCC.Extend.Entitys.lq_xh_hyhk; 26 using NCC.Extend.Entitys.lq_xh_hyhk;
18 using NCC.Extend.Entitys.lq_xh_jksyj; 27 using NCC.Extend.Entitys.lq_xh_jksyj;
19 using NCC.Extend.Entitys.lq_xh_kjbsyj; 28 using NCC.Extend.Entitys.lq_xh_kjbsyj;
20 using NCC.Extend.Entitys.lq_xh_pxmx; 29 using NCC.Extend.Entitys.lq_xh_pxmx;
21 -using NCC.Extend.Entitys.lq_kd_pxmx;  
22 -using NCC.Extend.Entitys.lq_kd_kdjlb;  
23 -using NCC.Extend.Entitys.lq_khxx;  
24 -using Microsoft.Extensions.Logging;  
25 -using Yitter.IdGenerator;  
26 -using NCC.Common.Helper; 30 +using NCC.Extend.Interfaces.LqXhHyhk;
  31 +using NCC.FriendlyException;
27 using NCC.JsonSerialization; 32 using NCC.JsonSerialization;
28 -using NCC.Common.Model.NPOI;  
29 -using NCC.Common.Configuration;  
30 -using NCC.DataEncryption;  
31 -using NCC.ClayObject;  
32 -using NCC.Extend.Entitys.Dto.LqXhJksyj;  
33 -using NCC.Extend.Entitys.Dto.LqXhKjbsyj;  
34 -using NCC.Extend.Entitys.Dto.LqXhPxmx; 33 +using SqlSugar;
  34 +using Yitter.IdGenerator;
35 35
36 namespace NCC.Extend.LqXhHyhk 36 namespace NCC.Extend.LqXhHyhk
37 { 37 {
@@ -59,7 +59,8 @@ namespace NCC.Extend.LqXhHyhk @@ -59,7 +59,8 @@ namespace NCC.Extend.LqXhHyhk
59 ISqlSugarRepository<LqXhKjbsyjEntity> lqXhKjbsyjRepository, 59 ISqlSugarRepository<LqXhKjbsyjEntity> lqXhKjbsyjRepository,
60 ISqlSugarRepository<LqXhPxmxEntity> lqXhPxmxRepository, 60 ISqlSugarRepository<LqXhPxmxEntity> lqXhPxmxRepository,
61 IUserManager userManager, 61 IUserManager userManager,
62 - ILogger<LqXhHyhkService> logger) 62 + ILogger<LqXhHyhkService> logger
  63 + )
63 { 64 {
64 _lqXhHyhkRepository = lqXhHyhkRepository; 65 _lqXhHyhkRepository = lqXhHyhkRepository;
65 _db = _lqXhHyhkRepository.Context; 66 _db = _lqXhHyhkRepository.Context;
@@ -77,7 +78,7 @@ namespace NCC.Extend.LqXhHyhk @@ -77,7 +78,7 @@ namespace NCC.Extend.LqXhHyhk
77 /// <remarks> 78 /// <remarks>
78 /// 获取耗卡记录及其关联的品项明细、健康师业绩、科技部老师业绩信息 79 /// 获取耗卡记录及其关联的品项明细、健康师业绩、科技部老师业绩信息
79 /// 按照耗卡的完整格式返回数据,不包含汇总信息 80 /// 按照耗卡的完整格式返回数据,不包含汇总信息
80 - /// 81 + ///
81 /// 返回数据结构: 82 /// 返回数据结构:
82 /// - 主表信息:耗卡基础信息、门店信息、会员信息等 83 /// - 主表信息:耗卡基础信息、门店信息、会员信息等
83 /// - 品项明细列表:每个品项包含完整的项目信息(项目次数、是否有效、来源类型等) 84 /// - 品项明细列表:每个品项包含完整的项目信息(项目次数、是否有效、来源类型等)
@@ -104,19 +105,13 @@ namespace NCC.Extend.LqXhHyhk @@ -104,19 +105,13 @@ namespace NCC.Extend.LqXhHyhk
104 var output = entity.Adapt<LqXhHyhkInfoOutput>(); 105 var output = entity.Adapt<LqXhHyhkInfoOutput>();
105 106
106 // 2. 查询品项明细列表 107 // 2. 查询品项明细列表
107 - var lqXhPxmxList = await _db.Queryable<LqXhPxmxEntity>()  
108 - .Where(w => w.Glkdbh == entity.Id)  
109 - .ToListAsync(); 108 + var lqXhPxmxList = await _db.Queryable<LqXhPxmxEntity>().Where(w => w.Glkdbh == entity.Id).ToListAsync();
110 109
111 // 3. 查询健康师业绩列表 110 // 3. 查询健康师业绩列表
112 - var lqXhJksyjList = await _db.Queryable<LqXhJksyjEntity>()  
113 - .Where(w => w.Glkdbh == entity.Id)  
114 - .ToListAsync(); 111 + var lqXhJksyjList = await _db.Queryable<LqXhJksyjEntity>().Where(w => w.Glkdbh == entity.Id).ToListAsync();
115 112
116 // 4. 查询科技部老师业绩列表 113 // 4. 查询科技部老师业绩列表
117 - var lqXhKjbsyjList = await _db.Queryable<LqXhKjbsyjEntity>()  
118 - .Where(w => w.Glkdbh == entity.Id)  
119 - .ToListAsync(); 114 + var lqXhKjbsyjList = await _db.Queryable<LqXhKjbsyjEntity>().Where(w => w.Glkdbh == entity.Id).ToListAsync();
120 115
121 // 5. 构建品项明细输出,每个品项关联对应的业绩信息 116 // 5. 构建品项明细输出,每个品项关联对应的业绩信息
122 var pxmxOutputList = new List<LqXhPxmxInfoOutput>(); 117 var pxmxOutputList = new List<LqXhPxmxInfoOutput>();
@@ -135,7 +130,7 @@ namespace NCC.Extend.LqXhHyhk @@ -135,7 +130,7 @@ namespace NCC.Extend.LqXhHyhk
135 projectNumber = pxmx.ProjectNumber, 130 projectNumber = pxmx.ProjectNumber,
136 isEnabled = pxmx.IsEnabled, 131 isEnabled = pxmx.IsEnabled,
137 sourceType = pxmx.SourceType, 132 sourceType = pxmx.SourceType,
138 - totalPrice = pxmx.TotalPrice 133 + totalPrice = pxmx.TotalPrice,
139 }; 134 };
140 135
141 // 关联该品项的健康师业绩 136 // 关联该品项的健康师业绩
@@ -209,7 +204,10 @@ namespace NCC.Extend.LqXhHyhk @@ -209,7 +204,10 @@ namespace NCC.Extend.LqXhHyhk
209 sfykjb = it.Sfykjb, 204 sfykjb = it.Sfykjb,
210 hksj = it.Hksj, 205 hksj = it.Hksj,
211 czry = it.Czry, 206 czry = it.Czry,
212 - }).MergeTable().OrderBy(sidx + " " + input.sort).ToPagedListAsync(input.currentPage, input.pageSize); 207 + })
  208 + .MergeTable()
  209 + .OrderBy(sidx + " " + input.sort)
  210 + .ToPagedListAsync(input.currentPage, input.pageSize);
213 return PageResult<LqXhHyhkListOutput>.SqlSugarPageResult(data); 211 return PageResult<LqXhHyhkListOutput>.SqlSugarPageResult(data);
214 } 212 }
215 #endregion 213 #endregion
@@ -220,7 +218,7 @@ namespace NCC.Extend.LqXhHyhk @@ -220,7 +218,7 @@ namespace NCC.Extend.LqXhHyhk
220 /// </summary> 218 /// </summary>
221 /// <remarks> 219 /// <remarks>
222 /// 创建会员耗卡记录及其关联的品项明细、健康师业绩、科技部老师业绩信息 220 /// 创建会员耗卡记录及其关联的品项明细、健康师业绩、科技部老师业绩信息
223 - /// 221 + ///
224 /// 示例请求: 222 /// 示例请求:
225 /// ```json 223 /// ```json
226 /// { 224 /// {
@@ -245,7 +243,7 @@ namespace NCC.Extend.LqXhHyhk @@ -245,7 +243,7 @@ namespace NCC.Extend.LqXhHyhk
245 /// ] 243 /// ]
246 /// } 244 /// }
247 /// ``` 245 /// ```
248 - /// 246 + ///
249 /// 参数说明: 247 /// 参数说明:
250 /// - hyid: 会员ID 248 /// - hyid: 会员ID
251 /// - hkmd: 耗卡门店 249 /// - hkmd: 耗卡门店
@@ -262,8 +260,8 @@ namespace NCC.Extend.LqXhHyhk @@ -262,8 +260,8 @@ namespace NCC.Extend.LqXhHyhk
262 var userInfo = await _userManager.GetUserInfo(); 260 var userInfo = await _userManager.GetUserInfo();
263 var entity = input.Adapt<LqXhHyhkEntity>(); 261 var entity = input.Adapt<LqXhHyhkEntity>();
264 entity.Id = YitIdHelper.NextId().ToString(); 262 entity.Id = YitIdHelper.NextId().ToString();
265 - entity.Hksj = DateTime.Now;  
266 entity.Czry = _userManager.UserId; 263 entity.Czry = _userManager.UserId;
  264 + entity.CreateTime = DateTime.Now;
267 try 265 try
268 { 266 {
269 // 开启事务 267 // 开启事务
@@ -296,47 +294,51 @@ namespace NCC.Extend.LqXhHyhk @@ -296,47 +294,51 @@ namespace NCC.Extend.LqXhHyhk
296 SourceType = item.sourceType, 294 SourceType = item.sourceType,
297 }; 295 };
298 allPxmxEntities.Add(lqXhPxmxEntity); 296 allPxmxEntities.Add(lqXhPxmxEntity);
299 - 297 +
300 // 收集该品项关联的健康师业绩 298 // 收集该品项关联的健康师业绩
301 if (item.lqXhJksyjList != null && item.lqXhJksyjList.Any()) 299 if (item.lqXhJksyjList != null && item.lqXhJksyjList.Any())
302 { 300 {
303 foreach (var ijks_tem in item.lqXhJksyjList) 301 foreach (var ijks_tem in item.lqXhJksyjList)
304 { 302 {
305 - allJksyjEntities.Add(new LqXhJksyjEntity  
306 - {  
307 - Id = YitIdHelper.NextId().ToString(),  
308 - Glkdbh = newEntity.Id,  
309 - Jks = ijks_tem.jks,  
310 - Jksxm = ijks_tem.jksxm,  
311 - Jkszh = ijks_tem.jkszh,  
312 - Jksyj = ijks_tem.jksyj,  
313 - Yjsj = DateTime.Now,  
314 - JsjId = ijks_tem.jsjId,  
315 - Kdpxid = lqXhPxmxEntity.Id,  
316 - LaborCost = ijks_tem.laborCost,  
317 - KdpxNumber = ijks_tem.kdpxNumber,  
318 - }); 303 + allJksyjEntities.Add(
  304 + new LqXhJksyjEntity
  305 + {
  306 + Id = YitIdHelper.NextId().ToString(),
  307 + Glkdbh = newEntity.Id,
  308 + Jks = ijks_tem.jks,
  309 + Jksxm = ijks_tem.jksxm,
  310 + Jkszh = ijks_tem.jkszh,
  311 + Jksyj = ijks_tem.jksyj,
  312 + Yjsj = DateTime.Now,
  313 + JsjId = ijks_tem.jsjId,
  314 + Kdpxid = lqXhPxmxEntity.Id,
  315 + LaborCost = ijks_tem.laborCost,
  316 + KdpxNumber = ijks_tem.kdpxNumber,
  317 + }
  318 + );
319 } 319 }
320 } 320 }
321 - 321 +
322 // 收集该品项关联的科技部老师业绩 322 // 收集该品项关联的科技部老师业绩
323 if (item.lqXhKjbsyjList != null && item.lqXhKjbsyjList.Any()) 323 if (item.lqXhKjbsyjList != null && item.lqXhKjbsyjList.Any())
324 { 324 {
325 foreach (var ikjbs_tem in item.lqXhKjbsyjList) 325 foreach (var ikjbs_tem in item.lqXhKjbsyjList)
326 { 326 {
327 - allKjbsyjEntities.Add(new LqXhKjbsyjEntity  
328 - {  
329 - Id = YitIdHelper.NextId().ToString(),  
330 - Glkdbh = newEntity.Id,  
331 - Kjbls = ikjbs_tem.kjbls,  
332 - Kjblsxm = ikjbs_tem.kjblsxm,  
333 - Kjblszh = ikjbs_tem.kjblszh,  
334 - Kjblsyj = ikjbs_tem.kjblsyj,  
335 - Yjsj = DateTime.Now,  
336 - Hkpxid = lqXhPxmxEntity.Id,  
337 - LaborCost = ikjbs_tem.laborCost,  
338 - HdpxNumber = ikjbs_tem.hdpxNumber,  
339 - }); 327 + allKjbsyjEntities.Add(
  328 + new LqXhKjbsyjEntity
  329 + {
  330 + Id = YitIdHelper.NextId().ToString(),
  331 + Glkdbh = newEntity.Id,
  332 + Kjbls = ikjbs_tem.kjbls,
  333 + Kjblsxm = ikjbs_tem.kjblsxm,
  334 + Kjblszh = ikjbs_tem.kjblszh,
  335 + Kjblsyj = ikjbs_tem.kjblsyj,
  336 + Yjsj = DateTime.Now,
  337 + Hkpxid = lqXhPxmxEntity.Id,
  338 + LaborCost = ikjbs_tem.laborCost,
  339 + HdpxNumber = ikjbs_tem.hdpxNumber,
  340 + }
  341 + );
340 } 342 }
341 } 343 }
342 } 344 }
@@ -413,7 +415,10 @@ namespace NCC.Extend.LqXhHyhk @@ -413,7 +415,10 @@ namespace NCC.Extend.LqXhHyhk
413 sfykjb = it.Sfykjb, 415 sfykjb = it.Sfykjb,
414 hksj = it.Hksj, 416 hksj = it.Hksj,
415 czry = it.Czry, 417 czry = it.Czry,
416 - }).MergeTable().OrderBy(sidx + " " + input.sort).ToListAsync(); 418 + })
  419 + .MergeTable()
  420 + .OrderBy(sidx + " " + input.sort)
  421 + .ToListAsync();
417 return data; 422 return data;
418 } 423 }
419 #endregion 424 #endregion
@@ -438,7 +443,8 @@ namespace NCC.Extend.LqXhHyhk @@ -438,7 +443,8 @@ namespace NCC.Extend.LqXhHyhk
438 { 443 {
439 exportData = await this.GetNoPagingList(input); 444 exportData = await this.GetNoPagingList(input);
440 } 445 }
441 - List<ParamsModel> paramList = "[{\"value\":\"耗卡编号\",\"field\":\"id\"},{\"value\":\"门店\",\"field\":\"md\"},{\"value\":\"门店编号\",\"field\":\"mdbh\"},{\"value\":\"门店名称\",\"field\":\"mdmc\"},{\"value\":\"会员\",\"field\":\"hy\"},{\"value\":\"会员账号\",\"field\":\"hyzh\"},{\"value\":\"会员名称\",\"field\":\"hymc\"},{\"value\":\"顾客类型\",\"field\":\"gklx\"},{\"value\":\"消费金额\",\"field\":\"xfje\"},{\"value\":\"手工费用\",\"field\":\"sgfy\"},{\"value\":\"是否有科技部\",\"field\":\"sfykjb\"},{\"value\":\"耗卡时间\",\"field\":\"hksj\"},{\"value\":\"操作人员\",\"field\":\"czry\"},]".ToList<ParamsModel>(); 446 + List<ParamsModel> paramList =
  447 + "[{\"value\":\"耗卡编号\",\"field\":\"id\"},{\"value\":\"门店\",\"field\":\"md\"},{\"value\":\"门店编号\",\"field\":\"mdbh\"},{\"value\":\"门店名称\",\"field\":\"mdmc\"},{\"value\":\"会员\",\"field\":\"hy\"},{\"value\":\"会员账号\",\"field\":\"hyzh\"},{\"value\":\"会员名称\",\"field\":\"hymc\"},{\"value\":\"顾客类型\",\"field\":\"gklx\"},{\"value\":\"消费金额\",\"field\":\"xfje\"},{\"value\":\"手工费用\",\"field\":\"sgfy\"},{\"value\":\"是否有科技部\",\"field\":\"sfykjb\"},{\"value\":\"耗卡时间\",\"field\":\"hksj\"},{\"value\":\"操作人员\",\"field\":\"czry\"},]".ToList<ParamsModel>();
442 ExcelConfig excelconfig = new ExcelConfig(); 448 ExcelConfig excelconfig = new ExcelConfig();
443 excelconfig.FileName = "会员耗卡.xls"; 449 excelconfig.FileName = "会员耗卡.xls";
444 excelconfig.HeadFont = "微软雅黑"; 450 excelconfig.HeadFont = "微软雅黑";
@@ -457,11 +463,7 @@ namespace NCC.Extend.LqXhHyhk @@ -457,11 +463,7 @@ namespace NCC.Extend.LqXhHyhk
457 var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName; 463 var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
458 ExcelExportHelper<LqXhHyhkListOutput>.Export(exportData, excelconfig, addPath); 464 ExcelExportHelper<LqXhHyhkListOutput>.Export(exportData, excelconfig, addPath);
459 var fileName = _userManager.UserId + "|" + addPath + "|xls"; 465 var fileName = _userManager.UserId + "|" + addPath + "|xls";
460 - var output = new  
461 - {  
462 - name = excelconfig.FileName,  
463 - url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC")  
464 - }; 466 + var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
465 return output; 467 return output;
466 } 468 }
467 #endregion 469 #endregion
@@ -521,7 +523,7 @@ namespace NCC.Extend.LqXhHyhk @@ -521,7 +523,7 @@ namespace NCC.Extend.LqXhHyhk
521 { 523 {
522 //开启事务 524 //开启事务
523 _db.BeginTran(); 525 _db.BeginTran();
524 - 526 + entity.UpdateTime = DateTime.Now;
525 //更新会员耗卡记录 527 //更新会员耗卡记录
526 await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); 528 await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
527 529
@@ -559,47 +561,51 @@ namespace NCC.Extend.LqXhHyhk @@ -559,47 +561,51 @@ namespace NCC.Extend.LqXhHyhk
559 SourceType = item.sourceType, 561 SourceType = item.sourceType,
560 }; 562 };
561 allPxmxEntities.Add(lqXhPxmxEntity); 563 allPxmxEntities.Add(lqXhPxmxEntity);
562 - 564 +
563 // 收集该品项关联的健康师业绩 565 // 收集该品项关联的健康师业绩
564 if (item.lqXhJksyjList != null && item.lqXhJksyjList.Any()) 566 if (item.lqXhJksyjList != null && item.lqXhJksyjList.Any())
565 { 567 {
566 foreach (var ijks_tem in item.lqXhJksyjList) 568 foreach (var ijks_tem in item.lqXhJksyjList)
567 { 569 {
568 - allJksyjEntities.Add(new LqXhJksyjEntity  
569 - {  
570 - Id = YitIdHelper.NextId().ToString(),  
571 - Glkdbh = entity.Id,  
572 - Jks = ijks_tem.jks,  
573 - Jksxm = ijks_tem.jksxm,  
574 - Jkszh = ijks_tem.jkszh,  
575 - Jksyj = ijks_tem.jksyj,  
576 - Yjsj = DateTime.Now,  
577 - JsjId = ijks_tem.jsjId,  
578 - Kdpxid = lqXhPxmxEntity.Id,  
579 - LaborCost = ijks_tem.laborCost,  
580 - KdpxNumber = ijks_tem.kdpxNumber,  
581 - }); 570 + allJksyjEntities.Add(
  571 + new LqXhJksyjEntity
  572 + {
  573 + Id = YitIdHelper.NextId().ToString(),
  574 + Glkdbh = entity.Id,
  575 + Jks = ijks_tem.jks,
  576 + Jksxm = ijks_tem.jksxm,
  577 + Jkszh = ijks_tem.jkszh,
  578 + Jksyj = ijks_tem.jksyj,
  579 + Yjsj = DateTime.Now,
  580 + JsjId = ijks_tem.jsjId,
  581 + Kdpxid = lqXhPxmxEntity.Id,
  582 + LaborCost = ijks_tem.laborCost,
  583 + KdpxNumber = ijks_tem.kdpxNumber,
  584 + }
  585 + );
582 } 586 }
583 } 587 }
584 - 588 +
585 // 收集该品项关联的科技部老师业绩 589 // 收集该品项关联的科技部老师业绩
586 if (item.lqXhKjbsyjList != null && item.lqXhKjbsyjList.Any()) 590 if (item.lqXhKjbsyjList != null && item.lqXhKjbsyjList.Any())
587 { 591 {
588 foreach (var ikjbs_tem in item.lqXhKjbsyjList) 592 foreach (var ikjbs_tem in item.lqXhKjbsyjList)
589 { 593 {
590 - allKjbsyjEntities.Add(new LqXhKjbsyjEntity  
591 - {  
592 - Id = YitIdHelper.NextId().ToString(),  
593 - Glkdbh = entity.Id,  
594 - Kjbls = ikjbs_tem.kjbls,  
595 - Kjblsxm = ikjbs_tem.kjblsxm,  
596 - Kjblszh = ikjbs_tem.kjblszh,  
597 - Kjblsyj = ikjbs_tem.kjblsyj,  
598 - Yjsj = DateTime.Now,  
599 - Hkpxid = lqXhPxmxEntity.Id,  
600 - LaborCost = ikjbs_tem.laborCost,  
601 - HdpxNumber = ikjbs_tem.hdpxNumber,  
602 - }); 594 + allKjbsyjEntities.Add(
  595 + new LqXhKjbsyjEntity
  596 + {
  597 + Id = YitIdHelper.NextId().ToString(),
  598 + Glkdbh = entity.Id,
  599 + Kjbls = ikjbs_tem.kjbls,
  600 + Kjblsxm = ikjbs_tem.kjblsxm,
  601 + Kjblszh = ikjbs_tem.kjblszh,
  602 + Kjblsyj = ikjbs_tem.kjblsyj,
  603 + Yjsj = DateTime.Now,
  604 + Hkpxid = lqXhPxmxEntity.Id,
  605 + LaborCost = ikjbs_tem.laborCost,
  606 + HdpxNumber = ikjbs_tem.hdpxNumber,
  607 + }
  608 + );
603 } 609 }
604 } 610 }
605 } 611 }
netcore/src/Modularity/Extend/NCC.Extend/LqYcsdJsjService.cs
1 using System; 1 using System;
2 using System.Collections.Generic; 2 using System.Collections.Generic;
  3 +using System.ComponentModel.DataAnnotations;
3 using System.Globalization; 4 using System.Globalization;
4 using System.Linq; 5 using System.Linq;
5 using System.Threading.Tasks; 6 using System.Threading.Tasks;
@@ -81,7 +82,7 @@ namespace NCC.Extend.LqYcsdJsj @@ -81,7 +82,7 @@ namespace NCC.Extend.LqYcsdJsj
81 var output = entity.Adapt<LqYcsdJsjInfoOutput>(); 82 var output = entity.Adapt<LqYcsdJsjInfoOutput>();
82 83
83 // 获取成员信息 84 // 获取成员信息
84 - var members = await _db.Queryable<LqJinsanjiaoUserEntity>() 85 + var members = await _db.Queryable<NCC.Extend.Entitys.lq_jinsanjiao_user.LqJinsanjiaoUserEntity>()
85 .Where(x => x.JsjId == id && x.Status == "ACTIVE") 86 .Where(x => x.JsjId == id && x.Status == "ACTIVE")
86 .OrderBy(x => x.SortOrder) 87 .OrderBy(x => x.SortOrder)
87 .Select(x => new 88 .Select(x => new
@@ -194,6 +195,81 @@ namespace NCC.Extend.LqYcsdJsj @@ -194,6 +195,81 @@ namespace NCC.Extend.LqYcsdJsj
194 } 195 }
195 #endregion 196 #endregion
196 197
  198 + #region 根据用户和月份获取金三角信息
  199 + /// <summary>
  200 + /// 根据用户和时间获取金三角信息
  201 + /// </summary>
  202 + /// <remarks>
  203 + /// 根据指定的用户ID和时间,从时间中提取月份,查询该用户在该月份的金三角信息。
  204 + ///
  205 + /// 示例请求:
  206 + /// GET /api/Extend/LqYcsdJsj/GetJsjInfoByUserMonth?userId=123456&amp;dateTime=2024-12-15%2014:30:00
  207 + ///
  208 + /// 参数说明:
  209 + /// - userId: 用户ID,必填
  210 + /// - dateTime: 时间,格式为yyyy-MM-dd HH:mm:ss,必填
  211 + ///
  212 + /// 返回信息包括:
  213 + /// - 金三角基本信息(ID、名称、月份)
  214 + /// - 门店信息(ID、名称)
  215 + /// - 用户信息(ID、姓名、是否顾问、状态、排序)
  216 + /// </remarks>
  217 + /// <param name="input">查询参数</param>
  218 + /// <returns>金三角信息</returns>
  219 + /// <response code="200">查询成功</response>
  220 + /// <response code="400">参数错误</response>
  221 + /// <response code="404">未找到相关数据</response>
  222 + [HttpGet("GetJsjInfoByUserMonth")]
  223 + public async Task<LqYcsdJsjByUserMonthOutput> GetJsjInfoByUserMonth([FromQuery] LqYcsdJsjByUserMonthInput input)
  224 + {
  225 + if (string.IsNullOrEmpty(input.UserId))
  226 + {
  227 + throw NCCException.Oh(ErrorCode.COM1001, "用户ID不能为空");
  228 + }
  229 +
  230 + if (input.DateTime == default(DateTime))
  231 + {
  232 + throw NCCException.Oh(ErrorCode.COM1001, "时间不能为空");
  233 + }
  234 +
  235 + // 从时间中提取月份(格式:yyyyMM)
  236 + var month = input.DateTime.ToString("yyyyMM");
  237 +
  238 + // 先查询用户的金三角关联信息
  239 + var jsjUser = await _db.Queryable<NCC.Extend.Entitys.lq_jinsanjiao_user.LqJinsanjiaoUserEntity>().Where(x => x.UserId == input.UserId && x.DeleteMark == 0).FirstAsync();
  240 +
  241 + if (jsjUser == null)
  242 + {
  243 + return null;
  244 + }
  245 +
  246 + // 查询金三角信息
  247 + var jsj = await _db.Queryable<LqYcsdJsjEntity>().Where(x => x.Id == jsjUser.JsjId && x.Yf == month).FirstAsync();
  248 +
  249 + if (jsj == null)
  250 + {
  251 + return null;
  252 + }
  253 +
  254 + // 查询门店信息
  255 + var store = await _db.Queryable<LqMdxxEntity>().Where(x => x.Id == jsj.Md).FirstAsync();
  256 +
  257 + return new LqYcsdJsjByUserMonthOutput
  258 + {
  259 + JsjId = jsj.Id,
  260 + JsjName = jsj.Jsj,
  261 + Month = jsj.Yf,
  262 + StoreId = jsj.Md,
  263 + StoreName = store?.Dm,
  264 + UserId = jsjUser.UserId,
  265 + UserName = jsjUser.UserName,
  266 + IsLeader = jsjUser.IsLeader,
  267 + Status = jsjUser.Status,
  268 + SortOrder = jsjUser.SortOrder,
  269 + };
  270 + }
  271 + #endregion
  272 +
197 #region 新建金三角 273 #region 新建金三角
198 /// <summary> 274 /// <summary>
199 /// 新建金三角 275 /// 新建金三角
@@ -474,7 +550,7 @@ namespace NCC.Extend.LqYcsdJsj @@ -474,7 +550,7 @@ namespace NCC.Extend.LqYcsdJsj
474 } 550 }
475 551
476 var query = _db.Queryable<LqYcsdJsjEntity>() 552 var query = _db.Queryable<LqYcsdJsjEntity>()
477 - .LeftJoin<LqKdJksyjEntity>((jsj, jksyj) => jsj.Id == jksyj.Jsj_id) 553 + .LeftJoin<NCC.Extend.Entitys.lq_kd_jksyj.LqKdJksyjEntity>((jsj, jksyj) => jsj.Id == jksyj.Jsj_id)
478 .LeftJoin<LqMdxxEntity>((jsj, jksyj, md) => jsj.Md == md.Id) 554 .LeftJoin<LqMdxxEntity>((jsj, jksyj, md) => jsj.Md == md.Id)
479 .Where((jsj, jksyj, md) => jsj.Yf == month) 555 .Where((jsj, jksyj, md) => jsj.Yf == month)
480 .Where((jsj, jksyj, md) => jksyj.Yjsj != null) 556 .Where((jsj, jksyj, md) => jksyj.Yjsj != null)
@@ -603,12 +679,12 @@ namespace NCC.Extend.LqYcsdJsj @@ -603,12 +679,12 @@ namespace NCC.Extend.LqYcsdJsj
603 /// <returns></returns> 679 /// <returns></returns>
604 private async Task CreateJsjMembers(string jsjId, List<JsjMemberInput> members, string creatorUserId) 680 private async Task CreateJsjMembers(string jsjId, List<JsjMemberInput> members, string creatorUserId)
605 { 681 {
606 - var memberEntities = new List<LqJinsanjiaoUserEntity>(); 682 + var memberEntities = new List<NCC.Extend.Entitys.lq_jinsanjiao_user.LqJinsanjiaoUserEntity>();
607 683
608 for (int i = 0; i < members.Count; i++) 684 for (int i = 0; i < members.Count; i++)
609 { 685 {
610 var member = members[i]; 686 var member = members[i];
611 - var memberEntity = new LqJinsanjiaoUserEntity 687 + var memberEntity = new NCC.Extend.Entitys.lq_jinsanjiao_user.LqJinsanjiaoUserEntity
612 { 688 {
613 Id = YitIdHelper.NextId().ToString(), 689 Id = YitIdHelper.NextId().ToString(),
614 JsjId = jsjId, 690 JsjId = jsjId,
netcore/src/Modularity/Extend/NCC.Extend/LqYyjlService.cs
1 -using NCC.Common.Core.Manager; 1 +using System;
  2 +using System.Collections.Generic;
  3 +using System.Linq;
  4 +using System.Threading.Tasks;
  5 +using Mapster;
  6 +using Microsoft.AspNetCore.Mvc;
  7 +using NCC.ClayObject;
  8 +using NCC.Common.Configuration;
  9 +using NCC.Common.Core.Manager;
2 using NCC.Common.Enum; 10 using NCC.Common.Enum;
3 using NCC.Common.Extension; 11 using NCC.Common.Extension;
4 using NCC.Common.Filter; 12 using NCC.Common.Filter;
  13 +using NCC.Common.Helper;
  14 +using NCC.Common.Model.NPOI;
  15 +using NCC.DataEncryption;
5 using NCC.Dependency; 16 using NCC.Dependency;
6 using NCC.DynamicApiController; 17 using NCC.DynamicApiController;
7 -using NCC.FriendlyException; 18 +using NCC.Extend.Entitys.Dto.LqYyjl;
  19 +using NCC.Extend.Entitys.lq_yyjl;
8 using NCC.Extend.Interfaces.LqYyjl; 20 using NCC.Extend.Interfaces.LqYyjl;
9 -using Mapster;  
10 -using Microsoft.AspNetCore.Mvc; 21 +using NCC.FriendlyException;
  22 +using NCC.JsonSerialization;
11 using SqlSugar; 23 using SqlSugar;
12 -using System;  
13 -using System.Collections.Generic;  
14 -using System.Linq;  
15 -using System.Threading.Tasks;  
16 -using NCC.Extend.Entitys.lq_yyjl;  
17 -using NCC.Extend.Entitys.Dto.LqYyjl;  
18 using Yitter.IdGenerator; 24 using Yitter.IdGenerator;
19 -using NCC.Common.Helper;  
20 -using NCC.JsonSerialization;  
21 -using NCC.Common.Model.NPOI;  
22 -using NCC.Common.Configuration;  
23 -using NCC.DataEncryption;  
24 -using NCC.ClayObject;  
25 25
26 namespace NCC.Extend.LqYyjl 26 namespace NCC.Extend.LqYyjl
27 { 27 {
28 /// <summary> 28 /// <summary>
29 /// 预约记录服务 29 /// 预约记录服务
30 /// </summary> 30 /// </summary>
31 - [ApiDescriptionSettings(Tag = "Extend",Name = "LqYyjl", Order = 200)] 31 + [ApiDescriptionSettings(Tag = "Extend", Name = "LqYyjl", Order = 200)]
32 [Route("api/Extend/[controller]")] 32 [Route("api/Extend/[controller]")]
33 public class LqYyjlService : ILqYyjlService, IDynamicApiController, ITransient 33 public class LqYyjlService : ILqYyjlService, IDynamicApiController, ITransient
34 { 34 {
@@ -39,11 +39,9 @@ namespace NCC.Extend.LqYyjl @@ -39,11 +39,9 @@ namespace NCC.Extend.LqYyjl
39 /// <summary> 39 /// <summary>
40 /// 初始化一个<see cref="LqYyjlService"/>类型的新实例 40 /// 初始化一个<see cref="LqYyjlService"/>类型的新实例
41 /// </summary> 41 /// </summary>
42 - public LqYyjlService(  
43 - ISqlSugarRepository<LqYyjlEntity> lqYyjlRepository,  
44 - IUserManager userManager) 42 + public LqYyjlService(ISqlSugarRepository<LqYyjlEntity> lqYyjlRepository, IUserManager userManager)
45 { 43 {
46 - _lqYyjlRepository = lqYyjlRepository; 44 + _lqYyjlRepository = lqYyjlRepository;
47 _db = _lqYyjlRepository.Context; 45 _db = _lqYyjlRepository.Context;
48 _userManager = userManager; 46 _userManager = userManager;
49 } 47 }
@@ -62,10 +60,10 @@ namespace NCC.Extend.LqYyjl @@ -62,10 +60,10 @@ namespace NCC.Extend.LqYyjl
62 } 60 }
63 61
64 /// <summary> 62 /// <summary>
65 - /// 获取预约记录列表  
66 - /// </summary>  
67 - /// <param name="input">请求参数</param>  
68 - /// <returns></returns> 63 + /// 获取预约记录列表
  64 + /// </summary>
  65 + /// <param name="input">请求参数</param>
  66 + /// <returns></returns>
69 [HttpGet("")] 67 [HttpGet("")]
70 public async Task<dynamic> GetList([FromQuery] LqYyjlListQueryInput input) 68 public async Task<dynamic> GetList([FromQuery] LqYyjlListQueryInput input)
71 { 69 {
@@ -96,23 +94,26 @@ namespace NCC.Extend.LqYyjl @@ -96,23 +94,26 @@ namespace NCC.Extend.LqYyjl
96 .WhereIF(queryYyjs != null, p => p.Yyjs >= new DateTime(startYyjs.ToDate().Year, startYyjs.ToDate().Month, startYyjs.ToDate().Day, 0, 0, 0)) 94 .WhereIF(queryYyjs != null, p => p.Yyjs >= new DateTime(startYyjs.ToDate().Year, startYyjs.ToDate().Month, startYyjs.ToDate().Day, 0, 0, 0))
97 .WhereIF(queryYyjs != null, p => p.Yyjs <= new DateTime(endYyjs.ToDate().Year, endYyjs.ToDate().Month, endYyjs.ToDate().Day, 23, 59, 59)) 95 .WhereIF(queryYyjs != null, p => p.Yyjs <= new DateTime(endYyjs.ToDate().Year, endYyjs.ToDate().Month, endYyjs.ToDate().Day, 23, 59, 59))
98 .WhereIF(!string.IsNullOrEmpty(input.F_Status), p => p.F_Status.Equals(input.F_Status)) 96 .WhereIF(!string.IsNullOrEmpty(input.F_Status), p => p.F_Status.Equals(input.F_Status))
99 - .Select(it=> new LqYyjlListOutput 97 + .Select(it => new LqYyjlListOutput
100 { 98 {
101 id = it.Id, 99 id = it.Id,
102 - djmd=it.Djmd,  
103 - yyr=it.Yyr,  
104 - gklx=it.Gklx,  
105 - yytyxm=it.Yytyxm,  
106 - czr=it.Czr,  
107 - czsj=it.Czsj,  
108 - gk=it.Gk,  
109 - gkxm=it.Gkxm,  
110 - yyjks=it.Yyjks,  
111 - yysj=it.Yysj,  
112 - yyjs=it.Yyjs,  
113 - F_Status=it.F_Status,  
114 - }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize);  
115 - return PageResult<LqYyjlListOutput>.SqlSugarPageResult(data); 100 + djmd = it.Djmd,
  101 + yyr = it.Yyr,
  102 + gklx = it.Gklx,
  103 + yytyxm = it.Yytyxm,
  104 + czr = it.Czr,
  105 + czsj = it.Czsj,
  106 + gk = it.Gk,
  107 + gkxm = it.Gkxm,
  108 + yyjks = it.Yyjks,
  109 + yysj = it.Yysj,
  110 + yyjs = it.Yyjs,
  111 + F_Status = it.F_Status,
  112 + })
  113 + .MergeTable()
  114 + .OrderBy(sidx + " " + input.sort)
  115 + .ToPagedListAsync(input.currentPage, input.pageSize);
  116 + return PageResult<LqYyjlListOutput>.SqlSugarPageResult(data);
116 } 117 }
117 118
118 /// <summary> 119 /// <summary>
@@ -127,16 +128,17 @@ namespace NCC.Extend.LqYyjl @@ -127,16 +128,17 @@ namespace NCC.Extend.LqYyjl
127 var entity = input.Adapt<LqYyjlEntity>(); 128 var entity = input.Adapt<LqYyjlEntity>();
128 entity.Id = YitIdHelper.NextId().ToString(); 129 entity.Id = YitIdHelper.NextId().ToString();
129 entity.Czr = _userManager.UserId; 130 entity.Czr = _userManager.UserId;
130 - entity.Czsj = DateTime.Now; 131 + entity.Czsj = DateTime.Now;
131 var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync(); 132 var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
132 - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1000); 133 + if (!(isOk > 0))
  134 + throw NCCException.Oh(ErrorCode.COM1000);
133 } 135 }
134 136
135 /// <summary> 137 /// <summary>
136 - /// 获取预约记录无分页列表  
137 - /// </summary>  
138 - /// <param name="input">请求参数</param>  
139 - /// <returns></returns> 138 + /// 获取预约记录无分页列表
  139 + /// </summary>
  140 + /// <param name="input">请求参数</param>
  141 + /// <returns></returns>
140 [NonAction] 142 [NonAction]
141 public async Task<dynamic> GetNoPagingList([FromQuery] LqYyjlListQueryInput input) 143 public async Task<dynamic> GetNoPagingList([FromQuery] LqYyjlListQueryInput input)
142 { 144 {
@@ -167,30 +169,33 @@ namespace NCC.Extend.LqYyjl @@ -167,30 +169,33 @@ namespace NCC.Extend.LqYyjl
167 .WhereIF(queryYyjs != null, p => p.Yyjs >= new DateTime(startYyjs.ToDate().Year, startYyjs.ToDate().Month, startYyjs.ToDate().Day, 0, 0, 0)) 169 .WhereIF(queryYyjs != null, p => p.Yyjs >= new DateTime(startYyjs.ToDate().Year, startYyjs.ToDate().Month, startYyjs.ToDate().Day, 0, 0, 0))
168 .WhereIF(queryYyjs != null, p => p.Yyjs <= new DateTime(endYyjs.ToDate().Year, endYyjs.ToDate().Month, endYyjs.ToDate().Day, 23, 59, 59)) 170 .WhereIF(queryYyjs != null, p => p.Yyjs <= new DateTime(endYyjs.ToDate().Year, endYyjs.ToDate().Month, endYyjs.ToDate().Day, 23, 59, 59))
169 .WhereIF(!string.IsNullOrEmpty(input.F_Status), p => p.F_Status.Equals(input.F_Status)) 171 .WhereIF(!string.IsNullOrEmpty(input.F_Status), p => p.F_Status.Equals(input.F_Status))
170 - .Select(it=> new LqYyjlListOutput 172 + .Select(it => new LqYyjlListOutput
171 { 173 {
172 id = it.Id, 174 id = it.Id,
173 - djmd=it.Djmd,  
174 - yyr=it.Yyr,  
175 - gklx=it.Gklx,  
176 - yytyxm=it.Yytyxm,  
177 - czr=it.Czr,  
178 - czsj=it.Czsj,  
179 - gk=it.Gk,  
180 - gkxm=it.Gkxm,  
181 - yyjks=it.Yyjks,  
182 - yysj=it.Yysj,  
183 - yyjs=it.Yyjs,  
184 - F_Status=it.F_Status,  
185 - }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync();  
186 - return data; 175 + djmd = it.Djmd,
  176 + yyr = it.Yyr,
  177 + gklx = it.Gklx,
  178 + yytyxm = it.Yytyxm,
  179 + czr = it.Czr,
  180 + czsj = it.Czsj,
  181 + gk = it.Gk,
  182 + gkxm = it.Gkxm,
  183 + yyjks = it.Yyjks,
  184 + yysj = it.Yysj,
  185 + yyjs = it.Yyjs,
  186 + F_Status = it.F_Status,
  187 + })
  188 + .MergeTable()
  189 + .OrderBy(sidx + " " + input.sort)
  190 + .ToListAsync();
  191 + return data;
187 } 192 }
188 193
189 /// <summary> 194 /// <summary>
190 - /// 导出预约记录  
191 - /// </summary>  
192 - /// <param name="input">请求参数</param>  
193 - /// <returns></returns> 195 + /// 导出预约记录
  196 + /// </summary>
  197 + /// <param name="input">请求参数</param>
  198 + /// <returns></returns>
194 [HttpGet("Actions/Export")] 199 [HttpGet("Actions/Export")]
195 public async Task<dynamic> Export([FromQuery] LqYyjlListQueryInput input) 200 public async Task<dynamic> Export([FromQuery] LqYyjlListQueryInput input)
196 { 201 {
@@ -205,7 +210,8 @@ namespace NCC.Extend.LqYyjl @@ -205,7 +210,8 @@ namespace NCC.Extend.LqYyjl
205 { 210 {
206 exportData = await this.GetNoPagingList(input); 211 exportData = await this.GetNoPagingList(input);
207 } 212 }
208 - List<ParamsModel> paramList = "[{\"value\":\"预约编号\",\"field\":\"id\"},{\"value\":\"单据门店\",\"field\":\"djmd\"},{\"value\":\"邀约人\",\"field\":\"yyr\"},{\"value\":\"顾客姓名\",\"field\":\"gkxm\"},{\"value\":\"操作人\",\"field\":\"czr\"},{\"value\":\"操作时间\",\"field\":\"czsj\"},{\"value\":\"预约体验项目\",\"field\":\"yytyxm\"},{\"value\":\"顾客类型\",\"field\":\"gklx\"},{\"value\":\"预约健康师\",\"field\":\"yyjks\"},{\"value\":\"预约开始时间\",\"field\":\"yysj\"},{\"value\":\"预约结束时间\",\"field\":\"yyjs\"},{\"value\":\"顾客\",\"field\":\"gk\"},{\"value\":\"预约状态\",\"field\":\"F_Status\"},]".ToList<ParamsModel>(); 213 + List<ParamsModel> paramList =
  214 + "[{\"value\":\"预约编号\",\"field\":\"id\"},{\"value\":\"单据门店\",\"field\":\"djmd\"},{\"value\":\"邀约人\",\"field\":\"yyr\"},{\"value\":\"顾客姓名\",\"field\":\"gkxm\"},{\"value\":\"操作人\",\"field\":\"czr\"},{\"value\":\"操作时间\",\"field\":\"czsj\"},{\"value\":\"预约体验项目\",\"field\":\"yytyxm\"},{\"value\":\"顾客类型\",\"field\":\"gklx\"},{\"value\":\"预约健康师\",\"field\":\"yyjks\"},{\"value\":\"预约开始时间\",\"field\":\"yysj\"},{\"value\":\"预约结束时间\",\"field\":\"yyjs\"},{\"value\":\"顾客\",\"field\":\"gk\"},{\"value\":\"预约状态\",\"field\":\"F_Status\"},]".ToList<ParamsModel>();
209 ExcelConfig excelconfig = new ExcelConfig(); 215 ExcelConfig excelconfig = new ExcelConfig();
210 excelconfig.FileName = "预约记录.xls"; 216 excelconfig.FileName = "预约记录.xls";
211 excelconfig.HeadFont = "微软雅黑"; 217 excelconfig.HeadFont = "微软雅黑";
@@ -224,11 +230,7 @@ namespace NCC.Extend.LqYyjl @@ -224,11 +230,7 @@ namespace NCC.Extend.LqYyjl
224 var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName; 230 var addPath = FileVariable.TemporaryFilePath + excelconfig.FileName;
225 ExcelExportHelper<LqYyjlListOutput>.Export(exportData, excelconfig, addPath); 231 ExcelExportHelper<LqYyjlListOutput>.Export(exportData, excelconfig, addPath);
226 var fileName = _userManager.UserId + "|" + addPath + "|xls"; 232 var fileName = _userManager.UserId + "|" + addPath + "|xls";
227 - var output = new  
228 - {  
229 - name = excelconfig.FileName,  
230 - url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC")  
231 - }; 233 + var output = new { name = excelconfig.FileName, url = "/api/File/Download?encryption=" + DESCEncryption.Encrypt(fileName, "NCC") };
232 return output; 234 return output;
233 } 235 }
234 236
@@ -248,7 +250,7 @@ namespace NCC.Extend.LqYyjl @@ -248,7 +250,7 @@ namespace NCC.Extend.LqYyjl
248 //开启事务 250 //开启事务
249 _db.BeginTran(); 251 _db.BeginTran();
250 //批量删除预约记录 252 //批量删除预约记录
251 - await _db.Deleteable<LqYyjlEntity>().In(d => d.Id,ids).ExecuteCommandAsync(); 253 + await _db.Deleteable<LqYyjlEntity>().In(d => d.Id, ids).ExecuteCommandAsync();
252 //关闭事务 254 //关闭事务
253 _db.CommitTran(); 255 _db.CommitTran();
254 } 256 }
@@ -272,7 +274,8 @@ namespace NCC.Extend.LqYyjl @@ -272,7 +274,8 @@ namespace NCC.Extend.LqYyjl
272 { 274 {
273 var entity = input.Adapt<LqYyjlEntity>(); 275 var entity = input.Adapt<LqYyjlEntity>();
274 var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync(); 276 var isOk = await _db.Updateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
275 - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1001); 277 + if (!(isOk > 0))
  278 + throw NCCException.Oh(ErrorCode.COM1001);
276 } 279 }
277 280
278 /// <summary> 281 /// <summary>
@@ -285,7 +288,8 @@ namespace NCC.Extend.LqYyjl @@ -285,7 +288,8 @@ namespace NCC.Extend.LqYyjl
285 var entity = await _db.Queryable<LqYyjlEntity>().FirstAsync(p => p.Id == id); 288 var entity = await _db.Queryable<LqYyjlEntity>().FirstAsync(p => p.Id == id);
286 _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005); 289 _ = entity ?? throw NCCException.Oh(ErrorCode.COM1005);
287 var isOk = await _db.Deleteable<LqYyjlEntity>().Where(d => d.Id == id).ExecuteCommandAsync(); 290 var isOk = await _db.Deleteable<LqYyjlEntity>().Where(d => d.Id == id).ExecuteCommandAsync();
288 - if (!(isOk > 0)) throw NCCException.Oh(ErrorCode.COM1002); 291 + if (!(isOk > 0))
  292 + throw NCCException.Oh(ErrorCode.COM1002);
289 } 293 }
290 } 294 }
291 } 295 }
netcore/src/Modularity/Extend/NCC.Extend/NCC.Extend.csproj
1 <Project Sdk="Microsoft.NET.Sdk"> 1 <Project Sdk="Microsoft.NET.Sdk">
2 -  
3 - <PropertyGroup>  
4 - <TargetFramework>net6.0</TargetFramework>  
5 - </PropertyGroup>  
6 -  
7 - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">  
8 - <DocumentationFile>bin\Debug\$(AssemblyName).xml</DocumentationFile>  
9 - </PropertyGroup>  
10 -  
11 - <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">  
12 - <DocumentationFile>bin\Release\$(AssemblyName).xml</DocumentationFile>  
13 - </PropertyGroup>  
14 -  
15 - <ItemGroup>  
16 - <ProjectReference Include="..\..\Common\NCC.Common.Core\NCC.Common.Core.csproj" />  
17 - <ProjectReference Include="..\NCC.Extend.Interfaces\NCC.Extend.Interfaces.csproj" />  
18 - </ItemGroup>  
19 -  
20 - <ItemGroup>  
21 - <PackageReference Include="EPPlus" Version="6.2.10" />  
22 - </ItemGroup>  
23 - 2 + <PropertyGroup>
  3 + <TargetFramework>net6.0</TargetFramework>
  4 + </PropertyGroup>
  5 + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
  6 + <DocumentationFile>bin\Debug\$(AssemblyName).xml</DocumentationFile>
  7 + </PropertyGroup>
  8 + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
  9 + <DocumentationFile>bin\Release\$(AssemblyName).xml</DocumentationFile>
  10 + </PropertyGroup>
  11 + <ItemGroup>
  12 + <ProjectReference Include="..\..\Common\NCC.Common.Core\NCC.Common.Core.csproj" />
  13 + <ProjectReference Include="..\NCC.Extend.Interfaces\NCC.Extend.Interfaces.csproj" />
  14 + <ProjectReference Include="..\NCC.Extend.Entitys\NCC.Extend.Entitys.csproj" />
  15 + </ItemGroup>
  16 + <ItemGroup>
  17 + <PackageReference Include="EPPlus" Version="6.2.10" />
  18 + </ItemGroup>
24 </Project> 19 </Project>
金三角业绩统计接口说明.md 0 → 100644
  1 +# 金三角业绩统计接口说明
  2 +
  3 +## 接口概述
  4 +新增了金三角业绩统计查询接口,根据金三角成员状态进行不同的统计方式。
  5 +
  6 +## 接口地址
  7 +```
  8 +GET /api/Extend/LqYcsdJsj/GetJsjPerformance
  9 +```
  10 +
  11 +## 功能说明
  12 +根据金三角成员状态进行不同的统计方式:
  13 +1. **活跃成员**:业绩计入金三角总业绩
  14 +2. **非活跃成员**:按单人业绩统计,金三角名称为"门店名+姓名"
  15 +
  16 +## 请求参数
  17 +| 参数名 | 类型 | 必填 | 说明 |
  18 +|--------|------|------|------|
  19 +| startMonth | string | 否 | 开始月份,格式:yyyyMM |
  20 +| endMonth | string | 否 | 结束月份,格式:yyyyMM |
  21 +| jsjId | string | 否 | 金三角ID,用于查询特定金三角 |
  22 +| storeId | string | 否 | 门店ID,用于查询特定门店 |
  23 +
  24 +## 响应参数
  25 +| 字段名 | 类型 | 说明 |
  26 +|--------|------|------|
  27 +| JsjId | string | 金三角ID(非活跃成员时为用户ID) |
  28 +| JsjName | string | 金三角名称(非活跃成员时为"门店名+姓名") |
  29 +| Month | string | 月份(格式:yyyyMM) |
  30 +| StoreId | string | 门店ID |
  31 +| StoreName | string | 门店名称 |
  32 +| OrderCount | int | 订单数量 |
  33 +| TotalPerformance | decimal | 总业绩 |
  34 +| LastOrderDate | DateTime? | 最后订单日期 |
  35 +| FirstOrderDate | DateTime? | 首次订单日期 |
  36 +| StatisticsType | string | 统计类型(ACTIVE-活跃金三角业绩,INACTIVE-单人业绩) |
  37 +| MemberName | string | 成员姓名(仅单人业绩时使用) |
  38 +
  39 +## 示例请求
  40 +```
  41 +GET /api/Extend/LqYcsdJsj/GetJsjPerformance?startMonth=202401&endMonth=202412
  42 +```
  43 +
  44 +## 示例响应
  45 +```json
  46 +{
  47 + "code": 200,
  48 + "msg": "操作成功",
  49 + "data": [
  50 + {
  51 + "jsjId": "123456789",
  52 + "jsjName": "金三角A组",
  53 + "month": "202412",
  54 + "storeId": "store001",
  55 + "storeName": "绿纤川音店",
  56 + "orderCount": 15,
  57 + "totalPerformance": 50000.00,
  58 + "lastOrderDate": "2024-12-15T14:30:00",
  59 + "firstOrderDate": "2024-12-01T09:00:00",
  60 + "statisticsType": "ACTIVE",
  61 + "memberName": null
  62 + },
  63 + {
  64 + "jsjId": "987654321",
  65 + "jsjName": "绿纤川音店-张三",
  66 + "month": "202412",
  67 + "storeId": "store001",
  68 + "storeName": "绿纤川音店",
  69 + "orderCount": 8,
  70 + "totalPerformance": 25000.00,
  71 + "lastOrderDate": "2024-12-14T16:20:00",
  72 + "firstOrderDate": "2024-12-02T10:15:00",
  73 + "statisticsType": "INACTIVE",
  74 + "memberName": "张三"
  75 + }
  76 + ]
  77 +}
  78 +```
  79 +
  80 +## 业务逻辑
  81 +1. **活跃成员统计**:
  82 + - 查询状态为"ACTIVE"的金三角成员
  83 + - 将业绩计入金三角总业绩
  84 + - 按金三角分组统计
  85 +
  86 +2. **非活跃成员统计**:
  87 + - 查询状态为"INACTIVE"的金三角成员
  88 + - 按单人业绩统计
  89 + - 金三角名称为"门店名+姓名"格式
  90 +
  91 +3. **数据排序**:
  92 + - 按月份降序(最新的月份在前)
  93 + - 按总业绩降序(业绩高的在前)
  94 +
  95 +## 注意事项
  96 +- 所有查询都是只读操作,不会修改数据库数据
  97 +- 支持按月统计,可以指定月份范围
  98 +- 支持按金三角ID和门店ID进行筛选
  99 +- 返回结果包含统计类型标识,便于前端区分处理